Package br.edu.utfpr.cm.JGitMinerWeb.util

Source Code of br.edu.utfpr.cm.JGitMinerWeb.util.JsfUtil

package br.edu.utfpr.cm.JGitMinerWeb.util;

import br.edu.utfpr.cm.JGitMinerWeb.model.Startable;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.Serializable;
import java.net.URLDecoder;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.faces.application.FacesMessage;
import javax.faces.component.UIComponent;
import javax.faces.component.UIViewRoot;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import org.primefaces.model.DefaultStreamedContent;
import org.primefaces.model.StreamedContent;

public class JsfUtil implements Serializable {

    private static final String[] CARACTERES = {"{", "}", "(", ")", "\\[", "\\]", "<", ">",
        ":", ";", ".", ",", "!", "?", "\\", "/", "~", "`", "\"", "\'", "\\\\",
        "=", "+", "\\-", "*", "@", "#", "$", "%", "^", "&", "_", "\\|"};
    public static final String TOKEN_SEPARATOR = ";";

    public static void ensureAddErrorMessage(Exception ex, String defaultMsg) {
        String msg = ex.getLocalizedMessage();
        if (msg != null && msg.length() > 0) {
            addErrorMessage(msg);
        } else {
            addErrorMessage(defaultMsg);
        }
    }

    public static void addErrorMessages(List<String> messages) {
        for (String message : messages) {
            addErrorMessage(message);
        }
    }

    public static void addErrorMessage(String msg) {
        FacesMessage facesMsg = new FacesMessage(FacesMessage.SEVERITY_ERROR, msg, msg);
        FacesContext.getCurrentInstance().addMessage(null, facesMsg);
    }

    public static void addCustomMessage(FacesMessage.Severity severity, String msg) {
        FacesMessage facesMsg = new FacesMessage(severity, msg, msg);
        FacesContext.getCurrentInstance().addMessage(null, facesMsg);
    }

    public static void addSuccessMessage(String msg) {
        FacesMessage facesMsg = new FacesMessage(FacesMessage.SEVERITY_INFO, msg, msg);
        FacesContext.getCurrentInstance().addMessage(null, facesMsg);
    }

    /**
     * <p>Exibe uma mensagem para um componente que esteja dentro de um form<br>
     * ex: exibir um mensagem de erro de validação para um campo email.</p>
     *
     * @param msg - Mensagem que será exibida para o componente.
     * @param componentClientID - ID do componente em que a mensagem será
     * mostrada, esse ID deve estar no formato
     * "idDoFormulario:idDoComponente".<br> <p>Tanto o formulário quanto o
     * componente devem possuir um ID.</p>
     */
    public static void addMessageToComponentClientID(String summary, String msg, String componentClientID) {
        FacesMessage facesMsg = new FacesMessage(FacesMessage.SEVERITY_ERROR, summary, msg);
        FacesContext.getCurrentInstance().addMessage(componentClientID, facesMsg);
    }

    /**
     * <p>Exibe uma mensagem para um componente específico da aplicação<br> ex:
     * exibir um mensagem de erro de validação para um campo email.</p>
     *
     * @param msg - Mensagem a ser exibida para o componente especificado.
     * @param componentID - ID do componente em para o qual a mensagem será
     * exibida. <b>Não</b> precisa ser um ID no formato
     * "idDoFormulario:idDoComponente".<br> É necessário apenas indicar o ID do
     * componente que o método irá buscar em toda a árvore DOM.
     */
    public static void addMessageToComponentID(String summary, String msg, String componentID) {
        FacesMessage facesMsg = new FacesMessage(FacesMessage.SEVERITY_ERROR, summary, msg);
        UIComponent mybutton = findComponent(FacesContext.getCurrentInstance().getViewRoot(), componentID);
        FacesContext.getCurrentInstance().addMessage(mybutton.getClientId(FacesContext.getCurrentInstance()), facesMsg);
    }

