1 var ModelUtil = require('bpmn-js/lib/util/ModelUtil'),
3 getBusinessObject = ModelUtil.getBusinessObject;
5 var extensionElementsHelper = require('bpmn-js-properties-panel/lib/helper/ExtensionElementsHelper'),
6 implementationTypeHelper = require('bpmn-js-properties-panel/lib/helper/ImplementationTypeHelper');
7 import { implementationType } from './implementationConstants';
9 var InputOutputHelper = {};
11 function getElements(bo, type, prop) {
12 var elems = extensionElementsHelper.getExtensionElements(bo, type) || [];
13 return !prop ? elems : (elems[0] || {})[prop] || [];
16 function getParameters(element, prop, insideConnector) {
17 var inputOutput = InputOutputHelper.getInputOutput(
21 return (inputOutput && inputOutput.get(prop)) || [];
25 * Get a inputOutput from the business object
27 * @param {djs.model.Base} element
28 * @param {boolean} insideConnector
30 * @return {ModdleElement} the inputOutput object
32 InputOutputHelper.getInputOutput = function(element, insideConnector) {
33 if (!insideConnector) {
34 var bo = getBusinessObject(element);
35 return (getElements(bo, 'camunda:InputOutput') || [])[0];
37 var connector = this.getConnector(element);
39 return connector && connector.get('inputOutput');
43 * Get a connector from the business object
45 * @param {djs.model.Base} element
47 * @return {ModdleElement} the connector object
49 InputOutputHelper.getConnector = function(element) {
50 var bo = implementationTypeHelper.getServiceTaskLikeBusinessObject(element);
51 return bo && (getElements(bo, 'camunda:Connector') || [])[0];
55 * Return all input parameters existing in the business object, and
56 * an empty array if none exist.
58 * @param {djs.model.Base} element
59 * @param {boolean} insideConnector
61 * @return {Array} a list of input parameter objects
63 InputOutputHelper.getInputParameters = function(element, insideConnector) {
64 return getParameters.apply(this, [
72 * Return all output parameters existing in the business object, and
73 * an empty array if none exist.
75 * @param {djs.model.Base} element
76 * @param {boolean} insideConnector
78 * @return {Array} a list of output parameter objects
80 InputOutputHelper.getOutputParameters = function(element, insideConnector) {
81 return getParameters.apply(this, [
89 * Get a input parameter from the business object at given index
91 * @param {djs.model.Base} element
92 * @param {boolean} insideConnector
95 * @return {ModdleElement} input parameter
97 InputOutputHelper.getInputParameter = function(element, insideConnector, idx) {
98 return this.getInputParameters(element, insideConnector)[idx];
102 * Get a output parameter from the business object at given index
104 * @param {djs.model.Base} element
105 * @param {boolean} insideConnector
106 * @param {number} idx
108 * @return {ModdleElement} output parameter
110 InputOutputHelper.getOutputParameter = function(element, insideConnector, idx) {
111 return this.getOutputParameters(element, insideConnector)[idx];
115 * Returns 'true' if the given element supports inputOutput
117 * @param {djs.model.Base} element
118 * @param {boolean} insideConnector
120 * @return {boolean} a boolean value
122 InputOutputHelper.isInputOutputSupported = function(element, insideConnector) {
123 var bo = getBusinessObject(element);
126 is(bo, 'bpmn:Process') ||
127 (is(bo, 'bpmn:FlowNode') &&
128 !is(bo, 'bpmn:StartEvent') &&
129 !is(bo, 'bpmn:BoundaryEvent') &&
130 !(is(bo, 'bpmn:SubProcess') && bo.get('triggeredByEvent')))
135 * Returns 'true' if the given element supports output parameters
137 * @param {djs.model.Base} element
138 * @param {boolean} insideConnector
140 * @return {boolean} a boolean value
142 InputOutputHelper.areOutputParametersSupported = function(
146 var bo = getBusinessObject(element);
148 insideConnector || (!is(bo, 'bpmn:EndEvent') && !bo.loopCharacteristics)
152 InputOutputHelper.isCreateDeleteSupported = function(element) {
153 const bo = getBusinessObject(element);
155 (element.type !== 'bpmn:ServiceTask' ||
156 !bo[implementationType.ACTIVITY]) &&
157 element.type !== 'bpmn:Process'
161 InputOutputHelper.isWorkflowTargetSupported = function(element, selected) {
162 const bo = getBusinessObject(element);
164 is(bo, 'bpmn:ServiceTask') && is(selected, 'camunda:OutputParameter')
168 InputOutputHelper.isWorkflowSourceSupported = function(element, selected) {
169 const bo = getBusinessObject(element);
170 return is(bo, 'bpmn:ServiceTask') && is(selected, 'camunda:InputParameter');
173 export default InputOutputHelper;