<activity xmlns="http://taverna.sf.net/2008/xml/t2flow"><class>net.sf.taverna.t2.activities.localworker.LocalworkerActivity</class><inputMap /><outputMap /><configBean encoding="xstream"><net.sf.taverna.t2.activities.localworker.LocalworkerActivityConfigurationBean xmlns="">
  <script>import org.biojava.bio.seq.Sequence;
import org.biojava.bio.seq.SequenceIterator;
import org.biojava.bio.seq.io.SeqIOTools;
import org.biojava.bio.seq.io.agave.AgaveWriter;

BufferedReader getReader (String fileUrl) throws IOException {
		InputStreamReader reader;
		try {
			reader = new FileReader(fileUrl);
		}
		catch (FileNotFoundException e) {
			// try a real URL instead
			URL url = new URL(fileUrl);
			reader = new InputStreamReader (url.openStream());
		}
		return new BufferedReader(reader);
	}
	
if ((fileUrl == void) || (fileUrl == null)) {
    throw new RuntimeException("The fileUrl must be specified");
}
	
BufferedReader br = getReader(fileUrl);

// read the EMBL File
SequenceIterator sequences = SeqIOTools.readSwissprot(br);

// Prepare the writer
AgaveWriter writer = new AgaveWriter();
ByteArrayOutputStream os = new ByteArrayOutputStream();
StringBuffer sb = new StringBuffer();
PrintStream ps = new PrintStream(os);

// iterate through the sequences
while (sequences.hasNext()) {
	Sequence seq = sequences.nextSequence();
	writer.writeSequence(seq, ps);
	sb.append(os.toString());
}
results = sb.toString();

br.close();
ps.close();
  
</script>
  <dependencies class="java.util.Collections$SingletonList">
    <element class="string">uk.org.mygrid.resources:biojava:1.4pre1</element>
  </dependencies>
  <inputs>
    <net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityInputPortDefinitionBean>
      <handledReferenceSchemes />
      <translatedElementType>java.lang.String</translatedElementType>
      <allowsLiteralValues>true</allowsLiteralValues>
      <name>fileUrl</name>
      <depth>0</depth>
      <mimeTypes>
        <string>'text/plain</string>
      </mimeTypes>
    </net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityInputPortDefinitionBean>
  </inputs>
  <outputs>
    <net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityOutputPortDefinitionBean>
      <granularDepth>0</granularDepth>
      <name>results</name>
      <depth>0</depth>
      <mimeTypes>
        <string>'text/plain'</string>
      </mimeTypes>
    </net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityOutputPortDefinitionBean>
  </outputs>
</net.sf.taverna.t2.activities.localworker.LocalworkerActivityConfigurationBean></configBean></activity>