package br.com.centralit.citcorpore.integracao;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import br.com.centralit.citcorpore.bean.PerfilAcessoDTO;
import br.com.centralit.citcorpore.bean.PerfilAcessoMenuDTO;
import br.com.centralit.citcorpore.bean.UsuarioDTO;
import br.com.citframework.dto.IDto;
import br.com.citframework.excecao.PersistenceException;
import br.com.citframework.integracao.Condition;
import br.com.citframework.integracao.CrudDaoDefaultImpl;
import br.com.citframework.integracao.Field;
import br.com.citframework.integracao.Order;
import br.com.citframework.util.Constantes;
import br.com.citframework.util.UtilDatas;
@SuppressWarnings({ "rawtypes", "unchecked" })
public class PerfilAcessoMenuDao extends CrudDaoDefaultImpl {
public PerfilAcessoMenuDao() {
super(Constantes.getValue("DATABASE_ALIAS"), null);
}
@Override
public Collection find(IDto arg0) throws PersistenceException {
return null;
}
@Override
public Collection<Field> getFields() {
Collection<Field> listFields = new ArrayList<>();
listFields
.add(new Field("IDMENU", "idMenu", true, false, false, false));
listFields.add(new Field("IDPERFILACESSO", "idPerfilAcesso", true,
false, false, false));
listFields.add(new Field("PESQUISA", "pesquisa", false, false, false,
false));
listFields.add(new Field("GRAVA", "grava", false, false, false, false));
listFields
.add(new Field("DELETA", "deleta", false, false, false, false));
listFields.add(new Field("DATAINICIO", "dataInicio", false, false,
false, false));
listFields.add(new Field("DATAFIM", "dataFim", false, false, false,
false));
return listFields;
}
@Override
public void delete(IDto obj) throws PersistenceException {
PerfilAcessoMenuDTO perfilAcessoMenuDTO = (PerfilAcessoMenuDTO) obj;
List condicao = new ArrayList();
condicao.add(new Condition("idPerfilAcesso", "=", perfilAcessoMenuDTO
.getIdPerfilAcesso()));
condicao.add(new Condition("idMenu", "=", perfilAcessoMenuDTO
.getIdMenu()));
super.deleteByCondition(condicao);
}
/**
* Exclui PerfisAcessoMenu do perfilAcesso informado.
*
* @param perfilAcesso
* @throws PersistenceException
*/
public void excluirPerfisAcessoMenu(PerfilAcessoDTO perfilAcesso)
throws PersistenceException {
StringBuilder sql = new StringBuilder();
List parametros = new ArrayList();
sql.append("UPDATE perfilacessomenu SET datafim = ? WHERE idperfilacesso = ?");
parametros.add(UtilDatas.getDataAtual());
parametros.add(perfilAcesso.getIdPerfilAcesso());
this.execUpdate(sql.toString(), parametros.toArray());
}
@Override
public String getTableName() {
return "PERFILACESSOMENU";
}
@Override
public Collection list() throws PersistenceException {
List ordenacao = new ArrayList();
ordenacao.add(new Order("idMenu"));
return super.list(ordenacao);
}
@Override
public Class getBean() {
return new PerfilAcessoMenuDTO().getClass();
}
/**
* Retorna PerfilAcessoMenu ativos por idPerfilAcesso.
*
* @param idPerfilAcesso
* @return
* @throws Exception
*/
public Collection findByPerfilAcesso(Integer idPerfilAcesso)
throws PersistenceException {
List condicao = new ArrayList();
List ordenacao = new ArrayList();
condicao.add(new Condition("idPerfilAcesso", "=", idPerfilAcesso));
condicao.add(new Condition("dataFim", "is", null));
return super.findByCondition(condicao, ordenacao);
}
public Collection<PerfilAcessoMenuDTO> restoreMenusAcesso(IDto obj)
throws PersistenceException {
PerfilAcessoMenuDTO perfilAcessoMenuDTO = (PerfilAcessoMenuDTO) obj;
List param = new ArrayList();
List fields = new ArrayList();
fields.add("pesquisa");
fields.add("grava");
fields.add("deleta");
param.add(perfilAcessoMenuDTO.getIdMenu());
param.add(perfilAcessoMenuDTO.getIdPerfilAcesso());
String sql = "SELECT distinct pesquisa, grava, deleta FROM "
+ getTableName()
+ " WHERE idMenu = ? AND idPerfilAcesso = ? AND datafim is null";
List dados = this.execSQL(sql, param.toArray());
return this.listConvertion(getBean(), dados, fields);
}
public Collection<PerfilAcessoMenuDTO> pesquisaSeJaExisteAcessoMenuPai(
Integer idPerfilAcesso, Integer idMenu) throws PersistenceException {
List parametro = new ArrayList();
StringBuilder sql = new StringBuilder();
sql.append("SELECT idMenu FROM "
+ getTableName()
+ " WHERE idperfilacesso = ? AND idmenu = ? AND dataFim IS NULL ");
parametro.add(idPerfilAcesso);
parametro.add(idMenu);
List lista = new ArrayList();
lista = this.execSQL(sql.toString(), parametro.toArray());
List listRetorno = new ArrayList();
listRetorno.add("idMenu");
List result = null;
if (lista != null && !lista.isEmpty()) {
result = this.engine.listConvertion(getBean(), lista, listRetorno);
}
return result;
}
@Override
public void update(IDto obj) throws PersistenceException {
PerfilAcessoMenuDTO perfilAcessoMenuDTO = (PerfilAcessoMenuDTO) obj;
List parametros = new ArrayList();
parametros.add(UtilDatas.getDataAtual());
parametros.add(perfilAcessoMenuDTO.getIdPerfilAcesso());
String sql = "UPDATE perfilacessomenu SET DATAFIM = ? WHERE idPerfilAcesso = ? ";
this.execUpdate(sql, parametros.toArray());
}
public List<PerfilAcessoMenuDTO> getPerfilAcessoMenu(PerfilAcessoMenuDTO perfilAcessoMenuDTO) throws PersistenceException{
List param = new ArrayList();
List fields = new ArrayList();
fields.add("pesquisa");
fields.add("grava");
fields.add("deleta");
param.add(perfilAcessoMenuDTO.getIdMenu());
param.add(perfilAcessoMenuDTO.getIdPerfilAcesso());
String sql = "SELECT distinct pesquisa, grava, deleta FROM "
+ getTableName()
+ " WHERE idMenu = ? AND idPerfilAcesso = ? AND datafim is null";
List dados = this.execSQL(sql, param.toArray());
return this.listConvertion(getBean(), dados, fields);
}
/**
* Obt�m um Mapa<idMenu, List<PerfilAcessoMenu> > de todos os menus deste usu�rio
*
* @author thyen.chang
* @since 28/01/2015 - OPERA��O USAIN BOLT
* @param usuario
* @return
* @throws PersistenceException
*/
public Map<Integer, List<PerfilAcessoMenuDTO> > getPerfilAcessoBotoesMenu(UsuarioDTO usuario) throws PersistenceException{
if(usuario == null || usuario.getIdUsuario() == null){
return null;
}
StringBuilder sql = new StringBuilder();
List parametros = new ArrayList();
sql.append("SELECT DISTINCT pam.idmenu, pam.pesquisa, pam.grava, pam.deleta ");
sql.append(" FROM usuario u ");
sql.append(" JOIN perfilacessousuario pau ON pau.idusuario = u.idusuario and u.idusuario = ? ");
parametros.add(usuario.getIdUsuario());
sql.append(" JOIN perfilacessomenu pam ON pam.idperfilacesso = pau.idperfil ");
sql.append(" JOIN menu m ON m.idmenu = pam.idmenu AND m.datafim IS NULL ");
sql.append("UNION ");
sql.append("SELECT DISTINCT pam.idmenu, pam.pesquisa, pam.grava, pam.deleta ");
sql.append(" FROM usuario u ");
sql.append(" JOIN perfilacessousuario pau ON pau.idusuario = u.idusuario and u.idusuario = ? ");
parametros.add(usuario.getIdUsuario());
sql.append(" JOIN gruposempregados ge ON ge.idempregado = u.idempregado ");
sql.append(" JOIN perfilacessogrupo pag ON pag.idgrupo = ge.idgrupo ");
sql.append(" JOIN perfilacessomenu pam ON pag.idperfil = pam.idperfilacesso ");
sql.append(" JOIN menu m ON m.idmenu = pam.idmenu AND m.datafim IS NULL ");
List retorno = this.execSQL(sql.toString(), parametros.toArray());
List fields = new ArrayList();
fields.add("idMenu");
fields.add("pesquisa");
fields.add("grava");
fields.add("deleta");
return getMapaPerfilDeAcessoBylist(this.listConvertion(getBean(), retorno, fields));
}
/**
* Converte a lista de permiss�o que o usu�rio tem para acessar cada menu em um Mapa
*
* @author thyen.chang
* @since 28/01/2015 - OPERA��O USAIN BOLT
* @param listaPerfilAcesso
* @return
*/
private Map<Integer, List<PerfilAcessoMenuDTO> > getMapaPerfilDeAcessoBylist(List<PerfilAcessoMenuDTO> listaPerfilAcesso){
Map<Integer, List<PerfilAcessoMenuDTO> > mapaPerfilAcesso = new HashMap<Integer, List<PerfilAcessoMenuDTO>>();
for(PerfilAcessoMenuDTO perfilAcessoMenu : listaPerfilAcesso){
List<PerfilAcessoMenuDTO> listaMenu = mapaPerfilAcesso.get(perfilAcessoMenu.getIdMenu());
if(listaMenu == null){
listaMenu = new ArrayList<PerfilAcessoMenuDTO>();
}
listaMenu.add(perfilAcessoMenu);
mapaPerfilAcesso.put(perfilAcessoMenu.getIdMenu(), listaMenu);
}
return mapaPerfilAcesso;
}
}