Package ecar.dao

Source Code of ecar.dao.RegDemandaDao

package ecar.dao;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.math.BigDecimal;
import java.sql.Timestamp;
import java.text.DecimalFormat;
import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Date;
import java.util.Enumeration;
import java.util.GregorianCalendar;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.hibernate.Criteria;
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Transaction;
import org.hibernate.criterion.Restrictions;

import comum.database.Dao;
import comum.util.ConstantesECAR;
import comum.util.Data;
import comum.util.FileUpload;
import comum.util.Pagina;
import comum.util.Util;

import ecar.exception.ECARException;
import ecar.login.SegurancaECAR;
import ecar.pojo.AtributoDemandaAtbdem;
import ecar.pojo.ConfiguracaoCfg;
import ecar.pojo.DemAtributoDema;
import ecar.pojo.DemandasGrpAcesso;
import ecar.pojo.EntidadeAtributoEnta;
import ecar.pojo.EntidadeEnt;
import ecar.pojo.LocalItemLit;
import ecar.pojo.ObjetoDemanda;
import ecar.pojo.PaiFilho;
import ecar.pojo.PrioridadePrior;
import ecar.pojo.RegApontamentoRegda;
import ecar.pojo.RegDemandaAnexoRegdan;
import ecar.pojo.RegDemandaRegd;
import ecar.pojo.SisAtributoSatb;
import ecar.pojo.SisGrupoAtributoSga;
import ecar.pojo.SitDemandaSitd;
import ecar.pojo.SituacaoSit;
import ecar.pojo.UsuarioAtributoUsua;
import ecar.pojo.UsuarioUsu;
import ecar.pojo.VisaoAtributoDemanda;
import ecar.pojo.VisaoDemandasVisDem;
import ecar.taglib.util.Input;
import ecar.util.Dominios;

/**
* Classe de manipula��o de objetos da classe AtributoAtt.
*
* @author CodeGenerator - Esta classe foi gerada automaticamente
* @since 1.0
* @version 1.0, Fri Jan 27 07:54:28 BRST 2006
*
*/
public class RegDemandaDao extends Dao {
  /**
   * Construtor. Chama o Session factory do Hibernate
         *
         * @param request
         */
  public RegDemandaDao(HttpServletRequest request) {
    super();
    this.request = request;
  }
 
  /**
   * Seta os valores do form no objeto RegDemandaRegd.
   * @param regDemanda
   * @param request
   * @throws NumberFormatException
   * @throws ECARException
   */
  public void setRegDemanda(RegDemandaRegd regDemanda, HttpServletRequest request)
        throws NumberFormatException, ECARException {
   
    //Usado o request.getParameter para verificar se o campo foi configurado para
    //ser apresentado na vis�o
    //S� seta o valor caso esteja na tela, caso contr�rio continua a informa��o original
    if (request.getParameter("dataLimiteRegd") != null){
      regDemanda.setDataLimiteRegd(Pagina.getParamDataBanco(request, "dataLimiteRegd"));
    }
   
    if (request.getParameter("descricaoRegd") != null){
      regDemanda.setDescricaoRegd(Util.normalizaQuebraDeLinha(Pagina.getParamStr(request, "descricaoRegd").trim()));
    }
   
    if (request.getParameter("observacaoRegd") != null){
      regDemanda.setObservacaoRegd(Util.normalizaQuebraDeLinha(Pagina.getParamStr(request, "observacaoRegd").trim()));
    }
   
    if (request.getParameter("numeroDocOrigemRegd") != null){
      regDemanda.setNumeroDocOrigemRegd(Integer.valueOf(Pagina.getParamInt(request, "numeroDocOrigemRegd")));
    }
     
    if (request.getParameter("dataSolicitacaoRegd") != null){
      regDemanda.setDataSolicitacaoRegd(Pagina.getParamDataBanco(request, "dataSolicitacaoRegd"));
    }
   
    if (request.getParameter("indAtivoRegd") != null){
      regDemanda.setIndAtivoRegd(Pagina.getParamStr(request, "indAtivoRegd"));
    }
   
    if (request.getParameter("nomeSolicitanteRegd") != null){
      regDemanda.setNomeSolicitanteRegd(Pagina.getParamStr(request, "nomeSolicitanteRegd").trim());
    }
   
    if (request.getParameter("prioridadePrior") != null){
      if (!Pagina.getParamStr(request, "prioridadePrior").equals("")){
        regDemanda.setPrioridadePrior((PrioridadePrior) this.buscar(PrioridadePrior.class, Long.valueOf(Pagina.getParam(request, "prioridadePrior"))));
      } else {
        regDemanda.setPrioridadePrior(null);
      }
    }
   
    if (request.getParameter("sitDemandaSitd") != null){
      if (!Pagina.getParamStr(request, "sitDemandaSitd").equals("")){
        regDemanda.setSitDemandaSitd((SitDemandaSitd) this.buscar(SitDemandaSitd.class, Long.valueOf(Pagina.getParam(request, "sitDemandaSitd"))));
      } else {
        regDemanda.setSitDemandaSitd(null);
      }
    }

    if (request.getParameter("regDemandaRegd") != null){
      if (!Pagina.getParamStr(request, "regDemandaRegd").equals("")){
        regDemanda.setRegDemandaRegd((RegDemandaRegd) this.buscar(RegDemandaRegd.class, Long.valueOf(Pagina.getParam(request, "regDemandaRegd"))));
      } else {
        regDemanda.setRegDemandaRegd(null);
      }
    }
   
    setLocais(regDemanda, request);
    setEntidadeOrgaos(regDemanda, request);
    setEntidades(regDemanda, request);
    setAtributosDemanda(request, regDemanda);
       
  }
 
  /**
   * Seta atributos Demanda
   * @param request
   * @param regDemanda
   * @throws ECARException
   */
  public void setAtributosDemanda(HttpServletRequest request,
      RegDemandaRegd regDemanda) throws ECARException {
   
    regDemanda.setDemAtributoDemas(null);
   
    List lAtributos;
    lAtributos =  new SisGrupoAtributoDao(request).getGruposAtributosCadastro("D");
        Iterator it = lAtributos.iterator();
        while (it.hasNext()) {
            SisGrupoAtributoSga grupoAtributo = (SisGrupoAtributoSga) it.next();          
            if (!"".equals(Pagina.getParamStr(request, "a" + grupoAtributo.getCodSga().toString())) || !"".equals(Pagina.getParamStr(request, "hidden_a" + grupoAtributo.getCodSga().toString()))) {
                DemAtributoDema demandaAtributo = new DemAtributoDema();
                demandaAtributo.setRegDemandaRegd(regDemanda);
                /*
                 * Caso o tipo de campo seja texto considera-se que o Grupo de
                 * Atributos possuir� apenas 1 atributo que o representa.
                 */
                if (SisTipoExibicGrupoDao.TEXT.equals(grupoAtributo.getSisTipoExibicGrupoSteg().getCodSteg().toString())
                     || SisTipoExibicGrupoDao.VALIDACAO.equals(grupoAtributo.getSisTipoExibicGrupoSteg().getCodSteg().toString())
                     || SisTipoExibicGrupoDao.TEXTAREA.equals(grupoAtributo.getSisTipoExibicGrupoSteg().getCodSteg().toString())
                  || SisTipoExibicGrupoDao.IMAGEM.equals(grupoAtributo.getSisTipoExibicGrupoSteg().getCodSteg().toString())) {
                    if (grupoAtributo.getSisAtributoSatbs() != null && grupoAtributo.getSisAtributoSatbs().size() > 0) {
                      if(Pagina.getParamStr(request,"a" + grupoAtributo.getCodSga().toString()) ==null || "".equals(Pagina.getParamStr(request,"a" + grupoAtributo.getCodSga().toString()))){
                        demandaAtributo.setInformacao(Pagina.getParamStr(request,"hidden_a" + grupoAtributo.getCodSga().toString()));
                      } else{
                        demandaAtributo.setInformacao(Pagina.getParamStr(request,"a" + grupoAtributo.getCodSga().toString()));
                      }
                      demandaAtributo.setSisAtributoSatb((SisAtributoSatb) grupoAtributo.getSisAtributoSatbs().iterator().next());
                      demandaAtributo.setDataInclusao(Data.getDataAtual());
                        if (regDemanda.getDemAtributoDemas() == null)
                          regDemanda.setDemAtributoDemas(new HashSet());
                        if (regDemanda.getDemAtributoDemas()!=null && !regDemanda.getDemAtributoDemas().contains(demandaAtributo)) {
                            regDemanda.getDemAtributoDemas().add(demandaAtributo);                         
                        }

                        String pathRaiz = request.getContextPath();
                       
                        // tratamento imagem
              String caminhoAuxiliarImagem = Pagina.getParamStr(request, "hidImagem" + "a"
                  + grupoAtributo.getCodSga().toString());
              if (caminhoAuxiliarImagem!=null && caminhoAuxiliarImagem.length()>0) {
               
                String chave = demandaAtributo.getInformacao();
                chave = chave.substring(chave.indexOf("RemoteFile=")+ "RemoteFile=".length());
                            UsuarioUsu usuario = ((ecar.login.SegurancaECAR)request.getSession().getAttribute("seguranca")).getUsuario();
                            if(usuario.getMapArquivosAtuaisUsuarios().containsKey(chave)){
//                              demandaAtributo.setInformacao(usuario.getMapArquivosAtuaisUsuarios().get(chave));
                             
                              caminhoAuxiliarImagem = usuario.getMapArquivosAtuaisUsuarios().get(chave);
                              caminhoAuxiliarImagem = pathRaiz +"/DownloadFile?RemoteFile=" + caminhoAuxiliarImagem;
                            }                             
//                            else{
                           
                  // salvar a imagem fisicamente que tem o caminho real no campo "a" + codigo de grupo de atributo
                  try {                 
                    String nomeArquivoNovo = FileUpload.salvarArquivoSessaoFisicamente(request, "a" + grupoAtributo.getCodSga().toString(), caminhoAuxiliarImagem);
                    if(nomeArquivoNovo != null && !nomeArquivoNovo.equals(""))
                      demandaAtributo.setInformacao(nomeArquivoNovo);
                  } catch (FileNotFoundException e) {
                    throw new ECARException("erro.arquivoUrl",e, new String[]{caminhoAuxiliarImagem});
                  } catch (Exception e) {
                    throw new ECARException("erro.upload",e, new String[]{caminhoAuxiliarImagem});
                  }
//                            }
              }

                    }
                } else {

                    String[] atributos = request.getParameterValues("a"
                            + grupoAtributo.getCodSga().toString());
                   
                    if(atributos == null || atributos.length == 0){
                      atributos = request.getParameterValues("hidden_a"
                                + grupoAtributo.getCodSga().toString());
                    }
                     
                    for (int i = 0; i < atributos.length; i++) {
                        /*
                         * Tenho que criar novamente o usu�rio atributo sen�o
                         * ele n�o � adicionado no set no final deste la�o
                         */
                      if(!"".equals(atributos[i])){
                        demandaAtributo = new DemAtributoDema();
                        demandaAtributo.setRegDemandaRegd(regDemanda);
                        demandaAtributo.setSisAtributoSatb((SisAtributoSatb) super.buscar(SisAtributoSatb.class, Long.valueOf(atributos[i])));
                        demandaAtributo.setDataInclusao(Data.getDataAtual());
                          if (regDemanda.getDemAtributoDemas() == null)
                            regDemanda.setDemAtributoDemas(new HashSet());
                          if (regDemanda.getDemAtributoDemas()!=null && !regDemanda.getDemAtributoDemas().contains(demandaAtributo)) {
                              regDemanda.getDemAtributoDemas().add(demandaAtributo);                         
                          }
                      }
                    }
                }
            }
            /* Foi necess�rio alterar o nome dos campos dos elementos multitexto, adicionando "-codSatb"
             * Assim, ficamos com o nome do campo no seguinte padr�o: "a + codSteg + _ + codSatb" (ex.: a12_38)
             * Isto foi feito visto a diferen�a existente entre um grupo com suporte a 1 campo texto
             * e este, que suporta v�rios campos texto.
             */
            else{
                if (SisTipoExibicGrupoDao.MULTITEXTO.equals(grupoAtributo.getSisTipoExibicGrupoSteg().getCodSteg().toString()))
                {
                  Enumeration lAtrib = request.getParameterNames();
                  while(lAtrib.hasMoreElements())
                  {
                    String atrib = (String)lAtrib.nextElement();
                    if (atrib.lastIndexOf('_') > 0)
                    {
                      String nomeAtrib = atrib.substring(0,atrib.lastIndexOf('_'));
                      String nomeCampo = atrib.substring(atrib.lastIndexOf('_')+1);
                      if ( (nomeAtrib.equals("a"+grupoAtributo.getCodSga().toString())
                             && !"".equals(Pagina.getParamStr(request, atrib))) || (nomeAtrib.equals("hidden_a"+grupoAtributo.getCodSga().toString())
                                     && !"".equals(Pagina.getParamStr(request, atrib))))
                      {
                        DemAtributoDema demandaAtributo = new DemAtributoDema();
                        demandaAtributo.setRegDemandaRegd(regDemanda);
                        demandaAtributo.setInformacao(Pagina.getParamStr(request, atrib));
                        demandaAtributo.setSisAtributoSatb((SisAtributoSatb) super.buscar(SisAtributoSatb.class, Long.valueOf(nomeCampo)));
                        demandaAtributo.setDataInclusao(Data.getDataAtual());
                                if (regDemanda.getDemAtributoDemas() == null)
                                  regDemanda.setDemAtributoDemas(new HashSet());
                                if (regDemanda.getDemAtributoDemas()!=null && !regDemanda.getDemAtributoDemas().contains(demandaAtributo)) {
                                    regDemanda.getDemAtributoDemas().add(demandaAtributo);                         
                                }
                      }
                    }
                  }
                }           
            }
        }
    }
 
 
  /**
   * Seta a lista de locais em RegDemandaRgd
   * @param regDemanda
   * @param request
   * @throws ECARException
   */
  public void setLocais (RegDemandaRegd regDemanda, HttpServletRequest request)
        throws ECARException {
    int numLocais = -1;
    if(request.getParameter("contLocal")!=null){
      numLocais = Integer.parseInt(request.getParameter("contLocal"));
      regDemanda.setLocalDemandaLdems(new HashSet());
    }   
    if (numLocais > 0){
      for (int i = 1; i <= numLocais; i++) {
        if ("S".equals(Pagina.getParamStr(request, "adicionaLocal" + i))) {
          LocalItemLit local = new LocalItemLit();
          local = (LocalItemLit) super
              .buscar(LocalItemLit.class, Long.valueOf(Pagina
                .getParamStr(request, "codLit"+ i)));
          if (regDemanda.getLocalDemandaLdems()!=null && !regDemanda.getLocalDemandaLdems().contains(local)) {
            regDemanda.getLocalDemandaLdems().add(local);           
          }
        }
      }
    }
   
  }
 
  /**
   * Seta a lista de entidades em RegDemandaRgd
   * @param regDemanda
   * @param request
   * @throws ECARException
   */
  public void setEntidades (RegDemandaRegd regDemanda, HttpServletRequest request)
        throws ECARException {
    int numEntidades = -1;
    if(request.getParameter("contEntidade")!=null){
      numEntidades = Integer.parseInt(request.getParameter("contEntidade"));
      regDemanda.setEntidadeDemandaEntds(new HashSet());
    }
    if (numEntidades > 0){
      for (int i = 1; i <= numEntidades; i++) {
        if ("S".equals(Pagina.getParamStr(request, "adicionaEntidade" + i))) {
          EntidadeEnt entidade = new EntidadeEnt();
          entidade = (EntidadeEnt) super.buscar(EntidadeEnt.class,
                Long.valueOf(Pagina.getParamStr(request, "codEnt"+ i)));
          if (regDemanda.getEntidadeDemandaEntds()!=null && !regDemanda.getEntidadeDemandaEntds().contains(entidade)) {
            regDemanda.getEntidadeDemandaEntds().add(entidade);
          }
        }
      }
    }
  }
 
