2 var getBusinessObject = require('bpmn-js/lib/util/ModelUtil').getBusinessObject;
4 var elementHelper = require('bpmn-js-properties-panel/lib/helper/ElementHelper'),
5 extensionElementsHelper = require('bpmn-js-properties-panel/lib/helper/ExtensionElementsHelper'),
6 inputOutputHelper = require('./InputOutputHelper'),
7 cmdHelper = require('bpmn-js-properties-panel/lib/helper/CmdHelper');
9 var extensionElementsEntry = require('bpmn-js-properties-panel/lib/provider/camunda/parts/implementation//ExtensionElements');
11 function getInputOutput(element, insideConnector) {
12 return inputOutputHelper.getInputOutput(element, insideConnector);
15 function getConnector(element) {
16 return inputOutputHelper.getConnector(element);
19 function getInputParameters(element, insideConnector) {
20 return inputOutputHelper.getInputParameters(element, insideConnector);
23 function getOutputParameters(element, insideConnector) {
24 return inputOutputHelper.getOutputParameters(element, insideConnector);
27 function getInputParameter(element, insideConnector, idx) {
28 return inputOutputHelper.getInputParameter(element, insideConnector, idx);
31 function getOutputParameter(element, insideConnector, idx) {
32 return inputOutputHelper.getOutputParameter(element, insideConnector, idx);
35 function createElement(type, parent, factory, properties) {
36 const el = elementHelper.createElement(type, properties, parent, factory);
40 function createInputOutput(parent, bpmnFactory, properties) {
42 'camunda:InputOutput',
49 function createParameter(type, parent, bpmnFactory, properties) {
50 return createElement(type, parent, bpmnFactory, properties);
53 function ensureInputOutputSupported(element, insideConnector) {
54 return inputOutputHelper.isInputOutputSupported(element, insideConnector);
57 function ensureOutparameterSupported(element, insideConnector) {
58 return inputOutputHelper.areOutputParametersSupported(
64 module.exports = function(element, bpmnFactory, options, translate) {
66 'camunda:Map': translate('Map'),
67 'camunda:List': translate('List'),
68 'camunda:Script': translate('Script')
71 options = options || {};
73 var insideConnector = !!options.insideConnector,
74 idPrefix = options.idPrefix || '';
76 var getSelected = function(element, node) {
77 var selection = (inputEntry &&
78 inputEntry.getSelected(element, node)) || { idx: -1 };
80 var parameter = getInputParameter(
85 if (!parameter && outputEntry) {
86 selection = outputEntry.getSelected(element, node);
87 parameter = getOutputParameter(
97 getSelectedParameter: getSelected
100 var entries = (result.entries = []);
102 if (!ensureInputOutputSupported(element)) {
106 var newElement = function(type, prop, elementData) {
107 return function(element, extensionElements, value) {
110 var inputOutput = getInputOutput(element, insideConnector);
112 var parent = !insideConnector
114 : getConnector(element);
116 inputOutput = createInputOutput(parent, bpmnFactory, {
121 if (!insideConnector) {
123 cmdHelper.addAndRemoveElementsFromList(
134 cmdHelper.updateBusinessObject(element, parent, {
135 inputOutput: inputOutput
141 var newElem = elementData
142 ? createParameter(type, inputOutput, bpmnFactory, elementData)
143 : createParameter(type, inputOutput, bpmnFactory, {
147 console.log(newElem);
150 cmdHelper.addElementsTolist(element, inputOutput, prop, [
159 var removeElement = function(getter, prop, otherProp) {
160 return function(element, extensionElements, value, idx) {
161 var inputOutput = getInputOutput(element, insideConnector);
162 var parameter = getter(element, insideConnector, idx);
166 cmdHelper.removeElementsFromList(
175 var firstLength = inputOutput.get(prop).length - 1;
176 var secondLength = (inputOutput.get(otherProp) || []).length;
178 if (!firstLength && !secondLength) {
179 if (!insideConnector) {
181 extensionElementsHelper.removeEntry(
182 getBusinessObject(element),
188 var connector = getConnector(element);
190 cmdHelper.updateBusinessObject(element, connector, {
191 inputOutput: undefined
201 var setOptionLabelValue = function(getter) {
202 return function(element, node, option, property, value, idx) {
203 var parameter = getter(element, insideConnector, idx);
207 var definition = parameter.get('definition');
208 if (typeof definition !== 'undefined') {
209 var type = definition.$type;
210 suffix = TYPE_LABEL[type];
213 option.text = (value || '') + ' : ' + suffix;
217 // input parameters ///////////////////////////////////////////////////////////////
219 var inputEntry = extensionElementsEntry(element, bpmnFactory, {
220 id: idPrefix + 'inputs',
221 label: translate('Input Parameters'),
222 modelProperty: 'name',
226 createExtensionElement: inputOutputHelper.isCreateDeleteSupported(
229 ? newElement('camunda:InputParameter', 'inputParameters')
231 removeExtensionElement: inputOutputHelper.isCreateDeleteSupported(
241 getExtensionElements: function(element) {
242 return getInputParameters(element, insideConnector);
245 onSelectionChange: function(element, node) {
246 outputEntry && outputEntry.deselect(element, node);
249 setOptionLabelValue: setOptionLabelValue(getInputParameter)
251 entries.push(inputEntry);
253 // output parameters ///////////////////////////////////////////////////////
255 if (ensureOutparameterSupported(element, insideConnector)) {
256 var outputEntry = extensionElementsEntry(element, bpmnFactory, {
257 id: idPrefix + 'outputs',
258 label: translate('Output Parameters'),
259 modelProperty: 'name',
263 createExtensionElement: inputOutputHelper.isCreateDeleteSupported(
266 ? newElement('camunda:OutputParameter', 'outputParameters')
268 removeExtensionElement: inputOutputHelper.isCreateDeleteSupported(
276 : inputOutputHelper.isCreateDeleteSupported(element),
278 getExtensionElements: function(element) {
279 return getOutputParameters(element, insideConnector);
282 onSelectionChange: function(element, node) {
283 inputEntry.deselect(element, node);
286 setOptionLabelValue: setOptionLabelValue(getOutputParameter)
288 entries.push(outputEntry);