co.com.powersoft.lab.databaselab.controller.LineaGeneralServlet.java Source code

Java tutorial

Introduction

Here is the source code for co.com.powersoft.lab.databaselab.controller.LineaGeneralServlet.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 co.com.powersoft.lab.databaselab.controller;

import co.com.powersoft.bean.Usuario;
import co.com.powersoft.lab.bean.LineaGeneral;
import co.com.powersoft.lab.bean.PlantaGeneral;
import co.com.powersoft.lab.databaselab.util.ServiceFactory;
import co.com.powersoft.logger.CustomLogger;
import co.com.powersoft.logger.ErrorUtil;
import co.com.powersoft.logger.constants.OperationConstants;
import co.com.powersoft.util.HashEncripter;
import co.com.powersoft.util.Utilidades;
import co.com.powersoft.util.UtilidadesProperties;
import com.google.gson.Gson;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonSyntaxException;
import java.io.IOException;
import java.util.List;
import java.util.Properties;
import javax.naming.NamingException;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
 * @since 2016-02-26
 * @author Leonardo Solano
 */
@WebServlet(name = "LineaGeneral", urlPatterns = { "/LineaGeneral" })
public class LineaGeneralServlet extends HttpServlet {

    private CustomLogger logger = new CustomLogger(this.getClass());
    private static Properties propiedades = UtilidadesProperties.getInstance().getPropertiesParametros();
    HttpSession session;
    Usuario usuario;

    private static final String INFO_ADICIONAL = "SERVLET_LINEA_GENERAL";
    private static final String MODULO = "LINEA_GENERAL";

    private static final String RUTA_MODULO_INICIAL = "/modulos-web";
    private static final String RUTA_MODULO = RUTA_MODULO_INICIAL + "/linea-general";
    private static final String RESPUESTA = "/resp-linea-general.jsp";
    private static final String INDEX = "/linea-general.jsp";
    private static final String ACCESO_RESTRINGIDO = "/WEB-INF/Errorpages/AccesoRestringido.jsp";

    // MAXIMO NMERO DE ELEMENTOS POR P?GINA
    private final Integer MAX_REGISTROS_PAGINA = Integer.parseInt(propiedades.getProperty("MAX_REGISTROS_PAGINA"));
    // MAXIMO NUMERO DE PAGINAS A MOSTRAR
    private final Integer MAX_NUMERO_PAGINAS_MOSTRAR = Integer
            .parseInt(propiedades.getProperty("MAX_NUMERO_PAGINAS_MOSTRAR"));
    //Constantes por defecto
    public final String TIPO_DOCUMENTO_DEFECTO = propiedades.getProperty("TIPO_DOCUMENTO_DEFECTO");
    public final String PAIS_DEFECTO = propiedades.getProperty("PAIS_DEFECTO");
    public final String ID_DEPARTAMENTO_DEFECTO = propiedades.getProperty("ID_DEPARTAMENTO_DEFECTO");
    public final String DEPARTAMENTO_DEFECTO = propiedades.getProperty("DEPARTAMENTO_DEFECTO");
    public final String ID_CIUDAD_DEFECTO = propiedades.getProperty("ID_CIUDAD_DEFECTO");
    public final String CIUDAD_DEFECTO = propiedades.getProperty("CIUDAD_DEFECTO");

    //Del 1 al 10 Metodos de validacion
    //Del 11 al 20 Metodos basicos
    public static final int AGREGAR_LINEA_GENERAL = 11;
    public static final int ELIMINAR_LINEA_GENERAL = 12;
    public static final int MODIFICAR_LINEA = 13;
    //Del 21 al 30 Metodos de carga
    public static final int MOSTRAR_PANTALLA_1 = 21;
    public static final int MOSTRAR_PANTALLA_2 = 22;
    public static final int CARGAR_PLANTAS = 23;
    public static final int OBTENER_LINEAS_GENERAL_X_PLANTA = 24;
    public static final int CARGAR_SELECCIONAR_PLANTA_GENERAL = 25;
    //Del 31 en adelante Metodos generales
    public static final int MOSTRAR_MODAL_VER_LINEA_GENERAL = 31;
    public static final int MOSTRAR_MODAL_AGREGAR_LINEA_GENERAL = 32;
    public static final int MOSTRAR_MODAL_MODIFICAR_LINEA_GENERAL = 33;
    public static final int MOSTRAR_MODAL_SELECCIONAR_PLANTA_GENERAL = 34;

