org.enlacerh.util.FileUploadController.java Source code

Java tutorial

Introduction

Here is the source code for org.enlacerh.util.FileUploadController.java

Source

/*
 *  Copyright (C) 2016 ABAS CORP, C.A.
    
Este programa es software libre: usted puede redistribuirlo y/o modificarlo 
bajo los terminos de la Licencia Pblica General GNU publicada 
por la Fundacion para el Software Libre, ya sea la version 3 
de la Licencia, o (a su eleccion) cualquier version posterior.
    
Este programa se distribuye con la esperanza de que sea til, pero 
SIN GARANTiA ALGUNA; ni siquiera la garantia implicita 
MERCANTIL o de APTITUD PARA UN PROPoSITO DETERMINADO. 
Consulte los detalles de la Licencia Pblica General GNU para obtener 
una informacion mas detallada. 
    
Deberia haber recibido una copia de la Licencia Pblica General GNU 
junto a este programa. 
En caso contrario, consulte <http://www.gnu.org/licenses/>.
 */
package org.enlacerh.util;

/*
 *  Esta clase controla todos los archivos de subida y procesamiento de txt al servidos
 */
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.Serializable;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Types;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;
import javax.mail.BodyPart;
import javax.mail.Message;
import javax.mail.Multipart;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.servlet.http.HttpServletRequest;
import javax.sql.DataSource;

import org.apache.commons.lang3.StringUtils;
import org.enlacerh.getset.Autonom;
import org.primefaces.event.FileUploadEvent;
import org.primefaces.model.LazyDataModel;

@ManagedBean
@ViewScoped
public class FileUploadController extends Utils implements Serializable {
    /**
     * 
     */
    private static final long serialVersionUID = 1L;

    private LazyDataModel<Autonom> lazyModel;

    /**
     * @return the lazyModel
     */
    public LazyDataModel<Autonom> getLazyModel() {
        return lazyModel;
    }

    // Constructor
    public FileUploadController() {
        /*
        lazyModel  = new LazyDataModel<Autonom>(){
            
           private static final long serialVersionUID = 7217573531435419432L;
               
        @Override
           public List<Autonom> load(int first, int pageSize, String sortField, SortOrder sortOrder, Map<String,Object> filters) { 
           //Filtro
           if (filters != null) {
               for(Iterator<String> it = filters.keySet().iterator(); it.hasNext();) {
                  String filterProperty = it.next(); // table column name = field name
                 filterValue = filters.get(filterProperty);
             //Filtrando por grupo de usuarios    
             if(filterProperty.equals("vgrupo")){
                  grupo = (String) filterValue;
             }
               }
            }
           try { 
              //Consulta
           select(first, pageSize,sortField, filterValue);
           //Counter
           counter(filterValue);
           //Contador lazy
           lazyModel.setRowCount(rows);  //Necesario para crear la paginacin
        } catch (SQLException | NamingException e) {   
           e.printStackTrace();
        }             
        return list;  
        } 
            
            
        //Arregla bug de primefaces
        @Override
        /**
            
            
        public void setRowIndex(int rowIndex) {
            
            if (rowIndex == -1 || getPageSize() == 0) {
                super.setRowIndex(-1);
            }
            else
                super.setRowIndex(rowIndex % getPageSize());
        }
            
        };*/
    }

    // Primitives
    private static final int BUFFER_SIZE = 6124;
    private static final String RUTA_EXTERNO = File.separator + "externos" + File.separator + "autoext";
    private static final String RUTA_REPORTE = File.separator + "reportes";
    //private static final String RUTA_LOGS = File.separator + "logs";
    private static final String RUTA_IMAGEN = File.separator + "imagenes" + File.separator + "colab"; //Ruta donde sube las imgenes para autoservicio
    private Pattern pattern; //Validador de formatos de imagenes o texto
    private Matcher matcher; //Match parra validar imgenes o texto
    private static final String FORMATO_FILE = "([^\\s]+(\\.(?i)(txt))$)"; //Solo admite extensiones .txt
    private static final String FORMATO_REPORTE = "([^\\s]+(\\.(?i)(rptdesign|properties))$)"; //Solo admite extensiones .rptdesign
    private static final String FORMATO_IMAGE = "([^\\s]+(\\.(?i)(jpg|png|gif|bmp))$)"; //Solo admite extensiones .jpg, jpeg, gif, png
    private String login = (String) FacesContext.getCurrentInstance().getExternalContext().getSessionMap()
            .get("usuario"); //Usuario logeado
    PntExternos externos = new PntExternos(); //Objeto para procesar archivos externos
    private String anio = ""; //Ao a subir autoservicio
    private String mes = ""; //Mes subir autoservicio
    private String opc = ""; //Opciones de autoservicio a subir
    int count = 0; //Contador
    private String cedula = ""; //Cdula de usuario autoservicio logeado
    ExternalContext extContext = FacesContext.getCurrentInstance().getExternalContext(); //Toma ruta real de la aplicacin
    private String grupo = (String) FacesContext.getCurrentInstance().getExternalContext().getSessionMap()
            .get("grupo"); //Usuario logeado
    String vlcodcia = (String) FacesContext.getCurrentInstance().getExternalContext().getSessionMap()
            .get("ciaselected");

    //Variables para escaneo de documentos
    private double nroscan = 0; //Nmero de documento escaneado
    private String nbrdoc = "";
    private String comentdoc = ""; //Breve descripcin del documento escaneado

    private List<Autonom> list = new ArrayList<Autonom>();
    private int rows; //Registros de tabla
    private String param = "";
    int sleep = 100; //100 milisegundos de retraso para ejecutar actautosrv

    /**
     * @return the anio
     */
    public String getAnio() {
        return anio;
    }

    /**
     * @param anio
     *            the anio to set
     */
    public void setAnio(String anio) {
        this.anio = anio;
    }

    /**
     * @return the mes
     */
    public String getMes() {
        return mes;
    }

    /**
     * @param mes
     *            the mes to set
     */
    public void setMes(String mes) {
        this.mes = mes;
    }

    /**
     * @return the opc
     */
    public String getOpc() {
        return opc;
    }

