cpee 1.4.18 → 1.4.20

Sign up to get free protection for your applications and to get access to all the features.
Files changed (116) hide show
  1. checksums.yaml +4 -4
  2. data/cockpit/testsets/Subprocess.xml +52 -0
  3. data/cockpit/testsets/Take_5.xml +44 -0
  4. data/cockpit/testsets/testsets.xml +1 -0
  5. data/cpee.gemspec +1 -1
  6. data/lib/cpee/controller.rb +7 -31
  7. data/lib/cpee/empty_workflow.rb +8 -4
  8. data/lib/cpee/implementation.rb +9 -1
  9. data/lib/cpee/instantiation.rb +40 -17
  10. data/lib/cpee/value_helper.rb +32 -0
  11. data/lib/engine.xml +1 -1
  12. data/log/display.rb +46 -0
  13. data/log/logs/27d46c68-d457-4ca8-808a-094585842aea.xes.yaml +130 -0
  14. data/log/logs/292ee7f7-fab8-438d-b251-5fc4d13b3d5b.xes.yaml +171 -0
  15. data/log/logs/546a855f-6223-49ed-bc7d-c256b391663b.xes.yaml +74 -0
  16. data/log/logs/5673f24b-5ac0-4bd6-b315-16992f02ddbb.xes.yaml +336 -0
  17. data/log/logs/7a4ad7e9-2fdb-41da-a623-094f5eaca9ce.xes.yaml +74 -0
  18. data/log/logs/7d24f231-44db-4d0b-8193-4601ede4591e.xes.yaml +167 -0
  19. data/log/logs/8abdeac5-a28a-4aad-9fad-e47e47f58f0a.xes.yaml +171 -0
  20. data/log/logs/a6ff458b-8e56-4411-a552-9b943ed69d6b.xes.yaml +128 -0
  21. data/log/logs/ccb051e7-639f-4b51-a1e3-3fd5a55f2c02.xes.yaml +128 -0
  22. data/log/logs/fbc5fa87-ba3c-40b9-9605-e1bb1cc7e0d9.xes.yaml +130 -0
  23. data/log/sic.rb +51 -0
  24. data/log/template.xes_yaml +3 -1
  25. data/log/xes_xml.rb +1 -1
  26. data/log/xes_yaml.pid +1 -0
  27. data/log/xes_yaml.rb +1 -1
  28. data/server/dev.rb +33 -0
  29. data/server/handlerwrappers/default.rb +5 -2
  30. data/server/{resources → instances/1}/notifications/ruleengine/consumer-secret +0 -0
  31. data/server/{resources → instances/1}/notifications/ruleengine/producer-secret +0 -0
  32. data/server/{resources → instances/1}/notifications/ruleengine/subscription.xml +0 -0
  33. data/server/instances/1/properties.xml +31 -0
  34. data/server/instances/10/notifications/1b735894fe9c3cc45308d1ed4cd6b930/consumer-secret +1 -0
  35. data/server/instances/10/notifications/1b735894fe9c3cc45308d1ed4cd6b930/producer-secret +1 -0
  36. data/server/instances/10/notifications/1b735894fe9c3cc45308d1ed4cd6b930/subscription.xml +5 -0
  37. data/server/instances/10/notifications/logging/consumer-secret +1 -0
  38. data/server/instances/10/notifications/logging/producer-secret +1 -0
  39. data/server/instances/10/notifications/logging/subscription.xml +16 -0
  40. data/server/instances/10/properties.xml +80 -0
  41. data/server/instances/11/notifications/logging/consumer-secret +1 -0
  42. data/server/instances/11/notifications/logging/producer-secret +1 -0
  43. data/server/instances/11/notifications/logging/subscription.xml +16 -0
  44. data/server/instances/11/properties.xml +97 -0
  45. data/server/instances/12/notifications/2678055be8f23525a98b5c031fe2ee46/consumer-secret +1 -0
  46. data/server/instances/12/notifications/2678055be8f23525a98b5c031fe2ee46/producer-secret +1 -0
  47. data/server/instances/12/notifications/2678055be8f23525a98b5c031fe2ee46/subscription.xml +5 -0
  48. data/server/instances/12/notifications/logging/consumer-secret +1 -0
  49. data/server/instances/12/notifications/logging/producer-secret +1 -0
  50. data/server/instances/12/notifications/logging/subscription.xml +16 -0
  51. data/server/instances/12/properties.xml +80 -0
  52. data/server/instances/13/notifications/90d34985542a88c3071d176f6400efe7/consumer-secret +1 -0
  53. data/server/instances/13/notifications/90d34985542a88c3071d176f6400efe7/producer-secret +1 -0
  54. data/server/instances/13/notifications/90d34985542a88c3071d176f6400efe7/subscription.xml +38 -0
  55. data/server/instances/13/notifications/logging/consumer-secret +1 -0
  56. data/server/instances/13/notifications/logging/producer-secret +1 -0
  57. data/server/instances/13/notifications/logging/subscription.xml +16 -0
  58. data/server/instances/13/properties.xml +97 -0
  59. data/server/instances/14/notifications/fa408cd6922b14cb1bfeee36e895f636/consumer-secret +1 -0
  60. data/server/instances/14/notifications/fa408cd6922b14cb1bfeee36e895f636/producer-secret +1 -0
  61. data/server/instances/14/notifications/fa408cd6922b14cb1bfeee36e895f636/subscription.xml +5 -0
  62. data/server/instances/14/notifications/logging/consumer-secret +1 -0
  63. data/server/instances/14/notifications/logging/producer-secret +1 -0
  64. data/server/instances/14/notifications/logging/subscription.xml +16 -0
  65. data/server/instances/14/properties.xml +80 -0
  66. data/server/instances/2/notifications/ruleengine/consumer-secret +1 -0
  67. data/server/instances/2/notifications/ruleengine/producer-secret +1 -0
  68. data/server/instances/2/notifications/ruleengine/subscription.xml +16 -0
  69. data/server/instances/2/properties.xml +31 -0
  70. data/server/instances/3/notifications/ruleengine/consumer-secret +1 -0
  71. data/server/instances/3/notifications/ruleengine/producer-secret +1 -0
  72. data/server/instances/3/notifications/ruleengine/subscription.xml +16 -0
  73. data/server/instances/3/properties.xml +31 -0
  74. data/server/instances/4/notifications/ruleengine/consumer-secret +1 -0
  75. data/server/instances/4/notifications/ruleengine/producer-secret +1 -0
  76. data/server/instances/4/notifications/ruleengine/subscription.xml +16 -0
  77. data/server/instances/4/properties.xml +31 -0
  78. data/server/instances/5/notifications/logging/consumer-secret +1 -0
  79. data/server/instances/5/notifications/logging/producer-secret +1 -0
  80. data/server/instances/5/notifications/logging/subscription.xml +16 -0
  81. data/server/instances/5/properties.xml +97 -0
  82. data/server/instances/6/notifications/ae6d58eba25c66a57b41181de8935442/consumer-secret +1 -0
  83. data/server/instances/6/notifications/ae6d58eba25c66a57b41181de8935442/producer-secret +1 -0
  84. data/server/instances/6/notifications/ae6d58eba25c66a57b41181de8935442/subscription.xml +5 -0
  85. data/server/instances/6/notifications/logging/consumer-secret +1 -0
  86. data/server/instances/6/notifications/logging/producer-secret +1 -0
  87. data/server/instances/6/notifications/logging/subscription.xml +16 -0
  88. data/server/instances/6/properties.xml +78 -0
  89. data/server/instances/7/notifications/d83173e3a3f5d1e05f5182042d5b627e/consumer-secret +1 -0
  90. data/server/instances/7/notifications/d83173e3a3f5d1e05f5182042d5b627e/producer-secret +1 -0
  91. data/server/instances/7/notifications/d83173e3a3f5d1e05f5182042d5b627e/subscription.xml +5 -0
  92. data/server/instances/7/notifications/logging/consumer-secret +1 -0
  93. data/server/instances/7/notifications/logging/producer-secret +1 -0
  94. data/server/instances/7/notifications/logging/subscription.xml +16 -0
  95. data/server/instances/7/properties.xml +78 -0
  96. data/server/instances/8/notifications/d6eb404431e5643fdbcf3a3ead0bdec5/consumer-secret +1 -0
  97. data/server/instances/8/notifications/d6eb404431e5643fdbcf3a3ead0bdec5/producer-secret +1 -0
  98. data/server/instances/8/notifications/d6eb404431e5643fdbcf3a3ead0bdec5/subscription.xml +5 -0
  99. data/server/instances/8/notifications/logging/consumer-secret +1 -0
  100. data/server/instances/8/notifications/logging/producer-secret +1 -0
  101. data/server/instances/8/notifications/logging/subscription.xml +16 -0
  102. data/server/instances/8/properties.xml +80 -0
  103. data/server/instances/9/notifications/e242ccf30f3878511aaf390e20e42d5d/consumer-secret +1 -0
  104. data/server/instances/9/notifications/e242ccf30f3878511aaf390e20e42d5d/producer-secret +1 -0
  105. data/server/instances/9/notifications/e242ccf30f3878511aaf390e20e42d5d/subscription.xml +38 -0
  106. data/server/instances/9/notifications/logging/consumer-secret +1 -0
  107. data/server/instances/9/notifications/logging/producer-secret +1 -0
  108. data/server/instances/9/notifications/logging/subscription.xml +16 -0
  109. data/server/instances/9/properties.xml +97 -0
  110. data/server/resources/notifications/logging/consumer-secret +1 -0
  111. data/server/resources/notifications/logging/producer-secret +1 -0
  112. data/server/resources/notifications/logging/subscription.xml +16 -0
  113. data/server/resources/transformation_dslx.xsl +2 -2
  114. data/server/server.pid +1 -0
  115. data/tools/cpee +22 -8
  116. metadata +103 -5
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 30952bfb498150aa39be236415fe6110733f848542c8b1cc875b4f112e3dfc3a
4
- data.tar.gz: fe3f5fb06beaf18d6db8f168b107ca0b621e06f9da36c99a1e564ed2af82d184
3
+ metadata.gz: abed28f89d5a0d2d9fb9a1b3441abf39da7558ece841f3f5bf5e73112cb761fe
4
+ data.tar.gz: b7ebbda76cd00081c7512a934e77ee23b5566b334d782ce03ae38f65ba610d6e
5
5
  SHA512:
6
- metadata.gz: d25f4a4c0e44459518b0df15d2a5c0b0c8d3e7ec80c6556b8453ee85c9db780acc697629089b02e609b67b2b87f4474fab0dd8e4291cb888b9978d84f33028a3
7
- data.tar.gz: d8404a79cbe9e6429f5ac44f43423f2826f497b8476bd2aa2775fa371d3ef0b7d27d497a3cd550952cff428a8692b676677b07d61d75d624f2ab1e930fc6b5cc
6
+ metadata.gz: 2655808212b6d633c2e85172285dd8cf8405bc8944a0cc00c22336e0189f585ea8ff6ed5ff0b33f55f54524bf8f55940659dd65788c3b2e5972f5bd51ccd714d
7
+ data.tar.gz: f170b5a892b8e5c649cf451074e987bc8f24a0c662491de161bfc95fc4c7a6992fb11e9e949c45f6ba2780978436ecb563b50c75ea4ca2a617527b6a3b40319a
@@ -0,0 +1,52 @@
1
+ <testset>
2
+ <dataelements/>
3
+ <handlerwrapper>DefaultHandlerWrapper</handlerwrapper>
4
+ <endpoints>
5
+ <timeout xmlns="http://riddl.org/ns/common-patterns/properties/1.0">http://gruppe.wst.univie.ac.at/~mangler/services/timeout.php</timeout>
6
+ <instantiate xmlns="http://riddl.org/ns/common-patterns/properties/1.0">http://localhost:9296/url/</instantiate>
7
+ </endpoints>
8
+ <positions/>
9
+ <description>
10
+ <description xmlns="http://cpee.org/ns/description/1.0">
11
+ <call id="a1" endpoint="instantiate">
12
+ <parameters>
13
+ <label>Take 5</label>
14
+ <method>:post</method>
15
+ <arguments>
16
+ <info>Take Time</info>
17
+ <behavior>wait_running</behavior>
18
+ <url>http://localhost/testsets/Take_5.xml</url>
19
+ <init>
20
+ <a>3</a>
21
+ </init>
22
+ </arguments>
23
+ </parameters>
24
+ <finalize output="result">data.instance = result['CPEE-INSTANCE']
25
+ data.res = result</finalize>
26
+ <update output="result"/>
27
+ <_timing>
28
+ <_timing_min/>
29
+ <_timing_max/>
30
+ <_timing_avg/>
31
+ </_timing>
32
+ <_notes>
33
+ <_notes_general/>
34
+ <_notes_output/>
35
+ <_attachments/>
36
+ </_notes>
37
+ </call>
38
+ </description>
39
+ </description>
40
+ <transformation>
41
+ <description type="copy"/>
42
+ <dataelements type="none"/>
43
+ <endpoints type="none"/>
44
+ </transformation>
45
+ <attributes>
46
+ <info xmlns="http://riddl.org/ns/common-patterns/properties/1.0">Subprocess</info>
47
+ <modeltype xmlns="http://riddl.org/ns/common-patterns/properties/1.0">CPEE</modeltype>
48
+ <theme xmlns="http://riddl.org/ns/common-patterns/properties/1.0">default</theme>
49
+ <customer xmlns="http://riddl.org/ns/common-patterns/properties/1.0">pilotfabrik</customer>
50
+ <status xmlns="http://riddl.org/ns/common-patterns/properties/1.0">development</status>
51
+ </attributes>
52
+ </testset>
@@ -0,0 +1,44 @@
1
+ <testset>
2
+ <dataelements/>
3
+ <handlerwrapper>DefaultHandlerWrapper</handlerwrapper>
4
+ <endpoints>
5
+ <timeout xmlns="http://riddl.org/ns/common-patterns/properties/1.0">http://gruppe.wst.univie.ac.at/~mangler/services/timeout.php</timeout>
6
+ </endpoints>
7
+ <positions/>
8
+ <description>
9
+ <description xmlns="http://cpee.org/ns/description/1.0">
10
+ <call id="a1" endpoint="timeout">
11
+ <parameters>
12
+ <label/>
13
+ <method>:post</method>
14
+ <arguments>
15
+ <timeout>5</timeout>
16
+ </arguments>
17
+ </parameters>
18
+ <finalize output="result">data.a = 17</finalize>
19
+ <update output="result"/>
20
+ <_timing>
21
+ <_timing_min/>
22
+ <_timing_max/>
23
+ <_timing_avg/>
24
+ </_timing>
25
+ <_notes>
26
+ <_notes_general/>
27
+ <_attachments/>
28
+ </_notes>
29
+ </call>
30
+ </description>
31
+ </description>
32
+ <transformation>
33
+ <description type="copy"/>
34
+ <dataelements type="none"/>
35
+ <endpoints type="none"/>
36
+ </transformation>
37
+ <attributes>
38
+ <info xmlns="http://riddl.org/ns/common-patterns/properties/1.0"></info>
39
+ <modeltype xmlns="http://riddl.org/ns/common-patterns/properties/1.0">CPEE</modeltype>
40
+ <theme xmlns="http://riddl.org/ns/common-patterns/properties/1.0">default</theme>
41
+ <customer xmlns="http://riddl.org/ns/common-patterns/properties/1.0">pilotfabrik</customer>
42
+ <status xmlns="http://riddl.org/ns/common-patterns/properties/1.0">development</status>
43
+ </attributes>
44
+ </testset>
@@ -1,5 +1,6 @@
1
1
  <testsets>