    protected void processRequest(HttpServletRequest request, HttpServletResponse response, String tipo) {

        //Nombre de la operacin
        String OPERACION = OperationConstants.SERVLET_INICIAL;

        try {

            session = request.getSession();
            usuario = (Usuario) session.getAttribute("usuario");

            //Validamos si tenemos acceso al modulo
            if (Utilidades.getInstance().validarAccesoModulo(usuario.getListaRoles(), MODULO)) {

                //Obtenemos los roles
                usuario.setListaRoles(ServiceFactory.getInstance().getServiceBeanGeneral()
                        .obtenerRolesUsuarioModulo(usuario, MODULO));
                session.setAttribute("usuario", usuario);

                int op = Integer.parseInt(request.getParameter("op") == null ? "-1" : request.getParameter("op"));

                System.out.println("LineaGeneralController OP: " + op);

                request.setAttribute("button", "btn-primary");
                request.setAttribute("color", "color-blue");
                request.setAttribute("iconColor", "color-black");
                request.setAttribute("title", "color-white");
                request.setAttribute("background", "background-blue");
                request.setAttribute("background2", "background-gray");
                request.setAttribute("border", "border-blue");
                request.setAttribute("border2", "border-gray");
                request.setAttribute("thead", "thead-blue");

                if (op != -1) {

                    switch (op) {
                    case AGREGAR_LINEA_GENERAL://11
                        agregarLineaGeneral(request, response);
                        break;
                    case ELIMINAR_LINEA_GENERAL://12
                        eliminarLineaGeneral(request, response);
                        break;
                    case MODIFICAR_LINEA://13
                        modificarLineaGeneral(request, response);
                        break;
                    case MOSTRAR_PANTALLA_1://21
                        mostrarPantalla1(request, response, op);
                        break;
                    case MOSTRAR_PANTALLA_2://22
                        mostrarPantalla2(request, response, op);
                        break;
                    case CARGAR_PLANTAS://23
                        cargarPlantas(request, response, op);
                        break;
                    case OBTENER_LINEAS_GENERAL_X_PLANTA://24
                        obtenerLineasPorPlanta(request, response, op);
                        break;
                    case CARGAR_SELECCIONAR_PLANTA_GENERAL://25
                        cargarSeleccionarPlantaGeneral(request, response, op);
                        break;
                    case MOSTRAR_MODAL_VER_LINEA_GENERAL://31
                        mostrarModalVerLineaGeneral(request, response, op);
                        break;
                    case MOSTRAR_MODAL_AGREGAR_LINEA_GENERAL://32
                        mostrarModalAgregarLineaGeneral(request, response, op);
                        break;
                    case MOSTRAR_MODAL_MODIFICAR_LINEA_GENERAL://33
                        mostrarModalModificarLineaGeneral(request, response, op);
                        break;
                    case MOSTRAR_MODAL_SELECCIONAR_PLANTA_GENERAL://34
                        mostrarModalSeleccionarPlantaGeneral(request, response, op);
                        break;
                    }
                } else {

                    //Redireccionamos
                    getServletContext().getRequestDispatcher(RUTA_MODULO + INDEX).forward(request, response);

                }
            } else {
                //Mostramos la pagina de Error
                getServletContext().getRequestDispatcher(ACCESO_RESTRINGIDO).forward(request, response);
            }
        } catch (NumberFormatException | IOException | ServletException | NamingException e) {
            logger.error(ErrorUtil.getInstance().getErrorData(e, OPERACION, INFO_ADICIONAL), e);
        }
    }

    /**
     * Metodo que permite insertar
     *
     * @autor Leonardo Solano
     * @param request contiene los datos pasados por AJAX
     * @param response contiene 1 si fue exitoso, 2 si ya existe o 0 si no fue
     * exitoso
     * @exception IOException
     */
    public void agregarLineaGeneral(HttpServletRequest request, HttpServletResponse response) throws IOException {

        //Nombre de la operacin
        String OPERACION = OperationConstants.AGREGAR_LINEA_GENERAL;

        int resp = 0;

        try {

            //Objetos JSON
            String jsonElementos = request.getParameter("jsonElementos") == null ? "{}"
                    : request.getParameter("jsonElementos");

            //Validamos que no sea vacio
            if (jsonElementos != null && !jsonElementos.equals("{}")) {

                Gson gson = new Gson();
                JsonObject result = gson.fromJson(jsonElementos, JsonElement.class).getAsJsonObject();
                //Nombre del prefijo del formulario
                String prefijo = "linea_";

                String idPlanta = request.getParameter("idPlanta") == null ? "0"
                        : HashEncripter.getInstance().desencrypterKey(request.getParameter("idPlanta"));

                //Validamos que exista un idPlanta
                if (!idPlanta.equals("0")) {
                    JsonArray arrayCodigo = (JsonArray) result.get(prefijo + "codigo");
                    JsonArray arrayNombre = (JsonArray) result.get(prefijo + "nombre");

                    //Organizamos el objeto a agregar
                    LineaGeneral lineaGeneral = new LineaGeneral();
                    for (int i = 0; i < arrayCodigo.size(); i++) {
                        lineaGeneral.setCodigo(
                                arrayCodigo.get(i).getAsString().isEmpty() ? "" : arrayCodigo.get(i).getAsString());
                        lineaGeneral.setNombre(
                                arrayNombre.get(i).getAsString().isEmpty() ? "" : arrayNombre.get(i).getAsString());

                        PlantaGeneral plantaGeneral = new PlantaGeneral();
                        plantaGeneral.setId(Integer.parseInt(idPlanta));
                        lineaGeneral.setPlantaGeneral(plantaGeneral);
                    }

                    //Agregamos el objeto a la BD
                    resp = ServiceFactory.getInstance().getServiceBeanLab().agregarLineaGeneral(usuario,
                            lineaGeneral);
                }
            }

            //Retornamos la respuesta al JSP
            respuestaServer(response, resp);

        } catch (NumberFormatException | JsonSyntaxException | NamingException e) {
            //Retornamos la respuesta al JSP
            respuestaServer(response, resp);
            logger.error(ErrorUtil.getInstance().getErrorData(e, OPERACION, INFO_ADICIONAL), e);
        } catch (Exception e) {
            logger.error(ErrorUtil.getInstance().getErrorData(e, OPERACION, INFO_ADICIONAL), e);
        }
    }

