131 lines
3.5 KiB
JavaScript
131 lines
3.5 KiB
JavaScript
|
'use strict';
|
||
|
|
||
|
var assign = require('lodash/assign');
|
||
|
|
||
|
var entryFactory = require('../../../../factory/EntryFactory');
|
||
|
|
||
|
var asyncCapableHelper = require('../../../../helper/AsyncCapableHelper'),
|
||
|
eventDefinitionHelper = require('../../../../helper/EventDefinitionHelper'),
|
||
|
cmdHelper = require('../../../../helper/CmdHelper');
|
||
|
|
||
|
function isAsyncBefore(bo) {
|
||
|
return asyncCapableHelper.isAsyncBefore(bo);
|
||
|
}
|
||
|
|
||
|
function isAsyncAfter(bo) {
|
||
|
return asyncCapableHelper.isAsyncAfter(bo);
|
||
|
}
|
||
|
|
||
|
function isExclusive(bo) {
|
||
|
return asyncCapableHelper.isExclusive(bo);
|
||
|
}
|
||
|
|
||
|
function removeFailedJobRetryTimeCycle(bo, element) {
|
||
|
return asyncCapableHelper.removeFailedJobRetryTimeCycle(bo, element);
|
||
|
}
|
||
|
|
||
|
function canRemoveFailedJobRetryTimeCycle(element) {
|
||
|
return !eventDefinitionHelper.getTimerEventDefinition(element);
|
||
|
}
|
||
|
|
||
|
module.exports = function(element, bpmnFactory, options, translate) {
|
||
|
|
||
|
var getBusinessObject = options.getBusinessObject;
|
||
|
|
||
|
var idPrefix = options.idPrefix || '',
|
||
|
labelPrefix = options.labelPrefix || '';
|
||
|
|
||
|
|
||
|
var asyncBeforeEntry = entryFactory.checkbox({
|
||
|
id: idPrefix + 'asyncBefore',
|
||
|
label: labelPrefix + translate('Asynchronous Before'),
|
||
|
modelProperty: 'asyncBefore',
|
||
|
|
||
|
get: function(element, node) {
|
||
|
var bo = getBusinessObject(element);
|
||
|
return {
|
||
|
asyncBefore: isAsyncBefore(bo)
|
||
|
};
|
||
|
},
|
||
|
|
||
|
set: function(element, values) {
|
||
|
var bo = getBusinessObject(element);
|
||
|
var asyncBefore = !!values.asyncBefore;
|
||
|
|
||
|
var props = {
|
||
|
'activiti:asyncBefore': asyncBefore,
|
||
|
'activiti:async': false
|
||
|
};
|
||
|
|
||
|
var commands = [];
|
||
|
if (!isAsyncAfter(bo) && !asyncBefore) {
|
||
|
props = assign({ 'activiti:exclusive' : true }, props);
|
||
|
if (canRemoveFailedJobRetryTimeCycle(element)) {
|
||
|
commands.push(removeFailedJobRetryTimeCycle(bo, element));
|
||
|
}
|
||
|
}
|
||
|
|
||
|
commands.push(cmdHelper.updateBusinessObject(element, bo, props));
|
||
|
return commands;
|
||
|
}
|
||
|
});
|
||
|
|
||
|
|
||
|
var asyncAfterEntry = entryFactory.checkbox({
|
||
|
id: idPrefix + 'asyncAfter',
|
||
|
label: labelPrefix + translate('Asynchronous After'),
|
||
|
modelProperty: 'asyncAfter',
|
||
|
|
||
|
get: function(element, node) {
|
||
|
var bo = getBusinessObject(element);
|
||
|
return {
|
||
|
asyncAfter: isAsyncAfter(bo)
|
||
|
};
|
||
|
},
|
||
|
|
||
|
set: function(element, values) {
|
||
|
var bo = getBusinessObject(element);
|
||
|
var asyncAfter = !!values.asyncAfter;
|
||
|
|
||
|
var props = {
|
||
|
'activiti:asyncAfter': asyncAfter
|
||
|
};
|
||
|
|
||
|
var commands = [];
|
||
|
if (!isAsyncBefore(bo) && !asyncAfter) {
|
||
|
props = assign({ 'activiti:exclusive' : true }, props);
|
||
|
if (canRemoveFailedJobRetryTimeCycle(element)) {
|
||
|
commands.push(removeFailedJobRetryTimeCycle(bo, element));
|
||
|
}
|
||
|
}
|
||
|
|
||
|
commands.push(cmdHelper.updateBusinessObject(element, bo, props));
|
||
|
return commands;
|
||
|
}
|
||
|
});
|
||
|
|
||
|
|
||
|
var exclusiveEntry = entryFactory.checkbox({
|
||
|
id: idPrefix + 'exclusive',
|
||
|
label: labelPrefix + translate('Exclusive'),
|
||
|
modelProperty: 'exclusive',
|
||
|
|
||
|
get: function(element, node) {
|
||
|
var bo = getBusinessObject(element);
|
||
|
return { exclusive: isExclusive(bo) };
|
||
|
},
|
||
|
|
||
|
set: function(element, values) {
|
||
|
var bo = getBusinessObject(element);
|
||
|
return cmdHelper.updateBusinessObject(element, bo, { 'activiti:exclusive': !!values.exclusive });
|
||
|
},
|
||
|
|
||
|
hidden: function(element) {
|
||
|
var bo = getBusinessObject(element);
|
||
|
return bo && !isAsyncAfter(bo) && !isAsyncBefore(bo);
|
||
|
}
|
||
|
});
|
||
|
|
||
|
return [ asyncBeforeEntry, asyncAfterEntry, exclusiveEntry ];
|
||
|
};
|