diff --git a/lib/import/Importer.js b/lib/import/Importer.js index 3af536df..801adcd2 100644 --- a/lib/import/Importer.js +++ b/lib/import/Importer.js @@ -1,7 +1,13 @@ -import { find, forEach, map } from 'min-dash'; -import { is } from '../util/ModelUtil'; +import { + find, + forEach, + map +} from 'min-dash'; + import BpmnTreeWalker from './BpmnTreeWalker'; +import { is } from '../util/ModelUtil'; + /** * The importBpmnDiagram result. @@ -70,15 +76,15 @@ export function importBpmnDiagram(diagram, definitions, bpmnDiagram) { bpmnDiagram = bpmnDiagram || (definitions.diagrams && definitions.diagrams[0]); - var diagramsToLoad = getDiagramsToLoad(definitions, bpmnDiagram); + var diagramsToImport = getDiagramsToImport(definitions, bpmnDiagram); - if (!diagramsToLoad) { + if (!diagramsToImport) { throw new Error(translate('no diagram to display')); } // traverse BPMN 2.0 document model, // starting at definitions - forEach(diagramsToLoad, function(diagram) { + forEach(diagramsToImport, function(diagram) { walker.handleDefinitions(definitions, diagram); }); @@ -118,13 +124,15 @@ export function importBpmnDiagram(diagram, definitions, bpmnDiagram) { } /** - * Returns all diagrams in the same hirarchy as the requested Diagram. - * It includes all parent- and subProcess diagrams. + * Returns all diagrams in the same hirarchy as the requested diagram. + * Includes all parent and sub process diagrams. * * @param {Array} definitions * @param {Object} bpmnDiagram + * + * @returns {Array} */ -function getDiagramsToLoad(definitions, bpmnDiagram) { +function getDiagramsToImport(definitions, bpmnDiagram) { if (!bpmnDiagram) { return; } @@ -139,10 +147,10 @@ function getDiagramsToLoad(definitions, bpmnDiagram) { // in case the process is part of a collaboration, the plane references the // collaboration, not the process var collaboration; + if (is(rootElement, 'bpmn:Collaboration')) { collaboration = rootElement; - } - else { + } else { collaboration = find(definitions.rootElements, function(element) { if (!is(element, 'bpmn:Collaboration')) { return; @@ -154,38 +162,38 @@ function getDiagramsToLoad(definitions, bpmnDiagram) { }); } - var roots = [rootElement]; + var rootElements = [ rootElement ]; // all collaboration processes can contain sub-diagrams if (collaboration) { - roots = map(collaboration.participants, function(participant) { + rootElements = map(collaboration.participants, function(participant) { return participant.processRef; }); - roots.push(collaboration); + rootElements.push(collaboration); } - var allChildren = selfAndAllFlowElements(roots); + var allChildren = selfAndAllFlowElements(rootElements); // if we have multiple diagrams referencing the same element, we // use the first in the file - var diagramsToLoad = [bpmnDiagram]; - var handledElements = [bpmnElement]; + var diagramsToImport = [ bpmnDiagram ]; + var handledElements = [ bpmnElement ]; forEach(definitions.diagrams, function(diagram) { - var bo = diagram.plane.bpmnElement; + var businessObject = diagram.plane.bpmnElement; if ( - allChildren.indexOf(bo) !== -1 && - handledElements.indexOf(bo) === -1 + allChildren.indexOf(businessObject) !== -1 && + handledElements.indexOf(businessObject) === -1 ) { - diagramsToLoad.push(diagram); - handledElements.push(bo); + diagramsToImport.push(diagram); + handledElements.push(businessObject); } }); - return diagramsToLoad; + return diagramsToImport; } function selfAndAllFlowElements(elements) { @@ -195,7 +203,9 @@ function selfAndAllFlowElements(elements) { if (!element) { return; } + result.push(element); + result = result.concat(selfAndAllFlowElements(element.flowElements)); }); @@ -209,6 +219,7 @@ function findRootProcess(element) { if (is(parent, 'bpmn:Process')) { return parent; } + parent = parent.$parent; } } \ No newline at end of file