package br.com.centralit.citcorpore.bi.operation;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.net.ConnectException;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Iterator;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.ws.rs.core.MediaType;
import org.apache.commons.io.FileUtils;
import org.apache.commons.lang.StringEscapeUtils;
import org.apache.http.NoHttpResponseException;
import org.jboss.resteasy.client.ClientRequest;
import org.jboss.resteasy.client.ClientResponse;
import br.com.centralit.citcorpore.bean.BICitsmartResultRotinaDTO;
import br.com.centralit.citcorpore.bean.ConexaoBIDTO;
import br.com.centralit.citcorpore.bean.LogImportacaoBIDTO;
import br.com.centralit.citcorpore.bi.utils.BICitsmartUtils;
import br.com.centralit.citcorpore.metainfo.util.MetaUtil;
import br.com.centralit.citcorpore.negocio.ConexaoBIService;
import br.com.centralit.citcorpore.negocio.LogImportacaoBIService;
import br.com.centralit.citcorpore.util.Enumerados;
import br.com.centralit.citcorpore.util.ImportInfoField;
import br.com.centralit.citcorpore.util.ImportInfoRecord;
import br.com.centralit.citcorpore.util.ParametroUtil;
import br.com.centralit.citcorpore.util.UtilImportData;
import br.com.centralit.citsmart.rest.schema.BICitsmart;
import br.com.centralit.citsmart.rest.schema.BICitsmartResp;
import br.com.centralit.citsmart.rest.schema.BICitsmartRespDeserializer;
import br.com.centralit.citsmart.rest.schema.CtLoginResp;
import br.com.citframework.excecao.ConnectionException;
import br.com.citframework.excecao.PersistenceException;
import br.com.citframework.excecao.TransactionOperationException;
import br.com.citframework.integracao.JdbcEngine;
import br.com.citframework.integracao.TransactionControlerImpl;
import br.com.citframework.service.ServiceLocator;
import br.com.citframework.util.Constantes;
import br.com.citframework.util.UtilDatas;
import br.com.citframework.util.UtilI18N;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonIOException;
import com.google.gson.JsonSyntaxException;
import com.google.gson.stream.JsonReader;
@SuppressWarnings({ "rawtypes", "unchecked" })
public class BICitsmartOperation {
/**
* Executa a rotina automatica para recuperar as tabelas e gravar no BI do Citsmart
*
* @param conexaoBIDTO
* @param idProcessamentoBatch
* @return BICitsmartResultRotinaDTO
* @throws Exception
* @author rodrigo.acorse
*/
public BICitsmartResultRotinaDTO execucaoRotinaAutomatica(ConexaoBIDTO conexaoBIDTO, final Integer idProcessamentoBatch) throws Exception {
BICitsmartResultRotinaDTO resultRotina = new BICitsmartResultRotinaDTO();
resultRotina.setResultado(true);
LogImportacaoBIDTO logImportacaoBI = new LogImportacaoBIDTO();
logImportacaoBI.setDataHoraInicio(new Timestamp(new java.util.Date().getTime()));
try {
if (conexaoBIDTO == null) {
resultRotina.setResultado(false);
resultRotina.concatMensagem("As informa��es da conex�o n�o foram preenchidas corretamente para a execu��o da rotina autom�tica!");
} else {
if (conexaoBIDTO.getIdConexaoBI() == null) {
resultRotina.setResultado(false);
resultRotina.concatMensagem("Conex�o BI n�o encontrada!");
}
}
if (resultRotina.isResultado()) {
if (conexaoBIDTO.getTipoImportacao() == null || conexaoBIDTO.getTipoImportacao().equalsIgnoreCase("A")) {
if (!conexaoBIDTO.getLink().equals("") && !conexaoBIDTO.getLogin().equals("") && !conexaoBIDTO.getSenha().equals("")) {
resultRotina = rotinaAutoBICitsmart(conexaoBIDTO.getIdConexaoBI(), conexaoBIDTO.getLink(), conexaoBIDTO.getLogin(), conexaoBIDTO.getSenha());
} else {
resultRotina.setResultado(false);
resultRotina.concatMensagem("As informa��es da conex�o n�o foram preenchidas corretamente para a execu��o da rotina autom�tica!");
}
} else {
resultRotina.setResultado(false);
resultRotina.concatMensagem("A execu��o da rotina autom�tica est� desativada!");
}
}
} catch (Exception e) {
e.printStackTrace();
resultRotina.setResultado(false);
resultRotina.concatMensagem("- Falha na rotina autom�tica (Falha)");
} catch (Error e) {
e.printStackTrace();
resultRotina.setResultado(false);
resultRotina.concatMensagem("- Falha na rotina autom�tica (Erro)");
} finally {
logImportacaoBI.setDataHoraFim(new Timestamp(System.currentTimeMillis()));
if (idProcessamentoBatch != null) {
logImportacaoBI.concatDetalhamento("Importa��o Autom�tica BI Citsmart (via Agendamento).");
logImportacaoBI.concatDetalhamento("Processo: " + idProcessamentoBatch);
} else {
logImportacaoBI.concatDetalhamento("Importa��o Autom�tica BI Citsmart (via op��o Executar Agora).");
}
logImportacaoBI.concatDetalhamento(resultRotina.getMensagem());
if (resultRotina.isResultado()) {
final Timestamp dataHoraExecucao = new Timestamp(System.currentTimeMillis());
// Atualiza a data da �ltima importa��o
conexaoBIDTO.setDataHoraUltimaImportacao(dataHoraExecucao);
logImportacaoBI.concatDetalhamento("Execu��o realizada com sucesso!");
logImportacaoBI.setStatus("S");
} else {
logImportacaoBI.concatDetalhamento("Falha na execu��o da rotina!");
logImportacaoBI.setStatus("F");
}
// Grava o log da importa��o
logImportacaoBI.setTipo("A");
logImportacaoBI.setIdConexaoBI(conexaoBIDTO.getIdConexaoBI());
final LogImportacaoBIService logImportacaoBIService = (LogImportacaoBIService) ServiceLocator.getInstance().getService(LogImportacaoBIService.class, null);
logImportacaoBIService.create(logImportacaoBI);
// Atualiza o status integra��o da Conex�o BI
conexaoBIDTO.setStatus(logImportacaoBI.getStatus());
final ConexaoBIService conexaoBIService = (ConexaoBIService) ServiceLocator.getInstance().getService(ConexaoBIService.class, null);
conexaoBIService.update(conexaoBIDTO);
}
return resultRotina;
}
/**
* Executa a rotina de acesso ao webservice do cliente do BI Citsmart indicado
*
* @param url
* @param usuario
* @param senha
* @param tipo
* @return BICitsmartResultRotinaDTO
* @throws Exception
* @author rodrigo.acorse
*/
public BICitsmartResultRotinaDTO rotinaAutoBICitsmart(final Integer idConexao, String url, final String usuario, final String senha) throws Exception {
BICitsmartResultRotinaDTO resultRotina = new BICitsmartResultRotinaDTO();
resultRotina.setResultado(false);
BICitsmart biCitsmart = new BICitsmart();
if (!url.substring(url.length() - 1).equals("/")) {
url += "/";
}
try {
final URL urlTest = new URL(url);
final URLConnection conn = urlTest.openConnection();
conn.connect();
BICitsmartResultRotinaDTO autenticacao = BICitsmartUtils.autenticacaoComJSON(url, usuario, senha);
if (autenticacao.isResultado()) {
biCitsmart.setSessionID(autenticacao.getSessionID());
ClientRequest request = new ClientRequest(url + "services/bicitsmart/recuperarTabelas");
String biCitsmartJson = new Gson().toJson(biCitsmart);
request.body(MediaType.APPLICATION_JSON, biCitsmartJson);
request.accept(MediaType.APPLICATION_JSON);
final ClientResponse<String> response = request.post(String.class);
if (response != null && response.getStatus() != 200) {
BICitsmartResp resp = new BICitsmartResp();
GsonBuilder gb = new GsonBuilder();
gb.registerTypeAdapter(BICitsmartResp.class, new BICitsmartRespDeserializer());
Gson gson = gb.create();
InputStream ioos = new ByteArrayInputStream(response.getEntity().getBytes("UTF-8"));
JsonReader reader = new JsonReader(new InputStreamReader(ioos, "UTF-8"));
resp = gson.fromJson(reader, BICitsmartResp.class);
if (resp != null && resp.getError().getDescription() != null && !resp.getError().getDescription().equals("")) {
resultRotina.concatMensagem("- Estabelecimento da conex�o: " + response.getStatus() + " - " + resp.getError().getDescription() + " (Falha) ");
} else {
resultRotina.concatMensagem("- Estabelecimento da conex�o HTTP (Falha): Erro " + response.getStatus());
}
} else {
resultRotina.concatMensagem("- Estabelecimento da conex�o HTTP (OK)");
resultRotina.concatMensagem(autenticacao.getMensagem());
final String xmlString = StringEscapeUtils.unescapeHtml(response.getEntity());
final BICitsmartResultRotinaDTO resultPersistencia = this.persisteDadosBICitsmart(idConexao, xmlString, false);
if (resultPersistencia.isResultado()) {
resultRotina.setResultado(true);
}
resultRotina.concatMensagem(resultPersistencia.getMensagem());
}
} else {
resultRotina.concatMensagem(autenticacao.getMensagem());
}
} catch (MalformedURLException murle) {
murle.printStackTrace();
resultRotina.concatMensagem("- Valida��o de URL (Falha)");
} catch (NoHttpResponseException nhttpe) {
nhttpe.printStackTrace();
resultRotina.concatMensagem("- URL sem resposta (Falha)");
} catch (JsonIOException jio) {
jio.printStackTrace();
resultRotina.concatMensagem("- JSON erro de IO (Falha)");
} catch (JsonSyntaxException jsyn) {
jsyn.printStackTrace();
resultRotina.concatMensagem("- JSON sintaxe incorreta (Falha)");
} catch (IOException e) {
resultRotina.concatMensagem("- Estabelecimento da conex�o (Falha)");
} catch (Exception e) {
e.printStackTrace();
resultRotina.concatMensagem("- Falha na rotina autom�tica (Falha)");
} catch (Error e) {
e.printStackTrace();
resultRotina.concatMensagem("- Falha na rotina autom�tica (Erro)");
}
return resultRotina;
}
/**
* Executa o teste de acesso ao webservice do cliente do BI Citsmart indicado
*
* @param url
* @param usuario
* @param senha
* @return BICitsmartResultRotinaDTO
* @throws Exception
* @author rodrigo.acorse
*/
public BICitsmartResultRotinaDTO testeConexaoClienteBICitsmart(final HttpServletRequest req, final Integer idConexaoBI, String url, final String usuario, final String senha) throws Exception {
BICitsmartResultRotinaDTO resultRotina = new BICitsmartResultRotinaDTO();
resultRotina.setResultado(false);
LogImportacaoBIDTO logImportacaoBI = new LogImportacaoBIDTO();
try {
final String input = "{\"userName\":\"" + usuario + "\",\"password\":\"" + senha + "\"}";
logImportacaoBI.setDataHoraInicio(new Timestamp(new java.util.Date().getTime()));
logImportacaoBI.setStatus("F");
if (!url.substring(url.length() - 1).equals("/")) {
url += "/";
}
final URL urlTest = new URL(url);
final URLConnection conn = urlTest.openConnection();
conn.connect();
ClientRequest request = new ClientRequest(url + "services/login");
request.accept(MediaType.APPLICATION_JSON);
request.body(MediaType.APPLICATION_JSON, input);
final ClientResponse<String> response = request.post(String.class);
if (response != null && response.getStatus() != 200) {
final CtLoginResp resp = new Gson().fromJson(response.getEntity(), CtLoginResp.class);
if (resp != null && resp.getError().getDescription() != null && !resp.getError().getDescription().equals("")) {
resultRotina.concatMensagem(UtilI18N.internacionaliza(req, "conexaoBI.testeConexaoErroFalhaConexao") + " " + resp.getError().getDescription());
} else {
resultRotina.concatMensagem(UtilI18N.internacionaliza(req, "conexaoBI.testeConexaoErroFalhaHTTP"));
}
} else {
resultRotina.concatMensagem(UtilI18N.internacionaliza(req, "conexaoBI.testeConexaoSucesso"));
logImportacaoBI.setStatus("S");
resultRotina.setResultado(true);
}
} catch (final MalformedURLException e) {
resultRotina.concatMensagem(UtilI18N.internacionaliza(req, "conexaoBI.testeConexaoErroUrlInvalida"));
} catch (ConnectException e) {
resultRotina.concatMensagem(UtilI18N.internacionaliza(req, "conexaoBI.testeConexaoFalhaConexaoNegada"));
} catch (final IOException e) {
resultRotina.concatMensagem(UtilI18N.internacionaliza(req, "conexaoBI.testeConexaoErroConexaoNaoEstabelecida"));
} catch (JsonSyntaxException e) {
resultRotina.concatMensagem(UtilI18N.internacionaliza(req, "conexaoBI.testeConexaoErroFalhaHTTP"));
} catch (Exception ex) {
ex.printStackTrace();
resultRotina.concatMensagem(UtilI18N.internacionaliza(req, "Exce��o identificada (FALHA)"));
} catch (Error e) {
e.printStackTrace();
resultRotina.concatMensagem(UtilI18N.internacionaliza(req, "MSE02"));
} finally {
// Grava o log da importa��o.
logImportacaoBI.setDataHoraFim(new Timestamp(System.currentTimeMillis()));
logImportacaoBI.concatDetalhamento(resultRotina.getMensagem());
logImportacaoBI.setTipo("T");
logImportacaoBI.setIdConexaoBI(idConexaoBI);
final LogImportacaoBIService logImportacaoBIService = (LogImportacaoBIService) ServiceLocator.getInstance().getService(LogImportacaoBIService.class, null);
logImportacaoBIService.create(logImportacaoBI);
}
return resultRotina;
}
/**
* Executa a exporta��o manual das tabelas do BI do Citsmart
*
* @param path
* @return boolean
* @throws Exception
* @author rodrigo.acorse
*/
public boolean exportacaoManualBICitsmart(String path) throws Exception {
boolean resultado = true;
try {
final String idConexaoBI = ParametroUtil.getValorParametroCitSmartHashMap(Enumerados.ParametroSistema.BICITSMART_ID_CONEXAO, "");
if (idConexaoBI == null || idConexaoBI.equals("")) {
resultado = false;
} else {
final String xmlString = StringEscapeUtils.unescapeHtml(BICitsmartUtils.recuperaXmlTabelasBICitsmart(true));
if ((xmlString != null) && (xmlString.length() > 0)) {
if (!path.substring(path.length() - 1).equals("/")) {
path += "/";
}
final Calendar c = Calendar.getInstance();
// Utiliza o caminho do Parametro "BI Citsmart - Caminho exporta��o manual" e concatena com o nome do arquivo.
path = path + "bi_citsmart_exportacao_" + idConexaoBI + "_" + UtilDatas.getDataAtual() + "_" + c.get(Calendar.HOUR_OF_DAY) + "h" + c.get(Calendar.MINUTE) + ".xml";
File file = new File(path);
Writer out = new OutputStreamWriter(new FileOutputStream(file), "ISO-8859-1");
out.write(xmlString);
out.close();
} else {
resultado = false;
}
}
} catch (Exception ex) {
ex.printStackTrace();
resultado = false;
} catch (Error e) {
e.printStackTrace();
resultado = false;
}
return resultado;
}
/**
* Executa a exporta��o manual das tabelas do BI do Citsmart
*
* @param path
* @return boolean
* @throws Exception
* @author rodrigo.acorse
*/
public BICitsmartResultRotinaDTO exportacaoManualDownloadBICitsmart() throws Exception {
BICitsmartResultRotinaDTO resultRotina = new BICitsmartResultRotinaDTO();
try {
final String idConexaoBI = ParametroUtil.getValorParametroCitSmartHashMap(Enumerados.ParametroSistema.BICITSMART_ID_CONEXAO, "");
if (idConexaoBI == null || idConexaoBI.equals("")) {
resultRotina.setResultado(false);
resultRotina.setMensagem("Par�metro ID Conex�o BI n�o informado.");
} else {
final String xmlString = StringEscapeUtils.unescapeHtml(BICitsmartUtils.recuperaXmlTabelasBICitsmart(true));
resultRotina.setResultado(true);
resultRotina.setMensagem(xmlString);
}
} catch (Exception ex) {
ex.printStackTrace();
resultRotina.setResultado(false);
resultRotina.setMensagem("MSG01");
} catch (Error e) {
e.printStackTrace();
resultRotina.setResultado(false);
resultRotina.setMensagem("MSG01");
}
return resultRotina;
}
/**
* Executa a importa��o manual das tabelas do BI do Citsmart
*
* @param idConexao
* @param xmlPath
* @return boolean
* @throws Exception
* @author rodrigo.acorse
*/
public boolean importacaoManualBICitsmart(final Integer idConexao, final String xmlPath) throws Exception {
String xmlSource = "";
boolean resultado = false;
LogImportacaoBIDTO logImportacaoBI = new LogImportacaoBIDTO();
logImportacaoBI.setDataHoraInicio(new Timestamp(new java.util.Date().getTime()));
logImportacaoBI.setStatus("F");
logImportacaoBI.clear();
try {
xmlSource = FileUtils.readFileToString(new File(xmlPath), "ISO-8859-1");
if (!xmlSource.equals("")) {
BICitsmartResultRotinaDTO resultPersistencia = this.persisteDadosBICitsmart(idConexao, xmlSource, true);
logImportacaoBI.concatDetalhamento("Importa��o Manual BI Citsmart.");
logImportacaoBI.concatDetalhamento(resultPersistencia.getMensagem());
if (resultPersistencia.isResultado()) {
logImportacaoBI.concatDetalhamento("Importa��o realizada com sucesso!");
logImportacaoBI.setStatus("S");
resultado = true;
} else {
logImportacaoBI.concatDetalhamento("Falha na execu��o da importa��o manual!");
}
} else {
logImportacaoBI.concatDetalhamento("- Leitura do XML (Falha)");
}
} catch (IOException e) {
e.printStackTrace();
logImportacaoBI.concatDetalhamento("- Convers�o do XML (Falha)");
} catch (Exception ex) {
ex.printStackTrace();
logImportacaoBI.concatDetalhamento("Exce��o identificada (FALHA)");
} catch (Error e) {
e.printStackTrace();
logImportacaoBI.concatDetalhamento("Erro identificado (ERRO)");
} finally {
// Grava o log da importa��o.
logImportacaoBI.setDataHoraFim(new Timestamp(System.currentTimeMillis()));
logImportacaoBI.setTipo("M");
logImportacaoBI.setIdConexaoBI(idConexao);
final LogImportacaoBIService logImportacaoBIService = (LogImportacaoBIService) ServiceLocator.getInstance().getService(LogImportacaoBIService.class, null);
logImportacaoBIService.create(logImportacaoBI);
// Atualiza status da Conex�o BI
ConexaoBIDTO conexaoBIDTO = new ConexaoBIDTO();
conexaoBIDTO.setIdConexaoBI(idConexao);
final ConexaoBIService conexaoBIService = (ConexaoBIService) ServiceLocator.getInstance().getService(ConexaoBIService.class, null);
conexaoBIDTO = (ConexaoBIDTO) conexaoBIService.restore(conexaoBIDTO);
conexaoBIDTO.setStatus(logImportacaoBI.getStatus());
if (resultado) {
conexaoBIDTO.setDataHoraUltimaImportacao(logImportacaoBI.getDataHoraInicio());
}
conexaoBIService.update(conexaoBIDTO);
}
return resultado;
}
/**
* Executa a persistencia dos dados para o BI do Citsmart
*
* @param idConexao
* @param xml
* @return BICitsmartResultRotinaDTO
* @author rodrigo.acorse
* @throws ConnectionException
* @throws TransactionOperationException
*/
public BICitsmartResultRotinaDTO persisteDadosBICitsmart(Integer idConexao, String xml, boolean xmlComIdConexao) throws PersistenceException {
BICitsmartResultRotinaDTO resultRotina = new BICitsmartResultRotinaDTO();
TransactionControlerImpl transactionControler = new TransactionControlerImpl(Constantes.getValue("DATABASE_BI_ALIAS"));
// euler.ramos
// Declarando vari�veis que ser�o utilizadas na itera��o e, como s�o em sucessivas execu��es, estavam onerando o Garbage Collection nas Declara��es sucessivas
ImportInfoRecord importInfoRecord;
StringBuilder sqlInsert = new StringBuilder();
StringBuilder sqlInsertFields = new StringBuilder();
StringBuilder sqlInsertValues = new StringBuilder();
StringBuilder sqlUpdate = new StringBuilder();
StringBuilder sqlUpdateFields = new StringBuilder();
StringBuilder sqlSelect = new StringBuilder();
StringBuilder sqlWhere = new StringBuilder();
List colRecordsGeral;
List lstParmsInsert = new ArrayList();
List lstParmsUpdate = new ArrayList();
List lstParmsWhere = new ArrayList();
List lst = new ArrayList();
ImportInfoField importInfoField;
String nomePrimeiroCampo;
String typeDB;
String field;
String fieldValue;
resultRotina.setResultado(true);
try {
// Obtendo objetos das tabelas e seus registros no XML
colRecordsGeral = UtilImportData.readXMLSource(xml);
transactionControler.start();
JdbcEngine jdbcEngine = new JdbcEngine(Constantes.getValue("DATABASE_BI_ALIAS"), null);
jdbcEngine.setTransactionControler(transactionControler);
for (Iterator itRecords = colRecordsGeral.iterator(); itRecords.hasNext();) {
importInfoRecord = (ImportInfoRecord) itRecords.next();
if ((importInfoRecord.getTableName() != null) && (importInfoRecord.getTableName().trim().length() > 0)) {
sqlInsertFields.delete(0, sqlInsertFields.length());
sqlInsertValues.delete(0, sqlInsertValues.length());
sqlUpdateFields.delete(0, sqlUpdateFields.length());
sqlSelect.delete(0, sqlSelect.length());
sqlWhere.delete(0, sqlWhere.length());
lstParmsInsert.clear();
lstParmsUpdate.clear();
lstParmsWhere.clear();
nomePrimeiroCampo = "";
for (Iterator it = importInfoRecord.getColFields().iterator(); it.hasNext();) {
importInfoField = (ImportInfoField) it.next();
typeDB = importInfoField.getType();
field = importInfoField.getNameField();
fieldValue = importInfoField.getValueField();
if (field.equalsIgnoreCase("IDCONEXAOBI") && Integer.parseInt(fieldValue) != idConexao) {
transactionControler.rollback();
resultRotina.setResultado(false);
resultRotina.concatMensagem("- Persist�ncia de dados (Falha): O ID da conex�o no xml n�o corresponde a conex�o selecionada.");
break;
} else {
/*
* Rodrigo Pecci Acorse - 03/01/2014 10h15 - #128776 Remove o .000 dos campos num�ricos para que a persist�ncia seja feita corretamente.
*/
if (importInfoField.getType().startsWith("NUMERIC")) {
if (fieldValue.indexOf(".000") > -1 && fieldValue.indexOf(".000") == fieldValue.length() - 4) {
fieldValue = fieldValue.substring(0, fieldValue.length() - 4);
}
}
if (nomePrimeiroCampo.trim().equalsIgnoreCase("")) {
nomePrimeiroCampo = field;
}
if (sqlInsertFields.length() > 0) {
sqlInsertFields.append(",");
}
sqlInsertFields.append(field);
if (sqlInsertValues.length() > 0) {
sqlInsertValues.append(",");
}
sqlInsertValues.append("?");
if (importInfoField.isKey()) {
if (sqlWhere.length() > 0) {
sqlWhere.append(" AND ");
}
sqlWhere.append(field).append(" = ?");
if (typeDB.startsWith("MONEY") || typeDB.startsWith("DOUBLE") || typeDB.startsWith("DECIMAL") || typeDB.startsWith("NUMERIC") || typeDB.startsWith("NUMBER")
|| typeDB.startsWith("REAL") || typeDB.startsWith("FLOAT")) {
lstParmsWhere.add(fieldValue);
} else {
lstParmsWhere.add(MetaUtil.convertType(importInfoField.getType(), fieldValue, null, null));
}
} else {
if (sqlUpdateFields.length() > 0) {
sqlUpdateFields.append(",");
}
sqlUpdateFields.append(field).append(" = ?");
if (importInfoField.getValueField().trim().equalsIgnoreCase("null")) {
lstParmsUpdate.add(null);
} else {
if (typeDB.startsWith("MONEY") || typeDB.startsWith("DOUBLE") || typeDB.startsWith("DECIMAL") || typeDB.startsWith("NUMERIC") || typeDB.startsWith("NUMBER")
|| typeDB.startsWith("REAL") || typeDB.startsWith("FLOAT")) {
lstParmsUpdate.add(fieldValue);
} else {
lstParmsUpdate.add(MetaUtil.convertType(importInfoField.getType(), fieldValue, null, null));
}
}
}
if (importInfoField.getValueField().trim().equalsIgnoreCase("null")) {
lstParmsInsert.add(null);
} else {
if (typeDB.startsWith("MONEY") || typeDB.startsWith("DOUBLE") || typeDB.startsWith("DECIMAL") || typeDB.startsWith("NUMERIC") || typeDB.startsWith("NUMBER")
|| typeDB.startsWith("REAL") || typeDB.startsWith("FLOAT")) {
lstParmsInsert.add(fieldValue);
} else {
lstParmsInsert.add(MetaUtil.convertType(importInfoField.getType(), fieldValue, null, null));
}
}
}
}
if (resultRotina.isResultado()) {
if (!xmlComIdConexao) {
// Seta o IDCONEXAOBI para o Insert
if (sqlInsertFields.length() > 0) {
sqlInsertFields.append(",");
}
sqlInsertFields.append("IDCONEXAOBI");
if (sqlInsertValues.length() > 0) {
sqlInsertValues.append(",");
}
sqlInsertValues.append("?");
lstParmsInsert.add(idConexao);
// Seta o IDCONEXAOBI para o Select
if (sqlWhere.length() > 0) {
sqlWhere.append(" AND ");
}
sqlWhere.append("IDCONEXAOBI = ?");
lstParmsWhere.add(idConexao);
}
lstParmsUpdate.addAll(lstParmsWhere);
// Monta select final
sqlSelect.append("SELECT ").append(nomePrimeiroCampo).append(" FROM ").append(importInfoRecord.getTableName()).append(" WHERE ").append(sqlWhere);
lst.clear();
lst = jdbcEngine.execSQL(sqlSelect.toString(), lstParmsWhere.toArray(), 0);
if (lst == null || lst.size() == 0) {
if (sqlInsertFields.length() > 0 && sqlInsertValues.length() > 0) {
sqlInsert.delete(0, sqlInsert.length());
sqlInsert.append("INSERT INTO ").append(importInfoRecord.getTableName()).append("(").append(sqlInsertFields.toString()).append(") VALUES (")
.append(sqlInsertValues.toString()).append(")");
jdbcEngine.execUpdate(sqlInsert.toString(), lstParmsInsert.toArray());
}
} else {
if (sqlUpdateFields.length() > 0 && sqlWhere.length() > 0) {
sqlUpdate.delete(0, sqlUpdate.length());
sqlUpdate.append("UPDATE ").append(importInfoRecord.getTableName()).append(" SET ").append(sqlUpdateFields.toString()).append(" WHERE ").append(sqlWhere.toString());
jdbcEngine.execUpdate(sqlUpdate.toString(), lstParmsUpdate.toArray());
}
}
}
}
}
if (resultRotina.isResultado()) {
transactionControler.commit();
}
} catch (PersistenceException e) {
e.printStackTrace();
resultRotina.setResultado(false);
resultRotina.concatMensagem("- Persist�ncia de dados (Falha).");
resultRotina.concatMensagem("INSERT: " + sqlInsert.toString() + " - " + lstParmsInsert);
resultRotina.concatMensagem("UPDATE: " + sqlUpdate.toString() + " - " + lstParmsUpdate);
resultRotina.concatMensagem("SELECT: " + sqlSelect.toString() + " - " + lstParmsWhere);
return resultRotina;
} catch (OutOfMemoryError ome) {
resultRotina.setResultado(false);
resultRotina.concatMensagem("- Out of memory error (ERRO)");
if (transactionControler.isStarted()) {
transactionControler.rollback();
}
ome.printStackTrace();
} catch (Exception ex) {
resultRotina.setResultado(false);
resultRotina.concatMensagem("- Falha na Persist�ncia de dados (FALHA)");
if (transactionControler.isStarted()) {
transactionControler.rollback();
}
ex.printStackTrace();
} catch (Error e) {
e.printStackTrace();
resultRotina.setResultado(false);
resultRotina.concatMensagem("- Erro na Persist�ncia de dados (ERRO)");
} finally {
try {
if (transactionControler.isStarted()) {
transactionControler.close();
}
} catch (PersistenceException e) {
e.printStackTrace();
}
}
if (resultRotina.isResultado()) {
resultRotina.concatMensagem("- Persist�ncia de dados (OK)");
}
return resultRotina;
}
}