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
TaskParseHandler 任务解析处理类
package org.flowable.engine.impl.bpmn.parser.handler;
import org.flowable.bpmn.model.BaseElement;
import org.flowable.bpmn.model.Task;
import org.flowable.engine.impl.bpmn.parser.BpmnParse;
/**
* 任务解析处理器
*
* @author Joram Barrez
*/
public class TaskParseHandler extends AbstractActivityBpmnParseHandler<Task> {
@Override
public Class<? extends BaseElement> getHandledType() {
return Task.class;
}
@Override
protected void executeParse(BpmnParse bpmnParse, Task task) {
task.setBehavior(bpmnParse.getActivityBehaviorFactory().createTaskActivityBehavior(task));
}
}
UserTaskParseHandler 用户任务解析处理器
package org.flowable.engine.impl.bpmn.parser.handler;
import org.flowable.bpmn.model.BaseElement;
import org.flowable.bpmn.model.UserTask;
import org.flowable.engine.impl.bpmn.parser.BpmnParse;
/**
* 用户任务解析处理器
*
* @author Joram Barrez
*/
public class UserTaskParseHandler extends AbstractActivityBpmnParseHandler<UserTask> {
@Override
public Class<? extends BaseElement> getHandledType() {
return UserTask.class;
}
@Override
protected void executeParse(BpmnParse bpmnParse, UserTask userTask) {
userTask.setBehavior(bpmnParse.getActivityBehaviorFactory().createUserTaskActivityBehavior(userTask));
}
}
ServiceTaskParseHandler 服务任务解析处理器
package org.flowable.engine.impl.bpmn.parser.handler;
import org.apache.commons.lang3.StringUtils;
import org.flowable.bpmn.model.BaseElement;
import org.flowable.bpmn.model.ImplementationType;
import org.flowable.bpmn.model.ServiceTask;
import org.flowable.engine.impl.bpmn.behavior.WebServiceActivityBehavior;
import org.flowable.engine.impl.bpmn.parser.BpmnParse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* 服务任务解析处理器
*
* @author Joram Barrez
*/
public class ServiceTaskParseHandler extends AbstractActivityBpmnParseHandler<ServiceTask> {
private static final Logger LOGGER = LoggerFactory.getLogger(ServiceTaskParseHandler.class);
@Override
public Class<? extends BaseElement> getHandledType() {
return ServiceTask.class;
}
@Override
protected void executeParse(BpmnParse bpmnParse, ServiceTask serviceTask) {
// Email, Mule, Http and Shell service tasks
if (StringUtils.isNotEmpty(serviceTask.getType())) {
if ("mail".equalsIgnoreCase(serviceTask.getType())) {
serviceTask.setBehavior(bpmnParse.getActivityBehaviorFactory().createMailActivityBehavior(serviceTask));
} else if ("mule".equalsIgnoreCase(serviceTask.getType())) {
serviceTask.setBehavior(bpmnParse.getActivityBehaviorFactory().createMuleActivityBehavior(serviceTask));
} else if ("camel".equalsIgnoreCase(serviceTask.getType())) {
serviceTask.setBehavior(bpmnParse.getActivityBehaviorFactory().createCamelActivityBehavior(serviceTask));
} else if ("shell".equalsIgnoreCase(serviceTask.getType())) {
serviceTask.setBehavior(bpmnParse.getActivityBehaviorFactory().createShellActivityBehavior(serviceTask));
} else if ("dmn".equalsIgnoreCase(serviceTask.getType())) {
serviceTask.setBehavior(bpmnParse.getActivityBehaviorFactory().createDmnActivityBehavior(serviceTask));
} else if ("http".equalsIgnoreCase(serviceTask.getType())) {
serviceTask.setBehavior(bpmnParse.getActivityBehaviorFactory().createHttpActivityBehavior(serviceTask));
} else if (ImplementationType.IMPLEMENTATION_TYPE_DELEGATEEXPRESSION.equalsIgnoreCase(serviceTask.getImplementationType())) {
serviceTask.setBehavior(bpmnParse.getActivityBehaviorFactory().createServiceTaskDelegateExpressionActivityBehavior(serviceTask));
} else if (ImplementationType.IMPLEMENTATION_TYPE_EXPRESSION.equalsIgnoreCase(serviceTask.getImplementationType())) {
serviceTask.setBehavior(bpmnParse.getActivityBehaviorFactory().createServiceTaskExpressionActivityBehavior(serviceTask));
} else {
LOGGER.warn("Invalid type: '{}' for service task {}", serviceTask.getType(), serviceTask.getId());
}
// flowable:class
} else if (ImplementationType.IMPLEMENTATION_TYPE_CLASS.equalsIgnoreCase(serviceTask.getImplementationType())) {
serviceTask.setBehavior(bpmnParse.getActivityBehaviorFactory().createClassDelegateServiceTask(serviceTask));
// flowable:delegateExpression
} else if (ImplementationType.IMPLEMENTATION_TYPE_DELEGATEEXPRESSION.equalsIgnoreCase(serviceTask.getImplementationType())) {
serviceTask.setBehavior(bpmnParse.getActivityBehaviorFactory().createServiceTaskDelegateExpressionActivityBehavior(serviceTask));
// flowable:expression
} else if (ImplementationType.IMPLEMENTATION_TYPE_EXPRESSION.equalsIgnoreCase(serviceTask.getImplementationType())) {
serviceTask.setBehavior(bpmnParse.getActivityBehaviorFactory().createServiceTaskExpressionActivityBehavior(serviceTask));
// Webservice
} else if (ImplementationType.IMPLEMENTATION_TYPE_WEBSERVICE.equalsIgnoreCase(serviceTask.getImplementationType()) && StringUtils.isNotEmpty(serviceTask.getOperationRef())) {
WebServiceActivityBehavior webServiceActivityBehavior = bpmnParse.getActivityBehaviorFactory().createWebServiceActivityBehavior(serviceTask, bpmnParse.getBpmnModel());
serviceTask.setBehavior(webServiceActivityBehavior);
} else {
// 服务任务必须有“class”、“delegateExpression”、“type”、“operation”或“expression”属性之一{
LOGGER.warn("One of the attributes 'class', 'delegateExpression', 'type', 'operation', or 'expression' is mandatory on service task {}", serviceTask.getId());
}
}
}
SendTaskParseHandler 发送任务解析处理器
package org.flowable.engine.impl.bpmn.parser.handler;
import org.apache.commons.lang3.StringUtils;
import org.flowable.bpmn.model.BaseElement;
import org.flowable.bpmn.model.ImplementationType;
import org.flowable.bpmn.model.SendTask;
import org.flowable.engine.impl.bpmn.behavior.WebServiceActivityBehavior;
import org.flowable.engine.impl.bpmn.parser.BpmnParse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* 发送任务解析处理器
*
* @author Joram Barrez
*/
public class SendTaskParseHandler extends AbstractActivityBpmnParseHandler<SendTask> {
private static final Logger LOGGER = LoggerFactory.getLogger(SendTaskParseHandler.class);
@Override
public Class<? extends BaseElement> getHandledType() {
return SendTask.class;
}
@Override
protected void executeParse(BpmnParse bpmnParse, SendTask sendTask) {
if (StringUtils.isNotEmpty(sendTask.getType())) {
if ("mail".equalsIgnoreCase(sendTask.getType())) {
sendTask.setBehavior(bpmnParse.getActivityBehaviorFactory().createMailActivityBehavior(sendTask));
} else if ("mule".equalsIgnoreCase(sendTask.getType())) {
sendTask.setBehavior(bpmnParse.getActivityBehaviorFactory().createMuleActivityBehavior(sendTask));
} else if ("camel".equalsIgnoreCase(sendTask.getType())) {
sendTask.setBehavior(bpmnParse.getActivityBehaviorFactory().createCamelActivityBehavior(sendTask));
} else if ("dmn".equalsIgnoreCase(sendTask.getType())) {
sendTask.setBehavior(bpmnParse.getActivityBehaviorFactory().createDmnActivityBehavior(sendTask));
}
} else if (ImplementationType.IMPLEMENTATION_TYPE_WEBSERVICE.equalsIgnoreCase(sendTask.getImplementationType()) && StringUtils.isNotEmpty(sendTask.getOperationRef())) {
WebServiceActivityBehavior webServiceActivityBehavior = bpmnParse.getActivityBehaviorFactory().createWebServiceActivityBehavior(sendTask, bpmnParse.getBpmnModel());
sendTask.setBehavior(webServiceActivityBehavior);
} else {
// sendTask{}上的一个属性“type”或“operation”是必需的
LOGGER.warn("One of the attributes 'type' or 'operation' is mandatory on sendTask {}", sendTask.getId());
}
}
}