f6a0b247ecd0bf32095a1ea5b6268c1abfc360d4
[sdc/sdc-workflow-designer.git] /
1 'use strict';
2
3 import entryFactory from 'bpmn-js-properties-panel/lib/factory/EntryFactory';
4 import cmdHelper from 'bpmn-js-properties-panel/lib/helper/CmdHelper';
5
6 const DELEGATE_TYPES = ['class', 'expression', 'delegateExpression'];
7
8 const PROPERTIES = {
9     class: 'camunda:class',
10     expression: 'camunda:expression',
11     delegateExpression: 'camunda:delegateExpression'
12 };
13
14 function isDelegate(type) {
15     return DELEGATE_TYPES.indexOf(type) !== -1;
16 }
17
18 function getAttribute(type) {
19     return PROPERTIES[type];
20 }
21
22 export default function(element, bpmnFactory, options, translate) {
23     var getImplementationType = options.getImplementationType,
24         getBusinessObject = options.getBusinessObject;
25
26     function getDelegationLabel(type) {
27         switch (type) {
28             case 'class':
29                 return translate('Java Class');
30             case 'expression':
31                 return translate('Expression');
32             case 'delegateExpression':
33                 return translate('Delegate Expression');
34             default:
35                 return '';
36         }
37     }
38
39     var delegateEntry = entryFactory.textField({
40         id: 'delegate',
41         label: translate('Value'),
42         dataValueLabel: 'delegationLabel',
43         modelProperty: 'delegate',
44
45         get: function(element) {
46             var bo = getBusinessObject(element);
47             var type = getImplementationType(element);
48             var attr = getAttribute(type);
49             var label = getDelegationLabel(type);
50             return {
51                 delegate: bo.get(attr),
52                 delegationLabel: label
53             };
54         },
55
56         set: function(element, values) {
57             var bo = getBusinessObject(element);
58             var type = getImplementationType(element);
59             var attr = getAttribute(type);
60             var prop = {};
61             prop[attr] = values.delegate || '';
62             return cmdHelper.updateBusinessObject(element, bo, prop);
63         },
64
65         validate: function(element, values) {
66             return isDelegate(getImplementationType(element)) &&
67                 !values.delegate
68                 ? { delegate: 'Must provide a value' }
69                 : {};
70         },
71
72         hidden: function(element) {
73             return !isDelegate(getImplementationType(element));
74         }
75     });
76
77     return [delegateEntry];
78 }