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");
}
}
}