    /**
     * Metodo que permite eliminar
     *
     * @autor Leonardo Solano
     * @param request contiene los datos pasados por AJAX
     * @param response contiene 1 si fue exitoso o 0 si no lo fue
     * @exception IOException
     */
    public void eliminarLineaGeneral(HttpServletRequest request, HttpServletResponse response) throws IOException {

        //Nombre de la operacin
        String OPERACION = OperationConstants.ELIMINAR_LINEA_GENERAL;

        int resp = 0;

        try {
            //Obtenemos el id de la planta
            String idLinea = request.getParameter("id") == null ? "0"
                    : HashEncripter.getInstance().desencrypterKey(request.getParameter("id"));

            //Eliminamos la planta
            resp = ServiceFactory.getInstance().getServiceBeanLab().eliminarLineaGeneral(usuario,
                    Integer.parseInt(idLinea));

            //Retornamos la respuesta al JSP
            respuestaServer(response, resp);

        } catch (NumberFormatException | NamingException e) {
            //Retornamos la respuesta al JSP
            respuestaServer(response, resp);
            logger.error(ErrorUtil.getInstance().getErrorData(e, OPERACION, INFO_ADICIONAL), e);
        } catch (Exception e) {
            //Retornamos la respuesta al JSP
            respuestaServer(response, resp);
            logger.error(ErrorUtil.getInstance().getErrorData(e, OPERACION, INFO_ADICIONAL), e);
        }
    }

    /**
     * Metodo que permite modificar
     *
     * @autor Leonardo Solano
     * @param request contiene los datos pasados por AJAX
     * @param response contiene 1 si fue exitoso o 0 si no lo fue
     * @exception IOException
     */
    public void modificarLineaGeneral(HttpServletRequest request, HttpServletResponse response) throws IOException {

        //Nombre de la operacin
        String OPERACION = OperationConstants.MODIFICAR_LINEA_GENERAL;

        int resp = 0;

        try {
            //Objetos JSON
            String jsonElementos = request.getParameter("jsonElementos") == null ? "{}"
                    : request.getParameter("jsonElementos");

            //Validamos que no sea vacio
            if (jsonElementos != null && !jsonElementos.equals("{}")) {

                Gson gson = new Gson();
                JsonObject result = gson.fromJson(jsonElementos, JsonElement.class).getAsJsonObject();
                //Nombre del prefijo del formulario
                String prefijo = "linea_";

                JsonArray arrayIdLinea = (JsonArray) result.get(prefijo + "idLinea");
                JsonArray arrayCodigo = (JsonArray) result.get(prefijo + "codigo");
                JsonArray arrayNombre = (JsonArray) result.get(prefijo + "nombre");
                JsonArray arrayIdPlantaGeneral = (JsonArray) result.get(prefijo + "idPlantaNew");

                //Organizamos el objeto a agregar
                LineaGeneral lineaGeneral = new LineaGeneral();
                for (int i = 0; i < arrayIdLinea.size(); i++) {
                    lineaGeneral.setId(Integer.parseInt(
                            HashEncripter.getInstance().desencrypterKey(arrayIdLinea.get(i).getAsString())));
                    lineaGeneral.setCodigo(
                            arrayCodigo.get(i).getAsString().isEmpty() ? "" : arrayCodigo.get(i).getAsString());
                    lineaGeneral.setNombre(
                            arrayNombre.get(i).getAsString().isEmpty() ? "" : arrayNombre.get(i).getAsString());

                    PlantaGeneral plantaGeneral = new PlantaGeneral();
                    plantaGeneral.setId(Integer.parseInt(HashEncripter.getInstance()
                            .desencrypterKey(arrayIdPlantaGeneral.get(i).getAsString())));
                    lineaGeneral.setPlantaGeneral(plantaGeneral);
                }

                //Obtenemos el usuario por session
                //Modificamos el objeto a la BD                
                resp = ServiceFactory.getInstance().getServiceBeanLab().modificarLinea(usuario, lineaGeneral);
            }

            //Retornamos la respuesta al JSP
            respuestaServer(response, resp);

        } catch (NumberFormatException | JsonSyntaxException | NamingException e) {
            //Retornamos la respuesta al JSP
            respuestaServer(response, resp);
            logger.error(ErrorUtil.getInstance().getErrorData(e, OPERACION, INFO_ADICIONAL), e);
        } catch (Exception e) {
            //Retornamos la respuesta al JSP
            respuestaServer(response, resp);
            logger.error(ErrorUtil.getInstance().getErrorData(e, OPERACION, INFO_ADICIONAL), e);
        }
    }

