226 lines
6.9 KiB
JavaScript
226 lines
6.9 KiB
JavaScript
|
'use strict';
|
||
|
|
||
|
var getBusinessObject = require('bpmn-js/lib/util/ModelUtil').getBusinessObject;
|
||
|
|
||
|
var elementHelper = require('../../../../helper/ElementHelper'),
|
||
|
extensionElementsHelper = require('../../../../helper/ExtensionElementsHelper'),
|
||
|
inputOutputHelper = require('../../../../helper/InputOutputHelper'),
|
||
|
cmdHelper = require('../../../../helper/CmdHelper');
|
||
|
|
||
|
var extensionElementsEntry = require('./ExtensionElements');
|
||
|
|
||
|
|
||
|
function getInputOutput(element, insideConnector) {
|
||
|
return inputOutputHelper.getInputOutput(element, insideConnector);
|
||
|
}
|
||
|
|
||
|
function getConnector(element) {
|
||
|
return inputOutputHelper.getConnector(element);
|
||
|
}
|
||
|
|
||
|
function getInputParameters(element, insideConnector) {
|
||
|
return inputOutputHelper.getInputParameters(element, insideConnector);
|
||
|
}
|
||
|
|
||
|
function getOutputParameters(element, insideConnector) {
|
||
|
return inputOutputHelper.getOutputParameters(element, insideConnector);
|
||
|
}
|
||
|
|
||
|
function getInputParameter(element, insideConnector, idx) {
|
||
|
return inputOutputHelper.getInputParameter(element, insideConnector, idx);
|
||
|
}
|
||
|
|
||
|
function getOutputParameter(element, insideConnector, idx) {
|
||
|
return inputOutputHelper.getOutputParameter(element, insideConnector, idx);
|
||
|
}
|
||
|
|
||
|
|
||
|
function createElement(type, parent, factory, properties) {
|
||
|
return elementHelper.createElement(type, properties, parent, factory);
|
||
|
}
|
||
|
|
||
|
function createInputOutput(parent, bpmnFactory, properties) {
|
||
|
return createElement('activiti:InputOutput', parent, bpmnFactory, properties);
|
||
|
}
|
||
|
|
||
|
function createParameter(type, parent, bpmnFactory, properties) {
|
||
|
return createElement(type, parent, bpmnFactory, properties);
|
||
|
}
|
||
|
|
||
|
|
||
|
function ensureInputOutputSupported(element, insideConnector) {
|
||
|
return inputOutputHelper.isInputOutputSupported(element, insideConnector);
|
||
|
}
|
||
|
|
||
|
function ensureOutparameterSupported(element, insideConnector) {
|
||
|
return inputOutputHelper.areOutputParametersSupported(element, insideConnector);
|
||
|
}
|
||
|
|
||
|
module.exports = function(element, bpmnFactory, options, translate) {
|
||
|
|
||
|
var TYPE_LABEL = {
|
||
|
'activiti:Map': translate('Map'),
|
||
|
'activiti:List': translate('List'),
|
||
|
'activiti:Script': translate('Script')
|
||
|
};
|
||
|
|
||
|
options = options || {};
|
||
|
|
||
|
var insideConnector = !!options.insideConnector,
|
||
|
idPrefix = options.idPrefix || '';
|
||
|
|
||
|
var getSelected = function(element, node) {
|
||
|
var selection = (inputEntry && inputEntry.getSelected(element, node)) || { idx: -1 };
|
||
|
|
||
|
var parameter = getInputParameter(element, insideConnector, selection.idx);
|
||
|
if (!parameter && outputEntry) {
|
||
|
selection = outputEntry.getSelected(element, node);
|
||
|
parameter = getOutputParameter(element, insideConnector, selection.idx);
|
||
|
}
|
||
|
return parameter;
|
||
|
};
|
||
|
|
||
|
var result = {
|
||
|
getSelectedParameter: getSelected
|
||
|
};
|
||
|
|
||
|
var entries = result.entries = [];
|
||
|
|
||
|
if (!ensureInputOutputSupported(element)) {
|
||
|
return result;
|
||
|
}
|
||
|
|
||
|
var newElement = function(type, prop, factory) {
|
||
|
|
||
|
return function(element, extensionElements, value) {
|
||
|
var commands = [];
|
||
|
|
||
|
var inputOutput = getInputOutput(element, insideConnector);
|
||
|
if (!inputOutput) {
|
||
|
var parent = !insideConnector ? extensionElements : getConnector(element);
|
||
|
inputOutput = createInputOutput(parent, bpmnFactory, {
|
||
|
inputParameters: [],
|
||
|
outputParameters: []
|
||
|
});
|
||
|
|
||
|
if (!insideConnector) {
|
||
|
commands.push(cmdHelper.addAndRemoveElementsFromList(
|
||
|
element,
|
||
|
extensionElements,
|
||
|
'values',
|
||
|
'extensionElements',
|
||
|
[ inputOutput ],
|
||
|
[]
|
||
|
));
|
||
|
} else {
|
||
|
commands.push(cmdHelper.updateBusinessObject(element, parent, { inputOutput: inputOutput }));
|
||
|
}
|
||
|
}
|
||
|
|
||
|
var newElem = createParameter(type, inputOutput, bpmnFactory, { name: value });
|
||
|
commands.push(cmdHelper.addElementsTolist(element, inputOutput, prop, [ newElem ]));
|
||
|
|
||
|
return commands;
|
||
|
};
|
||
|
};
|
||
|
|
||
|
var removeElement = function(getter, prop, otherProp) {
|
||
|
return function(element, extensionElements, value, idx) {
|
||
|
var inputOutput = getInputOutput(element, insideConnector);
|
||
|
var parameter = getter(element, insideConnector, idx);
|
||
|
|
||
|
var commands = [];
|
||
|
commands.push(cmdHelper.removeElementsFromList(element, inputOutput, prop, null, [ parameter ]));
|
||
|
|
||
|
var firstLength = inputOutput.get(prop).length-1;
|
||
|
var secondLength = (inputOutput.get(otherProp) || []).length;
|
||
|
|
||
|
if (!firstLength && !secondLength) {
|
||
|
|
||
|
if (!insideConnector) {
|
||
|
commands.push(extensionElementsHelper.removeEntry(getBusinessObject(element), element, inputOutput));
|
||
|
} else {
|
||
|
var connector = getConnector(element);
|
||
|
commands.push(cmdHelper.updateBusinessObject(element, connector, { inputOutput: undefined }));
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
return commands;
|
||
|
};
|
||
|
};
|
||
|
|
||
|
var setOptionLabelValue = function(getter) {
|
||
|
return function(element, node, option, property, value, idx) {
|
||
|
var parameter = getter(element, insideConnector, idx);
|
||
|
|
||
|
var suffix = 'Text';
|
||
|
|
||
|
var definition = parameter.get('definition');
|
||
|
if (typeof definition !== 'undefined') {
|
||
|
var type = definition.$type;
|
||
|
suffix = TYPE_LABEL[type];
|
||
|
}
|
||
|
|
||
|
option.text = (value || '') + ' : ' + suffix;
|
||
|
};
|
||
|
};
|
||
|
|
||
|
|
||
|
// input parameters ///////////////////////////////////////////////////////////////
|
||
|
|
||
|
var inputEntry = extensionElementsEntry(element, bpmnFactory, {
|
||
|
id: idPrefix + 'inputs',
|
||
|
label: translate('Input Parameters'),
|
||
|
modelProperty: 'name',
|
||
|
prefix: 'Input',
|
||
|
resizable: true,
|
||
|
|
||
|
createExtensionElement: newElement('activiti:InputParameter', 'inputParameters'),
|
||
|
removeExtensionElement: removeElement(getInputParameter, 'inputParameters', 'outputParameters'),
|
||
|
|
||
|
getExtensionElements: function(element) {
|
||
|
return getInputParameters(element, insideConnector);
|
||
|
},
|
||
|
|
||
|
onSelectionChange: function(element, node, event, scope) {
|
||
|
outputEntry && outputEntry.deselect(element, node);
|
||
|
},
|
||
|
|
||
|
setOptionLabelValue: setOptionLabelValue(getInputParameter)
|
||
|
|
||
|
});
|
||
|
entries.push(inputEntry);
|
||
|
|
||
|
|
||
|
// output parameters ///////////////////////////////////////////////////////
|
||
|
|
||
|
if (ensureOutparameterSupported(element, insideConnector)) {
|
||
|
var outputEntry = extensionElementsEntry(element, bpmnFactory, {
|
||
|
id: idPrefix + 'outputs',
|
||
|
label: translate('Output Parameters'),
|
||
|
modelProperty: 'name',
|
||
|
prefix: 'Output',
|
||
|
resizable: true,
|
||
|
|
||
|
createExtensionElement: newElement('activiti:OutputParameter', 'outputParameters'),
|
||
|
removeExtensionElement: removeElement(getOutputParameter, 'outputParameters', 'inputParameters'),
|
||
|
|
||
|
getExtensionElements: function(element) {
|
||
|
return getOutputParameters(element, insideConnector);
|
||
|
},
|
||
|
|
||
|
onSelectionChange: function(element, node, event, scope) {
|
||
|
inputEntry.deselect(element, node);
|
||
|
},
|
||
|
|
||
|
setOptionLabelValue: setOptionLabelValue(getOutputParameter)
|
||
|
|
||
|
});
|
||
|
entries.push(outputEntry);
|
||
|
}
|
||
|
|
||
|
return result;
|
||
|
|
||
|
};
|