1 import inputOutputHelper from './InputOutputHelper';
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 cmdHelper = require('bpmn-js-properties-panel/lib/helper/CmdHelper');
8 var extensionElementsEntry = require('bpmn-js-properties-panel/lib/provider/camunda/parts/implementation//ExtensionElements');
10 function getInputOutput(element, insideConnector) {
11 return inputOutputHelper.getInputOutput(element, insideConnector);
14 function getConnector(element) {
15 return inputOutputHelper.getConnector(element);
18 function getInputParameters(element, insideConnector) {
19 return inputOutputHelper.getInputParameters(element, insideConnector);
22 function getOutputParameters(element, insideConnector) {
23 return inputOutputHelper.getOutputParameters(element, insideConnector);
26 function getInputParameter(element, insideConnector, idx) {
27 return inputOutputHelper.getInputParameter(element, insideConnector, idx);
30 function getOutputParameter(element, insideConnector, idx) {
31 return inputOutputHelper.getOutputParameter(element, insideConnector, idx);
34 function createElement(type, parent, factory, properties) {
35 const el = elementHelper.createElement(type, properties, parent, factory);
39 function createInputOutput(parent, bpmnFactory, properties) {
41 'camunda:InputOutput',
48 function createParameter(type, parent, bpmnFactory, properties) {
49 return createElement(type, parent, bpmnFactory, properties);
52 function ensureInputOutputSupported(element, insideConnector) {
53 return inputOutputHelper.isInputOutputSupported(element, insideConnector);
56 function ensureOutparameterSupported(element, insideConnector) {
57 return inputOutputHelper.areOutputParametersSupported(
63 export default function(element, bpmnFactory, options, translate) {
65 'camunda:Map': translate('Map'),
66 'camunda:List': translate('List'),
67 'camunda:Script': translate('Script')
70 options = options || {};
72 var insideConnector = !!options.insideConnector,
73 idPrefix = options.idPrefix || '';
75 var getSelected = function(element, node) {
76 var selection = (inputEntry &&
77 inputEntry.getSelected(element, node)) || { idx: -1 };
79 var parameter = getInputParameter(
84 if (!parameter && outputEntry) {
85 selection = outputEntry.getSelected(element, node);
86 parameter = getOutputParameter(
96 getSelectedParameter: getSelected
99 var entries = (result.entries = []);
101 if (!ensureInputOutputSupported(element)) {
105 var newElement = function(type, prop, elementData) {
106 return function(element, extensionElements, value) {
109 var inputOutput = getInputOutput(element, insideConnector);
111 var parent = !insideConnector
113 : getConnector(element);
115 inputOutput = createInputOutput(parent, bpmnFactory, {
120 if (!insideConnector) {
122 cmdHelper.addAndRemoveElementsFromList(
133 cmdHelper.updateBusinessObject(element, parent, {
134 inputOutput: inputOutput
140 var newElem = elementData
141 ? createParameter(type, inputOutput, bpmnFactory, elementData)
142 : createParameter(type, inputOutput, bpmnFactory, {
147 cmdHelper.addElementsTolist(element, inputOutput, prop, [
156 var removeElement = function(getter, prop, otherProp) {
157 return function(element, extensionElements, value, idx) {
158 var inputOutput = getInputOutput(element, insideConnector);
159 var parameter = getter(element, insideConnector, idx);
163 cmdHelper.removeElementsFromList(
172 var firstLength = inputOutput.get(prop).length - 1;
173 var secondLength = (inputOutput.get(otherProp) || []).length;
175 if (!firstLength && !secondLength) {
176 if (!insideConnector) {
178 extensionElementsHelper.removeEntry(
179 getBusinessObject(element),
185 var connector = getConnector(element);
187 cmdHelper.updateBusinessObject(element, connector, {
188 inputOutput: undefined
198 var setOptionLabelValue = function(getter) {
199 return function(element, node, option, property, value, idx) {
200 var parameter = getter(element, insideConnector, idx);
204 var definition = parameter.get('definition');
205 if (typeof definition !== 'undefined') {
206 var type = definition.$type;
207 suffix = TYPE_LABEL[type];
210 option.text = (value || '') + ' : ' + suffix;
214 // input parameters ///////////////////////////////////////////////////////////////
216 var inputEntry = extensionElementsEntry(element, bpmnFactory, {
217 id: idPrefix + 'inputs',
218 label: translate('Input Parameters'),
219 modelProperty: 'name',
223 createExtensionElement: inputOutputHelper.isCreateDeleteSupported(
226 ? newElement('camunda:InputParameter', 'inputParameters')
228 removeExtensionElement: inputOutputHelper.isCreateDeleteSupported(
238 getExtensionElements: function(element) {
239 return getInputParameters(element, insideConnector);
242 onSelectionChange: function(element, node) {
243 outputEntry && outputEntry.deselect(element, node);
246 setOptionLabelValue: setOptionLabelValue(getInputParameter)
248 entries.push(inputEntry);
250 // output parameters ///////////////////////////////////////////////////////
252 if (ensureOutparameterSupported(element, insideConnector)) {
253 var outputEntry = extensionElementsEntry(element, bpmnFactory, {
254 id: idPrefix + 'outputs',
255 label: translate('Output Parameters'),
256 modelProperty: 'name',
260 createExtensionElement: inputOutputHelper.isCreateDeleteSupported(
263 ? newElement('camunda:OutputParameter', 'outputParameters')
265 removeExtensionElement: inputOutputHelper.isCreateDeleteSupported(
273 : inputOutputHelper.isCreateDeleteSupported(element),
275 getExtensionElements: function(element) {
276 return getOutputParameters(element, insideConnector);
279 onSelectionChange: function(element, node) {
280 inputEntry.deselect(element, node);
283 setOptionLabelValue: setOptionLabelValue(getOutputParameter)
285 entries.push(outputEntry);