cpee 1.3.176 → 1.3.177

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 (47) hide show
  1. checksums.yaml +4 -4
  2. data/cockpit/css/ui.css +26 -65
  3. data/cockpit/index.html +60 -77
  4. data/cockpit/js/details.js +8 -3
  5. data/cockpit/js/instance.js +24 -23
  6. data/cockpit/js/ui.js +1 -18
  7. data/cockpit/js/wfadaptor.cpee.js +452 -598
  8. data/cockpit/lib/ui.css +120 -124
  9. data/cockpit/lib/ui.js +84 -34
  10. data/cockpit/lib/wfadaptor.css +5 -5
  11. data/cockpit/lib/wfadaptor.js +5 -11
  12. data/cockpit/testsets/Worklist Parallel.xml +97 -0
  13. data/cockpit/testsets/Worklist Test CPEE.xml +39 -0
  14. data/cpee.gemspec +5 -5
  15. data/lib/cpee/controller.rb +1 -1
  16. data/lib/cpee/processtransformation/cpee.rb +2 -3
  17. data/server/instances/38/properties.xml +46 -0
  18. data/server/instances/39/properties.xml +58 -0
  19. data/server/instances/40/properties.xml +148 -0
  20. data/server/instances/41/properties.xml +46 -0
  21. data/server/instances/42/properties.xml +148 -0
  22. data/server/instances/43/notifications/9e7d05164a8539415d008b5bca3e0672/consumer-secret +1 -0
  23. data/server/instances/43/notifications/9e7d05164a8539415d008b5bca3e0672/producer-secret +1 -0
  24. data/server/instances/{37/notifications/2b67c793efcea22d88beaa28249001be → 43/notifications/9e7d05164a8539415d008b5bca3e0672}/subscription.xml +0 -0
  25. data/server/instances/43/properties.xml +148 -0
  26. data/server/instances/44/properties.xml +148 -0
  27. data/server/instances/45/notifications/442ed76f5da42dc9c57713840d713510/consumer-secret +1 -0
  28. data/server/instances/45/notifications/442ed76f5da42dc9c57713840d713510/producer-secret +1 -0
  29. data/server/instances/45/notifications/442ed76f5da42dc9c57713840d713510/subscription.xml +34 -0
  30. data/server/instances/45/properties.xml +148 -0
  31. data/server/instances/46/properties.xml +46 -0
  32. data/server/instances/47/notifications/63fba892899cc92fca381a666089e8d9/consumer-secret +1 -0
  33. data/server/instances/47/notifications/63fba892899cc92fca381a666089e8d9/producer-secret +1 -0
  34. data/server/instances/47/notifications/63fba892899cc92fca381a666089e8d9/subscription.xml +34 -0
  35. data/server/instances/47/notifications/e0cdacd3147aa31b0478a3ab1155db6c/consumer-secret +1 -0
  36. data/server/instances/47/notifications/e0cdacd3147aa31b0478a3ab1155db6c/producer-secret +1 -0
  37. data/server/instances/47/notifications/e0cdacd3147aa31b0478a3ab1155db6c/subscription.xml +34 -0
  38. data/server/instances/47/properties.xml +148 -0
  39. data/server/resources/transformation_dslx.xsl +4 -4
  40. data/server/server.pid +1 -0
  41. data/test/cb.rb +3 -3
  42. metadata +39 -20
  43. data/cockpit/lib/jquery-ui.custom.min.js +0 -8
  44. data/cockpit/lib/jquery-ui.custom.min.txt +0 -16
  45. data/cockpit/lib/jquery.redraw.js +0 -3
  46. data/server/instances/37/notifications/2b67c793efcea22d88beaa28249001be/consumer-secret +0 -1
  47. data/server/instances/37/notifications/2b67c793efcea22d88beaa28249001be/producer-secret +0 -1
