LISTA BLANCA DEMO

En el siguiente artículo se explicará cómo fue implementado el código del caso LISTA BLANCA de la funcionalidad Formulario Para la implementación de esta funcionalidad se usó JavaEE con Prime Faces 6.0, además se usa el método GET para el envío de datos entre la plataforma web Verifíquese Cédula Almacén y la plataforma móvil Verifíquese Cédula Premium, antes de comenzar se debe descargar la base de datos y montarla en un motor de MySQL.

El siguiente código pertenece al formulario:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
      xmlns:h="http://xmlns.jcp.org/jsf/html"
      xmlns:f="http://xmlns.jcp.org/jsf/core">

    <ui:composition template="/template2.xhtml">
        <ui:define name="title" >
        </ui:define>
        <ui:define name="body" >
            <f:metadata>
                <f:event type="preRenderView" listener="#{listWhiteControllerLoadParameter.loadparameters(param['wad'],param['qwe'],param['gel'])}"/>
            </f:metadata>
            <h:form rendered="#{listWhiteControllerLoadParameter.state == 'Aceptado'}" style="background-color: #358e1a; text-align: center">
                <h:commandButton  type="submit" styleClass="apply" image="/resources/img/go.png" title="Aceptar" action="#{listWhiteControllerLoadParameter.redirect('ViewResult')}" style="width:auto; height:auto" value="Aceptar" >
                    <f:param name="state" value="#{listWhiteControllerLoadParameter.state}" />

                </h:commandButton>
            </h:form>
            <h:form rendered="#{param['state'] == 'Aceptado'}" style="background-color: #358e1a; text-align: center">
                <h:commandButton id="btn_cc" styleClass="apply"  type="submit" image="/resources/img/go.png" title="Aceptar" action="#{listWhiteControllerLoadParameter.redirect('ViewResult')}" style="width:auto; height: auto" value="Aceptar" >
                    <f:param name="state" value="#{listWhiteControllerLoadParameter.state}" />
                </h:commandButton>
            </h:form>
            <h:form rendered="#{listWhiteControllerLoadParameter.state == 'Restringido'}" style="background-color: yellow; text-align: center">
                <h:outputText style="font-size: 30px" value="Cantidad de veces ingresadas: #{listWhiteControllerLoadParameter.records}"/>
                <br/>
                <h:commandButton styleClass="apply" id="btn_cc"  type="submit" image="/resources/img/go.png" title="Aceptar" action="#{listWhiteControllerLoadParameter.redirect('ViewResult')}" value="Aceptar" >
                    <f:param name="state" value="#{listWhiteControllerLoadParameter.state}" />
                    <f:param name="records" value="#{listWhiteControllerLoadParameter.records}" />
                </h:commandButton>
            </h:form>
            <h:form rendered="#{param['state'] == 'Restringido'}" style="background-color: yellow; text-align: center">    
                <h:outputText style="font-size: 30px" value="Cantidad de veces ingresadas: #{listWhiteControllerLoadParameter.records}"/>    
                <br/>
                <h:commandButton styleClass="apply" id="btn_cc"  type="submit" image="/resources/img/go.png" title="Aceptar" action="#{listWhiteControllerLoadParameter.redirect('ViewResult')}" value="Aceptar" >
                    <f:param name="state" value="#{listWhiteControllerLoadParameter.state}" />
                    <f:param name="records" value="#{listWhiteControllerLoadParameter.records}" />
                </h:commandButton>
            </h:form>
            <h:form rendered="#{listWhiteControllerLoadParameter.state == 'Rechazado'}" style="background-color: red; text-align: center">
                <h:commandButton id="btn_cc" styleClass="apply"  type="submit" image="/resources/img/stop.png" title="Aceptar" action="#{listWhiteControllerLoadParameter.redirect('ViewResult')}" value="Aceptar" >
                    <f:param name="state" value="#{listWhiteControllerLoadParameter.state}" />
                </h:commandButton>
            </h:form>
            <h:form rendered="#{param['state'] == 'Rechazado'}" style="background-color: red; text-align: center">
                <h:commandButton id="btn_cc" styleClass="apply"  type="submit" image="/resources/img/stop.png" title="Aceptar" action="#{listWhiteControllerLoadParameter.redirect('ViewResult')}" value="Aceptar" >
                    <f:param name="state" value="#{listWhiteControllerLoadParameter.state}" />
                </h:commandButton>
            </h:form>
        </ui:define>
    </ui:composition>