    private static UIComponent findComponent(UIComponent parent, String id) {
        if (id.equals(parent.getId())) {
            return parent;
        }
        Iterator<UIComponent> kids = parent.getFacetsAndChildren();
        while (kids.hasNext()) {
            UIComponent kid = kids.next();
            UIComponent found = findComponent(kid, id);
            if (found != null) {
                return found;
            }
        }
        return null;
    }

    /**
     * Obtem o valor de um parametro da requisição a partir do seu nome
     * (geralmente o ID de um input ou outro componente HTML).
     *
     * @param key nome do parametro que se deseja obter o valor.
     * @return uma <code>String</code> contendo o valor do parâmetro referente
     * ao nome recebido.
     */
    public static String getRequestParameter(String key) {
        return FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get(key);
    }

    /**
     * <p>Obtem um objeto da requisição a partir do seu nome e do componente
     * onde ele está inserido.<br> ex: obter o objeto referente a linha
     * selecionada de uma dataTable ou de um item selecionado em um
     * selectOnMenu.<br> Para isso é utilizado o nome definido no atributo
     * <code>var</code> da tag jsf</p>
     *
     * @param requestParameterName nome do parametro que se deseja obter.
     * @param converter <code>Converter</code> referente a classe do objeto que
     * será obtido.
     * @param component componente do qual o objeto faz parte (ex: dataTable ou
     * selectOnMenu)
     * @return um objeto do tipo <code>Object</code> referente ao parametro
     * identificado pelo nome recebido.
     */
    public static Object getObjectFromRequestParameter(String requestParameterName, Converter converter, UIComponent component) {
        String theId = getRequestParameter(requestParameterName);
        return converter.getAsObject(FacesContext.getCurrentInstance(), component, theId);
    }

    /**
     * <p>Obtem um objeto da requisição a partir do seu nome.<br>
     *
     * @param requestParameterName nome do parametro que se deseja obter.
     * @return um objeto do tipo <code>Object</code> referente ao parametro
     * identificado pelo nome recebido.
     */
    public static Object getObjectFromRequestParameter(String requestParameterName) {
        HttpServletRequest request = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();
        return request.getAttribute(requestParameterName);
    }

    /**
     * <p>Obtem um objeto referente a um atributo da sessão a partir do nome
     * desse atributo.</p>
     *
     * @param key nome do atributo que será obtido da sessao.
     * @return um objeto do tipo <code>Object</code> referente ao atributo
     * identificado pelo nome recebido como parametro.
     */
    public static Object getObjectFromSession(String name) {
        HttpSession hs = JsfUtil.getSession(false);
        return hs.getAttribute(name);
    }

