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');
8 IMPLEMENTATION_TYPE_VALUE,
10 } from './implementationConstants';
12 var InputOutputHelper = {};
14 function getElements(bo, type, prop) {
15 var elems = extensionElementsHelper.getExtensionElements(bo, type) || [];
16 return !prop ? elems : (elems[0] || {})[prop] || [];
19 function getParameters(element, prop, insideConnector) {
20 var inputOutput = InputOutputHelper.getInputOutput(
24 return (inputOutput && inputOutput.get(prop)) || [];
28 * Get a inputOutput from the business object
30 * @param {djs.model.Base} element
31 * @param {boolean} insideConnector
33 * @return {ModdleElement} the inputOutput object
35 InputOutputHelper.getInputOutput = function(element, insideConnector) {
36 if (!insideConnector) {
37 var bo = getBusinessObject(element);
38 return (getElements(bo, 'camunda:InputOutput') || [])[0];
40 var connector = this.getConnector(element);
42 return connector && connector.get('inputOutput');
46 * Get a connector from the business object
48 * @param {djs.model.Base} element
50 * @return {ModdleElement} the connector object
52 InputOutputHelper.getConnector = function(element) {
53 var bo = implementationTypeHelper.getServiceTaskLikeBusinessObject(element);
54 return bo && (getElements(bo, 'camunda:Connector') || [])[0];
58 * Return all input parameters existing in the business object, and
59 * an empty array if none exist.
61 * @param {djs.model.Base} element
62 * @param {boolean} insideConnector
64 * @return {Array} a list of input parameter objects
66 InputOutputHelper.getInputParameters = function(element, insideConnector) {
67 return getParameters.apply(this, [
75 * Return all output parameters existing in the business object, and
76 * an empty array if none exist.
78 * @param {djs.model.Base} element
79 * @param {boolean} insideConnector
81 * @return {Array} a list of output parameter objects
83 InputOutputHelper.getOutputParameters = function(element, insideConnector) {
84 return getParameters.apply(this, [
92 * Get a input parameter from the business object at given index
94 * @param {djs.model.Base} element
95 * @param {boolean} insideConnector
98 * @return {ModdleElement} input parameter
100 InputOutputHelper.getInputParameter = function(element, insideConnector, idx) {
101 return this.getInputParameters(element, insideConnector)[idx];
105 * Get a output parameter from the business object at given index
107 * @param {djs.model.Base} element
108 * @param {boolean} insideConnector
109 * @param {number} idx
111 * @return {ModdleElement} output parameter
113 InputOutputHelper.getOutputParameter = function(element, insideConnector, idx) {
114 return this.getOutputParameters(element, insideConnector)[idx];
118 * Returns 'true' if the given element supports inputOutput
120 * @param {djs.model.Base} element
121 * @param {boolean} insideConnector
123 * @return {boolean} a boolean value
125 InputOutputHelper.isInputOutputSupported = function(element, insideConnector) {
126 var bo = getBusinessObject(element);
129 is(bo, 'bpmn:Process') ||
130 (is(bo, 'bpmn:FlowNode') &&
131 !is(bo, 'bpmn:StartEvent') &&
132 !is(bo, 'bpmn:BoundaryEvent') &&
133 !(is(bo, 'bpmn:SubProcess') && bo.get('triggeredByEvent')))
138 * Returns 'true' if the given element supports output parameters
140 * @param {djs.model.Base} element
141 * @param {boolean} insideConnector
143 * @return {boolean} a boolean value
145 InputOutputHelper.areOutputParametersSupported = function(
149 var bo = getBusinessObject(element);
151 insideConnector || (!is(bo, 'bpmn:EndEvent') && !bo.loopCharacteristics)
155 InputOutputHelper.isCreateDeleteSupported = function(element) {
156 const bo = getBusinessObject(element);
158 (element.type !== 'bpmn:ServiceTask' ||
159 bo[implementationType.ACTIVITY] !== IMPLEMENTATION_TYPE_VALUE) &&
160 element.type !== 'bpmn:Process'
164 InputOutputHelper.isWorkflowTargetSupported = function(element, selected) {
165 const bo = getBusinessObject(element);
167 is(bo, 'bpmn:ServiceTask') && is(selected, 'camunda:OutputParameter')
171 InputOutputHelper.isWorkflowSourceSupported = function(element, selected) {
172 const bo = getBusinessObject(element);
173 return is(bo, 'bpmn:ServiceTask') && is(selected, 'camunda:InputParameter');
176 export default InputOutputHelper;