UNPKG

1.97 kBJavaScriptView Raw
1import BpmnTreeWalker from './BpmnTreeWalker';
2
3import {
4 isFunction
5} from 'min-dash';
6
7/**
8 * Import the definitions into a diagram.
9 *
10 * Errors and warnings are reported through the specified callback.
11 *
12 * @param {djs.Diagram} diagram
13 * @param {ModdleElement<Definitions>} definitions
14 * @param {ModdleElement<BPMNDiagram>} [bpmnDiagram] the diagram to be rendered
15 * (if not provided, the first one will be rendered)
16 * @param {Function} done the callback, invoked with (err, [ warning ]) once the import is done
17 */
18export function importBpmnDiagram(diagram, definitions, bpmnDiagram, done) {
19
20 if (isFunction(bpmnDiagram)) {
21 done = bpmnDiagram;
22 bpmnDiagram = null;
23 }
24
25 var importer,
26 eventBus,
27 translate;
28
29 var error,
30 warnings = [];
31
32 /**
33 * Walk the diagram semantically, importing (=drawing)
34 * all elements you encounter.
35 *
36 * @param {ModdleElement<Definitions>} definitions
37 * @param {ModdleElement<BPMNDiagram>} bpmnDiagram
38 */
39 function render(definitions, bpmnDiagram) {
40
41 var visitor = {
42
43 root: function(element) {
44 return importer.add(element);
45 },
46
47 element: function(element, parentShape) {
48 return importer.add(element, parentShape);
49 },
50
51 error: function(message, context) {
52 warnings.push({ message: message, context: context });
53 }
54 };
55
56 var walker = new BpmnTreeWalker(visitor, translate);
57
58 // traverse BPMN 2.0 document model,
59 // starting at definitions
60 walker.handleDefinitions(definitions, bpmnDiagram);
61 }
62
63 try {
64 importer = diagram.get('bpmnImporter');
65 eventBus = diagram.get('eventBus');
66 translate = diagram.get('translate');
67
68 eventBus.fire('import.render.start', { definitions: definitions });
69
70 render(definitions, bpmnDiagram);
71
72 eventBus.fire('import.render.complete', {
73 error: error,
74 warnings: warnings
75 });
76 } catch (e) {
77 error = e;
78 }
79
80 done(error, warnings);
81}
\No newline at end of file