cpee 1.3.228 → 1.3.230

Sign up to get free protection for your applications and to get access to all the features.
Files changed (48) hide show
  1. checksums.yaml +4 -4
  2. data/cockpit/css/wfadaptor.css +11 -0
  3. data/cockpit/graph.html +2 -1
  4. data/cockpit/index.html +1 -1
  5. data/cockpit/js/instance.js +50 -56
  6. data/cockpit/js/ui.js +2 -0
  7. data/cockpit/js/wfadaptor.js +21 -9
  8. data/cockpit/themes/compact/theme.js +12 -71
  9. data/cockpit/themes/default/rngs/choose.rng +4 -0
  10. data/cockpit/themes/default/rngs/parallel.rng +8 -0
  11. data/cockpit/themes/default/rngs/stop.rng +5 -0
  12. data/cockpit/themes/default/rngs/terminate.rng +1 -0
  13. data/cockpit/themes/default/symbols/stop.svg +5 -0
  14. data/cockpit/themes/default/symbols/terminate.svg +4 -0
  15. data/cockpit/themes/default/theme.js +104 -3
  16. data/cpee.gemspec +1 -1
  17. data/lib/cpee/instantiation.rb +116 -56
  18. data/lib/instantiation.xml +55 -15
  19. data/log/log.xml +1 -15
  20. data/log/template.xes_xml +23 -0
  21. data/log/template.xes_yaml +26 -0
  22. data/log/{server.rb → xes_xml.rb} +11 -42
  23. data/log/xes_yaml.rb +111 -0
  24. data/server/handlerwrappers/default.rb +19 -10
  25. data/server/resources/properties.schema.active +18 -17
  26. data/server/resources/properties.schema.finished +18 -17
  27. data/server/resources/properties.schema.inactive +18 -17
  28. data/server/resources/transformation_dslx.xsl +29 -5
  29. data/server/server.rb +1 -1
  30. data/tools/instantiation/instantiation +1 -1
  31. data/tools/server/server.rb +1 -1
  32. metadata +10 -19
  33. data/cockpit/themes/default/rngs/callmanipulateworkqueue.rng +0 -122
  34. data/cockpit/themes/default/rngs/callworkqueue.rng +0 -107
  35. data/cockpit/themes/default/symbols/callcorrelationreceive.svg +0 -6
  36. data/cockpit/themes/default/symbols/callcorrelationsend.svg +0 -6
  37. data/cockpit/themes/default/symbols/callinstantiation.svg +0 -3
  38. data/cockpit/themes/default/symbols/callmanipulateworklist.svg +0 -6
  39. data/cockpit/themes/default/symbols/callmanipulateworkqueue.svg +0 -6
  40. data/cockpit/themes/default/symbols/callworklist.svg +0 -4
  41. data/cockpit/themes/default/symbols/callworkqueue.svg +0 -4
  42. data/log/logoverlay.xml +0 -10
  43. data/log/template.xes +0 -6
  44. data/log/yaml/log.xml +0 -27
  45. data/log/yaml/logoverlay.xml +0 -10
  46. data/log/yaml/server.rb +0 -128
  47. data/log/yaml/topics.xml +0 -22
  48. data/log/yaml/yaml.rb +0 -19
@@ -2,25 +2,11 @@
2
2
  <interface name="events">
3
3
  <xi:include href="http://www.riddl.org/ns/common-patterns/notifications-consumer/1.0/consumer.xml"/>
4
4
  </interface>
5
- <interface name="cpee" location="http://cpee.org:9298">
6
- <xi:include href="http://cpee.org:9298/?riddl-description"/>
7
- </interface>
8
- <interface name="logoverlay">
9
- <xi:include href="logoverlay.xml"/>
10
- </interface>
11
5
 
12
6
  <facade>
13
- <tile>
14
- <layer name="cpee"/>
15
- </tile>
16
7
  <tile>
17
8
  <layer name="events">
18
- <apply-to>/log</apply-to>
19
- </layer>
20
- </tile>
21
- <tile>
22
- <layer name="logoverlay">
23
- <apply-to>/{}/log</apply-to>
9
+ <apply-to>/</apply-to>
24
10
  </layer>
