bpm-engine
Version:
Business Process Management Engine for JavaScript
91 lines (72 loc) • 8.49 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
var _asyncToGenerator2 = require('babel-runtime/helpers/asyncToGenerator');
var _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);
var _Gateway = require('./Gateway');
var _Gateway2 = _interopRequireDefault(_Gateway);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
class ParallelGateway extends _Gateway2.default {
constructor(...args) {
var _temp, _this;
return _temp = _this = super(...args), this.makeReady = (0, _asyncToGenerator3.default)(function* () {
yield _this.callPlugins('onReady');
const incoming = _this.definition.incoming;
// converging
if (incoming.length > 1) {
// did any other waiting token arrive here yet?
const anyOtherToken = yield _this.persist.tokenInstance.find({
processId: _this.tokenInstance.processId,
status: 'paused',
currentActivity: _this.definition.id
});
// no other active tokens have arrived here yet,
// so use this token as the first which arrived
if (!anyOtherToken) {
const pending = incoming.map(function (el) {
return el.id;
});
const index = pending.indexOf(_this.tokenInstance.lastActivity);
if (index !== -1) {
pending.splice(index, 1);
}
yield _this.persist.tokenInstance.update({
tokenId: _this.tokenInstance.tokenId
}, {
$set: {
currentActivity: _this.definition.id,
status: 'paused',
pending
}
});
_this.tokenInstance.status = 'paused';
} else {
// else if (anyOtherToken.pending.length === 0) {
// this.tokenInstance.status = 'paused';
// }
const updatedOtherToken = yield _this.persist.tokenInstance.update({
tokenId: anyOtherToken.tokenId
}, {
$pull: {
pending: _this.tokenInstance.lastActivity
}
});
if (updatedOtherToken.pending.length > 0) {
_this.tokenInstance.status = 'paused';
}
}
}
}), this.makeComplete = (0, _asyncToGenerator3.default)(function* () {
yield _this.callPlugins('onComplete');
const outgoing = _this.definition.outgoing;
if (outgoing.length > 1) {
const childTokenInstances = yield _this.instantiateChildTokenInstances(outgoing);
_this.tokenInstance.status = 'paused';
yield _this.processChilds(childTokenInstances);
}
}), _temp;
}
}
exports.default = ParallelGateway;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvRWxlbWVudHMvUGFyYWxsZWxHYXRld2F5LmpzIl0sIm5hbWVzIjpbIlBhcmFsbGVsR2F0ZXdheSIsIkdhdGV3YXkiLCJtYWtlUmVhZHkiLCJjYWxsUGx1Z2lucyIsImluY29taW5nIiwiZGVmaW5pdGlvbiIsImxlbmd0aCIsImFueU90aGVyVG9rZW4iLCJwZXJzaXN0IiwidG9rZW5JbnN0YW5jZSIsImZpbmQiLCJwcm9jZXNzSWQiLCJzdGF0dXMiLCJjdXJyZW50QWN0aXZpdHkiLCJpZCIsInBlbmRpbmciLCJtYXAiLCJlbCIsImluZGV4IiwiaW5kZXhPZiIsImxhc3RBY3Rpdml0eSIsInNwbGljZSIsInVwZGF0ZSIsInRva2VuSWQiLCIkc2V0IiwidXBkYXRlZE90aGVyVG9rZW4iLCIkcHVsbCIsIm1ha2VDb21wbGV0ZSIsIm91dGdvaW5nIiwiY2hpbGRUb2tlbkluc3RhbmNlcyIsImluc3RhbnRpYXRlQ2hpbGRUb2tlbkluc3RhbmNlcyIsInByb2Nlc3NDaGlsZHMiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFBQTs7Ozs7O0FBRWUsTUFBTUEsZUFBTixTQUE4QkMsaUJBQTlCLENBQXNDO0FBQUE7QUFBQTs7QUFBQSxnREFDbkRDLFNBRG1ELG1DQUN2QyxhQUFZO0FBQ3RCLFlBQU0sTUFBS0MsV0FBTCxDQUFpQixTQUFqQixDQUFOOztBQURzQixZQUdkQyxRQUhjLEdBR0QsTUFBS0MsVUFISixDQUdkRCxRQUhjOztBQUt0Qjs7QUFDQSxVQUFJQSxTQUFTRSxNQUFULEdBQWtCLENBQXRCLEVBQXlCO0FBQ3ZCO0FBQ0EsY0FBTUMsZ0JBQWdCLE1BQU0sTUFBS0MsT0FBTCxDQUFhQyxhQUFiLENBQTJCQyxJQUEzQixDQUFnQztBQUMxREMscUJBQVcsTUFBS0YsYUFBTCxDQUFtQkUsU0FENEI7QUFFMURDLGtCQUFRLFFBRmtEO0FBRzFEQywyQkFBaUIsTUFBS1IsVUFBTCxDQUFnQlM7QUFIeUIsU0FBaEMsQ0FBNUI7O0FBTUE7QUFDQTtBQUNBLFlBQUksQ0FBQ1AsYUFBTCxFQUFvQjtBQUNsQixnQkFBTVEsVUFBVVgsU0FBU1ksR0FBVCxDQUFhO0FBQUEsbUJBQU1DLEdBQUdILEVBQVQ7QUFBQSxXQUFiLENBQWhCO0FBQ0EsZ0JBQU1JLFFBQVFILFFBQVFJLE9BQVIsQ0FBZ0IsTUFBS1YsYUFBTCxDQUFtQlcsWUFBbkMsQ0FBZDs7QUFFQSxjQUFJRixVQUFVLENBQUMsQ0FBZixFQUFrQjtBQUNoQkgsb0JBQVFNLE1BQVIsQ0FBZUgsS0FBZixFQUFzQixDQUF0QjtBQUNEOztBQUVELGdCQUFNLE1BQUtWLE9BQUwsQ0FBYUMsYUFBYixDQUEyQmEsTUFBM0IsQ0FDSjtBQUNFQyxxQkFBUyxNQUFLZCxhQUFMLENBQW1CYztBQUQ5QixXQURJLEVBSUo7QUFDRUMsa0JBQU07QUFDSlgsK0JBQWlCLE1BQUtSLFVBQUwsQ0FBZ0JTLEVBRDdCO0FBRUpGLHNCQUFRLFFBRko7QUFHSkc7QUFISTtBQURSLFdBSkksQ0FBTjtBQVlBLGdCQUFLTixhQUFMLENBQW1CRyxNQUFuQixHQUE0QixRQUE1QjtBQUNELFNBckJELE1Bc0JLO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsZ0JBQU1hLG9CQUFvQixNQUFNLE1BQUtqQixPQUFMLENBQWFDLGFBQWIsQ0FBMkJhLE1BQTNCLENBQzlCO0FBQ0VDLHFCQUFTaEIsY0FBY2dCO0FBRHpCLFdBRDhCLEVBSTlCO0FBQ0VHLG1CQUFPO0FBQ0xYLHVCQUFTLE1BQUtOLGFBQUwsQ0FBbUJXO0FBRHZCO0FBRFQsV0FKOEIsQ0FBaEM7O0FBV0EsY0FBSUssa0JBQWtCVixPQUFsQixDQUEwQlQsTUFBMUIsR0FBbUMsQ0FBdkMsRUFBMEM7QUFDeEMsa0JBQUtHLGFBQUwsQ0FBbUJHLE1BQW5CLEdBQTRCLFFBQTVCO0FBQ0Q7QUFDRjtBQUNGO0FBQ0YsS0EzRGtELFFBNkRuRGUsWUE3RG1ELG1DQTZEcEMsYUFBWTtBQUN6QixZQUFNLE1BQUt4QixXQUFMLENBQWlCLFlBQWpCLENBQU47O0FBRHlCLFlBR2pCeUIsUUFIaUIsR0FHSixNQUFLdkIsVUFIRCxDQUdqQnVCLFFBSGlCOzs7QUFLekIsVUFBSUEsU0FBU3RCLE1BQVQsR0FBa0IsQ0FBdEIsRUFBeUI7QUFDdkIsY0FBTXVCLHNCQUFzQixNQUFNLE1BQUtDLDhCQUFMLENBQW9DRixRQUFwQyxDQUFsQztBQUNBLGNBQUtuQixhQUFMLENBQW1CRyxNQUFuQixHQUE0QixRQUE1QjtBQUNBLGNBQU0sTUFBS21CLGFBQUwsQ0FBbUJGLG1CQUFuQixDQUFOO0FBQ0Q7QUFDRixLQXZFa0Q7QUFBQTs7QUFBQTtrQkFBaEM3QixlIiwiZmlsZSI6IlBhcmFsbGVsR2F0ZXdheS5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBHYXRld2F5IGZyb20gJ2xpYi9FbGVtZW50cy9HYXRld2F5JztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUGFyYWxsZWxHYXRld2F5IGV4dGVuZHMgR2F0ZXdheSB7XG4gIG1ha2VSZWFkeSA9IGFzeW5jICgpID0+IHtcbiAgICBhd2FpdCB0aGlzLmNhbGxQbHVnaW5zKCdvblJlYWR5Jyk7XG5cbiAgICBjb25zdCB7IGluY29taW5nIH0gPSB0aGlzLmRlZmluaXRpb247XG5cbiAgICAvLyBjb252ZXJnaW5nXG4gICAgaWYgKGluY29taW5nLmxlbmd0aCA+IDEpIHtcbiAgICAgIC8vIGRpZCBhbnkgb3RoZXIgd2FpdGluZyB0b2tlbiBhcnJpdmUgaGVyZSB5ZXQ/XG4gICAgICBjb25zdCBhbnlPdGhlclRva2VuID0gYXdhaXQgdGhpcy5wZXJzaXN0LnRva2VuSW5zdGFuY2UuZmluZCh7XG4gICAgICAgIHByb2Nlc3NJZDogdGhpcy50b2tlbkluc3RhbmNlLnByb2Nlc3NJZCxcbiAgICAgICAgc3RhdHVzOiAncGF1c2VkJyxcbiAgICAgICAgY3VycmVudEFjdGl2aXR5OiB0aGlzLmRlZmluaXRpb24uaWQsXG4gICAgICB9KTtcblxuICAgICAgLy8gbm8gb3RoZXIgYWN0aXZlIHRva2VucyBoYXZlIGFycml2ZWQgaGVyZSB5ZXQsXG4gICAgICAvLyBzbyB1c2UgdGhpcyB0b2tlbiBhcyB0aGUgZmlyc3Qgd2hpY2ggYXJyaXZlZFxuICAgICAgaWYgKCFhbnlPdGhlclRva2VuKSB7XG4gICAgICAgIGNvbnN0IHBlbmRpbmcgPSBpbmNvbWluZy5tYXAoZWwgPT4gZWwuaWQpO1xuICAgICAgICBjb25zdCBpbmRleCA9IHBlbmRpbmcuaW5kZXhPZih0aGlzLnRva2VuSW5zdGFuY2UubGFzdEFjdGl2aXR5KTtcblxuICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgcGVuZGluZy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICB9XG5cbiAgICAgICAgYXdhaXQgdGhpcy5wZXJzaXN0LnRva2VuSW5zdGFuY2UudXBkYXRlKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHRva2VuSWQ6IHRoaXMudG9rZW5JbnN0YW5jZS50b2tlbklkLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgJHNldDoge1xuICAgICAgICAgICAgICBjdXJyZW50QWN0aXZpdHk6IHRoaXMuZGVmaW5pdGlvbi5pZCxcbiAgICAgICAgICAgICAgc3RhdHVzOiAncGF1c2VkJyxcbiAgICAgICAgICAgICAgcGVuZGluZyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy50b2tlbkluc3RhbmNlLnN0YXR1cyA9ICdwYXVzZWQnO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIC8vIGVsc2UgaWYgKGFueU90aGVyVG9rZW4ucGVuZGluZy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgLy8gICB0aGlzLnRva2VuSW5zdGFuY2Uuc3RhdHVzID0gJ3BhdXNlZCc7XG4gICAgICAgIC8vIH1cbiAgICAgICAgY29uc3QgdXBkYXRlZE90aGVyVG9rZW4gPSBhd2FpdCB0aGlzLnBlcnNpc3QudG9rZW5JbnN0YW5jZS51cGRhdGUoXG4gICAgICAgICAge1xuICAgICAgICAgICAgdG9rZW5JZDogYW55T3RoZXJUb2tlbi50b2tlbklkLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgJHB1bGw6IHtcbiAgICAgICAgICAgICAgcGVuZGluZzogdGhpcy50b2tlbkluc3RhbmNlLmxhc3RBY3Rpdml0eSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgKTtcblxuICAgICAgICBpZiAodXBkYXRlZE90aGVyVG9rZW4ucGVuZGluZy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgdGhpcy50b2tlbkluc3RhbmNlLnN0YXR1cyA9ICdwYXVzZWQnO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIG1ha2VDb21wbGV0ZSA9IGFzeW5jICgpID0+IHtcbiAgICBhd2FpdCB0aGlzLmNhbGxQbHVnaW5zKCdvbkNvbXBsZXRlJyk7XG5cbiAgICBjb25zdCB7IG91dGdvaW5nIH0gPSB0aGlzLmRlZmluaXRpb247XG5cbiAgICBpZiAob3V0Z29pbmcubGVuZ3RoID4gMSkge1xuICAgICAgY29uc3QgY2hpbGRUb2tlbkluc3RhbmNlcyA9IGF3YWl0IHRoaXMuaW5zdGFudGlhdGVDaGlsZFRva2VuSW5zdGFuY2VzKG91dGdvaW5nKTtcbiAgICAgIHRoaXMudG9rZW5JbnN0YW5jZS5zdGF0dXMgPSAncGF1c2VkJztcbiAgICAgIGF3YWl0IHRoaXMucHJvY2Vzc0NoaWxkcyhjaGlsZFRva2VuSW5zdGFuY2VzKTtcbiAgICB9XG4gIH07XG59XG4iXX0=