package br.com.centralit.citcorpore.integracao;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import br.com.centralit.citcorpore.bean.ItemConfiguracaoDTO;
import br.com.centralit.citcorpore.bean.TipoItemConfiguracaoDTO;
import br.com.centralit.citcorpore.bean.ValorDTO;
import br.com.centralit.citcorpore.util.CITCorporeUtil;
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;
@SuppressWarnings({ "rawtypes", "unchecked", "unused" })
public class ValorDao extends CrudDaoDefaultImpl {
public ValorDao() {
super(Constantes.getValue("DATABASE_ALIAS"), null);
}
public Collection<Field> getFields() {
Collection<Field> listFields = new ArrayList<>();
listFields.add(new Field("IDVALOR", "idValor", true, true, false, false));
listFields.add(new Field("IDITEMCONFIGURACAO", "idItemConfiguracao", false, false, false, false));
listFields.add(new Field("IDBASEITEMCONFIGURACAO", "idBaseItemConfiguracao", false, false, false, false));
listFields.add(new Field("IDCARACTERISTICA", "idCaracteristica", false, false, false, false));
listFields.add(new Field("VALORSTR", "valorStr", false, false, false, false));
listFields.add(new Field("VALORLONGO", "valorLongo", false, false, false, false));
listFields.add(new Field("VALORDECIMAL", "valorDecimal", false, false, false, false));
listFields.add(new Field("VALORDATE", "valorDate", false, false, false, false));
return listFields;
}
/**
* Consulta valor por idItemConfiguracao.
*
* @param idItemConfiguracao
* @return Collection
* @throws Exception
* @author valdoilo.damasceno
*/
public Collection findByIdItemConfiguracao(Integer idItemConfiguracao) throws PersistenceException {
List condicao = new ArrayList();
List ordenacao = new ArrayList();
condicao.add(new Condition("idItemConfiguracao", "=", idItemConfiguracao));
ordenacao.add(new Order("numero"));
return super.findByCondition(condicao, ordenacao);
}
/**
* Exclui valor por idItemConfiguracao.
*
* @param idItemConfiguracao
* @throws Exception
* @author valdoilo.damasceno
*/
public void deleteByIdItemConfiguracao(Integer idItemConfiguracao) throws PersistenceException {
List condicao = new ArrayList();
condicao.add(new Condition("idItemConfiguracao", "=", idItemConfiguracao));
super.deleteByCondition(condicao);
}
/**
* Consulta Valor por idCaracteristica.
*
* @param idCaracteristica
* @return Collection
* @throws Exception
* @author valdoilo.damasceno
*/
public Collection findByIdCaracteristica(Integer idCaracteristica) throws PersistenceException {
List condicao = new ArrayList();
List ordenacao = new ArrayList();
condicao.add(new Condition("idCaracteristica", "=", idCaracteristica));
ordenacao.add(new Order("numero"));
return super.findByCondition(condicao, ordenacao);
}
/**
* Exclui valor por idCaracteristica.
*
* @param idCaracteristica
* @throws Exception
* @author valdoilo.damasceno
*/
public void deleteByIdCaracteristica(Integer idCaracteristica) throws PersistenceException {
List condicao = new ArrayList();
condicao.add(new Condition("idCaracteristica", "=", idCaracteristica));
super.deleteByCondition(condicao);
}
/**
* Retorna Valor da Caracter�stica do Item Configura��o.
*
* @param idBaseItemConfiguracao
* @param idCaracteristica
* @return ValorDTO
* @throws Exception
* @author valdoilo.damasceno
*/
public ValorDTO restore(boolean isItemConfigruacao, Integer idBaseItemConfiguracao, Integer idCaracteristica) throws PersistenceException {
List condicao = new ArrayList();
if (isItemConfigruacao) {
condicao.add(new Condition("idItemConfiguracao", "=", idBaseItemConfiguracao));
} else {
condicao.add(new Condition("idBaseItemConfiguracao", "=", idBaseItemConfiguracao));
}
condicao.add(new Condition("idCaracteristica", "=", idCaracteristica));
List ordenacao = new ArrayList();
ordenacao.add(new Order("valorStr"));
List resultado = (List) super.findByCondition(condicao, ordenacao);
if (resultado != null && !resultado.isEmpty()) {
return (ValorDTO) resultado.get(0);
} else {
return null;
}
}
/**
* Retorna Valor da Caracter�stica do Item Configura��o.
*
* @param idBaseItemConfiguracao
* @param idCaracteristica
* @return ValorDTO
* @throws Exception
* @author valdoilo.damasceno
*/
public ValorDTO restoreItemConfiguracao(Integer idItemConfiguracao, Integer idCaracteristica) throws PersistenceException {
List condicao = new ArrayList();
condicao.add(new Condition("idItemConfiguracao", "=", idItemConfiguracao));
condicao.add(new Condition("idCaracteristica", "=", idCaracteristica));
List ordenacao = new ArrayList();
ordenacao.add(new Order("valorStr"));
List resultado = (List) super.findByCondition(condicao, ordenacao);
if (resultado != null && !resultado.isEmpty()) {
return (ValorDTO) resultado.get(0);
} else {
return null;
}
}
public ValorDTO restoreValorByIdItemConfiguracao(Integer idItemConfiguracao, Integer idCaracteristica, String valor) throws PersistenceException {
List condicao = new ArrayList();
condicao.add(new Condition("idItemConfiguracao", "=", idItemConfiguracao));
condicao.add(new Condition("idCaracteristica", "=", idCaracteristica));
condicao.add(new Condition("valorStr", "=", valor));
List ordenacao = new ArrayList();
ordenacao.add(new Order("valorStr"));
List resultado = (List) super.findByCondition(condicao, ordenacao);
if (resultado != null && !resultado.isEmpty()) {
return (ValorDTO) resultado.get(0);
} else {
return null;
}
}
/**
* Retorna caracter�sticas e seus respectivos valores.
*
* @param itemConfiguracao
* - ItemConfiguracaoDTO.
* @param tipoItemConfiguracao
* - TipoItemConfiguracaoDTO
* @return listCaracteristica
* @throws Exception
* @author valdoilo.damasceno
*/
public Collection<ValorDTO> findByItemAndTipoItemConfiguracao(ItemConfiguracaoDTO itemConfiguracao, TipoItemConfiguracaoDTO tipoItemConfiguracao) throws PersistenceException {
StringBuilder sql = new StringBuilder();
List parametro = new ArrayList();
this.gerarSqlFindByItemAndTipoItemConfiguracao(itemConfiguracao, tipoItemConfiguracao, sql, parametro);
List list = this.execSQL(sql.toString(), parametro.toArray());
Collection<ValorDTO> listCaracteristica = this.engine.listConvertion(this.getBean(), list, this.getListaDeRetornoCaracteristicaValor());
return listCaracteristica;
}
/**
*
* Gerar SQL para a consulta de caracter�sticas e seus respectivos valores.
*
* @param itemConfiguracao
* @param tipoItemConfiguracao
* @param sql
* @param parametro
* @author valdoilo.damasceno
*/
private void gerarSqlFindByItemAndTipoItemConfiguracao(ItemConfiguracaoDTO itemConfiguracao, TipoItemConfiguracaoDTO tipoItemConfiguracao, StringBuilder sql, List parametro) {
String sqlHardware = "";
parametro.add(itemConfiguracao.getIdItemConfiguracao());
if (tipoItemConfiguracao.getTag().equalsIgnoreCase("HARDWARE")) {
sqlHardware += "AND (tipo.tagtipoitemconfiguracao IN ('HARDWARE', 'DEVICEID', 'MEMORIES' , 'INPUTS', 'PORTS', 'CONTROLLERS', 'SOUNDS', 'STORAGES', 'DRIVES', 'NETWORKS', 'VIDEOS', 'MONITORS', 'PRINTERS', 'QUERY', 'RAM', 'SLOTS', 'MODEMS', 'TAG_TIPO_IC_01', 'VIDEOS') ";
sqlHardware += " OR tipo.categoria = " + tipoItemConfiguracao.getCategoria() + ")";
} else {
sqlHardware += "AND (tipo.tagtipoitemconfiguracao LIKE ?";
parametro.add("%" + tipoItemConfiguracao.getTag());
sqlHardware += " OR tipo.categoria = " + tipoItemConfiguracao.getCategoria() + ")";
}
sql.append("SELECT item.iditemconfiguracao, item.datainicio, caracteristica.idcaracteristica, caracteristica.nomecaracteristica, valor.idvalor, valor.valorstr, caracteristica.tagcaracteristica, tipo.tagtipoitemconfiguracao ");
sql.append("FROM itemconfiguracao item ");
sql.append("INNER JOIN tipoitemconfiguracao tipo ON item.idtipoitemconfiguracao = tipo.idtipoitemconfiguracao and (item.datafim is null) ");
sql.append("INNER JOIN tipoitemcfgcaracteristica tipocaracteristica ON tipo.idtipoitemconfiguracao = tipocaracteristica.idtipoitemconfiguracao ");
sql.append("INNER JOIN caracteristica caracteristica ON tipocaracteristica.idcaracteristica = caracteristica.idcaracteristica ");
sql.append("INNER JOIN valor valor ON caracteristica.idcaracteristica = valor.idcaracteristica AND valor.iditemconfiguracao = item.iditemconfiguracao ");
sql.append("WHERE item.iditemconfiguracaopai = ? " + sqlHardware + " ORDER BY tipo.tagtipoitemconfiguracao, item.iditemconfiguracao");
}
/**
*
* Gerar SQL para a consulta de caracter�sticas e seus respectivos valores.
*
* @param itemConfiguracao
* @param tipoItemConfiguracao
* @param sql
* @param parametro
* @author valdoilo.damasceno
* @throws throws Exception
*/
public Collection<ValorDTO> findByItemAndTipoItemConfiguracaoSofware(ItemConfiguracaoDTO itemConfiguracao, TipoItemConfiguracaoDTO tipoItemConfiguracao) throws PersistenceException {
List parametro = new ArrayList();
StringBuilder sql = new StringBuilder();
String sqlSofware = "";
parametro.add(itemConfiguracao.getIdItemConfiguracao());
sqlSofware += "AND (tipo.tagtipoitemconfiguracao LIKE ?";
parametro.add("%" + tipoItemConfiguracao.getTag());
sqlSofware += " OR tipo.categoria = " + tipoItemConfiguracao.getCategoria() + ")";
sql.append("SELECT item.iditemconfiguracao, item.datainicio, caracteristica.idcaracteristica, caracteristica.nomecaracteristica, valor.valorstr, caracteristica.tagcaracteristica, tipo.tagtipoitemconfiguracao ");
sql.append("FROM itemconfiguracao item ");
sql.append("INNER JOIN tipoitemconfiguracao tipo ON item.idtipoitemconfiguracao = tipo.idtipoitemconfiguracao and (item.datafim is null) ");
sql.append("INNER JOIN tipoitemcfgcaracteristica tipocaracteristica ON tipo.idtipoitemconfiguracao = tipocaracteristica.idtipoitemconfiguracao ");
sql.append("INNER JOIN caracteristica caracteristica ON tipocaracteristica.idcaracteristica = caracteristica.idcaracteristica ");
sql.append("INNER JOIN valor valor ON caracteristica.idcaracteristica = valor.idcaracteristica AND valor.iditemconfiguracao = item.iditemconfiguracao ");
sql.append("WHERE item.iditemconfiguracao = ? " + sqlSofware + " AND caracteristica.tagcaracteristica LIKE 'NAME%' ORDER BY item.iditemconfiguracao");
List list = this.execSQL(sql.toString(), parametro.toArray());
Collection<ValorDTO> listCaracteristica = this.engine.listConvertion(this.getBean(), list, this.getListaDeRetornoCaracteristicaValor());
return listCaracteristica;
}
/**
* Monta lista de retorno (idItemConfiguracao, nomeCaracteristica, valorStr, valorDate, dataInicio)
*
* @return List
* @author valdoilo.damasceno
*/
private List getListaDeRetornoCaracteristicaValor() {
List listRetorno = new ArrayList();
listRetorno.add("idItemConfiguracao");
listRetorno.add("dataInicio");
listRetorno.add("idCaracteristica");
listRetorno.add("nomeCaracteristica");
listRetorno.add("idValor");
listRetorno.add("valorStr");
listRetorno.add("tag");
listRetorno.add("tagtipoitemconfiguracao");
return listRetorno;
}
public String getTableName() {
return this.getOwner() + "Valor";
}
public Collection list() throws PersistenceException {
return null;
}
public Class getBean() {
return ValorDTO.class;
}
public Collection find(IDto arg0) throws PersistenceException {
return null;
}
public Collection listByItemConfiguracaoAndTagCaracteristica(Integer idItemConfiguracao, String tag) throws PersistenceException {
String sql = "SELECT " + this.getNamesFieldsStr("valor") + " " +
"FROM valor INNER JOIN caracteristica ON valor.idcaracteristica = caracteristica.idcaracteristica where iditemconfiguracao = ? AND datafim is null " +
"AND tagcaracteristica = ?";
List<?> dados = this.execSQL(sql, new Object[] { idItemConfiguracao, tag });
List<String> fields = this.getListNamesFieldClass();
return this.listConvertion(getBean(), dados, fields);
}
public Collection listUniqueValuesByTagCaracteristica(String tag) throws PersistenceException {
String sql = "";
if(CITCorporeUtil.SGBD_PRINCIPAL.equalsIgnoreCase("mysql")){
sql = "SELECT DISTINCT replace(replace(valorstr,'\\\\\\\\','-'),'\\\\', '-') FROM valor INNER JOIN caracteristica ON valor.idcaracteristica = caracteristica.idcaracteristica where datafim is null AND tagcaracteristica = ? AND valorstr <> '' ORDER BY 1";
}else{
sql = "SELECT DISTINCT replace(replace(valorstr,'\\\\','-'), '\\', '-')FROM valor INNER JOIN caracteristica ON valor.idcaracteristica = caracteristica.idcaracteristica where datafim is null AND tagcaracteristica =? AND valorstr <> '' ORDER BY 1";
}
List<?> dados = this.execSQL(sql, new Object[] { tag });
List<String> fields = new ArrayList();
fields.add("valorStr");
return this.listConvertion(getBean(), dados, fields);
}
}