package com.ds.bpm.engine;
import com.ds.bpm.client.*;
import com.ds.bpm.client.data.DataMap;
import com.ds.bpm.engine.database.DbManager;
import com.ds.bpm.engine.database.DbRouteInst;
import com.ds.bpm.engine.event.BPMCoreEventControl;
import com.ds.bpm.engine.event.EIActivityEvent;
import com.ds.bpm.engine.event.EIProcessEvent;
import com.ds.bpm.engine.event.EIRightEvent;
import com.ds.bpm.engine.inter.*;
import com.ds.bpm.engine.proxy.*;
import com.ds.bpm.engine.query.BPMCondition;
import com.ds.bpm.engine.query.BPMConditionKey;
import com.ds.bpm.engine.query.FilterChain;
import com.ds.bpm.engine.util.UtilTimer;
import com.ds.bpm.enums.activitydef.ActivityDefJoin;
import com.ds.bpm.enums.activitydef.ActivityDefPerformSequence;
import com.ds.bpm.enums.activitydef.ActivityDefPerformtype;
import com.ds.bpm.enums.activitydef.ActivityDefPosition;
import com.ds.bpm.enums.activitydef.deivce.ActivityDefDevicePerformtype;
import com.ds.bpm.enums.activityinst.*;
import com.ds.bpm.enums.activityinsthistory.ActivityInstHistoryAtt;
import com.ds.bpm.enums.activityinsthistory.ActivityInstHistoryStatus;
import com.ds.bpm.enums.event.ActivityEventEnums;
import com.ds.bpm.enums.event.ProcessEventEnums;
import com.ds.bpm.enums.event.RightEventEnums;
import com.ds.bpm.enums.process.ProcessDefAccess;
import com.ds.bpm.enums.process.ProcessDefVersionStatus;
import com.ds.bpm.enums.process.ProcessInstStartType;
import com.ds.bpm.enums.process.ProcessInstStatus;
import com.ds.bpm.enums.right.RightConditionEnums;
import com.ds.bpm.enums.right.RightCtx;
import com.ds.bpm.enums.right.RightPermission;
import com.ds.bpm.routefitle.RouteConditionFilter;
import com.ds.command.Command;
import com.ds.common.JDSException;
import com.ds.common.ReturnType;
import com.ds.common.logging.Log;
import com.ds.common.logging.LogFactory;
import com.ds.common.query.Condition;
import com.ds.common.query.Filter;
import com.ds.common.query.JoinOperator;
import com.ds.common.query.Operator;
import com.ds.config.ActivityDefImpl;
import com.ds.config.ListResultModel;
import com.ds.engine.ConnectInfo;
import com.ds.engine.JDSSessionHandle;
import com.ds.iot.DeviceEndPoint;
import com.ds.org.OrgManager;
import com.ds.org.Person;
import com.ds.server.JDSClientService;
import com.ds.server.JDSServer;
import java.io.Serializable;
import java.sql.SQLException;
import java.util.*;
/**
* <p>
* Title: JDS系统管理系统
* </p>
* <p>
* Description: WorkflowClientService客户端服务接口的实现。
* </p>
* <p>
* Copyright: Copyright (c) 2008
* </p>
* <p>
* Company: www.justdos.net
* </p>
*
* @author wenzhang li
* @version 2.0O
*/
public class WorkflowClientServiceImpl implements WorkflowClientService, Serializable {
private static final Log logger = LogFactory.getLog(BPMConstants.CONFIG_KEY, WorkflowClientServiceImpl.class);
private static final int TIMER_LEVEL = 5;
private JDSServer jdsServer;
private WorkflowEngine workflowEngine;
private RightEngine rightEngine;
private DeviceEngine deviceEngine;
private ServiceEngine serviceEngine;
private EventEngine eventEngine;
private DataEngine dataEngine;
private FileEngine fileEngine;
// Org Manager
public OrgManager orgManager = null;
private JDSClientService jdsClient;
/**
* 根据Session中的JDSSessionHandle信息取得工作流系统客户 接口WorkflowClientService
*
* @return 工作流系统客户接口实现
* @throws JDSException
*/
WorkflowClientServiceImpl(JDSClientService jdsClient) throws JDSException {
this.jdsServer = JDSServer.getInstance();
this.jdsClient = jdsClient;
String systemCode = jdsClient.getSystemCode();
this.workflowEngine = WorkflowEngineImpl.getEngine(systemCode);
this.rightEngine = BPMServer.getRigthEngine(systemCode);
this.deviceEngine = BPMServer.getDeviceEngine(systemCode);
this.dataEngine = BPMServer.getDataEngine(systemCode);
this.fileEngine = BPMServer.getFileEngine(systemCode);
this.eventEngine = BPMServer.getEventEngine(systemCode);
this.serviceEngine = BPMServer.getServiceEngine(systemCode);
}
WorkflowClientServiceImpl(JDSSessionHandle sessionHandle, String systemCode) throws JDSException {
this.jdsServer = JDSServer.getInstance();
this.jdsClient = jdsServer.getJDSClientService(sessionHandle, JDSServer.getClusterClient().getSystem(systemCode).getConfigname());
this.workflowEngine = WorkflowEngineImpl.getEngine(systemCode);
this.rightEngine = BPMServer.getRigthEngine(systemCode);
this.dataEngine = BPMServer.getDataEngine(systemCode);
this.fileEngine = BPMServer.getFileEngine(systemCode);
this.eventEngine = BPMServer.getEventEngine(systemCode);
this.serviceEngine = BPMServer.getServiceEngine(systemCode);
// this(this.jdsClient);
}
// ---------------------------------------------事件相关方法,EventControl
// add by lxl 2004-02-14
/**
* fire a process event and transfer this event to EventControl
*
* @param inst the process which fire thie event, the source of event
* @param eventID the event type
*/
private void fireProcessEvent(EIProcessInst inst, ProcessEventEnums eventID) throws BPMException {
fireProcessEvent(inst, eventID, null);
}
/**
* fire a process event and transfer this event to EventControl
*
* @param inst the process which fire thie event, the source of event
* @param eventID the event type
*/
private void fireProcessEvent(EIProcessInst inst, ProcessEventEnums eventID, Map<RightCtx, Object> eventContext) throws BPMException {
eventContext = fillInUserID(eventContext);
EIProcessEvent event = new EIProcessEvent(inst, eventID);
event.setClientService(this);
event.setContextMap(eventContext);
try {
BPMCoreEventControl.dispatchProcessEvent(event, getSystemCode());
} catch (JDSException e) {
throw new BPMException(e);
}
}
/**
* fire a process event and transfer this event to EventControl
*
* @param inst
* the process which fire thie event, the source of event
* @param eventID
* the event type
*/
// private void fireActivityEvent(EIActivityInst inst, int eventID)
// throws BPMException {
// fireActivityEvent(inst, eventID, null);
// }
/**
* fire a process event and transfer this event to EventControl
*
* @param inst the process which fire thie event, the source of event
* @param eventID the event type
*/
private void fireActivityEvent(EIActivityInst inst, ActivityEventEnums eventID, Map<RightCtx, Object> eventContext) throws BPMException {
eventContext = fillInUserID(eventContext);
EIActivityEvent event = new EIActivityEvent(inst, eventID);
event.setClientService(this);
event.setContextMap(eventContext);
try {
BPMCoreEventControl.dispatchActivityEvent(event, getSystemCode());
} catch (JDSException e) {
throw new BPMException(e);
}
}
/**
* fire a right event and transfer this event to EventControl
*
* @param inst the process which fire thie event, the source of event
* @param eventID the event type
*/
private void fireRightEvent(EIActivityInst inst, RightEventEnums eventID, Map<RightCtx, Object> eventContext) throws BPMException {
eventContext = fillInUserID(eventContext);
EIRightEvent event = new EIRightEvent(inst, eventID);
event.setClientService(this);
event.setContextMap(eventContext);
// try {
// BPMCoreEventControl.dispatchRightEvent(event, getSystemCode());
// } catch (JDSException e) {
// e.printStackTrace();
// //throw new BPMEx