t2-server 0.5.3 → 0.6.0

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGES.rdoc CHANGED
@@ -1,5 +1,18 @@
1
1
  = Changes log for the T2 Ruby Gem
2
2
 
3
+ == Version 0.6.0
4
+
5
+ * Add a new API call Run#get_output_ports
6
+ * Remove Run#ls from the API.
7
+ * Refactor the code that builds output port lists.
8
+ * Update and streamline test suite.
9
+ * Parameterize the Rakefile for use in CI.
10
+ * Return dates as instances of class Time.
11
+ * Allow expiry dates to be specified in human readable formats.
12
+ * Workaround for CXF bug upon server start-up.
13
+ * t2-run-workflow: accept files as inputs.
14
+ * Tabulate run information.
15
+
3
16
  == Version 0.5.3
4
17
 
5
18
  * Fix an issue with singleton value/empty list confusion for output ports.
data/README.rdoc CHANGED
@@ -1,7 +1,7 @@
1
1
  = Taverna[http://www.taverna.org.uk/] 2 Server Interaction Gem
2
2
 
3
3
  Authors:: Robert Haines
4
- Gem Version:: 0.5.3
4
+ Gem Version:: 0.6.0
5
5
  API Version:: 2.2a1
6
6
  Contact:: mailto:rhaines@manchester.ac.uk
7
7
  URL:: http://taverna.sourceforge.net/
data/bin/t2-run-workflow CHANGED
@@ -35,29 +35,9 @@ require 'rubygems'
35
35
  require 't2-server'
36
36
  require 'optparse'
37
37
 
38
- # go through the outputs and either print the contents
39
- # out or save them to a file.
40
- # if the output is a list, it appears as a directory so
41
- # all the individual entries must be grabbed from there.
42
- def get_outputs(run, refs)
43
- # get a list of the outputs
44
- lists, items = run.ls("out")
45
-
46
- # go through the lists
47
- lists.each do |l|
48
- print " #{l} -> "
49
- p run.get_output("#{l}", refs)
50
- end
51
-
52
- # go through the singletons
53
- items.each do |i|
54
- print " #{i} -> "
55
- p run.get_output("#{i}", refs)
56
- end
57
- end
58
-
59
38
  # set up options
60
39
  inputs = {}
40
+ files = {}
61
41
  wkf_file = ""
62
42
  output_refs = false
63
43
  baclava_out = ""
@@ -76,6 +56,11 @@ opts = OptionParser.new do |opt|
76
56
  input, value = val.chomp.split(':', 2)
77
57
  inputs[input] = value
78
58
  end
59
+ opt.on("-f INPUT:FILE", "--input-file=INPUT:FILE",
60
+ "Set input port INPUT to use the contents of FILE as its input") do |val|
61
+ input, filename = val.chomp.split(':', 2)
62
+ files[input] = filename
63
+ end
79
64
  opt.on("-b BACLAVA", "--baclava-in=BACLAVA", "Set baclava file for input port values") do |val|
80
65
  inputs[:baclava] = val
81
66
  end
@@ -143,6 +128,12 @@ else
143
128
  puts "Set input '#{input}' to #{value}"
144
129
  run.set_input(input, value)
145
130
  end
131
+
132
+ files.each do |input, file|
133
+ name = file.split("/")[-1];
134
+ puts "Set input '#{input}' to use file '#{name}'"
135
+ run.upload_input_file(input, file)
136
+ end
146
137
  end
147
138
 
148
139
  # output baclava?
@@ -170,8 +161,12 @@ if exitcd == 0
170
161
  end
171
162
  puts "Baclava file written to '#{baclava_out}'"
172
163
  else
164
+ # go through the outputs and print them out
173
165
  puts "Outputs:"
174
- get_outputs(run, output_refs)
166
+ run.get_output_ports.each do |o|
167
+ print " #{o} -> "
168
+ p run.get_output("#{o}", output_refs)
169
+ end
175
170
  end
176
171
  end
177
172
 
data/bin/t2-server-info CHANGED
@@ -34,6 +34,7 @@
34
34
  require 'rubygems'
35
35
  require 't2-server'
36
36
  require 'optparse'
37
+ require 'hirb'
37
38
 
38
39
  opts = OptionParser.new do |opt|
39
40
  opt.banner = "Usage: t2-server-info [options] server-address"
@@ -70,10 +71,12 @@ begin
70
71
  runs = server.runs
71
72
  print "No. of runs: #{runs.length}\n"
72
73
  if runs.length > 0
73
- print " Run list: #{runs[0].uuid} - #{runs[0].expiry}\n"
74
- runs[1..-1].each do |run|
75
- print " #{run.uuid} - #{run.expiry}\n"
76
- end
74
+ puts (Hirb::Helpers::ObjectTable.render runs,
75
+ :fields=>[:uuid, :status, :expiry],
76
+ :headers=>{:uuid=>'Run ID', :status=>'Status', :expiry=>'Expiry time (local)'},
77
+ :filters=>{:expiry=>[:strftime, "%H:%M:%S %d/%m/%Y"]},
78
+ :max_fields=>{:expiry=>19},
79
+ :description=>false)
77
80
  end
78
81
  rescue T2Server::T2ServerError => e
79
82
  puts e
data/lib/t2-server/run.rb CHANGED
@@ -32,6 +32,7 @@
32
32
 
33
33
  require 'rubygems'
34
34
  require 'libxml'
35
+ require 'time'
35
36
 
36
37
  module T2Server
37
38
 
@@ -136,6 +137,15 @@ module T2Server
136
137
  @server.set_run_input_file(self, input, filename)
137
138
  end
138
139
 
140
+ # :call-seq:
141
+ # run.get_output_ports -> list
142
+ #
143
+ # Return a list of all the output ports
144
+ def get_output_ports
145
+ lists, items = _ls_ports("out")
146
+ items + lists
147
+ end
148
+
139
149
  # :call-seq:
140
150
  # run.get_output(output, refs=false) -> string or list
141
151
  #
@@ -163,19 +173,24 @@ module T2Server
163
173
  # :call-seq:
164
174
  # run.expiry -> string
165
175
  #
166
- # Return the expiry time of this run. It is formatted as an ISO-8601
167
- # timestamp.
176
+ # Return the expiry time of this run as an instance of class Time.
168
177
  def expiry
169
- @server.get_run_attribute(@uuid, @links[:expiry])
178
+ Time.parse(@server.get_run_attribute(@uuid, @links[:expiry]))
170
179
  end
171
180
 
172
181
  # :call-seq:
173
182
  # run.expiry=(time) -> bool
174
183
  #
175
184
  # Set the expiry time of this run to _time_. The format of _time_ should
176
- # be an ISO-8601 timestamp.
177
- def expiry=(date)
178
- @server.set_run_attribute(@uuid, @links[:expiry], date)
185
+ # be something that the Ruby Time class can parse. If the value given does
186
+ # not specify a date then today's date will be assumed. If a time/date in
187
+ # the past is specified, the expiry time will not be changed.
188
+ def expiry=(time)
189
+ # need to massage the xmlschema format slightly as the server cannot
190
+ # parse timezone offsets with a colon (eg +00:00)
191
+ date_str = Time.parse(time).xmlschema(2)
192
+ date_str = date_str[0..-4] + date_str[-2..-1]
193
+ @server.set_run_attribute(@uuid, @links[:expiry], date_str)
179
194
  end
180
195
 
181
196
  # :call-seq:
@@ -363,44 +378,6 @@ module T2Server
363
378
  @server.get_run_attribute(@uuid, "#{@links[:wdir]}/#{@baclava_out}")
364
379
  end
365
380
 
366
- # :call-seq:
367
- # run.ls(dir="") -> [[dirs], [objects]]
368
- #
369
- # List a directory in the run's workspace on the server. If _dir_ is left
370
- # blank then / is listed. As there is no concept of changing into a
371
- # directory (_cd_) in Taverna Server then all paths passed into _ls_
372
- # should be full paths starting at "root". The contents of a directory are
373
- # returned as a list of two lists, "directories" and "objects"
374
- # respectively. In the case of listing the contents of the "out"
375
- # directory, the "directories" returned by _ls_ are actually output port
376
- # names and their contents are the values held by these ports. If there
377
- # are multiple values listed then that port represents a list. If there
378
- # are further directories below a port name then it is a list of lists.
379
- def ls(dir="")
380
- dir.strip_path!
381
- dir_list = @server.get_run_attribute(@uuid, "#{@links[:wdir]}/#{dir}")
382
-
383
- # compile a list of directory entries stripping the
384
- # directory name from the front of each filename
385
- dirs = []
386
- files = []
387
-
388
- begin
389
- doc = XML::Document.string(dir_list)
390
-
391
- doc.find(XPaths::DIR, Namespaces::MAP).each {|e| dirs << e.content.split('/')[-1]}
392
- doc.find(XPaths::FILE, Namespaces::MAP).each {|e| files << e.content.split('/')[-1]}
393
- rescue XML::Error => xmle
394
- # We expect to get a DOCUMENT_EMPTY error in some cases. All others
395
- # should be re-raised.
396
- if xmle.code != XML::Error::DOCUMENT_EMPTY
397
- raise xmle
398
- end
399
- end
400
-
401
- [dirs, files]
402
- end
403
-
404
381
  # :call-seq:
405
382
  # run.initialized? -> bool
406
383
  #
@@ -428,35 +405,81 @@ module T2Server
428
405
  # :call-seq:
429
406
  # run.create_time -> string
430
407
  #
431
- # Get the creation time of this run formatted as an ISO-8601 timestamp.
408
+ # Get the creation time of this run as an instance of class Time.
432
409
  def create_time
433
- @server.get_run_attribute(@uuid, @links[:createtime])
410
+ Time.parse(@server.get_run_attribute(@uuid, @links[:createtime]))
434
411
  end
435
412
 
436
413
  # :call-seq:
437
414
  # run.start_time -> string
438
415
  #
439
- # Get the start time of this run formatted as an ISO-8601 timestamp.
416
+ # Get the start time of this run as an instance of class Time.
440
417
  def start_time
441
- @server.get_run_attribute(@uuid, @links[:starttime])
418
+ Time.parse(@server.get_run_attribute(@uuid, @links[:starttime]))
442
419
  end
443
420
 
444
421
  # :call-seq:
445
422
  # run.finish_time -> string
446
423
  #
447
- # Get the finish time of this run formatted as an ISO-8601 timestamp.
424
+ # Get the finish time of this run as an instance of class Time.
448
425
  def finish_time
449
- @server.get_run_attribute(@uuid, @links[:finishtime])
426
+ Time.parse(@server.get_run_attribute(@uuid, @links[:finishtime]))
450
427
  end
451
428
 
452
429
  private
430
+
431
+ # List a directory in the run's workspace on the server. If dir is left
432
+ # blank then / is listed. As there is no concept of changing into a
433
+ # directory (cd) in Taverna Server then all paths passed into _ls_ports
434
+ # should be full paths starting at "root". The contents of a directory are
435
+ # returned as a list of two lists, "lists" and "values" respectively.
436
+ def _ls_ports(dir="", top=true)
437
+ dir.strip_path!
438
+ dir_list = @server.get_run_attribute(@uuid, "#{@links[:wdir]}/#{dir}")
439
+
440
+ # compile a list of directory entries stripping the
441
+ # directory name from the front of each filename
442
+ lists = []
443
+ values = []
444
+
445
+ begin
446
+ doc = XML::Document.string(dir_list)
447
+
448
+ doc.find(XPaths::DIR, Namespaces::MAP).each do |e|
449
+ if top
450
+ lists << e.content.split('/')[-1]
451
+ else
452
+ index = (e.attributes['name'].to_i - 1)
453
+ lists[index] = e.content.split('/')[-1]
454
+ end
455
+ end
456
+
457
+ doc.find(XPaths::FILE, Namespaces::MAP).each do |e|
458
+ if top
459
+ values << e.content.split('/')[-1]
460
+ else
461
+ index = (e.attributes['name'].to_i - 1)
462
+ values[index] = e.content.split('/')[-1]
463
+ end
464
+ end
465
+ rescue XML::Error => xmle
466
+ # We expect to get a DOCUMENT_EMPTY error in some cases. All others
467
+ # should be re-raised.
468
+ if xmle.code != XML::Error::DOCUMENT_EMPTY
469
+ raise xmle
470
+ end
471
+ end
472
+
473
+ [lists, values]
474
+ end
475
+
453
476
  def _get_output(output, refs=false, top=true)
454
477
  output.strip_path!
455
478
 
456
479
  # if at the top level we need to check if the port represents a list
457
480
  # or a singleton value
458
481
  if top
459
- lists, items = ls("out")
482
+ lists, items = _ls_ports("out")
460
483
  if items.include? output
461
484
  if refs
462
485
  return "#{@server.uri}/rest/runs/#{@uuid}/#{@links[:wdir]}/out/#{output}"
@@ -467,7 +490,7 @@ module T2Server
467
490
  end
468
491
 
469
492
  # we're not at the top level so look at the contents of the output port
470
- lists, items = ls("out/#{output}")
493
+ lists, items = _ls_ports("out/#{output}", false)
471
494
 
472
495
  # build up lists of results
473
496
  result = []
@@ -79,7 +79,9 @@ module T2Server
79
79
  @http.verify_mode = OpenSSL::SSL::VERIFY_NONE
80
80
  end
81
81
 
82
- @links = parse_description(get_attribute(@rest_path))
82
+ # add a slash to the end of this address to work around this bug:
83
+ # http://www.mygrid.org.uk/dev/issues/browse/TAVSERV-113
84
+ @links = parse_description(get_attribute("#{@rest_path}/"))
83
85
  #@links.each {|key, val| puts "#{key}: #{val}"}
84
86
 
85
87
  # get max runs
data/lib/t2-server.rb CHANGED
@@ -43,7 +43,7 @@ require 't2-server/run'
43
43
  # Taverna 2 Server instance.
44
44
  module T2Server
45
45
  # The version of this library
46
- GEM_VERSION = "0.5.3"
46
+ GEM_VERSION = "0.6.0"
47
47
  # The version of the Taverna 2 Server API that this library can interface with
48
48
  API_VERSION = "2.2a1"
49
49
  end
data/test/tc_run.rb CHANGED
@@ -37,7 +37,7 @@ class TestRun < Test::Unit::TestCase
37
37
  def test_run
38
38
  # connection
39
39
  assert_nothing_raised(T2Server::ConnectionError) do
40
- @run = T2Server::Run.create($address, $wkf_hello)
40
+ @run = T2Server::Run.create($address, $wkf_pass)
41
41
  end
42
42
 
43
43
  # test bad state code
@@ -45,11 +45,13 @@ class TestRun < Test::Unit::TestCase
45
45
  @run.wait
46
46
  end
47
47
 
48
- # test mkdir and ls
48
+ # test mkdir
49
49
  assert(@run.mkdir("test"))
50
- assert_equal(@run.ls, [["test"], []])
51
50
 
52
- # start, state and wait
51
+ # set input, start, check state and wait
52
+ assert_nothing_raised(T2Server::AttributeNotFoundError) do
53
+ @run.set_input("IN", "Hello, World!")
54
+ end
53
55
  @run.start
54
56
  assert(@run.running?)
55
57
  assert_nothing_raised(T2Server::RunStateError) do
@@ -58,7 +60,7 @@ class TestRun < Test::Unit::TestCase
58
60
 
59
61
  # exitcode and output
60
62
  assert_instance_of(Fixnum, @run.exitcode)
61
- assert_equal(@run.get_output("Message"), "Hello, World!")
63
+ assert_equal(@run.get_output("OUT"), "Hello, World!")
62
64
  assert_raise(T2Server::AccessForbiddenError) do
63
65
  @run.get_output("wrong!")
64
66
  end
@@ -66,11 +68,11 @@ class TestRun < Test::Unit::TestCase
66
68
  # deletion
67
69
  assert(@run.delete)
68
70
 
69
- # run that need inputs
70
- @run = T2Server::Run.create($address, $wkf_input)
71
+ # run with file input
72
+ @run = T2Server::Run.create($address, $wkf_pass)
71
73
 
72
74
  assert_nothing_raised(T2Server::AttributeNotFoundError) do
73
- @run.set_input("input", 10)
75
+ @run.upload_input_file("IN", $file_input)
74
76
  end
75
77
 
76
78
  @run.start
@@ -78,6 +80,7 @@ class TestRun < Test::Unit::TestCase
78
80
  assert_nothing_raised(T2Server::RunStateError) do
79
81
  @run.wait
80
82
  end
83
+ assert_equal(@run.get_output("OUT"), "Hello, World!")
81
84
 
82
85
  # run that returns list of lists, some empty, using baclava for input
83
86
  @run = T2Server::Run.create($address, $wkf_lists)
@@ -90,13 +93,14 @@ class TestRun < Test::Unit::TestCase
90
93
  assert_nothing_raised(T2Server::RunStateError) do
91
94
  @run.wait
92
95
  end
96
+ assert_equal(@run.get_output_ports, ["SINGLE", "MANY"])
93
97
  assert_equal(@run.get_output("SINGLE"), [])
94
- assert_equal(@run.get_output("MANY"), [[], [["Hello", ""]], [[], ["test"],
95
- []], [["boo"]]])
98
+ assert_equal(@run.get_output("MANY"),
99
+ [[["boo"]], [["", "Hello"]], [], [[], ["test"], []]])
96
100
 
97
101
  # run with baclava output
98
- @run = T2Server::Run.create($address, $wkf_hello)
99
-
102
+ @run = T2Server::Run.create($address, $wkf_pass)
103
+ @run.set_input("IN", "Some input...")
100
104
  assert_nothing_raised(T2Server::AttributeNotFoundError) do
101
105
  @run.set_baclava_output
102
106
  end
data/test/tc_server.rb CHANGED
@@ -43,7 +43,7 @@ class TestServer < Test::Unit::TestCase
43
43
 
44
44
  # run creation
45
45
  assert_nothing_raised(T2Server::T2ServerError) do
46
- @run = @server.create_run($wkf_hello)
46
+ @run = @server.create_run($wkf_pass)
47
47
  end
48
48
 
49
49
  # capacity
@@ -51,7 +51,7 @@ class TestServer < Test::Unit::TestCase
51
51
  assert_instance_of(Fixnum, limit)
52
52
  assert_raise(T2Server::ServerAtCapacityError) do
53
53
  limit.times do
54
- @server.create_run($wkf_hello)
54
+ @server.create_run($wkf_pass)
55
55
  end
56
56
  end
57
57
 
data/test/ts_t2server.rb CHANGED
@@ -33,26 +33,32 @@
33
33
  require 'test/unit'
34
34
  require 't2-server'
35
35
 
36
- # get a server address to test - 30 second timeout
37
- print "\nPlease supply a valid Taverna 2 Server address.\n\nNOTE that these " +
38
- "tests will fully load the server and then delete all the runs that it " +
39
- "has permission to do so - if you are not using security ALL runs will be " +
40
- "deleted!\n(leave blank to skip tests): "
41
- $stdout.flush
42
- if select([$stdin], [], [], 30)
43
- $address = $stdin.gets.chomp
36
+ # check for a server address passed through on the command line
37
+ if ARGV.size != 0:
38
+ $address = ARGV[0]
39
+ puts "Using server at #{$address}"
44
40
  else
45
- puts "\nSkipping tests that require a Taverna 2 Server instance..."
46
- $address = ""
41
+ # get a server address to test - 30 second timeout
42
+ print "\nPlease supply a valid Taverna 2 Server address.\n\nNOTE that " +
43
+ "these tests will fully load the server and then delete all the runs " +
44
+ "that it has permission to do so - if you are not using security ALL " +
45
+ "runs will be deleted!\n(leave blank to skip tests): "
46
+ $stdout.flush
47
+ if select([$stdin], [], [], 30)
48
+ $address = $stdin.gets.chomp
49
+ else
50
+ puts "\nSkipping tests that require a Taverna 2 Server instance..."
51
+ $address = ""
52
+ end
47
53
  end
48
54
 
49
55
  # the testcases to run
50
56
  require 'tc_paths'
51
57
  if $address != ""
52
- $wkf_hello = File.read("test/workflows/hello.t2flow")
53
- $wkf_input = File.read("test/workflows/pipelined_list_iteration_902021.t2flow")
58
+ $wkf_pass = File.read("test/workflows/pass_through.t2flow")
54
59
  $wkf_lists = File.read("test/workflows/empty_list.t2flow")
55
60
  $list_input = "test/workflows/empty_list_input.baclava"
61
+ $file_input = "test/workflows/in.txt"
56
62
 
57
63
  require 'tc_server'
58
64
  require 'tc_run'
@@ -1,23 +1,23 @@
1
- <workflow xmlns="http://taverna.sf.net/2008/xml/t2flow" version="1" producedBy="taverna-2.2.0"><dataflow id="373bb615-7dd3-46b4-9e3c-ee38e7460403" role="top"><name>Workflow1</name><inputPorts><port><name>MANY_IN</name><depth>3</depth><granularDepth>3</granularDepth><annotations /></port><port><name>SINGLE_IN</name><depth>1</depth><granularDepth>1</granularDepth><annotations /></port></inputPorts><outputPorts><port><name>MANY</name><annotations /></port><port><name>SINGLE</name><annotations /></port></outputPorts><processors /><conditions /><datalinks><datalink><sink type="dataflow"><port>MANY</port></sink><source type="dataflow"><port>MANY_IN</port></source></datalink><datalink><sink type="dataflow"><port>SINGLE</port></sink><source type="dataflow"><port>SINGLE_IN</port></source></datalink></datalinks><annotations><annotation_chain_2_2 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.IdentificationAssertion">
5
- <identification>536f469a-fd80-4efa-8d76-6cb2514123ec</identification>
6
- </annotationBean>
7
- <date>2010-11-04 18:00:12.867 GMT</date>
8
- <creators />
9
- <curationEventList />
10
- </net.sf.taverna.t2.annotation.AnnotationAssertionImpl>
11
- </annotationAssertions>
12
- </net.sf.taverna.t2.annotation.AnnotationChainImpl></annotation_chain_2_2><annotation_chain_2_2 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.IdentificationAssertion">
16
- <identification>373bb615-7dd3-46b4-9e3c-ee38e7460403</identification>
17
- </annotationBean>
18
- <date>2010-11-09 13:50:13.127 GMT</date>
19
- <creators />
20
- <curationEventList />
21
- </net.sf.taverna.t2.annotation.AnnotationAssertionImpl>
22
- </annotationAssertions>
1
+ <workflow xmlns="http://taverna.sf.net/2008/xml/t2flow" version="1" producedBy="taverna-2.2.0"><dataflow id="373bb615-7dd3-46b4-9e3c-ee38e7460403" role="top"><name>Workflow1</name><inputPorts><port><name>MANY_IN</name><depth>3</depth><granularDepth>3</granularDepth><annotations /></port><port><name>SINGLE_IN</name><depth>1</depth><granularDepth>1</granularDepth><annotations /></port></inputPorts><outputPorts><port><name>MANY</name><annotations /></port><port><name>SINGLE</name><annotations /></port></outputPorts><processors /><conditions /><datalinks><datalink><sink type="dataflow"><port>MANY</port></sink><source type="dataflow"><port>MANY_IN</port></source></datalink><datalink><sink type="dataflow"><port>SINGLE</port></sink><source type="dataflow"><port>SINGLE_IN</port></source></datalink></datalinks><annotations><annotation_chain_2_2 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.IdentificationAssertion">
5
+ <identification>536f469a-fd80-4efa-8d76-6cb2514123ec</identification>
6
+ </annotationBean>
7
+ <date>2010-11-04 18:00:12.867 GMT</date>
8
+ <creators />
9
+ <curationEventList />
10
+ </net.sf.taverna.t2.annotation.AnnotationAssertionImpl>
11
+ </annotationAssertions>
12
+ </net.sf.taverna.t2.annotation.AnnotationChainImpl></annotation_chain_2_2><annotation_chain_2_2 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.IdentificationAssertion">
16
+ <identification>373bb615-7dd3-46b4-9e3c-ee38e7460403</identification>
17
+ </annotationBean>
18
+ <date>2010-11-09 13:50:13.127 GMT</date>
19
+ <creators />
20
+ <curationEventList />
21
+ </net.sf.taverna.t2.annotation.AnnotationAssertionImpl>
22
+ </annotationAssertions>
23
23
  </net.sf.taverna.t2.annotation.AnnotationChainImpl></annotation_chain_2_2></annotations></dataflow></workflow>
@@ -1,86 +1,86 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <b:dataThingMap xmlns:b="http://org.embl.ebi.escience/baclava/0.1alpha">
3
- <b:dataThing key="MANY_IN">
4
- <b:myGridDataDocument lsid="" syntactictype="l(l(l('null')))">
5
- <s:metadata xmlns:s="http://org.embl.ebi.escience/xscufl/0.1alpha" />
6
- <b:partialOrder lsid="" type="list">
7
- <b:relationList>
8
- <b:relation parent="0" child="1" />
9
- <b:relation parent="1" child="2" />
10
- <b:relation parent="2" child="3" />
11
- </b:relationList>
12
- <b:itemList>
13
- <b:partialOrder lsid="" type="list" index="0">
14
- <b:relationList />
15
- <b:itemList>
16
- <b:partialOrder lsid="" type="list" index="0">
17
- <b:relationList />
18
- <b:itemList>
19
- <b:dataElement lsid="" index="0">
20
- <b:dataElementData>Ym9v</b:dataElementData>
21
- </b:dataElement>
22
- </b:itemList>
23
- </b:partialOrder>
24
- </b:itemList>
25
- </b:partialOrder>
26
- <b:partialOrder lsid="" type="list" index="1">
27
- <b:relationList />
28
- <b:itemList>
29
- <b:partialOrder lsid="" type="list" index="0">
30
- <b:relationList>
31
- <b:relation parent="0" child="1" />
32
- </b:relationList>
33
- <b:itemList>
34
- <b:dataElement lsid="" index="0">
35
- <b:dataElementData />
36
- </b:dataElement>
37
- <b:dataElement lsid="" index="1">
38
- <b:dataElementData>SGVsbG8=</b:dataElementData>
39
- </b:dataElement>
40
- </b:itemList>
41
- </b:partialOrder>
42
- </b:itemList>
43
- </b:partialOrder>
44
- <b:partialOrder lsid="" type="list" index="2">
45
- <b:relationList />
46
- <b:itemList />
47
- </b:partialOrder>
48
- <b:partialOrder lsid="" type="list" index="3">
49
- <b:relationList>
50
- <b:relation parent="0" child="1" />
51
- <b:relation parent="1" child="2" />
52
- </b:relationList>
53
- <b:itemList>
54
- <b:partialOrder lsid="" type="list" index="0">
55
- <b:relationList />
56
- <b:itemList />
57
- </b:partialOrder>
58
- <b:partialOrder lsid="" type="list" index="1">
59
- <b:relationList />
60
- <b:itemList>
61
- <b:dataElement lsid="" index="0">
62
- <b:dataElementData>dGVzdA==</b:dataElementData>
63
- </b:dataElement>
64
- </b:itemList>
65
- </b:partialOrder>
66
- <b:partialOrder lsid="" type="list" index="2">
67
- <b:relationList />
68
- <b:itemList />
69
- </b:partialOrder>
70
- </b:itemList>
71
- </b:partialOrder>
72
- </b:itemList>
73
- </b:partialOrder>
74
- </b:myGridDataDocument>
75
- </b:dataThing>
76
- <b:dataThing key="SINGLE_IN">
77
- <b:myGridDataDocument lsid="" syntactictype="l('null')">
78
- <s:metadata xmlns:s="http://org.embl.ebi.escience/xscufl/0.1alpha" />
79
- <b:partialOrder lsid="" type="list">
80
- <b:relationList />
81
- <b:itemList />
82
- </b:partialOrder>
83
- </b:myGridDataDocument>
84
- </b:dataThing>
85
- </b:dataThingMap>
86
-
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <b:dataThingMap xmlns:b="http://org.embl.ebi.escience/baclava/0.1alpha">
3
+ <b:dataThing key="MANY_IN">
4
+ <b:myGridDataDocument lsid="" syntactictype="l(l(l('null')))">
5
+ <s:metadata xmlns:s="http://org.embl.ebi.escience/xscufl/0.1alpha" />
6
+ <b:partialOrder lsid="" type="list">
7
+ <b:relationList>
8
+ <b:relation parent="0" child="1" />
9
+ <b:relation parent="1" child="2" />
10
+ <b:relation parent="2" child="3" />
11
+ </b:relationList>
12
+ <b:itemList>
13
+ <b:partialOrder lsid="" type="list" index="0">
14
+ <b:relationList />
15
+ <b:itemList>
16
+ <b:partialOrder lsid="" type="list" index="0">
17
+ <b:relationList />
18
+ <b:itemList>
19
+ <b:dataElement lsid="" index="0">
20
+ <b:dataElementData>Ym9v</b:dataElementData>
21
+ </b:dataElement>
22
+ </b:itemList>
23
+ </b:partialOrder>
24
+ </b:itemList>
25
+ </b:partialOrder>
26
+ <b:partialOrder lsid="" type="list" index="1">
27
+ <b:relationList />
28
+ <b:itemList>
29
+ <b:partialOrder lsid="" type="list" index="0">
30
+ <b:relationList>
31
+ <b:relation parent="0" child="1" />
32
+ </b:relationList>
33
+ <b:itemList>
34
+ <b:dataElement lsid="" index="0">
35
+ <b:dataElementData />
36
+ </b:dataElement>
37
+ <b:dataElement lsid="" index="1">
38
+ <b:dataElementData>SGVsbG8=</b:dataElementData>
39
+ </b:dataElement>
40
+ </b:itemList>
41
+ </b:partialOrder>
42
+ </b:itemList>
43
+ </b:partialOrder>
44
+ <b:partialOrder lsid="" type="list" index="2">
45
+ <b:relationList />
46
+ <b:itemList />
47
+ </b:partialOrder>
48
+ <b:partialOrder lsid="" type="list" index="3">
49
+ <b:relationList>
50
+ <b:relation parent="0" child="1" />
51
+ <b:relation parent="1" child="2" />
52
+ </b:relationList>
53
+ <b:itemList>
54
+ <b:partialOrder lsid="" type="list" index="0">
55
+ <b:relationList />
56
+ <b:itemList />
57
+ </b:partialOrder>
58
+ <b:partialOrder lsid="" type="list" index="1">
59
+ <b:relationList />
60
+ <b:itemList>
61
+ <b:dataElement lsid="" index="0">
62
+ <b:dataElementData>dGVzdA==</b:dataElementData>
63
+ </b:dataElement>
64
+ </b:itemList>
65
+ </b:partialOrder>
66
+ <b:partialOrder lsid="" type="list" index="2">
67
+ <b:relationList />
68
+ <b:itemList />
69
+ </b:partialOrder>
70
+ </b:itemList>
71
+ </b:partialOrder>
72
+ </b:itemList>
73
+ </b:partialOrder>
74
+ </b:myGridDataDocument>
75
+ </b:dataThing>
76
+ <b:dataThing key="SINGLE_IN">
77
+ <b:myGridDataDocument lsid="" syntactictype="l('null')">
78
+ <s:metadata xmlns:s="http://org.embl.ebi.escience/xscufl/0.1alpha" />
79
+ <b:partialOrder lsid="" type="list">
80
+ <b:relationList />
81
+ <b:itemList />
82
+ </b:partialOrder>
83
+ </b:myGridDataDocument>
84
+ </b:dataThing>
85
+ </b:dataThingMap>
86
+
@@ -0,0 +1 @@
1
+ Hello, World!
@@ -0,0 +1,12 @@
1
+ <workflow xmlns="http://taverna.sf.net/2008/xml/t2flow" version="1" producedBy="taverna-2.2.0"><dataflow id="b14e490b-927b-4e5e-9bb5-6c9b3da4ab2c" role="top"><name>Workflow1</name><inputPorts><port><name>IN</name><depth>0</depth><granularDepth>0</granularDepth><annotations /></port></inputPorts><outputPorts><port><name>OUT</name><annotations /></port></outputPorts><processors /><conditions /><datalinks><datalink><sink type="dataflow"><port>OUT</port></sink><source type="dataflow"><port>IN</port></source></datalink></datalinks><annotations><annotation_chain_2_2 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.IdentificationAssertion">
5
+ <identification>b14e490b-927b-4e5e-9bb5-6c9b3da4ab2c</identification>
6
+ </annotationBean>
7
+ <date>2010-11-22 13:37:10.158 GMT</date>
8
+ <creators />
9
+ <curationEventList />
10
+ </net.sf.taverna.t2.annotation.AnnotationAssertionImpl>
11
+ </annotationAssertions>
12
+ </net.sf.taverna.t2.annotation.AnnotationChainImpl></annotation_chain_2_2></annotations></dataflow></workflow>
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: t2-server
3
3
  version: !ruby/object:Gem::Version
4
- hash: 13
4
+ hash: 7
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
- - 5
9
- - 3
10
- version: 0.5.3
8
+ - 6
9
+ - 0
10
+ version: 0.6.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Robert Haines
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-11-09 00:00:00 +00:00
18
+ date: 2011-03-10 00:00:00 +00:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -50,6 +50,22 @@ dependencies:
50
50
  version: 1.1.4
51
51
  type: :runtime
52
52
  version_requirements: *id002
53
+ - !ruby/object:Gem::Dependency
54
+ name: hirb
55
+ prerelease: false
56
+ requirement: &id003 !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ hash: 15
62
+ segments:
63
+ - 0
64
+ - 4
65
+ - 0
66
+ version: 0.4.0
67
+ type: :runtime
68
+ version_requirements: *id003
53
69
  description: This gem provides access to the Taverna 2 Server REST interface from Ruby.
54
70
  email: rhaines@manchester.ac.uk
55
71
  executables:
@@ -75,10 +91,10 @@ files:
75
91
  - test/tc_server.rb
76
92
  - test/tc_paths.rb
77
93
  - test/tc_run.rb
78
- - test/workflows/pipelined_list_iteration_902021.t2flow
94
+ - test/workflows/pass_through.t2flow
79
95
  - test/workflows/empty_list_input.baclava
80
96
  - test/workflows/empty_list.t2flow
81
- - test/workflows/hello.t2flow
97
+ - test/workflows/in.txt
82
98
  - test/ts_t2server.rb
83
99
  - README.rdoc
84
100
  - LICENCE.rdoc
@@ -1,21 +0,0 @@
1
- <workflow xmlns="http://taverna.sf.net/2008/xml/t2flow" version="1" producedBy="taverna-2.2.0"><dataflow id="b9556b39-8656-4a17-bf5c-37de30fe7df3" role="top"><name>Workflow1</name><inputPorts /><outputPorts><port><name>Message</name><annotations /></port></outputPorts><processors><processor><name>Hello</name><inputPorts /><outputPorts><port><name>value</name><depth>0</depth><granularDepth>0</granularDepth></port></outputPorts><annotations /><activities><activity><raven><group>net.sf.taverna.t2.activities</group><artifact>stringconstant-activity</artifact><version>1.2</version></raven><class>net.sf.taverna.t2.activities.stringconstant.StringConstantActivity</class><inputMap /><outputMap><map from="value" to="value" /></outputMap><configBean encoding="xstream"><net.sf.taverna.t2.activities.stringconstant.StringConstantConfigurationBean xmlns="">
2
- <value>Hello, World!</value>
3
- </net.sf.taverna.t2.activities.stringconstant.StringConstantConfigurationBean></configBean><annotations /></activity></activities><dispatchStack><dispatchLayer><raven><group>net.sf.taverna.t2.core</group><artifact>workflowmodel-impl</artifact><version>1.2</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="">
4
- <maxJobs>1</maxJobs>
5
- </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.2</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.2</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.2</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="">
6
- <backoffFactor>1.0</backoffFactor>
7
- <initialDelay>1000</initialDelay>
8
- <maxDelay>5000</maxDelay>
9
- <maxRetries>0</maxRetries>
10
- </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.2</version></raven><class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Invoke</class><configBean encoding="xstream"><null xmlns="" /></configBean></dispatchLayer></dispatchStack><iterationStrategyStack><iteration><strategy /></iteration></iterationStrategyStack></processor></processors><conditions /><datalinks><datalink><sink type="dataflow"><port>Message</port></sink><source type="processor"><processor>Hello</processor><port>value</port></source></datalink></datalinks><annotations><annotation_chain_2_2 encoding="xstream"><net.sf.taverna.t2.annotation.AnnotationChainImpl xmlns="">
11
- <annotationAssertions>
12
- <net.sf.taverna.t2.annotation.AnnotationAssertionImpl>
13
- <annotationBean class="net.sf.taverna.t2.annotation.annotationbeans.IdentificationAssertion">
14
- <identification>b9556b39-8656-4a17-bf5c-37de30fe7df3</identification>
15
- </annotationBean>
16
- <date>2010-07-09 15:01:39.283 BST</date>
17
- <creators />
18
- <curationEventList />
19
- </net.sf.taverna.t2.annotation.AnnotationAssertionImpl>
20
- </annotationAssertions>
21
- </net.sf.taverna.t2.annotation.AnnotationChainImpl></annotation_chain_2_2></annotations></dataflow></workflow>
@@ -1,303 +0,0 @@
1
- <workflow xmlns="http://taverna.sf.net/2008/xml/t2flow" version="1" producedBy="taverna-2.2.0"><dataflow id="fd34324d-de34-4a5f-9b12-13059a9fb1a4" role="top"><name>Pipelined_list_iteration</name><inputPorts><port><name>input</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.ExampleValue">
5
- <text>150</text>
6
- </annotationBean>
7
- <date>2009-12-15 19:41:02.598 GMT</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.FreeTextDescription">
16
- <text>Number of elements to generate</text>
17
- </annotationBean>
18
- <date>2009-12-15 19:40:52.84 GMT</date>
19
- <creators />
20
- <curationEventList />
21
- </net.sf.taverna.t2.annotation.AnnotationAssertionImpl>
22
- </annotationAssertions>
23
- </net.sf.taverna.t2.annotation.AnnotationChainImpl></annotation_chain></annotations></port></inputPorts><outputPorts><port><name>out</name><annotations /></port></outputPorts><processors><processor><name>List_Emitter</name><inputPorts><port><name>count</name><depth>0</depth></port></inputPorts><outputPorts><port><name>list</name><depth>1</depth><granularDepth>1</granularDepth></port></outputPorts><annotations /><activities><activity><raven><group>net.sf.taverna.t2.activities</group><artifact>beanshell-activity</artifact><version>1.2</version></raven><class>net.sf.taverna.t2.activities.beanshell.BeanshellActivity</class><inputMap><map from="count" to="count" /></inputMap><outputMap><map from="list" to="list" /></outputMap><configBean encoding="xstream"><net.sf.taverna.t2.activities.beanshell.BeanshellActivityConfigurationBean xmlns="">
24
- <script>List list = new ArrayList();
25
- int icount = Integer.parseInt(count);
26
-
27
- for (int i=0;i&lt;icount;i++) {
28
- list.add(String.valueOf(i));
29
- }</script>
30
- <dependencies />
31
- <classLoaderSharing>workflow</classLoaderSharing>
32
- <localDependencies />
33
- <artifactDependencies />
34
- <inputs>
35
- <net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityInputPortDefinitionBean>
36
- <handledReferenceSchemes />
37
- <translatedElementType>java.lang.String</translatedElementType>
38
- <allowsLiteralValues>true</allowsLiteralValues>
39
- <name>count</name>
40
- <depth>0</depth>
41
- <mimeTypes>
42
- <string>text/plain</string>
43
- </mimeTypes>
44
- </net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityInputPortDefinitionBean>
45
- </inputs>
46
- <outputs>
47
- <net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityOutputPortDefinitionBean>
48
- <granularDepth>1</granularDepth>
49
- <name>list</name>
50
- <depth>1</depth>
51
- <mimeTypes />
52
- </net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityOutputPortDefinitionBean>
53
- </outputs>
54
- </net.sf.taverna.t2.activities.beanshell.BeanshellActivityConfigurationBean></configBean><annotations /></activity></activities><dispatchStack><dispatchLayer><raven><group>net.sf.taverna.t2.core</group><artifact>workflowmodel-impl</artifact><version>1.2</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="">
55
- <maxJobs>1</maxJobs>
56
- </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.2</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.2</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.2</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="">
57
- <backoffFactor>1.0</backoffFactor>
58
- <initialDelay>1000</initialDelay>
59
- <maxDelay>5000</maxDelay>
60
- <maxRetries>0</maxRetries>
61
- </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.2</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="count" depth="0" /></cross></strategy></iteration></iterationStrategyStack></processor><processor><name>Concat</name><inputPorts><port><name>input</name><depth>0</depth></port></inputPorts><outputPorts><port><name>output</name><depth>0</depth><granularDepth>0</granularDepth></port></outputPorts><annotations /><activities><activity><raven><group>net.sf.taverna.t2.activities</group><artifact>beanshell-activity</artifact><version>1.2</version></raven><class>net.sf.taverna.t2.activities.beanshell.BeanshellActivity</class><inputMap><map from="input" to="input" /></inputMap><outputMap><map from="output" to="output" /></outputMap><configBean encoding="xstream"><net.sf.taverna.t2.activities.beanshell.BeanshellActivityConfigurationBean xmlns="">
62
- <script>String output = input + "XXX"</script>
63
- <dependencies />
64
- <classLoaderSharing>workflow</classLoaderSharing>
65
- <localDependencies />
66
- <artifactDependencies />
67
- <inputs>
68
- <net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityInputPortDefinitionBean>
69
- <handledReferenceSchemes />
70
- <translatedElementType>java.lang.String</translatedElementType>
71
- <allowsLiteralValues>true</allowsLiteralValues>
72
- <name>input</name>
73
- <depth>0</depth>
74
- <mimeTypes>
75
- <string>text/plain</string>
76
- </mimeTypes>
77
- </net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityInputPortDefinitionBean>
78
- </inputs>
79
- <outputs>
80
- <net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityOutputPortDefinitionBean>
81
- <granularDepth>0</granularDepth>
82
- <name>output</name>
83
- <depth>0</depth>
84
- <mimeTypes />
85
- </net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityOutputPortDefinitionBean>
86
- </outputs>
87
- </net.sf.taverna.t2.activities.beanshell.BeanshellActivityConfigurationBean></configBean><annotations /></activity></activities><dispatchStack><dispatchLayer><raven><group>net.sf.taverna.t2.core</group><artifact>workflowmodel-impl</artifact><version>1.2</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="">
88
- <maxJobs>1</maxJobs>
89
- </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.2</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.2</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.2</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="">
90
- <backoffFactor>1.0</backoffFactor>
91
- <initialDelay>1000</initialDelay>
92
- <maxDelay>5000</maxDelay>
93
- <maxRetries>0</maxRetries>
94
- </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.2</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="input" depth="0" /></cross></strategy></iteration></iterationStrategyStack></processor><processor><name>Concatenate_two_strings</name><inputPorts><port><name>string1</name><depth>0</depth></port><port><name>string2</name><depth>0</depth></port></inputPorts><outputPorts><port><name>output</name><depth>0</depth><granularDepth>0</granularDepth></port></outputPorts><annotations /><activities><activity><raven><group>net.sf.taverna.t2.activities</group><artifact>localworker-activity</artifact><version>1.2</version></raven><class>net.sf.taverna.t2.activities.localworker.LocalworkerActivity</class><inputMap><map from="string2" to="string2" /><map from="string1" to="string1" /></inputMap><outputMap><map from="output" to="output" /></outputMap><configBean encoding="xstream"><net.sf.taverna.t2.activities.localworker.LocalworkerActivityConfigurationBean xmlns="">
95
- <localworkerName>org.embl.ebi.escience.scuflworkers.java.StringConcat</localworkerName>
96
- <script>output = string1 + string2;</script>
97
- <dependencies />
98
- <classLoaderSharing>workflow</classLoaderSharing>
99
- <localDependencies />
100
- <artifactDependencies />
101
- <inputs>
102
- <net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityInputPortDefinitionBean>
103
- <handledReferenceSchemes />
104
- <translatedElementType>java.lang.String</translatedElementType>
105
- <allowsLiteralValues>true</allowsLiteralValues>
106
- <name>string1</name>
107
- <depth>0</depth>
108
- <mimeTypes>
109
- <string>'text/plain'</string>
110
- </mimeTypes>
111
- </net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityInputPortDefinitionBean>
112
- <net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityInputPortDefinitionBean>
113
- <handledReferenceSchemes />
114
- <translatedElementType>java.lang.String</translatedElementType>
115
- <allowsLiteralValues>true</allowsLiteralValues>
116
- <name>string2</name>
117
- <depth>0</depth>
118
- <mimeTypes>
119
- <string>'text/plain'</string>
120
- </mimeTypes>
121
- </net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityInputPortDefinitionBean>
122
- </inputs>
123
- <outputs>
124
- <net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityOutputPortDefinitionBean>
125
- <granularDepth>0</granularDepth>
126
- <name>output</name>
127
- <depth>0</depth>
128
- <mimeTypes>
129
- <string>'text/plain'</string>
130
- </mimeTypes>
131
- </net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityOutputPortDefinitionBean>
132
- </outputs>
133
- </net.sf.taverna.t2.activities.localworker.LocalworkerActivityConfigurationBean></configBean><annotations /></activity></activities><dispatchStack><dispatchLayer><raven><group>net.sf.taverna.t2.core</group><artifact>workflowmodel-impl</artifact><version>1.2</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="">
134
- <maxJobs>1</maxJobs>
135
- </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.2</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.2</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.2</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="">
136
- <backoffFactor>1.0</backoffFactor>
137
- <initialDelay>1000</initialDelay>
138
- <maxDelay>5000</maxDelay>
139
- <maxRetries>0</maxRetries>
140
- </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.2</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="string1" depth="0" /><port name="string2" depth="0" /></cross></strategy></iteration></iterationStrategyStack></processor><processor><name>Concatenate_two_strings_2</name><inputPorts><port><name>string1</name><depth>0</depth></port><port><name>string2</name><depth>0</depth></port></inputPorts><outputPorts><port><name>output</name><depth>0</depth><granularDepth>0</granularDepth></port></outputPorts><annotations /><activities><activity><raven><group>net.sf.taverna.t2.activities</group><artifact>localworker-activity</artifact><version>1.2</version></raven><class>net.sf.taverna.t2.activities.localworker.LocalworkerActivity</class><inputMap><map from="string2" to="string2" /><map from="string1" to="string1" /></inputMap><outputMap><map from="output" to="output" /></outputMap><configBean encoding="xstream"><net.sf.taverna.t2.activities.localworker.LocalworkerActivityConfigurationBean xmlns="">
141
- <localworkerName>org.embl.ebi.escience.scuflworkers.java.StringConcat</localworkerName>
142
- <script>output = string1 + string2;</script>
143
- <dependencies />
144
- <classLoaderSharing>workflow</classLoaderSharing>
145
- <localDependencies />
146
- <artifactDependencies />
147
- <inputs>
148
- <net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityInputPortDefinitionBean>
149
- <handledReferenceSchemes />
150
- <translatedElementType>java.lang.String</translatedElementType>
151
- <allowsLiteralValues>true</allowsLiteralValues>
152
- <name>string1</name>
153
- <depth>0</depth>
154
- <mimeTypes>
155
- <string>'text/plain'</string>
156
- </mimeTypes>
157
- </net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityInputPortDefinitionBean>
158
- <net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityInputPortDefinitionBean>
159
- <handledReferenceSchemes />
160
- <translatedElementType>java.lang.String</translatedElementType>
161
- <allowsLiteralValues>true</allowsLiteralValues>
162
- <name>string2</name>
163
- <depth>0</depth>
164
- <mimeTypes>
165
- <string>'text/plain'</string>
166
- </mimeTypes>
167
- </net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityInputPortDefinitionBean>
168
- </inputs>
169
- <outputs>
170
- <net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityOutputPortDefinitionBean>
171
- <granularDepth>0</granularDepth>
172
- <name>output</name>
173
- <depth>0</depth>
174
- <mimeTypes>
175
- <string>'text/plain'</string>
176
- </mimeTypes>
177
- </net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityOutputPortDefinitionBean>
178
- </outputs>
179
- </net.sf.taverna.t2.activities.localworker.LocalworkerActivityConfigurationBean></configBean><annotations /></activity></activities><dispatchStack><dispatchLayer><raven><group>net.sf.taverna.t2.core</group><artifact>workflowmodel-impl</artifact><version>1.2</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="">
180
- <maxJobs>1</maxJobs>
181
- </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.2</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.2</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.2</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="">
182
- <backoffFactor>1.0</backoffFactor>
183
- <initialDelay>1000</initialDelay>
184
- <maxDelay>5000</maxDelay>
185
- <maxRetries>0</maxRetries>
186
- </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.2</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="string1" depth="0" /><port name="string2" depth="0" /></cross></strategy></iteration></iterationStrategyStack></processor><processor><name>Concatenate_two_strings_3</name><inputPorts><port><name>string1</name><depth>0</depth></port><port><name>string2</name><depth>0</depth></port></inputPorts><outputPorts><port><name>output</name><depth>0</depth><granularDepth>0</granularDepth></port></outputPorts><annotations /><activities><activity><raven><group>net.sf.taverna.t2.activities</group><artifact>localworker-activity</artifact><version>1.2</version></raven><class>net.sf.taverna.t2.activities.localworker.LocalworkerActivity</class><inputMap><map from="string2" to="string2" /><map from="string1" to="string1" /></inputMap><outputMap><map from="output" to="output" /></outputMap><configBean encoding="xstream"><net.sf.taverna.t2.activities.localworker.LocalworkerActivityConfigurationBean xmlns="">
187
- <localworkerName>org.embl.ebi.escience.scuflworkers.java.StringConcat</localworkerName>
188
- <script>output = string1 + string2;</script>
189
- <dependencies />
190
- <classLoaderSharing>workflow</classLoaderSharing>
191
- <localDependencies />
192
- <artifactDependencies />
193
- <inputs>
194
- <net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityInputPortDefinitionBean>
195
- <handledReferenceSchemes />
196
- <translatedElementType>java.lang.String</translatedElementType>
197
- <allowsLiteralValues>true</allowsLiteralValues>
198
- <name>string1</name>
199
- <depth>0</depth>
200
- <mimeTypes>
201
- <string>'text/plain'</string>
202
- </mimeTypes>
203
- </net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityInputPortDefinitionBean>
204
- <net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityInputPortDefinitionBean>
205
- <handledReferenceSchemes />
206
- <translatedElementType>java.lang.String</translatedElementType>
207
- <allowsLiteralValues>true</allowsLiteralValues>
208
- <name>string2</name>
209
- <depth>0</depth>
210
- <mimeTypes>
211
- <string>'text/plain'</string>
212
- </mimeTypes>
213
- </net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityInputPortDefinitionBean>
214
- </inputs>
215
- <outputs>
216
- <net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityOutputPortDefinitionBean>
217
- <granularDepth>0</granularDepth>
218
- <name>output</name>
219
- <depth>0</depth>
220
- <mimeTypes>
221
- <string>'text/plain'</string>
222
- </mimeTypes>
223
- </net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityOutputPortDefinitionBean>
224
- </outputs>
225
- </net.sf.taverna.t2.activities.localworker.LocalworkerActivityConfigurationBean></configBean><annotations /></activity></activities><dispatchStack><dispatchLayer><raven><group>net.sf.taverna.t2.core</group><artifact>workflowmodel-impl</artifact><version>1.2</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="">
226
- <maxJobs>1</maxJobs>
227
- </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.2</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.2</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.2</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="">
228
- <backoffFactor>1.0</backoffFactor>
229
- <initialDelay>1000</initialDelay>
230
- <maxDelay>5000</maxDelay>
231
- <maxRetries>0</maxRetries>
232
- </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.2</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="string1" depth="0" /><port name="string2" depth="0" /></cross></strategy></iteration></iterationStrategyStack></processor><processor><name>boo</name><inputPorts /><outputPorts><port><name>value</name><depth>0</depth><granularDepth>0</granularDepth></port></outputPorts><annotations /><activities><activity><raven><group>net.sf.taverna.t2.activities</group><artifact>stringconstant-activity</artifact><version>1.2</version></raven><class>net.sf.taverna.t2.activities.stringconstant.StringConstantActivity</class><inputMap /><outputMap><map from="value" to="value" /></outputMap><configBean encoding="xstream"><net.sf.taverna.t2.activities.stringconstant.StringConstantConfigurationBean xmlns="">
233
- <value>boo</value>
234
- </net.sf.taverna.t2.activities.stringconstant.StringConstantConfigurationBean></configBean><annotations /></activity></activities><dispatchStack><dispatchLayer><raven><group>net.sf.taverna.t2.core</group><artifact>workflowmodel-impl</artifact><version>1.2</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="">
235
- <maxJobs>1</maxJobs>
236
- </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.2</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.2</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.2</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="">
237
- <backoffFactor>1.0</backoffFactor>
238
- <initialDelay>1000</initialDelay>
239
- <maxDelay>5000</maxDelay>
240
- <maxRetries>0</maxRetries>
241
- </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.2</version></raven><class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Invoke</class><configBean encoding="xstream"><null xmlns="" /></configBean></dispatchLayer></dispatchStack><iterationStrategyStack><iteration><strategy /></iteration></iterationStrategyStack></processor><processor><name>xxx</name><inputPorts /><outputPorts><port><name>value</name><depth>0</depth><granularDepth>0</granularDepth></port></outputPorts><annotations /><activities><activity><raven><group>net.sf.taverna.t2.activities</group><artifact>stringconstant-activity</artifact><version>1.2</version></raven><class>net.sf.taverna.t2.activities.stringconstant.StringConstantActivity</class><inputMap /><outputMap><map from="value" to="value" /></outputMap><configBean encoding="xstream"><net.sf.taverna.t2.activities.stringconstant.StringConstantConfigurationBean xmlns="">
242
- <value>xxx</value>
243
- </net.sf.taverna.t2.activities.stringconstant.StringConstantConfigurationBean></configBean><annotations /></activity></activities><dispatchStack><dispatchLayer><raven><group>net.sf.taverna.t2.core</group><artifact>workflowmodel-impl</artifact><version>1.2</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="">
244
- <maxJobs>1</maxJobs>
245
- </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.2</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.2</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.2</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="">
246
- <backoffFactor>1.0</backoffFactor>
247
- <initialDelay>1000</initialDelay>
248
- <maxDelay>5000</maxDelay>
249
- <maxRetries>0</maxRetries>
250
- </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.2</version></raven><class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Invoke</class><configBean encoding="xstream"><null xmlns="" /></configBean></dispatchLayer></dispatchStack><iterationStrategyStack><iteration><strategy /></iteration></iterationStrategyStack></processor><processor><name>sdfds</name><inputPorts /><outputPorts><port><name>value</name><depth>0</depth><granularDepth>0</granularDepth></port></outputPorts><annotations /><activities><activity><raven><group>net.sf.taverna.t2.activities</group><artifact>stringconstant-activity</artifact><version>1.2</version></raven><class>net.sf.taverna.t2.activities.stringconstant.StringConstantActivity</class><inputMap /><outputMap><map from="value" to="value" /></outputMap><configBean encoding="xstream"><net.sf.taverna.t2.activities.stringconstant.StringConstantConfigurationBean xmlns="">
251
- <value>sdfds</value>
252
- </net.sf.taverna.t2.activities.stringconstant.StringConstantConfigurationBean></configBean><annotations /></activity></activities><dispatchStack><dispatchLayer><raven><group>net.sf.taverna.t2.core</group><artifact>workflowmodel-impl</artifact><version>1.2</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="">
253
- <maxJobs>1</maxJobs>
254
- </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.2</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.2</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.2</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="">
255
- <backoffFactor>1.0</backoffFactor>
256
- <initialDelay>1000</initialDelay>
257
- <maxDelay>5000</maxDelay>
258
- <maxRetries>0</maxRetries>
259
- </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.2</version></raven><class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Invoke</class><configBean encoding="xstream"><null xmlns="" /></configBean></dispatchLayer></dispatchStack><iterationStrategyStack><iteration><strategy /></iteration></iterationStrategyStack></processor></processors><conditions /><datalinks><datalink><sink type="processor"><processor>List_Emitter</processor><port>count</port></sink><source type="dataflow"><port>input</port></source></datalink><datalink><sink type="processor"><processor>Concat</processor><port>input</port></sink><source type="processor"><processor>List_Emitter</processor><port>list</port></source></datalink><datalink><sink type="processor"><processor>Concatenate_two_strings</processor><port>string1</port></sink><source type="processor"><processor>Concat</processor><port>output</port></source></datalink><datalink><sink type="processor"><processor>Concatenate_two_strings</processor><port>string2</port></sink><source type="processor"><processor>boo</processor><port>value</port></source></datalink><datalink><sink type="processor"><processor>Concatenate_two_strings_2</processor><port>string1</port></sink><source type="processor"><processor>Concatenate_two_strings</processor><port>output</port></source></datalink><datalink><sink type="processor"><processor>Concatenate_two_strings_2</processor><port>string2</port></sink><source type="processor"><processor>xxx</processor><port>value</port></source></datalink><datalink><sink type="processor"><processor>Concatenate_two_strings_3</processor><port>string1</port></sink><source type="processor"><processor>Concatenate_two_strings_2</processor><port>output</port></source></datalink><datalink><sink type="processor"><processor>Concatenate_two_strings_3</processor><port>string2</port></sink><source type="processor"><processor>sdfds</processor><port>value</port></source></datalink><datalink><sink type="dataflow"><port>out</port></sink><source type="processor"><processor>Concatenate_two_strings_3</processor><port>output</port></source></datalink></datalinks><annotations><annotation_chain encoding="xstream"><net.sf.taverna.t2.annotation.AnnotationChainImpl xmlns="">
260
- <annotationAssertions>
261
- <net.sf.taverna.t2.annotation.AnnotationAssertionImpl>
262
- <annotationBean class="net.sf.taverna.t2.annotation.annotationbeans.FreeTextDescription">
263
- <text>Perform multiple iterations of services in order to show pipelining</text>
264
- </annotationBean>
265
- <date>2009-12-15 19:42:21.971 GMT</date>
266
- <creators />
267
- <curationEventList />
268
- </net.sf.taverna.t2.annotation.AnnotationAssertionImpl>
269
- </annotationAssertions>
270
- </net.sf.taverna.t2.annotation.AnnotationChainImpl></annotation_chain><annotation_chain encoding="xstream"><net.sf.taverna.t2.annotation.AnnotationChainImpl xmlns="">
271
- <annotationAssertions>
272
- <net.sf.taverna.t2.annotation.AnnotationAssertionImpl>
273
- <annotationBean class="net.sf.taverna.t2.annotation.annotationbeans.Author">
274
- <text>Ian Dunlop, Stian Soiland-Reyes</text>
275
- </annotationBean>
276
- <date>2009-12-15 19:42:01.488 GMT</date>
277
- <creators />
278
- <curationEventList />
279
- </net.sf.taverna.t2.annotation.AnnotationAssertionImpl>
280
- </annotationAssertions>
281
- </net.sf.taverna.t2.annotation.AnnotationChainImpl></annotation_chain><annotation_chain encoding="xstream"><net.sf.taverna.t2.annotation.AnnotationChainImpl xmlns="">
282
- <annotationAssertions>
283
- <net.sf.taverna.t2.annotation.AnnotationAssertionImpl>
284
- <annotationBean class="net.sf.taverna.t2.annotation.annotationbeans.DescriptiveTitle">
285
- <text>Pipelined list iteration</text>
286
- </annotationBean>
287
- <date>2009-12-15 19:42:12.907 GMT</date>
288
- <creators />
289
- <curationEventList />
290
- </net.sf.taverna.t2.annotation.AnnotationAssertionImpl>
291
- </annotationAssertions>
292
- </net.sf.taverna.t2.annotation.AnnotationChainImpl></annotation_chain><annotation_chain_2_2 encoding="xstream"><net.sf.taverna.t2.annotation.AnnotationChainImpl xmlns="">
293
- <annotationAssertions>
294
- <net.sf.taverna.t2.annotation.AnnotationAssertionImpl>
295
- <annotationBean class="net.sf.taverna.t2.annotation.annotationbeans.IdentificationAssertion">
296
- <identification>fd34324d-de34-4a5f-9b12-13059a9fb1a4</identification>
297
- </annotationBean>
298
- <date>2010-07-04 18:19:17.425 BST</date>
299
- <creators />
300
- <curationEventList />
301
- </net.sf.taverna.t2.annotation.AnnotationAssertionImpl>
302
- </annotationAssertions>
303
- </net.sf.taverna.t2.annotation.AnnotationChainImpl></annotation_chain_2_2></annotations></dataflow></workflow>