public String generateFrom(final Collection colGeral) throws Exception {
    final ObjetoNegocioDao objetoNegocioDao = new ObjetoNegocioDao();
    final Map map = new HashMap<>();

    if (colGeral != null) {
      for (final Iterator it = colGeral.iterator(); it.hasNext(); ) {
        final CamposObjetoNegocioDTO camposObjetoNegocioDTO = (CamposObjetoNegocioDTO) it.next();
        ObjetoNegocioDTO objetoNegocioDTO = new ObjetoNegocioDTO();

        objetoNegocioDTO.setIdObjetoNegocio(camposObjetoNegocioDTO.getIdObjetoNegocio());
        objetoNegocioDTO = (ObjetoNegocioDTO) objetoNegocioDao.restore(objetoNegocioDTO);

        if (objetoNegocioDTO != null) {
          if (!map.containsKey(objetoNegocioDTO.getNomeTabelaDB())) {
            map.put(objetoNegocioDTO.getNomeTabelaDB(), objetoNegocioDTO.getNomeTabelaDB());
          }
        }
      }
    }

    final Set set = map.entrySet();
    final Iterator i = set.iterator();

    String fromSql = "";
    while (i.hasNext()) {
      final Map.Entry me = (Map.Entry) i.next();
      if (!fromSql.equalsIgnoreCase("")) {
        fromSql += ",";
      }
      fromSql += me.getKey();
    }

    return fromSql;
  }
  private String generateFields(final Collection colPresentation) throws Exception {
    final ObjetoNegocioDao objetoNegocioDao = new ObjetoNegocioDao();
    String sqlFields = "";
    if (colPresentation != null) {
      int i = 1;
      for (final Iterator it = colPresentation.iterator(); it.hasNext(); ) {
        final GrupoVisaoCamposNegocioDTO grupoVisaoCamposNegocioDTO =
            (GrupoVisaoCamposNegocioDTO) it.next();
        final CamposObjetoNegocioDTO camposObjetoNegocioDTO =
            grupoVisaoCamposNegocioDTO.getCamposObjetoNegocioDto();
        ObjetoNegocioDTO objetoNegocioDTO = new ObjetoNegocioDTO();

        objetoNegocioDTO.setIdObjetoNegocio(camposObjetoNegocioDTO.getIdObjetoNegocio());
        objetoNegocioDTO = (ObjetoNegocioDTO) objetoNegocioDao.restore(objetoNegocioDTO);

        if (objetoNegocioDTO != null) {
          if (!sqlFields.equalsIgnoreCase("")) {
            sqlFields += ", ";
          }
          sqlFields +=
              objetoNegocioDTO.getNomeTabelaDB()
                  + "."
                  + camposObjetoNegocioDTO.getNomeDB()
                  + " Fld_"
                  + i;
        }
        i++;
      }
    }
    return sqlFields;
  }
  private String generateFilter(final Collection colFilter) throws Exception {
    final ObjetoNegocioDao objetoNegocioDao = new ObjetoNegocioDao();
    String sqlFilter = "";
    if (colFilter != null) {
      for (final Iterator it = colFilter.iterator(); it.hasNext(); ) {
        final GrupoVisaoCamposNegocioDTO grupoVisaoCamposNegocioDTO =
            (GrupoVisaoCamposNegocioDTO) it.next();
        final CamposObjetoNegocioDTO camposObjetoNegocioDTO =
            grupoVisaoCamposNegocioDTO.getCamposObjetoNegocioDto();
        ObjetoNegocioDTO objetoNegocioDTO = new ObjetoNegocioDTO();

        objetoNegocioDTO.setIdObjetoNegocio(camposObjetoNegocioDTO.getIdObjetoNegocio());
        objetoNegocioDTO = (ObjetoNegocioDTO) objetoNegocioDao.restore(objetoNegocioDTO);

        if (objetoNegocioDTO != null) {
          if (!sqlFilter.equalsIgnoreCase("")) {
            sqlFilter += " AND ";
          }
          String pref = "";
          String suf = "";
          String comp = "=";
          String value = "" + camposObjetoNegocioDTO.getValue();
          if (MetaUtil.isStringType(camposObjetoNegocioDTO.getTipoDB())) {
            pref = "'%";
            suf = "%'";
            comp = "LIKE";
          } else {
            if (MetaUtil.isNumericType(camposObjetoNegocioDTO.getTipoDB())) {
              value = this.getNumber(value);
            }
          }
          sqlFilter +=
              objetoNegocioDTO.getNomeTabelaDB()
                  + "."
                  + camposObjetoNegocioDTO.getNomeDB()
                  + " "
                  + comp
                  + " "
                  + pref
                  + value
                  + suf;
        }
      }
    }
    return sqlFilter;
  }
  private String generateFromWithRelatios(
      final Collection colPresentation, final Collection colFilter) throws Exception {
    final ObjetoNegocioDao objetoNegocioDao = new ObjetoNegocioDao();
    final HashMap map = new HashMap<>();

    final Collection colGeral = new ArrayList<>();
    if (colPresentation != null) {
      colGeral.addAll(colPresentation);
    }
    if (colFilter != null) {
      colGeral.addAll(colFilter);
    }

    if (colGeral != null) {
      for (final Iterator it = colGeral.iterator(); it.hasNext(); ) {
        final GrupoVisaoCamposNegocioDTO grupoVisaoCamposNegocioDTO =
            (GrupoVisaoCamposNegocioDTO) it.next();
        final CamposObjetoNegocioDTO camposObjetoNegocioDTO =
            grupoVisaoCamposNegocioDTO.getCamposObjetoNegocioDto();
        ObjetoNegocioDTO objetoNegocioDTO = new ObjetoNegocioDTO();

        objetoNegocioDTO.setIdObjetoNegocio(camposObjetoNegocioDTO.getIdObjetoNegocio());
        objetoNegocioDTO = (ObjetoNegocioDTO) objetoNegocioDao.restore(objetoNegocioDTO);

        if (objetoNegocioDTO != null) {
          if (!map.containsKey(objetoNegocioDTO.getNomeTabelaDB())) {
            map.put(objetoNegocioDTO.getNomeTabelaDB(), objetoNegocioDTO.getNomeTabelaDB());
          }
        }
      }
    }

    final Set set = map.entrySet();
    final Iterator i = set.iterator();

    String fromSql = "";
    while (i.hasNext()) {
      final Map.Entry me = (Map.Entry) i.next();
      if (!fromSql.equalsIgnoreCase("")) {
        fromSql += ",";
      }
      fromSql += me.getKey();
    }

    return fromSql;
  }
  @Override
  public boolean isPKExists(final Collection colCamposPK, final Map hashValores) throws Exception {
    final ObjetoNegocioDao objetoNegocioDao = new ObjetoNegocioDao();
    String sql = "SELECT ";
    String sqlFields = "";
    String sqlFilter = "";
    int i = 1;
    if (colCamposPK == null || colCamposPK.size() == 0) {
      return false;
    }
    for (final Iterator it = colCamposPK.iterator(); it.hasNext(); ) {
      final CamposObjetoNegocioDTO camposObjetoNegocioDTO = (CamposObjetoNegocioDTO) it.next();
      ObjetoNegocioDTO objetoNegocioDTO = new ObjetoNegocioDTO();

      objetoNegocioDTO.setIdObjetoNegocio(camposObjetoNegocioDTO.getIdObjetoNegocio());
      objetoNegocioDTO = (ObjetoNegocioDTO) objetoNegocioDao.restore(objetoNegocioDTO);

      if (objetoNegocioDTO != null) {
        if (!sqlFields.equalsIgnoreCase("")) {
          sqlFields += ", ";
        }
        sqlFields +=
            objetoNegocioDTO.getNomeTabelaDB()
                + "."
                + camposObjetoNegocioDTO.getNomeDB()
                + " Val_"
                + i;
      }
      if (!sqlFilter.equalsIgnoreCase("")) {
        sqlFilter += " AND ";
      }
      String pref = "";
      String suf = "";
      final String comp = "=";
      if (MetaUtil.isStringType(camposObjetoNegocioDTO.getTipoDB().trim())) {
        pref = "'";
        suf = "'";
      }
      String strVal = (String) hashValores.get(camposObjetoNegocioDTO.getNomeDB().toUpperCase());
      if (strVal != null) {
        if (strVal.trim().equalsIgnoreCase("")) {
          // Se nao existir valor para a PK, eh que nao existe!
          return false;
        }
        if (MetaUtil.isNumericType(camposObjetoNegocioDTO.getTipoDB().trim())) {
          final int x = strVal.indexOf("["); // Vai ate este ponto, pois o codigo fica entre [x]
          if (x > -1) {
            strVal = strVal.substring(x);
          }
          strVal = UtilStrings.apenasNumeros(strVal);
        }
        strVal = strVal.replaceAll(",00", "");
        strVal = strVal.replaceAll("\\,", ".");
        sqlFilter +=
            objetoNegocioDTO.getNomeTabelaDB()
                + "."
                + camposObjetoNegocioDTO.getNomeDB()
                + " "
                + comp
                + " "
                + pref
                + strVal
                + suf;
      } else {
        // Se nao existir valor para a PK, eh que nao existe!
        return false;
      }
      i++;
    }

    sql += sqlFields + " FROM " + this.generateFrom(colCamposPK) + " WHERE " + sqlFilter;

    final Collection colRet = this.getDao().execSQL(sql, null);
    if (colRet == null) {
      return false;
    }
    if (colRet.size() > 0) {
      return true;
    }
    return false;
  }