Migrate sdc-sdc-workflow-designer docs
[sdc/sdc-workflow-designer.git] / sdc-workflow-designer-ui / src / main / frontend / src / features / version / composition / custom-properties-provider / provider / camunda / parts / implementation / InputOutputHelper.js
1 var ModelUtil = require('bpmn-js/lib/util/ModelUtil'),
2     is = ModelUtil.is,
3     getBusinessObject = ModelUtil.getBusinessObject;
4
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';
8
9 var InputOutputHelper = {};
10
11 function getElements(bo, type, prop) {
12     var elems = extensionElementsHelper.getExtensionElements(bo, type) || [];
13     return !prop ? elems : (elems[0] || {})[prop] || [];
14 }
15
16 function getParameters(element, prop, insideConnector) {
17     var inputOutput = InputOutputHelper.getInputOutput(
18         element,
19         insideConnector
20     );
21     return (inputOutput && inputOutput.get(prop)) || [];
22 }
23
24 /**
25  * Get a inputOutput from the business object
26  *
27  * @param {djs.model.Base} element
28  * @param  {boolean} insideConnector
29  *
30  * @return {ModdleElement} the inputOutput object
31  */
32 InputOutputHelper.getInputOutput = function(element, insideConnector) {
33     if (!insideConnector) {
34         var bo = getBusinessObject(element);
35         return (getElements(bo, 'camunda:InputOutput') || [])[0];
36     }
37     var connector = this.getConnector(element);
38
39     return connector && connector.get('inputOutput');
40 };
41
42 /**
43  * Get a connector from the business object
44  *
45  * @param {djs.model.Base} element
46  *
47  * @return {ModdleElement} the connector object
48  */
49 InputOutputHelper.getConnector = function(element) {
50     var bo = implementationTypeHelper.getServiceTaskLikeBusinessObject(element);
51     return bo && (getElements(bo, 'camunda:Connector') || [])[0];
52 };
53
54 /**
55  * Return all input parameters existing in the business object, and
56  * an empty array if none exist.
57  *
58  * @param  {djs.model.Base} element
59  * @param  {boolean} insideConnector
60  *
61  * @return {Array} a list of input parameter objects
62  */
63 InputOutputHelper.getInputParameters = function(element, insideConnector) {
64     return getParameters.apply(this, [
65         element,
66         'inputParameters',
67         insideConnector
68     ]);
69 };
70
71 /**
72  * Return all output parameters existing in the business object, and
73  * an empty array if none exist.
74  *
75  * @param  {djs.model.Base} element
76  * @param  {boolean} insideConnector
77  *
78  * @return {Array} a list of output parameter objects
79  */
80 InputOutputHelper.getOutputParameters = function(element, insideConnector) {
81     return getParameters.apply(this, [
82         element,
83         'outputParameters',
84         insideConnector
85     ]);
86 };
87
88 /**
89  * Get a input parameter from the business object at given index
90  *
91  * @param {djs.model.Base} element
92  * @param  {boolean} insideConnector
93  * @param {number} idx
94  *
95  * @return {ModdleElement} input parameter
96  */
97 InputOutputHelper.getInputParameter = function(element, insideConnector, idx) {
98     return this.getInputParameters(element, insideConnector)[idx];
99 };
100
101 /**
102  * Get a output parameter from the business object at given index
103  *
104  * @param {djs.model.Base} element
105  * @param  {boolean} insideConnector
106  * @param {number} idx
107  *
108  * @return {ModdleElement} output parameter
109  */
110 InputOutputHelper.getOutputParameter = function(element, insideConnector, idx) {
111     return this.getOutputParameters(element, insideConnector)[idx];
112 };
113
114 /**
115  * Returns 'true' if the given element supports inputOutput
116  *
117  * @param {djs.model.Base} element
118  * @param  {boolean} insideConnector
119  *
120  * @return {boolean} a boolean value
121  */
122 InputOutputHelper.isInputOutputSupported = function(element, insideConnector) {
123     var bo = getBusinessObject(element);
124     return (
125         insideConnector ||
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')))
131     );
132 };
133
134 /**
135  * Returns 'true' if the given element supports output parameters
136  *
137  * @param {djs.model.Base} element
138  * @param  {boolean} insideConnector
139  *
140  * @return {boolean} a boolean value
141  */
142 InputOutputHelper.areOutputParametersSupported = function(
143     element,
144     insideConnector
145 ) {
146     var bo = getBusinessObject(element);
147     return (
148         insideConnector || (!is(bo, 'bpmn:EndEvent') && !bo.loopCharacteristics)
149     );
150 };
151
152 InputOutputHelper.isCreateDeleteSupported = function(element) {
153     const bo = getBusinessObject(element);
154     return (
155         (element.type !== 'bpmn:ServiceTask' ||
156             !bo[implementationType.ACTIVITY]) &&
157         element.type !== 'bpmn:Process'
158     );
159 };
160
161 InputOutputHelper.isWorkflowTargetSupported = function(element, selected) {
162     const bo = getBusinessObject(element);
163     return (
164         is(bo, 'bpmn:ServiceTask') && is(selected, 'camunda:OutputParameter')
165     );
166 };
167
168 InputOutputHelper.isWorkflowSourceSupported = function(element, selected) {
169     const bo = getBusinessObject(element);
170     return is(bo, 'bpmn:ServiceTask') && is(selected, 'camunda:InputParameter');
171 };
172
173 export default InputOutputHelper;