2
2
  <!--testset>Centurio</testset-->
3
+ <testset>Subprocess</testset>
3
4
  <testset>Async</testset>
4
5
  <testset>Log</testset>
5
6
  <testset>BCS</testset>
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = "cpee"
3
- s.version = "1.4.18"
3
+ s.version = "1.4.20"
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). If you just need workflow execution, without a rest/xmpp service exposing it, then use WEEL"
@@ -19,38 +19,10 @@ require ::File.dirname(__FILE__) + '/handler_properties'
19
19
  require ::File.dirname(__FILE__) + '/handler_notifications'
20
20
  require ::File.dirname(__FILE__) + '/callback'
21
21
  require ::File.dirname(__FILE__) + '/empty_workflow'
22
+ require ::File.dirname(__FILE__) + '/value_helper'
22
23
 
23
24
  module CPEE
24
25
 
25
- class ValueHelper #{{{
26
- def self::generate(value)
27
- if [String, Integer, Float, TrueClass, FalseClass, Date].include? value.class
28
- value.to_s
29
- elsif [Hash, Array].include? value.class
30
- JSON::generate(value)
31
- elsif value.respond_to?(:to_s)
32
- value.to_s
33
- end
34
- end
35
-
36
- def self::parse(value)
37
- case value.downcase
38
- when 'true'
39
- true
40
- when 'false'
41
- false
42
- when 'nil', 'null'
43
- nil
44
- else
45
- begin
46
- JSON::parse(value)
47
- rescue
48
- (Integer value rescue nil) || (Float value rescue nil) || value.to_s rescue nil || ''
49
- end
50
- end
51
- end
52
- end #}}}
53
-
54
26
  class AttributesHelper #{{{
