taverna-t2flow 0.2.0 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,321 @@
1
+ <workflow xmlns="http://taverna.sf.net/2008/xml/t2flow" version="1" producedBy="taverna-2.1.0"><dataflow id="8b032490-948e-4983-b632-d16653755fcd" role="top"><name>Fetch_today_s_xkcd_comic</name><inputPorts /><outputPorts><port><name>todaysXkcd</name><annotations /></port></outputPorts><processors><processor><name>getPage</name><inputPorts><port><name>url</name><depth>0</depth></port></inputPorts><outputPorts><port><name>contents</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.0</version></raven><class>net.sf.taverna.t2.activities.localworker.LocalworkerActivity</class><inputMap><map from="url" to="url" /></inputMap><outputMap><map from="contents" to="contents" /></outputMap><configBean encoding="xstream"><net.sf.taverna.t2.activities.localworker.LocalworkerActivityConfigurationBean xmlns="">
2
+ <localworkerName>org.embl.ebi.escience.scuflworkers.java.WebPageFetcher</localworkerName>
3
+ <script>URL inputURL = null;
4
+ if (base != void) {
5
+ inputURL = new URL(new URL(base), url);
6
+ }
7
+ else {
8
+ inputURL = new URL(url);
9
+ }
10
+ URLConnection con = inputURL.openConnection();
11
+ InputStream in = con.getInputStream();
12
+
13
+ InputStreamReader isr = new InputStreamReader(in);
14
+ Reader inReader = new BufferedReader(isr);
15
+
16
+ StringBuffer buf = new StringBuffer();
17
+ int ch;
18
+ while ((ch = inReader.read()) &gt; -1) {
19
+ buf.append((char)ch);
20
+ }
21
+ inReader.close();
22
+ contents = buf.toString();
23
+
24
+
25
+ //String NEWLINE = System.getProperty("line.separator");
26
+ //
27
+ //URL inputURL = null;
28
+ //if (base != void) {
29
+ // inputURL = new URL(new URL(base), url);
30
+ //} else {
31
+ // inputURL = new URL(url);
32
+ //}
33
+ //StringBuffer result = new StringBuffer();
34
+ //BufferedReader reader = new BufferedReader(new InputStreamReader(inputURL.openStream()));
35
+ //String line = null;
36
+ //while ((line = reader.readLine()) != null) {
37
+ // result.append(line);
38
+ // result.append(NEWLINE);
39
+ //}
40
+ //
41
+ //contents = result.toString();
42
+ </script>
43
+ <dependencies />
44
+ <classLoaderSharing>workflow</classLoaderSharing>
45
+ <localDependencies />
46
+ <artifactDependencies />
47
+ <inputs>
48
+ <net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityInputPortDefinitionBean>
49
+ <handledReferenceSchemes />
50
+ <translatedElementType>java.lang.String</translatedElementType>
51
+ <allowsLiteralValues>true</allowsLiteralValues>
52
+ <name>url</name>
53
+ <depth>0</depth>
54
+ <mimeTypes>
55
+ <string>'text/x-taverna-web-url'</string>
56
+ </mimeTypes>
57
+ </net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityInputPortDefinitionBean>
58
+ <net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityInputPortDefinitionBean>
59
+ <handledReferenceSchemes />
60
+ <translatedElementType>java.lang.String</translatedElementType>
61
+ <allowsLiteralValues>true</allowsLiteralValues>
62
+ <name>base</name>
63
+ <depth>0</depth>
64
+ <mimeTypes>
65
+ <string>'text/x-taverna-web-url'</string>
66
+ </mimeTypes>
67
+ </net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityInputPortDefinitionBean>
68
+ </inputs>
69
+ <outputs>
70
+ <net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityOutputPortDefinitionBean>
71
+ <granularDepth>0</granularDepth>
72
+ <name>contents</name>
73
+ <depth>0</depth>
74
+ <mimeTypes>
75
+ <string>'text/plain,text/html'</string>
76
+ </mimeTypes>
77
+ </net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityOutputPortDefinitionBean>
78
+ </outputs>
79
+ </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.0</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="">
80
+ <maxJobs>1</maxJobs>
81
+ </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.0</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.0</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.0</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="">
82
+ <backoffFactor>1.0</backoffFactor>
83
+ <initialDelay>1000</initialDelay>
84
+ <maxDelay>5000</maxDelay>
85
+ <maxRetries>0</maxRetries>
86
+ </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.0</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="url" depth="0" /></cross></strategy></iteration></iterationStrategyStack></processor><processor><name>xkcdURL</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.0</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="">
87
+ <value>http://xkcd.com/</value>
88
+ </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.0</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="">
89
+ <maxJobs>1</maxJobs>
90
+ </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.0</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.0</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.0</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="">
91
+ <backoffFactor>1.0</backoffFactor>
92
+ <initialDelay>1000</initialDelay>
93
+ <maxDelay>5000</maxDelay>
94
+ <maxRetries>0</maxRetries>
95
+ </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.0</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>getImageLinks</name><inputPorts><port><name>document</name><depth>0</depth></port></inputPorts><outputPorts><port><name>imagelinks</name><depth>1</depth><granularDepth>1</granularDepth></port></outputPorts><annotations /><activities><activity><raven><group>net.sf.taverna.t2.activities</group><artifact>localworker-activity</artifact><version>1.0</version></raven><class>net.sf.taverna.t2.activities.localworker.LocalworkerActivity</class><inputMap><map from="document" to="document" /></inputMap><outputMap><map from="imagelinks" to="imagelinks" /></outputMap><configBean encoding="xstream"><net.sf.taverna.t2.activities.localworker.LocalworkerActivityConfigurationBean xmlns="">
96
+ <localworkerName>org.embl.ebi.escience.scuflworkers.java.ExtractImageLinks</localworkerName>
97
+ <script>String lowerCaseContent = document.toLowerCase();
98
+ int index = 0;
99
+ List imagelinks = new ArrayList();
100
+ while ((index = lowerCaseContent.indexOf("&lt;img", index)) != -1) {
101
+ if ((index = lowerCaseContent.indexOf("src", index)) == -1)
102
+ break;
103
+ if ((index = lowerCaseContent.indexOf("=", index)) == -1)
104
+ break;
105
+ index++;
106
+ String remaining = document.substring(index);
107
+ StringTokenizer st = new StringTokenizer(remaining, "\t\n\r\"&gt;#");
108
+ String strLink = st.nextToken();
109
+ imagelinks.add(strLink);
110
+ }
111
+
112
+ </script>
113
+ <dependencies />
114
+ <classLoaderSharing>workflow</classLoaderSharing>
115
+ <localDependencies />
116
+ <artifactDependencies />
117
+ <inputs>
118
+ <net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityInputPortDefinitionBean>
119
+ <handledReferenceSchemes />
120
+ <translatedElementType>java.lang.String</translatedElementType>
121
+ <allowsLiteralValues>true</allowsLiteralValues>
122
+ <name>document</name>
123
+ <depth>0</depth>
124
+ <mimeTypes>
125
+ <string>'text/html'</string>
126
+ </mimeTypes>
127
+ </net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityInputPortDefinitionBean>
128
+ </inputs>
129
+ <outputs>
130
+ <net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityOutputPortDefinitionBean>
131
+ <granularDepth>1</granularDepth>
132
+ <name>imagelinks</name>
133
+ <depth>1</depth>
134
+ <mimeTypes>
135
+ <string>l('text/x-taverna-web-url')</string>
136
+ </mimeTypes>
137
+ </net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityOutputPortDefinitionBean>
138
+ </outputs>
139
+ </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.0</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="">
140
+ <maxJobs>1</maxJobs>
141
+ </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.0</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.0</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.0</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="">
142
+ <backoffFactor>1.0</backoffFactor>
143
+ <initialDelay>1000</initialDelay>
144
+ <maxDelay>5000</maxDelay>
145
+ <maxRetries>0</maxRetries>
146
+ </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.0</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="document" depth="0" /></cross></strategy></iteration></iterationStrategyStack></processor><processor><name>findComicURL</name><inputPorts><port><name>regex</name><depth>0</depth></port><port><name>stringlist</name><depth>1</depth></port></inputPorts><outputPorts><port><name>filteredlist</name><depth>1</depth><granularDepth>1</granularDepth></port></outputPorts><annotations /><activities><activity><raven><group>net.sf.taverna.t2.activities</group><artifact>localworker-activity</artifact><version>1.0</version></raven><class>net.sf.taverna.t2.activities.localworker.LocalworkerActivity</class><inputMap><map from="regex" to="regex" /><map from="stringlist" to="stringlist" /></inputMap><outputMap><map from="filteredlist" to="filteredlist" /></outputMap><configBean encoding="xstream"><net.sf.taverna.t2.activities.localworker.LocalworkerActivityConfigurationBean xmlns="">
147
+ <localworkerName>org.embl.ebi.escience.scuflworkers.java.FilterStringList</localworkerName>
148
+ <script>filteredlist = new ArrayList();
149
+ for (Iterator i = stringlist.iterator(); i.hasNext();) {
150
+ String item = (String) i.next();
151
+ if (item.matches(regex)) {
152
+ filteredlist.add(item);
153
+ }
154
+ }
155
+ </script>
156
+ <dependencies />
157
+ <classLoaderSharing>workflow</classLoaderSharing>
158
+ <localDependencies />
159
+ <artifactDependencies />
160
+ <inputs>
161
+ <net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityInputPortDefinitionBean>
162
+ <handledReferenceSchemes />
163
+ <translatedElementType>java.lang.String</translatedElementType>
164
+ <allowsLiteralValues>true</allowsLiteralValues>
165
+ <name>stringlist</name>
166
+ <depth>1</depth>
167
+ <mimeTypes>
168
+ <string>l('text/plain')</string>
169
+ </mimeTypes>
170
+ </net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityInputPortDefinitionBean>
171
+ <net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityInputPortDefinitionBean>
172
+ <handledReferenceSchemes />
173
+ <translatedElementType>java.lang.String</translatedElementType>
174
+ <allowsLiteralValues>true</allowsLiteralValues>
175
+ <name>regex</name>
176
+ <depth>0</depth>
177
+ <mimeTypes>
178
+ <string>'text/plain'</string>
179
+ </mimeTypes>
180
+ </net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityInputPortDefinitionBean>
181
+ </inputs>
182
+ <outputs>
183
+ <net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityOutputPortDefinitionBean>
184
+ <granularDepth>1</granularDepth>
185
+ <name>filteredlist</name>
186
+ <depth>1</depth>
187
+ <mimeTypes>
188
+ <string>l('text/plain')</string>
189
+ </mimeTypes>
190
+ </net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityOutputPortDefinitionBean>
191
+ </outputs>
192
+ </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.0</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="">
193
+ <maxJobs>1</maxJobs>
194
+ </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.0</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.0</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.0</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="">
195
+ <backoffFactor>1.0</backoffFactor>
196
+ <initialDelay>1000</initialDelay>
197
+ <maxDelay>5000</maxDelay>
198
+ <maxRetries>0</maxRetries>
199
+ </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.0</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="regex" depth="0" /><port name="stringlist" depth="1" /></cross></strategy></iteration></iterationStrategyStack></processor><processor><name>comicURLRegex</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.0</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="">
200
+ <value>.*/comics/.*</value>
201
+ </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.0</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="">
202
+ <maxJobs>1</maxJobs>
203
+ </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.0</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.0</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.0</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="">
204
+ <backoffFactor>1.0</backoffFactor>
205
+ <initialDelay>1000</initialDelay>
206
+ <maxDelay>5000</maxDelay>
207
+ <maxRetries>0</maxRetries>
208
+ </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.0</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>getComicStrip</name><inputPorts><port><name>base</name><depth>0</depth></port><port><name>url</name><depth>0</depth></port></inputPorts><outputPorts><port><name>image</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.0</version></raven><class>net.sf.taverna.t2.activities.localworker.LocalworkerActivity</class><inputMap><map from="base" to="base" /><map from="url" to="url" /></inputMap><outputMap><map from="image" to="image" /></outputMap><configBean encoding="xstream"><net.sf.taverna.t2.activities.localworker.LocalworkerActivityConfigurationBean xmlns="">
209
+ <localworkerName>org.embl.ebi.escience.scuflworkers.java.WebImageFetcher</localworkerName>
210
+ <script>URL inputURL = null;
211
+ if (base != void) {
212
+ inputURL = new URL(new URL(base), url);
213
+ } else {
214
+ inputURL = new URL(url);
215
+ }
216
+
217
+ byte[] contents;
218
+ if (inputURL.openConnection().getContentLength() == -1) {
219
+ // Content size unknown, must read first...
220
+ byte[] buffer = new byte[1024];
221
+ int bytesRead = 0;
222
+ int totalBytesRead = 0;
223
+ InputStream is = inputURL.openStream();
224
+ while (bytesRead != -1) {
225
+ totalBytesRead += bytesRead;
226
+ bytesRead = is.read(buffer, 0, 1024);
227
+ }
228
+ contents = new byte[totalBytesRead];
229
+ } else {
230
+ contents = new byte[inputURL.openConnection().getContentLength()];
231
+ }
232
+ int bytesRead = 0;
233
+ int totalBytesRead = 0;
234
+ InputStream is = inputURL.openStream();
235
+ while (bytesRead != -1) {
236
+ bytesRead = is.read(contents, totalBytesRead, contents.length - totalBytesRead);
237
+ totalBytesRead += bytesRead;
238
+ if (contents.length==totalBytesRead) break;
239
+ }
240
+
241
+ image = contents;
242
+ </script>
243
+ <dependencies />
244
+ <classLoaderSharing>workflow</classLoaderSharing>
245
+ <localDependencies />
246
+ <artifactDependencies />
247
+ <inputs>
248
+ <net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityInputPortDefinitionBean>
249
+ <handledReferenceSchemes />
250
+ <translatedElementType>java.lang.String</translatedElementType>
251
+ <allowsLiteralValues>true</allowsLiteralValues>
252
+ <name>url</name>
253
+ <depth>0</depth>
254
+ <mimeTypes>
255
+ <string>'text/x-taverna-web-url'</string>
256
+ </mimeTypes>
257
+ </net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityInputPortDefinitionBean>
258
+ <net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityInputPortDefinitionBean>
259
+ <handledReferenceSchemes />
260
+ <translatedElementType>java.lang.String</translatedElementType>
261
+ <allowsLiteralValues>true</allowsLiteralValues>
262
+ <name>base</name>
263
+ <depth>0</depth>
264
+ <mimeTypes>
265
+ <string>'text/x-taverna-web-url'</string>
266
+ </mimeTypes>
267
+ </net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityInputPortDefinitionBean>
268
+ </inputs>
269
+ <outputs>
270
+ <net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityOutputPortDefinitionBean>
271
+ <granularDepth>0</granularDepth>
272
+ <name>image</name>
273
+ <depth>0</depth>
274
+ <mimeTypes>
275
+ <string>'image/*'</string>
276
+ </mimeTypes>
277
+ </net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityOutputPortDefinitionBean>
278
+ </outputs>
279
+ </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.0</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="">
280
+ <maxJobs>1</maxJobs>
281
+ </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.0</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.0</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.0</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="">
282
+ <backoffFactor>1.0</backoffFactor>
283
+ <initialDelay>1000</initialDelay>
284
+ <maxDelay>5000</maxDelay>
285
+ <maxRetries>0</maxRetries>
286
+ </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.0</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="base" depth="0" /><port name="url" depth="0" /></cross></strategy></iteration></iterationStrategyStack></processor></processors><conditions /><datalinks><datalink><sink type="processor"><processor>getPage</processor><port>url</port></sink><source type="processor"><processor>xkcdURL</processor><port>value</port></source></datalink><datalink><sink type="processor"><processor>getImageLinks</processor><port>document</port></sink><source type="processor"><processor>getPage</processor><port>contents</port></source></datalink><datalink><sink type="processor"><processor>findComicURL</processor><port>regex</port></sink><source type="processor"><processor>comicURLRegex</processor><port>value</port></source></datalink><datalink><sink type="processor"><processor>findComicURL</processor><port>stringlist</port></sink><source type="processor"><processor>getImageLinks</processor><port>imagelinks</port></source></datalink><datalink><sink type="processor"><processor>getComicStrip</processor><port>base</port></sink><source type="processor"><processor>xkcdURL</processor><port>value</port></source></datalink><datalink><sink type="processor"><processor>getComicStrip</processor><port>url</port></sink><source type="processor"><processor>findComicURL</processor><port>filteredlist</port></source></datalink><datalink><sink type="dataflow"><port>todaysXkcd</port></sink><source type="processor"><processor>getComicStrip</processor><port>image</port></source></datalink></datalinks><annotations><annotation_chain encoding="xstream"><net.sf.taverna.t2.annotation.AnnotationChainImpl xmlns="">
287
+ <annotationAssertions>
288
+ <net.sf.taverna.t2.annotation.AnnotationAssertionImpl>
289
+ <annotationBean class="net.sf.taverna.t2.annotation.annotationbeans.FreeTextDescription">
290
+ <text>Use the local java plugins and some filtering operations to fetch the comic strip image from http://xkcd.com/
291
+
292
+ Based on the FetchDailyDilbert workflow.</text>
293
+ </annotationBean>
294
+ <date>2009-12-15 20:39:17.683 GMT</date>
295
+ <creators />
296
+ <curationEventList />
297
+ </net.sf.taverna.t2.annotation.AnnotationAssertionImpl>
298
+ </annotationAssertions>
299
+ </net.sf.taverna.t2.annotation.AnnotationChainImpl></annotation_chain><annotation_chain encoding="xstream"><net.sf.taverna.t2.annotation.AnnotationChainImpl xmlns="">
300
+ <annotationAssertions>
301
+ <net.sf.taverna.t2.annotation.AnnotationAssertionImpl>
302
+ <annotationBean class="net.sf.taverna.t2.annotation.annotationbeans.Author">
303
+ <text>Tom Oinn, Stian Soiland-Reyes</text>
304
+ </annotationBean>
305
+ <date>2009-12-15 20:38:58.43 GMT</date>
306
+ <creators />
307
+ <curationEventList />
308
+ </net.sf.taverna.t2.annotation.AnnotationAssertionImpl>
309
+ </annotationAssertions>
310
+ </net.sf.taverna.t2.annotation.AnnotationChainImpl></annotation_chain><annotation_chain encoding="xstream"><net.sf.taverna.t2.annotation.AnnotationChainImpl xmlns="">
311
+ <annotationAssertions>
312
+ <net.sf.taverna.t2.annotation.AnnotationAssertionImpl>
313
+ <annotationBean class="net.sf.taverna.t2.annotation.annotationbeans.DescriptiveTitle">
314
+ <text>Fetch today's xkcd comic</text>
315
+ </annotationBean>
316
+ <date>2009-12-15 20:39:06.623 GMT</date>
317
+ <creators />
318
+ <curationEventList />
319
+ </net.sf.taverna.t2.annotation.AnnotationAssertionImpl>
320
+ </annotationAssertions>
321
+ </net.sf.taverna.t2.annotation.AnnotationChainImpl></annotation_chain></annotations></dataflow></workflow>