activiti-bpmn-converter
创始人
2024-02-16 12:58:32
0

activiti-bpmn-converter

  • 目录
    • 概述
      • 需求:
    • 设计思路
    • 实现思路分析
      • 1.BpmnXMLConstants
      • 2.BpmnXMLConverter
      • 3.StartEventXMLConverter
      • 4.EndEventXMLConverter
  • 参考资料和推荐阅读

Survive by day and develop by night.
talk for import biz , show your perfect code,full busy,skip hardness,make a better result,wait for change,challenge Survive.
happy for hardess to solve denpendies.

目录

在这里插入图片描述

概述

activiti-bpmn-converter的是一个非常常见的需求。

需求:

设计思路

实现思路分析

1.BpmnXMLConstants

public interface BpmnXMLConstants {public static final String BPMN2_NAMESPACE = "http://www.omg.org/spec/BPMN/20100524/MODEL";public static final String BPMN2_PREFIX = "bpmn2";public static final String XSI_NAMESPACE = "http://www.w3.org/2001/XMLSchema-instance";public static final String XSI_PREFIX = "xsi";public static final String SCHEMA_NAMESPACE = "http://www.w3.org/2001/XMLSchema";public static final String XSD_PREFIX = "xsd";public static final String TYPE_LANGUAGE_ATTRIBUTE = "typeLanguage";public static final String XPATH_NAMESPACE = "http://www.w3.org/1999/XPath";public static final String EXPRESSION_LANGUAGE_ATTRIBUTE = "expressionLanguage";public static final String PROCESS_NAMESPACE = "http://www.activiti.org/test";public static final String TARGET_NAMESPACE_ATTRIBUTE = "targetNamespace";public static final String ACTIVITI_EXTENSIONS_NAMESPACE = "http://activiti.org/bpmn";public static final String ACTIVITI_EXTENSIONS_PREFIX = "activiti";public static final String BPMNDI_NAMESPACE = "http://www.omg.org/spec/BPMN/20100524/DI";public static final String BPMNDI_PREFIX = "bpmndi";public static final String OMGDC_NAMESPACE = "http://www.omg.org/spec/DD/20100524/DC";public static final String OMGDC_PREFIX = "omgdc";public static final String OMGDI_NAMESPACE = "http://www.omg.org/spec/DD/20100524/DI";public static final String OMGDI_PREFIX = "omgdi";

2.BpmnXMLConverter

public class BpmnXMLConverter implements BpmnXMLConstants {protected static final Logger LOGGER = LoggerFactory.getLogger(BpmnXMLConverter.class);protected static final String BPMN_XSD = "org/activiti/impl/bpmn/parser/BPMN20.xsd";protected static final String DEFAULT_ENCODING = "UTF-8";protected static Map convertersToBpmnMap = new HashMap();protected static Map, BaseBpmnXMLConverter> convertersToXMLMap = new HashMap, BaseBpmnXMLConverter>();protected ClassLoader classloader;protected List userTaskFormTypes;protected List startEventFormTypes;protected BpmnEdgeParser bpmnEdgeParser = new BpmnEdgeParser();protected BpmnShapeParser bpmnShapeParser = new BpmnShapeParser();protected DefinitionsParser definitionsParser = new DefinitionsParser();protected DocumentationParser documentationParser = new DocumentationParser();protected ExtensionElementsParser extensionElementsParser = new ExtensionElementsParser();protected ImportParser importParser = new ImportParser();protected InterfaceParser interfaceParser = new InterfaceParser();protected ItemDefinitionParser itemDefinitionParser = new ItemDefinitionParser();protected IOSpecificationParser ioSpecificationParser = new IOSpecificationParser();protected DataStoreParser dataStoreParser = new DataStoreParser();protected LaneParser laneParser = new LaneParser();protected MessageParser messageParser = new MessageParser();protected MessageFlowParser messageFlowParser = new MessageFlowParser();protected MultiInstanceParser multiInstanceParser = new MultiInstanceParser();protected ParticipantParser participantParser = new ParticipantParser();protected PotentialStarterParser potentialStarterParser = new PotentialStarterParser();protected ProcessParser processParser = new ProcessParser();protected ResourceParser resourceParser = new ResourceParser();protected SignalParser signalParser = new SignalParser();protected SubProcessParser subProcessParser = new SubProcessParser();static {// eventsaddConverter(new EndEventXMLConverter());addConverter(new StartEventXMLConverter());// tasksaddConverter(new BusinessRuleTaskXMLConverter());addConverter(new ManualTaskXMLConverter());addConverter(new ReceiveTaskXMLConverter());addConverter(new ScriptTaskXMLConverter());addConverter(new ServiceTaskXMLConverter());addConverter(new SendTaskXMLConverter());addConverter(new UserTaskXMLConverter());addConverter(new TaskXMLConverter());addConverter(new CallActivityXMLConverter());// gatewaysaddConverter(new EventGatewayXMLConverter());addConverter(new ExclusiveGatewayXMLConverter());addConverter(new InclusiveGatewayXMLConverter());addConverter(new ParallelGatewayXMLConverter());addConverter(new ComplexGatewayXMLConverter());// connectorsaddConverter(new SequenceFlowXMLConverter());// catch, throw and boundary eventaddConverter(new CatchEventXMLConverter());addConverter(new ThrowEventXMLConverter());addConverter(new BoundaryEventXMLConverter());// artifactsaddConverter(new TextAnnotationXMLConverter());addConverter(new AssociationXMLConverter());// data store referenceaddConverter(new DataStoreReferenceXMLConverter());// data objectsaddConverter(new ValuedDataObjectXMLConverter(), StringDataObject.class);addConverter(new ValuedDataObjectXMLConverter(), BooleanDataObject.class);addConverter(new ValuedDataObjectXMLConverter(), IntegerDataObject.class);addConverter(new ValuedDataObjectXMLConverter(), LongDataObject.class);addConverter(new ValuedDataObjectXMLConverter(), DoubleDataObject.class);addConverter(new ValuedDataObjectXMLConverter(), DateDataObject.class);// Alfresco typesaddConverter(new AlfrescoStartEventXMLConverter());addConverter(new AlfrescoUserTaskXMLConverter());}public static void addConverter(BaseBpmnXMLConverter converter) {addConverter(converter, converter.getBpmnElementType());}public static void addConverter(BaseBpmnXMLConverter converter, Class elementType) {convertersToBpmnMap.put(converter.getXMLElementName(), converter);convertersToXMLMap.put(elementType, converter);}

在这里插入图片描述
convertToBpmnModel流程如下
在这里插入图片描述

3.StartEventXMLConverter

public class StartEventXMLConverter extends BaseBpmnXMLConverter {@Overridepublic Class getBpmnElementType() {return StartEvent.class;}@Overrideprotected String getXMLElementName() {return ELEMENT_EVENT_START;}@Overrideprotected BaseElement convertXMLToElement(XMLStreamReader xtr,BpmnModel model) throws Exception {String formKey = xtr.getAttributeValue(ACTIVITI_EXTENSIONS_NAMESPACE,ATTRIBUTE_FORM_FORMKEY);StartEvent startEvent = null;if (StringUtils.isNotEmpty(formKey) && model.getStartEventFormTypes() != null && model.getStartEventFormTypes().contains(formKey)) {startEvent = new AlfrescoStartEvent();}if (startEvent == null) {startEvent = new StartEvent();}BpmnXMLUtil.addXMLLocation(startEvent,xtr);startEvent.setInitiator(xtr.getAttributeValue(ACTIVITI_EXTENSIONS_NAMESPACE,ATTRIBUTE_EVENT_START_INITIATOR));boolean interrupting = true;String interruptingAttribute = xtr.getAttributeValue(null,ATTRIBUTE_EVENT_START_INTERRUPTING);if (ATTRIBUTE_VALUE_FALSE.equalsIgnoreCase(interruptingAttribute)) {interrupting = false;}startEvent.setInterrupting(interrupting);startEvent.setFormKey(formKey);parseChildElements(getXMLElementName(),startEvent,model,xtr);return startEvent;}@Overrideprotected void writeAdditionalAttributes(BaseElement element,BpmnModel model,XMLStreamWriter xtw) throws Exception {StartEvent startEvent = (StartEvent) element;writeQualifiedAttribute(ATTRIBUTE_EVENT_START_INITIATOR,startEvent.getInitiator(),xtw);writeQualifiedAttribute(ATTRIBUTE_FORM_FORMKEY,startEvent.getFormKey(),xtw);if (startEvent.getEventDefinitions() != null && startEvent.getEventDefinitions().size() > 0) {writeDefaultAttribute(ATTRIBUTE_EVENT_START_INTERRUPTING,String.valueOf(startEvent.isInterrupting()),xtw);}}@Overrideprotected boolean writeExtensionChildElements(BaseElement element,boolean didWriteExtensionStartElement,XMLStreamWriter xtw) throws Exception {StartEvent startEvent = (StartEvent) element;didWriteExtensionStartElement = writeFormProperties(startEvent,didWriteExtensionStartElement,xtw);return didWriteExtensionStartElement;}@Overrideprotected void writeAdditionalChildElements(BaseElement element,BpmnModel model,XMLStreamWriter xtw) throws Exception {StartEvent startEvent = (StartEvent) element;writeEventDefinitions(startEvent,startEvent.getEventDefinitions(),model,xtw);}}

在这里插入图片描述
在这里插入图片描述
convertXMLToElement项目流程如下:
在这里插入图片描述

4.EndEventXMLConverter

public class EndEventXMLConverter extends BaseBpmnXMLConverter {@Overridepublic Class getBpmnElementType() {return EndEvent.class;}@Overrideprotected String getXMLElementName() {return ELEMENT_EVENT_END;}@Overrideprotected BaseElement convertXMLToElement(XMLStreamReader xtr, BpmnModel model) throws Exception {EndEvent endEvent = new EndEvent();BpmnXMLUtil.addXMLLocation(endEvent, xtr);parseChildElements(getXMLElementName(), endEvent, model, xtr);return endEvent;}@Overrideprotected void writeAdditionalAttributes(BaseElement element, BpmnModel model, XMLStreamWriter xtw) throws Exception {}@Overrideprotected void writeAdditionalChildElements(BaseElement element, BpmnModel model, XMLStreamWriter xtw) throws Exception {EndEvent endEvent = (EndEvent) element;writeEventDefinitions(endEvent, endEvent.getEventDefinitions(), model, xtw);}

类图;
在这里插入图片描述

参考资料和推荐阅读

[1]. https://www.activiti.org/

欢迎阅读,各位老铁,如果对你有帮助,点个赞加个关注呗!~

相关内容

热门资讯

喜欢穿一身黑的男生性格(喜欢穿... 今天百科达人给各位分享喜欢穿一身黑的男生性格的知识,其中也会对喜欢穿一身黑衣服的男人人好相处吗进行解...
发春是什么意思(思春和发春是什... 本篇文章极速百科给大家谈谈发春是什么意思,以及思春和发春是什么意思对应的知识点,希望对各位有所帮助,...
网络用语zl是什么意思(zl是... 今天给各位分享网络用语zl是什么意思的知识,其中也会对zl是啥意思是什么网络用语进行解释,如果能碰巧...
为什么酷狗音乐自己唱的歌不能下... 本篇文章极速百科小编给大家谈谈为什么酷狗音乐自己唱的歌不能下载到本地?,以及为什么酷狗下载的歌曲不是...
家里可以做假山养金鱼吗(假山能... 今天百科达人给各位分享家里可以做假山养金鱼吗的知识,其中也会对假山能放鱼缸里吗进行解释,如果能碰巧解...
华为下载未安装的文件去哪找(华... 今天百科达人给各位分享华为下载未安装的文件去哪找的知识,其中也会对华为下载未安装的文件去哪找到进行解...
四分五裂是什么生肖什么动物(四... 本篇文章极速百科小编给大家谈谈四分五裂是什么生肖什么动物,以及四分五裂打一生肖是什么对应的知识点,希...
怎么往应用助手里添加应用(应用... 今天百科达人给各位分享怎么往应用助手里添加应用的知识,其中也会对应用助手怎么添加微信进行解释,如果能...
苏州离哪个飞机场近(苏州离哪个... 本篇文章极速百科小编给大家谈谈苏州离哪个飞机场近,以及苏州离哪个飞机场近点对应的知识点,希望对各位有...
客厅放八骏马摆件可以吗(家里摆... 今天给各位分享客厅放八骏马摆件可以吗的知识,其中也会对家里摆八骏马摆件好吗进行解释,如果能碰巧解决你...