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

Java tutorial

Introduction

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

import ec.edu.chyc.manejopersonal.controller.ConvenioJpaController;
import ec.edu.chyc.manejopersonal.entity.Convenio;
import ec.edu.chyc.manejopersonal.entity.Institucion;
import ec.edu.chyc.manejopersonal.entity.Proyecto;
import ec.edu.chyc.manejopersonal.managebean.util.BeansUtils;
import ec.edu.chyc.manejopersonal.util.FechaUtils;
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.time.LocalDate;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
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.application.FacesMessage;
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 marcelocaj
 */
@Named(value = "gestorConvenio")
@SessionScoped
public class GestorConvenio implements Serializable {
    private final ConvenioJpaController convenioController = new ConvenioJpaController();
    private Convenio convenio;
    private List<Convenio> listaConvenios = new ArrayList<>();
    private List<Proyecto> listaProyectos = new ArrayList<>();
    private boolean modoModificar;
    private Institucion institucion;
    private long idInstitucionGen = -1L;
    private String tamanoArchivo = "";

    public GestorConvenio() {
    }

    @PostConstruct
    public void init() {

    }

    public void inicializarManejoConvenio() {
        GestorInstitucion.getInstance().getListaInstitucionesAgregadas().clear();
        listaConvenios.clear();
        listaProyectos.clear();
        convenio = new Convenio();
        modoModificar = false;
        tamanoArchivo = "";

        GestorProyecto.getInstance().actualizarListaProyecto();
        GestorInstitucion.getInstance().actualizarListaInstituciones();
        GestorInstitucion.getInstance().getListaInstitucionesAgregadas().clear();
    }

    public String initVerConvenio(Long id) {
        inicializarManejoConvenio();

        cargarDatosConvenio(id);

        return "verConvenio";
    }

    public String initCrearConvenio() {
        inicializarManejoConvenio();
        modoModificar = false;

        return "manejoConvenio";
    }

    public void actualizarListaConvenios() {
        try {
            listaConvenios = convenioController.listConvenio();
        } catch (Exception ex) {
            Logger.getLogger(GestorConvenio.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public String initListarConvenios() {
        inicializarManejoConvenio();

        actualizarListaConvenios();
        modoModificar = false;
        return "listaConvenios";
    }

    public String initModificarConvenio(Long id) {
        inicializarManejoConvenio();

        cargarDatosConvenio(id);

        modoModificar = true;

        return "manejoConvenio";
    }

    private void cargarDatosConvenio(Long id) {
        convenio = convenioController.findConvenio(id);

        listaProyectos = new ArrayList(convenio.getProyectosCollection());

        try {
            Path pathArchivoSubido = ServerUtils.getPathConvenios().resolve(convenio.getArchivoConvenio());
            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);
        }

    }

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

    public String guardar() {

        convenio.setProyectosCollection(new HashSet(listaProyectos));

        if (convenio.getProyectosCollection().isEmpty()) {
            GestorMensajes.getInstance().mostrarMensajeWarn("Por favor, agregar proyectos al convenio.");
            return "";
        }

        if (convenio.getFechaInicio() != null && convenio.getFechaFin() != null) {
            LocalDate dtInicio = FechaUtils.asLocalDate(convenio.getFechaInicio());
            LocalDate dtFin = FechaUtils.asLocalDate(convenio.getFechaFin());
            //MutableDateTime dtInicio = new MutableDateTime(convenio.getFechaInicio());
            //MutableDateTime dtFin = new MutableDateTime(convenio.getFechaFin());

            if (dtFin.isBefore(dtInicio)) {
                FacesMessage msg = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Error",
                        "La fecha de finalizacin debe ser mayor a la de inicio.");
                FacesContext.getCurrentInstance().addMessage(null, msg);
                return "";
            }
        }

        try {
            if (modoModificar) {
                convenioController.edit(convenio);
            } else {
                convenioController.create(convenio);
            }
            return initListarConvenios();
            //return "listaConvenios";
        } catch (Exception ex) {
            Logger.getLogger(GestorConvenio.class.getName()).log(Level.SEVERE, null, ex);
        }

        return "";
    }

    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 quitarProyecto(Proyecto proyectoQuitar) {
        listaProyectos.remove(proyectoQuitar);
    }

    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);
                }
            }
        }
    }

    public void guardarInstitucion() {
        institucion.setId(idInstitucionGen);
        idInstitucionGen--;
        GestorInstitucion.getInstance().getListaInstitucionesAgregadas().add(institucion);
        convenio.setInstitucion(institucion);

        institucion = new Institucion();
        BeansUtils.ejecutarJS("PF('dlgInstitucion').hide()");
    }

    public void abrirNuevaInstitucionDlg() {
        institucion = new Institucion();

        RequestContext.getCurrentInstance().update("formContenido:divDialogs");
        //BeansUtils.ejecutarJS("PF('dlgInstitucion').show()");
    }

    public void fileUploadListener(FileUploadEvent event) {
        UploadedFile file = event.getFile();
        if (!convenio.getArchivoConvenio().isEmpty() && !modoModificar) {
            //si la propiedad getArchivo 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, no realizarlo cuando est en modo modificar ya que puede darse el caso
            // que no quiera guardar los cambios (y si ya se borr el archivo, no sera posible recuperarlo en caso de cancelar la edicin)
            Path pathArchivoAnterior = ServerUtils.getPathTemp().resolve(convenio.getArchivoConvenio()).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.generarNombreValidoArchivo(extension);
            Path pathArchivo = ServerUtils.getPathTemp().resolve(nombreArchivo).normalize();

            File newFile = pathArchivo.toFile();

            try {
                BeansUtils.subirArchivoPrimefaces(file, newFile);

                convenio.setArchivoConvenio(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 StreamedContent streamParaDescarga(Convenio convenioDescarga) {
        String nombreArchivo = convenioDescarga.getArchivoConvenio();
        try {
            return BeansUtils.streamParaDescarga(ServerUtils.getPathConvenios().resolve(nombreArchivo),
                    "convenio_" + convenioDescarga.getTitulo());
        } catch (FileNotFoundException ex) {
            Logger.getLogger(GestorArticulo.class.getName()).log(Level.SEVERE, null, ex);
        }
        return null;
    }

    public Convenio getConvenio() {
        return convenio;
    }

    public void setConvenio(Convenio convenio) {
        this.convenio = convenio;
    }

    public List<Convenio> getListaConvenios() {
        return listaConvenios;
    }

    public void setListaConvenios(List<Convenio> listaConvenios) {
        this.listaConvenios = listaConvenios;
    }

    public boolean isModoModificar() {
        return modoModificar;
    }

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

    public Institucion getInstitucion() {
        return institucion;
    }

    public void setInstitucion(Institucion institucion) {
        this.institucion = institucion;
    }

    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;
    }

}