TimerEventDefinition.js 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. 'use strict';
  2. var elementHelper = require('../../../../helper/ElementHelper'),
  3. cmdHelper = require('../../../../helper/CmdHelper');
  4. var entryFactory = require('../../../../factory/EntryFactory');
  5. /**
  6. * Get the timer definition type for a given timer event definition.
  7. *
  8. * @param {ModdleElement<bpmn:TimerEventDefinition>} timer
  9. *
  10. * @return {string|undefined} the timer definition type
  11. */
  12. function getTimerDefinitionType(timer) {
  13. var timeDate = timer.get('timeDate');
  14. if (typeof timeDate !== 'undefined') {
  15. return 'timeDate';
  16. }
  17. var timeCycle = timer.get('timeCycle');
  18. if (typeof timeCycle !== 'undefined') {
  19. return 'timeCycle';
  20. }
  21. var timeDuration = timer.get('timeDuration');
  22. if (typeof timeDuration !== 'undefined') {
  23. return 'timeDuration';
  24. }
  25. }
  26. /**
  27. * Creates 'bpmn:FormalExpression' element.
  28. *
  29. * @param {ModdleElement} parent
  30. * @param {string} body
  31. * @param {BpmnFactory} bpmnFactory
  32. *
  33. * @return {ModdleElement<bpmn:FormalExpression>} a formal expression
  34. */
  35. function createFormalExpression(parent, body, bpmnFactory) {
  36. body = body || undefined;
  37. return elementHelper.createElement('bpmn:FormalExpression', { body: body }, parent, bpmnFactory);
  38. }
  39. function TimerEventDefinition(group, element, bpmnFactory, timerEventDefinition, translate) {
  40. var selectOptions = [
  41. { value: 'timeDate', name: translate('Date') },
  42. { value: 'timeDuration', name: translate('Duration') },
  43. { value: 'timeCycle', name: translate('Cycle') }
  44. ];
  45. group.entries.push(entryFactory.selectBox({
  46. id: 'timer-event-definition-type',
  47. label: translate('Timer Definition Type'),
  48. selectOptions: selectOptions,
  49. emptyParameter: true,
  50. modelProperty: 'timerDefinitionType',
  51. get: function(element, node) {
  52. return {
  53. timerDefinitionType: getTimerDefinitionType(timerEventDefinition) || ''
  54. };
  55. },
  56. set: function(element, values) {
  57. var props = {
  58. timeDuration: undefined,
  59. timeDate: undefined,
  60. timeCycle: undefined
  61. };
  62. var newType = values.timerDefinitionType;
  63. if (values.timerDefinitionType) {
  64. var oldType = getTimerDefinitionType(timerEventDefinition);
  65. var value;
  66. if (oldType) {
  67. var definition = timerEventDefinition.get(oldType);
  68. value = definition.get('body');
  69. }
  70. props[newType] = createFormalExpression(timerEventDefinition, value, bpmnFactory);
  71. }
  72. return cmdHelper.updateBusinessObject(element, timerEventDefinition, props);
  73. }
  74. }));
  75. group.entries.push(entryFactory.textField({
  76. id: 'timer-event-definition',
  77. label: translate('Timer Definition'),
  78. modelProperty: 'timerDefinition',
  79. get: function(element, node) {
  80. var type = getTimerDefinitionType(timerEventDefinition);
  81. var definition = type && timerEventDefinition.get(type);
  82. var value = definition && definition.get('body');
  83. return {
  84. timerDefinition: value
  85. };
  86. },
  87. set: function(element, values) {
  88. var type = getTimerDefinitionType(timerEventDefinition);
  89. var definition = type && timerEventDefinition.get(type);
  90. if (definition) {
  91. return cmdHelper.updateBusinessObject(element, definition, {
  92. body: values.timerDefinition || undefined
  93. });
  94. }
  95. },
  96. validate: function(element) {
  97. var type = getTimerDefinitionType(timerEventDefinition);
  98. var definition = type && timerEventDefinition.get(type);
  99. if (definition) {
  100. var value = definition.get('body');
  101. if (!value) {
  102. return {
  103. timerDefinition: translate('Must provide a value')
  104. };
  105. }
  106. }
  107. },
  108. hidden: function(element) {
  109. return !getTimerDefinitionType(timerEventDefinition);
  110. }
  111. }));
  112. }
  113. module.exports = TimerEventDefinition;