cpee 2.1.56 → 2.1.57

Sign up to get free protection for your applications and to get access to all the features.
Files changed (53) hide show
  1. checksums.yaml +4 -4
  2. data/cockpit/css/resources-label.css +33 -32
  3. data/cockpit/css/resources-svg.css +2 -2
  4. data/cockpit/css/ui.css +2 -42
  5. data/cockpit/css/wfadaptor.css +9 -0
  6. data/cockpit/edit.html +15 -2
  7. data/cockpit/graph.html +12 -1
  8. data/cockpit/index.html +14 -1
  9. data/cockpit/js/details.js +1 -0
  10. data/cockpit/js/instance.js +29 -13
  11. data/cockpit/js/resources.js +59 -11
  12. data/cockpit/js/wfadaptor.js +10 -6
  13. data/cockpit/model.html +3 -2
  14. data/cockpit/themes/base.js +1506 -0
  15. data/cockpit/themes/compact/rngs/start.rng +10 -0
  16. data/cockpit/themes/compact/symbols/start_event.svg +1 -1
  17. data/cockpit/themes/compact/theme.js +8 -1487
  18. data/cockpit/themes/control/rngs/start.rng +10 -0
  19. data/cockpit/themes/control/symbols/start_event.svg +1 -1
  20. data/cockpit/themes/control/theme.js +277 -1334
  21. data/cockpit/themes/dataflow/rngs/start.rng +10 -0
  22. data/cockpit/themes/dataflow/symbols/start_event.svg +1 -1
  23. data/cockpit/themes/dataflow/theme.js +144 -1563
  24. data/cockpit/themes/default/rngs/start.rng +10 -0
  25. data/cockpit/themes/default/symbols/start_event.svg +1 -1
  26. data/cockpit/themes/default/theme.js +1 -1493
  27. data/cockpit/themes/extended/rngs/start.rng +10 -0
  28. data/cockpit/themes/extended/symbols/start_event.svg +1 -1
  29. data/cockpit/themes/extended/theme.js +81 -1529
  30. data/cockpit/themes/felix/symbols/start_event.svg +1 -1
  31. data/cockpit/themes/felix/theme.js +68 -1528
  32. data/cockpit/themes/model/symbols/start_event.svg +1 -1
  33. data/cockpit/themes/model/theme.js +735 -1383
  34. data/cockpit/themes/packed/rngs/start.rng +10 -0
  35. data/cockpit/themes/packed/symbols/start_event.svg +1 -1
  36. data/cockpit/themes/packed/theme.js +9 -1487
  37. data/cockpit/themes/preset/rngs/start.rng +10 -0
  38. data/cockpit/themes/preset/symbols/start_event.svg +1 -1
  39. data/cockpit/themes/preset/theme.js +1 -1493
  40. data/cockpit/track.html +11 -0
  41. data/cpee.gemspec +1 -1
  42. data/lib/properties/executionhandler.rng +1 -1
  43. data/lib/properties.xml +1 -1
  44. data/server/executionhandlers/ruby/connection.rb +8 -11
  45. data/server/executionhandlers/rust/backend/README.md +17 -0
  46. data/server/executionhandlers/rust/backend/compile.sh +5 -0
  47. data/server/executionhandlers/rust/backend/opts.yaml +6 -0
  48. data/server/executionhandlers/rust/execution.rb +84 -0
  49. data/server/routing/end.pid +1 -1
  50. data/server/routing/forward-events-00.pid +1 -1
  51. data/server/routing/forward-votes.pid +1 -1
  52. data/server/routing/persist.pid +1 -1
  53. metadata +8 -3
