package gcom.seguranca.acesso;
import gcom.gui.faturamento.bean.FiltrarImovelInserirManterContaHelper;
import gcom.relatorio.seguranca.FiltrarRelatorioAcessosUsuariosHelper;
import gcom.relatorio.seguranca.FiltrarRelatorioFuncionalidadeOperacoesPorGrupoHelper;
import gcom.relatorio.seguranca.FiltrarRelatorioSolicitacaoAcessoHelper;
import gcom.seguranca.acesso.usuario.Usuario;
import gcom.seguranca.acesso.usuario.UsuarioAbrangencia;
import gcom.util.ConstantesSistema;
import gcom.util.ErroRepositorioException;
import gcom.util.HibernateUtil;
import gcom.util.Util;
import gcom.util.filtro.GeradorHQLCondicional;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.CopyOnWriteArraySet;
import org.hibernate.Hibernate;
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
/**
* Descri��o da classe
*
* @author Administrador
* @date 13/11/2006
*/
public class RepositorioAcessoHBM implements IRepositorioAcesso {
protected static IRepositorioAcesso instancia;
public RepositorioAcessoHBM() {
}
public static IRepositorioAcesso getInstancia() {
String dialect = HibernateUtil.getDialect();
if (dialect.toUpperCase().contains("ORACLE")){
if (instancia == null) {
instancia = new RepositorioAcessoHBM();
}
} else {
if (instancia == null) {
instancia = new RepositorioAcessoPostgresHBM();
}
}
return instancia;
}
/**
* <Breve descri��o sobre o caso de uso>
*
* <Identificador e nome do caso de uso>
*
* <Breve descri��o sobre o subfluxo>
*
* <Identificador e nome do subfluxo>
*
* <Breve descri��o sobre o fluxo secund�rio>
*
* <Identificador e nome do fluxo secund�rio>
*
* @author Administrador
* @date 13/11/2006
*
* @param consulta
* @return
* @throws ErroRepositorioException
*/
public Object pesquisarObjetoAbrangencia(String consulta) throws ErroRepositorioException {
Object retorno = null;
// cria uma sess�o com o hibernate
Session session = HibernateUtil.getSession();
// cria a vari�vel que vai conter o hql
try {
retorno = session.createQuery(consulta).uniqueResult();
// erro no hibernate
} catch (HibernateException e) {
// levanta a exce��o para a pr�xima camada
throw new ErroRepositorioException(e, "Erro no Hibernate");
} finally {
// fecha a sess�o com o hibernate
HibernateUtil.closeSession(session);
}
return retorno;
}
public void atualizarRegistrarAcessoUsuario(Usuario usuario)
throws ErroRepositorioException {
Session session = HibernateUtil.getSession();
String consulta = "update Usuario usu "
+ "set usu.numeroAcessos =:acesso, usu.ultimoAcesso = :ultimo "
+ "where usu.id = :idUsuario" ;
try {
session.createQuery(consulta).
setInteger("acesso",usuario.getNumeroAcessos()).
setTimestamp("ultimo",usuario.getUltimoAcesso()).
setInteger("idUsuario",usuario.getId()).
executeUpdate();
} catch (HibernateException e) {
throw new ErroRepositorioException(e, "Erro no Hibernate");
} finally {
HibernateUtil.closeSession(session);
}
}
/**
* Pesquisa os favoritos do usuario
*
* @author: Rafael Pinto
* @date: 01/06/2009
*/
public Collection pesquisarUsuarioFavorito(Integer idUsuario)
throws ErroRepositorioException {
Collection retorno = null;
Session session = HibernateUtil.getSession();
String consulta = null;
try {
consulta = "SELECT usuarioFav "
+ "FROM UsuarioFavorito usuarioFav "
+ "INNER JOIN FETCH usuarioFav.funcionalidade func "
+ "WHERE usuarioFav.usuario.id = :idUsuario "
+ "AND usuarioFav.indicadorFavoritosUltimosAcessados = :indicador "
+ "ORDER BY usuarioFav.ultimaAlteracao DESC" ;
retorno = session.createQuery(consulta).
setInteger("idUsuario",idUsuario).
setShort("indicador",ConstantesSistema.SIM).
list();
} catch (HibernateException e) {
// levanta a exce��o para a pr�xima camada
throw new ErroRepositorioException(e, "Erro no Hibernate");
} finally {
// fecha a sess�o
HibernateUtil.closeSession(session);
}
return retorno;
}
/**
* [UC0407]-Filtrar Im�veis para Inserir ou Manter Conta
* [FS0011]-Verificar a abrang�ncia do c�digo do usu�rio
*
* Verifica se existe localidade que esteja fora da abrang�ncia do usu�rio
*
* @author Vivianne Sousa
* @date 30/07/2009
*
* @return Collection
* @throws ErroRepositorioException
*/
public Collection pesquisarLocalidadeForaDaAbrangenciaUsuario(FiltrarImovelInserirManterContaHelper filtro,
Integer nivelAbrangencia,Usuario usuarioLogado)throws ErroRepositorioException {
Integer localidadeOrigemID = filtro.getLocalidadeOrigemID();
Integer setorComercialOrigemID = filtro.getSetorComercialOrigemID();
Integer quadraOrigemID = filtro.getQuadraOrigemID();
Integer localidadeDestinoID = filtro.getLocalidadeDestinoID();
Integer setorComercialDestinoID = filtro.getSetorComercialDestinoID();
Integer quadraDestinoID = filtro.getQuadraDestinoID();
Collection colecaoQuadraSelecionada = filtro.getColecaoQuadraSelecionada();
Integer codigoRotaOrigem = filtro.getCodigoRotaOrigem();
Integer codigoRotaDestino = filtro.getCodigoRotaDestino();
// cria a cole��o de retorno
Collection retorno = null;
// Query
String consulta;
// obt�m a sess�o
Session session = HibernateUtil.getSession();
try {
consulta = "select distinct(loca.loca_id) as idLocalidade "
+ "FROM cadastro.localidade loca "
+ "INNER JOIN cadastro.setor_comercial stcm on stcm.loca_id = loca.loca_id "
+ "INNER JOIN cadastro.quadra qdra on qdra.stcm_id = stcm.stcm_id "
+ "INNER JOIN micromedicao.rota rota on rota.rota_id = qdra.rota_id " + "WHERE 1 = 1 ";
if (localidadeOrigemID != null && localidadeDestinoID != null) {
consulta = consulta + "and loca.loca_id between " + localidadeOrigemID.intValue() + " and " + localidadeDestinoID.intValue();
}
if (setorComercialOrigemID != null && setorComercialDestinoID != null) {
consulta = consulta + " and stcm.stcm_id between " + setorComercialOrigemID.intValue() + " and " + setorComercialDestinoID.intValue();
}
if (colecaoQuadraSelecionada != null && !colecaoQuadraSelecionada.isEmpty()) {
consulta = consulta + " and qdra_id in (:colecaoQuadraSelecionada)";
} else if (quadraOrigemID != null && quadraDestinoID != null) {
consulta = consulta + " and qdra_id between " + quadraOrigemID.intValue() + " and " + quadraDestinoID.intValue();
}
if (codigoRotaOrigem != null && codigoRotaDestino != null) {
consulta = consulta + " and rota_cdrota between " + codigoRotaOrigem.shortValue() + " and " + codigoRotaDestino.shortValue();
}
switch (nivelAbrangencia.intValue()) {
case UsuarioAbrangencia.GERENCIA_REGIONAL_INT :
consulta = consulta + " and loca.greg_id <> " + usuarioLogado.getGerenciaRegional().getId();
break;
case UsuarioAbrangencia.UNIDADE_NEGOCIO_INT :
consulta = consulta + " and loca.uneg_id <> " + usuarioLogado.getUnidadeNegocio().getId();
break;
case UsuarioAbrangencia.ELO_POLO_INT :
consulta = consulta + " and loca.loca_cdelo <> " + usuarioLogado.getLocalidadeElo().getId();
break;
case UsuarioAbrangencia.LOCALIDADE_INT :
consulta = consulta + " and loca.loca_id <> " + usuarioLogado.getLocalidade().getId();
break;
}
if (colecaoQuadraSelecionada != null && !colecaoQuadraSelecionada.isEmpty()) {
retorno = session.createSQLQuery(consulta).addScalar("idLocalidade" , Hibernate.INTEGER).setParameterList("colecaoQuadraSelecionada", colecaoQuadraSelecionada).list();
} else {
retorno = session.createSQLQuery(consulta).addScalar("idLocalidade" , Hibernate.INTEGER).list();
}
// erro no hibernate
} catch (HibernateException e) {
// levanta a exce��o para a pr�xima camada
throw new ErroRepositorioException(e, "Erro no Hibernate");
} finally {
// fecha a sess�o
HibernateUtil.closeSession(session);
}
// retorna a cole��o de atividades pesquisada(s)
return retorno;
}
/**
*
* Pesquisar senhas invalidas
*
* @author Hugo Amorim
* @date 08/12/2009
*
* @return Collection
* @throws ErroRepositorioException
*/
public Collection pesquisarSenhasInvalidas()
throws ErroRepositorioException {
// cria a cole��o de retorno
Collection<String> retorno = null;
// Query
String consulta;
// obt�m a sess�o
Session session = HibernateUtil.getSession();
try {
consulta = "SELECT distinct(senhaInvalida.sniv_dssenhainvalida) as senha "
+ "FROM seguranca.senha_invalida senhaInvalida ";
retorno = session.createSQLQuery(consulta).addScalar("senha", Hibernate.STRING).list();
// erro no hibernate
} catch (HibernateException e) {
// levanta a exce��o para a pr�xima camada
throw new ErroRepositorioException(e, "Erro no Hibernate");
} finally {
// fecha a sess�o
HibernateUtil.closeSession(session);
}
// retorna a cole��o de senhas invalidas pesquisada(s)
return retorno;
}
/**
*
* Pesquisar senhas anteriores do usuario
*
* @author Hugo Amorim
* @date 08/12/2009
*
* @return Collection
* @throws ErroRepositorioException
*/
public Collection pesquisarSenhasAnterioresUsuario(Usuario usuario)
throws ErroRepositorioException {
// cria a cole��o de retorno
Collection<String> retorno = null;
// Query
String consulta;
// obt�m a sess�o
Session session = HibernateUtil.getSession();
try {
consulta = "SELECT distinct(senhasAnteriores.ushi_nmsenha) as senha"
+ " FROM seguranca.usuario_senha_historico senhasAnteriores"
+ " WHERE senhasAnteriores.usur_id = :idUsuario ";
retorno = session.createSQLQuery(consulta)
.addScalar("senha", Hibernate.STRING)
.setParameter("idUsuario",usuario.getId())
.list();
// erro no hibernate
} catch (HibernateException e) {
// levanta a exce��o para a pr�xima camada
throw new ErroRepositorioException(e, "Erro no Hibernate");
} finally {
// fecha a sess�o
HibernateUtil.closeSession(session);
}
// retorna a cole��o de senhas invalidas pesquisada(s)
return retorno;
}
/**
* [UC1040] Gerar Relat�rio de Acessos por Usu�rio
*
* @author Hugo Leonardo
* @date 13/07/2010
*
* @param FiltrarRelatorioAcessosUsuariosHelper
*
* @return Collection
* @throws ErroRepositorioException
*/
public Collection pesquisarRelatorioAcessosPorUsuario(
FiltrarRelatorioAcessosUsuariosHelper helper) throws ErroRepositorioException{
Collection retorno = null;
String consulta = "";
Query query = null;
Map parameters = new HashMap();
Session session = HibernateUtil.getSession();
try {
if(helper.getPermissaoEspecial() != null ){
consulta = consulta + " SELECT unid.unid_dsunidade as unid, " //0
+ " utip.utip_dsusuariotipo as tipoUsuario, " //1
+ " usur.usur_nmusuario as nomeUsuario, " //2
+ " usst.usst_dsusuariosituacao as situacao, " //3
+ " grup.grup_dsgrupo as grupo, " //4
+ " fncd.fncd_dsfuncionalidade as func, " //5
+ " oper.oper_dsoperacao as operacao, " //6
+ " modu.modu_dsmodulo as modulo, " //7
+ " pmep.pmep_dspermissaoespecial as perm " //8
+ " from seguranca.usuario usur "
+ " inner join seguranca.usuario_tipo utip on (utip.utip_id = usur.utip_id) "
+ " inner join seguranca.usuario_situacao usst on (usst.usst_id = usur.usst_id) "
+ " inner join seguranca.usuario_permissao_espec uspe on (uspe.usur_id = usur.usur_id) "
+ " inner join seguranca.permissao_especial pmep on (pmep.pmep_id = uspe.pmep_id) "
+ " inner join seguranca.usuario_grupo usgr on (usgr.usur_id = usur.usur_id) "
+ " inner join seguranca.grupo_func_operacao grfo on (grfo.grup_id = usgr.grup_id and grfo.oper_id = pmep.oper_id) "
+ " inner join seguranca.operacao oper on (oper.oper_id = grfo.oper_id) "
+ " inner join seguranca.funcionalidade fncd on (fncd.fncd_id = grfo.fncd_id) "
+ " inner join seguranca.grupo grup on (grup.grup_id = grfo.grup_id) "
+ " inner join seguranca.modulo modu on (modu.modu_id = fncd.modu_id) "
+ " inner join cadastro.unidade_organizacional unid on (unid.unid_id = usur.unid_id) "
+ " where (grfo.grup_id,grfo.oper_id,grfo.fncd_id) "
+ " not in (select ugre.grup_id,ugre.oper_id,ugre.fncd_id "
+ " from seguranca.usuario_grupo_restricao ugre "
+ " where ugre.usur_id = usur.usur_id) ";
// unidade organizacional
if(helper.getUnidadeOrganizacional() != null ){
consulta = consulta + " and usur.unid_id in ( :unidade2) ";
parameters.put("unidade2", helper.getUnidadeOrganizacional());
}
// usuario
if(helper.getUsuario() != null
&& !helper.getUsuario().equalsIgnoreCase("")){
consulta = consulta + " and usur.usur_id = " + helper.getUsuario() + " ";
}
// grupo acesso
if(helper.getGrupoAcesso() != null ){
consulta = consulta + " and usgr.grup_id in ( :grupoAcesso2) ";
parameters.put("grupoAcesso2", helper.getGrupoAcesso());
}
// modulo
if(helper.getModulo() != null
&& !helper.getModulo().equalsIgnoreCase("")){
consulta = consulta + " and fncd.modu_id = " + helper.getModulo() + " ";
}
// funcionalidade
if(helper.getFuncionalidade() != null
&& !helper.getFuncionalidade().equalsIgnoreCase("")){
consulta = consulta + " and grfo.fncd_id = " + helper.getFuncionalidade() + " ";
}
//operacao
if(helper.getOperacao() !=null
&& !helper.getOperacao().equalsIgnoreCase("")){
consulta = consulta + " and grfo.oper_id = " + helper.getOperacao() + " ";
}
// tipo de usuario
if(helper.getUsuarioTipo() != null ){
consulta = consulta + " and usur.utip_id in ( :usuarioTipo2)";
parameters.put("usuarioTipo2", helper.getUsuarioTipo());
}
// situacao do usuario
if(helper.getSituacaoUsuario() != null ){
consulta = consulta + " and usur.usst_id in ( :situacao) ";
parameters.put("situacao", helper.getSituacaoUsuario());
}
// permissao especial
if(helper.getPermissaoEspecial() != null ){
consulta = consulta + " and uspe.pmep_id in ( :permissao) ";
parameters.put("permissao", helper.getPermissaoEspecial());
}
consulta = consulta + " order by 1,3,2,5,8,6,7,9 ";
}else{
consulta = " ( SELECT unid.unid_dsunidade as unid, " //0
+ " utip.utip_dsusuariotipo as tipoUsuario, " //1
+ " usur.usur_nmusuario as nomeUsuario, " //2
+ " usst.usst_dsusuariosituacao as situacao, " //3
+ " grup.grup_dsgrupo as grupo, " //4
+ " fncd.fncd_dsfuncionalidade as func, " //5
+ " oper.oper_dsoperacao as operacao, " //6
+ " modu.modu_dsmodulo as modulo, " //7
+ " ' ' as perm " //8
+ " from seguranca.usuario usur "
+ " inner join seguranca.usuario_tipo utip on (utip.utip_id = usur.utip_id) "
+ " inner join seguranca.usuario_situacao usst on (usst.usst_id = usur.usst_id) "
+ " inner join seguranca.usuario_grupo usgr on (usgr.usur_id = usur.usur_id) "
+ " inner join seguranca.grupo_func_operacao grfo on (grfo.grup_id = usgr.grup_id) "
+ " inner join seguranca.operacao oper on (oper.oper_id = grfo.oper_id) "
+ " inner join seguranca.funcionalidade fncd on (fncd.fncd_id = grfo.fncd_id) "
+ " inner join seguranca.grupo grup on (grup.grup_id = grfo.grup_id) "
+ " inner join seguranca.modulo modu on (modu.modu_id = fncd.modu_id) "
+ " inner join cadastro.unidade_organizacional unid on (unid.unid_id = usur.unid_id) "
+ " where (grfo.grup_id,grfo.oper_id,grfo.fncd_id) "
+ " not in (select ugre.grup_id,ugre.oper_id,ugre.fncd_id "
+ " from seguranca.usuario_grupo_restricao ugre "
+ " where ugre.usur_id = usur.usur_id) ";
// unidade organizacional
if(helper.getUnidadeOrganizacional() != null ){
consulta = consulta + " and usur.unid_id in ( :unidade) ";
parameters.put("unidade", helper.getUnidadeOrganizacional());
}
// usuario
if(helper.getUsuario() != null
&& !helper.getUsuario().equalsIgnoreCase("")){
consulta = consulta + " and usur.usur_id = " + helper.getUsuario() + " ";
}
// grupo acesso
if(helper.getGrupoAcesso() != null ){
consulta = consulta + " and usgr.grup_id in ( :grupoAcesso) ";
parameters.put("grupoAcesso", helper.getGrupoAcesso());
}
// modulo
if(helper.getModulo() != null
&& !helper.getModulo().equalsIgnoreCase("")){
consulta = consulta + " and fncd.modu_id = " + helper.getModulo() + " ";
}
// funcionalidade
if(helper.getFuncionalidade() != null
&& !helper.getFuncionalidade().equalsIgnoreCase("")){
consulta = consulta + " and grfo.fncd_id = " + helper.getFuncionalidade() + " ";
}
// operacao
if(helper.getOperacao() != null
&& !helper.getOperacao().equalsIgnoreCase("")){
consulta = consulta + " and grfo.oper_id = " + helper.getOperacao() + " ";
}
// tipo de usuario
if(helper.getUsuarioTipo() != null ){
consulta = consulta + " and usur.utip_id in ( :usuarioTipo) ";
parameters.put("usuarioTipo", helper.getUsuarioTipo());
}
// situacao do usuario
if(helper.getSituacaoUsuario() != null ){
consulta = consulta + " and usur.usst_id in ( :situacao) ";
parameters.put("situacao", helper.getSituacaoUsuario());
}
consulta = consulta + " ) UNION ALL ("
+ " SELECT unid.unid_dsunidade as unid, " //0
+ " utip.utip_dsusuariotipo as tipoUsuario, " //1
+ " usur.usur_nmusuario as nomeUsuario, " //2
+ " usst.usst_dsusuariosituacao as situacao, " //3
+ " grup.grup_dsgrupo as grupo, " //4
+ " fncd.fncd_dsfuncionalidade as func, " //5
+ " oper.oper_dsoperacao as operacao, " //6
+ " modu.modu_dsmodulo as modulo, " //7
+ " pmep.pmep_dspermissaoespecial as perm " //8
+ " from seguranca.usuario usur "
+ " inner join seguranca.usuario_tipo utip on (utip.utip_id = usur.utip_id) "
+ " inner join seguranca.usuario_situacao usst on (usst.usst_id = usur.usst_id) "
+ " inner join seguranca.usuario_permissao_espec uspe on (uspe.usur_id = usur.usur_id) "
+ " inner join seguranca.permissao_especial pmep on (pmep.pmep_id = uspe.pmep_id) "
+ " inner join seguranca.usuario_grupo usgr on (usgr.usur_id = usur.usur_id) "
+ " inner join seguranca.grupo_func_operacao grfo on (grfo.grup_id = usgr.grup_id and grfo.oper_id = pmep.oper_id) "
+ " inner join seguranca.operacao oper on (oper.oper_id = grfo.oper_id) "
+ " inner join seguranca.funcionalidade fncd on (fncd.fncd_id = grfo.fncd_id) "
+ " inner join seguranca.grupo grup on (grup.grup_id = grfo.grup_id) "
+ " inner join seguranca.modulo modu on (modu.modu_id = fncd.modu_id) "
+ " inner join cadastro.unidade_organizacional unid on (unid.unid_id = usur.unid_id) "
+ " where (grfo.grup_id,grfo.oper_id,grfo.fncd_id) "
+ " not in (select ugre.grup_id,ugre.oper_id,ugre.fncd_id "
+ " from seguranca.usuario_grupo_restricao ugre "
+ " where ugre.usur_id = usur.usur_id) ";
// unidade organizacional
if(helper.getUnidadeOrganizacional() != null ){
consulta = consulta + " and usur.unid_id in ( :unidade2) ";
parameters.put("unidade2", helper.getUnidadeOrganizacional());
}
// usuario
if(helper.getUsuario() != null
&& !helper.getUsuario().equalsIgnoreCase("")){
consulta = consulta + " and usur.usur_id = " + helper.getUsuario() + " ";
}
// grupo acesso
if(helper.getGrupoAcesso() != null ){
consulta = consulta + " and usgr.grup_id in ( :grupoAcesso2) ";
parameters.put("grupoAcesso2", helper.getGrupoAcesso());
}
// usuario
if(helper.getUsuario() != null
&& !helper.getUsuario().equalsIgnoreCase("")){
consulta = consulta + " and usur.usur_id = " + helper.getUsuario() + " ";
}
// modulo
if(helper.getModulo() != null
&& !helper.getModulo().equalsIgnoreCase("")){
consulta = consulta + " and fncd.modu_id = " + helper.getModulo() + " ";
}
// modulo
if(helper.getModulo() != null
&& !helper.getModulo().equalsIgnoreCase("")){
consulta = consulta + " and fncd.modu_id = " + helper.getModulo() + " ";
}
// funcionalidade
if(helper.getFuncionalidade() != null
&& !helper.getFuncionalidade().equalsIgnoreCase("")){
consulta = consulta + " and grfo.fncd_id = " + helper.getFuncionalidade() + " ";
}
//operacao
if(helper.getOperacao() !=null
&& !helper.getOperacao().equalsIgnoreCase("")){
consulta = consulta + " and grfo.oper_id = " + helper.getOperacao() + " ";
}
// tipo de usuario
if(helper.getUsuarioTipo() != null ){
consulta = consulta + " and usur.utip_id in ( :usuarioTipo2)";
parameters.put("usuarioTipo2", helper.getUsuarioTipo());
}
// situacao do usuario
if(helper.getSituacaoUsuario() != null ){
consulta = consulta + " and usur.usst_id in ( :situacao) ";
parameters.put("situacao", helper.getSituacaoUsuario());
}
// permissao especial
if(helper.getPermissaoEspecial() != null ){
consulta = consulta + " and uspe.pmep_id in ( :permissao) ";
parameters.put("permissao", helper.getPermissaoEspecial());
}
//consulta = consulta + ") order by 1,2,3,5,7,8 ";
consulta = consulta + ") order by 1,3,2,5,8,6,7,9 ";
}
query = (Query) session.createSQLQuery(consulta)
.addScalar("unid", Hibernate.STRING)
.addScalar("tipoUsuario",Hibernate.STRING)
.addScalar("nomeUsuario",Hibernate.STRING)
.addScalar("situacao",Hibernate.STRING)
.addScalar("grupo",Hibernate.STRING)
.addScalar("func",Hibernate.STRING)
.addScalar("operacao",Hibernate.STRING)
.addScalar("modulo",Hibernate.STRING)
.addScalar("perm",Hibernate.STRING);
Set set = parameters.keySet();
Iterator iterMap = set.iterator();
while (iterMap.hasNext()) {
String key = (String) iterMap.next();
if (parameters.get(key) instanceof Set) {
Set setList = (HashSet) parameters.get(key);
query.setParameterList(key, setList);
} else if (parameters.get(key) instanceof Collection) {
Collection collection = (ArrayList) parameters.get(key);
query.setParameterList(key, collection);
} else {
query.setParameter(key, parameters.get(key));
}
}
retorno = query.list();
} catch (HibernateException e) {
throw new ErroRepositorioException(e, "Erro no Hibernate");
} finally {
HibernateUtil.closeSession(session);
}
return retorno;
}
/**
* [UC1040] Gerar Relat�rio de Acessos por Usu�rio
*
* @author Hugo Leonardo
* @date 13/07/2010
*
* @param FiltrarRelatorioAcessosUsuariosHelper
*
* @return Integer
* @throws ErroRepositorioException
*/
public Integer pesquisarTotalRelatorioAcessosPorUsuario(
FiltrarRelatorioAcessosUsuariosHelper helper) throws ErroRepositorioException{
Integer retorno = 0;
String consulta = "";
Query query = null;
Map parameters = new HashMap();
Session session = HibernateUtil.getSession();
try {
if(helper.getPermissaoEspecial() != null ){
consulta = consulta + " SELECT count(oper.oper_id) as cont"
+ " from seguranca.usuario usur "
+ " inner join seguranca.usuario_tipo utip on (utip.utip_id = usur.utip_id) "
+ " inner join seguranca.usuario_situacao usst on (usst.usst_id = usur.usst_id) "
+ " inner join seguranca.usuario_permissao_espec uspe on (uspe.usur_id = usur.usur_id) "
+ " inner join seguranca.permissao_especial pmep on (pmep.pmep_id = uspe.pmep_id) "
+ " inner join seguranca.usuario_grupo usgr on (usgr.usur_id = usur.usur_id) "
+ " inner join seguranca.grupo_func_operacao grfo on (grfo.grup_id = usgr.grup_id and grfo.oper_id = pmep.oper_id) "
+ " inner join seguranca.operacao oper on (oper.oper_id = grfo.oper_id) "
+ " inner join seguranca.funcionalidade fncd on (fncd.fncd_id = grfo.fncd_id) "
+ " inner join seguranca.grupo grup on (grup.grup_id = grfo.grup_id) "
+ " inner join seguranca.modulo modu on (modu.modu_id = fncd.modu_id) "
+ " inner join cadastro.unidade_organizacional unid on (unid.unid_id = usur.unid_id) "
+ " where (grfo.grup_id,grfo.oper_id,grfo.fncd_id) "
+ " not in (select ugre.grup_id,ugre.oper_id,ugre.fncd_id "
+ " from seguranca.usuario_grupo_restricao ugre "
+ " where ugre.usur_id = usur.usur_id) ";
// unidade organizacional
if(helper.getUnidadeOrganizacional() != null ){
consulta = consulta + " and usur.unid_id in ( :unidade2) ";
parameters.put("unidade2", helper.getUnidadeOrganizacional());
}
// usuario
if(helper.getUsuario() != null
&& !helper.getUsuario().equalsIgnoreCase("")){
consulta = consulta + " and usur.usur_id = " + helper.getUsuario() + " ";
}
// grupo acesso
if(helper.getGrupoAcesso() != null ){
consulta = consulta + " and usgr.grup_id in ( :grupoAcesso2) ";
parameters.put("grupoAcesso2", helper.getGrupoAcesso());
}
// modulo
if(helper.getModulo() != null
&& !helper.getModulo().equalsIgnoreCase("")){
consulta = consulta + " and fncd.modu_id = " + helper.getModulo() + " ";
}
// funcionalidade
if(helper.getFuncionalidade() != null
&& !helper.getFuncionalidade().equalsIgnoreCase("")){
consulta = consulta + " and grfo.fncd_id = " + helper.getFuncionalidade() + " ";
}
//operacao
if(helper.getOperacao() !=null
&& !helper.getOperacao().equalsIgnoreCase("")){
consulta = consulta + " and grfo.oper_id = " + helper.getOperacao() + " ";
}
// tipo de usuario
if(helper.getUsuarioTipo() != null ){
consulta = consulta + " and usur.utip_id in ( :usuarioTipo2)";
parameters.put("usuarioTipo2", helper.getUsuarioTipo());
}
// situacao do usuario
if(helper.getSituacaoUsuario() != null ){
consulta = consulta + " and usur.usst_id in ( :situacao) ";
parameters.put("situacao", helper.getSituacaoUsuario());
}
// permissao especial
if(helper.getPermissaoEspecial() != null ){
consulta = consulta + " and uspe.pmep_id in ( :permissao) ";
parameters.put("permissao", helper.getPermissaoEspecial());
}
}else{
consulta =" SELECT count(oper.oper_id) as cont " //6
+ " from seguranca.usuario usur "
+ " inner join seguranca.usuario_tipo utip on (utip.utip_id = usur.utip_id) "
+ " inner join seguranca.usuario_situacao usst on (usst.usst_id = usur.usst_id) "
+ " inner join seguranca.usuario_grupo usgr on (usgr.usur_id = usur.usur_id) "
+ " inner join seguranca.grupo_func_operacao grfo on (grfo.grup_id = usgr.grup_id) "
+ " inner join seguranca.operacao oper on (oper.oper_id = grfo.oper_id) "
+ " inner join seguranca.funcionalidade fncd on (fncd.fncd_id = grfo.fncd_id) "
+ " inner join seguranca.grupo grup on (grup.grup_id = grfo.grup_id) "
+ " inner join seguranca.modulo modu on (modu.modu_id = fncd.modu_id) "
+ " inner join cadastro.unidade_organizacional unid on (unid.unid_id = usur.unid_id) "
+ " where (grfo.grup_id,grfo.oper_id,grfo.fncd_id) "
+ " not in (select ugre.grup_id,ugre.oper_id,ugre.fncd_id "
+ " from seguranca.usuario_grupo_restricao ugre "
+ " where ugre.usur_id = usur.usur_id) ";
// unidade organizacional
if(helper.getUnidadeOrganizacional() !=null ){
consulta = consulta + " and usur.unid_id in ( :unidade) ";
parameters.put("unidade", helper.getUnidadeOrganizacional());
}
// usuario
if(helper.getUsuario() !=null
&& !helper.getUsuario().equalsIgnoreCase("")){
consulta = consulta + " and usur.usur_id = " + helper.getUsuario() + " ";
}
// grupo acesso
if(helper.getGrupoAcesso() !=null){
consulta = consulta + " and usgr.grup_id in ( :grupoAcesso) ";
parameters.put("grupoAcesso", helper.getGrupoAcesso());
}
// modulo
if(helper.getModulo() !=null
&& !helper.getModulo().equalsIgnoreCase("")){
consulta = consulta + " and fncd.modu_id = " + helper.getModulo() + " ";
}
// funcionalidade
if(helper.getFuncionalidade() !=null
&& !helper.getFuncionalidade().equalsIgnoreCase("")){
consulta = consulta + " and grfo.fncd_id = " + helper.getFuncionalidade() + " ";
}
//operacao
if(helper.getOperacao() !=null
&& !helper.getOperacao().equalsIgnoreCase("")){
consulta = consulta + " and grfo.oper_id = " + helper.getOperacao() + " ";
}
// tipo de usuario
if(helper.getUsuarioTipo() !=null){
consulta = consulta + " and usur.utip_id in ( :usuarioTipo) ";
parameters.put("usuarioTipo", helper.getUsuarioTipo());
}
// situacao do usuario
if(helper.getSituacaoUsuario() != null ){
consulta = consulta + " and usur.usst_id in ( :situacao) ";
parameters.put("situacao", helper.getSituacaoUsuario());
}
}
query = (Query) session.createSQLQuery(consulta).addScalar("cont", Hibernate.INTEGER);
Set set = parameters.keySet();
Iterator iterMap = set.iterator();
while (iterMap.hasNext()) {
String key = (String) iterMap.next();
if (parameters.get(key) instanceof Set) {
Set setList = (HashSet) parameters.get(key);
query.setParameterList(key, setList);
} else if (parameters.get(key) instanceof Collection) {
Collection collection = (ArrayList) parameters.get(key);
query.setParameterList(key, collection);
} else {
query.setParameter(key, parameters.get(key));
}
}
retorno = (Integer) query.setMaxResults(1).uniqueResult();
} catch (HibernateException e) {
throw new ErroRepositorioException(e, "Erro no Hibernate");
} finally {
HibernateUtil.closeSession(session);
}
return retorno;
}
/**
* [UC1039] Gerar Relat�rio de Funcionalidades e Opera��es por Grupo
*
* @author Hugo Leonardo
* @date 15/07/2010
*
* @param FiltrarRelatorioFuncionalidadeOperacoesPorGrupoHelper
*
* @return Collection
* @throws ErroRepositorioException
*/
public Collection pesquisarRelatorioFuncionalidadeOperacoesPorGrupo(
FiltrarRelatorioFuncionalidadeOperacoesPorGrupoHelper helper) throws ErroRepositorioException{
Collection retorno = null;
String consulta = "";
Query query = null;
Map parameters = new HashMap();
Session session = HibernateUtil.getSession();
try {
consulta = " select grup.grup_dsgrupo as grupo, " //0
+ " modu.modu_dsmodulo as modulo, " //1
+ " fncd.fncd_dsfuncionalidade as func, " //2
+ " oper.oper_dsoperacao as operacao " //3
+ " from seguranca.grupo_func_operacao grfo "
+ " inner join seguranca.operacao oper on (oper.oper_id = grfo.oper_id) "
+ " inner join seguranca.funcionalidade fncd on (fncd.fncd_id = grfo.fncd_id) "
+ " inner join seguranca.grupo grup on (grup.grup_id = grfo.grup_id) "
+ " inner join seguranca.modulo modu on (modu.modu_id = fncd.modu_id) "
+ " where ";
// Grupo
if(helper.getGrupo() != null ){
consulta = consulta + " grup.grup_id in ( :grupo) ";
parameters.put("grupo", helper.getGrupo());
}
consulta = consulta + " order by 1,2,3,4 ";
query = (Query) session.createSQLQuery(consulta)
.addScalar("grupo", Hibernate.STRING)
.addScalar("modulo",Hibernate.STRING)
.addScalar("func",Hibernate.STRING)
.addScalar("operacao",Hibernate.STRING);
Set set = parameters.keySet();
Iterator iterMap = set.iterator();
while (iterMap.hasNext()) {
String key = (String) iterMap.next();
if (parameters.get(key) instanceof Set) {
Set setList = (HashSet) parameters.get(key);
query.setParameterList(key, setList);
} else if (parameters.get(key) instanceof Collection) {
Collection collection = (ArrayList) parameters.get(key);
query.setParameterList(key, collection);
} else {
query.setParameter(key, parameters.get(key));
}
}
retorno = query.list();
} catch (HibernateException e) {
throw new ErroRepositorioException(e, "Erro no Hibernate");
} finally {
HibernateUtil.closeSession(session);
}
return retorno;
}
/**
* [UC1039] Gerar Relat�rio de Funcionalidades e Opera��es por Grupo
*
* @author Hugo Leonardo
* @date 15/07/2010
*
* @param FiltrarRelatorioFuncionalidadeOperacoesPorGrupoHelper
*
* @return Integer
* @throws ErroRepositorioException
*/
public Integer pesquisarTotalRelatorioFuncionalidadeOperacoesPorGrupo(
FiltrarRelatorioFuncionalidadeOperacoesPorGrupoHelper helper) throws ErroRepositorioException{
Integer retorno = 0;
String consulta = "";
Query query = null;
Map parameters = new HashMap();
Session session = HibernateUtil.getSession();
try {
consulta =" select count(oper.oper_id) as cont " //6
+ " from seguranca.grupo_func_operacao grfo "
+ " inner join seguranca.operacao oper on (oper.oper_id = grfo.oper_id) "
+ " inner join seguranca.funcionalidade fncd on (fncd.fncd_id = grfo.fncd_id) "
+ " inner join seguranca.grupo grup on (grup.grup_id = grfo.grup_id) "
+ " inner join seguranca.modulo modu on (modu.modu_id = fncd.modu_id) "
+ " where ";
// Grupo
if(helper.getGrupo() != null ){
consulta = consulta + " grup.grup_id in ( :grupo) ";
parameters.put("grupo", helper.getGrupo());
}
query = (Query) session.createSQLQuery(consulta).addScalar("cont", Hibernate.INTEGER);
Set set = parameters.keySet();
Iterator iterMap = set.iterator();
while (iterMap.hasNext()) {
String key = (String) iterMap.next();
if (parameters.get(key) instanceof Set) {
Set setList = (HashSet) parameters.get(key);
query.setParameterList(key, setList);
} else if (parameters.get(key) instanceof Collection) {
Collection collection = (ArrayList) parameters.get(key);
query.setParameterList(key, collection);
} else {
query.setParameter(key, parameters.get(key));
}
}
retorno = (Integer) query.setMaxResults(1).uniqueResult();
} catch (HibernateException e) {
throw new ErroRepositorioException(e, "Erro no Hibernate");
} finally {
HibernateUtil.closeSession(session);
}
return retorno;
}
/**
* Informa o n�mero total de registros do grupo, auxiliando o
* esquema de pagina��o
*
* @author Hugo Leonardo
* @date 15/07/2010
*
* @param Filtro
* da Pesquisa
* @param Pacote
* do objeto pesquisado
* @return n�mero de registros da pesquisa
* @throws ErroRepositorioException
*/
public Collection pesquisarGrupos( FiltroGrupo filtroGrupo, Integer numeroPagina)
throws ErroRepositorioException {
// cria a cole��o de retorno
Collection retorno = new ArrayList();
// obt�m a sess�o
Session session = HibernateUtil.getSession();
try {
retorno = new ArrayList(new CopyOnWriteArraySet(GeradorHQLCondicional.gerarCondicionalQuery(
filtroGrupo,
"grupo",
"from Grupo as grupo",
session).setFirstResult(10 * numeroPagina).setMaxResults(10).list()));
} catch (HibernateException e) {
// levanta a exce��o para a pr�xima camada
throw new ErroRepositorioException(e, "Erro no Hibernate");
} finally {
// fecha a sess�o
HibernateUtil.closeSession(session);
}
// retorna a cole��o de atividades pesquisada(s)
return retorno;
}
/**
* Pesquisa se existe algum controle com permiss�o especial ativa para a funcionalidade.
*
* @author: Daniel Alves
* @date: 31/08/2010
* @return boolean
*/
public boolean existeControlePermissaoEspecialFuncionalidade(Integer idFuncionalidade)
throws ErroRepositorioException {
boolean retorno = false;
Session session = HibernateUtil.getSession();
String consulta = null;
try {
consulta = "FROM gcom.seguranca.acesso.ControleLiberacaoPermissaoEspecial "
+ "WHERE funcionalidade = :idFuncionalidade "
+ "AND indicadorUso = :indicador ";
Collection colecao = session.createQuery(consulta).
setInteger("idFuncionalidade", idFuncionalidade).
setShort("indicador",ConstantesSistema.SIM).
list();
if(colecao != null && colecao.size() >0){
retorno = true;
}
} catch (HibernateException e) {
// levanta a exce��o para a pr�xima camada
throw new ErroRepositorioException(e, "Erro no Hibernate");
} finally {
// fecha a sess�o
HibernateUtil.closeSession(session);
}
return retorno;
}
/**
* [UC1093] Gerar Relat�rio Solicita��o de Acesso
*
* @author Hugo Leonardo
* @date 23/07/2010
*
* @param FiltrarRelatorioSolicitacaoAcessoHelper
*
* @return Collection
* @throws ErroRepositorioException
*/
public Collection pesquisarRelatorioSolicitacaoAcesso(
FiltrarRelatorioSolicitacaoAcessoHelper helper) throws ErroRepositorioException{
Collection retorno = null;
String consulta = "";
Query query = null;
Map parameters = new HashMap();
Session session = HibernateUtil.getSession();
try {
consulta += " SELECT unid.id, " //0
+ " unid.descricao, " //1
+ " solAc.dataSolicitacao, " //2
+ " funcSol.id, " //3
+ " funcSol.nome, " //4
+ " funcRes.id, " //5
+ " funcRes.nome, " //6
+ " solAc.dataAutorizacao, " //7
+ " func.id, " //8
+ " solAc.cpf, " //9
+ " solAc.nomeUsuario, " //10
+ " solAcSit.descricao, " //11
+ " solAc.periodoInicial, " //12
+ " solAc.periodoFinal " //13
+ " FROM gcom.seguranca.acesso.usuario.SolicitacaoAcesso solAc "
+ " INNER JOIN solAc.unidadeOrganizacional unid "
+ " INNER JOIN solAc.funcionarioSolicitante funcSol "
+ " INNER JOIN solAc.funcionarioResponsavel funcRes "
+ " INNER JOIN solAc.solicitacaoAcessoSituacao solAcSit "
+ " INNER JOIN solAc.empresa empr "
+ " LEFT JOIN solAc.funcionario func "
+ " WHERE 1=1 ";
// Funcion�rio Solicitante
if(helper.getIdFuncionarioSolicitante() != null ){
consulta += " and funcSol.id = " + helper.getIdFuncionarioSolicitante() + " ";
}
// Per�odo
if (helper.getDataInicial() != null && !helper.getDataInicial().equals("")
&& helper.getDataFinal() != null && !helper.getDataFinal().equals("")){
if (!Util.validarDiaMesAno(helper.getDataInicial())) {
if (!Util.validarDiaMesAno(helper.getDataFinal())) {
if(Util.compararData(
Util.converteStringParaDate(
helper.getDataInicial()),
Util.converteStringParaDate(helper.getDataFinal())) == 1){
consulta += " and solAc.periodoInicial >= (:dataInicial)";
parameters.put("dataInicial", Util.converteStringParaDate(helper.getDataInicial()));
consulta += " and solAc.periodoFinal <= (:dataFinal)";
parameters.put("dataFinal", Util.converteStringParaDate(helper.getDataFinal()));
}
}
}
}
// Funcion�rio Respons�vel
if(helper.getIdFuncionarioSuperior() != null ){
consulta += " and funcRes.id = " + helper.getIdFuncionarioSuperior() + " ";
}
// Empresa
if(helper.getIdEmpresa() != null && !helper.getIdEmpresa().equals("-1")){
consulta += " and empr.id = " + helper.getIdEmpresa();
}
// Funcion�rio
if(helper.getIdFuncionario() != null ){
consulta += " and func.id = " + helper.getIdFuncionario();
}
// Nome Usu�rio
if(helper.getNomeUsuario() != null ){
consulta += " and solAc.nomeUsuario = " + helper.getNomeUsuario();
}
// Unidade Lota��o
if(helper.getIdLotacao() != null ){
consulta += " and unid.id = " + helper.getIdLotacao();
}
// Situa��o
if(helper.getIdsSituacao() != null ){
consulta = consulta + " and solAcSit.id in ( :solAcess) ";
parameters.put("solAcess", helper.getIdsSituacao());
}
consulta = consulta + " order by unid.id, solAc.dataSolicitacao ";
query = (Query) session.createQuery(consulta);
Set set = parameters.keySet();
Iterator iterMap = set.iterator();
while (iterMap.hasNext()) {
String key = (String) iterMap.next();
if (parameters.get(key) instanceof Set) {
Set setList = (HashSet) parameters.get(key);
query.setParameterList(key, setList);
} else if (parameters.get(key) instanceof Collection) {
Collection collection = (ArrayList) parameters.get(key);
query.setParameterList(key, collection);
}else if (parameters.get(key) instanceof Date) {
Date date = (Date) parameters.get(key);
query.setDate(key, date);
} else {
query.setParameter(key, parameters.get(key));
}
}
retorno = query.list();
} catch (HibernateException e) {
throw new ErroRepositorioException(e, "Erro no Hibernate");
} finally {
HibernateUtil.closeSession(session);
}
return retorno;
}
}