    /**
     * @param opc the opc to set
     */
    public void setOpc(String opc) {
        this.opc = opc;
    }

    /**
     * @return the cedula
     */
    public String getCedula() {
        return cedula;
    }

    /**
     * @param cedula the cedula to set
     */
    public void setCedula(String cedula) {
        this.cedula = cedula;
    }

    /**
     * @return the nroscan
     */
    public double getNroscan() {
        return nroscan;
    }

    /**
     * @param nroscan the nroscan to set
     */
    public void setNroscan(double nroscan) {
        this.nroscan = nroscan;
    }

    /**
     * @return the nbrdoc
     */
    public String getNbrdoc() {
        return nbrdoc;
    }

    /**
     * @param nbrdoc the nbrdoc to set
     */
    public void setNbrdoc(String nbrdoc) {
        this.nbrdoc = nbrdoc;
    }

    /**
     * @return the comentdoc
     */
    public String getComentdoc() {
        return comentdoc;
    }

    /**
     * @param comentdoc the comentdoc to set
     */
    public void setComentdoc(String comentdoc) {
        this.comentdoc = comentdoc;
    }

    /**
     * @return the rows
     */
    public int getRows() {
        return rows;
    }

    /**
     * @param rows the rows to set
     */
    public void setRows(int rows) {
        this.rows = rows;
    }

    /**
     * @return the param
     */
    public String getParam() {
        return param;
    }

    /**
     * @param param the param to set
     */
    public void setParam(String param) {
        this.param = param;
    }

    // /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    // Variables seran utilizadas para capturar mensajes de errores de Oracle y
    // parametros de metodos
    FacesMessage msj = null;
    PntGenerica consulta = new PntGenerica();
    // /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    //Coneccion a base de datos
    //Pool de conecciones JNDI()
    Connection con;
    PreparedStatement pstmt = null;
    ResultSet r;

    // /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    // /////////////////////VARIABLES  PARA INDICAR COMPA?A SELECCIONADA/////////////////////////////////
    // /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

    /**
     * @return the codcia
     * @throws NamingException 
     */
    public String getCodcia() throws NamingException {
        String cia = null;
        String ciaselected = (String) FacesContext.getCurrentInstance().getExternalContext().getSessionMap()
                .get("ciaselected"); //Usuario logeado
        String desciaselected = (String) FacesContext.getCurrentInstance().getExternalContext().getSessionMap()
                .get("desciaselected"); //Usuario logeado
        cia = ciaselected + " - " + desciaselected;
        return cia;
    }

    ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    ///////////////////////////////////////UPLOAD DE ARCHIVOS PARA AUTOSERVICIO//////////////////////////////////////////////////

    public void handleFileUpload(FileUploadEvent event) throws NamingException, IOException {
        if (licencia(grupo)) {
            msj = new FacesMessage(FacesMessage.SEVERITY_WARN, getMessage("licven"), "");
            FacesContext.getCurrentInstance().addMessage(null, msj);
        } else {

            String vlcodcia = (String) FacesContext.getCurrentInstance().getExternalContext().getSessionMap()
                    .get("ciaselected");

            File ruta = new File(extContext.getRealPath(RUTA_EXTERNO) + File.separator + vlcodcia + File.separator
                    + vlcodcia + "_" + event.getFile().getFileName());
            FileValidator(FORMATO_FILE);//Compila el archivo
            if (validate(event.getFile().getFileName())) {
                try {
                    FileOutputStream fileOutputStream = new FileOutputStream(ruta);

                    byte[] buffer = new byte[BUFFER_SIZE];

                    int bulk;
                    InputStream inputStream = event.getFile().getInputstream();
                    while (true) {
                        bulk = inputStream.read(buffer);
                        if (bulk < 0) {
                            break;
                        }
                        fileOutputStream.write(buffer, 0, bulk);
                        fileOutputStream.flush();
                    }

                    fileOutputStream.close();
                    inputStream.close();

                    msj = new FacesMessage(FacesMessage.SEVERITY_INFO, getMessage("autos02Uploaded"), "");

                } catch (IOException e) {
                    e.printStackTrace();
                    msj = new FacesMessage(FacesMessage.SEVERITY_ERROR, getMessage("autos02UploadedFail"), "");
                }
            } else {
                msj = new FacesMessage(FacesMessage.SEVERITY_ERROR, getMessage("autos02Txt"), "");
            }
            FacesContext.getCurrentInstance().addMessage(null, msj);
        }
    }

    ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    ///////////////////////////////////////UPLOAD DE IMAGENES PARA AUTOSERVICIO//////////////////////////////////////////////////
    private String pcodcia = (String) FacesContext.getCurrentInstance().getExternalContext().getSessionMap()
            .get("cia");
    private String vcedula = (String) FacesContext.getCurrentInstance().getExternalContext().getSessionMap()
            .get("cedula"); //Cedula autoservicio

    public void handleImageUpload(FileUploadEvent event) throws NamingException {
        if (event.getFile().getSize() > 2097152) {
            msj = new FacesMessage(FacesMessage.SEVERITY_ERROR, getMessage("autonomSize"), "");

        } else {

            String foto = event.getFile().getFileName().replace(event.getFile().getFileName(),
                    pcodcia + vcedula + ".png");

            File ruta = new File(extContext.getRealPath(RUTA_IMAGEN) + File.separator + foto);
            FileValidator(FORMATO_IMAGE);//Compila el archivo
            if (validate(event.getFile().getFileName())) {
                try {
                    FileOutputStream fileOutputStream = new FileOutputStream(ruta);

                    byte[] buffer = new byte[BUFFER_SIZE];

                    int bulk;
                    InputStream inputStream = event.getFile().getInputstream();
                    while (true) {
                        bulk = inputStream.read(buffer);
                        if (bulk < 0) {
                            break;
                        }
                        fileOutputStream.write(buffer, 0, bulk);
                        fileOutputStream.flush();
                    }

                    fileOutputStream.close();
                    inputStream.close();

                    msj = new FacesMessage(FacesMessage.SEVERITY_INFO, getMessage("autos02Uploaded"), "");

                } catch (IOException e) {
                    e.printStackTrace();
                    msj = new FacesMessage(FacesMessage.SEVERITY_ERROR, getMessage("autos02UploadedFail"), "");
                }
            } else {
                msj = new FacesMessage(FacesMessage.SEVERITY_ERROR, getMessage("autonomPng"), "");
            }
        } //Valida el tamao del archivo
        FacesContext.getCurrentInstance().addMessage(null, msj);
    }

