cpee 2.1.51 → 2.1.53

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 (188) hide show
  1. checksums.yaml +4 -4
  2. data/cockpit/css/resources.css +42 -0
  3. data/cockpit/css/ui.css +4 -0
  4. data/cockpit/edit.html +4 -1
  5. data/cockpit/index.html +3 -0
  6. data/cockpit/js/details.js +9 -14
  7. data/cockpit/js/edit.js +3 -0
  8. data/cockpit/js/instance.js +264 -64
  9. data/cockpit/js/modifiers.js +12 -15
  10. data/cockpit/js/parameters.js +4 -10
  11. data/cockpit/js/resources.js +16 -0
  12. data/cockpit/js/wfadaptor.js +3 -3
  13. data/cockpit/templates/Coopis 2010.xml +15 -2
  14. data/cockpit/templates/Worklist.xml +6 -7
  15. data/cockpit/themes/compact/rngs/call.rng +6 -4
  16. data/cockpit/themes/compact/rngs/callmanipulate.rng +6 -4
  17. data/cockpit/themes/compact/rngs/parallel.rng +2 -2
  18. data/cockpit/themes/compact/rngs/start.rng +3 -3
  19. data/cockpit/themes/compact/theme.js +11 -1
  20. data/cockpit/themes/control/rngs/call.rng +6 -4
  21. data/cockpit/themes/control/rngs/callmanipulate.rng +6 -4
  22. data/cockpit/themes/control/rngs/parallel.rng +2 -2
  23. data/cockpit/themes/control/rngs/start.rng +3 -3
  24. data/cockpit/themes/control/theme.js +11 -1
  25. data/cockpit/themes/dataflow/rngs/alternative.rng +25 -0
  26. data/cockpit/themes/dataflow/rngs/call.rng +228 -0
  27. data/cockpit/themes/dataflow/rngs/callmanipulate.rng +257 -0
  28. data/cockpit/themes/dataflow/rngs/choose.rng +14 -0
  29. data/cockpit/themes/dataflow/rngs/closed_loop.rng +62 -0
  30. data/cockpit/themes/dataflow/rngs/closed_loop_cancel.rng +5 -0
  31. data/cockpit/themes/dataflow/rngs/closed_loop_control.rng +31 -0
  32. data/cockpit/themes/dataflow/rngs/closed_loop_measuring.rng +12 -0
  33. data/cockpit/themes/dataflow/rngs/critical.rng +5 -0
  34. data/cockpit/themes/dataflow/rngs/escape.rng +1 -0
  35. data/cockpit/themes/dataflow/rngs/group.rng +3 -0
  36. data/cockpit/themes/dataflow/rngs/loop.rng +22 -0
  37. data/cockpit/themes/dataflow/rngs/manipulate.rng +9 -0
  38. data/cockpit/themes/dataflow/rngs/otherwise.rng +22 -0
  39. data/cockpit/themes/dataflow/rngs/parallel.rng +27 -0
  40. data/cockpit/themes/dataflow/rngs/parallel_branch.rng +2 -0
  41. data/cockpit/themes/dataflow/rngs/scripts.rng +23 -0
  42. data/cockpit/themes/dataflow/rngs/start.rng +121 -0
  43. data/cockpit/themes/dataflow/rngs/stop.rng +5 -0
  44. data/cockpit/themes/dataflow/rngs/terminate.rng +1 -0
  45. data/cockpit/themes/dataflow/symbols/alternative.svg +5 -0
  46. data/cockpit/themes/dataflow/symbols/arrow.svg +3 -0
  47. data/cockpit/themes/dataflow/symbols/call.svg +6 -0
  48. data/cockpit/themes/dataflow/symbols/call_sensor.svg +9 -0
  49. data/cockpit/themes/dataflow/symbols/callmanipulate.svg +8 -0
  50. data/cockpit/themes/dataflow/symbols/callmanipulate_sensor.svg +11 -0
  51. data/cockpit/themes/dataflow/symbols/choose.svg +5 -0
  52. data/cockpit/themes/dataflow/symbols/choose_exclusive.svg +5 -0
  53. data/cockpit/themes/dataflow/symbols/choose_inclusive.svg +4 -0
  54. data/cockpit/themes/dataflow/symbols/closed_loop.svg +5 -0
  55. data/cockpit/themes/dataflow/symbols/closed_loop_cancel.svg +5 -0
  56. data/cockpit/themes/dataflow/symbols/closed_loop_control.svg +5 -0
  57. data/cockpit/themes/dataflow/symbols/closed_loop_measuring.svg +6 -0
  58. data/cockpit/themes/dataflow/symbols/complex.svg +8 -0
  59. data/cockpit/themes/dataflow/symbols/critical.svg +4 -0
  60. data/cockpit/themes/dataflow/symbols/delete.svg +4 -0
  61. data/cockpit/themes/dataflow/symbols/end.svg +3 -0
  62. data/cockpit/themes/dataflow/symbols/escape.svg +5 -0
  63. data/cockpit/themes/dataflow/symbols/event_end.svg +3 -0
  64. data/cockpit/themes/dataflow/symbols/loop.svg +5 -0
  65. data/cockpit/themes/dataflow/symbols/manipulate.svg +4 -0
  66. data/cockpit/themes/dataflow/symbols/otherwise.svg +5 -0
  67. data/cockpit/themes/dataflow/symbols/parallel.svg +5 -0
  68. data/cockpit/themes/dataflow/symbols/parallel_branch.svg +5 -0
  69. data/cockpit/themes/dataflow/symbols/parallel_branch_compact.svg +4 -0
  70. data/cockpit/themes/dataflow/symbols/parallel_branch_event.svg +14 -0
  71. data/cockpit/themes/dataflow/symbols/parallel_branch_normal.svg +5 -0
  72. data/cockpit/themes/dataflow/symbols/parallel_eventbased_exclusive.svg +9 -0
  73. data/cockpit/themes/dataflow/symbols/parallel_eventbased_parallel.svg +8 -0
  74. data/cockpit/themes/dataflow/symbols/scripts.svg +4 -0
  75. data/cockpit/themes/dataflow/symbols/start.svg +3 -0
  76. data/cockpit/themes/dataflow/symbols/start_event.svg +5 -0
  77. data/cockpit/themes/dataflow/symbols/stop.svg +5 -0
  78. data/cockpit/themes/dataflow/symbols/terminate.svg +4 -0
  79. data/cockpit/themes/dataflow/theme.js +1566 -0
  80. data/cockpit/themes/default/rngs/call.rng +6 -4
  81. data/cockpit/themes/default/rngs/callmanipulate.rng +6 -4
  82. data/cockpit/themes/default/rngs/parallel.rng +2 -2
  83. data/cockpit/themes/default/rngs/start.rng +3 -3
  84. data/cockpit/themes/default/theme.js +12 -1
  85. data/cockpit/themes/extended/rngs/call.rng +6 -4
  86. data/cockpit/themes/extended/rngs/callmanipulate.rng +6 -4
  87. data/cockpit/themes/extended/rngs/parallel.rng +2 -2
  88. data/cockpit/themes/extended/rngs/start.rng +3 -3
  89. data/cockpit/themes/extended/theme.js +12 -1
  90. data/cockpit/themes/felix/rngs/alternative.rng +25 -0
  91. data/cockpit/themes/felix/rngs/call.rng +229 -0
  92. data/cockpit/themes/felix/rngs/callmanipulate.rng +259 -0
  93. data/cockpit/themes/felix/rngs/choose.rng +14 -0
  94. data/cockpit/themes/felix/rngs/closed_loop.rng +62 -0
  95. data/cockpit/themes/felix/rngs/closed_loop_cancel.rng +5 -0
  96. data/cockpit/themes/felix/rngs/closed_loop_control.rng +31 -0
  97. data/cockpit/themes/felix/rngs/closed_loop_measuring.rng +12 -0
  98. data/cockpit/themes/felix/rngs/critical.rng +5 -0
  99. data/cockpit/themes/felix/rngs/escape.rng +1 -0
  100. data/cockpit/themes/felix/rngs/group.rng +3 -0
  101. data/cockpit/themes/felix/rngs/loop.rng +22 -0
  102. data/cockpit/themes/felix/rngs/manipulate.rng +20 -0
  103. data/cockpit/themes/felix/rngs/otherwise.rng +22 -0
  104. data/cockpit/themes/felix/rngs/parallel.rng +27 -0
  105. data/cockpit/themes/felix/rngs/parallel_branch.rng +2 -0
  106. data/cockpit/themes/felix/rngs/scripts.rng +23 -0
  107. data/cockpit/themes/felix/rngs/start.rng +121 -0
  108. data/cockpit/themes/felix/rngs/stop.rng +5 -0
  109. data/cockpit/themes/felix/rngs/terminate.rng +1 -0
  110. data/cockpit/themes/felix/symbols/alternative.svg +5 -0
  111. data/cockpit/themes/felix/symbols/arrow.svg +3 -0
  112. data/cockpit/themes/felix/symbols/call.svg +6 -0
  113. data/cockpit/themes/felix/symbols/call_sensor.svg +9 -0
  114. data/cockpit/themes/felix/symbols/callmanipulate.svg +8 -0
  115. data/cockpit/themes/felix/symbols/callmanipulate_sensor.svg +11 -0
  116. data/cockpit/themes/felix/symbols/choose.svg +5 -0
  117. data/cockpit/themes/felix/symbols/choose_exclusive.svg +5 -0
  118. data/cockpit/themes/felix/symbols/choose_inclusive.svg +4 -0
  119. data/cockpit/themes/felix/symbols/closed_loop.svg +5 -0
  120. data/cockpit/themes/felix/symbols/closed_loop_cancel.svg +5 -0
  121. data/cockpit/themes/felix/symbols/closed_loop_control.svg +5 -0
  122. data/cockpit/themes/felix/symbols/closed_loop_measuring.svg +6 -0
  123. data/cockpit/themes/felix/symbols/complex.svg +8 -0
  124. data/cockpit/themes/felix/symbols/critical.svg +4 -0
  125. data/cockpit/themes/felix/symbols/delete.svg +4 -0
  126. data/cockpit/themes/felix/symbols/end.svg +3 -0
  127. data/cockpit/themes/felix/symbols/escape.svg +5 -0
  128. data/cockpit/themes/felix/symbols/event_end.svg +3 -0
  129. data/cockpit/themes/felix/symbols/loop.svg +5 -0
  130. data/cockpit/themes/felix/symbols/manipulate.svg +4 -0
  131. data/cockpit/themes/felix/symbols/otherwise.svg +5 -0
  132. data/cockpit/themes/felix/symbols/parallel.svg +5 -0
  133. data/cockpit/themes/felix/symbols/parallel_branch.svg +5 -0
  134. data/cockpit/themes/felix/symbols/parallel_branch_compact.svg +4 -0
  135. data/cockpit/themes/felix/symbols/parallel_branch_event.svg +14 -0
  136. data/cockpit/themes/felix/symbols/parallel_branch_normal.svg +5 -0
  137. data/cockpit/themes/felix/symbols/parallel_eventbased_exclusive.svg +9 -0
  138. data/cockpit/themes/felix/symbols/parallel_eventbased_parallel.svg +8 -0
  139. data/cockpit/themes/felix/symbols/scripts.svg +4 -0
  140. data/cockpit/themes/felix/symbols/start.svg +3 -0
  141. data/cockpit/themes/felix/symbols/start_event.svg +5 -0
  142. data/cockpit/themes/felix/symbols/stop.svg +5 -0
  143. data/cockpit/themes/felix/symbols/terminate.svg +4 -0
  144. data/cockpit/themes/felix/theme.js +1526 -0
  145. data/cockpit/themes/model/rngs/call.rng +10 -10
  146. data/cockpit/themes/model/rngs/callmanipulate.rng +10 -10
  147. data/cockpit/themes/model/theme.js +11 -1
  148. data/cockpit/themes/packed/rngs/call.rng +6 -4
  149. data/cockpit/themes/packed/rngs/callmanipulate.rng +6 -4
  150. data/cockpit/themes/packed/rngs/parallel.rng +2 -2
  151. data/cockpit/themes/packed/rngs/start.rng +3 -3
  152. data/cockpit/themes/packed/theme.js +11 -1
  153. data/cockpit/themes/preset/rngs/call.rng +6 -4
  154. data/cockpit/themes/preset/rngs/callmanipulate.rng +6 -4
  155. data/cockpit/themes/preset/rngs/parallel.rng +2 -2
  156. data/cockpit/themes/preset/rngs/start.rng +3 -3
  157. data/cockpit/themes/preset/theme.js +12 -1
  158. data/cpee.gemspec +2 -2
  159. data/lib/cpee/implementation.rb +1 -1
  160. data/lib/cpee/implementation_properties.rb +23 -13
  161. data/lib/cpee/message.rb +20 -8
  162. data/lib/cpee/persistence.rb +12 -0
  163. data/lib/properties/state.rng +0 -2
  164. data/lib/properties.xml +1 -2
  165. data/server/executionhandlers/ruby/connection.rb +49 -13
  166. data/server/executionhandlers/ruby/controller.rb +1 -1
  167. data/server/executionhandlers/ruby/dsl_to_dslx.xsl +71 -61
  168. data/server/resources/states.dot +0 -4
  169. data/server/resources/states.xml +0 -6
  170. data/tools/cpee +32 -1
  171. metadata +116 -21
  172. data/cockpit/css/replay.css +0 -55
  173. data/cockpit/js/replay.js +0 -40
  174. data/cockpit/replay.html +0 -53
  175. data/cockpit/themes/compact/symbols/test.svg +0 -74
  176. data/cockpit/themes/control/symbols/test.svg +0 -74
  177. data/cockpit/themes/default/symbols/test.svg +0 -74
  178. data/cockpit/themes/extended/symbols/test.svg +0 -74
  179. data/cockpit/themes/model/symbols/test.svg +0 -74
  180. data/cockpit/themes/packed/symbols/test.svg +0 -74
  181. data/cockpit/themes/preset/symbols/test.svg +0 -74
  182. data/server/executionhandlers/ruby/desc.xml +0 -107
  183. data/server/resources/test.pdf +0 -0
  184. data/server/routing/end.pid +0 -1
  185. data/server/routing/forward-events-00.pid +0 -1
  186. data/server/routing/forward-votes.pid +0 -1
  187. data/server/routing/persist.pid +0 -1
  188. data/server/server.conf +0 -4
