<?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:5EX3LTS9IE3" author="Jun Zhao" title="A wbsa workflow using wu blast service.">This is revised from the old wbsa workflow.</s:workflowdescription>
  <s:processor name="filter_old" boring="true">
    <s:beanshell>
      <s:scriptvalue>String[] split = old_report.split("\n");
Vector nonEmpty = new Vector();
for (int i = 0; i &lt; split.length; i++) {
			
	String trimmed = split[i].trim();
	String[] trimmedSplit = trimmed.split("\t");
	//System.out.println(trimmedSplit[1].trim().split("\.").length);
	//System.out.println(trimmedSplit[1].trim().split("\.")[0].trim());		
	nonEmpty.add(trimmedSplit[1].trim());
}

String old_gi_list = "";

for (int i = 0; i &lt; nonEmpty.size(); i++){
	old_gi_list = old_gi_list + (String) (nonEmpty.elementAt(i) + "\n");
}</s:scriptvalue>
      <s:beanshellinputlist>
        <s:beanshellinput s:syntactictype="'text/plain'">old_report</s:beanshellinput>
      </s:beanshellinputlist>
      <s:beanshelloutputlist>
        <s:beanshelloutput s:syntactictype="'text/plain'">old_gi_list</s:beanshelloutput>
      </s:beanshelloutputlist>
    </s:beanshell>
  </s:processor>
  <s:processor name="filterEmbl" boring="true">
    <s:beanshell>
      <s:scriptvalue>String [] split = embl_list.split("(accession)");
       Vector nonEmpty = new Vector();
       for(int i = 0 ; i &lt; split.length ; i++){
         String trimmed = split[i].trim();
	 if(trimmed.length() &gt; 0){
	   nonEmpty.add(trimmed);
	 }
       }

       embl = new String [nonEmpty.size()];
//String gi = "";
       for(int i = 0 ;i &lt;  nonEmpty.size() ; i++){
          embl[i] = (String)(nonEmpty.elementAt(i));
       }</s:scriptvalue>
      <s:beanshellinputlist>
        <s:beanshellinput s:syntactictype="'text/plain'">embl_list</s:beanshellinput>
      </s:beanshellinputlist>
      <s:beanshelloutputlist>
        <s:beanshelloutput s:syntactictype="'text/plain'">embl</s:beanshelloutput>
      </s:beanshelloutputlist>
    </s:beanshell>
  </s:processor>
  <s:processor name="xslt2" boring="true">
    <s:stringconstant>http://www.cs.man.ac.uk/~zhaoj/data/xsl/wrdfblast.xsl</s:stringconstant>
  </s:processor>
  <s:processor name="database" boring="true">
    <s:stringconstant>emnew</s:stringconstant>
  </s:processor>
  <s:processor name="NCBIRDFProcessor">
    <s:local>uk.ac.man.cs.img.metadata.taverna.processor.NCBIRDFProcessor</s:local>
  </s:processor>
  <s:processor name="ReadRDFBlastReport">
    <s:local>uk.ac.man.cs.img.metadata.taverna.processor.ReadRDFBlastReport</s:local>
    <s:template>
      <s:templateLiteral>&lt;rdf:Description xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" rdf:about="</s:templateLiteral>
      <s:templatePortReference name="RDFBLASTreport" />
      <s:templateLiteral>"&gt;&lt;contains rdf:resource="</s:templateLiteral>
      <s:templatePortReference name="gi_list" />
      <s:templateLiteral>"/&gt;&lt;/rdf:Description&gt;</s:templateLiteral>
    </s:template>
    <s:template>
      <s:templateLiteral>&lt;rdf:Description xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" rdf:about="</s:templateLiteral>
      <s:templatePortReference name="RDFBLASTreport" />
      <s:templateLiteral>"&gt;&lt;contains rdf:resource="</s:templateLiteral>
      <s:templatePortReference name="gi_list" />
      <s:templateLiteral>"/&gt;&lt;/rdf:Description&gt;</s:templateLiteral>
    </s:template>
  </s:processor>
  <s:processor name="compare">
    <s:beanshell>
      <s:scriptvalue>String[] split = old_gi_list.split("(\n)");
