package br.com.centralit.citcorpore.negocio;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import org.apache.commons.lang.StringEscapeUtils;
import org.apache.commons.lang.StringUtils;
import br.com.centralit.citcorpore.integracao.ExportacaoContratosDao;
import br.com.centralit.citcorpore.metainfo.bean.CamposObjetoNegocioDTO;
import br.com.centralit.citcorpore.metainfo.bean.ObjetoNegocioDTO;
import br.com.centralit.citcorpore.metainfo.negocio.CamposObjetoNegocioService;
import br.com.centralit.citcorpore.metainfo.negocio.ObjetoNegocioService;
import br.com.centralit.citcorpore.metainfo.util.DataBaseMetaDadosUtil;
import br.com.centralit.citcorpore.metainfo.util.MetaUtil;
import br.com.centralit.citcorpore.util.ImportInfoField;
import br.com.centralit.citcorpore.util.ImportInfoRecord;
import br.com.centralit.citcorpore.util.UtilImportData;
import br.com.citframework.excecao.ServiceException;
import br.com.citframework.integracao.JdbcEngine;
import br.com.citframework.service.CrudServiceImpl;
import br.com.citframework.service.ServiceLocator;
import br.com.citframework.util.Constantes;
import br.com.citframework.util.UtilStrings;
@SuppressWarnings({"unchecked", "rawtypes"})
public class ExportacaoContratosServiceEjb extends CrudServiceImpl implements ExportacaoContratosService {
private ExportacaoContratosDao dao;
@Override
protected ExportacaoContratosDao getDao() {
if (dao == null) {
dao = new ExportacaoContratosDao();
}
return dao;
}
/**
* Recupera o objeto negocio utilizando o nome da tabela
*
* @param name
* @return ObjetoNegocioDTO
* @throws Exception
*/
@Override
public ObjetoNegocioDTO restoreByName(final String name) throws Exception {
final ObjetoNegocioService objetoNegocioService = (ObjetoNegocioService) ServiceLocator.getInstance().getService(ObjetoNegocioService.class, null);
return objetoNegocioService.findByNomeObjetoNegocio(name);
}
/**
* Recupera o xml do objeto negocio indicado
*
* @param dbName
* @param filterAditional
* @param fieldValidExistence
* @return String
* @throws Exception
* @author rodrigo.acorse
*/
@Override
public String exportDB(final String dbName, final String filterAditional, final String[] fieldValidExistence, final String[] fieldValidExclusion, final String type)
throws Exception {
final ObjetoNegocioDTO objetoNegocioDto = this.restoreByName(dbName);
if (objetoNegocioDto != null) {
final HashMap<String, String> map = new HashMap<String, String>();
map.put("excluirAoExportar", "N");
map.put("exportarVinculos", "N");
final StringBuilder result = this.geraExportObjetoNegocio(map, objetoNegocioDto.getIdObjetoNegocio(), "", filterAditional, "", fieldValidExistence, fieldValidExclusion,
type);
return result.toString();
} else {
return "";
}
}
/**
* Gera um IN em SQL com os IDs do xml indicado
*
* @param xml
* @param id
* @return String
* @throws Exception
* @author rodrigo.acorse
*/
@Override
public String generateSQLIn(String xml, final String id) throws Exception {
final ArrayList cols = new ArrayList();
final List colRecordsGeral = new ArrayList();
boolean exists;
if (xml != null && !xml.equals("")) {
xml = "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\n<tables origem='0'>\n" + xml + "\n</tables>";
final Collection colRecords = UtilImportData.readXMLSource(xml);
if (colRecords != null) {
colRecordsGeral.addAll(colRecords);
}
for (final Iterator itRecords = colRecordsGeral.iterator(); itRecords.hasNext();) {
final ImportInfoRecord importInfoRecord = (ImportInfoRecord) itRecords.next();
for (final Iterator it = importInfoRecord.getColFields().iterator(); it.hasNext();) {
final ImportInfoField importInfoField = (ImportInfoField) it.next();
if (importInfoField.getNameField().equalsIgnoreCase(id)) {
if (importInfoField.getValueField() != null && !importInfoField.getValueField().equals("") && !importInfoField.getValueField().equals("null")) {
exists = false;
for (int i = 0; i < cols.size(); i++) {
if (cols.get(i).equals(importInfoField.getValueField())) {
exists = true;
}
}
if (!exists) {
cols.add(importInfoField.getValueField());
}
}
}
}
}
}
if (cols.isEmpty()) {
return "";
} else {
return id.toUpperCase() + " IN (" + StringUtils.join(cols.toArray(), ", ") + ") ";
}
}
/**
* Retorna o xml de todas as tabelas
*
* @return String
* @throws Exception
* @author rodrigo.acorse
*/
@Override
public String recuperaXmlTabelas(final Integer idContrato, final Integer[] idGrupos, final String exportarUnidades, final String exportarAcordoNivelServico,
final String exportarCatalogoServico) throws Exception {
try {
// Guarda o xml das tabelas exportadas.
final HashMap<String, String> xmlTabelas = new HashMap<String, String>();
// Guarda o sql utilizado no where para outras tabelas.
final HashMap<String, String> mapSql = new HashMap<String, String>();
mapSql.put("idempresa", " IDEMPRESA = 1 ");
// Inicia a string que receber� o xml final.
final StringBuilder contentXml = new StringBuilder();
if (idGrupos != null) {
// Recupera a tabela grupo com base no idgrupo selecionados.
xmlTabelas.put("grupo",
this.exportDB("grupo", " IDGRUPO IN (" + StringUtils.join(idGrupos, ", ") + ") ", new String[] {"nome"}, new String[] {"datafim"}, "concrete") + "\n");
if (idContrato != null) {
// Recupera a tabela contratosgrupos com base no idgrupo selecionados e no contrato selecionado.
xmlTabelas.put(
"contratosgrupos",
this.exportDB("contratosgrupos", " IDGRUPO IN (" + StringUtils.join(idGrupos, ", ") + ") AND IDCONTRATO = " + idContrato + " ", new String[] {
"idcontrato", "idgrupo"}, null, "relation")
+ "\n");
}
}
if (exportarUnidades != null && exportarUnidades.equalsIgnoreCase("y")) {
if (idContrato != null) {
// Recupera a tabela contratounidades com base no contrato selecionado.
xmlTabelas.put("contratosunidades",
this.exportDB("contratosunidades", " IDCONTRATO = " + idContrato + " ", new String[] {"idcontrato", "idunidade"}, null, "relation") + "\n");
// Monta a clausula where de idunidade recuperados da tabela contratosunidades. ex: idunidade in (1,
// 2).
mapSql.put("idunidade", this.generateSQLIn(xmlTabelas.get("contratosunidades"), "idunidade"));
if (mapSql.get("idunidade") != null && !mapSql.get("idunidade").equals("")) {
// Recupera a tabela unidade com base no idunidade recuperados da tabela contratosunidades.
xmlTabelas.put("unidade", this.exportDB("unidade", mapSql.get("idunidade"), new String[] {"nome"}, new String[] {"datafim"}, "concrete") + "\n");
}
} else {
// Recupera a tabela unidade.
xmlTabelas.put("unidade", this.exportDB("unidade", "", new String[] {"nome"}, new String[] {"datafim"}, "concrete") + "\n");
}
// Monta a clausula where de idendereco recuperados da tabela unidade. ex: idendereco in (1, 2).
mapSql.put("idenderecounidade", this.generateSQLIn(xmlTabelas.get("unidade"), "idendereco"));
// Monta a clausula where de idtipounidade recuperados da tabela unidade. ex: idtipounidade in (1, 2).
mapSql.put("idtipounidade", this.generateSQLIn(xmlTabelas.get("unidade"), "idtipounidade"));
if (mapSql.get("idunidade") != null && !mapSql.get("idunidade").equals("")) {
// Recupera a tabela unidade com base no idunidade recuperados da tabela contratosunidades e
// idunidadepai igual a null.
xmlTabelas.put("unidadepai",
this.exportDB("unidade", mapSql.get("idunidade") + " AND IDUNIDADEPAI IS NULL ", new String[] {"nome"}, new String[] {"datafim"}, "concrete") + "\n");
// Monta a clausula where de idendereco recuperados da tabela unidade. ex: idendereco in (1, 2).
mapSql.put("idenderecounidadepai", this.generateSQLIn(xmlTabelas.get("unidadepai"), "idendereco"));
}
// Recupera a tabela endereco com base no idendereco recuperados da tabela unidade.
if (mapSql.get("idenderecounidade") != null && !mapSql.get("idenderecounidade").equals("") && mapSql.get("idenderecounidadepai") != null
&& !mapSql.get("idenderecounidadepai").equals("")) {
xmlTabelas.put(
"endereco",
this.exportDB("endereco", mapSql.get("idenderecounidade") + " OR " + mapSql.get("idenderecounidadepai"), new String[] {"logradouro", "numero",
"complemento", "bairro", "idcidade", "idpais", "cep", "iduf"}, null, "concrete")
+ "\n");
} else if (mapSql.get("idenderecounidade") != null && !mapSql.get("idenderecounidade").equals("")) {
xmlTabelas.put(
"endereco",
this.exportDB("endereco", mapSql.get("idenderecounidade"), new String[] {"logradouro", "numero", "complemento", "bairro", "idcidade", "idpais", "cep",
"iduf"}, null, "concrete")
+ "\n");
} else if (mapSql.get("idenderecounidadepai") != null && !mapSql.get("idenderecounidadepai").equals("")) {
xmlTabelas.put(
"endereco",
this.exportDB("endereco", mapSql.get("idenderecounidadepai"), new String[] {"logradouro", "numero", "complemento", "bairro", "idcidade", "idpais",
"cep", "iduf"}, null, "concrete")
+ "\n");
}
if (mapSql.get("idtipounidade") != null && !mapSql.get("idtipounidade").equals("")) {
// Recupera a tabela tipounidade com base no idtipounidade recuperados da tabela unidade.
xmlTabelas.put("tipounidade", this.exportDB("tipounidade", mapSql.get("idtipounidade"), new String[] {"nometipounidade"}, new String[] {"datafim"}, "concrete")
+ "\n");
}
}
if (exportarCatalogoServico != null && exportarCatalogoServico.equalsIgnoreCase("y")) {
if (idContrato != null) {
// Recupera a tabela catalogoservico com base no idcontrato selecionado.
xmlTabelas.put(
"catalogoservico",
this.exportDB("catalogoservico", " DATAFIM IS NULL AND IDCONTRATO = " + idContrato + " ", new String[] {"titulocatalogoservico"},
new String[] {"datafim"}, "concrete") + "\n");
// Recupera a tabela servicocontrato com base no idcontrato selecionado.
xmlTabelas.put(
"servicocontrato",
this.exportDB("servicocontrato", " (DELETED IS NULL OR DELETED = 'n' OR DELETED = 'N') AND IDCONTRATO = " + idContrato + " ", new String[] {
"idcontrato", "idservico"}, new String[] {"deleted"}, "concrete")
+ "\n");
// Recupera a tabela servicocontrato com base no idcontrato selecionado.
xmlTabelas.put("servcontratocatalogoserv",
this.exportDB("servcontratocatalogoserv", "", new String[] {"idservicocontrato", "idcatalogoservico"}, null, "relation") + "\n");
// Monta a clausula where de idservicocontrato recuperados da tabela servicocontrato. ex:
// idservicocontrato in (1, 2).
mapSql.put("idservicocontrato", this.generateSQLIn(xmlTabelas.get("servicocontrato"), "idservicocontrato"));
// Monta a clausula where de idservico recuperados da tabela servicocontrato. ex: idservico in (1,
// 2).
mapSql.put("idservico", this.generateSQLIn(xmlTabelas.get("servicocontrato"), "idservico"));
}
// Recupera a tabela servico com base no idservico recuperados da tabela servicocontrato.
xmlTabelas.put("servico", this.exportDB("servico", mapSql.get("idservico"), new String[] {"nomeservico"}, new String[] {"deleted"}, "concrete") + "\n");
// Monta a clausula where de idcategoriaservico recuperados da tabela servico. ex: idcategoriaservico in
// (1, 2).
mapSql.put("idcategoriaservico", this.generateSQLIn(xmlTabelas.get("servico"), "idcategoriaservico"));
// Monta a clausula where de idtiposervico recuperados da tabela servico. ex: idtiposervico in (1, 2).
mapSql.put("idtiposervico", this.generateSQLIn(xmlTabelas.get("servico"), "idtiposervico"));
// Monta a clausula where de idimportancianegocio recuperados da tabela servico. ex:
// idimportancianegocio in (1, 2).
mapSql.put("idimportancianegocio", this.generateSQLIn(xmlTabelas.get("servico"), "idimportancianegocio"));
// Monta a clausula where de idtipoeventoservico recuperados da tabela servico. ex: idtipoeventoservico
// in (1, 2).
mapSql.put("idtipoeventoservico", this.generateSQLIn(xmlTabelas.get("servico"), "idtipoeventoservico"));
// Monta a clausula where de idtipodemandaservico recuperados da tabela servico. ex:
// idtipodemandaservico in (1, 2).
mapSql.put("idtipodemandaservico", this.generateSQLIn(xmlTabelas.get("servico"), "idtipodemandaservico"));
// Monta a clausula where de idlocalexecucaoservico recuperados da tabela servico. ex:
// idlocalexecucaoservico in (1, 2).
mapSql.put("idlocalexecucaoservico", this.generateSQLIn(xmlTabelas.get("servico"), "idlocalexecucaoservico"));
// Monta a clausula where de idsituacaoservico recuperados da tabela servico. ex: idsituacaoservico in
// (1, 2).
mapSql.put("idsituacaoservico", this.generateSQLIn(xmlTabelas.get("servico"), "idsituacaoservico"));
// Recupera a tabela categoriaservico com base no idcategoriaservico recuperados da tabela servico.
xmlTabelas.put("categoriaservico",
this.exportDB("categoriaservico", mapSql.get("idcategoriaservico"), new String[] {"nomecategoriaservicoconcatenado"}, new String[] {"datafim"}, "concrete")
+ "\n");
if (mapSql.get("idcategoriaservico") != null && !mapSql.get("idcategoriaservico").equals("")) {
// Recupera a tabela categoriaservico com base no idcategoriaservico recuperados da tabela servico e
// idcategoriaservicopai igual a null.
xmlTabelas.put(
"categoriaservicopai",
this.exportDB("categoriaservico", mapSql.get("idcategoriaservico") + " AND IDCATEGORIASERVICOPAI IS NULL ",
new String[] {"nomecategoriaservicoconcatenado"}, new String[] {"datafim"}, "concrete") + "\n");
}
if (mapSql.get("idsituacaoservico") != null && !mapSql.get("idsituacaoservico").equals("")) {
// Recupera a tabela situacaoservico com base no idempresa igual a 1 e idsituacaoservico recuperados
// da tabela servico.
xmlTabelas.put(
"situacaoservico",
this.exportDB("situacaoservico", mapSql.get("idempresa") + " AND " + mapSql.get("idsituacaoservico"), new String[] {"nomesituacaoservico"},
new String[] {"datafim"}, "concrete") + "\n");
}
if (mapSql.get("idtiposervico") != null && !mapSql.get("idtiposervico").equals("")) {
// Recupera a tabela tiposervico com base no idempresa igual a 1 e idtiposervico recuperados da
// tabela servico.
xmlTabelas.put(
"tiposervico",
this.exportDB("tiposervico", mapSql.get("idempresa") + " AND " + mapSql.get("idtiposervico"), new String[] {"nometiposervico"},
new String[] {"situacao"}, "concrete") + "\n");
}
if (mapSql.get("idimportancianegocio") != null && !mapSql.get("idimportancianegocio").equals("")) {
// Recupera a tabela importancianegocio com base no idempresa igual a 1 e idimportancianegocio
// recuperados da tabela servico.
xmlTabelas.put(
"importancianegocio",
this.exportDB("importancianegocio", mapSql.get("idempresa") + " AND " + mapSql.get("idimportancianegocio"), new String[] {"nomeimportancianegocio"},
new String[] {"situacao"}, "concrete") + "\n");
}
if (mapSql.get("idtipoeventoservico") != null && !mapSql.get("idtipoeventoservico").equals("")) {
// Recupera a tabela tipoeventoservico com base no idempresa igual a 1 e idtipoeventoservico
// recuperados da tabela servico.
xmlTabelas.put("tipoeventoservico",
this.exportDB("tipoeventoservico", mapSql.get("idtipoeventoservico"), new String[] {"nometipoeventoservico"}, new String[] {"deleted"}, "concrete")
+ "\n");
}
if (mapSql.get("idtipodemandaservico") != null && !mapSql.get("idtipodemandaservico").equals("")) {
// Recupera a tabela tipodemandaservico com base no idempresa igual a 1 e idtipodemandaservico
// recuperados da tabela servico.
xmlTabelas.put("tipodemandaservico",
this.exportDB("tipodemandaservico", mapSql.get("idtipodemandaservico"), new String[] {"nometipodemandaservico"}, new String[] {"deleted"}, "concrete")
+ "\n");
}
if (mapSql.get("idlocalexecucaoservico") != null && !mapSql.get("idlocalexecucaoservico").equals("")) {
// Recupera a tabela localexecucaoservico com base no idempresa igual a 1 e idlocalexecucaoservico
// recuperados da tabela servico.
xmlTabelas.put(
"localexecucaoservico",
this.exportDB("localexecucaoservico", mapSql.get("idlocalexecucaoservico"), new String[] {"nomelocalexecucaoservico"}, new String[] {"deleted"},
"concrete") + "\n");
}
}
if (exportarAcordoNivelServico != null && exportarAcordoNivelServico.equalsIgnoreCase("y")) {
// Recupera a tabela prioridade.
xmlTabelas.put("prioridade", this.exportDB("prioridade", "", new String[] {"nomeprioridade"}, new String[] {"situacao"}, "concrete") + "\n");
if (idContrato != null) {
// Recupera a tabela acordonivelservicocontrato com base no idcontrato selecionado.
xmlTabelas.put(
"acordonivelservicocontrato",
this.exportDB("acordonivelservicocontrato", " (DELETED IS NULL OR DELETED = 'n' OR DELETED = 'N') AND IDCONTRATO = " + idContrato + " ", new String[] {
"idcontrato", "descricaoacordo"}, new String[] {"deleted"}, "concrete")
+ "\n");
if (mapSql.get("idservicocontrato") != null && !mapSql.get("idservicocontrato").equals("")) {
// Recupera a tabela acordonivelservico com base nos idservicocontrato recuperados da tabela
// servicocontrato.
xmlTabelas.put(
"acordonivelservico",
this.exportDB("acordonivelservico", mapSql.get("idservicocontrato"), new String[] {"idservicocontrato", "descricaosla"}, new String[] {"deleted"},
"concrete") + "\n");
// Monta a clausula where de idacordonivelservico recuperados da tabela acordonivelservico. ex:
// idacordonivelservico in (1, 2).
mapSql.put("idacordonivelservico", this.generateSQLIn(xmlTabelas.get("acordonivelservico"), "idacordonivelservico"));
}
if (mapSql.get("idacordonivelservico") != null && !mapSql.get("idacordonivelservico").equals("") && mapSql.get("idservicocontrato") != null
&& !mapSql.get("idservicocontrato").equals("")) {
// Recupera a tabela acordoservicocontrato com base no idacordonivelservico recuperados da
// tabela acordonivelservico e idservicocontrato recuperados da tabela servicocontrato.
xmlTabelas.put(
"acordoservicocontrato",
this.exportDB("acordoservicocontrato", mapSql.get("idacordonivelservico") + " AND " + mapSql.get("idservicocontrato"), new String[] {
"idacordonivelservico", "idservicocontrato"}, new String[] {"deleted"}, "concrete")
+ "\n");
} else if (mapSql.get("idacordonivelservico") != null && !mapSql.get("idacordonivelservico").equals("")) {
// Recupera a tabela acordoservicocontrato com base no idacordonivelservico recuperados da
// tabela acordonivelservico.
xmlTabelas.put(
"acordoservicocontrato",
this.exportDB("acordoservicocontrato", mapSql.get("idacordonivelservico"), new String[] {"idacordonivelservico", "idservicocontrato"},
new String[] {"deleted"}, "concrete") + "\n");
} else if (mapSql.get("idservicocontrato") != null && !mapSql.get("idservicocontrato").equals("")) {
// Recupera a tabela acordoservicocontrato com base no idservicocontrato recuperados da tabela
// servicocontrato.
xmlTabelas.put(
"acordoservicocontrato",
this.exportDB("acordoservicocontrato", mapSql.get("idservicocontrato"), new String[] {"idacordonivelservico", "idservicocontrato"},
new String[] {"deleted"}, "concrete") + "\n");
}
if (mapSql.get("idacordonivelservico") != null && !mapSql.get("idacordonivelservico").equals("") && mapSql.get("idservico") != null
&& !mapSql.get("idservico").equals("")) {
// Recupera a tabela ansservicocontratorelacionado com base no idacordonivelservico recuperados
// da tabela acordonivelservico e idservico recuperados da tabela servicocontrato.
xmlTabelas.put(
"ansservicocontratorelacionado",
this.exportDB("ansservicocontratorelacionado", mapSql.get("idacordonivelservico") + " AND " + mapSql.get("idservico"), new String[] {
"idacordonivelservico", "idservico"}, null, "relation")
+ "\n");
} else if (mapSql.get("idacordonivelservico") != null && !mapSql.get("idacordonivelservico").equals("")) {
// Recupera a tabela ansservicocontratorelacionado com base no idacordonivelservico recuperados
// da tabela acordonivelservico.
xmlTabelas.put(
"ansservicocontratorelacionado",
this.exportDB("ansservicocontratorelacionado", mapSql.get("idacordonivelservico"), new String[] {"idacordonivelservico", "idservico"}, null,
"relation") + "\n");
} else if (mapSql.get("idservico") != null && !mapSql.get("idservico").equals("")) {
// Recupera a tabela ansservicocontratorelacionado com base no idservico recuperados da tabela
// servicocontrato.
xmlTabelas.put("ansservicocontratorelacionado",
this.exportDB("ansservicocontratorelacionado", mapSql.get("idservico"), new String[] {"idacordonivelservico", "idservico"}, null, "relation")
+ "\n");
}
// Recupera a tabela slarequisitosla com base no idacordonivelservico recuperados da tabela
// acordonivelservico.
xmlTabelas.put("slarequisitosla",
this.exportDB("slarequisitosla", mapSql.get("idacordonivelservico"), new String[] {"idacordonivelservico"}, new String[] {"deleted"}, "relation")
+ "\n");
// Recupera a tabela requisitosla.
xmlTabelas.put("requisitosla", this.exportDB("requisitosla", "", new String[] {"assunto"}, new String[] {"deleted"}, "concrete") + "\n");
// Monta a clausula where de idempregado recuperados da tabela requisitosla. ex: idempregado in (1,
// 2).
mapSql.put("idempregado", this.generateSQLIn(xmlTabelas.get("requisitosla"), "idempregado"));
if (mapSql.get("idempregado") != null && !mapSql.get("idempregado").equals("")) {
// Recupera a tabela empregados com base no idempregado recuperados da tabela requisitosla.
xmlTabelas.put("empregados", this.exportDB("empregados", mapSql.get("idempregado"), new String[] {"nomeprocura"}, new String[] {"datafim"}, "concrete")
+ "\n");
}
} else {
// Recupera a tabela acordonivelservico com idservicocontrato igual a null.
xmlTabelas.put("acordonivelservico",
this.exportDB("acordonivelservico", " IDSERVICOCONTRATO is NULL ", new String[] {"descricaosla"}, new String[] {"deleted"}, "concrete") + "\n");
}
}
// Adiciona o topo do xml final.
contentXml.append("<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\n");
if (idContrato != null) {
contentXml.append("<tables origem='0' filter='" + idContrato + "'>\n");
} else {
contentXml.append("<tables origem='0' filter=''>\n");
}
// Adiciona tabelas no xml final.
if (xmlTabelas.get("grupo") != null) {
contentXml.append(xmlTabelas.get("grupo"));
}
if (xmlTabelas.get("contratosgrupos") != null) {
contentXml.append(xmlTabelas.get("contratosgrupos"));
}
if (xmlTabelas.get("tipounidade") != null) {
contentXml.append(xmlTabelas.get("tipounidade"));
}
if (xmlTabelas.get("endereco") != null) {
contentXml.append(xmlTabelas.get("endereco"));
}
if (xmlTabelas.get("unidadepai") != null) {
contentXml.append(xmlTabelas.get("unidadepai"));
}
if (xmlTabelas.get("unidade") != null) {
contentXml.append(xmlTabelas.get("unidade"));
}
if (xmlTabelas.get("contratosunidades") != null) {
contentXml.append(xmlTabelas.get("contratosunidades"));
}
if (xmlTabelas.get("localexecucaoservico") != null) {
contentXml.append(xmlTabelas.get("localexecucaoservico"));
}
if (xmlTabelas.get("tipodemandaservico") != null) {
contentXml.append(xmlTabelas.get("tipodemandaservico"));
}
if (xmlTabelas.get("tipoeventoservico") != null) {
contentXml.append(xmlTabelas.get("tipoeventoservico"));
}
if (xmlTabelas.get("importancianegocio") != null) {
contentXml.append(xmlTabelas.get("importancianegocio"));
}
if (xmlTabelas.get("tiposervico") != null) {
contentXml.append(xmlTabelas.get("tiposervico"));
}
if (xmlTabelas.get("situacaoservico") != null) {
contentXml.append(xmlTabelas.get("situacaoservico"));
}
if (xmlTabelas.get("categoriaservicopai") != null) {
contentXml.append(xmlTabelas.get("categoriaservicopai"));
}
if (xmlTabelas.get("categoriaservico") != null) {
contentXml.append(xmlTabelas.get("categoriaservico"));
}
if (xmlTabelas.get("servico") != null) {
contentXml.append(xmlTabelas.get("servico"));
}
if (xmlTabelas.get("servicocontrato") != null) {
contentXml.append(xmlTabelas.get("servicocontrato"));
}
if (xmlTabelas.get("catalogoservico") != null) {
contentXml.append(xmlTabelas.get("catalogoservico"));
}
if (xmlTabelas.get("servcontratocatalogoserv") != null) {
contentXml.append(xmlTabelas.get("servcontratocatalogoserv"));
}
if (xmlTabelas.get("empregados") != null) {
contentXml.append(xmlTabelas.get("empregados"));
}
if (xmlTabelas.get("requisitosla") != null) {
contentXml.append(xmlTabelas.get("requisitosla"));
}
if (xmlTabelas.get("prioridade") != null) {
contentXml.append(xmlTabelas.get("prioridade"));
}
if (xmlTabelas.get("acordonivelservico") != null) {
contentXml.append(xmlTabelas.get("acordonivelservico"));
}
if (xmlTabelas.get("acordoservicocontrato") != null) {
contentXml.append(xmlTabelas.get("acordoservicocontrato"));
}
if (xmlTabelas.get("ansservicocontratorelacionado") != null) {
contentXml.append(xmlTabelas.get("ansservicocontratorelacionado"));
}
if (xmlTabelas.get("slarequisitosla") != null) {
contentXml.append(xmlTabelas.get("slarequisitosla"));
}
// Adiciona o rodap� do xml final.
contentXml.append("\n</tables>");
return StringEscapeUtils.escapeHtml(contentXml.toString());
} catch (final Exception e) {
e.printStackTrace();
return null;
}
}
/**
* Gera o XML do objeto negocio indicado
*
* @param hashValores
* @param idObjetoNegocio
* @param sqlDelete
* @param filterAditional
* @param order
* @return StringBuilder
* @throws ServiceException
* @throws Exception
*/
@Override
public StringBuilder geraExportObjetoNegocio(final HashMap hashValores, final Integer idObjetoNegocio, String sqlDelete, final String filterAditional, final String order,
final String[] fieldValidExistence, final String[] fieldValidExclusion, final String type) throws ServiceException, Exception {
final CamposObjetoNegocioService camposObjetoNegocioService = (CamposObjetoNegocioService) ServiceLocator.getInstance().getService(CamposObjetoNegocioService.class, null);
final ObjetoNegocioService objetoNegocioService = (ObjetoNegocioService) ServiceLocator.getInstance().getService(ObjetoNegocioService.class, null);
ObjetoNegocioDTO objetoNegocioDTO = new ObjetoNegocioDTO();
objetoNegocioDTO.setIdObjetoNegocio(idObjetoNegocio);
objetoNegocioDTO = (ObjetoNegocioDTO) objetoNegocioService.restore(objetoNegocioDTO);
final Collection col = camposObjetoNegocioService.findByIdObjetoNegocio(idObjetoNegocio);
String sqlCondicao = "";
String sqlCampos = "";
final String excluirAoExportar = (String) hashValores.get("excluirAoExportar".toUpperCase());
// Antes de fazer a exportacao, faz o sincronismo com o DB, pois pode estar desatualizado!
final DataBaseMetaDadosUtil dataBaseMetaDadosUtil = new DataBaseMetaDadosUtil();
dataBaseMetaDadosUtil.sincronizaObjNegDB(objetoNegocioDTO.getNomeTabelaDB(), false);
System.out.println("Sincronizando tabela: " + objetoNegocioDTO.getNomeTabelaDB());
hashValores.put("NOMETABELADB", objetoNegocioDTO.getNomeTabelaDB());
String tabelasTratadas = (String) hashValores.get("TABELASTRATADAS");
tabelasTratadas = UtilStrings.nullToVazio(tabelasTratadas);
tabelasTratadas = tabelasTratadas + "'" + objetoNegocioDTO.getNomeTabelaDB() + "'";
hashValores.put("TABELASTRATADAS", tabelasTratadas);
if (col != null) {
for (final Iterator it = col.iterator(); it.hasNext();) {
final CamposObjetoNegocioDTO camposObjetoNegocioDto = (CamposObjetoNegocioDTO) it.next();
if (!sqlCampos.trim().equalsIgnoreCase("")) {
sqlCampos += ",";
}
sqlCampos = sqlCampos + camposObjetoNegocioDto.getNomeDB();
final String cond = (String) hashValores.get("COND_" + camposObjetoNegocioDto.getIdCamposObjetoNegocio());
String valor = (String) hashValores.get("VALOR_" + camposObjetoNegocioDto.getIdCamposObjetoNegocio());
if (!UtilStrings.nullToVazio(cond).trim().equalsIgnoreCase("") && !UtilStrings.nullToVazio(valor).trim().equalsIgnoreCase("")) {
sqlCondicao = sqlCondicao + " " + camposObjetoNegocioDto.getNomeDB();
if (cond != null && cond.equalsIgnoreCase("1")) {
sqlCondicao = sqlCondicao + " <> ";
} else if (cond != null && cond.equalsIgnoreCase("2")) {
sqlCondicao = sqlCondicao + " > ";
} else if (cond != null && cond.equalsIgnoreCase("3")) {
sqlCondicao = sqlCondicao + " < ";
} else {
sqlCondicao = sqlCondicao + " " + cond + " ";
}
final boolean isStringType = MetaUtil.isStringType(camposObjetoNegocioDto.getTipoDB());
if (isStringType) {
if (cond.equalsIgnoreCase("=") || cond.equalsIgnoreCase("1") || cond.equalsIgnoreCase("2") || cond.equalsIgnoreCase("3")) {
valor = valor.replaceAll("'", "");
valor = "'" + valor + "'";
}
}
if (cond != null && !cond.trim().equalsIgnoreCase("IS NULL")) {
sqlCondicao = sqlCondicao + valor;
}
}
}
}
String sqlFinal = "SELECT " + sqlCampos + " FROM " + objetoNegocioDTO.getNomeTabelaDB();
sqlDelete = "DELETE FROM " + objetoNegocioDTO.getNomeTabelaDB();
if (!sqlCondicao.trim().equalsIgnoreCase("")) {
if (filterAditional != null && !filterAditional.trim().equalsIgnoreCase("")) {
sqlFinal = sqlFinal + " WHERE " + sqlCondicao + " AND (" + filterAditional + ")";
sqlDelete = sqlDelete + " WHERE " + sqlCondicao + " AND (" + filterAditional + ")";
} else {
sqlFinal = sqlFinal + " WHERE " + sqlCondicao;
sqlDelete = sqlDelete + " WHERE " + sqlCondicao;
}
} else {
if (filterAditional != null && !filterAditional.trim().equalsIgnoreCase("")) {
sqlFinal = sqlFinal + " WHERE (" + filterAditional + ")";
sqlDelete = sqlDelete + " WHERE (" + filterAditional + ")";
}
}
if (order != null && !order.trim().equalsIgnoreCase("")) {
sqlFinal += " ORDER BY " + order;
}
String sqlDeleteAux = (String) hashValores.get("COMMANDDELETE");
String sqlExportAux = (String) hashValores.get("COMMAND");
if (!UtilStrings.nullToVazio(sqlDeleteAux).trim().equalsIgnoreCase("")) {
sqlDeleteAux = sqlDelete + "; " + UtilStrings.nullToVazio(sqlDeleteAux);
} else {
sqlDeleteAux = sqlDelete;
}
if (!UtilStrings.nullToVazio(sqlExportAux).trim().equalsIgnoreCase("")) {
sqlExportAux = sqlFinal + "; " + UtilStrings.nullToVazio(sqlExportAux);
} else {
sqlExportAux = sqlFinal;
}
hashValores.put("COMMANDDELETE", sqlDeleteAux);
hashValores.put("COMMAND", sqlExportAux);
final JdbcEngine jdbcEngine = new JdbcEngine(Constantes.getValue("DATABASE_ALIAS"), null);
List lst = null;
try {
lst = jdbcEngine.execSQL(sqlFinal, null, 0);
} catch (final Exception e) {
e.printStackTrace();
return new StringBuilder("OCORREU ERRO NA GERACAO DOS DADOS!" + e.getMessage());
}
final StringBuilder strXML = new StringBuilder();
strXML.append("<table name='" + objetoNegocioDTO.getNomeTabelaDB() + "' type='" + type + "'>\n");
strXML.append("<command><![CDATA[" + sqlFinal + "]]></command>\n");
if (excluirAoExportar != null && excluirAoExportar.equalsIgnoreCase("S")) {
strXML.append("<commandDelete><![CDATA[" + sqlDelete + "]]></commandDelete>\n");
} else {
strXML.append("<commandDelete>NONE</commandDelete>\n");
}
if (lst != null) {
int j = 0;
for (final Iterator itDados = lst.iterator(); itDados.hasNext();) {
final Object[] obj = (Object[]) itDados.next();
int i = 0;
j++;
strXML.append("<record number='" + j + "'>\n");
for (final Iterator it = col.iterator(); it.hasNext();) {
final CamposObjetoNegocioDTO camposObjetoNegocioDto = (CamposObjetoNegocioDTO) it.next();
final boolean isStringType = MetaUtil.isStringType(camposObjetoNegocioDto.getTipoDB());
String key = "n";
if (camposObjetoNegocioDto.getPk() != null && camposObjetoNegocioDto.getPk().equalsIgnoreCase("S")) {
key = "y";
}
String sequence = "n";
if (camposObjetoNegocioDto.getSequence() != null && camposObjetoNegocioDto.getSequence().equalsIgnoreCase("S")) {
sequence = "y";
}
String check = "n";
if (fieldValidExistence != null) {
for (final String s : fieldValidExistence) {
if (camposObjetoNegocioDto.getNome().equalsIgnoreCase(s)) {
check = "y";
}
}
}
String exclusion = "n";
if (fieldValidExclusion != null) {
for (final String s : fieldValidExclusion) {
if (camposObjetoNegocioDto.getNome().equalsIgnoreCase(s)) {
exclusion = "y";
}
}
}
strXML.append("<field name='" + camposObjetoNegocioDto.getNomeDB() + "' key='" + key + "' sequence='" + sequence + "' check='" + check + "' exclusion='"
+ exclusion + "' type='" + camposObjetoNegocioDto.getTipoDB().trim() + "'>");
if (isStringType) {
strXML.append("<![CDATA[");
}
if (objetoNegocioDTO.getNomeTabelaDB().equalsIgnoreCase("ACORDONIVELSERVICO")
&& (camposObjetoNegocioDto.getNomeDB().equalsIgnoreCase("CRIADOEM") || camposObjetoNegocioDto.getNomeDB().equalsIgnoreCase("MODIFICADOEM"))
&& obj[i] == null) {
strXML.append("0000-00-00 00:00:00");
} else {
strXML.append(obj[i]);
}
if (isStringType) {
strXML.append("]]>");
}
strXML.append("</field>\n");
i++;
}
strXML.append("</record>\n");
}
}
strXML.append("</table>\n");
return strXML;
}
}