123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225 |
- '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;
- };
|