ucv1ap101.ejb.business.process.logic.impl.ReunionBusinessProcessLogicImpl.java Source code

Java tutorial

Introduction

Here is the source code for ucv1ap101.ejb.business.process.logic.impl.ReunionBusinessProcessLogicImpl.java

Source

/*
 * Este programa es software libre; usted puede redistribuirlo y/o modificarlo bajo los terminos
 * de la licencia "GNU General Public License" publicada por la Fundacion "Free Software Foundation".
 * Este programa se distribuye con la esperanza de que pueda ser util, pero SIN NINGUNA GARANTIA;
 * vea la licencia "GNU General Public License" para obtener mas informacion.
 */
package ucv1ap101.ejb.business.process.logic.impl;

import java.util.ArrayList;
import java.util.List;
import javax.ejb.EJB;
import javax.ejb.Stateless;
import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;
import ucv1ap101.ejb.business.message.ReunionActualizarListaSalasDisponiblesMessage;
import ucv1ap101.ejb.business.message.ReunionCancelarMessage;
import ucv1ap101.ejb.business.message.ReunionCancelarReservacionSalaMessage;
import ucv1ap101.ejb.business.message.ReunionConfirmarReservacionSalaMessage;
import ucv1ap101.ejb.business.message.ReunionConvocarMessage;
import ucv1ap101.ejb.business.message.ReunionLlenarEncuestaMessage;
import ucv1ap101.ejb.business.message.ReunionRechazarReservacionSalaMessage;
import ucv1ap101.ejb.business.message.ReunionSolicitarReservacionSalaMessage;
import ucv1ap101.ejb.business.process.ReunionBusinessProcessLocal;
import ucv1ap101.ejb.business.process.logic.ReunionBusinessProcessLogicLocal;
import ucv1ap101.ejb.core.mail.MailerBeanLocal;
import ucv1ap101.ejb.core.mail.NotifierBean;
import ucv1ap101.ejb.persistence.entity.Invitacion;
import ucv1ap101.ejb.persistence.entity.Persona;
import ucv1ap101.ejb.persistence.entity.Reunion;
import ucv1ap101.ejb.persistence.facade.EscalaEncuestaFacadeLocal;
import ucv1ap101.ejb.persistence.facade.EstadoInvitacionFacadeLocal;
import ucv1ap101.ejb.persistence.facade.EstadoReservacionFacadeLocal;
import ucv1ap101.ejb.persistence.facade.EstadoReunionFacadeLocal;
import ucv1ap101.ejb.persistence.facade.InvitacionFacadeLocal;
import ucv1ap101.ejb.persistence.facade.SalaFacadeLocal;
import ucv1ap101.lib.base.entity.enumeration.EstadoInvitacionEnumeration;
import ucv1ap101.lib.base.entity.enumeration.EstadoReservacionEnumeration;
import ucv1ap101.lib.base.entity.enumeration.EstadoReunionEnumeration;
import ucv1ap101.lib.base.enumeration.EnumTipoQuery;
import ucv1ap101.lib.base.util.TimeUtils;
import ucv1ap101.lib.core.app.ExcepcionAplicacion;
import ucv1ap101.lib.core.app.TLC;

/**
 * @author Jorge Campins
 */
@Stateless
public class ReunionBusinessProcessLogicImpl implements ReunionBusinessProcessLogicLocal {

    @EJB
    private InvitacionFacadeLocal invitacionFacade;

    @EJB
    private EscalaEncuestaFacadeLocal escalaEncuestaFacade;

    @EJB
    private SalaFacadeLocal salaFacade;

    @EJB
    private EstadoReservacionFacadeLocal estadoReservacionFacade;

    @EJB
    private EstadoReunionFacadeLocal estadoReunionFacade;

    @EJB
    private EstadoInvitacionFacadeLocal estadoInvitacionFacade;

    @EJB
    private ReunionBusinessProcessLocal processor;

    @EJB(beanName = "ReunionBusinessProcessLogicBean")
    private ReunionBusinessProcessLogicLocal logician;

    @EJB
    private MailerBeanLocal mailer;

    private static final Logger logger = Logger.getLogger(NotifierBean.class);

    /**
     * SYNCHRONOUS INSTANCE PROCESS actualizarListaSalasDisponibles.
     *
     * @param message
     * @param instance
     * @throws java.lang.Exception
     */
    @Override
    public void actualizarListaSalasDisponibles(ReunionActualizarListaSalasDisponiblesMessage message,
            Reunion instance) throws Exception {
        if (message == null) {
            throw new IllegalArgumentException(ReunionActualizarListaSalasDisponiblesMessage.class.getSimpleName());
        }
        if (instance == null) {
            throw new IllegalArgumentException(Reunion.class.getSimpleName());
        }
        boolean rejected = !processor.actualizarListaSalasDisponiblesAllowed(message, instance);
        if (rejected) {
            throw new ExcepcionAplicacion(TLC.getBitacora().getLogString());
        }
        logician.actualizarListaSalasDisponibles(message, instance);
    }