25
11
  </tile>
26
12
  </facade>
@@ -0,0 +1,23 @@
1
+ <log xmlns="http://www.xes-standard.org/" xes.version="2.0" xes.features="nested-attributes">
2
+ <extension name="Time" prefix="time" uri="http://www.xes-standard.org/time.xesext"/>
3
+ <extension name="Concept" prefix="concept" uri="http://www.xes-standard.org/concept.xesext"/>
4
+ <extension name="Organizational" prefix="org" uri="http://www.xes-standard.org/org.xesext"/>
5
+ <extension name="Lifecycle" prefix="lifecycle" uri="http://www.xes-standard.org/lifecycle.xesext"/>
6
+ <global scope="trace">
7
+ <string key="concept:name" value="__INVALID__"/>
8
+ </global>
9
+ <global scope="event">
10
+ <string key="concept:name" value="__INVALID__"/>
11
+ <string key="concept:endpoint" value="__ENDPOINT__"/>
12
+ <string key="id:id" value="__ID__"/>
13
+ <string key="lifecycle:transition" value="complete" />
14
+ <date key="time:timestamp" value="1990-02-17T09:45:00.000+01:00"/>
15
+ </global>
16
+ <classifier name="Data" keys="data_send data_received"/>
17
+ <classifier name="Data_Received" keys="data_received"/>
18
+ <classifier name="Name" keys="concept:name"/>
19
+ <classifier name="Endpoint" keys="concept:endpoint"/>
20
+ <classifier name="ID" keys="id:id"/>
21
+ <classifier name="Lifecycle" keys="lifecycle:transition"/>
22
+ <trace/>
23
+ </log>
@@ -0,0 +1,26 @@
1
+ ---
2
+ log:
3
+ extension:
4
+ time: http://www.xes-standard.org/time.xesext
5
+ concept: http://www.xes-standard.org/concept.xesext
6
+ organisational: http://www.xes-standard.org/org.xesext
7
+ lifecylce: http://www.xes-standard.org/lifecycle.xesext
8
+ cpee: http://cpee.org/cpee.xesext
9
+ global:
10
+ trace:
11
+ concept:name: __INVALID__
12
+ cpee:name: __INVALID__
13
+ event:
14
+ concept:name: __INVALID__
15
+ concept:endpoint: ''
16
+ id:id: ''
17
+ lifecycle:transition: complete
18
+ cpee:lifecycle:transition: activity/call
19
+ time:timestamp: ''
20
+ classifier:
21
+ Data: data_send data_received data_changed data_values
22
+ Data_Received: data_receiver
23
+ Data_Send: data_send
24
+ Data_Changed: data_changer
25
+ Data_Values: data_values
26
+ trace: {}
@@ -12,33 +12,7 @@ require 'riddl/utils/turtle'
12
12
  require 'time'
13
13
 
14
14
  class Logging < Riddl::Implementation #{{{
15
- LOGTEMPLATE = <<-END
16
- <log xmlns="http://www.xes-standard.org/" xes.version="2.0" xes.features="nested-attributes">
17
- <extension name="Time" prefix="time" uri="http://www.xes-standard.org/time.xesext"/>
18
- <extension name="Concept" prefix="concept" uri="http://www.xes-standard.org/concept.xesext"/>
19
- <extension name="Organizational" prefix="org" uri="http://www.xes-standard.org/org.xesext"/>
20
- <extension name="Lifecycle" prefix="lifecycle" uri="http://www.xes-standard.org/lifecycle.xesext"/>
21
- <global scope="trace">
22
- <string key="concept:name" value="__INVALID__"/>
23
- </global>
24
- <global scope="event">
25
- <string key="concept:name" value="__INVALID__"/>
26
- <string key="concept:endpoint" value="__ENDPOINT__"/>
27
- <string key="id:id" value="__ID__"/>
28
- <string key="lifecycle:transition" value="complete" />
29
- <date key="time:timestamp" value="1990-02-17T09:45:00.000+01:00"/>
30
- </global>
31
- <classifier name="Data" keys="data_send data_received"/>
32
- <classifier name="Data_Received" keys="data_received"/>
33
- <classifier name="Name" keys="concept:name"/>
34
- <classifier name="Endpoint" keys="concept:endpoint"/>
35
- <classifier name="ID" keys="id:id"/>
36
- <classifier name="Lifecycle" keys="lifecycle:transition"/>
37
- <trace/>
38
- </log>
39
- END
40
15
  def doc(event_name,log_dir,instancenr,notification)
