public Object end(final String uri, final String localName, final ExtensibleXmlParser parser) throws SAXException { final Element element = parser.endElementBuilder(); Node node = (Node) parser.getCurrent(); // determine type of event definition, so the correct type of node // can be generated handleNode(node, element, uri, localName, parser); org.w3c.dom.Node xmlNode = element.getFirstChild(); while (xmlNode != null) { String nodeName = xmlNode.getNodeName(); if ("multiInstanceLoopCharacteristics".equals(nodeName)) { // create new timerNode ForEachNode forEachNode = new ForEachNode(); forEachNode.setId(node.getId()); forEachNode.setMetaData("UniqueId", node.getMetaData().get("UniqueId")); node.setMetaData("UniqueId", null); node.setMetaData("hidden", true); forEachNode.addNode(node); forEachNode.linkIncomingConnections( NodeImpl.CONNECTION_DEFAULT_TYPE, node.getId(), NodeImpl.CONNECTION_DEFAULT_TYPE); forEachNode.linkOutgoingConnections( node.getId(), NodeImpl.CONNECTION_DEFAULT_TYPE, NodeImpl.CONNECTION_DEFAULT_TYPE); node = forEachNode; handleForEachNode(node, element, uri, localName, parser); break; } xmlNode = xmlNode.getNextSibling(); } NodeContainer nodeContainer = (NodeContainer) parser.getParent(); nodeContainer.addNode(node); return node; }
protected void handleLinkNode( Element element, Node node, org.w3c.dom.Node xmlLinkNode, ExtensibleXmlParser parser) { NodeContainer nodeContainer = (NodeContainer) parser.getParent(); node.setName(element.getAttribute("name")); NamedNodeMap linkAttr = xmlLinkNode.getAttributes(); String name = linkAttr.getNamedItem("name").getNodeValue(); String id = element.getAttribute("id"); node.setMetaData("UniqueId", id); node.setMetaData(LINK_NAME, name); org.w3c.dom.Node xmlNode = xmlLinkNode.getFirstChild(); IntermediateLink aLink = new IntermediateLink(); aLink.setName(name); aLink.setUniqueId(id); while (null != xmlNode) { String nodeName = xmlNode.getNodeName(); if ("target".equals(nodeName)) { String target = xmlNode.getTextContent(); node.setMetaData("target", target); aLink.setTarget(target); } if ("source".equals(nodeName)) { String source = xmlNode.getTextContent(); node.setMetaData("source", source); aLink.addSource(source); } xmlNode = xmlNode.getNextSibling(); } if (nodeContainer instanceof RuleFlowProcess) { RuleFlowProcess process = (RuleFlowProcess) nodeContainer; List<IntermediateLink> links = (List<IntermediateLink>) process.getMetaData().get(ProcessHandler.LINKS); if (null == links) { links = new ArrayList<IntermediateLink>(); } links.add(aLink); process.setMetaData(ProcessHandler.LINKS, links); } else if (nodeContainer instanceof CompositeNode) { CompositeNode subprocess = (CompositeNode) nodeContainer; List<IntermediateLink> links = (List<IntermediateLink>) subprocess.getMetaData().get(ProcessHandler.LINKS); if (null == links) { links = new ArrayList<IntermediateLink>(); } links.add(aLink); subprocess.setMetaData(ProcessHandler.LINKS, links); } }
protected void handleNode( final Node node, final Element element, final String uri, final String localName, final ExtensibleXmlParser parser) throws SAXException { super.handleNode(node, element, uri, localName, parser); ActionNode actionNode = (ActionNode) node; node.setMetaData("NodeType", "ScriptTask"); DroolsConsequenceAction action = (DroolsConsequenceAction) actionNode.getAction(); if (action == null) { action = new DroolsConsequenceAction(); actionNode.setAction(action); } String language = element.getAttribute("scriptFormat"); if (XmlBPMNProcessDumper.JAVA_LANGUAGE.equals(language)) { action.setDialect(JavaDialect.ID); } else if (XmlBPMNProcessDumper.JAVASCRIPT_LANGUAGE.equals(language)) { action.setDialect("JavaScript"); } action.setConsequence(""); org.w3c.dom.Node xmlNode = element.getFirstChild(); while (xmlNode != null) { if (xmlNode instanceof Element && "script".equals(xmlNode.getNodeName())) { action.setConsequence(xmlNode.getTextContent()); } xmlNode = xmlNode.getNextSibling(); } String compensation = element.getAttribute("isForCompensation"); if (compensation != null) { boolean isForCompensation = Boolean.parseBoolean(compensation); if (isForCompensation) { actionNode.setMetaData("isForCompensation", isForCompensation); } } }