ec.edu.chyc.manejopersonal.managebean.util.BeansUtils.java Source code

Java tutorial

Introduction

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

import ec.edu.chyc.manejopersonal.util.ServerUtils;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.nio.file.Path;
import java.util.List;
import java.util.Map;
import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;
import org.apache.commons.io.FilenameUtils;
import org.jbibtex.ParseException;
import org.primefaces.context.RequestContext;
import org.primefaces.model.DefaultStreamedContent;
import org.primefaces.model.StreamedContent;
import org.primefaces.model.UploadedFile;

/**
 *
 * @author marcelocaj
 */
public class BeansUtils {

    /***
     * Ejecuta cdigo javascript
     * @param codigo Cdigo javascript a ejecutar
     */
    public static void ejecutarJS(String codigo) {
        RequestContext context = RequestContext.getCurrentInstance();
        context.execute(codigo);
    }

    /***
     * Dado el archivo de fileUpload de primefaces (en el evento fileUpload), sube el archivo a un destino
     * @param origen Variable tipo UploadedFile obtenida del evento fileUpload del componente de primefaces, ah se obtendr el archivo
     * @param destino Archivo donde se guardar el archivo
     * @throws IOException Excepcin ocurrida al crear, leer o escribir el archivo
     */
    public static void subirArchivoPrimefaces(UploadedFile origen, File destino) throws IOException {
        destino.createNewFile();

        FileOutputStream fileOutputStream = null;
        InputStream inputStream = null;
        try {
            fileOutputStream = new FileOutputStream(destino);
            byte[] buffer = new byte[ServerUtils.BUFFER_SIZE];
            int bulk;
            inputStream = origen.getInputstream();
            while (true) {
                bulk = inputStream.read(buffer);
                if (bulk < 0) {
                    break;
                }
                fileOutputStream.write(buffer, 0, bulk);
                fileOutputStream.flush();
            }
            fileOutputStream.close();
            inputStream.close();
        } finally {
            if (fileOutputStream != null) {
                fileOutputStream.close();
            }
            if (inputStream != null) {
                inputStream.close();
            }
        }
    }

    /***
     * Abre un stream para descargar un archivo
     * @param direccionArchivoOrigen Archivo a descargar
     * @param nombreArchivoDescarga Nombre del archivo como se quiere descargar, puede ser diferente al nombre original
     * @return Stream de descarga
     * @throws FileNotFoundException En caso de no encontrar el archivo
     */
    public static StreamedContent streamParaDescarga(Path direccionArchivoOrigen, String nombreArchivoDescarga)
            throws FileNotFoundException {
        String nombreArchivoGuardado = direccionArchivoOrigen.getFileName().toString();
        String extension = FilenameUtils.getExtension(nombreArchivoGuardado);

        String nuevoNombre = ServerUtils.convertirNombreArchivo(nombreArchivoDescarga, extension, 40);

        Path pathArchivo = direccionArchivoOrigen;
        InputStream stream = new BufferedInputStream(new FileInputStream(pathArchivo.toFile()));

        ExternalContext externalContext = FacesContext.getCurrentInstance().getExternalContext();
        StreamedContent streamParaDescarga = new DefaultStreamedContent(stream,
                externalContext.getMimeType(nuevoNombre), nuevoNombre);
        return streamParaDescarga;
    }

    /***
     * Para obtener el valor de un parmetro colocado desde otra pgina mediante jsf
     * @param nombreParametro Nombre del parmetro
     * @return Valor (texto) del parmetro
     */
    public static String valorParam(String nombreParametro) {
        FacesContext fc = FacesContext.getCurrentInstance();
        Map<String, String> params = fc.getExternalContext().getRequestParameterMap();
        return params.get(nombreParametro);
    }

    /**
     * Devuelve true si el string contiene cdigos latex
     * @param latexString La cadena de texto a comprobarse
     * @return true si contiene cdigos latex, caso contrario false
     */
    public static boolean isLatexString(String latexString) {
        return (latexString.indexOf('\\') > -1 || latexString.indexOf('{') > -1);
    }

    /**
     * Transforma cdigos latex a string en caso de existir, caso contrario devuelve la misma cadena
     * @param latexString Cadena de texto a transformar
     * @return La cadena con todos los cdigos transformados a texto plano
     * @throws ParseException En caso de que no se pueda procesar algn cdigo latex
     */
    public static String latexToString(String latexString) throws ParseException {
        if (isLatexString(latexString)) {
            // Reemplazar cadenas de texto por su equivalente en ansi comn
            latexString = latexString.replace("", "-");
            latexString = latexString.replace("", "-");
            latexString = latexString.replace("", "<=");
            latexString = latexString.replace("", ">=");

            /*String transformed = "";
            for (int i = 0; i < latexString.length();i++) {
            if (latexString.charAt(i) > 255) {
                transformed += "\\symbol{\""+Integer.toHexString((int)latexString.charAt(i)).toUpperCase()+"}";
            } else {
                transformed += latexString.charAt(i);
            }
            }
            latexString = transformed;*/
            org.jbibtex.LaTeXParser latexParser = new org.jbibtex.LaTeXParser();

            List<org.jbibtex.LaTeXObject> latexObjects = latexParser.parse(latexString);

            org.jbibtex.LaTeXPrinter latexPrinter = new org.jbibtex.LaTeXPrinter();

            String plainTextString = latexPrinter.print(latexObjects);
            return plainTextString;
        } else {
            return latexString;
            // Plain text string
        }
    }

    /**
     * Convierte org.jbibtex.Value a texto plano incluyendo una transformacin de cdigos latex a texto si es que tiene
     * @param value valor a comprobar, puede ser nulo
     * @return Si value es nulo, devuelve una cadena vaca, caso contrario si el valor de value contiene cdigo latex, 
     * devuelve su transformacin de texto plano.
     * @throws ParseException En caso de que no se pueda procesar algn cdigo latex
     */
    public static String value2String(org.jbibtex.Value value) throws ParseException {
        if (value != null) {
            return latexToString(value.toUserString());
        } else {
            return "";
        }
    }

}