@@ -4,16 +4,16 @@
4
4
  </attribute>
5
5
  <attribute name="endpoint" rngui:label="Type">
6
6
  <choice>
7
- <value id="machine">Machine Invocation</value>
8
- <value id="sensor">Read From Sensor</value>
9
- <value id="human">Human Task</value>
10
- <value id="subprocess">Subprocess</value>
11
- <value id="robot">Robot Task</value>
12
- <value id="robot_subprocess">Robot Subprocess</value>
13
- <value id="plc">PLC</value>
14
- <value id="send">Send Message</value>
15
- <value id="receive">Receive Message</value>
16
- <value id="wait">Wait</value>
7
+ <value rngui:label="Machine Invocation">machine</value>
8
+ <value rngui:label="Read From Sensor">sensor</value>
9
+ <value rngui:label="Human Task">human</value>
10
+ <value rngui:label="Subprocess">subprocess</value>
11
+ <value rngui:label="Robot Task">robot</value>
12
+ <value rngui:label="Robot Subprocess">robot_subprocess</value>
13
+ <value rngui:label="PLC">plc</value>
14
+ <value rngui:label="Send Message">send</value>
15
+ <value rngui:label="Receive Message">receive</value>
16
+ <value rngui:label="Wait">wait</value>
17
17
  </choice>
