
上QQ阅读APP看书,第一时间看更新
4.6 节点与连线关联
上文以sequenceFlow和process元素的执行监听器解析为例,讲解了流程文档中的元素解析以及属性解析,通过上文一系列讲解,可以发现元素解析之后,会将解析结果添加到父级元素(如process或者subProcess)中,有这样一个问题:节点与连线何如关联?再次分析代码清单4-11中第47~52行的操作,并将其处理流程总结如下。
(1)循环遍历所有已经解析完毕的process对象,如果流程文档中定义有participant元素(泳道),则循环遍历所有的泳道对象pool,并判断process对象中的id值是否与pool对象中的processRef值相等,如果两者相等,则设置pool对象中的executable属性值(是否可以执行)。
(2)调用processFlowElements方法进行节点与连线的关联操作,具体实现如代码清单4-26所示。
代码清单4-26 BpmnXMLConverter.java

该方法的关联节点与连线的处理流程如下。
(1)循环遍历flowElementList集合。
(2)如果flowElement对象类型为SequenceFlow,则首先获取连线中的源节点sourceNode,并将sequenceFlow对象设置到sourceNode对象中,然后获取到连线中的目标节点targetNode,并将sequenceFlow对象设置到targetNode对象中。
(3)如果flowElement对象类型为BoundaryEvent(边界事件),则需要将边界事件与其吸附的对象进行相互关联。
(4)如果flowElement对象类型为SubProcess(子流程),则调用processFlowElements方法继续执行以上两个步骤。