Subversion Repositories bacoAlunos

Rev

Rev 1310 | Blame | Compare with Previous | Last modification | View Log | RSS feed

package pt.estgp.estgweb.web.controllers.processes;

import jomm.dao.utils.HibernateUtils;
import jomm.utils.FilesUtils;
import jomm.utils.MessageResources;
import org.apache.log4j.Logger;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.upload.FormFile;
import pt.estgp.estgweb.domain.*;
import pt.estgp.estgweb.domain.Process;
import pt.estgp.estgweb.domain.dao.DaoFactory;
import pt.estgp.estgweb.filters.chains.ResourceAccessControlEnum;
import pt.estgp.estgweb.services.data.RepositoryService;
import pt.estgp.estgweb.web.UserSessionProxy;
import pt.estgp.estgweb.web.controllers.ApplicationDispatchController;
import pt.estgp.estgweb.web.form.processes.ProcessEventForm;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Date;
import java.util.HashSet;
import java.util.Set;

/**
 * @author Jorge Machado
 * @date 26/Fev/2008
 * @time 18:01:54
 * @see pt.estgp.estgweb.web
 */

public class ProcessEventController extends ApplicationDispatchController
{

    private static final 1.5.0/docs/api/java/util/logging/Logger.html">Logger logger = 1.5.0/docs/api/java/util/logging/Logger.html">Logger.getLogger(ProcessEventController.class);