41
- start_x = Time.now
42
16
  uuid = notification['instance_uuid']
43
17
  activity = notification["activity"]
44
18
  parameters = notification['parameters']
@@ -75,7 +49,7 @@ class Logging < Riddl::Implementation #{{{
75
49
  receiving.each do |e|
76
50
  e.each do |k,v|
77
51
  case v['mimetype']
78
- when /\/xml$/
52
+ when /\/xml$/
79
53
  list = event.add 'list', :key => "data_received"
80
54
  node = list.add 'string', :key => k
81
55
  node.add XML::Smart.string(v['content']).root
@@ -84,13 +58,13 @@ class Logging < Riddl::Implementation #{{{
84
58
  when /\/html$/
85
59
  list = event.add 'list', :key => "data_received"
86
60
  list.add 'string', :key => k, :value => v['content']
87
- else
61
+ else
88
62
  list = event.add 'list', :key => "data_received"
89
63
  list.add 'string', :key => k, :value => v
90
- end
64
+ end
91
65
  end
92
66
  end
93
- else
67
+ else
94
68
  pp receiving
95
69
  end
96
70
  end
@@ -102,11 +76,8 @@ class Logging < Riddl::Implementation #{{{
102
76
  puts e.backtrace
103
77
  end
104
78
  end
105
- end_x = Time.now
106
- x = end_x - start_x
107
- File.open(log_dir+'/'+uuid+'/time.file',"a+"){ |f| f<< x << "\n" }
108
79
  end
109
-
80
+
110
81
  def rec_unjson(value,list,key)
111
82
  case value
112
83
  when Array then
@@ -127,7 +98,7 @@ class Logging < Riddl::Implementation #{{{
127
98
  def response
128
99
  topic = @p[1].value
129
100
  event_name = @p[2].value
130
- log_dir = ::File.dirname(__FILE__) + "/logs"
101
+ log_dir = @a[0]
131
102
  instancenr = @h['CPEE_INSTANCE'].split('/').last
132
103
  notification = JSON.parse(@p[3].value)
133
104
  doc(event_name,log_dir,instancenr,notification)
@@ -135,18 +106,16 @@ class Logging < Riddl::Implementation #{{{
135
106
  end #}}}
136
107
 
137
108
 
138
- Riddl::Server.new(::File.dirname(__FILE__) + '/log.xml', :host => "coruscant.wst.univie.ac.at", :port => 9299) do #{{{
109
+ Riddl::Server.new(File.join(__dir__,'/log.xml'), :host => 'localhost', :port => 9299) do #{{{
139
110
  accessible_description true
140
111
  cross_site_xhr true
141
- log_path = "/home/demo/Projects/cpee-helpers/log/logs"
112
+ @riddllog_dir = File.join(__dir__,logs)"
142
113
 
143
- interface 'events' do
144
- run Logging if post 'event'
145
- #run CB if post 'vote'
114
+ interface 'events' do
115
+ run Logging if post 'event'
146
116
  end
147
117
  interface 'logoverlay' do |r|
148
- run Riddl::Utils::FileServe, "#{log_path}#{r[:h]["RIDDL_DECLARATION_PATH"]}.xes","text/xml" if get '*'
118
+ run Riddl::Utils::FileServe, log_dir + r[:h]["RIDDL_DECLARATION_PATH"]+ ".xes","text/xml" if get
149
119
  end
150
120
 
151
-
152
121
  end.loop! #}}}