@@ -124,7 +124,7 @@ svg text.normal {
124
124
  font-stretch:normal;
125
125
  text-align:center;
126
126
  line-height:125%;
127
- writing-mode:lr-tb;
127
+ writing-mode:horizontal-tb;
128
128
  text-anchor:middle;
129
129
  color:#000000;
130
130
  fill:#000000;
@@ -140,7 +140,7 @@ svg text.inverted {
140
140
  font-stretch:normal;
141
141
  text-align:center;
142
142
  line-height:125%;
143
- writing-mode:lr-tb;
143
+ writing-mode:horizontal-tb;
144
144
  text-anchor:middle;
145
145
  color:#ffffff;
146
146
  fill:#ffffff;
@@ -157,7 +157,7 @@ svg text.super {
157
157
  font-stretch:normal;
158
158
  text-align:center;
159
159
  line-height:100%;
160
- writing-mode:lr-tb;
160
+ writing-mode:horizontal-tb;
161
161
  text-anchor:start;
162
162
  color:#000000;
163
163
  fill:#000000;
@@ -188,7 +188,7 @@ svg text.normallarge {
188
188
  font-stretch:normal;
189
189
  text-align:center;
190
190
  line-height:125%;
191
- writing-mode:lr-tb;
191
+ writing-mode:horizontal-tb;
192
192
  text-anchor:middle;
193
193
  color:#000000;
194
194
  fill:#000000;
@@ -205,7 +205,7 @@ svg text.small {
205
205
  font-stretch:normal;
206
206
  text-align:center;
207
207
  line-height:125%;
208
- writing-mode:lr-tb;
208
+ writing-mode:horizontal-tb;
209
209
  text-anchor:middle;
210
210
  color:#000000;
211
211
  fill:#000000;
@@ -234,7 +234,7 @@ function WfDescription(wf_adaptor, wf_illustrator) { // Model {{{
234
234
  this.get_node_by_svg_id = function(svg_id) { // {{{
235
235
  return $('[svg-id = \'' + svg_id + '\']', description);
236
236
  } // }}}
237
- this.get_free_id = function() { // {{{
237
+ var get_free_id = this.get_free_id = function() { // {{{
238
238
  var existing = new Array();
239
239
  $('*[id]', description).each(function(){existing.push($(this).attr('id'))});
240
240
  var id = 1;
@@ -242,7 +242,7 @@ function WfDescription(wf_adaptor, wf_illustrator) { // Model {{{
242
242
  id += 1;
243
243
  }
244
244
  return 'a' + id;
245
- } // }}}
245
+ } // }}}
246
246
  var update = this.update = function(svgid) { // {{{
247
247
  id_counter = {};
248
248
  if(update_illustrator){
@@ -263,25 +263,19 @@ function WfDescription(wf_adaptor, wf_illustrator) { // Model {{{
263
263
  // }}}
264
264
  // Adaption functions {{{
265
265
  this.insert_after = function(new_node, target) { // {{{
266
- var nn;
267
- if(typeof(new_node) == 'function') {nn = new_node(target);}
268
- else {nn = new_node;}
266
+ var nn = $X(new_node.replace(/###/,get_free_id()));
269
267
  target.after(nn);
270
268
  nn.attr('new','true');
271
269
  update();
272
270
  } // }}}
273
271
  this.insert_first_into = function(new_node, target, selector) { // {{{
274
- var nn;
275
- if(typeof(new_node) == 'function') {nn = new_node(target);}
276
- else {nn = new_node;}
272
+ var nn = $X(new_node.replace(/###/,get_free_id()));
277
273
  target.prepend(nn);
278
274
  nn.attr('new','true');
279
275
  update();
280
276
  } // }}}
281
277
  this.insert_last_into = function(new_node, target, selector) { // {{{
282
- var nn;
283
- if(typeof(new_node) == 'function') {nn = new_node(target);}
284
- else {nn = new_node;}
278
+ var nn = $X(new_node.replace(/###/,get_free_id()));
285
279
  target.append(nn);
286
280
  nn.attr('new','true');
287
281
  update();
@@ -0,0 +1,97 @@
1
+ <?xml version="1.0"?>
2
+ <testset>
3
+ <dataelements>
4
+ <bla xmlns="http://riddl.org/ns/common-patterns/properties/1.0"/>
5
+ <a xmlns="http://riddl.org/ns/common-patterns/properties/1.0">1</a>
6
+ <b xmlns="http://riddl.org/ns/common-patterns/properties/1.0">1</b>
7
+ <c xmlns="http://riddl.org/ns/common-patterns/properties/1.0">1</c>
8
+ </dataelements>
9
+ <handlerwrapper>DefaultHandlerWrapper</handlerwrapper>
10
+ <endpoints>
11
+ <timeout xmlns="http://riddl.org/ns/common-patterns/properties/1.0">http://gruppe.wst.univie.ac.at/~mangler/services/timeout.php</timeout>
12
+ <cb xmlns="http://riddl.org/ns/common-patterns/properties/1.0">http://solo.wst.univie.ac.at:9302</cb>
13
+ </endpoints>
14
+ <positions/>
15
+ <description>
16
+ <description xmlns="http://cpee.org/ns/description/1.0">
17
+ <parallel svg-label="">
18
+ <parallel_branch svg-label="">
19
+ <call id="a2" endpoint="cb" svg-label="">
20
+ <parameters>
21
+ <label>"OKA"</label>
22
+ <method>:post</method>
23
+ <parameters>
24
+ <orgmodel>"organisation1"</orgmodel>
25
+ <domain>"Virtual Business 1"</domain>
26
+ <form>"http://solo.wst.univie.ac.at/form/form-f.html"</form>
27
+ <role>"regular"</role>
28
+ <schaden>"10001"</schaden>
29
+ <text>"sehr gut"</text>
30
+ </parameters>
31
+ </parameters>
32
+ <finalize>data.a = result.value</finalize>
33
+ </call>
34
+ </parallel_branch>
35
+ <parallel_branch svg-label="">
36
+ <call id="a3" endpoint="cb" svg-label="">
37
+ <parameters>
38
+ <label>"OKB"</label>
39
+ <method>:post</method>
40
+ <parameters>
41
+ <orgmodel>"organisation1"</orgmodel>
42
+ <domain>"Virtual Business 1"</domain>
43
+ <form>"http://solo.wst.univie.ac.at/form/form-f.html"</form>
44
+ <role>"regular"</role>
45
+ <schaden>"12341231"</schaden>
46
+ <text>"totalo kaputto"</text>
47
+ </parameters>
48
+ </parameters>
49
+ <finalize>data.b = result.value</finalize>
50
+ </call>
51
+ </parallel_branch>
52
+ <parallel_branch svg-label="">
53
+ <call id="a4" endpoint="cb">
54
+ <parameters>
55
+ <label>"OKC"</label>
56
+ <method>:post</method>
57
+ <parameters>
58
+ <orgmodel>"organisation1"</orgmodel>
59
+ <domain>"Virtual Business 1"</domain>
60
+ <form>"http://solo.wst.univie.ac.at/form/form-f.html"</form>
61
+ <role>"regular"</role>
62
+ <schaden>"3000"</schaden>
63
+ <text>"ein Totalschaden"</text>
64
+ </parameters>
65
+ </parameters>
66
+ <finalize>data.c = result.value</finalize>
67
+ </call>
68
+ </parallel_branch>
69
+ </parallel>
70
+ <call id="a1" endpoint="cb" svg-label="OK OR NOT OK">
71
+ <parameters>
72
+ <label>"OK OR NOT OK"</label>
73
+ <method>:post</method>
74
+ <parameters>
75
+ <orgmodel>"organisation1"</orgmodel>
76
+ <domain>"Virtual Business 1"</domain>
77
+ <form>"http://solo.wst.univie.ac.at/form/form-f.html"</form>
78
+ <role>"regular"</role>
79
+ <schaden>"55546"</schaden>
80
+ <text>"fetzen hin"</text>
81
+ </parameters>
82
+ </parameters>
83
+ <finalize>data.bla = result.value</finalize>
84
+ </call>
85
+ </description>
86
+ </description>
87
+ <transformation>
88
+ <description type="copy"/>
89
+ <dataelements type="none"/>
90
+ <endpoints type="none"/>
91
+ </transformation>
92
+ <attributes>
93
+ <info xmlns="http://riddl.org/ns/common-patterns/properties/1.0">asda</info>
94
+ <modeltype xmlns="http://riddl.org/ns/common-patterns/properties/1.0">CPEE</modeltype>
95
+ <organisation1 xmlns="http://riddl.org/ns/common-patterns/properties/1.0">http://cpee.org/~demo/orgviz/organisation_informatik.xml</organisation1>
96
+ </attributes>
97
+ </testset>
@@ -0,0 +1,39 @@
1
+ <?xml version="1.0"?>
2
+ <testset>
3
+ <dataelements><bla xmlns="http://riddl.org/ns/common-patterns/properties/1.0"/></dataelements>
4
+ <handlerwrapper>DefaultHandlerWrapper</handlerwrapper>
5
+ <endpoints>
6
+ <timeout xmlns="http://riddl.org/ns/common-patterns/properties/1.0">http://gruppe.wst.univie.ac.at/~mangler/services/timeout.php</timeout>
7
+ <cb xmlns="http://riddl.org/ns/common-patterns/properties/1.0">http://cpee.org:9302</cb>
8
+ </endpoints>
9
+ <positions/>
10
+ <description>
11
+ <description xmlns="http://cpee.org/ns/description/1.0">
12
+ <call id="a1" endpoint="cb">
13
+ <parameters>
14
+ <label>"OK OR NOT OK"</label>
15
+ <method>:post</method>
16
+ <parameters>
17
+ <orgmodel>"organisation1"</orgmodel>
18
+ <domain>"Virtual Business 1"</domain>
19
+ <form>"http://cpee.org/forms/form-f.html"</form>
20
+ <role>"regular"</role>
21
+ <schaden>"55546"</schaden>
22
+ <text>"fetzen hin"</text>
23
+ </parameters>
24
+ </parameters>
25
+ <manipulate>data.bla = result.value</manipulate>
26
+ </call>
27
+ </description>
28
+ </description>
29
+ <transformation>
30
+ <description type="copy"/>
31
+ <dataelements type="none"/>
32
+ <endpoints type="none"/>
33
+ </transformation>
34
+ <attributes>
35
+ <info xmlns="http://riddl.org/ns/common-patterns/properties/1.0">asda</info>
36
+ <modeltype xmlns="http://riddl.org/ns/common-patterns/properties/1.0">CPEE</modeltype>
37
+ <organisation1 xmlns="http://riddl.org/ns/common-patterns/properties/1.0">http://cpee.org/~demo/orgviz/organisation_informatik.xml</organisation1>
38
+ </attributes>
39
+ </testset>
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = "cpee"
3
- s.version = "1.3.176"
3
+ s.version = "1.3.177"
4
4
  s.platform = Gem::Platform::RUBY
5
5
  s.license = "LGPL-3"
6
6
  s.summary = "Preliminary release of cloud process execution engine (cpee). If you just need workflow execution, without a rest/xmpp service exposing it, then use WEEL"
@@ -18,8 +18,8 @@ Gem::Specification.new do |s|
18
18
  s.email = 'juergen.mangler@gmail.com'
19
19
  s.homepage = 'http://cpee.org/'
20
20
 
21
- s.add_runtime_dependency 'riddl'
22
- s.add_runtime_dependency 'weel'
23
- s.add_runtime_dependency 'savon'
24
- s.add_runtime_dependency 'highline'
21
+ s.add_runtime_dependency 'riddl', '>= 0.99.180'
22
+ s.add_runtime_dependency 'weel', '>= 1.99.39'
23
+ s.add_runtime_dependency 'savon', '~> 2'
24
+ s.add_runtime_dependency 'highline', '~> 1.6'
25
25
  end
@@ -251,7 +251,7 @@ module CPEE
251
251
  end
252
252
  end
253
253
  end
254
- evs.each { |e| @votes[e].delete(key) if @votes[e] }
254
+ evs.each { |e| @events[e].delete(key) if @events[e] }
255
255
  vos.each do |e|
256
256
  @callbacks.each{|voteid,cb|cb.delete_if!(e,key)}
257
257
  @votes[e].delete(key) if @votes[e]
@@ -54,8 +54,7 @@ module CPEE
54
54
 
55
55
  def print_Node(node,res)
56
56
  if node.endpoints.empty? && !node.script.nil? && node.script.strip != ''
57
- n = res.add('d:manipulate', 'id' => "a#{node.niceid}")
58
- n.text = node.script
57
+ n = res.add('d:manipulate', 'id' => "a#{node.niceid}", node.script)
59
58
  n.attributes['output'] = node.script_var unless node.script_var.nil?
60
59
  n.attributes['language'] = node.script_type unless node.script_type.nil?
61
60
  else
@@ -70,7 +69,7 @@ module CPEE
70
69
  par.add(k,v)
71
70
  end
72
71
  if !node.script.nil? && node.script.strip != ''
73
- x = n.add('manipulate',node.script)
72
+ x = n.add('d:finalize',node.script)
74
73
  x.attributes['output'] = node.script_var unless node.script_var.nil?
75
74
  x.attributes['language'] = node.script_type unless node.script_type.nil?
76
75
  end
@@ -0,0 +1,46 @@
1
+ <properties xmlns="http://riddl.org/ns/common-patterns/properties/1.0">
2
+ <attributes>
3
+ <info>Enter info here</info>
4
+ <modeltype>CPEE</modeltype>
5
+ </attributes>
6
+ <state>ready</state>
7
+ <handlerwrapper>DefaultHandlerWrapper</handlerwrapper>
8
+ <positions/>
9
+ <dataelements/>
10
+ <endpoints>
11
+ <timeout>http://gruppe.wst.univie.ac.at/~mangler/services/timeout.php</timeout>
12
+ </endpoints>
13
+ <dsl>call :a1, :cb, { :label =&gt; "", :method =&gt; :post, :parameters =&gt; nil }
14
+ </dsl>
15
+ <dslx>
16
+ <description xmlns="http://cpee.org/ns/description/1.0">
17
+ <call id="a1" endpoint="cb">
18
+ <parameters>
19
+ <label>""</label>
20
+ <method>:post</method>
21
+ <parameters/>
22
+ </parameters>
23
+ </call>
24
+ </description>
25
+ </dslx>
26
+ <status>
27
+ <id>0</id>
28
+ <message>undefined</message>
29
+ </status>
30
+ <description>
31
+ <description xmlns="http://cpee.org/ns/description/1.0">
32
+ <call id="a1" endpoint="cb">
33
+ <parameters>
34
+ <label>""</label>
35
+ <method>:post</method>
36
+ <parameters/>
37
+ </parameters>
38
+ </call>
39
+ </description>
40
+ </description>
41
+ <transformation>
42
+ <description type="copy"/>
43
+ <dataelements type="none"/>
44
+ <endpoints type="none"/>
45
+ </transformation>
46
+ </properties>
@@ -0,0 +1,58 @@
1
+ <properties xmlns="http://riddl.org/ns/common-patterns/properties/1.0">
2
+ <attributes>
3
+ <info>Enter info here</info>
4
+ <modeltype>CPEE</modeltype>
5
+ </attributes>
6
+ <state>stopped</state>
7
+ <handlerwrapper>DefaultHandlerWrapper</handlerwrapper>
8
+ <positions>
9
+ <a1>at</a1>
10
+ </positions>
11
+ <dataelements>
12
+ <b>8</b>
13
+ </dataelements>
14
+ <endpoints>
15
+ <cb>http://gruppe.wst.univie.ac.at/~mangler/services/callback.simple.php</cb>
16
+ </endpoints>
17
+ <dsl>call :a1, :cb, { :label =&gt; "Update", :method =&gt; :post, :parameters =&gt; nil }, &lt;&lt;-END, &lt;&lt;-END
18
+ data.a = result.value
19
+ END
20
+ data.b = result.value
21
+ END
22
+ </dsl>
23
+ <dslx>
24
+ <description xmlns="http://cpee.org/ns/description/1.0">
25
+ <call id="a1" endpoint="cb">
26
+ <parameters>
27
+ <label>"Update"</label>
28
+ <method>:post</method>
29
+ <parameters/>
30
+ </parameters>
31
+ <finalize>data.a = result.value</finalize>
32
+ <update>data.b = result.value</update>
33
+ </call>
34
+ </description>
35
+ </dslx>
36
+ <status>
37
+ <id>0</id>
38
+ <message>undefined</message>
39
+ </status>
40
+ <description>
41
+ <description xmlns="http://cpee.org/ns/description/1.0">
42
+ <call id="a1" endpoint="cb">
43
+ <parameters>
44
+ <label>"Update"</label>
45
+ <method>:post</method>
46
+ <parameters/>
47
+ </parameters>
48
+ <finalize>data.a = result.value</finalize>
49
+ <update>data.b = result.value</update>
50
+ </call>
51
+ </description>
52
+ </description>
53
+ <transformation>
54
+ <description type="copy"/>
55
+ <dataelements type="none"/>
56
+ <endpoints type="none"/>
57
+ </transformation>
58
+ </properties>
@@ -0,0 +1,148 @@
1
+ <properties xmlns="http://riddl.org/ns/common-patterns/properties/1.0">
2
+ <attributes>
3
+ <info>Enter info here</info>
4
+ <modeltype>CPEE</modeltype>
5
+ </attributes>
6
+ <state>ready</state>
7
+ <handlerwrapper>DefaultHandlerWrapper</handlerwrapper>
8
+ <positions/>
9
+ <dataelements>
10
+ <persons>3</persons>
11
+ <card>Visa_12345</card>
12
+ <airline>null</airline>
13
+ <hotels>[]</hotels>
14
+ <from>Vienna</from>
15
+ <to>Prague</to>
16
+ <costs>0</costs>
17
+ </dataelements>
18
+ <endpoints>
19
+ <bookAir>http://gruppe.wst.univie.ac.at/~mangler/services/airline.php</bookAir>
20
+ <bookHotel>http://gruppe.wst.univie.ac.at/~mangler/services/hotel.php</bookHotel>
21
+ <approve>http://gruppe.wst.univie.ac.at/~mangler/services/approval.php</approve>
22
+ </endpoints>
23
+ <dsl>call :a1, :bookAir, { :method =&gt; :post, :parameters =&gt; {:from =&gt; data.from, :to =&gt; data.to, :persons =&gt; data.persons} }, &lt;&lt;-END
24
+ data.airline = result.value('id')
25
+ data.costs += result.value('costs').to_f
26
+ status.update 1, 'Hotel'
27
+ END
28
+ parallel do
29
+ loop pre_test{data.persons &gt; 0} do
30
+ parallel_branch data.persons do |p|
31
+ call :a2, :bookHotel, { :method =&gt; :post, :parameters =&gt; {:to =&gt; data.to} }, &lt;&lt;-END
32
+ data.hotels &lt;&lt; result.value('id')
33
+ data.costs += result.value('costs').to_f
34
+ END
35
+ end
36
+ manipulate :a3, &lt;&lt;-END
37
+ data.persons -= 1
38
+ END
39
+ end
40
+ end
41
+ choose :inclusive do
42
+ alternative "data.costs &gt; 700" do
43
+ call :a4, :approve, { :method =&gt; :post, :parameters =&gt; {:costs =&gt; data.costs} }
44
+ end
45
+ end
46
+ </dsl>
47
+ <dslx>
48
+ <description xmlns="http://cpee.org/ns/description/1.0">
49
+ <call id="a1" endpoint="bookAir">
50
+ <parameters>
51
+ <method>:post</method>
52
+ <parameters>
53
+ <from>data.from</from>
54
+ <to>data.to</to>
55
+ <persons>data.persons</persons>
56
+ </parameters>
57
+ </parameters>
58
+ <finalize output="result"> data.airline = result.value('id')
59
+ data.costs += result.value('costs').to_f
60
+ status.update 1, 'Hotel'</finalize>
61
+ </call>
62
+ <parallel>
63
+ <loop pre_test="data.persons &gt; 0">
64
+ <parallel_branch pass="data.persons" local="p">
65
+ <call id="a2" endpoint="bookHotel">
66
+ <parameters>
67
+ <method>:post</method>
68
+ <parameters>
69
+ <to>data.to</to>
70
+ </parameters>
71
+ </parameters>
72
+ <finalize output="result"> data.hotels &lt;&lt; result.value('id')
73
+ data.costs += result.value('costs').to_f</finalize>
74
+ </call>
75
+ </parallel_branch>
76
+ <manipulate id="a3"> data.persons -= 1</manipulate>
77
+ </loop>
78
+ </parallel>
79
+ <choose>
80
+ <alternative condition="data.costs &gt; 700">
81
+ <call id="a4" endpoint="approve">
82
+ <parameters>
83
+ <method>:post</method>
84
+ <parameters>
85
+ <costs>data.costs</costs>
86
+ </parameters>
87
+ </parameters>
88
+ </call>
89
+ </alternative>
90
+ </choose>
91
+ </description>
92
+ </dslx>
93
+ <status>
94
+ <id>0</id>
95
+ <message>undefined</message>
96
+ </status>
97
+ <description>
98
+ <description xmlns="http://cpee.org/ns/description/1.0">
99
+ <call id="a1" endpoint="bookAir">
100
+ <parameters>
101
+ <method>:post</method>
102
+ <parameters>
103
+ <from>data.from</from>
104
+ <to>data.to</to>
105
+ <persons>data.persons</persons>
106
+ </parameters>
107
+ </parameters>
108
+ <finalize output="result"> data.airline = result.value('id')
109
+ data.costs += result.value('costs').to_f
110
+ status.update 1, 'Hotel'</finalize>
111
+ </call>
112
+ <parallel>
113
+ <loop pre_test="data.persons &gt; 0">
114
+ <parallel_branch pass="data.persons" local="p">
115
+ <call id="a2" endpoint="bookHotel">
116
+ <parameters>
117
+ <method>:post</method>
118
+ <parameters>
119
+ <to>data.to</to>
120
+ </parameters>
121
+ </parameters>
122
+ <finalize output="result"> data.hotels &lt;&lt; result.value('id')
123
+ data.costs += result.value('costs').to_f</finalize>
124
+ </call>
125
+ </parallel_branch>
126
+ <manipulate id="a3"> data.persons -= 1</manipulate>
127
+ </loop>
128
+ </parallel>
129
+ <choose>
130
+ <alternative condition="data.costs &gt; 700">
131
+ <call id="a4" endpoint="approve">
132
+ <parameters>
133
+ <method>:post</method>
134
+ <parameters>
135
+ <costs>data.costs</costs>
136
+ </parameters>
137
+ </parameters>
138
+ </call>
139
+ </alternative>
140
+ </choose>
141
+ </description>
142
+ </description>
143
+ <transformation>
144
+ <description type="copy"/>
145
+ <dataelements type="rest"/>
146
+ <endpoints type="rest"/>
147
+ </transformation>
148
+ </properties>