ips1ap101.lib.core.db.util.SqlAgent.java Source code

Java tutorial

Introduction

Here is the source code for ips1ap101.lib.core.db.util.SqlAgent.java

Source

/*
 * Este programa es software libre; usted puede redistribuirlo y/o modificarlo bajo los trminos
 * de la licencia "GNU General Public License" publicada por la Fundacin "Free Software Foundation".
 * Este programa se distribuye con la esperanza de que pueda ser til, pero SIN NINGUNA GARANTIA;
 * vea la licencia "GNU General Public License" para obtener mas informacin.
 */
package ips1ap101.lib.core.db.util;

import java.io.File;
import java.sql.ResultSet;
import ips1ap101.lib.base.constant.CBM;
import ips1ap101.lib.base.entity.enumeration.CondicionEjeFunEnumeration;
import ips1ap101.lib.base.util.ThrowableUtils;
import ips1ap101.lib.core.app.Bitacora;
import ips1ap101.lib.core.app.ExcepcionAplicacion;
import ips1ap101.lib.core.app.TLC;
import ips1ap101.lib.core.constant.EAC;
import ips1ap101.lib.core.control.Auditor;
import ips1ap101.lib.core.jms.message.SqlAgentMessage;
import ips1ap101.lib.core.util.EA;
import ips1ap101.lib.core.util.STP;
import ips1ap101.lib.core.util.Utils;
import org.apache.commons.lang.StringUtils;

/**
 * @author Jorge Campins
 */
public class SqlAgent {

    private static final String DEFAULT_NUMBER_KW = "DEFAULT";

    public static Process executeProcedure(String procedimiento, long funcion) {
        return executeProcedure(procedimiento, funcion, null);
    }

    public static Process executeProcedure(String procedimiento, long funcion, Object[] args) {
        Bitacora.trace(SqlAgent.class, "executeProcedure", procedimiento, String.valueOf(funcion));
        Utils.traceObjectArray(args);
        Long rastro = null;
        Process process = null;
        try {
            procedimiento = StringUtils.trimToEmpty(procedimiento);
            if (STP.esIdentificadorArchivoValido(procedimiento)) {
                if (TLC.getControlador().esFuncionAutorizada(funcion)) {
                    rastro = TLC.getControlador().ponerProcesoPendiente(funcion);
                    String path = Utils.sep(EA.getString(EAC.SQLPRC_RUNNER_DIR));
                    String command = path + EA.getString(EAC.SQLPRC_RUNNER_CMD);
                    command += " " + commandParameters(procedimiento, funcion, rastro, args);
                    String[] envp = null;
                    File dir = new File(path);
                    Bitacora.trace(command);
                    Bitacora.trace(dir.getPath());
                    process = Runtime.getRuntime().exec(command, envp, dir);
                    TLC.getBitacora().info(CBM.PROCESS_EXECUTION_REQUEST, procedimiento);
                } else {
                    throw new ExcepcionAplicacion(
                            Bitacora.getTextoMensaje(CBM.FUNCION_NO_AUTORIZADA, procedimiento));
                }
            } else {
                throw new ExcepcionAplicacion(
                        Bitacora.getTextoMensaje(CBM.IDENTIFICADOR_ARCHIVO_INVALIDO, procedimiento));
            }
        } catch (Exception ex) {
            CondicionEjeFunEnumeration condicion = CondicionEjeFunEnumeration.EJECUCION_CANCELADA;
            String mensaje = ThrowableUtils.getString(ex);
            Auditor.grabarRastroProceso(rastro, condicion, null, mensaje);
            TLC.getBitacora().error(mensaje);
        }
        return process;
    }

    private static String commandParameters(String procedimiento, long funcion, Long rastro, Object[] args) {
        String str = procedimiento + " " + rastro;
        str += " " + Utils.getQuotedParameterString(args);
        return str;
    }

    public static SqlAgentMessage executeProcedure(SqlAgentMessage message) {
        return executeProcedure(message.getProcedimientoSql(), message.getRastro(), message.getArgumentos(), false);
    }

    static SqlAgentMessage executeProcedure(String procedure, String number, Object[] args, boolean logging) {
        String proceso = StringUtils.trimToEmpty(procedure);
        Long rastro = trimToNullNumber(number);
        return executeProcedure(proceso, rastro, args, logging);
    }