@@ -0,0 +1,111 @@
1
+ #!/usr/bin/ruby
2
+ require 'pp'
3
+ require 'json'
4
+ require 'yaml'
5
+ require 'rubygems'
6
+ require 'riddl/server'
7
+ require 'riddl/utils/fileserve'
8
+ require 'time'
9
+
10
+ class Logging < Riddl::Implementation #{{{
11
+ def doc(topic,event_name,log_dir,template,instancenr,notification)
12
+ uuid = notification['instance_uuid']
13
+ return unless uuid
14
+
15
+ activity = notification["activity"]
16
+ parameters = notification['parameters']
17
+ receiving = notification['received']
18
+
19
+ log = YAML::load(File.read(template))
20
+ log["log"]["trace"]["concept:name"] ||= instancenr
21
+ log["log"]["trace"]["cpee:name"] ||= notification['instance_name'] if notification["instance_name"]
22
+ log["log"]["trace"]["cpee:uuid"] ||= notification['instance_uuid'] if notification["instance_uuid"]
23
+ File.open(File.join(log_dir,uuid+'.xes.yaml'),'w'){|f| f.puts log.to_yaml} unless File.exists? File.join(log_dir,uuid+'.xes.yaml')
24
+ event = {}
25
+ event["trace:id"] = instancenr
26
+ event["concept:name"] = notification["label"] if notification["label"]
27
+ if notification["endpoint"]
28
+ event["concept:endpoint"] = notification["endpoint"]
29
+ else
30
+ event["concept:name"] = 'Script Task'
31
+ end
32
+ event["id:id"] = activity
33
+ case event_name
34
+ when 'receiving', 'change'
35
+ event["lifecycle:transition"] = "unknown"
36
+ when 'done'
37
+ event["lifecycle:transition"] = "complete"
38
+ else
39
+ event["lifecycle:transition"] = "start"
40
+ end
41
+ event["cpee:lifecycle:transition"] = "#{topic}/#{event_name}"
42
+ data_send = ((parameters["arguments"].nil? ? [] : parameters["arguments"]) rescue [])
43
+ event["list"] = {"data_send" => data_send} unless data_send.empty?
44
+ if notification['changed']&.any?
45
+ if event.has_key? "list"
46
+ event["list"]["data_changed"] ||= notification['changed']
47
+ else
48
+ event["list"] = {"data_changer" => notification['changed']}
49
+ end
50
+ end
51
+ if notification['values']&.any?
52
+ if event.has_key? "list"
53
+ event["list"]["data_values"] ||= notification['values']
54
+ else
55
+ event["list"] = {"data_values" => notification['values']}
56
+ end
57
+ end
58
+ if receiving&.any?
59
+ if event.has_key? "list"
60
+ event["list"]["data_received"] ||= receiving
61
+ else
62
+ event["list"] = {"data_receiver" => receiving}
63
+ end
64
+ end
65
+ event["time:timestamp"]= Time.now.iso8601
66
+ File.open(File.join(log_dir,uuid+'.xes.yaml'),'a') do |f|
67
+ f << {'event' => event}.to_yaml
68
+ end
69
+ end
70
+
71
+ def rec_unjson(value,list,key)
72
+ case value
73
+ when Array then
74
+ li = list.add 'list', :key => key
75
+ value.each_with_index do |v,k|
76
+ rec_unjson(v,li,k)
77
+ end
78
+ when Hash then
79
+ li = list.add 'list', :key => key
80
+ value.each do |k,v|
81
+ rec_unjson(v,li,k)
82
+ end
83
+ else
84
+ list.add 'string', :key => key, :value => value
85
+ end
86
+ end
87
+
88
+ def response
89
+ topic = @p[1].value
90
+ event_name = @p[2].value
91
+ log_dir = @a[0]
92
+ template = @a[1]
93
+ instancenr = @h['CPEE_INSTANCE'].split('/').last
94
+ notification = JSON.parse(@p[3].value)
95
+ doc topic, event_name, log_dir, template, instancenr, notification
96
+ end
97
+ end #}}}
98
+
99
+ Riddl::Server.new(File.join(__dir__,'/log.xml'), :host => 'localhost', :port => 9299) do
100
+ accessible_description true
101
+ cross_site_xhr true
102
+ @riddl_opts[:log_dir] ||= File.join(__dir__,'logs')
103
+ @riddl_opts[:template] ||= File.join(__dir__,'template.xes_yaml')
104
+
105
+ interface 'events' do
106
+ run Logging, @riddl_opts[:log_dir], @riddl_opts[:template] if post 'event'
107
+ end
108
+ interface 'logoverlay' do |r|
109
+ run Riddl::Utils::FileServe, log_dir + r[:h]["RIDDL_DECLARATION_PATH"]+ ".xes","text/plain" if get
110
+ end
111
+ end.loop!
@@ -40,10 +40,12 @@ class DefaultHandlerWrapper < WEEL::HandlerWrapperBase
40
40
  @handler_position = position