18
18
  </attribute>
19
19
  <element name="parameters" rngui:header="Properties">
@@ -4,16 +4,16 @@
4
4
  </attribute>
5
5
  <attribute name="endpoint" rngui:label="Type">
6
6
  <choice>
7
- <value id="machine">Machine Invocation</value>
8
- <value id="sensor">Read From Sensor</value>
9
- <value id="human">Human Task</value>
10
- <value id="subprocess">Subprocess</value>
11
- <value id="robot">Robot Task</value>
12
- <value id="robot_subprocess">Robot Subprocess</value>
13
- <value id="plc">PLC</value>
14
- <value id="send">Send Message</value>
15
- <value id="receive">Receive Message</value>
16
- <value id="wait">Wait</value>
7
+ <value rngui:label="Machine Invocation">machine</value>
8
+ <value rngui:label="Read From Sensor">sensor</value>
9
+ <value rngui:label="Human Task">human</value>
10
+ <value rngui:label="Subprocess">subprocess</value>
11
+ <value rngui:label="Robot Task">robot</value>
12
+ <value rngui:label="Robot Subprocess">robot_subprocess</value>
13
+ <value rngui:label="PLC">plc</value>
14
+ <value rngui:label="Send Message">send</value>
15
+ <value rngui:label="Receive Message">receive</value>
16
+ <value rngui:label="Wait">wait</value>
17
17
  </choice>
18
18
  </attribute>
19
19
  <element name="parameters" rngui:header="Properties">