55
27
  def translate(__attributes__,__dataelements__,__endpoints__)
56
28
  @data = WEEL::ReadHash.new(__dataelements__)
@@ -283,7 +255,7 @@ module CPEE
283
255
  pos.children.delete_all!
284
256
  @positions = @instance.positions
285
257
  @instance.positions.each do |p|
286
- pos.add("#{p.position}",p.detail,'passthrough' => p.passthrough)
258
+ pos.add("#{p.position}",p.detail,'passthrough' => p.passthrough.to_s.empty? ? nil : p.passthrough)
287
259
  end
288
260
  end
289
261
  end # }}}
@@ -580,6 +552,8 @@ module CPEE
580
552
  params = notf.map{|ke,va|Riddl::Parameter::Simple.new(ke,va)}
581
553
  params << Riddl::Header.new("CPEE-BASE",self.base)
582
554
  params << Riddl::Header.new("CPEE-INSTANCE",self.instance)
555
+ params << Riddl::Header.new("CPEE-INSTANCE-URL",self.instance_url)
556
+ params << Riddl::Header.new("CPEE-INSTANCE-UUID",self.uuid)
583
557
  client.post params
584
558
  elsif url.class == Riddl::Utils::Notifications::Producer::WS
585
559
  e = XML::Smart::string("<event/>")