</html>



En este formulario se muestra una imagen dependiendo del estado del documento escaneado, para tomar los datos del documento escaneado y buscar si esta o no en la listas se usa el siguiente fragmento de código en el controlador de la vista.

    public void loadparameters(String wad, String qwe, String gel) throws UnsupportedEncodingException {
        //Este método se encargar de tomar los datos del documento escaneado y ver que estado tiene el documento
        if (!"".equals(wad) && !"".equals(qwe) && !"".equals(gel)) {
            Whitelist resultado = wf.findWhiteList(wad, qwe, gel);// Se busca si esta agregado en la lista blanca
            if (resultado != null) {
                //Si se encuentre el documento en la lista blanca se procede a guardar un registro de ingreso en la tabla successfulaccess
                Successfulaccess s = new Successfulaccess();
                java.util.Date fecha = new Date();
                s.setDateIngress(fecha);
                s.setIdWhitelist(resultado);
                successfulaccessFacade.create(s);
                records = successfulaccessFacade.findRecords(resultado);//Se busca cuantas veces ha sido escaneada el documento
                //Si la cantidad de veces que ha sido escaneado el documento es superior a 1 el estado es restringido
                //Si la cantidad de veces que ha sido escaneado el documento es igual a 1 el estado es aceptado
                if (records == 1) {
                    state = "Aceptado";
                } else if (records > 1) {
                    state = "Restringido";
                }
            } else {
                //Si no se encuentra el documento en la lista blanca el estado sera rechazado y se guardara un registro en la tabla accessdenied
                state = "Rechazado";
                Accessdenied accessdenied = new Accessdenied();
                accessdenied.setCountry(wad);
                accessdenied.setDocumentTye(qwe);
                accessdenied.setDocumentNumber(gel);
                java.util.Date fecha = new Date();
                accessdenied.setDateIngress(fecha);
                accessdenied.setDatails(state);
                accessdeniedFacade.create(accessdenied);
            }
        }

    }



