public ProcessDefinition parseElement()

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;
    }