    public static void dispatch(String s) {
        try {
            FacesContext.getCurrentInstance().getExternalContext().dispatch(s);
        } catch (IOException ex) {
            Logger.getLogger(JsfUtil.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    /**
     * Redireciona para uma URL específica recebida como parametro
     *
     * @param url URL para a qual será redirecionada a página.
     */
    public static void redirect(String url) {
        try {
            FacesContext.getCurrentInstance().getExternalContext().redirect(url);
        } catch (IOException ex) {
            Logger.getLogger(JsfUtil.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    /**
     * Retorna a Session
     *
     * @param create
     * @return
     */
    public static HttpSession getSession(Boolean create) {
        FacesContext fc = FacesContext.getCurrentInstance();
        HttpSession session = (HttpSession) fc.getExternalContext().getSession(create);
        return session;
    }

    /**
     * Pega o contexto atual da aplicação.
     *
     * @return o contexto atual da aplicação.
     * @see javax.faces.context.FacesContext
     */
    public static FacesContext getContext() {
        return FacesContext.getCurrentInstance();
    }

    /**
     * Encontra um componente a partir da visão principal.
     *
     * @param componentId id do componente a ser buscado.
     * @return retorna o componente com o id especificado caso ele exista ou
     * <code>null</code> caso contrário.
     */
    public static UIComponent findComponent(String componentId) {
        UIComponent component = UIViewRoot.getCurrentComponent(getContext());
        return component.findComponent(componentId);
    }

    /**
     * Remove do texto caracteres com codificação diferente de UTF-8.
     *
     * @param texto
     * @return
     */
    public static String filterChar(String texto) {
        if (texto != null && !texto.isEmpty()) {
            StringBuilder padrao = new StringBuilder();
            padrao.append("[^a-zA-Z0-9|");
            for (int i = 0; i < CARACTERES.length; i++) {
                padrao.append(CARACTERES[i]);
                if (i < CARACTERES.length - 1) {
                    padrao.append("|");
                }
            }
            padrao.append("]");
            return (texto.replaceAll(padrao.toString(), " "));
        }
        return texto;
    }

    /**
     * Efetua download do arquivo arquivo para o usuário.
     *
     * @param fileName Nome desejado para exibição ao usuário.
     * @param file
     * @throws IOException
     */
    public static StreamedContent downloadFile(String fileName, byte[] bytesFile) throws IOException {
        return new DefaultStreamedContent(new ByteArrayInputStream(bytesFile), "application/download", fileName);
    }

    /**
     * Efetua leitura do arquivo para um array de bytes.
     *
     * @param file
     * @return
     * @throws FileNotFoundException
     * @throws IOException
     */
    public static byte[] readFile(File file) throws FileNotFoundException, IOException {
        int lenght = (int) file.length();
        byte[] sendBuf = new byte[lenght];
        FileInputStream inFile = new FileInputStream(file);
        inFile.read(sendBuf, 0, lenght);
        return sendBuf;
    }

    public static void addAttributeInSession(String name, Object value) {
        HttpSession hs = JsfUtil.getSession(false);
        hs.setAttribute(name, value);
    }

    public static void removeAttributeFromSession(String name) {
        HttpSession hs = JsfUtil.getSession(false);
        hs.removeAttribute(name);
    }

    /**
     *
     * @param pckgname Name of package.
     * @param exceptionsClassNames Name of classes exception.
     * @return Classes founds.
     * @throws ClassNotFoundException
     */
    public static List<Class<?>> getClasses(String pckgname, List<String> exceptionsClassNames) throws ClassNotFoundException {
        List<Class<?>> classes = new ArrayList<>();
        // Get a File object for the package
        File directory = null;
        try {
            directory = new File(URLDecoder.decode(Thread.currentThread().getContextClassLoader().getResource('/' + pckgname.replace('.', '/')).getFile(), "ASCII"));
        } catch (Exception ex) {
            ex.printStackTrace();
            throw new ClassNotFoundException(pckgname + " does not appear to be a valid package");
        }
        if (directory.exists()) {
            // Get the list of the files contained in the package
            String[] files = directory.list();
            for (String file : files) {
                // we are only interested in .class files
                if (file.endsWith("Services.class")) {
                    // get class simple name
                    String classSimpleName = file.substring(0, file.length() - 6);
                    // verify exceptions
                    if (exceptionsClassNames.contains(classSimpleName)) {
                        continue;
                    }
                    // removes the .class extension
                    classes.add(Class.forName(pckgname + '.' + classSimpleName));
                }
            }
        } else {
            throw new ClassNotFoundException(directory.getAbsolutePath() + " does not appear to be a valid package");
        }
        return classes;
    }

    public static StreamedContent downloadLogFile(Startable startable) throws IOException {
        String fileName = startable.getDownloadFileName() + ".log";

        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        PrintWriter pw = new PrintWriter(baos);

        String[] linhas = startable.getLog().split("\n");

        for (String linha : linhas) {
            pw.println(linha);
        }

        pw.flush();
        pw.close();

        StreamedContent file = JsfUtil.downloadFile(fileName, baos.toByteArray());

        baos.close();

        return file;
    }
}
TOP

Related Classes of br.edu.utfpr.cm.JGitMinerWeb.util.JsfUtil

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.