1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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
53
54 public class LocalItemDao extends Dao {
55
56
57
58
59 public LocalItemDao(HttpServletRequest request) {
60 super();
61 this.request = request;
62 }
63
64
65
66
67 public LocalItemDao() {
68 super();
69 }
70
71
72
73
74
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
90
91
92
93 public List getAscendentes(LocalItemLit localItem) {
94 List grupos = new ArrayList();
95 if (localItem.getLocalItemHierarquiaLithsByCodLit() != null) {
96
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
111
112
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
151
152
153
154
155 public List getLocalItemByLocalItem(LocalItemLit localItemPai) throws ECARException {
156 List listaFilhos = new ArrayList();
157
158 try {
159
160 Collection itens;
161 LocalGrupoLgp localGrupoFilho;
162
163
164 LocalGrupoLgp localGrupoPai = localItemPai.getLocalGrupoLgp();
165
166
167
168
169
170 Collection filhos = this.getDescendentes(localGrupoPai);
171
172
173
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
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
236
237
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
258
259
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
274
275
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
284
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
307 chave = chavesIt.next();
308
309
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
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
335
336 break;
337 }
338 }
339 }
340 else {
341 localTemp = locaisTemp.get(0);
342 }
343
344 this.setAtributos(request, localTemp);
345
346
347
348
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
363 session.saveOrUpdate(local);
364
365
366
367
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
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
408 session.update(localTemp);
409 }
410 else {
411 this.setAtributos(request, local);
412
413
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
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
518
519
520
521
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
539
540
541
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
555
556
557
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
576
577
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
599
600
601
602
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
616
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
634
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
648
649
650
651
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
680
681
682
683 public List pesquisar(LocalItemLit local) throws ECARException {
684
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
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
768
769
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 }