cpee 1.4.18 → 1.4.20

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 (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">