    /**
     * Metodo que permite mostrar una SECCION
     *
     * @autor Leonardo Solano
     * @param request contiene los datos pasados por AJAX
     * @param response contiene 1 si fue exitoso o 0 si no lo fue
     * @param op es la opcion escogida por el usuario
     */
    public void mostrarPantalla1(HttpServletRequest request, HttpServletResponse response, int op) {

        //Nombre de la operacin
        String OPERACION = OperationConstants.MOSTRAR_SECCION;

        try {
            request.setAttribute("op", op);

            //Nos vamos a la vista
            getServletContext().getRequestDispatcher(RUTA_MODULO + RESPUESTA).forward(request, response);

        } catch (ServletException | NumberFormatException | IOException e) {
            logger.error(ErrorUtil.getInstance().getErrorData(e, OPERACION, INFO_ADICIONAL), e);
        }
    }

    /**
     * Metodo que permite mostrar una SECCION
     *
     * @autor Leonardo Solano
     * @param request contiene los datos pasados por AJAX
     * @param response contiene 1 si fue exitoso o 0 si no lo fue
     * @param op es la opcion escogida por el usuario
     */
    public void mostrarPantalla2(HttpServletRequest request, HttpServletResponse response, int op) {

        //Nombre de la operacin
        String OPERACION = OperationConstants.MOSTRAR_SECCION;

        try {
            request.setAttribute("op", op);
            request.setAttribute("nombrePlanta", request.getParameter("nombrePlanta"));

            //Nos vamos a la vista
            getServletContext().getRequestDispatcher(RUTA_MODULO + RESPUESTA).forward(request, response);

        } catch (ServletException | NumberFormatException | IOException e) {
            logger.error(ErrorUtil.getInstance().getErrorData(e, OPERACION, INFO_ADICIONAL), e);
        }
    }

    /**
     * Metodo que permite obtener todas las personas existentes PAGINADAS
     *
     * @autor Leonardo Solano
     * @param request contiene los datos pasados por AJAX
     * @param response contiene 1 si fue exitoso o 0 si no lo fue
     * @param op es la opcion escogida por el usuario
     */
    public void cargarPlantas(HttpServletRequest request, HttpServletResponse response, int op) {

        //Nombre de la operacin
        String OPERACION = OperationConstants.CARGAR_PLANTAS;

        try {
            //Obtenemos la empresa general
            int idEmpresaGeneral = usuario.getEmpresaGeneral().getId();

            //Palabra a buscar
            String buscar = request.getParameter("buscar") == null ? "" : request.getParameter("buscar");
            //Obtenemos la cantidad de registros totales en la tabla
            int cantRegistros = ServiceFactory.getInstance().getServiceBeanLab()
                    .obtenerCantidadPlantas(idEmpresaGeneral, buscar);

            //Cantidad de Paginas a mostrar
            int cantPaginas = (int) Math.ceil((double) cantRegistros / MAX_REGISTROS_PAGINA);
            cantPaginas = cantPaginas == 0 ? 1 : cantPaginas;

            //Obtenemos la pagina actual
            int pagActual = Integer
                    .parseInt(request.getParameter("pag") == null ? "1" : request.getParameter("pag"));

            //Obtenemos el valor inicial a mostrar registros
            int offset = Math.abs((pagActual - 1) * MAX_REGISTROS_PAGINA);

            //PAGINAMOS    
            int mitad;
            int comenzar;
            int finalizar;

            if (MAX_NUMERO_PAGINAS_MOSTRAR < cantPaginas) {
                //Validamos si es PAR o IMPAR
                if (MAX_NUMERO_PAGINAS_MOSTRAR % 2 == 0) {
                    //Obtnemos la mitad
                    mitad = MAX_NUMERO_PAGINAS_MOSTRAR / 2;
                    comenzar = pagActual - (MAX_NUMERO_PAGINAS_MOSTRAR - mitad);
                    finalizar = pagActual + (MAX_NUMERO_PAGINAS_MOSTRAR - mitad);
                } else {
                    //Obtnemos la mitad
                    mitad = MAX_NUMERO_PAGINAS_MOSTRAR / 2 + 1;
                    comenzar = pagActual - (MAX_NUMERO_PAGINAS_MOSTRAR - mitad);
                    finalizar = pagActual + (MAX_NUMERO_PAGINAS_MOSTRAR - mitad);
                }

                //Validamos que la primera pagina no sea menor que la pagina 1
                if (comenzar < 1) {
                    finalizar = finalizar + (1 - comenzar);
                    comenzar = 1;
                }

                //Validamos que la ultima pagina no pase la el total de paginas
                if (finalizar > cantPaginas) {
                    comenzar = comenzar - (finalizar - cantPaginas);
                    finalizar = cantPaginas;
                }

            } else {
                comenzar = 1;
                finalizar = cantPaginas;
            }

            List<PlantaGeneral> listaPlantas = ServiceFactory.getInstance().getServiceBeanLab()
                    .cargarPlantas(idEmpresaGeneral, buscar, offset, MAX_REGISTROS_PAGINA);

            request.setAttribute("op", op);
            request.setAttribute("listaPlantas", listaPlantas);
            request.setAttribute("offset", offset);
            request.setAttribute("pagina", pagActual);
            request.setAttribute("cantPaginas", cantPaginas);
            request.setAttribute("maxPaginas", MAX_NUMERO_PAGINAS_MOSTRAR);
            request.setAttribute("cantRegistros", cantRegistros);
            request.setAttribute("comenzar", comenzar);
            request.setAttribute("finalizar", finalizar);

            // nos vamos a la vista
            getServletContext().getRequestDispatcher(RUTA_MODULO + RESPUESTA).forward(request, response);

        } catch (ServletException | NumberFormatException | NamingException | IOException e) {
            logger.error(ErrorUtil.getInstance().getErrorData(e, OPERACION, INFO_ADICIONAL), e);
        }
    }

