UNPKG

pm4js

Version:

Process Mining for Javascript

76 lines (71 loc) 2.26 kB
class PtmlImporter { static apply(xmlString) { let parser = new DOMParser(); var xmlDoc = parser.parseFromString(xmlString, "text/xml"); let xmlPtml = xmlDoc.getElementsByTagName("ptml")[0]; var xmlProcessTree = xmlPtml.getElementsByTagName("processTree")[0]; let processTree = PtmlImporter.importFromXml(xmlProcessTree); Pm4JS.registerObject(processTree, "Process Tree imported from a PTML file"); return processTree; } static importFromXml(xmlProcessTree) { let nodes = {}; for (let childId in xmlProcessTree.childNodes) { let child = xmlProcessTree.childNodes[childId]; if (child.tagName != null) { let elId = child.getAttribute("id"); let elLabel = child.getAttribute("name"); let elOperator = null; if (child.tagName == "and") { elOperator = ProcessTreeOperator.PARALLEL; elLabel = null; } else if (child.tagName == "xorLoop") { elOperator = ProcessTreeOperator.LOOP; elLabel = null; } else if (child.tagName == "sequence") { elOperator = ProcessTreeOperator.SEQUENCE; elLabel = null; } else if (child.tagName == "or") { elOperator = ProcessTreeOperator.INCLUSIVE; elLabel = null; } else if (child.tagName == "xor") { elOperator = ProcessTreeOperator.EXCLUSIVE; elLabel = null; } else if (child.tagName == "automaticTask") { elLabel = null; } if (child.tagName != "parentsNode") { let tree = new ProcessTree(null, elOperator, elLabel); nodes[elId] = tree; } else { let sourceId = child.getAttribute("sourceId"); let targetId = child.getAttribute("targetId"); nodes[targetId].parentNode = nodes[sourceId]; nodes[sourceId].children.push(nodes[targetId]); } } } for (let nodeId in nodes) { let node = nodes[nodeId]; if (node.parentNode == null) { return node; } } } } try { module.exports = {PtmlImporter: PtmlImporter}; global.PtmlImporter = PtmlImporter; global.DOMParser = require('xmldom').DOMParser; } catch (err) { // not in Node //console.log(err); } Pm4JS.registerImporter("PtmlImporter", "apply", ["ptml"], "PTML Importer", "Alessandro Berti");