@@ -618,7 +592,9 @@ module CPEE
618
592
  client = Riddl::Client.new(u,'http://riddl.org/ns/common-patterns/notifications-consumer/1.0/consumer.xml')
619
593
  params = notf.map{|ke,va|Riddl::Parameter::Simple.new(ke,va)}
620
594
  params << Riddl::Header.new("CPEE-BASE",self.base_url)
621
- params << Riddl::Header.new("CPEE-INSTANCE",self.instance_url)
595
+ params << Riddl::Header.new("CPEE-INSTANCE",self.instance)
596
+ params << Riddl::Header.new("CPEE-INSTANCE-URL",self.instance_url)
597
+ params << Riddl::Header.new("CPEE-INSTANCE-UUID",self.uuid)
622
598
  params << Riddl::Header.new("CPEE-CALLBACK",self.instance_url + '/callbacks/' + callback)
623
599
  @mutex.synchronize do
624
600
  status, result, headers = client.post params
@@ -1,18 +1,22 @@
1
1
  # This file is part of CPEE.
2
- #
2
+ #
3
3
  # CPEE is free software: you can redistribute it and/or modify it under the terms
4
4
  # of the GNU General Public License as published by the Free Software Foundation,
5
5
  # either version 3 of the License, or (at your option) any later version.