  /**
   * Seta a lista de org�os (que tamb�m s�o entidades) em RegDemandaRgd
   * @param regDemanda
   * @param request
   * @throws ECARException
   */
  public void setEntidadeOrgaos (RegDemandaRegd regDemanda, HttpServletRequest request)
        throws ECARException {
    int numEntidadeOrgaos = -1;
    if(request.getParameter("contEntidadeOrgao")!=null){
      numEntidadeOrgaos = Integer.parseInt(request.getParameter("contEntidadeOrgao"));
      regDemanda.setEntidadeOrgaoDemandaEntorgds(new HashSet());
    }
    if (numEntidadeOrgaos > 0){
      for (int i = 1; i <= numEntidadeOrgaos; i++) {
        if ("S".equals(Pagina.getParamStr(request, "adicionaEntidadeOrgao" + i))) {
          EntidadeEnt entidadeOrgao = new EntidadeEnt();
          entidadeOrgao = (EntidadeEnt) super.buscar(EntidadeEnt.class,
                Long.valueOf(Pagina.getParamStr(request, "codEntOrg"+ i)));
          if (regDemanda.getEntidadeOrgaoDemandaEntorgds()!=null && !regDemanda.getEntidadeOrgaoDemandaEntorgds().contains(entidadeOrgao))
            regDemanda.getEntidadeOrgaoDemandaEntorgds().add(entidadeOrgao);
        }
      }
    }
   
  }
 
  /**
   * Verifica a permiss�o do usu�rio logado para realizar altera��o
   * e/ou classifica��o no RegDemandaRegd.
   * @param regDemanda
   * @param request
   * @return
   */
  public boolean validaUsuarioAltExc (RegDemandaRegd regDemanda, HttpServletRequest request) {
    HttpSession session = request.getSession();
    boolean retorno = false;

    try{
      DemandasGrpAcessoDao demandasGrpAcessoDao = new DemandasGrpAcessoDao();
      DemandasGrpAcesso demandasGrpAcesso = null;
      SegurancaECAR seguranca = ((ecar.login.SegurancaECAR) session.getAttribute("seguranca"));     
       
      if(seguranca != null){
        Iterator gruposAcessoIt = seguranca.getGruposAcesso().iterator();
        while (gruposAcessoIt.hasNext()) {
          SisAtributoSatb grpAcesso = (SisAtributoSatb)gruposAcessoIt.next();
          demandasGrpAcesso = (DemandasGrpAcesso) demandasGrpAcessoDao.getDemandasGrpAcesso(grpAcesso);
          if(demandasGrpAcesso != null && demandasGrpAcesso.getAcessoDemanda().equals(Dominios.SIM)) {
            break;
          } else {
            demandasGrpAcesso = null;
          }
        }
        // se � administrador de demandas
        if(demandasGrpAcesso != null){
          retorno = true;
        }
        // se n�o � administrador de demandas,
        // verifica se a demanda foi cadastrada por algum usuario que perten�a a seu grupo de acesso
        else {
          Set gruposAcessoUsuarioLogado = seguranca.getGruposAcesso();
          Iterator gruposAcessoUsuarioInclusaoIt;
          gruposAcessoUsuarioInclusaoIt = regDemanda.getUsuarioUsuByCodUsuInclusaoRegd().getUsuarioAtributoUsuas().iterator();                   
          while (gruposAcessoUsuarioInclusaoIt.hasNext()) {
            SisAtributoSatb grpAcesso = ((UsuarioAtributoUsua) gruposAcessoUsuarioInclusaoIt.next()).getSisAtributoSatb();
            if(gruposAcessoUsuarioLogado.contains(grpAcesso)){
              retorno = true;
              break;
            }
          }         
        }             
      }
     
    } catch (Exception e) {
      // N�o precisa levantar exce��o aqui.
    }       
   
    return retorno;
  }
 