    public ActionForward updateProcessEvent(ActionMapping mapping,
                                    ActionForm form,
                                    HttpServletRequest request,
                                    HttpServletResponse response)
            throws 1.5.0/docs/api/java/lang/Throwable.html">Throwable, ServletException
    {
        try
        {

            ProcessEventForm f = (ProcessEventForm)form;
            1.5.0/docs/api/java/lang/System.html">System.out.println("Actualizando");
            HibernateUtils.getCurrentSession().beginTransaction();
            ProcessEvent p = DaoFactory.getProcessEventDaoImpl().load(f.getProcessEvent().getId());
            p.setNotes(f.getProcessEvent().getNotes());
            p.setNotesAccessLevel(f.getProcessEvent().getNotesAccessLevel());
            p.setNotesToStarter(f.getProcessEvent().getNotesToStarter());
            5+0%2Fdocs%2Fapi+Date">Date now = new 5+0%2Fdocs%2Fapi+Date">Date();
            p.setLastChangeDate(now);

            importPossibleFile(request, f, p, now);

            HibernateUtils.getCurrentSession().getTransaction().commit();
            request.setAttribute("processId",f.getProcessEvent().getProcess().getId());
            return mapping.getInputForward();
        }
        catch (1.5.0/docs/api/java/lang/Throwable.html">Throwable e)
        {
            logger.error(e, e);
            return mapping.findForward("error501");
        }
    }

    public ActionForward transitProcessEventRole(ActionMapping mapping,
                                            ActionForm form,
                                            HttpServletRequest request,
                                            HttpServletResponse response)
            throws 1.5.0/docs/api/java/lang/Throwable.html">Throwable, ServletException
    {
        try
        {

            ProcessEventForm f = (ProcessEventForm)form;
            1.5.0/docs/api/java/lang/System.html">System.out.println("Actualizando com destino a um role");
            HibernateUtils.getCurrentSession().beginTransaction();
            ProcessEvent p = DaoFactory.getProcessEventDaoImpl().load(f.getProcessEvent().getId());

            //updata data
            p.setNotes(f.getProcessEvent().getNotes());
            p.setNotesAccessLevel(f.getProcessEvent().getNotesAccessLevel());
            p.setNotesToStarter(f.getProcessEvent().getNotesToStarter());


            5+0%2Fdocs%2Fapi+Date">Date now = new 5+0%2Fdocs%2Fapi+Date">Date();
            ProcessEventImpl eventDest = DomainObjectFactory.createProcessEventImpl();
            eventDest.setOwner(null);
            eventDest.setOpenDate(now);
            eventDest.setNowStateEnum(ProcessEventImpl.ProcessEventState.NOT_ACCEPTED);
            eventDest.setSaveDate(now);
            eventDest.setLastChangeDate(now);
            eventDest.setCloseDate(null);
            eventDest.setAccepted(false);
            eventDest.setAcceptedDate(null);
            eventDest.setDispatchedDate(null);
            eventDest.setNotes("");
            eventDest.setDestinationRole(f.getDestinationRole());//OK
            eventDest.setPreviousEvent(p);
            eventDest.setNextEvent(null);
            eventDest.setProcess(p.getProcess());

            p.setNextEvent(eventDest);

            p.setNowState(ProcessEventImpl.ProcessEventState.FINNISH_TRANSITATED.name());
            p.setLastChangeDate(now);
            p.setCloseDate(now);
            p.setDispatchedDate(now);

            DaoFactory.getProcessEventDaoImpl().save(eventDest);
            p.getProcess().setLastChangeDate(now);
            p.getProcess().setLastEvent(eventDest);
            p.getProcess().getEvents().add(eventDest);
            p.getProcess().setNowState(ProcessImpl.ProcessState.TRANSITION.name());


            //importPossibleFile(request, f, p, now);


            HibernateUtils.getCurrentSession().getTransaction().commit();
            request.setAttribute("processId",f.getProcessEvent().getProcess().getId());
            return mapping.getInputForward();
        }
        catch (1.5.0/docs/api/java/lang/Throwable.html">Throwable e)
        {
            logger.error(e, e);
            return mapping.findForward("error501");
        }
    }

    private void importPossibleFile(HttpServletRequest request, ProcessEventForm f, ProcessEvent p, 5+0%2Fdocs%2Fapi+Date">Date now) throws 1.5.0/docs/api/java/io/IOException.html">IOException {
        if(f.getFile() != null && f.getFile().getFileSize() > 0)
        {
            UserSession sess = UserSessionProxy.loadUserSessionFromRequest(request);
            FormFile file = f.getFile();
            logger.info("Adding file " + f.getFile().getFileName() + " to process " + p.getProcess().getId() + " in event " + p.getId());
            RepositoryService repositoryService = new RepositoryService();

            1.5.0/docs/api/java/lang/String.html">String repositoryId;
            try {
                repositoryId = repositoryService.storeRepositoryFile(file.getInputStream(),file.getContentType(), FilesUtils.getExtension(file.getFileName()),
                        file.getFileSize(),file.getFileName(),"Process Event file " + p.getProcess().getMetaProcess().getName(), ResourceAccessControlEnum.processDomain, null, sess);

                ProcessEventFileImpl ef = DomainObjectFactory.createProcessEventFileImpl();
                Set<ProcessEventFile> proceSet = null;
                if(p.getFiles() != null){
                    proceSet = p.getFiles();
                }
                else{
                    proceSet = new HashSet<ProcessEventFile>();
                    p.setFiles(proceSet);
                }
                proceSet.add(ef);
                ef.setImportDate(now);
                ef.setOwner(sess.getUser());
                ef.setProcessEvent(p);
                ef.setRepositoryStream(repositoryId);
                ef.setFileAccessLevel(f.getFileAccess());
                ef.setGhost(false);
                ef.setSaveDate(now);
                ef.setName(file.getFileName());
                DaoFactory.getProcessEventFileDaoImpl().save(ef);
            } catch (1.5.0/docs/api/java/io/IOException.html">IOException e) {
                logger.error(e,e);
                throw e;
            }
        }
    }

    public ActionForward transitProcessEventPerson(ActionMapping mapping,
                                                 ActionForm form,
                                                 HttpServletRequest request,
                                                 HttpServletResponse response)
            throws 1.5.0/docs/api/java/lang/Throwable.html">Throwable, ServletException
    {
        try
        {

            ProcessEventForm f = (ProcessEventForm)form;
            HibernateUtils.getCurrentSession().beginTransaction();
            ProcessEvent p = DaoFactory.getProcessEventDaoImpl().load(f.getProcessEvent().getId());

            //updata data
            p.setNotes(f.getProcessEvent().getNotes());
            p.setNotesAccessLevel(f.getProcessEvent().getNotesAccessLevel());
            p.setNotesToStarter(f.getProcessEvent().getNotesToStarter());


            5+0%2Fdocs%2Fapi+Date">Date now = new 5+0%2Fdocs%2Fapi+Date">Date();
            ProcessEventImpl eventDest = DomainObjectFactory.createProcessEventImpl();
            eventDest.setOwner(null);
            eventDest.setOpenDate(now);
            eventDest.setNowStateEnum(ProcessEventImpl.ProcessEventState.NOT_ACCEPTED);
            eventDest.setSaveDate(now);
            eventDest.setLastChangeDate(now);
            eventDest.setCloseDate(null);
            eventDest.setAccepted(false);
            eventDest.setAcceptedDate(null);
            eventDest.setDispatchedDate(null);
            eventDest.setNotes("");
            eventDest.setDestinationRole(null);//OK

            //UNICA COISA DIFERENTE DO ROLE DESTINATED
            User u = DaoFactory.getUserDaoImpl().loadByUsername(f.getDestinationPerson());
            eventDest.setOwner(u);
            //UNICA COISA DIFERENTE

            eventDest.setPreviousEvent(p);
            eventDest.setNextEvent(null);
            eventDest.setProcess(p.getProcess());

            p.setNextEvent(eventDest);

            p.setNowState(ProcessEventImpl.ProcessEventState.FINNISH_TRANSITATED.name());
            p.setLastChangeDate(now);
            p.setCloseDate(now);
            p.setDispatchedDate(now);

            DaoFactory.getProcessEventDaoImpl().save(eventDest);
            p.getProcess().setLastChangeDate(now);
            p.getProcess().setLastEvent(eventDest);
            p.getProcess().getEvents().add(eventDest);
            p.getProcess().setNowState(ProcessImpl.ProcessState.TRANSITION.name());

            //importPossibleFile(request, f, p, now);

            HibernateUtils.getCurrentSession().getTransaction().commit();
            request.setAttribute("processId",f.getProcessEvent().getProcess().getId());
            return mapping.getInputForward();
        }
        catch (1.5.0/docs/api/java/lang/Throwable.html">Throwable e)
        {
            logger.error(e, e);
            return mapping.findForward("error501");
        }
    }

    public ActionForward deleteLastProcessEvent(ActionMapping mapping,
                                                   ActionForm form,
                                                   HttpServletRequest request,
                                                   HttpServletResponse response)
            throws 1.5.0/docs/api/java/lang/Throwable.html">Throwable, ServletException
    {
        try
        {

            ProcessEventForm f = (ProcessEventForm)form;
            HibernateUtils.getCurrentSession().beginTransaction();
            1.5.0/docs/api/java/lang/Process.html">Process process = DaoFactory.getProcessDaoImpl().load(1.5.0/docs/api/java/lang/Long.html">Long.parseLong(request.getParameter("id")));

            User nowUser = UserSessionProxy.loadUserSessionFromRequest(request).getUser();

            ProcessEvent pLastEvent = process.getLastEvent();
            //only Last Event
            if(!((ProcessImpl)pLastEvent.getProcess()).canRemoveLastEvent(nowUser))
                return mapping.findForward("error401");

            5+0%2Fdocs%2Fapi+Date">Date now = new 5+0%2Fdocs%2Fapi+Date">Date();

            logger.warn("Deleting event: " + pLastEvent.toString());

            pLastEvent.getProcess().setLastEvent(pLastEvent.getPreviousEvent());
            pLastEvent.getPreviousEvent().setNextEvent(null);
            pLastEvent.getProcess().getEvents().remove(pLastEvent);
            pLastEvent.setProcess(null);
            pLastEvent.getProcess().setLastChangeDate(now);
            pLastEvent.getProcess().setNowState(ProcessImpl.ProcessState.TRANSITION.name());
            pLastEvent.setNowState(ProcessEventImpl.ProcessEventState.ACCEPTED.name());
            pLastEvent.setCloseDate(null);
            pLastEvent.setDispatchedDate(null);
            DaoFactory.getProcessEventDaoImpl().delete(pLastEvent);

            logger.warn("DELETED event: " + pLastEvent.toString());
            //importPossibleFile(request, f, p, now);

            HibernateUtils.getCurrentSession().getTransaction().commit();
            request.setAttribute("processId",f.getProcessEvent().getProcess().getId());
            return mapping.getInputForward();
        }
        catch (1.5.0/docs/api/java/lang/Throwable.html">Throwable e)
        {
            logger.error(e, e);
            return mapping.findForward("error501");
        }
    }



    public ActionForward reopenProcessEventPerson(ActionMapping mapping,
                                                   ActionForm form,
                                                   HttpServletRequest request,
                                                   HttpServletResponse response)
            throws 1.5.0/docs/api/java/lang/Throwable.html">Throwable, ServletException
    {
        try
        {

            ProcessEventForm f = (ProcessEventForm)form;
            HibernateUtils.getCurrentSession().beginTransaction();

            User user = UserSessionProxy.loadUserSessionFromRequest(request).getUser();
            long processId = 1.5.0/docs/api/java/lang/Long.html">Long.parseLong(request.getParameter("id"));
            ProcessImpl process = (ProcessImpl) DaoFactory.getProcessDaoImpl().load(processId);
            if(!process.canReopen(user))
            {
                addError(request,"process.cant.reopen");
                return mapping.getInputForward();
            }
            process.setCloseDate(null);

            //updata data


            5+0%2Fdocs%2Fapi+Date">Date now = new 5+0%2Fdocs%2Fapi+Date">Date();
            ProcessEventImpl eventDest = DomainObjectFactory.createProcessEventImpl();
            eventDest.setOwner(null);
            eventDest.setOpenDate(now);
            eventDest.setNowStateEnum(ProcessEventImpl.ProcessEventState.ACCEPTED);
            eventDest.setSaveDate(now);
            eventDest.setLastChangeDate(now);
            eventDest.setCloseDate(null);
            eventDest.setAccepted(true);
            eventDest.setAcceptedDate(now);
            eventDest.setDispatchedDate(null);
            eventDest.setNotes("");
            eventDest.setDestinationRole(null);//OK

            //UNICA COISA DIFERENTE DO ROLE DESTINATED

            eventDest.setOwner(user);
            //UNICA COISA DIFERENTE

            eventDest.setPreviousEvent(process.getLastEvent());

            eventDest.setNextEvent(null);
            eventDest.setProcess(process);

            process.getLastEvent().setNextEvent(eventDest);

            //lets keep it closed
            //process.getLastEvent().setNowState(ProcessEventImpl.ProcessEventState.FINNISH_TRANSITATED.name());

            DaoFactory.getProcessEventDaoImpl().save(eventDest);
            process.setLastChangeDate(now);
            process.setLastEvent(eventDest);
            process.getEvents().add(eventDest);
            process.setNowState(ProcessImpl.ProcessState.TRANSITION.name());

            f.setProcessEvent(eventDest);


            HibernateUtils.getCurrentSession().getTransaction().commit();
            request.setAttribute("processId",processId);
            return mapping.getInputForward();
        }
        catch (1.5.0/docs/api/java/lang/Throwable.html">Throwable e)
        {
            logger.error(e, e);
            return mapping.findForward("error501");
        }
    }

    public ActionForward finnishProcessEvent(ActionMapping mapping,
                                             ActionForm form,
                                             HttpServletRequest request,
                                             HttpServletResponse response)
            throws 1.5.0/docs/api/java/lang/Throwable.html">Throwable, ServletException
    {
        try
        {

            ProcessEventForm f = (ProcessEventForm)form;
            HibernateUtils.getCurrentSession().beginTransaction();
            ProcessEvent p = DaoFactory.getProcessEventDaoImpl().load(f.getProcessEvent().getId());

            //updata data
            p.setNotes(f.getProcessEvent().getNotes());
            p.setNotesAccessLevel(f.getProcessEvent().getNotesAccessLevel());
            p.setNotesToStarter(f.getProcessEvent().getNotesToStarter());

            5+0%2Fdocs%2Fapi+Date">Date now = new 5+0%2Fdocs%2Fapi+Date">Date();
            p.setNowState(ProcessEventImpl.ProcessEventState.FINNISH_CLOSED.name());
            p.setLastChangeDate(now);
            p.setCloseDate(now);
            p.setDispatchedDate(now);

            p.getProcess().setLastChangeDate(now);
            p.getProcess().setCloseDate(now);
            p.getProcess().setNowState(ProcessImpl.ProcessState.CLOSED.name());


            HibernateUtils.getCurrentSession().getTransaction().commit();
            request.setAttribute("processId",f.getProcessEvent().getProcess().getId());
            return mapping.getInputForward();
        }
        catch (1.5.0/docs/api/java/lang/Throwable.html">Throwable e)
        {
            logger.error(e, e);
            return mapping.findForward("error501");
        }
    }


    public ActionForward setGhostFileFromProcessEvent(ActionMapping mapping,
                                             ActionForm form,
                                             HttpServletRequest request,
                                             HttpServletResponse response)
            throws 1.5.0/docs/api/java/lang/Throwable.html">Throwable, ServletException
    {
        try
        {

            long fileId = 1.5.0/docs/api/java/lang/Long.html">Long.parseLong(request.getParameter("fileId"));

            User user = UserSessionProxy.loadUserSessionFromRequest(request).getUser();

            HibernateUtils.getCurrentSession().beginTransaction();
            ProcessEventFileImpl ef = (ProcessEventFileImpl) DaoFactory.getProcessEventFileDaoImpl().load(fileId);

            if(!ef.isGhost())
            {
                if(ef.canOpenCloseGhost(user))
                {
                    ef.setGhost(true);
                    ef.setOldFileAccessLevel(ef.getFileAccessLevel());
                    ef.setFileAccessLevelEnum(ProcessEventFileImpl.AccessLevel.OWNER);
                    addMessage(request, "processes.file.set.ghost");
                }
            }

            HibernateUtils.getCurrentSession().getTransaction().commit();
            request.setAttribute("processId", ef.getProcessEvent().getProcess().getId());
            return mapping.getInputForward();
        }
        catch (1.5.0/docs/api/java/lang/Throwable.html">Throwable e)
        {
            logger.error(e, e);
            return mapping.findForward("error501");
        }
    }

    public ActionForward unsetGhostFileFromProcessEvent(ActionMapping mapping,
                                                      ActionForm form,
                                                      HttpServletRequest request,
                                                      HttpServletResponse response)
            throws 1.5.0/docs/api/java/lang/Throwable.html">Throwable, ServletException
    {
        try
        {

            long fileId = 1.5.0/docs/api/java/lang/Long.html">Long.parseLong(request.getParameter("fileId"));
            User user = UserSessionProxy.loadUserSessionFromRequest(request).getUser();


            HibernateUtils.getCurrentSession().beginTransaction();
            ProcessEventFileImpl ef = (ProcessEventFileImpl) DaoFactory.getProcessEventFileDaoImpl().load(fileId);
            if(ef.isGhost())
            {
                if(ef.canOpenCloseGhost(user))
                {
                    ef.setGhost(false);
                    ef.setFileAccessLevel(ef.getOldFileAccessLevel());
                    1.5.0/docs/api/java/lang/String.html">String level = MessageResources.getMessage(request,"process.access.level." + ef.getFileAccessLevel());
                    addMessage(request,"processes.file.unset.ghost",level);
                }
            }
            HibernateUtils.getCurrentSession().getTransaction().commit();
            request.setAttribute("processId",ef.getProcessEvent().getProcess().getId());
            return mapping.getInputForward();
        }
        catch (1.5.0/docs/api/java/lang/Throwable.html">Throwable e)
        {
            logger.error(e, e);
            return mapping.findForward("error501");
        }
    }


}