<activity xmlns="http://taverna.sf.net/2008/xml/t2flow"><class>org.apache.taverna.activities.localworker.LocalworkerActivity</class><inputMap /><outputMap /><configBean encoding="xstream"><org.apache.taverna.activities.localworker.LocalworkerActivityConfigurationBean xmlns="">
  <script>if ((url == void) || (url == null)) {
	throw new RuntimeException("The url must be specified");
}

URL inputURL = null;
if (base != void) {
	inputURL = new URL(new URL(base), url);
} else {
	inputURL = new URL(url);
}

int bytesRead = 0;
int totalBytesRead = 0;
InputStream is = inputURL.openStream();
ByteArrayOutputStream os = new ByteArrayOutputStream();
byte[] buffer = new byte[2048];
while (true) {
	bytesRead = is.read(buffer);
	if (bytesRead == -1) {
		break;	
	}

	os.write(buffer, 0, bytesRead);
}

image = os.toByteArray();
is.close();
os.close();
</script>
  <dependencies />
  <inputs>
    <org.apache.taverna.workflowmodel.processor.activity.config.ActivityInputPortDefinitionBean>
      <handledReferenceSchemes />
      <translatedElementType>java.lang.String</translatedElementType>
      <allowsLiteralValues>true</allowsLiteralValues>
      <name>url</name>
      <depth>0</depth>
      <mimeTypes>
        <string>'text/x-taverna-web-url'</string>
      </mimeTypes>
    </org.apache.taverna.workflowmodel.processor.activity.config.ActivityInputPortDefinitionBean>
    <org.apache.taverna.workflowmodel.processor.activity.config.ActivityInputPortDefinitionBean>
      <handledReferenceSchemes />
      <translatedElementType>java.lang.String</translatedElementType>
      <allowsLiteralValues>true</allowsLiteralValues>
      <name>base</name>
      <depth>0</depth>
      <mimeTypes>
        <string>'text/x-taverna-web-url'</string>
      </mimeTypes>
    </org.apache.taverna.workflowmodel.processor.activity.config.ActivityInputPortDefinitionBean>
  </inputs>
  <outputs>
    <org.apache.taverna.workflowmodel.processor.activity.config.ActivityOutputPortDefinitionBean>
      <granularDepth>0</granularDepth>
      <name>image</name>
      <depth>0</depth>
      <mimeTypes>
        <string>'image/*'</string>
      </mimeTypes>
    </org.apache.taverna.workflowmodel.processor.activity.config.ActivityOutputPortDefinitionBean>
  </outputs>
</org.apache.taverna.activities.localworker.LocalworkerActivityConfigurationBean></configBean></activity>