JobRetryTimeCycle.js 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. 'use strict';
  2. var is = require('bpmn-js/lib/util/ModelUtil').is;
  3. var entryFactory = require('../../../../factory/EntryFactory');
  4. var asyncCapableHelper = require('../../../../helper/AsyncCapableHelper');
  5. var elementHelper = require('../../../../helper/ElementHelper'),
  6. eventDefinitionHelper = require('../../../../helper/EventDefinitionHelper'),
  7. cmdHelper = require('../../../../helper/CmdHelper');
  8. function isAsyncBefore(bo) {
  9. return asyncCapableHelper.isAsyncBefore(bo);
  10. }
  11. function isAsyncAfter(bo) {
  12. return asyncCapableHelper.isAsyncAfter(bo);
  13. }
  14. function getFailedJobRetryTimeCycle(bo) {
  15. return asyncCapableHelper.getFailedJobRetryTimeCycle(bo);
  16. }
  17. function removeFailedJobRetryTimeCycle(bo, element) {
  18. return asyncCapableHelper.removeFailedJobRetryTimeCycle(bo, element);
  19. }
  20. function createExtensionElements(parent, bpmnFactory) {
  21. return elementHelper.createElement('bpmn:ExtensionElements', { values: [] }, parent, bpmnFactory);
  22. }
  23. function createFailedJobRetryTimeCycle(parent, bpmnFactory, cycle) {
  24. return elementHelper.createElement('activiti:FailedJobRetryTimeCycle', { body: cycle }, parent, bpmnFactory);
  25. }
  26. module.exports = function(element, bpmnFactory, options, translate) {
  27. var getBusinessObject = options.getBusinessObject;
  28. var idPrefix = options.idPrefix || '',
  29. labelPrefix = options.labelPrefix || '';
  30. var retryTimeCycleEntry = entryFactory.textField({
  31. id: idPrefix + 'retryTimeCycle',
  32. label: labelPrefix + translate('Retry Time Cycle'),
  33. modelProperty: 'cycle',
  34. get: function(element, node) {
  35. var retryTimeCycle = getFailedJobRetryTimeCycle(getBusinessObject(element));
  36. var value = retryTimeCycle && retryTimeCycle.get('body');
  37. return {
  38. cycle: value
  39. };
  40. },
  41. set: function(element, values, node) {
  42. var newCycle = values.cycle;
  43. var bo = getBusinessObject(element);
  44. if (newCycle === '' || typeof newCycle === 'undefined') {
  45. // remove retry time cycle element(s)
  46. return removeFailedJobRetryTimeCycle(bo, element);
  47. }
  48. var retryTimeCycle = getFailedJobRetryTimeCycle(bo);
  49. if (!retryTimeCycle) {
  50. // add new retry time cycle element
  51. var commands = [];
  52. var extensionElements = bo.get('extensionElements');
  53. if (!extensionElements) {
  54. extensionElements = createExtensionElements(bo, bpmnFactory);
  55. commands.push(cmdHelper.updateBusinessObject(element, bo, { extensionElements: extensionElements }));
  56. }
  57. retryTimeCycle = createFailedJobRetryTimeCycle(extensionElements, bpmnFactory, newCycle);
  58. commands.push(cmdHelper.addAndRemoveElementsFromList(
  59. element,
  60. extensionElements,
  61. 'values',
  62. 'extensionElements',
  63. [ retryTimeCycle ],
  64. []
  65. ));
  66. return commands;
  67. }
  68. // update existing retry time cycle element
  69. return cmdHelper.updateBusinessObject(element, retryTimeCycle, { body: newCycle });
  70. },
  71. hidden: function(element) {
  72. var bo = getBusinessObject(element);
  73. if (bo && (isAsyncBefore(bo) || isAsyncAfter(bo))) {
  74. return false;
  75. }
  76. if (is(element, 'bpmn:Event')) {
  77. return !eventDefinitionHelper.getTimerEventDefinition(element);
  78. }
  79. return true;
  80. }
  81. });
  82. return [ retryTimeCycleEntry ];
  83. };