<activity xmlns="http://taverna.sf.net/2008/xml/t2flow"><class>org.apache.taverna.activities.localworker.LocalworkerActivity</class><inputMap /><outputMap><map from="outputText" to="outputText" /></outputMap><configBean encoding="xstream"><org.apache.taverna.activities.localworker.LocalworkerActivityConfigurationBean xmlns="">
  <script>if ((term == void) || (term == null) || term.equals("")) {
	throw new RunTimeException("port term must have a non-empty value");
}

URL url = new URL ("http://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi?db=pubmed" +
(field == void ? "" : ("&amp;field=" + field)) +
(retstart == void ? "" : ("&amp;retstart=" + retstart)) +
(retmax == void ? "" : ("&amp;retmax=" + retmax)) +
(mindate == void ? "" : ("&amp;mindate=" + mindate)) +
(maxdate == void ? "" : ("&amp;maxdate=" + maxdate)) +
"&amp;rettype=" + (rettype == void ? "full" : rettype) +
"&amp;retmode=" + (retmode == void ? "xml" : retmode) +
"&amp;tool=taverna" +
"&amp;term=" + term);

BufferedReader reader = new BufferedReader (new InputStreamReader(url.openStream()));
StringWriter writer = new StringWriter();

char[] buffer = new char[1024];
    while (true) {
        int r = reader.read(buffer);
        if (r &lt;= 0) {
            break;
        }
        writer.write(buffer, 0, r);
    }
reader.close();
outputText = writer.toString();
</script>
  <dependencies />
  <inputs>
    <org.apache.taverna.workflowmodel.processor.activity.config.ActivityInputPortDefinitionBean>
      <handledReferenceSchemes />
      <translatedElementType>java.lang.String</translatedElementType>
      <allowsLiteralValues>true</allowsLiteralValues>
      <name>term</name>
      <depth>0</depth>
      <mimeTypes>
        <string>'text/plain'</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>db</name>
      <depth>0</depth>
      <mimeTypes>
        <string>'text/plain'</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>field</name>
      <depth>0</depth>
      <mimeTypes>
        <string>'text/plain'</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>retstart</name>
      <depth>0</depth>
      <mimeTypes>
        <string>'text/plain'</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>retmax</name>
      <depth>0</depth>
      <mimeTypes>
        <string>'text/plain'</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>mindate</name>
      <depth>0</depth>
      <mimeTypes>
        <string>'text/plain'</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>maxdate</name>
      <depth>0</depth>
      <mimeTypes>
        <string>'text/plain'</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>rettype</name>
      <depth>0</depth>
      <mimeTypes>
        <string>'text/plain'</string>
      </mimeTypes>
    </org.apache.taverna.workflowmodel.processor.activity.config.ActivityInputPortDefinitionBean>
  </inputs>
  <outputs>
    <org.apache.taverna.workflowmodel.processor.activity.config.ActivityOutputPortDefinitionBean>
      <granularDepth>0</granularDepth>
      <name>outputText</name>
      <depth>0</depth>
      <mimeTypes>
        <string>'text/plain'</string>
      </mimeTypes>
    </org.apache.taverna.workflowmodel.processor.activity.config.ActivityOutputPortDefinitionBean>
  </outputs>
</org.apache.taverna.activities.localworker.LocalworkerActivityConfigurationBean></configBean></activity>