Java tutorial
/* * 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 bo.com.offercruzmail.imp; import bo.com.offercruz.bl.contratos.IGenericoBO; import bo.com.offercruz.bl.excepticiones.BusinessException; import bo.com.offercruz.bl.excepticiones.BusinessExceptionMessage; import bo.com.offercruz.bl.excepticiones.PermisosInsuficientesException; import bo.com.offercruzmail.LectorBandejaCorreo; import bo.com.offercruzmail.contrato.IInterpretadorMensaje; import bo.com.offercruzmail.utils.HojaExcelHelper; import bo.com.offercruzmail.utils.UtilitariosMensajes; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; import java.io.Serializable; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.activation.DataHandler; import javax.activation.DataSource; import javax.activation.FileDataSource; import javax.mail.BodyPart; import javax.mail.MessagingException; import javax.mail.Multipart; import javax.mail.internet.MimeBodyPart; import javax.mail.internet.MimeMultipart; import org.apache.poi.openxml4j.exceptions.InvalidFormatException; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.ss.usermodel.WorkbookFactory; import static org.apache.commons.lang3.StringEscapeUtils.escapeHtml4; /** * * @author Olvinho * @param <T> Clase entidad * @param <ID> Clase que representa el id * @param <BO> Clase de negocio */ public abstract class InterpretadorMensajeGenerico<T, ID extends Serializable, BO extends IGenericoBO<T, ID>> implements IInterpretadorMensaje { private static final ThreadLocal<Map<String, IInterpretadorMensaje>> caja = new ThreadLocal<>(); public static Map<String, IInterpretadorMensaje> getMapaObjetos() { Map<String, IInterpretadorMensaje> mapa = caja.get(); if (mapa == null) { mapa = new HashMap<>(); // mapa.put("area", new InterpretadorMensajeArea()); // mapa.put("faja", new InterpretadorMensajeFaja()); // mapa.put("especie", new InterpretadorMensajeEspecie()); // mapa.put("calidad", new IntepretadorMensajeCalidad()); // mapa.put("carga", new InterpretadorMensajeCarga()); // mapa.put("patio", new InterpretardorMensajePatio()); // // mapa.put("censo", new InterpretadorMensajeCenso()); // mapa.put("tala", new InterpretadorMensajeCorta()); // mapa.put("extraccion", new InterpretadorMensajeExtraccion()); // mapa.put("despacho", new InterpretadorMensajeMovimiento()); // mapa.put("dasometrico", new InterpretarPlantillaFormulario()); mapa.put("oferta", new InterpretadorMensajeOferta()); mapa.put("perfil", new InterpretadorMensajePerfil()); mapa.put("categoria", new InterpretadorMensajeCategoria()); mapa.put("usuario", new InterpretadorMensajeUsuario()); mapa.put("empresa", new InterpretadorMensajeEmpresa()); // // mapa.put("reportes", new InterpretadorMensajeReportes()); caja.set(mapa); } return mapa; } protected Integer idUsuario; protected String parametros; protected String nombreEntidad; protected List<File> archivosTemporales = new ArrayList<>(); protected HojaExcelHelper hojaActual; private BusinessException mensajesError; private boolean cargarPlantillaFormularios; protected LectorBandejaCorreo lectorBandejaCorreo; public InterpretadorMensajeGenerico() { parametros = ""; cargarPlantillaFormularios = true; } @Override public void setIdUsuario(Integer idUsuario) { this.idUsuario = idUsuario; } @Override public void setParametros(String parametros) { this.parametros = parametros; } public boolean isCargarPlantillaFormularios() { return cargarPlantillaFormularios; } public void setCargarPlantillaFormularios(boolean cargarPlantillaFormularios) { this.cargarPlantillaFormularios = cargarPlantillaFormularios; } public void setLectorBandejaCorreo(LectorBandejaCorreo lectorBandejaCorreo) { this.lectorBandejaCorreo = lectorBandejaCorreo; } @Override public Multipart interpretar() throws MessagingException, IOException { if (parametros == null || "".equals(parametros)) { return null; } String[] params = parametros.split(UtilitariosMensajes.SEPERADOR_PARAMETROS); if (params.length == 0) { params = new String[] { parametros }; } String idCargar = ""; if (params.length > 1) { idCargar = params[1]; } switch (params[0]) { case "plantilla": return enviarPlantilla(true, idCargar); case "cargar": return enviarPlantilla(false, idCargar); } return null; } protected void appendException(BusinessExceptionMessage message) { if (mensajesError == null) { mensajesError = new BusinessException(message); return; } mensajesError.getMessages().add(message); } protected Multipart enviarPlantilla(boolean plantillaNueva, String idCargar) throws MessagingException, IOException { String nombreArchivoOrigen; String nombreAdjunto; List<T> lista = null; mensajesError = null; T entidad = null; getObjetoNegocio().setIdUsuario(idUsuario); getObjetoNegocio().setComandoPermiso(nombreEntidad); try { if (!plantillaNueva) { if ("todos".equals(idCargar)) { lista = getObjetoNegocio().obtenerTodos(); nombreArchivoOrigen = nombreEntidad + "-" + "lista"; nombreAdjunto = "lista_" + nombreEntidad + ".xlsx"; } else { ID id; try { id = convertirId(idCargar); } catch (Exception ex) { return FormadorMensajes.enviarIdCargarNoValido(); } entidad = getObjetoNegocio().recuperarPorId(id); if (entidad == null) { return FormadorMensajes.enviarEntidadNoExiste(idCargar); } nombreArchivoOrigen = nombreEntidad; nombreAdjunto = nombreEntidad + "_" + idCargar + ".xlsx"; } } else { nombreArchivoOrigen = nombreEntidad; nombreAdjunto = "plantilla_" + nombreEntidad + ".xlsx"; // if (this instanceof IInterpretadorFormularioDasometrico) { // if (cargarPlantillaFormularios) { // nombreArchivoOrigen = "plantillafrm"; // } // } } String nombreArchivoOriginal = "plantillas/" + nombreArchivoOrigen + ".xlsx"; File archivoCopia = UtilitariosMensajes.reservarNombre(nombreEntidad); UtilitariosMensajes.copiarArchivo(new File(nombreArchivoOriginal), archivoCopia); archivosTemporales.add(archivoCopia); FileInputStream fis = null; OutputStream os = null; try { Workbook libro; fis = new FileInputStream(archivoCopia); libro = WorkbookFactory.create(fis); hojaActual = new HojaExcelHelper(libro.getSheetAt(0)); if (plantillaNueva) { preparPlantillaAntesDeEnviar(libro); } else { if (lista != null) { mostrarLista(lista); } else { mostrarEntidad(entidad, libro); } } if (mensajesError != null) { return FormadorMensajes.enviarErroresNegocio(mensajesError); } //Guardamos cambio os = new FileOutputStream(archivoCopia); libro.write(os); } catch (InvalidFormatException ex) { } finally { if (fis != null) { fis.close(); } if (os != null) { os.close(); } } String textoMensaje; if (plantillaNueva) { textoMensaje = escapeHtml4("La plantilla est adjunta a este mensaje."); } else if (lista != null) { textoMensaje = "La consulta ha devuelto " + lista.size() + " registro(s)."; } else { textoMensaje = escapeHtml4("El registro solicitado est adjunto a este mensaje"); } Multipart cuerpo = new MimeMultipart(); BodyPart adjunto = new MimeBodyPart(); DataSource origen = new FileDataSource(archivoCopia); adjunto.setDataHandler(new DataHandler(origen)); adjunto.setFileName(nombreAdjunto); cuerpo.addBodyPart(FormadorMensajes.getBodyPartEnvuelto(textoMensaje)); cuerpo.addBodyPart(adjunto); return cuerpo; } catch (PermisosInsuficientesException ex) { appendException(new BusinessExceptionMessage(ex.getMessage(), "Autentificacion")); } if (mensajesError != null) { return FormadorMensajes.enviarErroresNegocio(mensajesError); } return null; } @Override public void setNombreEntidad(String nombre) { this.nombreEntidad = nombre; } @Override public List<File> obtenerArchivoTemporalesCreados() { return archivosTemporales; } protected Multipart enviarInserccionExitosa(T entidad) throws MessagingException { return FormadorMensajes.enviarInserccionExitosa(getId(entidad)); } @Override public Multipart interpretarHojaExcel(Sheet hojaExcel) throws MessagingException { this.hojaActual = new HojaExcelHelper(hojaExcel); mensajesError = null; T entidad = convertirHojaEnEntidad(); if (mensajesError != null) { return FormadorMensajes.enviarErroresNegocio(mensajesError); } getObjetoNegocio().setIdUsuario(idUsuario); getObjetoNegocio().setComandoPermiso(nombreEntidad); boolean esInserccion; try { if (esNuevo(entidad)) { esInserccion = true; preInsertar(entidad); entidad = getObjetoNegocio().insertar(entidad); postInsertar(entidad); } else { esInserccion = false; preActualizar(entidad); entidad = getObjetoNegocio().actualizar(entidad); postActualizar(entidad); } } catch (BusinessException e) { return FormadorMensajes.enviarErroresNegocio(e); } catch (Exception e) { return FormadorMensajes.enviarErrorInesperado(); } if (esInserccion) { return enviarInserccionExitosa(entidad); } return FormadorMensajes.enviarModificacionExitosa(); } protected Integer convertirIdAEntero(String cadena) { return new Integer(cadena); } protected void preparPlantillaAntesDeEnviar(Workbook libro) { } // /** // * * // * Carga las reas a la plantilla para solicitar un formulario dasomtrico // */ // protected void cargarAreasAPlantillaFormularios() { // List<Area> areas = FactoriaObjetosNegocio.getInstance().getAreaBO().obtenerTodos(); // String[] codigos = new String[areas.size()]; // for (int i = 0; i < areas.size(); i++) { // codigos[i] = areas.get(i).getCodigo(); // } // hojaActual.agregarValidacionLista(4, 4, 2, 2, codigos, true, true); // } protected void preInsertar(T entidad) { } protected void postInsertar(T entidad) { } protected void preActualizar(T entidad) { } protected void postActualizar(T entidad) { } abstract T convertirHojaEnEntidad(); abstract BO getObjetoNegocio(); abstract boolean esNuevo(T entidad); abstract String getId(T entidad); abstract ID convertirId(String cadena) throws Exception; abstract void mostrarLista(List<T> lista); abstract void mostrarEntidad(T entidad, Workbook libro); }