Flowable源码地址:https://github.com/flowable/flowable-engine
Flowable-6.7.2 源码注释地址:https://github.com/solojin/flowable-6.7.2-annotated
事件解析处理器,包路径:org.flowable.engine.impl.bpmn.parser.handler
CompensateEventDefinitionParseHandler 补偿事件定义解析处理器
/**
* 补偿事件定义解析处理器
*
* @author Joram Barrez
* @author Tijs Rademakers
*/
public class CompensateEventDefinitionParseHandler extends AbstractBpmnParseHandler<CompensateEventDefinition> {
@Override
public Class<? extends BaseElement> getHandledType() {
return CompensateEventDefinition.class;
}
@Override
protected void executeParse(BpmnParse bpmnParse, CompensateEventDefinition eventDefinition) {
if (bpmnParse.getCurrentFlowElement() instanceof ThrowEvent) {
ThrowEvent throwEvent = (ThrowEvent) bpmnParse.getCurrentFlowElement();
throwEvent.setBehavior(bpmnParse.getActivityBehaviorFactory().createIntermediateThrowCompensationEventActivityBehavior(
throwEvent, eventDefinition));
} else if (bpmnParse.getCurrentFlowElement() instanceof BoundaryEvent) {
BoundaryEvent boundaryEvent = (BoundaryEvent) bpmnParse.getCurrentFlowElement();
boundaryEvent.setBehavior(bpmnParse.getActivityBehaviorFactory().createBoundaryCompensateEventActivityBehavior(boundaryEvent,
eventDefinition, boundaryEvent.isCancelActivity()));
} else {
// What to do?
}
}
}
MessageEventDefinitionParseHandler 消息事件定义解析处理器
/**
* 消息事件定义解析处理器
*
* @author Joram Barrez
* @author Tijs Rademakers
*/
public class MessageEventDefinitionParseHandler extends AbstractBpmnParseHandler<MessageEventDefinition> {
@Override
public Class<? extends BaseElement> getHandledType() {
return MessageEventDefinition.class;
}
@Override
protected void executeParse(BpmnParse bpmnParse, MessageEventDefinition messageDefinition) {
BpmnModel bpmnModel = bpmnParse.getBpmnModel();
String messageRef = messageDefinition.getMessageRef();
if (bpmnModel.containsMessageId(messageRef)) {
Message message = bpmnModel.getMessage(messageRef);
messageDefinition.setMessageRef(message.getName());
for(List<ExtensionElement> extensionElementList : message.getExtensionElements().values()) {
for(ExtensionElement extensionElement : extensionElementList) {
messageDefinition.addExtensionElement(extensionElement);
}
}
}
if (bpmnParse.getCurrentFlowElement() instanceof IntermediateCatchEvent) {
IntermediateCatchEvent intermediateCatchEvent = (IntermediateCatchEvent) bpmnParse.getCurrentFlowElement();
intermediateCatchEvent.setBehavior(bpmnParse.getActivityBehaviorFactory().createIntermediateCatchMessageEventActivityBehavior(intermediateCatchEvent, messageDefinition));
} else if (bpmnParse.getCurrentFlowElement() instanceof BoundaryEvent) {
BoundaryEvent boundaryEvent = (BoundaryEvent) bpmnParse.getCurrentFlowElement();
boundaryEvent.setBehavior(bpmnParse.getActivityBehaviorFactory().createBoundaryMessageEventActivityBehavior(boundaryEvent, messageDefinition, boundaryEvent.isCancelActivity()));
}
else {
// What to do here?
}
}
}
SignalEventDefinitionParseHandler 信号事件定义解析处理器
/**
* 信号事件定义解析处理器
*
* @author Joram Barrez
* @author Tijs Rademakers
*/
public class SignalEventDefinitionParseHandler extends AbstractBpmnParseHandler<SignalEventDefinition> {
@Override
public Class<? extends BaseElement> getHandledType() {
return SignalEventDefinition.class;
}
@Override
protected void executeParse(BpmnParse bpmnParse, SignalEventDefinition signalDefinition) {
Signal signal = null;
if (bpmnParse.getBpmnModel().containsSignalId(signalDefinition.getSignalRef())) {
signal = bpmnParse.getBpmnModel().getSignal(signalDefinition.getSignalRef());
}
if (bpmnParse.getCurrentFlowElement() instanceof IntermediateCatchEvent) {
IntermediateCatchEvent intermediateCatchEvent = (IntermediateCatchEvent) bpmnParse.getCurrentFlowElement();
intermediateCatchEvent.setBehavior(bpmnParse.getActivityBehaviorFactory().createIntermediateCatchSignalEventActivityBehavior(intermediateCatchEvent, signalDefinition, signal));
} else if (bpmnParse.getCurrentFlowElement() instanceof BoundaryEvent) {
BoundaryEvent boundaryEvent = (BoundaryEvent) bpmnParse.getCurrentFlowElement();
boundaryEvent.setBehavior(bpmnParse.getActivityBehaviorFactory().createBoundarySignalEventActivityBehavior(boundaryEvent, signalDefinition, signal, boundaryEvent.isCancelActivity()));
}
}
}
SendEventServiceTaskParseHandler 发送事件解析处理器
/**
* 发送事件解析处理器
*
* @author Tijs Rademakers
*/
public class SendEventServiceTaskParseHandler extends AbstractActivityBpmnParseHandler<SendEventServiceTask> {
@Override
public Class<? extends BaseElement> getHandledType() {
return SendEventServiceTask.class;
}
@Override
protected void executeParse(BpmnParse bpmnParse, SendEventServiceTask sendEventServiceTask) {
sendEventServiceTask.setBehavior(bpmnParse.getActivityBehaviorFactory().createSendEventTaskBehavior(sendEventServiceTask));
}
}
BoundaryEventParseHandler 边界事件解析处理器
/**
* 边界事件解析处理器
*
* @author Joram Barrez
* @author Tijs Rademakers
*/
public class BoundaryEventParseHandler extends AbstractFlowNodeBpmnParseHandler<BoundaryEvent> {
private static final Logger LOGGER = LoggerFactory.getLogger(BoundaryEventParseHandler.class);
@Override
public Class<? extends BaseElement> getHandledType() {
return BoundaryEvent.class;
}
@Override
protected void executeParse(BpmnParse bpmnParse, BoundaryEvent boundaryEvent) {
if (boundaryEvent.getAttachedToRef() == null) {
// 边界事件中的引用无效。确保引用的活动与边界事件{}定义在同一范围内
LOGGER.warn("Invalid reference in boundary event. Make sure that the referenced activity is defined in the same scope as the boundary event {}", boundaryEvent.getId());
return;
}
EventDefinition eventDefinition = null;
if (boundaryEvent.getEventDefinitions().size() > 0) {
eventDefinition = boundaryEvent.getEventDefinitions().get(0);
}
if (eventDefinition instanceof TimerEventDefinition ||
eventDefinition instanceof ErrorEventDefinition ||
eventDefinition instanceof SignalEventDefinition ||
eventDefinition instanceof CancelEventDefinition ||
eventDefinition instanceof ConditionalEventDefinition ||
eventDefinition instanceof MessageEventDefinition ||
eventDefinition instanceof EscalationEventDefinition ||
eventDefinition instanceof CompensateEventDefinition ||
eventDefinition instanceof VariableListenerEventDefinition) {
bpmnParse.getBpmnParserHandlers().parseElement(bpmnParse, eventDefinition);
return;
} else if (!boundaryEvent.getExtensionElements().isEmpty()) {
List<ExtensionElement> eventTypeExtensionElements = boundaryEvent.getExtensionElements().get(BpmnXMLConstants.ELEMENT_EVENT_TYPE);
if (eventTypeExtensionElements != null && !eventTypeExtensionElements.isEmpty()) {
String eventTypeValue = eventTypeExtensionElements.get(0).getElementText();
if (StringUtils.isNotEmpty(eventTypeValue)) {
boundaryEvent.setBehavior(bpmnParse.getActivityBehaviorFactory().createBoundaryEventRegistryEventActivityBehavior(
boundaryEvent, eventTypeValue, boundaryEvent.isCancelActivity()));
return;
}
}
}
// 应该已经在部署时由process validator获取,所以这只是为了确定
LOGGER.warn("Unsupported boundary event type for boundary event {}", boundaryEvent.getId());
}
}