View Javadoc

1   /*
2    * Created on 18/09/2004
3    */
4   package ecar.dao;
5   
6   import java.util.ArrayList;
7   import java.util.Enumeration;
8   import java.util.HashSet;
9   import java.util.Iterator;
10  import java.util.List;
11  import java.util.Set;
12  
13  import javax.servlet.http.HttpServletRequest;
14  
15  import org.hibernate.HibernateException;
16  import org.hibernate.Transaction;
17  
18  import comum.database.Dao;
19  import comum.util.Data;
20  import comum.util.Pagina;
21  
22  import ecar.exception.ECARException;
23  import ecar.pojo.EnderecoEnd;
24  import ecar.pojo.EntidadeAtributoEnta;
25  import ecar.pojo.EntidadeEnt;
26  import ecar.pojo.LocalItemLit;
27  import ecar.pojo.PaiFilho;
28  import ecar.pojo.SisAtributoSatb;
29  import ecar.pojo.SisGrupoAtributoSga;
30  import ecar.pojo.TelefoneTel;
31  import ecar.pojo.TipoEnderecoTend;
32  import ecar.pojo.Uf;
33  
34  /**
35   * @author evandro
36   */
37  public class EntidadeDao extends Dao {
38  
39    /**
40     * Construtor. Chama o Session factory do Hibernate
41     */
42    public EntidadeDao(HttpServletRequest request) {
43      super();
44      this.request = request;
45    }
46  
47    /**
48     * @param request
49     * @param entidade
50     * @param paramStr
51     * @throws ECARException
52     */
53    public void setEntidade(HttpServletRequest request, EntidadeEnt entidade, boolean paramStr) throws ECARException {
54      if (paramStr) {
55        entidade.setCpfCnpjEnt(Pagina.getParamStr(request, "cpfCnpjEnt"));
56        entidade.setEmailEnt(Pagina.getParamStr(request, "emailEnt"));
57        entidade.setIndAtivoEnt(Pagina.getParamStr(request, "indAtivoEnt"));
58        entidade.setIndOrgaoEnt(Pagina.getParamStr(request, "indOrgaoEnt"));
59        entidade.setNomeEnt(Pagina.getParamStr(request, "nomeEnt"));
60        entidade.setSiglaEnt(Pagina.getParamStr(request, "siglaEnt"));
61      }
62      else {
63        entidade.setCpfCnpjEnt(Pagina.getParam(request, "cpfCnpjEnt"));
64        entidade.setEmailEnt(Pagina.getParam(request, "emailEnt"));
65        entidade.setIndAtivoEnt(Pagina.getParam(request, "indAtivoEnt"));
66        entidade.setIndOrgaoEnt(Pagina.getParam(request, "indOrgaoEnt"));
67        entidade.setNomeEnt(Pagina.getParam(request, "nomeEnt"));
68        entidade.setSiglaEnt(Pagina.getParam(request, "siglaEnt"));
69      }
70  
71      setTelefonesEntidade(request, entidade);
72      setEnderecosEntidade(request, entidade);
73      setLocaisEntidade(request, entidade);
74      setAtributosEntidade(request, entidade);
75    }
76  
77    /**
78     * @author n/c
79     * @param request
80     * @param entidade
81     * @throws ECARException
82     */
83    public void setAtributosEntidade(HttpServletRequest request, EntidadeEnt entidade) throws ECARException {
84      entidade.setEntidadeAtributoEntas(null);
85      List lAtributos;
86      lAtributos = new SisGrupoAtributoDao(request).getGruposAtributosCadastro("E");
87      Iterator it = lAtributos.iterator();
88      while (it.hasNext()) {
89        SisGrupoAtributoSga grupoAtributo = (SisGrupoAtributoSga) it.next();
90        if (!"".equals(Pagina.getParamStr(request, "a" + grupoAtributo.getCodSga().toString()))) {
91          EntidadeAtributoEnta entidadeAtributo = new EntidadeAtributoEnta();
92          entidadeAtributo.setEntidadeEnt(entidade);
93          /*
94           * Caso o tipo de campo seja texto considera-se que o Grupo de Atributos
95           * possuirá apenas 1 atributo que o representa.
96           */
97          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())) {
98            if (grupoAtributo.getSisAtributoSatbs() != null && grupoAtributo.getSisAtributoSatbs().size() > 0) {
99              entidadeAtributo.setInformacao(Pagina.getParamStr(request, "a" + grupoAtributo.getCodSga().toString()));
100             entidadeAtributo.setSisAtributoSatb((SisAtributoSatb) grupoAtributo.getSisAtributoSatbs().iterator().next());
101             entidadeAtributo.setDataInclusao(Data.getDataAtual());
102             if (entidade.getEntidadeAtributoEntas() == null)
103               entidade.setEntidadeAtributoEntas(new HashSet());
104             entidade.getEntidadeAtributoEntas().add(entidadeAtributo);
105           }
106         }
107         else {
108 
109           String[] atributos = request.getParameterValues("a" + grupoAtributo.getCodSga().toString());
110           for (int i = 0; i < atributos.length; i++) {
111             /*
112              * Tenho que criar novamente o usuário atributo senão ele não é
113              * adicionado no set no final deste laço
114              */
115             entidadeAtributo = new EntidadeAtributoEnta();
116             entidadeAtributo.setEntidadeEnt(entidade);
117             entidadeAtributo.setSisAtributoSatb((SisAtributoSatb) super.buscar(SisAtributoSatb.class, Long.valueOf(atributos[i])));
118             entidadeAtributo.setDataInclusao(Data.getDataAtual());
119             if (entidade.getEntidadeAtributoEntas() == null)
120               entidade.setEntidadeAtributoEntas(new HashSet());
121             entidade.getEntidadeAtributoEntas().add(entidadeAtributo);
122           }
123         }
124       }
125       /*
126        * Foi necessário alterar o nome dos campos dos elementos multitexto,
127        * adicionando "-codSatb" Assim, ficamos com o nome do campo no seguinte
128        * padrão: "a + codSteg + - + codSatb" (ex.: a12-38) Isto foi feito visto
129        * a diferença existente entre um grupo com suporte a 1 campo texto e
130        * este, que suporta vários campos texto.
131        */
132       else {
133         if (SisTipoExibicGrupoDao.MULTITEXTO.equals(grupoAtributo.getSisTipoExibicGrupoSteg().getCodSteg().toString())) {
134           Enumeration lAtrib = request.getParameterNames();
135           while (lAtrib.hasMoreElements()) {
136             String atrib = (String) lAtrib.nextElement();
137             if (atrib.lastIndexOf('-') > 0) {
138               String nomeAtrib = atrib.substring(0, atrib.lastIndexOf('-'));
139               String nomeCampo = atrib.substring(atrib.lastIndexOf('-') + 1);
140               if (nomeAtrib.equals("a" + grupoAtributo.getCodSga().toString()) && !"".equals(Pagina.getParamStr(request, atrib))) {
141                 EntidadeAtributoEnta entidadeAtributo = new EntidadeAtributoEnta();
142                 entidadeAtributo.setEntidadeEnt(entidade);
143                 entidadeAtributo.setInformacao(Pagina.getParamStr(request, atrib));
144                 entidadeAtributo.setSisAtributoSatb((SisAtributoSatb) super.buscar(SisAtributoSatb.class, Long.valueOf(nomeCampo)));
145                 entidadeAtributo.setDataInclusao(Data.getDataAtual());
146                 if (entidade.getEntidadeAtributoEntas() == null)
147                   entidade.setEntidadeAtributoEntas(new HashSet());
148                 entidade.getEntidadeAtributoEntas().add(entidadeAtributo);
149               }
150             }
151           }
152         }
153       }
154     }
155   }
156 
157   /**
158    * @author n/c
159    * @param request
160    * @param entidade
161    * @throws ECARException
162    */
163   public void setLocaisEntidade(HttpServletRequest request, EntidadeEnt entidade) throws ECARException {
164     int numLocais = Integer.parseInt(request.getParameter("contLocal"));
165     for (int i = 1; i <= numLocais; i++) {
166       if ("S".equals(Pagina.getParamStr(request, "adicionaLocal" + i))) {
167         LocalItemLit local = new LocalItemLit();
168         local = (LocalItemLit) super.buscar(LocalItemLit.class, Long.valueOf(Pagina.getParamStr(request, "codLit" + i)));
169         if (entidade.getLocalEntidadeLents() == null)
170           entidade.setLocalEntidadeLents(new HashSet());
171         (entidade.getLocalEntidadeLents()).add(local);
172       }
173     }
174   }
175 
176   /**
177    * @author n/c
178    * @param request
179    * @param entidade
180    * @throws ECARException
181    */
182   public void setTelefonesEntidade(HttpServletRequest request, EntidadeEnt entidade) throws ECARException {
183     int numTelefones = Integer.parseInt(request.getParameter("contTelefones"));
184     for (int i = 1; i <= numTelefones; i++) {
185       if ("S".equals(Pagina.getParamStr(request, "adicionaTelefone" + i))) {
186         TelefoneTel telefone = new TelefoneTel();
187         telefone.setEntidadeEnt(entidade);
188         telefone.setDddTel(Pagina.getParamStr(request, "dddTel" + i));
189         telefone.setTelefoneTel(Pagina.getParamStr(request, "telefoneTel" + i));
190         telefone.setIdTel(Pagina.getParamStr(request, "idTel" + i));
191         if (entidade.getTelefoneTels() == null)
192           entidade.setTelefoneTels(new HashSet());
193         (entidade.getTelefoneTels()).add(telefone);
194       }
195     }
196   }
197 
198   /**
199    * @author n/c
200    * @param request
201    * @param entidade
202    * @throws ECARException
203    */
204   public void setEnderecosEntidade(HttpServletRequest request, EntidadeEnt entidade) throws ECARException {
205     int numEnderecos = Integer.parseInt(request.getParameter("contEnderecos"));
206     EnderecoEnd endereco;
207     for (int i = 1; i <= numEnderecos; i++) {
208       if ("S".equals(Pagina.getParamStr(request, "adicionaEndereco" + i))) {
209         endereco = new EnderecoEnd();
210         endereco.setEntidadeEnt(entidade);
211         endereco.setBairroEnd(Pagina.getParamStr(request, "bairroEnd" + i));
212         endereco.setCepEnd(Integer.valueOf(Pagina.getParamInt(request, "cepEnd" + i)));
213         endereco.setCidadeEnd(Pagina.getParamStr(request, "cidadeEnd" + i));
214         endereco.setComplementoEnd(Pagina.getParamStr(request, "complementoEnd" + i));
215         endereco.setEnderecoEnd(Pagina.getParamStr(request, "enderecoEnd" + i));
216         endereco.setIdEnd(Pagina.getParamStr(request, "idEnd" + i));
217 
218         if (!"".equals(Pagina.getParamStr(request, "tipoEnderecoTpend" + i)))
219           endereco.setTipoEnderecoTend((TipoEnderecoTend) super.buscar(TipoEnderecoTend.class, Long.valueOf(Pagina.getParamStr(request, "tipoEnderecoTpend" + i))));
220         if (!"".equals(Pagina.getParamStr(request, "uf" + i)))
221           endereco.setUf((Uf) super.buscar(Uf.class, Pagina.getParamStr(request, "uf" + i)));
222         if (entidade.getEnderecoEnds() == null)
223           entidade.setEnderecoEnds(new HashSet());
224         entidade.getEnderecoEnds().add(endereco);
225       }
226     }
227 
228   }
229 
230   /**
231    * @author n/c
232    * @param entidade
233    * @throws ECARException
234    */
235   public void excluir(EntidadeEnt entidade) throws ECARException {
236     try {
237       boolean excluir = true;
238       if (contar(entidade.getHierarquiaEntidadeHentsByCodEnt()) > 0) {
239         excluir = false;
240         throw new ECARException("entidade.exclusao.erro.hierarquiaEntidadeHentsByCodEnt");
241       }
242       if (contar(entidade.getHierarquiaEntidadeHentsByCodEntPai()) > 0) {
243         excluir = false;
244         throw new ECARException("entidade.exclusao.erro.hierarquiaEntidadeHentsByCodEntPai");
245       }
246       if (contar(entidade.getRegDemandaRegds()) > 0) {
247         excluir = false;
248         throw new ECARException("entidade.exclusao.erro.regDemandaRegds");
249       }
250       if (excluir) {
251 
252         List objs = new ArrayList();
253         if (entidade.getEntidadeAtributoEntas() != null) {
254           Iterator itAtb = entidade.getEntidadeAtributoEntas().iterator();
255           while (itAtb.hasNext()) {
256             EntidadeAtributoEnta entAtrib = (EntidadeAtributoEnta) itAtb.next();
257             objs.add(entAtrib);
258           }
259         }
260         entidade.setEntidadeAtributoEntas(null);
261         objs.add(entidade);
262         super.excluir(objs);
263       }
264     } catch (ECARException e) {
265       this.logger.error(e);
266       throw e;
267     }
268   }
269 
270   /**
271    * Retorna um list com identificações de todos as entidades filhos de uma
272    * entidade
273    * @param entidade
274    * @return List de Long
275    */
276   public List getIdFilhos(EntidadeEnt entidade) {
277     List filhos = new ArrayList();
278     if (entidade.getHierarquiaEntidadeHentsByCodEntPai() != null) {
279       Iterator it = entidade.getHierarquiaEntidadeHentsByCodEntPai().iterator();
280       while (it.hasNext()) {
281         EntidadeEnt filhoEnt = (EntidadeEnt) it.next();
282         filhos.add(filhoEnt.getCodEnt());
283       }
284     }
285     return filhos;
286   }
287 
288   /**
289    * Retorna um list com identificações de todos as entidades pais de uma
290    * entidade
291    * @param entidade
292    * @return List de Long
293    */
294   public List getIdPais(EntidadeEnt entidade) {
295     List pais = new ArrayList();
296     if (entidade.getHierarquiaEntidadeHentsByCodEnt() != null) {
297       Iterator it = entidade.getHierarquiaEntidadeHentsByCodEnt().iterator();
298       while (it.hasNext()) {
299         EntidadeEnt paiEnt = (EntidadeEnt) it.next();
300         pais.add(paiEnt.getCodEnt());
301       }
302     }
303     return pais;
304   }
305 
306   /**
307    * @author n/c
308    * @param entidade
309    * @param request
310    * @throws ECARException
311    */
312   public void alterar(EntidadeEnt entidade, HttpServletRequest request) throws ECARException {
313 
314     Transaction tx = null;
315 
316     try {
317       List objetos = new ArrayList();
318       super.inicializarLogBean();
319       tx = session.beginTransaction();
320 
321       if (entidade.getTelefoneTels() != null) {
322         Iterator itTel = entidade.getTelefoneTels().iterator();
323         while (itTel.hasNext()) {
324           TelefoneTel telefone = (TelefoneTel) itTel.next();
325           session.delete(telefone);
326           objetos.add(telefone);
327         }
328       }
329       entidade.setTelefoneTels(null);
330 
331       if (entidade.getEnderecoEnds() != null) {
332         Iterator itEnd = entidade.getEnderecoEnds().iterator();
333         while (itEnd.hasNext()) {
334           EnderecoEnd endereco = (EnderecoEnd) itEnd.next();
335           session.delete(endereco);
336           objetos.add(endereco);
337         }
338       }
339       entidade.setEnderecoEnds(null);
340 
341       if (entidade.getEntidadeAtributoEntas() != null) {
342         Iterator itAtt = entidade.getEntidadeAtributoEntas().iterator();
343         while (itAtt.hasNext()) {
344           EntidadeAtributoEnta entidadeAtributo = (EntidadeAtributoEnta) itAtt.next();
345           session.delete(entidadeAtributo);
346           objetos.add(entidadeAtributo);
347         }
348       }
349       entidade.setEntidadeAtributoEntas(null);
350 
351       entidade.setLocalEntidadeLents(null);
352 
353       this.setEntidade(request, entidade, true);
354       List filhos = new ArrayList();
355       if (entidade.getEntidadeAtributoEntas() != null)
356         filhos.addAll(entidade.getEntidadeAtributoEntas());
357 
358       session.update(entidade);
359       objetos.add(entidade);
360 
361       Iterator it = filhos.iterator();
362 
363       while (it.hasNext()) {
364         PaiFilho object = (PaiFilho) it.next();
365         object.atribuirPKPai();
366         // salva os filhos
367         session.save(object);
368         objetos.add(object);
369       }
370 
371       tx.commit();
372 
373       if (super.logBean != null) {
374         super.logBean.setCodigoTransacao(Data.getHoraAtual(false));
375         super.logBean.setOperacao("INC_ALT_EXC");
376         Iterator itObj = objetos.iterator();
377 
378         while (itObj.hasNext()) {
379           super.logBean.setObj(itObj.next());
380           super.loggerAuditoria.info(logBean.toString());
381         }
382       }
383 
384     } catch (HibernateException e) {
385       if (tx != null)
386         try {
387           tx.rollback();
388         } catch (HibernateException r) {
389           this.logger.error(r);
390           throw new ECARException("erro.hibernateException");
391         }
392       this.logger.error(e);
393       throw new ECARException("erro.hibernateException");
394     } catch (ECARException e) {
395       if (tx != null)
396         try {
397           tx.rollback();
398         } catch (HibernateException r) {
399           this.logger.error(r);
400           throw new ECARException("erro.hibernateException");
401         }
402       this.logger.error(e);
403       throw e;
404     }
405   }
406 
407   /**
408    * @author n/c
409    * @param entidade
410    * @param grupo
411    * @return List
412    * @throws ECARException
413    */
414   public List getEntidadeAtributoByGrupo(EntidadeEnt entidade, SisGrupoAtributoSga grupo) throws ECARException {
415     List retorno = new ArrayList();
416     Set result = entidade.getEntidadeAtributoEntas();
417     if (result != null) {
418       if (result.size() > 0) {
419         Iterator it = result.iterator();
420         while (it.hasNext()) {
421           EntidadeAtributoEnta entidadeAtributo = (EntidadeAtributoEnta) it.next();
422           if (entidadeAtributo.getSisAtributoSatb().getSisGrupoAtributoSga().equals(grupo))
423             retorno.add(entidadeAtributo);
424         }
425 
426       }
427     }
428     return retorno;
429   }
430 
431   /**
432    * @author n/c
433    * @param entidade
434    * @throws ECARException
435    */
436   public void salvar(EntidadeEnt entidade) throws ECARException {
437     entidade.setDataInclusaoEnt(Data.getDataAtual());
438     List filhos = new ArrayList();
439     if (entidade.getEntidadeAtributoEntas() != null)
440       filhos.addAll(entidade.getEntidadeAtributoEntas());
441     super.salvar(entidade, filhos);
442   }
443 
444   /**
445    * Coloca em uma Lista todos os Atributos da Entidade
446    * @author n/c
447    * @param entidade
448    * @return
449    * @throws ECARException
450    */
451   public List pesquisar(EntidadeEnt entidade) throws ECARException {
452 
453     // Coloca em uma Lista todos os Atributos da Entidade
454     List listFiltro = new ArrayList();
455     if (entidade.getEntidadeAtributoEntas() != null && entidade.getEntidadeAtributoEntas().size() > 0) {
456       Iterator itAtr = entidade.getEntidadeAtributoEntas().iterator();
457       EntidadeAtributoEnta entAtr;
458       while (itAtr.hasNext()) {
459         entAtr = (EntidadeAtributoEnta) itAtr.next();
460         listFiltro.add(entAtr);
461       }
462     }
463 
464     List pesquisa = super.pesquisar(entidade, new String[] { "nomeEnt", "asc" });
465     Iterator it = pesquisa.iterator();
466 
467     while (it.hasNext()) {
468       EntidadeEnt ent = (EntidadeEnt) it.next();
469       boolean ignorar = false;
470       List listVerificacoes = new ArrayList();
471       if (listFiltro.size() > 0) {
472         if (ent.getEntidadeAtributoEntas() != null && ent.getEntidadeAtributoEntas().size() > 0) {
473 
474           Iterator itAtr = ent.getEntidadeAtributoEntas().iterator();
475           EntidadeAtributoEnta entAtr;
476           while (itAtr.hasNext()) {
477             entAtr = (EntidadeAtributoEnta) itAtr.next();
478             listVerificacoes.add(entAtr);
479           }
480 
481           Iterator itClassesTela = listFiltro.iterator();
482           List listIgnorar = new ArrayList();
483           String ignorarItem = "";
484           EntidadeAtributoEnta entidadesTela;
485 
486           while (itClassesTela.hasNext()) {
487             entidadesTela = (EntidadeAtributoEnta) itClassesTela.next();
488             Iterator itVerificacoes = listVerificacoes.iterator();
489             ignorarItem = "SIM";
490             EntidadeAtributoEnta atributosEntidade;
491             while (itVerificacoes.hasNext()) {
492               atributosEntidade = (EntidadeAtributoEnta) itVerificacoes.next();
493               SisGrupoAtributoSga tipo = (SisGrupoAtributoSga) entidadesTela.getSisAtributoSatb().getSisGrupoAtributoSga();
494               if (SisTipoExibicGrupoDao.TEXT.equals(tipo.getSisTipoExibicGrupoSteg().getCodSteg().toString())) {
495                 if (atributosEntidade.getInformacao() != null && atributosEntidade.getInformacao().length() > 0) {
496                   if (atributosEntidade.getInformacao().indexOf(atributosEntidade.getInformacao()) > -1) {
497                     ignorarItem = "NAO";
498                     break;
499                   }
500                 }
501               }
502               else {
503                 if (atributosEntidade.getSisAtributoSatb().getCodSatb().longValue() == entidadesTela.getSisAtributoSatb().getCodSatb().longValue()) {
504                   ignorarItem = "NAO";
505                   break;
506                 }
507               }
508             }
509 
510             listIgnorar.add(ignorarItem);
511           }
512 
513           if (listIgnorar.contains("SIM")) {
514             ignorar = true;
515           }
516           else {
517             ignorar = false;
518           }
519         }
520         else {
521           ignorar = true;
522         }
523       }
524       if (ignorar) {
525         it.remove();
526       }
527     }
528 
529     /*
530      * Collections.sort(pesquisa, new Comparator() { public int compare(Object
531      * o1, Object o2) { return ( (EntidadeEnt)o1 ).getDes().compareToIgnoreCase(
532      * ( (UsuarioUsu)o2 ).getNomeUsuSent() ); } } );
533      */
534     return pesquisa;
535   }
536 
537 }