@@ -1,703 +1,74 @@
1
- function WFAdaptorManifestation(adaptor) {
2
- var self = this;
3
-
4
- this.adaptor = adaptor;
5
- this.resources = {};
6
- this.elements = {};
7
- this.events = {};
8
- this.compact = false;
9
- this.striped = true;
10
- this.endpoints = {};
11
- this.presstimer;
12
-
13
- //{{{ transform the details data to description parts based on rng
14
- this.source = function(base,opts) {
15
- if (base[0].namespaceURI == "http://relaxng.org/ns/structure/1.0") {
16
- $('#relaxngworker').empty();
17
- var rngw = new RelaxNGui(base,$('#relaxngworker'),self.adaptor.description.context_eval);
18
- var nnew = $(rngw.save().documentElement);
19
- return(nnew);
20
- } else {
21
- if (opts && opts == 'clone') {
22
- base = base.clone();
23
- if (base.attr('id')) {
24
- base.attr('id',self.adaptor.description.get_free_id());
25
- }
26
- base.find('*[id]').each(function(k,v){
27
- $(v).attr('id',self.adaptor.description.get_free_id(base));
28
- });
1
+ WFAdaptorManifestation = class extends WFAdaptorManifestationBase {
2
+ constructor(adaptor) {
3
+ super(adaptor);
4
+ var self = this;
5
+ this.striped = true;
6
+ this.elements.call.illustrator.label = function(node) { //{{{
7
+ var rep = $('body').attr('current-resources');
8
+ var ep = self.endpoints[$(node).attr('endpoint')];
9
+ var wait = $('_timing_wait',$(node).children('annotations')).text();
10
+ var threshold = $('_timing_threshold',$(node).children('annotations')).text();
11
+ var adur = $('_timing_avg',$(node).children('annotations')).text();
12
+ var lab = $('> label',$(node).children('parameters')).text().replace(/^['"]/,'').replace(/['"]$/,'');
13
+ var ret = [ { column: 'ID', value: $(node).attr('id') } ];
14
+ if (lab != '') {
15
+ ret.unshift( { column: 'Label', value: lab } );
29
16
  }
30
- return base;
31
- }
32
- }; //}}}
33
- //{{{ Return the svgid for the selected task
34
- this.selected = function(){
35
- var svgid = 'unknown';
36
- _.each(self.adaptor.illustrator.get_elements(),function(value,key) {
37
- if ($(value).hasClass('selected')) {
38
- svgid = $(value).attr('element-id');
17
+ if (wait != '') {
18
+ ret.push({ column: 'Wait', value: 'ω = ' + wait });
39
19
  }
40
- });
41
- return svgid;
42
- }; //}}}
43
- //{{{ Return the svgids for all marked tasks
44
- this.marked = function(){
45
- var svgid = [];
46
- _.each(self.adaptor.illustrator.get_elements(),function(value,key) {
47
- if ($(value).hasClass('marked')) {
48
- svgid.push($(value).attr('element-id'));
20
+ if (threshold != '') {
21
+ ret.push({ column: 'Threshold', value: 'κ = ' + threshold });
49
22
  }
50
- });
51
- return svgid;
52
- }; //}}}
53
- //{{{ Return the json for all marked tasks
54
- this.marked_text = function(){
55
- var nodes = [];
56
- var markymark = _.uniq(self.marked());
57
- $(markymark).each(function(key,svgid){
58
- var node = self.adaptor.description.get_node_by_svg_id(svgid);
59
- nodes.push($(node).serializePrettyXML());
60
- });
61
- return JSON.stringify(nodes);
62
- }; //}}}
63
- //{{{ Render the details from rng (right hand side of graph tab)
64
- this.update_details = function(svgid){
65
- var tab = $('#dat_details');
66
- var node = self.adaptor.description.get_node_by_svg_id(svgid).get(0);
67
- if (self.adaptor.description.elements[$(node).attr('svg-subtype')]) {
68
- save['details_target'] = { 'svgid': svgid, 'model': self.adaptor.description };
69
- var rng = self.adaptor.description.elements[$(node).attr('svg-subtype')].clone();
70
- if (save['endpoints_cache'][$(node).attr('endpoint')] && save['endpoints_cache'][$(node).attr('endpoint')].schema) {
71
- var schema = save['endpoints_cache'][$(node).attr('endpoint')].schema.documentElement;
72
- $(rng).find(' > element[name="parameters"] > element[name="arguments"]').replaceWith($(schema).clone());
73
- }
74
- if (save['endpoints_list'][$(node).attr('endpoint')] && (!save['endpoints_list'][$(node).attr('endpoint')].startsWith('http') || save['endpoints_list'][$(node).attr('endpoint')].match(/^https?-/))) {
75
- $(rng).find(' > element[name="parameters"] > element[name="method"]').remove();
76
- }
77
- var nn = $X($(node).serializeXML());
78
- nn.removeAttr('svg-id');
79
- nn.removeAttr('svg-type');
80
- nn.removeAttr('svg-subtype');
81
- nn.removeAttr('svg-label');
82
-
83
- tab.empty();
84
- save['details'] = new RelaxNGui(rng,tab,self.adaptor.description.context_eval,true);
85
- save['details'].content(nn);
86
-
87
- format_visual_forms();
88
- }
89
- }; //}}}
90
-
91
- function copyOrMove(menu,group,xml_node,mode) { //{{{
92
- var nodes = localStorage.getItem('marked');
93
-
94
- if (typeof(nodes) != "string") { return; }
95
-
96
- nodes = JSON.parse(nodes);
97
- $(nodes).each(function(key,str) {
98
- nodes[key] = $X(str);
99
- });
100
-
101
- var check1 = [];
102
- var check2 = [];
103
- $(nodes).each(function(key,node){
104
- check1.push($(node).attr('svg-type'));
105
- });
106
- $(group).each(function(key,value){
107
- check2.push(value.type);
108
- });
109
-
110
- if (nodes.length > 0 && _.uniq(check1).length == _.intersection(check1,check2).length) {
111
- if (myid == localStorage.getItem('marked_from')) {
112
- $(nodes).each(function(key,node){
113
- nodes[key] = self.adaptor.description.get_node_by_svg_id($(node).attr('svg-id'));
114
- });
115
- }
116
- nodes.reverse();
117
- var iconm = self.resources['arrow'].clone();
118
- var iconc = self.resources['arrow'].clone();
119
- iconm.children('.rfill').addClass('menu');
120
- if (myid == localStorage.getItem('marked_from')) {
121
- menu.push(
122
- {
123
- 'label': '<em>Move Marked Elements</em>',
124
- 'function_call': mode,
125
- 'menu_icon': iconm,
126
- 'type': undefined,
127
- 'params': [nodes, xml_node]
128
- }
129
- );
130
- }
131
- menu.push(
132
- {
133
- 'label': '<em>Copy Marked Elements</em>',
134
- 'function_call': mode,
135
- 'menu_icon': iconc,
136
- 'type': undefined,
137
- 'params': [nodes, xml_node, 'clone']
138
- }
139
- );
140
- }
141
- } //}}}
142
-
143
- function contextMenuHandling(svgid,e,child,sibling) { //{{{
144
- if (save['state'] != "ready" && save['state'] != "stopped") { return false; }
145
-
146
- var xml_node = self.adaptor.description.get_node_by_svg_id(svgid);
147
- var group = null;
148
- var menu = {};
149
-
150
- if (child) {
151
- group = self.elements[xml_node.get(0).tagName].permissible_children(xml_node,'into');
152
- if(group.length > 0) {
153
- menu['Insert into'] = group;
154
- copyOrMove(menu['Insert into'],group,xml_node,self.adaptor.description.insert_first_into);
155
- }
156
- if (self.elements[xml_node.get(0).tagName].permissible_children_expert) {
157
- group = self.elements[xml_node.get(0).tagName].permissible_children_expert(xml_node,'into');
158
- if(group.length > 0) {
159
- menu['Insert into (Experts Only!)'] = group;
160
- copyOrMove(menu['Insert into (Experts Only!)'],group,xml_node,self.adaptor.description.insert_first_into);
161
- }
162
- }
163
- }
164
- if (sibling) {
165
- group = self.elements[xml_node.parent().get(0).tagName].permissible_children(xml_node,'after');
166
- if(group.length > 0) {
167
- menu['Insert after'] = group;
168
- copyOrMove(menu['Insert after'],group,xml_node,self.adaptor.description.insert_after);
169
- }
170
- if (self.elements[xml_node.parent().get(0).tagName].permissible_children_expert) {
171
- group = self.elements[xml_node.parent().get(0).tagName].permissible_children_expert(xml_node,'after');
172
- if(group.length > 0) {
173
- menu['Insert after (Experts Only!)'] = group;
174
- copyOrMove(menu['Insert after (Experts Only!)'],group,xml_node,self.adaptor.description.insert_after);
175
- }
23
+ if (adur != '') {
24
+ ret.push({ column: 'Duration', value: '~T = ' + adur + 'm' });
176
25
  }
177
- }
178
-
179
- if(xml_node.get(0).tagName != 'description' && !self.elements[xml_node.get(0).tagName].neverdelete) {
180
- var icon = self.elements[xml_node.get(0).tagName].illustrator.svg.clone();
181
- icon.find('.rfill').addClass('menu');
182
- icon.find('.hfill').addClass('menu');
183
- menu['Delete'] = [{
184
- 'label': 'Remove Element',
185
- 'function_call': function(selector,target,selected){
186
- del_ui_pos(target)
187
- self.adaptor.description.remove(selector,target);
188
- localStorage.removeItem('marked');
189
- localStorage.removeItem('marked_from');
190
- },
191
- 'menu_icon': icon,
192
- 'type': undefined,
193
- 'params': [null, xml_node, self.selected()]
194
- }];
195
- var nodes = localStorage.getItem('marked');
196
- nodes = JSON.parse(nodes);
197
- if (nodes && nodes.length > 0) {
198
- var icond = self.resources['delete'].clone();
199
- icond.children('.standfat').addClass('menu');
200
- menu['Delete'].push({
201
- 'label': 'Remove Marked Elements',
202
- 'function_call': function(){
203
- $(nodes).each(function(key,str) {
204
- nodes[key] = $X(str);
205
- });
206
- let svgids = [];
207
- $(nodes).each(function(key,node){
208
- svgids.push($(node).attr('svg-id'));
209
- });
210
- svgids.sort((a,b) => {
211
- if (a > b) { return -1; }
212
- else if (a < b) { return 1; }
213
- else { return 0; }
214
- });
215
- svgids.forEach(svgid => {
216
- var target = self.adaptor.description.get_node_by_svg_id(svgid);
217
- del_ui_pos(target)
218
- self.adaptor.description.remove(null,target);
219
- localStorage.removeItem('marked');
220
- localStorage.removeItem('marked_from');
221
- });
222
- },
223
- 'menu_icon': icond,
224
- 'type': undefined,
225
- 'params': []
226
- })
227
- }
228
- }
229
- if($('> code', xml_node).length > 0 && xml_node.get(0).tagName == 'call') {
230
- var icon = self.elements.callmanipulate.illustrator.svg.clone();
231
- icon.children('.rfill:last').addClass('menu');
232
- menu['Delete'].push({
233
- 'label': 'Remove Scripts',
234
- 'function_call': self.adaptor.description.remove,
235
- 'menu_icon': icon,
236
- 'type': undefined,
237
- 'params': ['> code', xml_node]
238
- });
239
- }
240
- if (xml_node.get(0).tagName == "call" || xml_node.get(0).tagName == "manipulate" || xml_node.get(0).tagName == "stop") {
241
- var icon = self.elements.call.illustrator.svg.clone();
242
- icon.children('g.replace').addClass('passive');
243
- var vtarget = self.adaptor.illustrator.get_node_by_svg_id(svgid);
244
- if (vtarget.length > 0) {
245
- if (vtarget.parents('g.activities.passive, g.activities.active').length > 0) {
246
- menu['Position'] = [{
247
- 'label': 'No Execution from here',
248
- 'function_call': del_ui_pos,
249
- 'menu_icon': icon,
250
- 'type': undefined,
251
- 'params': xml_node
252
- }];
253
- } else {
254
- menu['Position'] = [{
255
- 'label': 'Execute from here',
256
- 'function_call': add_ui_pos,
257
- 'menu_icon': icon,
258
- 'type': undefined,
259
- 'params': xml_node
260
- }];
261
- }
26
+ return ret;
27
+ };
28
+ this.elements.manipulate.illustrator.label = function(node) {
29
+ var lab = $(node).attr('label');
30
+ if (lab) {
31
+ return [ { column: 'Label', value: lab.replace(/^['"]/,'').replace(/['"]$/,'') }, { column: 'ID', value: $(node).attr('id') } ];
32
+ } else {
33
+ return [ { column: 'ID', value: $(node).attr('id') } ];
262
34
  }
263
- }
264
- new CustomMenu(e).contextmenu(menu);
265
- } //}}}
266
-
267
- function positionHandling(svgid) {
268
- var xml_node = self.adaptor.description.get_node_by_svg_id(svgid);
269
- var vtarget = self.adaptor.illustrator.get_node_by_svg_id(svgid);
270
- if (vtarget.length > 0) {
271
- if (vtarget.parents('g.activities.passive, g.activities.active').length > 0) {
272
- del_ui_pos(xml_node);
273
- } else {
274
- add_ui_pos(xml_node);
35
+ }; //}}}
36
+ this.elements.stop.illustrator.label = function(node) { //{{{
37
+ return [ { column: 'ID', value: $(node).attr('id') } ];
38
+ }; //}}}
39
+ this.elements.loop_finish.illustrator.label = function(node) { //{{{
40
+ var avg = $('> _probability_avg',$(node).children('_probability')).text();
41
+ var ret = [ { column: 'Label', value: $(node).attr('condition') } ];
42
+ if (avg != '') {
43
+ ret.push({ column: 'Average', value: avg + 'x' });
275
44
  }
276
- }
277
- }
278
-
279
- // Events
280
- this.events.touchend = function(svgid, e) { // {{{
281
- clearTimeout(self.presstimer);
282
- } // }}}
283
- this.events.touchstart = function(svgid, e, child, sibling) { // {{{
284
- self.presstimer = window.setTimeout(function() { contextMenuHandling(svgid,e,child,sibling); },1000);
285
- return false;
286
- } // }}}
287
- this.events.mousedown = function(svgid, e, child, sibling) { // {{{
288
- if(e.button == 0) { // left-click
289
- } else if(e.button == 1) { // middle-click
290
- positionHandling(svgid);
291
- } else if(e.button == 2) { // right-click
292
- contextMenuHandling(svgid,e,child,sibling);
293
- }
294
- return false;
295
- } // }}}
296
- this.events.suppress = function(svgid, e, child, sibling) { // {{{
297
- return false;
298
- } // }}}
299
- this.events.click = function(svgid, e) { // {{{
300
- if (self.adaptor.description.get_node_by_svg_id(svgid).length == 0) {
301
- return;
302
- }
303
-
304
- self.adaptor.illustrator.get_elements().removeClass('selected');
305
- self.adaptor.illustrator.get_labels().removeClass('selected');
306
-
307
- if (e && (e.ctrlKey || e.metaKey)) {
308
- if (save['state'] != "ready" && save['state'] != "stopped") { return false; }
309
- var tab = $('#dat_details');
310
- tab.empty();
311
- var vtarget = self.adaptor.illustrator.get_node_by_svg_id(svgid);
312
- if (vtarget.length > 0) {
313
- var vt = vtarget.parents('g.element[element-id]');
314
- vt.toggleClass('marked');
315
- if (vt.hasClass('marked')) {
316
- localStorage.setItem('marked',self.marked_text());
317
- localStorage.setItem('marked_from',myid);
318
- } else {
319
- localStorage.removeItem('marked');
320
- localStorage.removeItem('marked_from');
321
- }
45
+ return ret;
46
+ }; //}}}
47
+ this.elements.otherwise.illustrator.label = function(node) { //{{{
48
+ var avg = $('> _probability_avg',$(node).children('_probability')).text();
49
+ return (avg == '' ? [] : [ { column: 'Average', value: avg + '%' } ]);
50
+ }; //}}}
51
+ this.elements.alternative.illustrator.label = function(node) { //{{{
52
+ var avg = $('> _probability_avg',$(node).children('_probability')).text();
53
+ var ret = [ { column: 'Label', value: $(node).attr('condition') } ];
54
+ if (avg != '') {
55
+ ret.push({ column: 'Average', value: avg + '%' });
322
56
  }
323
- } else if (e && (e.shiftKey)) {
324
- positionHandling(svgid);
325
- } else {
326
- self.adaptor.illustrator.get_elements().removeClass('marked');
327
- localStorage.removeItem('marked');
328
- localStorage.removeItem('marked_from');
329
-
330
- var vtarget = self.adaptor.illustrator.get_node_by_svg_id(svgid);
331
- if (vtarget.length > 0) {
332
- vtarget.parents('g.element[element-id]').addClass('selected');
57
+ return ret;
58
+ }; //}}}
59
+ this.elements.start.illustrator.label = function(node) { //{{{
60
+ return [ { column: 'Label'}, { column: 'ID' }, { column: 'Resource' }, { column: 'RP' }, { column: 'R#' } ];
61
+ }; //}}}
62
+ this.elements.loop_head.illustrator.label = function(node) { //{{{
63
+ var avg = $('> _probability_avg',$(node).children('_probability')).text();
64
+ var ret = [ { column: 'Label', value: $(node).attr('condition') } ];
65
+ if (avg != '') {
66
+ ret.push({ column: 'Average', value: avg + '' });
333
67
  }
334
- self.adaptor.illustrator.get_label_by_svg_id(svgid).addClass('selected');
335
-
336
- self.update_details(svgid);
337
- }
338
- } // }}}
339
- this.events.dblclick = function(svgid, e) { // {{{
340
- } // }}}
341
- this.events.mouseover = function(svgid, e) { // {{{
342
- self.adaptor.illustrator.svg.container.find('.tile[element-id = "' + svgid + '"]').css('display','block');
343
- self.adaptor.illustrator.svg.container.find('[element-id = "' + svgid + '"]').addClass('hover');
344
- self.adaptor.illustrator.svg.label_container.find('[element-id = "' + svgid + '"]').addClass('hover');
345
- return false;
346
- } // }}}
347
- this.events.mouseout = function(svgid, e) { // {{{
348
- self.adaptor.illustrator.svg.container.find('.tile[element-id = "' + svgid + '"]').css('display','none');
349
- self.adaptor.illustrator.svg.container.find('[element-id = "' + svgid + '"]').removeClass('hover');
350
- self.adaptor.illustrator.svg.label_container.find('[element-id = "' + svgid + '"]').removeClass('hover');
351
- return false;
352
- } // }}}
353
- this.events.dragstart = function (svgid, e) { //{{{
354
- } //}}}
355
-
356
- // other resources
357
- this.resources.arrow = self.adaptor.theme_dir + 'symbols/arrow.svg';
358
- this.resources.delete = self.adaptor.theme_dir + 'symbols/delete.svg';
359
-
360
- // Primitive Elements
361
- this.elements.call = { /*{{{*/
362
- 'type': 'primitive',
363
- 'illustrator': {//{{{
364
- 'endnodes': 'this',
365
- 'label': function(node){
366
- var rep = $('body').attr('current-resources');
367
- var ep = self.endpoints[$(node).attr('endpoint')];
368
- var wait = $('_timing_wait',$(node).children('annotations')).text();
369
- var threshold = $('_timing_threshold',$(node).children('annotations')).text();
370
- var adur = $('_timing_avg',$(node).children('annotations')).text();
371
- var lab = $('> label',$(node).children('parameters')).text().replace(/^['"]/,'').replace(/['"]$/,'');
372
- var ret = [ { column: 'ID', value: $(node).attr('id') } ];
373
- if (lab != '') {
374
- ret.unshift( { column: 'Label', value: lab } );
375
- }
376
- if (wait != '') {
377
- ret.push({ column: 'Wait', value: 'ω = ' + wait });
378
- }
379
- if (threshold != '') {
380
- ret.push({ column: 'Threshold', value: 'κ = ' + threshold });
381
- }
382
- if (adur != '') {
383
- ret.push({ column: 'Duration', value: '~T = ' + adur + 'm' });
384
- }
385
- return ret;
386
- },
387
- 'info': function(node){ return { 'element-endpoint': $(node).attr('endpoint') }; },
388
- 'resolve_symbol': function(node) {
389
- if ($('> annotations > _context_data_analysis > probes > probe', node).length > 0) {
390
- if ($('> code', node).length > 0) {
391
- return 'callmanipulate_sensor';
392
- } else {
393
- return 'call_sensor';
394
- }
395
- } else {
396
- if ($('> code', node).length > 0) {
397
- return 'callmanipulate';
398
- } else {
399
- return 'call';
400
- }
401
- }
402
- },
403
- 'svg': self.adaptor.theme_dir + 'symbols/call.svg'
404
- },//}}}
405
- 'description': self.adaptor.theme_dir + 'rngs/call.rng',
406
- 'permissible_children': function(node,mode) { //{{{
407
- if(node.children('code').length < 1)
408
- return [
409
- {'label': 'Scripts',
410
- 'function_call': self.adaptor.description.insert_last_into,
411
- 'menu_icon': self.elements.callmanipulate.illustrator.svg.clone(),
412
- 'type': undefined,
413
- 'params': [self.adaptor.description.elements.scripts, node]}
414
- ];
415
- return [];
416
- }, //}}}
417
- 'adaptor': {//{{{
418
- 'mousedown': function (node,e) { self.events.mousedown(node,e,true,true); },
419
- 'touchstart': function (node,e) { self.events.touchstart(node,e,true,true); },
420
- 'touchend': self.events.touchend,
421
- 'click': self.events.click,
422
- 'dragstart': self.events.dragstart,
423
- 'mouseover': self.events.mouseover,
424
- 'mouseout': self.events.mouseout
425
- }//}}}
426
- }; /*}}}*/
427
- this.elements.manipulate = { /*{{{*/
428
- 'type': 'primitive',
429
- 'illustrator': {//{{{
430
- 'endnodes': 'this',
431
- 'label': function(node){
432
- var lab = $(node).attr('label');
433
- if (lab) {
434
- return [ { column: 'Label', value: lab.replace(/^['"]/,'').replace(/['"]$/,'') }, { column: 'ID', value: $(node).attr('id') } ];
435
- } else {
436
- return [ { column: 'ID', value: $(node).attr('id') } ];
437
- }
438
- },
439
- 'svg': self.adaptor.theme_dir + 'symbols/manipulate.svg'
440
- },//}}}
441
- 'description': self.adaptor.theme_dir + 'rngs/manipulate.rng',
442
- 'permissible_children': function(node,mode) { //{{{
443
- return [];
444
- }, //}}}
445
- 'adaptor': {//{{{
446
- 'mousedown': function (node,e) { self.events.mousedown(node,e,false,true); },
447
- 'touchstart': function (node,e) { self.events.touchstart(node,e,false,true); },
448
- 'touchend': self.events.touchend,
449
- 'click': self.events.click,
450
- 'mouseover': self.events.mouseover,
451
- 'mouseout': self.events.mouseout
452
- }//}}}
453
- }; /*}}}*/
454
- this.elements.escape = { /*{{{*/
455
- 'type': 'primitive',
456
- 'illustrator': {//{{{
457
- 'endnodes': 'this',
458
- 'svg': self.adaptor.theme_dir + 'symbols/escape.svg'
459
- },//}}}
460
- 'description': self.adaptor.theme_dir + 'rngs/escape.rng',
461
- 'permissible_children': function(node,mode) { //{{{
462
- return [];
463
- }, //}}}
464
- 'adaptor': {//{{{
465
- 'mousedown': function (node,e) { self.events.mousedown(node,e,false,true); },
466
- 'touchstart': function (node,e) { self.events.touchstart(node,e,false,true); },
467
- 'touchend': self.events.touchend,
468
- 'click': self.events.click,
469
- 'mouseover': self.events.mouseover,
470
- 'mouseout': self.events.mouseout
471
- }//}}}
472
- }; /*}}}*/
473
- this.elements.stop = { /*{{{*/
474
- 'type': 'primitive',
475
- 'illustrator': {//{{{
476
- 'endnodes': 'this',
477
- 'label': function(node){
478
- return [ { column: 'ID', value: $(node).attr('id') } ];
479
- },
480
- 'svg': self.adaptor.theme_dir + 'symbols/stop.svg'
481
- },//}}}
482
- 'description': self.adaptor.theme_dir + 'rngs/stop.rng',
483
- 'permissible_children': function(node,mode) { //{{{
484
- return [];
485
- }, //}}}
486
- 'adaptor': {//{{{
487
- 'mousedown': function (node,e) { self.events.mousedown(node,e,false,true); },
488
- 'touchstart': function (node,e) { self.events.touchstart(node,e,false,true); },
489
- 'touchend': self.events.touchend,
490
- 'click': self.events.click,
491
- 'mouseover': self.events.mouseover,
492
- 'mouseout': self.events.mouseout
493
- }//}}}
494
- }; /*}}}*/
495
- this.elements.terminate = { /*{{{*/
496
- 'type': 'primitive',
497
- 'illustrator': {//{{{
498
- 'endnodes': 'this',
499
- 'final': true,
500
- 'svg': self.adaptor.theme_dir + 'symbols/terminate.svg'
501
- },//}}}
502
- 'description': self.adaptor.theme_dir + 'rngs/terminate.rng',
503
- 'permissible_children': function(node,mode) { //{{{
504
- return [];
505
- }, //}}}
506
- 'adaptor': {//{{{
507
- 'mousedown': function (node,e) { self.events.mousedown(node,e,false,false); },
508
- 'touchstart': function (node,e) { self.events.touchstart(node,e,false,false); },
509
- 'touchend': self.events.touchend,
510
- 'mouseover': self.events.mouseover,
511
- 'mouseout': self.events.mouseout
512
- }//}}}
513
- }; /*}}}*/
514
- this.elements.end = { /*{{{*/
515
- 'type': 'primitive',
516
- 'illustrator': {//{{{
517
- 'endnodes': 'this',
518
- 'svg': self.adaptor.theme_dir + 'symbols/end.svg'
519
- }, //}}}
520
- 'adaptor': {//{{{
521
- 'mousedown': function (node,e) { self.events.suppress(); }
522
- }//}}}
523
- }; /*}}}*/
524
- this.elements.event_end = { /*{{{*/
525
- 'type': 'primitive',
526
- 'illustrator': {//{{{
527
- 'endnodes': 'this',
528
- 'svg': self.adaptor.theme_dir + 'symbols/event_end.svg'
529
- }, //}}}
530
- 'adaptor': {//{{{
531
- 'mousedown': function (node,e) { self.events.suppress(); },
532
- 'click': self.events.click,
533
- 'dblclick': self.events.dblclick,
534
- 'mouseover': self.events.mouseover,
535
- 'mouseout': self.events.mouseout
536
- }//}}}
537
- }; /*}}}*/
538
- this.elements.choose_finish = { /*{{{*/
539
- 'type': 'primitive',
540
- 'illustrator': {//{{{
541
- 'endnodes': 'this',
542
- 'svg': self.adaptor.theme_dir + 'symbols/choose_inclusive.svg',
543
- 'resolve_symbol': function(node) {
544
- if($(node).attr('mode') == 'exclusive') {
545
- return 'choose_exclusive_finish';
546
- } else {
547
- return 'choose_inclusive_finish';
548
- }
549
- },
550
- }, //}}}
551
- 'adaptor': {//{{{
552
- 'mousedown': function (node,e) { self.events.mousedown(node,e,true,true); },
553
- 'touchstart': function (node,e) { self.events.touchstart(node,e,true,true); },
554
- 'touchend': self.events.touchend,
555
- 'click': self.events.click,
556
- 'dblclick': self.events.dblclick,
557
- 'mouseover': self.events.mouseover,
558
- 'mouseout': self.events.mouseout
559
- }//}}}
560
- }; /*}}}*/
561
- this.elements.loop_finish = { /*{{{*/
562
- 'type': 'primitive',
563
- 'illustrator': {//{{{
564
- 'endnodes': 'this',
565
- 'closeblock': true,
566
- 'label': function(node){
567
- var avg = $('> _probability_avg',$(node).children('_probability')).text();
568
- var ret = [ { column: 'Label', value: $(node).attr('condition') } ];
569
- if (avg != '') {
570
- ret.push({ column: 'Average', value: avg + 'x' });
571
- }
572
- return ret;
573
- },
574
- 'svg': self.adaptor.theme_dir + 'symbols/choose_exclusive.svg',
575
- }, //}}}
576
- 'adaptor': {//{{{
577
- 'mousedown': function (node,e) { self.events.mousedown(node,e,true,true); },
578
- 'touchstart': function (node,e) { self.events.touchstart(node,e,true,true); },
579
- 'touchend': self.events.touchend,
580
- 'click': self.events.click,
581
- 'dblclick': self.events.dblclick,
582
- 'mouseover': self.events.mouseover,
583
- 'mouseout': self.events.mouseout
584
- }//}}}
585
- }; /*}}}*/
586
- this.elements.parallel_finish = { /*{{{*/
587
- 'type': 'primitive',
588
- 'illustrator': {//{{{
589
- 'endnodes': 'this',
590
- 'svg': self.adaptor.theme_dir + 'symbols/parallel.svg',
591
- 'resolve_symbol': function(node) {
592
- if($(node).children(':not(parallel_branch)').length > 0) {
593
- return 'parallel_complex';
594
- } else if($(node).attr('cancel') == 'last' && $(node).attr('wait') == '-1') {
595
- return 'parallel_simple';
596
- } else if($(node).attr('cancel') == 'first' && $(node).attr('wait') == '-1') {
597
- return 'parallel_event_all';
598
- } else if($(node).attr('cancel') == 'first' && $(node).attr('wait') == '1') {
599
- return 'parallel_event_one';
600
- } else {
601
- return 'parallel_complex';
602
- }
603
- },
604
- }, //}}}
605
- 'adaptor': {//{{{
606
- 'mousedown': function (node,e) { self.events.mousedown(node,e,true,true); },
607
- 'touchstart': function (node,e) { self.events.touchstart(node,e,true,true); },
608
- 'touchend': self.events.touchend,
609
- 'click': self.events.click,
610
- 'dblclick': self.events.dblclick,
611
- 'mouseover': self.events.mouseover,
612
- 'mouseout': self.events.mouseout
613
- }//}}}
614
- }; /*}}}*/
68
+ return ret;
69
+ }; //}}}
615
70
 
616
- // Complex Elements
617
- this.elements.choose = { /*{{{*/
618
- 'type': 'complex',
619
- 'illustrator': {//{{{
620
- 'label': function(node){ return [ { column: 'Label', value: $(node).attr('mode') == 'exclusive' ? 'exclusive' : 'inclusive' } ]; },
621
- 'endnodes': 'aggregate',
622
- 'closeblock': false,
623
- 'closing_symbol': 'choose_finish',
624
- 'expansion': function(node) {
625
- return 'horizontal';
626
- },
627
- 'resolve_symbol': function(node) {
628
- if($(node).attr('mode') == 'exclusive') {
629
- return 'choose_exclusive';
630
- } else {
631
- return 'choose_inclusive';
632
- }
633
- },
634
- 'col_shift': function(node) {
635
- return false;
636
- },
637
- 'svg': self.adaptor.theme_dir + 'symbols/choose.svg'
638
- },//}}}
639
- 'description': self.adaptor.theme_dir + 'rngs/choose.rng',
640
- 'permissible_children': function(node,mode) { //{{{
641
- var func = null;
642
- if (mode == 'into') { func = self.adaptor.description.insert_first_into }
643
- else { func = self.adaptor.description.insert_after }
644
- if(node.children('parallel_branch').length > 0) {
645
- return [{'label': 'Parallel Branch',
646
- 'function_call': func,
647
- 'menu_icon': self.elements.parallel_branch.illustrator.svg.clone(),
648
- 'type': 'parallel_branch',
649
- 'params': [self.adaptor.description.elements.parallel_branch, node]}];
650
- }
651
- var childs = [{'label': 'Alternative',
652
- 'function_call': func,
653
- 'menu_icon': self.elements.alternative.illustrator.svg.clone(),
654
- 'type': 'alternative',
655
- 'params': [self.adaptor.description.elements.alternative, node]}];
656
- if((node.children('otherwise').length == 0) && node.parents('parallel').length == node.parents('parallel_branch').length && node.parent('choose').length == 0)
657
- childs.push({'label': 'Otherwise',
658
- 'function_call': self.adaptor.description.insert_last_into,
659
- 'menu_icon': self.elements.otherwise.illustrator.svg.clone(),
660
- 'type': 'otherwise',
661
- 'params': [self.adaptor.description.elements.otherwise, node]});
662
- if(node.parents('parallel').length > node.parents('parallel_branch').length)
663
- childs.push({'label': 'Parallel Branch',
664
- 'function_call': func,
665
- 'menu_icon': self.elements.parallel_branch.illustrator.svg.clone(),
666
- 'type': 'parallel_branch',
667
- 'params': [self.adaptor.description.elements.parallel_branch, node]});
668
- return childs;
669
- }, //}}}
670
- 'adaptor': {//{{{
671
- 'mousedown': function (node,e) { self.events.mousedown(node,e,true,true); },
672
- 'touchstart': function (node,e) { self.events.touchstart(node,e,true,true); },
673
- 'touchend': self.events.touchend,
674
- 'click': self.events.click,
675
- 'dblclick': self.events.dblclick,
676
- 'mouseover': self.events.mouseover,
677
- 'mouseout': self.events.mouseout
678
- }//}}}
679
- }; /*}}}*/
680
- this.elements.otherwise = { /*{{{*/
681
- 'type': 'complex',
682
- 'illustrator': {//{{{
683
- 'label': function(node){
684
- var avg = $('> _probability_avg',$(node).children('_probability')).text();
685
- return (avg == '' ? [] : [ { column: 'Average', value: avg + '%' } ]);
686
- },
687
- 'endnodes': 'passthrough',
688
- 'closeblock': false,
689
- 'noarrow': true,
690
- 'expansion': function(node) {
691
- return 'vertical';
692
- },
693
- 'col_shift': function(node) {
694
- return false;
695
- },
696
- 'svg': self.adaptor.theme_dir + 'symbols/otherwise.svg'
697
- },//}}}
698
- 'description': self.adaptor.theme_dir + 'rngs/otherwise.rng',
699
- 'neverdelete': true,
700
- 'permissible_children': function(node,mode) { //{{{
71
+ this.elements.otherwise.permissible_children = function(node,mode) { //{{{
701
72
  var func = null;
702
73
  var childs = null;
703
74
  if (mode == 'into') { func = self.adaptor.description.insert_first_into }
@@ -759,41 +130,8 @@ function WFAdaptorManifestation(adaptor) {
759
130
  });
760
131
  }
761
132
  return childs;
762
- }, //}}}
763
- 'adaptor': {//{{{
764
- 'mousedown': function (node,e) { self.events.mousedown(node,e,true,false); },
765
- 'touchstart': function (node,e) { self.events.touchstart(node,e,true,false); },
766
- 'touchend': self.events.touchend,
767
- 'click': self.events.click,
768
- 'dblclick': self.events.dblclick,
769
- 'mouseover': self.events.mouseover,
770
- 'mouseout': self.events.mouseout,
771
- }//}}}
772
- }; /*}}}*/
773
- this.elements.alternative = { /*{{{*/
774
- 'type': 'complex',
775
- 'illustrator': {//{{{
776
- 'label': function(node){
777
- var avg = $('> _probability_avg',$(node).children('_probability')).text();
778
- var ret = [ { column: 'Label', value: $(node).attr('condition') } ];
779
- if (avg != '') {
780
- ret.push({ column: 'Average', value: avg + '%' });
781
- }
782
- return ret;
783
- },
784
- 'endnodes': 'passthrough',
785
- 'noarrow': true,
786
- 'closeblock':false,
787
- 'expansion': function(node) {
788
- return 'vertical';
789
- },
790
- 'col_shift': function(node) {
791
- return false;
792
- },
793
- 'svg': self.adaptor.theme_dir + 'symbols/alternative.svg'
794
- },//}}}
795
- 'description': self.adaptor.theme_dir + 'rngs/alternative.rng',
796
- 'permissible_children': function(node,mode) { //{{{
133
+ }; //}}}
134
+ this.elements.alternative.permissible_children = function(node,mode) { //{{{
797
135
  if (mode == 'into') { func = self.adaptor.description.insert_first_into }
798
136
  else { func = self.adaptor.description.insert_after }
799
137
  if(node.parents('parallel').length > node.parents('parallel_branch').length && node.get(0).tagName == 'alternative') {
@@ -860,37 +198,8 @@ function WFAdaptorManifestation(adaptor) {
860
198
  });
861
199
  }
862
200
  return childs;
863
- }, //}}}
864
- 'adaptor': {//{{{
865
- 'mousedown': function (node,e) { self.events.mousedown(node,e,true,true); },
866
- 'touchstart': function (node,e) { self.events.touchstart(node,e,true,true); },
867
- 'touchend': self.events.touchend,
868
- 'click': self.events.click,
869
- 'dblclick': self.events.dblclick,
870
- 'mouseover': self.events.mouseover,
871
- 'mouseout': self.events.mouseout,
872
- }//}}}
873
- }; /*}}}*/
874
- this.elements.loop = { /*{{{*/
875
- 'type': 'complex',
876
- 'illustrator': {//{{{
877
- 'resolve_symbol': function(node) {
878
- if($(node).attr('mode') == 'pre_test') {
879
- return 'loop_head';
880
- } else {
881
- return 'loop_tail';
882
- }
883
- },
884
- 'expansion': function(node) {
885
- return 'vertical';
886
- },
887
- 'col_shift': function(node) {
888
- return true;
889
- },
890
- 'svg': self.adaptor.theme_dir + 'symbols/loop.svg'
891
- },// }}}
892
- 'description': self.adaptor.theme_dir + 'rngs/loop.rng',
893
- 'permissible_children': function(node,mode) { //{{{
201
+ }; //}}}
202
+ this.elements.loop.permissible_children = function(node,mode) { //{{{
894
203
  var func = null;
895
204
  if (mode == 'into') { func = self.adaptor.description.insert_first_into }
896
205
  else { func = self.adaptor.description.insert_after }
@@ -945,123 +254,28 @@ function WFAdaptorManifestation(adaptor) {
945
254
  'params': [self.adaptor.description.elements.critical, node]
946
255
  });
947
256
  }
948
- if(node.parent('parallel').length > node.parent('parallel_branch').length) {
949
- childs.push({'label': 'Parallel Branch',
950
- 'function_call': func,
951
- 'menu_icon': self.elements.parallel_branch.illustrator.svg.clone(),
952
- 'type': 'parallel_branch',
953
- 'params': [self.adaptor.description.elements.parallel_branch, node]}
954
- );
955
- } else {
956
- childs.push({'label': 'Parallel',
957
- 'function_call': func,
958
- 'menu_icon': self.elements.parallel.illustrator.svg.clone(),
959
- 'type': 'parallel',
960
- 'params': [self.adaptor.description.elements.parallel, node]}
961
- );
962
- }
963
- return childs;
964
- }, //}}}
965
- 'adaptor': {//{{{
966
- 'mousedown': function (node,e) { self.events.mousedown(node,e,true,true); },
967
- 'touchstart': function (node,e) { self.events.touchstart(node,e,true,true); },
968
- 'touchend': self.events.touchend,
969
- 'click': self.events.click,
970
- 'dblclick': self.events.dblclick,
971
- 'mouseover': self.events.mouseover,
972
- 'mouseout': self.events.mouseout,
973
- }//}}}
974
- }; /*}}}*/
975
- this.elements.closed_loop = { /*{{{*/
976
- 'type': 'complex',
977
- 'illustrator': {//{{{
978
- 'endnodes': 'aggregate',
979
- 'closeblock': false,
980
- 'col_shift': function(node) {
981
- return true;
982
- },
983
- 'closing_symbol': 'closed_loop_finish',
984
- 'expansion': function(node) {
985
- return 'horizontal';
986
- },
987
- 'label': function(node){
988
- var avg = $('> _probability_avg',$(node).children('_probability')).text();
989
- var ret = [ { column: 'Label', value: ($(node).attr('overrun') + ', ' + $(node).attr('execution')) } ];
990
- if (avg != '') {
991
- ret.push({ column: 'Average', value: avg + '%' });
992
- }
993
- return ret;
994
- ,
995
- 'svg': self.adaptor.theme_dir + 'symbols/closed_loop.svg'
996
- },//}}}
997
- 'description': self.adaptor.theme_dir + 'rngs/closed_loop.rng',
998
- 'permissible_children': function(node,mode) { //{{{
999
- var func = null;
1000
- if (mode == 'into') { func = self.adaptor.description.insert_first_into }
1001
- else { func = self.adaptor.description.insert_after }
1002
- var childs = [
1003
- {'label': 'Measuring',
1004
- 'function_call': func,
1005
- 'menu_icon': self.elements.closed_loop_measuring.illustrator.svg.clone(),
1006
- 'type': 'closed_loop_measuring',
1007
- 'params': [self.adaptor.description.elements.closed_loop_measuring, node]} ,
1008
- {'label': 'Control',
1009
- 'function_call': func,
1010
- 'menu_icon': self.elements.closed_loop_control.illustrator.svg.clone(),
1011
- 'type': 'closed_loop_control',
1012
- 'params': [self.adaptor.description.elements.closed_loop_control, node]},
1013
- {'label': 'Cancel',
1014
- 'function_call': func,
1015
- 'menu_icon': self.elements.closed_loop_cancel.illustrator.svg.clone(),
1016
- 'type': 'closed_loop_cancel',
1017
- 'params': [self.adaptor.description.elements.closed_loop_cancel, node]}
1018
- ];
1019
- return childs;
1020
- }, //}}}
1021
- 'adaptor': {//{{{
1022
- 'mousedown': function (node,e) { self.events.mousedown(node,e,true,true); },
1023
- 'touchstart': function (node,e) { self.events.touchstart(node,e,true,true); },
1024
- 'touchend': self.events.touchend,
1025
- 'click': self.events.click,
1026
- 'dblclick': self.events.dblclick,
1027
- 'mouseover': self.events.mouseover,
1028
- 'mouseout': self.events.mouseout,
1029
- }//}}}
1030
- }; /*}}}*/
1031
- this.elements.closed_loop_measuring = { /*{{{*/
1032
- 'type': 'complex',
1033
- 'illustrator': {//{{{
1034
- 'endnodes': 'passthrough',
1035
- 'closeblock': false,
1036
- 'noarrow': true,
1037
- 'expansion': function(node) {
1038
- return 'vertical';
1039
- },
1040
- 'col_shift': function(node) {
1041
- return false;
1042
- },
1043
- 'label': function(node){
1044
- var vals = [];
1045
- $('> value',$(node).children('_expected')).each((k,v) => {
1046
- vals.push($(v).text());
1047
- });
1048
- var valtext = '';
1049
- if (vals.length > 0) {
1050
- valtext = ' (' + vals.join(', ') + ')';
1051
- } else {
1052
- valtext = '';
1053
- }
1054
- var ret = [ { column: 'Label', value: 'measure: t = ' + $(node).attr('ctime') + ' ms' + valtext } ];
1055
- return ret;
1056
- },
1057
- 'svg': self.adaptor.theme_dir + 'symbols/closed_loop_measuring.svg'
1058
- },//}}}
1059
- 'description': self.adaptor.theme_dir + 'rngs/closed_loop_measuring.rng',
1060
- 'permissible_children': function(node,mode) { //{{{
257
+ if(node.parent('parallel').length > node.parent('parallel_branch').length) {
258
+ childs.push({'label': 'Parallel Branch',
259
+ 'function_call': func,
260
+ 'menu_icon': self.elements.parallel_branch.illustrator.svg.clone(),
261
+ 'type': 'parallel_branch',
262
+ 'params': [self.adaptor.description.elements.parallel_branch, node]}
263
+ );
264
+ } else {
265
+ childs.push({'label': 'Parallel',
266
+ 'function_call': func,
267
+ 'menu_icon': self.elements.parallel.illustrator.svg.clone(),
268
+ 'type': 'parallel',
269
+ 'params': [self.adaptor.description.elements.parallel, node]}
270
+ );
271
+ }
272
+ return childs;
273
+ }; //}}}
274
+ this.elements.parallel.permissible_children_expert = function(node,mode) { //{{{
1061
275
  var func = null;
1062
- if (mode == 'into') { func = self.adaptor.description.insert_first_into }
276
+ if (mode.match(/into/)) { func = self.adaptor.description.insert_first_into }
1063
277
  else { func = self.adaptor.description.insert_after }
1064
- var childs = [
278
+ var childs = [
1065
279
  {'label': 'Service Call with Scripts',
1066
280
  'function_call': func,
1067
281
  'menu_icon': self.elements.callmanipulate.illustrator.svg.clone(),
@@ -1077,11 +291,6 @@ function WFAdaptorManifestation(adaptor) {
1077
291
  'menu_icon': self.elements.manipulate.illustrator.svg.clone(),
1078
292
  'type': 'manipulate',
1079
293
  'params': [self.adaptor.description.elements.manipulate, node]},
1080
- {'label': 'Parallel',
1081
- 'function_call': func,
1082
- 'menu_icon': self.elements.parallel.illustrator.svg.clone(),
1083
- 'type': 'parallel',
1084
- 'params': [self.adaptor.description.elements.parallel, node]},
1085
294
  {'label': 'Decision',
1086
295
  'function_call': func,
1087
296
  'menu_icon': self.elements.choose.illustrator.svg.clone(),
@@ -1092,54 +301,26 @@ function WFAdaptorManifestation(adaptor) {
1092
301
  'menu_icon': self.elements.loop.illustrator.svg.clone(),
1093
302
  'type': 'loop',
1094
303
  'params': [self.adaptor.description.elements.loop, node]},
304
+ {'label': 'Closed Loop',
305
+ 'function_call': func,
306
+ 'menu_icon': self.elements.closed_loop.illustrator.svg.clone(),
307
+ 'type': 'closed_loop',
308
+ 'params': [self.adaptor.description.elements.closed_loop, node]},
1095
309
  {'label': 'Stop',
1096
310
  'function_call': func,
1097
311
  'menu_icon': self.elements.stop.illustrator.svg.clone(),
1098
312
  'type': 'stop',
1099
313
  'params': [self.adaptor.description.elements.stop, node]}
1100
314
  ];
315
+ if(node.get(0).tagName != 'parallel')
316
+ childs.push({'label': 'Parallel',
317
+ 'function_call': self.adaptor.description.insert_last_into,
318
+ 'menu_icon': self.elements.parallel.illustrator.svg.clone(),
319
+ 'type': 'parallel',
320
+ 'params': [self.adaptor.description.elements.parallel, node]});
1101
321
  return childs;
1102
- }, //}}}
1103
- 'adaptor': {//{{{
1104
- 'mousedown': function (node,e) { self.events.mousedown(node,e,true,true); },
1105
- 'touchstart': function (node,e) { self.events.touchstart(node,e,true,true); },
1106
- 'touchend': self.events.touchend,
1107
- 'click': self.events.click,
1108
- 'dblclick': self.events.dblclick,
1109
- 'mouseover': self.events.mouseover,
1110
- 'mouseout': self.events.mouseout,
1111
- }//}}}
1112
- }; /*}}}*/
1113
- this.elements.closed_loop_control = { /*{{{*/
1114
- 'type': 'complex',
1115
- 'illustrator': {//{{{
1116
- 'endnodes': 'passthrough',
1117
- 'closeblock': false,
1118
- 'noarrow': true,
1119
- 'expansion': function(node) {
1120
- return 'vertical';
1121
- },
1122
- 'col_shift': function(node) {
1123
- return false;
1124
- },
1125
- 'label': function(node){
1126
- var vals = [];
1127
- $('> change > value',$(node).children('_expected')).each((k,v) => {
1128
- vals.push($(v).text());
1129
- });
1130
- var valtext = '';
1131
- if (vals.length > 0) {
1132
- valtext = ' (' + vals.join(', ') + ')';
1133
- } else {
1134
- valtext = '';
1135
- }
1136
- var ret = [ { column: 'Label', value: 'control: t = ' + $(node).attr('ctime') + ' ms' + valtext } ];
1137
- return ret;
1138
- },
1139
- 'svg': self.adaptor.theme_dir + 'symbols/closed_loop_control.svg'
1140
- },//}}}
1141
- 'description': self.adaptor.theme_dir + 'rngs/closed_loop_control.rng',
1142
- 'permissible_children': function(node,mode) { //{{{
322
+ }; //}}}
323
+ this.elements.parallel_branch.permissible_children = function(node,mode) { //{{{
1143
324
  var func = null;
1144
325
  if (mode == 'into') { func = self.adaptor.description.insert_first_into }
1145
326
  else { func = self.adaptor.description.insert_after }
@@ -1154,11 +335,6 @@ function WFAdaptorManifestation(adaptor) {
1154
335
  'menu_icon': self.elements.call.illustrator.svg.clone(),
1155
336
  'type': 'call',
1156
337
  'params': [self.adaptor.description.elements.call, node]},
1157
- {'label': 'Control',
1158
- 'function_call': func,
1159
- 'menu_icon': self.elements.closed_loop_control.illustrator.svg.clone(),
1160
- 'type': 'closed_loop_control',
1161
- 'params': [self.adaptor.description.elements.closed_loop_control, node]},
1162
338
  {'label': 'Script',
1163
339
  'function_call': func,
1164
340
  'menu_icon': self.elements.manipulate.illustrator.svg.clone(),
@@ -1179,44 +355,37 @@ function WFAdaptorManifestation(adaptor) {
1179
355
  'menu_icon': self.elements.loop.illustrator.svg.clone(),
1180
356
  'type': 'loop',
1181
357
  'params': [self.adaptor.description.elements.loop, node]},
358
+ {'label': 'Closed Loop',
359
+ 'function_call': func,
360
+ 'menu_icon': self.elements.closed_loop.illustrator.svg.clone(),
361
+ 'type': 'closed_loop',
362
+ 'params': [self.adaptor.description.elements.closed_loop, node]},
363
+ {'label': 'Terminate',
364
+ 'function_call': func,
365
+ 'menu_icon': self.elements.terminate.illustrator.svg.clone(),
366
+ 'type': 'terminate',
367
+ 'params': [self.adaptor.description.elements.terminate, node]},
1182
368
  {'label': 'Stop',
1183
369
  'function_call': func,
1184
370
  'menu_icon': self.elements.stop.illustrator.svg.clone(),
1185
371
  'type': 'stop',
1186
- 'params': [self.adaptor.description.elements.stop, node]}
372
+ 'params': [self.adaptor.description.elements.stop, node]},
373
+ {'label': 'Critical',
374
+ 'function_call': func,
375
+ 'menu_icon': self.elements.critical.illustrator.svg.clone(),
376
+ 'type': 'critical',
377
+ 'params': [self.adaptor.description.elements.critical, node]}
1187
378
  ];
379
+ if(node.parents('choose').length > node.parents('alternative, otherwise').length && node.get(0).tagName == 'parallel_branch') {
380
+ return [{'label': 'Alternative',
381
+ 'function_call': func,
382
+ 'menu_icon': self.elements.alternative.illustrator.svg.clone(),
383
+ 'type': 'alternative',
384
+ 'params': [self.adaptor.description.elements.alternative, node]}];
385
+ }
1188
386
  return childs;
1189
- }, //}}}
1190
- 'adaptor': {//{{{
1191
- 'mousedown': function (node,e) { self.events.mousedown(node,e,true,true); },
1192
- 'touchstart': function (node,e) { self.events.touchstart(node,e,true,true); },
1193
- 'touchend': self.events.touchend,
1194
- 'click': self.events.click,
1195
- 'dblclick': self.events.dblclick,
1196
- 'mouseover': self.events.mouseover,
1197
- 'mouseout': self.events.mouseout,
1198
- }//}}}
1199
- }; /*}}}*/
1200
- this.elements.closed_loop_cancel = { /*{{{*/
1201
- 'type': 'complex',
1202
- 'illustrator': {//{{{
1203
- 'endnodes': 'passthrough',
1204
- 'closeblock': false,
1205
- 'noarrow': true,
1206
- 'expansion': function(node) {
1207
- return 'vertical';
1208
- },
1209
- 'col_shift': function(node) {
1210
- return false;
1211
- },
1212
- 'label': function(node){
1213
- var ret = [ { column: 'Label', value: $(node).attr('condition') } ];
1214
- return ret;
1215
- },
1216
- 'svg': self.adaptor.theme_dir + 'symbols/closed_loop_cancel.svg'
1217
- },//}}}
1218
- 'description': self.adaptor.theme_dir + 'rngs/closed_loop_cancel.rng',
1219
- 'permissible_children': function(node,mode) { //{{{
387
+ }; //}}}
388
+ this.elements.critical.permissible_children = function(node,mode) { //{{{
1220
389
  var func = null;
1221
390
  if (mode == 'into') { func = self.adaptor.description.insert_first_into }
1222
391
  else { func = self.adaptor.description.insert_after }
@@ -1251,68 +420,38 @@ function WFAdaptorManifestation(adaptor) {
1251
420
  'menu_icon': self.elements.loop.illustrator.svg.clone(),
1252
421
  'type': 'loop',
1253
422
  'params': [self.adaptor.description.elements.loop, node]},
423
+ {'label': 'Closed Loop',
424
+ 'function_call': func,
425
+ 'menu_icon': self.elements.closed_loop.illustrator.svg.clone(),
426
+ 'type': 'closed_loop',
427
+ 'params': [self.adaptor.description.elements.closed_loop, node]},
428
+ {'label': 'Terminate',
429
+ 'function_call': func,
430
+ 'menu_icon': self.elements.terminate.illustrator.svg.clone(),
431
+ 'type': 'terminate',
432
+ 'params': [self.adaptor.description.elements.terminate, node]},
1254
433
  {'label': 'Stop',
1255
434
  'function_call': func,
1256
435
  'menu_icon': self.elements.stop.illustrator.svg.clone(),
1257
436
  'type': 'stop',
1258
437
  'params': [self.adaptor.description.elements.stop, node]}
1259
438
  ];
439
+ if(node.parent('parallel_branch').length > 0) {
440
+ childs.push({
441
+ 'label': 'Critical',
442
+ 'function_call': func,
443
+ 'menu_icon': self.elements.critical.illustrator.svg.clone(),
444
+ 'type': 'critical',
445
+ 'params': [self.adaptor.description.elements.critical, node]
446
+ });
447
+ }
1260
448
  return childs;
1261
- }, //}}}
1262
- 'adaptor': {//{{{
1263
- 'mousedown': function (node,e) { self.events.mousedown(node,e,true,true); },
1264
- 'touchstart': function (node,e) { self.events.touchstart(node,e,true,true); },
1265
- 'touchend': self.events.touchend,
1266
- 'click': self.events.click,
1267
- 'dblclick': self.events.dblclick,
1268
- 'mouseover': self.events.mouseover,
1269
- 'mouseout': self.events.mouseout,
1270
- }//}}}
1271
- }; /*}}}*/
1272
- this.elements.parallel = { /*{{{*/
1273
- 'type': 'complex',
1274
- 'illustrator': {//{{{
1275
- 'endnodes': 'aggregate',
1276
- 'closeblock': false,
1277
- 'closing_symbol': 'parallel_finish',
1278
- 'expansion': function(node) {
1279
- // check if any sibling other than 'parallel_branch' is present
1280
- if($(node).children(':not(parallel_branch)').length > 0) return 'vertical';
1281
- return 'horizontal';
1282
- },
1283
- 'col_shift': function(node) {
1284
- return true;
1285
- },
1286
- 'svg': self.adaptor.theme_dir + 'symbols/parallel.svg',
1287
- 'resolve_symbol': function(node) {
1288
- if($(node).attr('cancel') == 'last') {
1289
- return 'parallel_start';
1290
- } else if($(node).attr('cancel') == 'first' && $(node).attr('wait') == 1) {
1291
- return 'parallel_eventbased_exclusive';
1292
- } else {
1293
- return 'parallel_eventbased_parallel';
1294
- }
1295
- },
1296
- },//}}}
1297
- 'description': self.adaptor.theme_dir + 'rngs/parallel.rng',
1298
- 'permissible_children': function(node,mode) { //{{{
449
+ }; //}}}
450
+ this.elements.start.permissible_children = function(node,mode) { //{{{
1299
451
  var func = null;
1300
452
  if (mode == 'into') { func = self.adaptor.description.insert_first_into }
1301
453
  else { func = self.adaptor.description.insert_after }
1302
- var childs = [
1303
- {'label': 'Parallel Branch',
1304
- 'function_call': func,
1305
- 'menu_icon': self.elements.parallel_branch.illustrator.svg.clone(),
1306
- 'type': 'parallel_branch',
1307
- 'params': [self.adaptor.description.elements.parallel_branch, node]},
1308
- ];
1309
- return childs;
1310
- }, //}}}
1311
- 'permissible_children_expert': function(node,mode) { //{{{
1312
- var func = null;
1313
- if (mode.match(/into/)) { func = self.adaptor.description.insert_first_into }
1314
- else { func = self.adaptor.description.insert_after }
1315
- var childs = [
454
+ var childs = [
1316
455
  {'label': 'Service Call with Scripts',
1317
456
  'function_call': func,
1318
457
  'menu_icon': self.elements.callmanipulate.illustrator.svg.clone(),
@@ -1328,6 +467,11 @@ function WFAdaptorManifestation(adaptor) {
1328
467
  'menu_icon': self.elements.manipulate.illustrator.svg.clone(),
1329
468
  'type': 'manipulate',
1330
469
  'params': [self.adaptor.description.elements.manipulate, node]},
470
+ {'label': 'Parallel',
471
+ 'function_call': func,
472
+ 'menu_icon': self.elements.parallel.illustrator.svg.clone(),
473
+ 'type': 'parallel',
474
+ 'params': [self.adaptor.description.elements.parallel, node]},
1331
475
  {'label': 'Decision',
1332
476
  'function_call': func,
1333
477
  'menu_icon': self.elements.choose.illustrator.svg.clone(),
@@ -1340,21 +484,79 @@ function WFAdaptorManifestation(adaptor) {
1340
484
  'params': [self.adaptor.description.elements.loop, node]},
1341
485
  {'label': 'Closed Loop',
1342
486
  'function_call': func,
1343
- 'menu_icon': self.elements.closed_loop.illustrator.svg.clone(),
1344
- 'type': 'closed_loop',
1345
- 'params': [self.adaptor.description.elements.closed_loop, node]},
1346
- {'label': 'Stop',
487
+ 'menu_icon': self.elements.closed_loop.illustrator.svg.clone(),
488
+ 'type': 'closed_loop',
489
+ 'params': [self.adaptor.description.elements.closed_loop, node]},
490
+ {'label': 'Stop',
491
+ 'function_call': func,
492
+ 'menu_icon': self.elements.stop.illustrator.svg.clone(),
493
+ 'type': 'stop',
494
+ 'params': [self.adaptor.description.elements.stop, node]}
495
+ ];
496
+ if(node.parent('parallel_branch').length > 0) {
497
+ childs.push({
498
+ 'label': 'Critical',
499
+ 'function_call': func,
500
+ 'menu_icon': self.elements.critical.illustrator.svg.clone(),
501
+ 'type': 'critical',
502
+ 'params': [self.adaptor.description.elements.critical, node]
503
+ });
504
+ }
505
+ return childs;
506
+ }; //}}}
507
+
508
+ this.elements.closed_loop_finish = { /*{{{*/
509
+ 'parent': 'closed_loop_finish',
510
+ 'illustrator': {//{{{
511
+ 'endnodes': 'this',
512
+ 'closeblock': true,
513
+ 'svg': self.adaptor.theme_dir + 'symbols/closed_loop.svg'
514
+ }//}}}
515
+ }; /*}}}*/
516
+ this.elements.closed_loop = { /*{{{*/
517
+ 'type': 'complex',
518
+ 'illustrator': {//{{{
519
+ 'endnodes': 'aggregate',
520
+ 'closeblock': false,
521
+ 'col_shift': function(node) {
522
+ return true;
523
+ },
524
+ 'closing_symbol': 'closed_loop_finish',
525
+ 'expansion': function(node) {
526
+ return 'horizontal';
527
+ },
528
+ 'label': function(node){
529
+ var avg = $('> _probability_avg',$(node).children('_probability')).text();
530
+ var ret = [ { column: 'Label', value: ($(node).attr('overrun') + ', ' + $(node).attr('execution')) } ];
531
+ if (avg != '') {
532
+ ret.push({ column: 'Average', value: avg + '%' });
533
+ }
534
+ return ret;
535
+ ,
536
+ 'svg': self.adaptor.theme_dir + 'symbols/closed_loop.svg'
537
+ },//}}}
538
+ 'description': self.adaptor.theme_dir + 'rngs/closed_loop.rng',
539
+ 'permissible_children': function(node,mode) { //{{{
540
+ var func = null;
541
+ if (mode == 'into') { func = self.adaptor.description.insert_first_into }
542
+ else { func = self.adaptor.description.insert_after }
543
+ var childs = [
544
+ {'label': 'Measuring',
545
+ 'function_call': func,
546
+ 'menu_icon': self.elements.closed_loop_measuring.illustrator.svg.clone(),
547
+ 'type': 'closed_loop_measuring',
548
+ 'params': [self.adaptor.description.elements.closed_loop_measuring, node]} ,
549
+ {'label': 'Control',
1347
550
  'function_call': func,
1348
- 'menu_icon': self.elements.stop.illustrator.svg.clone(),
1349
- 'type': 'stop',
1350
- 'params': [self.adaptor.description.elements.stop, node]}
551
+ 'menu_icon': self.elements.closed_loop_control.illustrator.svg.clone(),
552
+ 'type': 'closed_loop_control',
553
+ 'params': [self.adaptor.description.elements.closed_loop_control, node]},
554
+ {'label': 'Cancel',
555
+ 'function_call': func,
556
+ 'menu_icon': self.elements.closed_loop_cancel.illustrator.svg.clone(),
557
+ 'type': 'closed_loop_cancel',
558
+ 'params': [self.adaptor.description.elements.closed_loop_cancel, node]}
1351
559
  ];
1352
- if(node.get(0).tagName != 'parallel')
1353
- childs.push({'label': 'Parallel',
1354
- 'function_call': self.adaptor.description.insert_last_into,
1355
- 'menu_icon': self.elements.parallel.illustrator.svg.clone(),
1356
- 'type': 'parallel',
1357
- 'params': [self.adaptor.description.elements.parallel, node]});
1358
560
  return childs;
1359
561
  }, //}}}
1360
562
  'adaptor': {//{{{
@@ -1367,7 +569,7 @@ function WFAdaptorManifestation(adaptor) {
1367
569
  'mouseout': self.events.mouseout,
1368
570
  }//}}}
1369
571
  }; /*}}}*/
1370
- this.elements.parallel_branch = { /*{{{*/
572
+ this.elements.closed_loop_measuring = { /*{{{*/
1371
573
  'type': 'complex',
1372
574
  'illustrator': {//{{{
1373
575
  'endnodes': 'passthrough',
@@ -1376,21 +578,26 @@ function WFAdaptorManifestation(adaptor) {
1376
578
  'expansion': function(node) {
1377
579
  return 'vertical';
1378
580
  },
1379
- 'resolve_symbol': function(node,shift) {
1380
- if(shift == true) {
1381
- return 'parallel_branch_event';
1382
- } else {
1383
- return 'parallel_branch_normal';
1384
- }
1385
- },
1386
581
  'col_shift': function(node) {
1387
- if(node.parentNode.tagName == 'choose') return false;
1388
- if($(node).parents('parallel').first().children(':not(parallel_branch)').length > 0) return true;
1389
582
  return false;
1390
583
  },
1391
- 'svg': self.adaptor.theme_dir + 'symbols/parallel_branch.svg'
584
+ 'label': function(node){
585
+ var vals = [];
586
+ $('> value',$(node).children('_expected')).each((k,v) => {
587
+ vals.push($(v).text());
588
+ });
589
+ var valtext = '';
590
+ if (vals.length > 0) {
591
+ valtext = ' (' + vals.join(', ') + ')';
592
+ } else {
593
+ valtext = '';
594
+ }
595
+ var ret = [ { column: 'Label', value: 'measure: t = ' + $(node).attr('ctime') + ' ms' + valtext } ];
596
+ return ret;
597
+ },
598
+ 'svg': self.adaptor.theme_dir + 'symbols/closed_loop_measuring.svg'
1392
599
  },//}}}
1393
- 'description': self.adaptor.theme_dir + 'rngs/parallel_branch.rng',
600
+ 'description': self.adaptor.theme_dir + 'rngs/closed_loop_measuring.rng',
1394
601
  'permissible_children': function(node,mode) { //{{{
1395
602
  var func = null;
1396
603
  if (mode == 'into') { func = self.adaptor.description.insert_first_into }
@@ -1426,34 +633,12 @@ function WFAdaptorManifestation(adaptor) {
1426
633
  'menu_icon': self.elements.loop.illustrator.svg.clone(),
1427
634
  'type': 'loop',
1428
635
  'params': [self.adaptor.description.elements.loop, node]},
1429
- {'label': 'Closed Loop',
1430
- 'function_call': func,
1431
- 'menu_icon': self.elements.closed_loop.illustrator.svg.clone(),
1432
- 'type': 'closed_loop',
1433
- 'params': [self.adaptor.description.elements.closed_loop, node]},
1434
- {'label': 'Terminate',
1435
- 'function_call': func,
1436
- 'menu_icon': self.elements.terminate.illustrator.svg.clone(),
1437
- 'type': 'terminate',
1438
- 'params': [self.adaptor.description.elements.terminate, node]},
1439
636
  {'label': 'Stop',
1440
637
  'function_call': func,
1441
638
  'menu_icon': self.elements.stop.illustrator.svg.clone(),
1442
639
  'type': 'stop',
1443
- 'params': [self.adaptor.description.elements.stop, node]},
1444
- {'label': 'Critical',
1445
- 'function_call': func,
1446
- 'menu_icon': self.elements.critical.illustrator.svg.clone(),
1447
- 'type': 'critical',
1448
- 'params': [self.adaptor.description.elements.critical, node]}
640
+ 'params': [self.adaptor.description.elements.stop, node]}
1449
641
  ];
1450
- if(node.parents('choose').length > node.parents('alternative, otherwise').length && node.get(0).tagName == 'parallel_branch') {
1451
- return [{'label': 'Alternative',
1452
- 'function_call': func,
1453
- 'menu_icon': self.elements.alternative.illustrator.svg.clone(),
1454
- 'type': 'alternative',
1455
- 'params': [self.adaptor.description.elements.alternative, node]}];
1456
- }
1457
642
  return childs;
1458
643
  }, //}}}
1459
644
  'adaptor': {//{{{
@@ -1466,21 +651,35 @@ function WFAdaptorManifestation(adaptor) {
1466
651
  'mouseout': self.events.mouseout,
1467
652
  }//}}}
1468
653
  }; /*}}}*/
1469
- this.elements.critical = { /*{{{*/
654
+ this.elements.closed_loop_control = { /*{{{*/
1470
655
  'type': 'complex',
1471
656
  'illustrator': {//{{{
1472
- 'endnodes': 'aggregate',
657
+ 'endnodes': 'passthrough',
1473
658
  'closeblock': false,
1474
- 'border': true,
659
+ 'noarrow': true,
1475
660
  'expansion': function(node) {
1476
661
  return 'vertical';
1477
662
  },
1478
663
  'col_shift': function(node) {
1479
- return true;
664
+ return false;
665
+ },
666
+ 'label': function(node){
667
+ var vals = [];
668
+ $('> change > value',$(node).children('_expected')).each((k,v) => {
669
+ vals.push($(v).text());
670
+ });
671
+ var valtext = '';
672
+ if (vals.length > 0) {
673
+ valtext = ' (' + vals.join(', ') + ')';
674
+ } else {
675
+ valtext = '';
676
+ }
677
+ var ret = [ { column: 'Label', value: 'control: t = ' + $(node).attr('ctime') + ' ms' + valtext } ];
678
+ return ret;
1480
679
  },
1481
- 'svg': self.adaptor.theme_dir + 'symbols/critical.svg'
680
+ 'svg': self.adaptor.theme_dir + 'symbols/closed_loop_control.svg'
1482
681
  },//}}}
1483
- 'description': self.adaptor.theme_dir + 'rngs/critical.rng',
682
+ 'description': self.adaptor.theme_dir + 'rngs/closed_loop_control.rng',
1484
683
  'permissible_children': function(node,mode) { //{{{
1485
684
  var func = null;
1486
685
  if (mode == 'into') { func = self.adaptor.description.insert_first_into }
@@ -1496,6 +695,11 @@ function WFAdaptorManifestation(adaptor) {
1496
695
  'menu_icon': self.elements.call.illustrator.svg.clone(),
1497
696
  'type': 'call',
1498
697
  'params': [self.adaptor.description.elements.call, node]},
698
+ {'label': 'Control',
699
+ 'function_call': func,
700
+ 'menu_icon': self.elements.closed_loop_control.illustrator.svg.clone(),
701
+ 'type': 'closed_loop_control',
702
+ 'params': [self.adaptor.description.elements.closed_loop_control, node]},
1499
703
  {'label': 'Script',
1500
704
  'function_call': func,
1501
705
  'menu_icon': self.elements.manipulate.illustrator.svg.clone(),
@@ -1516,31 +720,12 @@ function WFAdaptorManifestation(adaptor) {
1516
720
  'menu_icon': self.elements.loop.illustrator.svg.clone(),
1517
721
  'type': 'loop',
1518
722
  'params': [self.adaptor.description.elements.loop, node]},
1519
- {'label': 'Closed Loop',
1520
- 'function_call': func,
1521
- 'menu_icon': self.elements.closed_loop.illustrator.svg.clone(),
1522
- 'type': 'closed_loop',
1523
- 'params': [self.adaptor.description.elements.closed_loop, node]},
1524
- {'label': 'Terminate',
1525
- 'function_call': func,
1526
- 'menu_icon': self.elements.terminate.illustrator.svg.clone(),
1527
- 'type': 'terminate',
1528
- 'params': [self.adaptor.description.elements.terminate, node]},
1529
723
  {'label': 'Stop',
1530
724
  'function_call': func,
1531
725
  'menu_icon': self.elements.stop.illustrator.svg.clone(),
1532
726
  'type': 'stop',
1533
727
  'params': [self.adaptor.description.elements.stop, node]}
1534
728
  ];
1535
- if(node.parent('parallel_branch').length > 0) {
1536
- childs.push({
1537
- 'label': 'Critical',
1538
- 'function_call': func,
1539
- 'menu_icon': self.elements.critical.illustrator.svg.clone(),
1540
- 'type': 'critical',
1541
- 'params': [self.adaptor.description.elements.critical, node]
1542
- });
1543
- }
1544
729
  return childs;
1545
730
  }, //}}}
1546
731
  'adaptor': {//{{{
@@ -1553,84 +738,25 @@ function WFAdaptorManifestation(adaptor) {
1553
738
  'mouseout': self.events.mouseout,
1554
739
  }//}}}
1555
740
  }; /*}}}*/
1556
- this.elements.group = { /*{{{*/
741
+ this.elements.closed_loop_cancel = { /*{{{*/
1557
742
  'type': 'complex',
1558
- 'illustrator': {//{{{
1559
- 'endnodes': 'aggregate',
1560
- 'closeblock': false,
1561
- 'border': 'injectiongroup', // other value than true,false inidcates the used class for the svg-object
1562
- 'expansion': function(node) {
1563
- return 'vertical';
1564
- },
1565
- 'col_shift': function(node) {
1566
- return true;
1567
- },
1568
- 'svg': null
1569
- },//}}}
1570
- 'description': self.adaptor.theme_dir + 'rngs/group.rng',
1571
- 'permissible_children': function(node,mode) { //{{{
1572
- var func = null;
1573
- if (mode == 'into') { func = self.adaptor.description.insert_first_into }
1574
- else { func = self.adaptor.description.insert_after }
1575
- return [
1576
- ];
1577
- }, //}}}
1578
- 'adaptor': {//{{{
1579
- 'mousedown': function (node,e) { self.events.mousedown(node,e,true,true); },
1580
- 'touchstart': function (node,e) { self.events.touchstart(node,e,true,true); },
1581
- 'touchend': self.events.touchend,
1582
- 'click': self.events.click,
1583
- 'dblclick': self.events.dblclick,
1584
- 'mouseover': self.events.mouseover,
1585
- 'mouseout': self.events.mouseout,
1586
- }//}}}
1587
- }; /*}}}*/
1588
- this.elements.start = this.elements.description = { /*{{{*/
1589
- 'type': 'description',
1590
743
  'illustrator': {//{{{
1591
744
  'endnodes': 'passthrough',
1592
- 'label': function(node){ return [ { column: 'Label'}, { column: 'ID' }, { column: 'Resource' }, { column: 'RP' }, { column: 'R#' } ]; },
1593
745
  'closeblock': false,
1594
- 'balance': true,
746
+ 'noarrow': true,
1595
747
  'expansion': function(node) {
1596
748
  return 'vertical';
1597
749
  },
1598
- 'resolve_symbol': function(node) {
1599
- let alist = []
1600
- let plist = []
1601
-
1602
- var regassi = /data\.([a-zA-Z_]+)\s*(=[^=]|\+\=|\-\=|\*\=|\/\=|<<|>>)/g; // we do not have to check for &gt;/&lt; version of stuff as only conditions are in attributes, and conditions can not contain assignments
1603
- var reg_not_assi = /data\.([a-zA-Z_]+)\s*/g;
1604
- $ ('call > parameters > arguments > *, call > code > *, loop[condition], alternative[condition]',node).each(function(i,n) {
1605
- let item;
1606
- if (n.hasAttribute('condition')) {
1607
- item = n.getAttribute('condition');
1608
- } else {
1609
- item = n.textContent;
1610
- }
1611
- if (n.parentNode.nodeName == 'arguments' && item.charAt(0) != '!' ) { return }
1612
-
1613
- let indices = [];
1614
-
1615
- for (const match of item.matchAll(regassi)) {
1616
- indices.push(match.index);
1617
- alist.push(match[1]);
1618
- }
1619
- for (const match of item.matchAll(reg_not_assi)) {
1620
- const arg1 = match[1];
1621
- if (indices.includes(match.index)) { continue; }
1622
- if (!alist.includes(arg1)) { plist.push(arg1); }
1623
- }
1624
- })
1625
- if (plist.length > 0) { return 'start_event'; }
1626
- },
1627
- 'closing_symbol': 'end',
1628
750
  'col_shift': function(node) {
1629
- return true;
751
+ return false;
752
+ },
753
+ 'label': function(node){
754
+ var ret = [ { column: 'Label', value: $(node).attr('condition') } ];
755
+ return ret;
1630
756
  },
1631
- 'svg': self.adaptor.theme_dir + 'symbols/start.svg'
757
+ 'svg': self.adaptor.theme_dir + 'symbols/closed_loop_cancel.svg'
1632
758
  },//}}}
1633
- 'description': self.adaptor.theme_dir + 'rngs/start.rng',
759
+ 'description': self.adaptor.theme_dir + 'rngs/closed_loop_cancel.rng',
1634
760
  'permissible_children': function(node,mode) { //{{{
1635
761
  var func = null;
1636
762
  if (mode == 'into') { func = self.adaptor.description.insert_first_into }
@@ -1666,206 +792,23 @@ function WFAdaptorManifestation(adaptor) {
1666
792
  'menu_icon': self.elements.loop.illustrator.svg.clone(),
1667
793
  'type': 'loop',
1668
794
  'params': [self.adaptor.description.elements.loop, node]},
1669
- {'label': 'Closed Loop',
1670
- 'function_call': func,
1671
- 'menu_icon': self.elements.closed_loop.illustrator.svg.clone(),
1672
- 'type': 'closed_loop',
1673
- 'params': [self.adaptor.description.elements.closed_loop, node]},
1674
795
  {'label': 'Stop',
1675
796
  'function_call': func,
1676
797
  'menu_icon': self.elements.stop.illustrator.svg.clone(),
1677
798
  'type': 'stop',
1678
799
  'params': [self.adaptor.description.elements.stop, node]}
1679
800
  ];
1680
- if(node.parent('parallel_branch').length > 0) {
1681
- childs.push({
1682
- 'label': 'Critical',
1683
- 'function_call': func,
1684
- 'menu_icon': self.elements.critical.illustrator.svg.clone(),
1685
- 'type': 'critical',
1686
- 'params': [self.adaptor.description.elements.critical, node]
1687
- });
1688
- }
1689
801
  return childs;
1690
802
  }, //}}}
1691
803
  'adaptor': {//{{{
1692
- 'mousedown': function (node,e) { self.events.mousedown(node,e,true,false); },
1693
- 'touchstart': function (node,e) { self.events.touchstart(node,e,true,false); },
804
+ 'mousedown': function (node,e) { self.events.mousedown(node,e,true,true); },
805
+ 'touchstart': function (node,e) { self.events.touchstart(node,e,true,true); },
1694
806
  'touchend': self.events.touchend,
1695
807
  'click': self.events.click,
1696
808
  'dblclick': self.events.dblclick,
1697
809
  'mouseover': self.events.mouseover,
1698
810
  'mouseout': self.events.mouseout,
1699
811
  }//}}}
1700
- }; /*}}}*/
1701
-
1702
- // Abstract Elements
1703
- // * they may only have an illustrator (or other parts)
1704
- // * they HAVE TO have a parent
1705
- this.elements.start_event = { /*{{{*/
1706
- 'parent': 'start',
1707
- 'illustrator': {//{{{
1708
- 'svg': self.adaptor.theme_dir + 'symbols/start_event.svg'
1709
- }//}}}
1710
- }; /*}}}*/
1711
- this.elements.call_sensor = { /*{{{*/
1712
- 'parent': 'call',
1713
- 'illustrator': {//{{{
1714
- 'svg': self.adaptor.theme_dir + 'symbols/call_sensor.svg'
1715
- }//}}}
1716
- }; /*}}}*/
1717
- this.elements.callmanipulate = { /*{{{*/
1718
- 'parent': 'call',
1719
- 'description': self.adaptor.theme_dir + 'rngs/callmanipulate.rng',
1720
- 'illustrator': {//{{{
1721
- 'svg': self.adaptor.theme_dir + 'symbols/callmanipulate.svg'
1722
- }//}}}
1723
- }; /*}}}*/
1724
- this.elements.callmanipulate_sensor = { /*{{{*/
1725
- 'parent': 'call',
1726
- 'description': self.adaptor.theme_dir + 'rngs/callmanipulate.rng',
1727
- 'illustrator': {//{{{
1728
- 'svg': self.adaptor.theme_dir + 'symbols/callmanipulate_sensor.svg'
1729
- }//}}}
1730
- }; /*}}}*/
1731
- this.elements.loop_head = { /*{{{*/
1732
- 'parent': 'loop',
1733
- 'illustrator': {//{{{
1734
- 'endnodes': 'this',
1735
- 'closeblock': true,
1736
- 'label': function(node){
1737
- var avg = $('> _probability_avg',$(node).children('_probability')).text();
1738
- var ret = [ { column: 'Label', value: $(node).attr('condition') } ];
1739
- if (avg != '') {
1740
- ret.push({ column: 'Average', value: avg + 'x' });
1741
- }
1742
- return ret;
1743
- },
1744
- }//}}}
1745
812
  }; /*}}}*/
1746
- this.elements.loop_tail = { /*{{{*/
1747
- 'parent': 'loop',
1748
- 'illustrator': {//{{{
1749
- 'endnodes': 'aggregate',
1750
- 'closeblock': false,
1751
- 'closing_symbol': 'loop_finish'
1752
- },//}}}
1753
- }; /*}}}*/
1754
- this.elements.choose_inclusive = { /*{{{*/
1755
- 'parent': 'choose',
1756
- 'illustrator': {//{{{
1757
- 'svg': self.adaptor.theme_dir + 'symbols/choose_inclusive.svg'
1758
- }//}}}
1759
- }; /*}}}*/
1760
- this.elements.choose_exclusive = { /*{{{*/
1761
- 'parent': 'choose',
1762
- 'illustrator': {//{{{
1763
- 'svg': self.adaptor.theme_dir + 'symbols/choose_exclusive.svg'
1764
- },//}}}
1765
- }; /*}}}*/
1766
- this.elements.choose_inclusive_finish = { /*{{{*/
1767
- 'parent': 'choose_finish',
1768
- 'illustrator': {//{{{
1769
- 'svg': self.adaptor.theme_dir + 'symbols/choose_inclusive.svg'
1770
- }//}}}
1771
- }; /*}}}*/
1772
- this.elements.choose_exclusive_finish = { /*{{{*/
1773
- 'parent': 'choose_finish',
1774
- 'illustrator': {//{{{
1775
- 'svg': self.adaptor.theme_dir + 'symbols/choose_exclusive.svg'
1776
- },//}}}
1777
- }; /*}}}*/
1778
- this.elements.loop_head_finish = { /*{{{*/
1779
- 'parent': 'loop_finish',
1780
- 'illustrator': {//{{{
1781
- 'endnodes': 'this',
1782
- 'closeblock': true,
1783
- 'svg': self.adaptor.theme_dir + 'symbols/choose_exclusive.svg'
1784
- }//}}}
1785
- }; /*}}}*/
1786
- this.elements.loop_tail_finish = { /*{{{*/
1787
- 'parent': 'loop_finish',
1788
- 'illustrator': {//{{{
1789
- 'endnodes': 'this',
1790
- 'closeblock': false,
1791
- 'svg': self.adaptor.theme_dir + 'symbols/choose_exclusive.svg'
1792
- },//}}}
1793
- }; /*}}}*/
1794
- this.elements.closed_loop_finish = { /*{{{*/
1795
- 'parent': 'closed_loop_finish',
1796
- 'illustrator': {//{{{
1797
- 'endnodes': 'this',
1798
- 'closeblock': true,
1799
- 'svg': self.adaptor.theme_dir + 'symbols/closed_loop.svg'
1800
- }//}}}
1801
- }; /*}}}*/
1802
- this.elements.parallel_start = { /*{{{*/
1803
- 'parent': 'parallel',
1804
- 'illustrator': {//{{{
1805
- 'svg': self.adaptor.theme_dir + 'symbols/parallel.svg'
1806
- }//}}}
1807
- }; /*}}}*/
1808
- this.elements.parallel_eventbased_exclusive = { /*{{{*/
1809
- 'parent': 'parallel',
1810
- 'illustrator': {//{{{
1811
- 'svg': self.adaptor.theme_dir + 'symbols/parallel_eventbased_exclusive.svg'
1812
- }//}}}
1813
- }; /*}}}*/
1814
- this.elements.parallel_eventbased_parallel = { /*{{{*/
1815
- 'parent': 'parallel',
1816
- 'illustrator': {//{{{
1817
- 'svg': self.adaptor.theme_dir + 'symbols/parallel_eventbased_parallel.svg'
1818
- }//}}}
1819
- }; /*}}}*/
1820
- this.elements.parallel_simple = { /*{{{*/
1821
- 'parent': 'parallel_finish',
1822
- 'illustrator': {//{{{
1823
- 'svg': self.adaptor.theme_dir + 'symbols/parallel.svg'
1824
- }//}}}
1825
- }; /*}}}*/
1826
- this.elements.parallel_complex = { /*{{{*/
1827
- 'parent': 'parallel_finish',
1828
- 'illustrator': {//{{{
1829
- 'svg': self.adaptor.theme_dir + 'symbols/complex.svg'
1830
- },//}}}
1831
- }; /*}}}*/
1832
- this.elements.parallel_event_all = { /*{{{*/
1833
- 'parent': 'parallel_finish',
1834
- 'illustrator': {//{{{
1835
- 'svg': self.adaptor.theme_dir + 'symbols/parallel_eventbased_parallel.svg'
1836
- }//}}}
1837
- }; /*}}}*/
1838
- this.elements.parallel_event_one = { /*{{{*/
1839
- 'parent': 'parallel_finish',
1840
- 'illustrator': {//{{{
1841
- 'svg': self.adaptor.theme_dir + 'symbols/choose_exclusive.svg'
1842
- }//}}}
1843
- }; /*}}}*/
1844
- this.elements.parallel_branch_normal = { /*{{{*/
1845
- 'parent': 'parallel_branch',
1846
- 'illustrator': {//{{{
1847
- 'svg': self.adaptor.theme_dir + 'symbols/parallel_branch_normal.svg'
1848
- }//}}}
1849
- }; /*}}}*/
1850
- this.elements.parallel_branch_event = { /*{{{*/
1851
- 'parent': 'parallel_branch',
1852
- 'illustrator': {//{{{
1853
- 'endnodes': 'this',
1854
- 'noarrow': false,
1855
- 'border': true,
1856
- 'wide': true,
1857
- 'closing_symbol': 'event_end',
1858
- 'svg': self.adaptor.theme_dir + 'symbols/parallel_branch_event.svg'
1859
- }//}}}
1860
- }; /*}}}*/
1861
- this.elements.parallel_branch_compact = { /*{{{*/
1862
- 'parent': 'parallel_branch',
1863
- 'illustrator': {//{{{
1864
- 'endnodes': 'this',
1865
- 'svg': self.adaptor.theme_dir + 'symbols/parallel_branch_compact.svg'
1866
- }//}}}
1867
- }; /*}}}*/
1868
- this.elements.scripts = { /*{{{*/
1869
- 'description': [self.adaptor.theme_dir + 'rngs/scripts.rng']
1870
- }; /*}}}*/
813
+ }
1871
814
  }