41
41
  @handler_passthrough = nil
42
42
  @handler_returnValue = nil
43
+ @label = ''
43
44
  end # }}}
44
45
 
45
46
  def activity_handle(passthrough, parameters) # {{{
46
- @controller.notify("activity/calling", :instance => @controller.instance, :instance_uuid => @controller.uuid, :activity => @handler_position, :passthrough => passthrough, :endpoint => @handler_endpoint, :parameters => parameters, :time=>Time.now.strftime("%Y-%m-%dT%H:%M:%S.%L%:z"))
47
+ @label = parameters[:label]
48
+ @controller.notify("activity/calling", :instance => @controller.instance, :instance_uuid => @controller.uuid, :label => @label, :instance_name => @controller.info, :activity => @handler_position, :passthrough => passthrough, :endpoint => @handler_endpoint, :parameters => parameters, :time=>Time.now.strftime("%Y-%m-%dT%H:%M:%S.%L%:z"))
47
49
  if passthrough.nil?
48
50
  params = []
49
51
  callback = Digest::MD5.hexdigest(Kernel::rand().to_s)
@@ -82,6 +84,9 @@ class DefaultHandlerWrapper < WEEL::HandlerWrapperBase
82
84
  @handler_passthrough = passthrough
83
85
  end
84
86
  end # }}}
87
+ def activity_manipulate_handle(parameters) #{{{
88
+ @label = parameters[:label]
89
+ end #}}}
85
90
 
86
91
  def activity_result_status # {{{
87
92
  WEEL::Status.new(1, "everything okay")
@@ -105,28 +110,28 @@ class DefaultHandlerWrapper < WEEL::HandlerWrapperBase
105
110
  end # }}}
106
111
 
107
112
  def inform_activity_done # {{{
108
- @controller.notify("activity/done", :endpoint => @handler_endpoint, :instance => @controller.instance, :instance_uuid => @controller.uuid, :activity => @handler_position, :time=>Time.now.strftime("%Y-%m-%dT%H:%M:%S.%L%:z"))
113
+ @controller.notify("activity/done", :endpoint => @handler_endpoint, :instance => @controller.instance, :label => @label, :instance_name => @controller.info, :instance_uuid => @controller.uuid, :activity => @handler_position, :time=>Time.now.strftime("%Y-%m-%dT%H:%M:%S.%L%:z"))
109
114
  end # }}}
110
115
  def inform_activity_manipulate # {{{
111
- @controller.notify("activity/manipulating", :endpoint => @handler_endpoint, :instance => @controller.instance, :instance_uuid => @controller.uuid, :activity => @handler_position, :time=>Time.now.strftime("%Y-%m-%dT%H:%M:%S.%L%:z"))
116
+ @controller.notify("activity/manipulating", :endpoint => @handler_endpoint, :instance => @controller.instance, :label => @label, :instance_name => @controller.info, :instance_uuid => @controller.uuid, :activity => @handler_position, :time=>Time.now.strftime("%Y-%m-%dT%H:%M:%S.%L%:z"))
112
117
  end # }}}
113
118
  def inform_activity_failed(err) # {{{
114
119
  puts err.message
115
120
  puts err.backtrace