@@ -63,6 +63,9 @@ function WFAdaptorManifestation(adaptor) {
63
63
  //{{{ Render the details from rng (right hand side of graph tab)
64
64
  this.update_details = function(svgid){
65
65
  var tab = $('#dat_details');
66
+ var focus_ele = $(':focus',tab);
67
+ var focus_path = focus_ele.attr('data-relaxngui-path');
68
+ var focus_pos = focus_ele.prop('selectionStart');
66
69
  var node = self.adaptor.description.get_node_by_svg_id(svgid).get(0);
67
70
  tab.empty();
68
71
  if (self.adaptor.description.elements[$(node).attr('svg-subtype')]) {
@@ -82,6 +85,13 @@ function WFAdaptorManifestation(adaptor) {
82
85
  nn.removeAttr('svg-subtype');
83
86
  nn.removeAttr('svg-label');
84
87
  save['details'].content(nn);
88
+ if (focus_ele.length > 0) {
89
+ var ele = $('[data-relaxngui-path="' + focus_path + '"]',tab)[0];
90
+ ele.focus();
91
+ if (ele.setSelectionRange) {
92
+ ele.setSelectionRange(focus_pos,focus_pos);
93
+ }
94
+ }
85
95
  format_visual_forms();
86
96
  }
87
97
  }; //}}}
@@ -1375,7 +1385,7 @@ function WFAdaptorManifestation(adaptor) {
1375
1385
  this.elements.parallel_event_one = { /*{{{*/
1376
1386
  'parent': 'parallel_finish',
1377
1387
  'illustrator': {//{{{
1378
- 'svg': self.adaptor.theme_dir + 'symbols/parallel_eventbased_exclusive.svg'
1388
+ 'svg': self.adaptor.theme_dir + 'symbols/choose_exclusive.svg'
1379
1389
  }//}}}
1380
1390
  }; /*}}}*/
1381
1391
  this.elements.parallel_branch_normal = { /*{{{*/
@@ -3,7 +3,9 @@
3
3
  <data type="string" rngui:readonly="true"/>
4
4
  </attribute>
5
5
  <attribute name="endpoint" rngui:label="Endpoint">
6
- <data type="string"/>
6
+ <data type="string">
7
+ <param name="pattern">^[a-z_][a-zA-Z0-9_]*$</param>
8
+ </data>
7
9
  </attribute>
8
10
  <element name="parameters" rngui:header="Properties">
9
11
  <element name="label" rngui:label="Label">
@@ -96,9 +98,9 @@
96
98
  </element>
97
99
  <element name="extractor_type" rngui:label="Extractor Type">
98
100
  <choice>
99
- <value id='intrinsic'>Intrinsic</value>
100
- <value id='extrinsic'>Extrinsic</value>
101
- <value id='separate'>Separate</value>
101
+ <value rngui:label='Intrinsic'>intrinsic</value>
102
+ <value rngui:label='Extrinsic'>extrinsic</value>
103
+ <value rngui:label='Separate'>separate</value>
102
104
  </choice>
103
105
  </element>
104
106
  <element name="extractor_code" rngui:label="Extractor Code" rngui:hint='For intrinsic &amp; extrinsic data'>
@@ -3,7 +3,9 @@
3
3
  <data type="string" rngui:readonly="true"/>
4
4
  </attribute>
5
5
  <attribute name="endpoint" rngui:label="Endpoint">
6
- <data type="string"/>
6
+ <data type="string">
7
+ <param name="pattern">^[a-z_][a-zA-Z0-9_]*$</param>
8
+ </data>
7
9
  </attribute>
8
10
  <element name="parameters" rngui:header="Properties">
9
11
  <element name="label" rngui:label="Label">
@@ -120,9 +122,9 @@
120
122
  </element>
121
123
  <element name="extractor_type" rngui:label="Extractor Type">
122
124
  <choice>
123
- <value id='intrinsic'>Intrinsic</value>
124
- <value id='extrinsic'>Extrinsic</value>
125
- <value id='separate'>Separate</value>
125
+ <value rngui:label='Intrinsic'>intrinsic</value>
126
+ <value rngui:label='Extrinsic'>extrinsic</value>
127
+ <value rngui:label='Separate'>separate</value>
126
128
  </choice>
127
129
  </element>
128
130
  <element name="extractor_code" rngui:label="Extractor Code" rngui:hint='For intrinsic &amp; extrinsic data'>
@@ -4,8 +4,8 @@
4
4
  </attribute>
5
5
  <attribute name="cancel" rngui:label="Cancel" rngui:default="last" rngui:hint="Set 'Wait' to 1 for standard Event-based Gateway.">
6
6
  <choice>
7
- <value id='last'>After Last Task in Branch</value>
8
- <value id='first'>After First Task in Branch (Event-Based Gateway)</value>
7
+ <value rngui:label='After Last Task in Branch'>last</value>
8
+ <value rngui:label='After First Task in Branch (Event-Based Gateway)'>first</value>
9
9
  </choice>
10
10
  </attribute>
11
11
  <element rngui:ignore="true" name="parallel_branch">
@@ -29,9 +29,9 @@
29
29
  </element>
30
30
  <element name="extractor_type" rngui:label="Extractor Type">
31
31
  <choice>
32
- <value id='intrinsic'>Intrinsic</value>
33
- <value id='extrinsic'>Extrinsic</value>
34
- <value id='separate'>Separate</value>
32
+ <value rngui:label='Intrinsic'>intrinsic</value>
33
+ <value rngui:label='Extrinsic'>extrinsic</value>
34
+ <value rngui:label='Separate'>separate</value>
35
35
  </choice>
36
36
  </element>
37
37
  <element name="extractor_code" rngui:label="Extractor Code" rngui:hint='For intrinsic &amp; extrinsic data'>
@@ -63,6 +63,9 @@ function WFAdaptorManifestation(adaptor) {
63
63
  //{{{ Render the details from rng (right hand side of graph tab)
64
64
  this.update_details = function(svgid){
65
65
  var tab = $('#dat_details');
66
+ var focus_ele = $(':focus',tab);
67
+ var focus_path = focus_ele.attr('data-relaxngui-path');
68
+ var focus_pos = focus_ele.prop('selectionStart');
66
69
  var node = self.adaptor.description.get_node_by_svg_id(svgid).get(0);
67
70
  tab.empty();
68
71
  if (self.adaptor.description.elements[$(node).attr('svg-subtype')]) {
@@ -82,6 +85,13 @@ function WFAdaptorManifestation(adaptor) {
82
85
  nn.removeAttr('svg-subtype');
83
86
  nn.removeAttr('svg-label');
84
87
  save['details'].content(nn);
88
+ if (focus_ele.length > 0) {
89
+ var ele = $('[data-relaxngui-path="' + focus_path + '"]',tab)[0];
90
+ ele.focus();
91
+ if (ele.setSelectionRange) {
92
+ ele.setSelectionRange(focus_pos,focus_pos);
93
+ }
94
+ }
85
95
  format_visual_forms();
86
96
  }
87
97
  }; //}}}
@@ -1443,7 +1453,7 @@ function WFAdaptorManifestation(adaptor) {
1443
1453
  this.elements.parallel_event_one = { /*{{{*/
1444
1454
  'parent': 'parallel_finish',
1445
1455
  'illustrator': {//{{{
1446
- 'svg': self.adaptor.theme_dir + 'symbols/parallel_eventbased_exclusive.svg'
1456
+ 'svg': self.adaptor.theme_dir + 'symbols/choose_exclusive.svg'
1447
1457
  }//}}}
1448
1458
  }; /*}}}*/
1449
1459
  this.elements.parallel_branch_normal = { /*{{{*/
@@ -3,7 +3,9 @@
3
3
  <data type="string" rngui:readonly="true"/>
4
4
  </attribute>
5
5
  <attribute name="endpoint" rngui:label="Endpoint">
6
- <data type="string"/>
6
+ <data type="string">
7
+ <param name="pattern">^[a-z_][a-zA-Z0-9_]*$</param>
8
+ </data>
7
9
  </attribute>
8
10
  <element name="parameters" rngui:header="Properties">
9
11
  <element name="label" rngui:label="Label">
@@ -96,9 +98,9 @@
96
98
  </element>
97
99
  <element name="extractor_type" rngui:label="Extractor Type">
98
100
  <choice>
99
- <value id='intrinsic'>Intrinsic</value>
100
- <value id='extrinsic'>Extrinsic</value>
101
- <value id='separate'>Separate</value>
101
+ <value rngui:label='Intrinsic'>intrinsic</value>
102
+ <value rngui:label='Extrinsic'>extrinsic</value>
103
+ <value rngui:label='Separate'>separate</value>
102
104
  </choice>
103
105
  </element>
104
106
  <element name="extractor_code" rngui:label="Extractor Code" rngui:hint='For intrinsic &amp; extrinsic data'>
@@ -3,7 +3,9 @@
3
3
  <data type="string" rngui:readonly="true"/>
4
4
  </attribute>
5
5
  <attribute name="endpoint" rngui:label="Endpoint">
6
- <data type="string"/>
6
+ <data type="string">
7
+ <param name="pattern">^[a-z_][a-zA-Z0-9_]*$</param>
8
+ </data>
7
9
  </attribute>
8
10
  <element name="parameters" rngui:header="Properties">
9
11
  <element name="label" rngui:label="Label">
@@ -120,9 +122,9 @@
120
122
  </element>
121
123
  <element name="extractor_type" rngui:label="Extractor Type">
122
124
  <choice>
123
- <value id='intrinsic'>Intrinsic</value>
124
- <value id='extrinsic'>Extrinsic</value>
125
- <value id='separate'>Separate</value>
125
+ <value rngui:label='Intrinsic'>intrinsic</value>
126
+ <value rngui:label='Extrinsic'>extrinsic</value>
127
+ <value rngui:label='Separate'>separate</value>
126
128
  </choice>
127
129
  </element>
128
130
  <element name="extractor_code" rngui:label="Extractor Code" rngui:hint='For intrinsic &amp; extrinsic data'>
@@ -4,8 +4,8 @@
4
4
  </attribute>
5
5
  <attribute name="cancel" rngui:label="Cancel" rngui:default="last" rngui:hint="Set 'Wait' to 1 for standard Event-based Gateway.">
6
6
  <choice>
7
- <value id='last'>After Last Task in Branch</value>
8
- <value id='first'>After First Task in Branch (Event-Based Gateway)</value>
7
+ <value rngui:label='After Last Task in Branch'>last</value>
8
+ <value rngui:label='After First Task in Branch (Event-Based Gateway)'>first</value>
9
9
  </choice>
10
10
  </attribute>
11
11
  <element rngui:ignore="true" name="parallel_branch">
@@ -29,9 +29,9 @@
29
29
  </element>
30
30
  <element name="extractor_type" rngui:label="Extractor Type">
31
31
  <choice>
32
- <value id='intrinsic'>Intrinsic</value>
33
- <value id='extrinsic'>Extrinsic</value>
34
- <value id='separate'>Separate</value>
32
+ <value rngui:label='Intrinsic'>intrinsic</value>
33
+ <value rngui:label='Extrinsic'>extrinsic</value>
34
+ <value rngui:label='Separate'>separate</value>
35
35
  </choice>
36
36
  </element>
37
37
  <element name="extractor_code" rngui:label="Extractor Code" rngui:hint='For intrinsic &amp; extrinsic data'>
@@ -63,6 +63,9 @@ function WFAdaptorManifestation(adaptor) {
63
63
  //{{{ Render the details from rng (right hand side of graph tab)
64
64
  this.update_details = function(svgid){
65
65
  var tab = $('#dat_details');
66
+ var focus_ele = $(':focus',tab);
67
+ var focus_path = focus_ele.attr('data-relaxngui-path');
68
+ var focus_pos = focus_ele.prop('selectionStart');
66
69
  var node = self.adaptor.description.get_node_by_svg_id(svgid).get(0);
67
70
  tab.empty();
68
71
  if (self.adaptor.description.elements[$(node).attr('svg-subtype')]) {
@@ -82,6 +85,14 @@ function WFAdaptorManifestation(adaptor) {
82
85
  nn.removeAttr('svg-subtype');
83
86
  nn.removeAttr('svg-label');
84
87
  save['details'].content(nn);
88
+ // only after setting content can we set the focus and position. It might loose some stuff nonetheless.
89
+ if (focus_ele.length > 0) {
90
+ var ele = $('[data-relaxngui-path="' + focus_path + '"]',tab)[0];
91
+ ele.focus();
92
+ if (ele.setSelectionRange) {
93
+ ele.setSelectionRange(focus_pos,focus_pos);
94
+ }
95
+ }
85
96
  format_visual_forms();
86
97
  }
87
98
  }; //}}}
@@ -1444,7 +1455,7 @@ function WFAdaptorManifestation(adaptor) {
1444
1455
  this.elements.parallel_event_one = { /*{{{*/
1445
1456
  'parent': 'parallel_finish',
1446
1457
  'illustrator': {//{{{
1447
- 'svg': self.adaptor.theme_dir + 'symbols/parallel_eventbased_exclusive.svg'
1458
+ 'svg': self.adaptor.theme_dir + 'symbols/choose_exclusive.svg'
1448
1459
  }//}}}
1449
1460
  }; /*}}}*/
1450
1461
  this.elements.parallel_branch_normal = { /*{{{*/
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.51"
3
+ s.version = "2.1.53"
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."
@@ -21,7 +21,7 @@ Gem::Specification.new do |s|
21
21
  s.email = 'juergen.mangler@gmail.com'
22
22
  s.homepage = 'http://cpee.org/'
23
23
 
24
- s.add_runtime_dependency 'riddl', '~> 0.126'
24
+ s.add_runtime_dependency 'riddl', '~> 1.0'
25
25
  s.add_runtime_dependency 'weel', '~> 1.99', '>= 1.99.111'
26
26
  s.add_runtime_dependency 'highline', '~> 2.0'
27
27
  s.add_runtime_dependency 'redis', '~> 5.0'
@@ -91,7 +91,7 @@ module CPEE
91
91
  opts[:sse_keepalive_frequency] ||= 10
92
92
  opts[:sse_connections] = {}
93
93
 
94
- opts[:statemachine] = CPEE::StateMachine.new opts[:states], %w{running simulating replaying finishing stopping abandoned finished} do |id|
94
+ opts[:statemachine] = CPEE::StateMachine.new opts[:states], %w{running simulating finishing stopping abandoned finished} do |id|
95
95
  CPEE::Persistence::extract_item(id,opts,"state")
96
96
  end
97
97
 
@@ -125,7 +125,12 @@ module CPEE
125
125
  doc.find('/p:properties/p:dslx').first.add XML::Smart::string(val).root rescue nil
126
126
  end #}}}
127
127
  if val = CPEE::Persistence::extract_item(id,opts,'description') #{{{
128
- doc.find('/p:properties/p:description').first.add XML::Smart::string(val).root rescue nil
128
+ d = XML::Smart::string(val).root rescue nil
129
+ if d.nil?
130
+ doc.find('/p:properties/p:description').first.text = val
131
+ else
132
+ doc.find('/p:properties/p:description').first.add d
133
+ end
129
134
  end #}}}
130
135
  doc.find('/p:properties/p:transformation/p:description').first.text = CPEE::Persistence::extract_item(id,opts,'transformation/description')
131
136
  doc.find('/p:properties/p:transformation/p:dataelements').first.text = CPEE::Persistence::extract_item(id,opts,'transformation/dataelements')
@@ -648,21 +653,26 @@ module CPEE
648
653
 
649
654
  class PutDescription < Riddl::Implementation #{{{
650
655
  def self::transform(descxml,tdesc,tdesctype,tdata,tdatatype,tendp,tendptype,hw,opts) #{{{
651
- desc = XML::Smart::string(descxml)
652
- desc.register_namespace 'p', 'http://cpee.org/ns/description/1.0'
656
+ desc = XML::Smart::string(descxml) rescue nil
657
+ if desc.nil?
658
+ if descxml.empty?
659
+ tdesctype = tdatatype = tendptype = 'clean'
660
+ end
661
+ else
662
+ desc.register_namespace 'p', 'http://cpee.org/ns/description/1.0'
663
+ if desc.root.children.empty?
664
+ tdesctype = tdatatype = tendptype = 'clean'
665
+ end
666
+ end
653
667
 
654
668
  dslx = nil
655
669
  dsl = nil
656
670
  de = {}
657
671
  ep = {}
658
672
 
659
- if desc.root.children.empty?
660
- tdesctype = tdatatype = tendptype = 'clean'
661
- end
662
-
663
673
  ### description transformation, including dslx to dsl
664
674
  addit = if tdesctype == 'copy' || tdesc.empty?
665
- desc
675
+ desc || ''
666
676
  elsif tdesctype == 'rest' && !tdesc.empty?
667
677
  srv = Riddl::Client.interface(tdesc,opts[:transformation_service])
668
678
  status, res = srv.post [
@@ -670,15 +680,15 @@ module CPEE
670
680
  Riddl::Parameter::Simple.new("type","description")
671
681
  ]
672
682
  if status >= 200 && status < 300
673
- XML::Smart::string(res[0].value.read).root
683
+ XML::Smart::string(res[0].value.read)
674
684
  else
675
685
  raise 'Could not extract dslx'
676
686
  end
677
687
  elsif tdesctype == 'xslt' && !tdesc.empty?
678
688
  trans = XML::Smart::open_unprotected(tdesc)
679
- desc.transform_with(trans).root
689
+ desc.transform_with(trans)
680
690
  elsif tdesctype == 'clean'
681
- XML::Smart::open_unprotected(opts[:empty_dslx]).root
691
+ XML::Smart::open_unprotected(opts[:empty_dslx])
682
692
  else
683
693
  nil
684
694
  end
@@ -689,7 +699,7 @@ module CPEE
689
699
 
690
700
  ### dataelements extraction
691
701
  addit = if tdatatype == 'rest' && !tdata.empty?
692
- srv = Riddl::Client.interface(tdata,@opts[:transformation_service])
702
+ srv = Riddl::Client.interface(tdata,opts[:transformation_service])
693
703
  status, res = srv.post [
694
704
  Riddl::Parameter::Complex.new("description","text/xml",descxml),
695
705
  Riddl::Parameter::Simple.new("type","dataelements")
@@ -715,7 +725,7 @@ module CPEE
715
725
 
716
726
  ### endpoints extraction
717
727
  addit = if tendptype == 'rest' && !tdata.empty?
718
- srv = Riddl::Client.interface(tendp,@opts[:transformation_service])
728
+ srv = Riddl::Client.interface(tendp,opts[:transformation_service])
719
729
  status, res = srv.post [
720
730
  Riddl::Parameter::Complex.new("description","text/xml",descxml),
721
731
  Riddl::Parameter::Simple.new("type","endpoints")
data/lib/cpee/message.rb CHANGED
@@ -15,8 +15,20 @@
15
15
  module CPEE
16
16
 
17
17
  module Message
18
- WHO = 'cpee'
19
- TYPE = 'instance'
18
+ @@who = 'cpee'
19
+ @@type = 'instance'
20
+ def self::who #{{{
21
+ @@who
22
+ end #}}}
23
+ def self::who=(it) #{{{
24
+ @@who = it
25
+ end #}}}
26
+ def self::type #{{{
27
+ @@type
28
+ end #}}}
29
+ def self::type=(it) #{{{
30
+ @@type = it
31
+ end #}}}
20
32
 
21
33
  def self::set_workers(workers)
22
34
  @@tworkers = (workers < 1 && workers > 99 ? 1 : workers).freeze
@@ -32,17 +44,17 @@ module CPEE
32
44
  topic = ::File::dirname(event)
33
45
  name = ::File::basename(event)
34
46
  payload = {
35
- WHO => cpee,
36
- TYPE + '-url' => File.join(cpee,instance.to_s),
37
- TYPE => instance,
47
+ @@who => cpee,
48
+ @@type + '-url' => File.join(cpee,instance.to_s),
49
+ @@type => instance,
38
50
  'topic' => topic,
39
51
  'type' => type,
40
52
  'name' => name,
41
53
  'timestamp' => Time.now.xmlschema(3),
42
54
  'content' => content
43
55
  }
44
- payload[TYPE + '-uuid'] = instance_uuid if instance_uuid
45
- payload[TYPE + '-name'] = instance_name if instance_name
56
+ payload[@@type + '-uuid'] = instance_uuid if instance_uuid
57
+ payload[@@type + '-name'] = instance_name if instance_name
46
58
 
47
59
  backend.publish(type.to_s + ':' + target + ':' + event.to_s,
48
60
  instance.to_s + ' ' +
@@ -55,7 +67,7 @@ module CPEE
55
67
  topic = ::File::dirname(event)
56
68
  name = ::File::basename(event)
57
69
  payload = {
58
- WHO => cpee,
70
+ @@who => cpee,
59
71
  'topic' => topic,
60
72
  'type' => type,
61
73
  'name' => name,
@@ -19,6 +19,9 @@ module CPEE
19
19
  def self::obj #{{{
20
20
  @@obj
21
21
  end #}}}
22
+ def self::obj=(it) #{{{
23
+ @@obj = it
24
+ end #}}}
22
25
 
23
26
  def self::set_list(id,opts,item,values,deleted=[]) #{{{
24
27
  ah = AttributesHelper.new
@@ -81,6 +84,15 @@ module CPEE
81
84
  end
82
85
  end
83
86
 
87
+ def self::new_object(opts)
88
+ id = opts[:redis].zrevrange(@@obj + 's', 0, 0).first.to_i + 1
89
+ opts[:redis].zadd(@@obj + 's',id,id)
90
+ id
91
+ end
92
+ def self::new_static_object(id,opts)
93
+ opts[:redis].set(File.join(@@obj + ":#{id}",'state'),'')
94
+ nil
95
+ end
84
96
  def self::new_object(opts)
85
97
  id = opts[:redis].zrevrange(@@obj + 's', 0, 0).first.to_i + 1
86
98
  opts[:redis].zadd(@@obj + 's',id,id)
@@ -8,7 +8,6 @@
8
8
  <value>ready</value>
9
9
  <value>running</value>
10
10
  <value>simulating</value>
11
- <value>replaying</value>
12
11
  <value>stopping</value>
13
12
  <value>stopped</value>
14
13
  <value>abandoned</value>
@@ -22,7 +21,6 @@
22
21
  <value>ready</value>
23
22
  <value>running</value>
24
23
  <value>simulating</value>
25
- <value>replaying</value>
26
24
  <value>stopping</value>
27
25
  <value>stopped</value>
28
26
  <value>abandoned</value>
data/lib/properties.xml CHANGED
@@ -38,7 +38,6 @@
38
38
  <value>ready</value>
39
39
  <value>running</value>
40
40
  <value>simulating</value>
41
- <value>replaying</value>
42
41
  <value>stopping</value>
43
42
  <value>stopped</value>
44
43
  <value>abandoned</value>
@@ -133,7 +132,7 @@
133
132
  <parameter name="dslx" mimetype="*/xml"/>
134
133
  </message> <!--}}}-->
135
134
  <message name="description"> <!--{{{-->
136
- <parameter name="description" mimetype="*/xml"/>
135
+ <parameter name="description" mimetype="*"/>
137
136
  </message> <!--}}}-->
138
137
 
139
138
  <message name="transformation"> <!--{{{-->
@@ -42,8 +42,8 @@ class ConnectionWrapper < WEEL::ConnectionWrapperBase
42
42
  end# }}}
43
43
  def self::inform_connectionwrapper_error(arguments,err) # {{{
44
44
  controller = arguments[0]
45
- p err.message
46
- p err.backtrace
45
+ puts err.message
46
+ puts err.backtrace
47
47
  controller.notify("executionhandler/error", :message => err.backtrace[0].gsub(/([\w -_]+):(\d+):in.*/,'\\1, Line \2: ') + err.message)
48
48
  end # }}}
49
49
  def self::inform_position_change(arguments,ipc={}) # {{{
@@ -64,11 +64,11 @@ class ConnectionWrapper < WEEL::ConnectionWrapperBase
64
64
  @guard_items = []
65
65
  end # }}}
66
66
 
67
- def prepare(readonly, endpoints, parameters, replay=false) #{{{
67
+ def prepare(readonly, endpoints, parameters) #{{{
68
68
  @handler_endpoint = endpoints.is_a?(Array) ? endpoints.map{ |ep| readonly.endpoints[ep] }.compact : readonly.endpoints[endpoints]
69
- if @controller.attributes['mock']
69
+ if @controller.attributes['twin_engine']
70
70
  @handler_endpoint_orig = @handler_endpoint
71
- @handler_endpoint = @controller.attributes['mock'].to_s + '?original_endpoint=' + Riddl::Protocols::Utils::escape(@handler_endpoint)
71
+ @handler_endpoint = @controller.attributes['twin_engine'].to_s + '?original_endpoint=' + Riddl::Protocols::Utils::escape(@handler_endpoint)
72
72
  end
73
73
  params = parameters.dup
74
74
  params[:arguments] = params[:arguments].dup if params[:arguments]
@@ -127,7 +127,7 @@ class ConnectionWrapper < WEEL::ConnectionWrapperBase
127
127
  params << Riddl::Header.new("CPEE-CALLBACK-ID",callback)
128
128
  params << Riddl::Header.new("CPEE-ACTIVITY",@handler_position)
129
129
  params << Riddl::Header.new("CPEE-LABEL",@label||'')
130
- params << Riddl::Header.new("CPEE-REPLAY",@controller.attributes['replayer_target']) if @controller.attributes[:replayer] && @controller.attributes['replayer_target']
130
+ params << Riddl::Header.new("CPEE-TWIN-TARGET",@controller.attributes['twin_target']) if @controller.attributes['twin_target']
131
131
  @controller.attributes.each do |key,value|
132
132
  params << Riddl::Header.new("CPEE-ATTR-#{key.to_s.gsub(/_/,'-')}",value)
133
133
  end
@@ -142,19 +142,55 @@ class ConnectionWrapper < WEEL::ConnectionWrapperBase
142
142
  @handler_passthrough = callback
143
143
  @controller.callback(self,callback,:'activity-uuid' => @handler_activity_uuid, :label => @label, :activity => @handler_position)
144
144
 
145
+ pp params
146
+
145
147
  status, result, headers = client.request type => params
146
148
  @guard_files += result
147
149
 
148
150
  if status == 561
149
- @handler_endpoint = @handler_endpoint_orig
150
- params.delete_if { |p| p.name == 'original_endpoint' }
151
- params.each do |p|
152
- if p.name == 'attributes'
153
- t = JSON::parse(p.value) rescue {}
154
- t['mock'] = @controller.attributes['mock']
155
- p.value = t.to_json
151
+ if @controller.attributes['twin_translate']
152
+ gettrans = Riddl::Client.new(@controller.attributes['twin_translate'])
153
+ gtstatus, gtresult, gtheaders = gettrans.get
154
+ if gtstatus >= 200 && gtstatus < 300
155
+ transwhat = case headers['CPEE-TWIN-TASKTYPE']
156
+ when 'i'; 'instantiation'
157
+ when 'ir'; 'ipc-receive'
158
+ when 'is'; 'ipc-send'
159
+ else
160
+ 'instantiation'
161
+ end
162
+ JSON::parse(gtresult.first.value.read).each do |e|
163
+ if e['type'] == transwhat
164
+ @handler_endpoint = e['endpoint'] if e['endpoint']
165
+ e['arguments']&.each do |k,a|
166
+ if a.is_a? String
167
+ hname = a.gsub(/-/,'_')
168
+ a = headers[hname] if headers[hname]
169
+ elsif a.is_a? Hash
170
+ a.each do |k_ht, a_ht|
171
+ hname = a_ht.gsub(/-/,'_')
172
+ a[k_ht] = headers[hname] if headers[hname]
173
+ end
174
+ end
175
+ params.each do |p|
176
+ if p.name == k
177
+ if a.is_a? String
178
+ p.value = a
179
+ elsif a.is_a? Hash
180
+ ohash = JSON::parse(p.value) rescue {}
181
+ ohash.merge!(a)
182
+ p.value = JSON.generate(ohash)
183
+ end
184
+ end
185
+ end
186
+ end
187
+ end
188
+ end
156
189
  end
190
+ else
191
+ @handler_endpoint = @handler_endpoint_orig
157
192
  end
193
+ params.delete_if { |p| p.name == 'original_endpoint' }
158
194
  end
159
195
  end while status == 561
160
196