'use strict'; var ModelUtil = require('bpmn-js/lib/util/ModelUtil'), is = ModelUtil.is, getBusinessObject = ModelUtil.getBusinessObject; var eventDefinitionHelper = require('./EventDefinitionHelper'); var extensionsElementHelper = require('./ExtensionElementsHelper'); var ImplementationTypeHelper = {}; module.exports = ImplementationTypeHelper; /** * Returns 'true' if the given element is 'activiti:ServiceTaskLike' * * @param {djs.model.Base} element * * @return {boolean} a boolean value */ ImplementationTypeHelper.isServiceTaskLike = function(element) { return is(element, 'activiti:ServiceTaskLike'); }; /** * Returns 'true' if the given element is 'activiti:DmnCapable' * * @param {djs.model.Base} element * * @return {boolean} a boolean value */ ImplementationTypeHelper.isDmnCapable = function(element) { return is(element, 'activiti:DmnCapable'); }; /** * Returns 'true' if the given element is 'activiti:ExternalCapable' * * @param {djs.model.Base} element * * @return {boolean} a boolean value */ ImplementationTypeHelper.isExternalCapable = function(element) { return is(element, 'activiti:ExternalCapable'); }; /** * Returns 'true' if the given element is 'activiti:TaskListener' * * @param {djs.model.Base} element * * @return {boolean} a boolean value */ ImplementationTypeHelper.isTaskListener = function(element) { return is(element, 'activiti:TaskListener'); }; /** * Returns 'true' if the given element is 'activiti:ExecutionListener' * * @param {djs.model.Base} element * * @return {boolean} a boolean value */ ImplementationTypeHelper.isExecutionListener = function(element) { return is(element, 'activiti:ExecutionListener'); }; /** * Returns 'true' if the given element is 'activiti:ExecutionListener' or * 'activiti:TaskListener' * * @param {djs.model.Base} element * * @return {boolean} a boolean value */ ImplementationTypeHelper.isListener = function(element) { return this.isTaskListener(element) || this.isExecutionListener(element); }; /** * Returns 'true' if the given element is 'bpmn:SequenceFlow' * * @param {djs.model.Base} element * * @return {boolean} a boolean value */ ImplementationTypeHelper.isSequenceFlow = function(element) { return is(element, 'bpmn:SequenceFlow'); }; /** * Get a 'activiti:ServiceTaskLike' business object. * * If the given element is not a 'activiti:ServiceTaskLike', then 'false' * is returned. * * @param {djs.model.Base} element * * @return {ModdleElement} the 'activiti:ServiceTaskLike' business object */ ImplementationTypeHelper.getServiceTaskLikeBusinessObject = function(element) { if (is(element, 'bpmn:IntermediateThrowEvent') || is(element, 'bpmn:EndEvent')) { // change business object to 'messageEventDefinition' when // the element is a message intermediate throw event or message end event // because the activiti extensions (e.g. activiti:class) are in the message // event definition tag and not in the intermediate throw event or end event tag var messageEventDefinition = eventDefinitionHelper.getMessageEventDefinition(element); if (messageEventDefinition) { element = messageEventDefinition; } } return this.isServiceTaskLike(element) && getBusinessObject(element); }; /** * Returns the implementation type of the given element. * * Possible implementation types are: * - dmn * - connector * - external * - class * - expression * - delegateExpression * - script * - or undefined, when no matching implementation type is found * * @param {djs.model.Base} element * * @return {String} the implementation type */ ImplementationTypeHelper.getImplementationType = function(element) { var bo = this.getServiceTaskLikeBusinessObject(element); if (!bo) { if (this.isListener(element)) { bo = element; } else { return; } } if (this.isDmnCapable(bo)) { var decisionRef = bo.get('activiti:decisionRef'); if (typeof decisionRef !== 'undefined') { return 'dmn'; } } if (this.isServiceTaskLike(bo)) { var connectors = extensionsElementHelper.getExtensionElements(bo, 'activiti:Connector'); if (typeof connectors !== 'undefined') { return 'connector'; } } if (this.isExternalCapable(bo)) { var type = bo.get('activiti:type'); if (type === 'external') { return 'external'; } } var cls = bo.get('activiti:class'); if (typeof cls !== 'undefined') { return 'class'; } var expression = bo.get('activiti:expression'); if (typeof expression !== 'undefined') { return 'expression'; } var delegateExpression = bo.get('activiti:delegateExpression'); if (typeof delegateExpression !== 'undefined') { return 'delegateExpression'; } if (this.isListener(bo)) { var script = bo.get('script'); if (typeof script !== 'undefined') { return 'script'; } } };