/** * CentralIT - CITSmart */ package br.com.centralit.citcorpore.integracao; import java.util.ArrayList; import java.util.Collection; import java.util.List; import br.com.centralit.citcorpore.bean.GrupoDTO; import br.com.centralit.citcorpore.bean.PastaDTO; import br.com.centralit.citcorpore.bean.PerfilAcessoGrupoDTO; 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; /** * DAO de Pasta. * * @author valdoilo.damasceno */ @SuppressWarnings({ "rawtypes", "unchecked" }) public class PastaDAO extends CrudDaoDefaultImpl { @Override public Collection<Field> getFields() { Collection<Field> listFields = new ArrayList<>(); listFields.add(new Field("IDPASTA", "id", true, true, false, false)); listFields.add(new Field("NOME", "nome", false, false, false, false)); listFields.add(new Field("DATAINICIO", "dataInicio", false, false, false, false)); listFields.add(new Field("DATAFIM", "dataFim", false, false, false, false)); listFields.add(new Field("IDPASTAPAI", "idPastaPai", false, false, false, false)); listFields.add(new Field("HERDAPERMISSOES", "herdaPermissoes", false, false, false, false)); listFields.add(new Field("IDNOTIFICACAO", "idNotificacao", false, false, false, false)); return listFields; } @Override public Collection list() throws PersistenceException { List ordenacao = new ArrayList(); ordenacao.add(new Order("nome")); return super.list(ordenacao); } /** * Consulta Pastas Ativas. * * @return pastasAtivas * @throws Exception * @author valdoilo.damasceno */ public Collection<PastaDTO> consultarPastasAtivas() throws PersistenceException { List ordenacao = new ArrayList(); List condicao = new ArrayList(); ordenacao.add(new Order("nome")); condicao.add(new Condition("dataFim", "is", null)); return super.findByCondition(condicao, ordenacao); } /** * Consulta Pastas que n�o possuem Pasta Pai. Ou seja, retorna Primeiras Pastas da Arvore de Pastas. * * @return listaDePastas * @throws Exception * @author valdoilo.damasceno */ public Collection<PastaDTO> listPastaSuperiorSemPai() throws PersistenceException { StringBuilder sql = new StringBuilder(); List parametro = new ArrayList(); List retorno = new ArrayList(); sql.append("SELECT * FROM pasta WHERE datafim IS NULL AND idpastapai IS NULL ORDER BY pasta.nome"); retorno.add("id"); retorno.add("nome"); retorno.add("dataInicio"); retorno.add("dataFim"); retorno.add("idPastaPai"); List list = this.execSQL(sql.toString(), parametro.toArray()); return this.engine.listConvertion(PastaDTO.class, list, retorno); } /** * Verifica se Pasta est� sendo utilizada. * * @param pastaBean * @return boolean * @throws Exception * @author valdoilo.damasceno */ public boolean isEmUso(PastaDTO pastaBean) throws PersistenceException { if (possuiSubPasta(pastaBean) || possuiBaseConhecimento(pastaBean)) { return true; } return false; } /** * Verifica se pasta possui Base de Conhecimento. * * @param pastaBean * @return true - se possui; false - se n�o possui. * @throws PersistenceException * @author valdoilo.damasceno */ public boolean possuiBaseConhecimento(PastaDTO pastaBean) throws PersistenceException { StringBuilder sql = new StringBuilder(); List parametro = new ArrayList(); sql.append("SELECT distinct pasta.nome FROM pasta pasta "); sql.append("INNER JOIN baseconhecimento on pasta.idpasta = baseconhecimento.idpasta AND baseconhecimento.datafim IS NULL "); sql.append("WHERE pasta.idPasta = ?"); parametro.add(pastaBean.getId()); List list = this.execSQL(sql.toString(), parametro.toArray()); if (list != null && !list.isEmpty()) { return true; } return false; } /** * Verifica se pasta possui subPasta. * * @param pastaBean * @return true - se possui; false - se n�o possui. * @throws PersistenceException * @author valdoilo.damasceno */ public boolean possuiSubPasta(PastaDTO pastaBean) throws PersistenceException { StringBuilder sql = new StringBuilder(); List parametro = new ArrayList(); sql.append("SELECT distinct pasta.nome FROM pasta pasta "); sql.append("INNER JOIN pasta subpasta ON pasta.idpasta = subpasta.idpastapai "); sql.append("WHERE pasta.idPasta = ? AND subpasta.datafim is null"); parametro.add(pastaBean.getId()); List list = this.execSQL(sql.toString(), parametro.toArray()); if (list != null && !list.isEmpty()) { return true; } return false; } /** * Busca somente pastas com perfil de acesso onde usuario logado tenha acesso. * * @param usuario * @param idgrupo * @return List<PastaDTO> * @throws Exception */ public List<PastaDTO> listPastaByPerfilAcessoUsuario(UsuarioDTO usuario) throws PersistenceException { StringBuilder sql = new StringBuilder(); List parametros = new ArrayList(); List listRetorno = new ArrayList(); GrupoDao grupoDao = new GrupoDao(); PerfilAcessoGrupoDao perfilAcessoGrupoDao = new PerfilAcessoGrupoDao(); Collection<GrupoDTO> gruposDoEmpregado = grupoDao.getGruposByIdEmpregado(usuario.getIdEmpregado()); listRetorno.add("id"); listRetorno.add("nome"); listRetorno.add("idPastaPai"); sql.append("SELECT distinct pasta.idpasta , pasta.nome , pasta.idpastapai FROM pasta pasta "); sql.append("inner join perfilacessopasta perfilacessopasta ON perfilacessopasta.idpasta = pasta.idpasta "); sql.append("WHERE pasta.idpastapai is null and pasta.datafim is null "); if (usuario.getIdPerfilAcessoUsuario() != null) { sql.append("AND (perfilacessopasta.idperfil = ? "); parametros.add(usuario.getIdPerfilAcessoUsuario()); if (gruposDoEmpregado != null && !gruposDoEmpregado.isEmpty()) { for (GrupoDTO grupo : gruposDoEmpregado) { PerfilAcessoGrupoDTO perfilAcessoGrupo = perfilAcessoGrupoDao.obterPerfilAcessoGrupo(grupo); if (perfilAcessoGrupo != null) { sql.append("OR perfilacessopasta.idperfil = ? "); parametros.add(perfilAcessoGrupo.getIdPerfilAcessoGrupo()); } } } sql.append(")"); } else { if (gruposDoEmpregado != null && !gruposDoEmpregado.isEmpty()) { boolean aux = true; for (GrupoDTO grupo : gruposDoEmpregado) { PerfilAcessoGrupoDTO perfilAcessoGrupo = perfilAcessoGrupoDao.obterPerfilAcessoGrupo(grupo); if (perfilAcessoGrupo != null) { if (aux) { sql.append("AND perfilacessopasta.idperfil = ? "); parametros.add(perfilAcessoGrupo.getIdPerfilAcessoGrupo()); aux = false; } else { sql.append("OR perfilacessopasta.idperfil = ? "); parametros.add(perfilAcessoGrupo.getIdPerfilAcessoGrupo()); aux = false; } } } sql.append(")"); } } sql.append(" ORDER BY pasta.nome"); return this.engine.listConvertion(this.getBean(), execSQL(sql.toString(), parametros.toArray()), listRetorno); } /** * Lista Subpastas de acordo com o Perfil de Acesso do Usu�rio informado. * * @param pastaSuperior * @param usuario * @return Collection<PastaDTO> * @throws Exception */ public Collection<PastaDTO> listSubPastaByPerfilAcessoUsuario(PastaDTO pastaSuperior, UsuarioDTO usuario) throws PersistenceException { StringBuilder sql = new StringBuilder(); List parametros = new ArrayList(); List listRetorno = new ArrayList(); GrupoDao grupoDao = new GrupoDao(); PerfilAcessoGrupoDao perfilAcessoGrupoDao = new PerfilAcessoGrupoDao(); Collection<GrupoDTO> gruposDoEmpregado = grupoDao.getGruposByIdEmpregado(usuario.getIdEmpregado()); sql.append("SELECT distinct pasta.idPasta, pasta.idPastaPai, nome FROM pasta pasta "); sql.append("JOIN perfilacessopasta perfilacessopasta ON pasta.idpasta = perfilacessopasta.idpasta where pasta.datafim IS NULL AND pasta.idPastaPai = ? "); parametros.add(pastaSuperior.getId()); if (usuario.getIdPerfilAcessoUsuario() != null) { sql.append("AND (perfilacessopasta.idperfil = ? "); parametros.add(usuario.getIdPerfilAcessoUsuario()); if (gruposDoEmpregado != null && !gruposDoEmpregado.isEmpty()) { for (GrupoDTO grupo : gruposDoEmpregado) { PerfilAcessoGrupoDTO perfilAcessoGrupo = perfilAcessoGrupoDao.obterPerfilAcessoGrupo(grupo); if (perfilAcessoGrupo != null) { sql.append("OR perfilacessopasta.idperfil = ? "); parametros.add(perfilAcessoGrupo.getIdPerfilAcessoGrupo()); } } } sql.append(")"); } else { if (gruposDoEmpregado != null && !gruposDoEmpregado.isEmpty()) { boolean aux = true; for (GrupoDTO grupo : gruposDoEmpregado) { PerfilAcessoGrupoDTO perfilAcessoGrupo = perfilAcessoGrupoDao.obterPerfilAcessoGrupo(grupo); if (perfilAcessoGrupo != null) { if (aux) { sql.append("AND perfilacessopasta.idperfil = ? "); parametros.add(perfilAcessoGrupo.getIdPerfilAcessoGrupo()); aux = false; } else { sql.append("OR perfilacessopasta.idperfil = ? "); parametros.add(perfilAcessoGrupo.getIdPerfilAcessoGrupo()); aux = false; } } } } sql.append(")"); } sql.append(" ORDER BY pasta.nome"); List lista = new ArrayList(); lista = this.execSQL(sql.toString(), parametros.toArray()); listRetorno.add("id"); listRetorno.add("idPastaPai"); listRetorno.add("nome"); List result = this.engine.listConvertion(getBean(), lista, listRetorno); return result; } /** * Lista Subpastas ATIVIVAS da Pasta informada. * * @param pastaSuperior * @return Collection<PastaDTO> * @throws Exception */ public Collection<PastaDTO> listSubPastas(PastaDTO pastaSuperior) throws PersistenceException { List condicao = new ArrayList(); List ordenacao = new ArrayList(); condicao.add(new Condition("dataFim", "is", null)); condicao.add(new Condition("idPastaPai", "=", pastaSuperior.getId())); ordenacao.add(new Order("id")); return this.findByCondition(condicao, ordenacao); } @Override public String getTableName() { return "PASTA"; } @Override public Class getBean() { return PastaDTO.class; } public PastaDAO() { super(Constantes.getValue("DATABASE_ALIAS"), null); } @Override public Collection find(IDto arg0) throws PersistenceException { return null; } /** * M�todo para verificar se caso exista uma pasta com o mesmo nome * * @author rodrigo.oliveira * @param pastaDTO * @return Se caso exista pasta com o mesmo nome retorna true */ public boolean verificaSeExistePasta(PastaDTO pastaDTO) throws PersistenceException { List parametro = new ArrayList(); List list = new ArrayList(); String sql = "SELECT idpasta FROM " + getTableName() + " WHERE nome = ? AND dataFim IS NULL "; parametro.add(pastaDTO.getNome()); if (pastaDTO.getId() != null) { sql += " AND idpasta <> ? "; parametro.add(pastaDTO.getId()); } list = this.execSQL(sql, parametro.toArray()); if (list != null && !list.isEmpty()) { return true; } else { return false; } } public boolean verificarSeUsuarioPossuiAcessoPasta(PastaDTO pastaDto, UsuarioDTO usuarioDto) throws PersistenceException { List parametro = new ArrayList(); StringBuilder sql = new StringBuilder(); sql.append("SELECT distinct pasta.idPasta FROM pasta pasta "); sql.append("JOIN perfilacessopasta perfilacessopasta ON pasta.idpasta = perfilacessopasta.idpasta where pasta.datafim IS NULL AND pasta.idPasta = ? "); parametro.add(pastaDto.getId()); if (usuarioDto.getIdPerfilAcessoUsuario() != null) { sql.append(" AND (perfilacessopasta.idperfil = ? "); parametro.add(usuarioDto.getIdPerfilAcessoUsuario()); GrupoDao grupoDao = new GrupoDao(); PerfilAcessoGrupoDao perfilAcessoGrupoDao = new PerfilAcessoGrupoDao(); Collection<GrupoDTO> gruposDoEmpregado = grupoDao.getGruposByIdEmpregado(usuarioDto.getIdEmpregado()); if (gruposDoEmpregado != null && !gruposDoEmpregado.isEmpty()) { for (GrupoDTO grupo : gruposDoEmpregado) { PerfilAcessoGrupoDTO perfilAcessoGrupo = perfilAcessoGrupoDao.obterPerfilAcessoGrupo(grupo); if (perfilAcessoGrupo != null) { sql.append(" OR perfilacessopasta.idperfil = ? "); parametro.add(perfilAcessoGrupo.getIdPerfilAcessoGrupo()); } } } sql.append(")"); } List lista = new ArrayList(); lista = this.execSQL(sql.toString(), parametro.toArray()); if (lista != null && !lista.isEmpty()) { return true; } else { return false; } } /** * Verifica se Pasta Informada porssui conhecimento do tipo FAQ. * * @param pastaDto * @return true = Pasta possui FAQ; false = Pasta n�o possui FAQ. * @throws Exception */ public boolean verificarSePastaPossuiFaq(PastaDTO pastaDto) throws PersistenceException { StringBuilder sql = new StringBuilder(); List list = new ArrayList(); List parametros = new ArrayList(); sql.append("select * from pasta "); sql.append("inner join baseconhecimento on pasta.idpasta = baseconhecimento.idpasta "); sql.append("where baseconhecimento.faq = ? and pasta.idpasta = ? and baseconhecimento.datafim is null and (baseconhecimento.arquivado = ? or baseconhecimento.arquivado = ?) and baseconhecimento.status = ?"); parametros.add("S"); parametros.add(pastaDto.getId()); parametros.add("N"); parametros.add(null); parametros.add("S"); list = this.execSQL(sql.toString(), parametros.toArray()); if (list != null && !list.isEmpty()) { return true; } else { return false; } } /** * Verifica se Pasta Informada porssui conhecimento do tipo ERRO CONHECIDO. * * @param pastaDto * @return true = Pasta possui FAQ; false = Pasta n�o possui FAQ. * @throws Exception */ public boolean verificarSePastaPossuiErroConhecido(PastaDTO pastaDto) throws PersistenceException { StringBuilder sql = new StringBuilder(); List list = new ArrayList(); List parametros = new ArrayList(); sql.append("select * from pasta "); sql.append("inner join baseconhecimento on pasta.idpasta = baseconhecimento.idpasta "); sql.append("where baseconhecimento.erroconhecido = ? and pasta.idpasta = ? and baseconhecimento.datafim is null and (baseconhecimento.arquivado = ? or baseconhecimento.arquivado = ?) and baseconhecimento.status = ?"); parametros.add("S"); parametros.add(pastaDto.getId()); parametros.add("N"); parametros.add(null); parametros.add("S"); list = this.execSQL(sql.toString(), parametros.toArray()); if (list != null && !list.isEmpty()) { return true; } else { return false; } } /**Verifca se existe pasta pai e se herda de pasta pai. * @param idPastaFilho * @return * @throws Exception * @author mario.haysaki */ public PastaDTO idpastaPaiEHerdaDaPastaPai(Integer idPastaFilho) throws PersistenceException { List parametro = new ArrayList(); List list = new ArrayList(); List listRetorno = new ArrayList(); listRetorno.add("id"); listRetorno.add("idPastaPai"); listRetorno.add("herdaPermissoes"); String sql = "SELECT idpasta, idpastapai, herdapermissoes from " + getTableName() + " WHERE idpasta = ? AND datafim is null "; parametro.add(idPastaFilho); list = this.engine.listConvertion(this.getBean(), execSQL(sql.toString(), parametro.toArray()), listRetorno); if (list != null && !list.isEmpty()) { return (PastaDTO) list.get(0); } else{ return null; } } }