//----------------------------BEGIN LICENSE----------------------------
/*
* Willow : the Open Source WorkFlow Project
* Distributable under GNU LGPL license by gun.org
*
* Copyright (C) 2004-2010 huihoo.org
* Copyright (C) 2004-2010 ZosaTapo <dertyang@hotmail.com>
*
* ====================================================================
* Project Homepage : http://www.huihoo.org/willow
* Source Forge : http://sourceforge.net/projects/huihoo
* Mailing list : willow@lists.sourceforge.net
*/
//----------------------------END LICENSE-----------------------------
package org.huihoo.willow.client;
import java.rmi.RemoteException;
import java.util.ArrayList;
import java.util.List;
import org.huihoo.willow.Context;
import org.huihoo.willow.session.SessionManager;
import org.huihoo.workflow.WorkflowException;
import org.huihoo.workflow.client.serial.model.SerialCase;
import org.huihoo.workflow.client.serial.model.SerialCaseDatabase;
import org.huihoo.workflow.client.serial.model.SerialParticipant;
import org.huihoo.workflow.client.serial.model.SerialProcess;
import org.huihoo.workflow.client.serial.model.SerialWork;
import org.huihoo.workflow.store.CaseDatabase;
import org.huihoo.workflow.store.UserDatabase;
import org.huihoo.workflow.store.persistent.PrimaryKey;
import org.huihoo.workflow.runtime.WorkflowCase;
import org.huihoo.workflow.runtime.WorkflowService;
import org.huihoo.workflow.runtime.WorkflowSession;
import org.huihoo.workflow.runtime.WorkflowWork;
import org.huihoo.workflow.xpdl.WorkflowProcess;
/**
* @author reic
*
* To change the template for this generated type comment go to
* Window - Preferences - Java - Code Generation - Code and Comments
*/
public class SerialCaseDatabaseImpl extends SerialRemoteObject implements SerialCaseDatabase
{
private transient WorkflowService workflowService;
public SerialCaseDatabaseImpl(WorkflowService workflowService) throws RemoteException
{
super();
this.workflowService = workflowService;
}
public CaseDatabase getWrappedObject()
{
return workflowService.getCaseDatabase();
}
//------------------------------------------------------------------------------------
// LiveDispatcher utilities
//------------------------------------------------------------------------------------
public boolean accept(String sessionID, SerialWork workItem)
throws WorkflowException, RemoteException
{
Context cotext=(Context)this.workflowService;
SessionManager manager=cotext.getEngine().getSessionManager();
WorkflowSession session=manager.findSession(sessionID);
WorkflowProcess workflowProcess=workflowService.findWorkflowPackage(workItem.getPackageID()).getMainProcess();
WorkflowCase workflowCase=workflowService.getCaseDatabase().findWorkflowCase(session,workflowProcess,workItem.getCaseID());
WorkflowWork workflowWork=workflowService.getCaseDatabase().findWorkflowWork(session,workflowProcess,workflowCase,workItem.getUUID());
return getWrappedObject().accept(session,workflowWork);
}
public boolean dispatch(String sessionID, SerialWork workItem)
throws WorkflowException, RemoteException
{
Context cotext=(Context)this.workflowService;
SessionManager manager=cotext.getEngine().getSessionManager();
WorkflowSession session=manager.findSession(sessionID);
WorkflowProcess workflowProcess=workflowService.findWorkflowPackage(workItem.getPackageID()).getMainProcess();
WorkflowCase workflowCase=workflowService.getCaseDatabase().findWorkflowCase(session,workflowProcess,workItem.getCaseID());
WorkflowWork workflowWork=workflowService.getCaseDatabase().findWorkflowWork(session,workflowProcess,workflowCase,workItem.getUUID());
return getWrappedObject().dispatch(session,workflowWork);
}
public boolean revert(String sessionID, SerialWork workItem)
throws WorkflowException, RemoteException
{
Context cotext=(Context)this.workflowService;
SessionManager manager=cotext.getEngine().getSessionManager();
WorkflowSession session=manager.findSession(sessionID);
WorkflowProcess workflowProcess=workflowService.findWorkflowPackage(workItem.getPackageID()).getMainProcess();
WorkflowCase workflowCase=workflowService.getCaseDatabase().findWorkflowCase(session,workflowProcess,workItem.getCaseID());
WorkflowWork workflowWork=workflowService.getCaseDatabase().findWorkflowWork(session,workflowProcess,workflowCase,workItem.getUUID());
return getWrappedObject().revert(session,workflowWork);
}
public boolean fetch(String sessionID, SerialWork workItem)
throws WorkflowException, RemoteException
{
Context cotext=(Context)this.workflowService;
SessionManager manager=cotext.getEngine().getSessionManager();
WorkflowSession session=manager.findSession(sessionID);
WorkflowProcess workflowProcess=workflowService.findWorkflowPackage(workItem.getPackageID()).getMainProcess();
WorkflowCase workflowCase=workflowService.getCaseDatabase().findWorkflowCase(session,workflowProcess,workItem.getCaseID());
WorkflowWork workflowWork=workflowService.getCaseDatabase().findWorkflowWork(session,workflowProcess,workflowCase,workItem.getUUID());
return getWrappedObject().fetch(session,workflowWork);
}
//------------------------------------------------------------------------------------
// LiveCase utilities
//------------------------------------------------------------------------------------
public String createLiveCase(String sessionID,
SerialProcess liveProcess,
SerialParticipant creator,
java.util.Date creationTime,
String primaryKey)
throws WorkflowException, RemoteException
{
return createLiveCase(sessionID,liveProcess,creator,creationTime,primaryKey,"","");
}
public String createLiveCase(String sessionID,
SerialProcess liveProcess,
SerialParticipant creator,
java.util.Date creationTime,
String primaryKey,
String name)
throws WorkflowException, RemoteException
{
return createLiveCase(sessionID,liveProcess,creator,creationTime,primaryKey,name,"");
}
public String createLiveCase(String sessionID,
SerialProcess liveProcess,
SerialParticipant creator,
java.util.Date creationTime,
String primaryKey,
String name,
String description)
throws WorkflowException, RemoteException
{
Context cotext=(Context)this.workflowService;
SessionManager manager=cotext.getEngine().getSessionManager();
WorkflowSession session=manager.findSession(sessionID);
WorkflowProcess workflowProcess=workflowService.findWorkflowPackage(liveProcess.getPackageID()).findWorkflowProcess(liveProcess.getUUID());
CaseDatabase caseDatabase=workflowService.getCaseDatabase();
UserDatabase userDatabase=workflowService.getUserDatabase();
return caseDatabase.createWorkflowCase(session,workflowProcess,userDatabase.findParticipant(creator.getUUID()),creationTime,primaryKey,name,description);
}
public SerialCase findLiveCase(String sessionID,SerialProcess liveProcess,String caseId)
throws WorkflowException, RemoteException
{
Context cotext=(Context)this.workflowService;
SessionManager manager=cotext.getEngine().getSessionManager();
WorkflowSession session=manager.findSession(sessionID);
WorkflowProcess workflowProcess=workflowService.findWorkflowPackage(liveProcess.getPackageID()).findWorkflowProcess(liveProcess.getUUID());
CaseDatabase caseDatabase=workflowService.getCaseDatabase();
WorkflowCase liveCase=caseDatabase.findWorkflowCase(session,workflowProcess,caseId);
if(liveCase!=null)
{
return new SerialCase(liveCase);
}
return null;
}
public SerialCase findLiveCase(String sessionID,SerialProcess liveProcess,PrimaryKey primaryKey)
throws WorkflowException, RemoteException
{
Context cotext=(Context)this.workflowService;
SessionManager manager=cotext.getEngine().getSessionManager();
WorkflowSession session=manager.findSession(sessionID);
WorkflowProcess workflowProcess=workflowService.findWorkflowPackage(liveProcess.getPackageID()).findWorkflowProcess(liveProcess.getUUID());
CaseDatabase caseDatabase=workflowService.getCaseDatabase();
WorkflowCase liveCase=caseDatabase.findWorkflowCase(session,workflowProcess,primaryKey);
if(liveCase!=null)
{
return new SerialCase(liveCase);
}
return null;
}
public List getLiveCaseList(String sessionID,SerialProcess liveProcess,SerialParticipant creator) throws WorkflowException, RemoteException
{
Context cotext=(Context)this.workflowService;
SessionManager manager=cotext.getEngine().getSessionManager();
WorkflowSession session=manager.findSession(sessionID);
WorkflowProcess workflowProcess=workflowService.findWorkflowPackage(liveProcess.getPackageID()).findWorkflowProcess(liveProcess.getUUID());
CaseDatabase caseDatabase=workflowService.getCaseDatabase();
UserDatabase userDatabase=workflowService.getUserDatabase();
List caseList=caseDatabase.getWorkflowCaseList(session,workflowProcess,userDatabase.findParticipant(creator.getUUID()));
List result=new ArrayList();
for(int i=0;i<caseList.size();++i)
{
result.add(new SerialCase((WorkflowCase)caseList.get(i)));
}
return result;
}
public void deleteLiveCase(String sessionID,SerialProcess liveProcess,SerialCase liveCase)
throws WorkflowException, RemoteException
{
Context cotext=(Context)this.workflowService;
SessionManager manager=cotext.getEngine().getSessionManager();
WorkflowSession session=manager.findSession(sessionID);
WorkflowProcess workflowProcess=workflowService.findWorkflowPackage(liveProcess.getPackageID()).findWorkflowProcess(liveProcess.getUUID());
CaseDatabase caseDatabase=workflowService.getCaseDatabase();
WorkflowCase localCase=caseDatabase.findWorkflowCase(session,workflowProcess,liveCase.getUUID());
String packageID=localCase.getWorkflowProcess().getWorkflowPackage().getUUID();
if(!liveCase.getPackageID().equals(packageID))
{
throw new WorkflowException("crossWorkflow not supported");
}
caseDatabase.deleteWorkflowCase(session,workflowProcess,localCase);
}
public void cancelLiveCase(String sessionID,SerialProcess liveProcess,SerialCase liveCase)
throws WorkflowException, RemoteException
{
Context cotext=(Context)this.workflowService;
SessionManager manager=cotext.getEngine().getSessionManager();
WorkflowSession session=manager.findSession(sessionID);
WorkflowProcess workflowProcess=workflowService.findWorkflowPackage(liveProcess.getPackageID()).findWorkflowProcess(liveProcess.getUUID());
CaseDatabase caseDatabase=workflowService.getCaseDatabase();
WorkflowCase localCase=caseDatabase.findWorkflowCase(session,workflowProcess,liveCase.getUUID());
String packageID=localCase.getWorkflowProcess().getWorkflowPackage().getUUID();
if(!liveCase.getPackageID().equals(packageID))
{
throw new WorkflowException("crossWorkflow not supported");
}
caseDatabase.cancelWorkflowCase(session,workflowProcess,localCase);
}
public void suspendLiveCase(String sessionID,SerialProcess liveProcess,SerialCase liveCase)
throws WorkflowException, RemoteException
{
Context cotext=(Context)this.workflowService;
SessionManager manager=cotext.getEngine().getSessionManager();
WorkflowSession session=manager.findSession(sessionID);
WorkflowProcess workflowProcess=workflowService.findWorkflowPackage(liveProcess.getPackageID()).findWorkflowProcess(liveProcess.getUUID());
CaseDatabase caseDatabase=workflowService.getCaseDatabase();
WorkflowCase localCase=caseDatabase.findWorkflowCase(session,workflowProcess,liveCase.getUUID());
String packageID=localCase.getWorkflowProcess().getWorkflowPackage().getUUID();
if(!liveCase.getPackageID().equals(packageID))
{
throw new WorkflowException("crossWorkflow not supported");
}
caseDatabase.suspendWorkflowCase(session,workflowProcess,localCase);
}
public void resumeLiveCase(String sessionID,SerialProcess liveProcess,SerialCase liveCase)
throws WorkflowException, RemoteException
{
Context cotext=(Context)this.workflowService;
SessionManager manager=cotext.getEngine().getSessionManager();
WorkflowSession session=manager.findSession(sessionID);
WorkflowProcess workflowProcess=workflowService.findWorkflowPackage(liveProcess.getPackageID()).findWorkflowProcess(liveProcess.getUUID());
CaseDatabase caseDatabase=workflowService.getCaseDatabase();
WorkflowCase localCase=caseDatabase.findWorkflowCase(session,workflowProcess,liveCase.getUUID());
String packageID=localCase.getWorkflowProcess().getWorkflowPackage().getUUID();
if(!liveCase.getPackageID().equals(packageID))
{
throw new WorkflowException("crossWorkflow not supported");
}
caseDatabase.resumeWorkflowCase(session,workflowProcess,localCase);
}
//------------------------------------------------------------------------------------
// LiveWork utilities
//------------------------------------------------------------------------------------
public SerialWork findLiveWork(String sessionID,SerialProcess liveProcess,SerialCase liveCase, String workId)
throws WorkflowException, RemoteException
{
Context cotext=(Context)this.workflowService;
SessionManager manager=cotext.getEngine().getSessionManager();
WorkflowSession session=manager.findSession(sessionID);
WorkflowProcess workflowProcess=workflowService.findWorkflowPackage(liveProcess.getPackageID()).findWorkflowProcess(liveProcess.getUUID());
CaseDatabase caseDatabase=workflowService.getCaseDatabase();
WorkflowCase localCase=caseDatabase.findWorkflowCase(session,workflowProcess,liveCase.getUUID());
String packageID=localCase.getWorkflowProcess().getWorkflowPackage().getUUID();
if(!liveCase.getPackageID().equals(packageID))
{
throw new WorkflowException("crossWorkflow not supported");
}
WorkflowWork workflowWork=caseDatabase.findWorkflowWork(session,workflowProcess,localCase,workId);
if(workflowWork!=null)
{
return new SerialWork(workflowWork);
}
return null;
}
public List getLiveWorkList(String sessionID,SerialProcess liveProcess,SerialParticipant performer, int itemStatus)
throws WorkflowException, RemoteException
{
Context cotext=(Context)this.workflowService;
SessionManager manager=cotext.getEngine().getSessionManager();
WorkflowSession session=manager.findSession(sessionID);
WorkflowProcess workflowProcess=workflowService.findWorkflowPackage(liveProcess.getPackageID()).findWorkflowProcess(liveProcess.getUUID());
CaseDatabase caseDatabase=workflowService.getCaseDatabase();
UserDatabase userDatabase=workflowService.getUserDatabase();
List workList=caseDatabase.getWorkflowWorkList(session,workflowProcess,userDatabase.findParticipant(performer.getUUID()),itemStatus);
List result=new ArrayList();
for(int i=0;i<workList.size();++i)
{
result.add(new SerialWork((WorkflowWork)workList.get(i)));
}
return result;
}
public List getLiveWorkList(String sessionID,SerialProcess liveProcess,
SerialCase liveCase,
SerialParticipant performer,
int itemStatus)
throws WorkflowException, RemoteException
{
Context cotext=(Context)this.workflowService;
SessionManager manager=cotext.getEngine().getSessionManager();
WorkflowSession session=manager.findSession(sessionID);
WorkflowProcess workflowProcess=workflowService.findWorkflowPackage(liveProcess.getPackageID()).findWorkflowProcess(liveProcess.getUUID());
CaseDatabase caseDatabase=workflowService.getCaseDatabase();
UserDatabase userDatabase=workflowService.getUserDatabase();
WorkflowCase localCase=caseDatabase.findWorkflowCase(session,workflowProcess,liveCase.getUUID());
String packageID=localCase.getWorkflowProcess().getWorkflowPackage().getUUID();
if(!liveCase.getPackageID().equals(packageID))
{
throw new WorkflowException("crossWorkflow not supported");
}
List workList=caseDatabase.getWorkflowWorkList(session,workflowProcess,localCase,userDatabase.findParticipant(performer.getUUID()),itemStatus);
List result=new ArrayList();
for(int i=0;i<workList.size();++i)
{
result.add(new SerialWork((WorkflowWork)workList.get(i)));
}
return result;
}
}