    /**
     * SYNCHRONOUS INSTANCE PROCESS cancelar.
     *
     * @param message
     * @param instance
     * @throws java.lang.Exception
     */
    @Override
    public void cancelar(ReunionCancelarMessage message, Reunion instance) throws Exception {
        if (message == null) {
            throw new IllegalArgumentException(ReunionCancelarMessage.class.getSimpleName());
        }
        if (instance == null) {
            throw new IllegalArgumentException(Reunion.class.getSimpleName());
        }
        boolean rejected = !processor.cancelarAllowed(message, instance);
        if (rejected) {
            throw new ExcepcionAplicacion(TLC.getBitacora().getLogString());
        }
        logician.cancelar(message, instance);
    }

    /**
     * SYNCHRONOUS INSTANCE PROCESS cancelarReservacionSala.
     *
     * @param message
     * @param instance
     * @throws java.lang.Exception
     */
    @Override
    public void cancelarReservacionSala(ReunionCancelarReservacionSalaMessage message, Reunion instance)
            throws Exception {
        if (message == null) {
            throw new IllegalArgumentException(ReunionCancelarReservacionSalaMessage.class.getSimpleName());
        }
        if (instance == null) {
            throw new IllegalArgumentException(Reunion.class.getSimpleName());
        }
        boolean rejected = !processor.cancelarReservacionSalaAllowed(message, instance);
        if (rejected) {
            throw new ExcepcionAplicacion(TLC.getBitacora().getLogString());
        }
        logician.cancelarReservacionSala(message, instance);
    }

    /**
     * SYNCHRONOUS INSTANCE PROCESS confirmarReservacionSala.
     *
     * @param message
     * @param instance
     * @throws java.lang.Exception
     */
    @Override
    public void confirmarReservacionSala(ReunionConfirmarReservacionSalaMessage message, Reunion instance)
            throws Exception {
        if (message == null) {
            throw new IllegalArgumentException(ReunionConfirmarReservacionSalaMessage.class.getSimpleName());
        }
        if (instance == null) {
            throw new IllegalArgumentException(Reunion.class.getSimpleName());
        }
        boolean rejected = !processor.confirmarReservacionSalaAllowed(message, instance);
        if (rejected) {
            throw new ExcepcionAplicacion(TLC.getBitacora().getLogString());
        }
        //      logician.confirmarReservacionSala(message, instance);
        instance.setReservacion(estadoReservacionFacade.find(EstadoReservacionEnumeration.CONFIRMADA.intValue()));
        instance.setFechaHoraEstadoReservacion(TimeUtils.currentTimestamp());
    }

    /**
     * SYNCHRONOUS INSTANCE PROCESS convocar.
     *
     * @param message
     * @param instance
     * @throws java.lang.Exception
     */
    @Override
    public void convocar(ReunionConvocarMessage message, Reunion instance) throws Exception {
        if (message == null) {
            throw new IllegalArgumentException(ReunionConvocarMessage.class.getSimpleName());
        }
        if (instance == null) {
            throw new IllegalArgumentException(Reunion.class.getSimpleName());
        }
        boolean rejected = !processor.convocarAllowed(message, instance);
        if (rejected) {
            throw new ExcepcionAplicacion(TLC.getBitacora().getLogString());
        }
        //      logician.convocar(message, instance);
        instance.setEstado(estadoReunionFacade.find(EstadoReunionEnumeration.CONVOCADA.intValue()));
        instance.setFechaHoraEstadoReunion(TimeUtils.currentTimestamp());
        /**/
        String asunto = instance.getAsunto();
        String agenda = instance.getAgenda();
        enviarCorreos(instance, asunto, StringUtils.defaultIfBlank(agenda, asunto));
    }

