Servicios.ArchivoOrden.java Source code

Java tutorial

Introduction

Here is the source code for Servicios.ArchivoOrden.java

Source

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package Servicios;

import Hibernate.Util.HibernateUtil;
import Hibernate.entidades.Archivo;
import Hibernate.entidades.Orden;
import Hibernate.entidades.Usuario;
import com.itextpdf.text.Document;
import com.itextpdf.text.Element;
import com.itextpdf.text.Image;
import com.itextpdf.text.PageSize;
import com.itextpdf.text.pdf.PdfWriter;
import java.awt.Desktop;
import java.awt.image.BufferedImage;
import java.awt.image.RenderedImage;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JFileChooser;
import javax.swing.JOptionPane;
import javax.swing.table.DefaultTableModel;
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.criterion.Restrictions;
import Integral.Herramientas;
import java.io.BufferedReader;
import java.io.FileReader;
import uk.co.mmscomputing.device.scanner.Scanner;
import uk.co.mmscomputing.device.scanner.ScannerDevice;
import uk.co.mmscomputing.device.scanner.ScannerIOException;
import uk.co.mmscomputing.device.scanner.ScannerIOMetadata;
import uk.co.mmscomputing.device.scanner.ScannerListener;

/**
 *
 * @author I.S.C Salvador
 */
public class ArchivoOrden extends javax.swing.JPanel implements ScannerListener {

    /**
     * Creates new form Galeria
     */
    private Usuario usr;
    private String orden = "";
    DefaultTableModel model;
    String[] columnas = new String[] { "ID", "NOMBRE", "FECHA" };
    Orden ord;
    Herramientas h;
    String sessionPrograma = "";
    Scanner scanner = null;
    String edo = "";
    String ruta;
    JFileChooser selector;

    public ArchivoOrden(String id, Usuario usuario, String estado, String ses) {
        usr = usuario;
        sessionPrograma = ses;
        orden = id;
        edo = estado;
        initComponents();
        ruta = "";
        try {
            FileReader f = new FileReader("config.txt");
            BufferedReader b = new BufferedReader(f);
            if ((ruta = b.readLine()) == null)
                ruta = "";
            b.close();
        } catch (Exception e) {
            e.printStackTrace();
        }

        if (usr.getEditaDocumentos() == false) {
            edo = "sin permiso";
        }
        cargaArchivos();
        //p_contenedor.set
        if (edo.compareTo("") == 0)
            visualiza(true);
        else
            visualiza(false);
        try {
            scanner = Scanner.getDevice();
            scanner.addListener(this);
        } catch (Exception e) {
            //System.out.println(e);
        }
        h = new Herramientas(usr, 0);
        if (h.isCerrada(orden) == true)
            visualiza(false);
        selector = new JFileChooser();
    }

    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        jButton2 = new javax.swing.JButton();
        jScrollPane1 = new javax.swing.JScrollPane();
        panel = new javax.swing.JScrollPane();
        p_contenedor = new javax.swing.JPanel();
        jButton1 = new javax.swing.JButton();
        jButton3 = new javax.swing.JButton();

        setBackground(new java.awt.Color(255, 255, 255));

