/**
  * Metodo privado que rellena el map usado para cargar los contenidos generales de las vistas.
  *
  * @param map, Mapa vacío
  * @param tipoForm, nombre del bean del formulario que maneja la vista
  */
 private void fillInitialMap(Map<String, Object> map, String tipoForm) {
   // Se inserta el nombre del formulario que presenta la vista
   map.put("modelAttribute", tipoForm);
   // Informacion para el renderizado de la pagina
   map.put(
       "firstOptionText",
       this.messageSource.getMessage("page.common.option.select", null, WebCoreUtils.getLocale()));
   map.put("userLang", WebCoreUtils.getLocale().getLanguage());
 }
 /**
  * Convierte entre un objeto de base de datos y uno de capa de presentacion.
  *
  * @param bean objeto con la informacion de la base de datos
  * @return objeto de capa de presentacion
  */
 @Override
 protected String[] beanToStrings(ComunidadAutonomaBean bean) {
   String[] retorno =
       new String[] {
         WriteUtil.formatValue(bean.getCodigo()),
         WriteUtil.formatValue(bean.getDescripcion()),
         WriteUtil.formatValue(
             bean.getActivo()
                 ? this.messageSource.getMessage("common.si", null, WebCoreUtils.getLocale())
                 : this.messageSource.getMessage("common.no", null, WebCoreUtils.getLocale()))
       };
   return retorno;
 }
  /**
   * Peticion para exportar las etiquetas pendientes de generar
   *
   * @param request Peticion
   * @param response Respuesta
   * @return Componente tile al que se redirige (si es correcta la generación del pdf se devuelve
   *     null)
   */
  @RequestMapping(value = "/persona/etiquetasPendientes")
  public String etiquetasPendientes(HttpServletRequest request, HttpServletResponse response) {

    // Generar el informe en formato Excel
    PersonaQueryBean personaQueryBean =
        (PersonaQueryBean) request.getSession().getAttribute("personaQueryBean");

    String username = (String) SecurityAccess.getUserInformation().getUsername();

    String reportName = "etiquetasPersonasReport";
    String reportTitle =
        this.messageSource.getMessage("page.breadcrumb.persona", null, WebCoreUtils.getLocale());
    String reportType = "PDF";
    String fullReportName = null;
    String contentType = null;

    Boolean vacio = false;

    try {
      fullReportName = "etiquetasPendientesReport.pdf";
      contentType = "application/pdf";

      byte[] byteArray =
          this.personaService.etiquetasPersonas(
              username, personaQueryBean, reportType, reportName, reportTitle);
      if (byteArray == null) {
        vacio = true;
      } else {
        response.reset();
        response.setContentType(contentType);
        response.setHeader(
            "Content-disposition", "attachment" + ";filename=\"" + fullReportName + "\"");
        response.addHeader("Pragma", "no cache");
        response.addHeader("Cache-control", "private, must-revalidate");

        ServletOutputStream outstream = response.getOutputStream();
        outstream.write(byteArray);
        outstream.flush();
        outstream.close();
      }
    } catch (IOException e) {
      LOGGER.error(e.getMessage());
      return "app/errorEtiquetas";
    }

    if (vacio) {
      LOGGER.info("No hay registros");
      return "app/sinEtiquetas";
    }

    return null;
  }
  /**
   * Peticion para exportar la etiqueta de una persona
   *
   * @param request Peticion
   * @param response Respuesta
   * @return Componente tile al que se redirige (si es correcta la generación del pdf se devuelve
   *     null)
   */
  @RequestMapping(value = "/persona/etiquetaPersona")
  public String etiquetaPersona(HttpServletRequest request, HttpServletResponse response) {

    // Generar el informe en formato Excel
    PersonaQueryBean personaQueryBean = new PersonaQueryBean();
    String idPersona = (String) RequestUtil.getStringParameter(request, "idPersona");
    personaQueryBean.setIdPersona(Long.valueOf(idPersona));

    String username = (String) SecurityAccess.getUserInformation().getUsername();
    String reportName = "etiquetasPersonasReport";
    String reportTitle =
        this.messageSource.getMessage("page.breadcrumb.persona", null, WebCoreUtils.getLocale());
    String reportType = "PDF";
    String fullReportName = null;
    String contentType = null;

    try {

      fullReportName = "etiquetaPersonaReport.pdf";
      contentType = "application/pdf";

      byte[] byteArray =
          this.personaService.etiquetaPersona(
              username, personaQueryBean, reportType, reportName, reportTitle);

      response.reset();
      response.setContentType(contentType);
      response.setHeader(
          "Content-disposition", "attachment" + ";filename=\"" + fullReportName + "\"");
      response.addHeader("Pragma", "no cache");
      response.addHeader("Cache-control", "private, must-revalidate");

      ServletOutputStream outstream = response.getOutputStream();
      outstream.write(byteArray);
      outstream.flush();
      outstream.close();
    } catch (IOException e) {
      LOGGER.error(e.getMessage());
      return "app/errorPage";
    }

    return null;
  }
  /**
   * Peticion para exportar el pdf de detalle de una persona
   *
   * @param request Peticion
   * @param response Respuesta
   * @return Componente tile al que se redirige (si es correcta la generación del pdf se devuelve
   *     null)
   */
  @RequestMapping(value = "/persona/exportPersona")
  public String exportPersona(HttpServletRequest request, HttpServletResponse response) {

    // Generar el informe en formato Excel
    PersonaQueryBean personaQueryBean = new PersonaQueryBean();
    String idPersona = (String) RequestUtil.getStringParameter(request, "idPersona");
    personaQueryBean.setIdPersona(Long.valueOf(idPersona));

    String username = (String) SecurityAccess.getUserInformation().getUsername();
    String reportName = "personaDetalleReport";
    String reportTitle =
        this.messageSource.getMessage("page.breadcrumb.persona", null, WebCoreUtils.getLocale());
    String reportType = RequestUtil.getStringParameter(request, "exportType", null);
    String fullReportName = null;
    String contentType = null;

    try {
      if (reportType != null) {
        if (!reportType.equalsIgnoreCase("Exportar")) {
          if (reportType.equalsIgnoreCase("XLS")) {
            fullReportName = "personaDetalleReport.xls";
            contentType = "application/xls";
          } else if (reportType.equalsIgnoreCase("PDF")) {
            fullReportName = "personaDetalleReport.pdf";
            contentType = "application/pdf";
          } else if (reportType.equalsIgnoreCase("DOCX")) {
            fullReportName = "personaDetalleReport.doc";
            contentType = "application/doc";
          } else {
            throw new CoreException("error.export");
          }

          byte[] byteArray =
              this.personaService.exportPersona(
                  username, personaQueryBean, reportType, reportName, reportTitle);

          response.reset();
          response.setContentType(contentType);
          response.setHeader(
              "Content-disposition", "attachment" + ";filename=\"" + fullReportName + "\"");
          response.addHeader("Pragma", "no cache");
          response.addHeader("Cache-control", "private, must-revalidate");

          ServletOutputStream outstream = response.getOutputStream();
          outstream.write(byteArray);
          outstream.flush();
          outstream.close();
        } else {
          LOGGER.error("Error en el formato de tipo de exportacion; " + reportType);
          return Constantes.ERRORPAGE;
        }
      } else {
        throw new CoreException("error.request.export");
      }

    } catch (IOException e) {
      LOGGER.error(e.getMessage());
      return "app/errorPage";
    }

    return null;
  }