package com.ruoyi.flowable.utils; import org.flowable.bpmn.converter.BpmnXMLConverter; import org.flowable.bpmn.model.BpmnModel; import org.flowable.bpmn.model.FlowElement; import org.flowable.bpmn.model.Process; import org.flowable.bpmn.model.StartEvent; import org.flowable.common.engine.impl.util.io.StringStreamSource; import java.util.Collection; /** * @author KonBAI * @createTime 2022/3/26 19:04 */ public class ModelUtils { private static final BpmnXMLConverter bpmnXMLConverter = new BpmnXMLConverter(); /** * xml转bpmnModel对象 * * @param xml xml * @return bpmnModel对象 */ public static BpmnModel getBpmnModel(String xml) { return bpmnXMLConverter.convertToBpmnModel(new StringStreamSource(xml), false, false); } /** * bpmnModel转xml对象 * * @param bpmnModel bpmnModel对象 * @return xml */ public static byte[] getBpmnXml(BpmnModel bpmnModel) { return bpmnXMLConverter.convertToXML(bpmnModel); } /** * 获取开始节点 * * @param model bpmnModel对象 * @return 开始节点(未找到开始节点,返回null) */ public static StartEvent getStartEvent(BpmnModel model) { Process process = model.getMainProcess(); Collection elements = process.getFlowElements(); return (StartEvent) elements.stream() .filter(flowElement -> flowElement instanceof StartEvent) .findFirst().orElse(null); } }