    private static SqlAgentMessage executeProcedure(String procedimiento, Long rastro, Object[] args,
            boolean logging) {
        Bitacora.trace(SqlAgent.class, "executeProcedure", procedimiento, rastro);
        Utils.traceObjectArray(args);
        String procedure = StringUtils.trimToEmpty(procedimiento);
        //      String archivo = logging ? getLogFileName(rastro) : null;
        String archivo = null;
        CondicionEjeFunEnumeration condicion = CondicionEjeFunEnumeration.EJECUCION_EN_PROGRESO;
        String mensaje = TLC.getBitacora().info(CBM.PROCESS_EXECUTION_BEGIN, procedure);
        boolean ok = Auditor.grabarRastroProceso(rastro, condicion, archivo, mensaje);
        if (ok) {
            try {
                // <editor-fold defaultstate="collapsed">
                //              Object resultado = TLC.getAgenteSql().executeProcedure(procedure, args);
                //              if (resultado == null) {
                //                  condicion = CondicionEjeFunEnumeration.EJECUTADO_CON_ERRORES;
                //                  mensaje = TLC.getBitacora().error(CBM.PROCESS_EXECUTION_ABEND, procedure);
                //              } else {
                //                  condicion = CondicionEjeFunEnumeration.EJECUTADO_SIN_ERRORES;
                //                  if (resultado instanceof Number) {
                //                      mensaje = TLC.getBitacora().info(procedure + " = " + resultado);
                //                  } else if (resultado instanceof ResultSet) {
                //                      ResultSet resultSet = (ResultSet) resultado;
                //                      if (resultSet.next()) {
                //                          mensaje = TLC.getBitacora().info(procedure + " = " + resultSet.getObject(1));
                //                      } else {
                //                          mensaje = TLC.getBitacora().info(procedure + " = " + STP.STRING_VALOR_NULO);
                //                      }
                //                  } else {
                //                      mensaje = TLC.getBitacora().info(CBM.PROCESS_EXECUTION_END, procedure);
                //                  }
                //              }
                // </editor-fold>
                Object resultado = TLC.getAgenteSql().executeProcedure(procedure, args);
                if (resultado == null) {
                    condicion = CondicionEjeFunEnumeration.EJECUTADO_CON_ERRORES;
                    mensaje = TLC.getBitacora().error(CBM.PROCESS_EXECUTION_ABEND, procedure);
                } else {
                    condicion = CondicionEjeFunEnumeration.EJECUTADO_SIN_ERRORES;
                    mensaje = TLC.getBitacora().info(CBM.PROCESS_EXECUTION_END, procedure);
                    if (resultado instanceof ResultSet) {
                        ResultSet resultSet = (ResultSet) resultado;
                        if (resultSet.next()) {
                            mensaje += " (" + resultSet.getObject(1) + ") ";
                        }
                    } else if (resultado.getClass().isPrimitive()) {
                        mensaje += " (" + resultado + ") ";
                    }
                }
            } catch (Exception ex) {
                condicion = CondicionEjeFunEnumeration.EJECUTADO_CON_ERRORES;
                mensaje = ThrowableUtils.getString(ex);
                TLC.getBitacora().fatal(ex);
                TLC.getBitacora().fatal(CBM.PROCESS_EXECUTION_ABEND, procedure);
            } finally {
                Auditor.grabarRastroProceso(rastro, condicion, archivo, mensaje);
                //              DB.close(resultSet);
            }
        } else {
            condicion = CondicionEjeFunEnumeration.EJECUCION_CANCELADA;
            mensaje = TLC.getBitacora().error(CBM.PROCESS_EXECUTION_ABEND, procedure);
        }
        SqlAgentMessage message = new SqlAgentMessage(procedure);
        message.setArgumentos(args);
        message.setRastro(rastro);
        message.setCondicion(condicion);
        message.setArchivo(archivo);
        message.setMensaje(mensaje);
        return message;
    }

    // <editor-fold defaultstate="collapsed" desc="getLogFileName">
    //  private static String getLogFileName(Long rastro) {
    //      if (rastro == null || rastro == 0) {
    //          return null;
    //      }
    //      return System.getenv(SEV.SQLPRC_RUNNER_LOG);
    //  }
    // </editor-fold>
    //
    private static Long trimToNullNumber(String number) {
        String str = StringUtils.trimToEmpty(number);
        return StringUtils.isEmpty(str) || str.equalsIgnoreCase(DEFAULT_NUMBER_KW) || !StringUtils.isNumeric(str)
                ? null
                : Long.valueOf(str);
    }
    //
    // <editor-fold defaultstate="collapsed" desc="exportLog">
    //  private static String exportLog(String process) {
    //      Bitacora.trace(SqlAgent.class, "exportLog", process);
    //      try {
    //          String targetFileName = process + "_" + System.currentTimeMillis() + "_" + TLC.getBitacora().hashCode();
    //          targetFileName += "." + "log";
    //          targetFileName = targetFileName.toLowerCase();
    //          String log = Utils.getSpooledFilesDir() + targetFileName;
    //          FileWriter fileWriter = new FileWriter(log);
    //          BufferedWriter bufferedWriter = new BufferedWriter(fileWriter);
    //          bufferedWriter.write(TLC.getBitacora().getLogString());
    //          bufferedWriter.close();
    //          return targetFileName;
    //      } catch (IOException ex) {
    //          TLC.getBitacora().fatal(ex);
    //      }
    //      return null;
    //  }
    // </editor-fold>
}