116
- @controller.notify("activity/failed", :endpoint => @handler_endpoint, :instance => @controller.instance, :instance_uuid => @controller.uuid, :activity => @handler_position, :message => err.message, :line => err.backtrace[0].match(/(.*?):(\d+):/)[2], :where => err.backtrace[0].match(/(.*?):(\d+):/)[1], :time=>Time.now.strftime("%Y-%m-%dT%H:%M:%S.%L%:z"))
121
+ @controller.notify("activity/failed", :endpoint => @handler_endpoint, :label => @label, :instance_name => @controller.info, :instance => @controller.instance, :instance_uuid => @controller.uuid, :activity => @handler_position, :message => err.message, :line => err.backtrace[0].match(/(.*?):(\d+):/)[2], :where => err.backtrace[0].match(/(.*?):(\d+):/)[1], :time=>Time.now.strftime("%Y-%m-%dT%H:%M:%S.%L%:z"))
117
122
  end # }}}
118
123
  def inform_manipulate_change(status,changed_dataelements,changed_endpoints,dataelements,endpoints) # {{{
119
124
  unless status.nil?
120
125
  @controller.serialize_status!
121
- @controller.notify("status/change", :endpoint => @handler_endpoint, :instance => @controller.instance, :instance_uuid => @controller.uuid, :activity => @handler_position, :id => status.id, :message => status.message)
126
+ @controller.notify("status/change", :endpoint => @handler_endpoint, :label => @label, :instance_name => @controller.info, :instance => @controller.instance, :instance_uuid => @controller.uuid, :activity => @handler_position, :id => status.id, :message => status.message)
122
127
  end
123
128
  unless changed_dataelements.nil?
124
129
  @controller.serialize_dataelements!
125
- @controller.notify("dataelements/change", :endpoint => @handler_endpoint, :instance => @controller.instance, :instance_uuid => @controller.uuid, :activity => @handler_position, :changed => changed_dataelements)
130
+ @controller.notify("dataelements/change", :endpoint => @handler_endpoint, :label => @label, :instance_name => @controller.info, :instance => @controller.instance, :instance_uuid => @controller.uuid, :activity => @handler_position, :changed => changed_dataelements, :values => dataelements)
126
131
  end
127
132
  unless changed_endpoints.nil?
128
133
  @controller.serialize_endpoints!
129
- @controller.notify("endpoints/change", :endpoint => @handler_endpoint, :instance => @controller.instance, :instance_uuid => @controller.uuid, :activity => @handler_position, :changed => changed_endpoints)
134
+ @controller.notify("endpoints/change", :endpoint => @handler_endpoint, :label => @label, :instance_name => @controller.info, :instance => @controller.instance, :instance_uuid => @controller.uuid, :activity => @handler_position, :changed => changed_endpoints, :values => endpoints)
130
135
  end
131
136
  end # }}}
132
137
 
@@ -148,8 +153,12 @@ class DefaultHandlerWrapper < WEEL::HandlerWrapperBase
148
153
  result = XML::Smart::string(result[0].value.read) rescue nil
149
154
  elsif result[0].mimetype == 'text/plain'
150
155
  result = result[0].value.read
151
- result = result.to_f if result == result.to_f.to_s
152
- result = result.to_i if result == result.to_i.to_s
156
+ if result.start_with?("<?xml version=")
157
+ result = XML::Smart::string(result)
158
+ else
159
+ result = result.to_f if result == result.to_f.to_s
160
+ result = result.to_i if result == result.to_i.to_s
161
+ end
153
162
  elsif result[0].mimetype == 'text/html'
154
163
  result = result[0].value.read
155
164
  result = result.to_f if result == result.to_f.to_s
@@ -180,7 +189,7 @@ class DefaultHandlerWrapper < WEEL::HandlerWrapperBase
180
189
  end
181
190
 
182
191
  def callback(result=nil,options={})
