taverna-t2flow 0.4.5 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGES.rdoc CHANGED
@@ -1,5 +1,10 @@
1
1
  = Changes log for the T2Flow Ruby Gem
2
2
 
3
+ == Version 0.5.0
4
+
5
+ * Split out model classes into different files.
6
+ * Added +configuration+ hash to Processor model, where various type-specific attributes are stored.
7
+
3
8
  == Version 0.4.5
4
9
 
5
10
  * Add a top-level include file that matches the gem name.
data/Rakefile CHANGED
@@ -17,7 +17,7 @@ require 'jeweler'
17
17
 
18
18
  task :default => [:test]
19
19
 
20
- T2FLOW_GEM_VERSION = "0.4.5"
20
+ T2FLOW_GEM_VERSION = "0.5.0"
21
21
 
22
22
  Jeweler::Tasks.new do |s|
23
23
  s.name = "taverna-t2flow"
data/lib/t2flow/model.rb CHANGED
@@ -10,78 +10,85 @@
10
10
  # This is the module containing the T2Flow model implementation i.e. the
11
11
  # model structure/definition and all its internals.
12
12
 
13
+ require 't2flow/model/coordination'
14
+ require 't2flow/model/dataflow'
15
+ require 't2flow/model/datalink'
16
+ require 't2flow/model/port'
17
+ require 't2flow/model/processor'
18
+ require 't2flow/model/semantic_annotation'
19
+
13
20
  module T2Flow # :nodoc:
14
-
21
+
15
22
  # The model for a given Taverna 2 workflow.
16
23
  class Model
17
24
  # The list of all the dataflows that make up the workflow.
18
25
  attr_accessor :dataflows
19
-
26
+
20
27
  # The list of any dependencies that have been found inside the workflow.
21
28
  attr_accessor :dependencies
22
-
29
+
23
30
  # Creates an empty model for a Taverna 2 workflow.
24
31
  def initialize
25
32
  @dataflows = []
26
33
  @dependencies = []
27
34
  end
28
-
35
+
29
36
  # Retrieve the top level dataflow's name
30
37
  def name
31
38
  main.name
32
39
  end
33
-
40
+
34
41
  # Retrieve the top level dataflow ie the MAIN (containing) dataflow
35
42
  def main
36
43
  @dataflows[0]
37
44
  end
38
-
45
+
39
46
  # Retrieve the dataflow with the given ID
40
47
  def dataflow(df_id)
41
48
  df = @dataflows.select { |x| x.dataflow_id == df_id }
42
49
  return df[0]
43
50
  end
44
-
51
+
45
52
  # Retrieve ALL the processors containing beanshells within the workflow.
46
53
  def beanshells
47
54
  self.all_processors.select { |x| x.type == "beanshell" }
48
55
  end
49
-
56
+
50
57
  # Retrieve ALL processors of that are webservices WITHIN the model.
51
58
  def web_services
52
59
  self.all_processors.select { |x| x.type =~ /wsdl|soaplab|biomoby/i }
53
60
  end
54
-
61
+
55
62
  # Retrieve ALL local workers WITHIN the workflow
56
63
  def local_workers
57
64
  self.all_processors.select { |x| x.type =~ /local/i }
58
65
  end
59
-
66
+
60
67
  # Retrieve the datalinks from the top level of a nested workflow.
61
68
  # If the workflow is not nested, retrieve all datalinks.
62
69
  def datalinks
63
70
  self.main.datalinks
64
71
  end
65
-
72
+
66
73
  # Retrieve ALL the datalinks within a nested workflow
67
74
  def all_datalinks
68
75
  links = []
69
76
  @dataflows.each { |dataflow| links << dataflow.datalinks }
70
77
  return links.flatten
71
78
  end
72
-
79
+
73
80
  # Retrieve the annotations specific to the workflow. This does not return
74
81
  # any annotations from workflows encapsulated within the main workflow.
75
82
  def annotations
76
83
  self.main.annotations
77
84
  end
78
-
85
+
79
86
  # Retrieve processors from the top level of a nested workflow.
80
87
  # If the workflow is not nested, retrieve all processors.
81
88
  def processors
82
89
  self.main.processors
83
90
  end
84
-
91
+
85
92
  # Retrieve ALL the processors found in a nested workflow
86
93
  def all_processors
87
94
  procs =[]
@@ -94,43 +101,43 @@ module T2Flow # :nodoc:
94
101
  def coordinations
95
102
  self.main.coordinations
96
103
  end
97
-
104
+
98
105
  # Retrieve ALL the coordinations found in a nested workflow
99
106
  def all_coordinations
