AsyncContinuation.js 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. 'use strict';
  2. var assign = require('lodash/assign');
  3. var entryFactory = require('../../../../factory/EntryFactory');
  4. var asyncCapableHelper = require('../../../../helper/AsyncCapableHelper'),
  5. eventDefinitionHelper = require('../../../../helper/EventDefinitionHelper'),
  6. cmdHelper = require('../../../../helper/CmdHelper');
  7. function isAsyncBefore(bo) {
  8. return asyncCapableHelper.isAsyncBefore(bo);
  9. }
  10. function isAsyncAfter(bo) {
  11. return asyncCapableHelper.isAsyncAfter(bo);
  12. }
  13. function isExclusive(bo) {
  14. return asyncCapableHelper.isExclusive(bo);
  15. }
  16. function removeFailedJobRetryTimeCycle(bo, element) {
  17. return asyncCapableHelper.removeFailedJobRetryTimeCycle(bo, element);
  18. }
  19. function canRemoveFailedJobRetryTimeCycle(element) {
  20. return !eventDefinitionHelper.getTimerEventDefinition(element);
  21. }
  22. module.exports = function(element, bpmnFactory, options, translate) {
  23. var getBusinessObject = options.getBusinessObject;
  24. var idPrefix = options.idPrefix || '',
  25. labelPrefix = options.labelPrefix || '';
  26. var asyncBeforeEntry = entryFactory.checkbox({
  27. id: idPrefix + 'asyncBefore',
  28. label: labelPrefix + translate('Asynchronous Before'),
  29. modelProperty: 'asyncBefore',
  30. get: function(element, node) {
  31. var bo = getBusinessObject(element);
  32. return {
  33. asyncBefore: isAsyncBefore(bo)
  34. };
  35. },
  36. set: function(element, values) {
  37. var bo = getBusinessObject(element);
  38. var asyncBefore = !!values.asyncBefore;
  39. var props = {
  40. 'activiti:asyncBefore': asyncBefore,
  41. 'activiti:async': false
  42. };
  43. var commands = [];
  44. if (!isAsyncAfter(bo) && !asyncBefore) {
  45. props = assign({ 'activiti:exclusive' : true }, props);
  46. if (canRemoveFailedJobRetryTimeCycle(element)) {
  47. commands.push(removeFailedJobRetryTimeCycle(bo, element));
  48. }
  49. }
  50. commands.push(cmdHelper.updateBusinessObject(element, bo, props));
  51. return commands;
  52. }
  53. });
  54. var asyncAfterEntry = entryFactory.checkbox({
  55. id: idPrefix + 'asyncAfter',
  56. label: labelPrefix + translate('Asynchronous After'),
  57. modelProperty: 'asyncAfter',
  58. get: function(element, node) {
  59. var bo = getBusinessObject(element);
  60. return {
  61. asyncAfter: isAsyncAfter(bo)
  62. };
  63. },
  64. set: function(element, values) {
  65. var bo = getBusinessObject(element);
  66. var asyncAfter = !!values.asyncAfter;
  67. var props = {
  68. 'activiti:asyncAfter': asyncAfter
  69. };
  70. var commands = [];
  71. if (!isAsyncBefore(bo) && !asyncAfter) {
  72. props = assign({ 'activiti:exclusive' : true }, props);
  73. if (canRemoveFailedJobRetryTimeCycle(element)) {
  74. commands.push(removeFailedJobRetryTimeCycle(bo, element));
  75. }
  76. }
  77. commands.push(cmdHelper.updateBusinessObject(element, bo, props));
  78. return commands;
  79. }
  80. });
  81. var exclusiveEntry = entryFactory.checkbox({
  82. id: idPrefix + 'exclusive',
  83. label: labelPrefix + translate('Exclusive'),
  84. modelProperty: 'exclusive',
  85. get: function(element, node) {
  86. var bo = getBusinessObject(element);
  87. return { exclusive: isExclusive(bo) };
  88. },
  89. set: function(element, values) {
  90. var bo = getBusinessObject(element);
  91. return cmdHelper.updateBusinessObject(element, bo, { 'activiti:exclusive': !!values.exclusive });
  92. },
  93. hidden: function(element) {
  94. var bo = getBusinessObject(element);
  95. return bo && !isAsyncAfter(bo) && !isAsyncBefore(bo);
  96. }
  97. });
  98. return [ asyncBeforeEntry, asyncAfterEntry, exclusiveEntry ];
  99. };