6
- #
6
+ #
7
7
  # CPEE is distributed in the hope that it will be useful, but WITHOUT ANY
8
8
  # WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
9
9
  # PARTICULAR PURPOSE. See the GNU General Public License for more details.
10
- #
10
+ #
11
11
  # You should have received a copy of the GNU General Public License along with
12
12
  # CPEE (file COPYING in the main directory). If not, see
13
13
  # <http://www.gnu.org/licenses/>.
14
14
 
15
- require 'weel'
15
+ if Module.const_defined?(:CPEE) && CPEE.const_defined?(:DEVELOP) && CPEE::DEVELOP.const_defined?(:WEEL)
16
+ require File.join(CPEE::DEVELOP::WEEL,'weel')
17
+ else
18
+ require 'weel'
19
+ end
16
20
  require ::File.dirname(__FILE__) + '/../../server/handlerwrappers/default'
17
21
 
18
22
  class EmptyWorkflow < WEEL
@@ -168,6 +168,10 @@ module CPEE
168
168
  controller[id].info = name
169
169
  controller[id].state_change!
170
170
 
171
+ @headers << Riddl::Header.new("CPEE-INSTANCE", controller[id].instance)
172
+ @headers << Riddl::Header.new("CPEE-INSTANCE-URL", controller[id].instance_url)
173
+ @headers << Riddl::Header.new("CPEE-INSTANCE-UUID", controller[id].uuid)
174
+
171
175
  Riddl::Parameter::Simple.new("id", id)
172
176
  end
173
177
  end #}}}
@@ -240,7 +244,11 @@ module CPEE
240
244
  return
241
245
  end
242
246
  Riddl::Parameter::Complex.new("res","text/plain") do
243
- controller[id].console(@p[0].value)
247
+ begin
248
+ controller[id].console(@p[0].value)
249
+ rescue => e
250
+ e.message
251
+ end
244
252
  end
245
253
  end
246
254
  end #}}}
@@ -19,6 +19,7 @@ require 'base64'
19
19
  require 'uri'
20
20
  require 'redis'
21
21
  require 'json'
22
+ require ::File.dirname(__FILE__) + '/value_helper'
22
23
 
23
24
  module CPEE
24
25
  module Instantiation
@@ -28,6 +29,7 @@ module CPEE
28
29
  module Helpers #{{{
29
30
  def load_testset(tdoc,cpee,name=nil) #{{{
30
31
  ins = -1
32
+ uuid = nil
31
33
  XML::Smart.string(tdoc) do |doc|
32
34
  doc.register_namespace 'desc', 'http://cpee.org/ns/description/1.0'
33
35
  doc.register_namespace 'prop', 'http://riddl.org/ns/common-patterns/properties/1.0'
@@ -40,10 +42,11 @@ module CPEE
40
42
  end
41
43
  end
42
44
 
43
- status, response = res.post Riddl::Parameter::Simple.new("info",doc.find("string(/testset/attributes/prop:info)"))
45
+ status, response, headers = res.post Riddl::Parameter::Simple.new("info",doc.find("string(/testset/attributes/prop:info)"))
44
46
 
45
47
  if status == 200
46
48
  ins = response.first.value
49
+ uuid = headers['CPEE_INSTANCE_UUID']
47
50
  params = []
48
51
 