    /**
     * SYNCHRONOUS INSTANCE PROCESS rechazarReservacionSala.
     *
     * @param message
     * @param instance
     * @throws java.lang.Exception
     */
    @Override
    public void rechazarReservacionSala(ReunionRechazarReservacionSalaMessage message, Reunion instance)
            throws Exception {
        if (message == null) {
            throw new IllegalArgumentException(ReunionRechazarReservacionSalaMessage.class.getSimpleName());
        }
        if (instance == null) {
            throw new IllegalArgumentException(Reunion.class.getSimpleName());
        }
        boolean rejected = !processor.rechazarReservacionSalaAllowed(message, instance);
        if (rejected) {
            throw new ExcepcionAplicacion(TLC.getBitacora().getLogString());
        }
        //      logician.rechazarReservacionSala(message, instance);
        instance.setReservacion(estadoReservacionFacade.find(EstadoReservacionEnumeration.RECHAZADA.intValue()));
        instance.setFechaHoraEstadoReservacion(TimeUtils.currentTimestamp());
    }

    /**
     * SYNCHRONOUS INSTANCE PROCESS solicitarReservacionSala.
     *
     * @param message
     * @param instance
     * @throws java.lang.Exception
     */
    @Override
    public void solicitarReservacionSala(ReunionSolicitarReservacionSalaMessage message, Reunion instance)
            throws Exception {
        if (message == null) {
            throw new IllegalArgumentException(ReunionSolicitarReservacionSalaMessage.class.getSimpleName());
        }
        if (instance == null) {
            throw new IllegalArgumentException(Reunion.class.getSimpleName());
        }
        boolean rejected = !processor.solicitarReservacionSalaAllowed(message, instance);
        if (rejected) {
            throw new ExcepcionAplicacion(TLC.getBitacora().getLogString());
        }
        //      logician.solicitarReservacionSala(message, instance);
        instance.setSala(salaFacade.find(message.getArgumentoSala()));
        instance.setFechaInicioPautada(message.getArgumentoFechaInicio());
        instance.setHoraInicioPautada(message.getArgumentoHoraInicio());
        instance.setFechaFinPautada(message.getArgumentoFechaFin());
        instance.setHoraFinPautada(message.getArgumentoHoraFin());
        instance.setReservacion(estadoReservacionFacade.find(EstadoReservacionEnumeration.SOLICITADA.intValue()));
        instance.setFechaHoraEstadoReservacion(TimeUtils.currentTimestamp());
    }

    /**
     * SYNCHRONOUS INSTANCE PROCESS llenarEncuesta.
     *
     * @param message
     * @param instance
     * @throws java.lang.Exception
     */
    @Override
    public void llenarEncuesta(ReunionLlenarEncuestaMessage message, Reunion instance) throws Exception {
        if (message == null) {
            throw new IllegalArgumentException(ReunionLlenarEncuestaMessage.class.getSimpleName());
        }
        if (instance == null) {
            throw new IllegalArgumentException(Reunion.class.getSimpleName());
        }
        //      logician.llenarEncuesta(message, instance);
        instance.setPregunta1(escalaEncuestaFacade.find(message.getArgumentoPregunta1()));
        instance.setPregunta2(escalaEncuestaFacade.find(message.getArgumentoPregunta2()));
        instance.setPregunta3(escalaEncuestaFacade.find(message.getArgumentoPregunta3()));
        instance.setPregunta4(message.getArgumentoPregunta4());
        instance.setFechaHoraEncuestaReunion(TimeUtils.currentTimestamp());
    }

    private void enviarCorreos(Reunion instance, String subject, String message) {
        List<String> direcciones = direccionesDeCorreoDeTodosLosInvitados(instance);
        if (direcciones.isEmpty()) {
            return;
        }
        String addressList = StringUtils.join(direcciones, ",");
        try {
            mailer.sendMessage(addressList, subject, message);
        } catch (Exception ex) {
            logger.fatal(ex.getMessage(), ex);
        }
    }

    private static final String SELECT_INVITACIONES = "select * from invitacion where reunion=";

    private List<String> direccionesDeCorreoDeTodosLosInvitados(Reunion instance) {
        List<String> direcciones = new ArrayList<>();
        List<Invitacion> invitaciones = invitacionFacade.findByQuery(SELECT_INVITACIONES + instance.getId(),
                EnumTipoQuery.NATIVE, true);
        if (invitaciones.isEmpty()) {
            return direcciones;
        }
        String correo;
        Persona invitado;
        for (Invitacion invitacion : invitaciones) {
            invitado = invitacion.getInvitado();
            if (invitado != null) {
                correo = invitado.getCorreoElectronico();
                if (StringUtils.isNotBlank(correo) && !direcciones.contains(correo)) {
                    invitacion
                            .setEstado(estadoInvitacionFacade.find(EstadoInvitacionEnumeration.ENVIADA.intValue()));
                    invitacion.setFechaHoraEstado(TimeUtils.currentTimestamp());
                    direcciones.add(correo);
                }
            }
        }
        return direcciones;
    }

}