protected void ensureIds(List<? extends BaseElement> elements, String idPrefix) { Map<String, BaseElement> elementsWithId = new HashMap<>(); Set<BaseElement> baseElementsWithoutId = new HashSet<>(); for (BaseElement baseElement : elements) { if (baseElement.getId() != null) { elementsWithId.put(baseElement.getId(), baseElement); } else { baseElementsWithoutId.add(baseElement); } } if (!baseElementsWithoutId.isEmpty()) { int counter = 1; for (BaseElement baseElement : baseElementsWithoutId) { String id = idPrefix + counter++; while (elementsWithId.containsKey(id)) { id = idPrefix + counter++; } baseElement.setId(id); elementsWithId.put(id, baseElement); } } }
public static void addXMLLocation(BaseElement element, XMLStreamReader xtr) { Location location = xtr.getLocation(); element.setXmlRowNumber(location.getLineNumber()); element.setXmlColumnNumber(location.getColumnNumber()); }
protected void readCommonXmlInfo(BaseElement baseElement, XMLStreamReader xtr) { baseElement.setId(xtr.getAttributeValue(null, CmmnXmlConstants.ATTRIBUTE_ID)); Location location = xtr.getLocation(); baseElement.setXmlRowNumber(location.getLineNumber()); baseElement.setXmlRowNumber(location.getColumnNumber()); }
public void parseElement(CmmnParser cmmnParser, CmmnParseResult cmmnParseResult, BaseElement baseElement) { List<CmmnParseHandler> handlers = null; if (baseElement instanceof PlanItem) { // The plan item definition defines the actual behavior PlanItem planItem = (PlanItem) baseElement; handlers = parseHandlers.get(planItem.getPlanItemDefinition().getClass()); if (handlers == null) { LOGGER.warn("Could not find matching parse handler for planItem '{}' with planItemDefinition '{}'. This is likely a bug.", baseElement.getId(), planItem.getPlanItemDefinition()); } else { handlers.forEach(handler -> handler.parse(cmmnParser, cmmnParseResult, planItem)); // Note: passing plan item, NOT plan item definition } } else { handlers = parseHandlers.get(baseElement.getClass()); if (handlers == null) { LOGGER.warn("Could not find matching parse handler for '{}' this is likely a bug.", baseElement.getId()); } else { handlers.forEach(handler -> handler.parse(cmmnParser, cmmnParseResult, baseElement)); } } }
public static boolean writeExtensionElements(BaseElement baseElement, boolean didWriteExtensionStartElement, Map<String, String> namespaceMap, XMLStreamWriter xtw) throws Exception { if (!baseElement.getExtensionElements().isEmpty()) { if (!didWriteExtensionStartElement) { xtw.writeStartElement(ELEMENT_EXTENSION_ELEMENTS); didWriteExtensionStartElement = true; } if (namespaceMap == null) { namespaceMap = new HashMap<>(); } for (List<ExtensionElement> extensionElements : baseElement.getExtensionElements().values()) { for (ExtensionElement extensionElement : extensionElements) { writeExtensionElement(extensionElement, namespaceMap, xtw); } } } return didWriteExtensionStartElement; }
public BaseElement convertToCmmnModel(XMLStreamReader xtr, ConversionHelper conversionHelper) { BaseElement baseElement = convert(xtr, conversionHelper); if (baseElement != null) { baseElement.setId(xtr.getAttributeValue(null, CmmnXmlConstants.ATTRIBUTE_ID)); Location location = xtr.getLocation(); baseElement.setXmlRowNumber(location.getLineNumber()); baseElement.setXmlRowNumber(location.getColumnNumber()); if (baseElement instanceof CmmnElement) { CmmnElement cmmnElement = (CmmnElement) baseElement; conversionHelper.setCurrentCmmnElement(cmmnElement); } if (baseElement instanceof Criterion) { Criterion criterion = (Criterion) baseElement; conversionHelper.getCmmnModel().addCriterion(criterion.getId(), criterion); } } return baseElement; }