49
52
  res = srv.resource("/#{ins}/properties/values")
@@ -76,10 +79,10 @@ module CPEE
76
79
  end
77
80
  end
78
81
  end
79
- return ins
82
+ [ins, uuid]
80
83
  end #}}}
81
84
  private :load_testset
82
- def handle_waiting(cpee,instance,behavior,selfurl,cblist) #{{{
85
+ def handle_waiting(cpee,instance,uuid,behavior,selfurl,cblist) #{{{
83
86
  if behavior =~ /^wait/
84
87
  condition = behavior.match(/_([^_]+)_/)&.[](1) || 'finished'
85
88
  @headers << Riddl::Header.new('CPEE-CALLBACK','true')
@@ -96,6 +99,7 @@ module CPEE
96
99
  cblist.rpush(cbk, cb)
97
100
  cblist.rpush(cbk, condition)
98
101
  cblist.rpush(cbk, instance)
102
+ cblist.rpush(cbk, uuid)
99
103
  cblist.rpush(cbk, File.join(cpee,instance))
100
104
  end
101
105
  end
@@ -112,7 +116,7 @@ module CPEE
112
116
  end
113
117
  end #}}}
114
118
  private :handle_starting
115
- def handle_data(cpee,instance,data)
119
+ def handle_data(cpee,instance,data) #{{{
116
120
  if data
117
121
  srv = Riddl::Client.new(cpee, cpee + "?riddl-description")
118
122
  JSON::parse(data).each do |k,v|
@@ -123,7 +127,7 @@ module CPEE
123
127
  sleep 0.42
124
128
  end rescue nil
125
129
  end
126
- end
130
+ end #}}}
127
131
  end #}}}
128
132
 
129
133
  class InstantiateUrl < Riddl::Implementation #{{{
@@ -140,17 +144,17 @@ module CPEE
140
144
  (@status = 500) && return
141
145
  end
142
146
 
143
- if (instance = load_testset(tdoc,cpee,@p[0].value)) == -1
147
+ if (instance, uuid = load_testset(tdoc,cpee,@p[0].value)).first == -1
144
148
  @status = 500
145
149
  else
146
150
  @headers << Riddl::Header.new('CPEE-INSTANTIATION',File.join(cpee,instance))
147
151
  handle_data cpee, instance, @p[3]&.value
148
- handle_waiting cpee, instance, @p[1].value, selfurl, cblist
152
+ handle_waiting cpee, instance, uuid, @p[1].value, selfurl, cblist
149
153
  handle_starting cpee, instance, @p[1].value
150
154
  return Riddl::Parameter::Simple.new("url",cpee + instance)
151
155
  end
152
156
  end
153
- end #}}}
157
+ end #}}}
154
158
 
155
159
  class InstantiateXML < Riddl::Implementation #{{{
156
160
  include Helpers
@@ -167,12 +171,12 @@ module CPEE
167
171
  @p[data].value.read
168
172
  end
169
173
 
170
- if (instance = load_testset(tdoc,cpee)) == -1
174
+ if (instance, uuid = load_testset(tdoc,cpee)).first == -1
171
175
  @status = 500
172
176
  else
173
177
  @headers << Riddl::Header.new('CPEE-INSTANTIATION',File.join(cpee,instance))
174
178
  handle_data cpee, instance, @p[data+1]&.value
175
- handle_waiting cpee, instance, behavior, selfurl, cblist
179
+ handle_waiting cpee, instance, uuid, behavior, selfurl, cblist
176
180
  handle_starting cpee, instance, behavior
177
181
  return Riddl::Parameter::Simple.new("url",cpee + instance)
178
182
  end
@@ -188,10 +192,17 @@ module CPEE
188
192
  cblist = @a[2]
189
193
  instance = @p[1].value
190
194
 