        jButton2.setBackground(new java.awt.Color(2, 135, 242));
        jButton2.setForeground(new java.awt.Color(255, 255, 255));
        jButton2.setIcon(new ImageIcon("imagenes/guardar-documento.png"));
        jButton2.setText("Agregar");
        jButton2.setToolTipText("Agregar un documento");
        jButton2.setHorizontalAlignment(javax.swing.SwingConstants.LEFT);
        jButton2.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton2ActionPerformed(evt);
            }
        });

        panel.setBorder(new javax.swing.border.LineBorder(new java.awt.Color(90, 66, 126), 1, true));
        panel.setMaximumSize(new java.awt.Dimension(818, 32767));

        p_contenedor.setBackground(new java.awt.Color(255, 255, 255));
        p_contenedor.setBorder(javax.swing.BorderFactory.createTitledBorder(
                new javax.swing.border.LineBorder(new java.awt.Color(90, 66, 126), 1, true), "Carpeta de Archivos",
                javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.TOP,
                new java.awt.Font("Arial", 1, 12))); // NOI18N
        p_contenedor.setAutoscrolls(true);
        p_contenedor.setMaximumSize(new java.awt.Dimension(787, 32767));
        java.awt.FlowLayout flowLayout1 = new java.awt.FlowLayout(java.awt.FlowLayout.LEFT);
        flowLayout1.setAlignOnBaseline(true);
        p_contenedor.setLayout(flowLayout1);
        panel.setViewportView(p_contenedor);

        jScrollPane1.setViewportView(panel);

        jButton1.setBackground(new java.awt.Color(2, 135, 242));
        jButton1.setForeground(new java.awt.Color(255, 255, 255));
        jButton1.setText("Seleccionar");
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton1ActionPerformed(evt);
            }
        });

        jButton3.setBackground(new java.awt.Color(2, 135, 242));
        jButton3.setForeground(new java.awt.Color(255, 255, 255));
        jButton3.setText("Escanear");
        jButton3.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton3ActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
        this.setLayout(layout);
        layout.setHorizontalGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(layout.createSequentialGroup()
                        .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 824, Short.MAX_VALUE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                                .addComponent(jButton2, javax.swing.GroupLayout.DEFAULT_SIZE, 111, Short.MAX_VALUE)
                                .addComponent(jButton1, javax.swing.GroupLayout.DEFAULT_SIZE,
                                        javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                                .addComponent(jButton3, javax.swing.GroupLayout.DEFAULT_SIZE,
                                        javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                        .addContainerGap()));
        layout.setVerticalGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(layout.createSequentialGroup().addContainerGap()
                        .addComponent(jButton2, javax.swing.GroupLayout.PREFERRED_SIZE, 34,
                                javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 137, Short.MAX_VALUE)
                        .addComponent(jButton3, javax.swing.GroupLayout.PREFERRED_SIZE, 39,
                                javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jButton1, javax.swing.GroupLayout.PREFERRED_SIZE, 42,
                                javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addContainerGap())
                .addComponent(jScrollPane1));
    }// </editor-fold>//GEN-END:initComponents

    private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton2ActionPerformed
        // TODO add your handling code here:
        h = new Herramientas(usr, 0);
        h.session(sessionPrograma);

        selector.setSelectedFile(null);
        selector.setMultiSelectionEnabled(true);
        int estado = 1;
        File destino = null;
        estado = selector.showOpenDialog(null);
        if (estado == 0) {
            File archivo[] = null;
            archivo = selector.getSelectedFiles();
            Session session = HibernateUtil.getSessionFactory().openSession();
            try {
                for (int x = 0; x < archivo.length; x++) {
                    session.beginTransaction().begin();
                    if (archivo[x].exists()) {
                        File folder = new File(ruta + "ordenes/" + orden + "/archivos");
                        folder.mkdirs();
                        destino = new File(ruta + "ordenes/" + orden + "/archivos/" + archivo[x].getName());
                        if (destino.exists()) {
                            int opt = JOptionPane.showConfirmDialog(this,
                                    "El archivo '" + archivo[x].getName() + "' ya existe desea remplazarlo");
                            System.out.println(opt);
                            if (opt == 0) {
                                try {
                                    //****************obtenemos la nueva fecha
                                    Date fecha_orden = new Date();
                                    DateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss");//YYYY-MM-DD HH:MM:SS
                                    String valor = dateFormat.format(fecha_orden);
                                    String[] fecha = valor.split("-");
                                    String[] hora = fecha[2].split(":");
                                    String[] aux = hora[0].split(" ");
                                    fecha[2] = aux[0];
                                    hora[0] = aux[1];
                                    Calendar calendario = Calendar.getInstance();
                                    calendario.set(Integer.parseInt(fecha[2]), Integer.parseInt(fecha[1]) - 1,
                                            Integer.parseInt(fecha[0]), Integer.parseInt(hora[0]),
                                            Integer.parseInt(hora[1]), Integer.parseInt(hora[2]));

                                    //destino.deleteOnExit();
                                    InputStream in = new FileInputStream(archivo[x]);
                                    OutputStream out = new FileOutputStream(destino);
                                    byte[] buf = new byte[1024];
                                    int len;
                                    while ((len = in.read(buf)) > 0) {
                                        out.write(buf, 0, len);
                                    }
                                    in.close();
                                    out.close();
                                    session.beginTransaction();
                                    int id = -1;

                                    Archivo ar = (Archivo) session.createCriteria(Archivo.class)
                                            .add(Restrictions.eq("orden.idOrden", ord.getIdOrden()))
                                            .add(Restrictions.eq("nombreDocumento", archivo[x].getName()))
                                            .setMaxResults(1).uniqueResult();
                                    if (ar != null) {
                                        ar.setFechaDocumento(calendario.getTime());
                                        session.update(ar);
                                    } else {
                                        ar = new Archivo();
                                        Archivo img = new Archivo(ord, archivo[x].getName(), calendario.getTime());
                                        ord = (Orden) session.get(Orden.class, Integer.parseInt(orden));
                                        ord.addArchivo(img);
                                        session.save(ord);
                                    }
                                    session.getTransaction().commit();
                                } catch (Exception e) {
                                    e.printStackTrace();
                                    session.getTransaction().rollback();
                                    javax.swing.JOptionPane.showMessageDialog(null,
                                            "Error no se pudo eliminar el archivo NO Error:3");
                                }
                            }
                        } else {
                            //String ruta=archivo.getPath();

                            InputStream in = new FileInputStream(archivo[x]);
                            OutputStream out = new FileOutputStream(destino);
                            byte[] buf = new byte[1024];
                            int len;
                            while ((len = in.read(buf)) > 0) {
                                out.write(buf, 0, len);
                            }
                            in.close();
                            out.close();

                            ord = (Orden) session.get(Orden.class, Integer.parseInt(orden));

                            //*******obtenemos fecha con hora******
                            Date fecha_orden = new Date();
                            DateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss");//YYYY-MM-DD HH:MM:SS
                            String valor = dateFormat.format(fecha_orden);
                            String[] fecha = valor.split("-");
                            String[] hora = fecha[2].split(":");
                            String[] aux = hora[0].split(" ");
                            fecha[2] = aux[0];
                            hora[0] = aux[1];
                            Calendar calendario = Calendar.getInstance();
                            calendario.set(Integer.parseInt(fecha[2]), Integer.parseInt(fecha[1]) - 1,
                                    Integer.parseInt(fecha[0]), Integer.parseInt(hora[0]),
                                    Integer.parseInt(hora[1]), Integer.parseInt(hora[2]));
                            System.out.println(calendario.getTime());
                            Archivo img = new Archivo(ord, archivo[x].getName(), calendario.getTime());
                            //******************************************
                            ord.addArchivo(img);
                            session.saveOrUpdate(ord);
                            session.getTransaction().commit();
                        }
                    } else {
                        session.getTransaction().rollback();
                        //javax.swing.JOptionPane.showMessageDialog(null, "Error no se pudo cargar el archivo NO Error:2");
                    }
                }
            } catch (Exception ioe) {
                session.getTransaction().rollback();
                destino.deleteOnExit();
                ioe.printStackTrace();
                javax.swing.JOptionPane.showMessageDialog(null, "Error no se pudo cargar algun archivo");
            }
            if (session != null)
                if (session.isOpen())
                    session.close();
            cargaArchivos();
        }
    }//GEN-LAST:event_jButton2ActionPerformed

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton1ActionPerformed
        try {
            // TODO add your handling code here:
            scanner.select();
        } catch (ScannerIOException ex) {
            Logger.getLogger(ArchivoOrden.class.getName()).log(Level.SEVERE, null, ex);
        }
    }//GEN-LAST:event_jButton1ActionPerformed

    private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton3ActionPerformed
        // TODO add your handling code here:
        try {
            scanner.acquire();
        } catch (ScannerIOException ex) {
            Logger.getLogger(ArchivoOrden.class.getName()).log(Level.SEVERE, null, ex);
        }
    }//GEN-LAST:event_jButton3ActionPerformed

    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton jButton1;
    private javax.swing.JButton jButton2;
    private javax.swing.JButton jButton3;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JPanel p_contenedor;
    private javax.swing.JScrollPane panel;
    // End of variables declaration//GEN-END:variables

    public void visualiza(Boolean valor) {
        this.jButton1.setEnabled(valor);
        this.jButton2.setEnabled(valor);
        this.jButton3.setEnabled(valor);
    }

    public void cargaArchivos() {
        Session session = HibernateUtil.getSessionFactory().openSession();
        try {
            ord = (Orden) session.get(Orden.class, Integer.parseInt(orden));
            Archivo[] fotos = (Archivo[]) ord.getArchivos().toArray(new Archivo[0]);
            p_contenedor.setSize(250 * 3, (fotos.length / 3) * 80);
            p_contenedor.setMaximumSize(p_contenedor.getSize());
            p_contenedor.setPreferredSize(p_contenedor.getSize());

            for (int k = 0; k < fotos.length - 1; k++) {
                for (int f = 0; f < (fotos.length - 1) - k; f++) {
                    if (fotos[f].getFechaDocumento().after(fotos[f + 1].getFechaDocumento()) == true) {
                        Archivo aux;
                        aux = fotos[f];
                        fotos[f] = fotos[f + 1];
                        fotos[f + 1] = aux;
                    }
                }
            }

            if (fotos.length > 0) {
                p_contenedor.removeAll();
                DateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss");
                for (int i = 0; i < fotos.length; i++) {
                    Elemento obj = new Elemento(fotos[i], "" + ord.getIdOrden(), edo, ruta);
                    p_contenedor.add(obj);
                }
                //p_contenedor.updateUI();
                p_contenedor.repaint();
            }
        } catch (Exception e) {
            System.out.println(e);
        }
        if (session != null)
            if (session.isOpen())
                session.close();
    }

    public void update(ScannerIOMetadata.Type type, ScannerIOMetadata metadata) {
        try {
            if (type.equals(ScannerIOMetadata.ACQUIRED)) {
                //****************obtenemos la nueva fecha
                Date fecha_orden = new Date();
                DateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss");//YYYY-MM-DD HH:MM:SS
                String valor = dateFormat.format(fecha_orden);
                String[] fecha = valor.split("-");
                String[] hora = fecha[2].split(":");
                String[] aux = hora[0].split(" ");
                fecha[2] = aux[0];
                hora[0] = aux[1];
                Calendar calendario = Calendar.getInstance();
                calendario.set(Integer.parseInt(fecha[2]), Integer.parseInt(fecha[1]) - 1,
                        Integer.parseInt(fecha[0]), Integer.parseInt(hora[0]), Integer.parseInt(hora[1]),
                        Integer.parseInt(hora[2]));
                boolean op = true;
                do {
                    String nombre = "";
                    File destino = null;
                    nombre = javax.swing.JOptionPane.showInputDialog(null, "Guardar como:");
                    if (nombre == null)
                        nombre = "";

                    if (nombre.compareToIgnoreCase("") != 0) {
                        File archivo = new File(ruta + "ordenes/" + orden + "/archivos/" + nombre + ".pdf");
                        if (archivo.exists()) {
                            int opt = JOptionPane.showConfirmDialog(this, "El archivo ya existe desea remplazarlo",
                                    "Alerta", JOptionPane.YES_NO_OPTION);
                            if (opt == 0) {
                                BufferedImage image = metadata.getImage();
                                Document document = new Document(PageSize.LETTER, 36, 36, 54, 36);
                                PdfWriter.getInstance(document, new FileOutputStream(
                                        ruta + "ordenes/" + orden + "/archivos/" + nombre + ".pdf"));
                                document.open();
                                ByteArrayOutputStream baos = new ByteArrayOutputStream();
                                ImageIO.write((RenderedImage) image, "jpg", baos);
                                baos.flush();
                                byte[] imagedata = baos.toByteArray();
                                Image imagen = Image.getInstance(imagedata);
                                imagen.setAlignment(Element.ALIGN_CENTER);
                                imagen.scaleAbsolute(PageSize.LETTER.getWidth(), PageSize.LETTER.getHeight());
                                document.add(imagen);
                                document.close();
                                Session session = HibernateUtil.getSessionFactory().openSession();
                                try {
                                    session.beginTransaction().begin();
                                    int id = -1;

                                    Archivo ar = (Archivo) session.createCriteria(Archivo.class)
                                            .add(Restrictions.eq("orden.idOrden", ord.getIdOrden()))
                                            .add(Restrictions.eq("nombreDocumento", archivo.getName()))
                                            .setMaxResults(1).uniqueResult();
                                    if (ar != null) {
                                        ar.setFechaDocumento(calendario.getTime());
                                        session.update(ar);
                                    } else {
                                        ar = new Archivo();
                                        Archivo img = new Archivo(ord, archivo.getName(), calendario.getTime());
                                        ord = (Orden) session.get(Orden.class, Integer.parseInt(orden));
                                        ord.addArchivo(img);
                                        session.save(ord);
                                    }
                                    session.getTransaction().commit();
                                } catch (Exception e) {
                                    System.out.println(e);
                                }
                                if (session != null)
                                    if (session.isOpen())
                                        session.close();

                                File file = new File(ruta + "ordenes/" + orden + "/archivos/" + nombre + ".pdf");
                                Desktop.getDesktop().open(file);
                                op = false;
                            }

                        } else {
                            BufferedImage image = metadata.getImage();
                            Document document = new Document(PageSize.LETTER, 36, 36, 54, 36);
                            PdfWriter.getInstance(document, new FileOutputStream(
                                    ruta + "ordenes/" + orden + "/archivos/" + nombre + ".pdf"));
                            document.open();
                            ByteArrayOutputStream baos = new ByteArrayOutputStream();
                            ImageIO.write((RenderedImage) image, "jpg", baos);
                            baos.flush();
                            byte[] imagedata = baos.toByteArray();
                            Image imagen = Image.getInstance(imagedata);
                            imagen.setAlignment(Element.ALIGN_CENTER);
                            imagen.scaleAbsolute(PageSize.LETTER.getWidth(), PageSize.LETTER.getHeight());
                            document.add(imagen);
                            document.close();
                            Session session = HibernateUtil.getSessionFactory().openSession();
                            try {
                                session.beginTransaction().begin();
                                int id = -1;

                                Archivo ar = (Archivo) session.createCriteria(Archivo.class)
                                        .add(Restrictions.eq("orden.idOrden", ord.getIdOrden()))
                                        .add(Restrictions.eq("nombreDocumento", archivo.getName())).setMaxResults(1)
                                        .uniqueResult();
                                ar = new Archivo();
                                Archivo img = new Archivo(ord, archivo.getName(), calendario.getTime());
                                ord = (Orden) session.get(Orden.class, Integer.parseInt(orden));
                                ord.addArchivo(img);
                                session.save(ord);
                                session.getTransaction().commit();
                            } catch (Exception e) {
                                System.out.println(e);
                            }
                            if (session != null)
                                if (session.isOpen())
                                    session.close();

                            File file = new File(ruta + "ordenes/" + orden + "/archivos/" + nombre + ".pdf");
                            Desktop.getDesktop().open(file);
                            op = false;
                        }
                    }
                } while (op);
                cargaArchivos();
            } else if (type.equals(ScannerIOMetadata.STATECHANGE)) {
                System.out.println(metadata.getStateStr());
            } else if (type.equals(ScannerIOMetadata.EXCEPTION)) {
                metadata.getException().printStackTrace();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}