    private void FileValidator(String format) {
        pattern = Pattern.compile(format);
    }

    /**
    * Validate extension with regular expression
    * @param ifile for validation
    * @return true valid file, false invalid file
    */
    private boolean validate(final String file) {
        matcher = pattern.matcher(file);
        return matcher.matches();
    }

    /**
    * Borra autos02
    **/
    public void deleteAutos(String tabla, String codcia, String opc) throws NamingException {
        try {
            Context initContext = new InitialContext();
            DataSource ds = (DataSource) initContext.lookup(JNDI);
            con = ds.getConnection();

            String query = "";
            if (opc.equals("0")) {
                query = "DELETE FROM " + tabla + " WHERE PCODCIA = '" + codcia + "' AND ANIO = "
                        + Integer.parseInt(anio) + " and MES = " + Integer.parseInt(mes);
            } else {
                query = "DELETE FROM " + tabla + " WHERE PCODCIA = '" + codcia + "'";
            }
            pstmt = con.prepareStatement(query);
            //System.out.println(query);                  
            try {
                //Avisando
                pstmt.executeUpdate();
                //System.out.println("Registros:" + pstmt.getUpdateCount());   
                count = pstmt.getUpdateCount();
            } catch (SQLException e) {
                e.printStackTrace();
            }
            pstmt.close();
            con.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
    * Procesa el autoservicio.
    * Primero borra el mes y ao a la compaa corresponiente
    * Busca el txt en la carpeta de archivos
    * Procesa el txt en la tabla autos02
    * @throws NamingException 
    * @throws IOException 
    * @throws InterruptedException 
    **/
    @SuppressWarnings("static-access")
    public void procAutos02() throws NamingException, IOException, InterruptedException {
        if (licencia(grupo)) {
            msj = new FacesMessage(FacesMessage.SEVERITY_WARN, getMessage("licven"), "");
            FacesContext.getCurrentInstance().addMessage(null, msj);
        } else {

            //Selecciona la compaia por defecto para agregarla al nombre de txt. El autoservicio se debe procesar por compaa
            //, el mismo debe garantizar que cada archivo txt tenga asociado la compaa para poder separlas.

            //HttpServletRequest request = (HttpServletRequest)FacesContext.getCurrentInstance().getExternalContext().getRequest();
            //String[] chkbox = request.getParameterValues("toMail");

            //Genera uno por cada opcin
            //Genera uno por cada opcin
            /*
            if (chkbox!=null  && opc.equals("P")){
               msj = new FacesMessage(FacesMessage.SEVERITY_ERROR, getMessage("autos02MailMsj"), "");
               FacesContext.getCurrentInstance().addMessage(null, msj);
            } else if (chkbox!=null  &&  opc.equals("V")){
               msj = new FacesMessage(FacesMessage.SEVERITY_ERROR, getMessage("autos02MailMsj"), "");
               FacesContext.getCurrentInstance().addMessage(null, msj);
            } else if (chkbox!=null  &&  opc.equals("U")){
               msj = new FacesMessage(FacesMessage.SEVERITY_ERROR, getMessage("autos02MailMsj"), "");
               FacesContext.getCurrentInstance().addMessage(null, msj);
            } else if (chkbox!=null  &&  opc.equals("I")){
               msj = new FacesMessage(FacesMessage.SEVERITY_ERROR, getMessage("autos02MailMsj"), "");
               FacesContext.getCurrentInstance().addMessage(null, msj);
            } else if (chkbox!=null  &&  opc.equals("PR")){
               msj = new FacesMessage(FacesMessage.SEVERITY_ERROR, getMessage("autos02MailMsj"), "");
               FacesContext.getCurrentInstance().addMessage(null, msj);   
            } else*/
            if (opc.equals("N")) {
                deleteAutos("AUTOS02", vlcodcia, "0"); //Elimina registros anteriores
                //Procesa el archivo de texto
                externos.pntExt(extContext.getRealPath(RUTA_EXTERNO) + File.separator + vlcodcia,
                        vlcodcia + "_" + opc + anio + mes, "AUTOS02", JNDI); //Procesa nminas

                try {
                    Thread.currentThread().sleep(sleep);
                    //sleep for 100 ms
                    //do what you want to do after sleeptig
                    actAutoSrv(vlcodcia, Integer.parseInt(anio), Integer.parseInt(mes), login.toUpperCase(),
                            "autos02");

                } catch (InterruptedException e) {
                    e.printStackTrace();
                    msj = new FacesMessage(FacesMessage.SEVERITY_FATAL, e.getMessage(), "");
                }

                //Enva recibos de pago
                /*
                if (chkbox!=null  && opc.equals("N")){
                    
                //Procesando reportes en pdf para envios de correo
                    
                //Selecciona ficha segun usuarios de autoservicio
                consulta.selectPntGenerica("select distinct trim(CAST(periodo as text)), trim(pfictra), trim(b.mail) " +
                " from autos02 a, autos01 b" +
                " where trim(a.cedula)=trim(CAST(b.cedula AS text))" +
                " and a.pcodcia='" + vlcodcia + 
                "' and anio=" + anio + " and mes =" + mes +
                " and periodo in (select periodo from recibos_enviados where pcodcia = '" + vlcodcia + 
                "' and anio = " + anio + " and mes =" + mes + " and isenv = '0') and mail_validado = '1'", JNDI);
                int filas = consulta.getRows();
                String[][] vlconsulta = consulta.getArray();
                RunReport reportout = new RunReport();
                FileIO borrarFile = new FileIO();
                    
                //Si hay al go enviar
                if(filas>0){
                    
                for (int i = 0; i < filas; i ++) {
                   //Genera los recibos en pdf
                  reportout.outReporteRecibo(vlcodcia+"AUTONOM", "pdf"
                   , extContext.getRealPath(RUTA_REPORTE), extContext.getRealPath(RUTA_LOGS)
                     , "RP_"+vlconsulta[i][1] + "_" + vlconsulta[i][0], anio, mes, vlconsulta[i][0].toString(), vlconsulta[i][1], JNDI);  
                    
                }
                for (int i = 0; i < filas; i ++) {
                 //Enviar correo por recibo de pago
                 enviarRP(vlconsulta[i][2], extContext.getRealPath(RUTA_LOGS), "RP_"+vlconsulta[i][1] + "_" + vlconsulta[i][0]);
                 //Actualiza histrico de recibos enviados
                 update(vlcodcia, anio, mes, vlconsulta[i][0], '1');
                  }
                for (int i = 0; i < filas; i ++) {                
                 //Para finalizar borrar los archivos generados de la carpeta logs
                 borrarFile.borraFile(extContext.getRealPath(RUTA_LOGS), "RP_"+vlconsulta[i][1] + "_" + vlconsulta[i][0] + ".pdf");
                   }
                }
                    
                }*/

                anio = "";
                opc = "S";
                mes = "S";
            } else if (opc.equals("V")) {
                deleteAutos("AUTOS03", vlcodcia, "1"); //Elimina registros anteriores
                //Procesa el archivo de texto
                externos.pntExt(extContext.getRealPath(RUTA_EXTERNO) + File.separator + vlcodcia,
                        vlcodcia + "_" + opc + anio + mes, "AUTOS03", JNDI); //Procesa vacaciones   
                try {
                    Thread.currentThread().sleep(sleep);
                    //sleep for 100 ms
                    //do what you want to do after sleeptig
                    actAutoSrv(vlcodcia, Integer.parseInt(anio), Integer.parseInt(mes), login.toUpperCase(),
                            "autos03");

                } catch (InterruptedException e) {
                    e.printStackTrace();
                    msj = new FacesMessage(FacesMessage.SEVERITY_FATAL, e.getMessage(), "");
                }
                anio = "";
                opc = "S";
                mes = "S";
            } else if (opc.equals("P")) {
                deleteAutos("AUTOS04", vlcodcia, "0"); //Elimina registros anteriores
                //Procesa el archivo de texto
                externos.pntExt(extContext.getRealPath(RUTA_EXTERNO) + File.separator + vlcodcia,
                        vlcodcia + "_" + opc + anio + mes, "AUTOS04", JNDI); //Procesa prestaciones   
                try {
                    Thread.currentThread().sleep(sleep);
                    //sleep for 100 ms
                    //do what you want to do after sleeptig
                    actAutoSrv(vlcodcia, Integer.parseInt(anio), Integer.parseInt(mes), login.toUpperCase(),
                            "autos04");

                } catch (InterruptedException e) {
                    e.printStackTrace();
                    msj = new FacesMessage(FacesMessage.SEVERITY_FATAL, e.getMessage(), "");
                }
                anio = "";
                opc = "S";
                mes = "S";
            } else if (opc.equals("I")) {
                deleteAutos("AUTOS05", vlcodcia, "1"); //Elimina registros anteriores
                //Procesa el archivo de texto
                externos.pntExt(extContext.getRealPath(RUTA_EXTERNO) + File.separator + vlcodcia,
                        vlcodcia + "_" + opc + anio + mes, "AUTOS05", JNDI); //Procesa intereses   
                try {
                    Thread.currentThread().sleep(sleep);
                    //sleep for 100 ms
                    //do what you want to do after sleeptig
                    actAutoSrv(vlcodcia, Integer.parseInt(anio), Integer.parseInt(mes), login.toUpperCase(),
                            "autos05");

                } catch (InterruptedException e) {
                    e.printStackTrace();
                    msj = new FacesMessage(FacesMessage.SEVERITY_FATAL, e.getMessage(), "");
                }
                anio = "";
                opc = "S";
                mes = "S";
            } else if (opc.equals("PR")) {
                deleteAutos("AUTOS06", vlcodcia, "0"); //Elimina registros anteriores
                //Procesa el archivo de texto
                externos.pntExt(extContext.getRealPath(RUTA_EXTERNO) + File.separator + vlcodcia,
                        vlcodcia + "_" + opc + anio + mes, "AUTOS06", JNDI); //Procesa prstamos   
                actAutoSrv(vlcodcia, Integer.parseInt(anio), Integer.parseInt(mes), login.toUpperCase(), "autos06");
                anio = "";
                opc = "S";
                mes = "S";
            } else if (opc.equals("U")) {
                deleteAutos("AUTOS07", vlcodcia, "0"); //Elimina registros anteriores
                //Procesa el archivo de texto
                externos.pntExt(extContext.getRealPath(RUTA_EXTERNO) + File.separator + vlcodcia,
                        vlcodcia + "_" + opc + anio + mes, "AUTOS07", JNDI); //Procesa utilidades   
                try {
                    Thread.currentThread().sleep(sleep);
                    //sleep for 100 ms
                    //do what you want to do after sleeptig
                    actAutoSrv(vlcodcia, Integer.parseInt(anio), Integer.parseInt(mes), login.toUpperCase(),
                            "autos07");

                } catch (InterruptedException e) {
                    e.printStackTrace();
                    msj = new FacesMessage(FacesMessage.SEVERITY_FATAL, e.getMessage(), "");
                }
                anio = "";
                opc = "S";
                mes = "S";
            } else if (opc.equals("T")) {//Procesa todas las opciones utilida multiThreads para el caso

                deleteAutos("AUTOS02", vlcodcia, "0"); //Elimina registros anteriores
                //Procesa el archivo de texto
                externos.pntExtThread(extContext.getRealPath(RUTA_EXTERNO) + File.separator + vlcodcia,
                        vlcodcia + "_N" + anio + mes, "AUTOS02", JNDI); //Procesa nminas
                try {
                    Thread.currentThread().sleep(sleep);
                    //sleep for 100 ms
                    //do what you want to do after sleeptig
                    actAutoSrv(vlcodcia, Integer.parseInt(anio), Integer.parseInt(mes), login.toUpperCase(),
                            "autos02");

                } catch (InterruptedException e) {
                    e.printStackTrace();
                    msj = new FacesMessage(FacesMessage.SEVERITY_FATAL, e.getMessage(), "");
                }

                //Enva recibos de pago
                /*
                if (chkbox!=null  && opc.equals("T")){
                       
                   //Procesando reportes en pdf para envios de correo
                        
                    //Selecciona ficha segun usuarios de autoservicio
                   consulta.selectPntGenerica("select distinct trim(CAST(periodo as text)), trim(pfictra), trim(b.mail) " +
                   " from autos02 a, autos01 b" +
                   " where trim(a.cedula)=trim(CAST(b.cedula AS text))" +
                   " and a.pcodcia='" + vlcodcia + 
                   "' and anio=" + anio + " and mes =" + mes +
                   " and periodo in (select periodo from recibos_enviados where pcodcia = '" + vlcodcia + 
                   "' and anio = " + anio + " and mes =" + mes + " and isenv = '0')", JNDI);
                    int filas = consulta.getRows();
                    String[][] vlconsulta = consulta.getArray();
                    RunReport reportout = new RunReport();
                    FileIO borrarFile = new FileIO();
                    
                        
                    //Si hay al go enviar
                    if(filas>0){
                        
                    for (int i = 0; i < filas; i ++) {
                 //Genera los recibos en pdf
                reportout.outReporteRecibo(vlcodcia+"AUTONOM", "pdf"
                      , extContext.getRealPath(RUTA_REPORTE), extContext.getRealPath(RUTA_LOGS)
                        , "RP_"+vlconsulta[i][1] + "_" + vlconsulta[i][0], anio, mes, vlconsulta[i][0].toString(), vlconsulta[i][1], JNDI);  
                    
                    }
                    for (int i = 0; i < filas; i ++) {
                          
                      //Enviar correo por recibo de pago
                      enviarRP(vlconsulta[i][2], extContext.getRealPath(RUTA_LOGS), "RP_"+vlconsulta[i][1] + "_" + vlconsulta[i][0]);
                      //Actualiza histrico de recibos enviados
                      update(vlcodcia, anio, mes, vlconsulta[i][0], '1');
                }
                     for (int i = 0; i < filas; i ++) {                
                      //Para finalizar borrar los archivos generados de la carpeta logs
                      borrarFile.borraFile(extContext.getRealPath(RUTA_LOGS), "RP_"+vlconsulta[i][1] + "_" + vlconsulta[i][0] + ".pdf");
                 }
                    }
                       
                }*/
                //Utiliza la tcica de multithread para optimizar el proceso usando todos los cores del equipo
                //Crea Objetos tipo AutosrvThread   
                AutosrvThread pr = new AutosrvThread("AUTOS02", vlcodcia, "N", anio, mes, "0");
                AutosrvThread pr1 = new AutosrvThread("AUTOS03", vlcodcia, "V", anio, mes, "1");
                AutosrvThread pr2 = new AutosrvThread("AUTOS04", vlcodcia, "P", anio, mes, "0");
                AutosrvThread pr3 = new AutosrvThread("AUTOS05", vlcodcia, "I", anio, mes, "1");
                AutosrvThread pr4 = new AutosrvThread("AUTOS06", vlcodcia, "PR", anio, mes, "0");
                AutosrvThread pr5 = new AutosrvThread("AUTOS07", vlcodcia, "U", anio, mes, "0");

                //Llamada de ejecucin de los Threads
                pr.start();
                pr1.start();
                pr2.start();
                pr3.start();
                pr4.start();
                pr5.start();

                try {
                    Thread.currentThread().sleep(sleep);
                    //sleep for 100 ms
                    //do what you want to do after sleeptig
                    actAutoSrv(vlcodcia, Integer.parseInt(anio), Integer.parseInt(mes), login.toUpperCase(),
                            "autos02");
                    actAutoSrv(vlcodcia, Integer.parseInt(anio), Integer.parseInt(mes), login.toUpperCase(),
                            "autos03");
                    actAutoSrv(vlcodcia, Integer.parseInt(anio), Integer.parseInt(mes), login.toUpperCase(),
                            "autos04");
                    actAutoSrv(vlcodcia, Integer.parseInt(anio), Integer.parseInt(mes), login.toUpperCase(),
                            "autos05");
                    actAutoSrv(vlcodcia, Integer.parseInt(anio), Integer.parseInt(mes), login.toUpperCase(),
                            "autos06");
                    actAutoSrv(vlcodcia, Integer.parseInt(anio), Integer.parseInt(mes), login.toUpperCase(),
                            "autos07");

                } catch (InterruptedException e) {
                    e.printStackTrace();
                    msj = new FacesMessage(FacesMessage.SEVERITY_FATAL, e.getMessage(), "");
                }
                anio = "";
                opc = "S";
                mes = "S";

                msj = new FacesMessage(FacesMessage.SEVERITY_INFO, getMessage("msnProcAutoSrvThread"), "");
                FacesContext.getCurrentInstance().addMessage(null, msj);
            }
        }
        actCaracteres();
    }

    /**
    * Rutina que ejecuta el control de proceso de licencias de grupos de trabajadores.
    * Por ejemplo si la licencia es hasta 25 y el usuario carga mas de 25 el procedimiento
    * almacenado en la base de datos elimina los trabajadres de 25 en adelante
    **/
    private void actAutoSrv(String cia, Integer anio, Integer mes, String user, String opcauto)
            throws NamingException {
        //Pool de conecciones JNDI(). Cambio de metodologa de conexin a bd. Julio 2010
        Context initContext = new InitialContext();
        DataSource ds = (DataSource) initContext.lookup(JNDI);
        try {
            Connection con = ds.getConnection();
            CallableStatement proc = null;

            proc = con.prepareCall("{? = CALL act_autosrv(?,?,?,?,?)}");
            proc.registerOutParameter(1, Types.OTHER);
            proc.setString(2, cia);
            proc.setInt(3, anio);
            proc.setInt(4, mes);
            proc.setString(5, user);
            proc.setString(6, opcauto);
            proc.execute();
            //System.out.println("Compaa: " + cia);
            //System.out.println("Ao: " + anio);
            //System.out.println("Mes: " + mes);
            //System.out.println("Usuario: " + user);
            //System.out.println("Opcin " + opcauto);
            //
            proc.close();
            con.close();

            //System.out.println("Actualizando");

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
    * Rutina que ejecuta el control de proceso de licencias de grupos de trabajadores.
    * Por ejemplo si la licencia es hasta 25 y el usuario carga mas de 25 el procedimiento
    * almacenado en la base de datos elimina los trabajadres de 25 en adelante
    **/
    private void actCaracteres() throws NamingException {
        //Pool de conecciones JNDI(). Cambio de metodologa de conexin a bd. Julio 2010
        Context initContext = new InitialContext();
        DataSource ds = (DataSource) initContext.lookup(JNDI);
        try {
            Connection con = ds.getConnection();
            CallableStatement proc = null;

            proc = con.prepareCall("{? = CALL act_caracteres()}");
            proc.registerOutParameter(1, Types.OTHER);
            proc.execute();
            //System.out.println("Compaa: " + cia);
            //System.out.println("Ao: " + anio);
            //System.out.println("Mes: " + mes);
            //System.out.println("Usuario: " + user);
            //System.out.println("Opcin " + opcauto);
            //
            proc.close();
            con.close();

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
    * Actualiza es estatus de los recibos de pago enviados
        
    private void update(String codcia, String anio, String mes, String periodo, char c)  {
       try {
          Context initContext = new InitialContext();     
          DataSource ds = (DataSource) initContext.lookup(JNDI);
          con = ds.getConnection();
        
           String query = "UPDATE recibos_enviados";
                 query += " SET isenv = '" + c + "'";
                  query += " WHERE pcodcia = trim('" + codcia + "')";
                  query += " and anio = " + Integer.parseInt(anio);
                  query += " and mes = " + Integer.parseInt(mes);
                  query += " and periodo = " + Integer.parseInt(periodo);
           //System.out.println(query);
           pstmt = con.prepareStatement(query);
        
           try {
               //Avisando
               pstmt.executeUpdate();
        
           } catch (SQLException e) {
               e.printStackTrace();
           }
        
           pstmt.close();
           con.close();
        
       } catch (Exception e) {
           e.printStackTrace();
       }
        
    }**/

    /**
    * Leer Datos de TipoConsulta
    * @throws NamingException 
    * @throws IOException 
    **/
    public void select(int first, int pageSize, String sortField, Object filterValue)
            throws SQLException, NamingException {
        try {
            Context initContext = new InitialContext();
            DataSource ds = (DataSource) initContext.lookup(JNDI);

            con = ds.getConnection();

            String ciaselected = (String) FacesContext.getCurrentInstance().getExternalContext().getSessionMap()
                    .get("ciaselected");

            //Consulta paginada
            String query = "select distinct  id,  anio, mes, periodo, case when isenv = '1' then '"
                    + getMessage("autos02EnviadoS") + "' else '" + getMessage("autos02EnviadoN") + "' end";
            query += " from recibos_enviados";
            query += " where id||cast(anio as text)||cast(mes as text)||cast(periodo as text)  like '%"
                    + ((String) filterValue).toUpperCase() + "%'";
            query += " and pcodcia = '" + ciaselected.toUpperCase() + "'";
            query += " order by anio, periodo desc ";
            query += " LIMIT " + pageSize;
            query += " OFFSET " + first;

            pstmt = con.prepareStatement(query);
            //System.out.println(query);

            r = pstmt.executeQuery();

            while (r.next()) {
                Autonom select = new Autonom();
                select.setVid(r.getString(1));
                select.setVanio(r.getString(2));
                select.setVmes(r.getString(3));
                select.setVperiodo(r.getString(4));
                select.setVcodcto(r.getString(5));
                //Agrega la lista
                list.add(select);

            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        //Cierra las conecciones
        pstmt.close();
        con.close();
        r.close();
    }

    /**
    * Leer registros en la tabla
    * @throws NamingException 
    * @throws IOException 
    **/
    public void counter(Object filterValue) throws SQLException, NamingException {
        try {
            Context initContext = new InitialContext();
            DataSource ds = (DataSource) initContext.lookup(JNDI);

            con = ds.getConnection();
            String ciaselected = (String) FacesContext.getCurrentInstance().getExternalContext().getSessionMap()
                    .get("ciaselected");

            //Consulta paginada
            String query = "SELECT count_recibos_enviados('" + ((String) filterValue).toUpperCase() + "','"
                    + ciaselected.toUpperCase() + "')";

            pstmt = con.prepareStatement(query);
            //System.out.println(query);

            r = pstmt.executeQuery();

            while (r.next()) {
                rows = r.getInt(1);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        //Cierra las conecciones
        pstmt.close();
        con.close();
        r.close();

    }

    /**
    * Borra TipoConsulta
    * <p>
    * Parametros del metodo: String codcentro. Pool de conecciones
    * @throws NamingException 
     * @throws IOException 
    **/
    public void delete_recibos_enviados() throws NamingException, IOException {
        if (licencia(grupo)) {
            msj = new FacesMessage(FacesMessage.SEVERITY_WARN, getMessage("licven"), "");
            FacesContext.getCurrentInstance().addMessage(null, msj);
        } else {
            HttpServletRequest request = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext()
                    .getRequest();
            String[] chkbox = request.getParameterValues("toDelete");
            if (chkbox == null) {
                msj = new FacesMessage(FacesMessage.SEVERITY_WARN, getMessage("del"), "");
            } else {
                try {
                    Context initContext = new InitialContext();
                    DataSource ds = (DataSource) initContext.lookup(JNDI);
                    con = ds.getConnection();

                    String param = "'" + StringUtils.join(chkbox, "','") + "'";

                    String ciaselected = (String) FacesContext.getCurrentInstance().getExternalContext()
                            .getSessionMap().get("ciaselected");

                    String query = "DELETE FROM recibos_enviados WHERE cast(anio as text)||cast(mes as text)||cast(periodo as text) in ("
                            + param + ") and pcodcia = '" + ciaselected + "'";
                    pstmt = con.prepareStatement(query);
                    //System.out.println(query);

                    try {
                        //Avisando
                        pstmt.executeUpdate();
                        if (pstmt.getUpdateCount() <= 1) {
                            msj = new FacesMessage(FacesMessage.SEVERITY_INFO, getMessage("msnDelete"), "");
                        } else {
                            msj = new FacesMessage(FacesMessage.SEVERITY_INFO,
                                    pstmt.getUpdateCount() + " " + getMessage("msnDeletes"), "");
                        }

                    } catch (SQLException e) {
                        e.printStackTrace();
                        msj = new FacesMessage(FacesMessage.SEVERITY_FATAL, e.getMessage(), "");
                    }

                    pstmt.close();
                    con.close();

                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
            FacesContext.getCurrentInstance().addMessage(null, msj);
        }
    }

    /**
    * Elimina datos en autoservicio.
    **/
    public void delete() throws NamingException, IOException {
        if (licencia(grupo)) {
            msj = new FacesMessage(FacesMessage.SEVERITY_WARN, getMessage("licven"), "");
            FacesContext.getCurrentInstance().addMessage(null, msj);
        } else {

            if (anio == null) {
                anio = "";
            }

            if (anio.equals("")) {
                msj = new FacesMessage(FacesMessage.SEVERITY_ERROR, getMessage("autos02ProcAnio"), "");
                FacesContext.getCurrentInstance().addMessage(null, msj);
            } else if (mes.equals("S")) {
                msj = new FacesMessage(FacesMessage.SEVERITY_ERROR, getMessage("autos02ProcMes"), "");
                FacesContext.getCurrentInstance().addMessage(null, msj);
            } else if (opc.equals("S")) {
                msj = new FacesMessage(FacesMessage.SEVERITY_ERROR, getMessage("autos02ProcOpc"), "");
                FacesContext.getCurrentInstance().addMessage(null, msj);
            } else {
                //Valida que los campos no sean nulos y procesa autoservicio
                //No hace nada si son nulos
                //Selecciona la compaia por defecto para agregarla al nombre de txt. El autoservicio se debe procesar pro compaa
                //, el mismo debe garantizar que cada archivo txt tenga asociado la compaa para poder separlas.
                String vlcodcia = (String) FacesContext.getCurrentInstance().getExternalContext().getSessionMap()
                        .get("ciaselected");
                //Genera uno por cada opcin

                if (opc.equals("N")) {
                    deleteAutos("AUTOS02", vlcodcia, "0"); //Elimina registros anteriores
                    if (count > 0) {
                        anio = "";
                        opc = "S";
                        mes = "S";
                        msj = new FacesMessage(FacesMessage.SEVERITY_INFO, getMessage("msnDeletes"), "");
                        FacesContext.getCurrentInstance().addMessage(null, msj);
                    } else {
                        msj = new FacesMessage(FacesMessage.SEVERITY_INFO, getMessage("msnnoDelete"), "");
                        FacesContext.getCurrentInstance().addMessage(null, msj);
                    }
                } else if (opc.equals("V")) {
                    deleteAutos("AUTOS03", vlcodcia, "1"); //Elimina registros anteriores
                    if (count > 0) {
                        anio = "";
                        opc = "S";
                        mes = "S";
                        msj = new FacesMessage(FacesMessage.SEVERITY_INFO, getMessage("msnDeletes"), "");
                        FacesContext.getCurrentInstance().addMessage(null, msj);
                    } else {
                        msj = new FacesMessage(FacesMessage.SEVERITY_INFO, getMessage("msnnoDelete"), "");
                        FacesContext.getCurrentInstance().addMessage(null, msj);
                    }
                } else if (opc.equals("P")) {
                    deleteAutos("AUTOS04", vlcodcia, "0"); //Elimina registros anteriores   
                    if (count > 0) {
                        anio = "";
                        opc = "S";
                        mes = "S";
                        msj = new FacesMessage(FacesMessage.SEVERITY_INFO, getMessage("msnDeletes"), "");
                        FacesContext.getCurrentInstance().addMessage(null, msj);
                    } else {
                        msj = new FacesMessage(FacesMessage.SEVERITY_INFO, getMessage("msnnoDelete"), "");
                        FacesContext.getCurrentInstance().addMessage(null, msj);
                    }
                } else if (opc.equals("I")) {
                    deleteAutos("AUTOS05", vlcodcia, "0"); //Elimina registros anteriores
                    if (count > 0) {
                        anio = "";
                        opc = "S";
                        mes = "S";
                        msj = new FacesMessage(FacesMessage.SEVERITY_INFO, getMessage("msnDeletes"), "");
                        FacesContext.getCurrentInstance().addMessage(null, msj);
                    } else {
                        msj = new FacesMessage(FacesMessage.SEVERITY_INFO, getMessage("msnnoDelete"), "");
                        FacesContext.getCurrentInstance().addMessage(null, msj);
                    }
                } else if (opc.equals("PR")) {
                    deleteAutos("AUTOS06", vlcodcia, "0"); //Elimina registros anteriores
                    if (count > 0) {
                        anio = "";
                        opc = "S";
                        mes = "S";
                        msj = new FacesMessage(FacesMessage.SEVERITY_INFO, getMessage("msnDeletes"), "");
                        FacesContext.getCurrentInstance().addMessage(null, msj);
                    } else {
                        msj = new FacesMessage(FacesMessage.SEVERITY_INFO, getMessage("msnnoDelete"), "");
                        FacesContext.getCurrentInstance().addMessage(null, msj);
                    }
                } else if (opc.equals("U")) {
                    deleteAutos("AUTOS07", vlcodcia, "0"); //Elimina registros anteriores   
                    if (count > 0) {
                        anio = "";
                        opc = "S";
                        mes = "S";
                        msj = new FacesMessage(FacesMessage.SEVERITY_INFO, getMessage("msnDeletes"), "");
                        FacesContext.getCurrentInstance().addMessage(null, msj);
                    } else {
                        msj = new FacesMessage(FacesMessage.SEVERITY_INFO, getMessage("msnnoDelete"), "");
                        FacesContext.getCurrentInstance().addMessage(null, msj);
                    }
                }
            }
        }
    }

    // /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    // /////////////////////////////////////UPLOAD DE ARCHIVOS PARA AUTOSERVICIO//////////////////////////////////////////////////

    public void handleReportUpload(FileUploadEvent event) throws NamingException, IOException {
        if (licencia(grupo)) {
            msj = new FacesMessage(FacesMessage.SEVERITY_WARN, getMessage("licven"), "");
            FacesContext.getCurrentInstance().addMessage(null, msj);
        } else {
            File ruta = new File(
                    extContext.getRealPath(RUTA_REPORTE) + File.separator + event.getFile().getFileName());
            FileValidator(FORMATO_REPORTE);// Compila el archivo
            if (validate(event.getFile().getFileName())) {
                try {
                    FileOutputStream fileOutputStream = new FileOutputStream(ruta);

                    byte[] buffer = new byte[BUFFER_SIZE];

                    int bulk;
                    InputStream inputStream = event.getFile().getInputstream();
                    while (true) {
                        bulk = inputStream.read(buffer);
                        if (bulk < 0) {
                            break;
                        }
                        fileOutputStream.write(buffer, 0, bulk);
                        fileOutputStream.flush();
                    }

                    fileOutputStream.close();
                    inputStream.close();

                    msj = new FacesMessage(FacesMessage.SEVERITY_INFO, getMessage("autos02Uploaded"), "");

                } catch (IOException e) {
                    e.printStackTrace();
                    msj = new FacesMessage(FacesMessage.SEVERITY_ERROR, getMessage("autos02UploadedFail"), "");
                }
            } else {
                msj = new FacesMessage(FacesMessage.SEVERITY_ERROR, getMessage("autos02Rpt"), "");
            }
            FacesContext.getCurrentInstance().addMessage(null, msj);
        }
    }

    /**
     * Mtodo que enva los recibos de pago a cada usuario
     * @throws IOException 
     * @throws NumberFormatException 
     * **/
    public void enviarRP(String to, String laruta, String file) throws NumberFormatException, IOException {
        try {
            //System.out.println("Enviando recibo");
            //System.out.println(jndimail());
            Context initContext = new InitialContext();
            Session session = (Session) initContext.lookup(jndimail());
            // Crear el mensaje a enviar
            MimeMessage mm = new MimeMessage(session);

            // Establecer las direcciones a las que ser enviado
            // el mensaje (test2@gmail.com y test3@gmail.com en copia
            // oculta)
            // mm.setFrom(new
            // InternetAddress("opennomina@dvconsultores.com"));
            mm.addRecipient(Message.RecipientType.TO, new InternetAddress(to));

            // Establecer el contenido del mensaje
            mm.setSubject(getMessage("mailRP"));
            //mm.setText(getMessage("mailContent"));

            // Create the message part 
            BodyPart messageBodyPart = new MimeBodyPart();

            // Fill the message
            messageBodyPart.setContent(getMessage("mailRPcontent"), "text/html; charset=utf-8");

            // Create a multipar message
            Multipart multipart = new MimeMultipart();

            // Set text message part
            multipart.addBodyPart(messageBodyPart);

            // Part two is attachment
            messageBodyPart = new MimeBodyPart();
            String filename = laruta + File.separator + file + ".pdf";
            javax.activation.DataSource source = new FileDataSource(filename);
            messageBodyPart.setDataHandler(new DataHandler(source));
            messageBodyPart.setFileName(file + ".pdf");
            multipart.addBodyPart(messageBodyPart);

            // Send the complete message parts
            mm.setContent(multipart);

            // Enviar el correo electrnico
            Transport.send(mm);
            //System.out.println("Correo enviado exitosamente a :" + to);
            //System.out.println("Fin recibo");
        } catch (Exception e) {
            msj = new FacesMessage(FacesMessage.SEVERITY_FATAL, e.getMessage() + ": " + to, "");
            FacesContext.getCurrentInstance().addMessage(null, msj);
            e.printStackTrace();
        }
    }

    /**
     * Mtodo para recibir los mail jndi
     * **/
    private String jndimail() {
        String query = "select trim(jndimail) from seg001 where grupo = '" + grupo + "'";
        int rows = 0;
        String[][] vltabla;
        String jndi = "";
        try {
            consulta.selectPntGenerica(query, JNDI);
            rows = consulta.getRows();
            vltabla = consulta.getArray();
            if (rows > 0) {
                jndi = vltabla[0][0];
            }
        } catch (NamingException e) {
            e.printStackTrace();
        }
        return jndi;
    }

    //////////////////////////////////////////////////////////////////////////////////////////////////////////
    //////////////////////////////////////////////////////////////////////////////////////////////////////
    ///////////////////////////////////////////////////////////////////////////////////////////////////
    ////////////////////////////INTEGRACIONES LOCALES EN CADA CLIENTE///////////////////////////////
    //////////////////////////////////////////////////////////////////////////////////////////////////////////
    ////////////////////////////////////////////////////////////////////////////////////////////////////
    private int columns;
    private String[][] arr;
    private String[][] tabla;

    /**
     * @return the columns
     */
    public int getColumns() {
        return columns;
    }

    /**
     * @param columns the columns to set
     */
    public void setColumns(int columns) {
        this.columns = columns;
    }

    /**
     * @return the arr
     */
    public String[][] getArr() {
        return arr;
    }

    /**
     * @param arr the arr to set
     */
    public void setArr(String[][] arr) {
        this.arr = arr;
    }

    /**
     * @return the tabla
     */
    public String[][] getTabla() {
        return tabla;
    }

    /**
     * @param tabla the tabla to set
     */
    public void setTabla(String[][] tabla) {
        this.tabla = tabla;
    }

}