123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130 |
- 'use strict';
- var entryFactory = require('../../../../factory/EntryFactory');
- var cmdHelper = require('../../../../helper/CmdHelper'),
- eventDefinitionHelper = require('../../../../helper/EventDefinitionHelper'),
- utils = require('../../../../Utils');
- var getBusinessObject = require('bpmn-js/lib/util/ModelUtil').getBusinessObject,
- is = require('bpmn-js/lib/util/ModelUtil').is;
- var forEach = require('lodash/forEach'),
- find = require('lodash/find'),
- filter = require('lodash/filter');
- function getContainedActivities(element) {
- return getFlowElements(element, 'bpmn:Activity');
- }
- function getContainedBoundaryEvents(element) {
- return getFlowElements(element, 'bpmn:BoundaryEvent');
- }
- function getFlowElements(element, type) {
- return utils.filterElementsByType(element.flowElements, type);
- }
- function isCompensationEventAttachedToActivity(activity, boundaryEvents) {
- var activityId = activity.id;
- var boundaryEvent = find(boundaryEvents, function(boundaryEvent) {
- var compensateEventDefinition = eventDefinitionHelper.getCompensateEventDefinition(boundaryEvent);
- var attachedToRef = boundaryEvent.attachedToRef;
- return compensateEventDefinition && attachedToRef && attachedToRef.id === activityId;
- });
- return !!boundaryEvent;
- }
- // subprocess: only when it is not triggeredByEvent
- // activity: only when it attach a compensation boundary event
- // callActivity: no limitation
- function canActivityBeCompensated(activity, boundaryEvents) {
- return (is(activity, 'bpmn:SubProcess') && !activity.triggeredByEvent) ||
- is(activity, 'bpmn:CallActivity') ||
- isCompensationEventAttachedToActivity(activity, boundaryEvents);
- }
- function getActivitiesForCompensation(element) {
- var boundaryEvents = getContainedBoundaryEvents(element);
- return filter(getContainedActivities(element), function(activity) {
- return canActivityBeCompensated(activity, boundaryEvents);
- });
- }
- function getActivitiesForActivityRef(element) {
- var bo = getBusinessObject(element);
- var parent = bo.$parent;
- var activitiesForActivityRef = getActivitiesForCompensation(parent);
- // if throwing compensation event is in an event sub process:
- // get also all activities outside of the event sub process
- if (is(parent, 'bpmn:SubProcess') && parent.triggeredByEvent) {
- parent = parent.$parent;
- if (parent) {
- activitiesForActivityRef = activitiesForActivityRef.concat(getActivitiesForCompensation(parent));
- }
- }
- return activitiesForActivityRef;
- }
- function createActivityRefOptions(element) {
- var options = [ { value: '' } ];
- var activities = getActivitiesForActivityRef(element);
- forEach(activities, function(activity) {
- var activityId = activity.id;
- var name = (activity.name ? (activity.name + ' ') : '') + '(id=' + activityId + ')';
- options.push({ value: activityId, name: name });
- });
- return options;
- }
- module.exports = function(group, element, bpmnFactory, compensateEventDefinition, elementRegistry, translate) {
- group.entries.push(entryFactory.checkbox({
- id: 'wait-for-completion',
- label: translate('Wait for Completion'),
- modelProperty: 'waitForCompletion',
- get: function(element, node) {
- return {
- waitForCompletion: compensateEventDefinition.waitForCompletion
- };
- },
- set: function(element, values) {
- values.waitForCompletion = values.waitForCompletion || false;
- return cmdHelper.updateBusinessObject(element, compensateEventDefinition, values);
- }
- }));
- group.entries.push(entryFactory.selectBox({
- id: 'activity-ref',
- label: translate('Activity Ref'),
- selectOptions: createActivityRefOptions(element),
- modelProperty: 'activityRef',
- get: function(element, node) {
- var activityRef = compensateEventDefinition.activityRef;
- activityRef = activityRef && activityRef.id;
- return {
- activityRef: activityRef || ''
- };
- },
- set: function(element, values) {
- var activityRef = values.activityRef || undefined;
- activityRef = activityRef && getBusinessObject(elementRegistry.get(activityRef));
- return cmdHelper.updateBusinessObject(element, compensateEventDefinition, {
- activityRef: activityRef
- });
- }
- }));
- };
|