//String[] splitNew = gi_list.split("(\n)");
boolean notHasIt = true;
Vector nonEmpty = new Vector();
//for (int i = 0; i &lt; splitNew.length; i++){
    //notHasIt = true;
    for (int j = 0; j &lt; split.length; j ++){
        if (gi.equals(split[j])){
             notHasIt = false;
        //    break;
	}
     }
     if (notHasIt){
	nonEmpty.add(gi);
     }

if (nonEmpty.size()&gt;0){
    new_gi = (String) ("urn:lsid:ncbi.nlm.nih.gov.lsid.biopathways.org:genbank_gb:"+nonEmpty.elementAt(0));
}
//}
//String[] new_gi = new String[nonEmpty.size()];
//for (int i = 0; i &lt; nonEmpty.size(); i ++){
//    new_gi[i] = (String) ("urn:lsid:ncbi.nlm.nih.gov.lsid.biopathways.org:genbank_gb:"+nonEmpty.elementAt(i));
//}</s:scriptvalue>
      <s:beanshellinputlist>
        <s:beanshellinput s:syntactictype="'text/plain'">old_gi_list</s:beanshellinput>
        <s:beanshellinput s:syntactictype="'text/plain'">gi</s:beanshellinput>
      </s:beanshellinputlist>
      <s:beanshelloutputlist>
        <s:beanshelloutput s:syntactictype="'text/plain'">new_gi</s:beanshelloutput>
      </s:beanshelloutputlist>
    </s:beanshell>
  </s:processor>
  <s:processor name="xslt" boring="true">
    <s:stringconstant>http://www.cs.man.ac.uk/~zhaoj/data/xsl/wublast.xsl</s:stringconstant>
  </s:processor>
  <s:processor name="WUBLASTRDFProcessor">
    <s:local>uk.ac.man.cs.img.metadata.taverna.processor.WUBLASTRDFProcessor</s:local>
    <s:template>
      <s:templateLiteral>&lt;rdf:Description xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" rdf:about="</s:templateLiteral>
      <s:templatePortReference name="BLASTreport" />
      <s:templateLiteral>"&gt;&lt;sameAs rdf:resource="</s:templateLiteral>
      <s:templatePortReference name="BLASTRDF" />
      <s:templateLiteral>"/&gt;&lt;/rdf:Description&gt;</s:templateLiteral>
    </s:template>
  </s:processor>
  <s:processor name="wu_blastn_xml">
    <s:description>WU-BLAST with output in XML format, for DNA/RNA</s:description>
    <s:soaplabwsdl critical="true">http://www.ebi.ac.uk/soaplab/services/alignment.wu_blastn_xml</s:soaplabwsdl>
  </s:processor>
  <s:link source="ReadRDFBlastReport:gi_list" sink="filterEmbl:embl_list" />
  <s:link source="WUBLASTRDFProcessor:BLASTRDF" sink="ReadRDFBlastReport:RDFBLASTreport" />
  <s:link source="old" sink="filter_old:old_report" />
  <s:link source="compare:new_gi" sink="NCBIRDFProcessor:SequenceIDs" />
  <s:link source="filterEmbl:embl" sink="compare:gi" />
  <s:link source="NCBIRDFProcessor:NCBIRDF" sink="genbank" />
  <s:link source="WUBLASTRDFProcessor:BLASTRDF" sink="RDFBlast" />
  <s:link source="WUBLASTRDFProcessor:database" sink="database" />
  <s:link source="WUBLASTRDFProcessor:program" sink="program" />
  <s:link source="WUBLASTRDFProcessor:version" sink="version" />
  <s:link source="compare:new_gi" sink="new_gi" />
  <s:link source="filter_old:old_gi_list" sink="compare:old_gi_list" />
  <s:link source="maskedSeq" sink="wu_blastn_xml:sequence" />
  <s:link source="database:value" sink="wu_blastn_xml:database" />
  <s:link source="wu_blastn_xml:result" sink="WUBLASTRDFProcessor:BLASTreport" />
  <s:link source="xslt2:value" sink="ReadRDFBlastReport:XSLURI" />
  <s:link source="xslt:value" sink="WUBLASTRDFProcessor:XSLURI" />
  <s:source name="maskedSeq" />
  <s:source name="old" />
  <s:sink name="RDFBlast" />
  <s:sink name="database" />
  <s:sink name="program" />
  <s:sink name="version" />
  <s:sink name="new_gi" />
  <s:sink name="genbank" />
</s:scufl>