100
107
  coordinations =[]
101
108
  @dataflows.each { |dataflow| coordinations << dataflow.coordinations }
102
109
  return coordinations.flatten
103
110
  end
104
-
111
+
105
112
  # Retrieve the sources(inputs) to the workflow
106
113
  def sources
107
114
  self.main.sources
108
115
  end
109
-
116
+
110
117
  # Retrieve ALL the sources(inputs) within the workflow
111
118
  def all_sources
112
119
  sources =[]
113
120
  @dataflows.each { |dataflow| sources << dataflow.sources }
114
121
  return sources.flatten
115
122
  end
116
-
123
+
117
124
  # Retrieve the sinks(outputs) to the workflow
118
125
  def sinks
119
126
  self.main.sinks
120
127
  end
121
-
128
+
122
129
  # Retrieve ALL the sinks(outputs) within the workflow
123
130
  def all_sinks
124
131
  sinks =[]
125
132
  @dataflows.each { |dataflow| sinks << dataflow.sinks }
126
133
  return sinks.flatten
127
134
  end
128
-
135
+
129
136
  # Retrieve the unique dataflow ID for the top level dataflow.
130
137
  def model_id
131
138
  self.main.dataflow_id
132
139
  end
133
-
140
+
134
141
  # For the given dataflow, return the beanshells and/or services which
135
142
  # have direct links to or from the given processor.
136
143
  # If no dataflow is specified, the top-level dataflow is used.
@@ -143,7 +150,7 @@ module T2Flow # :nodoc:
143
150
  def get_processor_links(processor)
144
151
  return nil unless processor
145
152
  proc_links = ProcessorLinks.new
146
-
153
+
147
154
  # SOURCES
