package br.com.cafebinario.servlet;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.log4j.Logger;
import br.com.cafebinario.parse.FieldParser;
import br.com.cafebinario.properties.AppProperties;
import br.com.cafebinario.report.IReport;
import br.com.cafebinario.report.ReportFactory;
import br.com.cafebinario.shared.ExecutionContex;
import br.com.cafebinario.transport.GenericFilter;
import br.com.cafebinario.workflow.IWorkflow;
import br.com.cafebinario.workflow.Result;
import br.com.cafebinario.workflow.WorkFlowLoader;
@WebServlet(value = "/ProcessRouter")
public class ProcessRouter extends HttpServlet {
private static Logger LOG = Logger.getLogger(ProcessRouter.class);
private static final long serialVersionUID = 1L;
private FieldParser fp = new FieldParser();
public ProcessRouter() {
}
@Override
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
LOG.debug("HTTP METHOD GET");
execute(request, response);
}
@Override
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
LOG.debug("HTTP METHOD POST");
execute(request, response);
}
private void execute(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
LOG.debug("Inicio da execucao");
try {
GenericFilter parameter = fp.parse(request);
String[] designer = AppProperties.instanceOf()
.getProperty(parameter.getInterfaceType()).split("[,]");
String wfStr = designer[0];
String rptStr = designer[1];
IWorkflow wf = WorkFlowLoader.getInstance().loader(wfStr);
wf.setParameter(parameter);
ExecutionContex executionContex = ExecutionContex.getInstance();
executionContex.putAll(request.getParameterMap());
Result result = wf.execute(executionContex);
IReport report = ReportFactory.getInstance().getReport(rptStr);
report.execute(result, executionContex);
} catch (IllegalArgumentException e) {
LOG.error("argumentos ilegais", e);
} catch (SecurityException e) {
LOG.error("problemas de seguran�a", e);
} catch (IllegalAccessException e) {
LOG.error("tantativa de acesso ilegal", e);
} catch (InvocationTargetException e) {
LOG.error("alvo invocado com problemas", e);
} catch (NoSuchMethodException e) {
LOG.error("metodo procurado nao encontrado", e);
e.printStackTrace();
} catch (Exception e) {
LOG.error("problema durante a execucao", e);
} finally {
LOG.debug("Termino da Execu��o");
}
}
}