cpee 1.3.181 → 1.3.183
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.
- checksums.yaml +4 -4
- data/cockpit/css/ui.css +19 -60
- data/cockpit/css/wfadaptor.css +11 -0
- data/cockpit/index.html +45 -71
- data/cockpit/js/details.js +50 -139
- data/cockpit/js/instance.js +133 -185
- data/cockpit/js/parameters.js +57 -55
- data/cockpit/js/ui.js +4 -29
- data/cockpit/js/wfadaptor.js +190 -108
- data/cockpit/rngs/attributes.rng +8 -0
- data/cockpit/rngs/dataelements.rng +8 -0
- data/cockpit/rngs/endpoints.rng +8 -0
- data/cockpit/testsets/Concurrent.xml +6 -6
- data/cockpit/testsets/Coopis Testset.xml +12 -12
- data/cockpit/testsets/ICSOC Testset.xml +27 -27
- data/cockpit/testsets/Infinity.xml +4 -4
- data/cockpit/testsets/Linear.xml +10 -10
- data/cockpit/testsets/Mangler 1.xml +20 -20
- data/cockpit/testsets/Mangler 2.xml +18 -18
- data/cockpit/testsets/Promise.xml +258 -0
- data/cockpit/testsets/SOPROMO Test Sonification.xml +11 -11
- data/cockpit/testsets/Syncing P34 1.xml +12 -12
- data/cockpit/testsets/Syncing P34 2.xml +12 -12
- data/cockpit/testsets/Syncing P34 3.xml +12 -12
- data/cockpit/testsets/Syncing P34.xml +12 -12
- data/cockpit/testsets/TEST - Bad Loop.xml +39 -39
- data/cockpit/testsets/Update.xml +1 -1
- data/cockpit/testsets/Worklist Parallel.xml +8 -8
- data/cockpit/testsets/Worklist Test CPEE.xml +2 -2
- data/cockpit/testsets/Worklist Test.xml +2 -2
- data/cockpit/testsets/testsets.xml +2 -0
- data/cockpit/themes/adventure/rngs/alternative.rng +5 -0
- data/cockpit/themes/adventure/rngs/call.rng +29 -0
- data/cockpit/{rngtest2.rng → themes/adventure/rngs/callmanipulate.rng} +9 -9
- data/cockpit/themes/adventure/rngs/choose.rng +8 -0
- data/cockpit/themes/adventure/rngs/critical.rng +5 -0
- data/cockpit/themes/adventure/rngs/escape.rng +1 -0
- data/cockpit/themes/adventure/rngs/finalize.rng +6 -0
- data/cockpit/themes/adventure/rngs/group.rng +3 -0
- data/cockpit/themes/adventure/rngs/loop.rng +11 -0
- data/cockpit/themes/adventure/rngs/manipulate.rng +6 -0
- data/cockpit/themes/adventure/rngs/otherwise.rng +1 -0
- data/cockpit/themes/adventure/rngs/parallel.rng +5 -0
- data/cockpit/themes/adventure/rngs/parallel_branch.rng +8 -0
- data/cockpit/themes/adventure/rngs/update.rng +6 -0
- data/cockpit/themes/adventure/symbols/alternative.svg +4 -0
- data/cockpit/themes/adventure/symbols/call.svg +4 -0
- data/cockpit/themes/adventure/symbols/callmanipulate.svg +6 -0
- data/cockpit/themes/adventure/symbols/choose.svg +5 -0
- data/cockpit/themes/adventure/symbols/choose_exclusive.svg +5 -0
- data/cockpit/themes/adventure/symbols/choose_inclusive.svg +4 -0
- data/cockpit/themes/adventure/symbols/critical.svg +4 -0
- data/cockpit/themes/adventure/symbols/escape.svg +5 -0
- data/cockpit/themes/adventure/symbols/loop.svg +5 -0
- data/cockpit/themes/adventure/symbols/manipulate.svg +4 -0
- data/cockpit/themes/adventure/symbols/otherwise.svg +4 -0
- data/cockpit/themes/adventure/symbols/parallel.svg +5 -0
- data/cockpit/themes/adventure/symbols/parallel_branch.svg +4 -0
- data/cockpit/themes/adventure/symbols/scripts.svg +4 -0
- data/cockpit/themes/adventure/symbols/start.svg +3 -0
- data/cockpit/themes/adventure/theme.js +729 -0
- data/cockpit/themes/default/rngs/alternative.rng +5 -0
- data/cockpit/themes/default/rngs/call.rng +29 -0
- data/cockpit/themes/default/rngs/callmanipulate.rng +41 -0
- data/cockpit/themes/default/rngs/choose.rng +8 -0
- data/cockpit/themes/default/rngs/critical.rng +5 -0
- data/cockpit/themes/default/rngs/escape.rng +1 -0
- data/cockpit/themes/default/rngs/finalize.rng +6 -0
- data/cockpit/themes/default/rngs/group.rng +3 -0
- data/cockpit/themes/default/rngs/loop.rng +11 -0
- data/cockpit/themes/default/rngs/manipulate.rng +6 -0
- data/cockpit/themes/default/rngs/otherwise.rng +1 -0
- data/cockpit/themes/default/rngs/parallel.rng +5 -0
- data/cockpit/themes/default/rngs/parallel_branch.rng +8 -0
- data/cockpit/themes/default/rngs/update.rng +6 -0
- data/cockpit/themes/default/symbols/alternative.svg +4 -0
- data/cockpit/themes/default/symbols/call.svg +4 -0
- data/cockpit/themes/default/symbols/callmanipulate.svg +6 -0
- data/cockpit/themes/default/symbols/choose.svg +5 -0
- data/cockpit/themes/default/symbols/choose_exclusive.svg +5 -0
- data/cockpit/themes/default/symbols/choose_inclusive.svg +4 -0
- data/cockpit/themes/default/symbols/critical.svg +4 -0
- data/cockpit/themes/default/symbols/escape.svg +5 -0
- data/cockpit/themes/default/symbols/loop.svg +5 -0
- data/cockpit/themes/default/symbols/manipulate.svg +4 -0
- data/cockpit/themes/default/symbols/otherwise.svg +4 -0
- data/cockpit/themes/default/symbols/parallel.svg +5 -0
- data/cockpit/themes/default/symbols/parallel_branch.svg +4 -0
- data/cockpit/themes/default/symbols/scripts.svg +4 -0
- data/cockpit/themes/default/symbols/start.svg +3 -0
- data/cockpit/themes/default/theme.js +729 -0
- data/cockpit/themes/lego/rngs/alternative.rng +5 -0
- data/cockpit/themes/lego/rngs/call.rng +41 -0
- data/cockpit/themes/lego/rngs/choose.rng +8 -0
- data/cockpit/themes/lego/rngs/critical.rng +5 -0
- data/cockpit/themes/lego/rngs/loop.rng +11 -0
- data/cockpit/themes/lego/rngs/manipulate.rng +6 -0
- data/cockpit/themes/lego/rngs/parallel.rng +5 -0
- data/cockpit/themes/lego/rngs/parallel_branch.rng +8 -0
- data/cockpit/themes/lego/symbols/alternative.svg +4 -0
- data/cockpit/themes/lego/symbols/call.svg +4 -0
- data/cockpit/themes/lego/symbols/callmanipulate.svg +6 -0
- data/cockpit/themes/lego/symbols/callori.svg +4 -0
- data/cockpit/themes/lego/symbols/choose.svg +4 -0
- data/cockpit/themes/lego/symbols/choose_exclusive.svg +5 -0
- data/cockpit/themes/lego/symbols/choose_inclusive.svg +4 -0
- data/cockpit/themes/lego/symbols/critical.svg +4 -0
- data/cockpit/themes/lego/symbols/escape.svg +5 -0
- data/cockpit/themes/lego/symbols/lego.svg +72 -0
- data/cockpit/themes/lego/symbols/loop.svg +5 -0
- data/cockpit/themes/lego/symbols/manipulate.svg +4 -0
- data/cockpit/themes/lego/symbols/otherwise.svg +4 -0
- data/cockpit/themes/lego/symbols/parallel.svg +6 -0
- data/cockpit/themes/lego/symbols/parallel_branch.svg +4 -0
- data/cockpit/themes/lego/symbols/scripts.svg +4 -0
- data/cockpit/themes/lego/symbols/start.svg +3 -0
- data/cockpit/themes/lego/theme.js +742 -0
- data/cockpit/themes/promise/rngs/alternative.rng +5 -0
- data/cockpit/themes/promise/rngs/call.rng +41 -0
- data/cockpit/themes/promise/rngs/choose.rng +8 -0
- data/cockpit/themes/promise/rngs/critical.rng +5 -0
- data/cockpit/themes/promise/rngs/loop.rng +11 -0
- data/cockpit/themes/promise/rngs/manipulate.rng +6 -0
- data/cockpit/themes/promise/rngs/parallel.rng +5 -0
- data/cockpit/themes/promise/rngs/parallel_branch.rng +8 -0
- data/cockpit/themes/promise/symbols/alternative.svg +4 -0
- data/cockpit/themes/promise/symbols/call.svg +4 -0
- data/cockpit/themes/promise/symbols/callmanipulate.svg +6 -0
- data/cockpit/themes/promise/symbols/choose.svg +4 -0
- data/cockpit/themes/promise/symbols/choose_exclusive.svg +5 -0
- data/cockpit/themes/promise/symbols/choose_inclusive.svg +4 -0
- data/cockpit/themes/promise/symbols/critical.svg +4 -0
- data/cockpit/themes/promise/symbols/escape.svg +5 -0
- data/cockpit/themes/promise/symbols/loop.svg +5 -0
- data/cockpit/themes/promise/symbols/manipulate.svg +4 -0
- data/cockpit/themes/promise/symbols/otherwise.svg +4 -0
- data/cockpit/themes/promise/symbols/parallel.svg +6 -0
- data/cockpit/themes/promise/symbols/parallel_branch.svg +4 -0
- data/cockpit/themes/promise/symbols/preminder.svg +6 -0
- data/cockpit/themes/promise/symbols/scripts.svg +4 -0
- data/cockpit/themes/promise/symbols/start.svg +3 -0
- data/cockpit/themes/promise/theme.js +742 -0
- data/cpee.gemspec +2 -2
- data/lib/cpee/implementation.rb +15 -15
- data/server/handlerwrappers/default.rb +19 -19
- data/server/handlerwrappers/log.rb +264 -0
- data/server/instances/10/properties.xml +148 -0
- data/server/instances/11/properties.xml +149 -0
- data/server/instances/12/properties.xml +149 -0
- data/server/instances/13/properties.xml +149 -0
- data/server/instances/14/properties.xml +111 -0
- data/server/instances/15/properties.xml +113 -0
- data/server/instances/16/properties.xml +113 -0
- data/server/instances/17/properties.xml +149 -0
- data/server/instances/18/properties.xml +149 -0
- data/server/instances/19/properties.xml +114 -0
- data/server/instances/2/properties.xml +1 -1
- data/server/instances/20/properties.xml +113 -0
- data/server/instances/21/notifications/0851248d60c898cadd743d0dd5b6d273/consumer-secret +1 -0
- data/server/instances/21/notifications/0851248d60c898cadd743d0dd5b6d273/producer-secret +1 -0
- data/server/instances/21/notifications/0851248d60c898cadd743d0dd5b6d273/subscription.xml +6 -0
- data/server/instances/21/notifications/b7bac3f3010d433ce5d8f29338a06f9a/consumer-secret +1 -0
- data/server/instances/21/notifications/b7bac3f3010d433ce5d8f29338a06f9a/producer-secret +1 -0
- data/server/instances/21/notifications/b7bac3f3010d433ce5d8f29338a06f9a/subscription.xml +23 -0
- data/server/instances/21/properties.xml +149 -0
- data/server/instances/22/properties.xml +113 -0
- data/server/instances/23/properties.xml +88 -0
- data/server/instances/24/properties.xml +168 -0
- data/server/instances/25/properties.xml +149 -0
- data/server/instances/26/properties.xml +113 -0
- data/server/instances/27/properties.xml +141 -0
- data/server/instances/3/properties.xml +46 -0
- data/server/instances/4/properties.xml +148 -0
- data/server/instances/5/properties.xml +148 -0
- data/server/instances/6/properties.xml +148 -0
- data/server/instances/7/properties.xml +148 -0
- data/server/instances/8/properties.xml +148 -0
- data/server/instances/9/properties.xml +46 -0
- data/server/resources/properties.init +2 -1
- data/server/resources/transformation_dslx.xsl +12 -12
- data/server/server.pid +1 -0
- data/server/server.rb +2 -0
- metadata +152 -12
- data/cockpit/js/wfadaptor.cpee.js +0 -936
- data/cockpit/rngtest1.html +0 -53
- data/cockpit/rngtest1.rng +0 -38
- data/cockpit/rngtest1.xml +0 -16
- data/cockpit/rngtest2.html +0 -53
- data/cockpit/rngtest2.xml +0 -11
- data/cockpit/test.html +0 -46
data/cpee.gemspec
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
Gem::Specification.new do |s|
|
|
2
2
|
s.name = "cpee"
|
|
3
|
-
s.version = "1.3.
|
|
3
|
+
s.version = "1.3.183"
|
|
4
4
|
s.platform = Gem::Platform::RUBY
|
|
5
|
-
s.license = "LGPL-3"
|
|
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"
|
|
7
7
|
|
|
8
8
|
s.description = "see http://cpee.org"
|
data/lib/cpee/implementation.rb
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
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/>.
|
|
@@ -37,7 +37,7 @@ module CPEE
|
|
|
37
37
|
opts[:empty_dslx] ||= File.expand_path(File.dirname(__FILE__) + '/../../server/resources/empty_dslx.xml')
|
|
38
38
|
opts[:infinite_loop_stop] ||= 10000
|
|
39
39
|
|
|
40
|
-
opts[:runtime_options] << [
|
|
40
|
+
opts[:runtime_options] << [
|
|
41
41
|
"startclean", "Delete instances before starting.", Proc.new { |status|
|
|
42
42
|
Dir.glob(File.expand_path(File.dirname(__FILE__) + '/../../server/instances/*')).each do |d|
|
|
43
43
|
FileUtils.rm_r(d) if File.basename(d) =~ /^\d+$/
|
|
@@ -56,13 +56,13 @@ module CPEE
|
|
|
56
56
|
controller = {}
|
|
57
57
|
Dir[opts[:instances] + '/*/properties.xml'].each do |e|
|
|
58
58
|
id = ::File::basename(::File::dirname(e))
|
|
59
|
-
controller[id.to_i] = Controller.new(id,opts)
|
|
59
|
+
(controller[id.to_i] = Controller.new(id,opts)) rescue nil
|
|
60
60
|
end
|
|
61
61
|
|
|
62
62
|
interface 'properties' do |r|
|
|
63
63
|
id = r[:h]['RIDDL_DECLARATION_PATH'].split('/')[1].to_i
|
|
64
64
|
use Riddl::Utils::Properties::implementation(controller[id].properties, PropertiesHandler.new(controller[id]), opts[:mode]) if controller[id]
|
|
65
|
-
end
|
|
65
|
+
end
|
|
66
66
|
|
|
67
67
|
interface 'main' do
|
|
68
68
|
run CPEE::Instances, controller if get '*'
|
|
@@ -74,17 +74,17 @@ module CPEE
|
|
|
74
74
|
run CPEE::Callbacks, controller, opts if get
|
|
75
75
|
on resource do
|
|
76
76
|
run CPEE::ExCallback, controller if get || put || post || delete
|
|
77
|
-
end
|
|
78
|
-
end
|
|
79
|
-
end
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
80
|
end
|
|
81
81
|
|
|
82
82
|
interface 'notifications' do |r|
|
|
83
83
|
id = r[:h]['RIDDL_DECLARATION_PATH'].split('/')[1].to_i
|
|
84
84
|
use Riddl::Utils::Notifications::Producer::implementation(controller[id].notifications, NotificationsHandler.new(controller[id]), opts[:mode]) if controller[id]
|
|
85
85
|
end
|
|
86
|
-
end
|
|
87
|
-
end
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
88
|
|
|
89
89
|
class ExCallback < Riddl::Implementation #{{{
|
|
90
90
|
def response
|
|
@@ -95,7 +95,7 @@ module CPEE
|
|
|
95
95
|
if controller[id].callbacks.has_key?(callback)
|
|
96
96
|
controller[id].callbacks[callback].callback(@p,@h)
|
|
97
97
|
end
|
|
98
|
-
end
|
|
98
|
+
end
|
|
99
99
|
end
|
|
100
100
|
end #}}}
|
|
101
101
|
|
|
@@ -113,10 +113,10 @@ module CPEE
|
|
|
113
113
|
if opts[:mode] == :debug
|
|
114
114
|
controller[id].callbacks.each do |k,v|
|
|
115
115
|
cb.root.add("callback",{"id" => k},"[#{v.protocol.to_s}] #{v.info}")
|
|
116
|
-
end
|
|
116
|
+
end
|
|
117
117
|
end
|
|
118
118
|
cb.to_s
|
|
119
|
-
end
|
|
119
|
+
end
|
|
120
120
|
end
|
|
121
121
|
end #}}}
|
|
122
122
|
|
|
@@ -146,7 +146,7 @@ module CPEE
|
|
|
146
146
|
id += 1
|
|
147
147
|
Dir.mkdir(opts[:instances] + "/#{id}") rescue nil
|
|
148
148
|
break
|
|
149
|
-
end
|
|
149
|
+
end
|
|
150
150
|
controller[id] = Controller.new(id,opts)
|
|
151
151
|
info = controller[id].properties.data.find("/p:properties/p:attributes/p:info")
|
|
152
152
|
info.first.text = name if info.length == 1
|
|
@@ -29,16 +29,16 @@ class DefaultHandlerWrapper < WEEL::HandlerWrapperBase
|
|
|
29
29
|
if passthrough.nil?
|
|
30
30
|
params = []
|
|
31
31
|
callback = Digest::MD5.hexdigest(Kernel::rand().to_s)
|
|
32
|
-
(parameters[:
|
|
33
|
-
if v.is_a?(Struct)
|
|
32
|
+
(parameters[:arguments] || {}).each do |k,v|
|
|
33
|
+
if v.is_a?(Struct)
|
|
34
34
|
if v.respond_to?(:mimetype)
|
|
35
35
|
params << Riddl::Parameter::Complex.new("#{k}",v.mimetype,v.value)
|
|
36
|
-
else
|
|
36
|
+
else
|
|
37
37
|
params << Riddl::Parameter::Simple.new("#{k}",CPEE::ValueHelper::generate(v.value))
|
|
38
|
-
end
|
|
38
|
+
end
|
|
39
39
|
else
|
|
40
40
|
params << Riddl::Parameter::Simple.new("#{k}",CPEE::ValueHelper::generate(v))
|
|
41
|
-
end
|
|
41
|
+
end
|
|
42
42
|
end
|
|
43
43
|
params << Riddl::Header.new("CPEE_BASE",@controller.base_url)
|
|
44
44
|
params << Riddl::Header.new("CPEE_INSTANCE",@controller.instance_url)
|
|
@@ -47,7 +47,7 @@ class DefaultHandlerWrapper < WEEL::HandlerWrapperBase
|
|
|
47
47
|
params << Riddl::Header.new("CPEE_LABEL",parameters[:label])
|
|
48
48
|
@controller.attributes.each do |key,value|
|
|
49
49
|
params << Riddl::Header.new("CPEE_ATTR_#{key}",value)
|
|
50
|
-
end
|
|
50
|
+
end
|
|
51
51
|
|
|
52
52
|
type = parameters[:method] || 'post'
|
|
53
53
|
client = Riddl::Client.new(@handler_endpoint)
|
|
@@ -107,7 +107,7 @@ class DefaultHandlerWrapper < WEEL::HandlerWrapperBase
|
|
|
107
107
|
unless status.nil?
|
|
108
108
|
@controller.serialize_status!
|
|
109
109
|
@controller.notify("status/change", :endpoint => @handler_endpoint, :instance => @controller.instance, :activity => @handler_position, :id => status.id, :message => status.message)
|
|
110
|
-
end
|
|
110
|
+
end
|
|
111
111
|
unless changed_dataelements.nil?
|
|
112
112
|
@controller.serialize_dataelements!
|
|
113
113
|
@controller.notify("dataelements/change", :endpoint => @handler_endpoint, :instance => @controller.instance, :activity => @handler_position, :changed => changed_dataelements)
|
|
@@ -115,7 +115,7 @@ class DefaultHandlerWrapper < WEEL::HandlerWrapperBase
|
|
|
115
115
|
unless changed_endpoints.nil?
|
|
116
116
|
@controller.serialize_endpoints!
|
|
117
117
|
@controller.notify("endpoints/change", :endpoint => @handler_endpoint, :instance => @controller.instance, :activity => @handler_position, :changed => changed_endpoints)
|
|
118
|
-
end
|
|
118
|
+
end
|
|
119
119
|
end # }}}
|
|
120
120
|
def inform_position_change(ipc={}) # {{{
|
|
121
121
|
@controller.serialize_positions!
|
|
@@ -139,25 +139,25 @@ class DefaultHandlerWrapper < WEEL::HandlerWrapperBase
|
|
|
139
139
|
def simplify_result(result)
|
|
140
140
|
if result.length == 1
|
|
141
141
|
if result[0].is_a? Riddl::Parameter::Simple
|
|
142
|
-
result = result[0]
|
|
142
|
+
result = result[0].value
|
|
143
143
|
elsif result[0].is_a? Riddl::Parameter::Complex
|
|
144
|
-
if result[0].mimetype == 'application/json'
|
|
145
|
-
result = JSON::parse(result[0].value.read)
|
|
144
|
+
if result[0].mimetype == 'application/json'
|
|
145
|
+
result = JSON::parse(result[0].value.read) rescue nil
|
|
146
146
|
elsif result[0].mimetype == 'application/xml' || result[0].mimetype == 'text/xml'
|
|
147
|
-
result = XML::Smart::string(result[0].value.read)
|
|
147
|
+
result = XML::Smart::string(result[0].value.read) rescue nil
|
|
148
148
|
elsif result[0].mimetype == 'text/plain'
|
|
149
149
|
result = result[0].value.read
|
|
150
150
|
else
|
|
151
151
|
result = result[0]
|
|
152
152
|
end
|
|
153
153
|
end
|
|
154
|
-
end
|
|
154
|
+
end
|
|
155
155
|
result
|
|
156
156
|
end
|
|
157
157
|
|
|
158
158
|
def callback(result=nil,options={})
|
|
159
159
|
result = simplify_result(result)
|
|
160
|
-
if options['CPEE_UPDATE']
|
|
160
|
+
if options['CPEE_UPDATE']
|
|
161
161
|
@handler_returnValue = result
|
|
162
162
|
if options['CPEE_UPDATE_STATUS']
|
|
163
163
|
@controller.notify("activity/status", :instance => @controller.instance, :activity => @handler_position, :endpoint => @handler_endpoint, :status => options['CPEE_UPDATE_STATUS'])
|
|
@@ -174,11 +174,11 @@ class DefaultHandlerWrapper < WEEL::HandlerWrapperBase
|
|
|
174
174
|
def simulate(type,nesting,tid,parent,parameters={}) #{{{
|
|
175
175
|
pp "#{type} - #{nesting} - #{tid} - #{parent} - #{parameters.inspect}"
|
|
176
176
|
|
|
177
|
-
@controller.call_vote("simulating/step",
|
|
178
|
-
:endpoint => @handler_endpoint,
|
|
179
|
-
:instance => @controller.instance,
|
|
180
|
-
:activity => tid,
|
|
181
|
-
:type => type,
|
|
177
|
+
@controller.call_vote("simulating/step",
|
|
178
|
+
:endpoint => @handler_endpoint,
|
|
179
|
+
:instance => @controller.instance,
|
|
180
|
+
:activity => tid,
|
|
181
|
+
:type => type,
|
|
182
182
|
:nesting => nesting,
|
|
183
183
|
:parent => parent,
|
|
184
184
|
:parameters => parameters
|
|
@@ -0,0 +1,264 @@
|
|
|
1
|
+
# This file is part of CPEE.
|
|
2
|
+
#
|
|
3
|
+
# CPEE is free software: you can redistribute it and/or modify it under the terms
|
|
4
|
+
# of the GNU General Public License as published by the Free Software Foundation,
|
|
5
|
+
# either version 3 of the License, or (at your option) any later version.
|
|
6
|
+
#
|
|
7
|
+
# CPEE is distributed in the hope that it will be useful, but WITHOUT ANY
|
|
8
|
+
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
|
9
|
+
# PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
|
10
|
+
#
|
|
11
|
+
# You should have received a copy of the GNU General Public License along with
|
|
12
|
+
# CPEE (file COPYING in the main directory). If not, see
|
|
13
|
+
# <http://www.gnu.org/licenses/>.
|
|
14
|
+
|
|
15
|
+
class PromiseHandlerWrapper < WEEL::HandlerWrapperBase
|
|
16
|
+
def initialize(arguments,endpoint=nil,position=nil,continue=nil) # {{{
|
|
17
|
+
@controller = arguments[0]
|
|
18
|
+
@log_hash = {}
|
|
19
|
+
@handler_continue = continue
|
|
20
|
+
@handler_endpoint = endpoint
|
|
21
|
+
@handler_position = position
|
|
22
|
+
@handler_passthrough = nil
|
|
23
|
+
@handler_returnValue = nil
|
|
24
|
+
instancenr=@controller.instance.split('/').last
|
|
25
|
+
instance_dir = @controller.instance_variable_get(:@opts)[:instances]
|
|
26
|
+
unless File.exist?(instance_dir+'/'+instancenr+'/log.xes')
|
|
27
|
+
FileUtils.cp(instance_dir+'/template.xes', instance_dir+'/'+instancenr+'/log.xes')
|
|
28
|
+
XML::Smart.modify(instance_dir+'/'+instancenr+'/log.xes') do |xml|
|
|
29
|
+
trace = xml.find("/xmlns:log/xmlns:trace").first
|
|
30
|
+
trace.add 'string', :key => "concept:name", :value => "Instance #{instancenr}"
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end # }}}
|
|
34
|
+
|
|
35
|
+
def activity_handle(passthrough, parameters) # {{{
|
|
36
|
+
@controller.notify("activity/calling", :instance => @controller.instance, :activity => @handler_position, :passthrough => passthrough, :endpoint => @handler_endpoint, :parameters => parameters)
|
|
37
|
+
instancenr=@controller.instance.split('/').last
|
|
38
|
+
instance_dir = @controller.instance_variable_get(:@opts)[:instances]
|
|
39
|
+
unless File.exist?(instance_dir+'/'+instancenr+'/log.xes')
|
|
40
|
+
FileUtils.cp(instance_dir+'/template.xes', instance_dir+'/'+instancenr+'/log.xes')
|
|
41
|
+
XML::Smart.modify(instance_dir+'/'+instancenr+'/log.xes') do |xml|
|
|
42
|
+
trace = xml.find("/xmlns:log/xmlns:trace").first
|
|
43
|
+
trace.add 'string', :key => "concept:name", :value => "Instance #{instancenr}"
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
@log_hash[:label]||=parameters[:label]
|
|
48
|
+
@log_hash[:data_send]||=parameters[:arguments] unless parameters[:arguments].nil?
|
|
49
|
+
result = []
|
|
50
|
+
if passthrough.nil?
|
|
51
|
+
params = []
|
|
52
|
+
callback = Digest::MD5.hexdigest(Kernel::rand().to_s)
|
|
53
|
+
(parameters[:arguments] || {}).each do |k,v|
|
|
54
|
+
if v.is_a?(Struct)
|
|
55
|
+
if v.respond_to?(:mimetype)
|
|
56
|
+
params << Riddl::Parameter::Complex.new("#{k}",v.mimetype,v.value)
|
|
57
|
+
else
|
|
58
|
+
params << Riddl::Parameter::Simple.new("#{k}",CPEE::ValueHelper::generate(v.value))
|
|
59
|
+
end
|
|
60
|
+
else
|
|
61
|
+
params << Riddl::Parameter::Simple.new("#{k}",CPEE::ValueHelper::generate(v))
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
params << Riddl::Header.new("CPEE_BASE",@controller.base_url)
|
|
65
|
+
params << Riddl::Header.new("CPEE_INSTANCE",@controller.instance_url)
|
|
66
|
+
params << Riddl::Header.new("CPEE_CALLBACK",@controller.instance_url + '/callbacks/' + callback)
|
|
67
|
+
params << Riddl::Header.new("CPEE_ACTIVITY",@handler_position)
|
|
68
|
+
params << Riddl::Header.new("CPEE_LABEL",parameters[:label])
|
|
69
|
+
@controller.attributes.each do |key,value|
|
|
70
|
+
params << Riddl::Header.new("CPEE_ATTR_#{key}",value)
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
type = parameters[:method] || 'post'
|
|
74
|
+
client = Riddl::Client.new(@handler_endpoint)
|
|
75
|
+
|
|
76
|
+
status, result, headers = client.request type => params
|
|
77
|
+
raise "Could not #{parameters[:method] || 'post'} #{@handler_endpoint}" if status != 200
|
|
78
|
+
|
|
79
|
+
if headers["CPEE_CALLBACK"] && headers["CPEE_CALLBACK"] == 'true'
|
|
80
|
+
@controller.callbacks[callback] = CPEE::Callback.new("callback activity: #{@handler_position}",self,:callback,nil,nil,:http)
|
|
81
|
+
@handler_passthrough = callback
|
|
82
|
+
else
|
|
83
|
+
callback result
|
|
84
|
+
end
|
|
85
|
+
else
|
|
86
|
+
@controller.callbacks[passthrough] = CPEE::Callback.new("callback activity: #{@handler_position}",self,:callback,nil,nil,:http)
|
|
87
|
+
@handler_passthrough = passthrough
|
|
88
|
+
end
|
|
89
|
+
end # }}}
|
|
90
|
+
|
|
91
|
+
def activity_result_status # {{{
|
|
92
|
+
WEEL::Status.new(1, "everything okay")
|
|
93
|
+
end # }}}
|
|
94
|
+
|
|
95
|
+
def activity_result_value # {{{
|
|
96
|
+
@handler_returnValue
|
|
97
|
+
end # }}}
|
|
98
|
+
|
|
99
|
+
def activity_stop # {{{
|
|
100
|
+
unless @handler_passthrough.nil?
|
|
101
|
+
@controller.callbacks.delete(@handler_passthrough)
|
|
102
|
+
end
|
|
103
|
+
end # }}}
|
|
104
|
+
def activity_passthrough_value # {{{
|
|
105
|
+
@handler_passthrough
|
|
106
|
+
end # }}}
|
|
107
|
+
|
|
108
|
+
def activity_no_longer_necessary # {{{
|
|
109
|
+
true
|
|
110
|
+
end # }}}
|
|
111
|
+
|
|
112
|
+
def inform_activity_done # {{{
|
|
113
|
+
@controller.notify("activity/done", :endpoint => @handler_endpoint, :instance => @controller.instance, :activity => @handler_position)
|
|
114
|
+
p "log"
|
|
115
|
+
p @log_hash
|
|
116
|
+
time_added=false
|
|
117
|
+
XML::Smart.modify(@controller.instance_variable_get(:@opts)[:instances]+'/'+@controller.instance.split('/').last+'/log.xes') do |xml|
|
|
118
|
+
trace = xml.find("/xmlns:log/xmlns:trace").first
|
|
119
|
+
event = trace.add "event"
|
|
120
|
+
event.add 'string', :key => "concept:name", :value => @log_hash[:label]
|
|
121
|
+
if @log_hash.has_key?(:data_send)
|
|
122
|
+
list = event.add 'list', :key => "data_send"
|
|
123
|
+
@log_hash[:data_send].each do |k,v|
|
|
124
|
+
list.add 'string', :key => k , :value => v
|
|
125
|
+
end
|
|
126
|
+
end
|
|
127
|
+
if @log_hash.has_key?(:data_received)
|
|
128
|
+
@log_hash[:data_received].delete_if do |e|
|
|
129
|
+
if e.keys[0]=="timestamp"
|
|
130
|
+
event.add 'date', :key => "time:timestamp", :value => e.values[0]
|
|
131
|
+
time_added=true
|
|
132
|
+
true
|
|
133
|
+
else
|
|
134
|
+
false
|
|
135
|
+
end
|
|
136
|
+
end
|
|
137
|
+
if @log_hash[:data_received].length > 0
|
|
138
|
+
list = event.add 'list', :key => "data_received"
|
|
139
|
+
@log_hash[:data_received].each{|e| list.add 'string', :key => e.keys[0] , :value => e.values[0]}
|
|
140
|
+
end
|
|
141
|
+
end
|
|
142
|
+
event.add 'date', :key => "time:timestamp", :value => Time.now unless time_added
|
|
143
|
+
end
|
|
144
|
+
|
|
145
|
+
end # }}}
|
|
146
|
+
def inform_activity_manipulate # {{{
|
|
147
|
+
@controller.notify("activity/manipulating", :endpoint => @handler_endpoint, :instance => @controller.instance, :activity => @handler_position)
|
|
148
|
+
end # }}}
|
|
149
|
+
def inform_activity_failed(err) # {{{
|
|
150
|
+
puts err.message
|
|
151
|
+
puts err.backtrace
|
|
152
|
+
@controller.notify("activity/failed", :endpoint => @handler_endpoint, :instance => @controller.instance, :activity => @handler_position, :message => err.message, :line => err.backtrace[0].match(/(.*?):(\d+):/)[2], :where => err.backtrace[0].match(/(.*?):(\d+):/)[1])
|
|
153
|
+
end # }}}
|
|
154
|
+
|
|
155
|
+
def inform_syntax_error(err,code)# {{{
|
|
156
|
+
@controller.notify("description/error", :instance => @controller.instance, :message => err.message)
|
|
157
|
+
end# }}}
|
|
158
|
+
def inform_manipulate_change(status,changed_dataelements,changed_endpoints,dataelements,endpoints) # {{{
|
|
159
|
+
unless status.nil?
|
|
160
|
+
@controller.serialize_status!
|
|
161
|
+
@controller.notify("status/change", :endpoint => @handler_endpoint, :instance => @controller.instance, :activity => @handler_position, :id => status.id, :message => status.message)
|
|
162
|
+
end
|
|
163
|
+
unless changed_dataelements.nil?
|
|
164
|
+
@controller.serialize_dataelements!
|
|
165
|
+
@controller.notify("dataelements/change", :endpoint => @handler_endpoint, :instance => @controller.instance, :activity => @handler_position, :changed => changed_dataelements)
|
|
166
|
+
end
|
|
167
|
+
unless changed_endpoints.nil?
|
|
168
|
+
@controller.serialize_endpoints!
|
|
169
|
+
@controller.notify("endpoints/change", :endpoint => @handler_endpoint, :instance => @controller.instance, :activity => @handler_position, :changed => changed_endpoints)
|
|
170
|
+
end
|
|
171
|
+
end # }}}
|
|
172
|
+
def inform_position_change(ipc={}) # {{{
|
|
173
|
+
@controller.serialize_positions!
|
|
174
|
+
ipc[:instance] = @controller.instance
|
|
175
|
+
@controller.notify("position/change", ipc)
|
|
176
|
+
end # }}}
|
|
177
|
+
def inform_state_change(newstate) # {{{
|
|
178
|
+
if @controller
|
|
179
|
+
@controller.serialize_state!
|
|
180
|
+
@controller.notify("state/change", :instance => @controller.instance, :state => newstate)
|
|
181
|
+
end
|
|
182
|
+
end # }}}
|
|
183
|
+
|
|
184
|
+
def vote_sync_after # {{{
|
|
185
|
+
@controller.call_vote("activity/syncing_after", :endpoint => @handler_endpoint, :instance => @controller.instance, :activity => @handler_position)
|
|
186
|
+
end # }}}
|
|
187
|
+
def vote_sync_before(parameters=nil) # {{{
|
|
188
|
+
@controller.call_vote("activity/syncing_before", :endpoint => @handler_endpoint, :instance => @controller.instance, :activity => @handler_position)
|
|
189
|
+
end # }}}
|
|
190
|
+
|
|
191
|
+
def simplify_result(result)
|
|
192
|
+
tmp = result.map do |r|
|
|
193
|
+
if r.is_a? Riddl::Parameter::Simple
|
|
194
|
+
{r.name => r.value}
|
|
195
|
+
elsif r.is_a? Riddl::Parameter::Complex
|
|
196
|
+
if r.mimetype == 'application/json'
|
|
197
|
+
x = JSON::parse(r.value.read)
|
|
198
|
+
r.value.rewind
|
|
199
|
+
x
|
|
200
|
+
elsif r.mimetype == 'application/xml' || r.mimetype == 'text/xml'
|
|
201
|
+
x = {"xml" => XML::Smart::string(result[0].value.read)}
|
|
202
|
+
x
|
|
203
|
+
elsif r.mimetype == 'text/plain'
|
|
204
|
+
{"plain_text" => r.value.read}
|
|
205
|
+
elsif r.mimetype == 'text/html'
|
|
206
|
+
{"html_text" => r.value.read}
|
|
207
|
+
else
|
|
208
|
+
r
|
|
209
|
+
end
|
|
210
|
+
end
|
|
211
|
+
end
|
|
212
|
+
if result.length == 1
|
|
213
|
+
if result[0].is_a? Riddl::Parameter::Simple
|
|
214
|
+
result = result[0].value
|
|
215
|
+
elsif result[0].is_a? Riddl::Parameter::Complex
|
|
216
|
+
if result[0].mimetype == 'application/json'
|
|
217
|
+
result = JSON::parse(result[0].value.read)
|
|
218
|
+
elsif result[0].mimetype == 'application/xml' || result[0].mimetype == 'text/xml'
|
|
219
|
+
result = XML::Smart::string(result[0].value.read)
|
|
220
|
+
elsif result[0].mimetype == 'text/plain'
|
|
221
|
+
result = result[0].value.read
|
|
222
|
+
elsif result[0].mimetype == 'text/html'
|
|
223
|
+
result[0].value.read
|
|
224
|
+
else
|
|
225
|
+
result = result[0]
|
|
226
|
+
end
|
|
227
|
+
end
|
|
228
|
+
end
|
|
229
|
+
[result,tmp]
|
|
230
|
+
end
|
|
231
|
+
|
|
232
|
+
def callback(result=nil,options={})
|
|
233
|
+
result,notify_result = simplify_result(result)
|
|
234
|
+
pp result
|
|
235
|
+
@controller.notify("activity/change", :instance => @controller.instance, :activity => @handler_position, :endpoint => @handler_endpoint, :params => notify_result)
|
|
236
|
+
@log_hash[:data_received]||=notify_result unless notify_result.nil?
|
|
237
|
+
if options['CPEE_UPDATE']
|
|
238
|
+
@handler_returnValue = result
|
|
239
|
+
if options['CPEE_UPDATE_STATUS']
|
|
240
|
+
@controller.notify("activity/status", :instance => @controller.instance, :activity => @handler_position, :endpoint => @handler_endpoint, :status => options['CPEE_UPDATE_STATUS'])
|
|
241
|
+
end
|
|
242
|
+
@handler_continue.continue WEEL::Signal::Again
|
|
243
|
+
else
|
|
244
|
+
@controller.callbacks.delete(@handler_passthrough)
|
|
245
|
+
@handler_returnValue = result
|
|
246
|
+
@handler_passthrough = nil
|
|
247
|
+
@handler_continue.continue
|
|
248
|
+
end
|
|
249
|
+
end
|
|
250
|
+
|
|
251
|
+
def simulate(type,nesting,tid,parent,parameters={}) #{{{
|
|
252
|
+
pp "#{type} - #{nesting} - #{tid} - #{parent} - #{parameters.inspect}"
|
|
253
|
+
|
|
254
|
+
@controller.call_vote("simulating/step",
|
|
255
|
+
:endpoint => @handler_endpoint,
|
|
256
|
+
:instance => @controller.instance,
|
|
257
|
+
:activity => tid,
|
|
258
|
+
:type => type,
|
|
259
|
+
:nesting => nesting,
|
|
260
|
+
:parent => parent,
|
|
261
|
+
:parameters => parameters
|
|
262
|
+
)
|
|
263
|
+
end #}}}
|
|
264
|
+
end
|