'use strict'; var getBusinessObject = require('bpmn-js/lib/util/ModelUtil').getBusinessObject, is = require('bpmn-js/lib/util/ModelUtil').is; var entryFactory = require('../../../factory/EntryFactory'); var callable = require('./implementation/Callable'); var cmdHelper = require('../../../helper/CmdHelper'); var flattenDeep = require('lodash/flattenDeep'); var assign = require('lodash/assign'); function getCallableType(element) { var bo = getBusinessObject(element); var boCalledElement = bo.get('calledElement'), boCaseRef = bo.get('activiti:caseRef'); var callActivityType = ''; if (typeof boCalledElement !== 'undefined') { callActivityType = 'bpmn'; } else if (typeof boCaseRef !== 'undefined') { callActivityType = 'cmmn'; } return callActivityType; } var DEFAULT_PROPS = { calledElement: undefined, 'activiti:calledElementBinding': 'latest', 'activiti:calledElementVersion': undefined, 'activiti:calledElementTenantId': undefined, 'activiti:variableMappingClass' : undefined, 'activiti:variableMappingDelegateExpression' : undefined, 'activiti:caseRef': undefined, 'activiti:caseBinding': 'latest', 'activiti:caseVersion': undefined, 'activiti:caseTenantId': undefined }; module.exports = function(group, element, bpmnFactory, translate) { if (!is(element, 'activiti:CallActivity')) { return; } group.entries.push(entryFactory.selectBox({ id : 'callActivity', label: translate('CallActivity Type'), selectOptions: [ { name: 'BPMN', value: 'bpmn' }, { name: 'CMMN', value: 'cmmn' } ], emptyParameter: true, modelProperty: 'callActivityType', get: function(element, node) { return { callActivityType: getCallableType(element) }; }, set: function(element, values, node) { var type = values.callActivityType; var props = assign({}, DEFAULT_PROPS); if (type === 'bpmn') { props.calledElement = ''; } else if (type === 'cmmn') { props['activiti:caseRef'] = ''; } return cmdHelper.updateProperties(element, props); } })); group.entries.push(callable(element, bpmnFactory, { getCallableType: getCallableType }, translate)); group.entries = flattenDeep(group.entries); };