    /**
     * Metodo que permite obtener todas las personas existentes PAGINADAS
     *
     * @autor Leonardo Solano
     * @param request contiene los datos pasados por AJAX
     * @param response contiene 1 si fue exitoso o 0 si no lo fue
     * @param op es la opcion escogida por el usuario
     */
    public void obtenerLineasPorPlanta(HttpServletRequest request, HttpServletResponse response, int op) {

        //Nombre de la operacin
        String OPERACION = OperationConstants.OBTENER_LINEAS_GENERAL_X_PLANTA;

        try {
            //Obtenemos la empresa general
            int idEmpresaGeneral = usuario.getEmpresaGeneral().getId();

            //Obtenemos el id de la planta
            String idPlanta = request.getParameter("idPlanta") == null ? "0"
                    : HashEncripter.getInstance().desencrypterKey(request.getParameter("idPlanta"));

            //Palabra a buscar
            String buscar = request.getParameter("buscar") == null ? "" : request.getParameter("buscar");
            //Obtenemos la cantidad de registros totales en la tabla
            int cantRegistros = ServiceFactory.getInstance().getServiceBeanLab()
                    .obtenerCantidadLineas(idEmpresaGeneral, Integer.parseInt(idPlanta), buscar);

            //Cantidad de Paginas a mostrar
            int cantPaginas = (int) Math.ceil((double) cantRegistros / MAX_REGISTROS_PAGINA);
            cantPaginas = cantPaginas == 0 ? 1 : cantPaginas;

            //Obtenemos la pagina actual
            int pagActual = Integer
                    .parseInt(request.getParameter("pag") == null ? "1" : request.getParameter("pag"));

            //Obtenemos el valor inicial a mostrar registros
            int offset = Math.abs((pagActual - 1) * MAX_REGISTROS_PAGINA);

            //PAGINAMOS    
            int mitad;
            int comenzar;
            int finalizar;

            if (MAX_NUMERO_PAGINAS_MOSTRAR < cantPaginas) {
                //Validamos si es PAR o IMPAR
                if (MAX_NUMERO_PAGINAS_MOSTRAR % 2 == 0) {
                    //Obtnemos la mitad
                    mitad = MAX_NUMERO_PAGINAS_MOSTRAR / 2;
                    comenzar = pagActual - (MAX_NUMERO_PAGINAS_MOSTRAR - mitad);
                    finalizar = pagActual + (MAX_NUMERO_PAGINAS_MOSTRAR - mitad);
                } else {
                    //Obtnemos la mitad
                    mitad = MAX_NUMERO_PAGINAS_MOSTRAR / 2 + 1;
                    comenzar = pagActual - (MAX_NUMERO_PAGINAS_MOSTRAR - mitad);
                    finalizar = pagActual + (MAX_NUMERO_PAGINAS_MOSTRAR - mitad);
                }

                //Validamos que la primera pagina no sea menor que la pagina 1
                if (comenzar < 1) {
                    finalizar = finalizar + (1 - comenzar);
                    comenzar = 1;
                }

                //Validamos que la ultima pagina no pase la el total de paginas
                if (finalizar > cantPaginas) {
                    comenzar = comenzar - (finalizar - cantPaginas);
                    finalizar = cantPaginas;
                }

            } else {
                comenzar = 1;
                finalizar = cantPaginas;
            }

            List<LineaGeneral> listaLineas = ServiceFactory.getInstance().getServiceBeanLab()
                    .obtenerLineasPorPlanta(idEmpresaGeneral, Integer.parseInt(idPlanta), buscar, offset,
                            MAX_REGISTROS_PAGINA);

            request.setAttribute("op", op);
            request.setAttribute("listaLineas", listaLineas);
            request.setAttribute("offset", offset);
            request.setAttribute("pagina", pagActual);
            request.setAttribute("cantPaginas", cantPaginas);
            request.setAttribute("maxPaginas", MAX_NUMERO_PAGINAS_MOSTRAR);
            request.setAttribute("cantRegistros", cantRegistros);
            request.setAttribute("comenzar", comenzar);
            request.setAttribute("finalizar", finalizar);

            // nos vamos a la vista
            getServletContext().getRequestDispatcher(RUTA_MODULO + RESPUESTA).forward(request, response);

        } catch (ServletException | NumberFormatException | NamingException | IOException e) {
            logger.error(ErrorUtil.getInstance().getErrorData(e, OPERACION, INFO_ADICIONAL), e);
        } catch (Exception e) {
            logger.error(ErrorUtil.getInstance().getErrorData(e, OPERACION, INFO_ADICIONAL), e);
        }
    }

