<?xml version="1.0" encoding="UTF-8"?>
<s:scufl xmlns:s="http://org.embl.ebi.escience/xscufl/0.1alpha" version="0.2" log="0">
  <s:workflowdescription lsid="urn:lsid:www.mygrid.org.uk:operation:P81DV9PQW02" author="Paul Fisher" title="Phenotype to pubmed">This workflow takes in a phenotype search term, and searches for abstracts in the PubMed database. These are passed to the eSearch function and searched for in PubMed. Those abstracts found are returned to the user</s:workflowdescription>
  <s:processor name="min_date" boring="true">
    <s:stringconstant>2005</s:stringconstant>
  </s:processor>
  <s:processor name="max_return" boring="true">
    <s:stringconstant>500</s:stringconstant>
  </s:processor>
  <s:processor name="xpath" boring="true">
    <s:stringconstant>/*[local-name(.)='eSearchResult']/*[local-name(.)='IdList']/*[local-name(.)='Id']</s:stringconstant>
  </s:processor>
  <s:processor name="pubmed_database" boring="true">
    <s:stringconstant>pubmed</s:stringconstant>
  </s:processor>
  <s:processor name="max_date" boring="true">
    <s:stringconstant>2008</s:stringconstant>
  </s:processor>
  <s:processor name="merge_phenotype_abstracts">
    <s:beanshell>
      <s:scriptvalue>String[] split = abstracts.split("\n");
String phenotype_term = phenotype.trim();

Vector nonEmpty = new Vector();

for (int i = 0; i &lt; split.length; i++) 
{		
	String trimmed = split[i].trim();
//	String mytext = split[i].substring(split[i].indexOf(0), split[i].indexOf(" AND "));
	nonEmpty.add(trimmed);	
}

String output = "&gt;&gt; " + phenotype_term + "\n";

for (int i = 0; i &lt; nonEmpty.size(); i++)
{
	output = output + (String) (nonEmpty.elementAt(i) + "\n");
}</s:scriptvalue>
      <s:beanshellinputlist>
        <s:beanshellinput s:syntactictype="'text/plain'">phenotype</s:beanshellinput>
        <s:beanshellinput s:syntactictype="'text/plain'">abstracts</s:beanshellinput>
      </s:beanshellinputlist>
      <s:beanshelloutputlist>
        <s:beanshelloutput s:syntactictype="'text/plain'">output</s:beanshelloutput>
      </s:beanshelloutputlist>
      <s:dependencies s:classloader="iteration" />
    </s:beanshell>
  </s:processor>
  <s:processor name="remove_Nulls">
    <s:beanshell>
      <s:scriptvalue>String[] split = input.split("\n");
Vector nonEmpty = new Vector();

for (int i = 0; i &lt; split.length; i++){
   if (!(split[i].equals("")))
   {
       nonEmpty.add(split[i].trim());
   }
}

String[] non_empty = new String[nonEmpty.size()];

for (int i = 0; i &lt; non_empty.length; i ++)
{
   non_empty[i] = nonEmpty.elementAt(i);
}

String output = "";

for (int i = 0; i &lt; non_empty.length; i++)
{
	output = output + (String) (non_empty[i] + "\n");
}</s:scriptvalue>
      <s:beanshellinputlist>
        <s:beanshellinput s:syntactictype="'text/plain'">input</s:beanshellinput>
      </s:beanshellinputlist>
      <s:beanshelloutputlist>
        <s:beanshelloutput s:syntactictype="'text/plain'">output</s:beanshelloutput>
      </s:beanshelloutputlist>
      <s:dependencies s:classloader="iteration" />
    </s:beanshell>
  </s:processor>
  <s:processor name="parametersXML_eSearch">
    <s:local>
      org.embl.ebi.escience.scuflworkers.java.XMLInputSplitter
      <s:extensions>
        <s:complextype optional="false" unbounded="false" typename="eSearchRequest" name="parameters" qname="{http://www.ncbi.nlm.nih.gov/soap/eutils/esearch}eSearchRequest">
          <s:elements>
            <s:basetype optional="true" unbounded="false" typename="string" name="db" qname="{http://www.w3.org/2001/XMLSchema}string" />
            <s:basetype optional="true" unbounded="false" typename="string" name="term" qname="{http://www.w3.org/2001/XMLSchema}string" />
            <s:basetype optional="true" unbounded="false" typename="string" name="WebEnv" qname="{http://www.w3.org/2001/XMLSchema}string" />
            <s:basetype optional="true" unbounded="false" typename="string" name="QueryKey" qname="{http://www.w3.org/2001/XMLSchema}string" />
            <s:basetype optional="true" unbounded="false" typename="string" name="usehistory" qname="{http://www.w3.org/2001/XMLSchema}string" />
            <s:basetype optional="true" unbounded="false" typename="string" name="tool" qname="{http://www.w3.org/2001/XMLSchema}string" />
            <s:basetype optional="true" unbounded="false" typename="string" name="email" qname="{http://www.w3.org/2001/XMLSchema}string" />
            <s:basetype optional="true" unbounded="false" typename="string" name="field" qname="{http://www.w3.org/2001/XMLSchema}string" />
            <s:basetype optional="true" unbounded="false" typename="string" name="reldate" qname="{http://www.w3.org/2001/XMLSchema}string" />
            <s:basetype optional="true" unbounded="false" typename="string" name="mindate" qname="{http://www.w3.org/2001/XMLSchema}string" />
            <s:basetype optional="true" unbounded="false" typename="string" name="maxdate" qname="{http://www.w3.org/2001/XMLSchema}string" />
            <s:basetype optional="true" unbounded="false" typename="string" name="datetype" qname="{http://www.w3.org/2001/XMLSchema}string" />
            <s:basetype optional="true" unbounded="false" typename="string" name="RetStart" qname="{http://www.w3.org/2001/XMLSchema}string" />
            <s:basetype optional="true" unbounded="false" typename="string" name="RetMax" qname="{http://www.w3.org/2001/XMLSchema}string" />
            <s:basetype optional="true" unbounded="false" typename="string" name="rettype" qname="{http://www.w3.org/2001/XMLSchema}string" />
            <s:basetype optional="true" unbounded="false" typename="string" name="sort" qname="{http://www.w3.org/2001/XMLSchema}string" />
          </s:elements>
        </s:complextype>
      </s:extensions>
    </s:local>
  </s:processor>
  <s:processor name="merge_abstract_ids">
    <s:local>org.embl.ebi.escience.scuflworkers.java.StringListMerge</s:local>
  </s:processor>
  <s:processor name="extractPMID">
    <s:local>net.sourceforge.taverna.scuflworkers.xml.XPathTextWorker</s:local>
  </s:processor>
  <s:processor name="merge_dates">
    <s:local>org.embl.ebi.escience.scuflworkers.java.StringListMerge</s:local>
  </s:processor>
  <s:processor name="merge_abstracts">
    <s:local>org.embl.ebi.escience.scuflworkers.java.StringListMerge</s:local>
  </s:processor>
  <s:processor name="merge_abstracts_2">
    <s:local>org.embl.ebi.escience.scuflworkers.java.StringListMerge</s:local>
  </s:processor>
  <s:processor name="concat_abstract_ids">
    <s:beanshell>
      <s:scriptvalue>String id = id.trim();
String abstract_text = abstract_text.trim();
String dates_text = dates.trim();

String output = "";

output = id + "\t" + dates_text + "\t" + abstract_text;</s:scriptvalue>
      <s:beanshellinputlist>
        <s:beanshellinput s:syntactictype="'text/plain'">id</s:beanshellinput>
        <s:beanshellinput s:syntactictype="'text/plain'">abstract_text</s:beanshellinput>
        <s:beanshellinput s:syntactictype="'text/plain'">dates</s:beanshellinput>
      </s:beanshellinputlist>
      <s:beanshelloutputlist>
        <s:beanshelloutput s:syntactictype="'text/plain'">output</s:beanshelloutput>
      </s:beanshelloutputlist>
      <s:dependencies s:classloader="iteration" />
    </s:beanshell>
    <s:iterationstrategy>
      <i:dot xmlns:i="http://org.embl.ebi.escience/xscufliteration/0.1beta10">
        <i:iterator name="dates" />
        <i:iterator name="abstract_text" />
        <i:iterator name="id" />
      </i:dot>
    </s:iterationstrategy>
  </s:processor>
  <s:processor name="Nested_Workflow">
    <s:workflow>
      <s:xscufllocation>file:/Users/sowen/tmp/pauls_workflow-inner.xml</s:xscufllocation>
    </s:workflow>
  </s:processor>
  <s:processor name="run_eSearch">
    <s:arbitrarywsdl>
      <s:wsdl>http://eutils.ncbi.nlm.nih.gov/entrez/eutils/soap/eutils.wsdl</s:wsdl>
      <s:operation>run_eSearch</s:operation>
    </s:arbitrarywsdl>
  </s:processor>
  <s:link source="Phenotype_search_term" sink="merge_phenotype_abstracts:phenotype" />
  <s:link source="Phenotype_search_term" sink="parametersXML_eSearch:term" />
  <s:link source="Nested_Workflow:node_list" sink="merge_abstracts:stringlist" />
  <s:link source="Nested_Workflow:pubmed_dates" sink="merge_dates:stringlist" />
  <s:link source="concat_abstract_ids:output" sink="merge_abstract_ids:stringlist" />
  <s:link source="extractPMID:nodelist" sink="Nested_Workflow:pubmed_ids" />
  <s:link source="extractPMID:nodelist" sink="concat_abstract_ids:id" />
  <s:link source="max_date:value" sink="parametersXML_eSearch:maxdate" />
  <s:link source="max_return:value" sink="parametersXML_eSearch:RetMax" />
  <s:link source="merge_abstracts:concatenated" sink="concat_abstract_ids:abstract_text" />
  <s:link source="merge_abstracts:concatenated" sink="merge_abstracts_2:stringlist" />
  <s:link source="merge_abstracts_2:concatenated" sink="merge_phenotype_abstracts:abstracts" />
  <s:link source="merge_dates:concatenated" sink="concat_abstract_ids:dates" />
  <s:link source="merge_phenotype_abstracts:output" sink="remove_Nulls:input" />
  <s:link source="min_date:value" sink="parametersXML_eSearch:mindate" />
  <s:link source="parametersXML_eSearch:output" sink="run_eSearch:parameters" />
  <s:link source="pubmed_database:value" sink="parametersXML_eSearch:db" />
  <s:link source="run_eSearch:parameters" sink="extractPMID:xml-text" />
  <s:link source="xpath:value" sink="extractPMID:xpath" />
  <s:link source="merge_abstract_ids:concatenated" sink="abstracts_ids_year" />
  <s:link source="remove_Nulls:output" sink="phenotype_abstracts" />
  <s:source name="Phenotype_search_term" />
  <s:sink name="abstracts_ids_year" />
  <s:sink name="phenotype_abstracts" />
</s:scufl>