148
155
  sources = self.all_datalinks.select { |x| x.sink =~ /#{processor.name}:.+/ }
149
156
  proc_links.sources = []
@@ -153,254 +160,32 @@ module T2Flow # :nodoc:
153
160
  proc_links.sinks = []
154
161
  temp_sinks = []
155
162
  sinks.each { |x| temp_sinks << x.sink }
156
-
163
+
157
164
  # Match links by port into format
158
165
  # my_port:name_of_link_im_linked_to:its_port
159
166
  sources.each do |connection|
160
167
  link = connection.sink
161
168
  connected_proc_name = link.split(":")[0]
162
169
  my_connection_port = link.split(":")[1]
163
-
170
+
164
171
  if my_connection_port
165
172
  source = my_connection_port << ":" << connection.source
166
173
  proc_links.sources << source if source.split(":").size == 3
167
174
  end
168
175
  end
169
-
176
+
170
177
  sinks.each do |connection|
171
178
  link = connection.source
172
179
  connected_proc_name = link.split(":")[0]
173
180
  my_connection_port = link.split(":")[1]
174
-
181
+
175
182
  if my_connection_port
176
183
  sink = my_connection_port << ":" << connection.sink
177
184
  proc_links.sinks << sink if sink.split(":").size == 3
178
185
  end
179
186
  end
180
-
181
- return proc_links
182
- end
183
- end
184
-
185
-
186
-
187
- # The entities within the Taverna 2 mdoel which contains the different
188
- # elements of the workflows; processors, sinks, sources, etc...
189
- class Dataflow
190
- # This returns a DataflowAnnotation object.
191
- attr_accessor :annotations
192
-
193
- # Retrieve the list of processors specific to the dataflow.
194
- attr_accessor :processors
195
-
196
- # Retrieve the list of datalinks specific to the dataflow.
197
- attr_accessor :datalinks
198
-
199
- # Retrieve the list of sources specific to the dataflow.
200
- attr_accessor :sources
201
-
202
- # Retrieve the list of sinks specific to the dataflow.
203
- attr_accessor :sinks
204
-
205
- # Retrieve the list of coordinations specific to the dataflow.
206
- attr_accessor :coordinations
207
-
208
- # The unique identifier of the dataflow.
209
- attr_accessor :dataflow_id
210
-
211
- # The role of the workflow
212
- attr_accessor :role
213
187
 
214
- # Creates a new Dataflow object.
215
- def initialize
216
- @annotations = DataflowAnnotation.new
217
- @processors = []
218
- @datalinks = []
219
- @sources = []
220
- @sinks = []
221
- @coordinations = []
222
- end
223
-
224
- def name
225
- @annotations.name
226
- end
227
-
228
- # Retrieve beanshell processors specific to this dataflow.
229
- def beanshells
230
- @processors.select { |x| x.type == "beanshell" }
231
- end
232
- end
233
-
234
-
235
-
236
- # This is the (shim) object within the workflow. This can be a beanshell,
237
- # a webservice, a workflow, etc...
238
- class Processor
239
- # A string containing name of the processor.
240
- attr_accessor :name
241
-
242
- # A string containing the description of the processor if available.
243
- # Returns nil otherwise.
244
- attr_accessor :descriptions
245
-
246
- def description
247
- @descriptions.first
248
- end
249
-
250
- # A string for the type of processor, e.g. beanshell, workflow, webservice, etc...
251
- attr_accessor :type
252
-
253
- # For processors that have type "dataflow", this is the the reference
254
- # to the dataflow. For all other processor types, this is nil.
255
- attr_accessor :dataflow_id
256
-
257
- # This only has a value in beanshell processors. This is the actual script
258
- # embedded with the processor which does all the "work"
259
- attr_accessor :script
260
-
261
- # This is a list of inputs that the processor can take in.
262
- attr_accessor :inputs
263
-
264
- # This is a list of outputs that the processor can produce.
265
- attr_accessor :outputs
266
-
267
- # For processors of type "arbitrarywsdl", this is the URI to the location
268
- # of the wsdl file.
269
- attr_accessor :wsdl
270
-
271
- # For processors of type "arbitrarywsdl", this is the operation invoked.
272
- attr_accessor :wsdl_operation
273
-
274
- # For soaplab and biomoby services, this is the endpoint URI.
275
- attr_accessor :endpoint
276
-
277
- # Authority name for the biomoby service.
278
- attr_accessor :biomoby_authority_name
279
-
280
- # Service name for the biomoby service. This is not necessarily the same
281
- # as the processors name.
282
- attr_accessor :biomoby_service_name
283
-
284
- # Category for the biomoby service.
285
- attr_accessor :biomoby_category
286
-
287
- # Value for string constants
288
- attr_accessor :value
289
-
290
- attr_accessor :semantic_annotation
291
-
292
- def initialize
293
- @descriptions = []
294
- end
295
-
296
- end
297
-
298
-
299
- # This object is returned after invoking model.get_processor_links(processor)
300
- # . The object contains two lists of processors. Each element consists of:
301
- # the input or output port the processor uses as a link, the name of the
302
- # processor being linked, and the port of the processor used for the linking,
303
- # all seperated by a colon (:) i.e.
304
- # my_port:name_of_processor:processor_port
305
- class ProcessorLinks
306
- # The processors whose output is fed as input into the processor used in
307
- # model.get_processors_linked_to(processor).
308
- attr_accessor :sources
309
-
310
- # A list of processors that are fed the output from the processor (used in
311
- # model.get_processors_linked_to(processor) ) as input.
312
- attr_accessor :sinks
313
- end
314
-
315
-
316
-
317
- # This is the annotation object specific to the dataflow it belongs to.
318
- # A DataflowAnnotation contains metadata about a given dataflow element.
319
- class DataflowAnnotation
320
- # The name used of the dataflow
321
- attr_accessor :name
322
-
323
- # A list of titles that have been assigned to the dataflow.
324
- attr_accessor :titles
325
-
326
- # A list ot descriptive strings about the dataflow.
327
- attr_accessor :descriptions
328
-
329
- # A list of authors of the dataflow
330
- attr_accessor :authors
331
-
332
- attr_accessor :semantic_annotation
333
-
334
- def initialize
335
- @authors, @descriptions, @titles = [], [], []
336
- end
337
- end
338
-
339
-
340
-
341
- # This represents a connection between any of the following pair of entities:
342
- # {processor -> processor}, {workflow -> workflow}, {workflow -> processor},
343
- # and {processor -> workflow}.
344
- class Datalink
345
- # The name of the source (the starting point of the connection).
346
- attr_accessor :source
347
-
348
- # The name of the sink (the endpoint of the connection).
349
- attr_accessor :sink
350
- end
351
-
352
-
353
-
354
- # This is a representation of the 'Run after...' function in Taverna
355
- # where the selected processor or workflow is set to run after another.
356
- class Coordination
357
- # The name of the processor/workflow which is to run first.
358
- attr_accessor :control
359
-
360
- # The name of the processor/workflow which is to run after the control.
361
- attr_accessor :target
362
- end
363
-
364
-
365
-
366
- # This is the start node of a Datalink. Each source has a name and a port
367
- # which is seperated by a colon; ":".
368
- # This is represented as "source of a processor:port_name".
369
- # A string that does not contain a colon can often be returned, signifiying
370
- # a workflow source as opposed to that of a processor.
371
- class Source
372
- attr_accessor :name, :descriptions, :example_values, :semantic_annotation
373
- end
374
-
375
-
376
-
377
- # This is the start node of a Datalink. Each sink has a name and a port
378
- # which is seperated by a colon; ":".
379
- # This is represented as "sink of a processor:port_name".
380
- # A string that does not contain a colon can often be returned, signifiying
381
- # a workflow sink as opposed to that of a processor.
382
- class Sink
383
- attr_accessor :name, :descriptions, :example_values, :semantic_annotation
384
- end
385
-
386
-
387
- # A representation of a semantic annotation. It is linked to a +subject+,
388
- # which can be a processor, port, or dataflow object. It has a +type+, which
389
- # indicates the MIME type of it's +content+. By default, this will be text/rdf+n3.
390
- # +Content+ is the content of the annotation, which in n3 form consists of one or more
391
- # triples.
392
- class SemanticAnnotation
393
- attr_reader :subject, :type, :content
394
-
395
- def initialize(subject, type, content)
396
- @subject = subject
397
- @type = type
398
- @content = content
399
- end
400
-
401
- def to_s
402
- @content
188
+ return proc_links
403
189
  end
404
190
  end
405
-
406
191
  end
@@ -0,0 +1,11 @@
1
+ # This is a representation of the 'Run after...' function in Taverna
2
+ # where the selected processor or workflow is set to run after another.
3
+ module T2Flow
4
+ class Coordination
5
+ # The name of the processor/workflow which is to run first.
6
+ attr_accessor :control
7
+
8
+ # The name of the processor/workflow which is to run after the control.
9
+ attr_accessor :target
10
+ end
11
+ end
@@ -0,0 +1,72 @@
1
+ # The entities within the Taverna 2 mdoel which contains the different
2
+ # elements of the workflows; processors, sinks, sources, etc...
3
+ module T2Flow
4
+ class Dataflow
5
+ # This returns a DataflowAnnotation object.
6
+ attr_accessor :annotations
7
+
8
+ # Retrieve the list of processors specific to the dataflow.
9
+ attr_accessor :processors
10
+
11
+ # Retrieve the list of datalinks specific to the dataflow.
12
+ attr_accessor :datalinks
13
+
14
+ # Retrieve the list of sources specific to the dataflow.
15
+ attr_accessor :sources
16
+
17
+ # Retrieve the list of sinks specific to the dataflow.
18
+ attr_accessor :sinks
19
+
20
+ # Retrieve the list of coordinations specific to the dataflow.
21
+ attr_accessor :coordinations
22
+
23
+ # The unique identifier of the dataflow.
24
+ attr_accessor :dataflow_id
25
+
26
+ # The role of the workflow
27
+ attr_accessor :role
28
+
29
+ # Creates a new Dataflow object.
30
+ def initialize
31
+ @annotations = DataflowAnnotation.new
32
+ @processors = []
33
+ @datalinks = []
34
+ @sources = []
35
+ @sinks = []
36
+ @coordinations = []
37
+ end
38
+
39
+ def name
40
+ @annotations.name
41
+ end
42
+
43
+ # Retrieve beanshell processors specific to this dataflow.
44
+ def beanshells
45
+ @processors.select { |x| x.type == "beanshell" }
46
+ end
47
+ end
48
+
49
+
50
+ # TODO: Remove this class. Not useful
51
+ # This is the annotation object specific to the dataflow it belongs to.
52
+ # A DataflowAnnotation contains metadata about a given dataflow element.
53
+ class DataflowAnnotation
54
+ # The name used of the dataflow
55
+ attr_accessor :name
56
+
57
+ # A list of titles that have been assigned to the dataflow.
58
+ attr_accessor :titles
59
+
60
+ # A list ot descriptive strings about the dataflow.
61
+ attr_accessor :descriptions
62
+
63
+ # A list of authors of the dataflow
64
+ attr_accessor :authors
65
+
66
+ attr_accessor :semantic_annotation
67
+
68
+ def initialize
69
+ @authors, @descriptions, @titles = [], [], []
70
+ end
71
+ end
72
+ end
@@ -0,0 +1,12 @@
1
+ # This represents a connection between any of the following pair of entities:
2
+ # {processor -> processor}, {workflow -> workflow}, {workflow -> processor},
3
+ # and {processor -> workflow}.
4
+ module T2Flow
5
+ class Datalink
6
+ # The name of the source (the starting point of the connection).
7
+ attr_accessor :source
8
+
9
+ # The name of the sink (the endpoint of the connection).
10
+ attr_accessor :sink
11
+ end
12
+ end
@@ -0,0 +1,22 @@
1
+ module T2Flow
2
+ class Port
3
+ attr_accessor :name, :descriptions, :example_values, :semantic_annotation
4
+ end
5
+
6
+ # This is the start node of a Datalink. Each source has a name and a port
7
+ # which is seperated by a colon; ":".
8
+ # This is represented as "source of a processor:port_name".
9
+ # A string that does not contain a colon can often be returned, signifiying
10
+ # a workflow source as opposed to that of a processor.
11
+ class Source < Port
12
+ end
13
+
14
+
15
+ # This is the end node of a Datalink. Each sink has a name and a port
16
+ # which is seperated by a colon; ":".
17
+ # This is represented as "sink of a processor:port_name".
18
+ # A string that does not contain a colon can often be returned, signifiying
19
+ # a workflow sink as opposed to that of a processor.
20
+ class Sink < Port
21
+ end
22
+ end
@@ -0,0 +1,97 @@
1
+ # This is the (shim) object within the workflow. This can be a beanshell,
2
+ # a webservice, a workflow, etc...
3
+ module T2Flow
4
+ class Processor
5
+ # A string containing name of the processor.
6
+ attr_accessor :name
7
+
8
+ # A string containing the description of the processor if available.
9
+ # Returns nil otherwise.
10
+ attr_accessor :descriptions
11
+
12
+ def description
13
+ @descriptions.first
14
+ end
15
+
16
+ # A string for the type of processor, e.g. beanshell, workflow, webservice, etc...
17
+ attr_accessor :type
18
+
19
+ # For processors that have type "dataflow", this is the the reference
20
+ # to the dataflow. For all other processor types, this is nil.
21
+ attr_accessor :dataflow_id
22
+
23
+ # This only has a value in beanshell processors. This is the actual script
24
+ # embedded with the processor which does all the "work"
25
+ attr_accessor :script
26
+
27
+ # This is a list of inputs that the processor can take in.
28
+ attr_accessor :inputs
29
+
30
+ # This is a list of outputs that the processor can produce.
31
+ attr_accessor :outputs
32
+
33
+ # For processors of type "arbitrarywsdl", this is the URI to the location
34
+ # of the wsdl file.
35
+ def wsdl
36
+ @configuration[:wsdl]
37
+ end
38
+
39
+ # For processors of type "arbitrarywsdl", this is the operation invoked.
40
+ def wsdl_operation
41
+ @configuration[:wsdl_operation]
42
+ end
43
+
44
+ # For soaplab and biomoby services, this is the endpoint URI.
45
+ def endpoint
46
+ @configuration[:endpoint]
47
+ end
48
+
49
+ # Authority name for the biomoby service.
50
+ def biomoby_authority_name
51
+ @configuration[:biomoby_authority_name]
52
+ end
53
+
54
+ # Service name for the biomoby service. This is not necessarily the same
55
+ # as the processors name.
56
+ def biomoby_service_name
57
+ @configuration[:biomoby_service_name]
58
+ end
59
+
60
+ # Category for the biomoby service.
61
+ def biomoby_category
62
+ @configuration[:biomoby_category]
63
+ end
64
+
65
+ # Value for string constants
66
+ def value
67
+ @configuration[:value]
68
+ end
69
+
70
+ attr_accessor :semantic_annotation
71
+
72
+ # Hash containing details of the processors configuration.
73
+ attr_accessor :configuration
74
+
75
+ def initialize
76
+ @descriptions = []
77
+ @configuration = {}
78
+ end
79
+
80
+ end
81
+
82
+ # This object is returned after invoking model.get_processor_links(processor)
83
+ # . The object contains two lists of processors. Each element consists of:
84
+ # the input or output port the processor uses as a link, the name of the
85
+ # processor being linked, and the port of the processor used for the linking,
86
+ # all seperated by a colon (:) i.e.
87
+ # my_port:name_of_processor:processor_port
88
+ class ProcessorLinks
89
+ # The processors whose output is fed as input into the processor used in
90
+ # model.get_processors_linked_to(processor).
91
+ attr_accessor :sources
92
+
93
+ # A list of processors that are fed the output from the processor (used in
94
+ # model.get_processors_linked_to(processor) ) as input.
95
+ attr_accessor :sinks
96
+ end
97
+ end
@@ -0,0 +1,20 @@
1
+ # A representation of a semantic annotation. It is linked to a +subject+,
2
+ # which can be a processor, port, or dataflow object. It has a +type+, which
3
+ # indicates the MIME type of it's +content+. By default, this will be text/rdf+n3.
4
+ # +Content+ is the content of the annotation, which in n3 form consists of one or more
5
+ # triples.
6
+ module T2Flow
7
+ class SemanticAnnotation
8
+ attr_reader :subject, :type, :content
9
+
10
+ def initialize(subject, type, content)
11
+ @subject = subject
12
+ @type = type
13
+ @content = content
14
+ end
15
+
16
+ def to_s
17
+ @content
18
+ end
19
+ end
20
+ end
data/lib/t2flow/parser.rb CHANGED
@@ -128,6 +128,14 @@ module T2Flow
128
128
  activity.each_element do |node|
129
129
  if node.name == "configBean"
130
130
  activity_node = node.child
131
+
132
+ if activity_node.name == "net.sf.taverna.t2.component.ComponentActivityConfigurationBean"
133
+ processor.configuration[:component] = {}
134
+ processor.configuration[:component][:registry] = activity_node.find_first('./registryBase').content
135
+ processor.configuration[:component][:family_name] = activity_node.find_first('./familyName').content
136
+ processor.configuration[:component][:name] = activity_node.find_first('./componentName').content
137
+ processor.configuration[:component][:version] = activity_node.find_first('./componentVersion').content.to_i
138
+ end
131
139
 
132
140
  if node["encoding"] == "dataflow"
133
141
  processor.dataflow_id = activity_node["ref"]
@@ -139,21 +147,30 @@ module T2Flow
139
147
  activity_node.each_element do |value_node|
140
148
  case value_node.name
141
149
  when "wsdl"
142
- processor.wsdl = value_node.content
150
+ processor.configuration[:wsdl] = value_node.content
143
151
  when "operation"
144
- processor.wsdl_operation = value_node.content
152
+ processor.configuration[:wsdl_operation] = value_node.content
145
153
  when /endpoint/i
146
- processor.endpoint = value_node.content
154
+ processor.configuration[:endpoint] = value_node.content
147
155
  when /servicename/i
148
- processor.biomoby_service_name = value_node.content
156
+ processor.configuration[:biomoby_service_name] = value_node.content
149
157
  when /authorityname/i
150
- processor.biomoby_authority_name = value_node.content
158
+ processor.configuration[:biomoby_authority_name] = value_node.content
151
159
  when "category"
152
- processor.biomoby_category = value_node.content
160
+ processor.configuration[:biomoby_category] = value_node.content
153
161
  when "script"
154
- processor.script = value_node.content
162
+ processor.configuration[:script] = value_node.content
155
163
  when "value"
156
- processor.value = value_node.content
164
+ processor.configuration[:value] = value_node.content
165
+ when "presentationOrigin"
166
+ processor.configuration[:interaction_page] = value_node.content
167
+ when "connectionSettings"
168
+ if processor.type == 'rshell'
169
+ processor.configuration[:r_server] = value_node.find_first('./host').content + ":" +
170
+ value_node.find_first('./port').content
171
+ end
172
+ when "xpathExpression"
173
+ processor.configuration[:xpath_expression] = value_node.content
157
174
  when "inputs" # ALL ports present in beanshell
158
175
  value_node.each_element do |input|
159
176
  input.each_element do |x|
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "taverna-t2flow"
8
- s.version = "0.4.5"
8
+ s.version = "0.5.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Finn Bacall", "Robert Haines", "David Withers", "Mannie Tagarira"]
12
- s.date = "2013-03-14"
12
+ s.date = "2014-03-11"
13
13
  s.description = "This a gem developed by myGrid for the purpose of interacting with Taverna 2 workflows. An example use would be the image genaration for the model representing Taverna 2 workflows as used in myExperiment."