183
- @controller.notify("activity/receiving", :instance => @controller.instance, :instance_uuid => @controller.uuid, :activity => @handler_position, :endpoint => @handler_endpoint, :received => structurize_result(result), :time=>Time.now.strftime("%Y-%m-%dT%H:%M:%S.%L%:z"))
192
+ @controller.notify("activity/receiving", :instance => @controller.instance, :label => @label, :instance_name => @controller.info, :instance_uuid => @controller.uuid, :activity => @handler_position, :endpoint => @handler_endpoint, :received => structurize_result(result), :time=>Time.now.strftime("%Y-%m-%dT%H:%M:%S.%L%:z"))
184
193
  result = simplify_result(result)
185
194
  if options['CPEE_UPDATE']
186
195
  @handler_returnValue = result
@@ -18,12 +18,12 @@
18
18
  <attributes type="complex" modifiable="false" mutable="false">
19
19
  <zeroOrMore>
20
20
  <element><anyName/><text/></element>
21
- </zeroOrMore>
22
- </attributes>
21
+ </zeroOrMore>
22
+ </attributes>
23
23
  <handlerwrapper type="simple" modifiable="false" mutable="false">
24
24
  <data type="string">
25
25
  <param name="pattern">[A-Z][a-zA-Z]*</param>
26
- </data>
26
+ </data>
27
27
  </handlerwrapper>
28
28
  <dsl type="simple" modifiable="false" mutable="false">
29
29
  <text/>
@@ -39,7 +39,7 @@
39
39
  <value>xslt</value>
40
40
  <value>clean</value>
41
41
  <value>none</value>
42
- </choice>
42
+ </choice>
43
43
  </attribute>
44
44
  <data type="anyURI"/>
45
45
  </element>
@@ -50,7 +50,7 @@
50
50
  <value>xslt</value>
51
51
  <value>clean</value>
52
52
  <value>none</value>
53
- </choice>
53
+ </choice>
54
54
  </attribute>
55
55
  <data type="anyURI"/>
56
56
  </element>
@@ -61,7 +61,7 @@
61
61
  <value>xslt</value>
62
62
  <value>clean</value>
63
63
  <value>none</value>
64
- </choice>
64
+ </choice>
65
65
  </attribute>
66
66
  <data type="anyURI"/>
67
67
  </element>
@@ -71,9 +71,10 @@
71
71
  <running putable="true"/>
72
72
  <ready putable="true"/>
73
73
  <simulating putable="true"/>
74
- </ready>
74
+ </ready>
75
75
  <running>
76
76
  <stopping putable="true"/>
77
+ <finishing putable="false"/>
77
78
  <finished putable="false"/>
78
79
  </running>
79
80
  <simulating>
@@ -87,9 +88,9 @@
87
88
  <stopped putable="true"/>
88
89
  <running putable="true"/>
89
90
  <simulating putable="true"/>
90
- </stopped>
91
+ </stopped>
91
92
  <finished/>
92
- </state>
93
+ </state>
93
94
  <status type="complex" modifiable="false" mutable="true">
94
95
  <optional>
95
96
  <element name='id'>
@@ -98,26 +99,26 @@
98
99
  <element name='message'>
99
100
  <data type="string"/>
100
101
  </element>
101
- </optional>
102
- </status>
102
+ </optional>
103
+ </status>
103
104
  <positions type="complex" modifiable="false" mutable="true">
104
105
  <zeroOrMore>
105
106
  <element>
106
107
  <anyName/>
107
108
  <data type="string">
108
109
  <param name="pattern">(at|after)(;[A-Za-z0-9]+)?</param>
109
- </data>
110
+ </data>
110
111
  </element>
111
- </zeroOrMore>
112
- </positions>
112
+ </zeroOrMore>
113
+ </positions>
113
114
  <dataelements type="complex" modifiable="false" mutable="true">
114
115
  <zeroOrMore>
115
116
  <element><anyName/><text/></element>
116
- </zeroOrMore>
117
- </dataelements>
117
+ </zeroOrMore>
118
+ </dataelements>
118
119
  <endpoints type="complex" modifiable="false" mutable="true">
119
120
  <zeroOrMore>
120
121
  <element><anyName/><text/></element>
121
- </zeroOrMore>
122
+ </zeroOrMore>
122
123
  </endpoints>
123
124
  </properties>