    /**
     * Metodo que permite buscar una planta general existente PAGINADAS
     *
     * @autor Leonardo Solano
     * @param request contiene los datos pasados por AJAX
     * @param response contiene 1 si fue exitoso o 0 si no lo fue
     * @param op es la opcion escogida por el usuario
     */
    public void cargarSeleccionarPlantaGeneral(HttpServletRequest request, HttpServletResponse response, int op) {

        //Nombre de la operacin
        String OPERACION = OperationConstants.CARGAR_SELECCIONAR_PLANTA_GENERAL;

        try {

            //Obtenemos el Personal x Cargo de la planta
            int idEmpresaGeneral = usuario.getEmpresaGeneral().getId();

            //Palabra a buscar
            String buscar = request.getParameter("buscar") == null ? "" : request.getParameter("buscar");

            //Obtenemos la cantidad de registros totales en la tabla
            int cantRegistros = ServiceFactory.getInstance().getServiceBeanLab()
                    .obtenerCantidadPlantas(idEmpresaGeneral, buscar);

            //Cantidad de Paginas a mostrar
            int cantPaginas = (int) Math.ceil((double) cantRegistros / MAX_REGISTROS_PAGINA);
            cantPaginas = cantPaginas == 0 ? 1 : cantPaginas;

            //Obtenemos la pagina actual
            int pagActual = Integer
                    .parseInt(request.getParameter("pag") == null ? "1" : request.getParameter("pag"));

            //Obtenemos el valor inicial a mostrar registros
            int offset = Math.abs((pagActual - 1) * MAX_REGISTROS_PAGINA);

            //PAGINAMOS    
            int mitad;
            int comenzar;
            int finalizar;

            if (MAX_NUMERO_PAGINAS_MOSTRAR < cantPaginas) {
                //Validamos si es PAR o IMPAR
                if (MAX_NUMERO_PAGINAS_MOSTRAR % 2 == 0) {
                    //Obtnemos la mitad
                    mitad = MAX_NUMERO_PAGINAS_MOSTRAR / 2;
                    comenzar = pagActual - (MAX_NUMERO_PAGINAS_MOSTRAR - mitad);
                    finalizar = pagActual + (MAX_NUMERO_PAGINAS_MOSTRAR - mitad);
                } else {
                    //Obtnemos la mitad
                    mitad = MAX_NUMERO_PAGINAS_MOSTRAR / 2 + 1;
                    comenzar = pagActual - (MAX_NUMERO_PAGINAS_MOSTRAR - mitad);
                    finalizar = pagActual + (MAX_NUMERO_PAGINAS_MOSTRAR - mitad);
                }

                //Validamos que la primera pagina no sea menor que la pagina 1
                if (comenzar < 1) {
                    finalizar = finalizar + (1 - comenzar);
                    comenzar = 1;
                }

                //Validamos que la ultima pagina no pase la el total de paginas
                if (finalizar > cantPaginas) {
                    comenzar = comenzar - (finalizar - cantPaginas);
                    finalizar = cantPaginas;
                }

            } else {
                comenzar = 1;
                finalizar = cantPaginas;
            }

            List<PlantaGeneral> listaPlantaGeneral = ServiceFactory.getInstance().getServiceBeanLab()
                    .cargarPlantas(idEmpresaGeneral, buscar, offset, MAX_REGISTROS_PAGINA);

            request.setAttribute("listaPlantas", listaPlantaGeneral);
            request.setAttribute("offset", offset);
            request.setAttribute("pagina", pagActual);
            request.setAttribute("cantPaginas", cantPaginas);
            request.setAttribute("cantRegistros", cantRegistros);
            request.setAttribute("comenzar", comenzar);
            request.setAttribute("finalizar", finalizar);

            request.setAttribute("maxPaginas", MAX_NUMERO_PAGINAS_MOSTRAR);
            request.setAttribute("op", op);

            //Nos vamos a la vista
            getServletContext().getRequestDispatcher(RUTA_MODULO + RESPUESTA).forward(request, response);

        } catch (ServletException | NumberFormatException | NamingException | IOException e) {
            logger.error(ErrorUtil.getInstance().getErrorData(e, OPERACION, INFO_ADICIONAL), e);
        }
    }