14
14
  s.email = ["support@mygrid.org.uk"]
15
15
  s.extra_rdoc_files = [
@@ -18,13 +18,18 @@ Gem::Specification.new do |s|
18
18
  "README.rdoc"
19
19
  ]
20
20
  s.files = [
21
- ".rvmrc",
22
21
  "CHANGES.rdoc",
23
22
  "LICENCE",
24
23
  "README.rdoc",
25
24
  "Rakefile",
26
25
  "lib/t2flow/dot.rb",
27
26
  "lib/t2flow/model.rb",
27
+ "lib/t2flow/model/coordination.rb",
28
+ "lib/t2flow/model/dataflow.rb",
29
+ "lib/t2flow/model/datalink.rb",
30
+ "lib/t2flow/model/port.rb",
31
+ "lib/t2flow/model/processor.rb",
32
+ "lib/t2flow/model/semantic_annotation.rb",
28
33
  "lib/t2flow/parser.rb",
29
34
  "lib/taverna-t2flow.rb",
30
35
  "taverna-t2flow.gemspec",
@@ -38,6 +43,7 @@ Gem::Specification.new do |s|
38
43
  "test/fixtures/998.t2flow",
39
44
  "test/fixtures/999.t2flow",
40
45
  "test/fixtures/basic.t2flow",
46
+ "test/fixtures/component_using_workflow.t2flow",
41
47
  "test/fixtures/coordinated.t2flow",
42
48
  "test/fixtures/image_to_tiff_migration_action.t2flow",
43
49
  "test/fixtures/linked.t2flow",
@@ -52,7 +58,7 @@ Gem::Specification.new do |s|
52
58
  s.homepage = "http://www.taverna.org.uk/"
53
59
  s.rdoc_options = ["-N", "--tab-width=2", "--main=README.rdoc"]
54
60
  s.require_paths = ["lib"]
55
- s.rubygems_version = "1.8.21"
61
+ s.rubygems_version = "1.8.24"
56
62
  s.summary = "Support for interacting with Taverna 2 workflows."
57
63
  s.test_files = ["test/run_tests.rb"]
58
64
 
@@ -0,0 +1,24 @@
1
+ <workflow xmlns="http://taverna.sf.net/2008/xml/t2flow" version="1" producedBy="taverna-2.4.0"><dataflow id="fa8eeaf3-5816-4e19-afb4-468c318c9832" role="top"><name>Workflow1</name><inputPorts><port><name>in</name><depth>0</depth><granularDepth>0</granularDepth><annotations /></port></inputPorts><outputPorts><port><name>out</name><annotations /></port></outputPorts><processors><processor><name>Extract_PNG_dimensions</name><inputPorts><port><name>fromFilename</name><depth>0</depth></port></inputPorts><outputPorts><port><name>dimensions</name><depth>0</depth><granularDepth>0</granularDepth></port></outputPorts><annotations /><activities><activity><raven><group>net.sf.taverna.t2.component</group><artifact>component-activity</artifact><version>1.1.2</version></raven><class>net.sf.taverna.t2.component.ComponentActivity</class><inputMap><map from="fromFilename" to="fromFilename" /></inputMap><outputMap><map from="dimensions" to="dimensions" /></outputMap><configBean encoding="xstream"><net.sf.taverna.t2.component.ComponentActivityConfigurationBean xmlns="">
2
+ <registryBase>http://www.myexperiment.org</registryBase>
3
+ <familyName>SCAPE Image Characterisation Component</familyName>
4
+ <componentName>Extract PNG dimensions</componentName>
5
+ <componentVersion>2</componentVersion>
6
+ </net.sf.taverna.t2.component.ComponentActivityConfigurationBean></configBean><annotations /></activity></activities><dispatchStack><dispatchLayer><raven><group>net.sf.taverna.t2.core</group><artifact>workflowmodel-impl</artifact><version>1.4</version></raven><class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Parallelize</class><configBean encoding="xstream"><net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.ParallelizeConfig xmlns="">
7
+ <maxJobs>1</maxJobs>
8
+ </net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.ParallelizeConfig></configBean></dispatchLayer><dispatchLayer><raven><group>net.sf.taverna.t2.core</group><artifact>workflowmodel-impl</artifact><version>1.4</version></raven><class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.ErrorBounce</class><configBean encoding="xstream"><null xmlns="" /></configBean></dispatchLayer><dispatchLayer><raven><group>net.sf.taverna.t2.core</group><artifact>workflowmodel-impl</artifact><version>1.4</version></raven><class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Failover</class><configBean encoding="xstream"><null xmlns="" /></configBean></dispatchLayer><dispatchLayer><raven><group>net.sf.taverna.t2.core</group><artifact>workflowmodel-impl</artifact><version>1.4</version></raven><class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Retry</class><configBean encoding="xstream"><net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.RetryConfig xmlns="">
9
+ <backoffFactor>1.0</backoffFactor>
10
+ <initialDelay>1000</initialDelay>
11
+ <maxDelay>5000</maxDelay>
12
+ <maxRetries>0</maxRetries>
13
+ </net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.RetryConfig></configBean></dispatchLayer><dispatchLayer><raven><group>net.sf.taverna.t2.core</group><artifact>workflowmodel-impl</artifact><version>1.4</version></raven><class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Invoke</class><configBean encoding="xstream"><null xmlns="" /></configBean></dispatchLayer></dispatchStack><iterationStrategyStack><iteration><strategy><cross><port name="fromFilename" depth="0" /></cross></strategy></iteration></iterationStrategyStack></processor></processors><conditions /><datalinks><datalink><sink type="processor"><processor>Extract_PNG_dimensions</processor><port>fromFilename</port></sink><source type="dataflow"><port>in</port></source></datalink><datalink><sink type="dataflow"><port>out</port></sink><source type="processor"><processor>Extract_PNG_dimensions</processor><port>dimensions</port></source></datalink></datalinks><annotations><annotation_chain_2_2 encoding="xstream"><net.sf.taverna.t2.annotation.AnnotationChainImpl xmlns="">
14
+ <annotationAssertions>
15
+ <net.sf.taverna.t2.annotation.AnnotationAssertionImpl>
16
+ <annotationBean class="net.sf.taverna.t2.annotation.annotationbeans.IdentificationAssertion">
17
+ <identification>fa8eeaf3-5816-4e19-afb4-468c318c9832</identification>
18
+ </annotationBean>
19
+ <date>2014-03-11 09:20:07.794 UTC</date>
20
+ <creators />
21
+ <curationEventList />
22
+ </net.sf.taverna.t2.annotation.AnnotationAssertionImpl>
23
+ </annotationAssertions>
24
+ </net.sf.taverna.t2.annotation.AnnotationChainImpl></annotation_chain_2_2></annotations></dataflow></workflow>
@@ -48,4 +48,17 @@ class ComponentWorkflowTest < Test::Unit::TestCase
48
48
  @image_migration_wf.processors[0].semantic_annotation.content.gsub(/\s+/, ""),
49
49
  "@image_migration_wf.processors[0].semantic_annotation")
