InputOutputHelper.js 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. 'use strict';
  2. var ModelUtil = require('bpmn-js/lib/util/ModelUtil'),
  3. is = ModelUtil.is,
  4. getBusinessObject = ModelUtil.getBusinessObject;
  5. var extensionElementsHelper = require('./ExtensionElementsHelper'),
  6. implementationTypeHelper = require('./ImplementationTypeHelper');
  7. var InputOutputHelper = {};
  8. module.exports = InputOutputHelper;
  9. function getElements(bo, type, prop) {
  10. var elems = extensionElementsHelper.getExtensionElements(bo, type) || [];
  11. return !prop ? elems : (elems[0] || {})[prop] || [];
  12. }
  13. function getParameters(element, prop, insideConnector) {
  14. var inputOutput = InputOutputHelper.getInputOutput(element, insideConnector);
  15. return (inputOutput && inputOutput.get(prop)) || [];
  16. }
  17. /**
  18. * Get a inputOutput from the business object
  19. *
  20. * @param {djs.model.Base} element
  21. * @param {boolean} insideConnector
  22. *
  23. * @return {ModdleElement} the inputOutput object
  24. */
  25. InputOutputHelper.getInputOutput = function(element, insideConnector) {
  26. if (!insideConnector) {
  27. var bo = getBusinessObject(element);
  28. return (getElements(bo, 'activiti:InputOutput') || [])[0];
  29. }
  30. var connector = this.getConnector(element);
  31. return connector && connector.get('inputOutput');
  32. };
  33. /**
  34. * Get a connector from the business object
  35. *
  36. * @param {djs.model.Base} element
  37. *
  38. * @return {ModdleElement} the connector object
  39. */
  40. InputOutputHelper.getConnector = function(element) {
  41. var bo = implementationTypeHelper.getServiceTaskLikeBusinessObject(element);
  42. return bo && (getElements(bo, 'activiti:Connector') || [])[0];
  43. };
  44. /**
  45. * Return all input parameters existing in the business object, and
  46. * an empty array if none exist.
  47. *
  48. * @param {djs.model.Base} element
  49. * @param {boolean} insideConnector
  50. *
  51. * @return {Array} a list of input parameter objects
  52. */
  53. InputOutputHelper.getInputParameters = function(element, insideConnector) {
  54. return getParameters.apply(this, [ element, 'inputParameters', insideConnector ]);
  55. };
  56. /**
  57. * Return all output parameters existing in the business object, and
  58. * an empty array if none exist.
  59. *
  60. * @param {djs.model.Base} element
  61. * @param {boolean} insideConnector
  62. *
  63. * @return {Array} a list of output parameter objects
  64. */
  65. InputOutputHelper.getOutputParameters = function(element, insideConnector) {
  66. return getParameters.apply(this, [ element, 'outputParameters', insideConnector ]);
  67. };
  68. /**
  69. * Get a input parameter from the business object at given index
  70. *
  71. * @param {djs.model.Base} element
  72. * @param {boolean} insideConnector
  73. * @param {number} idx
  74. *
  75. * @return {ModdleElement} input parameter
  76. */
  77. InputOutputHelper.getInputParameter = function(element, insideConnector, idx) {
  78. return this.getInputParameters(element, insideConnector)[idx];
  79. };
  80. /**
  81. * Get a output parameter from the business object at given index
  82. *
  83. * @param {djs.model.Base} element
  84. * @param {boolean} insideConnector
  85. * @param {number} idx
  86. *
  87. * @return {ModdleElement} output parameter
  88. */
  89. InputOutputHelper.getOutputParameter = function(element, insideConnector, idx) {
  90. return this.getOutputParameters(element, insideConnector)[idx];
  91. };
  92. /**
  93. * Returns 'true' if the given element supports inputOutput
  94. *
  95. * @param {djs.model.Base} element
  96. * @param {boolean} insideConnector
  97. *
  98. * @return {boolean} a boolean value
  99. */
  100. InputOutputHelper.isInputOutputSupported = function(element, insideConnector) {
  101. if (insideConnector) {
  102. return true;
  103. }
  104. var bo = getBusinessObject(element);
  105. return (
  106. is(bo, 'bpmn:FlowNode') && !(
  107. is(bo, 'bpmn:StartEvent') ||
  108. is(bo, 'bpmn:Gateway') ||
  109. is(bo, 'bpmn:BoundaryEvent') ||
  110. (
  111. is(bo, 'bpmn:SubProcess') && bo.get('triggeredByEvent')
  112. )
  113. )
  114. );
  115. };
  116. /**
  117. * Returns 'true' if the given element supports output parameters
  118. *
  119. * @param {djs.model.Base} element
  120. * @param {boolean} insideConnector
  121. *
  122. * @return {boolean} a boolean value
  123. */
  124. InputOutputHelper.areOutputParametersSupported = function(element, insideConnector) {
  125. var bo = getBusinessObject(element);
  126. return insideConnector || (!is(bo, 'bpmn:EndEvent') && !bo.loopCharacteristics);
  127. };