3 IMPLEMENTATION_TYPE_VALUE,
5 } from './implementationConstants';
6 var getBusinessObject = require('bpmn-js/lib/util/ModelUtil').getBusinessObject;
8 var elementHelper = require('bpmn-js-properties-panel/lib/helper/ElementHelper'),
9 extensionElementsHelper = require('bpmn-js-properties-panel/lib/helper/ExtensionElementsHelper'),
10 inputOutputHelper = require('./InputOutputHelper'),
11 cmdHelper = require('bpmn-js-properties-panel/lib/helper/CmdHelper');
13 var extensionElementsEntry = require('bpmn-js-properties-panel/lib/provider/camunda/parts/implementation//ExtensionElements');
15 function isCreateDeleteSupported(element) {
16 const bo = getBusinessObject(element);
18 (element.type !== 'bpmn:ServiceTask' ||
19 bo[implementationType.ACTIVITY] !== IMPLEMENTATION_TYPE_VALUE) &&
20 element.type !== 'bpmn:Process'
24 function getInputOutput(element, insideConnector) {
25 return inputOutputHelper.getInputOutput(element, insideConnector);
28 function getConnector(element) {
29 return inputOutputHelper.getConnector(element);
32 function getInputParameters(element, insideConnector) {
33 return inputOutputHelper.getInputParameters(element, insideConnector);
36 function getOutputParameters(element, insideConnector) {
37 return inputOutputHelper.getOutputParameters(element, insideConnector);
40 function getInputParameter(element, insideConnector, idx) {
41 return inputOutputHelper.getInputParameter(element, insideConnector, idx);
44 function getOutputParameter(element, insideConnector, idx) {
45 return inputOutputHelper.getOutputParameter(element, insideConnector, idx);
48 function createElement(type, parent, factory, properties) {
49 const el = elementHelper.createElement(type, properties, parent, factory);
53 function createInputOutput(parent, bpmnFactory, properties) {
55 'camunda:InputOutput',
62 function createParameter(type, parent, bpmnFactory, properties) {
63 return createElement(type, parent, bpmnFactory, properties);
66 function ensureInputOutputSupported(element, insideConnector) {
67 return inputOutputHelper.isInputOutputSupported(element, insideConnector);
70 function ensureOutparameterSupported(element, insideConnector) {
71 return inputOutputHelper.areOutputParametersSupported(
77 module.exports = function(element, bpmnFactory, options, translate) {
79 'camunda:Map': translate('Map'),
80 'camunda:List': translate('List'),
81 'camunda:Script': translate('Script')
84 options = options || {};
86 var insideConnector = !!options.insideConnector,
87 idPrefix = options.idPrefix || '';
89 var getSelected = function(element, node) {
90 var selection = (inputEntry &&
91 inputEntry.getSelected(element, node)) || { idx: -1 };
93 var parameter = getInputParameter(
98 if (!parameter && outputEntry) {
99 selection = outputEntry.getSelected(element, node);
100 parameter = getOutputParameter(
110 getSelectedParameter: getSelected
113 var entries = (result.entries = []);
115 if (!ensureInputOutputSupported(element)) {
119 var newElement = function(type, prop, elementData) {
120 return function(element, extensionElements, value) {
123 var inputOutput = getInputOutput(element, insideConnector);
125 var parent = !insideConnector
127 : getConnector(element);
129 inputOutput = createInputOutput(parent, bpmnFactory, {
134 if (!insideConnector) {
136 cmdHelper.addAndRemoveElementsFromList(
147 cmdHelper.updateBusinessObject(element, parent, {
148 inputOutput: inputOutput
154 var newElem = elementData
155 ? createParameter(type, inputOutput, bpmnFactory, elementData)
156 : createParameter(type, inputOutput, bpmnFactory, {
160 console.log(newElem);
163 cmdHelper.addElementsTolist(element, inputOutput, prop, [
172 var removeElement = function(getter, prop, otherProp) {
173 return function(element, extensionElements, value, idx) {
174 var inputOutput = getInputOutput(element, insideConnector);
175 var parameter = getter(element, insideConnector, idx);
179 cmdHelper.removeElementsFromList(
188 var firstLength = inputOutput.get(prop).length - 1;
189 var secondLength = (inputOutput.get(otherProp) || []).length;
191 if (!firstLength && !secondLength) {
192 if (!insideConnector) {
194 extensionElementsHelper.removeEntry(
195 getBusinessObject(element),
201 var connector = getConnector(element);
203 cmdHelper.updateBusinessObject(element, connector, {
204 inputOutput: undefined
214 var setOptionLabelValue = function(getter) {
215 return function(element, node, option, property, value, idx) {
216 var parameter = getter(element, insideConnector, idx);
220 var definition = parameter.get('definition');
221 if (typeof definition !== 'undefined') {
222 var type = definition.$type;
223 suffix = TYPE_LABEL[type];
226 option.text = (value || '') + ' : ' + suffix;
230 // input parameters ///////////////////////////////////////////////////////////////
232 var inputEntry = extensionElementsEntry(element, bpmnFactory, {
233 id: idPrefix + 'inputs',
234 label: translate('Input Parameters'),
235 modelProperty: 'name',
239 createExtensionElement: isCreateDeleteSupported(element)
240 ? newElement('camunda:InputParameter', 'inputParameters')
242 removeExtensionElement: isCreateDeleteSupported(element)
250 getExtensionElements: function(element) {
251 return getInputParameters(element, insideConnector);
254 onSelectionChange: function(element, node) {
255 outputEntry && outputEntry.deselect(element, node);
258 setOptionLabelValue: setOptionLabelValue(getInputParameter)
260 entries.push(inputEntry);
262 // output parameters ///////////////////////////////////////////////////////
264 if (ensureOutparameterSupported(element, insideConnector)) {
265 var outputEntry = extensionElementsEntry(element, bpmnFactory, {
266 id: idPrefix + 'outputs',
267 label: translate('Output Parameters'),
268 modelProperty: 'name',
272 createExtensionElement: isCreateDeleteSupported(element)
273 ? newElement('camunda:OutputParameter', 'outputParameters')
275 removeExtensionElement: isCreateDeleteSupported(element)
281 : isCreateDeleteSupported(element),
283 getExtensionElements: function(element) {
284 return getOutputParameters(element, insideConnector);
287 onSelectionChange: function(element, node) {
288 inputEntry.deselect(element, node);
291 setOptionLabelValue: setOptionLabelValue(getOutputParameter)
293 entries.push(outputEntry);