package org.foxbpm.bpmn.converter; import java.util.Iterator; import java.util.List; import org.dom4j.DocumentFactory; import org.dom4j.Element; import org.foxbpm.bpmn.constants.BpmnXMLConstants; import org.foxbpm.model.BaseElement; import org.foxbpm.model.FlowElement; import org.foxbpm.model.Lane; import org.foxbpm.model.LaneSet; public class LaneSetXmlConverter extends BaseElementXMLConverter { @Deprecated public FlowElement cretateFlowElement() { // TODO Auto-generated method stub return null; } public Element cretateXMLElement() { return DocumentFactory.getInstance().createElement(BpmnXMLConstants.BPMN2_PREFIX + ':' + BpmnXMLConstants.ELEMENT_LANESET, BpmnXMLConstants.BPMN2_NAMESPACE); } @SuppressWarnings("unchecked") @Override public void convertXMLToModel(Element element, BaseElement baseElement) { LaneSet laneset = (LaneSet)baseElement; Iterator<Element> laneIterator = element.elements().iterator(); while(laneIterator.hasNext()){ Element tmp = laneIterator.next(); Lane lane = parseLane(tmp); laneset.getLanes().add(lane); } super.convertXMLToModel(element, baseElement); } @Override public void convertModelToXML(Element element, BaseElement baseElement) { LaneSet laneSet = (LaneSet)baseElement; List<Lane> lanes = laneSet.getLanes(); if(lanes != null){ for(Lane tmpLane : lanes){ Element tmpLaneElement = parseLaneToXml(tmpLane); element.add(tmpLaneElement); } } super.convertModelToXML(element, baseElement); } @Override public Class<? extends BaseElement> getBpmnElementType() { return LaneSet.class; } @Override public String getXMLElementName() { return "laneSet"; } protected Element parseLaneToXml(Lane lane){ Element element = DocumentFactory.getInstance().createElement(BpmnXMLConstants.BPMN2_PREFIX + ':' + BpmnXMLConstants.ELEMENT_LANE, BpmnXMLConstants.BPMN2_NAMESPACE); element.addAttribute(BpmnXMLConstants.ATTRIBUTE_ID, lane.getId()); element.addAttribute(BpmnXMLConstants.ATTRIBUTE_NAME, lane.getName()); LaneSet laneSet= lane.getChildLaneSet(); if(laneSet != null){ List<Lane> lanes = laneSet.getLanes(); Element laneSetElement = DocumentFactory.getInstance().createElement(BpmnXMLConstants.BPMN2_PREFIX + ':' + BpmnXMLConstants.ELEMENT_CHILDLANESET, BpmnXMLConstants.BPMN2_NAMESPACE); laneSetElement.addAttribute("xsi:type", "bpmn2:tLaneSet"); laneSetElement.addAttribute(BpmnXMLConstants.ATTRIBUTE_ID, laneSet.getId()); laneSetElement.addAttribute(BpmnXMLConstants.ATTRIBUTE_NAME, laneSet.getName()); if(lanes != null){ for(Lane tmpLane : lanes){ Element tmpElement = parseLaneToXml(tmpLane); laneSetElement.add(tmpElement); } } element.add(laneSetElement); } List<String> flowNodeRefs = lane.getFlowElementRefs(); if(flowNodeRefs != null){ for(String tmpRef : flowNodeRefs){ Element elementFlowRef = DocumentFactory.getInstance().createElement(BpmnXMLConstants.BPMN2_PREFIX + ':' + BpmnXMLConstants.ELEMENT_FLOWNODEREF, BpmnXMLConstants.BPMN2_NAMESPACE); elementFlowRef.addText(tmpRef); element.add(elementFlowRef); } } return element; } @SuppressWarnings("unchecked") public Lane parseLane(Element element){ Lane lane = new Lane(); lane.setId(element.attributeValue(BpmnXMLConstants.ATTRIBUTE_ID)); lane.setName(element.attributeValue(BpmnXMLConstants.ATTRIBUTE_NAME)); Element childLaneSet = element.element(BpmnXMLConstants.ELEMENT_CHILDLANESET); if(childLaneSet != null){ LaneSet laneSet = new LaneSet(); laneSet.setId(childLaneSet.attributeValue(BpmnXMLConstants.ATTRIBUTE_ID)); laneSet.setName(childLaneSet.attributeValue(BpmnXMLConstants.ATTRIBUTE_NAME)); Iterator<Element> elementIterator = childLaneSet.elements(BpmnXMLConstants.ELEMENT_LANE).iterator(); while(elementIterator.hasNext()){ Element tmp = elementIterator.next(); Lane tmpLane = parseLane(tmp); laneSet.getLanes().add(tmpLane); } lane.setChildLaneSet(laneSet); } Iterator<Element> elementIterator = element.elements(BpmnXMLConstants.ELEMENT_FLOWNODEREF).iterator(); while(elementIterator.hasNext()){ //设置元素 Element tmp = elementIterator.next(); lane.getFlowElementRefs().add(tmp.getTextTrim()); } return lane; } }