ec.edu.chyc.manejopersonal.managebean.GestorContrato.java Source code

Java tutorial

Introduction

Here is the source code for ec.edu.chyc.manejopersonal.managebean.GestorContrato.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.
 */
/*
* 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 ec.edu.chyc.manejopersonal.managebean;

import ec.edu.chyc.manejopersonal.controller.ContratoJpaController;
import ec.edu.chyc.manejopersonal.entity.Contrato;
import ec.edu.chyc.manejopersonal.entity.Proyecto;
import ec.edu.chyc.manejopersonal.managebean.util.BeansUtils;
import ec.edu.chyc.manejopersonal.util.ServerUtils;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import javax.inject.Named;
import javax.enterprise.context.SessionScoped;
import java.io.Serializable;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Random;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.annotation.PostConstruct;
import javax.el.ELContext;
import javax.el.ValueExpression;
import javax.faces.context.FacesContext;
import org.apache.commons.io.FilenameUtils;
import org.primefaces.context.RequestContext;
import org.primefaces.event.FileUploadEvent;
import org.primefaces.event.SelectEvent;
import org.primefaces.model.StreamedContent;
import org.primefaces.model.UploadedFile;

/**
 *
 * @author Juan Jos
 */
@Named(value = "gestorContrato")
@SessionScoped
public class GestorContrato implements Serializable {

    private final ContratoJpaController contratoController = new ContratoJpaController();

    private List<Contrato> listaContrato = new ArrayList<>();
    private List<Proyecto> listaProyectos = new ArrayList<>();
    private Contrato contrato = new Contrato();
    private boolean modoModificar = false;

    private boolean esProfesor = false;
    private String tamanoArchivo;

    public GestorContrato() {
    }

    @PostConstruct
    public void init() {
    }

    public static GestorContrato getInstance() {
        FacesContext facesContext = FacesContext.getCurrentInstance();
        ELContext context = facesContext.getELContext();
        ValueExpression ex = facesContext.getApplication().getExpressionFactory().createValueExpression(context,
                "#{gestorContrato}", GestorContrato.class);
        return (GestorContrato) ex.getValue(context);
    }

