cpee 2.1.47 → 2.1.48

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. checksums.yaml +4 -4
  2. data/cockpit/index.html +1 -1
  3. data/cockpit/js/instance.js +15 -11
  4. data/cockpit/js/wfadaptor.js +18 -13
  5. data/cockpit/templates/Subprocess.xml +35 -371
  6. data/cockpit/templates/Wait.xml +7 -400
  7. data/cockpit/themes/compact/rngs/call.rng +8 -0
  8. data/cockpit/themes/compact/rngs/callmanipulate.rng +8 -0
  9. data/cockpit/themes/compact/rngs/closed_loop_control.rng +2 -2
  10. data/cockpit/themes/compact/rngs/closed_loop_measuring.rng +3 -3
  11. data/cockpit/themes/compact/theme.js +15 -9
  12. data/cockpit/themes/control/rngs/call.rng +8 -0
  13. data/cockpit/themes/control/rngs/callmanipulate.rng +8 -0
  14. data/cockpit/themes/control/rngs/closed_loop_control.rng +2 -2
  15. data/cockpit/themes/control/rngs/closed_loop_measuring.rng +3 -3
  16. data/cockpit/themes/control/theme.js +17 -11
  17. data/cockpit/themes/default/rngs/call.rng +8 -0
  18. data/cockpit/themes/default/rngs/callmanipulate.rng +8 -0
  19. data/cockpit/themes/default/rngs/closed_loop_control.rng +2 -2
  20. data/cockpit/themes/default/rngs/closed_loop_measuring.rng +3 -3
  21. data/cockpit/themes/default/theme.js +15 -9
  22. data/cockpit/themes/extended/rngs/call.rng +8 -0
  23. data/cockpit/themes/extended/rngs/callmanipulate.rng +8 -0
  24. data/cockpit/themes/extended/rngs/closed_loop_control.rng +2 -2
  25. data/cockpit/themes/extended/rngs/closed_loop_measuring.rng +3 -3
  26. data/cockpit/themes/extended/theme.js +15 -9
  27. data/cockpit/themes/model/theme.js +15 -9
  28. data/cockpit/themes/packed/rngs/call.rng +8 -0
  29. data/cockpit/themes/packed/rngs/callmanipulate.rng +8 -0
  30. data/cockpit/themes/packed/rngs/closed_loop_control.rng +2 -2
  31. data/cockpit/themes/packed/rngs/closed_loop_measuring.rng +3 -3
  32. data/cockpit/themes/packed/theme.js +15 -9
  33. data/cockpit/themes/preset/rngs/call.rng +8 -0
  34. data/cockpit/themes/preset/rngs/callmanipulate.rng +8 -0
  35. data/cockpit/themes/preset/rngs/closed_loop_control.rng +2 -2
  36. data/cockpit/themes/preset/rngs/closed_loop_measuring.rng +3 -3
  37. data/cockpit/themes/preset/theme.js +15 -9
  38. data/cpee.gemspec +1 -1
  39. data/lib/cpee/implementation.rb +5 -5
  40. data/lib/cpee/persistence.rb +19 -16
  41. data/server/executionhandlers/ruby/connection.rb +21 -11
  42. data/server/executionhandlers/ruby/desc.xml +107 -0
  43. data/server/executionhandlers/ruby/dsl_to_dslx.xsl +61 -8
  44. data/server/resources/test.pdf +0 -0
  45. data/server/routing/end.pid +1 -1
  46. data/server/routing/forward-events-00.pid +1 -1
  47. data/server/routing/forward-votes.pid +1 -1
  48. data/server/routing/persist.pid +1 -1
  49. data/tools/cpee +40 -9
  50. metadata +5 -8
  51. data/cockpit/templates/Wait.xml.attrs +0 -16
  52. data/server/routing/forward-events-01.pid +0 -1
  53. data/server/routing/forward-events-02.pid +0 -1
  54. data/server/routing/forward-events-03.pid +0 -1
  55. data/server/routing/forward-events-04.pid +0 -1
@@ -50,6 +50,14 @@
50
50
  </element>
51
51
  </element>
52
52
  <element name="annotations" rngui:header="Annotations">
53
+ <element name="_generic" rngui:header="Generic" rngui:fold="closed">
54
+ <zeroOrMore rngui:label="Create Annotation Pair">
55
+ <element rngui:label="Name" rngui:labeltype="xml">
56
+ <anyName/>
57
+ <data type="string" rngui:label="Value"/>
58
+ </element>
59
+ </zeroOrMore>
60
+ </element>
53
61
  <element name="_timing" rngui:header="Timing" rngui:fold="closed">
54
62
  <element name="_timing_weight" rngui:label="&#x3C9; - Weight">
