bpmn-js/lib/features/modeling/BpmnFactory.js

76 lines
1.7 KiB
JavaScript
Raw Normal View History

'use strict';
var _ = require('lodash');
var BpmnModdle = require('bpmn-moddle');
var Collections = require('diagram-js/lib/util/Collections');
function BpmnFactory() {
this._model = BpmnModdle.instance();
this._uuid = 1;
}
BpmnFactory.$inject = [ ];
BpmnFactory.prototype._needsId = function(element) {
return element.$instanceOf('bpmn:RootElement') ||
element.$instanceOf('bpmn:FlowElement') ||
element.$instanceOf('bpmn:Artifact') ||
element.$instanceOf('bpmndi:BPMNShape') ||
element.$instanceOf('bpmndi:BPMNEdge') ||
element.$instanceOf('bpmndi:BPMNDiagram') ||
element.$instanceOf('bpmndi:BPMNPlane');
};
BpmnFactory.prototype._ensureId = function(element) {
if (!element.id && this._needsId(element)) {
element.id = '' + (++this._uuid);
}
};
BpmnFactory.prototype.create = function(type, attrs) {
var element = this._model.create(type, attrs || {});
this._ensureId(element);
return element;
};
BpmnFactory.prototype.createDiShape = function(semantic, bounds, attrs) {
return this.create('bpmndi:BPMNShape', _.extend({
bpmnElement: semantic,
bounds: this.createDiBounds(bounds)
}, attrs));
};
BpmnFactory.prototype.createDiBounds = function(bounds) {
return this.create('dc:Bounds', bounds);
};
BpmnFactory.prototype.createDiWaypoints = function(waypoints) {
return _.map(waypoints, function(pos) {
return this.createDiWaypoint(pos);
}, this);
};
BpmnFactory.prototype.createDiWaypoint = function(point) {
return this.create('dc:Point', point);
};
BpmnFactory.prototype.createDiEdge = function(semantic, waypoints, attrs) {
return this.create('bpmndi:BPMNEdge', _.extend({
bpmnElement: semantic
}, attrs));
};
module.exports = BpmnFactory;