    /**
     * Metodo que permite mostrar un MODAL para VER
     *
     * @autor Leonardo Solano
     * @param request contiene los datos pasados por AJAX
     * @param response contiene 1 si fue exitoso o 0 si no lo fue
     * @param op es la opcion escogida por el usuario
     */
    public void mostrarModalVerLineaGeneral(HttpServletRequest request, HttpServletResponse response, int op) {

        //Nombre de la operacin
        String OPERACION = OperationConstants.MODAL_VER;

        try {
            //Obtenemos la empresa general
            int idEmpresaGeneral = usuario.getEmpresaGeneral().getId();

            //Planta General
            String idLinea = request.getParameter("idLinea") == null ? "0"
                    : HashEncripter.getInstance().desencrypterKey(request.getParameter("idLinea"));
            LineaGeneral lineaGeneral = ServiceFactory.getInstance().getServiceBeanLab()
                    .obtenerLineaGeneral(idEmpresaGeneral, Integer.parseInt(idLinea));
            request.setAttribute("lineaGeneral", lineaGeneral);

            request.setAttribute("op", op);

            //Nos vamos a la vista
            getServletContext().getRequestDispatcher(RUTA_MODULO + RESPUESTA).forward(request, response);

        } catch (ServletException | NumberFormatException | NamingException | IOException e) {
            logger.error(ErrorUtil.getInstance().getErrorData(e, OPERACION, INFO_ADICIONAL), e);
        } catch (Exception e) {
            logger.error(ErrorUtil.getInstance().getErrorData(e, OPERACION, INFO_ADICIONAL), e);
        }
    }

    /**
     * Metodo que permite mostrar un MODAL para AGREGAR
     *
     * @autor Leonardo Solano
     * @param request contiene los datos pasados por AJAX
     * @param response contiene 1 si fue exitoso o 0 si no lo fue
     * @param op es la opcion escogida por el usuario
     */
    public void mostrarModalAgregarLineaGeneral(HttpServletRequest request, HttpServletResponse response, int op) {

        //Nombre de la operacin
        String OPERACION = OperationConstants.MODAL_AGREGAR;

        try {
            request.setAttribute("op", op);

            //Nos vamos a la vista
            getServletContext().getRequestDispatcher(RUTA_MODULO + RESPUESTA).forward(request, response);

        } catch (ServletException | NumberFormatException | IOException e) {
            logger.error(ErrorUtil.getInstance().getErrorData(e, OPERACION, INFO_ADICIONAL), e);
        }
    }

    /**
     * Metodo que permite mostrar un MODAL para modificar
     *
     * @autor Leonardo Solano
     * @param request contiene los datos pasados por AJAX
     * @param response contiene 1 si fue exitoso o 0 si no lo fue
     * @param op es la opcion escogida por el usuario
     */
    public void mostrarModalModificarLineaGeneral(HttpServletRequest request, HttpServletResponse response,
            int op) {

        //Nombre de la operacin
        String OPERACION = OperationConstants.MODAL_MODIFICAR;

        try {
            //Obtenemos la empresa general
            int idEmpresaGeneral = usuario.getEmpresaGeneral().getId();

            //Planta General
            String idLinea = request.getParameter("idLinea") == null ? "0"
                    : HashEncripter.getInstance().desencrypterKey(request.getParameter("idLinea"));
            LineaGeneral lineaGeneral = ServiceFactory.getInstance().getServiceBeanLab()
                    .obtenerLineaGeneral(idEmpresaGeneral, Integer.parseInt(idLinea));
            request.setAttribute("lineaGeneral", lineaGeneral);

            request.setAttribute("op", op);

            //Nos vamos a la vista
            getServletContext().getRequestDispatcher(RUTA_MODULO + RESPUESTA).forward(request, response);

        } catch (ServletException | NumberFormatException | NamingException | IOException e) {
            logger.error(ErrorUtil.getInstance().getErrorData(e, OPERACION, INFO_ADICIONAL), e);
        } catch (Exception e) {
            logger.error(ErrorUtil.getInstance().getErrorData(e, OPERACION, INFO_ADICIONAL), e);
        }
    }

