View Javadoc

1   /*
2    * Criado em 20/12/2004
3    */
4   package ecar.dao;
5   
6   import java.util.ArrayList;
7   import java.util.Collections;
8   import java.util.Comparator;
9   import java.util.HashSet;
10  import java.util.Iterator;
11  import java.util.List;
12  import java.util.Set;
13  
14  import javax.servlet.http.HttpServletRequest;
15  
16  import org.hibernate.HibernateException;
17  import org.hibernate.Query;
18  import org.hibernate.Transaction;
19  
20  import comum.database.Dao;
21  import comum.util.Data;
22  import comum.util.Pagina;
23  
24  import ecar.exception.ECARException;
25  import ecar.historico.HistoricoIettus;
26  import ecar.login.SegurancaECAR;
27  import ecar.permissao.ControlePermissao;
28  import ecar.pojo.ItemEstrutUsuarioIettus;
29  import ecar.pojo.ItemEstruturaIett;
30  import ecar.pojo.SisAtributoSatb;
31  import ecar.pojo.UsuarioUsu;
32  import ecar.util.Dominios;
33  
34  /**
35   * @author evandro
36   */
37  public class ItemEstrutUsuarioDao extends Dao {
38  
39    public static final short PERMISSAO_CONSULTA_ITEM = 1;
40    public static final short PERMISSAO_ALTERA_ITEM = 2;
41    public static final short PERMISSAO_EXCLUI_ITEM = 3;
42    public static final short PERMISSAO_ADICIONA_ITEM = 4;
43    public static final short PERMISSAO_LIBERAR_PLANEJAMENTO_ITEM = 5;
44    public static final short PERMISSAO_BLOQUEAR_PLANEJAMENTO_ITEM = 6;
45  
46    /**
47     * Construtor. Chama o Session factory do Hibernate
48     */
49    public ItemEstrutUsuarioDao(HttpServletRequest request) {
50      super();
51      this.request = request;
52    }
53  
54    /**
55     * Metodo utilizado para setar ItemEstrutura e também um Usuário (UsuarioUsu)
56     * ou Grupo (SisAtributoSatb), são setados somente na inclusão, depois não são
57     * mais alterados.
58     * @param request
59     * @param itemEstrutUsuario
60     * @throws ECARException
61     */
62    public void setItemUsuarioGrupo(HttpServletRequest request, ItemEstrutUsuarioIettus itemEstrutUsuario) throws ECARException {
63      try {
64        itemEstrutUsuario.setItemEstruturaIett((ItemEstruturaIett) buscar(ItemEstruturaIett.class, Long.valueOf(Pagina.getParamStr(request, "codIett"))));
65        itemEstrutUsuario.setItemEstruturaIettOrigem((ItemEstruturaIett) buscar(ItemEstruturaIett.class, Long.valueOf(Pagina.getParamStr(request, "codIett"))));
66  
67        /* o código é passado iniciando com a letra "U" indicando usuário */
68        if (Pagina.getParamStr(request, "codUsu").startsWith(ControlePermissao.PERMISSAO_USUARIO)) {
69          String cod = Pagina.getParamStr(request, "codUsu").substring(1);
70          UsuarioUsu usuario = (UsuarioUsu) buscar(UsuarioUsu.class, Long.valueOf(cod));
71          itemEstrutUsuario.setUsuarioUsu(usuario);
72          itemEstrutUsuario.setCodTpPermIettus(ControlePermissao.PERMISSAO_USUARIO);
73        }
74        /* o código é passado iniciando com a letra "G" indicando grupo */
75        if (Pagina.getParamStr(request, "codUsu").startsWith(ControlePermissao.PERMISSAO_GRUPO)) {
76          String cod = Pagina.getParamStr(request, "codUsu").substring(1);
77          SisAtributoSatb sisAtributo = (SisAtributoSatb) buscar(SisAtributoSatb.class, Long.valueOf(cod));
78          itemEstrutUsuario.setSisAtributoSatb(sisAtributo);
79          itemEstrutUsuario.setCodTpPermIettus(ControlePermissao.PERMISSAO_GRUPO);
80        }
81      } catch (NumberFormatException e) {
82        this.logger.error(e);
83        throw new ECARException(e);
84      }
85    }
86  
87    /**
88     * Metodo para alterar os indicativos de Leitura, Edição, Exclusão e Manter
89     * para próximo nível. Utilizado na inclusão e alteração.
90     * @param request
91     * @param itemEstrutUsuario
92     * @throws ECARException
93     */
94    public void setItemEstrutUsuario(HttpServletRequest request, ItemEstrutUsuarioIettus itemEstrutUsuario) {
95      itemEstrutUsuario.setIndLeituraIettus(ControlePermissao.SIM.equals(Pagina.getParamStr(request, "indLeituraIettus")) ? ControlePermissao.SIM : ControlePermissao.NAO);
96      itemEstrutUsuario.setIndEdicaoIettus(ControlePermissao.SIM.equals(Pagina.getParamStr(request, "indEdicaoIettus")) ? ControlePermissao.SIM : ControlePermissao.NAO);
97      itemEstrutUsuario.setIndExcluirIettus(ControlePermissao.SIM.equals(Pagina.getParamStr(request, "indExcluirIettus")) ? ControlePermissao.SIM : ControlePermissao.NAO);
98      itemEstrutUsuario.setIndProxNivelIettus(ControlePermissao.SIM.equals(Pagina.getParamStr(request, "indProxNivelIettus")) ? ControlePermissao.SIM : ControlePermissao.NAO);
99      itemEstrutUsuario.setIndLeituraParecerIettus(ControlePermissao.SIM.equals(Pagina.getParamStr(request, "indLeituraParecerIettus")) ? ControlePermissao.SIM : ControlePermissao.NAO);
100   }
101 
102   /**
103    * Ordena uma lista de objetos ItemEstrutUsuarioIettus, dependendo se tem
104    * Usuario ou Grupo cadastrado.
105    * @param lista
106    * @return
107    */
108   public List ordenaLista(List lista) throws ECARException {
109     try {
110       Collections.sort(lista, new Comparator() {
111         public int compare(Object o1, Object o2) {
112           if (((ItemEstrutUsuarioIettus) o1).getUsuarioUsu() != null && ((ItemEstrutUsuarioIettus) o2).getUsuarioUsu() != null)
113             return ((ItemEstrutUsuarioIettus) o1).getUsuarioUsu().getNomeUsuSent().compareToIgnoreCase(((ItemEstrutUsuarioIettus) o2).getUsuarioUsu().getNomeUsuSent());
114           else if (((ItemEstrutUsuarioIettus) o1).getSisAtributoSatb() != null && ((ItemEstrutUsuarioIettus) o2).getSisAtributoSatb() != null)
115             return ((ItemEstrutUsuarioIettus) o1).getSisAtributoSatb().getDescricaoSatb().compareToIgnoreCase(((ItemEstrutUsuarioIettus) o2).getSisAtributoSatb().getDescricaoSatb());
116           else if (((ItemEstrutUsuarioIettus) o1).getUsuarioUsu() != null && ((ItemEstrutUsuarioIettus) o2).getSisAtributoSatb() != null)
117             return ((ItemEstrutUsuarioIettus) o1).getUsuarioUsu().getNomeUsuSent().compareToIgnoreCase(((ItemEstrutUsuarioIettus) o2).getSisAtributoSatb().getDescricaoSatb());
118           else {
119             if (((ItemEstrutUsuarioIettus) o1).getSisAtributoSatb() != null && ((ItemEstrutUsuarioIettus) o2).getUsuarioUsu() != null)
120               return ((ItemEstrutUsuarioIettus) o1).getSisAtributoSatb().getDescricaoSatb().compareToIgnoreCase(((ItemEstrutUsuarioIettus) o2).getUsuarioUsu().getNomeUsuSent());
121             else
122               return 0;
123           }
124         }
125       });
126 
127       return lista;
128     } catch (Exception e) {
129       logger.error(e);
130       throw new ECARException(e);
131     }
132   }
133 
134   /**
135    * Filtra um set de ItemEstrutUsuarioIettus onde indProxNivelIettus='S'
136    * @param setIettus
137    * @return Set
138    * @throws HibernateException
139    */
140   public Set getHerdaPermissao(Set setIettus) throws ECARException {
141     try {
142       Set heranca = new HashSet();
143       heranca.addAll(session.createFilter(setIettus, " where this.indProxNivelIettus = '" + ControlePermissao.SIM + "'").list());
144       return heranca;
145     } catch (HibernateException e) {
146       this.logger.error(e);
147       throw new ECARException(e);
148     }
149   }
150 
151   /**
152    * Inclui um registro de ItemEstrutUsuarioIettus e propaga a permissão para os
153    * próximos níveis
154    * @param itemEstrutUsuarioIettus
155    * @throws ECARException
156    */
157   public void salvar(ItemEstrutUsuarioIettus itemEstrutUsuarioIettus, UsuarioUsu usuario) throws ECARException {
158     Transaction tx = null;
159 
160     try {
161       ArrayList objetos = new ArrayList();
162 
163       super.inicializarLogBean();
164 
165       tx = session.beginTransaction();
166 
167       ControlePermissao controlePermissao = new ControlePermissao();
168 
169       if (!controlePermissao.verificarInclusaoUsuarioGrupo(itemEstrutUsuarioIettus.getItemEstruturaIett(), itemEstrutUsuarioIettus)) {
170         throw new ECARException("itemEstrutura.usuario.validacao.inclusaoUsuarioGrupo");
171       }
172 
173       session.save(itemEstrutUsuarioIettus);
174       objetos.add(itemEstrutUsuarioIettus);
175 
176       //
177       // controlar as permissoes
178       //
179       controlePermissao.propagarPermissoesItensFilhos(itemEstrutUsuarioIettus, session);
180 
181       tx.commit();
182 
183       if (super.logBean != null) {
184         super.logBean.setCodigoTransacao(Data.getHoraAtual(false));
185         super.logBean.setOperacao("INC");
186         Iterator itObj = objetos.iterator();
187 
188         while (itObj.hasNext()) {
189           super.logBean.setObj(itObj.next());
190           super.loggerAuditoria.info(logBean.toString());
191         }
192       }
193     } catch (ECARException e) {
194       if (tx != null)
195         try {
196           tx.rollback();
197         } catch (HibernateException r) {
198           this.logger.error(r);
199           throw new ECARException("erro.hibernateException");
200         }
201       this.logger.error(e);
202       throw e;
203     } catch (HibernateException e) {
204       if (tx != null)
205         try {
206           tx.rollback();
207         } catch (HibernateException r) {
208           this.logger.error(r);
209           throw new ECARException("erro.hibernateException");
210         }
211       this.logger.error(e);
212       throw new ECARException("erro.hibernateException");
213     }
214   }
215 
216   /**
217    * Altera um registro de ItemEstrutUsuarioIettus e propaga a permissão para os
218    * próximos níveis
219    * @param itemEstrutUsuarioIettusNovo
220    * @param itemEstrutUsuarioIettusAnterior
221    * @throws ECARException
222    */
223   public void alterar(ItemEstrutUsuarioIettus novo, ItemEstrutUsuarioIettus old, String indProxNivelIettusAnterior) throws ECARException {
224 
225     Transaction tx = null;
226 
227     try {
228       ArrayList objetos = new ArrayList();
229 
230       super.inicializarLogBean();
231 
232       tx = session.beginTransaction();
233 
234       ControlePermissao controlePermissao = new ControlePermissao();
235 
236       if (!controlePermissao.verificarInclusaoUsuarioGrupo(novo.getItemEstruturaIett(), novo)) {
237         throw new ECARException("itemEstrutura.usuario.validacao.inclusaoUsuarioGrupo");
238       }
239 
240       //
241       // controlar as permissoes
242       //
243 
244       /******** Historico *********/
245 
246       HistoricoIettus historico = new HistoricoIettus(old, HistoricoIettus.alterarPermissoes, session, new ConfiguracaoDao(request), request);
247       historico.gerarHistorico();
248 
249       /******** Historico *********/
250 
251       controlePermissao.atualizarPermissoesItensFilhos(novo, indProxNivelIettusAnterior, session, request, historico);
252 
253       session.update(novo);
254       objetos.add(novo);
255 
256       // Fazer a mesma verificação da inclusão para alteracao...
257 
258       tx.commit();
259 
260       if (super.logBean != null) {
261         super.logBean.setCodigoTransacao(Data.getHoraAtual(false));
262         super.logBean.setOperacao("ALT");
263         Iterator itObj = objetos.iterator();
264 
265         while (itObj.hasNext()) {
266           super.logBean.setObj(itObj.next());
267           super.loggerAuditoria.info(logBean.toString());
268         }
269       }
270     } catch (HibernateException e) {
271       if (tx != null)
272         try {
273           tx.rollback();
274         } catch (HibernateException r) {
275           this.logger.error(r);
276           throw new ECARException("erro.hibernateException");
277         }
278       this.logger.error(e);
279       throw new ECARException("erro.hibernateException");
280     }
281   }
282 
283   /**
284    * Recebe um Array com Códigos de ItemEstrutUsuarioIettus para exclusão.
285    * @param codigosParaExcluir
286    * @throws ECARException
287    */
288   public void excluir(String[] codigosParaExcluir, UsuarioUsu usuarioLogado) throws ECARException {
289 
290     Transaction tx = null;
291 
292     try {
293       ArrayList objetos = new ArrayList();
294 
295       super.inicializarLogBean();
296 
297       tx = session.beginTransaction();
298 
299       for (int i = 0; i < codigosParaExcluir.length; i++) {
300 
301         ItemEstrutUsuarioIettus old = (ItemEstrutUsuarioIettus) this.buscar(ItemEstrutUsuarioIettus.class, Long.valueOf(codigosParaExcluir[i]));
302 
303         // Mantis #2156
304         old.setUsuManutencao(usuarioLogado);
305 
306         //
307         // controlar as permissoes
308         //
309         new ControlePermissao().removerPermissoesItensFilhos(old, session, request);
310 
311         /******** Historico *********/
312         HistoricoIettus historico = new HistoricoIettus(old, HistoricoIettus.excluirPermissoes, session, new ConfiguracaoDao(request), request);
313         historico.gerarHistorico();
314         /******** Historico *********/
315 
316         session.delete(old);
317         objetos.add(old);
318       }
319 
320       tx.commit();
321 
322       if (super.logBean != null) {
323         super.logBean.setCodigoTransacao(Data.getHoraAtual(false));
324         super.logBean.setOperacao("EXC");
325         Iterator itObj = objetos.iterator();
326 
327         while (itObj.hasNext()) {
328           super.logBean.setObj(itObj.next());
329           super.loggerAuditoria.info(logBean.toString());
330         }
331       }
332     } catch (HibernateException e) {
333       if (tx != null)
334         try {
335           tx.rollback();
336         } catch (HibernateException r) {
337           this.logger.error(r);
338           throw new ECARException("erro.hibernateException");
339         }
340       this.logger.error(e);
341       throw new ECARException("erro.hibernateException");
342     }
343   }
344 
345   /**
346    * Obter os acompanhamentos (AcompReferenciaAref) que sejam de um tipo de
347    * acompanhamento
348    * @param codIettOrigem Long
349    * @return List de ItemEstrutUsuarioIettus
350    * @throws HibernateException
351    * @throws ECARException
352    */
353   public List getItemEstrutUsuarioItemOrigemAndEmitePosicaoAndInfAndamento(Long codIett) throws ECARException {
354     try {
355       StringBuilder str = new StringBuilder();
356       str.append("select iettus from ItemEstrutUsuarioIettus iettus");
357       str.append(" where (iettus.indEmitePosIettus = :indEmitePosIettus");
358       str.append(" or iettus.indInfAndamentoIettus = :indInfAndamentoIettus)");
359       str.append(" and iettus.itemEstruturaIett.codIett = :codIett");
360       str.append(" and iettus.itemEstruturaIett.indAtivoIett = :indAtivo");
361 
362       Query query = this.getSession().createQuery(str.toString());
363       query.setLong("codIett", codIett.longValue());
364       query.setString("indEmitePosIettus", "S");
365       query.setString("indInfAndamentoIettus", "S");
366       query.setString("indAtivo", "S");
367 
368       return query.list();
369 
370     } catch (HibernateException e) {
371       this.logger.error(e);
372       throw new ECARException(e);
373     }
374   }
375 
376   /**
377    * @author Robson
378    * @param ItemEstruturaIett iett
379    * @param UsuarioUsu usuario
380    * @param SegurancaECAR seguranca
381    * @param short acao
382    * @return boolean
383    * @throws ECARException
384    * @since 18/12/2007 TODO: nao terminado, falta incluir as acoes verifica o
385    *        acesso a um usuario a realizar uma acao em um itemEstrutura
386    */
387   public boolean PermissaoAcessoUsuarioItemEstrutura(ItemEstruturaIett iett, SegurancaECAR seguranca, short acao) throws ECARException {
388     try {
389       StringBuilder str = new StringBuilder("from ItemEstrutUsuarioIettus iettus " + "where iettus.itemEstruturaIett = :iett " + "and iettus.indEmitePosIettus = :emitepos " + "and iettus.itemEstruturaIett.indAtivoIett = :ativo " + "and (iettus.usuarioUsu.codUsu = :codusu ");
390 
391       Set gruposUsuario = seguranca.getGruposAcesso();
392       if (gruposUsuario != null && gruposUsuario.size() > 0)
393         str.append(" or iettus.sisAtributoSatb in (:grupos)");
394       str.append(" ) ");
395 
396       if (acao == PERMISSAO_CONSULTA_ITEM)
397         str.append("and iettus.indLeituraIettus = :leitura ");
398 
399       else if (acao == PERMISSAO_ALTERA_ITEM) {
400         str.append("and iettus.indEdicaoIettus = :edita ");
401         str.append("and iettus.itemEstruturaIett.indBloqPlanejamentoIett = :bloqueia ");
402       }
403       else if (acao == PERMISSAO_EXCLUI_ITEM)
404         str.append("and iettus.indExcluirIettus = :exclui ");
405 
406       else if (acao == PERMISSAO_LIBERAR_PLANEJAMENTO_ITEM) {
407         str.append("and (iettus.indDesblPlanIettus = :desbloqueia " + "and iettus.itemEstruturaIett.indBloqPlanejamentoIett = :bloqueiaitem) ");
408       }
409       else if (acao == PERMISSAO_BLOQUEAR_PLANEJAMENTO_ITEM) {
410         str.append("and iettus.indBloqPlanIettus = :bloqueia " + "and(iettus.itemEstruturaIett.indBloqPlanejamentoIett is null " + "or iettus.itemEstruturaIett.indBloqPlanejamentoIett = :bloqueiaitem) ");
411       }
412       Query q = this.getSession().createQuery(str.toString());
413 
414       q.setMaxResults(1);
415       q.setParameter("iett", iett);
416       q.setString("emitepos", Dominios.SIM);
417       q.setString("ativo", Dominios.ATIVO);
418       q.setLong("codusu", seguranca.getCodUsu());
419       if (gruposUsuario != null && gruposUsuario.size() > 0)
420         q.setParameterList("grupos", gruposUsuario);
421 
422       if (acao == PERMISSAO_CONSULTA_ITEM)
423         q.setString("leitura", Dominios.SIM);
424 
425       else if (acao == PERMISSAO_ALTERA_ITEM) {
426         q.setString("edita", Dominios.SIM);
427         q.setString("bloqueia", Dominios.NAO);
428       }
429       else if (acao == PERMISSAO_EXCLUI_ITEM)
430         q.setString("exclui", Dominios.SIM);
431 
432       else if (acao == PERMISSAO_LIBERAR_PLANEJAMENTO_ITEM) {
433         q.setString("desbloqueia", Dominios.SIM);
434         q.setString("bloqueiaitem", Dominios.NAO);
435       }
436       else if (acao == PERMISSAO_BLOQUEAR_PLANEJAMENTO_ITEM) {
437         q.setString("bloqueia", Dominios.SIM);
438         q.setString("bloqueiaitem", Dominios.NAO);
439       }
440 
441       return !q.list().isEmpty();
442 
443     } catch (HibernateException e) {
444       this.logger.error(e);
445       throw new ECARException(e);
446     }
447   }
448 }