Flowable源码地址:https://github.com/flowable/flowable-engine
Flowable-6.7.2 源码注释地址:https://github.com/solojin/flowable-6.7.2-annotated
历史解析器,包路径:org.activiti.engine.impl.history.parse
ProcessHistoryParseHandler 流程历史解析器
package org.activiti.engine.impl.history.parse;
import org.activiti.engine.impl.bpmn.parser.BpmnParse;
import org.activiti.engine.impl.bpmn.parser.handler.AbstractBpmnParseHandler;
import org.activiti.engine.impl.history.handler.ProcessInstanceEndHandler;
import org.flowable.bpmn.model.BaseElement;
import org.flowable.bpmn.model.Process;
/**
* 流程历史解析器
* 负责解析Process实例对象并为其添加事件类型为end的监听器
*
* @author Joram Barrez
*/
public class ProcessHistoryParseHandler extends AbstractBpmnParseHandler<Process> {
protected static final ProcessInstanceEndHandler PROCESS_INSTANCE_END_HANDLER = new ProcessInstanceEndHandler();
@Override
protected Class<? extends BaseElement> getHandledType() {
return Process.class;
}
// 执行解析,为其添加类型为end的监听器
@Override
protected void executeParse(BpmnParse bpmnParse, Process element) {
bpmnParse.getCurrentProcessDefinition().addExecutionListener(org.activiti.engine.impl.pvm.PvmEvent.EVENTNAME_END, PROCESS_INSTANCE_END_HANDLER);
}
}
StartEventHistoryParseHandler 开始事件历史解析器
package org.activiti.engine.impl.history.parse;
import org.activiti.engine.impl.bpmn.parser.BpmnParse;
import org.activiti.engine.impl.bpmn.parser.handler.AbstractBpmnParseHandler;
import org.activiti.engine.impl.history.handler.StartEventEndHandler;
import org.flowable.bpmn.model.BaseElement;
import org.flowable.bpmn.model.StartEvent;
/**
* 开始事件历史解析器
* 负责解析开始事件实例对象并为其添加事件类型为end的监听器
*
* @author Joram Barrez
*/
public class StartEventHistoryParseHandler extends AbstractBpmnParseHandler<StartEvent> {
protected static final StartEventEndHandler START_EVENT_END_HANDLER = new StartEventEndHandler();
@Override
protected Class<? extends BaseElement> getHandledType() {
return StartEvent.class;
}
@Override
protected void executeParse(BpmnParse bpmnParse, StartEvent element) {
bpmnParse.getCurrentActivity().addExecutionListener(org.activiti.engine.impl.pvm.PvmEvent.EVENTNAME_END, START_EVENT_END_HANDLER);
}
}
UserTaskHistoryParseHandler 用户任务历史解析器
package org.activiti.engine.impl.history.parse;
import org.activiti.engine.impl.bpmn.parser.BpmnParse;
import org.activiti.engine.impl.bpmn.parser.handler.AbstractBpmnParseHandler;
import org.activiti.engine.impl.bpmn.parser.handler.UserTaskParseHandler;
import org.activiti.engine.impl.history.handler.UserTaskAssignmentHandler;
import org.activiti.engine.impl.history.handler.UserTaskIdHandler;
import org.activiti.engine.impl.task.TaskDefinition;
import org.flowable.bpmn.model.BaseElement;
import org.flowable.bpmn.model.UserTask;
import org.flowable.engine.delegate.TaskListener;
/**
* 用户任务历史解析器
* 负责解析用户任务实例对象并为其添加类型为代理assigment和创建create的监听器
*
* @author Joram Barrez
*/
public class UserTaskHistoryParseHandler extends AbstractBpmnParseHandler<UserTask> {
protected static final UserTaskAssignmentHandler USER_TASK_ASSIGNMENT_HANDLER = new UserTaskAssignmentHandler();
protected static final UserTaskIdHandler USER_TASK_ID_HANDLER = new UserTaskIdHandler();
@Override
protected Class<? extends BaseElement> getHandledType() {
return UserTask.class;
}
@Override
protected void executeParse(BpmnParse bpmnParse, UserTask element) {
TaskDefinition taskDefinition = (TaskDefinition) bpmnParse.getCurrentActivity().getProperty(UserTaskParseHandler.PROPERTY_TASK_DEFINITION);
// 添加ASSIGNMENT类型的监听器
taskDefinition.addTaskListener(TaskListener.EVENTNAME_ASSIGNMENT, USER_TASK_ASSIGNMENT_HANDLER);
// 添加 CREATE类型的监听器
taskDefinition.addTaskListener(TaskListener.EVENTNAME_CREATE, USER_TASK_ID_HANDLER);
}
}
FlowNodeHistoryParseHandler 流节点历史解析器
package org.activiti.engine.impl.history.parse;
import java.util.HashSet;
import java.util.Set;
import org.activiti.engine.impl.bpmn.parser.BpmnParse;
import org.activiti.engine.impl.history.handler.ActivityInstanceEndHandler;
import org.activiti.engine.impl.history.handler.ActivityInstanceStartHandler;
import org.activiti.engine.impl.pvm.process.ActivityImpl;
import org.activiti.engine.parse.BpmnParseHandler;
import org.flowable.bpmn.model.BaseElement;
import org.flowable.bpmn.model.BoundaryEvent;
import org.flowable.bpmn.model.BusinessRuleTask;
import org.flowable.bpmn.model.CallActivity;
import org.flowable.bpmn.model.EndEvent;
import org.flowable.bpmn.model.EventGateway;
import org.flowable.bpmn.model.ExclusiveGateway;
import org.flowable.bpmn.model.InclusiveGateway;
import org.flowable.bpmn.model.IntermediateCatchEvent;
import org.flowable.bpmn.model.ManualTask;
import org.flowable.bpmn.model.ParallelGateway;
import org.flowable.bpmn.model.ReceiveTask;
import org.flowable.bpmn.model.ScriptTask;
import org.flowable.bpmn.model.SendTask;
import org.flowable.bpmn.model.ServiceTask;
import org.flowable.bpmn.model.SubProcess;
import org.flowable.bpmn.model.Task;
import org.flowable.bpmn.model.ThrowEvent;
import org.flowable.bpmn.model.UserTask;
/**
* 流节点历史解析器
* 负责解析流程三大要素并为其添加事件类型为start和end的监听器
*
* @author Joram Barrez
*/
public class FlowNodeHistoryParseHandler implements BpmnParseHandler {
protected static final ActivityInstanceEndHandler ACTIVITI_INSTANCE_END_LISTENER = new ActivityInstanceEndHandler();
// 实例活动实例开始处理器对象,负责将基本信息插入到历史节点表中
protected static final ActivityInstanceStartHandler ACTIVITY_INSTANCE_START_LISTENER = new ActivityInstanceStartHandler();
protected static Set<Class<? extends BaseElement>> supportedElementClasses = new HashSet<>();
static {
supportedElementClasses.add(EndEvent.class);
supportedElementClasses.add(ThrowEvent.class);
supportedElementClasses.add(BoundaryEvent.class);
supportedElementClasses.add(IntermediateCatchEvent.class);
supportedElementClasses.add(ExclusiveGateway.class);
supportedElementClasses.add(InclusiveGateway.class);
supportedElementClasses.add(ParallelGateway.class);
supportedElementClasses.add(EventGateway.class);
supportedElementClasses.add(Task.class);
supportedElementClasses.add(ManualTask.class);
supportedElementClasses.add(ReceiveTask.class);
supportedElementClasses.add(ScriptTask.class);
supportedElementClasses.add(ServiceTask.class);
supportedElementClasses.add(BusinessRuleTask.class);
supportedElementClasses.add(SendTask.class);
supportedElementClasses.add(UserTask.class);
supportedElementClasses.add(CallActivity.class);
supportedElementClasses.add(SubProcess.class);
}
@Override
public Set<Class<? extends BaseElement>> getHandledTypes() {
return supportedElementClasses;
}
@Override
public void parse(BpmnParse bpmnParse, BaseElement element) {
ActivityImpl activity = bpmnParse.getCurrentScope().findActivity(element.getId());
if (element instanceof BoundaryEvent) {
// 边界事件从不接收活动开始事件
activity.addExecutionListener(org.activiti.engine.impl.pvm.PvmEvent.EVENTNAME_END, ACTIVITY_INSTANCE_START_LISTENER, 0);
activity.addExecutionListener(org.activiti.engine.impl.pvm.PvmEvent.EVENTNAME_END, ACTIVITI_INSTANCE_END_LISTENER, 1);
} else {
activity.addExecutionListener(org.activiti.engine.impl.pvm.PvmEvent.EVENTNAME_START, ACTIVITY_INSTANCE_START_LISTENER, 0);
activity.addExecutionListener(org.activiti.engine.impl.pvm.PvmEvent.EVENTNAME_END, ACTIVITI_INSTANCE_END_LISTENER);
}
}
}