in core/src/main/java/com/alibaba/smart/framework/engine/bpmn/assembly/process/parser/ProcessDefinitionParser.java [36:97]
public ProcessDefinition parseElement(XMLStreamReader reader, ParseContext context) throws XMLStreamException {
ProcessDefinition processDefinition = new ProcessDefinitionImpl();
processDefinition.setId(XmlParseUtil.getString(reader, "id"));
String version = XmlParseUtil.getString(reader, "version");
String versionTag = XmlParseUtil.getString(reader, "versionTag");
//优先使用versionTag;versionTag是 camunda等设计器的特性,此处是为了兼容。
if(StringUtil.isNotEmpty(versionTag)){
processDefinition.setVersion(versionTag);
}else {
processDefinition.setVersion(version);
}
processDefinition.setName(XmlParseUtil.getString(reader, "name"));
Map<String, String> properties = XmlParseUtil.parseExtendedProperties(reader, context);
processDefinition.setProperties(properties);
List<BaseElement> elements = CollectionUtil.newArrayList();
Map<String, IdBasedElement> idBasedElementMap = MapUtil.newLinkedHashMap();
while (XmlParseUtil.nextChildElement(reader)) {
Object element = this.readElement(reader, context);
if (element instanceof BaseElement) {
if(element instanceof ExtensionElements){
processDefinition.setExtensionElements((ExtensionElements)element);
}
elements.add((BaseElement) element);
if(element instanceof IdBasedElement){
IdBasedElement idBasedElement = (IdBasedElement)element;
String id = idBasedElement.getId();
if(StringUtil.isEmpty(id)){
throw new EngineException(" id cant be null :"+idBasedElement);
}
if(null != idBasedElementMap.get(id)){
throw new EngineException("duplicated id found:"+idBasedElement.getId());
}else{
idBasedElementMap.put(idBasedElement.getId(), idBasedElement);
}
}
}
}
processDefinition.setBaseElementList(elements);
processDefinition.setIdBasedElementMap(idBasedElementMap);
return processDefinition;
}