taverna-t2flow 0.3.0 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|