3 var ModelUtil = require('bpmn-js/lib/util/ModelUtil'),
5 getBusinessObject = ModelUtil.getBusinessObject;
7 var extensionElementsHelper = require('bpmn-js-properties-panel/lib/helper/ExtensionElementsHelper'),
8 implementationTypeHelper = require('bpmn-js-properties-panel/lib/helper/ImplementationTypeHelper');
10 IMPLEMENTATION_TYPE_VALUE,
12 } from './implementationConstants';
14 var InputOutputHelper = {};
16 module.exports = InputOutputHelper;
18 function getElements(bo, type, prop) {
19 var elems = extensionElementsHelper.getExtensionElements(bo, type) || [];
20 return !prop ? elems : (elems[0] || {})[prop] || [];
23 function getParameters(element, prop, insideConnector) {
24 var inputOutput = InputOutputHelper.getInputOutput(
28 return (inputOutput && inputOutput.get(prop)) || [];
32 * Get a inputOutput from the business object
34 * @param {djs.model.Base} element
35 * @param {boolean} insideConnector
37 * @return {ModdleElement} the inputOutput object
39 InputOutputHelper.getInputOutput = function(element, insideConnector) {
40 if (!insideConnector) {
41 var bo = getBusinessObject(element);
42 return (getElements(bo, 'camunda:InputOutput') || [])[0];
44 var connector = this.getConnector(element);
46 return connector && connector.get('inputOutput');
50 * Get a connector from the business object
52 * @param {djs.model.Base} element
54 * @return {ModdleElement} the connector object
56 InputOutputHelper.getConnector = function(element) {
57 var bo = implementationTypeHelper.getServiceTaskLikeBusinessObject(element);
58 return bo && (getElements(bo, 'camunda:Connector') || [])[0];
62 * Return all input parameters existing in the business object, and
63 * an empty array if none exist.
65 * @param {djs.model.Base} element
66 * @param {boolean} insideConnector
68 * @return {Array} a list of input parameter objects
70 InputOutputHelper.getInputParameters = function(element, insideConnector) {
71 return getParameters.apply(this, [
79 * Return all output parameters existing in the business object, and
80 * an empty array if none exist.
82 * @param {djs.model.Base} element
83 * @param {boolean} insideConnector
85 * @return {Array} a list of output parameter objects
87 InputOutputHelper.getOutputParameters = function(element, insideConnector) {
88 return getParameters.apply(this, [
96 * Get a input parameter from the business object at given index
98 * @param {djs.model.Base} element
99 * @param {boolean} insideConnector
100 * @param {number} idx
102 * @return {ModdleElement} input parameter
104 InputOutputHelper.getInputParameter = function(element, insideConnector, idx) {
105 return this.getInputParameters(element, insideConnector)[idx];
109 * Get a output parameter from the business object at given index
111 * @param {djs.model.Base} element
112 * @param {boolean} insideConnector
113 * @param {number} idx
115 * @return {ModdleElement} output parameter
117 InputOutputHelper.getOutputParameter = function(element, insideConnector, idx) {
118 return this.getOutputParameters(element, insideConnector)[idx];
122 * Returns 'true' if the given element supports inputOutput
124 * @param {djs.model.Base} element
125 * @param {boolean} insideConnector
127 * @return {boolean} a boolean value
129 InputOutputHelper.isInputOutputSupported = function(element, insideConnector) {
130 var bo = getBusinessObject(element);
133 is(bo, 'bpmn:Process') ||
134 (is(bo, 'bpmn:FlowNode') &&
135 !is(bo, 'bpmn:StartEvent') &&
136 !is(bo, 'bpmn:BoundaryEvent') &&
137 !(is(bo, 'bpmn:SubProcess') && bo.get('triggeredByEvent')))
142 * Returns 'true' if the given element supports output parameters
144 * @param {djs.model.Base} element
145 * @param {boolean} insideConnector
147 * @return {boolean} a boolean value
149 InputOutputHelper.areOutputParametersSupported = function(
153 var bo = getBusinessObject(element);
155 insideConnector || (!is(bo, 'bpmn:EndEvent') && !bo.loopCharacteristics)
159 InputOutputHelper.isCreateDeleteSupported = function(element) {
160 const bo = getBusinessObject(element);
162 (element.type !== 'bpmn:ServiceTask' ||
163 bo[implementationType.ACTIVITY] !== IMPLEMENTATION_TYPE_VALUE) &&
164 element.type !== 'bpmn:Process'