  /**
   * Salva
   *
   * @param regDemanda
   * @throws ECARException
   */
  public void salvar(RegDemandaRegd regDemanda) throws ECARException {
   
    regDemanda.setUsuarioUsuByCodUsuInclusaoRegd(((ecar.login.SegurancaECAR) request.getSession().getAttribute("seguranca")).getUsuario());
    regDemanda.setDataInclusaoRegd(Data.getDataAtual());
    regDemanda.setDataSituacaoRegd(Data.getDataAtual());
    if (regDemanda.getSitDemandaSitd() == null){
      //setar a situacao
      SitDemandaSitd situacao = new SitDemandaSitd();
      situacao.setIndPrimeiraSituacaoSitd("S");
      SitDemandaDao situacaoDao = new SitDemandaDao(request);
      List listaSit = situacaoDao.pesquisar(situacao, new String[] {"codSitd", "asc"});
     
      if (listaSit != null && listaSit.size() > 0) {
        regDemanda.setSitDemandaSitd((SitDemandaSitd) listaSit.iterator().next());
      } else {
        throw new ECARException("registroDemanda.inclusao.erro.sitDemandaSitd");
      }
    }
   
    List filhos = new ArrayList();
    if (regDemanda.getDemAtributoDemas() != null)
      filhos.addAll(regDemanda.getDemAtributoDemas());
   
    super.salvar(regDemanda, filhos);
    //super.salvar(regDemanda);
   
 
  /**
   * Alterar RegDemandaRegd
   * @param regDemanda
   * @param request
   * @throws Exception
   */
  public void alterar(RegDemandaRegd regDemanda, HttpServletRequest request)
        throws Exception {
    Transaction tx = null;
    Long codVisao = ((VisaoDemandasVisDem)request.getSession().getAttribute(VisaoDemandasVisDem.VISAO_SELECIONADA)).getCodVisao();
    AtributoDemandaDao atributoDemandaDao = new AtributoDemandaDao(request);
    try {
      List atributosLivresVisao = atributoDemandaDao.getAtributosDemandaVisaoAtivosOrdenadosPorSequenciaTelaCampo(codVisao);
      List demandaAtributoNaoConfiguradosVisao = new ArrayList();
      List objetos = new ArrayList();
      super.inicializarLogBean();
      tx = session.beginTransaction();
     
      if (regDemanda.getDemAtributoDemas() != null) {
        Iterator itAtt = regDemanda.getDemAtributoDemas().iterator();
        while (itAtt.hasNext()) {
          DemAtributoDema demandaAtributo = (DemAtributoDema) itAtt.next();
          Iterator itAtributosLivresVisao = atributosLivresVisao.iterator();
          boolean achouAtributoLivre = false;
          while (itAtributosLivresVisao.hasNext()){
            AtributoDemandaAtbdem atributoDemandaAtbdem = (AtributoDemandaAtbdem) itAtributosLivresVisao.next();
            if (atributoDemandaAtbdem.getSisGrupoAtributoSga() != null){
              if (atributoDemandaAtbdem.getSisGrupoAtributoSga().equals(demandaAtributo.getSisAtributoSatb().getSisGrupoAtributoSga())){
                achouAtributoLivre = true;
                break;
              }
            }
          }
          if (!achouAtributoLivre){
            demandaAtributoNaoConfiguradosVisao.add(demandaAtributo);
          }
         
                    if(demandaAtributo.getSisAtributoSatb().getSisGrupoAtributoSga().getSisTipoExibicGrupoSteg().getCodSteg() == Input.IMAGEM){
                     
                      String nomeCampo = request.getParameter("a" + demandaAtributo.getSisAtributoSatb().getSisGrupoAtributoSga().getCodSga().toString());
                     
                      if (nomeCampo != null && nomeCampo.equals("")){
                       
                  String fullFile = demandaAtributo.getInformacao();
                 
                  if (fullFile.lastIndexOf("=") != -1)    
                    fullFile = fullFile.substring(fullFile.lastIndexOf("=") + 1);
               
                  File f = new File(fullFile);
                  if( f.exists() )
                    FileUpload.apagarArquivo(fullFile);
                      }
                    }
         
          session.delete(demandaAtributo);
          objetos.add(demandaAtributo);
        }
      }
     
      // setar valores vindos do request
      this.setRegDemanda(regDemanda, request);
     
      if (!demandaAtributoNaoConfiguradosVisao.isEmpty()){
        if (regDemanda.getDemAtributoDemas() == null){
          regDemanda.setDemAtributoDemas(new HashSet());
        }
       
        regDemanda.getDemAtributoDemas().addAll(demandaAtributoNaoConfiguradosVisao);
      }
           
      // guarda a lista de demandaAtributo vindo do request
      List filhos = new ArrayList();
      if (regDemanda.getDemAtributoDemas() != null)
        filhos.addAll(regDemanda.getDemAtributoDemas());
     
      // coloca a data da altera��o
      regDemanda.setDataAlteracaoRegd(Data.getDataAtual());
      regDemanda.setUsuarioUsuByCodUsuAlteracaoRegd(((ecar.login.SegurancaECAR) request.getSession().getAttribute("seguranca")).getUsuario());
      // salva regDemanda
      session.update(regDemanda);
      objetos.add(regDemanda);
     
      // salva a lista de demandaAtributo
      Iterator it = filhos.iterator();
            while(it.hasNext()){               
        PaiFilho object = (PaiFilho) it.next();
        object.atribuirPKPai();
        //salva os filhos
        session.save(object);                 
        objetos.add(object);
            }
   
      tx.commit();
   
      if (super.logBean != null) {
        super.logBean.setCodigoTransacao(Data.getHoraAtual(false));
        super.logBean.setOperacao("INC_ALT_EXC");
        Iterator itObj = objetos.iterator();
   
        while (itObj.hasNext()) {
          super.logBean.setObj(itObj.next());
          super.loggerAuditoria.info(logBean.toString());
        }
      }
   
    } catch (HibernateException e) {
      if (tx != null)
        try {
          tx.rollback();
        } catch (HibernateException r) {
          this.logger.error(r);
          throw new ECARException("erro.hibernateException");
        }
      this.logger.error(e);
      throw new ECARException("erro.hibernateException");
    } catch (ECARException e) {
      this.logger.error(e);
      if (tx != null)
        try {
          tx.rollback();
        } catch (HibernateException r) {
          this.logger.error(r);
          throw new ECARException("erro.hibernateException");
        }
      throw e;
    }
  }

  /**
   * Ordena a lista conforme os par�metros passados.
   * Esse m�todo � mais gen�rico que o "classificarOrdenacao()" e
   * pode ser aplicado a todos atributos da demanda.
   *     codCampo : c�digo do campo(chave prim�ria do BD)
   *     ordemCampo : asc ou desc.
   * @param codCampo - Campo pelo qual a lista ser� ordenada.
   * @param ordemCampo - Ordem pela qual a lista ser� ordenada.
   * @param lista - lista de demandas que ser� ordenada.
   */
  @SuppressWarnings({"unchecked", "empty-statement"})
  public void ordenacaoDemandas (Long codCampo, String ordemCampo, List lista) {
   
    try {
      AtributoDemandaDao atributoDemandaDao = new AtributoDemandaDao(null);
     
      final AtributoDemandaAtbdem atributoDemanda = (AtributoDemandaAtbdem) atributoDemandaDao.buscar(AtributoDemandaAtbdem.class, codCampo);;      
      final String ordenacaoCampo = ordemCampo;
     
      if(lista != null && lista.size()>1 && atributoDemanda!=null){   
        Collections.sort(lista,
                    new Comparator() {
                    public int compare(Object o1, Object o2){                                                      
                      //Por default retorna que s�o iguais "retorno=0"
                      int retorno=0;
                      RegDemandaRegd demanda1 = (RegDemandaRegd) o1;
                      RegDemandaRegd demanda2 = (RegDemandaRegd) o2;
                      try{                       
                       
                        //Caso sejam num�ros fixos: "codRegd" e "numeroDocOrigemRegd"
                        if(atributoDemanda.iGetNome().equals("codRegd") || atributoDemanda.iGetNome().equals("numeroDocOrigemRegd")){                           
                         
                          String valorStringDemanda1 = atributoDemanda.iGetValor(demanda1);
                          String valorStringDemanda2 = atributoDemanda.iGetValor(demanda2);
                         
                          if(valorStringDemanda1.equals("") && valorStringDemanda2.equals("")){
                            retorno = 0;
                          }
                          else if(!valorStringDemanda1.equals("") && valorStringDemanda2.equals("")){
                            retorno = 1;
                          }
                          else if(valorStringDemanda1.equals("") && !valorStringDemanda2.equals("")){
                            retorno = -1;
                          }                         
                          else{
                            Integer valorInteiroDemanda1 = new Integer(Integer.parseInt(valorStringDemanda1)) ;
                            Integer valorInteiroDemanda2 = new Integer(Integer.parseInt(valorStringDemanda2));
                            retorno = valorInteiroDemanda1.compareTo(valorInteiroDemanda2);                           
                          }
                        }
                       
                        //Caso sejam datas fixas
                        else if(atributoDemanda.iGetNome().equals("dataLimiteRegd") || atributoDemanda.iGetNome().equals("dataSolicitacaoRegd")
                            || atributoDemanda.iGetNome().equals("dataInclusaoRegd") || atributoDemanda.iGetNome().equals("dataAlteracaoRegd")
                            || atributoDemanda.iGetNome().equals("dataSituacaoRegd")){

                         
                          String dataDem1 = atributoDemanda.iGetValor(demanda1);
                          String dataDem2 = atributoDemanda.iGetValor(demanda2);
                         
                          if(dataDem1.equals("") && dataDem2.equals("")){
                            retorno = 0;
                          }
                          else if(!dataDem1.equals("") && dataDem2.equals("")){
                            retorno = 1;
                          }
                          else if(dataDem1.equals("") && !dataDem2.equals("")){
                            retorno = -1;
                          }                         
                          else{
                            //Data no formato dd/mm/aaaa
                            int diaDem1 , mesDem1, anoDem1;
                            diaDem1 = Integer.parseInt(dataDem1.trim().substring(0, 2));
                            mesDem1 = Integer.parseInt(dataDem1.trim().substring(3, 5));
                            anoDem1 = Integer.parseInt(dataDem1.trim().substring(6, 10))
                     
                            int diaDem2, mesDem2, anoDem2;
                            diaDem2 = Integer.parseInt(dataDem2.trim().substring(0, 2));
                            mesDem2 = Integer.parseInt(dataDem2.trim().substring(3, 5));
                            anoDem2 = Integer.parseInt(dataDem2.trim().substring(6, 10))
                           
                            GregorianCalendar valorDataDemanda1 = new GregorianCalendar(anoDem1, mesDem1, diaDem1);
                            GregorianCalendar valorDataDemanda2 = new GregorianCalendar(anoDem2, mesDem2, diaDem2);
                           
                            retorno = valorDataDemanda1.compareTo(valorDataDemanda2);                           
                          }
                                                   
                        }

                        //Caso seja atributo livre de valida��o
                        else if(atributoDemanda.iGetGrupoAtributosLivres() != null
                            && atributoDemanda.iGetGrupoAtributosLivres().getSisTipoExibicGrupoSteg()
                            .getCodSteg().equals(new Long(Input.VALIDACAO))){
                         
                          //Busca o valor da demanda1
                          Iterator itRegDem1 =  demanda1.getDemAtributoDemas().iterator();
                          String informacaoDemanda1Atbdem = "";
                          DemAtributoDema demAtributoDemanda1Dema = null;
                      while (itRegDem1.hasNext()) {
                        demAtributoDemanda1Dema = (DemAtributoDema) itRegDem1.next();                         
                        if (demAtributoDemanda1Dema.getSisAtributoSatb().getSisGrupoAtributoSga().equals(atributoDemanda.iGetGrupoAtributosLivres())){
                            informacaoDemanda1Atbdem = demAtributoDemanda1Dema.getInformacao();
                            break;
                        }
                        demAtributoDemanda1Dema = null;
                      }

                          //Busca o valor da demanda2
                          Iterator itRegDem2 =  demanda2.getDemAtributoDemas().iterator();
                          String informacaoDemanda2Atbdem = "";
                          DemAtributoDema demAtributoDemanda2Dema = null;
                      while (itRegDem2.hasNext()) {
                        demAtributoDemanda2Dema = (DemAtributoDema) itRegDem2.next();                         
                        if (demAtributoDemanda2Dema.getSisAtributoSatb().getSisGrupoAtributoSga().equals(atributoDemanda.iGetGrupoAtributosLivres())){                            
                            informacaoDemanda2Atbdem = demAtributoDemanda2Dema.getInformacao();
                            break;
                        }
                        demAtributoDemanda2Dema = null;
                      }
                     
                      //Come�a o processo de compara��o da ordena��o
                      if(demAtributoDemanda1Dema==null && demAtributoDemanda2Dema==null){
                        retorno = 0;
                      }                     
                      else if(demAtributoDemanda1Dema!=null && demAtributoDemanda2Dema==null){
                        retorno = 1;
                      }                     
                      else if(demAtributoDemanda1Dema==null && demAtributoDemanda2Dema!=null){
                        retorno = -1;
                      }                     
                      else{
                        if(demAtributoDemanda1Dema.getSisAtributoSatb().getAtribInfCompSatb().equals("dataScript")){
                             
                          //Data no formato dd/mm/aaaa
                              String dataDem1 = informacaoDemanda1Atbdem;
                              int diaDem1 , mesDem1, anoDem1;
                              diaDem1 = Integer.parseInt(dataDem1.trim().substring(0, 2));
                              mesDem1 = Integer.parseInt(dataDem1.trim().substring(3, 5));
                              anoDem1 = Integer.parseInt(dataDem1.trim().substring(6, 10))
                         
                              String dataDem2 = informacaoDemanda2Atbdem;
                              int diaDem2, mesDem2, anoDem2;
                              diaDem2 = Integer.parseInt(dataDem2.trim().substring(0, 2));
                              mesDem2 = Integer.parseInt(dataDem2.trim().substring(3, 5));
                              anoDem2 = Integer.parseInt(dataDem2.trim().substring(6, 10))
                             
                              GregorianCalendar valorDataDemanda1 = new GregorianCalendar(anoDem1, mesDem1, diaDem1);
                              GregorianCalendar valorDataDemanda2 = new GregorianCalendar(anoDem2, mesDem2, diaDem2);
                             
                              retorno = valorDataDemanda1.compareTo(valorDataDemanda2);
                             
                        }
                       
                        else if(demAtributoDemanda1Dema.getSisAtributoSatb().getAtribInfCompSatb().equals("numeroInteiroScript")){
                         
                              Integer valorInteiroDemanda1 = new Integer(Integer.parseInt(informacaoDemanda1Atbdem)) ;
                              Integer valorInteiroDemanda2 = new Integer(Integer.parseInt(informacaoDemanda2Atbdem));
                              retorno = valorInteiroDemanda1.compareTo(valorInteiroDemanda2);
                             
                        }
                       
                        else if(demAtributoDemanda1Dema.getSisAtributoSatb().getAtribInfCompSatb().equals("numeroRealScript")
                            || demAtributoDemanda1Dema.getSisAtributoSatb().getAtribInfCompSatb().equals("valorMonetarioScript")){

                          DecimalFormat dff = (DecimalFormat) DecimalFormat.getInstance();                         
                          Double valorRealDemanda1 = new Double(dff.parse(informacaoDemanda1Atbdem).doubleValue()) ;
                          Double valorRealDemanda2 = new Double(dff.parse(informacaoDemanda2Atbdem).doubleValue());
                              retorno = valorRealDemanda1.compareTo(valorRealDemanda2);
                         
                        }
                                               
                        else{
                          retorno = informacaoDemanda1Atbdem.compareToIgnoreCase(informacaoDemanda2Atbdem);
                        }
                      }
                     
                        }

                        //Caso seja atributo livre diferente de valida��o
                        else if(atributoDemanda.iGetGrupoAtributosLivres() != null){
                     
                          //Busca o valor da demanda1
                          Iterator itRegDem1 =  demanda1.getDemAtributoDemas().iterator();
                          String informacaoDemanda1Atbdem = "";
                      while (itRegDem1.hasNext()) {
                        DemAtributoDema demAtributoDema = (DemAtributoDema) itRegDem1.next();
                       
                        if (demAtributoDema.getSisAtributoSatb().getSisGrupoAtributoSga().equals(atributoDemanda.iGetGrupoAtributosLivres())){
                          if (atributoDemanda.iGetGrupoAtributosLivres().getSisTipoExibicGrupoSteg().getCodSteg().equals(new Long(Input.TEXT)) ||
                            atributoDemanda.iGetGrupoAtributosLivres().getSisTipoExibicGrupoSteg().getCodSteg().equals(new Long(Input.TEXTAREA)) ||
                            atributoDemanda.iGetGrupoAtributosLivres().getSisTipoExibicGrupoSteg().getCodSteg().equals(new Long(Input.MULTITEXTO)) ) {
                          
                            informacaoDemanda1Atbdem = informacaoDemanda1Atbdem + demAtributoDema.getInformacao() "; ";
                         
                          } else if (!atributoDemanda.iGetGrupoAtributosLivres().getSisTipoExibicGrupoSteg().getCodSteg().equals(new Long(Input.IMAGEM))) {
                            //se for do tipo imagem n�o faz nada, deixa em branco.
                            informacaoDemanda1Atbdem = informacaoDemanda1Atbdem + demAtributoDema.getSisAtributoSatb().getDescricaoSatb() "; ";
                          }
                        }
                      }
                      if (informacaoDemanda1Atbdem.length() > 0){
                        informacaoDemanda1Atbdem = informacaoDemanda1Atbdem.substring(0, informacaoDemanda1Atbdem.length() - 2);
                      }                           

                          //Busca o valor da demanda2
                          Iterator itRegDem2 =  demanda2.getDemAtributoDemas().iterator();
                          String informacaoDemanda2Atbdem = "";
                      while (itRegDem2.hasNext()) {
                        DemAtributoDema demAtributoDema = (DemAtributoDema) itRegDem2.next();
                       
                        if (demAtributoDema.getSisAtributoSatb().getSisGrupoAtributoSga().equals(atributoDemanda.iGetGrupoAtributosLivres())){
                          if (atributoDemanda.iGetGrupoAtributosLivres().getSisTipoExibicGrupoSteg().getCodSteg().equals(new Long(Input.TEXT)) ||
                            atributoDemanda.iGetGrupoAtributosLivres().getSisTipoExibicGrupoSteg().getCodSteg().equals(new Long(Input.TEXTAREA)) ||
                            atributoDemanda.iGetGrupoAtributosLivres().getSisTipoExibicGrupoSteg().getCodSteg().equals(new Long(Input.MULTITEXTO)) ) {
                          
                            informacaoDemanda2Atbdem = informacaoDemanda2Atbdem + demAtributoDema.getInformacao() "; ";
                         
                          } else if (!atributoDemanda.iGetGrupoAtributosLivres().getSisTipoExibicGrupoSteg().getCodSteg().equals(new Long(Input.IMAGEM))) {
                            //se for do tipo imagem n�o faz nada, deixa em branco.
                            informacaoDemanda2Atbdem = informacaoDemanda2Atbdem + demAtributoDema.getSisAtributoSatb().getDescricaoSatb() "; ";
                          }
                        }
                      }
                      if (informacaoDemanda2Atbdem.length() > 0){
                        informacaoDemanda2Atbdem = informacaoDemanda2Atbdem.substring(0, informacaoDemanda2Atbdem.length() - 2);
                      }                           

                      //Faz a compara��o String dos valores
                      retorno = informacaoDemanda1Atbdem.compareToIgnoreCase(informacaoDemanda2Atbdem);
                        }
                       
                        //Caso geral
                        else {
                          retorno = atributoDemanda.iGetValor(demanda1).compareToIgnoreCase(atributoDemanda.iGetValor(demanda2));
                        }  
                       
                      } catch (Exception e){
                        //N�o faz nada, deixa o valor como foi setado inicialmente, "zero".
                      }
                                             
                      //Verifica se � crescente ou decrescente
                      if(!ordenacaoCampo.equals("asc")){
                        retorno = - retorno;
                      }
                     
                      return retorno;                     
                }
                 }
          );         
                           
      }           
       
    } catch (Exception e){
      //Em caso de exce��o a lista permanece a mesma!
    }   
  }
 
  /**
   * Classifica e ordena a lista conforme os par�metros passados.
   *     clCampo : descricaoRegd, codRegd, dataSolicitacaoRegd,
   *           entidadeEnt ou sitDemandaSitd.
   *     clOrden : asc ou desc.
   * @param clCampo - Campo pelo qual a lista ser� ordenada.
   * @param clOrdem - Ordem pela qual a lista ser� ordenada.
   * @param lista - lista que ser� ordenada.
   */
  public void classificarOrdenacao (String clCampo, String clOrdem, List lista) {
    //testar cada string para realizar a ordena��o
    if ("descricaoRegd".equals(clCampo)) {
      if ("asc".equals(clOrdem)) {
        Collections.sort(lista,
          new Comparator() {
                public int compare(Object o1, Object o2) {
                    return ( (RegDemandaRegd) o1 ).getDescricaoRegd().compareToIgnoreCase(( (RegDemandaRegd) o2 ).getDescricaoRegd());
                }
            } );
        } else {
          Collections.sort(lista,
          new Comparator() {
                public int compare(Object o1, Object o2) {
                    return -( (RegDemandaRegd) o1 ).getDescricaoRegd().compareToIgnoreCase(( (RegDemandaRegd) o2 ).getDescricaoRegd());
                }
            } );
        }
    }
    if ("codRegd".equals(clCampo)) {
      if ("asc".equals(clOrdem)) {
        Collections.sort(lista,
          new Comparator() {
                public int compare(Object o1, Object o2) {
                    return ( (RegDemandaRegd) o1).getCodRegd().intValue() - ( (RegDemandaRegd) o2).getCodRegd().intValue();
                }
            } );
        } else {
          Collections.sort(lista,
          new Comparator() {
                public int compare(Object o1, Object o2) {
                    return -(( (RegDemandaRegd) o1).getCodRegd().intValue() - ( (RegDemandaRegd) o2).getCodRegd().intValue());
                }
            } );
        }
    }
    if ("dataSolicitacaoRegd".equals(clCampo)) {
      if ("asc".equals(clOrdem)) {
        Collections.sort(lista,
          new Comparator() {
                public int compare(Object o1, Object o2) {
                  RegDemandaRegd regD1 = (RegDemandaRegd) o1;
                  RegDemandaRegd regD2 = (RegDemandaRegd) o2;
                  //Quando a data est� nula, foi utilizado um artif�cio para n�o ocorrer Exception
                  if (regD1.getDataSolicitacaoRegd() != null) {
                    if (regD2.getDataSolicitacaoRegd() != null) {
                      return regD1.getDataSolicitacaoRegd().compareTo( regD2.getDataSolicitacaoRegd() );
                    } else {
                      return "a".compareTo("");
                    }
                  } else {
                    if (regD2.getDataSolicitacaoRegd() != null) {
                      return "".compareTo("a");
                    } else {
                      return "".compareTo("");
                    }
                  }
                }
            } );
        } else {
          Collections.sort(lista,
          new Comparator() {
                public int compare(Object o1, Object o2) {
                  RegDemandaRegd regD1 = (RegDemandaRegd) o1;
                  RegDemandaRegd regD2 = (RegDemandaRegd) o2;
                  //Quando a data est� nula, foi utilizado um artif�cio para n�o ocorrer Exception
                  if (regD1.getDataSolicitacaoRegd() != null) {
                    if (regD2.getDataSolicitacaoRegd() != null) {
                      return -(regD1.getDataSolicitacaoRegd().compareTo( regD2.getDataSolicitacaoRegd() ));
                    } else {
                      return -("a".compareTo(""));
                    }
                  } else {
                    if (regD2.getDataSolicitacaoRegd() != null) {
                      return -("".compareTo("a"));
                    } else {
                      return -("".compareTo(""));
                    }
                  }
                }
            } );
        }
    }
    if ("entidadeEnt".equals(clCampo)) {
      /* Mapeamento com Entidade foi alterado
       * n�o est� sendo feita classifica��o por Entidade.
      if ("asc".equals(clOrdem)) {
        Collections.sort(lista,
          new Comparator() {
                public int compare(Object o1, Object o2) {
                  return ( (RegDemandaRegd) o1 ).getEntidadeEnt().getNomeEnt().compareToIgnoreCase(( (RegDemandaRegd) o2 ).getEntidadeEnt().getNomeEnt());
                }
            } );
        } else {
          Collections.sort(lista,
          new Comparator() {
                public int compare(Object o1, Object o2) {
                  return -( (RegDemandaRegd) o1 ).getEntidadeEnt().getNomeEnt().compareToIgnoreCase(( (RegDemandaRegd) o2 ).getEntidadeEnt().getNomeEnt());
                }
            } );
        }*/
    }
    if ("sitDemandaSitd".equals(clCampo)) {
      if ("asc".equals(clOrdem)) {
        Collections.sort(lista,
          new Comparator() {
                public int compare(Object o1, Object o2) {
                    return ( (RegDemandaRegd) o1 ).getSitDemandaSitd().getDescricaoSitd().compareToIgnoreCase(( (RegDemandaRegd) o2 ).getSitDemandaSitd().getDescricaoSitd());
                }
            } );
        } else {
          Collections.sort(lista,
          new Comparator() {
                public int compare(Object o1, Object o2) {
                    return -( (RegDemandaRegd) o1 ).getSitDemandaSitd().getDescricaoSitd().compareToIgnoreCase(( (RegDemandaRegd) o2 ).getSitDemandaSitd().getDescricaoSitd());
                }
            } );
        }
    }
   
    //evitar problema de lazy
    Iterator itRes = lista.iterator();
    while (itRes.hasNext()) {
      RegDemandaRegd regDemandaResul = (RegDemandaRegd) itRes.next();
      regDemandaResul.getEntidadeDemandaEntds().size();
    }
  }
 
  /**
   * Exclui
   * @param codigosParaExcluir
         * @throws ECARException
         * @throws Exception
   */
  public void excluir(String[] codigosParaExcluir) throws ECARException, Exception {
    ConfiguracaoCfg configura = new ConfiguracaoDao(request).getConfiguracao();
   
    String pathRaiz = configura.getRaizUpload();
    String pathAnexo = configura.getUploadAnexos();
   
    try {
      List exclusao = new ArrayList();
   
          for (int i = 0; i < codigosParaExcluir.length; i++) {
              RegDemandaRegd regDemanda = (RegDemandaRegd) buscar(RegDemandaRegd.class, Long.valueOf(codigosParaExcluir[i]));
             
              if (regDemanda.getRegDemandaRegds() == null || regDemanda.getRegDemandaRegds().size() == 0){
               
                if (regDemanda.getAnexos() != null && regDemanda.getAnexos().size() > 0){
                  Iterator it = regDemanda.getAnexos().iterator();
                  while (it.hasNext()){
                    RegDemandaAnexoRegdan regDemandaAnexoRegdan = (RegDemandaAnexoRegdan) it.next();
                    FileUpload.apagarArquivo(FileUpload.getPathFisicoCompleto(pathRaiz, pathAnexo, regDemandaAnexoRegdan.getSrcAnexo()));
                    exclusao.add(regDemandaAnexoRegdan);
                  }
                  
                }
             
                if (regDemanda.getRegApontamentoRegdas() != null
                      && regDemanda.getRegApontamentoRegdas().size() > 0) {
                  Iterator it = regDemanda.getRegApontamentoRegdas().iterator();
                  while (it.hasNext()) {
                    RegApontamentoRegda regAp = (RegApontamentoRegda) it.next();
                    exclusao.add(regAp);
                  }
                }
               
                if (regDemanda.getDemAtributoDemas() != null) {
                    Iterator itAtb = regDemanda.getDemAtributoDemas().iterator();
                    while (itAtb.hasNext()) {
                      DemAtributoDema demAtrib = (DemAtributoDema) itAtb.next();
                      exclusao.add(demAtrib);
                    }
                }
               
                exclusao.add(regDemanda);
              }
              else{
               
                throw new ECARException("registroDemanda.exclusao.erroDemandaRelacionada");
              }
          }
         
          if (exclusao.size() > 0)
            super.excluir(exclusao);
     
    } catch (ECARException e) {
      this.logger.error(e);
      throw e;
   
    } catch (Exception e) {
      this.logger.error(e);
      throw e;
    }
    }
 

 
  /**
   * Pesquisa RegDemandaRegd
         * @param num_registro
         * @param descricao
         * @param observacao
         * @param num_doc_origem
         * @param request
         * @param usu_sol
         * @param limiteInicial
   * @param limiteFinal
   * @param solicitacaoInicial     
         * @param nome_sigla
         * @param solicitacaoFinal
         * @param codLocais
         * @param codPrior
         * @param codSitd
         * @param codOrg
         * @param entidade
         * @param formasContato
         * @return
         * @throws Exception
   */
  public List pesquisar(long num_registro, String descricao, String observacao, int num_doc_origem, String usu_sol, String nome_sigla,
      Date limiteInicial, Date limiteFinal, Date solicitacaoInicial, Date solicitacaoFinal, String codLocais,
      long codPrior, long codSitd, long codOrg, EntidadeEnt entidade, String formasContato, HttpServletRequest request
        throws Exception {
   
    String join = "";
    String where = "";
   
    List atributosEntidade = new ArrayList();
   
    if ((limiteInicial!=null && limiteFinal!=null) || (solicitacaoInicial!=null && solicitacaoFinal!=null)) {
      where += " where ";
     
      if (limiteInicial != null && limiteFinal != null)
        where += " (i.dataLimiteRegd >= :limiteInicial and i.dataLimiteRegd <= :limiteFinal)";
     
      if (solicitacaoInicial != null && solicitacaoFinal != null){
        if(!" where ".equals(where))
          where += " or ";
       
        where += " (i.dataSolicitacaoRegd >= :solicitacaoInicial and i.dataSolicitacaoRegd <= :solicitacaoInicial)";
      }
    }   
   
    if ((num_registro > 0)||(!"".equals(descricao))||(!"".equals(observacao))||(num_doc_origem > 0)||(!"".equals(usu_sol))||
        (!"".equals(nome_sigla))||(codPrior > 0)||(codSitd > 0)||(codOrg > 0)||
        (entidade.getEntidadeAtributoEntas() != null && entidade.getEntidadeAtributoEntas().size() > 0)) {
     
      if ("".equals(where))  where += " where ";
           
      if (num_registro > 0)
        if(" where ".equals(where))  where += " i.codRegd = :num_registro ";
        else where += " and i.codRegd = :num_registro ";     
      if (!"".equals(descricao))
        if("where".equals(where))  where += " upper( i.descricaoRegd ) like :descricao ";
        else where += " and upper( i.descricaoRegd ) like :descricao ";     
      if (!"".equals(observacao))
        if("where".equals(where))  where += " upper( i.observacaoRegd ) like :observacao ";
        else where += " and upper( i.observacaoRegd ) like :observacao ";     
      if (num_doc_origem > 0)
        if("where".equals(where))  where += " i.numeroDocOrigemRegd = :num_doc_origem ";
        else where += " and i.numeroDocOrigemRegd = :num_doc_origem ";
      if (!"".equals(usu_sol))
        if("where".equals(where))  where += " upper( i.nomeSolicitanteRegd ) like :usu_sol ";
        else where += " and upper( i.nomeSolicitanteRegd ) like :usu_sol ";     
      if (!"".equals(nome_sigla)) {
        join += " join i.entidadeDemandaEntds as entidade ";
        if("where".equals(where)) 
          where += " ( upper( entidade.nomeEnt ) like :nome_sigla or upper( entidade.siglaEnt ) like :nome_sigla )";
        else where += " and ( upper( entidade.nomeEnt ) like :nome_sigla or upper( entidade.siglaEnt ) like :nome_sigla )";
      }   
      if (codPrior > 0)
        if("where".equals(where))  where += " i.prioridadePrior.codPrior = :codPrior ";
        else where += " and i.prioridadePrior.codPrior = :codPrior "
      if (codSitd > 0)
        if("where".equals(where))  where += " i.sitDemandaSitd.codSitd = :codSitd ";
        else where += " and i.sitDemandaSitd.codSitd = :codSitd "
      if (codOrg > 0)
        if(where.equals(" where "))  where += " i.orgaoOrg.codOrg = :codOrg ";
        else where += " and i.orgaoOrg.codOrg = :codOrg "
      if (entidade.getEntidadeAtributoEntas() != null && entidade.getEntidadeAtributoEntas().size() > 0) {
        if ("".equals(nome_sigla)) {
          join += " join i.entidadeDemandaEntds as entidade ";
        }
        join += " join entidade.entidadeAtributoEntas as entAtributo ";
       
        Iterator it = entidade.getEntidadeAtributoEntas().iterator();
        while (it.hasNext()) {
          EntidadeAtributoEnta entAtributo = (EntidadeAtributoEnta) it.next();
          atributosEntidade.add(entAtributo.getSisAtributoSatb().getCodSatb());
        }
       
        if("where".equals(where))  where += " entAtributo.comp_id.codSatb in (:entAtributo) ";
        else where += " and entAtributo.comp_id.codSatb in (:entAtributo) "
      }
    }
   
    Query query = this.getSession().createQuery("select i from RegDemandaRegd i" + join + where);
       
    if (limiteInicial!=null)    query.setDate("limiteInicial", limiteInicial);
    if (limiteFinal!=null)      query.setDate("limiteFinal", limiteFinal);
    if (solicitacaoInicial!=nullquery.setDate("solicitacaoInicial", solicitacaoInicial);
    if (solicitacaoFinal!=null)    query.setDate("solicitacaoFinal", solicitacaoFinal);
   
    if (num_registro > 0)      query.setLong("num_registro", num_registro)
    if (!"".equals(descricao))    query.setString("descricao", "%"+descricao.toUpperCase()+"%");
    if (!"".equals(observacao))    query.setString("observacao", "%"+observacao.toUpperCase()+"%");
    if (num_doc_origem > 0)      query.setInteger("num_doc_origem", num_doc_origem);
    if (!"".equals(usu_sol))    query.setString("usu_sol", "%"+usu_sol.toUpperCase()+"%");
    if (!"".equals(nome_sigla))    query.setString("nome_sigla", "%"+nome_sigla.toUpperCase()+"%");
    if (codPrior > 0)        query.setLong("codPrior", codPrior)
    if (codSitd > 0)        query.setLong("codSitd", codSitd)
    if (codOrg > 0)          query.setLong("codOrg", codOrg);
   
    if (entidade.getEntidadeAtributoEntas() != null && entidade.getEntidadeAtributoEntas().size() > 0) {
      query.setParameterList("entAtributo", atributosEntidade);
    }
       
    List ret = query.list();
     
    List locais = new ArrayList();
    if (!"".equals(codLocais)) locais = new LocalItemDao(request).pesquisarCodLocais(codLocais);
   
    request.getSession().setAttribute("listLocais", locais);
    if ((ret != null)&&(ret.size() > 0)&&(!"".equals(codLocais))) {       
           
      List atributosPesquisa = new ArrayList();
        Iterator itAtbPesquisa = locais.iterator();
            while (itAtbPesquisa.hasNext())
                atributosPesquisa.add(((LocalItemLit) itAtbPesquisa.next()));
     
            Iterator it = ret.iterator();
            while (it.hasNext()) {
                List atributosResultado = new ArrayList();
                Iterator itAtribResultado = ((RegDemandaRegd) it.next()).getLocalDemandaLdems().iterator();
               
                while (itAtribResultado.hasNext())
                  atributosResultado.add((LocalItemLit) itAtribResultado.next());
               
                if (!atributosResultado.containsAll(atributosPesquisa))
                    it.remove();
            }
      }       
    return ret;
  }
 
  /**
   * Pesquisa PopUp Reg Demanda
   * @param regDemanda
         * @param gruposAcesso
         * @param usuario
         * @param visaoDemandasVisDem
         * @return List
   * @throws ECARException
   */
  public List pesquisarPopUpRegDemanda(RegDemandaRegd regDemanda, Set gruposAcesso, UsuarioUsu usuario, List visoesAcesso) throws ECARException {
    try {
      StringBuilder select = new StringBuilder();
      StringBuilder where = new StringBuilder();
      StringBuilder order = new StringBuilder();
     
      boolean bolWhere = false;
     
      DemandasGrpAcessoDao demandasGrpAcessoDao = new DemandasGrpAcessoDao();
      DemandasGrpAcesso demandasGrpAcesso = null;
     
      List<RegDemandaRegd> demandasComAcesso = new ArrayList<RegDemandaRegd>();
      Iterator<VisaoDemandasVisDem> itVisoes = visoesAcesso.iterator();
     
      while (itVisoes.hasNext()) {
       
        VisaoDemandasVisDem visaoDemanda = (VisaoDemandasVisDem) itVisoes.next();           
        List<RegDemandaRegd> listaDemandasComPermissaoVisao = getDemandasComPermissaoNosGruposAcessosUsuario(usuario, visaoDemanda, false);
               
        for(int i=0;i<listaDemandasComPermissaoVisao.size();i++) {
          if (!demandasComAcesso.contains(listaDemandasComPermissaoVisao.get(i))) {
            demandasComAcesso.add(listaDemandasComPermissaoVisao.get(i));
          }
        }
      }
     
      // era bom colocar isso num arquivo de propriedades
      select.append("select distinct regDemanda from RegDemandaRegd as regDemanda")
        .append(" join regDemanda.usuarioUsuByCodUsuInclusaoRegd as usuario ")
        .append(" join usuario.usuarioAtributoUsuas as usuarioAtributo ");
           
      if (regDemanda.getDescricaoRegd() != null &&
            !"".equals(regDemanda.getDescricaoRegd())) {
               
        bolWhere = true;
        where.append(" where");
       
        where.append(" upper(regDemanda.descricaoRegd) like :descricao");
      }
     
      if (regDemanda.getEntidadeDemandaEntds() != null && regDemanda.getEntidadeDemandaEntds().size() > 0) {
        select.append(" join regDemanda.entidadeDemandaEntds as entidade");
       
        EntidadeEnt entidade = (EntidadeEnt) regDemanda.getEntidadeDemandaEntds().iterator().next();
       
        if (entidade.getSiglaEnt() != null && !"".equals(entidade.getSiglaEnt())) {
          if (bolWhere) {
            where.append(" and");
          } else {
            bolWhere = true;
            where.append(" where");
          }
          where.append(" upper(entidade.siglaEnt) like :siglaEnt");
        }
       
        if (entidade.getNomeEnt() != null && !"".equals(entidade.getNomeEnt())) {
          if (bolWhere) {
            where.append(" and");
          } else {
            bolWhere = true;
            where.append(" where");
          }
          where.append(" upper(entidade.nomeEnt) like :nomeEnt");
        }
      }
      if (regDemanda.getNomeSolicitanteRegd() != null &&
            !"".equals(regDemanda.getNomeSolicitanteRegd())) {
        if (bolWhere) {
          where.append(" and");
        } else {
          bolWhere = true;
          where.append(" where");
        }
        where.append(" upper(regDemanda.nomeSolicitanteRegd) like :usuario");
      }
     
//      if (!administradorDemandas && gruposAcesso != null){
      if (gruposAcesso != null){ 
        if (bolWhere) {
          where.append(" and");
        } else {
          bolWhere = true;
          where.append(" where");
        }       
       
        where.append(" (usuarioAtributo.usuarioUsu.codUsu = usuario.codUsu ")
        .append(" and usuarioAtributo.comp_id.codSatb in (:gruposAcesso))");
      }
     
      order.append(" order by regDemanda.descricaoRegd asc");
     
      Query query = this.getSession().createQuery(select.toString() + where.toString() + order.toString());
     
//      if (!administradorDemandas){
     
      List<Long> listCodGruposAcesso = new ArrayList<Long>();
      if (gruposAcesso != null){
            for (Iterator iter = gruposAcesso.iterator(); iter.hasNext();) {
              SisAtributoSatb grupoAcesso = (SisAtributoSatb) iter.next();
              listCodGruposAcesso.add(grupoAcesso.getCodSatb());
            }
      }
         
          if(listCodGruposAcesso != null && listCodGruposAcesso.size() > 0){
            query.setParameterList("gruposAcesso", listCodGruposAcesso);
          }
//      }
     
      if (regDemanda.getDescricaoRegd() != null &&
            !"".equals(regDemanda.getDescricaoRegd())) {
        query.setString("descricao", "%" + regDemanda.getDescricaoRegd().toUpperCase() + "%");
      }
      if (regDemanda.getEntidadeDemandaEntds() != null && regDemanda.getEntidadeDemandaEntds().size() > 0) {
        EntidadeEnt entidade = (EntidadeEnt) regDemanda.getEntidadeDemandaEntds().iterator().next();
        if (entidade.getSiglaEnt() != null && !"".equals(entidade.getSiglaEnt())) {
          query.setString("siglaEnt", "%" + entidade.getSiglaEnt().toUpperCase() + "%");
        }
        if (entidade.getNomeEnt() != null && !"".equals(entidade.getNomeEnt())) {
          query.setString("nomeEnt", "%" + entidade.getNomeEnt().toUpperCase() + "%");
        }
      }
      if (regDemanda.getNomeSolicitanteRegd() != null &&
            !"".equals(regDemanda.getNomeSolicitanteRegd())) {
        query.setString("usuario", "%" + regDemanda.getNomeSolicitanteRegd().toUpperCase() + "%");
      }
     
      List<RegDemandaRegd> demandasFiltro = query.list();
     
      Iterator itDemandasFiltro = demandasFiltro.iterator();
     
      while (itDemandasFiltro.hasNext()){
       
        RegDemandaRegd demanda = (RegDemandaRegd) itDemandasFiltro.next();
        if (!demandasComAcesso.contains(demanda)){
         
          itDemandasFiltro.remove();
        }
      }
     
      return demandasFiltro;
    } catch (HibernateException e) {
      this.logger.error(e);
            throw new ECARException(e);  
    }
  }
 
  /**
   *
   * @param regDemanda
   * @param grupo
   * @return List
   * @throws ECARException
   */
  public List getDemandaAtributoByGrupo(RegDemandaRegd regDemanda, SisGrupoAtributoSga grupo) throws ECARException {
      List retorno = new ArrayList();
        Set result = regDemanda.getDemAtributoDemas();
        if (result != null) {
            if (result.size() > 0) {
                Iterator it = result.iterator();
                while (it.hasNext()) {
                  DemAtributoDema demandaAtributo = (DemAtributoDema) it.next();
                  if (demandaAtributo.getSisAtributoSatb().getSisGrupoAtributoSga().equals(grupo))
                    retorno.add(demandaAtributo);
                }

            }
        }
        return retorno;
    }
 
  /**
   * Retorna o valor de um atributo demanda em um regDemanda
   * @param regDemanda
   * @param nomeAtbdem
   * @param FkAtbdem
   * @return
   * @throws ECARException
   */
    public String getValorAtributoDemanda(
            RegDemandaRegd regDemanda, String nomeAtbdem,
            String FkAtbdem) throws ECARException {
      try {
          Object retorno = Util.invocaGet(regDemanda, nomeAtbdem);
          if (retorno != null) {
              if (FkAtbdem != null && !"".equals(FkAtbdem)) {
                  retorno = Util.invocaGet(retorno, FkAtbdem);
                  if (retorno != null)
                      return retorno.toString();
                  else
                      return "";
              } else {
                  if (retorno.getClass().equals(Timestamp.class) || retorno.getClass().equals(java.sql.Date.class))
                      retorno = Data.parseDate((Date) retorno);
                 
                  return retorno.toString();
              }
          }
      } catch (Exception e) {
        this.logger.error(e);
        throw new ECARException(e);
        }
        return "";
    }
   
   
    /**
     * Pega um conjunto de valores de qualquer campo da tabela local_item, atrav�s
     * do valor da Fk (normalmente identificacaoLit) para uma determinada demanda.
     * Retorna uma String onde os valores s�o separados por v�rgula
     *
     * @param regDemanda
     * @param FkAtbdem
     * @return
     * @throws ECARException
     */
    public String getValorLocaisDemanda(RegDemandaRegd regDemanda,
            String FkAtbdem) throws ECARException {
     
        LocalItemLit localItem = new LocalItemLit();       
        Set locais = regDemanda.getLocalDemandaLdems();
//          List identificacaoLocais = new ArrayList();
        Iterator it = locais.iterator();
        StringBuilder colunaLocais = new StringBuilder();
        Object colunaLocal;
       
        while (it.hasNext()) {
          localItem = (LocalItemLit) it.next();
          if (FkAtbdem != null && !"".equals(FkAtbdem)) {
            colunaLocal = Util.invocaGet(localItem, FkAtbdem);
           
            if (colunaLocal.getClass().equals(Timestamp.class)
                        || colunaLocal.getClass().equals(java.sql.Date.class)){
              colunaLocal = Data.parseDate((Date) colunaLocal);
            }
            colunaLocais.append(colunaLocal.toString());
            colunaLocais.append(", ");
          }
        }
        if (colunaLocais.length() > 0){
          colunaLocais.delete(colunaLocais.length()-2, colunaLocais.length());
        }
       
        return colunaLocais.toString();
       
    }
   
    /**
     *
     * @param regDemanda
     * @return
     * @throws ECARException
     */
    public String getHierarquiaLocaisDemanda(RegDemandaRegd regDemanda) throws ECARException {
     
        LocalItemLit localItem = new LocalItemLit();       
        Set locais = regDemanda.getLocalDemandaLdems();
//          List identificacaoLocais = new ArrayList();
        Iterator it = locais.iterator();
        StringBuilder hierarquiaLocaisStr = new StringBuilder();
        Set hierarquiaLocais;
        String hierarquiaLocal;
       
        while (it.hasNext()) {
          localItem = (LocalItemLit) it.next();
         
          hierarquiaLocais = (Set) Util.invocaGet(localItem, "localItemHierarquiaLithsByCodLit");
       
          Iterator itHierarquia = hierarquiaLocais.iterator();
                 
          if(itHierarquia.hasNext()) {
            while(itHierarquia.hasNext()) {
                         
              hierarquiaLocaisStr.append(
                  localItem.getIdentificacaoLit() + " - " +
                  ((LocalItemLit)itHierarquia.next()).getIdentificacaoLit());           
            }
          } else {
            hierarquiaLocaisStr.append(localItem.getIdentificacaoLit());
          }
          
          hierarquiaLocaisStr.append(", ");
        }
        if (hierarquiaLocaisStr.length() > 0){
          hierarquiaLocaisStr.delete(hierarquiaLocaisStr.length()-2, hierarquiaLocaisStr.length());
        }
       
        return hierarquiaLocaisStr.toString();
       
    }
   
    /**
     * Pega um conjunto de valores de qualquer campo da tabela local_item, atrav�s
     * do valor da Fk (normalmente identificacaoLit) para uma determinada demanda.
     * Retorna uma String onde os valores s�o separados por v�rgula
     *
     * @param regDemanda
     * @param FkAtbdem
     * @return
     * @throws ECARException
     */
    public String getValorEntidadesDemanda(RegDemandaRegd regDemanda,
            String FkAtbdem) throws ECARException {
     
      ConfiguracaoCfg configura = new ConfiguracaoDao(request).getConfiguracao();
     
      EntidadeEnt entidade = new EntidadeEnt();       
        Set entidades = regDemanda.getEntidadeDemandaEntds();
//          List identificacaoLocais = new ArrayList();
        Iterator it = entidades.iterator();
        StringBuilder colunaEntidades = new StringBuilder();
        Object colunaEntidade;
       
        while (it.hasNext()) {
          entidade = (EntidadeEnt) it.next();
          if (FkAtbdem != null && !"".equals(FkAtbdem)) {
            colunaEntidade = Util.invocaGet(entidade, FkAtbdem);
           
            if (colunaEntidade.getClass().equals(Timestamp.class)
                        || colunaEntidade.getClass().equals(java.sql.Date.class)){
              colunaEntidade = Data.parseDate((Date) colunaEntidade);
            }
            colunaEntidades.append(colunaEntidade.toString());
            colunaEntidades.append(configura.getSeparadorCampoMultivalor());
          }
        }
        if (colunaEntidades.length() > 0){
          colunaEntidades.delete(colunaEntidades.length()- configura.getSeparadorCampoMultivalor().length(), colunaEntidades.length());
        }
       
        return colunaEntidades.toString();
       
    }
   
    /**
     * Pega um conjunto de valores de qualquer campo da tabela local_item, atrav�s
     * do valor da Fk (normalmente identificacaoLit) para uma determinada demanda.
     * Retorna uma String onde os valores s�o separados por v�rgula
     *
     * @param regDemanda
     * @param FkAtbdem
     * @return
     * @throws ECARException
     */
    public String getValorEntidadesOrgaosDemanda(RegDemandaRegd regDemanda,
            String FkAtbdem) throws ECARException {
     
      ConfiguracaoCfg configura = new ConfiguracaoDao(request).getConfiguracao();
     
      EntidadeEnt entidade = new EntidadeEnt();       
        Set entidadesOrgaos = regDemanda.getEntidadeOrgaoDemandaEntorgds();
//          List identificacaoLocais = new ArrayList();
        Iterator it = entidadesOrgaos.iterator();
        StringBuilder colunaOrgaos = new StringBuilder();
        Object colunaOrgao;
       
        while (it.hasNext()) {
          entidade = (EntidadeEnt) it.next();
          if (FkAtbdem != null && !"".equals(FkAtbdem)) {
            colunaOrgao = Util.invocaGet(entidade, FkAtbdem);
           
            if (colunaOrgao.getClass().equals(Timestamp.class)
                        || colunaOrgao.getClass().equals(java.sql.Date.class)){
              colunaOrgao = Data.parseDate((Date) colunaOrgao);
            }
            colunaOrgaos.append(colunaOrgao.toString());
            colunaOrgaos.append(configura.getSeparadorCampoMultivalor());
          }
        }
        if (colunaOrgaos.length() > 0){
          colunaOrgaos.delete(colunaOrgaos.length()-configura.getSeparadorCampoMultivalor().length(), colunaOrgaos.length());
        }
       
        return colunaOrgaos.toString();
       
    }
   
   /**
     * Aplica restri�oes nao implementadas na consulta do banco
     *
     * @param regDemandas
   * @param usuario
     * @param classificacao
     * @param gruposAcesso
     * @param codVisao
     * @return
     * @throws ECARException
     * @return
     */
    public List aplicarRestricoesRegDemanda(List regDemandas, UsuarioUsu usuario, Set gruposAcesso, boolean classificacao, Long codVisao) throws ECARException{
     
      Iterator itRegDemandas = regDemandas.iterator();
     
      while (itRegDemandas.hasNext()){
       
        RegDemandaRegd regDemandaRegd = (RegDemandaRegd) itRegDemandas.next();
       
        // pega os atributos restritivos
        List atributosLivres = getAtributosLivresDemandaDeUmaVisaoEhRestritivo(codVisao);
                       
          // Verifica se as demandas possuem a regra de atriubtos restritivos 
        if (aplicarRestricaoAtributosLivresRestritivos(regDemandaRegd, atributosLivres, usuario)){
         
          // remove a demanda da lista
          itRegDemandas.remove();
        }
       
      }
     
      return regDemandas;
    }
       
   
    /******  METODO ADICIONADO POR JOSE ANDRE NO BRANCH ***********/
    /******  RESPONSAVEL PELO MERGE PATRICIA PESSOA ***********/
    /**
     * Aplica os filtros din�micos no registro de demanda
     *
     * @param regDemandas
     * @param codVisao
     * @return
     * @throws ECARException
     */
    public List aplicarFiltrosDinamicosRegDemanda(List regDemandas, Long codVisao) throws ECARException{
     
      Iterator itRegDemandas = regDemandas.iterator();     
      Map parametrosFiltroDemanda = new HashMap()
      String valorCampoArray[] = null;
      boolean diferente = true;
      boolean todosVazio = false;
     
      //Se existe parametros para filtrar
      if(request.getSession().getAttribute("parametrosFiltroDemanda")!=null){
        parametrosFiltroDemanda = (Map) request.getSession().getAttribute("parametrosFiltroDemanda");

          while (itRegDemandas.hasNext()){
            RegDemandaRegd regDemandaRegd = (RegDemandaRegd) itRegDemandas.next();
           
            List atributosLivres = getAtributosLivresDemandaEhFiltro(codVisao);
            String valorCampo = Pagina.trocaNull(parametrosFiltroDemanda.get("descricaoRegd"));
           
            if (!"".equals(valorCampo)) {                    
            if (regDemandaRegd.getDescricaoRegd() == null || !regDemandaRegd.getDescricaoRegd().toUpperCase().contains((valorCampo.toUpperCase()))){
              itRegDemandas.remove();
                continue;
              }
            }       

            valorCampo = Pagina.trocaNull(parametrosFiltroDemanda.get("numeroDocOrigemRegd_Inicio"));
          if (!"".equals(valorCampo)) {                    
            if (regDemandaRegd.getNumeroDocOrigemRegd() == null || regDemandaRegd.getNumeroDocOrigemRegd().doubleValue() < Double.valueOf(valorCampo).doubleValue()){
              itRegDemandas.remove();
                continue;
              }
          }           
         
          valorCampo = Pagina.trocaNull(parametrosFiltroDemanda.get("numeroDocOrigemRegd_Fim"));
          if (!"".equals(valorCampo)) {                    
            if (regDemandaRegd.getNumeroDocOrigemRegd() == null || regDemandaRegd.getNumeroDocOrigemRegd().doubleValue() > Double.valueOf(valorCampo).doubleValue()){
              itRegDemandas.remove();
                continue;
              }
          }
       
          valorCampo = Pagina.trocaNull(parametrosFiltroDemanda.get("codRegd"));
            if (!"".equals(valorCampo)) {                    
            if (regDemandaRegd.getCodRegd() == null || !regDemandaRegd.getCodRegd().toString().equals(valorCampo)){
              itRegDemandas.remove();
                continue;
              }
            }       
           
          valorCampo = Pagina.trocaNull(parametrosFiltroDemanda.get("observacaoRegd"));
          if (!"".equals(valorCampo)) {                    
            if (regDemandaRegd.getObservacaoRegd() == null || !regDemandaRegd.getObservacaoRegd().toUpperCase().contains((valorCampo.toUpperCase()))){
              itRegDemandas.remove();
                continue;
              }
          }
                     
          if (regDemandaRegd.getSitDemandaSitd()!=null
            &&
            regDemandaRegd.getSitDemandaSitd().getCodSitd()!=null
            &&
            ehValorPropriedadeDiferenteTodosValoresFiltros(parametrosFiltroDemanda.get("sitDemandaSitd"), regDemandaRegd.getSitDemandaSitd().getCodSitd().toString())) {
            itRegDemandas.remove();
            continue;
          }
         
          if (regDemandaRegd.getUsuarioUsuByCodUsuAlteracaoRegd()!=null &&
            regDemandaRegd.getUsuarioUsuByCodUsuAlteracaoRegd().getCodUsu()!=null &&
            ehValorPropriedadeDiferenteTodosValoresFiltros(parametrosFiltroDemanda.get("usuarioUsuByCodUsuInclusaoRegd"), regDemandaRegd.getUsuarioUsuByCodUsuAlteracaoRegd().getCodUsu().toString())) {
            itRegDemandas.remove();
            continue;
          }

          if (regDemandaRegd.getPrioridadePrior()!=null &&
              regDemandaRegd.getPrioridadePrior().getCodPrior() !=null &&
              ehValorPropriedadeDiferenteTodosValoresFiltros(parametrosFiltroDemanda.get("prioridadePrior"), regDemandaRegd.getPrioridadePrior().getCodPrior().toString())) {
                itRegDemandas.remove();
                continue;
            }
         

          valorCampo = Pagina.trocaNull(parametrosFiltroDemanda.get("regDemandaRegd"));
          if (!"".equals(valorCampo)) {
            if (regDemandaRegd.getRegDemandaRegd() == null || !regDemandaRegd.getRegDemandaRegd().getCodRegd().equals(Long.valueOf(valorCampo))){
              itRegDemandas.remove();
                continue;
              }
          }

          if (ehValorPropriedadeDiferenteTodosValoresFiltros(parametrosFiltroDemanda.get("indAtivoRegd"), regDemandaRegd.getIndAtivoRegd())) {
            itRegDemandas.remove();
            continue;
          }
         
          valorCampo = Pagina.trocaNull(parametrosFiltroDemanda.get("nomeSolicitanteRegd"));
          if (!"".equals(valorCampo)) {
            if (regDemandaRegd.getNomeSolicitanteRegd() == null || !regDemandaRegd.getNomeSolicitanteRegd().toUpperCase().contains((valorCampo.toUpperCase()))){
              itRegDemandas.remove();
                continue;
              }
          }
         
          valorCampo = Pagina.trocaNull(parametrosFiltroDemanda.get("dataLimiteRegd_Inicio"));
          if (valorCampo != null && !"".equals(valorCampo)) {
           
            String dataLimiteRegdInicioStr = valorCampo;
           
            //Modifica as ordens de dia e m�s na data, para ficar no formato MM/DD/YYYY
            dataLimiteRegdInicioStr =
              dataLimiteRegdInicioStr.substring(3, dataLimiteRegdInicioStr.lastIndexOf("/")+1) +
              dataLimiteRegdInicioStr.substring(0, dataLimiteRegdInicioStr.indexOf("/")+1) +
              dataLimiteRegdInicioStr.substring(dataLimiteRegdInicioStr.lastIndexOf("/")+1);
                         
            Date dataLimiteRegdInicio = new Date(dataLimiteRegdInicioStr);
                                       
            if (regDemandaRegd.getDataLimiteRegd() == null ||
                //Remove da lista se a data estiver estiver fora do intervalo especificado no filtro
                regDemandaRegd.getDataLimiteRegd().compareTo(dataLimiteRegdInicio) < 0){         
              itRegDemandas.remove();
                  continue;
                }
          }
         
          valorCampo = Pagina.trocaNull(parametrosFiltroDemanda.get("dataLimiteRegd_Fim"));
          if (valorCampo != null && !"".equals(valorCampo)) {
           
            String dataLimiteRegdFimStr = valorCampo;
           
            //Modifica as ordens de dia e m�s na data, para ficar no formato MM/DD/YYYY
            dataLimiteRegdFimStr =
              dataLimiteRegdFimStr.substring(3, dataLimiteRegdFimStr.lastIndexOf("/")+1) +
              dataLimiteRegdFimStr.substring(0, dataLimiteRegdFimStr.indexOf("/")+1) +
              dataLimiteRegdFimStr.substring(dataLimiteRegdFimStr.lastIndexOf("/")+1);
                         
            Date dataLimiteRegdFim = new Date(dataLimiteRegdFimStr);
                                       
            if (regDemandaRegd.getDataLimiteRegd() == null ||
                //Remove da lista se a data estiver estiver fora do intervalo especificado no filtro
                regDemandaRegd.getDataLimiteRegd().compareTo(dataLimiteRegdFim) > 0){         
              itRegDemandas.remove();
                  continue;
                }
          }
       
          valorCampo = Pagina.trocaNull(parametrosFiltroDemanda.get("dataSolicitacaoRegd_Inicio"));
          if (valorCampo != null && !"".equals(valorCampo)) {
           
            String dataSolicitacaoRegdInicioStr = valorCampo;
           
            //Modifica as ordens de dia e m�s na data, para ficar no formato MM/DD/YYYY
            dataSolicitacaoRegdInicioStr =
              dataSolicitacaoRegdInicioStr.substring(3, dataSolicitacaoRegdInicioStr.lastIndexOf("/")+1) +
              dataSolicitacaoRegdInicioStr.substring(0, dataSolicitacaoRegdInicioStr.indexOf("/")+1) +
              dataSolicitacaoRegdInicioStr.substring(dataSolicitacaoRegdInicioStr.lastIndexOf("/")+1);
                         
            Date dataSolicitacaoRegdInicio = new Date(dataSolicitacaoRegdInicioStr);
                                       
            if (regDemandaRegd.getDataSolicitacaoRegd() == null ||
                //Remove da lista se a data estiver estiver fora do intervalo especificado no filtro
                regDemandaRegd.getDataSolicitacaoRegd().compareTo(dataSolicitacaoRegdInicio) < 0){         
              itRegDemandas.remove();
                  continue;
                }
          }

          valorCampo = Pagina.trocaNull(parametrosFiltroDemanda.get("dataSolicitacaoRegd_Fim"));
          if (valorCampo != null && !"".equals(valorCampo)) {
           
            String dataSolicitacaoRegdFimStr = valorCampo;
           
            //Modifica as ordens de dia e m�s na data, para ficar no formato MM/DD/YYYY
            dataSolicitacaoRegdFimStr =
              dataSolicitacaoRegdFimStr.substring(3, dataSolicitacaoRegdFimStr.lastIndexOf("/")+1) +
              dataSolicitacaoRegdFimStr.substring(0, dataSolicitacaoRegdFimStr.indexOf("/")+1) +
              dataSolicitacaoRegdFimStr.substring(dataSolicitacaoRegdFimStr.lastIndexOf("/")+1);
                         
            Date dataSolicitacaoRegdFim = new Date(dataSolicitacaoRegdFimStr);
                                       
            if (regDemandaRegd.getDataSolicitacaoRegd() == null ||
                //Remove da lista se a data estiver estiver fora do intervalo especificado no filtro
                regDemandaRegd.getDataSolicitacaoRegd().compareTo(dataSolicitacaoRegdFim) > 0){         
              itRegDemandas.remove();
                  continue;
                }
          }

          valorCampo = Pagina.trocaNull(parametrosFiltroDemanda.get("dataInclusaoRegd_Inicio"));
          if (valorCampo != null && !"".equals(valorCampo)) {
           
            String dataInclusaoRegdInicioStr = valorCampo;
           
            //Modifica as ordens de dia e m�s na data, para ficar no formato MM/DD/YYYY
            dataInclusaoRegdInicioStr =
              dataInclusaoRegdInicioStr.substring(3, dataInclusaoRegdInicioStr.lastIndexOf("/")+1) +
              dataInclusaoRegdInicioStr.substring(0, dataInclusaoRegdInicioStr.indexOf("/")+1) +
              dataInclusaoRegdInicioStr.substring(dataInclusaoRegdInicioStr.lastIndexOf("/")+1);
                         
            Date dataInclusaoRegdInicio = new Date(dataInclusaoRegdInicioStr);
                                       
            if (regDemandaRegd.getDataInclusaoRegd() == null ||
                //Remove da lista se a data estiver estiver fora do intervalo especificado no filtro
                regDemandaRegd.getDataInclusaoRegd().compareTo(dataInclusaoRegdInicio) < 0){         
              itRegDemandas.remove();
                  continue;
                }
          }

          valorCampo = Pagina.trocaNull(parametrosFiltroDemanda.get("dataInclusaoRegd_Fim"));
          if (valorCampo != null && !"".equals(valorCampo)) {
           
            String dataInclusaoRegdFimStr = valorCampo;
           
            //Modifica as ordens de dia e m�s na data, para ficar no formato MM/DD/YYYY
            dataInclusaoRegdFimStr =
              dataInclusaoRegdFimStr.substring(3, dataInclusaoRegdFimStr.lastIndexOf("/")+1) +
              dataInclusaoRegdFimStr.substring(0, dataInclusaoRegdFimStr.indexOf("/")+1) +
              dataInclusaoRegdFimStr.substring(dataInclusaoRegdFimStr.lastIndexOf("/")+1);
                         
            Date dataInclusaoRegdFim = new Date(dataInclusaoRegdFimStr);
                                       
            if (regDemandaRegd.getDataInclusaoRegd() == null ||
                //Remove da lista se a data estiver estiver fora do intervalo especificado no filtro
                regDemandaRegd.getDataInclusaoRegd().compareTo(dataInclusaoRegdFim) > 0){         
              itRegDemandas.remove();
                  continue;
                }
          }
         
          valorCampo = Pagina.trocaNull(parametrosFiltroDemanda.get("dataSituacaoRegd_Inicio"));
          if (valorCampo != null && !"".equals(valorCampo)) {
           
            String dataSituacaoRegdInicioStr = valorCampo;
           
            //Modifica as ordens de dia e m�s na data, para ficar no formato MM/DD/YYYY
            dataSituacaoRegdInicioStr =
              dataSituacaoRegdInicioStr.substring(3, dataSituacaoRegdInicioStr.lastIndexOf("/")+1) +
              dataSituacaoRegdInicioStr.substring(0, dataSituacaoRegdInicioStr.indexOf("/")+1) +
              dataSituacaoRegdInicioStr.substring(dataSituacaoRegdInicioStr.lastIndexOf("/")+1);
                         
            Date dataSituacaoRegdInicio = new Date(dataSituacaoRegdInicioStr);
                                       
            if (regDemandaRegd.getDataSituacaoRegd() == null ||
                //Remove da lista se a data estiver estiver fora do intervalo especificado no filtro
                regDemandaRegd.getDataSituacaoRegd().compareTo(dataSituacaoRegdInicio) < 0){         
              itRegDemandas.remove();
                  continue;
                }
          }
         
          valorCampo = Pagina.trocaNull(parametrosFiltroDemanda.get("dataSituacaoRegd_Fim"));
          if (valorCampo != null && !"".equals(valorCampo)) {
           
            String dataSituacaoRegdFimStr = valorCampo;
           
            //Modifica as ordens de dia e m�s na data, para ficar no formato MM/DD/YYYY
            dataSituacaoRegdFimStr =
              dataSituacaoRegdFimStr.substring(3, dataSituacaoRegdFimStr.lastIndexOf("/")+1) +
              dataSituacaoRegdFimStr.substring(0, dataSituacaoRegdFimStr.indexOf("/")+1) +
              dataSituacaoRegdFimStr.substring(dataSituacaoRegdFimStr.lastIndexOf("/")+1);
                         
            Date dataSituacaoRegdFim = new Date(dataSituacaoRegdFimStr);
                                       
            if (regDemandaRegd.getDataSituacaoRegd() == null ||
                //Remove da lista se a data estiver estiver fora do intervalo especificado no filtro
                regDemandaRegd.getDataSituacaoRegd().compareTo(dataSituacaoRegdFim) > 0){         
              itRegDemandas.remove();
                  continue;
                }
          }
         
          valorCampo = Pagina.trocaNull(parametrosFiltroDemanda.get("contLocal"));     
          boolean localNaoEncontrado = false;
          int numLocais = 0;
         
          if (valorCampo!=null && valorCampo.length()>0)
            numLocais = Integer.parseInt(valorCampo);
          for (int i = 1; i <= numLocais; i++) {
            if ("S".equals(Pagina.trocaNull(parametrosFiltroDemanda.get("adicionaLocal" + i)))) {
              LocalItemLit local = new LocalItemLit();
              local = (LocalItemLit) super
                  .buscar(LocalItemLit.class, Long.valueOf(Pagina.trocaNull(parametrosFiltroDemanda.get("codLit" + i))));
             
              if (!regDemandaRegd.getLocalDemandaLdems().contains(local)){
                localNaoEncontrado = true;
                itRegDemandas.remove();
                break;
              }
            }
          }
          if (localNaoEncontrado)
            continue;
         
         
          valorCampo = Pagina.trocaNull(parametrosFiltroDemanda.get("contEntidade"));     
          boolean entidadeNaoEncontrada = false;
          int numEntidades = 0;
          if (valorCampo!=null && valorCampo.length()>0)
            numEntidades = Integer.parseInt(valorCampo);
          for (int i = 1; i <= numEntidades; i++) {
            if ("S".equals(Pagina.trocaNull(parametrosFiltroDemanda.get("adicionaEntidade" + i)))) {
              EntidadeEnt entidade = new EntidadeEnt();
              entidade = (EntidadeEnt) super
                  .buscar(EntidadeEnt.class, Long.valueOf(Pagina.trocaNull(parametrosFiltroDemanda.get("codEnt" + i))));
             
              if (!regDemandaRegd.getEntidadeDemandaEntds().contains(entidade)){
                entidadeNaoEncontrada = true;
                itRegDemandas.remove();
                break;
              }
            }
          }
          if (entidadeNaoEncontrada)
            continue;

         
          valorCampo = Pagina.trocaNull(parametrosFiltroDemanda.get("contEntidadeOrgao"));     
          boolean entidadeOrgaoNaoEncontrada = false;
          int numEntidadeOrgaos = 0;
          if (valorCampo!=null && valorCampo.length()>0
              numEntidadeOrgaos = Integer.parseInt(valorCampo);
          for (int i = 1; i <= numEntidadeOrgaos; i++) {
            if ("S".equals(Pagina.trocaNull(parametrosFiltroDemanda.get("adicionaEntidadeOrgao" + i)))) {
              EntidadeEnt entidadeOrgao = new EntidadeEnt();
              entidadeOrgao = (EntidadeEnt) super
                  .buscar(EntidadeEnt.class, Long.valueOf(Pagina.trocaNull(parametrosFiltroDemanda.get("codEntOrg" + i))));
             
              if (!regDemandaRegd.getEntidadeOrgaoDemandaEntorgds().contains(entidadeOrgao)){
                entidadeOrgaoNaoEncontrada = true;
                itRegDemandas.remove();
                break;
              }
            }
          }
          if (entidadeOrgaoNaoEncontrada){           
            continue;
          }
                     
          //Chama o m�todo respons�vel por efetuar os filtros dos atributos livres
          if (filtrarAtributosLivres(parametrosFiltroDemanda, regDemandaRegd, itRegDemandas, atributosLivres)){
            continue;
          }
          }       
      }
                                
      return regDemandas;
    }
   
    /******  METODO ADICIONADO POR JOSE ANDRE NO BRANCH ***********/
    /******  RESPONSAVEL PELO MERGE PATRICIA PESSOA ***********/
   
    /**
     *
     *
     * @param request
     * @param regDemandaRegd
     * @param itensRemovidos
     * @param itRegDemandas
     * @param atributosLivres
     * @return
     */
       private boolean filtrarAtributosLivres(Map parametrosFiltroDemanda, RegDemandaRegd regDemandaRegd, Iterator itRegDemandas, List atributosLivres) {
         boolean retorno = false;
         try {
//           ItemEstruturaDao itemEstruturaDao = new ItemEstruturaDao(request);
//           String codEtt = iett.getEstruturaEtt().getCodEtt().toString();
          
                  
           boolean filtrarAtributoLivre = true;
         Iterator itAtributos = atributosLivres.iterator();
         //Filtrar pelos atributos livres definidos como filtros
         while (itAtributos.hasNext() && filtrarAtributoLivre){
           ObjetoDemanda atributoDemanda = (ObjetoDemanda) itAtributos.next();
           SisGrupoAtributoSga grupoAtributo = atributoDemanda.iGetGrupoAtributosLivres();
                     
           String nomeCampo = "a" + (grupoAtributo!=null?grupoAtributo.getCodSga().toString():"");
             String tipoCampo = grupoAtributo!=null?grupoAtributo.getSisTipoExibicGrupoSteg().getCodSteg().toString():"";
            
             //Se for CheckBox ou RadioButton ou ListBox, nao procura em InformacaoIettSatb
             if(tipoCampo.equals(SisTipoExibicGrupoDao.CHECKBOX) || tipoCampo.equals(SisTipoExibicGrupoDao.LISTBOX)
                || ( tipoCampo.equals(SisTipoExibicGrupoDao.COMBOBOX) )|| tipoCampo.equals(SisTipoExibicGrupoDao.RADIO_BUTTON)){
               String[] atributos = null;
               if (parametrosFiltroDemanda.get(nomeCampo) instanceof String) {
                 atributos = new String[1];
                 atributos[0] = (String)parametrosFiltroDemanda.get(nomeCampo);
          } else {
            atributos = (String[])parametrosFiltroDemanda.get(nomeCampo);
          }
                             
               if (atributos== null || atributos.length==1) {
                 if(atributos!= null &&
                     !"".equals(atributos[0])){
                   if (!getSisAtributosRegDem(regDemandaRegd, grupoAtributo.getCodSga()).contains((SisAtributoSatb) this.buscar(SisAtributoSatb.class, Long.valueOf(Pagina.trocaNull(atributos[0]))))){

                     itRegDemandas.remove();
                           filtrarAtributoLivre = false;
                           retorno = true;
                           break;
                   }                
                 }
              
               } else {
                
                 boolean diferente = true;
                 boolean todosValoresVazio = true;
                 for (int i=0; i<atributos.length;i++) {
                  if (atributos[i]!=null && !"".equals(atributos[i])) {
                    if (diferente && !getSisAtributosRegDem(regDemandaRegd, grupoAtributo.getCodSga()).contains((SisAtributoSatb) this.buscar(SisAtributoSatb.class, Long.valueOf(atributos[i])))) {
                      diferente = true;
                    } else {
                      diferente = false;
                    }
                    todosValoresVazio = false;
               
                }
                if (diferente && !todosValoresVazio){
                  itRegDemandas.remove();
                  retorno = true;
                  }                
               }
              
             }
             //Se for TEXT Field ou TEXT AREA
             else if (tipoCampo.equals(SisTipoExibicGrupoDao.TEXT) || tipoCampo.equals(SisTipoExibicGrupoDao.TEXTAREA)) {              
               if(parametrosFiltroDemanda.get(nomeCampo) != null){
                 String[] valores = null;
                 if (parametrosFiltroDemanda.get(nomeCampo) instanceof String) {
                      valores = new String[1];
                      valores[0] = (String)parametrosFiltroDemanda.get(nomeCampo);
               } else {
                 valores = (String[])parametrosFiltroDemanda.get(nomeCampo);
               }
                 if (valores[0]!=null && !"".equals(Pagina.trocaNull(valores[0]))) {
                   List atributosTextTextArea = getRegDemandaSisAtributoRegdSatbsRegd(regDemandaRegd, grupoAtributo.getCodSga());
                      if (atributosTextTextArea.size() == 0){

                        itRegDemandas.remove();
                              filtrarAtributoLivre = false;
                              retorno = true;
                              break;
                      }
                     
                      Iterator itAtributosTextTextArea = atributosTextTextArea.iterator();

                      while (itAtributosTextTextArea.hasNext() && filtrarAtributoLivre){
                        DemAtributoDema demAtributoDema = (DemAtributoDema) itAtributosTextTextArea.next();
                        if (!demAtributoDema.getInformacao().toUpperCase().trim().contains((Pagina.trocaNull(valores[0])).toUpperCase().trim())){

                          itRegDemandas.remove();
                                filtrarAtributoLivre = false;
                                retorno = true;
                                break;
                        }
                       
                      } 
                 }
               }
             //Se for MULTITEXTO
             } else if (tipoCampo.equals(SisTipoExibicGrupoDao.MULTITEXTO)) {
                                                       
             List lAtrib = new ArrayList();
             if(parametrosFiltroDemanda.get("listaNomesAtributosRequest") != null)
               lAtrib = (ArrayList) parametrosFiltroDemanda.get("listaNomesAtributosRequest");
             Iterator lAtribIt = lAtrib.iterator();
            
             while (lAtribIt.hasNext() && filtrarAtributoLivre) {
               nomeCampo = Pagina.trocaNull(lAtribIt.next());
               if (nomeCampo.startsWith("a" + grupoAtributo.getCodSga().toString())){
                 String[] valores = null;
                 if (parametrosFiltroDemanda.get(nomeCampo) instanceof String) {
                   valores = new String[1];
                   valores[0] = (String)parametrosFiltroDemanda.get(nomeCampo);
                 } else {
                   valores = (String[])parametrosFiltroDemanda.get(nomeCampo);
                 }
                 if(parametrosFiltroDemanda.get(nomeCampo) != null && valores[0]!=null &&
                     !"".equals(Pagina.trocaNull(valores[0]))){
                   String codSisAtrib = nomeCampo.substring(nomeCampo.lastIndexOf("_") + 1);
                   SisAtributoSatb sisAtributoSatb = (SisAtributoSatb) this.buscar(SisAtributoSatb.class, Long.valueOf(codSisAtrib));
                   List atributosMultiText = getRegDemandaSisAtributoRegdSatbsRegd(regDemandaRegd, grupoAtributo.getCodSga());
                   if (atributosMultiText.size() == 0 || !getSisAtributosRegDem(regDemandaRegd, grupoAtributo.getCodSga()).contains(sisAtributoSatb)){

                     itRegDemandas.remove();
                               filtrarAtributoLivre = false;
                               retorno = true;
                               break;
                   }
                   Iterator itAtributosMultiTexto = atributosMultiText.iterator();
                  
                       while (itAtributosMultiTexto.hasNext() && filtrarAtributoLivre){
                         DemAtributoDema demAtributoDema = (DemAtributoDema) itAtributosMultiTexto.next();
                         if (demAtributoDema.getSisAtributoSatb().getCodSatb().toString().equals(codSisAtrib)){
                           if (!demAtributoDema.getInformacao().toUpperCase().trim().contains((Pagina.trocaNull(parametrosFiltroDemanda.get(nomeCampo))).toUpperCase().trim())){

                               itRegDemandas.remove();
                                       filtrarAtributoLivre = false;
                                       retorno = true;
                                       break;
                             }
                         }
                       }
                 }
               }
             }                                        
           //Se for VALIDACAO
           } else if (tipoCampo.equals(SisTipoExibicGrupoDao.VALIDACAO)) {

             nomeCampo = "a" + grupoAtributo.getCodSga() + "_Inicio";
             String filtroParametro = Pagina.trocaNull(parametrosFiltroDemanda.get(nomeCampo));
             if(parametrosFiltroDemanda.get(nomeCampo) != null &&
                 !"".equals(Pagina.trocaNull(parametrosFiltroDemanda.get(nomeCampo)))){
              
               List atributosValidacao = getRegDemandaSisAtributoRegdSatbsRegd(regDemandaRegd, grupoAtributo.getCodSga());
              
               if (atributosValidacao.size() == 0){

                 itRegDemandas.remove();
                         filtrarAtributoLivre = false;
                         retorno = true;
                         break;
               }
              
                 Iterator itAtributosValidacao = atributosValidacao.iterator();
                
                 while (itAtributosValidacao.hasNext() && filtrarAtributoLivre){
                   DemAtributoDema demAtributoDema = (DemAtributoDema) itAtributosValidacao.next();
                  
                   if (demAtributoDema.getSisAtributoSatb().getAtribInfCompSatb().equals("dataScript")){
                    
                     //Modifica as ordens de dia e m�s na data, para ficar no formato MM/DD/YYYY
                     filtroParametro =
                       filtroParametro.substring(3, filtroParametro.lastIndexOf("/")+1) +
                       filtroParametro.substring(0, filtroParametro.indexOf("/")+1) +
                       filtroParametro.substring(filtroParametro.lastIndexOf("/")+1);
                                    
                       Date dataFiltro = new Date(filtroParametro);
                      
                       String valorAtribLivre = demAtributoDema.getInformacao();
                    
                       //Modifica as ordens de dia e m�s na data, para ficar no formato MM/DD/YYYY
                       valorAtribLivre =
                         valorAtribLivre.substring(3, valorAtribLivre.lastIndexOf("/")+1) +
                         valorAtribLivre.substring(0, valorAtribLivre.indexOf("/")+1) +
                         valorAtribLivre.substring(valorAtribLivre.lastIndexOf("/")+1);
                                    
                       Date dataAtribLivre = new Date(valorAtribLivre);
                       //Remove da lista se a data estiver estiver fora do intervalo especificado no filtro                       
                       if (dataAtribLivre.compareTo(dataFiltro) < 0){
//                         itensRemovidos.add(regDemandaRegd.getCodRegd());
                         itRegDemandas.remove();
                               filtrarAtributoLivre = false;
                               retorno = true;
                               break;
                             }
                    
                    
                   } else if (demAtributoDema.getSisAtributoSatb().getAtribInfCompSatb().equals("numeroInteiroScript") ||
                       demAtributoDema.getSisAtributoSatb().getAtribInfCompSatb().equals("numeroRealScript") ||
                       demAtributoDema.getSisAtributoSatb().getAtribInfCompSatb().equals("valorMonetarioScript") ){
                      
                     filtroParametro = filtroParametro.replace(".", "");
                     filtroParametro = filtroParametro.replace(",", ".");
                    
                     BigDecimal valorFiltro = new BigDecimal(filtroParametro);
                                
                       BigDecimal valorAtribLivre = new BigDecimal(demAtributoDema.getInformacao().replace(".", "").replace(",", "."));
                                                  
                     //Remove da lista se a data estiver estiver fora do intervalo especificado no filtro
                       if (valorAtribLivre.doubleValue() < valorFiltro.doubleValue()){
//                         itensRemovidos.add(regDemandaRegd.getCodRegd());
                         itRegDemandas.remove();
                               filtrarAtributoLivre = false;
                               retorno = true;
                               break;
                             }
                     }
                 }
             }
            
             nomeCampo = "a" + grupoAtributo.getCodSga().toString() + "_Fim";
             filtroParametro = Pagina.trocaNull(parametrosFiltroDemanda.get(nomeCampo));
             if(parametrosFiltroDemanda.get(nomeCampo) != null &&
                 !"".equals(Pagina.trocaNull(parametrosFiltroDemanda.get(nomeCampo)))){
              
               List atributosValidacao = getRegDemandaSisAtributoRegdSatbsRegd(regDemandaRegd, grupoAtributo.getCodSga());
              
               if (atributosValidacao.size() == 0){

                 itRegDemandas.remove();
                         filtrarAtributoLivre = false;
                         retorno = true;
                         break;
               }
              
                 Iterator itAtributosValidacao = atributosValidacao.iterator();
                
                 while (itAtributosValidacao.hasNext() && filtrarAtributoLivre){
                   DemAtributoDema demAtributoDema = (DemAtributoDema) itAtributosValidacao.next();
                  
                   if (demAtributoDema.getSisAtributoSatb().getAtribInfCompSatb().equals("dataScript")){
                    
                     //Modifica as ordens de dia e m�s na data, para ficar no formato MM/DD/YYYY
                     filtroParametro =
                       filtroParametro.substring(3, filtroParametro.lastIndexOf("/")+1) +
                       filtroParametro.substring(0, filtroParametro.indexOf("/")+1) +
                       filtroParametro.substring(filtroParametro.lastIndexOf("/")+1);
                                    
                       Date dataFiltro = new Date(filtroParametro);
                      
                       String valorAtribLivre = demAtributoDema.getInformacao();
                    
                       //Modifica as ordens de dia e m�s na data, para ficar no formato MM/DD/YYYY
                       valorAtribLivre =
                         valorAtribLivre.substring(3, valorAtribLivre.lastIndexOf("/")+1) +
                         valorAtribLivre.substring(0, valorAtribLivre.indexOf("/")+1) +
                         valorAtribLivre.substring(valorAtribLivre.lastIndexOf("/")+1);
                                    
                       Date dataAtribLivre = new Date(valorAtribLivre);
                       //Remove da lista se a data estiver estiver fora do intervalo especificado no filtro                       
                       if (dataAtribLivre.compareTo(dataFiltro) > 0){
//                         itensRemovidos.add(regDemandaRegd.getCodRegd());
                         itRegDemandas.remove();
                               filtrarAtributoLivre = false;
                               retorno = true;
                               break;
                             }
                      
                   } else if (demAtributoDema.getSisAtributoSatb().getAtribInfCompSatb().equals("numeroInteiroScript") ||
                       demAtributoDema.getSisAtributoSatb().getAtribInfCompSatb().equals("numeroRealScript") ||
                       demAtributoDema.getSisAtributoSatb().getAtribInfCompSatb().equals("valorMonetarioScript") ){
                      
                     filtroParametro = filtroParametro.replace(".", "");
                     filtroParametro = filtroParametro.replace(",", ".");
                    
                     BigDecimal valorFiltro = new BigDecimal(filtroParametro);
                    
                       BigDecimal valorAtribLivre = new BigDecimal(demAtributoDema.getInformacao().replace(".", "").replace(",", "."));
                                                  
                     //Remove da lista se a data estiver estiver fora do intervalo especificado no filtro
                       if (valorAtribLivre.doubleValue() > valorFiltro.doubleValue()){
//                         itensRemovidos.add(regDemandaRegd.getCodRegd());
                         itRegDemandas.remove();
                               filtrarAtributoLivre = false;
                               retorno = true;
                               break;
                             }
                     }
                  
                 }
             }
            
               nomeCampo ="a" + grupoAtributo.getCodSga();
             String[] atributos = (String[]) parametrosFiltroDemanda.get(nomeCampo);
             if(parametrosFiltroDemanda.get(nomeCampo) != null){
                 String[] valores = (String[])parametrosFiltroDemanda.get(nomeCampo);
                 if (valores[0]!=null && !"".equals(Pagina.trocaNull(valores[0]))) {
                   List atributosValidacao = getRegDemandaSisAtributoRegdSatbsRegd(regDemandaRegd, grupoAtributo.getCodSga());
              
                   if (atributosValidacao.size() == 0){
                     itRegDemandas.remove();
                     filtrarAtributoLivre = false;
                     retorno = true;
                     break;
                   }
              
                   Iterator itAtributosValidacao = atributosValidacao.iterator();
                
                   while (itAtributosValidacao.hasNext() && filtrarAtributoLivre){
                     DemAtributoDema demAtributoDema = (DemAtributoDema) itAtributosValidacao.next();
                          if (!demAtributoDema.getInformacao().toUpperCase().contains(atributos[0].toUpperCase())){
                            itRegDemandas.remove();
                            filtrarAtributoLivre = false;
                            retorno = true;
                            break;
                          }                      
                   } 
                 }
               }
           }           
         }
          
         } catch (Exception e) {
        
           e.printStackTrace();
       }
        
       return retorno;   
     }   

       
    
  private boolean aplicarRestricaoGruposUsuario (RegDemandaRegd regDemandaRegd, UsuarioUsu usuario, Set gruposAcesso){
     
      boolean restringirPorUSuario = true;
     
      try{
           
      List<Long> listCodGruposAcesso = new ArrayList<Long>();
          for (Iterator iter = gruposAcesso.iterator(); iter.hasNext();) {
            SisAtributoSatb grupoAcesso = (SisAtributoSatb) iter.next();
            listCodGruposAcesso.add(grupoAcesso.getCodSatb());
          }
   
      Set usuarioAtributos = regDemandaRegd.getUsuarioUsuByCodUsuInclusaoRegd().getUsuarioAtributoUsuas();
     
      Iterator itUsuarioAtributos = usuarioAtributos.iterator();
       
     
     
      while (itUsuarioAtributos.hasNext()){
       
        UsuarioAtributoUsua usuarioAtributo = (UsuarioAtributoUsua) itUsuarioAtributos.next();
       
        if (listCodGruposAcesso.contains(usuarioAtributo.getComp_id().getCodSatb())){
          restringirPorUSuario = false;
        }
      }
       
      } catch (Exception e) {
     
           e.printStackTrace();
      }
         
          return restringirPorUSuario;
    }
   
    private boolean aplicarRestricaoUsuarioEntidadeOrgaoDemanda(RegDemandaRegd regDemandaRegd, UsuarioUsu usuario){
     
      boolean retorno = false;
     
      try{
       
        Set entidadesUsuario = usuario.getEntidadeEnts();
       
        Iterator itEntidadesOrgaosDemanda = regDemandaRegd.getEntidadeOrgaoDemandaEntorgds().iterator();
       
        boolean usuarioContemAlgumaEntidadeOrgaoDemanda = false;
       
        while (itEntidadesOrgaosDemanda.hasNext()){
         
          EntidadeEnt entidadeOrgaoDemanda = (EntidadeEnt) itEntidadesOrgaosDemanda.next();
         
          if (entidadesUsuario.contains(entidadeOrgaoDemanda)){
            usuarioContemAlgumaEntidadeOrgaoDemanda = true;
            break;
          }         
         
        }
       
        if (!usuarioContemAlgumaEntidadeOrgaoDemanda){                  
             return true;

         }
     
      } catch (Exception e) {
     
       e.printStackTrace();
    }
     
      return retorno;
    }
   
   
    /**
     * Verifica se demanda possui atributo que pertence a mesmo grupo que definido na se��o "usu�rio" com o grupo do atributo sendo do tipo "cadastro de usuario" 
     *
     * @param regDemandaRegd
     * @param atributosLivresRestritivosVisao
     * @param Usuario
     * @return se true, remove demanda(nao possui atributo restritivo que � igual a atributo do usuario ), se false (possui restritivo que � igual ao do usu�rio)
     */
       private boolean aplicarRestricaoAtributosLivresRestritivos(RegDemandaRegd regDemandaRegd, List atributosLivresRestritivosVisao, UsuarioUsu usuario) {
        
         boolean retorno = true;
        
         try {
                            
         boolean filtrarAtributoLivre = true;
        
         // atributos livres de demanda restritivos
         Iterator itAtributos = atributosLivresRestritivosVisao.iterator();
        
         // pega os Atributos definidos para o usuario
         Set usuarioAtributos = usuario.getUsuarioAtributoUsuas();
        
         // lista de atributos definidos para o usuario
         List codAtributosUsuarios = new ArrayList();
         Iterator itUsuarioAtributos = usuarioAtributos.iterator();
        
         while (itUsuarioAtributos.hasNext()){  
          
           UsuarioAtributoUsua usuarioAtributo = (UsuarioAtributoUsua)itUsuarioAtributos.next();          
          
           codAtributosUsuarios.add(usuarioAtributo.getComp_id().getCodSatb());          
        
         }
        
         // verifica se ao menos um dos atributos livres � restritivo e caso exista verifica se h� atributo livre restritivo com mesmo valor definido no usuario
         if (itAtributos.hasNext()) {
        
           boolean demandaPossuiAlgumAtributoUsuario = false;
           while (itAtributos.hasNext() && filtrarAtributoLivre){
            
//             ObjetoDemanda atributoDemanda = (ObjetoDemanda) itAtributos.next();
             VisaoAtributoDemanda atributoVisao = (VisaoAtributoDemanda) itAtributos.next();
             SisGrupoAtributoSga grupoAtributo = atributoVisao.getVisaoAtributoDemandaPk().getAtributoDemanda().iGetGrupoAtributosLivres();          
            
             String nomeCampo = "a" + grupoAtributo.getCodSga().toString();// nome do campo na tela
               String tipoCampo = grupoAtributo.getSisTipoExibicGrupoSteg().getCodSteg().toString();// tipo do campo
               String tipoCampoCadastroUsuario = "";
              
               // se for tipo de cadastro de usuario
               if(grupoAtributo.getSisTipoExibicGrupoCadUsuSteg()!=null )
                 tipoCampoCadastroUsuario = grupoAtributo.getSisTipoExibicGrupoCadUsuSteg().getCodSteg().toString();
              
               //Se for CheckBox ou RadioButton ou ListBox, n�o procura em InformacaoDema
               if((tipoCampo.equals(SisTipoExibicGrupoDao.CHECKBOX) || tipoCampo.equals(SisTipoExibicGrupoDao.LISTBOX) ||
                   tipoCampo.equals(SisTipoExibicGrupoDao.RADIO_BUTTON) || tipoCampo.equals(SisTipoExibicGrupoDao.COMBOBOX))
                   && ( tipoCampoCadastroUsuario.equals(SisTipoExibicGrupoDao.CHECKBOX) || tipoCampoCadastroUsuario.equals(SisTipoExibicGrupoDao.LISTBOX) ||
                   tipoCampoCadastroUsuario.equals(SisTipoExibicGrupoDao.RADIO_BUTTON) || tipoCampoCadastroUsuario.equals(SisTipoExibicGrupoDao.COMBOBOX)) ){
                 List atributos = getSisAtributosRegDem(regDemandaRegd, grupoAtributo.getCodSga());
                 //retorno = false;
                   int numAtributos = 0;
                 if (atributos != null) {
                   numAtributos = atributos.size();
                 }
                
                 for(int i = 0; i < numAtributos && filtrarAtributoLivre; i++){
                   // se o atributo do usuario posssui
                   if(codAtributosUsuarios.contains(((SisAtributoSatb)atributos.get(i)).getCodSatb())){
                     demandaPossuiAlgumAtributoUsuario = true;
                     return false;
                   }
                 }              
               }
           }
          
           // nao possui atributo restritivo algum com valor igual ao do usuario
           if (!demandaPossuiAlgumAtributoUsuario){                   
                 return true;
           }
          
         // n�o possui nenhum atributos livre restritivo
         } else {
           retorno = false;
         }
          
         } catch (Exception e) {
        
           e.printStackTrace();
       }
        
       return retorno;   
     }
     
  /**
   * Retorna todos atributos ativos de demanda ordenados por sequ�ncia de apresenta��o tela campo.
         * @param codVisao
   * @return
   * @throws ECARException
   */
  public List getAtributosLivresDemandaEhFiltro(Long codVisao) throws ECARException{       
    List retorno = new ArrayList();   
    ObjetoDemanda atributoDemanda = new AtributoDemandaAtbdem();

        try {                    
     
          String hql = MessageFormat.format(Util.getHql(ConstantesECAR.PESQUISA_ATRIBUTOS_DEMANDA_VISAO_ATIVOS_QUE_SAO_FILTROS, request.getSession().getServletContext()), codVisao.toString(),"\'S\'", "\'S\'");
   
      Query q = this.getSession().createQuery(hql);
                 
      retorno = q.list();
     
        } catch(IOException e){
      this.logger.error(e);
          throw new ECARException(e)
        } catch (HibernateException e) {
            this.logger.error(e);
            throw new ECARException("erro.hibernateException");
        }
        return retorno;
  }
   
    /**
     * Devolve uma lista de visaoAtributoDemanda.
     * Essa lista contem objetos de atributo visao
     * @param codVisao
     * @return lista de objetos Atributo Visao ordenados pela ordem do campo na tela.
     * @throws ECARException
     */
    public List getAtributosLivresDemandaDeUmaVisaoEhRestritivo(Long codVisao) throws ECARException {
      List retorno = new ArrayList();   

        try {                    
          StringBuilder query = new StringBuilder("select visaoAtributoDemanda from VisaoAtributoDemanda as visaoAtributoDemanda")
        .append(" where visaoAtributoDemanda.visaoAtributoDemandaPk.atributoDemanda.indAtivoAtbdem = 'S' and visaoAtributoDemanda.indRestritivo = 'S'")
        .append(" and visaoAtributoDemanda.visaoAtributoDemandaPk.visao.codVisao=").append(codVisao.toString())
        .append(" and visaoAtributoDemanda.visaoAtributoDemandaPk.atributoDemanda.sisGrupoAtributoSga is not null")       
        .append(" order by visaoAtributoDemanda.seqApresTelaCampoAtbvis asc");
      Query q = this.getSession().createQuery(query.toString());
                 
      retorno = q.list();
     
        } catch (HibernateException e) {
            this.logger.error(e);
            throw new ECARException("erro.hibernateException");
        }
        return retorno;
    }
   
   
   
    /**
     * Retorna os SisAtributos do grupo e das demanda passadas.<br>
     *
     * @param regDemandaRegd
     * @param codSisGrupoAtributo
     * @return List
     */
    public List getSisAtributosRegDem(RegDemandaRegd regDemandaRegd, Long codSisGrupoAtributo){
      List listaRetorno = new ArrayList();
      if (regDemandaRegd.getDemAtributoDemas() != null){
        Iterator it = regDemandaRegd.getDemAtributoDemas().iterator();
        while (it.hasNext()){
          DemAtributoDema demAtributoDema = (DemAtributoDema) it.next();
          if (demAtributoDema.getSisAtributoSatb().getSisGrupoAtributoSga().getCodSga().equals(codSisGrupoAtributo)){
            listaRetorno.add(demAtributoDema.getSisAtributoSatb());
          }
        }
      }
     
      return listaRetorno;
     
    }
   
    /**
     * Retorna os ItemEstruturaSisAtributoIettSatbs do grupo e do Iett passados.<br>
     *
     * @param regDemanda
     * @param codSisGrupoAtributo
     * @return
     */
    public List getRegDemandaSisAtributoRegdSatbsRegd(RegDemandaRegd regDemanda, Long codSisGrupoAtributo){
      List listaRetorno = new ArrayList();
      if (regDemanda.getDemAtributoDemas() != null){
        Iterator it = regDemanda.getDemAtributoDemas().iterator();
        while (it.hasNext()){
          DemAtributoDema demAtributoDema = (DemAtributoDema) it.next();
          if (demAtributoDema.getSisAtributoSatb().getSisGrupoAtributoSga().getCodSga().equals(codSisGrupoAtributo)){
            listaRetorno.add(demAtributoDema);
          }
        }
      }
     
      return listaRetorno;
     
    }
   
//    public List getDemandasAClassificar(RegDemandaRegd regDemandaPesq, boolean ehFiltro, UsuarioUsu usuario)
//      throws HibernateException, ECARException {
//         
//      List retorno = null;
//      try{
//        StringBuilder query = new StringBuilder(
//          " select regDemanda from RegDemandaRegd as regDemanda ")
//          .append(" join regDemanda.sitDemandaSitd as situacaoDemanda ")          
//          .append(" where situacaoDemanda.indPrimeiraSituacaoSitd = 'S'")         
//          .append(" order by regDemanda.codRegd asc ");
//       
//      Query q = this.getSession().createQuery(query.toString());
//                   
//      retorno = q.list();
//     
////      aplicarRestricaoUsuarioAtributoRegDemanda(retorno, usuario);
//     
//      if(ehFiltro)
//        retorno = aplicarFiltrosDinamicosRegDemanda(retorno);
//   
//      } catch(HibernateException e){
//      this.logger.error(e);
//          throw new ECARException(e);
//      }
//     
//      return retorno;
//    }
   
    /**
     *
     * @param codVisao
     * @return
     * @throws HibernateException
     * @throws ECARException
     */
    public List<RegDemandaRegd> getDemandasVisao(Long codVisao) throws HibernateException, ECARException {
   
      List<RegDemandaRegd> listaDemandas = null;
     
      Criteria crit = session.createCriteria(RegDemandaRegd.class);
     
      crit.add(Restrictions.eq("visaoDemandasVisDem.codVisao", codVisao));
     
      listaDemandas = crit.list();
     
      return listaDemandas;
    }
   
    /*
     * C�DIGOS CRIADOS PARA MUDAN�A DE VIS�O DE DEMANDAS
     *
     * 1 - VISUALIZA DEMANDAS QUE PERTENCEM A GRUPOS DE ACESSOS DO USUARIO E QUE PERTECEM A UMA VISAO ESPECIFICA
     *
     */
  /**
   *
         * @param visao
         * @param usuario
   * @param ehFiltro
   * @return
   * @throws HibernateException
   * @throws ECARException
   */
    public List getDemandasComPermissaoNosGruposAcessosUsuario(
        UsuarioUsu usuario,
        VisaoDemandasVisDem visao,
        boolean ehFiltro
        ) throws HibernateException, ECARException {
         
      List retorno = null;
      try{
       
        Set<SisAtributoSatb> gruposAcesso = ((ecar.login.SegurancaECAR)request.getSession().getAttribute("seguranca")).getGruposAcesso();
        UsuarioUsu usuarioSessao = ((ecar.login.SegurancaECAR)request.getSession().getAttribute("seguranca")).getUsuario();
        VisaoSituacaoDemandaDao visaoSituacaoDemandaDao = new VisaoSituacaoDemandaDao(request);
        String codStabString = "";
        String codSitString = "";
        String codUsuarioString = "";
        String hqlPrefixo = "";
        String hql = null;
        String codEntUsu = "";
       
        Iterator<SisAtributoSatb> it = gruposAcesso.iterator();
       
        int counter = 0;
        while(it.hasNext()) {
          if (counter==0)
            codStabString += it.next().getCodSatb().toString();
          else
            codStabString += "," + it.next().getCodSatb().toString();
          counter++;
        }
       
        if (codStabString.length()>0) {
          codStabString = "(" + codStabString + ")";
          try {
           
            if (visao!=null) {           
             
              codSitString  = "(" + visaoSituacaoDemandaDao.getSituacoesVisaoIdsString(visao, VisaoSituacaoDemandaDao.SITUACAO_VISAO_FILTRO) + ")";
              codUsuarioString =  "(" + usuario.getCodUsu().toString() + ")";
              if (!usuario.recuperarEntidadesUsuarioIdsString().equals("")){
                codEntUsu = "(" + usuario.recuperarEntidadesUsuarioIdsString() + ")";
              }
             
              //se a demanda est� sem situa��o
              if (!codSitString.equals("()")){
                if (hqlPrefixo.length()>0)
                  hqlPrefixo += " and ";                 
                hqlPrefixo += MessageFormat.format(Util.getHql(ConstantesECAR.PESQUISA_DEMANDAS_DADO_GRUPOS_ACESSOS_E_VISAO_COM_SITUACAO, request.getSession().getServletContext()), codSitString);
              }else{
            if (hqlPrefixo.length()>0)
              hqlPrefixo += " and ";                 
            hqlPrefixo += MessageFormat.format(Util.getHql(ConstantesECAR.PESQUISA_DEMANDAS_DADO_GRUPOS_ACESSOS_E_VISAO_SEM_SITUACAO, request.getSession().getServletContext()), visao.getCodVisao());
              }

              // se for ver somente demandas que o usuario incluiu
              if (visao.getVisualizarDemandasIncluidasUsuario()!=null && visao.getVisualizarDemandasIncluidasUsuario().equals("S")) {
                if (hqlPrefixo.length()>0)
                  hqlPrefixo += " and ";
                hqlPrefixo += MessageFormat.format(Util.getHql(ConstantesECAR.PESQUISA_DEMANDAS_DADO_GRUPOS_ACESSOS_E_VISAO_USUARIO_INCLUSAO, request.getSession().getServletContext()), codUsuarioString);
              }
             
              // se tiver regra de entidade solucionadora
              if(visao.getUtilizarRegraEntidadeSolucionadora()!=null && visao.getUtilizarRegraEntidadeSolucionadora().equals("S")) {
                if (!codEntUsu.equals("")){
                  if (hqlPrefixo.length()>0)
                    hqlPrefixo += " and ";
                  hqlPrefixo += MessageFormat.format(Util.getHql(ConstantesECAR.PESQUISA_DEMANDAS_DADO_GRUPOS_ACESSOS_E_VISAO_ENTIDADE_SOLUCIONADORA, request.getSession().getServletContext()), codEntUsu);
                }
                else{
                  return new ArrayList();
                }
              }    
             
              if (hqlPrefixo.length()>0) {
                hqlPrefixo += " and ";
              }
             
              hql = MessageFormat.format(Util.getHql(ConstantesECAR.PESQUISA_DEMANDAS_DADO_GRUPOS_ACESSOS_E_VISAO, request.getSession().getServletContext()), hqlPrefixo, codStabString);

             
              StringBuilder query = new StringBuilder(hql);
 
              Query q = this.getSession().createQuery(query.toString());
 
              retorno = q.list();
            } else {
              return null;
            }
           
          } catch(IOException e){
            this.logger.error(e);
                throw new ECARException(e);
            }
         
         
        } else {
          return null;
        }
     
      aplicarRestricoesRegDemanda(retorno, usuario, gruposAcesso, true, visao.getCodVisao());
     
      if(ehFiltro && visao!=null)
        retorno = aplicarFiltrosDinamicosRegDemanda(retorno, visao.getCodVisao());
   
      } catch(HibernateException e){
      this.logger.error(e);
          throw new ECARException(e);
      }
     
      return retorno;
    }
   
//    public List getDemandasComPermissaoNosGruposAcessosUsuario(
//        UsuarioUsu usuario,
//        List<VisaoDemandasVisDem> visoes,
//        boolean ehFiltro
//        ) throws HibernateException, ECARException {
//         
//      List retorno = null;
//      try{
//       
//        Set<SisAtributoSatb> gruposAcesso = ((ecar.login.SegurancaECAR)request.getSession().getAttribute("seguranca")).getGruposAcesso();
//        UsuarioUsu usuarioSessao = ((ecar.login.SegurancaECAR)request.getSession().getAttribute("seguranca")).getUsuario();
//       
//        String codStabString = "";
//        String codSitString = "";
//        String codUsuarioString = "";
//        String hqlPrefixo = "";
//        String hql = null;
//       
//        Iterator<SisAtributoSatb> it = gruposAcesso.iterator();
//       
//        int counter = 0;
//        while(it.hasNext()) {
//          if (counter==0)
//            codStabString += it.next().getCodSatb().toString();
//          else
//            codStabString += "," + it.next().getCodSatb().toString();
//          counter++;
//        }
//       
//        if (codStabString.length()>0) {
//          codStabString = "(" + codStabString + ")";
//          try {
//           
//            if (visoes!=null) {           
//             
//              codSitString  = "(" + VisaoDemandasVisDem.recuperarSituacoesDemandasIdsString(visoes) + ")";
//              codUsuarioString =  "(" + usuario.getCodUsu().toString() + ")";
//             
//              //se a demanda est� sem situa��o
//              if (!codSitString.equals("()")){
//                if (hqlPrefixo.length()>0)
//                  hqlPrefixo += " and ";                 
//                hqlPrefixo += MessageFormat.format(Util.getHql(ConstantesECAR.PESQUISA_DEMANDAS_DADO_GRUPOS_ACESSOS_E_VISAO_COM_SITUACAO, request.getSession().getServletContext()), codSitString);
//              }
//
//              // se for ver somente demandas que o usuario incluiu
//              if (visao.getVisualizarDemandasIncluidasUsuario()!=null && visao.getVisualizarDemandasIncluidasUsuario().equals("S")) {
//                if (hqlPrefixo.length()>0)
//                  hqlPrefixo += " and ";
//                hqlPrefixo += MessageFormat.format(Util.getHql(ConstantesECAR.PESQUISA_DEMANDAS_DADO_GRUPOS_ACESSOS_E_VISAO_USUARIO_INCLUSAO, request.getSession().getServletContext()), codUsuarioString);
//              }
//             
//              // se tiver regra de entidade solucionadora
//              if(visao.getVisualizarDemandasIncluidasUsuario()!=null && visao.getUtilizarRegraEntidadeSolucionadora().equals("S")) {
//                if (hqlPrefixo.length()>0)
//                  hqlPrefixo += " and ";
//                hqlPrefixo += MessageFormat.format(Util.getHql(ConstantesECAR.PESQUISA_DEMANDAS_DADO_GRUPOS_ACESSOS_E_VISAO_ENTIDADE_SOLUCIONADORA, request.getSession().getServletContext()), new String[]{});
//              }    
//             
//              if (hqlPrefixo.length()>0) {
//                hqlPrefixo += " and ";
//              }
//             
//              hql = MessageFormat.format(Util.getHql(ConstantesECAR.PESQUISA_DEMANDAS_DADO_GRUPOS_ACESSOS_E_VISAO, request.getSession().getServletContext()), hqlPrefixo, codStabString);
//
//             
//              StringBuilder query = new StringBuilder(hql);
// 
//              Query q = this.getSession().createQuery(query.toString());
// 
//              retorno = q.list();
//            } else {
//              return null;
//            }
//           
//          } catch(IOException e){
//            this.logger.error(e);
//                throw new ECARException(e);
//            }
//         
//         
//        } else {
//          return null;
//        }
//     
//      aplicarRestricoesRegDemanda(retorno, usuario, gruposAcesso, true);
//     
//      if(ehFiltro && visao!=null)
//        retorno = aplicarFiltrosDinamicosRegDemanda(retorno, visao.getCodVisao());
//   
//      } catch(HibernateException e){
//      this.logger.error(e);
//          throw new ECARException(e);
//      }
//     
//      return retorno;
//    }
   
    /**
     *
     * @param valoresFiltroObjeto
     * @param valorPropriedade
     * @return
     */
    public boolean ehValorPropriedadeDiferenteTodosValoresFiltros(Object valoresFiltroObjeto, String valorPropriedade) {
     
      boolean diferente = true;
      boolean todosValoresVazio = true;
      String[] valoresFiltro = null;
     
      if (valoresFiltroObjeto instanceof String[]) {
        valoresFiltro = (String[])valoresFiltroObjeto;
    } else  {
      valoresFiltro = new String[1];
      valoresFiltro[0] = (String)valoresFiltroObjeto;
    }
     
      // filtro com um valor
      if (valoresFiltro.length==1) {
      if (valoresFiltro[0]!=null && valoresFiltro[0].length()>0) {
        if (valorPropriedade != null) {
          if(!valorPropriedade.toString().toUpperCase().equals((valoresFiltro[0].toUpperCase()))){
            diferente = true;
          } else {
            diferente = false;
          }
        } else {
          diferente = false;
        }
        todosValoresVazio = false;
      }
     
    // filtro com mais de um valor
    } else {
      for (int i=0; i<valoresFiltro.length;i++) {
        if (!"".equals(valoresFiltro[i])) {
          if (valorPropriedade != null) {
                if (valorPropriedade.toString().toUpperCase().equals((valoresFiltro[i].toUpperCase()))) {
                  diferente = false;
                }           
          } else {
            diferente = false;
          }
              todosValoresVazio = false;
          }
      } 
    } 
     
      if(todosValoresVazio) {
      diferente = false;     
    }
     
      return diferente; 
    }

   
}
TOP

Related Classes of ecar.dao.RegDemandaDao

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.