View Javadoc

1   package ecar.dao;
2   
3   import java.math.BigDecimal;
4   
5   import java.util.ArrayList;
6   import java.util.Collections;
7   import java.util.Comparator;
8   import java.util.Date;
9   import java.util.Enumeration;
10  import java.util.HashMap;
11  import java.util.HashSet;
12  import java.util.Iterator;
13  import java.util.List;
14  import java.util.Map;
15  import java.util.Set;
16  
17  import javax.servlet.http.HttpServletRequest;
18  import javax.servlet.http.HttpSession;
19  
20  import org.hibernate.HibernateException;
21  import org.hibernate.Query;
22  import org.hibernate.Transaction;
23  
24  import comum.database.Dao;
25  import comum.util.Data;
26  import comum.util.Mensagem;
27  import comum.util.Pagina;
28  import comum.util.Util;
29  
30  import ecar.exception.ECARException;
31  import ecar.login.SegurancaECAR;
32  import ecar.pojo.DemAtributoDema;
33  import ecar.pojo.DemandasGrpAcesso;
34  import ecar.pojo.EntidadeAtributoEnta;
35  import ecar.pojo.EntidadeEnt;
36  import ecar.pojo.LocalItemLit;
37  import ecar.pojo.ObjetoDemanda;
38  import ecar.pojo.OrgaoOrg;
39  import ecar.pojo.PaiFilho;
40  import ecar.pojo.RegApontamentoRegda;
41  import ecar.pojo.RegDemandaRegd;
42  import ecar.pojo.SisAtributoSatb;
43  import ecar.pojo.SisGrupoAtributoSga;
44  import ecar.pojo.UsuarioAtributoUsua;
45  import ecar.pojo.UsuarioUsu;
46  import ecar.util.Dominios;
47  
48  /**
49   * Classe de manipulação de objetos da classe AtributoAtt.
50   * @author CodeGenerator - Esta classe foi gerada automaticamente
51   * @since 1.0
52   * @version 1.0, Fri Jan 27 07:54:28 BRST 2006
53   */
54  public class RegDemandaDao extends Dao {
55    /**
56     * Construtor. Chama o Session factory do Hibernate
57     */
58    public RegDemandaDao(HttpServletRequest request) {
59      super();
60      this.request = request;
61    }
62  
63    /**
64     * Seta os valores do form no objeto RegDemandaRegd.
65     * @param regDemanda
66     * @param request
67     * @throws NumberFormatException
68     * @throws ECARException
69     */
70    public void setRegDemanda(RegDemandaRegd regDemanda, HttpServletRequest request) throws NumberFormatException, ECARException {
71  
72      if (Pagina.getParam(request, "regDemandaRegd") != null)
73        regDemanda.setRegDemandaRegd((RegDemandaRegd) buscar(RegDemandaRegd.class, Long.valueOf(Pagina.getParam(request, "regDemandaRegd"))));
74      else
75        regDemanda.setRegDemandaRegd(null);
76  
77      regDemanda.setDescricaoRegd(Util.normalizaQuebraDeLinha(Pagina.getParamStr(request, "descricaoRegd").trim()));
78      regDemanda.setDataLimiteRegd(Pagina.getParamDataBanco(request, "dataLimiteRegd"));
79      regDemanda.setObservacaoRegd(Util.normalizaQuebraDeLinha(Pagina.getParamStr(request, "observacaoRegd").trim()));
80  
81      if (Pagina.getParam(request, "numeroDocOrigemRegd") != null)
82        regDemanda.setNumeroDocOrigemRegd(Integer.valueOf(Pagina.getParamInt(request, "numeroDocOrigemRegd")));
83      else
84        regDemanda.setNumeroDocOrigemRegd(null);
85  
86      // if(Pagina.getParam(request, "orgaoOrg") != null)
87      // regDemanda.setOrgaoOrg((OrgaoOrg) buscar(OrgaoOrg.class,
88      // Long.valueOf(Pagina.getParam(request, "orgaoOrg"))));
89      // else
90      // regDemanda.setOrgaoOrg(null);
91  
92      regDemanda.setDataSolicitacaoRegd(Pagina.getParamDataBanco(request, "dataSolicitacaoRegd"));
93      regDemanda.setNomeSolicitanteRegd(Pagina.getParamStr(request, "nomeSolicitanteRegd").trim());
94      regDemanda.setIndAtivoRegd(Pagina.getParamStr(request, "indAtivoRegd"));
95  
96      setLocais(regDemanda, request);
97      setEntidadeOrgaos(regDemanda, request);
98      setEntidades(regDemanda, request);
99      setAtributosDemanda(request, regDemanda);
100   }
101 
102   /**
103    * Seta atributos Demanda
104    * @param request
105    * @param regDemanda
106    * @throws ECARException
107    */
108   public void setAtributosDemanda(HttpServletRequest request, RegDemandaRegd regDemanda) throws ECARException {
109     regDemanda.setDemAtributoDemas(null);
110     List lAtributos;
111     lAtributos = new SisGrupoAtributoDao(request).getGruposAtributosCadastro("D");
112     Iterator it = lAtributos.iterator();
113     while (it.hasNext()) {
114       SisGrupoAtributoSga grupoAtributo = (SisGrupoAtributoSga) it.next();
115       if (!"".equals(Pagina.getParamStr(request, "a" + grupoAtributo.getCodSga().toString()))) {
116         DemAtributoDema demandaAtributo = new DemAtributoDema();
117         demandaAtributo.setRegDemandaRegd(regDemanda);
118         /*
119          * Caso o tipo de campo seja texto considera-se que o Grupo de Atributos
120          * possuirá apenas 1 atributo que o representa.
121          */
122         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())) {
123           if (grupoAtributo.getSisAtributoSatbs() != null && grupoAtributo.getSisAtributoSatbs().size() > 0) {
124             demandaAtributo.setInformacao(Pagina.getParamStr(request, "a" + grupoAtributo.getCodSga().toString()));
125             demandaAtributo.setSisAtributoSatb((SisAtributoSatb) grupoAtributo.getSisAtributoSatbs().iterator().next());
126             demandaAtributo.setDataInclusao(Data.getDataAtual());
127             if (regDemanda.getDemAtributoDemas() == null)
128               regDemanda.setDemAtributoDemas(new HashSet());
129             regDemanda.getDemAtributoDemas().add(demandaAtributo);
130           }
131         }
132         else {
133 
134           String[] atributos = request.getParameterValues("a" + grupoAtributo.getCodSga().toString());
135           for (int i = 0; i < atributos.length; i++) {
136             /*
137              * Tenho que criar novamente o usuário atributo senão ele não é
138              * adicionado no set no final deste laço
139              */
140             demandaAtributo = new DemAtributoDema();
141             demandaAtributo.setRegDemandaRegd(regDemanda);
142             demandaAtributo.setSisAtributoSatb((SisAtributoSatb) super.buscar(SisAtributoSatb.class, Long.valueOf(atributos[i])));
143             demandaAtributo.setDataInclusao(Data.getDataAtual());
144             if (regDemanda.getDemAtributoDemas() == null)
145               regDemanda.setDemAtributoDemas(new HashSet());
146             regDemanda.getDemAtributoDemas().add(demandaAtributo);
147           }
148         }
149       }
150       /*
151        * Foi necessário alterar o nome dos campos dos elementos multitexto,
152        * adicionando "-codSatb" Assim, ficamos com o nome do campo no seguinte
153        * padrão: "a + codSteg + _ + codSatb" (ex.: a12_38) Isto foi feito visto
154        * a diferença existente entre um grupo com suporte a 1 campo texto e
155        * este, que suporta vários campos texto.
156        */
157       else {
158         if (SisTipoExibicGrupoDao.MULTITEXTO.equals(grupoAtributo.getSisTipoExibicGrupoSteg().getCodSteg().toString())) {
159           Enumeration lAtrib = request.getParameterNames();
160           while (lAtrib.hasMoreElements()) {
161             String atrib = (String) lAtrib.nextElement();
162             if (atrib.lastIndexOf('_') > 0) {
163               String nomeAtrib = atrib.substring(0, atrib.lastIndexOf('_'));
164               String nomeCampo = atrib.substring(atrib.lastIndexOf('_') + 1);
165               if (nomeAtrib.equals("a" + grupoAtributo.getCodSga().toString()) && !"".equals(Pagina.getParamStr(request, atrib))) {
166                 DemAtributoDema demandaAtributo = new DemAtributoDema();
167                 demandaAtributo.setRegDemandaRegd(regDemanda);
168                 demandaAtributo.setInformacao(Pagina.getParamStr(request, atrib));
169                 demandaAtributo.setSisAtributoSatb((SisAtributoSatb) super.buscar(SisAtributoSatb.class, Long.valueOf(nomeCampo)));
170                 demandaAtributo.setDataInclusao(Data.getDataAtual());
171                 if (regDemanda.getDemAtributoDemas() == null)
172                   regDemanda.setDemAtributoDemas(new HashSet());
173                 regDemanda.getDemAtributoDemas().add(demandaAtributo);
174               }
175             }
176           }
177         }
178       }
179     }
180   }
181 
182   /**
183    * Seta a lista de locais em RegDemandaRgd
184    * @param regDemanda
185    * @param request
186    * @throws ECARException
187    */
188   public void setLocais(RegDemandaRegd regDemanda, HttpServletRequest request) throws ECARException {
189     int numLocais = 0;
190     if (request.getParameter("contLocal") != null) {
191       numLocais = Integer.parseInt(request.getParameter("contLocal"));
192     }
193     for (int i = 1; i <= numLocais; i++) {
194       if ("S".equals(Pagina.getParamStr(request, "adicionaLocal" + i))) {
195         LocalItemLit local = new LocalItemLit();
196         local = (LocalItemLit) super.buscar(LocalItemLit.class, Long.valueOf(Pagina.getParamStr(request, "codLit" + i)));
197         if (regDemanda.getLocalDemandaLdems() == null)
198           regDemanda.setLocalDemandaLdems(new HashSet());
199         regDemanda.getLocalDemandaLdems().add(local);
200       }
201     }
202   }
203 
204   /**
205    * Seta a lista de entidades em RegDemandaRgd
206    * @param regDemanda
207    * @param request
208    * @throws ECARException
209    */
210   public void setEntidades(RegDemandaRegd regDemanda, HttpServletRequest request) throws ECARException {
211     int numEntidades = 0;
212     if (request.getParameter("contEntidade") != null) {
213       numEntidades = Integer.parseInt(request.getParameter("contEntidade"));
214     }
215     for (int i = 1; i <= numEntidades; i++) {
216       if ("S".equals(Pagina.getParamStr(request, "adicionaEntidade" + i))) {
217         EntidadeEnt entidade = new EntidadeEnt();
218         entidade = (EntidadeEnt) super.buscar(EntidadeEnt.class, Long.valueOf(Pagina.getParamStr(request, "codEnt" + i)));
219         if (regDemanda.getEntidadeDemandaEntds() == null)
220           regDemanda.setEntidadeDemandaEntds(new HashSet());
221         regDemanda.getEntidadeDemandaEntds().add(entidade);
222       }
223     }
224   }
225 
226   /**
227    * Seta a lista de orgãos (que também são entidades) em RegDemandaRgd
228    * @param regDemanda
229    * @param request
230    * @throws ECARException
231    */
232   public void setEntidadeOrgaos(RegDemandaRegd regDemanda, HttpServletRequest request) throws ECARException {
233     int numEntidadeOrgaos = 0;
234     if (request.getParameter("contEntidadeOrgao") != null) {
235       numEntidadeOrgaos = Integer.parseInt(request.getParameter("contEntidadeOrgao"));
236     }
237     for (int i = 1; i <= numEntidadeOrgaos; i++) {
238       if ("S".equals(Pagina.getParamStr(request, "adicionaEntidadeOrgao" + i))) {
239         EntidadeEnt entidadeOrgao = new EntidadeEnt();
240         entidadeOrgao = (EntidadeEnt) super.buscar(EntidadeEnt.class, Long.valueOf(Pagina.getParamStr(request, "codEntOrg" + i)));
241         if (regDemanda.getEntidadeOrgaoDemandaEntorgds() == null)
242           regDemanda.setEntidadeOrgaoDemandaEntorgds(new HashSet());
243         regDemanda.getEntidadeOrgaoDemandaEntorgds().add(entidadeOrgao);
244       }
245     }
246   }
247 
248   /**
249    * Verifica a permissão do usuário logado para realizar alteração e/ou
250    * classificação no RegDemandaRegd.
251    * @param regDemanda
252    * @param request
253    * @return
254    */
255   public boolean validaUsuarioAltExc(RegDemandaRegd regDemanda, HttpServletRequest request) {
256     HttpSession session = request.getSession();
257     boolean retorno = false;
258 
259     try {
260       DemandasGrpAcessoDao demandasGrpAcessoDao = new DemandasGrpAcessoDao();
261       DemandasGrpAcesso demandasGrpAcesso = null;
262       SegurancaECAR seguranca = ((ecar.login.SegurancaECAR) session.getAttribute("seguranca"));
263 
264       if (seguranca != null) {
265         Iterator gruposAcessoIt = seguranca.getGruposAcesso().iterator();
266         while (gruposAcessoIt.hasNext()) {
267           SisAtributoSatb grpAcesso = (SisAtributoSatb) gruposAcessoIt.next();
268           demandasGrpAcesso = (DemandasGrpAcesso) demandasGrpAcessoDao.getDemandasGrpAcesso(grpAcesso);
269           if (demandasGrpAcesso != null && demandasGrpAcesso.getAcessoDemanda().equals(Dominios.SIM)) {
270             break;
271           }
272           else {
273             demandasGrpAcesso = null;
274           }
275         }
276         // se é administrador de demandas
277         if (demandasGrpAcesso != null) {
278           retorno = true;
279         }
280         // se não é administrador de demandas,
281         // verifica se a demanda foi cadastrada por algum usuario que pertença a
282         // seu grupo de acesso
283         else {
284           Set gruposAcessoUsuarioLogado = seguranca.getGruposAcesso();
285           Iterator gruposAcessoUsuarioInclusaoIt;
286           gruposAcessoUsuarioInclusaoIt = regDemanda.getUsuarioUsuByCodUsuInclusaoRegd().getUsuarioAtributoUsuas().iterator();
287           while (gruposAcessoUsuarioInclusaoIt.hasNext()) {
288             SisAtributoSatb grpAcesso = ((UsuarioAtributoUsua) gruposAcessoUsuarioInclusaoIt.next()).getSisAtributoSatb();
289             if (gruposAcessoUsuarioLogado.contains(grpAcesso)) {
290               retorno = true;
291               break;
292             }
293           }
294         }
295       }
296 
297     } catch (Exception e) {
298       // Não precisa levantar exceção aqui.
299     }
300 
301     return retorno;
302   }
303 
304   /**
305    * Salva
306    * @param regDemanda
307    * @throws ECARException
308    */
309   public void salvar(RegDemandaRegd regDemanda) throws ECARException {
310     regDemanda.setDataInclusaoRegd(Data.getDataAtual());
311 
312     List filhos = new ArrayList();
313     if (regDemanda.getDemAtributoDemas() != null)
314       filhos.addAll(regDemanda.getDemAtributoDemas());
315 
316     super.salvar(regDemanda, filhos);
317   }
318 
319   /**
320    * Alterar RegDemandaRegd
321    * @param regDemanda
322    * @param request
323    * @throws ECARException
324    */
325   public void alterar(RegDemandaRegd regDemanda, HttpServletRequest request) throws ECARException {
326     Transaction tx = null;
327 
328     try {
329       List objetos = new ArrayList();
330       super.inicializarLogBean();
331       tx = session.beginTransaction();
332 
333       // limpar lista de localDemanda
334       regDemanda.setLocalDemandaLdems(null);
335 
336       // limpar lista de entidadeDemanda
337       regDemanda.setEntidadeDemandaEntds(null);
338 
339       // limpar lista de entidadeOrgaosDemanda
340       regDemanda.setEntidadeOrgaoDemandaEntorgds(null);
341 
342       // limpar lista de demandaAtributo
343       if (regDemanda.getDemAtributoDemas() != null) {
344         Iterator itAtt = regDemanda.getDemAtributoDemas().iterator();
345         while (itAtt.hasNext()) {
346           DemAtributoDema demandaAtributo = (DemAtributoDema) itAtt.next();
347           session.delete(demandaAtributo);
348           objetos.add(demandaAtributo);
349         }
350       }
351 
352       // setar valores vindos do request
353       this.setRegDemanda(regDemanda, request);
354 
355       // guarda a lista de demandaAtributo vindo do request
356       List filhos = new ArrayList();
357       if (regDemanda.getDemAtributoDemas() != null)
358         filhos.addAll(regDemanda.getDemAtributoDemas());
359 
360       // salva regDemanda
361       session.update(regDemanda);
362       objetos.add(regDemanda);
363 
364       // salva a lista de demandaAtributo
365       Iterator it = filhos.iterator();
366       while (it.hasNext()) {
367         PaiFilho object = (PaiFilho) it.next();
368         object.atribuirPKPai();
369         // salva os filhos
370         session.save(object);
371         objetos.add(object);
372       }
373 
374       tx.commit();
375 
376       if (super.logBean != null) {
377         super.logBean.setCodigoTransacao(Data.getHoraAtual(false));
378         super.logBean.setOperacao("INC_ALT_EXC");
379         Iterator itObj = objetos.iterator();
380 
381         while (itObj.hasNext()) {
382           super.logBean.setObj(itObj.next());
383           super.loggerAuditoria.info(logBean.toString());
384         }
385       }
386 
387     } catch (HibernateException e) {
388       if (tx != null)
389         try {
390           tx.rollback();
391         } catch (HibernateException r) {
392           this.logger.error(r);
393           throw new ECARException("erro.hibernateException");
394         }
395       this.logger.error(e);
396       throw new ECARException("erro.hibernateException");
397     } catch (ECARException e) {
398       this.logger.error(e);
399       if (tx != null)
400         try {
401           tx.rollback();
402         } catch (HibernateException r) {
403           this.logger.error(r);
404           throw new ECARException("erro.hibernateException");
405         }
406       throw e;
407     }
408   }
409 
410   /**
411    * Classifica e ordena a lista conforme os parâmetros passados. clCampo :
412    * descricaoRegd, codRegd, dataSolicitacaoRegd, entidadeEnt ou sitDemandaSitd.
413    * clOrden : asc ou desc.
414    * @param clCampo - Campo pelo qual a lista será ordenada.
415    * @param clOrdem - Ordem pela qual a lista será ordenada.
416    * @param lista - lista que será ordenada.
417    */
418   public void classificarOrdenacao(String clCampo, String clOrdem, List lista) {
419     // testar cada string para realizar a ordenação
420     if ("descricaoRegd".equals(clCampo)) {
421       if ("asc".equals(clOrdem)) {
422         Collections.sort(lista, new Comparator() {
423           public int compare(Object o1, Object o2) {
424             return ((RegDemandaRegd) o1).getDescricaoRegd().compareToIgnoreCase(((RegDemandaRegd) o2).getDescricaoRegd());
425           }
426         });
427       }
428       else {
429         Collections.sort(lista, new Comparator() {
430           public int compare(Object o1, Object o2) {
431             return -((RegDemandaRegd) o1).getDescricaoRegd().compareToIgnoreCase(((RegDemandaRegd) o2).getDescricaoRegd());
432           }
433         });
434       }
435     }
436     if ("codRegd".equals(clCampo)) {
437       if ("asc".equals(clOrdem)) {
438         Collections.sort(lista, new Comparator() {
439           public int compare(Object o1, Object o2) {
440             return ((RegDemandaRegd) o1).getCodRegd().intValue() - ((RegDemandaRegd) o2).getCodRegd().intValue();
441           }
442         });
443       }
444       else {
445         Collections.sort(lista, new Comparator() {
446           public int compare(Object o1, Object o2) {
447             return -(((RegDemandaRegd) o1).getCodRegd().intValue() - ((RegDemandaRegd) o2).getCodRegd().intValue());
448           }
449         });
450       }
451     }
452     if ("dataSolicitacaoRegd".equals(clCampo)) {
453       if ("asc".equals(clOrdem)) {
454         Collections.sort(lista, new Comparator() {
455           public int compare(Object o1, Object o2) {
456             RegDemandaRegd regD1 = (RegDemandaRegd) o1;
457             RegDemandaRegd regD2 = (RegDemandaRegd) o2;
458             // Quando a data está nula, foi utilizado um artifício para não
459             // ocorrer Exception
460             if (regD1.getDataSolicitacaoRegd() != null) {
461               if (regD2.getDataSolicitacaoRegd() != null) {
462                 return regD1.getDataSolicitacaoRegd().compareTo(regD2.getDataSolicitacaoRegd());
463               }
464               else {
465                 return "a".compareTo("");
466               }
467             }
468             else {
469               if (regD2.getDataSolicitacaoRegd() != null) {
470                 return "".compareTo("a");
471               }
472               else {
473                 return "".compareTo("");
474               }
475             }
476           }
477         });
478       }
479       else {
480         Collections.sort(lista, new Comparator() {
481           public int compare(Object o1, Object o2) {
482             RegDemandaRegd regD1 = (RegDemandaRegd) o1;
483             RegDemandaRegd regD2 = (RegDemandaRegd) o2;
484             // Quando a data está nula, foi utilizado um artifício para não
485             // ocorrer Exception
486             if (regD1.getDataSolicitacaoRegd() != null) {
487               if (regD2.getDataSolicitacaoRegd() != null) {
488                 return -(regD1.getDataSolicitacaoRegd().compareTo(regD2.getDataSolicitacaoRegd()));
489               }
490               else {
491                 return -("a".compareTo(""));
492               }
493             }
494             else {
495               if (regD2.getDataSolicitacaoRegd() != null) {
496                 return -("".compareTo("a"));
497               }
498               else {
499                 return -("".compareTo(""));
500               }
501             }
502           }
503         });
504       }
505     }
506     if ("entidadeEnt".equals(clCampo)) {
507       /*
508        * Mapeamento com Entidade foi alterado não está sendo feita classificação
509        * por Entidade. if ("asc".equals(clOrdem)) { Collections.sort(lista, new
510        * Comparator() { public int compare(Object o1, Object o2) { return (
511        * (RegDemandaRegd) o1
512        * ).getEntidadeEnt().getNomeEnt().compareToIgnoreCase(( (RegDemandaRegd)
513        * o2 ).getEntidadeEnt().getNomeEnt()); } } ); } else {
514        * Collections.sort(lista, new Comparator() { public int compare(Object
515        * o1, Object o2) { return -( (RegDemandaRegd) o1
516        * ).getEntidadeEnt().getNomeEnt().compareToIgnoreCase(( (RegDemandaRegd)
517        * o2 ).getEntidadeEnt().getNomeEnt()); } } ); }
518        */
519     }
520     if ("sitDemandaSitd".equals(clCampo)) {
521       if ("asc".equals(clOrdem)) {
522         Collections.sort(lista, new Comparator() {
523           public int compare(Object o1, Object o2) {
524             return ((RegDemandaRegd) o1).getSitDemandaSitd().getDescricaoSitd().compareToIgnoreCase(((RegDemandaRegd) o2).getSitDemandaSitd().getDescricaoSitd());
525           }
526         });
527       }
528       else {
529         Collections.sort(lista, new Comparator() {
530           public int compare(Object o1, Object o2) {
531             return -((RegDemandaRegd) o1).getSitDemandaSitd().getDescricaoSitd().compareToIgnoreCase(((RegDemandaRegd) o2).getSitDemandaSitd().getDescricaoSitd());
532           }
533         });
534       }
535     }
536 
537     // evitar problema de lazy
538     Iterator itRes = lista.iterator();
539     while (itRes.hasNext()) {
540       RegDemandaRegd regDemandaResul = (RegDemandaRegd) itRes.next();
541       regDemandaResul.getEntidadeDemandaEntds().size();
542     }
543   }
544 
545   /**
546    * Exclui
547    * @param codigosParaExcluir
548    * @throws Exception
549    */
550   public void excluir(String[] codigosParaExcluir) throws ECARException, Exception {
551     try {
552       List exclusao = new ArrayList();
553 
554       for (int i = 0; i < codigosParaExcluir.length; i++) {
555         RegDemandaRegd regDemanda = (RegDemandaRegd) buscar(RegDemandaRegd.class, Long.valueOf(codigosParaExcluir[i]));
556 
557         if (regDemanda.getRegDemandaRegds() == null || regDemanda.getRegDemandaRegds().size() == 0) {
558 
559           if (regDemanda.getRegApontamentoRegdas() != null && regDemanda.getRegApontamentoRegdas().size() > 0) {
560             Iterator it = regDemanda.getRegApontamentoRegdas().iterator();
561             while (it.hasNext()) {
562               RegApontamentoRegda regAp = (RegApontamentoRegda) it.next();
563               exclusao.add(regAp);
564             }
565           }
566 
567           if (regDemanda.getDemAtributoDemas() != null) {
568             Iterator itAtb = regDemanda.getDemAtributoDemas().iterator();
569             while (itAtb.hasNext()) {
570               DemAtributoDema demAtrib = (DemAtributoDema) itAtb.next();
571               exclusao.add(demAtrib);
572             }
573           }
574 
575           exclusao.add(regDemanda);
576         }
577         else {
578 
579           throw new ECARException("registroDemanda.exclusao.erroDemandaRelacionada");
580         }
581       }
582 
583       if (exclusao.size() > 0)
584         super.excluir(exclusao);
585 
586     } catch (ECARException e) {
587       this.logger.error(e);
588       throw e;
589 
590     } catch (Exception e) {
591       this.logger.error(e);
592       throw e;
593     }
594   }
595 
596   /**
597    * Pesquisa RegDemandaRegd
598    * @param regDemanda
599    * @param request
600    * @param limiteInicial
601    * @param limiteFinal
602    * @param solicitacaoInicial
603    * @param solicitacaoFinal
604    * @throws ECARException
605    */
606   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 {
607 
608     String join = "";
609     String where = "";
610 
611     List atributosEntidade = new ArrayList();
612 
613     if ((limiteInicial != null && limiteFinal != null) || (solicitacaoInicial != null && solicitacaoFinal != null)) {
614       where += " where ";
615 
616       if (limiteInicial != null && limiteFinal != null)
617         where += " (i.dataLimiteRegd >= :limiteInicial and i.dataLimiteRegd <= :limiteFinal)";
618 
619       if (solicitacaoInicial != null && solicitacaoFinal != null) {
620         if (!" where ".equals(where))
621           where += " or ";
622 
623         where += " (i.dataSolicitacaoRegd >= :solicitacaoInicial and i.dataSolicitacaoRegd <= :solicitacaoInicial)";
624       }
625     }
626 
627     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)) {
628 
629       if ("".equals(where))
630         where += " where ";
631 
632       if (num_registro > 0)
633         if (" where ".equals(where))
634           where += " i.codRegd = :num_registro ";
635         else
636           where += " and i.codRegd = :num_registro ";
637       if (!"".equals(descricao))
638         if ("where".equals(where))
639           where += " upper( i.descricaoRegd ) like :descricao ";
640         else
641           where += " and upper( i.descricaoRegd ) like :descricao ";
642       if (!"".equals(observacao))
643         if ("where".equals(where))
644           where += " upper( i.observacaoRegd ) like :observacao ";
645         else
646           where += " and upper( i.observacaoRegd ) like :observacao ";
647       if (num_doc_origem > 0)
648         if ("where".equals(where))
649           where += " i.numeroDocOrigemRegd = :num_doc_origem ";
650         else
651           where += " and i.numeroDocOrigemRegd = :num_doc_origem ";
652       if (!"".equals(usu_sol))
653         if ("where".equals(where))
654           where += " upper( i.nomeSolicitanteRegd ) like :usu_sol ";
655         else
656           where += " and upper( i.nomeSolicitanteRegd ) like :usu_sol ";
657       if (!"".equals(nome_sigla)) {
658         join += " join i.entidadeDemandaEntds as entidade ";
659         if ("where".equals(where))
660           where += " ( upper( entidade.nomeEnt ) like :nome_sigla or upper( entidade.siglaEnt ) like :nome_sigla )";
661         else
662           where += " and ( upper( entidade.nomeEnt ) like :nome_sigla or upper( entidade.siglaEnt ) like :nome_sigla )";
663       }
664       if (codPrior > 0)
665         if ("where".equals(where))
666           where += " i.prioridadePrior.codPrior = :codPrior ";
667         else
668           where += " and i.prioridadePrior.codPrior = :codPrior ";
669       if (codSitd > 0)
670         if ("where".equals(where))
671           where += " i.sitDemandaSitd.codSitd = :codSitd ";
672         else
673           where += " and i.sitDemandaSitd.codSitd = :codSitd ";
674       if (codOrg > 0)
675         if (where.equals(" where "))
676           where += " i.orgaoOrg.codOrg = :codOrg ";
677         else
678           where += " and i.orgaoOrg.codOrg = :codOrg ";
679       if (entidade.getEntidadeAtributoEntas() != null && entidade.getEntidadeAtributoEntas().size() > 0) {
680         if ("".equals(nome_sigla)) {
681           join += " join i.entidadeDemandaEntds as entidade ";
682         }
683         join += " join entidade.entidadeAtributoEntas as entAtributo ";
684 
685         Iterator it = entidade.getEntidadeAtributoEntas().iterator();
686         while (it.hasNext()) {
687           EntidadeAtributoEnta entAtributo = (EntidadeAtributoEnta) it.next();
688           atributosEntidade.add(entAtributo.getSisAtributoSatb().getCodSatb());
689         }
690 
691         if ("where".equals(where))
692           where += " entAtributo.comp_id.codSatb in (:entAtributo) ";
693         else
694           where += " and entAtributo.comp_id.codSatb in (:entAtributo) ";
695       }
696     }
697 
698     Query query = this.getSession().createQuery("select i from RegDemandaRegd i" + join + where);
699 
700     if (limiteInicial != null)
701       query.setDate("limiteInicial", limiteInicial);
702     if (limiteFinal != null)
703       query.setDate("limiteFinal", limiteFinal);
704     if (solicitacaoInicial != null)
705       query.setDate("solicitacaoInicial", solicitacaoInicial);
706     if (solicitacaoFinal != null)
707       query.setDate("solicitacaoFinal", solicitacaoFinal);
708 
709     if (num_registro > 0)
710       query.setLong("num_registro", num_registro);
711     if (!"".equals(descricao))
712       query.setString("descricao", "%" + descricao.toUpperCase() + "%");
713     if (!"".equals(observacao))
714       query.setString("observacao", "%" + observacao.toUpperCase() + "%");
715     if (num_doc_origem > 0)
716       query.setInteger("num_doc_origem", num_doc_origem);
717     if (!"".equals(usu_sol))
718       query.setString("usu_sol", "%" + usu_sol.toUpperCase() + "%");
719     if (!"".equals(nome_sigla))
720       query.setString("nome_sigla", "%" + nome_sigla.toUpperCase() + "%");
721     if (codPrior > 0)
722       query.setLong("codPrior", codPrior);
723     if (codSitd > 0)
724       query.setLong("codSitd", codSitd);
725     if (codOrg > 0)
726       query.setLong("codOrg", codOrg);
727 
728     if (entidade.getEntidadeAtributoEntas() != null && entidade.getEntidadeAtributoEntas().size() > 0) {
729       query.setParameterList("entAtributo", atributosEntidade);
730     }
731 
732     List ret = query.list();
733 
734     List locais = new ArrayList();
735     if (!"".equals(codLocais))
736       locais = new LocalItemDao(request).pesquisarCodLocais(codLocais);
737 
738     request.getSession().setAttribute("listLocais", locais);
739     if ((ret != null) && (ret.size() > 0) && (!"".equals(codLocais))) {
740 
741       List atributosPesquisa = new ArrayList();
742       Iterator itAtbPesquisa = locais.iterator();
743       while (itAtbPesquisa.hasNext())
744         atributosPesquisa.add(((LocalItemLit) itAtbPesquisa.next()));
745 
746       Iterator it = ret.iterator();
747       while (it.hasNext()) {
748         List atributosResultado = new ArrayList();
749         Iterator itAtribResultado = ((RegDemandaRegd) it.next()).getLocalDemandaLdems().iterator();
750 
751         while (itAtribResultado.hasNext())
752           atributosResultado.add((LocalItemLit) itAtribResultado.next());
753 
754         if (!atributosResultado.containsAll(atributosPesquisa))
755           it.remove();
756       }
757     }
758     return ret;
759   }
760 
761   /**
762    * Pesquisa PopUp Reg Demanda
763    * @param regDemanda
764    * @return List
765    * @throws ECARException
766    */
767   public List pesquisarPopUpRegDemanda(RegDemandaRegd regDemanda, Set gruposAcesso) throws ECARException {
768     try {
769       StringBuilder select = new StringBuilder();
770       StringBuilder where = new StringBuilder();
771       StringBuilder order = new StringBuilder();
772 
773       boolean bolWhere = false;
774 
775       DemandasGrpAcessoDao demandasGrpAcessoDao = new DemandasGrpAcessoDao();
776       DemandasGrpAcesso demandasGrpAcesso = null;
777 
778       if (gruposAcesso != null) {
779         Iterator gruposAcessoIt = gruposAcesso.iterator();
780         while (gruposAcessoIt.hasNext()) {
781           SisAtributoSatb grpAcesso = (SisAtributoSatb) gruposAcessoIt.next();
782           demandasGrpAcesso = (DemandasGrpAcesso) demandasGrpAcessoDao.getDemandasGrpAcesso(grpAcesso);
783           if (demandasGrpAcesso != null && demandasGrpAcesso.getAcessoDemanda().equals(Dominios.SIM)) {
784             break;
785           }
786           else {
787             demandasGrpAcesso = null;
788           }
789         }
790       }
791 
792       boolean administradorDemandas = demandasGrpAcesso != null ? true : false;
793 
794       if (administradorDemandas) {
795         select.append("select regDemanda from RegDemandaRegd as regDemanda");
796       }
797       else {
798         select.append("select distinct regDemanda from RegDemandaRegd as regDemanda").append(" join regDemanda.usuarioUsuByCodUsuInclusaoRegd as usuario ").append(" join usuario.usuarioAtributoUsuas as usuarioAtributo ");
799       }
800 
801       if (regDemanda.getDescricaoRegd() != null && !"".equals(regDemanda.getDescricaoRegd())) {
802 
803         bolWhere = true;
804         where.append(" where");
805 
806         where.append(" upper(regDemanda.descricaoRegd) like :descricao");
807       }
808       if (regDemanda.getEntidadeDemandaEntds() != null && regDemanda.getEntidadeDemandaEntds().size() > 0) {
809         select.append(" join regDemanda.entidadeDemandaEntds as entidade");
810 
811         EntidadeEnt entidade = (EntidadeEnt) regDemanda.getEntidadeDemandaEntds().iterator().next();
812 
813         if (entidade.getSiglaEnt() != null && !"".equals(entidade.getSiglaEnt())) {
814           if (bolWhere) {
815             where.append(" and");
816           }
817           else {
818             bolWhere = true;
819             where.append(" where");
820           }
821           where.append(" upper(entidade.siglaEnt) like :siglaEnt");
822         }
823 
824         if (entidade.getNomeEnt() != null && !"".equals(entidade.getNomeEnt())) {
825           if (bolWhere) {
826             where.append(" and");
827           }
828           else {
829             bolWhere = true;
830             where.append(" where");
831           }
832           where.append(" upper(entidade.nomeEnt) like :nomeEnt");
833         }
834       }
835       if (regDemanda.getNomeSolicitanteRegd() != null && !"".equals(regDemanda.getNomeSolicitanteRegd())) {
836         if (bolWhere) {
837           where.append(" and");
838         }
839         else {
840           bolWhere = true;
841           where.append(" where");
842         }
843         where.append(" upper(regDemanda.nomeSolicitanteRegd) like :usuario");
844       }
845 
846       if (!administradorDemandas && gruposAcesso != null) {
847 
848         if (bolWhere) {
849           where.append(" and");
850         }
851         else {
852           bolWhere = true;
853           where.append(" where");
854         }
855 
856         where.append(" (usuarioAtributo.usuarioUsu.codUsu = usuario.codUsu ").append(" and usuarioAtributo.comp_id.codSatb in (:gruposAcesso))");
857       }
858 
859       order.append(" order by regDemanda.descricaoRegd asc");
860 
861       Query query = this.getSession().createQuery(select.toString() + where.toString() + order.toString());
862 
863       if (!administradorDemandas) {
864 
865         List<Long> listCodGruposAcesso = new ArrayList<Long>();
866         if (gruposAcesso != null) {
867           for (Iterator iter = gruposAcesso.iterator(); iter.hasNext();) {
868             SisAtributoSatb grupoAcesso = (SisAtributoSatb) iter.next();
869             listCodGruposAcesso.add(grupoAcesso.getCodSatb());
870           }
871         }
872 
873         if (listCodGruposAcesso != null && listCodGruposAcesso.size() > 0) {
874           query.setParameterList("gruposAcesso", listCodGruposAcesso);
875         }
876       }
877 
878       if (regDemanda.getDescricaoRegd() != null && !"".equals(regDemanda.getDescricaoRegd())) {
879         query.setString("descricao", "%" + regDemanda.getDescricaoRegd().toUpperCase() + "%");
880       }
881       if (regDemanda.getEntidadeDemandaEntds() != null && regDemanda.getEntidadeDemandaEntds().size() > 0) {
882         EntidadeEnt entidade = (EntidadeEnt) regDemanda.getEntidadeDemandaEntds().iterator().next();
883         if (entidade.getSiglaEnt() != null && !"".equals(entidade.getSiglaEnt())) {
884           query.setString("siglaEnt", "%" + entidade.getSiglaEnt().toUpperCase() + "%");
885         }
886         if (entidade.getNomeEnt() != null && !"".equals(entidade.getNomeEnt())) {
887           query.setString("nomeEnt", "%" + entidade.getNomeEnt().toUpperCase() + "%");
888         }
889       }
890       if (regDemanda.getNomeSolicitanteRegd() != null && !"".equals(regDemanda.getNomeSolicitanteRegd())) {
891         query.setString("usuario", "%" + regDemanda.getNomeSolicitanteRegd().toUpperCase() + "%");
892       }
893 
894       return query.list();
895     } catch (HibernateException e) {
896       this.logger.error(e);
897       throw new ECARException(e);
898     }
899   }
900 
901   /**
902    * @param regDemanda
903    * @param grupo
904    * @return List
905    * @throws ECARException
906    */
907   public List getDemandaAtributoByGrupo(RegDemandaRegd regDemanda, SisGrupoAtributoSga grupo) throws ECARException {
908     List retorno = new ArrayList();
909     Set result = regDemanda.getDemAtributoDemas();
910     if (result != null) {
911       if (result.size() > 0) {
912         Iterator it = result.iterator();
913         while (it.hasNext()) {
914           DemAtributoDema demandaAtributo = (DemAtributoDema) it.next();
915           if (demandaAtributo.getSisAtributoSatb().getSisGrupoAtributoSga().equals(grupo))
916             retorno.add(demandaAtributo);
917         }
918 
919       }
920     }
921     return retorno;
922   }
923 
924   /**
925    * Retorna o valor de um atributo demanda em um regDemanda
926    * @param regDemanda
927    * @param nomeAtbdem
928    * @param nomeFkAtbdem
929    * @return
930    * @throws ECARException
931    */
932   public String getValorAtributoDemanda(RegDemandaRegd regDemanda, String nomeAtbdem, String FkAtbdem) throws ECARException {
933     try {
934       Object retorno = Util.invocaGet(regDemanda, nomeAtbdem);
935       if (retorno != null) {
936         if (FkAtbdem != null && !"".equals(FkAtbdem)) {
937           retorno = Util.invocaGet(retorno, FkAtbdem);
938           if (retorno != null)
939             return retorno.toString();
940           else
941             return "";
942         }
943         else {
944           if (retorno.getClass().equals(Date.class) || retorno.getClass().equals(java.sql.Date.class))
945             retorno = Data.parseDate((Date) retorno);
946 
947           return retorno.toString();
948         }
949       }
950     } catch (Exception e) {
951       this.logger.error(e);
952       throw new ECARException(e);
953     }
954     return "";
955   }
956 
957   /**
958    * Retorna uma lista de RegDemandaRegd que o usuário logado tenha permissão de
959    * acessar, com seu grupo de acesso sendo o mesmo do usuário que inseriu a
960    * demanda.
961    * @param regDemanda
962    * @param gruposAcesso
963    * @return
964    */
965   public List getRegDemandasClassificacaoComPermissaoGrupoUsuario(RegDemandaRegd regDemanda, Set gruposAcesso, boolean ehFiltro, UsuarioUsu usuario) throws HibernateException, ECARException {
966 
967     List retorno = null;
968     try {
969       StringBuilder query = new StringBuilder(" select distinct regDemanda from RegDemandaRegd as regDemanda ").append(" join regDemanda.sitDemandaSitd as situacaoDemanda ")
970       // .append(" join regDemanda.usuarioUsuByCodUsuInclusaoRegd as usuario ")
971       // .append(" join usuario.usuarioAtributoUsuas as usuarioAtributo ")
972       .append(" where ")
973       // .append(" usuario.codUsu = regDemanda.usuarioUsuByCodUsuInclusaoRegd.codUsu ")
974       // .append(" and usuarioAtributo.usuarioUsu.codUsu = usuario.codUsu ")
975       // .append(" and usuarioAtributo.comp_id.codSatb in (:gruposAcesso) ")
976       .append(" situacaoDemanda.indPrimeiraSituacaoSitd = 'S' ").append(" order by regDemanda.codRegd asc ");
977 
978       Query q = this.getSession().createQuery(query.toString());
979 
980       // List<Long> listCodGruposAcesso = new ArrayList<Long>();
981       // for (Iterator iter = gruposAcesso.iterator(); iter.hasNext();) {
982       // SisAtributoSatb grupoAcesso = (SisAtributoSatb) iter.next();
983       // listCodGruposAcesso.add(grupoAcesso.getCodSatb());
984       // }
985 
986       // if(listCodGruposAcesso != null && listCodGruposAcesso.size() > 0){
987       // q.setParameterList("gruposAcesso", listCodGruposAcesso);
988       // }
989 
990       retorno = q.list();
991 
992       aplicarRestricoesRegDemanda(retorno, usuario, gruposAcesso, true);
993 
994       if (ehFiltro)
995         retorno = aplicarFiltrosDinamicosRegDemanda(retorno);
996 
997     } catch (HibernateException e) {
998       this.logger.error(e);
999       throw new ECARException(e);
1000     }
1001 
1002     return retorno;
1003   }
1004 
1005   /**
1006    * Retorna uma lista de RegDemandaRegd que o usuário logado tenha permissão de
1007    * acessar, com seu grupo de acesso sendo o mesmo do usuário que inseriu a
1008    * demanda.
1009    * @param regDemanda
1010    * @param gruposAcesso
1011    * @param ehFiltro
1012    * @return
1013    */
1014   public List getRegDemandasComPermissaoGrupoUsuario(RegDemandaRegd regDemanda, Set gruposAcesso, boolean ehFiltro, UsuarioUsu usuario) throws HibernateException, ECARException {
1015 
1016     List retorno = null;
1017     try {
1018       StringBuilder query = new StringBuilder(" select distinct regDemanda from RegDemandaRegd as regDemanda ")
1019       // .append(" join regDemanda.usuarioUsuByCodUsuInclusaoRegd as usuario ")
1020       // .append(" join usuario.usuarioAtributoUsuas as usuarioAtributo ")
1021       // .append(" where ")
1022       // .append(" usuario.codUsu = regDemanda.usuarioUsuByCodUsuInclusaoRegd.codUsu ")
1023       // .append(" and usuarioAtributo.usuarioUsu.codUsu = usuario.codUsu ")
1024       // .append(" and usuarioAtributo.comp_id.codSatb in (:gruposAcesso) ")
1025       .append(" order by regDemanda.codRegd asc ");
1026 
1027       Query q = this.getSession().createQuery(query.toString());
1028 
1029       // List<Long> listCodGruposAcesso = new ArrayList<Long>();
1030       // for (Iterator iter = gruposAcesso.iterator(); iter.hasNext();) {
1031       // SisAtributoSatb grupoAcesso = (SisAtributoSatb) iter.next();
1032       // listCodGruposAcesso.add(grupoAcesso.getCodSatb());
1033       // }
1034 
1035       // if(listCodGruposAcesso != null && listCodGruposAcesso.size() > 0){
1036       // q.setParameterList("gruposAcesso", listCodGruposAcesso);
1037       // }
1038 
1039       retorno = q.list();
1040 
1041       aplicarRestricoesRegDemanda(retorno, usuario, gruposAcesso, false);
1042 
1043       if (ehFiltro)
1044         retorno = aplicarFiltrosDinamicosRegDemanda(retorno);
1045 
1046     } catch (HibernateException e) {
1047       this.logger.error(e);
1048       throw new ECARException(e);
1049     }
1050 
1051     return retorno;
1052   }
1053 
1054   /**
1055    * Pega um conjunto de valores de qualquer campo da tabela local_item, através
1056    * do valor da Fk (normalmente identificacaoLit) para uma determinada demanda.
1057    * Retorna uma String onde os valores são separados por vírgula
1058    * @param regDemanda
1059    * @param nomeAtbdem
1060    * @param FkAtbdem
1061    * @return
1062    * @throws ECARException
1063    */
1064   public String getValorLocaisDemanda(RegDemandaRegd regDemanda, String FkAtbdem) throws ECARException {
1065 
1066     LocalItemLit localItem = new LocalItemLit();
1067     Set locais = regDemanda.getLocalDemandaLdems();
1068     // List identificacaoLocais = new ArrayList();
1069     Iterator it = locais.iterator();
1070     StringBuilder colunaLocais = new StringBuilder();
1071     Object colunaLocal;
1072 
1073     while (it.hasNext()) {
1074       localItem = (LocalItemLit) it.next();
1075       if (FkAtbdem != null && !"".equals(FkAtbdem)) {
1076         colunaLocal = Util.invocaGet(localItem, FkAtbdem);
1077 
1078         if (colunaLocal.getClass().equals(Date.class) || colunaLocal.getClass().equals(java.sql.Date.class)) {
1079           colunaLocal = Data.parseDate((Date) colunaLocal);
1080         }
1081         colunaLocais.append(colunaLocal.toString());
1082         colunaLocais.append(", ");
1083       }
1084     }
1085     if (colunaLocais.length() > 0) {
1086       colunaLocais.delete(colunaLocais.length() - 2, colunaLocais.length());
1087     }
1088 
1089     return colunaLocais.toString();
1090 
1091   }
1092 
1093   public String getHierarquiaLocaisDemanda(RegDemandaRegd regDemanda) throws ECARException {
1094 
1095     LocalItemLit localItem = new LocalItemLit();
1096     Set locais = regDemanda.getLocalDemandaLdems();
1097     // List identificacaoLocais = new ArrayList();
1098     Iterator it = locais.iterator();
1099     StringBuilder hierarquiaLocaisStr = new StringBuilder();
1100     Set hierarquiaLocais;
1101     String hierarquiaLocal;
1102 
1103     while (it.hasNext()) {
1104       localItem = (LocalItemLit) it.next();
1105 
1106       hierarquiaLocais = (Set) Util.invocaGet(localItem, "localItemHierarquiaLithsByCodLit");
1107 
1108       Iterator itHierarquia = hierarquiaLocais.iterator();
1109 
1110       if (itHierarquia.hasNext()) {
1111         while (itHierarquia.hasNext()) {
1112 
1113           hierarquiaLocaisStr.append(localItem.getIdentificacaoLit() + " - " + ((LocalItemLit) itHierarquia.next()).getIdentificacaoLit());
1114         }
1115       }
1116       else {
1117         hierarquiaLocaisStr.append(localItem.getIdentificacaoLit());
1118       }
1119 
1120       hierarquiaLocaisStr.append(", ");
1121     }
1122     if (hierarquiaLocaisStr.length() > 0) {
1123       hierarquiaLocaisStr.delete(hierarquiaLocaisStr.length() - 2, hierarquiaLocaisStr.length());
1124     }
1125 
1126     return hierarquiaLocaisStr.toString();
1127 
1128   }
1129 
1130   /**
1131    * Pega um conjunto de valores de qualquer campo da tabela local_item, através
1132    * do valor da Fk (normalmente identificacaoLit) para uma determinada demanda.
1133    * Retorna uma String onde os valores são separados por vírgula
1134    * @param regDemanda
1135    * @param nomeAtbdem
1136    * @param FkAtbdem
1137    * @return
1138    * @throws ECARException
1139    */
1140   public String getValorEntidadesDemanda(RegDemandaRegd regDemanda, String FkAtbdem) throws ECARException {
1141 
1142     EntidadeEnt entidade = new EntidadeEnt();
1143     Set entidades = regDemanda.getEntidadeDemandaEntds();
1144     // List identificacaoLocais = new ArrayList();
1145     Iterator it = entidades.iterator();
1146     StringBuilder colunaEntidades = new StringBuilder();
1147     Object colunaEntidade;
1148 
1149     while (it.hasNext()) {
1150       entidade = (EntidadeEnt) it.next();
1151       if (FkAtbdem != null && !"".equals(FkAtbdem)) {
1152         colunaEntidade = Util.invocaGet(entidade, FkAtbdem);
1153 
1154         if (colunaEntidade.getClass().equals(Date.class) || colunaEntidade.getClass().equals(java.sql.Date.class)) {
1155           colunaEntidade = Data.parseDate((Date) colunaEntidade);
1156         }
1157         colunaEntidades.append(colunaEntidade.toString());
1158         colunaEntidades.append(", ");
1159       }
1160     }
1161     if (colunaEntidades.length() > 0) {
1162       colunaEntidades.delete(colunaEntidades.length() - 2, colunaEntidades.length());
1163     }
1164 
1165     return colunaEntidades.toString();
1166 
1167   }
1168 
1169   /**
1170    * Pega um conjunto de valores de qualquer campo da tabela local_item, através
1171    * do valor da Fk (normalmente identificacaoLit) para uma determinada demanda.
1172    * Retorna uma String onde os valores são separados por vírgula
1173    * @param regDemanda
1174    * @param nomeAtbdem
1175    * @param FkAtbdem
1176    * @return
1177    * @throws ECARException
1178    */
1179   public String getValorEntidadesOrgaosDemanda(RegDemandaRegd regDemanda, String FkAtbdem) throws ECARException {
1180 
1181     EntidadeEnt entidade = new EntidadeEnt();
1182     Set entidadesOrgaos = regDemanda.getEntidadeOrgaoDemandaEntorgds();
1183     // List identificacaoLocais = new ArrayList();
1184     Iterator it = entidadesOrgaos.iterator();
1185     StringBuilder colunaOrgaos = new StringBuilder();
1186     Object colunaOrgao;
1187 
1188     while (it.hasNext()) {
1189       entidade = (EntidadeEnt) it.next();
1190       if (FkAtbdem != null && !"".equals(FkAtbdem)) {
1191         colunaOrgao = Util.invocaGet(entidade, FkAtbdem);
1192 
1193         if (colunaOrgao.getClass().equals(Date.class) || colunaOrgao.getClass().equals(java.sql.Date.class)) {
1194           colunaOrgao = Data.parseDate((Date) colunaOrgao);
1195         }
1196         colunaOrgaos.append(colunaOrgao.toString());
1197         colunaOrgaos.append(", ");
1198       }
1199     }
1200     if (colunaOrgaos.length() > 0) {
1201       colunaOrgaos.delete(colunaOrgaos.length() - 2, colunaOrgaos.length());
1202     }
1203 
1204     return colunaOrgaos.toString();
1205 
1206   }
1207 
1208   /**
1209    * Aplica a restrição para que só sejam exibidas as demandas cujos grupos de
1210    * atributos também sejam exibidos em cadastro de usuário
1211    * @param regDemandas
1212    * @return
1213    */
1214   public List aplicarRestricoesRegDemanda(List regDemandas, UsuarioUsu usuario, Set gruposAcesso, boolean classificacao) throws ECARException {
1215 
1216     Iterator itRegDemandas = regDemandas.iterator();
1217 
1218     while (itRegDemandas.hasNext()) {
1219 
1220       RegDemandaRegd regDemandaRegd = (RegDemandaRegd) itRegDemandas.next();
1221       List atributosLivres = getAtributosLivresDemandaEhRestritivo();
1222 
1223       if (classificacao) {
1224         if ((!usuario.getCodUsu().equals(regDemandaRegd.getUsuarioUsuByCodUsuInclusaoRegd().getCodUsu())) && aplicarRestricaoAtributosLivresRestritivos(regDemandaRegd, atributosLivres, usuario) && aplicarRestricaoUsuarioEntidadeOrgaoDemanda(regDemandaRegd, usuario)) {
1225 
1226           itRegDemandas.remove();
1227         }
1228       }
1229       else {
1230 
1231         // Verifica se a demanda poderá ser visualizada pelo usuário, através de
1232         // 3 regras de restrição
1233         if ((!usuario.getCodUsu().equals(regDemandaRegd.getUsuarioUsuByCodUsuInclusaoRegd().getCodUsu())) && aplicarRestricaoAtributosLivresRestritivos(regDemandaRegd, atributosLivres, usuario) && aplicarRestricaoUsuarioEntidadeOrgaoDemanda(regDemandaRegd, usuario)) {
1234 
1235           itRegDemandas.remove();
1236         }
1237       }
1238 
1239     }
1240 
1241     return regDemandas;
1242   }
1243 
1244   /****** COMENTADO POR JOSE ANDRE NO BRANCH ***********/
1245   /****** RESPONSAVEL PELO MERGE PATRICIA PESSOA ***********/
1246   // /**
1247   // * Aplica os filtros dinâmicos no registro de demanda
1248   // *
1249   // * @param regDemanda
1250   // * @param nomeAtbdem
1251   // * @param FkAtbdem
1252   // * @return
1253   // * @throws ECARException
1254   // */
1255   /*
1256    * public List aplicarFiltrosDinamicosRegDemanda(List regDemandas) throws
1257    * ECARException{ Iterator itRegDemandas = regDemandas.iterator(); while
1258    * (itRegDemandas.hasNext()){ RegDemandaRegd regDemandaRegd = (RegDemandaRegd)
1259    * itRegDemandas.next(); List atributosLivres =
1260    * getAtributosLivresDemandaEhFiltro(); if
1261    * (!"".equals(Pagina.getParamStr(request, "codRegd"))) { if
1262    * (regDemandaRegd.getCodRegd() == null ||
1263    * !regDemandaRegd.getCodRegd().toString().equals(Pagina.getParamStr(request,
1264    * "codRegd"))){ itRegDemandas.remove(); continue; } } if
1265    * (!"".equals(Pagina.getParamStr(request, "descricaoRegd"))) { if
1266    * (regDemandaRegd.getDescricaoRegd() == null ||
1267    * !regDemandaRegd.getDescricaoRegd
1268    * ().toUpperCase().contains((Pagina.getParamStr(request,
1269    * "descricaoRegd").toUpperCase()))){ itRegDemandas.remove(); continue; } } if
1270    * (!"".equals(Pagina.getParamStr(request, "observacaoRegd"))) { if
1271    * (regDemandaRegd.getObservacaoRegd() == null ||
1272    * !regDemandaRegd.getObservacaoRegd
1273    * ().toUpperCase().contains((Pagina.getParamStr(request,
1274    * "observacaoRegd").toUpperCase()))){ itRegDemandas.remove(); continue; } }
1275    * if (!"".equals(Pagina.getParamStr(request, "numeroDocOrigemRegd"))) { if
1276    * (regDemandaRegd.getNumeroDocOrigemRegd() == null ||
1277    * !regDemandaRegd.getNumeroDocOrigemRegd
1278    * ().toString().equals((Pagina.getParamStr(request,
1279    * "numeroDocOrigemRegd")))){ itRegDemandas.remove(); continue; } } // if
1280    * (!"".equals(Pagina.getParamStr(request, "entidadeOrgaoDemandaEntorgds"))) {
1281    * // if (regDemandaRegd.getEntidadeOrgaoDemandaEntorgds() == null ||
1282    * !regDemandaRegd
1283    * .getEntidadeOrgaoDemandaEntorgds().getCodOrg().equals(Long.valueOf
1284    * (Pagina.getParamStr(request, "orgaoOrg")))){ // itRegDemandas.remove(); //
1285    * continue; // } // } if (!"".equals(Pagina.getParamStr(request,
1286    * "sitDemandaSitd"))) { if (regDemandaRegd.getSitDemandaSitd() == null ||
1287    * !regDemandaRegd
1288    * .getSitDemandaSitd().getCodSitd().equals(Long.valueOf(Pagina.
1289    * getParamStr(request, "sitDemandaSitd")))){ itRegDemandas.remove();
1290    * continue; } } if (!"".equals(Pagina.getParamStr(request,
1291    * "usuarioUsuByCodUsuInclusaoRegd"))) { if
1292    * (regDemandaRegd.getUsuarioUsuByCodUsuInclusaoRegd() == null ||
1293    * !regDemandaRegd
1294    * .getUsuarioUsuByCodUsuInclusaoRegd().getNomeUsu().contains(Pagina
1295    * .getParamStr(request, "usuarioUsuByCodUsuInclusaoRegd"))){
1296    * itRegDemandas.remove(); continue; } } if
1297    * (!"".equals(Pagina.getParamStr(request, "prioridadePrior"))) { if
1298    * (regDemandaRegd.getPrioridadePrior() == null ||
1299    * !regDemandaRegd.getPrioridadePrior
1300    * ().getCodPrior().equals(Long.valueOf(Pagina.getParamStr(request,
1301    * "prioridadePrior")))){ itRegDemandas.remove(); continue; } } if
1302    * (!"".equals(Pagina.getParamStr(request, "regDemandaRegd"))) { if
1303    * (regDemandaRegd.getRegDemandaRegd() == null ||
1304    * !regDemandaRegd.getRegDemandaRegd
1305    * ().getCodRegd().equals(Long.valueOf(Pagina.getParamStr(request,
1306    * "regDemandaRegd")))){ itRegDemandas.remove(); continue; } } if
1307    * (!"".equals(Pagina.getParamStr(request, "indAtivoRegd"))) { if
1308    * (regDemandaRegd.getIndAtivoRegd() == null ||
1309    * !regDemandaRegd.getIndAtivoRegd().equals(Pagina.getParamStr(request,
1310    * "indAtivoRegd"))){ itRegDemandas.remove(); continue; } } if
1311    * (!"".equals(Pagina.getParamStr(request, "nomeSolicitanteRegd"))) { if
1312    * (regDemandaRegd.getNomeSolicitanteRegd() == null ||
1313    * !regDemandaRegd.getNomeSolicitanteRegd
1314    * ().toUpperCase().contains((Pagina.getParamStr(request,
1315    * "nomeSolicitanteRegd").toUpperCase()))){ itRegDemandas.remove(); continue;
1316    * } } if (!"".equals(Pagina.getParamStr(request, "dataLimiteRegd_Inicio"))) {
1317    * String dataLimiteRegdInicioStr = Pagina.getParamStr(request,
1318    * "dataLimiteRegd_Inicio"); //Modifica as ordens de dia e mês na data, para
1319    * ficar no formato MM/DD/YYYY dataLimiteRegdInicioStr =
1320    * dataLimiteRegdInicioStr.substring(3,
1321    * dataLimiteRegdInicioStr.lastIndexOf("/")+1) +
1322    * dataLimiteRegdInicioStr.substring(0,
1323    * dataLimiteRegdInicioStr.indexOf("/")+1) +
1324    * dataLimiteRegdInicioStr.substring(
1325    * dataLimiteRegdInicioStr.lastIndexOf("/")+1); Date dataLimiteRegdInicio =
1326    * new Date(dataLimiteRegdInicioStr); if (regDemandaRegd.getDataLimiteRegd()
1327    * == null || //Remove da lista se a data estiver estiver fora do intervalo
1328    * especificado no filtro
1329    * regDemandaRegd.getDataLimiteRegd().compareTo(dataLimiteRegdInicio) < 0){
1330    * itRegDemandas.remove(); continue; } }
1331    * if(!"".equals(Pagina.getParamStr(request, "dataLimiteRegd_Fim"))){ String
1332    * dataLimiteRegdFimStr = Pagina.getParamStr(request, "dataLimiteRegd_Fim");
1333    * //Modifica as ordens de dia e mês na data, para ficar no formato MM/DD/YYYY
1334    * dataLimiteRegdFimStr = dataLimiteRegdFimStr.substring(3,
1335    * dataLimiteRegdFimStr.lastIndexOf("/")+1) +
1336    * dataLimiteRegdFimStr.substring(0, dataLimiteRegdFimStr.indexOf("/")+1) +
1337    * dataLimiteRegdFimStr.substring(dataLimiteRegdFimStr.lastIndexOf("/")+1);
1338    * Date dataLimiteRegdInicio = new Date(dataLimiteRegdFimStr); if
1339    * (regDemandaRegd.getDataLimiteRegd() == null || //Remove da lista se a data
1340    * estiver estiver fora do intervalo especificado no filtro
1341    * regDemandaRegd.getDataLimiteRegd().compareTo(dataLimiteRegdInicio) > 0){
1342    * itRegDemandas.remove(); continue; } } if
1343    * (!"".equals(Pagina.getParamStr(request, "dataSolicitacaoRegd_Inicio"))) {
1344    * String dataSolicitacaoRegdInicioStr = Pagina.getParamStr(request,
1345    * "dataSolicitacaoRegd_Inicio"); //Modifica as ordens de dia e mês na data,
1346    * para ficar no formato MM/DD/YYYY dataSolicitacaoRegdInicioStr =
1347    * dataSolicitacaoRegdInicioStr.substring(3,
1348    * dataSolicitacaoRegdInicioStr.lastIndexOf("/")+1) +
1349    * dataSolicitacaoRegdInicioStr.substring(0,
1350    * dataSolicitacaoRegdInicioStr.indexOf("/")+1) +
1351    * dataSolicitacaoRegdInicioStr.
1352    * substring(dataSolicitacaoRegdInicioStr.lastIndexOf("/")+1); Date
1353    * dataSolicitacaoRegdInicio = new Date(dataSolicitacaoRegdInicioStr); if
1354    * (regDemandaRegd.getDataSolicitacaoRegd() == null || //Remove da lista se a
1355    * data estiver estiver fora do intervalo especificado no filtro
1356    * regDemandaRegd
1357    * .getDataSolicitacaoRegd().compareTo(dataSolicitacaoRegdInicio) < 0){
1358    * itRegDemandas.remove(); continue; } }
1359    * if(!"".equals(Pagina.getParamStr(request, "dataSolicitacaoRegd_Fim"))){
1360    * String dataSolicitacaoRegdFimStr = Pagina.getParamStr(request,
1361    * "dataSolicitacaoRegd_Fim"); //Modifica as ordens de dia e mês na data, para
1362    * ficar no formato MM/DD/YYYY dataSolicitacaoRegdFimStr =
1363    * dataSolicitacaoRegdFimStr.substring(3,
1364    * dataSolicitacaoRegdFimStr.lastIndexOf("/")+1) +
1365    * dataSolicitacaoRegdFimStr.substring(0,
1366    * dataSolicitacaoRegdFimStr.indexOf("/")+1) +
1367    * dataSolicitacaoRegdFimStr.substring
1368    * (dataSolicitacaoRegdFimStr.lastIndexOf("/")+1); Date dataSolicitacaoRegdFim
1369    * = new Date(dataSolicitacaoRegdFimStr); if
1370    * (regDemandaRegd.getDataSolicitacaoRegd() == null || //Remove da lista se a
1371    * data estiver estiver fora do intervalo especificado no filtro
1372    * regDemandaRegd.getDataSolicitacaoRegd().compareTo(dataSolicitacaoRegdFim) >
1373    * 0){ itRegDemandas.remove(); continue; } } if
1374    * (!"".equals(Pagina.getParamStr(request, "dataInclusaoRegd_Inicio"))) {
1375    * String dataInclusaoRegdInicioStr = Pagina.getParamStr(request,
1376    * "dataInclusaoRegd_Inicio"); //Modifica as ordens de dia e mês na data, para
1377    * ficar no formato MM/DD/YYYY dataInclusaoRegdInicioStr =
1378    * dataInclusaoRegdInicioStr.substring(3,
1379    * dataInclusaoRegdInicioStr.lastIndexOf("/")+1) +
1380    * dataInclusaoRegdInicioStr.substring(0,
1381    * dataInclusaoRegdInicioStr.indexOf("/")+1) +
1382    * dataInclusaoRegdInicioStr.substring
1383    * (dataInclusaoRegdInicioStr.lastIndexOf("/")+1); Date dataInclusaoRegdInicio
1384    * = new Date(dataInclusaoRegdInicioStr); if
1385    * (regDemandaRegd.getDataInclusaoRegd() == null || //Remove da lista se a
1386    * data estiver estiver fora do intervalo especificado no filtro
1387    * regDemandaRegd.getDataInclusaoRegd().compareTo(dataInclusaoRegdInicio) <
1388    * 0){ itRegDemandas.remove(); continue; } }
1389    * if(!"".equals(Pagina.getParamStr(request, "dataInclusaoRegd_Fim"))){ String
1390    * dataInclusaoRegdFimStr = Pagina.getParamStr(request,
1391    * "dataInclusaoRegd_Fim"); //Modifica as ordens de dia e mês na data, para
1392    * ficar no formato MM/DD/YYYY dataInclusaoRegdFimStr =
1393    * dataInclusaoRegdFimStr.substring(3,
1394    * dataInclusaoRegdFimStr.lastIndexOf("/")+1) +
1395    * dataInclusaoRegdFimStr.substring(0, dataInclusaoRegdFimStr.indexOf("/")+1)
1396    * +
1397    * dataInclusaoRegdFimStr.substring(dataInclusaoRegdFimStr.lastIndexOf("/")+1
1398    * ); //Chama o método responsável por efetuar os filtros dos atributos livres
1399    * if (filtrarAtributosLivres(request, regDemandaRegd, itRegDemandas,
1400    * atributosLivres)){ continue; } Date dataInclusaoRegdFim = new
1401    * Date(dataInclusaoRegdFimStr); if (regDemandaRegd.getDataInclusaoRegd() ==
1402    * null || //Remove da lista se a data estiver estiver fora do intervalo
1403    * especificado no filtro
1404    * regDemandaRegd.getDataInclusaoRegd().compareTo(dataInclusaoRegdFim) > 0){
1405    * itRegDemandas.remove(); continue; } } //Chama o método responsável por
1406    * efetuar os filtros dos atributos livres if (filtrarAtributosLivres(request,
1407    * regDemandaRegd, itRegDemandas, atributosLivres)){ continue; } if
1408    * (!"".equals(Pagina.getParamStr(request, "dataSituacaoRegd_Inicio"))) {
1409    * String dataSituacaoRegdInicioStr = Pagina.getParamStr(request,
1410    * "dataSituacaoRegd_Inicio"); //Modifica as ordens de dia e mês na data, para
1411    * ficar no formato MM/DD/YYYY dataSituacaoRegdInicioStr =
1412    * dataSituacaoRegdInicioStr.substring(3,
1413    * dataSituacaoRegdInicioStr.lastIndexOf("/")+1) +
1414    * dataSituacaoRegdInicioStr.substring(0,
1415    * dataSituacaoRegdInicioStr.indexOf("/")+1) +
1416    * dataSituacaoRegdInicioStr.substring
1417    * (dataSituacaoRegdInicioStr.lastIndexOf("/")+1); Date dataSituacaoRegdInicio
1418    * = new Date(dataSituacaoRegdInicioStr); if
1419    * (regDemandaRegd.getDataSituacaoRegd() == null || //Remove da lista se a
1420    * data estiver estiver fora do intervalo especificado no filtro
1421    * regDemandaRegd.getDataSituacaoRegd().compareTo(dataSituacaoRegdInicio) <
1422    * 0){ itRegDemandas.remove(); continue; } }
1423    * if(!"".equals(Pagina.getParamStr(request, "dataSituacaoRegd_Fim"))){ String
1424    * dataSituacaoRegdFimStr = Pagina.getParamStr(request,
1425    * "dataSituacaoRegd_Fim"); //Modifica as ordens de dia e mês na data, para
1426    * ficar no formato MM/DD/YYYY dataSituacaoRegdFimStr =
1427    * dataSituacaoRegdFimStr.substring(3,
1428    * dataSituacaoRegdFimStr.lastIndexOf("/")+1) +
1429    * dataSituacaoRegdFimStr.substring(0, dataSituacaoRegdFimStr.indexOf("/")+1)
1430    * +
1431    * dataSituacaoRegdFimStr.substring(dataSituacaoRegdFimStr.lastIndexOf("/")+1
1432    * ); Date dataSituacaoRegdFim = new Date(dataSituacaoRegdFimStr); if
1433    * (regDemandaRegd.getDataSituacaoRegd() == null || //Remove da lista se a
1434    * data estiver estiver fora do intervalo especificado no filtro
1435    * regDemandaRegd.getDataSituacaoRegd().compareTo(dataSituacaoRegdFim) > 0){
1436    * itRegDemandas.remove(); continue; } } if
1437    * (!"".equals(Pagina.getParamStr(request, "contLocal"))) { boolean
1438    * localNaoEncontrado = false; int numLocais =
1439    * Integer.parseInt(request.getParameter("contLocal")); for (int i = 1; i <=
1440    * numLocais; i++) { if ("S".equals(Pagina.getParamStr(request,
1441    * "adicionaLocal" + i))) { LocalItemLit local = new LocalItemLit(); local =
1442    * (LocalItemLit) super .buscar(LocalItemLit.class, Long.valueOf(Pagina
1443    * .getParamStr(request, "codLit"+ i))); if
1444    * (!regDemandaRegd.getLocalDemandaLdems().contains(local)){
1445    * localNaoEncontrado = true; itRegDemandas.remove(); break; } } } if
1446    * (localNaoEncontrado) continue; } if (!"".equals(Pagina.getParamStr(request,
1447    * "contEntidade"))) { boolean entidadeNaoEncontrada = false; int numEntidades
1448    * = Integer.parseInt(request.getParameter("contEntidade")); for (int i = 1; i
1449    * <= numEntidades; i++) { if ("S".equals(Pagina.getParamStr(request,
1450    * "adicionaEntidade" + i))) { EntidadeEnt entidade = new EntidadeEnt();
1451    * entidade = (EntidadeEnt) super.buscar(EntidadeEnt.class,
1452    * Long.valueOf(Pagina.getParamStr(request, "codEnt"+ i))); if
1453    * (!regDemandaRegd.getEntidadeDemandaEntds().contains(entidade)){
1454    * entidadeNaoEncontrada = true; itRegDemandas.remove(); break; } } } if
1455    * (entidadeNaoEncontrada) continue; } if
1456    * (!"".equals(Pagina.getParamStr(request, "contEntidadeOrgao"))) { boolean
1457    * entidadeOrgaoNaoEncontrada = false; int numEntidades =
1458    * Integer.parseInt(request.getParameter("contEntidadeOrgao")); for (int i =
1459    * 1; i <= numEntidades; i++) { if ("S".equals(Pagina.getParamStr(request,
1460    * "adicionaEntidadeOrgao" + i))) { EntidadeEnt entidade = new EntidadeEnt();
1461    * entidade = (EntidadeEnt) super.buscar(EntidadeEnt.class,
1462    * Long.valueOf(Pagina.getParamStr(request, "codEntOrg"+ i))); if
1463    * (!regDemandaRegd.getEntidadeOrgaoDemandaEntorgds().contains(entidade)){
1464    * entidadeOrgaoNaoEncontrada = true; itRegDemandas.remove(); break; } } } if
1465    * (entidadeOrgaoNaoEncontrada) continue; } //Chama o método responsável por
1466    * efetuar os filtros dos atributos livres if (filtrarAtributosLivres(request,
1467    * regDemandaRegd, itRegDemandas, atributosLivres)){ continue; } } return
1468    * regDemandas; }
1469    */
1470 
1471   /****** METODO ADICIONADO POR JOSE ANDRE NO BRANCH ***********/
1472   /****** RESPONSAVEL PELO MERGE PATRICIA PESSOA ***********/
1473   /**
1474    * Aplica os filtros dinâmicos no registro de demanda
1475    * @param regDemanda
1476    * @param nomeAtbdem
1477    * @param FkAtbdem
1478    * @return
1479    * @throws ECARException
1480    */
1481   public List aplicarFiltrosDinamicosRegDemanda(List regDemandas) throws ECARException {
1482 
1483     Iterator itRegDemandas = regDemandas.iterator();
1484     Map parametrosFiltroDemanda = new HashMap();
1485 
1486     // Se existe parametros para filtrar
1487     if (request.getSession().getAttribute("parametrosFiltroDemanda") != null) {
1488       parametrosFiltroDemanda = (Map) request.getSession().getAttribute("parametrosFiltroDemanda");
1489 
1490       while (itRegDemandas.hasNext()) {
1491         RegDemandaRegd regDemandaRegd = (RegDemandaRegd) itRegDemandas.next();
1492 
1493         List atributosLivres = getAtributosLivresDemandaEhFiltro();
1494         String valorCampo = Pagina.trocaNull(parametrosFiltroDemanda.get("descricaoRegd"));
1495 
1496         if (!"".equals(valorCampo)) {
1497           if (regDemandaRegd.getDescricaoRegd() == null || !regDemandaRegd.getDescricaoRegd().toUpperCase().contains((valorCampo.toUpperCase()))) {
1498             itRegDemandas.remove();
1499             continue;
1500           }
1501         }
1502 
1503         valorCampo = Pagina.trocaNull(parametrosFiltroDemanda.get("numeroDocOrigemRegd"));
1504         if (!"".equals(valorCampo)) {
1505           if (regDemandaRegd.getNumeroDocOrigemRegd() == null || !regDemandaRegd.getNumeroDocOrigemRegd().toString().equals((valorCampo))) {
1506             itRegDemandas.remove();
1507             continue;
1508           }
1509         }
1510 
1511         valorCampo = Pagina.trocaNull(parametrosFiltroDemanda.get("codRegd"));
1512         if (!"".equals(valorCampo)) {
1513           if (regDemandaRegd.getCodRegd() == null || !regDemandaRegd.getCodRegd().toString().equals(valorCampo)) {
1514             itRegDemandas.remove();
1515             continue;
1516           }
1517         }
1518 
1519         valorCampo = Pagina.trocaNull(parametrosFiltroDemanda.get("observacaoRegd"));
1520         if (!"".equals(valorCampo)) {
1521           if (regDemandaRegd.getObservacaoRegd() == null || !regDemandaRegd.getObservacaoRegd().toUpperCase().contains((valorCampo.toUpperCase()))) {
1522             itRegDemandas.remove();
1523             continue;
1524           }
1525         }
1526 
1527         valorCampo = Pagina.trocaNull(parametrosFiltroDemanda.get("sitDemandaSitd"));
1528         if (!"".equals(valorCampo)) {
1529           if (regDemandaRegd.getSitDemandaSitd() == null || !regDemandaRegd.getSitDemandaSitd().getCodSitd().equals(Long.valueOf(valorCampo))) {
1530             itRegDemandas.remove();
1531             continue;
1532           }
1533         }
1534 
1535         valorCampo = Pagina.trocaNull(parametrosFiltroDemanda.get("usuarioUsuByCodUsuInclusaoRegd"));
1536         if (!"".equals(valorCampo)) {
1537           if (regDemandaRegd.getUsuarioUsuByCodUsuInclusaoRegd() == null || !regDemandaRegd.getUsuarioUsuByCodUsuInclusaoRegd().getNomeUsu().toUpperCase().contains((valorCampo.toUpperCase()))) {
1538             itRegDemandas.remove();
1539             continue;
1540           }
1541         }
1542 
1543         valorCampo = Pagina.trocaNull(parametrosFiltroDemanda.get("prioridadePrior"));
1544         if (!"".equals(valorCampo)) {
1545           if (regDemandaRegd.getPrioridadePrior() == null || !regDemandaRegd.getPrioridadePrior().getCodPrior().equals(Long.valueOf(valorCampo))) {
1546             itRegDemandas.remove();
1547             continue;
1548           }
1549         }
1550 
1551         valorCampo = Pagina.trocaNull(parametrosFiltroDemanda.get("regDemandaRegd"));
1552         if (!"".equals(valorCampo)) {
1553           if (regDemandaRegd.getRegDemandaRegd() == null || !regDemandaRegd.getRegDemandaRegd().getCodRegd().equals(Long.valueOf(valorCampo))) {
1554             itRegDemandas.remove();
1555             continue;
1556           }
1557         }
1558 
1559         valorCampo = Pagina.trocaNull(parametrosFiltroDemanda.get("indAtivoRegd"));
1560         if (!"".equals(valorCampo)) {
1561           if (regDemandaRegd.getIndAtivoRegd() == null || !regDemandaRegd.getIndAtivoRegd().toUpperCase().contains((valorCampo.toUpperCase()))) {
1562             itRegDemandas.remove();
1563             continue;
1564           }
1565         }
1566 
1567         valorCampo = Pagina.trocaNull(parametrosFiltroDemanda.get("nomeSolicitanteRegd"));
1568         if (!"".equals(valorCampo)) {
1569           if (regDemandaRegd.getNomeSolicitanteRegd() == null || !regDemandaRegd.getNomeSolicitanteRegd().toUpperCase().contains((valorCampo.toUpperCase()))) {
1570             itRegDemandas.remove();
1571             continue;
1572           }
1573         }
1574 
1575         valorCampo = Pagina.trocaNull(parametrosFiltroDemanda.get("dataLimiteRegd_Inicio"));
1576         if (valorCampo != null && !"".equals(valorCampo)) {
1577 
1578           String dataLimiteRegdInicioStr = valorCampo;
1579 
1580           // Modifica as ordens de dia e mês na data, para ficar no formato
1581           // MM/DD/YYYY
1582           dataLimiteRegdInicioStr = dataLimiteRegdInicioStr.substring(3, dataLimiteRegdInicioStr.lastIndexOf("/") + 1) + dataLimiteRegdInicioStr.substring(0, dataLimiteRegdInicioStr.indexOf("/") + 1) + dataLimiteRegdInicioStr.substring(dataLimiteRegdInicioStr.lastIndexOf("/") + 1);
1583 
1584           Date dataLimiteRegdInicio = new Date(dataLimiteRegdInicioStr);
1585 
1586           if (regDemandaRegd.getDataLimiteRegd() == null ||
1587           // Remove da lista se a data estiver estiver fora do intervalo
1588           // especificado no filtro
1589           regDemandaRegd.getDataLimiteRegd().compareTo(dataLimiteRegdInicio) < 0) {
1590             itRegDemandas.remove();
1591             continue;
1592           }
1593         }
1594 
1595         valorCampo = Pagina.trocaNull(parametrosFiltroDemanda.get("dataLimiteRegd_Fim"));
1596         if (valorCampo != null && !"".equals(valorCampo)) {
1597 
1598           String dataLimiteRegdFimStr = valorCampo;
1599 
1600           // Modifica as ordens de dia e mês na data, para ficar no formato
1601           // MM/DD/YYYY
1602           dataLimiteRegdFimStr = dataLimiteRegdFimStr.substring(3, dataLimiteRegdFimStr.lastIndexOf("/") + 1) + dataLimiteRegdFimStr.substring(0, dataLimiteRegdFimStr.indexOf("/") + 1) + dataLimiteRegdFimStr.substring(dataLimiteRegdFimStr.lastIndexOf("/") + 1);
1603 
1604           Date dataLimiteRegdFim = new Date(dataLimiteRegdFimStr);
1605 
1606           if (regDemandaRegd.getDataLimiteRegd() == null ||
1607           // Remove da lista se a data estiver estiver fora do intervalo
1608           // especificado no filtro
1609           regDemandaRegd.getDataLimiteRegd().compareTo(dataLimiteRegdFim) > 0) {
1610             itRegDemandas.remove();
1611             continue;
1612           }
1613         }
1614 
1615         valorCampo = Pagina.trocaNull(parametrosFiltroDemanda.get("dataSolicitacaoRegd_Inicio"));
1616         if (valorCampo != null && !"".equals(valorCampo)) {
1617 
1618           String dataSolicitacaoRegdInicioStr = valorCampo;
1619 
1620           // Modifica as ordens de dia e mês na data, para ficar no formato
1621           // MM/DD/YYYY
1622           dataSolicitacaoRegdInicioStr = dataSolicitacaoRegdInicioStr.substring(3, dataSolicitacaoRegdInicioStr.lastIndexOf("/") + 1) + dataSolicitacaoRegdInicioStr.substring(0, dataSolicitacaoRegdInicioStr.indexOf("/") + 1) + dataSolicitacaoRegdInicioStr.substring(dataSolicitacaoRegdInicioStr.lastIndexOf("/") + 1);
1623 
1624           Date dataSolicitacaoRegdInicio = new Date(dataSolicitacaoRegdInicioStr);
1625 
1626           if (regDemandaRegd.getDataSolicitacaoRegd() == null ||
1627           // Remove da lista se a data estiver estiver fora do intervalo
1628           // especificado no filtro
1629           regDemandaRegd.getDataSolicitacaoRegd().compareTo(dataSolicitacaoRegdInicio) < 0) {
1630             itRegDemandas.remove();
1631             continue;
1632           }
1633         }
1634 
1635         valorCampo = Pagina.trocaNull(parametrosFiltroDemanda.get("dataSolicitacaoRegd_Fim"));
1636         if (valorCampo != null && !"".equals(valorCampo)) {
1637 
1638           String dataSolicitacaoRegdFimStr = valorCampo;
1639 
1640           // Modifica as ordens de dia e mês na data, para ficar no formato
1641           // MM/DD/YYYY
1642           dataSolicitacaoRegdFimStr = dataSolicitacaoRegdFimStr.substring(3, dataSolicitacaoRegdFimStr.lastIndexOf("/") + 1) + dataSolicitacaoRegdFimStr.substring(0, dataSolicitacaoRegdFimStr.indexOf("/") + 1) + dataSolicitacaoRegdFimStr.substring(dataSolicitacaoRegdFimStr.lastIndexOf("/") + 1);
1643 
1644           Date dataSolicitacaoRegdFim = new Date(dataSolicitacaoRegdFimStr);
1645 
1646           if (regDemandaRegd.getDataSolicitacaoRegd() == null ||
1647           // Remove da lista se a data estiver estiver fora do intervalo
1648           // especificado no filtro
1649           regDemandaRegd.getDataSolicitacaoRegd().compareTo(dataSolicitacaoRegdFim) > 0) {
1650             itRegDemandas.remove();
1651             continue;
1652           }
1653         }
1654 
1655         valorCampo = Pagina.trocaNull(parametrosFiltroDemanda.get("dataInclusaoRegd_Inicio"));
1656         if (valorCampo != null && !"".equals(valorCampo)) {
1657 
1658           String dataInclusaoRegdInicioStr = valorCampo;
1659 
1660           // Modifica as ordens de dia e mês na data, para ficar no formato
1661           // MM/DD/YYYY
1662           dataInclusaoRegdInicioStr = dataInclusaoRegdInicioStr.substring(3, dataInclusaoRegdInicioStr.lastIndexOf("/") + 1) + dataInclusaoRegdInicioStr.substring(0, dataInclusaoRegdInicioStr.indexOf("/") + 1) + dataInclusaoRegdInicioStr.substring(dataInclusaoRegdInicioStr.lastIndexOf("/") + 1);
1663 
1664           Date dataInclusaoRegdInicio = new Date(dataInclusaoRegdInicioStr);
1665 
1666           if (regDemandaRegd.getDataInclusaoRegd() == null ||
1667           // Remove da lista se a data estiver estiver fora do intervalo
1668           // especificado no filtro
1669           regDemandaRegd.getDataInclusaoRegd().compareTo(dataInclusaoRegdInicio) < 0) {
1670             itRegDemandas.remove();
1671             continue;
1672           }
1673         }
1674 
1675         valorCampo = Pagina.trocaNull(parametrosFiltroDemanda.get("dataInclusaoRegd_Fim"));
1676         if (valorCampo != null && !"".equals(valorCampo)) {
1677 
1678           String dataInclusaoRegdFimStr = valorCampo;
1679 
1680           // Modifica as ordens de dia e mês na data, para ficar no formato
1681           // MM/DD/YYYY
1682           dataInclusaoRegdFimStr = dataInclusaoRegdFimStr.substring(3, dataInclusaoRegdFimStr.lastIndexOf("/") + 1) + dataInclusaoRegdFimStr.substring(0, dataInclusaoRegdFimStr.indexOf("/") + 1) + dataInclusaoRegdFimStr.substring(dataInclusaoRegdFimStr.lastIndexOf("/") + 1);
1683 
1684           Date dataInclusaoRegdFim = new Date(dataInclusaoRegdFimStr);
1685 
1686           if (regDemandaRegd.getDataInclusaoRegd() == null ||
1687           // Remove da lista se a data estiver estiver fora do intervalo
1688           // especificado no filtro
1689           regDemandaRegd.getDataInclusaoRegd().compareTo(dataInclusaoRegdFim) > 0) {
1690             itRegDemandas.remove();
1691             continue;
1692           }
1693         }
1694 
1695         valorCampo = Pagina.trocaNull(parametrosFiltroDemanda.get("dataSituacaoRegd_Inicio"));
1696         if (valorCampo != null && !"".equals(valorCampo)) {
1697 
1698           String dataSituacaoRegdInicioStr = valorCampo;
1699 
1700           // Modifica as ordens de dia e mês na data, para ficar no formato
1701           // MM/DD/YYYY
1702           dataSituacaoRegdInicioStr = dataSituacaoRegdInicioStr.substring(3, dataSituacaoRegdInicioStr.lastIndexOf("/") + 1) + dataSituacaoRegdInicioStr.substring(0, dataSituacaoRegdInicioStr.indexOf("/") + 1) + dataSituacaoRegdInicioStr.substring(dataSituacaoRegdInicioStr.lastIndexOf("/") + 1);
1703 
1704           Date dataSituacaoRegdInicio = new Date(dataSituacaoRegdInicioStr);
1705 
1706           if (regDemandaRegd.getDataSituacaoRegd() == null ||
1707           // Remove da lista se a data estiver estiver fora do intervalo
1708           // especificado no filtro
1709           regDemandaRegd.getDataSituacaoRegd().compareTo(dataSituacaoRegdInicio) < 0) {
1710             itRegDemandas.remove();
1711             continue;
1712           }
1713         }
1714 
1715         valorCampo = Pagina.trocaNull(parametrosFiltroDemanda.get("dataSituacaoRegd_Fim"));
1716         if (valorCampo != null && !"".equals(valorCampo)) {
1717 
1718           String dataSituacaoRegdFimStr = valorCampo;
1719 
1720           // Modifica as ordens de dia e mês na data, para ficar no formato
1721           // MM/DD/YYYY
1722           dataSituacaoRegdFimStr = dataSituacaoRegdFimStr.substring(3, dataSituacaoRegdFimStr.lastIndexOf("/") + 1) + dataSituacaoRegdFimStr.substring(0, dataSituacaoRegdFimStr.indexOf("/") + 1) + dataSituacaoRegdFimStr.substring(dataSituacaoRegdFimStr.lastIndexOf("/") + 1);
1723 
1724           Date dataSituacaoRegdFim = new Date(dataSituacaoRegdFimStr);
1725 
1726           if (regDemandaRegd.getDataSituacaoRegd() == null ||
1727           // Remove da lista se a data estiver estiver fora do intervalo
1728           // especificado no filtro
1729           regDemandaRegd.getDataSituacaoRegd().compareTo(dataSituacaoRegdFim) > 0) {
1730             itRegDemandas.remove();
1731             continue;
1732           }
1733         }
1734 
1735         valorCampo = Pagina.trocaNull(parametrosFiltroDemanda.get("contLocal"));
1736         boolean localNaoEncontrado = false;
1737 
1738         int numLocais = Integer.parseInt(valorCampo);
1739         for (int i = 1; i <= numLocais; i++) {
1740           if ("S".equals(Pagina.trocaNull(parametrosFiltroDemanda.get("adicionaLocal" + i)))) {
1741             LocalItemLit local = new LocalItemLit();
1742             local = (LocalItemLit) super.buscar(LocalItemLit.class, Long.valueOf(Pagina.trocaNull(parametrosFiltroDemanda.get("codLit" + i))));
1743 
1744             if (!regDemandaRegd.getLocalDemandaLdems().contains(local)) {
1745               localNaoEncontrado = true;
1746               itRegDemandas.remove();
1747               break;
1748             }
1749           }
1750         }
1751         if (localNaoEncontrado)
1752           continue;
1753 
1754         valorCampo = Pagina.trocaNull(parametrosFiltroDemanda.get("contEntidade"));
1755         boolean entidadeNaoEncontrada = false;
1756 
1757         int numEntidades = Integer.parseInt(valorCampo);
1758         for (int i = 1; i <= numEntidades; i++) {
1759           if ("S".equals(Pagina.trocaNull(parametrosFiltroDemanda.get("adicionaEntidade" + i)))) {
1760             EntidadeEnt entidade = new EntidadeEnt();
1761             entidade = (EntidadeEnt) super.buscar(EntidadeEnt.class, Long.valueOf(Pagina.trocaNull(parametrosFiltroDemanda.get("codEnt" + i))));
1762 
1763             if (!regDemandaRegd.getEntidadeDemandaEntds().contains(entidade)) {
1764               entidadeNaoEncontrada = true;
1765               itRegDemandas.remove();
1766               break;
1767             }
1768           }
1769         }
1770         if (entidadeNaoEncontrada)
1771           continue;
1772 
1773         valorCampo = Pagina.trocaNull(parametrosFiltroDemanda.get("contEntidadeOrgao"));
1774         boolean entidadeOrgaoNaoEncontrada = false;
1775 
1776         int numEntidadeOrgaos = Integer.parseInt(valorCampo);
1777         for (int i = 1; i <= numEntidadeOrgaos; i++) {
1778           if ("S".equals(Pagina.trocaNull(parametrosFiltroDemanda.get("adicionaEntidadeOrgao" + i)))) {
1779             EntidadeEnt entidadeOrgao = new EntidadeEnt();
1780             entidadeOrgao = (EntidadeEnt) super.buscar(EntidadeEnt.class, Long.valueOf(Pagina.trocaNull(parametrosFiltroDemanda.get("codEntOrg" + i))));
1781 
1782             if (!regDemandaRegd.getEntidadeOrgaoDemandaEntorgds().contains(entidadeOrgao)) {
1783               entidadeOrgaoNaoEncontrada = true;
1784               itRegDemandas.remove();
1785               break;
1786             }
1787           }
1788         }
1789         if (entidadeOrgaoNaoEncontrada)
1790           continue;
1791 
1792         //    			
1793         // //Chama o método responsável por efetuar os filtros dos atributos
1794         // livres
1795         // if (filtrarAtributosLivres(request, regDemandaRegd, itRegDemandas,
1796         // atributosLivres)){
1797         // continue;
1798         // }
1799 
1800         // Chama o método responsável por efetuar os filtros dos atributos
1801         // livres
1802         if (filtrarAtributosLivres(parametrosFiltroDemanda, regDemandaRegd, itRegDemandas, atributosLivres)) {
1803           continue;
1804         }
1805       }
1806     }
1807 
1808     return regDemandas;
1809   }
1810 
1811   /****** METODO ADICIONADO POR JOSE ANDRE NO BRANCH ***********/
1812   /****** RESPONSAVEL PELO MERGE PATRICIA PESSOA ***********/
1813 
1814   /**
1815    * @param request
1816    * @param regDemandaRegd
1817    * @param itensRemovidos
1818    * @param itRegDemandas
1819    * @param atributosLivres
1820    * @return
1821    */
1822   private boolean filtrarAtributosLivres(Map parametrosFiltroDemanda, RegDemandaRegd regDemandaRegd, Iterator itRegDemandas, List atributosLivres) {
1823     boolean retorno = false;
1824     try {
1825       // ItemEstruturaDao itemEstruturaDao = new ItemEstruturaDao(request);
1826       // String codEtt = iett.getEstruturaEtt().getCodEtt().toString();
1827 
1828       boolean filtrarAtributoLivre = true;
1829       Iterator itAtributos = atributosLivres.iterator();
1830       // Filtrar pelos atributos livres definidos como filtros
1831       while (itAtributos.hasNext() && filtrarAtributoLivre) {
1832         ObjetoDemanda atributoDemanda = (ObjetoDemanda) itAtributos.next();
1833         SisGrupoAtributoSga grupoAtributo = atributoDemanda.iGetGrupoAtributosLivres();
1834 
1835         String nomeCampo = "a" + grupoAtributo.getCodSga().toString();
1836         String tipoCampo = grupoAtributo.getSisTipoExibicGrupoSteg().getCodSteg().toString();
1837 
1838         // Se for CheckBox ou RadioButton ou ListBox, não procura em
1839         // InformacaoIettSatb
1840         if (tipoCampo.equals(SisTipoExibicGrupoDao.CHECKBOX) || tipoCampo.equals(SisTipoExibicGrupoDao.LISTBOX)) {
1841           // String[] atributos = request.getParameterValues(nomeCampo);
1842           String[] atributos = (String[]) parametrosFiltroDemanda.get(nomeCampo);
1843           int numAtributos = 0;
1844           if (atributos != null) {
1845             numAtributos = atributos.length;
1846           }
1847           for (int i = 0; i < numAtributos && filtrarAtributoLivre; i++) {
1848             if (!getSisAtributosRegDem(regDemandaRegd, grupoAtributo.getCodSga()).contains((SisAtributoSatb) this.buscar(SisAtributoSatb.class, Long.valueOf(atributos[i])))) {
1849 
1850               itRegDemandas.remove();
1851               filtrarAtributoLivre = false;
1852               retorno = true;
1853               break;
1854             }
1855           }
1856         }
1857         // Se for Radio Button...
1858         else if (tipoCampo.equals(SisTipoExibicGrupoDao.RADIO_BUTTON) || tipoCampo.equals(SisTipoExibicGrupoDao.COMBOBOX)) {
1859 
1860           if (parametrosFiltroDemanda.get(nomeCampo) != null && !"".equals(Pagina.trocaNull(parametrosFiltroDemanda.get(nomeCampo)))) {
1861 
1862             if (!getSisAtributosRegDem(regDemandaRegd, grupoAtributo.getCodSga()).contains((SisAtributoSatb) this.buscar(SisAtributoSatb.class, Long.valueOf(Pagina.trocaNull(parametrosFiltroDemanda.get(nomeCampo)))))) {
1863 
1864               itRegDemandas.remove();
1865               filtrarAtributoLivre = false;
1866               retorno = true;
1867               break;
1868             }
1869           }
1870         }
1871         // Se for TEXT Field ou TEXT AREA
1872         else if (tipoCampo.equals(SisTipoExibicGrupoDao.TEXT) || tipoCampo.equals(SisTipoExibicGrupoDao.TEXTAREA)) {
1873 
1874           if (parametrosFiltroDemanda.get(nomeCampo) != null && !"".equals(Pagina.trocaNull(parametrosFiltroDemanda.get(nomeCampo)))) {
1875             List atributosTextTextArea = getRegDemandaSisAtributoRegdSatbsRegd(regDemandaRegd, grupoAtributo.getCodSga());
1876             if (atributosTextTextArea.size() == 0) {
1877 
1878               itRegDemandas.remove();
1879               filtrarAtributoLivre = false;
1880               retorno = true;
1881               break;
1882             }
1883 
1884             Iterator itAtributosTextTextArea = atributosTextTextArea.iterator();
1885 
1886             while (itAtributosTextTextArea.hasNext() && filtrarAtributoLivre) {
1887               DemAtributoDema demAtributoDema = (DemAtributoDema) itAtributosTextTextArea.next();
1888               if (!demAtributoDema.getInformacao().toUpperCase().trim().contains((Pagina.trocaNull(parametrosFiltroDemanda.get(nomeCampo))).toUpperCase().trim())) {
1889 
1890                 itRegDemandas.remove();
1891                 filtrarAtributoLivre = false;
1892                 retorno = true;
1893                 break;
1894               }
1895 
1896             }
1897           }
1898           // Se for MULTITEXTO
1899         }
1900         else if (tipoCampo.equals(SisTipoExibicGrupoDao.MULTITEXTO)) {
1901 
1902           List lAtrib = new ArrayList();
1903           if (parametrosFiltroDemanda.get("listaNomesAtributosRequest") != null)
1904             lAtrib = (ArrayList) parametrosFiltroDemanda.get("listaNomesAtributosRequest");
1905           Iterator lAtribIt = lAtrib.iterator();
1906 
1907           while (lAtribIt.hasNext() && filtrarAtributoLivre) {
1908             nomeCampo = Pagina.trocaNull(lAtribIt.next());
1909             if (nomeCampo.startsWith("a" + grupoAtributo.getCodSga().toString())) {
1910               if (parametrosFiltroDemanda.get(nomeCampo) != null && !"".equals(Pagina.trocaNull(parametrosFiltroDemanda.get(nomeCampo)))) {
1911                 String codSisAtrib = nomeCampo.substring(nomeCampo.lastIndexOf("_") + 1);
1912                 SisAtributoSatb sisAtributoSatb = (SisAtributoSatb) this.buscar(SisAtributoSatb.class, Long.valueOf(codSisAtrib));
1913                 List atributosMultiText = getRegDemandaSisAtributoRegdSatbsRegd(regDemandaRegd, grupoAtributo.getCodSga());
1914                 if (atributosMultiText.size() == 0 || !getSisAtributosRegDem(regDemandaRegd, grupoAtributo.getCodSga()).contains(sisAtributoSatb)) {
1915 
1916                   itRegDemandas.remove();
1917                   filtrarAtributoLivre = false;
1918                   retorno = true;
1919                   break;
1920                 }
1921                 Iterator itAtributosMultiTexto = atributosMultiText.iterator();
1922 
1923                 while (itAtributosMultiTexto.hasNext() && filtrarAtributoLivre) {
1924                   DemAtributoDema demAtributoDema = (DemAtributoDema) itAtributosMultiTexto.next();
1925                   if (demAtributoDema.getSisAtributoSatb().getCodSatb().toString().equals(codSisAtrib)) {
1926                     if (!demAtributoDema.getInformacao().toUpperCase().trim().contains((Pagina.trocaNull(parametrosFiltroDemanda.get(nomeCampo))).toUpperCase().trim())) {
1927 
1928                       itRegDemandas.remove();
1929                       filtrarAtributoLivre = false;
1930                       retorno = true;
1931                       break;
1932                     }
1933                   }
1934                 }
1935               }
1936             }
1937           }
1938           // Se for VALIDACAO
1939         }
1940         else if (tipoCampo.equals(SisTipoExibicGrupoDao.VALIDACAO)) {
1941 
1942           nomeCampo = "a" + grupoAtributo.getCodSga() + "_Inicio";
1943           String filtroParametro = Pagina.trocaNull(parametrosFiltroDemanda.get(nomeCampo));
1944           if (parametrosFiltroDemanda.get(nomeCampo) != null && !"".equals(Pagina.trocaNull(parametrosFiltroDemanda.get(nomeCampo)))) {
1945 
1946             List atributosValidacao = getRegDemandaSisAtributoRegdSatbsRegd(regDemandaRegd, grupoAtributo.getCodSga());
1947 
1948             if (atributosValidacao.size() == 0) {
1949 
1950               itRegDemandas.remove();
1951               filtrarAtributoLivre = false;
1952               retorno = true;
1953               break;
1954             }
1955 
1956             Iterator itAtributosValidacao = atributosValidacao.iterator();
1957 
1958             while (itAtributosValidacao.hasNext() && filtrarAtributoLivre) {
1959               DemAtributoDema demAtributoDema = (DemAtributoDema) itAtributosValidacao.next();
1960 
1961               if (demAtributoDema.getSisAtributoSatb().getAtribInfCompSatb().equals("dataScript")) {
1962 
1963                 // Modifica as ordens de dia e mês na data, para ficar no
1964                 // formato MM/DD/YYYY
1965                 filtroParametro = filtroParametro.substring(3, filtroParametro.lastIndexOf("/") + 1) + filtroParametro.substring(0, filtroParametro.indexOf("/") + 1) + filtroParametro.substring(filtroParametro.lastIndexOf("/") + 1);
1966 
1967                 Date dataFiltro = new Date(filtroParametro);
1968 
1969                 String valorAtribLivre = demAtributoDema.getInformacao();
1970 
1971                 // Modifica as ordens de dia e mês na data, para ficar no
1972                 // formato MM/DD/YYYY
1973                 valorAtribLivre = valorAtribLivre.substring(3, valorAtribLivre.lastIndexOf("/") + 1) + valorAtribLivre.substring(0, valorAtribLivre.indexOf("/") + 1) + valorAtribLivre.substring(valorAtribLivre.lastIndexOf("/") + 1);
1974 
1975                 Date dataAtribLivre = new Date(valorAtribLivre);
1976                 // Remove da lista se a data estiver estiver fora do intervalo
1977                 // especificado no filtro
1978                 if (dataAtribLivre.compareTo(dataFiltro) < 0) {
1979                   // itensRemovidos.add(regDemandaRegd.getCodRegd());
1980                   itRegDemandas.remove();
1981                   filtrarAtributoLivre = false;
1982                   retorno = true;
1983                   break;
1984                 }
1985 
1986               }
1987               else if (demAtributoDema.getSisAtributoSatb().getAtribInfCompSatb().equals("numeroInteiroScript") || demAtributoDema.getSisAtributoSatb().getAtribInfCompSatb().equals("numeroRealScript") || demAtributoDema.getSisAtributoSatb().getAtribInfCompSatb().equals("valorMonetarioScript")) {
1988 
1989                 filtroParametro = filtroParametro.replace(".", "");
1990                 filtroParametro = filtroParametro.replace(",", ".");
1991 
1992                 BigDecimal valorFiltro = new BigDecimal(filtroParametro);
1993 
1994                 BigDecimal valorAtribLivre = new BigDecimal(demAtributoDema.getInformacao().replace(".", "").replace(",", "."));
1995 
1996                 // Remove da lista se a data estiver estiver fora do intervalo
1997                 // especificado no filtro
1998                 if (valorAtribLivre.doubleValue() < valorFiltro.doubleValue()) {
1999                   // itensRemovidos.add(regDemandaRegd.getCodRegd());
2000                   itRegDemandas.remove();
2001                   filtrarAtributoLivre = false;
2002                   retorno = true;
2003                   break;
2004                 }
2005               }
2006             }
2007           }
2008 
2009           nomeCampo = "a" + grupoAtributo.getCodSga().toString() + "_Fim";
2010           filtroParametro = Pagina.trocaNull(parametrosFiltroDemanda.get(nomeCampo));
2011           if (parametrosFiltroDemanda.get(nomeCampo) != null && !"".equals(Pagina.trocaNull(parametrosFiltroDemanda.get(nomeCampo)))) {
2012 
2013             List atributosValidacao = getRegDemandaSisAtributoRegdSatbsRegd(regDemandaRegd, grupoAtributo.getCodSga());
2014 
2015             if (atributosValidacao.size() == 0) {
2016 
2017               itRegDemandas.remove();
2018               filtrarAtributoLivre = false;
2019               retorno = true;
2020               break;
2021             }
2022 
2023             Iterator itAtributosValidacao = atributosValidacao.iterator();
2024 
2025             while (itAtributosValidacao.hasNext() && filtrarAtributoLivre) {
2026               DemAtributoDema demAtributoDema = (DemAtributoDema) itAtributosValidacao.next();
2027 
2028               if (demAtributoDema.getSisAtributoSatb().getAtribInfCompSatb().equals("dataScript")) {
2029 
2030                 // Modifica as ordens de dia e mês na data, para ficar no
2031                 // formato MM/DD/YYYY
2032                 filtroParametro = filtroParametro.substring(3, filtroParametro.lastIndexOf("/") + 1) + filtroParametro.substring(0, filtroParametro.indexOf("/") + 1) + filtroParametro.substring(filtroParametro.lastIndexOf("/") + 1);
2033 
2034                 Date dataFiltro = new Date(filtroParametro);
2035 
2036                 String valorAtribLivre = demAtributoDema.getInformacao();
2037 
2038                 // Modifica as ordens de dia e mês na data, para ficar no
2039                 // formato MM/DD/YYYY
2040                 valorAtribLivre = valorAtribLivre.substring(3, valorAtribLivre.lastIndexOf("/") + 1) + valorAtribLivre.substring(0, valorAtribLivre.indexOf("/") + 1) + valorAtribLivre.substring(valorAtribLivre.lastIndexOf("/") + 1);
2041 
2042                 Date dataAtribLivre = new Date(valorAtribLivre);
2043                 // Remove da lista se a data estiver estiver fora do intervalo
2044                 // especificado no filtro
2045                 if (dataAtribLivre.compareTo(dataFiltro) > 0) {
2046                   // itensRemovidos.add(regDemandaRegd.getCodRegd());
2047                   itRegDemandas.remove();
2048                   filtrarAtributoLivre = false;
2049                   retorno = true;
2050                   break;
2051                 }
2052 
2053               }
2054               else if (demAtributoDema.getSisAtributoSatb().getAtribInfCompSatb().equals("numeroInteiroScript") || demAtributoDema.getSisAtributoSatb().getAtribInfCompSatb().equals("numeroRealScript") || demAtributoDema.getSisAtributoSatb().getAtribInfCompSatb().equals("valorMonetarioScript")) {
2055 
2056                 filtroParametro = filtroParametro.replace(".", "");
2057                 filtroParametro = filtroParametro.replace(",", ".");
2058 
2059                 BigDecimal valorFiltro = new BigDecimal(filtroParametro);
2060 
2061                 BigDecimal valorAtribLivre = new BigDecimal(demAtributoDema.getInformacao().replace(".", "").replace(",", "."));
2062 
2063                 // Remove da lista se a data estiver estiver fora do intervalo
2064                 // especificado no filtro
2065                 if (valorAtribLivre.doubleValue() > valorFiltro.doubleValue()) {
2066                   // itensRemovidos.add(regDemandaRegd.getCodRegd());
2067                   itRegDemandas.remove();
2068                   filtrarAtributoLivre = false;
2069                   retorno = true;
2070                   break;
2071                 }
2072               }
2073 
2074             }
2075           }
2076 
2077           nomeCampo = "a" + grupoAtributo.getCodSga();
2078           filtroParametro = Pagina.trocaNull(parametrosFiltroDemanda.get(nomeCampo));
2079           if (parametrosFiltroDemanda.get(nomeCampo) != null && !"".equals(Pagina.trocaNull(parametrosFiltroDemanda.get(nomeCampo)))) {
2080 
2081             List atributosValidacao = getRegDemandaSisAtributoRegdSatbsRegd(regDemandaRegd, grupoAtributo.getCodSga());
2082 
2083             if (atributosValidacao.size() == 0) {
2084 
2085               itRegDemandas.remove();
2086               filtrarAtributoLivre = false;
2087               retorno = true;
2088               break;
2089             }
2090 
2091             Iterator itAtributosValidacao = atributosValidacao.iterator();
2092 
2093             while (itAtributosValidacao.hasNext() && filtrarAtributoLivre) {
2094               DemAtributoDema demAtributoDema = (DemAtributoDema) itAtributosValidacao.next();
2095 
2096               if (!demAtributoDema.getInformacao().toUpperCase().contains(filtroParametro.toUpperCase())) {
2097 
2098                 itRegDemandas.remove();
2099                 filtrarAtributoLivre = false;
2100                 retorno = true;
2101                 break;
2102               }
2103             }
2104           }
2105         }
2106       }
2107 
2108     } catch (Exception e) {
2109 
2110       e.printStackTrace();
2111     }
2112 
2113     return retorno;
2114   }
2115 
2116   private boolean aplicarRestricaoGruposUsuario(RegDemandaRegd regDemandaRegd, UsuarioUsu usuario, Set gruposAcesso) {
2117 
2118     boolean restringirPorUSuario = true;
2119 
2120     try {
2121 
2122       // " select distinct regDemanda from RegDemandaRegd as regDemanda ")
2123       // .append(" join regDemanda.usuarioUsuByCodUsuInclusaoRegd as usuario ")
2124       // .append(" join usuario.usuarioAtributoUsuas as usuarioAtributo ")
2125       // .append(" where ")
2126       // .append(" usuario.codUsu = regDemanda.usuarioUsuByCodUsuInclusaoRegd.codUsu ")
2127       // .append(" and usuarioAtributo.usuarioUsu.codUsu = usuario.codUsu ")
2128       // .append(" and usuarioAtributo.comp_id.codSatb in (:gruposAcesso) ")
2129       // .append(" order by regDemanda.codRegd asc ");
2130 
2131       List<Long> listCodGruposAcesso = new ArrayList<Long>();
2132       for (Iterator iter = gruposAcesso.iterator(); iter.hasNext();) {
2133         SisAtributoSatb grupoAcesso = (SisAtributoSatb) iter.next();
2134         listCodGruposAcesso.add(grupoAcesso.getCodSatb());
2135       }
2136 
2137       Set usuarioAtributos = regDemandaRegd.getUsuarioUsuByCodUsuInclusaoRegd().getUsuarioAtributoUsuas();
2138 
2139       Iterator itUsuarioAtributos = usuarioAtributos.iterator();
2140 
2141       while (itUsuarioAtributos.hasNext()) {
2142 
2143         UsuarioAtributoUsua usuarioAtributo = (UsuarioAtributoUsua) itUsuarioAtributos.next();
2144 
2145         if (listCodGruposAcesso.contains(usuarioAtributo.getComp_id().getCodSatb())) {
2146           restringirPorUSuario = false;
2147         }
2148       }
2149 
2150     } catch (Exception e) {
2151 
2152       e.printStackTrace();
2153     }
2154 
2155     return restringirPorUSuario;
2156   }
2157 
2158   private boolean aplicarRestricaoUsuarioEntidadeOrgaoDemanda(RegDemandaRegd regDemandaRegd, UsuarioUsu usuario) {
2159 
2160     boolean retorno = false;
2161 
2162     try {
2163 
2164       Set entidadesUsuario = usuario.getEntidadeEnts();
2165 
2166       Iterator itEntidadesOrgaosDemanda = regDemandaRegd.getEntidadeOrgaoDemandaEntorgds().iterator();
2167 
2168       boolean usuarioContemAlgumaEntidadeOrgaoDemanda = false;
2169 
2170       while (itEntidadesOrgaosDemanda.hasNext()) {
2171 
2172         EntidadeEnt entidadeOrgaoDemanda = (EntidadeEnt) itEntidadesOrgaosDemanda.next();
2173 
2174         if (entidadesUsuario.contains(entidadeOrgaoDemanda)) {
2175           usuarioContemAlgumaEntidadeOrgaoDemanda = true;
2176           break;
2177         }
2178 
2179       }
2180 
2181       if (!usuarioContemAlgumaEntidadeOrgaoDemanda) {
2182         // itRegDemandas.remove();
2183         return true;
2184 
2185       }
2186 
2187     } catch (Exception e) {
2188 
2189       e.printStackTrace();
2190     }
2191 
2192     return retorno;
2193   }
2194 
2195   /****** METODO MODIFICADO POR JOSE ANDRE NO BRANCH ***********/
2196   /****** RESPONSAVEL PELO MERGE PATRICIA PESSOA ***********/
2197 
2198   /**
2199    * @param request
2200    * @param regDemandaRegd
2201    * @param itensRemovidos
2202    * @param itRegDemandas
2203    * @param atributosLivres
2204    * @return
2205    */
2206   private boolean aplicarRestricaoAtributosLivresRestritivos(RegDemandaRegd regDemandaRegd, List atributosLivres, UsuarioUsu usuario) {
2207 
2208     boolean retorno = true;
2209 
2210     try {
2211 
2212       boolean filtrarAtributoLivre = true;
2213       Iterator itAtributos = atributosLivres.iterator();
2214       // Filtrar pelos atributos livres restritivos
2215 
2216       Set usuarioAtributos = usuario.getUsuarioAtributoUsuas();
2217       List codAtributosUsuarios = new ArrayList();
2218       Iterator itUsuarioAtributos = usuarioAtributos.iterator();
2219 
2220       while (itUsuarioAtributos.hasNext()) {
2221 
2222         UsuarioAtributoUsua usuarioAtributo = (UsuarioAtributoUsua) itUsuarioAtributos.next();
2223 
2224         codAtributosUsuarios.add(usuarioAtributo.getComp_id().getCodSatb());
2225 
2226       }
2227 
2228       while (itAtributos.hasNext() && filtrarAtributoLivre) {
2229         retorno = false;
2230         ObjetoDemanda atributoDemanda = (ObjetoDemanda) itAtributos.next();
2231         SisGrupoAtributoSga grupoAtributo = atributoDemanda.iGetGrupoAtributosLivres();
2232 
2233         String nomeCampo = "a" + grupoAtributo.getCodSga().toString();
2234         String tipoCampo = grupoAtributo.getSisTipoExibicGrupoSteg().getCodSteg().toString();
2235         String tipoCampoCadastroUsuario = "";
2236 
2237         if (grupoAtributo.getSisTipoExibicGrupoCadUsuSteg() != null)
2238           tipoCampoCadastroUsuario = grupoAtributo.getSisTipoExibicGrupoCadUsuSteg().getCodSteg().toString();
2239 
2240         // Se for CheckBox ou RadioButton ou ListBox, não procura em
2241         // InformacaoDema
2242         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))) {
2243           List atributos = getSisAtributosRegDem(regDemandaRegd, grupoAtributo.getCodSga());
2244           // retorno = false;
2245           int numAtributos = 0;
2246           if (atributos != null) {
2247             numAtributos = atributos.size();
2248           }
2249           boolean demandaPossuiAlgumAtributoUsuario = false;
2250           for (int i = 0; i < numAtributos && filtrarAtributoLivre; i++) {
2251             if (codAtributosUsuarios.contains(((SisAtributoSatb) atributos.get(i)).getCodSatb())) {
2252               demandaPossuiAlgumAtributoUsuario = true;
2253               break;
2254             }
2255           }
2256           if (!demandaPossuiAlgumAtributoUsuario) {
2257             return true;
2258           }
2259         }
2260 
2261       }
2262 
2263     } catch (Exception e) {
2264 
2265       e.printStackTrace();
2266     }
2267 
2268     return retorno;
2269   }
2270 
2271   /**
2272    * Devolve uma lista de AtributoDemandaAtbdem. Essa lista contém objetos de
2273    * AtributoDemandaAtbdem ordenados pela ordem do campo na tela. O acesso aos
2274    * objetos dessa lista se dá pela interface ObjetoDemanda que normaliza os
2275    * métodos de acesso
2276    * @param
2277    * @return lista de objetos AtributoDemandaAtbdem ordenados pela ordem do
2278    *         campo na tela.
2279    * @throws ECARException
2280    */
2281   public List getAtributosDemandaEhFiltro() throws ECARException {
2282     List retorno = new ArrayList();
2283 
2284     try {
2285       StringBuilder query = new StringBuilder("select atributoDemanda from AtributoDemandaAtbdem as atributoDemanda").append(" where atributoDemanda.indAtivoAtbdem = 'S' and atributoDemanda.indFiltroAtbdem = 'S'").append(" order by atributoDemanda.seqApresTelaCampoAtbdem asc");
2286       Query q = this.getSession().createQuery(query.toString());
2287 
2288       retorno = q.list();
2289 
2290     } catch (HibernateException e) {
2291       this.logger.error(e);
2292       throw new ECARException("erro.hibernateException");
2293     }
2294     return retorno;
2295   }
2296 
2297   /**
2298    * Devolve uma lista de AtributoDemandaAtbdem. Essa lista contém objetos de
2299    * AtributoDemandaAtbdem ordenados pela ordem do campo na tela. O acesso aos
2300    * objetos dessa lista se dá pela interface ObjetoDemanda que normaliza os
2301    * métodos de acesso
2302    * @param
2303    * @return lista de objetos AtributoDemandaAtbdem ordenados pela ordem do
2304    *         campo na tela.
2305    * @throws ECARException
2306    */
2307   public List getAtributosLivresDemandaEhFiltro() throws ECARException {
2308     List retorno = new ArrayList();
2309 
2310     try {
2311       StringBuilder query = new StringBuilder("select atributoDemanda from AtributoDemandaAtbdem as atributoDemanda").append(" where atributoDemanda.indAtivoAtbdem = 'S' and atributoDemanda.indFiltroAtbdem = 'S'").append(" and atributoDemanda.sisGrupoAtributoSga is not null").append(" order by atributoDemanda.seqApresTelaCampoAtbdem asc");
2312       Query q = this.getSession().createQuery(query.toString());
2313 
2314       retorno = q.list();
2315 
2316     } catch (HibernateException e) {
2317       this.logger.error(e);
2318       throw new ECARException("erro.hibernateException");
2319     }
2320     return retorno;
2321   }
2322 
2323   /**
2324    * Devolve uma lista de AtributoDemandaAtbdem. Essa lista contém objetos de
2325    * AtributoDemandaAtbdem ordenados pela ordem do campo na tela. O acesso aos
2326    * objetos dessa lista se dá pela interface ObjetoDemanda que normaliza os
2327    * métodos de acesso
2328    * @param
2329    * @return lista de objetos AtributoDemandaAtbdem ordenados pela ordem do
2330    *         campo na tela.
2331    * @throws ECARException
2332    */
2333   public List getAtributosLivresDemandaEhRestritivo() throws ECARException {
2334     List retorno = new ArrayList();
2335 
2336     try {
2337       StringBuilder query = new StringBuilder("select atributoDemanda from AtributoDemandaAtbdem as atributoDemanda").append(" where atributoDemanda.indAtivoAtbdem = 'S' and atributoDemanda.indRestritivo = 'S'").append(" and atributoDemanda.sisGrupoAtributoSga is not null").append(" order by atributoDemanda.seqApresTelaCampoAtbdem asc");
2338       Query q = this.getSession().createQuery(query.toString());
2339 
2340       retorno = q.list();
2341 
2342     } catch (HibernateException e) {
2343       this.logger.error(e);
2344       throw new ECARException("erro.hibernateException");
2345     }
2346     return retorno;
2347   }
2348 
2349   /**
2350    * Retorna os SisAtributos do grupo e das demanda passadas.<br>
2351    * @param regDemandaRegd
2352    * @param codSisGrupoAtributo
2353    * @return List
2354    */
2355   public List getSisAtributosRegDem(RegDemandaRegd regDemandaRegd, Long codSisGrupoAtributo) {
2356     List listaRetorno = new ArrayList();
2357     if (regDemandaRegd.getDemAtributoDemas() != null) {
2358       Iterator it = regDemandaRegd.getDemAtributoDemas().iterator();
2359       while (it.hasNext()) {
2360         DemAtributoDema demAtributoDema = (DemAtributoDema) it.next();
2361         if (demAtributoDema.getSisAtributoSatb().getSisGrupoAtributoSga().getCodSga().equals(codSisGrupoAtributo)) {
2362           listaRetorno.add(demAtributoDema.getSisAtributoSatb());
2363         }
2364       }
2365     }
2366 
2367     return listaRetorno;
2368 
2369   }
2370 
2371   /**
2372    * Retorna os ItemEstruturaSisAtributoIettSatbs do grupo e do Iett passados.<br>
2373    * @param iett
2374    * @param codSisGrupoAtributo
2375    * @return
2376    */
2377   public List getRegDemandaSisAtributoRegdSatbsRegd(RegDemandaRegd regDemanda, Long codSisGrupoAtributo) {
2378     List listaRetorno = new ArrayList();
2379     if (regDemanda.getDemAtributoDemas() != null) {
2380       Iterator it = regDemanda.getDemAtributoDemas().iterator();
2381       while (it.hasNext()) {
2382         DemAtributoDema demAtributoDema = (DemAtributoDema) it.next();
2383         if (demAtributoDema.getSisAtributoSatb().getSisGrupoAtributoSga().getCodSga().equals(codSisGrupoAtributo)) {
2384           listaRetorno.add(demAtributoDema);
2385         }
2386       }
2387     }
2388 
2389     return listaRetorno;
2390 
2391   }
2392 
2393   public List getDemandasAClassificar(RegDemandaRegd regDemandaPesq, boolean ehFiltro, UsuarioUsu usuario) throws HibernateException, ECARException {
2394 
2395     List retorno = null;
2396     try {
2397       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 ");
2398 
2399       Query q = this.getSession().createQuery(query.toString());
2400 
2401       retorno = q.list();
2402 
2403       // aplicarRestricaoUsuarioAtributoRegDemanda(retorno, usuario);
2404 
2405       if (ehFiltro)
2406         retorno = aplicarFiltrosDinamicosRegDemanda(retorno);
2407 
2408     } catch (HibernateException e) {
2409       this.logger.error(e);
2410       throw new ECARException(e);
2411     }
2412 
2413     return retorno;
2414   }
2415 
2416 }