package br.com.centralit.citquestionario.integracao; import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; import java.util.List; import br.com.centralit.citquestionario.bean.QuestionarioDTO; 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; public class QuestionarioDao extends CrudDaoDefaultImpl { private static final String SQL_EXISTE_RESPOSTA = "SELECT COUNT(*) QTDE "+ " FROM RESPOSTAITEMQUESTIONARIO R, QUESTAOQUESTIONARIO Q, GRUPOQUESTIONARIO G "+ " WHERE R.IDQUESTAOQUESTIONARIO = Q.IDQUESTAOQUESTIONARIO "+ " AND Q.IDGRUPOQUESTIONARIO = G.IDGRUPOQUESTIONARIO "+ " AND G.IDQUESTIONARIO = ?"; private static final String SQL_EXISTE_REFERENCIA_COMPARTILHADA = "SELECT COUNT(*) QTDE "+ " FROM QUESTAOQUESTIONARIO Q, GRUPOQUESTIONARIO G "+ " WHERE Q.IDGRUPOQUESTIONARIO = G.IDGRUPOQUESTIONARIO "+ " AND G.IDQUESTIONARIO <> ? "+ " AND Q.IDQUESTAOCOMPARTILHADA IN " + " (SELECT QQ.IDQUESTAOQUESTIONARIO "+ " FROM QUESTAOQUESTIONARIO QQ, GRUPOQUESTIONARIO G "+ " WHERE QQ.IDGRUPOQUESTIONARIO = G.IDGRUPOQUESTIONARIO "+ " AND G.IDQUESTIONARIO = ?)"; private static final String SQL_LIST_QUESTIONARIO = "SELECT IDQUESTIONARIO, IDQUESTIONARIOORIGEM, IDCATEGORIAQUESTIONARIO, "+ " NOMEQUESTIONARIO, IDEMPRESA, ATIVO, javaScript "+ " FROM QUESTIONARIO "+ " WHERE ATIVO = 'S' "+ " ORDER BY NOMEQUESTIONARIO"; private static final String SQL_LIST_POR_APLICACAO = "SELECT DISTINCT Q.IDQUESTIONARIO, IDQUESTIONARIOORIGEM, Q.IDCATEGORIAQUESTIONARIO, "+ " NOMEQUESTIONARIO, Q.IDEMPRESA, ATIVO, javaScript "+ " FROM QUESTIONARIO Q, APLICACAOQUESTIONARIO A "+ " WHERE Q.IDQUESTIONARIO = Q.IDQUESTIONARIOORIGEM "+ " AND Q.IDQUESTIONARIO = A.IDQUESTIONARIO "+ " AND A.SITUACAO = 'A' "+ " AND (A.APLICACAO = 'T' OR A.APLICACAO = ?) "+ " AND Q.idEmpresa = ? "+ " ORDER BY NOMEQUESTIONARIO"; public QuestionarioDao() { super(Constantes.getValue("DATABASE_ALIAS"), null); } @Override public Collection<QuestionarioDTO> find(final IDto obj) throws PersistenceException { return null; } @Override public Collection<Field> getFields() { final Collection<Field> listFields = new ArrayList<>(); listFields.add(new Field("idQuestionario", "idQuestionario", true, true, false, false)); listFields.add(new Field("idQuestionarioOrigem", "idQuestionarioOrigem", false, false, false, false)); listFields.add(new Field("idCategoriaQuestionario", "idCategoriaQuestionario", false, false, false, false)); listFields.add(new Field("nomeQuestionario", "nomeQuestionario", false, false, false, false)); listFields.add(new Field("idEmpresa", "idEmpresa", false, false, false, false)); listFields.add(new Field("ativo", "ativo", false, false, false, false)); listFields.add(new Field("javaScript", "javaScript", false, false, false, false)); return listFields; } @Override public String getTableName() { return "Questionario"; } @Override public Collection list() throws PersistenceException { final Object[] objs = new Object[] {}; final List lista = this.execSQL(SQL_LIST_QUESTIONARIO, objs); final List<String> listRetorno = new ArrayList<>(); listRetorno.add("idQuestionario"); listRetorno.add("idQuestionarioOrigem"); listRetorno.add("idCategoriaQuestionario"); listRetorno.add("nomeQuestionario"); listRetorno.add("idEmpresa"); listRetorno.add("ativo"); listRetorno.add("javaScript"); return engine.listConvertion(this.getBean(), lista, listRetorno); } public Collection listByIdEmpresaAndAplicacao(final Integer idEmpresa, final String aplicacao) throws PersistenceException { final Object[] objs = new Object[] {aplicacao, idEmpresa}; final List lista = this.execSQL(SQL_LIST_POR_APLICACAO, objs); final List<String> listRetorno = new ArrayList<>(); listRetorno.add("idQuestionario"); listRetorno.add("idQuestionarioOrigem"); listRetorno.add("idCategoriaQuestionario"); listRetorno.add("nomeQuestionario"); listRetorno.add("idEmpresa"); listRetorno.add("ativo"); listRetorno.add("javaScript"); return engine.listConvertion(this.getBean(), lista, listRetorno); } @Override public Class<QuestionarioDTO> getBean() { return QuestionarioDTO.class; } public Collection<QuestionarioDTO> listByIdEmpresa(final Integer idEmpresa) throws PersistenceException { final List<Condition> lstCond = new ArrayList<>(); final List<Order> lstOrder = new ArrayList<>(); lstCond.add(new Condition("idEmpresa", "=", idEmpresa)); lstCond.add(new Condition("ativo", "=", "S")); lstOrder.add(new Order("nomeQuestionario")); return super.findByCondition(lstCond, lstOrder); } public QuestionarioDTO restoreByIdOrigem(final Integer idQuestionarioOrigem) throws PersistenceException { final List lstCond = new ArrayList(); lstCond.add(new Condition("idQuestionarioOrigem", "=", idQuestionarioOrigem)); lstCond.add(new Condition("ativo", "=", "S")); final Collection col = super.findByCondition(lstCond, null); if (col == null) { return null; } final Iterator it = col.iterator(); if (it.hasNext()) { return (QuestionarioDTO) it.next(); } else { return null; } } public boolean existeResposta(final Integer idQuestionario) throws PersistenceException { final Object[] objs = new Object[] {idQuestionario}; final List lista = this.execSQL(SQL_EXISTE_RESPOSTA, objs); final Object[] row = (Object[]) lista.get(0); return Integer.parseInt(row[0].toString()) > 0; } public boolean existeReferenciaQuestaoCmpartilhada(final Integer idQuestionario) throws PersistenceException { final Object[] objs = new Object[] {idQuestionario, idQuestionario}; final List lista = this.execSQL(SQL_EXISTE_REFERENCIA_COMPARTILHADA, objs); final Object[] row = (Object[]) lista.get(0); return Integer.parseInt(row[0].toString()) > 0; } @Override public void updateNotNull(final IDto obj) throws PersistenceException { super.updateNotNull(obj); } /** * Metodo responsavel por identificar o question�rio que s�o de resposta obrigat�ria. * * @param idQuestionario * @return */ public boolean existeQuestaoObrigatoria(final Integer idQuestionario) { final String QUERY = "SELECT COUNT(qq.idquestaoquestionario) FROM questionario q " + "INNER JOIN grupoquestionario gq ON gq.idquestionario = q.idquestionario " + "INNER JOIN questaoquestionario qq ON qq.idgrupoquestionario = gq.idgrupoquestionario " + "WHERE qq.obrigatoria = 'S' AND q.idquestionario = ?"; final Object[] param = new Object[] {idQuestionario}; List lista; try { lista = this.execSQL(QUERY, param); if (lista != null && lista.size() > 0) { final Object[] row = (Object[]) lista.get(0); return Integer.parseInt(row[0].toString()) > 0; } } catch (final PersistenceException e) { e.printStackTrace(); } return Boolean.FALSE; } }