50
50
  end
51
+
52
+ def test_parses_component_information
53
+ p = File.expand_path(File.join(__FILE__, "..", "fixtures", "component_using_workflow.t2flow"))
54
+ wf = T2Flow::Parser.new.parse(File.new(p))
55
+
56
+ proc = wf.processors[0]
57
+ assert_not_nil(proc)
58
+ assert_not_nil(proc.configuration[:component])
59
+ assert_equal('http://www.myexperiment.org', proc.configuration[:component][:registry])
60
+ assert_equal('SCAPE Image Characterisation Component', proc.configuration[:component][:family_name])
61
+ assert_equal('Extract PNG dimensions', proc.configuration[:component][:name])
62
+ assert_equal(2, proc.configuration[:component][:version])
63
+ end
51
64
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: taverna-t2flow
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.5
4
+ version: 0.5.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -12,7 +12,7 @@ authors:
12
12
  autorequire:
13
13
  bindir: bin
14
14
  cert_chain: []
15
- date: 2013-03-14 00:00:00.000000000 Z
15
+ date: 2014-03-11 00:00:00.000000000 Z
16
16
  dependencies:
17
17
  - !ruby/object:Gem::Dependency
18
18
  name: rake
@@ -90,13 +90,18 @@ extra_rdoc_files:
90
90
  - LICENCE
