package com.FitBank.web.util; import com.FitBank.web.servlet.Escanear.ImagenEscaneada; import java.io.Serializable; import java.rmi.server.UID; import java.util.ArrayList; import java.util.List; import java.util.ResourceBundle; import java.util.Vector; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; import com.FitBank.common.Base64OutputStream; import com.FitBank.common.Debug; import com.FitBank.ebusiness.delegate.ConnectBusiness; import com.FitBank.ebusiness.delegate.ConnectBusinessEJB; import com.FitBank.ebusiness.delegate.InstancerConnect; import com.FitBank.exception.FitConnectException; import com.FitBank.exception.FitDynamicInstancerException; import com.FitBank.web.servlet.Escanear; import com.FitBank.xml.Formas.ArbolBloques; import com.FitBank.xml.Formas.Datos; import com.FitBank.xml.Formas.FBloque; import com.FitBank.xml.Formas.Fila; import com.FitBank.xml.Formas.Formulario; import com.FitBank.xml.Formas.Oculto; import com.FitBank.xml.Mensaje.Bloque; import com.FitBank.xml.Mensaje.Campo; import com.FitBank.xml.Mensaje.DatoGeneral; import com.FitBank.xml.Mensaje.MensajeXml; import com.FitBank.xml.Parser.ParserFormulario; import com.FitBank.xml.Parser.ParserMensaje; import com.fitbank.common.crypto.Decrypt; import com.fitbank.common.properties.PropertiesHandler; import java.util.Comparator; import java.util.Map; import java.util.SortedSet; import java.util.TreeSet; /** * Esta clase contiene la administración de la clase ProcesarXml Métodos que * trabajan sobre los atributos. * * @author FitBank */ public class EjecutarEventos implements Serializable, Cloneable { /** Define obtener un formulario. */ public static final String ACCION_OBTENER_FORMULARIO = "R"; /** Define el envio de un formulario. */ public static final String ACCION_ENVIAR_MENSAJE = "S"; /** Define la carga de un formulario en la aplicación. */ private static final String CADUCIDAD = "CAD"; private static final String HISTORICO = "HIS"; private static final String CONSULTA = "CON"; private static final String ESPECIAL = "ESP"; /** Define los tipos de lectura de imagen */ public static final int IMAGEN_LECT_NORMAL = 0; public static final int IMAGEN_MAX_PAGINA = 1; public static final int IMAGEN_FILESYS_CORE = 2; private List listaCamposMensajes = new ArrayList(); /** * Atributo que utilizan los Métodos de la clase para referenciar las * operaciones. */ public ProcesarXml procesoXml = new ProcesarXml(); /** * Atributo que contiene el formulario listo para ser enviado al cliente e * incluye la sección de cálculos. */ protected String formulario = ""; /** Contiene true si ya se consultó el bloque activo de maestroDetalle. */ private boolean obviarResultado = false; /** * @return the listaCamposMensajes */ public List getListaCamposMensajes() { return listaCamposMensajes; } /** * @param listaCamposMensajes the listaCamposMensajes to set */ public void setListaCamposMensajes(List listaCamposMensajes) { this.listaCamposMensajes = listaCamposMensajes; } /** * @param listaCamposMensajes the listaCamposMensajes to set */ public void colocarListaCamposMensajesSesion(HttpServletRequest pedido) { HttpSession sesion = pedido.getSession(); sesion.setAttribute("listaCamposMensajes", this.listaCamposMensajes); } /** * Método que retorna el objeto Formulario de la clase String. * * @return Objeto que contiene el formulario en formato de cadena. */ public String getHtmlFormulario() { return formulario; } /** * Seteo del objeto de la clase String que contiene el Formulario. * * @param formulario * Objeto que tiene la cadena con el nuevo formulario. */ public void setHtmlFormulario(String formulario) { this.formulario = formulario; } /** * Seteo del objeto de la clase String que contiene el Formulario. * * @param formulario * Objeto que tiene la cadena con el nuevo formulario. */ public void cargarFormulario(HttpServletRequest pedido) { } /** * Método que permite obtener el código de usuario de la cabecera del * mensaje. * * @return Cadena con el Código de usuario */ public String getUsuario() { return procesoXml.getXmlMensaje().getValor("USR", MensajeXml.SEC_CAB); } /** * Método que permite obtener el código de compania de la cabecera del * mensaje. * * @return Cadena con el Código de compania */ public String getCompania() { return procesoXml.getXmlMensaje().getValor("CIO", MensajeXml.SEC_CAB); } /** * Método que permite obtener el código de idioma de la cabecera del * mensaje. * * @return Cadena con el Código de idioma */ public String getIdioma() { return procesoXml.getXmlMensaje().getValor("IDM", MensajeXml.SEC_CAB); } /** * Método que permite obtener el código de subsistema de la cabecera del * mensaje. * * @return Cadena con el Código de subsistema */ public String getSubsistema() { return procesoXml.getXmlMensaje().getValor("SUB", MensajeXml.SEC_CAB); } /** * Método que permite obtener el código de transacción de la cabecera del * mensaje. * * @return Cadena con el Código de transacción */ public String getTransaccion() { return procesoXml.getXmlMensaje().getValor("TRN", MensajeXml.SEC_CAB); } /** * Método que permite obtener la fecha contable de la cabecera del mensaje. * * @return Cadena con la fecha contable */ public String getFechaContable() { return procesoXml.getXmlMensaje().getValor("FCN", MensajeXml.SEC_CAB); } /** * Método que permite obtener el número de registros existentes de un * bloque, utilizado en el proceso de reportes en formato PDF. * * @param numeroBloque * Número de bloque del cual se desea obtener el número de * registros * * @return el número de registros de un bloque */ public int getNroRegistrosBloque(int numeroBloque) { try { Bloque bloque = (Bloque) procesoXml.getXmlMensaje().detalle[0].get(numeroBloque); return bloque.getNroRegistros(); } catch (Exception e) { Debug.imprimirError(e); return -1; } } /** * Método que contiene la lógica, para la conexión con la capa de * administración del acceso al repositorio persitente. * * @param accion * Objeto que en una cadena textual indica la acción que debe * realizarce al conectar el Repositorio. * @param pedido * Pedido que viene del browser * @param tipoConeccion * Implementación * * @return boolean que contiene la inidicación de éxito o fracaso de la * acción del Método. */ protected boolean conectarBusiness(String accion, HttpServletRequest pedido, String tipoConeccion) { HttpSession session = pedido.getSession(); procesoXml.getXmlMensaje().setValor("MSG", new UID().toString(), MensajeXml.SEC_CAB); if (accion.equals(EjecutarEventos.ACCION_OBTENER_FORMULARIO)) { session.setAttribute("TIP_MEN", procesoXml.getXmlMensaje().getTipo()); return obtenerFormulario(pedido); } else if (accion.equals(EjecutarEventos.ACCION_ENVIAR_MENSAJE)) { session.setAttribute("TIP_MEN", procesoXml.getXmlMensaje().getTipo()); return enviarMensaje(pedido, tipoConeccion); } return false; } /** * Método que permite enviar el mensaje al repositorio persitente y devulve * el String con el mensaje de repuesta. * * @param request * Objeto que contiene la petición del cliente browser * @param message * Objeto que contiene como String el mensaje XML de petición al * Servidor de Persistencia. * * @return Objeto que contiene a manera de String en mensaje de respuesta. */ protected String conectarBusiness(HttpServletRequest request, String message) { HttpSession session = request.getSession(); try { ConnectBusiness connectBusiness = decidirImplementacion(InstancerConnect.IND_EJB); session.setAttribute("TIP_MEN", procesoXml.getXmlMensaje().getTipo()); return connectBusiness.connectToBusiness(request, message); } catch (FitConnectException e) { Debug.imprimirError(e); } return ""; } /** * Método que realiza la instanciación de ConnectBusiness, con la * implementación que corresponda según el parámetro enviado. * * @param paramImplement * Objeto que contiene la indicación de que implementación de la * interface darle al objeto a retornar. * * @return Objeto que depende del parámetro de envío. */ protected ConnectBusiness decidirImplementacion(String paramImplement) { ConnectBusiness connectBusiness; InstancerConnect instancer = new InstancerConnect(); try { connectBusiness = instancer.instanceOfConnectBusiness(paramImplement); } catch (FitDynamicInstancerException e) { Debug.imprimirError(e); connectBusiness = null; } return connectBusiness; } /** * Método que conecta con el repositorio persitente trabaja sobre el * atributo de la clase, enviando y seteando el formulario. * * @param request * Pedido que viene del browser * * @return Devuelve un objeto que indica si fue exitoso el proceso ejecutado * dentro del Método. */ protected boolean obtenerFormulario(HttpServletRequest request) { String menString = ""; ConnectBusiness conn = decidirImplementacion(InstancerConnect.IND_EJB); procesoXml.setXmlFormulario(new Formulario()); try { procesoXml.getXmlMensaje().setResultado(null); procesoXml.getXmlMensaje().borrarResultado(); menString = conn.connectToBusiness(request, procesoXml.getXmlMensaje().toString()); } catch (FitConnectException e) { Debug.imprimirError(e); return false; } try { procesoXml.setXmlFormulario(ParserFormulario.parseString(menString)); procesoXml.getXmlMensaje().setValor("COD", "00005", MensajeXml.SEC_RES); procesoXml.getXmlMensaje().setValor("DSC", "Formulario Cargado: OK.", MensajeXml.SEC_RES); return true; } catch (Exception e) { Debug.imprimirError("El formulario no existe"); } try { MensajeXml men = ParserMensaje.parseString(menString); DatoGeneral codRes = men.getObjeto("COD", MensajeXml.SEC_RES, 0); DatoGeneral desRes = men.getObjeto("DSC", MensajeXml.SEC_RES, 0); procesoXml.getXmlMensaje().setValor(codRes, MensajeXml.SEC_RES); procesoXml.getXmlMensaje().setValor(desRes, MensajeXml.SEC_RES); return true; } catch (Exception e) { Debug.imprimirError(e); return false; } } /** * Método que conecta con la EJB Tier trabaja sobre el atributos de la * clase, enviando y seteando el mensaje. * * @param pedido * Pedido que viene del browser * @param implementacion * Parametro que indica que implementación usar * * @return Devuelve un objeto que indica si fue exitoso el proceso ejecutado * dentro del Método. */ protected boolean enviarMensaje(HttpServletRequest pedido, String implementacion) { String res = ""; ConnectBusiness conn = decidirImplementacion(implementacion); MensajeXml men; try { res = conn.connectToBusiness(pedido, procesoXml.getXmlMensaje().toString()); } catch (Exception e) { Debug.imprimirError(e); return false; } try { men = ParserMensaje.parseString(res); procesoXml.getXmlMensaje().borrarDetalle(0); procesoXml.getXmlMensaje().setDetalle(men.detalle[0], 0); if (!obviarResultado) { procesoXml.getXmlMensaje().setResultado(men.resultado); } if (procesoXml.getXmlMensaje().esNuevo()) { procesoXml.getXmlMensaje().setEncabezado(men.encabezado); } procesoXml.getXmlMensaje().setValor("CAD", "0", MensajeXml.SEC_CAB); procesoXml.getXmlMensaje().setValor("HIS", "0", MensajeXml.SEC_CAB); procesoXml.getXmlMensaje().setValor("PDF", "0", MensajeXml.SEC_CAB); procesoXml.getXmlMensaje().setValor("ALL", "0", MensajeXml.SEC_CAB); } catch (Exception e) { Debug.imprimirError(e); return false; } return true; } /** * Método que permite la conexión con la EJB Tier para la carga de un * formulario de la aplicación. * * @param pedido * Objeto que contiene la petición * @param formulario * String con el formulario * * @return booleano indicando el resultado */ protected boolean subirFormulario(HttpServletRequest pedido, String formulario) { String menString = ""; ConnectBusiness conn = new ConnectBusinessEJB(); MensajeXml men = new MensajeXml(); try { procesoXml.getXmlMensaje().borrarResultado(); menString = conn.connectToBusiness(pedido, formulario); } catch (Exception e) { Debug.imprimirError(e); return false; } try { men = ParserMensaje.parseString(menString); procesoXml.getXmlMensaje().borrarDetalle(0); procesoXml.getXmlMensaje().borrarResultado(); procesoXml.getXmlMensaje().setDetalle(men.detalle[0], 0); procesoXml.getXmlMensaje().setResultado(men.resultado); if (procesoXml.getXmlMensaje().esNuevo()) { procesoXml.getXmlMensaje().setEncabezado(men.encabezado); } } catch (Exception e) { Debug.imprimirError(e); return false; } return true; } /** * Método que identifica si el mensaje que FIT-BANK esta trabajando poseen * en la cabecera un token de seguridad. * * @return Objeto que indica el tipo de Connection que requiere hacer * FIT-BANK con los mensajes. */ protected String identificarMensaje() { String token = null; String connectionType = ""; try { token = procesoXml.getXmlMensaje().getValor("TOK", MensajeXml.SEC_CAB); } catch (Exception e) { Debug.imprimirError(e); } if ((token == null) || token.equals("")) { connectionType = InstancerConnect.IND_EJB; } else { connectionType = InstancerConnect.IND_BPS; } return connectionType; } /** * Método que envía el mensaje de SIGON al sistema de recepción de mensajes * y setea el mensaje de retorno. * * @param request * Petición del cliente browser * * @return Devuelve un objeto que indica si fue exitoso el proceso ejecutado * dentro del Método. */ public boolean obtenerCompanias(HttpServletRequest request) { String connectionType = identificarMensaje(); procesoXml.getXmlMensaje().borrarDetalle(); procesoXml.getXmlMensaje().borrarResultado(); return conectarBusiness(EjecutarEventos.ACCION_ENVIAR_MENSAJE, request, connectionType); } /** * Método que envía el mensaje que se requiere para obtener los susbistemas * a los que un usuario en una compañía origen puede trabajar. * * @param request * Petición del cliente browser * * @return Devuelve un objeto que indica si fue exitoso el proceso ejecutado * dentro del Método. */ public boolean obtenerSubsistemas(HttpServletRequest request) { String connectionType = identificarMensaje(); procesoXml.getXmlMensaje().borrarDetalle(); procesoXml.getXmlMensaje().borrarResultado(); return conectarBusiness(EjecutarEventos.ACCION_ENVIAR_MENSAJE, request, connectionType); } /** * Método que envía el mensaje que se requiere para obtener las * transacciones a los que un usuario en una compañía origen y un subsistema * puede trabajar. * * @param request * Petición del cliente browser * * @return Devuelve un objeto que indica si fue exitoso el proceso ejecutado * dentro del Método. */ public boolean obtenerTransacciones(HttpServletRequest request) { String connectionType = identificarMensaje(); procesoXml.getXmlMensaje().borrarDetalle(); procesoXml.getXmlMensaje().borrarResultado(); return conectarBusiness(EjecutarEventos.ACCION_ENVIAR_MENSAJE, request, connectionType); } /** * Método que identifica si el sistema debe conectarse al sistema de * seguridad del Banco del Pacífico o a su propio esquema de EJB's. * * @param request * Objeto que posee la petición del cliente browser */ public void obtenerTransaccion(HttpServletRequest request) { String connectionType = identificarMensaje(); if (connectionType.equals(InstancerConnect.IND_BPS)) { obtenerTransaccionBPS(request); } else if (connectionType.equals(InstancerConnect.IND_EJB)) { obtenerTransaccionEJB(request); } } /** * Método que se ejecuta cuando el sistema esta interactuando con el sistema * de seguridad externo y verifica el acceso a la transacción y si existe * acceso a la transacción pide el formulario correspondiente a esa * transacción. * * @param request * Objeto que posee la petición del cliente browser. */ protected void obtenerTransaccionBPS(HttpServletRequest request) { procesoXml.getXmlMensaje().borrarResultado(); procesoXml.getXmlMensaje().borrarDetalle(); conectarBusiness(EjecutarEventos.ACCION_ENVIAR_MENSAJE, request, InstancerConnect.IND_BPS); if (procesoXml.getXmlMensaje().getValor("COD", MensajeXml.SEC_RES).equalsIgnoreCase("0")) { obtenerTransaccionEJB(request); } } /** * Método que se ejecuta cuando un el sistema interactúa con el propio * sistema de seguridad. * * @param request * Objeto que posee la petición del cliente browser. */ protected void obtenerTransaccionEJB(HttpServletRequest request) { procesoXml.getXmlMensaje().borrarDetalle(); procesoXml.getXmlMensaje().borrarResultado(); conectarBusiness(EjecutarEventos.ACCION_OBTENER_FORMULARIO, request, InstancerConnect.IND_EJB); } /** * Método que envía el Mensaje al repositorio, recoge la respuesta en el * mensaje y llena de retorno y llena el Formulario. * * @param pedido * Pedido que viene del browser * * @return Devuelve un objeto que indica si fue exitoso el proceso ejecutado * dentro del Método. */ public boolean ejecutarConsulta(HttpServletRequest pedido) { obviarResultado = false; if (procesoXml.getXmlFormulario().esMaestroDetalle()) { procesoXml.actualizarArbolBloques(pedido); int ba = Integer.parseInt(pedido.getParameter("qzBloqueActivo")); procesoXml.getXmlFormulario().getArbolBloques().setBloqueActivo(ba); return ejecutarConsultaMaestroDetalle(pedido, ba); } else if (pedido.getParameter("consNotif") != null && pedido.getParameter("consNotif").equals("true")) { ResourceBundle webProp = ResourceBundle.getBundle("webapp"); procesoXml.getXmlMensaje().setTipo(MensajeXml.TIP_CON); procesoXml.getXmlMensaje().setValor("SUB", webProp.getString("notifSubsist"), MensajeXml.SEC_CAB); procesoXml.getXmlMensaje().setValor("TRN", webProp.getString("notifTransac"), MensajeXml.SEC_CAB); procesoXml.getXmlMensaje().setValor("VER", webProp.getString("notifVersion"), MensajeXml.SEC_CAB); procesoXml.armarMensajeConsultaNotificaciones(pedido); conectarBusiness(EjecutarEventos.ACCION_ENVIAR_MENSAJE, pedido, InstancerConnect.IND_EJB); return true; } else if (pedido.getParameter("consMensajesUsuario") != null && pedido.getParameter("consMensajesUsuario").equals("true")) { if (pedido.getAttribute("tipoMensajeUsuario") != null) { String tipo = pedido.getAttribute("tipoMensajeUsuario").toString(); ResourceBundle webProp = ResourceBundle.getBundle("webapp"); procesoXml.getXmlMensaje().setTipo(MensajeXml.TIP_CON); procesoXml.getXmlMensaje().setValor("SUB", webProp.getString("mensajesUsuarioSubsist"), MensajeXml.SEC_CAB); procesoXml.getXmlMensaje().setValor("TRN", webProp.getString("mensajesUsuarioTransac"), MensajeXml.SEC_CAB); procesoXml.getXmlMensaje().setValor("VER", webProp.getString("mensajesUsuarioVersion"), MensajeXml.SEC_CAB); if (tipo.equalsIgnoreCase("persona")) { procesoXml.armarMensajeConsultaMensajesUsuarioPersona(pedido); } else { procesoXml.armarMensajeConsultaMensajesUsuarioCuenta(pedido); } conectarBusiness(EjecutarEventos.ACCION_ENVIAR_MENSAJE, pedido, InstancerConnect.IND_EJB); } else { //TODO: Aqui se arma una consulta a campos consultables para determinar el nombre del campo y si este corresponde a persona o cuenta ResourceBundle webProp = ResourceBundle.getBundle("webapp"); procesoXml.getXmlMensaje().setTipo(MensajeXml.TIP_CON); procesoXml.getXmlMensaje().setValor("SUB", webProp.getString("mensajesUsuarioSubsist"), MensajeXml.SEC_CAB); procesoXml.getXmlMensaje().setValor("TRN", webProp.getString("mensajesUsuarioTransac"), MensajeXml.SEC_CAB); procesoXml.getXmlMensaje().setValor("VER", webProp.getString("mensajesUsuarioVersion"), MensajeXml.SEC_CAB); procesoXml.armarMensajeConsultaCamposConsultables(pedido); conectarBusiness(EjecutarEventos.ACCION_ENVIAR_MENSAJE, pedido, InstancerConnect.IND_EJB); } return true; } else { procesoXml.actualizarArbolBloques(pedido); procesoXml.limpiarFormulario(false); procesoXml.getXmlMensaje().borrarDetalle(); procesoXml.getXmlMensaje().borrarResultado(); if (procesoXml.armarMensajeConsulta(pedido)) { verificarCaducidad(HISTORICO, HISTORICO, pedido); verificarCaducidad(CONSULTA, ESPECIAL, pedido); boolean resultado = conectarBusiness( EjecutarEventos.ACCION_ENVIAR_MENSAJE, pedido, InstancerConnect.IND_EJB); procesoXml.llenarFormulario(); return resultado; } } return false; } private boolean ejecutarConsultaMaestroDetalle(HttpServletRequest pedido, int bloque) { boolean consultaExitosa = false; if (bloque != -1) { procesoXml.getXmlMensaje().borrarDetalle(); procesoXml.getXmlMensaje().borrarMenu(); procesoXml.getXmlMensaje().setTipo(MensajeXml.TIP_CON); procesoXml.getXmlMensaje().setValor(new Bloque(-1, 0, 0), MensajeXml.SEC_DET); procesoXml.armarMensajeConsulta(pedido, bloque); procesoXml.buscarBloque(bloque).setNroBloque(1); procesoXml.buscarBloque(-1).setNroBloque(0); consultaExitosa = conectarBusiness( EjecutarEventos.ACCION_ENVIAR_MENSAJE, pedido, InstancerConnect.IND_EJB); if (consultaExitosa) { if (procesoXml.buscarBloque(1) == null) { procesoXml.completarValores(pedido, bloque); return false; } procesoXml.buscarBloque(0).setNroBloque(-1); procesoXml.buscarBloque(1).setNroBloque(bloque); procesoXml.buscarFBloque(bloque).setNroCodMen( procesoXml.getXmlMensaje().getValor("COD", MensajeXml.SEC_RES)); procesoXml.limpiarBloque(bloque, false); procesoXml.getXmlFormulario().setValoresElemento( procesoXml.cargarCampos(bloque), bloque); obviarResultado |= bloque == procesoXml.getXmlFormulario().getArbolBloques().getBloqueActivo(); if (procesoXml.buscarBloque(bloque).getNroRegistros() == 0) { procesoXml.completarValores(pedido, bloque); return true; } } } // Recursividad if (bloque == -1 || consultaExitosa) { ArbolBloques ab = procesoXml.getXmlFormulario().getArbolBloques(); ArbolBloques.Nodo nodo = ab.getNodo(bloque); ArbolBloques.Nodo[] hijos = (ArbolBloques.Nodo[]) nodo.getHijos().values().toArray(new ArbolBloques.Nodo[0]); if (ab.getBloqueActivo() != bloque) { procesoXml.buscarFBloque(bloque).setNroRegistro(1); } for (int e = 0; e < hijos.length; e++) { if (!ejecutarConsultaMaestroDetalle(pedido, hijos[e].getBloque())) { return false; } } return true; } procesoXml.completarValores(pedido, bloque); return false; } /** * Ejecuta el escaneo. * * @param pedido * un HttpServletRequest * * @return true si fue exitoso */ public boolean ejecutarEscaneo(HttpServletRequest pedido) { procesoXml.getXmlMensaje().setValor("NUM", pedido.getParameter("num"), MensajeXml.SEC_CAB); //agregar procesoXml.getXmlMensaje().setValor("SEC", pedido.getParameter("sec"), MensajeXml.SEC_CAB); procesoXml.getXmlMensaje().setValor("TOPX", pedido.getParameter("topx"), MensajeXml.SEC_CAB); procesoXml.getXmlMensaje().setValor("TOPY", pedido.getParameter("topy"), MensajeXml.SEC_CAB); procesoXml.getXmlMensaje().setValor("RES", pedido.getParameter("res"), MensajeXml.SEC_CAB); procesoXml.getXmlMensaje().setValor("WID", pedido.getParameter("wid"), MensajeXml.SEC_CAB); procesoXml.getXmlMensaje().setValor("HEI", pedido.getParameter("hei"), MensajeXml.SEC_CAB); procesoXml.getXmlMensaje().setValor("UNID", pedido.getParameter("unid"), MensajeXml.SEC_CAB); procesoXml.getXmlMensaje().setValor("GUI", pedido.getParameter("showUI"), MensajeXml.SEC_CAB); procesoXml.getXmlMensaje().setTipo(MensajeXml.TIP_ESC); return conectarBusiness(EjecutarEventos.ACCION_ENVIAR_MENSAJE, pedido, InstancerConnect.IND_EJB); } /** * Inserta una imagen en la base de datos. * * @param pedido * un HttpServletRequest. * * @return true si fue exitoso. */ public boolean ejecutarInsercionImagen(HttpServletRequest pedido) { HttpSession sesion = pedido.getSession(); Integer raiz = (Integer) sesion.getAttribute("FBRZ"); Integer pag = (Integer) sesion.getAttribute("FBPG"); String docTyp = (String) sesion.getAttribute("FBTY"); if (raiz == null) { procesoXml.getXmlMensaje().setValor("NUM", pedido.getParameter("num"), MensajeXml.SEC_CAB); sesion.setAttribute("FBRZ", new Integer(pedido.getParameter("num"))); } else { procesoXml.getXmlMensaje().setValor("NUM", raiz.toString(), MensajeXml.SEC_CAB); } if (pag == null) { procesoXml.getXmlMensaje().setValor("SEC", "0", MensajeXml.SEC_CAB); pag = new Integer(0); } else { procesoXml.getXmlMensaje().setValor("SEC", pag.toString(), MensajeXml.SEC_CAB); } if (docTyp == null) { procesoXml.getXmlMensaje().setValor("DOC", "D", MensajeXml.SEC_CAB); } else { String dt = ""; if (docTyp.equalsIgnoreCase("doc")) { dt = "D"; } else if (docTyp.equalsIgnoreCase("fot")) { dt = "T"; } else if (docTyp.equalsIgnoreCase("fir")) { dt = "F"; } procesoXml.getXmlMensaje().setValor("DOC", dt, MensajeXml.SEC_CAB); } procesoXml.getXmlMensaje().setTipo(MensajeXml.TIP_IIM); return conectarBusiness(EjecutarEventos.ACCION_ENVIAR_MENSAJE, pedido, InstancerConnect.IND_EJB); } /** * Inserta una imagen en la base de datos. * * @param pedido * un HttpServletRequest. * * @return true si fue exitoso. */ public boolean ejecutarInsercionImagenEscaneada(HttpServletRequest pedido) { procesoXml.getXmlMensaje().setTipo(MensajeXml.TIP_IIM); return conectarBusiness(EjecutarEventos.ACCION_ENVIAR_MENSAJE, pedido, InstancerConnect.IND_EJB); } /** * Ejecuta una lectura de imagen. * * @param pedido * un HttpServletRequest * @param tipo_lect * un int con el tipo de lectura a realizar: IMAGEN_LECT_NORMAL * para lectura normal desde la base de datos a través del Core, * IMAGEN_CORE_FILESYS para lectura en un filesystem a través del * Core, IMAGEN_MAX_PAGINA para consulta de página máxima en una * imagen multipágina. * @param imgFileName * nombre de la ruta completa del archivo a leer a través del * Core en el filesystem. Para las otras opciones se puede dejar * en vacío. * * @return true si fue exitoso. */ public boolean ejecutarLecturaImagen(HttpServletRequest pedido, int tipo_lect, String imgFileName) { procesoXml.getXmlMensaje().setValor("NUM", pedido.getParameter("num"), MensajeXml.SEC_CAB); procesoXml.getXmlMensaje().setValor("SRC", "", MensajeXml.SEC_CAB); if (tipo_lect == IMAGEN_LECT_NORMAL) // Lectura en el Core desde la // base de datos { procesoXml.getXmlMensaje().setValor("MAX", "0", MensajeXml.SEC_CAB); if (pedido.getParameter("num") != null) { if (pedido.getParameter("sec") != null) { procesoXml.getXmlMensaje().setValor("SEC", pedido.getParameter("sec"), MensajeXml.SEC_CAB); } else { procesoXml.getXmlMensaje().setValor("SEC", "0", MensajeXml.SEC_CAB); } if (pedido.getParameter("tab") != null) { procesoXml.getXmlMensaje().setValor("TAB", pedido.getParameter("tab"), MensajeXml.SEC_CAB); } else { procesoXml.getXmlMensaje().setValor("TAB", "", MensajeXml.SEC_CAB); } if (pedido.getParameter("tipDoc") != null) { procesoXml.getXmlMensaje().setValor("TDC", pedido.getParameter("tipDoc"), MensajeXml.SEC_CAB); } else { procesoXml.getXmlMensaje().borrarObjeto("TDC", MensajeXml.SEC_CAB); } if (pedido.getParameter("tipPrs") != null) { procesoXml.getXmlMensaje().setValor("TPR", pedido.getParameter("tipPrs"), MensajeXml.SEC_CAB); } else { procesoXml.getXmlMensaje().borrarObjeto("TPR", MensajeXml.SEC_CAB); } } procesoXml.getXmlMensaje().setValor("SRC", "", MensajeXml.SEC_CAB); } else if (tipo_lect == IMAGEN_FILESYS_CORE) // Lectura en el Core // desde filesystem { if (!imgFileName.equals("")) { procesoXml.getXmlMensaje().setValor("SRC", imgFileName, MensajeXml.SEC_CAB); procesoXml.getXmlMensaje().setValor("NUM", "-1", MensajeXml.SEC_CAB); procesoXml.getXmlMensaje().setValor("SEC", "-1", MensajeXml.SEC_CAB); } else { procesoXml.getXmlMensaje().setValor("SRC", "", MensajeXml.SEC_CAB); } } else if (tipo_lect == IMAGEN_MAX_PAGINA) { procesoXml.getXmlMensaje().setValor("MAX", "1", MensajeXml.SEC_CAB); procesoXml.getXmlMensaje().setValor("NUM", pedido.getParameter("num"), MensajeXml.SEC_CAB); } procesoXml.getXmlMensaje().setTipo(MensajeXml.TIP_IMG); return conectarBusiness(EjecutarEventos.ACCION_ENVIAR_MENSAJE, pedido, InstancerConnect.IND_EJB); } /** * Método que envía el Mensaje al repositorio, recoge la respuesta en el * mensaje y llena de retorno y llena el Formulario. * * @param tablaX * con origenDB en X para graficar * @param tablasY * con origenesDB en Y para graficar * @param pedido * Pedido del browser * * @return Devuelve un objeto que indica si fue exitoso el proceso ejecutado * dentro del Método. */ public boolean ejecutarConsultaGrafico(String tablaX, String[] tablasY, HttpServletRequest pedido) { procesoXml.getXmlMensaje().borrarDetalle(); procesoXml.getXmlMensaje().borrarResultado(); procesoXml.getXmlMensaje().borrarMenu(); procesoXml.armarMensajeGrafico(tablaX, tablasY); procesoXml.getXmlMensaje().setTipo(MensajeXml.TIP_CON); return conectarBusiness(EjecutarEventos.ACCION_ENVIAR_MENSAJE, pedido, InstancerConnect.IND_EJB); } /** * Método que envía el Mensaje al repositorio, recoge la respuesta en el * mensaje y llena de retorno y llena el Formulario. * * @param pedido * Objeto que contiene los valores que se colocaron en la página * como parámetros de consulta. * * @return Devuelve un objeto que indica si fue exitoso el proceso ejecutado * dentro del Método. */ public boolean ejecutarConsultaLV(HttpServletRequest pedido, String parametrosCargarImagenes) { procesoXml.getXmlMensaje().borrarDetalle(); procesoXml.getXmlMensaje().borrarResultado(); procesoXml.getXmlMensaje().borrarMenu(); procesoXml.actualizarArbolBloques(pedido); procesoXml.armarMensajeLV(pedido); procesoXml.getXmlMensaje().setTipo(MensajeXml.TIP_CON); boolean resultado = conectarBusiness( EjecutarEventos.ACCION_ENVIAR_MENSAJE, pedido, InstancerConnect.IND_EJB); procesoXml.llenarLV(pedido.getParameterValues("r"), parametrosCargarImagenes); procesoXml.getXmlFormulario().setTexto( procesoXml.getXmlMensaje().getValor("DSC", MensajeXml.SEC_RES)); return resultado; } /** * Método que envía el Mensaje al repositorio, recoge la respuesta en el * mensaje y llena de retorno y llena el Formulario. * * @param pedido * Objeto que contiene los valores que se colocaron en la página * como parámetros de consulta. * * @return Devuelve un objeto que indica si fue exitoso el proceso ejecutado * dentro del Método. */ public boolean ejecutarConsultaConLink(HttpServletRequest pedido) { procesoXml.getXmlMensaje().borrarDetalle(); procesoXml.getXmlMensaje().borrarResultado(); procesoXml.getXmlMensaje().borrarMenu(); if (procesoXml.armarMensajeLink(pedido)) { procesoXml.getXmlMensaje().setTipo(MensajeXml.TIP_CON); boolean resultado = conectarBusiness( EjecutarEventos.ACCION_ENVIAR_MENSAJE, pedido, InstancerConnect.IND_EJB); procesoXml.llenarFormulario(); return resultado; } return false; } /** * Método que verifica los campos cambiados, construye el Mensaje con los * Datos del Formulario, recoge la respueta en el mensaje que devuelve el * repositorio y llena el formulario. * * @param pedido * Pedido que viene del browser * @param caducar * Indica si es un mantenimiento para caducar */ public void ejecutarMantenimiento(HttpServletRequest pedido, boolean caducar) { HttpSession session = pedido.getSession(); if (pedido.getParameter("procNotif") != null) { ResourceBundle webProp = ResourceBundle.getBundle("webapp"); procesoXml.getXmlMensaje().setTipo(MensajeXml.TIP_MAN); procesoXml.getXmlMensaje().setValor("SUB", webProp.getString("notifSubsist"), MensajeXml.SEC_CAB); procesoXml.getXmlMensaje().setValor("TRN", webProp.getString("notifTransac"), MensajeXml.SEC_CAB); procesoXml.getXmlMensaje().setValor("VER", webProp.getString("notifVersion"), MensajeXml.SEC_CAB); procesoXml.getXmlMensaje().setValor("TIP", "MAN", MensajeXml.SEC_CAB); procesoXml.armarMensajeMantenimientoNotificaciones(pedido); conectarBusiness(EjecutarEventos.ACCION_ENVIAR_MENSAJE, pedido, InstancerConnect.IND_EJB); } else { procesoXml.getXmlMensaje().borrarDetalle(); procesoXml.getXmlMensaje().borrarResultado(); procesoXml.getXmlMensaje().borrarMenu(); if (procesoXml.armarMensajeMantenimiento(pedido, caducar)) { if (caducar) { procesoXml.getXmlMensaje().setTipo(MensajeXml.TIP_CAD); } else { procesoXml.getXmlMensaje().setTipo(MensajeXml.TIP_MAN); } verificarCaducidad(CADUCIDAD, CADUCIDAD, pedido); Decrypt de = new Decrypt(); if (de.isWebencrypt()) { encryptPWD(procesoXml.getXmlMensaje()); } // Manda a insertar imagen escaneada if (session.getAttribute("FBES_IIM") != null) { Map ies = (Map) session.getAttribute("FBES_IIM"); Bloque bloque = new Bloque(999, ies.size(), 1); SortedSet ordenado = new TreeSet( new Comparator() { public int compare(ImagenEscaneada o1, ImagenEscaneada o2) { return o1.pagina.compareTo(o2.pagina); } }); ordenado.addAll(ies.values()); for (Escanear.ImagenEscaneada ie : ordenado) { bloque.add(new Campo("139003", "", ie.imagen, false)); bloque.add(new Campo("139001", "", ie.numero, false)); bloque.add(new Campo("139016", "", ie.pagina, false)); bloque.add(new Campo("139009", "", ie.tipo, false)); } procesoXml.getXmlMensaje().setValor(bloque, MensajeXml.SEC_DET); } boolean exito = conectarBusiness(EjecutarEventos.ACCION_ENVIAR_MENSAJE, pedido, InstancerConnect.IND_EJB); // Guardar una sola vez las imagenes si no da error if (exito) { session.removeAttribute("FBES_IIM"); } } } } /** * Método que encrypta los campos PWD (password) * @param xml */ private void encryptPWD(MensajeXml xml) { try { Decrypt de = new Decrypt(); List listOrigenDB = new ArrayList(); PropertiesHandler properties = new PropertiesHandler("security"); String origendb = properties.getValue("origendb"); if (origendb != null) { String[] origen = origendb.split(","); for (int i = 0; i < origen.length; i++) { listOrigenDB.add(origen[i]); } } for (int i = 0; i < xml.detalle.length; i++) { Vector vector = xml.detalle[i]; for (int j = 0; j < vector.size(); j++) { Object blq = vector.get(j); if (blq instanceof Bloque) { Bloque bloque = (Bloque) blq; for (Object cmp : bloque.campos) { if (cmp instanceof DatoGeneral) { DatoGeneral dg = (DatoGeneral) cmp; if (dg.getNombre().indexOf("PWD") == 0) { dg.setValor(de.encrypt(dg.getValor())); } if (cmp instanceof Campo) { Campo cam = (Campo) cmp; if (listOrigenDB.contains(cam.getNombre())) { cam.setNuevoValor(de.encrypt(cam.getNuevoValor())); } } } } } } } } catch (Exception ex) { ex.printStackTrace(); } } /** * Método que verifica los campos cambiados, construye el Mensaje con los * Datos del Formulario, recoge la respueta en el mensaje que devuelve el * repositorio y llena el formulario. * * @param pedido * Pedido que viene del browser */ public void ejecutarMantenimientoMensajesUsuario(HttpServletRequest pedido) { if (pedido.getParameter("consMensajesUsuario") != null) { ResourceBundle webProp = ResourceBundle.getBundle("webapp"); procesoXml.getXmlMensaje().setTipo(MensajeXml.TIP_MAN); procesoXml.getXmlMensaje().setValor("SUB", webProp.getString("mensajesUsuarioSubsist"), MensajeXml.SEC_CAB); procesoXml.getXmlMensaje().setValor("TRN", webProp.getString("mensajesUsuarioTransac"), MensajeXml.SEC_CAB); procesoXml.getXmlMensaje().setValor("VER", webProp.getString("mensajesUsuarioVersion"), MensajeXml.SEC_CAB); procesoXml.getXmlMensaje().setValor("TIP", "MAN", MensajeXml.SEC_CAB); procesoXml.armarMensajeMantenimientoNotificaciones(pedido); conectarBusiness(EjecutarEventos.ACCION_ENVIAR_MENSAJE, pedido, InstancerConnect.IND_EJB); } else { procesoXml.getXmlMensaje().borrarDetalle(); procesoXml.getXmlMensaje().borrarResultado(); procesoXml.getXmlMensaje().borrarMenu(); if (procesoXml.armarMensajeMantenimiento(pedido, false)) { procesoXml.getXmlMensaje().setTipo(MensajeXml.TIP_MAN); verificarCaducidad(CADUCIDAD, CADUCIDAD, pedido); conectarBusiness(EjecutarEventos.ACCION_ENVIAR_MENSAJE, pedido, InstancerConnect.IND_EJB); } } } /** * Método que permite obtener los datos necesarios para el reporte PDF segun * parámetros indicados por el usuario llenados en la pantalla de parametros * adicionales luego de presionar la opción reporte PDF de un Formulario de * consulta. * * @param pedido * Pedido que viene del browser * @param todos * Indica si se tienen que consultar todos * * @return Devuelve un objeto que indica si fue exitoso el proceso ejecutado * dentro del Método. */ public boolean ejecutarConsultaPdf(HttpServletRequest pedido, boolean todos) { procesoXml.getXmlMensaje().setValor("PDF", "1", MensajeXml.SEC_CAB); procesoXml.getXmlMensaje().setValor("ALL", todos ? "1" : "0", MensajeXml.SEC_CAB); procesoXml.getXmlMensaje().setTipo(MensajeXml.TIP_CON); return conectarBusiness(EjecutarEventos.ACCION_ENVIAR_MENSAJE, pedido, InstancerConnect.IND_EJB); } /** * Método que ejecuta los proceso de construción de reportes. * * @param pedido * Objeto que contiene los parámetros recibidos por el sistema * * @return Devuelve el contenido del Reporte en formato XML */ public String ejecutarReporte(HttpServletRequest pedido) { procesoXml.getXmlMensaje().borrarResultado(); procesoXml.getXmlMensaje().borrarDetalle(); procesoXml.armarMensajeReporte(pedido); procesoXml.getXmlMensaje().setTipo(MensajeXml.TIP_REP); procesoXml.getXmlMensaje().setValor("MSG", new UID().toString(), MensajeXml.SEC_CAB); return conectarBusiness(pedido, procesoXml.getXmlMensaje().toString()); } /** * Método que verifica el tipo de formulario y si es de tipo CAD (CADUCIDAD) * envía un tag adicional en la cabecera del mensaje que se envía procesar * como de mantenimiento. * * @param tipoForm * Tipo Formulario * @param addTag * Tag * @param pedido * Pedido que viene del browser */ protected void verificarCaducidad(String tipoForm, String addTag, HttpServletRequest pedido) { try { String indicator = procesoXml.getXmlFormulario().getTipoMen(); if (indicator.equalsIgnoreCase(tipoForm)) { if (indicator.equals(CONSULTA)) { String consultaEspecial = pedido.getParameter("flagConEspecial"); if (consultaEspecial != null && consultaEspecial.equals("TRUE")) { procesoXml.getXmlMensaje().setValor(addTag, "1", MensajeXml.SEC_CAB); procesoXml.modificarValueHttp("flagConEspecial", "FALSE"); } else { procesoXml.getXmlMensaje().setValor(addTag, "0", MensajeXml.SEC_CAB); } } else { procesoXml.getXmlMensaje().setValor(addTag, "1", MensajeXml.SEC_CAB); } } } catch (Exception e) { Debug.imprimirError(e); } } /** * Método que envía el mensaje al sistema con el formulario que fui leído * para ser cargado en el sistema. * * @param pedido * Objeto que posee la petición del cliente browser. * @param formulario * Objeto que contiene el formulario leído, en forma de cadena. * @param nombre * Nombre del reporte si es reporte */ public void cargarFormulario(HttpServletRequest pedido, byte[] formulario, String nombre) { pedido.setAttribute("TIP_MEN", "FOR"); procesoXml.getXmlMensaje().setTipo(MensajeXml.TIP_FRM); procesoXml.getXmlMensaje().setValor("FRM", Base64OutputStream.codificar(formulario), MensajeXml.SEC_DET); procesoXml.getXmlMensaje().setValor("NMR", nombre, MensajeXml.SEC_DET); conectarBusiness(EjecutarEventos.ACCION_ENVIAR_MENSAJE, pedido, InstancerConnect.IND_EJB); } /** * Método que asigna el objeto Formulario de la clase String aquello que se * envía al cliente con el html del formulario, los cálculos y el estatus. * * @return Objeto qeu contiene la inidicación de éxito o fracaso de la * acción del método. */ public boolean generarHtmlFormulario(String sessionId) { procesoXml.setVariablesFormulario(); try { String xmlFormulario = procesoXml.getXmlFormulario().getBody(); xmlFormulario = xmlFormulario.replaceAll("--reemplazaSession--", ";jsessionid=" + sessionId); formulario = "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + ""; for (int i = 0; i < procesoXml.getXmlFormulario().size(); i++) { if (procesoXml.getXmlFormulario().getBaseFormas(i) instanceof FBloque) { FBloque fBloque = (FBloque) procesoXml.getXmlFormulario().getBaseFormas(i); for (int j = 0; j < fBloque.size(); j++) { if (fBloque.get(j) instanceof Fila) { Fila fila = (Fila) fBloque.get(j); for (int k = 0; k < fila.size(); k++) { if (fila.get(k) instanceof Datos) { Datos datos = (Datos) fila.get(k); if (datos.getJavaScript().indexOf("mensaje") != -1 && datos.getJavaScript().indexOf("true") != -1) { listaCamposMensajes.add(datos.getOrigen().getCodigo()); } } if (fila.get(k) instanceof Oculto) { Oculto oculto = (Oculto) fila.get(k); if (oculto.getJavaScript().indexOf("mensaje") != -1 && oculto.getJavaScript().indexOf("true") != -1) { listaCamposMensajes.add(oculto.getOrigen().getCodigo()); } } } } } } } /*if(!formulario.equals("")){ String csubsistema = procesoXml.getXmlFormulario().getSubs(); String ctransaccion = procesoXml.getXmlFormulario().getTran(); String versionTransaccion = procesoXml.getXmlFormulario().getVersion(); String tipoMensaje = procesoXml.getXmlFormulario().getTipoMen(); String funcion = ""; if(formulario.contains("Formulario Cargado: OK.")){ funcion = "F2"; }else if(formulario.contains("TRANSACCION REALIZADA CORRECTAMENTE")){ funcion = "F7"; } String path = "FM"+tipoMensaje+funcion+csubsistema+ctransaccion+versionTransaccion; if (path.length() == 15) { File file = new File("/FitBank/xml/"+path+".xml"); if (!file.exists()) { FileOutputStream fileOutputStream = null; DataOutputStream dataOutputStream = null; fileOutputStream = new FileOutputStream(file, true); dataOutputStream = new DataOutputStream(fileOutputStream); dataOutputStream.writeBytes(formulario.substring(0, formulario.length())); if (dataOutputStream != null) { dataOutputStream.close(); } if (fileOutputStream != null) { fileOutputStream.close(); } } } } */ return true; } catch (Exception e) { Debug.imprimirError(e); return false; } } /** * Método que asigna el objeto Formulario de la clase String aquello que se * envía al cliente con el html del formulario, los cálculos y el estatus. * * @return Objeto que contiene la inidicación de éxito o fracaso de la * acción del Método. */ public boolean generarHtmlFormularioLV() { try { formulario = "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + ""; /*if(!formulario.equals("")){ String csubsistema = procesoXml.getXmlFormulario().getSubs(); String ctransaccion = procesoXml.getXmlFormulario().getTran(); String versionTransaccion = procesoXml.getXmlFormulario().getVersion(); String tipoMensaje = procesoXml.getXmlFormulario().getTipoMen(); String funcion = ""; if(formulario.contains("Formulario Cargado: OK.")){ funcion = "F2"; }else if(formulario.contains("TRANSACCION REALIZADA CORRECTAMENTE")){ funcion = "F7"; } String path = "LV"+tipoMensaje+funcion+csubsistema+ctransaccion+versionTransaccion; if (path.length() == 15) { File file = new File("/FitBank/xml/"+path+".xml"); if (!file.exists()) { FileOutputStream fileOutputStream = null; DataOutputStream dataOutputStream = null; fileOutputStream = new FileOutputStream(file, true); dataOutputStream = new DataOutputStream(fileOutputStream); dataOutputStream.writeBytes(formulario.substring(0, formulario.length())); if (dataOutputStream != null) { dataOutputStream.close(); } if (fileOutputStream != null) { fileOutputStream.close(); } } } } */ return true; } catch (Exception e) { Debug.imprimirError(e); return false; } } }