taverna-t2flow 0.3.0 → 0.4.0
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.
- data/.rvmrc +1 -0
- data/CHANGES.rdoc +6 -0
- data/Rakefile +3 -3
- data/lib/t2flow/model.rb +37 -5
- data/lib/t2flow/parser.rb +86 -102
- data/taverna-t2flow.gemspec +8 -5
- data/test/fixtures/image_to_tiff_migration_action.t2flow +278 -0
- data/test/run_tests.rb +1 -0
- data/test/test_component_workflows.rb +50 -0
- metadata +92 -73
data/.rvmrc
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
rvm --create use 1.8.7@taverna2-gem
|
data/CHANGES.rdoc
CHANGED
@@ -1,5 +1,11 @@
|
|
1
1
|
= Changes log for the T2Flow Ruby Gem
|
2
2
|
|
3
|
+
== Version 0.4.0
|
4
|
+
|
5
|
+
* Made parser more robust.
|
6
|
+
* Processor annotations are now extracted properly.
|
7
|
+
* Semantic annotations on ports, processors and dataflows are now extracted.
|
8
|
+
|
3
9
|
== Version 0.3.0
|
4
10
|
|
5
11
|
* Minor changes for ruby 1.9 compatibility.
|
data/Rakefile
CHANGED
@@ -14,13 +14,13 @@ require 'jeweler'
|
|
14
14
|
|
15
15
|
task :default => [:test]
|
16
16
|
|
17
|
-
T2FLOW_GEM_VERSION = "0.
|
17
|
+
T2FLOW_GEM_VERSION = "0.4.0"
|
18
18
|
|
19
19
|
Jeweler::Tasks.new do |s|
|
20
20
|
s.name = "taverna-t2flow"
|
21
21
|
s.version = T2FLOW_GEM_VERSION
|
22
|
-
s.authors = ["Robert Haines", "David Withers", "Mannie Tagarira"]
|
23
|
-
s.email = ["rhaines@manchester.ac.uk"]
|
22
|
+
s.authors = ["Finn Bacall", "Robert Haines", "David Withers", "Mannie Tagarira"]
|
23
|
+
s.email = ["finn.bacall@cs.man.ac.uk", "rhaines@manchester.ac.uk"]
|
24
24
|
s.homepage = "http://www.taverna.org.uk/"
|
25
25
|
s.platform = Gem::Platform::RUBY
|
26
26
|
s.summary = "Support for interacting with Taverna 2 workflows."
|
data/lib/t2flow/model.rb
CHANGED
@@ -231,7 +231,11 @@ module T2Flow # :nodoc:
|
|
231
231
|
|
232
232
|
# A string containing the description of the processor if available.
|
233
233
|
# Returns nil otherwise.
|
234
|
-
attr_accessor :
|
234
|
+
attr_accessor :descriptions
|
235
|
+
|
236
|
+
def description
|
237
|
+
@descriptions.first
|
238
|
+
end
|
235
239
|
|
236
240
|
# A string for the type of processor, e.g. beanshell, workflow, webservice, etc...
|
237
241
|
attr_accessor :type
|
@@ -273,6 +277,12 @@ module T2Flow # :nodoc:
|
|
273
277
|
# Value for string constants
|
274
278
|
attr_accessor :value
|
275
279
|
|
280
|
+
attr_accessor :semantic_annotation
|
281
|
+
|
282
|
+
def initialize
|
283
|
+
@descriptions = []
|
284
|
+
end
|
285
|
+
|
276
286
|
end
|
277
287
|
|
278
288
|
|
@@ -308,9 +318,11 @@ module T2Flow # :nodoc:
|
|
308
318
|
|
309
319
|
# A list of authors of the dataflow
|
310
320
|
attr_accessor :authors
|
321
|
+
|
322
|
+
attr_accessor :semantic_annotation
|
311
323
|
|
312
324
|
def initialize
|
313
|
-
@authors, @descriptions, @titles
|
325
|
+
@authors, @descriptions, @titles = [], [], []
|
314
326
|
end
|
315
327
|
end
|
316
328
|
|
@@ -347,7 +359,7 @@ module T2Flow # :nodoc:
|
|
347
359
|
# A string that does not contain a colon can often be returned, signifiying
|
348
360
|
# a workflow source as opposed to that of a processor.
|
349
361
|
class Source
|
350
|
-
attr_accessor :name, :descriptions, :example_values
|
362
|
+
attr_accessor :name, :descriptions, :example_values, :semantic_annotation
|
351
363
|
end
|
352
364
|
|
353
365
|
|
@@ -358,7 +370,27 @@ module T2Flow # :nodoc:
|
|
358
370
|
# A string that does not contain a colon can often be returned, signifiying
|
359
371
|
# a workflow sink as opposed to that of a processor.
|
360
372
|
class Sink
|
361
|
-
attr_accessor :name, :descriptions, :example_values
|
362
|
-
end
|
373
|
+
attr_accessor :name, :descriptions, :example_values, :semantic_annotation
|
374
|
+
end
|
375
|
+
|
376
|
+
|
377
|
+
# A representation of a semantic annotation. It is linked to a +subject+,
|
378
|
+
# which can be a processor, port, or dataflow object. It has a +type+, which
|
379
|
+
# indicates the MIME type of it's +content+. By default, this will be text/rdf+n3.
|
380
|
+
# +Content+ is the content of the annotation, which in n3 form consists of one or more
|
381
|
+
# triples.
|
382
|
+
class SemanticAnnotation
|
383
|
+
attr_reader :subject, :type, :content
|
384
|
+
|
385
|
+
def initialize(subject, type, content)
|
386
|
+
@subject = subject
|
387
|
+
@type = type
|
388
|
+
@content = content
|
389
|
+
end
|
390
|
+
|
391
|
+
def to_s
|
392
|
+
@content
|
393
|
+
end
|
394
|
+
end
|
363
395
|
|
364
396
|
end
|
data/lib/t2flow/parser.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
require "libxml"
|
2
|
+
require "cgi"
|
2
3
|
|
3
4
|
module T2Flow
|
4
5
|
|
@@ -11,15 +12,17 @@ module T2Flow
|
|
11
12
|
def parse(t2flow)
|
12
13
|
case t2flow.class.to_s
|
13
14
|
when /^string$/i
|
14
|
-
document = LibXML::XML::Parser.string(t2flow).parse
|
15
|
+
document = LibXML::XML::Parser.string(t2flow, :options => LibXML::XML::Parser::Options::NOBLANKS).parse
|
15
16
|
when /^stringio|file$/i
|
16
17
|
t2flow.rewind
|
17
|
-
document = LibXML::XML::Parser.string(t2flow.read).parse
|
18
|
+
document = LibXML::XML::Parser.string(t2flow.read, :options => LibXML::XML::Parser::Options::NOBLANKS).parse
|
18
19
|
else
|
19
20
|
raise "Error parsing file."
|
20
21
|
end
|
21
22
|
|
22
23
|
root = document.root
|
24
|
+
root.namespaces.default_prefix = "t2"
|
25
|
+
|
23
26
|
raise "Doesn't appear to be a workflow!" if root.name != "workflow"
|
24
27
|
version = root["version"]
|
25
28
|
|
@@ -32,7 +35,7 @@ module T2Flow
|
|
32
35
|
local_depends = element.find("//localDependencies")
|
33
36
|
if local_depends
|
34
37
|
local_depends.each do |dependency|
|
35
|
-
dependency.each do |dep|
|
38
|
+
dependency.each do |dep|
|
36
39
|
model.dependencies = [] if model.dependencies.nil?
|
37
40
|
model.dependencies << dep.content unless dep.content =~ /^\s*$/
|
38
41
|
end
|
@@ -40,29 +43,29 @@ module T2Flow
|
|
40
43
|
model.dependencies.uniq! if model.dependencies
|
41
44
|
end
|
42
45
|
|
43
|
-
element.
|
46
|
+
element.each_element do |dataflow|
|
44
47
|
next if dataflow["id"].nil? || dataflow["id"].chomp.strip.empty?
|
45
48
|
|
46
49
|
dataflow_obj = Dataflow.new
|
47
50
|
dataflow_obj.dataflow_id = dataflow["id"]
|
48
51
|
dataflow_obj.role = dataflow["role"]
|
49
52
|
|
50
|
-
dataflow.
|
53
|
+
dataflow.each_element do |elt|
|
51
54
|
case elt.name
|
52
55
|
when "name"
|
53
56
|
dataflow_obj.annotations.name = elt.content
|
54
57
|
when "inputPorts"
|
55
|
-
elt.
|
58
|
+
elt.each_element { |port| add_source(dataflow_obj, port) }
|
56
59
|
when "outputPorts"
|
57
|
-
elt.
|
60
|
+
elt.each_element { |port| add_sink(dataflow_obj, port) }
|
58
61
|
when "processors"
|
59
|
-
elt.
|
62
|
+
elt.each_element { |proc| add_processor(dataflow_obj, proc) }
|
60
63
|
when "datalinks"
|
61
|
-
elt.
|
64
|
+
elt.each_element { |link| add_link(dataflow_obj, link) }
|
62
65
|
when "conditions"
|
63
|
-
elt.
|
66
|
+
elt.each_element { |coord| add_coordination(dataflow_obj, coord) }
|
64
67
|
when "annotations"
|
65
|
-
elt.
|
68
|
+
elt.each_element { |ann| add_annotation(dataflow_obj, ann) }
|
66
69
|
end # case elt.name
|
67
70
|
end # dataflow.each
|
68
71
|
|
@@ -82,89 +85,37 @@ module T2Flow
|
|
82
85
|
return if port.nil? || port.content.chomp.strip.empty?
|
83
86
|
|
84
87
|
source = Source.new
|
85
|
-
|
86
|
-
port.each do |elt|
|
87
|
-
case elt.name
|
88
|
-
when "name"
|
89
|
-
source.name = elt.content
|
90
|
-
when "annotations"
|
91
|
-
elt.each do |ann|
|
92
|
-
next if ann.nil? || ann.content.chomp.strip.empty?
|
93
|
-
|
94
|
-
node = LibXML::XML::Parser.string("#{ann}").parse
|
95
|
-
content_node = node.find_first("//annotationBean")
|
96
|
-
content = content_node.child.next.content
|
97
|
-
|
98
|
-
case content_node["class"]
|
99
|
-
when /freetextdescription/i
|
100
|
-
source.descriptions = [] unless source.descriptions
|
101
|
-
source.descriptions << content
|
102
|
-
when /examplevalue/i
|
103
|
-
source.example_values = [] unless source.example_values
|
104
|
-
source.example_values << content
|
105
|
-
end # case
|
106
|
-
end # elt.each
|
107
|
-
end # case
|
108
|
-
end # port.each
|
109
|
-
|
88
|
+
extract_port_metadata(source, port)
|
110
89
|
dataflow.sources << source
|
111
90
|
end
|
112
91
|
|
113
92
|
def add_sink(dataflow, port) # :nodoc:
|
114
93
|
return if port.nil? || port.content.chomp.strip.empty?
|
115
94
|
|
116
|
-
sink = Sink.new
|
117
|
-
|
118
|
-
port.each do |elt|
|
119
|
-
case elt.name
|
120
|
-
when "name"
|
121
|
-
sink.name = elt.content
|
122
|
-
when "annotations"
|
123
|
-
elt.each do |ann|
|
124
|
-
next if ann.nil? || ann.content.chomp.strip.empty?
|
125
|
-
|
126
|
-
node = LibXML::XML::Parser.string("#{ann}").parse
|
127
|
-
content_node = node.find_first("//annotationBean")
|
128
|
-
content = content_node.child.next.content
|
129
|
-
|
130
|
-
case content_node["class"]
|
131
|
-
when /freetextdescription/i
|
132
|
-
sink.descriptions = [] unless sink.descriptions
|
133
|
-
sink.descriptions << content
|
134
|
-
when /examplevalue/i
|
135
|
-
sink.example_values = [] unless sink.example_values
|
136
|
-
sink.example_values << content
|
137
|
-
end # case
|
138
|
-
end # elt.each
|
139
|
-
end # case
|
140
|
-
end # port.each
|
141
|
-
|
95
|
+
sink = Sink.new
|
96
|
+
extract_port_metadata(sink, port)
|
142
97
|
dataflow.sinks << sink
|
143
98
|
end
|
144
99
|
|
145
100
|
def add_processor(dataflow, element) # :nodoc:
|
146
|
-
return if element.nil? || element.content.chomp.strip.empty?
|
147
|
-
|
148
101
|
processor = Processor.new
|
149
102
|
|
150
103
|
temp_inputs = []
|
151
104
|
temp_outputs = []
|
152
105
|
|
153
|
-
element.
|
106
|
+
element.each_element do |elt|
|
154
107
|
case elt.name
|
155
108
|
when "name"
|
156
109
|
processor.name = elt.content
|
157
110
|
when /inputports/i # ports from services
|
158
|
-
elt.
|
159
|
-
port.each { |x| temp_inputs << x.content if x.name=="name" }
|
160
|
-
}
|
111
|
+
elt.each_element { |port| port.each_element { |x| temp_inputs << x.content if x.name=="name" }}
|
161
112
|
when /outputports/i # ports from services
|
162
|
-
elt.
|
163
|
-
|
164
|
-
|
113
|
+
elt.each_element { |port| port.each_element { |x| temp_outputs << x.content if x.name=="name" }}
|
114
|
+
when "annotations"
|
115
|
+
extract_annotations(processor, elt)
|
165
116
|
when "activities" # a processor can only have one kind of activity
|
166
|
-
activity = elt.
|
167
|
-
activity.
|
117
|
+
activity = elt.find_first('./t2:activity')
|
118
|
+
activity.each_element do |node|
|
168
119
|
if node.name == "configBean"
|
169
120
|
activity_node = node.child
|
170
121
|
|
@@ -175,7 +126,7 @@ module T2Flow
|
|
175
126
|
processor.type = (activity_node.name =~ /martquery/i ?
|
176
127
|
"biomart" : activity_node.name.split(".")[-2])
|
177
128
|
|
178
|
-
activity_node.
|
129
|
+
activity_node.each_element do |value_node|
|
179
130
|
case value_node.name
|
180
131
|
when "wsdl"
|
181
132
|
processor.wsdl = value_node.content
|
@@ -194,19 +145,19 @@ module T2Flow
|
|
194
145
|
when "value"
|
195
146
|
processor.value = value_node.content
|
196
147
|
when "inputs" # ALL ports present in beanshell
|
197
|
-
value_node.
|
198
|
-
input.
|
148
|
+
value_node.each_element do |input|
|
149
|
+
input.each_element do |x|
|
199
150
|
processor.inputs = [] if processor.inputs.nil?
|
200
151
|
processor.inputs << x.content if x.name == "name"
|
201
|
-
|
202
|
-
|
152
|
+
end
|
153
|
+
end
|
203
154
|
when "outputs" # ALL ports present in beanshell
|
204
|
-
value_node.
|
205
|
-
output.
|
155
|
+
value_node.each_element do |output|
|
156
|
+
output.each_element do |x|
|
206
157
|
processor.outputs = [] if processor.outputs.nil?
|
207
158
|
processor.outputs << x.content if x.name == "name"
|
208
|
-
|
209
|
-
|
159
|
+
end
|
160
|
+
end
|
210
161
|
end # case value_node.name
|
211
162
|
end # activity_node.each
|
212
163
|
end # if else node["encoding"] == "dataflow"
|
@@ -221,27 +172,22 @@ module T2Flow
|
|
221
172
|
end
|
222
173
|
|
223
174
|
def add_link(dataflow, link) # :nodoc:
|
224
|
-
return if link.nil? || link.content.chomp.strip.empty?
|
225
|
-
|
226
175
|
datalink = Datalink.new
|
227
176
|
|
228
|
-
link.
|
229
|
-
|
230
|
-
|
231
|
-
datalink.sink = sink_source.child.content
|
232
|
-
datalink.sink += ":" + sink_source.last.content if sink_source["type"] == "processor"
|
233
|
-
when "source"
|
234
|
-
datalink.source = sink_source.child.content
|
235
|
-
datalink.source += ":" + sink_source.last.content if sink_source["type"] == "processor"
|
236
|
-
end
|
177
|
+
if sink = link.find_first('./t2:sink')
|
178
|
+
datalink.sink = (sink["type"] == "processor" ? "#{sink.find_first('./t2:processor').content}:" : "") +
|
179
|
+
"#{sink.find_first('./t2:port').content}"
|
237
180
|
end
|
238
|
-
|
181
|
+
|
182
|
+
if source = link.find_first('./t2:source')
|
183
|
+
datalink.source = (source["type"] == "processor" ? "#{source.find_first('./t2:processor').content}:" : "") +
|
184
|
+
"#{source.find_first('./t2:port').content}"
|
185
|
+
end
|
186
|
+
|
239
187
|
dataflow.datalinks << datalink
|
240
188
|
end
|
241
189
|
|
242
190
|
def add_coordination(dataflow, condition) # :nodoc:
|
243
|
-
return if condition.nil?
|
244
|
-
|
245
191
|
coordination = Coordination.new
|
246
192
|
|
247
193
|
coordination.control = condition["control"]
|
@@ -251,22 +197,60 @@ module T2Flow
|
|
251
197
|
end
|
252
198
|
|
253
199
|
def add_annotation(dataflow, annotation) # :nodoc:
|
254
|
-
return if annotation.nil? || annotation.empty?
|
255
|
-
|
256
200
|
node = LibXML::XML::Parser.string("#{annotation}").parse
|
257
201
|
content_node = node.find_first("//annotationBean")
|
258
|
-
content = content_node.child.next.content if content_node.child.next
|
259
202
|
|
260
203
|
case content_node["class"]
|
261
204
|
when /freetextdescription/i
|
262
|
-
dataflow.annotations.descriptions << content
|
205
|
+
dataflow.annotations.descriptions << content_node.find_first('./text').content
|
263
206
|
when /descriptivetitle/i
|
264
|
-
dataflow.annotations.titles << content
|
207
|
+
dataflow.annotations.titles << content_node.find_first('./text').content
|
265
208
|
when /author/i
|
266
|
-
dataflow.annotations.authors << content
|
209
|
+
dataflow.annotations.authors << content_node.find_first('./text').content
|
210
|
+
when /semanticannotation/i
|
211
|
+
dataflow.annotations.semantic_annotation = parse_semantic_annotation(dataflow, content_node)
|
267
212
|
end # case
|
268
213
|
end
|
269
214
|
|
215
|
+
private
|
216
|
+
|
217
|
+
def extract_port_metadata(port, element)
|
218
|
+
element.each_element do |elt|
|
219
|
+
case elt.name
|
220
|
+
when "name"
|
221
|
+
port.name = elt.content
|
222
|
+
when "annotations"
|
223
|
+
extract_annotations(port, elt)
|
224
|
+
end # case
|
225
|
+
end # port.each
|
226
|
+
end
|
227
|
+
|
228
|
+
def extract_annotations(object, element)
|
229
|
+
element.each_element do |ann|
|
230
|
+
next if ann.nil? || ann.content.chomp.strip.empty?
|
231
|
+
|
232
|
+
node = LibXML::XML::Parser.string("#{ann}").parse
|
233
|
+
content_node = node.find_first("//annotationBean")
|
234
|
+
|
235
|
+
case content_node["class"]
|
236
|
+
when /freetextdescription/i
|
237
|
+
object.descriptions ||= []
|
238
|
+
object.descriptions << content_node.find_first('./text').content
|
239
|
+
when /examplevalue/i
|
240
|
+
object.example_values ||= []
|
241
|
+
object.example_values << content_node.find_first('./text').content
|
242
|
+
when /semanticannotation/i
|
243
|
+
object.semantic_annotation = parse_semantic_annotation(object, content_node)
|
244
|
+
end # case
|
245
|
+
end # element.each
|
246
|
+
end
|
247
|
+
|
248
|
+
def parse_semantic_annotation(object, content_node)
|
249
|
+
type = content_node.find_first('./mimeType').content
|
250
|
+
content = CGI.unescapeHTML(content_node.find_first('./content').content)
|
251
|
+
SemanticAnnotation.new(object, type, content)
|
252
|
+
end
|
253
|
+
|
270
254
|
end
|
271
255
|
|
272
256
|
end
|
data/taverna-t2flow.gemspec
CHANGED
@@ -5,19 +5,20 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "taverna-t2flow"
|
8
|
-
s.version = "0.
|
8
|
+
s.version = "0.4.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
|
-
s.authors = ["Robert Haines", "David Withers", "Mannie Tagarira"]
|
12
|
-
s.date = "2012-
|
11
|
+
s.authors = ["Finn Bacall", "Robert Haines", "David Withers", "Mannie Tagarira"]
|
12
|
+
s.date = "2012-12-03"
|
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
|
-
s.email = ["rhaines@manchester.ac.uk"]
|
14
|
+
s.email = ["finn.bacall@cs.man.ac.uk", "rhaines@manchester.ac.uk"]
|
15
15
|
s.extra_rdoc_files = [
|
16
16
|
"CHANGES.rdoc",
|
17
17
|
"LICENCE",
|
18
18
|
"README.rdoc"
|
19
19
|
]
|
20
20
|
s.files = [
|
21
|
+
".rvmrc",
|
21
22
|
"CHANGES.rdoc",
|
22
23
|
"LICENCE",
|
23
24
|
"README.rdoc",
|
@@ -37,18 +38,20 @@ Gem::Specification.new do |s|
|
|
37
38
|
"test/fixtures/999.t2flow",
|
38
39
|
"test/fixtures/basic.t2flow",
|
39
40
|
"test/fixtures/coordinated.t2flow",
|
41
|
+
"test/fixtures/image_to_tiff_migration_action.t2flow",
|
40
42
|
"test/fixtures/linked.t2flow",
|
41
43
|
"test/fixtures/nested.t2flow",
|
42
44
|
"test/fixtures/processors.t2flow",
|
43
45
|
"test/run_tests.rb",
|
44
46
|
"test/test_bogus_workflows.rb",
|
47
|
+
"test/test_component_workflows.rb",
|
45
48
|
"test/test_helper.rb",
|
46
49
|
"test/test_starter_pack_workflows.rb"
|
47
50
|
]
|
48
51
|
s.homepage = "http://www.taverna.org.uk/"
|
49
52
|
s.rdoc_options = ["-N", "--tab-width=2", "--main=README.rdoc"]
|
50
53
|
s.require_paths = ["lib"]
|
51
|
-
s.rubygems_version = "1.8.
|
54
|
+
s.rubygems_version = "1.8.24"
|
52
55
|
s.summary = "Support for interacting with Taverna 2 workflows."
|
53
56
|
s.test_files = ["test/run_tests.rb"]
|
54
57
|
|
@@ -0,0 +1,278 @@
|
|
1
|
+
<workflow xmlns="http://taverna.sf.net/2008/xml/t2flow" version="1" producedBy="taverna-2.4.0"><dataflow id="16841f82-e1fe-4527-b7ef-411c4c59493b" role="top"><name>Image_to_tiff_migrat</name><inputPorts><port><name>from_uri</name><depth>0</depth><granularDepth>0</granularDepth><annotations><annotation_chain encoding="xstream"><net.sf.taverna.t2.annotation.AnnotationChainImpl xmlns="">
|
2
|
+
<annotationAssertions>
|
3
|
+
<net.sf.taverna.t2.annotation.AnnotationAssertionImpl>
|
4
|
+
<annotationBean class="net.sf.taverna.t2.annotation.annotationbeans.FreeTextDescription">
|
5
|
+
<text>description</text>
|
6
|
+
</annotationBean>
|
7
|
+
<date>2012-11-16 16:22:56.977 UTC</date>
|
8
|
+
<creators />
|
9
|
+
<curationEventList />
|
10
|
+
</net.sf.taverna.t2.annotation.AnnotationAssertionImpl>
|
11
|
+
</annotationAssertions>
|
12
|
+
</net.sf.taverna.t2.annotation.AnnotationChainImpl></annotation_chain><annotation_chain encoding="xstream"><net.sf.taverna.t2.annotation.AnnotationChainImpl xmlns="">
|
13
|
+
<annotationAssertions>
|
14
|
+
<net.sf.taverna.t2.annotation.AnnotationAssertionImpl>
|
15
|
+
<annotationBean class="net.sf.taverna.t2.annotation.annotationbeans.ExampleValue">
|
16
|
+
<text>example</text>
|
17
|
+
</annotationBean>
|
18
|
+
<date>2012-11-16 16:22:43.712 UTC</date>
|
19
|
+
<creators />
|
20
|
+
<curationEventList />
|
21
|
+
</net.sf.taverna.t2.annotation.AnnotationAssertionImpl>
|
22
|
+
</annotationAssertions>
|
23
|
+
</net.sf.taverna.t2.annotation.AnnotationChainImpl></annotation_chain><annotation_chain_2_2 encoding="xstream"><net.sf.taverna.t2.annotation.AnnotationChainImpl xmlns="">
|
24
|
+
<annotationAssertions>
|
25
|
+
<net.sf.taverna.t2.annotation.AnnotationAssertionImpl>
|
26
|
+
<annotationBean class="net.sf.taverna.t2.annotation.annotationbeans.SemanticAnnotation">
|
27
|
+
<mimeType>text/rdf+n3</mimeType>
|
28
|
+
<content>[] <http://scape-project.eu/pc/vocab/profiles#hasPortType>
|
29
|
+
<http://scape-project.eu/pc/vocab/profiles#FromURIPort> .
|
30
|
+
</content>
|
31
|
+
</annotationBean>
|
32
|
+
<date>2012-11-19 15:53:49.250 UTC</date>
|
33
|
+
<creators />
|
34
|
+
<curationEventList />
|
35
|
+
</net.sf.taverna.t2.annotation.AnnotationAssertionImpl>
|
36
|
+
</annotationAssertions>
|
37
|
+
</net.sf.taverna.t2.annotation.AnnotationChainImpl></annotation_chain_2_2></annotations></port><port><name>to_uri</name><depth>0</depth><granularDepth>0</granularDepth><annotations><annotation_chain_2_2 encoding="xstream"><net.sf.taverna.t2.annotation.AnnotationChainImpl xmlns="">
|
38
|
+
<annotationAssertions>
|
39
|
+
<net.sf.taverna.t2.annotation.AnnotationAssertionImpl>
|
40
|
+
<annotationBean class="net.sf.taverna.t2.annotation.annotationbeans.SemanticAnnotation">
|
41
|
+
<mimeType>text/rdf+n3</mimeType>
|
42
|
+
<content>[] <http://scape-project.eu/pc/vocab/profiles#hasPortType>
|
43
|
+
<http://scape-project.eu/pc/vocab/profiles#ToURIPort> .
|
44
|
+
</content>
|
45
|
+
</annotationBean>
|
46
|
+
<date>2012-11-20 12:09:41.928 UTC</date>
|
47
|
+
<creators />
|
48
|
+
<curationEventList />
|
49
|
+
</net.sf.taverna.t2.annotation.AnnotationAssertionImpl>
|
50
|
+
</annotationAssertions>
|
51
|
+
</net.sf.taverna.t2.annotation.AnnotationChainImpl></annotation_chain_2_2></annotations></port></inputPorts><outputPorts /><processors><processor><name>Tool</name><inputPorts><port><name>to_uri</name><depth>0</depth></port><port><name>from_uri</name><depth>0</depth></port></inputPorts><outputPorts /><annotations><annotation_chain_2_2 encoding="xstream"><net.sf.taverna.t2.annotation.AnnotationChainImpl xmlns="">
|
52
|
+
<annotationAssertions>
|
53
|
+
<net.sf.taverna.t2.annotation.AnnotationAssertionImpl>
|
54
|
+
<annotationBean class="net.sf.taverna.t2.annotation.annotationbeans.SemanticAnnotation">
|
55
|
+
<mimeType>text/rdf+n3</mimeType>
|
56
|
+
<content>[] <http://scape-project.eu/pc/vocab/profiles#hasDependency>
|
57
|
+
<http://scape-project.eu/pc/vocab/profiles#imagemagick-image2tiff> .
|
58
|
+
</content>
|
59
|
+
</annotationBean>
|
60
|
+
<date>2012-11-20 12:17:37.420 UTC</date>
|
61
|
+
<creators />
|
62
|
+
<curationEventList />
|
63
|
+
</net.sf.taverna.t2.annotation.AnnotationAssertionImpl>
|
64
|
+
</annotationAssertions>
|
65
|
+
</net.sf.taverna.t2.annotation.AnnotationChainImpl></annotation_chain_2_2></annotations><activities><activity><raven><group>net.sf.taverna.t2.activities</group><artifact>external-tool-activity</artifact><version>1.4</version></raven><class>net.sf.taverna.t2.activities.externaltool.ExternalToolActivity</class><inputMap><map from="to_uri" to="to_uri" /><map from="from_uri" to="from_uri" /></inputMap><outputMap /><configBean encoding="xstream"><net.sf.taverna.t2.activities.externaltool.ExternalToolActivityConfigurationBean xmlns="">
|
66
|
+
<mechanismType>789663B8-DA91-428A-9F7D-B3F3DA185FD4</mechanismType>
|
67
|
+
<mechanismName>default local</mechanismName>
|
68
|
+
<mechanismXML><?xml version="1.0" encoding="UTF-8"?>
|
69
|
+
<localInvocation><shellPrefix>/bin/sh -c</shellPrefix><linkCommand>/bin/ln -s %%PATH_TO_ORIGINAL%% %%TARGET_NAME%%</linkCommand></localInvocation>
|
70
|
+
</mechanismXML>
|
71
|
+
<externaltoolid>1c6b3cec-667d-4364-8a77-315a3b3c71f8</externaltoolid>
|
72
|
+
<useCaseDescription>
|
73
|
+
<usecaseid />
|
74
|
+
<description />
|
75
|
+
<command>convert %%from_uri%% tiff:%%to_uri%%</command>
|
76
|
+
<preparingTimeoutInSeconds>1200</preparingTimeoutInSeconds>
|
77
|
+
<executionTimeoutInSeconds>1800</executionTimeoutInSeconds>
|
78
|
+
<tags>
|
79
|
+
<string>from_uri</string>
|
80
|
+
<string>to_uri</string>
|
81
|
+
</tags>
|
82
|
+
<REs />
|
83
|
+
<queue__preferred />
|
84
|
+
<queue__deny />
|
85
|
+
<static__inputs />
|
86
|
+
<inputs>
|
87
|
+
<entry>
|
88
|
+
<string>to_uri</string>
|
89
|
+
<de.uni__luebeck.inb.knowarc.usecases.ScriptInputUser>
|
90
|
+
<tag>to_uri</tag>
|
91
|
+
<file>false</file>
|
92
|
+
<tempFile>false</tempFile>
|
93
|
+
<binary>false</binary>
|
94
|
+
<charsetName>MacRoman</charsetName>
|
95
|
+
<forceCopy>false</forceCopy>
|
96
|
+
<list>false</list>
|
97
|
+
<concatenate>false</concatenate>
|
98
|
+
<mime />
|
99
|
+
</de.uni__luebeck.inb.knowarc.usecases.ScriptInputUser>
|
100
|
+
</entry>
|
101
|
+
<entry>
|
102
|
+
<string>from_uri</string>
|
103
|
+
<de.uni__luebeck.inb.knowarc.usecases.ScriptInputUser>
|
104
|
+
<tag>from_uri</tag>
|
105
|
+
<file>false</file>
|
106
|
+
<tempFile>false</tempFile>
|
107
|
+
<binary>false</binary>
|
108
|
+
<charsetName>MacRoman</charsetName>
|
109
|
+
<forceCopy>false</forceCopy>
|
110
|
+
<list>false</list>
|
111
|
+
<concatenate>false</concatenate>
|
112
|
+
<mime />
|
113
|
+
</de.uni__luebeck.inb.knowarc.usecases.ScriptInputUser>
|
114
|
+
</entry>
|
115
|
+
</inputs>
|
116
|
+
<outputs />
|
117
|
+
<includeStdIn>false</includeStdIn>
|
118
|
+
<includeStdOut>true</includeStdOut>
|
119
|
+
<includeStdErr>true</includeStdErr>
|
120
|
+
<validReturnCodes>
|
121
|
+
<int>0</int>
|
122
|
+
</validReturnCodes>
|
123
|
+
</useCaseDescription>
|
124
|
+
<edited>false</edited>
|
125
|
+
</net.sf.taverna.t2.activities.externaltool.ExternalToolActivityConfigurationBean></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="">
|
126
|
+
<maxJobs>1</maxJobs>
|
127
|
+
</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="">
|
128
|
+
<backoffFactor>1.0</backoffFactor>
|
129
|
+
<initialDelay>1000</initialDelay>
|
130
|
+
<maxDelay>5000</maxDelay>
|
131
|
+
<maxRetries>0</maxRetries>
|
132
|
+
</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="to_uri" depth="0" /><port name="from_uri" depth="0" /></cross></strategy></iteration></iterationStrategyStack></processor></processors><conditions /><datalinks><datalink><sink type="processor"><processor>Tool</processor><port>to_uri</port></sink><source type="dataflow"><port>to_uri</port></source></datalink><datalink><sink type="processor"><processor>Tool</processor><port>from_uri</port></sink><source type="dataflow"><port>from_uri</port></source></datalink></datalinks><annotations><annotation_chain encoding="xstream"><net.sf.taverna.t2.annotation.AnnotationChainImpl xmlns="">
|
133
|
+
<annotationAssertions>
|
134
|
+
<net.sf.taverna.t2.annotation.AnnotationAssertionImpl>
|
135
|
+
<annotationBean class="net.sf.taverna.t2.annotation.annotationbeans.FreeTextDescription">
|
136
|
+
<text>SCAPE Migration Components that converts any ImageMagick supported image format to TIFF</text>
|
137
|
+
</annotationBean>
|
138
|
+
<date>2012-11-15 13:07:59.763 UTC</date>
|
139
|
+
<creators />
|
140
|
+
<curationEventList />
|
141
|
+
</net.sf.taverna.t2.annotation.AnnotationAssertionImpl>
|
142
|
+
</annotationAssertions>
|
143
|
+
</net.sf.taverna.t2.annotation.AnnotationChainImpl></annotation_chain><annotation_chain_2_2 encoding="xstream"><net.sf.taverna.t2.annotation.AnnotationChainImpl xmlns="">
|
144
|
+
<annotationAssertions>
|
145
|
+
<net.sf.taverna.t2.annotation.AnnotationAssertionImpl>
|
146
|
+
<annotationBean class="net.sf.taverna.t2.annotation.annotationbeans.IdentificationAssertion">
|
147
|
+
<identification>fd401dac-c521-4d94-8014-8efeba355d7a</identification>
|
148
|
+
</annotationBean>
|
149
|
+
<date>2012-11-19 15:55:14.145 UTC</date>
|
150
|
+
<creators />
|
151
|
+
<curationEventList />
|
152
|
+
</net.sf.taverna.t2.annotation.AnnotationAssertionImpl>
|
153
|
+
</annotationAssertions>
|
154
|
+
</net.sf.taverna.t2.annotation.AnnotationChainImpl></annotation_chain_2_2><annotation_chain_2_2 encoding="xstream"><net.sf.taverna.t2.annotation.AnnotationChainImpl xmlns="">
|
155
|
+
<annotationAssertions>
|
156
|
+
<net.sf.taverna.t2.annotation.AnnotationAssertionImpl>
|
157
|
+
<annotationBean class="net.sf.taverna.t2.annotation.annotationbeans.IdentificationAssertion">
|
158
|
+
<identification>22bc577f-9a74-4981-8725-c3b4ac28d88b</identification>
|
159
|
+
</annotationBean>
|
160
|
+
<date>2012-11-20 12:10:07.110 UTC</date>
|
161
|
+
<creators />
|
162
|
+
<curationEventList />
|
163
|
+
</net.sf.taverna.t2.annotation.AnnotationAssertionImpl>
|
164
|
+
</annotationAssertions>
|
165
|
+
</net.sf.taverna.t2.annotation.AnnotationChainImpl></annotation_chain_2_2><annotation_chain_2_2 encoding="xstream"><net.sf.taverna.t2.annotation.AnnotationChainImpl xmlns="">
|
166
|
+
<annotationAssertions>
|
167
|
+
<net.sf.taverna.t2.annotation.AnnotationAssertionImpl>
|
168
|
+
<annotationBean class="net.sf.taverna.t2.annotation.annotationbeans.IdentificationAssertion">
|
169
|
+
<identification>052219d1-09ed-4c6b-a5a4-2bad004a10ed</identification>
|
170
|
+
</annotationBean>
|
171
|
+
<date>2012-11-19 16:17:25.295 UTC</date>
|
172
|
+
<creators />
|
173
|
+
<curationEventList />
|
174
|
+
</net.sf.taverna.t2.annotation.AnnotationAssertionImpl>
|
175
|
+
</annotationAssertions>
|
176
|
+
</net.sf.taverna.t2.annotation.AnnotationChainImpl></annotation_chain_2_2><annotation_chain_2_2 encoding="xstream"><net.sf.taverna.t2.annotation.AnnotationChainImpl xmlns="">
|
177
|
+
<annotationAssertions>
|
178
|
+
<net.sf.taverna.t2.annotation.AnnotationAssertionImpl>
|
179
|
+
<annotationBean class="net.sf.taverna.t2.annotation.annotationbeans.IdentificationAssertion">
|
180
|
+
<identification>5abab48b-a3f0-4f14-9894-e824a2fa5966</identification>
|
181
|
+
</annotationBean>
|
182
|
+
<date>2012-11-16 16:39:00.691 UTC</date>
|
183
|
+
<creators />
|
184
|
+
<curationEventList />
|
185
|
+
</net.sf.taverna.t2.annotation.AnnotationAssertionImpl>
|
186
|
+
</annotationAssertions>
|
187
|
+
</net.sf.taverna.t2.annotation.AnnotationChainImpl></annotation_chain_2_2><annotation_chain encoding="xstream"><net.sf.taverna.t2.annotation.AnnotationChainImpl xmlns="">
|
188
|
+
<annotationAssertions>
|
189
|
+
<net.sf.taverna.t2.annotation.AnnotationAssertionImpl>
|
190
|
+
<annotationBean class="net.sf.taverna.t2.annotation.annotationbeans.Author">
|
191
|
+
<text>David Withers</text>
|
192
|
+
</annotationBean>
|
193
|
+
<date>2012-11-15 12:25:42.359 UTC</date>
|
194
|
+
<creators />
|
195
|
+
<curationEventList />
|
196
|
+
</net.sf.taverna.t2.annotation.AnnotationAssertionImpl>
|
197
|
+
</annotationAssertions>
|
198
|
+
</net.sf.taverna.t2.annotation.AnnotationChainImpl></annotation_chain><annotation_chain_2_2 encoding="xstream"><net.sf.taverna.t2.annotation.AnnotationChainImpl xmlns="">
|
199
|
+
<annotationAssertions>
|
200
|
+
<net.sf.taverna.t2.annotation.AnnotationAssertionImpl>
|
201
|
+
<annotationBean class="net.sf.taverna.t2.annotation.annotationbeans.IdentificationAssertion">
|
202
|
+
<identification>b5361a0e-6abd-4070-8655-5dd7b4237576</identification>
|
203
|
+
</annotationBean>
|
204
|
+
<date>2012-11-15 13:36:38.115 UTC</date>
|
205
|
+
<creators />
|
206
|
+
<curationEventList />
|
207
|
+
</net.sf.taverna.t2.annotation.AnnotationAssertionImpl>
|
208
|
+
</annotationAssertions>
|
209
|
+
</net.sf.taverna.t2.annotation.AnnotationChainImpl></annotation_chain_2_2><annotation_chain_2_2 encoding="xstream"><net.sf.taverna.t2.annotation.AnnotationChainImpl xmlns="">
|
210
|
+
<annotationAssertions>
|
211
|
+
<net.sf.taverna.t2.annotation.AnnotationAssertionImpl>
|
212
|
+
<annotationBean class="net.sf.taverna.t2.annotation.annotationbeans.IdentificationAssertion">
|
213
|
+
<identification>2bec9695-c132-4728-988c-c3a03ddcc78d</identification>
|
214
|
+
</annotationBean>
|
215
|
+
<date>2012-11-15 13:08:31.374 UTC</date>
|
216
|
+
<creators />
|
217
|
+
<curationEventList />
|
218
|
+
</net.sf.taverna.t2.annotation.AnnotationAssertionImpl>
|
219
|
+
</annotationAssertions>
|
220
|
+
</net.sf.taverna.t2.annotation.AnnotationChainImpl></annotation_chain_2_2><annotation_chain_2_2 encoding="xstream"><net.sf.taverna.t2.annotation.AnnotationChainImpl xmlns="">
|
221
|
+
<annotationAssertions>
|
222
|
+
<net.sf.taverna.t2.annotation.AnnotationAssertionImpl>
|
223
|
+
<annotationBean class="net.sf.taverna.t2.annotation.annotationbeans.IdentificationAssertion">
|
224
|
+
<identification>0d60174b-0d75-481d-8b4d-194c6109bc96</identification>
|
225
|
+
</annotationBean>
|
226
|
+
<date>2012-11-20 12:17:54.280 UTC</date>
|
227
|
+
<creators />
|
228
|
+
<curationEventList />
|
229
|
+
</net.sf.taverna.t2.annotation.AnnotationAssertionImpl>
|
230
|
+
</annotationAssertions>
|
231
|
+
</net.sf.taverna.t2.annotation.AnnotationChainImpl></annotation_chain_2_2><annotation_chain_2_2 encoding="xstream"><net.sf.taverna.t2.annotation.AnnotationChainImpl xmlns="">
|
232
|
+
<annotationAssertions>
|
233
|
+
<net.sf.taverna.t2.annotation.AnnotationAssertionImpl>
|
234
|
+
<annotationBean class="net.sf.taverna.t2.annotation.annotationbeans.SemanticAnnotation">
|
235
|
+
<mimeType>text/rdf+n3</mimeType>
|
236
|
+
<content>[] <http://scape-project.eu/pc/vocab/profiles#hasMigrationPath>
|
237
|
+
<http://scape-project.eu/pc/vocab/profiles#jpegToTiff> .
|
238
|
+
</content>
|
239
|
+
</annotationBean>
|
240
|
+
<date>2012-11-20 12:17:49.904 UTC</date>
|
241
|
+
<creators />
|
242
|
+
<curationEventList />
|
243
|
+
</net.sf.taverna.t2.annotation.AnnotationAssertionImpl>
|
244
|
+
</annotationAssertions>
|
245
|
+
</net.sf.taverna.t2.annotation.AnnotationChainImpl></annotation_chain_2_2><annotation_chain_2_2 encoding="xstream"><net.sf.taverna.t2.annotation.AnnotationChainImpl xmlns="">
|
246
|
+
<annotationAssertions>
|
247
|
+
<net.sf.taverna.t2.annotation.AnnotationAssertionImpl>
|
248
|
+
<annotationBean class="net.sf.taverna.t2.annotation.annotationbeans.IdentificationAssertion">
|
249
|
+
<identification>16841f82-e1fe-4527-b7ef-411c4c59493b</identification>
|
250
|
+
</annotationBean>
|
251
|
+
<date>2012-11-21 11:00:56.248 UTC</date>
|
252
|
+
<creators />
|
253
|
+
<curationEventList />
|
254
|
+
</net.sf.taverna.t2.annotation.AnnotationAssertionImpl>
|
255
|
+
</annotationAssertions>
|
256
|
+
</net.sf.taverna.t2.annotation.AnnotationChainImpl></annotation_chain_2_2><annotation_chain_2_2 encoding="xstream"><net.sf.taverna.t2.annotation.AnnotationChainImpl xmlns="">
|
257
|
+
<annotationAssertions>
|
258
|
+
<net.sf.taverna.t2.annotation.AnnotationAssertionImpl>
|
259
|
+
<annotationBean class="net.sf.taverna.t2.annotation.annotationbeans.IdentificationAssertion">
|
260
|
+
<identification>a5aee4f0-01d8-4ae3-96f0-c992b8d40af2</identification>
|
261
|
+
</annotationBean>
|
262
|
+
<date>2012-11-15 13:14:14.243 UTC</date>
|
263
|
+
<creators />
|
264
|
+
<curationEventList />
|
265
|
+
</net.sf.taverna.t2.annotation.AnnotationAssertionImpl>
|
266
|
+
</annotationAssertions>
|
267
|
+
</net.sf.taverna.t2.annotation.AnnotationChainImpl></annotation_chain_2_2><annotation_chain encoding="xstream"><net.sf.taverna.t2.annotation.AnnotationChainImpl xmlns="">
|
268
|
+
<annotationAssertions>
|
269
|
+
<net.sf.taverna.t2.annotation.AnnotationAssertionImpl>
|
270
|
+
<annotationBean class="net.sf.taverna.t2.annotation.annotationbeans.DescriptiveTitle">
|
271
|
+
<text>Image to tiff migration action</text>
|
272
|
+
</annotationBean>
|
273
|
+
<date>2012-11-21 11:00:54.84 UTC</date>
|
274
|
+
<creators />
|
275
|
+
<curationEventList />
|
276
|
+
</net.sf.taverna.t2.annotation.AnnotationAssertionImpl>
|
277
|
+
</annotationAssertions>
|
278
|
+
</net.sf.taverna.t2.annotation.AnnotationChainImpl></annotation_chain></annotations></dataflow></workflow>
|
data/test/run_tests.rb
CHANGED
@@ -5,3 +5,4 @@ require File.expand_path(File.join(__FILE__, "..", "test_helper.rb"))
|
|
5
5
|
|
6
6
|
require File.expand_path(File.join(__FILE__, "..", "test_bogus_workflows.rb"))
|
7
7
|
require File.expand_path(File.join(__FILE__, "..", "test_starter_pack_workflows.rb"))
|
8
|
+
require File.expand_path(File.join(__FILE__, "..", "test_component_workflows.rb"))
|
@@ -0,0 +1,50 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'test/unit'
|
3
|
+
|
4
|
+
require File.expand_path(File.join(__FILE__, "..", "..", "lib", "t2flow", "model.rb"))
|
5
|
+
require File.expand_path(File.join(__FILE__, "..", "..", "lib", "t2flow", "parser.rb"))
|
6
|
+
|
7
|
+
require File.expand_path(File.join(__FILE__, "..", "test_helper.rb"))
|
8
|
+
|
9
|
+
class ComponentWorkflowTest < Test::Unit::TestCase
|
10
|
+
|
11
|
+
include TestHelper
|
12
|
+
|
13
|
+
def setup
|
14
|
+
path = File.expand_path(File.join(__FILE__, "..", "fixtures", "image_to_tiff_migration_action.t2flow"))
|
15
|
+
@image_migration_wf = T2Flow::Parser.new.parse(File.new(path))
|
16
|
+
end
|
17
|
+
|
18
|
+
def test_image_migration_workflow
|
19
|
+
generic_model_test(@image_migration_wf)
|
20
|
+
|
21
|
+
assert_count(@image_migration_wf.processors, 1, "@image_migration_wf.processors")
|
22
|
+
assert_count(@image_migration_wf.sources, 2, "@image_migration_wf.sources")
|
23
|
+
assert_count(@image_migration_wf.sinks, 0, "@image_migration_wf.sinks")
|
24
|
+
assert_count(@image_migration_wf.datalinks, 2, "@image_migration_wf.datalinks")
|
25
|
+
assert_count(@image_migration_wf.coordinations, 0, "@image_migration_wf.coordinations")
|
26
|
+
end
|
27
|
+
|
28
|
+
def test_semantic_annotations
|
29
|
+
assert_not_nil(@image_migration_wf.sources[0].semantic_annotation)
|
30
|
+
assert_equal(@image_migration_wf.sources[0], @image_migration_wf.sources[0].semantic_annotation.subject)
|
31
|
+
assert_equal("text/rdf+n3", @image_migration_wf.sources[0].semantic_annotation.type)
|
32
|
+
assert_equal("[]<http://scape-project.eu/pc/vocab/profiles#hasPortType><http://scape-project.eu/pc/vocab/profiles#FromURIPort>.",
|
33
|
+
@image_migration_wf.sources[0].semantic_annotation.content.gsub(/\s+/, ""),
|
34
|
+
"@image_migration_wf.sources[0].semantic_annotation")
|
35
|
+
|
36
|
+
assert_not_nil(@image_migration_wf.sources[1].semantic_annotation)
|
37
|
+
assert_equal(@image_migration_wf.sources[1], @image_migration_wf.sources[1].semantic_annotation.subject)
|
38
|
+
assert_equal("text/rdf+n3", @image_migration_wf.sources[1].semantic_annotation.type)
|
39
|
+
assert_equal("[]<http://scape-project.eu/pc/vocab/profiles#hasPortType><http://scape-project.eu/pc/vocab/profiles#ToURIPort>.",
|
40
|
+
@image_migration_wf.sources[1].semantic_annotation.content.gsub(/\s+/, ""),
|
41
|
+
"@image_migration_wf.sources[1].semantic_annotation")
|
42
|
+
|
43
|
+
assert_not_nil(@image_migration_wf.processors[0].semantic_annotation)
|
44
|
+
assert_equal(@image_migration_wf.processors[0], @image_migration_wf.processors[0].semantic_annotation.subject)
|
45
|
+
assert_equal("text/rdf+n3", @image_migration_wf.processors[0].semantic_annotation.type)
|
46
|
+
assert_equal("[]<http://scape-project.eu/pc/vocab/profiles#hasDependency><http://scape-project.eu/pc/vocab/profiles#imagemagick-image2tiff>.",
|
47
|
+
@image_migration_wf.processors[0].semantic_annotation.content.gsub(/\s+/, ""),
|
48
|
+
"@image_migration_wf.processors[0].semantic_annotation")
|
49
|
+
end
|
50
|
+
end
|
metadata
CHANGED
@@ -1,94 +1,103 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: taverna-t2flow
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 15
|
5
5
|
prerelease:
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 4
|
9
|
+
- 0
|
10
|
+
version: 0.4.0
|
6
11
|
platform: ruby
|
7
|
-
authors:
|
12
|
+
authors:
|
13
|
+
- Finn Bacall
|
8
14
|
- Robert Haines
|
9
15
|
- David Withers
|
10
16
|
- Mannie Tagarira
|
11
17
|
autorequire:
|
12
18
|
bindir: bin
|
13
19
|
cert_chain: []
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
20
|
+
|
21
|
+
date: 2012-12-03 00:00:00 Z
|
22
|
+
dependencies:
|
23
|
+
- !ruby/object:Gem::Dependency
|
24
|
+
prerelease: false
|
25
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
19
26
|
none: false
|
20
|
-
requirements:
|
27
|
+
requirements:
|
21
28
|
- - ~>
|
22
|
-
- !ruby/object:Gem::Version
|
29
|
+
- !ruby/object:Gem::Version
|
30
|
+
hash: 63
|
31
|
+
segments:
|
32
|
+
- 0
|
33
|
+
- 9
|
34
|
+
- 2
|
23
35
|
version: 0.9.2
|
24
36
|
type: :development
|
37
|
+
name: rake
|
38
|
+
version_requirements: *id001
|
39
|
+
- !ruby/object:Gem::Dependency
|
25
40
|
prerelease: false
|
26
|
-
|
27
|
-
none: false
|
28
|
-
requirements:
|
29
|
-
- - ~>
|
30
|
-
- !ruby/object:Gem::Version
|
31
|
-
version: 0.9.2
|
32
|
-
- !ruby/object:Gem::Dependency
|
33
|
-
name: rdoc
|
34
|
-
requirement: !ruby/object:Gem::Requirement
|
41
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
35
42
|
none: false
|
36
|
-
requirements:
|
37
|
-
- -
|
38
|
-
- !ruby/object:Gem::Version
|
43
|
+
requirements:
|
44
|
+
- - ">="
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
hash: 43
|
47
|
+
segments:
|
48
|
+
- 3
|
49
|
+
- 9
|
50
|
+
- 4
|
39
51
|
version: 3.9.4
|
40
52
|
type: :development
|
53
|
+
name: rdoc
|
54
|
+
version_requirements: *id002
|
55
|
+
- !ruby/object:Gem::Dependency
|
41
56
|
prerelease: false
|
42
|
-
|
43
|
-
none: false
|
44
|
-
requirements:
|
45
|
-
- - ! '>='
|
46
|
-
- !ruby/object:Gem::Version
|
47
|
-
version: 3.9.4
|
48
|
-
- !ruby/object:Gem::Dependency
|
49
|
-
name: jeweler
|
50
|
-
requirement: !ruby/object:Gem::Requirement
|
57
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
51
58
|
none: false
|
52
|
-
requirements:
|
59
|
+
requirements:
|
53
60
|
- - ~>
|
54
|
-
- !ruby/object:Gem::Version
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
hash: 49
|
63
|
+
segments:
|
64
|
+
- 1
|
65
|
+
- 8
|
66
|
+
- 3
|
55
67
|
version: 1.8.3
|
56
68
|
type: :development
|
69
|
+
name: jeweler
|
70
|
+
version_requirements: *id003
|
71
|
+
- !ruby/object:Gem::Dependency
|
57
72
|
prerelease: false
|
58
|
-
|
59
|
-
none: false
|
60
|
-
requirements:
|
61
|
-
- - ~>
|
62
|
-
- !ruby/object:Gem::Version
|
63
|
-
version: 1.8.3
|
64
|
-
- !ruby/object:Gem::Dependency
|
65
|
-
name: libxml-ruby
|
66
|
-
requirement: !ruby/object:Gem::Requirement
|
73
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
67
74
|
none: false
|
68
|
-
requirements:
|
69
|
-
- -
|
70
|
-
- !ruby/object:Gem::Version
|
75
|
+
requirements:
|
76
|
+
- - ">="
|
77
|
+
- !ruby/object:Gem::Version
|
78
|
+
hash: 27
|
79
|
+
segments:
|
80
|
+
- 1
|
81
|
+
- 1
|
82
|
+
- 4
|
71
83
|
version: 1.1.4
|
72
84
|
type: :runtime
|
73
|
-
|
74
|
-
version_requirements:
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
- !ruby/object:Gem::Version
|
79
|
-
version: 1.1.4
|
80
|
-
description: This a gem developed by myGrid for the purpose of interacting with Taverna
|
81
|
-
2 workflows. An example use would be the image genaration for the model representing
|
82
|
-
Taverna 2 workflows as used in myExperiment.
|
83
|
-
email:
|
85
|
+
name: libxml-ruby
|
86
|
+
version_requirements: *id004
|
87
|
+
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.
|
88
|
+
email:
|
89
|
+
- finn.bacall@cs.man.ac.uk
|
84
90
|
- rhaines@manchester.ac.uk
|
85
91
|
executables: []
|
92
|
+
|
86
93
|
extensions: []
|
87
|
-
|
94
|
+
|
95
|
+
extra_rdoc_files:
|
88
96
|
- CHANGES.rdoc
|
89
97
|
- LICENCE
|
90
98
|
- README.rdoc
|
91
|
-
files:
|
99
|
+
files:
|
100
|
+
- .rvmrc
|
92
101
|
- CHANGES.rdoc
|
93
102
|
- LICENCE
|
94
103
|
- README.rdoc
|
@@ -108,39 +117,49 @@ files:
|
|
108
117
|
- test/fixtures/999.t2flow
|
109
118
|
- test/fixtures/basic.t2flow
|
110
119
|
- test/fixtures/coordinated.t2flow
|
120
|
+
- test/fixtures/image_to_tiff_migration_action.t2flow
|
111
121
|
- test/fixtures/linked.t2flow
|
112
122
|
- test/fixtures/nested.t2flow
|
113
123
|
- test/fixtures/processors.t2flow
|
114
124
|
- test/run_tests.rb
|
115
125
|
- test/test_bogus_workflows.rb
|
126
|
+
- test/test_component_workflows.rb
|
116
127
|
- test/test_helper.rb
|
117
128
|
- test/test_starter_pack_workflows.rb
|
118
129
|
homepage: http://www.taverna.org.uk/
|
119
130
|
licenses: []
|
131
|
+
|
120
132
|
post_install_message:
|
121
|
-
rdoc_options:
|
133
|
+
rdoc_options:
|
122
134
|
- -N
|
123
135
|
- --tab-width=2
|
124
136
|
- --main=README.rdoc
|
125
|
-
require_paths:
|
137
|
+
require_paths:
|
126
138
|
- lib
|
127
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
139
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
128
140
|
none: false
|
129
|
-
requirements:
|
130
|
-
- -
|
131
|
-
- !ruby/object:Gem::Version
|
132
|
-
|
133
|
-
|
141
|
+
requirements:
|
142
|
+
- - ">="
|
143
|
+
- !ruby/object:Gem::Version
|
144
|
+
hash: 3
|
145
|
+
segments:
|
146
|
+
- 0
|
147
|
+
version: "0"
|
148
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
134
149
|
none: false
|
135
|
-
requirements:
|
136
|
-
- -
|
137
|
-
- !ruby/object:Gem::Version
|
138
|
-
|
150
|
+
requirements:
|
151
|
+
- - ">="
|
152
|
+
- !ruby/object:Gem::Version
|
153
|
+
hash: 3
|
154
|
+
segments:
|
155
|
+
- 0
|
156
|
+
version: "0"
|
139
157
|
requirements: []
|
158
|
+
|
140
159
|
rubyforge_project:
|
141
|
-
rubygems_version: 1.8.
|
160
|
+
rubygems_version: 1.8.24
|
142
161
|
signing_key:
|
143
162
|
specification_version: 3
|
144
163
|
summary: Support for interacting with Taverna 2 workflows.
|
145
|
-
test_files:
|
164
|
+
test_files:
|
146
165
|
- test/run_tests.rb
|