    public void actualizarListaContrato() {
        try {
            listaContrato = contratoController.listContrato();
        } catch (Exception ex) {
            Logger.getLogger(GestorContrato.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public StreamedContent streamParaDescarga(Contrato contratoDescarga) {
        String nombreArchivo = contratoDescarga.getArchivoContrato();
        try {
            return BeansUtils.streamParaDescarga(ServerUtils.getPathContratos().resolve(nombreArchivo),
                    "contrato_" + contratoDescarga.getPersona().getIdentificacion());
        } catch (FileNotFoundException ex) {
            Logger.getLogger(GestorArticulo.class.getName()).log(Level.SEVERE, null, ex);
        }
        return null;
    }

    public void quitarProyecto(Proyecto proyectoQuitar) {
        listaProyectos.remove(proyectoQuitar);
    }

    public void agregarProyecto() {
        Map<String, Object> options = new HashMap<>();
        options.put("resizable", true);
        options.put("draggable", true);
        options.put("width", "75%");
        options.put("modal", true);
        options.put("contentWidth", "100%");
        GestorDialogListaProyectos.getInstance().clearListaProyectosSel();
        RequestContext.getCurrentInstance().openDialog("dialogListaProyectos", options, null);
    }

    public void onProyectoChosen(SelectEvent event) {
        List<Proyecto> listaProyectosSel = (List<Proyecto>) event.getObject();
        if (listaProyectosSel != null) {
            for (Proyecto proy : listaProyectosSel) {
                if (!listaProyectos.contains(proy)) {
                    listaProyectos.add(proy);
                }
            }
            RequestContext.getCurrentInstance().update("formContenido:dtProyectos");
        }
    }

    private void inicializarManejoContrato() {
        contrato = new Contrato();
        esProfesor = false;
        tamanoArchivo = "";
        listaProyectos.clear();
        GestorProyecto.getInstance().actualizarListaProyecto();
        GestorPersona.getInstance().actualizarListado();
    }

    public String initModificarContrato(Long id) {
        //contrato = contratoController.
        inicializarManejoContrato();

        contrato = contratoController.findContrato(id);
        listaProyectos = new ArrayList(contrato.getProyectosCollection());

        if (contrato.getTipoProfesor() != null) {
            esProfesor = true;
        }

        /*if (!esProfesor) {
        //si no es profesor, asignar el unico proyecto relacionado al contrato, a la variable contrato.proyecto para poder obtener de una sola
        Proyecto unicoProyecto = contrato.getProyectosCollection().stream().findFirst().get();
        contrato.setProyecto(unicoProyecto);
        }*/
        modoModificar = true;
        try {
            Path pathArchivoSubido = ServerUtils.getPathContratos().resolve(contrato.getArchivoContrato());
            if (Files.isRegularFile(pathArchivoSubido) && Files.exists(pathArchivoSubido)) {
                Long size = Files.size(pathArchivoSubido);
                tamanoArchivo = ServerUtils.humanReadableByteCount(size);
            } else {
                tamanoArchivo = "";
            }
        } catch (IOException ex) {
            Logger.getLogger(GestorContrato.class.getName()).log(Level.SEVERE, null, ex);
        }
        return "manejoContratos";
    }

    public String initCrearContrato() {
        inicializarManejoContrato();
        modoModificar = false;
        //actualizarListaContrato();
        return "manejoContratos";
    }

    public String initListarContratos() {
        actualizarListaContrato();
        return "listaContratos";
    }

    public String guardar() {
        if (!esProfesor) {
            contrato.setTipoProfesor(null);
            //agregar a la lista de proyectos el nico proyecto seleccionado
            listaProyectos.clear();
            listaProyectos.add(contrato.getProyecto());
        }
        contrato.setProyectosCollection(new HashSet(listaProyectos));
        try {
            if (modoModificar) {
                contratoController.edit(contrato);
            } else {
                contratoController.create(contrato);
            }
            return initListarContratos();
        } catch (Exception ex) {
            Logger.getLogger(GestorContrato.class.getName()).log(Level.SEVERE, null, ex);
        }
        return "";
    }

    public void fileUploadListener(FileUploadEvent event) {
        UploadedFile file = event.getFile();
        if (!contrato.getArchivoContrato().isEmpty() && !modoModificar) {
            //si la propiedad getArchivoArticulo() esta llena, significa que antes ya subi un archivo y ahora est subiendo uno nuevo para reemplazarlo
            // por lo tanto hay que eliminar el archivo anterior
            Path pathArchivoAnterior = ServerUtils.getPathTemp().resolve(contrato.getArchivoContrato()).normalize();
            File archivoEliminar = pathArchivoAnterior.toFile();
            //borrar el archivo anterior en caso de existir
            if (archivoEliminar.isFile()) {
                archivoEliminar.delete();
            }
        }
        if (file != null) {
            String extension = FilenameUtils.getExtension(file.getFileName());
            String nombreArchivo = ServerUtils.generateB64Uuid().replace("=", "") + (new Random()).nextInt(9999)
                    + "." + extension;
            nombreArchivo = ServerUtils.convertirNombreArchivo(nombreArchivo);
            Path pathArchivo = ServerUtils.getPathTemp().resolve(nombreArchivo).normalize();
            File newFile = pathArchivo.toFile();
            try {
                BeansUtils.subirArchivoPrimefaces(file, newFile);
                contrato.setArchivoContrato(nombreArchivo);
                tamanoArchivo = ServerUtils.humanReadableByteCount(file.getSize());
            } catch (IOException ex) {
                Logger.getLogger(GestorArticulo.class.getName()).log(Level.SEVERE, null, ex);
            }
        } else {
            System.err.println("Error al subir archivo");
        }
    }

    public boolean puedeSerContratoProfesor() {
        return contrato.getTipo() == Contrato.TipoContrato.SERCOP;
    }

    public boolean isEsProfesor() {
        return esProfesor;
    }

    public void setEsProfesor(boolean esProfesor) {
        this.esProfesor = esProfesor;
    }

    public Contrato.TipoContrato[] getTiposContrato() {
        return Contrato.TipoContrato.values();
    }

    public Contrato.TipoProfesor[] getTiposProfesor() {
        return Contrato.TipoProfesor.values();
    }

    public List<Contrato> getListaContrato() {
        return listaContrato;
    }

    public void setListaContrato(List<Contrato> listaContrato) {
        this.listaContrato = listaContrato;
    }

    public Contrato getContrato() {
        return contrato;
    }

    public void setContrato(Contrato contrato) {
        this.contrato = contrato;
    }

    public boolean isModoModificar() {
        return modoModificar;
    }

    public void setModoModificar(boolean modoModificar) {
        this.modoModificar = modoModificar;
    }

    public String getTamanoArchivo() {
        return tamanoArchivo;
    }

    public void setTamanoArchivo(String tamanoArchivo) {
        this.tamanoArchivo = tamanoArchivo;
    }

    public List<Proyecto> getListaProyectos() {
        return listaProyectos;
    }

    public void setListaProyectos(List<Proyecto> listaProyectos) {
        this.listaProyectos = listaProyectos;
    }
}