/**
* Copyright 2007-2010 非也
* All rights reserved.
*
* This library is free software; you can redistribute it and/or modify it under the
* terms of the GNU Lesser General Public License v3 as published by the Free Software
* Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License along
* with this library; if not, see http://www.gnu.org/licenses/lgpl.html.
*
*/
package org.fireflow.simulation;
import java.util.ArrayList;
import java.util.List;
import javax.jws.WebParam;
import javax.jws.WebService;
import javax.xml.ws.BindingType;
import javax.xml.ws.soap.SOAPBinding;
import net.sf.ehcache.Cache;
import net.sf.ehcache.Element;
import org.fireflow.client.WorkflowQuery;
import org.fireflow.client.WorkflowSessionFactory;
import org.fireflow.client.impl.WorkflowQueryImpl;
import org.fireflow.client.impl.WorkflowSessionLocalImpl;
import org.fireflow.client.query.Restrictions;
import org.fireflow.engine.context.RuntimeContext;
import org.fireflow.engine.entity.AbsWorkflowEntity;
import org.fireflow.engine.entity.repository.impl.ProcessDescriptorImpl;
import org.fireflow.engine.entity.runtime.ProcessInstance;
import org.fireflow.engine.entity.runtime.impl.ActivityInstanceImpl;
import org.fireflow.engine.entity.runtime.impl.LocalWorkItemImpl;
import org.fireflow.engine.entity.runtime.impl.ProcessInstanceImpl;
import org.fireflow.engine.exception.EngineException;
import org.fireflow.engine.exception.InvalidOperationException;
import org.fireflow.engine.exception.WorkflowProcessNotFoundException;
import org.fireflow.engine.invocation.impl.ReassignmentHandler;
import org.fireflow.engine.modules.formsystem.Form;
import org.fireflow.engine.modules.formsystem.FormCategory;
import org.fireflow.engine.modules.formsystem.FormSystemConnector;
import org.fireflow.engine.modules.formsystem.impl.FormCategoryImpl;
import org.fireflow.engine.modules.formsystem.impl.FormImpl;
import org.fireflow.engine.modules.ousystem.Department;
import org.fireflow.engine.modules.ousystem.Group;
import org.fireflow.engine.modules.ousystem.OUSystemConnector;
import org.fireflow.engine.modules.ousystem.Role;
import org.fireflow.engine.modules.ousystem.User;
import org.fireflow.engine.modules.ousystem.impl.DepartmentImpl;
import org.fireflow.engine.modules.ousystem.impl.GroupImpl;
import org.fireflow.engine.modules.ousystem.impl.RoleImpl;
import org.fireflow.engine.modules.ousystem.impl.UserImpl;
import org.fireflow.model.InvalidModelException;
import org.fireflow.pvm.kernel.BookMark;
import org.fireflow.pvm.kernel.ExecutionEntrance;
import org.fireflow.pvm.kernel.KernelManager;
import org.fireflow.pvm.kernel.Token;
import org.fireflow.pvm.kernel.TokenProperty;
import org.fireflow.pvm.kernel.TokenState;
import org.fireflow.server.WorkflowEngineService;
import org.fireflow.server.WorkflowEngineServiceInternalImpl;
import org.fireflow.server.support.MapConvertor;
import org.fireflow.server.support.ObjectWrapper;
import org.fireflow.server.support.PropertiesConvertor;
import org.fireflow.server.support.ScopeBean;
import org.fireflow.simulation.client.SimulatorSessionFactory;
import org.fireflow.simulation.support.BreakPoint;
import org.fireflow.simulation.support.BreakPointContainer;
import org.firesoa.common.util.Utils;
import org.springframework.transaction.TransactionStatus;
import org.springframework.transaction.support.TransactionCallback;
/**
*
* @author 非也 nychen2000@163.com
* Fire Workflow 官方网站:www.firesoa.com 或者 www.fireflow.org
*
*/
@WebService(name=WorkflowEngineService.PORT_TYPE,serviceName=WorkflowEngineService.SERVICE_LOCAL_NAME,
portName=WorkflowEngineService.PORT_NAME,
targetNamespace=WorkflowEngineService.TARGET_NAMESPACE,
endpointInterface="org.fireflow.simulation.FireflowSimulator")
@BindingType(value=SOAPBinding.SOAP11HTTP_BINDING)
public class FireflowSimulatorImpl extends WorkflowEngineServiceInternalImpl
implements FireflowSimulator{
public static final String ARG_PREFIX_PROCESS_FILE = "-processfile=";
public static final String ARG_PREFIX_SUBPROCESS_ID = "-subprocessid=";
public static final String ARG_PREFIX_SPRING_CONTEXT_FILES = "-springcontextfiles=";
protected boolean outputOperationTip = true;
protected BreakPointContainer breakPointContainer = null;
protected SimulatorInitializer simulatorInitializer = null;
public SimulatorInitializer getSimulatorInitializer() {
return simulatorInitializer;
}
public void setSimulatorInitializer(SimulatorInitializer simulatorInitializer) {
this.simulatorInitializer = simulatorInitializer;
}
public BreakPointContainer getBreakPointContainer() {
return breakPointContainer;
}
public void setBreakPointContainer(BreakPointContainer breakPointContainer) {
this.breakPointContainer = breakPointContainer;
}
public boolean isOutputOperationTip() {
return outputOperationTip;
}
public void setOutputOperationTip(boolean outputOperationTip) {
this.outputOperationTip = outputOperationTip;
}
/* (non-Javadoc)
* @see org.fireflow.simulation.FireflowSimulator#addBreakPoint(org.fireflow.simulation.support.BreakPoint)
*/
public void addBreakPoint(String sessionId,BreakPoint breakPoint) {
final WorkflowSessionLocalImpl session = validateSession(sessionId);
breakPointContainer.addBreakPoint(breakPoint);
return ;
}
/* (non-Javadoc)
* @see org.fireflow.simulation.FireflowSimulator#clearAllBreakPoint()
*/
public void clearAllBreakPoint(String sessionId) {
final WorkflowSessionLocalImpl session = validateSession(sessionId);
breakPointContainer.clearAllBreakPoints();
}
/* (non-Javadoc)
* @see org.fireflow.simulation.FireflowSimulator#clearBreakPoint(org.fireflow.simulation.support.BreakPoint)
*/
public void clearBreakPoint(String sessionId,BreakPoint breakPoint) {
final WorkflowSessionLocalImpl session = validateSession(sessionId);
breakPointContainer.clearBreakPoint(breakPoint);
return ;
}
/* (non-Javadoc)
* @see org.fireflow.simulation.FireflowSimulator#getAllBreakPoint()
*/
public List<BreakPoint> getAllBreakPoint(String sessionId) {
return breakPointContainer.getAllBreakPoints();
}
/* (non-Javadoc)
* @see org.fireflow.simulation.FireflowSimulator#forwardBreakPoint(java.lang.String)
*/
@SuppressWarnings("unchecked")
public boolean forwardBreakPoint(String sessionId,BreakPoint breakpoint) throws EngineException {
if (this.outputOperationTip){
SimulatorRunner.printOperationTip("断点继续执行");
}
if (breakpoint==null || breakpoint.getProcessId()==null || breakpoint.getElementId()==null){
return false;
}
final WorkflowSessionLocalImpl sessionLocalImpl = validateSession(sessionId);
final RuntimeContext runtimeContext = sessionLocalImpl.getRuntimeContext();
WorkflowQuery<Token> query = sessionLocalImpl.createWorkflowQuery(Token.class);
query.add(Restrictions.eq(TokenProperty.PROCESS_ID, breakpoint.getProcessId()))
.add(Restrictions.eq(TokenProperty.ELEMENT_ID, breakpoint.getElementId()))
.add(Restrictions.lt(TokenProperty.STATE, TokenState.DELIMITER));
final Token token = query.unique();
if (token==null){
return false;//不用抛出异常,直接返回即可
}
return this.forwardToken(sessionLocalImpl, token);
}
public boolean forwardToken(String sessionId,String tokenId)throws EngineException{
if (this.outputOperationTip){
SimulatorRunner.printOperationTip("断点继续执行");
}
final WorkflowSessionLocalImpl sessionLocalImpl = validateSession(sessionId);
final RuntimeContext runtimeContext = sessionLocalImpl.getRuntimeContext();
WorkflowQuery<Token> query = sessionLocalImpl.createWorkflowQuery(Token.class);
final Token token = query.get(tokenId);
if (token==null || token.getState()==null ||
token.getState().getValue()>TokenState.DELIMITER.getValue()){
return false;//不用抛出异常,直接返回即可
}
return this.forwardToken(sessionLocalImpl, token);
}
@SuppressWarnings("unchecked")
protected boolean forwardToken(final WorkflowSessionLocalImpl sessionLocalImpl,final Token token){
WorkflowQuery<ProcessInstance> q4ProcInst = sessionLocalImpl.createWorkflowQuery(ProcessInstance.class);
ProcessInstance procInst = q4ProcInst.get(token.getProcessInstanceId());
sessionLocalImpl.setCurrentProcessInstance(procInst);
final RuntimeContext runtimeContext = sessionLocalImpl.getRuntimeContext();
this.getTransactionTemplate().execute(new TransactionCallback(){
public Object doInTransaction(TransactionStatus status) {
KernelManager kernelManager = runtimeContext.getDefaultEngineModule(KernelManager.class);
BookMark bookMark = new BookMark();
bookMark.setToken(token);
bookMark.setExtraArg(BookMark.SOURCE_TOKEN, token);
bookMark.setExecutionEntrance(ExecutionEntrance.FORWARD_TOKEN);
kernelManager.addBookMark(bookMark);
kernelManager.execute(sessionLocalImpl);
return null;
}
});
return true;
}
public void addBreakPointList(String sessionId,
List<BreakPoint> breakPointList ){
breakPointContainer.addAllBreanPoints(breakPointList);
return ;
}
@Override
public ProcessDescriptorImpl uploadProcessXml(String sessionId,
String processXml,int version) throws EngineException {
String charset = Utils.findXmlCharset(processXml);
if (this.outputOperationTip){
SimulatorRunner.printOperationTip("上传流程定义Xml,定义文件的字符集是"+charset);
}
// System.out.println("========java虚拟机的编码是");
// System.out.println(System.getProperty("file.encoding"));
// System.out.println("=====待上传的流程定义是:");
// System.out.println(processXml);
// System.out.println("==========================");
return super.uploadProcessXml(sessionId, processXml, version);
}
@Override
public AbsWorkflowEntity getEntity(String sessionId, String entityId,
String entityClassName) {
if (this.outputOperationTip){
SimulatorRunner.printOperationTip("返回流程实体[entityId="+entityId+",entityClass="+entityClassName+"]");
}
return super.getEntity(sessionId, entityId, entityClassName);
}
@Override
public List<AbsWorkflowEntity> executeQueryList(String sessionId,
WorkflowQueryImpl q) {
// if (this.outputOperationTip){
// SimulatorRunner.printOperationTip("查询符合条件的流程实体");
// }
return super.executeQueryList(sessionId, q);
}
@Override
public int executeQueryCount(String sessionId, WorkflowQueryImpl q) {
// if (this.outputOperationTip){
// SimulatorRunner.printOperationTip("统计符合条件的流程实体数量");
// }
return super.executeQueryCount(sessionId, q);
}
@Override
public ProcessInstanceImpl createProcessInstance1(String sessionId,
String workflowProcessId) throws InvalidModelException,
WorkflowProcessNotFoundException {
if (this.outputOperationTip){
SimulatorRunner.printOperationTip("创建流程实例[workflowProcessId="+workflowProcessId+"]");
}
return super.createProcessInstance1(sessionId, workflowProcessId);
}
@Override
public ProcessInstanceImpl createProcessInstance2(String sessionId,
String workflowProcessId, int version)
throws InvalidModelException, WorkflowProcessNotFoundException {
if (this.outputOperationTip){
SimulatorRunner.printOperationTip("创建流程实例[workflowProcessId="+workflowProcessId+",version="+version+"]");
}
return super.createProcessInstance2(sessionId, workflowProcessId, version);
}
@Override
public ProcessInstanceImpl createProcessInstance4(String sessionId,
String workflowProcessId, int version, String subProcessId)
throws InvalidModelException, WorkflowProcessNotFoundException {
if (this.outputOperationTip){
SimulatorRunner.printOperationTip("创建流程实例[workflowProcessId="+workflowProcessId+",version="+version+",subProcessId="+subProcessId+"]");
}
return super.createProcessInstance4(sessionId, workflowProcessId, version,
subProcessId);
}
@Override
public ProcessInstanceImpl createProcessInstance3(String sessionId,
String workflowProcessId, String subProcessId)
throws InvalidModelException, WorkflowProcessNotFoundException {
if (this.outputOperationTip){
SimulatorRunner.printOperationTip("创建流程实例[workflowProcessId="+workflowProcessId+",subProcessId="+subProcessId+"]");
}
return super.createProcessInstance3(sessionId, workflowProcessId, subProcessId);
}
@Override
public ProcessInstanceImpl runProcessInstance(String sessionId,
String processInstanceId, String bizId, MapConvertor mapConvertor) {
if (this.outputOperationTip){
SimulatorRunner.printOperationTip("运行流程实例[processInstanceId="+processInstanceId+"]");
}
return super.runProcessInstance(sessionId, processInstanceId, bizId,
mapConvertor);
}
@Override
public ProcessInstanceImpl startProcess2(String sessionId,
String workflowProcessId, int version, String bizId,
MapConvertor mapConvertor) throws InvalidModelException,
WorkflowProcessNotFoundException, InvalidOperationException {
if (this.outputOperationTip){
SimulatorRunner.printOperationTip("创建并运行流程实例[workflowProcessId="+workflowProcessId+",version="+version+"]");
}
return super.startProcess2(sessionId, workflowProcessId, version, bizId,
mapConvertor);
}
@Override
public ProcessInstanceImpl startProcess4(String sessionId,
String workflowProcessId, int version, String subProcessId,
String bizId, MapConvertor mapConvertor)
throws InvalidModelException, WorkflowProcessNotFoundException,
InvalidOperationException {
if (this.outputOperationTip){
SimulatorRunner.printOperationTip("创建并运行流程实例[workflowProcessId="+workflowProcessId+",version="+version+",subProcessId="+subProcessId+"]");
}
return super.startProcess4(sessionId, workflowProcessId, version, subProcessId,
bizId, mapConvertor);
}
@Override
public ProcessInstanceImpl startProcess1(String sessionId,
String workflowProcessId, String bizId, MapConvertor mapConvertor)
throws InvalidModelException, WorkflowProcessNotFoundException,
InvalidOperationException {
if (this.outputOperationTip){
SimulatorRunner.printOperationTip("创建并运行流程实例[workflowProcessId="+workflowProcessId+"]");
}
return super.startProcess1(sessionId, workflowProcessId, bizId, mapConvertor);
}
@Override
public ProcessInstanceImpl startProcess3(String sessionId,
String workflowProcessId, String subProcessId, String bizId,
MapConvertor mapConvertor) throws InvalidModelException,
WorkflowProcessNotFoundException, InvalidOperationException {
if (this.outputOperationTip){
SimulatorRunner.printOperationTip("创建并运行流程实例[workflowProcessId="+workflowProcessId+",subProcessId="+subProcessId+"]");
}
return super.startProcess3(sessionId, workflowProcessId, subProcessId, bizId,
mapConvertor);
}
@Override
public ActivityInstanceImpl abortActivityInstance(String sessionId,
String activityInstanceId, String note)
throws InvalidOperationException {
if (this.outputOperationTip){
SimulatorRunner.printOperationTip("撤销活动实例[activityInstanceId="+activityInstanceId+"]");
}
return super.abortActivityInstance(sessionId, activityInstanceId, note);
}
@Override
public ActivityInstanceImpl suspendActivityInstance(String sessionId,
String activityInstanceId, String note)
throws InvalidOperationException {
if (this.outputOperationTip){
SimulatorRunner.printOperationTip("挂起活动实例[activityInstanceId="+activityInstanceId+"]");
}
return super.suspendActivityInstance(sessionId, activityInstanceId, note);
}
@Override
public ActivityInstanceImpl restoreActivityInstance(String sessionId,
String activityInstanceId, String note)
throws InvalidOperationException {
if (this.outputOperationTip){
SimulatorRunner.printOperationTip("恢复活动实例[activityInstanceId="+activityInstanceId+"]");
}
return super.restoreActivityInstance(sessionId, activityInstanceId, note);
}
@Override
public ProcessInstanceImpl abortProcessInstance(String sessionId,
String processInstanceId, String note)
throws InvalidOperationException {
if (this.outputOperationTip){
SimulatorRunner.printOperationTip("撤销流程实例[processInstanceId="+processInstanceId+"]");
}
return super.abortProcessInstance(sessionId, processInstanceId, note);
}
@Override
public ProcessInstanceImpl suspendProcessInstance(String sessionId,
String processInstanceId, String note)
throws InvalidOperationException {
if (this.outputOperationTip){
SimulatorRunner.printOperationTip("挂起流程实例[processInstanceId="+processInstanceId+"]");
}
return super.suspendProcessInstance(sessionId, processInstanceId, note);
}
@Override
public ProcessInstanceImpl restoreProcessInstance(String sessionId,
String processInstanceId, String note)
throws InvalidOperationException {
if (this.outputOperationTip){
SimulatorRunner.printOperationTip("恢复流程实例[processInstanceId="+processInstanceId+"]");
}
return super.restoreProcessInstance(sessionId, processInstanceId, note);
}
@Override
public LocalWorkItemImpl claimWorkItem(String sessionId, String workItemId) {
if (this.outputOperationTip){
SimulatorRunner.printOperationTip("签收工作项[workItemId="+workItemId+"]");
}
return super.claimWorkItem(sessionId, workItemId);
}
@Override
public LocalWorkItemImpl withdrawWorkItem(String sessionId, String workItemId) {
if (this.outputOperationTip){
SimulatorRunner.printOperationTip("取回工作项[workItemId="+workItemId+"]");
}
return super.withdrawWorkItem(sessionId, workItemId);
}
@Override
public LocalWorkItemImpl disclaimWorkItem(String sessionId, String workItemId,
String attachmentId, String attachmentType, String note) {
if (this.outputOperationTip){
SimulatorRunner.printOperationTip("退签收工作项[workItemId="+workItemId+"]");
}
return super.disclaimWorkItem(sessionId, workItemId, attachmentId,
attachmentType, note);
}
@Override
public LocalWorkItemImpl completeWorkItem1(String sessionId, String workItemId,
String attachmentId, String attachmentType, String note) {
if (this.outputOperationTip){
SimulatorRunner.printOperationTip("结束工作项[workItemId="+workItemId+"]");
}
return super.completeWorkItem1(sessionId, workItemId, attachmentId,
attachmentType, note);
}
@Override
public LocalWorkItemImpl completeWorkItem2(String sessionId, String workItemId,
MapConvertor mapConvertor, String attachmentId,
String attachmentType, String note) {
if (this.outputOperationTip){
SimulatorRunner.printOperationTip("结束工作项[workItemId="+workItemId+"]");
}
return super.completeWorkItem2(sessionId, workItemId, mapConvertor,
attachmentId, attachmentType, note);
}
@Override
public LocalWorkItemImpl completeWorkItemAndJumpTo1(String sessionId,
String workItemId, String targetActivityId, String attachmentId,
String attachmentType, String note) {
if (this.outputOperationTip){
SimulatorRunner.printOperationTip("结束工作项并条跳转[workItemId="+workItemId+",targetActivityId="+targetActivityId+"]");
}
return super.completeWorkItemAndJumpTo1(sessionId, workItemId,
targetActivityId, attachmentId, attachmentType, note);
}
@Override
public LocalWorkItemImpl completeWorkItemAndJumpTo2(String sessionId,
String workItemId, String targetActivityId,
MapConvertor assignmentStrategy, String attachmentId,
String attachmentType, String note) {
if (this.outputOperationTip){
SimulatorRunner.printOperationTip("结束工作项并条跳转[workItemId="+workItemId+",targetActivityId="+targetActivityId+"]");
}
return super.completeWorkItemAndJumpTo2(sessionId, workItemId,
targetActivityId, assignmentStrategy, attachmentId, attachmentType,
note);
}
@Override
public LocalWorkItemImpl reassignWorkItemTo(String sessionId, String workItemId,
ReassignmentHandler handler, String attachmentId,
String attachmentType, String note) {
if (this.outputOperationTip){
SimulatorRunner.printOperationTip("委派工作项[workItemId="+workItemId+"]");
}
return super.reassignWorkItemTo(sessionId, workItemId, handler, attachmentId,
attachmentType, note);
}
@Override
public ObjectWrapper getVariableValue(String sessionId,
ScopeBean scopeBean, String varName) {
// if (this.outputOperationTip){
// SimulatorRunner.printOperationTip("获取流程变量[varName="+varName+"]");
// }
return super.getVariableValue(sessionId, scopeBean, varName);
}
@Override
public MapConvertor getVariableValues(String sessionId, ScopeBean scopeBean) {
// if (this.outputOperationTip){
// SimulatorRunner.printOperationTip("获取流程变量集合[processElementId="+scopeBean.getProcessElementId()+"]");
// }
return super.getVariableValues(sessionId, scopeBean);
}
@Override
public void setVariableValue1(String sessionId, ScopeBean scopeBean,
String name, ObjectWrapper obj) {
if (this.outputOperationTip){
SimulatorRunner.printOperationTip("设置流程变量["+name+"="+obj==null?null:obj.getValue()+"]");
}
super.setVariableValue1(sessionId, scopeBean, name, obj);
}
@Override
public void setVariableValue2(String sessionId, ScopeBean scopeBean,
String name, ObjectWrapper obj, PropertiesConvertor convertor) {
if (this.outputOperationTip){
SimulatorRunner.printOperationTip("设置流程变量["+name+"="+obj==null?null:obj.getValue()+"]");
}
super.setVariableValue2(sessionId, scopeBean, name, obj, convertor);
}
@SuppressWarnings("unchecked")
public void initSimulator(@WebParam(name="sessionId")String sessionId){
// if (this.outputOperationTip){
// SimulatorRunner.printOperationTip("模拟器初始化");
// }
final WorkflowSessionLocalImpl sessionLocalImpl = validateSession(sessionId);
// 清除现有的数据
springTransactionTemplate.execute(new TransactionCallback() {
public Object doInTransaction(TransactionStatus arg0) {
simulatorInitializer.initSimulator();
return null;
}
});
//将现有的pvm中的PObject对象清除
RuntimeContext rtCtx = sessionLocalImpl.getRuntimeContext();
KernelManager kernelManager = rtCtx.getDefaultEngineModule(KernelManager.class);
kernelManager.clearCachedPObject();
}
public List<FormCategoryImpl> findAllTopCategories(String sessionId){
final WorkflowSessionLocalImpl sessionLocalImpl = validateSession(sessionId);
final RuntimeContext runtimeContext = sessionLocalImpl.getRuntimeContext();
FormSystemConnector formSysConnector = runtimeContext.getDefaultEngineModule(FormSystemConnector.class);
List<FormCategory> formCategoryList = formSysConnector.findAllTopCategories();
List<FormCategoryImpl> result = new ArrayList<FormCategoryImpl>();
if (formCategoryList!=null){
for (FormCategory category: formCategoryList){
result.add((FormCategoryImpl)category);
}
}
return result;
}
public List<FormCategoryImpl> findChildCategories(String sessionId,
String parentCategoryId){
final WorkflowSessionLocalImpl sessionLocalImpl = validateSession(sessionId);
final RuntimeContext runtimeContext = sessionLocalImpl.getRuntimeContext();
FormSystemConnector formSysConnector = runtimeContext.getDefaultEngineModule(FormSystemConnector.class);
List<FormCategory> formCategoryList = formSysConnector.findChildCategories(parentCategoryId);
List<FormCategoryImpl> result = new ArrayList<FormCategoryImpl>();
if (formCategoryList!=null){
for (FormCategory category: formCategoryList){
result.add((FormCategoryImpl)category);
}
}
return result;
}
public List<FormImpl> findForms(String sessionId,
String categoryId){
final WorkflowSessionLocalImpl sessionLocalImpl = validateSession(sessionId);
final RuntimeContext runtimeContext = sessionLocalImpl.getRuntimeContext();
FormSystemConnector formSysConnector = runtimeContext.getDefaultEngineModule(FormSystemConnector.class);
List<Form> formList = formSysConnector.findForms(categoryId);
List<FormImpl> result = new ArrayList<FormImpl>();
if (formList!=null){
for (Form form: formList){
result.add((FormImpl)form);
}
}
return result;
}
/* (non-Javadoc)
* @see org.fireflow.simulation.FireflowSimulator#getFormById(java.lang.String, java.lang.String)
*/
public FormImpl getFormById(String sessionId, String formId) {
final WorkflowSessionLocalImpl sessionLocalImpl = validateSession(sessionId);
final RuntimeContext runtimeContext = sessionLocalImpl.getRuntimeContext();
FormSystemConnector formSysConnector = runtimeContext.getDefaultEngineModule(FormSystemConnector.class);
Form form = formSysConnector.getFormById(formId);
return (FormImpl)form;
}
/* (non-Javadoc)
* @see org.fireflow.simulation.FireflowSimulator#getCategoryById(java.lang.String, java.lang.String)
*/
public FormCategoryImpl getCategoryById(String sessionId, String categoryId) {
final WorkflowSessionLocalImpl sessionLocalImpl = validateSession(sessionId);
final RuntimeContext runtimeContext = sessionLocalImpl.getRuntimeContext();
FormSystemConnector formSysConnector = runtimeContext.getDefaultEngineModule(FormSystemConnector.class);
FormCategory category = formSysConnector.getCategoryById(categoryId);
return (FormCategoryImpl)category;
}
/* (non-Javadoc)
* @see org.fireflow.simulation.FireflowSimulator#findUserById(java.lang.String, java.lang.String)
*/
public UserImpl findUserById(String sessionId, String userId) {
final WorkflowSessionLocalImpl sessionLocalImpl = validateSession(sessionId);
final RuntimeContext runtimeContext = sessionLocalImpl.getRuntimeContext();
OUSystemConnector ouSysConnector = runtimeContext.getDefaultEngineModule(OUSystemConnector.class);
User user = ouSysConnector.findUserById(userId);
if (user instanceof UserImpl){
return (UserImpl)user;
}else{
UserImpl u = new UserImpl();
u.copy(user);
return u;
}
}
/* (non-Javadoc)
* @see org.fireflow.simulation.FireflowSimulator#findUsersInDepartment(java.lang.String, java.lang.String)
*/
public List<UserImpl> findUsersInDepartment(String sessionId, String deptId) {
final WorkflowSessionLocalImpl sessionLocalImpl = validateSession(sessionId);
final RuntimeContext runtimeContext = sessionLocalImpl.getRuntimeContext();
OUSystemConnector ouSysConnector = runtimeContext.getDefaultEngineModule(OUSystemConnector.class);
List<User> userList = ouSysConnector.findUsersInDepartment(deptId);
List<UserImpl> result = new ArrayList<UserImpl>();
if (userList!=null){
for (User user : userList){
if (user instanceof UserImpl){
result.add((UserImpl)user);
}else{
UserImpl u = new UserImpl();
u.copy(user);
result.add(u);
}
}
}
return result;
}
/* (non-Javadoc)
* @see org.fireflow.simulation.FireflowSimulator#findUsersInRole(java.lang.String, java.lang.String)
*/
public List<UserImpl> findUsersInRole(String sessionId, String roleId) {
final WorkflowSessionLocalImpl sessionLocalImpl = validateSession(sessionId);
final RuntimeContext runtimeContext = sessionLocalImpl.getRuntimeContext();
OUSystemConnector ouSysConnector = runtimeContext.getDefaultEngineModule(OUSystemConnector.class);
List<User> userList = ouSysConnector.findUsersInRole(roleId);
List<UserImpl> result = new ArrayList<UserImpl>();
if (userList!=null){
for (User user : userList){
if (user instanceof UserImpl){
result.add((UserImpl)user);
}else{
UserImpl u = new UserImpl();
u.copy(user);
result.add(u);
}
}
}
return result;
}
/* (non-Javadoc)
* @see org.fireflow.simulation.FireflowSimulator#findUsersInGroup(java.lang.String, java.lang.String)
*/
public List<UserImpl> findUsersInGroup(String sessionId, String groupId) {
final WorkflowSessionLocalImpl sessionLocalImpl = validateSession(sessionId);
final RuntimeContext runtimeContext = sessionLocalImpl.getRuntimeContext();
OUSystemConnector ouSysConnector = runtimeContext.getDefaultEngineModule(OUSystemConnector.class);
List<User> userList = ouSysConnector.findUsersInGroup(groupId);
List<UserImpl> result = new ArrayList<UserImpl>();
if (userList!=null){
for (User user : userList){
if (user instanceof UserImpl){
result.add((UserImpl)user);
}else{
UserImpl u = new UserImpl();
u.copy(user);
result.add(u);
}
}
}
return result;
}
/* (non-Javadoc)
* @see org.fireflow.simulation.FireflowSimulator#findDepartmentById(java.lang.String, java.lang.String)
*/
public DepartmentImpl findDepartmentById(String sessionId, String id) {
final WorkflowSessionLocalImpl sessionLocalImpl = validateSession(sessionId);
final RuntimeContext runtimeContext = sessionLocalImpl.getRuntimeContext();
OUSystemConnector ouSysConnector = runtimeContext.getDefaultEngineModule(OUSystemConnector.class);
Department department = ouSysConnector.findDepartmentById(id);
if (department instanceof DepartmentImpl){
return (DepartmentImpl)department;
}else{
DepartmentImpl dept = new DepartmentImpl();
dept.copy(department);
return dept;
}
}
/* (non-Javadoc)
* @see org.fireflow.simulation.FireflowSimulator#findAllTopDepartments(java.lang.String)
*/
public List<DepartmentImpl> findAllTopDepartments(String sessionId) {
final WorkflowSessionLocalImpl sessionLocalImpl = validateSession(sessionId);
final RuntimeContext runtimeContext = sessionLocalImpl.getRuntimeContext();
OUSystemConnector ouSysConnector = runtimeContext.getDefaultEngineModule(OUSystemConnector.class);
List<Department> departmentList = ouSysConnector.findAllTopDepartments();
List<DepartmentImpl> result = new ArrayList<DepartmentImpl>();
if (departmentList!=null){
for (Department department : departmentList){
if (department instanceof DepartmentImpl){
result.add((DepartmentImpl)department);
}else{
DepartmentImpl dept = new DepartmentImpl();
dept.copy(department);
result.add( dept);
}
}
}
return result;
}
/* (non-Javadoc)
* @see org.fireflow.simulation.FireflowSimulator#findChildDepartments(java.lang.String, java.lang.String)
*/
public List<DepartmentImpl> findChildDepartments(String sessionId,
String parentId) {
final WorkflowSessionLocalImpl sessionLocalImpl = validateSession(sessionId);
final RuntimeContext runtimeContext = sessionLocalImpl.getRuntimeContext();
OUSystemConnector ouSysConnector = runtimeContext.getDefaultEngineModule(OUSystemConnector.class);
List<Department> departmentList = ouSysConnector.findChildDepartments(parentId);
List<DepartmentImpl> result = new ArrayList<DepartmentImpl>();
if (departmentList!=null){
for (Department department : departmentList){
if (department instanceof DepartmentImpl){
result.add((DepartmentImpl)department);
}else{
DepartmentImpl dept = new DepartmentImpl();
dept.copy(department);
result.add( dept);
}
}
}
return result;
}
/* (non-Javadoc)
* @see org.fireflow.simulation.FireflowSimulator#findRoleById(java.lang.String, java.lang.String)
*/
public RoleImpl findRoleById(String sessionId, String id) {
final WorkflowSessionLocalImpl sessionLocalImpl = validateSession(sessionId);
final RuntimeContext runtimeContext = sessionLocalImpl.getRuntimeContext();
OUSystemConnector ouSysConnector = runtimeContext.getDefaultEngineModule(OUSystemConnector.class);
Role role = ouSysConnector.findRoleById(id);
if (role instanceof RoleImpl){
return (RoleImpl)role;
}else{
RoleImpl r = new RoleImpl();
r.copy(role);
return r;
}
}
/* (non-Javadoc)
* @see org.fireflow.simulation.FireflowSimulator#findAllTopRoles(java.lang.String)
*/
public List<RoleImpl> findAllTopRoles(String sessionId) {
final WorkflowSessionLocalImpl sessionLocalImpl = validateSession(sessionId);
final RuntimeContext runtimeContext = sessionLocalImpl.getRuntimeContext();
OUSystemConnector ouSysConnector = runtimeContext.getDefaultEngineModule(OUSystemConnector.class);
List<Role> roleList = ouSysConnector.findAllTopRoles();
List<RoleImpl> result = new ArrayList<RoleImpl>();
if (roleList!=null){
for (Role role : roleList){
if (role instanceof RoleImpl){
result.add((RoleImpl)role);
}else{
RoleImpl r = new RoleImpl();
r.copy(role);
result.add(r);
}
}
}
return result;
}
/* (non-Javadoc)
* @see org.fireflow.simulation.FireflowSimulator#findChildRoles(java.lang.String, java.lang.String)
*/
public List<RoleImpl> findChildRoles(String sessionId, String parentRoleId) {
final WorkflowSessionLocalImpl sessionLocalImpl = validateSession(sessionId);
final RuntimeContext runtimeContext = sessionLocalImpl.getRuntimeContext();
OUSystemConnector ouSysConnector = runtimeContext.getDefaultEngineModule(OUSystemConnector.class);
List<Role> roleList = ouSysConnector.findChildRoles(parentRoleId);
List<RoleImpl> result = new ArrayList<RoleImpl>();
if (roleList!=null){
for (Role role : roleList){
if (role instanceof RoleImpl){
result.add((RoleImpl)role);
}else{
RoleImpl r = new RoleImpl();
r.copy(role);
result.add(r);
}
}
}
return result;
}
/* (non-Javadoc)
* @see org.fireflow.simulation.FireflowSimulator#findRolesInDepartment(java.lang.String, java.lang.String)
*/
public List<RoleImpl> findRolesInDepartment(String sessionId, String deptId) {
final WorkflowSessionLocalImpl sessionLocalImpl = validateSession(sessionId);
final RuntimeContext runtimeContext = sessionLocalImpl.getRuntimeContext();
OUSystemConnector ouSysConnector = runtimeContext.getDefaultEngineModule(OUSystemConnector.class);
List<Role> roleList = ouSysConnector.findRolesInDepartment(deptId);
List<RoleImpl> result = new ArrayList<RoleImpl>();
if (roleList!=null){
for (Role role : roleList){
if (role instanceof RoleImpl){
result.add((RoleImpl)role);
}else{
RoleImpl r = new RoleImpl();
r.copy(role);
result.add(r);
}
}
}
return result;
}
/* (non-Javadoc)
* @see org.fireflow.simulation.FireflowSimulator#findGroupById(java.lang.String, java.lang.String)
*/
public GroupImpl findGroupById(String sessionId, String id) {
final WorkflowSessionLocalImpl sessionLocalImpl = validateSession(sessionId);
final RuntimeContext runtimeContext = sessionLocalImpl.getRuntimeContext();
OUSystemConnector ouSysConnector = runtimeContext.getDefaultEngineModule(OUSystemConnector.class);
Group group = ouSysConnector.findGroupById(id);
if (group instanceof GroupImpl){
return (GroupImpl)group;
}else{
GroupImpl g = new GroupImpl();
g.copy(group);
return g;
}
}
/* (non-Javadoc)
* @see org.fireflow.simulation.FireflowSimulator#findAllGroups(java.lang.String)
*/
public List<GroupImpl> findAllGroups(String sessionId) {
final WorkflowSessionLocalImpl sessionLocalImpl = validateSession(sessionId);
final RuntimeContext runtimeContext = sessionLocalImpl.getRuntimeContext();
OUSystemConnector ouSysConnector = runtimeContext.getDefaultEngineModule(OUSystemConnector.class);
List<Group> groupList = ouSysConnector.findAllGroups();
List<GroupImpl> result = new ArrayList<GroupImpl>();
if (groupList!=null){
for (Group group : groupList){
if (group instanceof GroupImpl){
result.add((GroupImpl)group);
}else{
GroupImpl g = new GroupImpl();
g.copy(group);
result.add(g);
}
}
}
return result;
}
/* (non-Javadoc)
* @see org.fireflow.simulation.FireflowSimulator#findGroupsInDepartment(java.lang.String, java.lang.String)
*/
public List<GroupImpl> findGroupsInDepartment(String sessionId,
String deptId) {
final WorkflowSessionLocalImpl sessionLocalImpl = validateSession(sessionId);
final RuntimeContext runtimeContext = sessionLocalImpl.getRuntimeContext();
OUSystemConnector ouSysConnector = runtimeContext.getDefaultEngineModule(OUSystemConnector.class);
List<Group> groupList = ouSysConnector.findGroupsInDepartment(deptId);
List<GroupImpl> result = new ArrayList<GroupImpl>();
if (groupList!=null){
for (Group group : groupList){
if (group instanceof GroupImpl){
result.add((GroupImpl)group);
}else{
GroupImpl g = new GroupImpl();
g.copy(group);
result.add(g);
}
}
}
return result;
}
public WorkflowSessionLocalImpl login(String userName, String password) throws EngineException{
if (SimulatorSessionFactory.SIMULATOR_DEFAULT_USER_NAME.equals(userName)){
UserImpl u = new UserImpl();
u.setDeptId("FireflowSimulationDept");
u.setDeptName("FireflowSimulationDept");
u.setId(SimulatorSessionFactory.SIMULATOR_DEFAULT_USER_NAME);
u.setName("FireWorkflow模拟器");
WorkflowSessionLocalImpl session = (WorkflowSessionLocalImpl)WorkflowSessionFactory.createWorkflowSession(runtimeContext, u);
if (cacheManager!=null){
Cache cache = cacheManager.getCache(SESSION_CACHE);
if (cache!=null){
cache.put(new Element(session.getSessionId(),session));
}
}
return session;
}else{
return super.login(userName, password);
}
}
}