191
- handle_data cpee, instance, @p[2]&.value
192
- handle_waiting cpee, instance, @p[0].value, selfurl, cblist
193
- handle_starting cpee, instance, @p[0].value
194
- return Riddl::Parameter::Simple.new("url",cpee + instance)
195
+ srv = Riddl::Client.new(cpee, cpee + "?riddl-description")
196
+ res = srv.resource("/#{instance}/properties/values/attributes/uuid")
197
+ status, response = res.get
198
+
199
+ if status >= 200 && status < 300
200
+ uuid = XML::Smart::string(response.first.value).root.text
201
+ handle_data cpee, instance, @p[2]&.value
202
+ handle_waiting cpee, instance, uuid, @p[0].value, selfurl, cblist
203
+ handle_starting cpee, instance, @p[0].value
204
+ return Riddl::Parameter::Simple.new("url",cpee + instance)
205
+ end
195
206
  end
196
207
  end #}}}
197
208
 
@@ -204,23 +215,35 @@ module CPEE
204
215
  notification = JSON.parse(@p[3].value)
205
216
 
206
217
  key = @r.last
207
- cb, condition, instance, instance_url = cblist.lrange(key,0,-1)
218
+ cb, condition, instance, uuid, instance_url = cblist.lrange(key,0,-1)
219
+
220
+ send = {
221
+ 'CPEE-INSTANCE' => instance,
222
+ 'CPEE-INSTANCE-URL' => instance_url,
223
+ 'CPEE-INSTANCE-UUID' => uuid,
224
+ 'CPEE-STATE' => notification['state']
225
+ }
226
+
208
227
  if notification['state'] == condition
209
228
  cblist.del(key)
210
229
  srv = Riddl::Client.new(cpee, cpee + "?riddl-description")
211
230
  res = srv.resource("/#{instance}/properties/values/dataelements")
212
231
  status, response = res.get
213
- send = { 'CPEE-INSTANCE' => instance_url }
214
232
  if status >= 200 && status < 300
215
233
  doc = XML::Smart.string(response[0].value.read)
216
234
  doc.register_namespace 'p', 'http://riddl.org/ns/common-patterns/properties/1.0'
217
235
  doc.find('/p:value/*').each do |e|
218
- send[e.qname.name] = e.text
236
+ send[e.qname.name] = CPEE::ValueHelper::parse(e.text)
219
237
  end
220
238
  end
221
239
  Riddl::Client.new(cb).put [
222
240
  Riddl::Parameter::Complex.new('dataelements','application/json',JSON::generate(send))
223
241
  ]
242
+ else
243
+ Riddl::Client.new(cb).put [
244
+ Riddl::Header.new('CPEE-UPDATE','true'),
245
+ Riddl::Parameter::Complex.new('dataelements','application/json',JSON::generate(send))
246
+ ]
224
247
  end
225
248
  end
226
249
  end #}}}
@@ -0,0 +1,32 @@
1
+ module CPEE
2
+
3
+ class ValueHelper
4
+ def self::generate(value)
5
+ if [String, Integer, Float, TrueClass, FalseClass, Date].include? value.class
6
+ value.to_s
7
+ elsif [Hash, Array].include? value.class
8
+ JSON::generate(value)
9
+ elsif value.respond_to?(:to_s)
10
+ value.to_s
11
+ end
12
+ end
13
+
14
+ def self::parse(value)
15
+ case value.downcase
16
+ when 'true'
17
+ true
18
+ when 'false'
19
+ false
20
+ when 'nil', 'null'
21
+ nil
22
+ else
23
+ begin
24
+ JSON::parse(value)
25
+ rescue
26
+ (Integer value rescue nil) || (Float value rescue nil) || value.to_s rescue nil || ''
27
+ end
28
+ end
29
+ end
30
+ end
31
+
32
+ end
@@ -24,7 +24,7 @@
24
24
  </message>
25
25
 
26
26
  <message name="instance-id">
27
- <parameter name="id" type="string"/>
27
+ <parameter name="id" type="nonNegativeInteger"/>
28
28
  </message>
29
29
 
30
30
  <message name="instance-new">