    /**
     * Metodo que permite mostrar un MODAL para seleccionar una planta
     *
     * @autor Leonardo Solano
     * @param request contiene los datos pasados por AJAX
     * @param response contiene 1 si fue exitoso o 0 si no lo fue
     * @param op es la opcion escogida por el usuario
     */
    public void mostrarModalSeleccionarPlantaGeneral(HttpServletRequest request, HttpServletResponse response,
            int op) {

        //Nombre de la operacin
        String OPERACION = OperationConstants.MODAL_SELECCIONAR;

        try {

            //Obtenemos el Personal x Cargo de la planta
            int idEmpresaGeneral = usuario.getEmpresaGeneral().getId();

            //Palabra a buscar
            String buscar = request.getParameter("buscar") == null ? "" : request.getParameter("buscar");

            //Obtenemos la cantidad de registros totales en la tabla
            int cantRegistros = ServiceFactory.getInstance().getServiceBeanLab()
                    .obtenerCantidadPlantas(idEmpresaGeneral, buscar);

            //Cantidad de Paginas a mostrar
            int cantPaginas = (int) Math.ceil((double) cantRegistros / MAX_REGISTROS_PAGINA);
            cantPaginas = cantPaginas == 0 ? 1 : cantPaginas;

            //Obtenemos la pagina actual
            int pagActual = Integer
                    .parseInt(request.getParameter("pag") == null ? "1" : request.getParameter("pag"));

            //Obtenemos el valor inicial a mostrar registros
            int offset = Math.abs((pagActual - 1) * MAX_REGISTROS_PAGINA);

            //PAGINAMOS    
            int mitad;
            int comenzar;
            int finalizar;

            if (MAX_NUMERO_PAGINAS_MOSTRAR < cantPaginas) {
                //Validamos si es PAR o IMPAR
                if (MAX_NUMERO_PAGINAS_MOSTRAR % 2 == 0) {
                    //Obtnemos la mitad
                    mitad = MAX_NUMERO_PAGINAS_MOSTRAR / 2;
                    comenzar = pagActual - (MAX_NUMERO_PAGINAS_MOSTRAR - mitad);
                    finalizar = pagActual + (MAX_NUMERO_PAGINAS_MOSTRAR - mitad);
                } else {
                    //Obtnemos la mitad
                    mitad = MAX_NUMERO_PAGINAS_MOSTRAR / 2 + 1;
                    comenzar = pagActual - (MAX_NUMERO_PAGINAS_MOSTRAR - mitad);
                    finalizar = pagActual + (MAX_NUMERO_PAGINAS_MOSTRAR - mitad);
                }

                //Validamos que la primera pagina no sea menor que la pagina 1
                if (comenzar < 1) {
                    finalizar = finalizar + (1 - comenzar);
                    comenzar = 1;
                }

                //Validamos que la ultima pagina no pase la el total de paginas
                if (finalizar > cantPaginas) {
                    comenzar = comenzar - (finalizar - cantPaginas);
                    finalizar = cantPaginas;
                }

            } else {
                comenzar = 1;
                finalizar = cantPaginas;
            }

            List<PlantaGeneral> listaPlantaGeneral = ServiceFactory.getInstance().getServiceBeanLab()
                    .cargarPlantas(idEmpresaGeneral, buscar, offset, MAX_REGISTROS_PAGINA);

            request.setAttribute("listaPlantas", listaPlantaGeneral);
            request.setAttribute("offset", offset);
            request.setAttribute("pagina", pagActual);
            request.setAttribute("cantPaginas", cantPaginas);
            request.setAttribute("cantRegistros", cantRegistros);
            request.setAttribute("comenzar", comenzar);
            request.setAttribute("finalizar", finalizar);

            request.setAttribute("maxPaginas", MAX_NUMERO_PAGINAS_MOSTRAR);
            request.setAttribute("op", op);

            //Nos vamos a la vista
            getServletContext().getRequestDispatcher(RUTA_MODULO + RESPUESTA).forward(request, response);

        } catch (ServletException | NumberFormatException | NamingException | IOException e) {
            logger.error(ErrorUtil.getInstance().getErrorData(e, OPERACION, INFO_ADICIONAL), e);
        }
    }

    /**
     * Metodo que permite setear la respuesta a un HttpServletResponse
     *
     * @autor Leonardo Solano
     * @param response contiene 1 si fue exitoso o 0 si no lo fue
     * @param resp (int) respuesta de la operacion
     */
    public void respuestaServer(HttpServletResponse response, int resp) {

        //Nombre de la operacin
        String OPERACION = OperationConstants.RESPUESTA_SERVLET;

        ServletOutputStream outStream = null;

        try {

            String respJSON = "{\"resp\":\"" + resp + "\"}";
            response.setContentType("application/json;charset=UTF-8");

            outStream = response.getOutputStream();
            outStream.print(respJSON);

        } catch (Exception e) {
            logger.error(ErrorUtil.getInstance().getErrorData(e, OPERACION, INFO_ADICIONAL), e);
        } finally {
            try {
                if (outStream != null) {
                    outStream.flush();
                    outStream.close();
                }
            } catch (IOException e) {
                logger.error(ErrorUtil.getInstance().getErrorData(e, OPERACION, INFO_ADICIONAL), e);
            }
        }
    }

    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /**
     * Handles the HTTP <code>GET</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response, "GET");
    }

    /**
     * Handles the HTTP <code>POST</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response, "POST");
    }

    /**
     * Returns a short description of the servlet.
     *
     * @return a String containing servlet description
     */
    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>

}