55
63
  <data type="float" rngui:label="[0,1]"/>
@@ -1,6 +1,6 @@
1
1
  <element xmlns="http://relaxng.org/ns/structure/1.0" xmlns:rngui="http://rngui.org" rngui:version="1.2" ns="http://cpee.org/ns/description/1.0" name="closed_loop_control" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
2
- <attribute name="frequency" rngui:label="Interval frequency in Hz" rngui:default="0.1">
3
- <data type="float" rngui:label="Hz"/>
2
+ <attribute name="ctime" rngui:label="Cycle time in ms" rngui:default="100">
3
+ <data type="integer" rngui:label="ms"/>
4
4
  </attribute>
5
5
  <element name="_expected" rngui:header="Values Expected to Change">
6
6
  <zeroOrMore rngui:label="Add Value">
@@ -1,8 +1,8 @@
1
1
  <element xmlns="http://relaxng.org/ns/structure/1.0" xmlns:rngui="http://rngui.org" rngui:version="1.2" ns="http://cpee.org/ns/description/1.0" name="closed_loop_measuring" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
2
- <attribute name="frequency" rngui:label="Interval frequency in Hz" rngui:default="0.1">
3
- <data type="float" rngui:label="Hz"/>
2
+ <attribute name="ctime" rngui:label="Cycle time in ms" rngui:default="100">
3
+ <data type="integer" rngui:label="ms"/>
4
4
  </attribute>
5
- <element name="_expected" rngui:header="Values Expected to Change">
5
+ <element name="_expected" rngui:header="Measured Values">
6
6
  <zeroOrMore rngui:label="Add Value">
7
7
  <element name="value" rngui:label="Value">
8
8
  <data type="string" rngui:label="a dataelement"/>
@@ -253,6 +253,18 @@ function WFAdaptorManifestation(adaptor) {
253
253
  new CustomMenu(e).contextmenu(menu);
254
254
  } //}}}
255
255
 
256
+ function positionHandling(svgid) {
257
+ var xml_node = self.adaptor.description.get_node_by_svg_id(svgid);
258
+ var vtarget = self.adaptor.illustrator.get_node_by_svg_id(svgid);
259
+ if (vtarget.length > 0) {
260
+ if (vtarget.parents('g.activities.passive, g.activities.active').length > 0) {
261
+ del_ui_pos(xml_node);
262
+ } else {
263
+ add_ui_pos(xml_node);
264
+ }
265
+ }
266
+ }
267
+
256
268
  // Events
