View Javadoc

1   /*
2    * Created on 05/10/2004 Classe para controlar os itens de locais Itens de
3    * locais sao instancias de um determinado grupo de local Por exemplo, para o
4    * grupo de local Estado, temos os itens Parana, Sao Paulo Para o grupo
5    * Municipio, temos Curitiba, Sao Jose dos Pinhais, etc Um grupo está associado
6    * a varios locais Um local pertence a um grupo A hierarquia de locais depende
7    * da hierarquia de grupos. então uma vez montada hierarquia de locais não
8    * podemos mais alterar a hierarquia de grupos, por razoes de integridade
9    * historica Seja a tabela de hierarquia de grupos (de locais) GRUPO ->
10   * GRUPO_PAI ------------------ M E M R E R R P Seja a tabela de locais (itens
11   * ou instancias de um grupo) LOCAL -> GRUPO ---------------------- RS, SC, PR E
12   * CTBA, FOZ M SUL, NORTE R BRASIL, CHILE P Dado um local, quem são seus locais
13   * associados na hierarquia de locais? Ex. Local: PR Locais Associados: grupo <-
14   * local.getGrupo() // grupo <- E (PR.getGrupo()) listaFilhosGrupo <-
15   * grupo.getFilhos() // listafilhosGrupo <- {M} (E.getFilhos()) para cada filho
16   * na listaFilhosGrupo listaLocaisAssociados <- listaLocaisAssociados U
17   * filho.getItemLocais() Entao a lista de itens de local associada será: {CTBA,
18   * FOZ}
19   */
20  package ecar.dao;
21  
22  import java.util.ArrayList;
23  import java.util.Collection;
24  import java.util.Collections;
25  import java.util.Comparator;
26  import java.util.Enumeration;
27  import java.util.HashSet;
28  import java.util.Iterator;
29  import java.util.List;
30  import java.util.Map;
31  import java.util.Set;
32  
33  import javax.servlet.http.HttpServletRequest;
34  
35  import org.hibernate.HibernateException;
36  import org.hibernate.Query;
37  import org.hibernate.Transaction;
38  
39  import comum.database.Dao;
40  import comum.util.Data;
41  import comum.util.Pagina;
42  
43  import ecar.exception.ECARException;
44  import ecar.pojo.LocAtributoLoca;
45  import ecar.pojo.LocalGrupoLgp;
46  import ecar.pojo.LocalItemLit;
47  import ecar.pojo.PaiFilho;
48  import ecar.pojo.SisAtributoSatb;
49  import ecar.pojo.SisGrupoAtributoSga;
50  
51  /**
52   * @author evandro
53   */
54  public class LocalItemDao extends Dao {
55  
56    /**
57     * Construtor. Chama o Session factory do Hibernate
58     */
59    public LocalItemDao(HttpServletRequest request) {
60      super();
61      this.request = request;
62    }
63  
64    /**
65     * Construtor. Chama o Session factory do Hibernate
66     */
67    public LocalItemDao() {
68      super();
69    }
70  
71    /**
72     * Retorna um list com identificações de todos os locais filhos de um local
73     * @param localItem
74     * @return List de Long
75     */
76    public List getFilhosById(LocalItemLit localItem) {
77      List filhos = new ArrayList();
78      if (localItem.getLocalItemHierarquiaLithsByCodLitPai() != null) {
79        Iterator it = localItem.getLocalItemHierarquiaLithsByCodLitPai().iterator();
80        while (it.hasNext()) {
81          LocalItemLit localItemFilho = (LocalItemLit) it.next();
82          filhos.add(localItemFilho.getCodLit());
83        }
84      }
85      return filhos;
86    }
87  
88    /**
89     * Retorna os locais acima do local passado como parâmetro (pais, avôs, etc)
90     * @param localItem
91     * @return Set Coleção de Locais
92     */
93    public List getAscendentes(LocalItemLit localItem) {
94      List grupos = new ArrayList();
95      if (localItem.getLocalItemHierarquiaLithsByCodLit() != null) {
96        // Coleção dos Pais
97        Iterator it = localItem.getLocalItemHierarquiaLithsByCodLit().iterator();
98        while (it.hasNext()) {
99          LocalItemLit localItemLit = (LocalItemLit) it.next();
100         if (!grupos.contains(localItemLit)) {
101           grupos.add(localItemLit);
102           grupos.addAll(getAscendentes(localItemLit));
103         }
104       }
105     }
106     return grupos;
107   }
108 
109   /**
110    * verifica depois exclui
111    * @param localItem
112    * @throws ECARException
113    */
114   public void excluir(LocalItemLit localItem) throws ECARException {
115     try {
116       boolean excluir = true;
117       if (contar(localItem.getLocalItemHierarquiaLithsByCodLit()) > 0) {
118         excluir = false;
119         throw new ECARException("localItem.exclusao.erro.localItemHierarquiaLithsByCodLit");
120       }
121       if (contar(localItem.getLocalItemHierarquiaLithsByCodLitPai()) > 0) {
122         excluir = false;
123         throw new ECARException("localItem.exclusao.erro.localItemHierarquiaLithsByCodLitPai");
124       }
125       if (contar(localItem.getItemEstrutLocalIettls()) > 0) {
126         excluir = false;
127         throw new ECARException("localItem.exclusao.erro.itemEstrutLocalIettls");
128       }
129 
130       if (excluir) {
131         List objs = new ArrayList();
132         if (localItem.getLocAtributoLocas() != null) {
133           Iterator itAtb = localItem.getLocAtributoLocas().iterator();
134           while (itAtb.hasNext()) {
135             LocAtributoLoca localAtrib = (LocAtributoLoca) itAtb.next();
136             objs.add(localAtrib);
137           }
138         }
139         localItem.setLocAtributoLocas(null);
140         objs.add(localItem);
141         super.excluir(objs);
142       }
143     } catch (ECARException e) {
144       this.logger.error(e);
145       throw e;
146     }
147   }
148 
149   /**
150    * Recebe um localItemPai e retorna a lista de todos os localItem que podem
151    * ser seus filhos, respeitando hierarquia já estabelecida
152    * @param localItemPai
153    * @return
154    */
155   public List getLocalItemByLocalItem(LocalItemLit localItemPai) throws ECARException {
156     List listaFilhos = new ArrayList();
157 
158     try {
159       /* objetos que serão usados dentro do loop */
160       Collection itens;
161       LocalGrupoLgp localGrupoFilho;
162 
163       /* descobre o grupo do item */
164       LocalGrupoLgp localGrupoPai = localItemPai.getLocalGrupoLgp();
165 
166       /* descobre os filhos do grupo (ex, municipio é filho de estado) */
167       // Collection filhos =
168       // this.getSession().filter(localGrupoPai.getLocalGrupoHierarquiaLgphsByCodLgpPai(),
169       // "order by this.codLgp");
170       Collection filhos = this.getDescendentes(localGrupoPai);
171 
172       // Comentado por Cristiano - Mantis 10417
173       // filhos.add(localGrupoPai);
174 
175       String where = "where indAtivoLit='S' ";
176 
177       if (!"".equals(localItemPai.getIdentificacaoLit().trim())) {
178         where += "and upper(identificacaoLit) like '%" + localItemPai.getIdentificacaoLit().trim().toUpperCase() + "%' ";
179       }
180 
181       if (!"".equals(localItemPai.getCodIbgeLit().trim())) {
182         where += "and upper(codIbgeLit) = '" + localItemPai.getCodIbgeLit().trim().toUpperCase() + "' ";
183       }
184 
185       if (!"".equals(localItemPai.getCodPlanejamentoLit().trim())) {
186         where += "and upper(codPlanejamentoLit) = '" + localItemPai.getCodPlanejamentoLit().trim().toUpperCase() + "' ";
187       }
188 
189       Iterator it = filhos.iterator();
190 
191       /* obter os locais do grupo */
192       while (it.hasNext()) {
193         localGrupoFilho = (LocalGrupoLgp) it.next();
194 
195         Query query = this.getSession().createQuery("from LocalItemLit " + where + " and localGrupoLgp.codLgp = :codLgp");
196         query.setLong("codLgp", localGrupoFilho.getCodLgp().longValue());
197 
198         itens = query.list();
199 
200         if (itens != null) {
201           Iterator itAux = itens.iterator();
202 
203           while (itAux.hasNext()) {
204             LocalItemLit localItemLit = (LocalItemLit) itAux.next();
205 
206             if (!listaFilhos.contains(localItemLit)) {
207               listaFilhos.add(localItemLit);
208             }
209           }
210         }
211       }
212 
213       Collections.sort(listaFilhos, new Comparator() {
214         public int compare(Object o1, Object o2) {
215           LocalItemLit l1 = (LocalItemLit) o1;
216           LocalItemLit l2 = (LocalItemLit) o2;
217 
218           String ord1 = l1.getLocalGrupoLgp().getCodLgp().toString() + l1.getIdentificacaoLit();
219           String ord2 = l2.getLocalGrupoLgp().getCodLgp().toString() + l2.getIdentificacaoLit();
220 
221           return ord1.compareToIgnoreCase(ord2);
222         }
223       });
224 
225     } catch (HibernateException e) {
226       this.logger.error(e);
227       throw new ECARException(e);
228     }
229 
230     return listaFilhos;
231 
232   }
233 
234   /**
235    * Retorna uma lista com a lista completa de filhos de um LocalGrupoLgp
236    * @param LocalGrupoLgp localGrupoLgp
237    * @return List de LocalGrupoLgp
238    */
239   public List getDescendentes(LocalGrupoLgp localGrupoLgp) throws ECARException {
240     List retorno = new ArrayList();
241 
242     if (localGrupoLgp.getLocalGrupoHierarquiaLgphsByCodLgpPai() != null) {
243 
244       Iterator it = localGrupoLgp.getLocalGrupoHierarquiaLgphsByCodLgpPai().iterator();
245       while (it.hasNext()) {
246         LocalGrupoLgp localGrupoLgpFilho = (LocalGrupoLgp) it.next();
247 
248         if (!retorno.contains(localGrupoLgpFilho))
249           retorno.add(localGrupoLgpFilho);
250         retorno.addAll(this.getDescendentes(localGrupoLgpFilho));
251       }
252     }
253     return retorno;
254   }
255 
256   /**
257    * verifica duplicação depois salva
258    * @param local
259    * @throws ECARException
260    */
261   public void salvar(LocalItemLit local) throws ECARException {
262     if (pesquisarDuplos(local, new String[] { "identificacaoLit" }, "codLit").size() > 0)
263       throw new ECARException("localItem.validacao.registroDuplicado");
264 
265     List filhos = new ArrayList();
266     if (local.getLocAtributoLocas() != null)
267       filhos.addAll(local.getLocAtributoLocas());
268 
269     super.salvar(local, filhos);
270   }
271 
272   /**
273    * @param codLocais
274    * @return List
275    * @throws Exception
276    */
277   public ArrayList<LocalItemLit> pesquisarPorCodIBGE(LocalItemLit pLocal) throws ECARException {
278     Query query = this.getSession().createQuery("select i from LocalItemLit i where i.codIbgeLit = '" + pLocal.getCodIbgeLit() + "'");
279     return (ArrayList) query.list();
280   }
281 
282   /**
283    * @param Map mapLocais
284    * @throws ECARException
285    */
286   public void salvar(Map<Long, List<LocalItemLit>> mapLocais) throws ECARException {
287     inicializarLogBean();
288     Long chave = null;
289     Transaction tx = null;
290     try {
291       LocalItemLit local = null;
292       LocalItemLit localTemp = null;
293       LocalItemLit localPai = null;
294 
295       Set<Long> chaves = mapLocais.keySet();
296       Iterator<Long> chavesIt = chaves.iterator();
297       List<LocalItemLit> locais = new ArrayList<LocalItemLit>();
298       List<LocalItemLit> locaisTemp = new ArrayList<LocalItemLit>();
299       Iterator<LocalItemLit> locaisIt = null;
300 
301       List<LocalItemLit> pais = new ArrayList<LocalItemLit>();
302 
303       tx = session.beginTransaction();
304 
305       while (chavesIt.hasNext()) {
306         // Pega os locais por UF
307         chave = chavesIt.next();
308 
309         // Salva local pai
310         localPai = new LocalItemLit();
311         localPai.setCodIbgeLit(chave.toString());
312         pais = pesquisarPorCodIBGE(localPai);
313 
314         if (pais != null && !pais.isEmpty()) {
315           localPai = pais.get(0);
316           // Pega locais filhos
317           locais = mapLocais.get(chave);
318 
319           locaisIt = locais.iterator();
320           while (locaisIt.hasNext()) {
321             local = locaisIt.next();
322             locaisTemp = pesquisarPorCodIBGE(local);
323 
324             if (locaisTemp != null && !locaisTemp.isEmpty()) {
325 
326               if (locaisTemp.size() > 1) {
327                 int indice = locaisTemp.size();
328                 for (int i = 0; i < indice; i++) {
329                   localTemp = locaisTemp.get(i);
330                   if (!(localTemp.getIdentificacaoLit()).equalsIgnoreCase(local.getIdentificacaoLit())) {
331                     localTemp = null;
332                   }
333                   else {
334                     // System.out.println("---------"+localTemp.getCodLit()+"------------> "
335                     // + localTemp.getIdentificacaoLit());
336                     break;
337                   }
338                 }
339               }
340               else {
341                 localTemp = locaisTemp.get(0);
342               }
343 
344               this.setAtributos(request, localTemp);
345               // System.out.println("-------------1------> "+
346               // localTemp.getCodLit());
347 
348               // Salva local e hierarquia local
349               if (localTemp.getLocalItemHierarquiaLithsByCodLit() != null) {
350                 if (!localTemp.getLocalItemHierarquiaLithsByCodLit().contains(localPai))
351                   localTemp.getLocalItemHierarquiaLithsByCodLit().add(localPai);
352               }
353               else {
354                 localTemp.setLocalItemHierarquiaLithsByCodLit(new HashSet());
355                 localTemp.getLocalItemHierarquiaLithsByCodLit().add(localPai);
356               }
357               session.update(localTemp);
358             }
359             else {
360               this.setAtributos(request, local);
361 
362               // Salva local
363               session.saveOrUpdate(local);
364               // System.out.println("---------------2----> "+
365               // local.getCodLit());
366 
367               // Salva hierarquia local
368               if (local.getLocalItemHierarquiaLithsByCodLit() != null) {
369                 local.getLocalItemHierarquiaLithsByCodLit().add(localPai);
370               }
371               else {
372                 local.setLocalItemHierarquiaLithsByCodLit(new HashSet());
373                 local.getLocalItemHierarquiaLithsByCodLit().add(localPai);
374               }
375               session.saveOrUpdate(local);
376             }
377           }
378         }
379         else {
380           // Pega locais filhos
381           locais = mapLocais.get(chave);
382 
383           locaisIt = locais.iterator();
384           while (locaisIt.hasNext()) {
385             local = locaisIt.next();
386             locaisTemp = pesquisarPorCodIBGE(local);
387 
388             if (locaisTemp != null && !locaisTemp.isEmpty()) {
389 
390               if (locaisTemp.size() > 1) {
391                 int indice = locaisTemp.size();
392                 for (int i = 0; i < indice; i++) {
393                   localTemp = locaisTemp.get(i);
394                   if (!(localTemp.getIdentificacaoLit()).equalsIgnoreCase(local.getIdentificacaoLit())) {
395                     localTemp = null;
396                   }
397                   else {
398                     break;
399                   }
400                 }
401               }
402               else {
403                 localTemp = locaisTemp.get(0);
404               }
405 
406               this.setAtributos(request, localTemp);
407               // Salva local
408               session.update(localTemp);
409             }
410             else {
411               this.setAtributos(request, local);
412 
413               // Salva local
414               session.saveOrUpdate(local);
415             }
416           }
417         }
418       }
419 
420       tx.commit();
421 
422       if (logBean != null) {
423         logBean.setCodigoTransacao(Data.getHoraAtual(false));
424         logBean.setOperacao("INC");
425       }
426 
427     } catch (HibernateException e) {
428       if (tx != null)
429         try {
430           tx.rollback();
431         } catch (HibernateException r) {
432           this.logger.error(r);
433           throw new ECARException("erro.hibernateException");
434         }
435       this.logger.error(e);
436       throw new ECARException("erro.hibernateException");
437     }
438   }
439 
440   public void alterar(LocalItemLit local, HttpServletRequest request) throws ECARException {
441     if (pesquisarDuplos(local, new String[] { "identificacaoLit" }, "codLit").size() > 0)
442       throw new ECARException("localItem.validacao.registroDuplicado");
443 
444     Transaction tx = null;
445 
446     try {
447       List objetos = new ArrayList();
448       super.inicializarLogBean();
449       tx = session.beginTransaction();
450 
451       if (local.getLocAtributoLocas() != null) {
452         Iterator itAtt = local.getLocAtributoLocas().iterator();
453         while (itAtt.hasNext()) {
454           LocAtributoLoca localAtributo = (LocAtributoLoca) itAtt.next();
455           session.delete(localAtributo);
456           objetos.add(localAtributo);
457         }
458       }
459       local.setLocAtributoLocas(null);
460 
461       this.setAtributos(request, local);
462 
463       List filhos = new ArrayList();
464       if (local.getLocAtributoLocas() != null) {
465         filhos.addAll(local.getLocAtributoLocas());
466       }
467 
468       session.update(local);
469       objetos.add(local);
470 
471       Iterator it = filhos.iterator();
472       while (it.hasNext()) {
473         PaiFilho object = (PaiFilho) it.next();
474         object.atribuirPKPai();
475         // salva os filhos
476         session.save(object);
477         objetos.add(object);
478       }
479 
480       tx.commit();
481 
482       if (super.logBean != null) {
483         super.logBean.setCodigoTransacao(Data.getHoraAtual(false));
484         super.logBean.setOperacao("INC_ALT_EXC");
485         Iterator itObj = objetos.iterator();
486 
487         while (itObj.hasNext()) {
488           super.logBean.setObj(itObj.next());
489           super.loggerAuditoria.info(logBean.toString());
490         }
491       }
492 
493     } catch (HibernateException e) {
494       if (tx != null)
495         try {
496           tx.rollback();
497         } catch (HibernateException r) {
498           this.logger.error(r);
499           throw new ECARException("erro.hibernateException");
500         }
501       this.logger.error(e);
502       throw new ECARException("erro.hibernateException");
503     } catch (ECARException e) {
504       this.logger.error(e);
505       if (tx != null)
506         try {
507           tx.rollback();
508         } catch (HibernateException r) {
509           this.logger.error(r);
510           throw new ECARException("erro.hibernateException");
511         }
512       throw e;
513     }
514   }
515 
516   /**
517    * Recebe um LocalGrupoLgp e retorna a lista de todos os localItem que são do
518    * grupo.
519    * @param localGrupoLgp
520    * @return List
521    * @throws HibernateException
522    */
523   public List getLocalItemPorLocalGrupo(LocalGrupoLgp localGrupo) throws ECARException, HibernateException {
524     Query query = this.getSession().createQuery("select lit from LocalItemLit lit" + " where lit.localGrupoLgp.codLgp = :codLgp" + " and lit.indAtivoLit = 'S'" + " order by lit.identificacaoLit");
525     query.setLong("codLgp", localGrupo.getCodLgp().longValue());
526 
527     return query.list();
528   }
529 
530   public List getLocalItemPorLocalGrupo(Long localGrupo) throws ECARException, HibernateException {
531 
532     LocalGrupoLgp grupo = new LocalGrupoLgp();
533     grupo.setCodLgp(localGrupo);
534     return getLocalItemPorLocalGrupo(grupo);
535   }
536 
537   /**
538    * Devolve uma lista de LocalItemLit ativos que são pais do local passado como
539    * parâmetro
540    * @param localItem
541    * @return List
542    */
543   public List getLocaisPais(LocalItemLit localItem) {
544     List locaisPais = new ArrayList();
545 
546     if (localItem.getLocalItemHierarquiaLithsByCodLit() != null) {
547       locaisPais.addAll(localItem.getLocalItemHierarquiaLithsByCodLit());
548     }
549 
550     return locaisPais;
551   }
552 
553   /**
554    * Devolve uma lista de LocalItemLit ativos que são filhos do local passado
555    * como parâmetro
556    * @param localItem
557    * @return List
558    */
559   public List getLocaisFilhos(LocalItemLit localItem) {
560     List locaisFilhos = new ArrayList();
561 
562     if (localItem.getLocalItemHierarquiaLithsByCodLitPai() != null) {
563       locaisFilhos.addAll(localItem.getLocalItemHierarquiaLithsByCodLitPai());
564     }
565 
566     return locaisFilhos;
567   }
568 
569   public List getLocaisFilhos(Long localItem) throws ECARException {
570     LocalItemLit item = (LocalItemLit) this.buscar(LocalItemLit.class, localItem);
571     return getLocaisFilhos(item);
572   }
573 
574   /**
575    * @param local
576    * @param grupoAtributo
577    * @return List atributos
578    */
579   public List getAtributosLocalByGrupo(LocalItemLit local, SisGrupoAtributoSga grupoAtributo) {
580     List retorno = new ArrayList();
581 
582     Set result = local.getLocAtributoLocas();
583     if (result != null) {
584       if (result.size() > 0) {
585         Iterator it = result.iterator();
586         while (it.hasNext()) {
587           LocAtributoLoca localAtributo = (LocAtributoLoca) it.next();
588           if (localAtributo.getSisAtributoSatb().getSisGrupoAtributoSga().equals(grupoAtributo))
589             retorno.add(localAtributo);
590         }
591       }
592     }
593 
594     return retorno;
595   }
596 
597   /**
598    * Obtém os atributos dinâmicos da página e os transforma para uma lista de
599    * LocAtributoLoca utilizado para salvar e alterar LocalItemLit.
600    * @param request
601    * @param localItemLit
602    * @throws ECARException
603    */
604   public void setAtributos(HttpServletRequest request, LocalItemLit localItem) throws ECARException {
605     localItem.setLocAtributoLocas(null);
606     List lAtributos;
607     lAtributos = new SisGrupoAtributoDao(request).getGruposAtributosCadastro("L");
608     Iterator it = lAtributos.iterator();
609     while (it.hasNext()) {
610       SisGrupoAtributoSga grupoAtributo = (SisGrupoAtributoSga) it.next();
611       if (!"".equals(Pagina.getParamStr(request, "a" + grupoAtributo.getCodSga().toString()))) {
612         LocAtributoLoca localAtributo = new LocAtributoLoca();
613         localAtributo.setLocalItemLit(localItem);
614         /*
615          * Caso o tipo de campo seja texto considera-se que o Grupo de Atributos
616          * possuirá apenas 1 atributo que o representa.
617          */
618         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())) {
619           if (grupoAtributo.getSisAtributoSatbs() != null && grupoAtributo.getSisAtributoSatbs().size() > 0) {
620             localAtributo.setInformacao(Pagina.getParamStr(request, "a" + grupoAtributo.getCodSga().toString()));
621             localAtributo.setSisAtributoSatb((SisAtributoSatb) grupoAtributo.getSisAtributoSatbs().iterator().next());
622             localAtributo.setDataInclusao(Data.getDataAtual());
623             if (localItem.getLocAtributoLocas() == null)
624               localItem.setLocAtributoLocas(new HashSet());
625             localItem.getLocAtributoLocas().add(localAtributo);
626           }
627         }
628         else {
629 
630           String[] atributos = request.getParameterValues("a" + grupoAtributo.getCodSga().toString());
631           for (int i = 0; i < atributos.length; i++) {
632             /*
633              * Tenho que criar novamente o usuário atributo senão ele não é
634              * adicionado no set no final deste laço
635              */
636             localAtributo = new LocAtributoLoca();
637             localAtributo.setLocalItemLit(localItem);
638             localAtributo.setSisAtributoSatb((SisAtributoSatb) super.buscar(SisAtributoSatb.class, Long.valueOf(atributos[i])));
639             localAtributo.setDataInclusao(Data.getDataAtual());
640             if (localItem.getLocAtributoLocas() == null)
641               localItem.setLocAtributoLocas(new HashSet());
642             localItem.getLocAtributoLocas().add(localAtributo);
643           }
644         }
645       }
646       /*
647        * Foi necessário alterar o nome dos campos dos elementos multitexto,
648        * adicionando "-codSatb" Assim, ficamos com o nome do campo no seguinte
649        * padrão: "a + codSteg + - + codSatb" (ex.: a12-38) Isto foi feito visto
650        * a diferença existente entre um grupo com suporte a 1 campo texto e
651        * este, que suporta vários campos texto.
652        */
653       else {
654         if (SisTipoExibicGrupoDao.MULTITEXTO.equals(grupoAtributo.getSisTipoExibicGrupoSteg().getCodSteg().toString())) {
655           Enumeration lAtrib = request.getParameterNames();
656           while (lAtrib.hasMoreElements()) {
657             String atrib = (String) lAtrib.nextElement();
658             if (atrib.lastIndexOf('-') > 0) {
659               String nomeAtrib = atrib.substring(0, atrib.lastIndexOf('-'));
660               String nomeCampo = atrib.substring(atrib.lastIndexOf('-') + 1);
661               if (nomeAtrib.equals("a" + grupoAtributo.getCodSga().toString()) && !"".equals(Pagina.getParamStr(request, atrib))) {
662                 LocAtributoLoca localAtributo = new LocAtributoLoca();
663                 localAtributo.setLocalItemLit(localItem);
664                 localAtributo.setInformacao(Pagina.getParamStr(request, atrib));
665                 localAtributo.setSisAtributoSatb((SisAtributoSatb) super.buscar(SisAtributoSatb.class, Long.valueOf(nomeCampo)));
666                 localAtributo.setDataInclusao(Data.getDataAtual());
667                 if (localItem.getLocAtributoLocas() == null)
668                   localItem.setLocAtributoLocas(new HashSet());
669                 localItem.getLocAtributoLocas().add(localAtributo);
670               }
671             }
672           }
673         }
674       }
675     }
676   }
677 
678   /**
679    * @param local
680    * @return List
681    * @throws ECARException
682    */
683   public List pesquisar(LocalItemLit local) throws ECARException {
684     // classes marcadas na tela como filtro
685     List listFiltro = new ArrayList();
686     if (local.getLocAtributoLocas() != null && local.getLocAtributoLocas().size() > 0) {
687       Iterator itAtr = local.getLocAtributoLocas().iterator();
688       LocAtributoLoca localAtributo;
689       while (itAtr.hasNext()) {
690         localAtributo = (LocAtributoLoca) itAtr.next();
691         listFiltro.add(localAtributo);
692       }
693     }
694 
695     List pesquisa = super.pesquisar(local, new String[] { "identificacaoLit", "asc" });
696 
697     Iterator it = pesquisa.iterator();
698     while (it.hasNext()) {
699       LocalItemLit localAux = (LocalItemLit) it.next();
700 
701       // verificações se foi marcado classes de acesso como filtro da pesquisa
702       boolean ignorar = false;
703       List listVerificacoes = new ArrayList();
704 
705       if (listFiltro.size() > 0) {
706         if (localAux.getLocAtributoLocas() != null && localAux.getLocAtributoLocas().size() > 0) {
707 
708           Iterator itAtr = localAux.getLocAtributoLocas().iterator();
709           LocAtributoLoca locAtrAux;
710           while (itAtr.hasNext()) {
711             locAtrAux = (LocAtributoLoca) itAtr.next();
712             listVerificacoes.add(locAtrAux);
713           }
714 
715           Iterator itClassesTela = listFiltro.iterator();
716           List listIgnorar = new ArrayList();
717           String ignorarItem = "";
718           LocAtributoLoca locaisTela;
719 
720           while (itClassesTela.hasNext()) {
721             locaisTela = (LocAtributoLoca) itClassesTela.next();
722             Iterator itVerificacoes = listVerificacoes.iterator();
723             ignorarItem = "SIM";
724             LocAtributoLoca atributos;
725             while (itVerificacoes.hasNext()) {
726               atributos = (LocAtributoLoca) itVerificacoes.next();
727               SisGrupoAtributoSga tipo = (SisGrupoAtributoSga) locaisTela.getSisAtributoSatb().getSisGrupoAtributoSga();
728               if (SisTipoExibicGrupoDao.TEXT.equals(tipo.getSisTipoExibicGrupoSteg().getCodSteg().toString())) {
729                 if (atributos.getInformacao() != null && atributos.getInformacao().length() > 0) {
730                   if (atributos.getInformacao().indexOf(atributos.getInformacao()) > -1) {
731                     ignorarItem = "NAO";
732                     break;
733                   }
734                 }
735               }
736               else {
737                 if (atributos.getSisAtributoSatb().getCodSatb().longValue() == locaisTela.getSisAtributoSatb().getCodSatb().longValue()) {
738                   ignorarItem = "NAO";
739                   break;
740                 }
741               }
742             }
743 
744             listIgnorar.add(ignorarItem);
745           }
746 
747           if (listIgnorar.contains("SIM")) {
748             ignorar = true;
749           }
750           else {
751             ignorar = false;
752           }
753         }
754         else {
755           ignorar = true;
756         }
757       }
758       if (ignorar) {
759         it.remove();
760       }
761     }
762 
763     return pesquisa;
764   }
765 
766   /**
767    * @param codLocais
768    * @return List
769    * @throws Exception
770    */
771   public List pesquisarCodLocais(String codLocais) throws Exception {
772     Query query = this.getSession().createQuery("select i from LocalItemLit i where i.codLit IN (" + codLocais + ")");
773     return query.list();
774   }
775 }