91
91
  - README.rdoc
92
92
  files:
93
- - .rvmrc
94
93
  - CHANGES.rdoc
95
94
  - LICENCE
96
95
  - README.rdoc
97
96
  - Rakefile
98
97
  - lib/t2flow/dot.rb
99
98
  - lib/t2flow/model.rb
99
+ - lib/t2flow/model/coordination.rb
100
+ - lib/t2flow/model/dataflow.rb
101
+ - lib/t2flow/model/datalink.rb
102
+ - lib/t2flow/model/port.rb
103
+ - lib/t2flow/model/processor.rb
104
+ - lib/t2flow/model/semantic_annotation.rb
100
105
  - lib/t2flow/parser.rb
101
106
  - lib/taverna-t2flow.rb
102
107
  - taverna-t2flow.gemspec
@@ -110,6 +115,7 @@ files:
110
115
  - test/fixtures/998.t2flow
111
116
  - test/fixtures/999.t2flow
112
117
  - test/fixtures/basic.t2flow
118
+ - test/fixtures/component_using_workflow.t2flow
113
119
  - test/fixtures/coordinated.t2flow
114
120
  - test/fixtures/image_to_tiff_migration_action.t2flow
115
121
  - test/fixtures/linked.t2flow
@@ -143,7 +149,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
143
149
  version: '0'
144
150
  requirements: []
145
151
  rubyforge_project:
146
- rubygems_version: 1.8.21
152
+ rubygems_version: 1.8.24
147
153
  signing_key:
148
154
  specification_version: 3
149
155
  summary: Support for interacting with Taverna 2 workflows.
data/.rvmrc DELETED
@@ -1 +0,0 @@
1
- rvm --create use 1.8.7@taverna2-gem