257
269
  this.events.touchend = function(svgid, e) { // {{{
258
270
  clearTimeout(self.presstimer);
@@ -264,15 +276,7 @@ function WFAdaptorManifestation(adaptor) {
264
276
  this.events.mousedown = function(svgid, e, child, sibling) { // {{{
265
277
  if(e.button == 0) { // left-click
266
278
  } else if(e.button == 1) { // middle-click
267
- var xml_node = self.adaptor.description.get_node_by_svg_id(svgid);
268
- var vtarget = self.adaptor.illustrator.get_node_by_svg_id(svgid);
269
- if (vtarget.length > 0) {
270
- if (vtarget.parents('g.activities.passive, g.activities.active').length > 0) {
271
- del_ui_pos(xml_node);
272
- } else {
273
- add_ui_pos(xml_node);
274
- }
275
- }
279
+ positionHandling(svgid);
276
280
  } else if(e.button == 2) { // right-click
277
281
  contextMenuHandling(svgid,e,child,sibling);
278
282
  }
@@ -305,6 +309,8 @@ function WFAdaptorManifestation(adaptor) {
305
309
  localStorage.removeItem('marked_from');
306
310
  }
307
311
  }
312
+ } else if (e && (e.shiftKey)) {
313
+ positionHandling(svgid);
308
314
  } else {
309
315
  self.adaptor.illustrator.get_elements().removeClass('marked');
310
316
  localStorage.removeItem('marked');
@@ -27,6 +27,14 @@
27
27
  </element>
28
28
  </element>
29
29
  <element name="annotations" rngui:header="Annotations">
30
+ <element name="_generic" rngui:header="Generic" rngui:fold="closed">
31
+ <zeroOrMore rngui:label="Create Annotation Pair">
32
+ <element rngui:label="Name" rngui:labeltype="xml">
33
+ <anyName/>
34
+ <data type="string" rngui:label="Value"/>
35
+ </element>
36
+ </zeroOrMore>
37
+ </element>
30
38
  <element name="_timing" rngui:header="Timing" rngui:fold="closed">
31
39
  <element name="_timing_weight" rngui:label="&#x3C9; - Weight">
32
40
  <data type="float" rngui:label="[0,1]"/>
@@ -50,6 +50,14 @@
50
50
  </element>
51
51
  </element>
52
52
  <element name="annotations" rngui:header="Annotations">
53
+ <element name="_generic" rngui:header="Generic" rngui:fold="closed">
54
+ <zeroOrMore rngui:label="Create Annotation Pair">
55
+ <element rngui:label="Name" rngui:labeltype="xml">
56
+ <anyName/>
57
+ <data type="string" rngui:label="Value"/>
58
+ </element>
59
+ </zeroOrMore>
60
+ </element>
53
61
  <element name="_timing" rngui:header="Timing" rngui:fold="closed">
54
62
  <element name="_timing_weight" rngui:label="&#x3C9; - Weight">
55
63
  <data type="float" rngui:label="[0,1]"/>
@@ -1,6 +1,6 @@
1
1
  <element xmlns="http://relaxng.org/ns/structure/1.0" xmlns:rngui="http://rngui.org" rngui:version="1.2" ns="http://cpee.org/ns/description/1.0" name="closed_loop_control" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
2
- <attribute name="frequency" rngui:label="Interval frequency in Hz" rngui:default="0.1">
3
- <data type="float" rngui:label="Hz"/>
2
+ <attribute name="ctime" rngui:label="Cycle time in ms" rngui:default="100">
3
+ <data type="integer" rngui:label="ms"/>
4
4
  </attribute>
5
5
  <element name="_expected" rngui:header="Values Expected to Change">
6
6
  <zeroOrMore rngui:label="Add Value">
@@ -1,8 +1,8 @@
1
1
  <element xmlns="http://relaxng.org/ns/structure/1.0" xmlns:rngui="http://rngui.org" rngui:version="1.2" ns="http://cpee.org/ns/description/1.0" name="closed_loop_measuring" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
2
- <attribute name="frequency" rngui:label="Interval frequency in Hz" rngui:default="0.1">
3
- <data type="float" rngui:label="Hz"/>
2
+ <attribute name="ctime" rngui:label="Cycle time in ms" rngui:default="100">
3
+ <data type="integer" rngui:label="ms"/>
4
4
  </attribute>
5
- <element name="_expected" rngui:header="Values Expected to Change">
5
+ <element name="_expected" rngui:header="Measured Values">
6
6
  <zeroOrMore rngui:label="Add Value">
7
7
  <element name="value" rngui:label="Value">
8
8
  <data type="string" rngui:label="a dataelement"/>
@@ -253,6 +253,18 @@ function WFAdaptorManifestation(adaptor) {
253
253
  new CustomMenu(e).contextmenu(menu);
254
254
  } //}}}
255
255
 
256
+ function positionHandling(svgid) {
257
+ var xml_node = self.adaptor.description.get_node_by_svg_id(svgid);
258
+ var vtarget = self.adaptor.illustrator.get_node_by_svg_id(svgid);
259
+ if (vtarget.length > 0) {
260
+ if (vtarget.parents('g.activities.passive, g.activities.active').length > 0) {
261
+ del_ui_pos(xml_node);
262
+ } else {
263
+ add_ui_pos(xml_node);
264
+ }
265
+ }
266
+ }
267
+
256
268
  // Events
257
269
  this.events.touchend = function(svgid, e) { // {{{
258
270
  clearTimeout(self.presstimer);
@@ -264,15 +276,7 @@ function WFAdaptorManifestation(adaptor) {
264
276
  this.events.mousedown = function(svgid, e, child, sibling) { // {{{
265
277
  if(e.button == 0) { // left-click
266
278
  } else if(e.button == 1) { // middle-click
267
- var xml_node = self.adaptor.description.get_node_by_svg_id(svgid);
268
- var vtarget = self.adaptor.illustrator.get_node_by_svg_id(svgid);
269
- if (vtarget.length > 0) {
270
- if (vtarget.parents('g.activities.passive, g.activities.active').length > 0) {
271
- del_ui_pos(xml_node);
272
- } else {
273
- add_ui_pos(xml_node);
274
- }
275
- }
279
+ positionHandling(svgid);
276
280
  } else if(e.button == 2) { // right-click
277
281
  contextMenuHandling(svgid,e,child,sibling);
278
282
  }
@@ -305,6 +309,8 @@ function WFAdaptorManifestation(adaptor) {
305
309
  localStorage.removeItem('marked_from');
306
310
  }
307
311
  }
312
+ } else if (e && (e.shiftKey)) {
313
+ positionHandling(svgid);
308
314
  } else {
309
315
  self.adaptor.illustrator.get_elements().removeClass('marked');
310
316
  localStorage.removeItem('marked');
@@ -229,6 +229,18 @@ function WFAdaptorManifestation(adaptor) {
229
229
  new CustomMenu(e).contextmenu(menu);
230
230
  } //}}}
231
231
 
232
+ function positionHandling(svgid) {
233
+ var xml_node = self.adaptor.description.get_node_by_svg_id(svgid);
234
+ var vtarget = self.adaptor.illustrator.get_node_by_svg_id(svgid);
235
+ if (vtarget.length > 0) {
236
+ if (vtarget.parents('g.activities.passive, g.activities.active').length > 0) {
237
+ del_ui_pos(xml_node);
238
+ } else {
239
+ add_ui_pos(xml_node);
240
+ }
241
+ }
242
+ }
243
+
232
244
  // Events
233
245
  this.events.touchend = function(svgid, e) { // {{{
234
246
  clearTimeout(self.presstimer);
@@ -240,15 +252,7 @@ function WFAdaptorManifestation(adaptor) {
240
252
  this.events.mousedown = function(svgid, e, child, sibling) { // {{{
241
253
  if(e.button == 0) { // left-click
242
254
  } else if(e.button == 1) { // middle-click
243
- var xml_node = self.adaptor.description.get_node_by_svg_id(svgid);
244
- var vtarget = self.adaptor.illustrator.get_node_by_svg_id(svgid);
245
- if (vtarget.length > 0) {
246
- if (vtarget.parents('g.activities.passive, g.activities.active').length > 0) {
247
- del_ui_pos(xml_node);
248
- } else {
249
- add_ui_pos(xml_node);
250
- }
251
- }
255
+ positionHandling(svgid);
252
256
  } else if(e.button == 2) { // right-click
253
257
  contextMenuHandling(svgid,e,child,sibling);
254
258
  }
@@ -281,6 +285,8 @@ function WFAdaptorManifestation(adaptor) {
281
285
  localStorage.removeItem('marked_from');
282
286
  }
283
287
  }
288
+ } else if (e && (e.shiftKey)) {
289
+ positionHandling(svgid);
284
290
  } else {
285
291
  self.adaptor.illustrator.get_elements().removeClass('marked');
286
292
  localStorage.removeItem('marked');
@@ -27,6 +27,14 @@
27
27
  </element>
28
28
  </element>
29
29
  <element name="annotations" rngui:header="Annotations">
30
+ <element name="_generic" rngui:header="Generic" rngui:fold="closed">
31
+ <zeroOrMore rngui:label="Create Annotation Pair">
32
+ <element rngui:label="Name" rngui:labeltype="xml">
33
+ <anyName/>
34
+ <data type="string" rngui:label="Value"/>
35
+ </element>
36
+ </zeroOrMore>
37
+ </element>
30
38
  <element name="_timing" rngui:header="Timing" rngui:fold="closed">
31
39
  <element name="_timing_weight" rngui:label="&#x3C9; - Weight">
32
40
  <data type="float" rngui:label="[0,1]"/>
@@ -50,6 +50,14 @@
50
50
  </element>
51
51
  </element>
52
52
  <element name="annotations" rngui:header="Annotations">
53
+ <element name="_generic" rngui:header="Generic" rngui:fold="closed">
54
+ <zeroOrMore rngui:label="Create Annotation Pair">
55
+ <element rngui:label="Name" rngui:labeltype="xml">
56
+ <anyName/>
57
+ <data type="string" rngui:label="Value"/>
58
+ </element>
59
+ </zeroOrMore>
60
+ </element>
53
61
  <element name="_timing" rngui:header="Timing" rngui:fold="closed">
54
62
  <element name="_timing_weight" rngui:label="&#x3C9; - Weight">
55
63
  <data type="float" rngui:label="[0,1]"/>
@@ -1,6 +1,6 @@
1
1
  <element xmlns="http://relaxng.org/ns/structure/1.0" xmlns:rngui="http://rngui.org" rngui:version="1.2" ns="http://cpee.org/ns/description/1.0" name="closed_loop_control" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
2
- <attribute name="frequency" rngui:label="Interval frequency in Hz" rngui:default="0.1">
3
- <data type="float" rngui:label="Hz"/>
2
+ <attribute name="ctime" rngui:label="Cycle time in ms" rngui:default="100">
3
+ <data type="integer" rngui:label="ms"/>
4
4
  </attribute>
5
5
  <element name="_expected" rngui:header="Values Expected to Change">
6
6
  <zeroOrMore rngui:label="Add Value">
@@ -1,8 +1,8 @@
1
1
  <element xmlns="http://relaxng.org/ns/structure/1.0" xmlns:rngui="http://rngui.org" rngui:version="1.2" ns="http://cpee.org/ns/description/1.0" name="closed_loop_measuring" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
2
- <attribute name="frequency" rngui:label="Interval frequency in Hz" rngui:default="0.1">
3
- <data type="float" rngui:label="Hz"/>
2
+ <attribute name="ctime" rngui:label="Cycle time in ms" rngui:default="100">
3
+ <data type="integer" rngui:label="ms"/>
4
4
  </attribute>
5
- <element name="_expected" rngui:header="Values Expected to Change">
5
+ <element name="_expected" rngui:header="Measured Values">
6
6
  <zeroOrMore rngui:label="Add Value">
7
7
  <element name="value" rngui:label="Value">
8
8
  <data type="string" rngui:label="a dataelement"/>
@@ -253,6 +253,18 @@ function WFAdaptorManifestation(adaptor) {
253
253
  new CustomMenu(e).contextmenu(menu);
254
254
  } //}}}
255
255
 
256
+ function positionHandling(svgid) {
257
+ var xml_node = self.adaptor.description.get_node_by_svg_id(svgid);
258
+ var vtarget = self.adaptor.illustrator.get_node_by_svg_id(svgid);
259
+ if (vtarget.length > 0) {
260
+ if (vtarget.parents('g.activities.passive, g.activities.active').length > 0) {
261
+ del_ui_pos(xml_node);
262
+ } else {
263
+ add_ui_pos(xml_node);
264
+ }
265
+ }
266
+ }
267
+
256
268
  // Events
257
269
  this.events.touchend = function(svgid, e) { // {{{
258
270
  clearTimeout(self.presstimer);
@@ -264,15 +276,7 @@ function WFAdaptorManifestation(adaptor) {
264
276
  this.events.mousedown = function(svgid, e, child, sibling) { // {{{
265
277
  if(e.button == 0) { // left-click
266
278
  } else if(e.button == 1) { // middle-click
267
- var xml_node = self.adaptor.description.get_node_by_svg_id(svgid);
268
- var vtarget = self.adaptor.illustrator.get_node_by_svg_id(svgid);
269
- if (vtarget.length > 0) {
270
- if (vtarget.parents('g.activities.passive, g.activities.active').length > 0) {
271
- del_ui_pos(xml_node);
272
- } else {
273
- add_ui_pos(xml_node);
274
- }
275
- }
279
+ positionHandling(svgid);
276
280
  } else if(e.button == 2) { // right-click
277
281
  contextMenuHandling(svgid,e,child,sibling);
278
282
  }
@@ -305,6 +309,8 @@ function WFAdaptorManifestation(adaptor) {
305
309
  localStorage.removeItem('marked_from');
306
310
  }
307
311
  }
312
+ } else if (e && (e.shiftKey)) {
313
+ positionHandling(svgid);
308
314
  } else {
309
315
  self.adaptor.illustrator.get_elements().removeClass('marked');
310
316
  localStorage.removeItem('marked');
@@ -27,6 +27,14 @@
27
27
  </element>
28
28
  </element>
29
29
  <element name="annotations" rngui:header="Annotations">
30
+ <element name="_generic" rngui:header="Generic" rngui:fold="closed">
31
+ <zeroOrMore rngui:label="Create Annotation Pair">
32
+ <element rngui:label="Name" rngui:labeltype="xml">
33
+ <anyName/>
34
+ <data type="string" rngui:label="Value"/>
35
+ </element>
36
+ </zeroOrMore>
37
+ </element>
30
38
  <element name="_timing" rngui:header="Timing" rngui:fold="closed">
31
39
  <element name="_timing_weight" rngui:label="&#x3C9; - Weight">
32
40
  <data type="float" rngui:label="[0,1]"/>
@@ -50,6 +50,14 @@
50
50
  </element>
51
51
  </element>
52
52
  <element name="annotations" rngui:header="Annotations">
53
+ <element name="_generic" rngui:header="Generic" rngui:fold="closed">
54
+ <zeroOrMore rngui:label="Create Annotation Pair">
55
+ <element rngui:label="Name" rngui:labeltype="xml">
56
+ <anyName/>
57
+ <data type="string" rngui:label="Value"/>
58
+ </element>
59
+ </zeroOrMore>
60
+ </element>
53
61
  <element name="_timing" rngui:header="Timing" rngui:fold="closed">
54
62
  <element name="_timing_weight" rngui:label="&#x3C9; - Weight">
55
63
  <data type="float" rngui:label="[0,1]"/>
@@ -1,6 +1,6 @@
1
1
  <element xmlns="http://relaxng.org/ns/structure/1.0" xmlns:rngui="http://rngui.org" rngui:version="1.2" ns="http://cpee.org/ns/description/1.0" name="closed_loop_control" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
2
- <attribute name="frequency" rngui:label="Interval frequency in Hz" rngui:default="0.1">
3
- <data type="float" rngui:label="Hz"/>
2
+ <attribute name="ctime" rngui:label="Cycle time in ms" rngui:default="100">
3
+ <data type="integer" rngui:label="ms"/>
4
4
  </attribute>
5
5
  <element name="_expected" rngui:header="Values Expected to Change">
6
6
  <zeroOrMore rngui:label="Add Value">
@@ -1,8 +1,8 @@
1
1
  <element xmlns="http://relaxng.org/ns/structure/1.0" xmlns:rngui="http://rngui.org" rngui:version="1.2" ns="http://cpee.org/ns/description/1.0" name="closed_loop_measuring" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
2
- <attribute name="frequency" rngui:label="Interval frequency in Hz" rngui:default="0.1">
3
- <data type="float" rngui:label="Hz"/>
2
+ <attribute name="ctime" rngui:label="Cycle time in ms" rngui:default="100">
3
+ <data type="integer" rngui:label="ms"/>
4
4
  </attribute>
5
- <element name="_expected" rngui:header="Values Expected to Change">
5
+ <element name="_expected" rngui:header="Measured Values">
6
6
  <zeroOrMore rngui:label="Add Value">
7
7
  <element name="value" rngui:label="Value">
8
8
  <data type="string" rngui:label="a dataelement"/>
@@ -253,6 +253,18 @@ function WFAdaptorManifestation(adaptor) {
253
253
  new CustomMenu(e).contextmenu(menu);
254
254
  } //}}}
255
255
 
256
+ function positionHandling(svgid) {
257
+ var xml_node = self.adaptor.description.get_node_by_svg_id(svgid);
258
+ var vtarget = self.adaptor.illustrator.get_node_by_svg_id(svgid);
259
+ if (vtarget.length > 0) {
260
+ if (vtarget.parents('g.activities.passive, g.activities.active').length > 0) {
261
+ del_ui_pos(xml_node);
262
+ } else {
263
+ add_ui_pos(xml_node);
264
+ }
265
+ }
266
+ }
267
+
256
268
  // Events
257
269
  this.events.touchend = function(svgid, e) { // {{{
258
270
  clearTimeout(self.presstimer);
@@ -264,15 +276,7 @@ function WFAdaptorManifestation(adaptor) {
264
276
  this.events.mousedown = function(svgid, e, child, sibling) { // {{{
265
277
  if(e.button == 0) { // left-click
266
278
  } else if(e.button == 1) { // middle-click
267
- var xml_node = self.adaptor.description.get_node_by_svg_id(svgid);
268
- var vtarget = self.adaptor.illustrator.get_node_by_svg_id(svgid);
269
- if (vtarget.length > 0) {
270
- if (vtarget.parents('g.activities.passive, g.activities.active').length > 0) {
271
- del_ui_pos(xml_node);
272
- } else {
273
- add_ui_pos(xml_node);
274
- }
275
- }
279
+ positionHandling(svgid);
276
280
  } else if(e.button == 2) { // right-click
277
281
  contextMenuHandling(svgid,e,child,sibling);
278
282
  }
@@ -305,6 +309,8 @@ function WFAdaptorManifestation(adaptor) {
305
309
  localStorage.removeItem('marked_from');
306
310
  }
307
311
  }
312
+ } else if (e && (e.shiftKey)) {
313
+ positionHandling(svgid);
308
314
  } else {
309
315
  self.adaptor.illustrator.get_elements().removeClass('marked');
310
316
  localStorage.removeItem('marked');
data/cpee.gemspec CHANGED
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = "cpee"
3
- s.version = "2.1.47"
3
+ s.version = "2.1.48"
4
4
  s.platform = Gem::Platform::RUBY
5
5
  s.license = "LGPL-3.0"
6
6
  s.summary = "Preliminary release of cloud process execution engine (cpee.org). If you just need workflow execution, without a rest service exposing it, then use WEEL."
@@ -295,7 +295,7 @@ module CPEE
295
295
  name = @p[0].value
296
296
  id = CPEE::Persistence::new_object(opts)
297
297
  uuid = SecureRandom.uuid
298
- instance = CPEE::Persistence::OBJ + ':' + id.to_s
298
+ instance = CPEE::Persistence::obj + ':' + id.to_s
299
299
  redis.multi do |multi|
300
300
  multi.zadd('instances',id,id)
301
301
  doc.root.find(PROPERTIES_PATHS_FULL.join(' | ')).each do |e|
@@ -319,12 +319,12 @@ module CPEE
319
319
  doc.register_namespace 'np', 'http://riddl.org/ns/common-patterns/notifications-producer/2.0'
320
320
  key = File.basename(File.dirname(f))
321
321
  url = doc.find('string(/np:subscription/@url)')
322
- multi.sadd(CPEE::Persistence::OBJ + ":#{id}/handlers",key)
323
- multi.set(CPEE::Persistence::OBJ + ":#{id}/handlers/#{key}/url",url)
322
+ multi.sadd(CPEE::Persistence::obj + ":#{id}/handlers",key)
323
+ multi.set(CPEE::Persistence::obj + ":#{id}/handlers/#{key}/url",url)
324
324
  doc.find('/np:subscription/np:topic/*').each do |e|
325
325
  c = File.join(e.parent.attributes['id'],e.qname.name,e.text)
326
- multi.sadd(CPEE::Persistence::OBJ + ":#{id}/handlers/#{key}",c)
327
- multi.sadd(CPEE::Persistence::OBJ + ":#{id}/handlers/#{c}",key)
326
+ multi.sadd(CPEE::Persistence::obj + ":#{id}/handlers/#{key}",c)
327
+ multi.sadd(CPEE::Persistence::obj + ":#{id}/handlers/#{c}",key)
328
328
  end
329
329
  end rescue nil # all the ones that are not ok, are ignored
330
330
  end
@@ -15,7 +15,10 @@
15
15
  module CPEE
16
16
 
17
17
  module Persistence
18
- OBJ = 'instance'
18
+ @@obj = 'instance'
19
+ def self::obj #{{{
20
+ @@obj
21
+ end #}}}
19
22
 
20
23
  def self::set_list(id,opts,item,values,deleted=[]) #{{{
21
24
  ah = AttributesHelper.new
@@ -39,13 +42,13 @@ module CPEE
39
42
  )
40
43
  end #}}}
41
44
  def self::extract_set(id,opts,item) #{{{
42
- opts[:redis].smembers(OBJ + ":#{id}/#{item}").map do |e|
43
- [e,opts[:redis].get(OBJ + ":#{id}/#{item}/#{e}")]
45
+ opts[:redis].smembers(@@obj + ":#{id}/#{item}").map do |e|
46
+ [e,opts[:redis].get(@@obj + ":#{id}/#{item}/#{e}")]
44
47
  end
45
48
  end #}}}
46
49
  def self::extract_list(id,opts,item) #{{{
47
- opts[:redis].zrange(OBJ + ":#{id}/#{item}",0,-1).map do |e|
48
- [e,opts[:redis].get(OBJ + ":#{id}/#{item}/#{e}")]
50
+ opts[:redis].zrange(@@obj + ":#{id}/#{item}",0,-1).map do |e|
51
+ [e,opts[:redis].get(@@obj + ":#{id}/#{item}/#{e}")]
49
52
  end
50
53
  end #}}}
51
54
 
@@ -62,32 +65,32 @@ module CPEE
62
65
  )
63
66
  end #}}}
64
67
  def self::extract_item(id,opts,item) #{{{
65
- opts[:redis].get(OBJ + ":#{id}/#{item}")
68
+ opts[:redis].get(@@obj + ":#{id}/#{item}")
66
69
  end #}}}
67
70
 
68
71
  def self::exists?(id,opts) #{{{
69
- opts[:redis].exists?(OBJ + ":#{id}/state")
72
+ opts[:redis].exists?(@@obj + ":#{id}/state")
70
73
  end #}}}
71
74
  def self::is_member?(id,opts,item,value) #{{{
72
- opts[:redis].sismember(OBJ + ":#{id}/#{item}",value)
75
+ opts[:redis].sismember(@@obj + ":#{id}/#{item}",value)
73
76
  end #}}}
74
77
 
75
78
  def self::each_object(opts)
76
- opts[:redis].zrevrange(OBJ + 's',0,-1).each do |instance|
79
+ opts[:redis].zrevrange(@@obj + 's',0,-1).each do |instance|
77
80
  yield instance
78
81
  end
79
82
  end
80
83
 
81
84
  def self::new_object(opts)
82
- opts[:redis].zrevrange(OBJ + 's', 0, 0).first.to_i + 1
85
+ opts[:redis].zrevrange(@@obj + 's', 0, 0).first.to_i + 1
83
86
  end
84
87
 
85
88
  def self::keys(id,opts,item=nil)
86
- opts[:redis].keys(File.join(OBJ + ":#{id}",item.to_s,'*'))
89
+ opts[:redis].keys(File.join(@@obj + ":#{id}",item.to_s,'*'))
87
90
  end
88
91
 
89
92
  def self::set_handler(id,opts,key,url,values,update=false) #{{{
90
- exis = opts[:redis].smembers(OBJ + ":#{id}/handlers/#{key}")
93
+ exis = opts[:redis].smembers(@@obj + ":#{id}/handlers/#{key}")
91
94
 
92
95
  if update == false && exis.length > 0
93
96
  return 405
@@ -120,14 +123,14 @@ module CPEE
120
123
  200
121
124
  end #}}}
122
125
  def self::extract_handler(id,opts,key) #{{{
123
- opts[:redis].smembers(OBJ + ":#{id}/handlers/#{key}")
126
+ opts[:redis].smembers(@@obj + ":#{id}/handlers/#{key}")
124
127
  end #}}}
125
128
  def self::exists_handler?(id,opts,key) #{{{
126
- opts[:redis].exists?(OBJ + ":#{id}/handlers/#{key}")
129
+ opts[:redis].exists?(@@obj + ":#{id}/handlers/#{key}")
127
130
  end #}}}
128
131
  def self::extract_handlers(id,opts) #{{{
129
- opts[:redis].smembers(OBJ + ":#{id}/handlers").map do |e|
130
- [e, opts[:redis].get(OBJ + ":#{id}/handlers/#{e}/url")]
132
+ opts[:redis].smembers(@@obj + ":#{id}/handlers").map do |e|
133
+ [e, opts[:redis].get(@@obj + ":#{id}/handlers/#{e}/url")]
131
134
  end
132
135
  end #}}}
133
136
  end
@@ -64,10 +64,10 @@ class ConnectionWrapper < WEEL::ConnectionWrapperBase
64
64
  end # }}}
65
65
 
66
66
  def prepare(readonly, endpoints, parameters, replay=false) #{{{
67
- if replay && @controller.attributes[:replayer]
68
- @handler_endpoint = @controller.attributes[:replayer]
69
- else
70
- @handler_endpoint = endpoints.is_a?(Array) ? endpoints.map{ |ep| readonly.endpoints[ep] }.compact : readonly.endpoints[endpoints]
67
+ @handler_endpoint = endpoints.is_a?(Array) ? endpoints.map{ |ep| readonly.endpoints[ep] }.compact : readonly.endpoints[endpoints]
68
+ if @controller.attributes['mock']
69
+ @handler_endpoint_orig = @handler_endpoint
70
+ @handler_endpoint = @controller.attributes['mock'].to_s + '?original_endpoint=' + Riddl::Protocols::Utils::escape(@handler_endpoint)
71
71
  end
72
72
  params = parameters.dup
73
73
  params[:arguments] = params[:arguments].dup if params[:arguments]
@@ -131,15 +131,23 @@ class ConnectionWrapper < WEEL::ConnectionWrapperBase
131
131
  params << Riddl::Header.new("CPEE-ATTR-#{key.to_s.gsub(/_/,'-')}",value)
132
132
  end
133
133
 
134
- tendpoint = @handler_endpoint.sub(/^http(s)?-(get|put|post|delete):/,'http\\1:')
135
- type = $2 || parameters[:method] || 'post'
134
+ status = result = headers = nil
135
+ catch :no_mock do
136
+ tendpoint = @handler_endpoint.sub(/^http(s)?-(get|put|post|delete):/,'http\\1:')
137
+ type = $2 || parameters[:method] || 'post'
138
+
139
+ client = Riddl::Client.new(tendpoint)
136
140
 
137
- client = Riddl::Client.new(tendpoint)
141
+ @handler_passthrough = callback
142
+ @controller.callback(self,callback,:'activity-uuid' => @handler_activity_uuid, :label => @label, :activity => @handler_position)
138
143
 
139
- @handler_passthrough = callback
140
- @controller.callback(self,callback,:'activity-uuid' => @handler_activity_uuid, :label => @label, :activity => @handler_position)
144
+ status, result, headers = client.request type => params
145
+ if status == 561
146
+ @handler_endpoint = @handler_endpoint_orig
147
+ throw :no_mock
148
+ end
149
+ end
141
150
 
142
- status, result, headers = client.request type => params
143
151
  if status < 200 || status >= 300
144
152
  headers['CPEE_SALVAGE'] = true
145
153
  c = result[0]&.value
@@ -270,7 +278,7 @@ class ConnectionWrapper < WEEL::ConnectionWrapperBase
270
278
  enc = detect_encoding(result)
271
279
  enc == 'OTHER' ? result : (result.encode('UTF-8',enc) rescue convert_to_base64(result))
272
280
  else
273
- result
281
+ Riddl::Parameter::Array[*result]
274
282
  end
275
283
  end
276
284
 
@@ -353,6 +361,8 @@ class ConnectionWrapper < WEEL::ConnectionWrapperBase
353
361
  @handler_passthrough = nil
354
362
  if options['CPEE_SALVAGE']
355
363
  @handler_continue.continue WEEL::Signal::Salvage
364
+ elsif options['CPEE_STOP']
365
+ @handler_continue.continue WEEL::Signal::Stop
356
366
  else
357
367
  @handler_continue.continue
358
368
  end