maia_modificado/.svn/pristine/c7/c75cd551af442972823091b2498...

179 lines
6.6 KiB
Plaintext
Executable File
Raw Permalink Blame History

package com.fp.bpm.actions;
import java.math.BigDecimal;
import java.sql.Date;
import java.sql.SQLException;
import java.util.List;
import org.apache.commons.lang.time.StopWatch;
import com.fp.bpm.ActionExecutor;
import com.fp.bpm.helper.TransactionTime;
import com.fp.bpm.query.QueryProcessor;
import com.fp.common.exception.APPException;
import com.fp.common.exception.ExceptionHandler;
import com.fp.common.fin.MessageGenerator;
import com.fp.common.logger.APPLogger;
import com.fp.dto.Request;
import com.fp.dto.Response;
import com.fp.dto.data.SaveData;
import com.fp.dto.helper.FileHelper;
import com.fp.dto.json.Serializer;
import com.fp.dto.query.QueryRequest;
import com.fp.general.exception.GeneralException;
import com.fp.persistence.commondb.helper.FormatDates;
/**
* Clase que se encarga del manejo de querys en la aplicacion
*/
public class QueryAction extends ActionExecutor {
/**
* Metodo que ejecuta el jason enviado desde la web
*
* @param pRequest Json que viaja desde la aplicacion
* @return
* @throws Exception
*/
@Override
public String execute(String pRequest, List<FileHelper> fileItem) throws Exception {
Serializer ser = new Serializer(pRequest);
QueryRequest qr = (QueryRequest) ser.toObject(QueryRequest.class);
Response res = new Response(Response.RESPONSE_OK, "OK");
// fija numero de mensaje
MessageGenerator mg = MessageGenerator.getInstance();
qr.setJournalId(mg.generateId(qr.getUser()));
// Log de transaccion
super.request = qr;
// fija transaccion original
super.fillOriginalTransaction();
super.requestToLog();
// fin log transaccion
// Inicializa datos para el log de la transaccion.
this.fillThreadData(pRequest);
if (TransactionTime.verifyTransactionTime(null, qr)) {
qr.setResponse(res);
QueryProcessor qp = new QueryProcessor();
qp.process(qr);
} else {
res = new Response("CORE-005", "TRANSACCION FUERA DE HORARIO: " + qr.getTransactionModule() + " TRANSACCION: " + qr.getTransactionCode()
+ " VERSION: " + qr.getTransactionVersion());
}
// res.changeAbstractBeanToMap();
ser = new Serializer(res);
return ser.toJSON();
}
/**
* Metodo que almacena en SaveData, los datos del saverequest de entrada.
*
* @throws Exception
*/
private void fillThreadData(String pData) throws Exception {
// Inicializa el thread local.
SaveData.setSaveRequest(null);
// Almacena string de datos de entrada en el thread local, se utiliza para llenar
if (SaveData.getOriginalString() == null) {
// En producccion se almacena en el EngineExecutor
SaveData.setOriginalString(pData);
}
}
public Object process(Request request) throws Exception {
Response response = new Response(Response.RESPONSE_OK, "OK");
StopWatch sw = null;
boolean error = false;
try {
sw = new StopWatch();
sw.start();
this.execute(request, response);
sw.stop();
} catch (Throwable e) {
error = true;
try {
if (sw != null) {
sw.stop();
}
} catch (IllegalStateException e1) {
// o hacer nada el stopwatch ya esta detenido
}
this.fillError(e, response);
//retorn excepcion para que no haga commit el ejb querybean
throw e;
} finally {
try {
if (!error) {
super.saveLog(this.getTime(sw), "Q");
} else {
super.saveLogWithCommit(this.getTime(sw), "Q", response.getResponseCode(),
response.getResponseUserMessage(), null, null);
}
} catch (Exception e2) {
APPLogger.getLogger().error("ERROR GRABANDO LOG AUDITORIA \n");
}
}
return response;
}
private void execute(Request request, Response response) throws Exception {
QueryRequest qr = new QueryRequest();
request.copy(qr);
request.copyMapValues(qr);
qr.setQueryTables(request.getQueryTables());
qr.setJsf(true);
qr.setResponse(response);
qr.putAll(request.getModifiedData()); //campos del request codigo de consuta.
// fija numero de mensaje
MessageGenerator mg = MessageGenerator.getInstance();
qr.setJournalId(mg.generateId(qr.getUser()));
// Log de transaccion
super.request = qr;
// fija transaccion original
super.fillOriginalTransaction();
super.requestToLog();
// fin log transaccion
if (TransactionTime.verifyTransactionTime(null, qr)) {
QueryProcessor qp = new QueryProcessor();
qp.process(qr);
} else {
throw new GeneralException("CORE-0054", "TRANSACCI<43>N FUERA DE HORARIO MODULO: {0} TRANSACCI<43>N: {1} VERSI<53>N: {2}", qr.getTransactionModule(),
qr.getTransactionCode(), qr.getTransactionVersion());
}
}
/**
* Obtiene el tiempo de respuesta resultado de la ejecucion de una transaccion.
*
* @param sw Objeto que contiene el tiempo de ejecucion de una transaccion.
* @return BigDecimal
* @throws Exception
*/
private BigDecimal getTime(StopWatch sw) throws Exception {
Date d = new Date(sw.getTime());
return new BigDecimal(FormatDates.getInstance().getTimeInSeconds().format(d));
}
private void fillError(Throwable e,Response response) throws Exception {
ExceptionHandler eh = new ExceptionHandler(e, "es");
APPLogger.getLogger().error("User Message:==>\n" + eh.getUserMessage());
response.setResponseCode(eh.getCode());
response.setResponseUserMessage(eh.getUserMessage());
response.setIsAplicationMessage(eh.isAppexception());
if ((e instanceof APPException) || (e instanceof SQLException)) {
response.setResponseStack(eh.getTechnicalMessage());
} else {
response.setResponseStack( eh.getStackTrace().length() > 1536 ? eh.getStackTrace().substring(0, 1536) : eh.getStackTrace());
APPLogger.getLogger().error("StackTrace:==>" + response.getResponseStack());
}
}
}