En el Facade se usan los siguientes métodos para buscar si el documento escaneado esta en la lista blanca

    public Whitelist findWhiteList(String country, String documentType, String documentNumber) {
        //Se realiza una consulta en la tabla whitelist si el documento se encuentra registrado en la lista blanca se retornara un objeto de tipo whitelist con toda la información del registro
        Whitelist request = null;
        try {
            Query q = getEntityManager().createQuery("SELECT w FROM Whitelist w WHERE w.country = :country AND w.documentType = :documentType AND w.documentNumber = :documentNumber");
            q.setParameter("country", country);
            q.setParameter("documentType", documentType);
            q.setParameter("documentNumber", documentNumber);
            List<Whitelist> result=q.getResultList();
            if (result != null) {
                if (result.size() > 0) {
                    request = result.get(0);
                }
            }
            return request;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return request;
    }



También se usa el siguiente método para ver cuantas veces ha sido escaneado el documento.

    public int findRecords(Whitelist w){
        int request = 0;
        try {
            //Se cuenta cuantas veces a ingresado en documento
            Query q = getEntityManager().createQuery("SELECT COUNT(s) FROM Successfulaccess s WHERE s.idWhitelist = :w");
            q.setParameter("w", w);
            request = ((Long) q.getSingleResult()).intValue();
            return request;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return request;
    }



Cuando se pulsa sobre el botón Aceptar se envían los datos del documento junto con el estado del mismo y la cantidad de veces que ha sido escaneado el siguiente fragmento de código es el encargo de esta función.

    public String redirect(String page) {
        //Este método se encargar de enviar los datos del estado del documento junto con la cantidad
        // de veces ingresada a la aplicación móvil Verifíquese Cédula Premium
        Map<String, String> params = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap();
        param = params.get("state");
        String r = "";
        if (params.get("records") != null && !"".equals(params.get("records"))) {
            records = Integer.parseInt(params.get("records"));
            r = page + "?faces-redirect=true&state=" + param + "&records=" + records;
        } else {
            r = page + "?faces-redirect=true&state=" + param;
        }

        return r;
    }



El siguiente código pertenece al controlador de la vista.

/*
* 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 co.venko.almacen.controller;

import co.venko.almacen.entities.Accessdenied;
import co.venko.almacen.entities.Successfulaccess;
import co.venko.almacen.entities.Whitelist;
import co.venko.almacen.session.AccessdeniedFacade;
import co.venko.almacen.session.SuccessfulaccessFacade;
import co.venko.almacen.session.WhitelistFacade;
import java.io.UnsupportedEncodingException;
import java.util.Date;
import java.util.Map;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.context.FacesContext;

/**
*
* @author carlo
*/
@ManagedBean(name = "listWhiteControllerLoadParameter")
@RequestScoped
public class ListWhiteControllerLoadParameter {

    @EJB
    private AccessdeniedFacade accessdeniedFacade;
    private String param;
    private int records;

    @EJB
    private WhitelistFacade wf;

    @EJB
    private SuccessfulaccessFacade successfulaccessFacade;

    private String state;

    /**
     * Creates a new instance of listWhiteController
     */
    public ListWhiteControllerLoadParameter() {

    }

    public String getState() {
        return state;
    }

    public void setState(String state) {
        this.state = state;
    }

    public void loadparameters(String wad, String qwe, String gel) throws UnsupportedEncodingException {
        //Este método se encargar de tomar los datos del documento escaneado y ver que estado tiene el documento
        if (!"".equals(wad) && !"".equals(qwe) && !"".equals(gel)) {
            Whitelist resultado = wf.findWhiteList(wad, qwe, gel);// Se busca si esta agregado en la lista blanca
            if (resultado != null) {
                Successfulaccess s = new Successfulaccess();
                java.util.Date fecha = new Date();
                s.setDateIngress(fecha);
                s.setIdWhitelist(resultado);
                successfulaccessFacade.create(s);
                records = successfulaccessFacade.findRecords(resultado);//Se busca cuantas veces ha sido escaneada el dcumento
                if (records == 1) {
                    state = "Aceptado";
                } else if (records > 1) {
                    state = "Restringido";
                }
            } else {
                state = "Rechazado";
                Accessdenied accessdenied = new Accessdenied();
                accessdenied.setCountry(wad);
                accessdenied.setDocumentTye(qwe);
                accessdenied.setDocumentNumber(gel);
                java.util.Date fecha = new Date();
                accessdenied.setDateIngress(fecha);
                accessdenied.setDatails(state);
                accessdeniedFacade.create(accessdenied);
            }
        }

    }
     
    public String redirect(String page) {
        //Este método se encargar de envíar los datos del estado del documento junto con la cantidad
        // de veces ingresasa a la aplicación movil Verifíquese Cédula Premium
        Map<String, String> params = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap();
        param = params.get("state");
        String r = "";
        if (params.get("records") != null && !"".equals(params.get("records"))) {
            records = Integer.parseInt(params.get("records"));
            r = page + "?faces-redirect=true&state=" + param + "&records=" + records;
        } else {
            r = page + "?faces-redirect=true&state=" + param;
        }

        return r;
    }

    public int getRecords() {
        return records;
    }

    public void setRecords(int records) {
        this.records = records;
    }
}