All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.josebran.LogsJB.Execute Maven / Gradle / Ivy

/***
 * Copyright (C) 2022 El proyecto de código abierto LogsJB de José Bran
 *
 * Con licencia de Apache License, Versión 2.0 (la "Licencia");
 * no puede usar este archivo excepto de conformidad con la Licencia.
 * Puede obtener una copia de la Licencia en
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * A menos que lo exija la ley aplicable o se acuerde por escrito, el software
 * distribuido bajo la Licencia se distribuye "TAL CUAL",
 * SIN GARANTÍAS NI CONDICIONES DE NINGÚN TIPO, ya sean expresas o implícitas.
 * Consulte la Licencia para conocer el idioma específico que rige los permisos y
 * limitaciones bajo la Licencia.
 */

package com.josebran.LogsJB;


import com.josebran.LogsJB.Numeracion.NivelLog;
import org.apache.commons.lang3.exception.ExceptionUtils;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

import static com.josebran.LogsJB.MethodsTxt.*;

/****
 * Copyright (C) 2022 El proyecto de código abierto LogsJB de José Bran
 * Clase encargada de recuperar los mensajes de la lista compartida por el Proceso Principal
 * e iniciar un SubProceso encargado de leer los mensajes de la lista y escribirlos en el LogTxt.
 */
class Execute {

    private Boolean TaskisReady=true;

    /***
     * Lista que funciona como la cola de peticiones que llegan al Ejecutor
     */
    private static ListaMensajes listado=new ListaMensajes();



    /***
     * Se utiliza el patron Singleton, para asegurarnos que sea una unica instancia la que se encargue de
     * Llevar el control de los Logs
     */
    private static Execute instance = new Execute();

    private Execute() {
        //System.out.println("Ejecuta el constructor de Execute Soporte: ");
        setearRuta();
        setearNivelLog();
        setearSizelLog();
        setearIsAndroid();
    }

    /***
     * Proporciona la instancia de la clase encargada de ejecutar las acciónes en segundo Plano.
     * @return Retorna la instancia de la Clase Execute, que estara trabajando las peticiones de la aplicación
     * en segundo plano.
     */
    protected static Execute getInstance() {
        return instance;
    }


    /***
     * Proporciona el acceso a la lista que sirve como cola de las peticiones
     * @return Retorna una lista de MensajeWrite, la cual lleva la información que se desea registrar en los Logs
     */
    protected static ListaMensajes getListado() {
        return listado;
    }


    /***
     * Metodo por medio del cual se llama la escritura de los logs
     */
    protected void run(){
        try{
            writePrincipal();
        }catch (Exception e){
            System.err.println("Exepcion capturada en el metodo Metodo por medio del cual se llama la escritura de los logs");
            System.err.println("Tipo de Excepción : "+e.getClass());
            System.err.println("Causa de la Exepción : "+e.getCause());
            System.err.println("Mensaje de la Exepción : "+e.getMessage());
            System.err.println("Trace de la Exepción : "+ ExceptionUtils.getStackTrace(e));
        }
    }

    /***
     * Escritor principal, es el que maneja la logica de la aplicación la cual decide si el log se almacena en una BD's,
     * un Txt Ó si se envía a un RestAPI.
     */
    private void writePrincipal(){
        try{
            getInstance().setTaskisReady(false);
            Runnable EscritorPrincipal= ()->{
                String temporal="";
                boolean band=true;
                Integer i=0;
                while(band){
                    if(i>5000){
                        verificarSizeFichero();
                        i=0;
                    }
                    i++;
                    //String Mensaje=Execute.getInstance().getTexto();
                    //NivelLog logtemporal=Execute.getInstance().getNivelLog();
                    MensajeWrite mensajetemp=null;
                    mensajetemp=getListado().getDato();
                    //System.out.println("Mensaje en Execute: "+mensajetemp.getTexto()+" "+mensajetemp.getNivelLog());
                    String Mensaje=mensajetemp.getTexto();
                    NivelLog logtemporal=mensajetemp.getNivelLog();
                    String Clase= mensajetemp.getClase();
                    String Metodo= mensajetemp.getMetodo();
                    String fecha= mensajetemp.getFecha();
                    //System.out.println("NivelLog definido: "+nivelaplicación);
                    //System.out.println("NivelLog temporal: "+intniveltemporal);
                    //System.out.println("Cantidad de mensajes Por limpiar: "+getListaTxt().getSize());
                    //Verifica que el nivel de Log a escribir sea igual o mayor al nivel predefinido.
                    writeLog(logtemporal, Mensaje, Clase, Metodo, fecha);
                    if(getListado().getSize()==0){
                        band=false;
                        getInstance().setTaskisReady(true);
                        break;
                    }
                }
                return;
            };
            ExecutorService executorPrincipal = Executors.newFixedThreadPool(1);
            executorPrincipal.submit(EscritorPrincipal);
            executorPrincipal.shutdown();
        }catch (Exception e){
            System.err.println("Exepcion capturada en el metodo Escritor principal, es el que maneja la logica de la aplicación la cual decide si el log se almacena en una BD's,\n" +
                    "     * un Txt Ó si se envía a un RestAPI.");
            System.err.println("Tipo de Excepción : "+e.getClass());
            System.err.println("Causa de la Exepción : "+e.getCause());
            System.err.println("Mensaje de la Exepción : "+e.getMessage());
            System.err.println("Trace de la Exepción : "+ExceptionUtils.getStackTrace(e));
        }
    }




    /**
     * Obtiene la bandera que indica si actualmente esta trabajando la clase Execute o si ya no esta trabajando
     * @return True si esta libre, false si actualmente esta trabajando
     */
    protected synchronized Boolean getTaskisReady() {
        return TaskisReady;
    }

    /**
     * Setea la bandera que indica si actualmente esta trabajando la clase Execute o si ya no esta trabajando
     * @param taskisReady True si esta libre, false si actualmente esta trabajando
     */
    protected synchronized void setTaskisReady(Boolean taskisReady) {
        TaskisReady = taskisReady;
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy