/*
* Criado em 20/12/2004
*
*/
package ecar.dao;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import javax.servlet.http.HttpServletRequest;
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Transaction;
import comum.database.Dao;
import comum.util.Data;
import comum.util.Pagina;
import ecar.exception.ECARException;
import ecar.historico.HistoricoIettus;
import ecar.login.SegurancaECAR;
import ecar.permissao.ControlePermissao;
import ecar.pojo.ItemEstrutUsuarioIettus;
import ecar.pojo.ItemEstruturaIett;
import ecar.pojo.SisAtributoSatb;
import ecar.pojo.UsuarioUsu;
import ecar.util.Dominios;
/**
* @author evandro
*
*/
public class ItemEstrutUsuarioDao extends Dao{
/**
*
*/
public static final short PERMISSAO_CONSULTA_ITEM = 1;
/**
*
*/
public static final short PERMISSAO_ALTERA_ITEM = 2;
/**
*
*/
public static final short PERMISSAO_EXCLUI_ITEM = 3;
/**
*
*/
public static final short PERMISSAO_ADICIONA_ITEM = 4;
/**
*
*/
public static final short PERMISSAO_LIBERAR_PLANEJAMENTO_ITEM = 5;
/**
*
*/
public static final short PERMISSAO_BLOQUEAR_PLANEJAMENTO_ITEM = 6;
/**
* Construtor. Chama o Session factory do Hibernate
*
* @param request
*/
public ItemEstrutUsuarioDao(HttpServletRequest request) {
super();
this.request = request;
}
/**
* Metodo utilizado para setar ItemEstrutura e tamb�m um Usu�rio (UsuarioUsu) ou
* Grupo (SisAtributoSatb), s�o setados somente na inclus�o, depois n�o s�o
* mais alterados.
* @param request
* @param itemEstrutUsuario
* @throws ECARException
*/
public void setItemUsuarioGrupo(HttpServletRequest request, ItemEstrutUsuarioIettus itemEstrutUsuario) throws ECARException{
try {
itemEstrutUsuario.setItemEstruturaIett( (ItemEstruturaIett) buscar(ItemEstruturaIett.class, Long.valueOf(Pagina.getParamStr(request, "codIett"))));
itemEstrutUsuario.setItemEstruturaIettOrigem( (ItemEstruturaIett) buscar(ItemEstruturaIett.class, Long.valueOf(Pagina.getParamStr(request, "codIett"))));
/* o c�digo � passado iniciando com a letra "U" indicando usu�rio */
if(Pagina.getParamStr(request, "codUsu").startsWith(ControlePermissao.PERMISSAO_USUARIO)){
String cod = Pagina.getParamStr(request, "codUsu").substring(1);
UsuarioUsu usuario = (UsuarioUsu) buscar(UsuarioUsu.class, Long.valueOf(cod));
itemEstrutUsuario.setUsuarioUsu(usuario);
itemEstrutUsuario.setCodTpPermIettus(ControlePermissao.PERMISSAO_USUARIO);
}
/* o c�digo � passado iniciando com a letra "G" indicando grupo */
if(Pagina.getParamStr(request, "codUsu").startsWith(ControlePermissao.PERMISSAO_GRUPO)){
String cod = Pagina.getParamStr(request, "codUsu").substring(1);
SisAtributoSatb sisAtributo = (SisAtributoSatb) buscar(SisAtributoSatb.class, Long.valueOf(cod));
itemEstrutUsuario.setSisAtributoSatb(sisAtributo);
itemEstrutUsuario.setCodTpPermIettus(ControlePermissao.PERMISSAO_GRUPO);
}
}catch(NumberFormatException e){
this.logger.error(e);
throw new ECARException(e);
}
}
/**
* Metodo para alterar os indicativos de Leitura, Edi��o, Exclus�o e Manter
* para pr�ximo n�vel. Utilizado na inclus�o e altera��o.
* @param request
* @param itemEstrutUsuario
*/
public void setItemEstrutUsuario(HttpServletRequest request, ItemEstrutUsuarioIettus itemEstrutUsuario){
itemEstrutUsuario.setIndLeituraIettus(ControlePermissao.SIM.equals(Pagina.getParamStr(request, "indLeituraIettus")) ? ControlePermissao.SIM : ControlePermissao.NAO);
itemEstrutUsuario.setIndEdicaoIettus(ControlePermissao.SIM.equals(Pagina.getParamStr(request, "indEdicaoIettus")) ? ControlePermissao.SIM : ControlePermissao.NAO);
itemEstrutUsuario.setIndExcluirIettus(ControlePermissao.SIM.equals(Pagina.getParamStr(request, "indExcluirIettus")) ? ControlePermissao.SIM : ControlePermissao.NAO);
itemEstrutUsuario.setIndProxNivelIettus(ControlePermissao.SIM.equals(Pagina.getParamStr(request, "indProxNivelIettus")) ? ControlePermissao.SIM : ControlePermissao.NAO);
itemEstrutUsuario.setIndLeituraParecerIettus(ControlePermissao.SIM.equals(Pagina.getParamStr(request, "indLeituraParecerIettus"))? ControlePermissao.SIM : ControlePermissao.NAO);
}
/**
* Ordena uma lista de objetos ItemEstrutUsuarioIettus,
* dependendo se tem Usuario ou Grupo cadastrado.
* @param lista
* @return
* @throws ECARException
*/
public List ordenaLista (List lista) throws ECARException{
try{
Collections.sort(lista,
new Comparator() {
public int compare(Object o1, Object o2) {
if ( ( (ItemEstrutUsuarioIettus) o1).getUsuarioUsu() != null && ( (ItemEstrutUsuarioIettus) o2).getUsuarioUsu() != null)
return ( (ItemEstrutUsuarioIettus) o1 ).getUsuarioUsu().getNomeUsuSent().compareToIgnoreCase( ( (ItemEstrutUsuarioIettus) o2 ).getUsuarioUsu().getNomeUsuSent() );
else if ( ( (ItemEstrutUsuarioIettus) o1).getSisAtributoSatb() != null && ( (ItemEstrutUsuarioIettus) o2).getSisAtributoSatb() != null)
return ( (ItemEstrutUsuarioIettus) o1 ).getSisAtributoSatb().getDescricaoSatb().compareToIgnoreCase( ( (ItemEstrutUsuarioIettus) o2 ).getSisAtributoSatb().getDescricaoSatb() );
else if (( (ItemEstrutUsuarioIettus) o1).getUsuarioUsu() != null && ( (ItemEstrutUsuarioIettus) o2).getSisAtributoSatb() != null)
return ( (ItemEstrutUsuarioIettus) o1 ).getUsuarioUsu().getNomeUsuSent().compareToIgnoreCase( ( (ItemEstrutUsuarioIettus) o2 ).getSisAtributoSatb().getDescricaoSatb() );
else{
if(((ItemEstrutUsuarioIettus) o1 ).getSisAtributoSatb() != null && ((ItemEstrutUsuarioIettus) o2 ).getUsuarioUsu() != null)
return ( (ItemEstrutUsuarioIettus) o1 ).getSisAtributoSatb().getDescricaoSatb().compareToIgnoreCase( ( (ItemEstrutUsuarioIettus) o2 ).getUsuarioUsu().getNomeUsuSent() );
else
return 0;
}
}
} );
return lista;
}
catch (Exception e) {
logger.error(e);
throw new ECARException(e);
}
}
/**
* Filtra um set de ItemEstrutUsuarioIettus onde indProxNivelIettus='S'
* @param setIettus
* @return Set
* @throws ECARException
* @throws HibernateException
*/
public Set getHerdaPermissao(Set setIettus) throws ECARException{
try{
Set heranca = new HashSet();
heranca.addAll(session.createFilter(setIettus, " where this.indProxNivelIettus = '" + ControlePermissao.SIM +"'").list());
return heranca;
}catch(HibernateException e){
this.logger.error(e);
throw new ECARException(e);
}
}
/**
* Inclui um registro de ItemEstrutUsuarioIettus e propaga a permiss�o para os pr�ximos n�veis
*
* @param itemEstrutUsuarioIettus
* @param usuario
* @throws ECARException
*/
public void salvar(ItemEstrutUsuarioIettus itemEstrutUsuarioIettus, UsuarioUsu usuario) throws ECARException {
Transaction tx = null;
try{
ArrayList objetos = new ArrayList();
super.inicializarLogBean();
tx = session.beginTransaction();
ControlePermissao controlePermissao = new ControlePermissao();
if(!controlePermissao.verificarInclusaoUsuarioGrupo(itemEstrutUsuarioIettus.getItemEstruturaIett(), itemEstrutUsuarioIettus)) {
throw new ECARException("itemEstrutura.usuario.validacao.inclusaoUsuarioGrupo");
}
session.save(itemEstrutUsuarioIettus);
objetos.add(itemEstrutUsuarioIettus);
//
// controlar as permissoes
//
controlePermissao.propagarPermissoesItensFilhos(itemEstrutUsuarioIettus, session);
tx.commit();
if(super.logBean != null) {
super.logBean.setCodigoTransacao(Data.getHoraAtual(false));
super.logBean.setOperacao("INC");
Iterator itObj = objetos.iterator();
while(itObj.hasNext()) {
super.logBean.setObj(itObj.next());
super.loggerAuditoria.info(logBean.toString());
}
}
} catch (ECARException e) {
if (tx != null)
try {
tx.rollback();
} catch (HibernateException r) {
this.logger.error(r);
throw new ECARException("erro.hibernateException");
}
this.logger.error(e);
throw e;
} catch (HibernateException e) {
if (tx != null)
try {
tx.rollback();
} catch (HibernateException r) {
this.logger.error(r);
throw new ECARException("erro.hibernateException");
}
this.logger.error(e);
throw new ECARException("erro.hibernateException");
}
}
/**
* Altera um registro de ItemEstrutUsuarioIettus e propaga a permiss�o para os pr�ximos n�veis
*
* @param novo
* @param old
* @param indProxNivelIettusAnterior
* @throws ECARException
*/
public void alterar(ItemEstrutUsuarioIettus novo, ItemEstrutUsuarioIettus old, String indProxNivelIettusAnterior) throws ECARException {
Transaction tx = null;
try{
ArrayList objetos = new ArrayList();
super.inicializarLogBean();
tx = session.beginTransaction();
ControlePermissao controlePermissao = new ControlePermissao();
if(!controlePermissao.verificarInclusaoUsuarioGrupo(novo.getItemEstruturaIett(), novo)) {
throw new ECARException("itemEstrutura.usuario.validacao.inclusaoUsuarioGrupo");
}
//
// controlar as permissoes
//
/******** Historico *********/
HistoricoIettus historico = new HistoricoIettus(old,
HistoricoIettus.alterarPermissoes,
session,
new ConfiguracaoDao(request),
request);
historico.gerarHistorico();
/******** Historico *********/
controlePermissao.atualizarPermissoesItensFilhos(novo, indProxNivelIettusAnterior, session, request, historico);
session.update(novo);
objetos.add(novo);
//Fazer a mesma verifica��o da inclus�o para alteracao...
tx.commit();
if(super.logBean != null) {
super.logBean.setCodigoTransacao(Data.getHoraAtual(false));
super.logBean.setOperacao("ALT");
Iterator itObj = objetos.iterator();
while(itObj.hasNext()) {
super.logBean.setObj(itObj.next());
super.loggerAuditoria.info(logBean.toString());
}
}
} catch (HibernateException e) {
if (tx != null)
try {
tx.rollback();
} catch (HibernateException r) {
this.logger.error(r);
throw new ECARException("erro.hibernateException");
}
this.logger.error(e);
throw new ECARException("erro.hibernateException");
}
}
/**
* Recebe um Array com C�digos de ItemEstrutUsuarioIettus para exclus�o.
* @param codigosParaExcluir
* @param usuarioLogado
* @throws ECARException
*/
public void excluir(String[] codigosParaExcluir, UsuarioUsu usuarioLogado) throws ECARException {
Transaction tx = null;
try{
ArrayList objetos = new ArrayList();
super.inicializarLogBean();
tx = session.beginTransaction();
for (int i = 0; i < codigosParaExcluir.length; i++) {
ItemEstrutUsuarioIettus old = (ItemEstrutUsuarioIettus) this.buscar(ItemEstrutUsuarioIettus.class, Long.valueOf(codigosParaExcluir[i]));
// Mantis #2156
old.setUsuManutencao(usuarioLogado);
//
// controlar as permissoes
//
new ControlePermissao().removerPermissoesItensFilhos(old, session, request);
/******** Historico *********/
HistoricoIettus historico = new HistoricoIettus(old,
HistoricoIettus.excluirPermissoes,
session,
new ConfiguracaoDao(request),
request);
historico.gerarHistorico();
/******** Historico *********/
session.delete(old);
objetos.add(old);
}
tx.commit();
if(super.logBean != null) {
super.logBean.setCodigoTransacao(Data.getHoraAtual(false));
super.logBean.setOperacao("EXC");
Iterator itObj = objetos.iterator();
while(itObj.hasNext()) {
super.logBean.setObj(itObj.next());
super.loggerAuditoria.info(logBean.toString());
}
}
} catch (HibernateException e) {
if (tx != null)
try {
tx.rollback();
} catch (HibernateException r) {
this.logger.error(r);
throw new ECARException("erro.hibernateException");
}
this.logger.error(e);
throw new ECARException("erro.hibernateException");
}
}
/**
* Obter os acompanhamentos (AcompReferenciaAref) que sejam de um tipo de acompanhamento
* @param codIett
* @return List de ItemEstrutUsuarioIettus
* @throws HibernateException
* @throws ECARException
*/
public List getItemEstrutUsuarioItemOrigemAndEmitePosicaoAndInfAndamento(Long codIett) throws ECARException {
try{
StringBuilder str = new StringBuilder();
str.append("select iettus from ItemEstrutUsuarioIettus iettus");
str.append(" where (iettus.indEmitePosIettus = :indEmitePosIettus");
str.append(" or iettus.indInfAndamentoIettus = :indInfAndamentoIettus)");
str.append(" and iettus.itemEstruturaIett.codIett = :codIett");
str.append(" and iettus.itemEstruturaIett.indAtivoIett = :indAtivo");
Query query = this.getSession().createQuery(str.toString());
query.setLong("codIett", codIett.longValue());
query.setString("indEmitePosIettus", "S");
query.setString("indInfAndamentoIettus", "S");
query.setString("indAtivo", "S");
return query.list();
} catch(HibernateException e){
this.logger.error(e);
throw new ECARException(e);
}
}
/**
* @author Robson
* @param iett
* @param seguranca
* @param acao
* @return boolean
* @throws ECARException
* @since 18/12/2007
* TODO: nao terminado, falta incluir as acoes
* verifica o acesso a um usuario a realizar uma acao em um itemEstrutura
*/
public boolean PermissaoAcessoUsuarioItemEstrutura(ItemEstruturaIett iett, SegurancaECAR seguranca, short acao) throws ECARException{
try {
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 ");
Set gruposUsuario = seguranca.getGruposAcesso();
if (gruposUsuario != null && gruposUsuario.size() > 0)
str.append( " or iettus.sisAtributoSatb in (:grupos)" ) ;
str.append(" ) ");
if(acao == PERMISSAO_CONSULTA_ITEM)
str.append("and iettus.indLeituraIettus = :leitura ");
else if(acao == PERMISSAO_ALTERA_ITEM){
str.append("and iettus.indEdicaoIettus = :edita ");
str.append("and iettus.itemEstruturaIett.indBloqPlanejamentoIett = :bloqueia ");
}
else if(acao == PERMISSAO_EXCLUI_ITEM)
str.append("and iettus.indExcluirIettus = :exclui ");
else if(acao == PERMISSAO_LIBERAR_PLANEJAMENTO_ITEM){
str.append("and (iettus.indDesblPlanIettus = :desbloqueia " +
"and iettus.itemEstruturaIett.indBloqPlanejamentoIett = :bloqueiaitem) ");
}
else if(acao == PERMISSAO_BLOQUEAR_PLANEJAMENTO_ITEM){
str.append("and iettus.indBloqPlanIettus = :bloqueia " +
"and(iettus.itemEstruturaIett.indBloqPlanejamentoIett is null " +
"or iettus.itemEstruturaIett.indBloqPlanejamentoIett = :bloqueiaitem) ");
}
Query q = this.getSession().createQuery(str.toString());
q.setMaxResults(1);
q.setParameter("iett", iett);
q.setString("emitepos", Dominios.SIM);
q.setString("ativo", Dominios.ATIVO);
q.setLong("codusu", seguranca.getCodUsu());
if (gruposUsuario != null && gruposUsuario.size() > 0)
q.setParameterList("grupos", gruposUsuario);
if(acao == PERMISSAO_CONSULTA_ITEM)
q.setString("leitura", Dominios.SIM);
else if(acao == PERMISSAO_ALTERA_ITEM){
q.setString("edita", Dominios.SIM);
q.setString("bloqueia", Dominios.NAO);
}
else if(acao == PERMISSAO_EXCLUI_ITEM)
q.setString("exclui", Dominios.SIM);
else if(acao == PERMISSAO_LIBERAR_PLANEJAMENTO_ITEM){
q.setString("desbloqueia", Dominios.SIM);
q.setString("bloqueiaitem", Dominios.NAO);
}
else if(acao == PERMISSAO_BLOQUEAR_PLANEJAMENTO_ITEM){
q.setString("bloqueia", Dominios.SIM);
q.setString("bloqueiaitem", Dominios.NAO);
}
return !q.list().isEmpty();
} catch (HibernateException e) {
this.logger.error(e);
throw new ECARException(e);
}
}
}