cpee 2.1.47 → 2.1.48

Sign up to get free protection for your applications and to get access to all the features.
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