cpee 1.3.228 → 1.3.230

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