Webservice works! but only supports some parameters. Replacing RNAstuct
authorDaniel Barton <daluke.barton@gmail.com>
Thu, 8 Aug 2013 09:34:34 +0000 (10:34 +0100)
committerDaniel Barton <daluke.barton@gmail.com>
Thu, 8 Aug 2013 09:34:34 +0000 (10:34 +0100)
with String.

38 files changed:
conf/settings/RNAalifoldParameters.xml
runner/compbio/runner/structure/RNAalifold.java
testsrc/compbio/ws/client/TestRNAalifoldWS.java [new file with mode: 0644]
webservices/compbio/data/msa/FoldWS.java [new file with mode: 0644]
webservices/compbio/data/msa/jaxws/CancelJob.java
webservices/compbio/data/msa/jaxws/CancelJobResponse.java
webservices/compbio/data/msa/jaxws/CustomFold.java [new file with mode: 0644]
webservices/compbio/data/msa/jaxws/CustomFoldResponse.java [new file with mode: 0644]
webservices/compbio/data/msa/jaxws/Fold.java [new file with mode: 0644]
webservices/compbio/data/msa/jaxws/FoldResponse.java [new file with mode: 0644]
webservices/compbio/data/msa/jaxws/GetJobStatus.java
webservices/compbio/data/msa/jaxws/GetJobStatusResponse.java
webservices/compbio/data/msa/jaxws/GetLimit.java
webservices/compbio/data/msa/jaxws/GetLimitResponse.java
webservices/compbio/data/msa/jaxws/GetLimits.java
webservices/compbio/data/msa/jaxws/GetLimitsResponse.java
webservices/compbio/data/msa/jaxws/GetPresets.java
webservices/compbio/data/msa/jaxws/GetPresetsResponse.java
webservices/compbio/data/msa/jaxws/GetResultResponse.java
webservices/compbio/data/msa/jaxws/GetRunnerOptions.java
webservices/compbio/data/msa/jaxws/GetRunnerOptionsResponse.java
webservices/compbio/data/msa/jaxws/JobSubmissionExceptionBean.java
webservices/compbio/data/msa/jaxws/LimitExceededExceptionBean.java
webservices/compbio/data/msa/jaxws/PresetFold.java [new file with mode: 0644]
webservices/compbio/data/msa/jaxws/PresetFoldResponse.java [new file with mode: 0644]
webservices/compbio/data/msa/jaxws/PullExecStatistics.java
webservices/compbio/data/msa/jaxws/PullExecStatisticsResponse.java
webservices/compbio/data/msa/jaxws/ResultNotAvailableExceptionBean.java
webservices/compbio/data/msa/jaxws/UnsupportedRuntimeExceptionBean.java
webservices/compbio/data/msa/jaxws/WrongParameterExceptionBean.java
webservices/compbio/data/structure/FoldWS.java [deleted file]
webservices/compbio/ws/client/Jws2Client.java
webservices/compbio/ws/client/Services.java
webservices/compbio/ws/client/ServicesUtil.java
webservices/compbio/ws/server/RNAalifoldWS.java
webservices/compbio/ws/server/WSUtil.java
webservices/compbio/ws/server/resource/RNAalifoldWS.wsdl [new file with mode: 0644]
webservices/compbio/ws/server/resource/RNAalifoldWS_schema1.xsd [new file with mode: 0644]

index b0e8df0..2561ec4 100644 (file)
        </parameters>
 <!--  ?Will Jabaws recognize that arguments for the following params must
 be of the form -s INT and &dash-stochBT=INT -->
-       <parameters isRequired='false'>
-               <name>Stochastic Backtrack</name>
-               <description>Compute a number of random structures</description>
-               <optionNames>-s</optionNames>
+<!--   <parameters isRequired='false'> -->
+<!--           <name>Stochastic Backtrack</name> -->
+<!--           <description>Compute a number of random structures</description> -->
+<!--           <optionNames>-s</optionNames> -->
                <!-- Having multiple optionNames requires a default value but
                        in a parameter defaultValue refers to the argument -->
 <!--           <optionNames>-stochBT</optionNames> -->
-               <defaultValue>5</defaultValue>  <!-- arbitrary -->
-               <validValue>
-                       <type>Int</type>
-               </validValue>
-       </parameters>
+<!--           <defaultValue>5</defaultValue>  arbitrary -->
+<!--           <validValue> -->
+<!--                   <type>Int</type> -->
+<!--           </validValue> -->
+<!--   </parameters> -->
        <parameters isRequired='false'>
                <name>stochBT_en</name>
                <description>Print Backtrack structures</description>
@@ -209,13 +209,14 @@ be of the form -s INT and &dash-stochBT=INT -->
                        <type>String</type>
                </validValue>
        </parameters>
-       <parameters isRequired='false'>
-               <name>betaScale</name>
-               <description>Set scaling of Boltzmann factors</description>
-               <optionNames>--betaScale</optionNames>
-               <defaultValue>1.0</defaultValue>
-               <validValue>
-                       <type>Double</type>
-               </validValue>
-       </parameters>
+       <!--  Is dependant on -p (partfunc) -->
+<!--   <parameters isRequired='false'> -->
+<!--           <name>betaScale</name> -->
+<!--           <description>Set scaling of Boltzmann factors</description> -->
+<!--           <optionNames>-betaScale</optionNames> -->
+<!--           <defaultValue>1.0</defaultValue> -->
+<!--           <validValue> -->
+<!--                   <type>Double</type> -->
+<!--           </validValue> -->
+<!--   </parameters> -->
 </runnerConfig>
\ No newline at end of file
index acb4a9e..3871ea9 100644 (file)
@@ -31,17 +31,22 @@ public class RNAalifold extends SkeletalExecutable<RNAalifold>
        
        private static Logger log = Logger.getLogger(RNAalifold.class);
 
+       // May not be necessary as defult is "<space>" but still dont know
+       // How to deal with different key value separators for different params
+       public static final String KEY_VALUE_SEPARATOR = " ";
+       
+       public RNAalifold() {
+               super(KEY_VALUE_SEPARATOR);
+       }
        
        @Override
        public RNAalifold setOutput(String outFile) {
-               log.info("Set ouput file: " + outFile.toString());
                super.setOutput(outFile);
                return this;
        }
        
        @Override
        public RNAalifold setInput(String inFile) {
-               log.info("Set input file: " + inFile.toString());
                cbuilder.setLast(inFile);
                super.setInput(inFile);
                return this;
@@ -72,12 +77,11 @@ public class RNAalifold extends SkeletalExecutable<RNAalifold>
        }
 
 
-       // OLD :- the new methods for reading are found in 
+       // the new currently used methods for reading are found in 
        // - compbio.data.sequence.SequenceUtil and 
        // - compbio.runner.Util
        
        // Simple and generic methods for reading a whole file
-       // Should surfice until a more detailed datamodel and parser are developed
 //     private static String readRNAStruct(String workDirectory,
 //                     String structFile) throws IOException, FileNotFoundException {
 //             assert !compbio.util.Util.isEmpty(workDirectory);
diff --git a/testsrc/compbio/ws/client/TestRNAalifoldWS.java b/testsrc/compbio/ws/client/TestRNAalifoldWS.java
new file mode 100644 (file)
index 0000000..2d392f7
--- /dev/null
@@ -0,0 +1,100 @@
+package compbio.ws.client;
+
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertNotNull;
+import static org.testng.Assert.fail;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.net.ConnectException;
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.xml.ws.WebServiceException;
+
+import org.testng.annotations.BeforeTest;
+import org.testng.annotations.Test;
+
+import compbio.data.msa.JABAService;
+import compbio.data.msa.SequenceAnnotation;
+import compbio.data.sequence.Alignment;
+import compbio.data.structure.FoldWS;
+import compbio.data.sequence.RNAstruct;
+import compbio.data.sequence.ClustalAlignmentUtil;
+import compbio.data.sequence.ConservationMethod;
+import compbio.data.sequence.FastaSequence;
+import compbio.data.sequence.ScoreManager;
+import compbio.data.sequence.SequenceUtil;
+import compbio.data.sequence.UnknownFileFormatException;
+import compbio.metadata.AllTestSuit;
+import compbio.metadata.JobSubmissionException;
+import compbio.metadata.LimitExceededException;
+import compbio.metadata.Option;
+import compbio.metadata.PresetManager;
+import compbio.metadata.ResultNotAvailableException;
+import compbio.metadata.RunnerConfig;
+import compbio.metadata.UnsupportedRuntimeException;
+import compbio.metadata.WrongParameterException;
+
+import compbio.runner.conservation.AACon;
+import compbio.util.SysPrefs;
+import compbio.ws.server.RNAalifoldWS;
+
+public class TestRNAalifoldWS {
+       
+       FoldWS<RNAalifoldWS> foldws;
+       
+//     @BeforeTest(groups = {AllTestSuit.test_group_webservices})
+//     void initConnection() {
+//             
+//             try {
+//                     JABAService client = Jws2Client.connect(
+//                                     "http://localhost:8080/jabaws", Services.RNAalifoldWS);
+//                     foldws = (FoldWS<RNAalifoldWS>) client;
+//             } catch (ConnectException e) {
+//                     e.printStackTrace();
+//                     fail(e.getMessage());
+//             } catch (WebServiceException e) {
+//                     e.printStackTrace();
+//                     fail(e.getMessage());
+//             }
+//     }
+
+       
+       @Test(groups = {AllTestSuit.test_group_webservices})
+       public void testFold() throws FileNotFoundException, IOException,
+                       UnknownFileFormatException {
+               
+               String CURRENT_DIRECTORY = SysPrefs.getCurrentDirectory()
+                               + File.separator;
+               
+               Alignment aln = ClustalAlignmentUtil.readClustalFile(new FileInputStream(
+                               CURRENT_DIRECTORY + "testsrc" + File.separator + "testdata"
+                                       + File.separator + "unfolded_RF00031.aln"));
+               
+               try {
+                       String jobId = foldws.fold(aln);
+                       System.out.println("J: " + jobId);
+                       RNAstruct result = foldws.getResult(jobId);
+                       assertNotNull(result);
+                       
+               } catch (UnsupportedRuntimeException e) {
+                       e.printStackTrace();
+                       fail(e.getMessage());
+               } catch (LimitExceededException e) {
+                       e.printStackTrace();
+                       fail(e.getMessage());
+               } catch (JobSubmissionException e) {
+                       e.printStackTrace();
+                       fail(e.getMessage());
+               } catch (ResultNotAvailableException e) {
+                       e.printStackTrace();
+                       fail(e.getMessage());
+               } 
+       }
+}
+       
+
+
diff --git a/webservices/compbio/data/msa/FoldWS.java b/webservices/compbio/data/msa/FoldWS.java
new file mode 100644 (file)
index 0000000..9f0d4d8
--- /dev/null
@@ -0,0 +1,59 @@
+package compbio.data.msa;
+
+import java.security.InvalidParameterException;
+import java.util.List;
+
+import javax.jws.WebMethod;
+import javax.jws.WebParam;
+import javax.jws.WebService;
+import javax.naming.ldap.UnsolicitedNotificationEvent;
+
+import compbio.data.sequence.Alignment;
+import compbio.data.sequence.RNAstruct;
+import compbio.metadata.JobSubmissionException;
+import compbio.metadata.LimitExceededException;
+import compbio.metadata.Option;
+import compbio.metadata.Preset;
+import compbio.metadata.ResultNotAvailableException;
+import compbio.metadata.UnsupportedRuntimeException;
+import compbio.metadata.WrongParameterException;
+
+/*
+ * Interface for tools that results RNA secondary structure information
+ * 
+ * Still Unsure whether It would be better to use just the aligned fastaList
+ * or the Alignment object 
+ */
+
+// effect of a different targetNamespace?
+@WebService(targetNamespace = "http://msa.data.compbio/01/01/2010/")
+public interface FoldWS<T> 
+               extends 
+                       JABAService,
+                       JManagement,
+                       Metadata<T> {
+
+       
+       // Is Alignment object JaxB compatible?
+       
+       String fold(
+                       @WebParam(name = "alignment") Alignment alignment)
+                       throws UnsupportedRuntimeException, LimitExceededException,
+                       JobSubmissionException;
+       
+       String customFold(
+                       @WebParam(name = "alignment") Alignment alignment,
+                       @WebParam(name = "options") List<Option<T>> options)
+                       throws UnsupportedRuntimeException, LimitExceededException,
+                       JobSubmissionException, WrongParameterException;
+       
+       String presetFold(
+                       @WebParam(name = "alignment") Alignment alignment,
+                       @WebParam(name = "preset") Preset<T> preset)
+                       throws UnsupportedRuntimeException, LimitExceededException,
+                       JobSubmissionException, WrongParameterException;
+       
+       RNAstruct getResult(@WebParam(name = "jobId") String jobId)
+               throws ResultNotAvailableException;
+                       
+}
index 9b1f062..32660d9 100644 (file)
@@ -7,9 +7,9 @@ import javax.xml.bind.annotation.XmlElement;
 import javax.xml.bind.annotation.XmlRootElement;\r
 import javax.xml.bind.annotation.XmlType;\r
 \r
-@XmlRootElement(name = "cancelJob", namespace = "http://msa.data.compbio/01/12/2010/")\r
+@XmlRootElement(name = "cancelJob", namespace = "http://msa.data.compbio/01/01/2010/")\r
 @XmlAccessorType(XmlAccessType.FIELD)\r
-@XmlType(name = "cancelJob", namespace = "http://msa.data.compbio/01/12/2010/")\r
+@XmlType(name = "cancelJob", namespace = "http://msa.data.compbio/01/01/2010/")\r
 public class CancelJob {\r
 \r
     @XmlElement(name = "jobId", namespace = "")\r
index 00a92e2..7ccc190 100644 (file)
@@ -7,9 +7,9 @@ import javax.xml.bind.annotation.XmlElement;
 import javax.xml.bind.annotation.XmlRootElement;\r
 import javax.xml.bind.annotation.XmlType;\r
 \r
-@XmlRootElement(name = "cancelJobResponse", namespace = "http://msa.data.compbio/01/12/2010/")\r
+@XmlRootElement(name = "cancelJobResponse", namespace = "http://msa.data.compbio/01/01/2010/")\r
 @XmlAccessorType(XmlAccessType.FIELD)\r
-@XmlType(name = "cancelJobResponse", namespace = "http://msa.data.compbio/01/12/2010/")\r
+@XmlType(name = "cancelJobResponse", namespace = "http://msa.data.compbio/01/01/2010/")\r
 public class CancelJobResponse {\r
 \r
     @XmlElement(name = "return", namespace = "")\r
diff --git a/webservices/compbio/data/msa/jaxws/CustomFold.java b/webservices/compbio/data/msa/jaxws/CustomFold.java
new file mode 100644 (file)
index 0000000..acdd828
--- /dev/null
@@ -0,0 +1,60 @@
+
+package compbio.data.msa.jaxws;
+
+import java.util.List;
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlType;
+
+@XmlRootElement(name = "customFold", namespace = "http://msa.data.compbio/01/01/2010/")
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "customFold", namespace = "http://msa.data.compbio/01/01/2010/", propOrder = {
+    "alignment",
+    "options"
+})
+public class CustomFold {
+
+    @XmlElement(name = "alignment", namespace = "")
+    private compbio.data.sequence.Alignment alignment;
+    @XmlElement(name = "options", namespace = "")
+    private List<compbio.metadata.Option> options;
+
+    /**
+     * 
+     * @return
+     *     returns Alignment
+     */
+    public compbio.data.sequence.Alignment getAlignment() {
+        return this.alignment;
+    }
+
+    /**
+     * 
+     * @param alignment
+     *     the value for the alignment property
+     */
+    public void setAlignment(compbio.data.sequence.Alignment alignment) {
+        this.alignment = alignment;
+    }
+
+    /**
+     * 
+     * @return
+     *     returns List<Option>
+     */
+    public List<compbio.metadata.Option> getOptions() {
+        return this.options;
+    }
+
+    /**
+     * 
+     * @param options
+     *     the value for the options property
+     */
+    public void setOptions(List<compbio.metadata.Option> options) {
+        this.options = options;
+    }
+
+}
diff --git a/webservices/compbio/data/msa/jaxws/CustomFoldResponse.java b/webservices/compbio/data/msa/jaxws/CustomFoldResponse.java
new file mode 100644 (file)
index 0000000..8a6decf
--- /dev/null
@@ -0,0 +1,36 @@
+
+package compbio.data.msa.jaxws;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlType;
+
+@XmlRootElement(name = "customFoldResponse", namespace = "http://msa.data.compbio/01/01/2010/")
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "customFoldResponse", namespace = "http://msa.data.compbio/01/01/2010/")
+public class CustomFoldResponse {
+
+    @XmlElement(name = "return", namespace = "")
+    private String _return;
+
+    /**
+     * 
+     * @return
+     *     returns String
+     */
+    public String getReturn() {
+        return this._return;
+    }
+
+    /**
+     * 
+     * @param _return
+     *     the value for the _return property
+     */
+    public void setReturn(String _return) {
+        this._return = _return;
+    }
+
+}
diff --git a/webservices/compbio/data/msa/jaxws/Fold.java b/webservices/compbio/data/msa/jaxws/Fold.java
new file mode 100644 (file)
index 0000000..a199360
--- /dev/null
@@ -0,0 +1,36 @@
+
+package compbio.data.msa.jaxws;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlType;
+
+@XmlRootElement(name = "fold", namespace = "http://msa.data.compbio/01/01/2010/")
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "fold", namespace = "http://msa.data.compbio/01/01/2010/")
+public class Fold {
+
+    @XmlElement(name = "alignment", namespace = "")
+    private compbio.data.sequence.Alignment alignment;
+
+    /**
+     * 
+     * @return
+     *     returns Alignment
+     */
+    public compbio.data.sequence.Alignment getAlignment() {
+        return this.alignment;
+    }
+
+    /**
+     * 
+     * @param alignment
+     *     the value for the alignment property
+     */
+    public void setAlignment(compbio.data.sequence.Alignment alignment) {
+        this.alignment = alignment;
+    }
+
+}
diff --git a/webservices/compbio/data/msa/jaxws/FoldResponse.java b/webservices/compbio/data/msa/jaxws/FoldResponse.java
new file mode 100644 (file)
index 0000000..cb5a657
--- /dev/null
@@ -0,0 +1,36 @@
+
+package compbio.data.msa.jaxws;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlType;
+
+@XmlRootElement(name = "foldResponse", namespace = "http://msa.data.compbio/01/01/2010/")
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "foldResponse", namespace = "http://msa.data.compbio/01/01/2010/")
+public class FoldResponse {
+
+    @XmlElement(name = "return", namespace = "")
+    private String _return;
+
+    /**
+     * 
+     * @return
+     *     returns String
+     */
+    public String getReturn() {
+        return this._return;
+    }
+
+    /**
+     * 
+     * @param _return
+     *     the value for the _return property
+     */
+    public void setReturn(String _return) {
+        this._return = _return;
+    }
+
+}
index 438b3a0..5fd70f5 100644 (file)
@@ -7,9 +7,9 @@ import javax.xml.bind.annotation.XmlElement;
 import javax.xml.bind.annotation.XmlRootElement;\r
 import javax.xml.bind.annotation.XmlType;\r
 \r
-@XmlRootElement(name = "getJobStatus", namespace = "http://msa.data.compbio/01/12/2010/")\r
+@XmlRootElement(name = "getJobStatus", namespace = "http://msa.data.compbio/01/01/2010/")\r
 @XmlAccessorType(XmlAccessType.FIELD)\r
-@XmlType(name = "getJobStatus", namespace = "http://msa.data.compbio/01/12/2010/")\r
+@XmlType(name = "getJobStatus", namespace = "http://msa.data.compbio/01/01/2010/")\r
 public class GetJobStatus {\r
 \r
     @XmlElement(name = "jobId", namespace = "")\r
index 0f81c39..0f8ba68 100644 (file)
@@ -7,9 +7,9 @@ import javax.xml.bind.annotation.XmlElement;
 import javax.xml.bind.annotation.XmlRootElement;\r
 import javax.xml.bind.annotation.XmlType;\r
 \r
-@XmlRootElement(name = "getJobStatusResponse", namespace = "http://msa.data.compbio/01/12/2010/")\r
+@XmlRootElement(name = "getJobStatusResponse", namespace = "http://msa.data.compbio/01/01/2010/")\r
 @XmlAccessorType(XmlAccessType.FIELD)\r
-@XmlType(name = "getJobStatusResponse", namespace = "http://msa.data.compbio/01/12/2010/")\r
+@XmlType(name = "getJobStatusResponse", namespace = "http://msa.data.compbio/01/01/2010/")\r
 public class GetJobStatusResponse {\r
 \r
     @XmlElement(name = "return", namespace = "")\r
index 64514ba..6b04bc0 100644 (file)
@@ -7,9 +7,9 @@ import javax.xml.bind.annotation.XmlElement;
 import javax.xml.bind.annotation.XmlRootElement;\r
 import javax.xml.bind.annotation.XmlType;\r
 \r
-@XmlRootElement(name = "getLimit", namespace = "http://msa.data.compbio/01/12/2010/")\r
+@XmlRootElement(name = "getLimit", namespace = "http://msa.data.compbio/01/01/2010/")\r
 @XmlAccessorType(XmlAccessType.FIELD)\r
-@XmlType(name = "getLimit", namespace = "http://msa.data.compbio/01/12/2010/")\r
+@XmlType(name = "getLimit", namespace = "http://msa.data.compbio/01/01/2010/")\r
 public class GetLimit {\r
 \r
     @XmlElement(name = "presetName", namespace = "")\r
index 8147fa6..249e7e4 100644 (file)
@@ -7,9 +7,9 @@ import javax.xml.bind.annotation.XmlElement;
 import javax.xml.bind.annotation.XmlRootElement;\r
 import javax.xml.bind.annotation.XmlType;\r
 \r
-@XmlRootElement(name = "getLimitResponse", namespace = "http://msa.data.compbio/01/12/2010/")\r
+@XmlRootElement(name = "getLimitResponse", namespace = "http://msa.data.compbio/01/01/2010/")\r
 @XmlAccessorType(XmlAccessType.FIELD)\r
-@XmlType(name = "getLimitResponse", namespace = "http://msa.data.compbio/01/12/2010/")\r
+@XmlType(name = "getLimitResponse", namespace = "http://msa.data.compbio/01/01/2010/")\r
 public class GetLimitResponse {\r
 \r
     @XmlElement(name = "return", namespace = "")\r
index 152f72e..b8668d9 100644 (file)
@@ -6,9 +6,9 @@ import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlRootElement;\r
 import javax.xml.bind.annotation.XmlType;\r
 \r
-@XmlRootElement(name = "getLimits", namespace = "http://msa.data.compbio/01/12/2010/")\r
+@XmlRootElement(name = "getLimits", namespace = "http://msa.data.compbio/01/01/2010/")\r
 @XmlAccessorType(XmlAccessType.FIELD)\r
-@XmlType(name = "getLimits", namespace = "http://msa.data.compbio/01/12/2010/")\r
+@XmlType(name = "getLimits", namespace = "http://msa.data.compbio/01/01/2010/")\r
 public class GetLimits {\r
 \r
 \r
index 8bb6cc9..f503c23 100644 (file)
@@ -7,9 +7,9 @@ import javax.xml.bind.annotation.XmlElement;
 import javax.xml.bind.annotation.XmlRootElement;\r
 import javax.xml.bind.annotation.XmlType;\r
 \r
-@XmlRootElement(name = "getLimitsResponse", namespace = "http://msa.data.compbio/01/12/2010/")\r
+@XmlRootElement(name = "getLimitsResponse", namespace = "http://msa.data.compbio/01/01/2010/")\r
 @XmlAccessorType(XmlAccessType.FIELD)\r
-@XmlType(name = "getLimitsResponse", namespace = "http://msa.data.compbio/01/12/2010/")\r
+@XmlType(name = "getLimitsResponse", namespace = "http://msa.data.compbio/01/01/2010/")\r
 public class GetLimitsResponse {\r
 \r
     @XmlElement(name = "return", namespace = "")\r
index 04d5d12..2e57fb8 100644 (file)
@@ -6,9 +6,9 @@ import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlRootElement;\r
 import javax.xml.bind.annotation.XmlType;\r
 \r
-@XmlRootElement(name = "getPresets", namespace = "http://msa.data.compbio/01/12/2010/")\r
+@XmlRootElement(name = "getPresets", namespace = "http://msa.data.compbio/01/01/2010/")\r
 @XmlAccessorType(XmlAccessType.FIELD)\r
-@XmlType(name = "getPresets", namespace = "http://msa.data.compbio/01/12/2010/")\r
+@XmlType(name = "getPresets", namespace = "http://msa.data.compbio/01/01/2010/")\r
 public class GetPresets {\r
 \r
 \r
index 7755793..ad2942b 100644 (file)
@@ -7,9 +7,9 @@ import javax.xml.bind.annotation.XmlElement;
 import javax.xml.bind.annotation.XmlRootElement;\r
 import javax.xml.bind.annotation.XmlType;\r
 \r
-@XmlRootElement(name = "getPresetsResponse", namespace = "http://msa.data.compbio/01/12/2010/")\r
+@XmlRootElement(name = "getPresetsResponse", namespace = "http://msa.data.compbio/01/01/2010/")\r
 @XmlAccessorType(XmlAccessType.FIELD)\r
-@XmlType(name = "getPresetsResponse", namespace = "http://msa.data.compbio/01/12/2010/")\r
+@XmlType(name = "getPresetsResponse", namespace = "http://msa.data.compbio/01/01/2010/")\r
 public class GetPresetsResponse {\r
 \r
     @XmlElement(name = "return", namespace = "")\r
index d8596b0..bbf4468 100644 (file)
@@ -13,14 +13,14 @@ import javax.xml.bind.annotation.XmlType;
 public class GetResultResponse {\r
 \r
     @XmlElement(name = "return", namespace = "")\r
-    private compbio.data.sequence.Alignment _return;\r
+    private compbio.data.sequence.RNAstruct _return;\r
 \r
     /**\r
      * \r
      * @return\r
-     *     returns Alignment\r
+     *     returns RNAstruct\r
      */\r
-    public compbio.data.sequence.Alignment getReturn() {\r
+    public compbio.data.sequence.RNAstruct getReturn() {\r
         return this._return;\r
     }\r
 \r
@@ -29,7 +29,7 @@ public class GetResultResponse {
      * @param _return\r
      *     the value for the _return property\r
      */\r
-    public void setReturn(compbio.data.sequence.Alignment _return) {\r
+    public void setReturn(compbio.data.sequence.RNAstruct _return) {\r
         this._return = _return;\r
     }\r
 \r
index 9d59cd3..9128b3f 100644 (file)
@@ -6,9 +6,9 @@ import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlRootElement;\r
 import javax.xml.bind.annotation.XmlType;\r
 \r
-@XmlRootElement(name = "getRunnerOptions", namespace = "http://msa.data.compbio/01/12/2010/")\r
+@XmlRootElement(name = "getRunnerOptions", namespace = "http://msa.data.compbio/01/01/2010/")\r
 @XmlAccessorType(XmlAccessType.FIELD)\r
-@XmlType(name = "getRunnerOptions", namespace = "http://msa.data.compbio/01/12/2010/")\r
+@XmlType(name = "getRunnerOptions", namespace = "http://msa.data.compbio/01/01/2010/")\r
 public class GetRunnerOptions {\r
 \r
 \r
index 2278aa2..fb467ca 100644 (file)
@@ -7,9 +7,9 @@ import javax.xml.bind.annotation.XmlElement;
 import javax.xml.bind.annotation.XmlRootElement;\r
 import javax.xml.bind.annotation.XmlType;\r
 \r
-@XmlRootElement(name = "getRunnerOptionsResponse", namespace = "http://msa.data.compbio/01/12/2010/")\r
+@XmlRootElement(name = "getRunnerOptionsResponse", namespace = "http://msa.data.compbio/01/01/2010/")\r
 @XmlAccessorType(XmlAccessType.FIELD)\r
-@XmlType(name = "getRunnerOptionsResponse", namespace = "http://msa.data.compbio/01/12/2010/")\r
+@XmlType(name = "getRunnerOptionsResponse", namespace = "http://msa.data.compbio/01/01/2010/")\r
 public class GetRunnerOptionsResponse {\r
 \r
     @XmlElement(name = "return", namespace = "")\r
index 869aea5..a916bce 100644 (file)
@@ -13,9 +13,9 @@ import javax.xml.bind.annotation.XmlType;
  * Generated source version: 2.2.3\r
  * \r
  */\r
-@XmlRootElement(name = "JobSubmissionException", namespace = "http://msa.data.compbio/01/12/2010/")\r
+@XmlRootElement(name = "JobSubmissionException", namespace = "http://msa.data.compbio/01/01/2010/")\r
 @XmlAccessorType(XmlAccessType.FIELD)\r
-@XmlType(name = "JobSubmissionException", namespace = "http://msa.data.compbio/01/12/2010/")\r
+@XmlType(name = "JobSubmissionException", namespace = "http://msa.data.compbio/01/01/2010/")\r
 public class JobSubmissionExceptionBean {\r
 \r
     private String message;\r
index 9e63199..0ddadef 100644 (file)
@@ -13,9 +13,9 @@ import javax.xml.bind.annotation.XmlType;
  * Generated source version: 2.2.3\r
  * \r
  */\r
-@XmlRootElement(name = "LimitExceededException", namespace = "http://msa.data.compbio/01/12/2010/")\r
+@XmlRootElement(name = "LimitExceededException", namespace = "http://msa.data.compbio/01/01/2010/")\r
 @XmlAccessorType(XmlAccessType.FIELD)\r
-@XmlType(name = "LimitExceededException", namespace = "http://msa.data.compbio/01/12/2010/", propOrder = {\r
+@XmlType(name = "LimitExceededException", namespace = "http://msa.data.compbio/01/01/2010/", propOrder = {\r
     "actualNumberofSequences",\r
     "message",\r
     "numberOfSequencesAllowed",\r
diff --git a/webservices/compbio/data/msa/jaxws/PresetFold.java b/webservices/compbio/data/msa/jaxws/PresetFold.java
new file mode 100644 (file)
index 0000000..0906c16
--- /dev/null
@@ -0,0 +1,59 @@
+
+package compbio.data.msa.jaxws;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlType;
+
+@XmlRootElement(name = "presetFold", namespace = "http://msa.data.compbio/01/01/2010/")
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "presetFold", namespace = "http://msa.data.compbio/01/01/2010/", propOrder = {
+    "alignment",
+    "preset"
+})
+public class PresetFold {
+
+    @XmlElement(name = "alignment", namespace = "")
+    private compbio.data.sequence.Alignment alignment;
+    @XmlElement(name = "preset", namespace = "")
+    private compbio.metadata.Preset preset;
+
+    /**
+     * 
+     * @return
+     *     returns Alignment
+     */
+    public compbio.data.sequence.Alignment getAlignment() {
+        return this.alignment;
+    }
+
+    /**
+     * 
+     * @param alignment
+     *     the value for the alignment property
+     */
+    public void setAlignment(compbio.data.sequence.Alignment alignment) {
+        this.alignment = alignment;
+    }
+
+    /**
+     * 
+     * @return
+     *     returns Preset
+     */
+    public compbio.metadata.Preset getPreset() {
+        return this.preset;
+    }
+
+    /**
+     * 
+     * @param preset
+     *     the value for the preset property
+     */
+    public void setPreset(compbio.metadata.Preset preset) {
+        this.preset = preset;
+    }
+
+}
diff --git a/webservices/compbio/data/msa/jaxws/PresetFoldResponse.java b/webservices/compbio/data/msa/jaxws/PresetFoldResponse.java
new file mode 100644 (file)
index 0000000..4ac0931
--- /dev/null
@@ -0,0 +1,36 @@
+
+package compbio.data.msa.jaxws;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlType;
+
+@XmlRootElement(name = "presetFoldResponse", namespace = "http://msa.data.compbio/01/01/2010/")
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "presetFoldResponse", namespace = "http://msa.data.compbio/01/01/2010/")
+public class PresetFoldResponse {
+
+    @XmlElement(name = "return", namespace = "")
+    private String _return;
+
+    /**
+     * 
+     * @return
+     *     returns String
+     */
+    public String getReturn() {
+        return this._return;
+    }
+
+    /**
+     * 
+     * @param _return
+     *     the value for the _return property
+     */
+    public void setReturn(String _return) {
+        this._return = _return;
+    }
+
+}
index 7ab918b..db1be6e 100644 (file)
@@ -7,9 +7,9 @@ import javax.xml.bind.annotation.XmlElement;
 import javax.xml.bind.annotation.XmlRootElement;\r
 import javax.xml.bind.annotation.XmlType;\r
 \r
-@XmlRootElement(name = "pullExecStatistics", namespace = "http://msa.data.compbio/01/12/2010/")\r
+@XmlRootElement(name = "pullExecStatistics", namespace = "http://msa.data.compbio/01/01/2010/")\r
 @XmlAccessorType(XmlAccessType.FIELD)\r
-@XmlType(name = "pullExecStatistics", namespace = "http://msa.data.compbio/01/12/2010/", propOrder = {\r
+@XmlType(name = "pullExecStatistics", namespace = "http://msa.data.compbio/01/01/2010/", propOrder = {\r
     "jobId",\r
     "position"\r
 })\r
index ef36b8d..068b404 100644 (file)
@@ -7,9 +7,9 @@ import javax.xml.bind.annotation.XmlElement;
 import javax.xml.bind.annotation.XmlRootElement;\r
 import javax.xml.bind.annotation.XmlType;\r
 \r
-@XmlRootElement(name = "pullExecStatisticsResponse", namespace = "http://msa.data.compbio/01/12/2010/")\r
+@XmlRootElement(name = "pullExecStatisticsResponse", namespace = "http://msa.data.compbio/01/01/2010/")\r
 @XmlAccessorType(XmlAccessType.FIELD)\r
-@XmlType(name = "pullExecStatisticsResponse", namespace = "http://msa.data.compbio/01/12/2010/")\r
+@XmlType(name = "pullExecStatisticsResponse", namespace = "http://msa.data.compbio/01/01/2010/")\r
 public class PullExecStatisticsResponse {\r
 \r
     @XmlElement(name = "return", namespace = "")\r
index 79f413a..4561f5f 100644 (file)
@@ -13,9 +13,9 @@ import javax.xml.bind.annotation.XmlType;
  * Generated source version: 2.2.3\r
  * \r
  */\r
-@XmlRootElement(name = "ResultNotAvailableException", namespace = "http://msa.data.compbio/01/12/2010/")\r
+@XmlRootElement(name = "ResultNotAvailableException", namespace = "http://msa.data.compbio/01/01/2010/")\r
 @XmlAccessorType(XmlAccessType.FIELD)\r
-@XmlType(name = "ResultNotAvailableException", namespace = "http://msa.data.compbio/01/12/2010/")\r
+@XmlType(name = "ResultNotAvailableException", namespace = "http://msa.data.compbio/01/01/2010/")\r
 public class ResultNotAvailableExceptionBean {\r
 \r
     private String message;\r
index b349081..6927cf6 100644 (file)
@@ -13,9 +13,9 @@ import javax.xml.bind.annotation.XmlType;
  * Generated source version: 2.2.3\r
  * \r
  */\r
-@XmlRootElement(name = "UnsupportedRuntimeException", namespace = "http://msa.data.compbio/01/12/2010/")\r
+@XmlRootElement(name = "UnsupportedRuntimeException", namespace = "http://msa.data.compbio/01/01/2010/")\r
 @XmlAccessorType(XmlAccessType.FIELD)\r
-@XmlType(name = "UnsupportedRuntimeException", namespace = "http://msa.data.compbio/01/12/2010/")\r
+@XmlType(name = "UnsupportedRuntimeException", namespace = "http://msa.data.compbio/01/01/2010/")\r
 public class UnsupportedRuntimeExceptionBean {\r
 \r
     private String message;\r
index 630d8a5..beb4d07 100644 (file)
@@ -13,9 +13,9 @@ import javax.xml.bind.annotation.XmlType;
  * Generated source version: 2.2.3\r
  * \r
  */\r
-@XmlRootElement(name = "WrongParameterException", namespace = "http://msa.data.compbio/01/12/2010/")\r
+@XmlRootElement(name = "WrongParameterException", namespace = "http://msa.data.compbio/01/01/2010/")\r
 @XmlAccessorType(XmlAccessType.FIELD)\r
-@XmlType(name = "WrongParameterException", namespace = "http://msa.data.compbio/01/12/2010/")\r
+@XmlType(name = "WrongParameterException", namespace = "http://msa.data.compbio/01/01/2010/")\r
 public class WrongParameterExceptionBean {\r
 \r
     private String message;\r
diff --git a/webservices/compbio/data/structure/FoldWS.java b/webservices/compbio/data/structure/FoldWS.java
deleted file mode 100644 (file)
index 7d5238f..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-package compbio.data.structure;
-
-import java.security.InvalidParameterException;
-import java.util.List;
-
-import javax.jws.WebMethod;
-import javax.jws.WebParam;
-import javax.jws.WebService;
-
-import compbio.data.msa.JABAService;
-import compbio.data.msa.JManagement;
-import compbio.data.msa.Metadata;
-import compbio.metadata.JobSubmissionException;
-import compbio.metadata.LimitExceededException;
-import compbio.metadata.Option;
-import compbio.metadata.Preset;
-import compbio.metadata.ResultNotAvailableException;
-import compbio.metadata.UnsupportedRuntimeException;
-import compbio.metadata.WrongParameterException;
-
-/*
- * Interface for tools that results RNA secondary structure information
- * 
- * Still Unsure whether a new interface is needed or whether secondary structre
- * information could be exressed as a sequence annotation
- */
-
-// effect of a different targetNamespace?
-@WebService(targetNamespace = JABAService.V2_SERVICE_NAMESPACE)
-public interface FoldWS<T> 
-               extends 
-                       JABAService,
-                       JManagement,
-                       Metadata<T> {
-
-       
-       
-       @WebMethod
-       String fold(
-                       @WebParam(name = )
-}
index 3c62c29..888ec5f 100644 (file)
@@ -43,13 +43,16 @@ import javax.xml.ws.Service;
 import javax.xml.ws.WebServiceException;\r
 \r
 import compbio.data.msa.JABAService;\r
+import compbio.data.msa.FoldWS;\r
 import compbio.data.msa.Metadata;\r
 import compbio.data.msa.MsaWS;\r
 import compbio.data.msa.RegistryWS;\r
 import compbio.data.msa.SequenceAnnotation;\r
 import compbio.data.sequence.Alignment;\r
 import compbio.data.sequence.FastaSequence;\r
+import compbio.data.sequence.RNAstruct;\r
 import compbio.data.sequence.ScoreManager;\r
+import compbio.data.sequence.ClustalAlignmentUtil;\r
 import compbio.data.sequence.SequenceUtil;\r
 import compbio.data.sequence.UnknownFileFormatException;\r
 import compbio.metadata.JobSubmissionException;\r
@@ -103,6 +106,7 @@ public class Jws2Client {
         * @throws IOException\r
         */\r
        <T> Jws2Client(String[] cmd) throws IOException {\r
+               \r
 \r
                String hostname = CmdHelper.getHost(cmd);\r
                if (hostname == null) {\r
@@ -146,6 +150,7 @@ public class Jws2Client {
                String presetName = CmdHelper.getPresetName(cmd);\r
 \r
                Metadata<T> msaws = (Metadata<T>) connect(hostname, service);\r
+               Metadata<T> foldws = (Metadata<T>) connect(hostname, service);\r
                Preset<T> preset = null;\r
                if (presetName != null) {\r
                        preset = MetadataHelper.getPreset(msaws, presetName);\r
@@ -157,6 +162,7 @@ public class Jws2Client {
                                        msaws.getRunnerOptions());\r
                }\r
                Alignment alignment = null;\r
+               RNAstruct rnastruct = null;\r
                if (inputFile != null) {\r
                        Writer writer = null;\r
                        if (outFile != null) {\r
@@ -171,10 +177,16 @@ public class Jws2Client {
                                                ((SequenceAnnotation<T>) msaws), preset, customOptions);\r
 \r
                                IOHelper.writeOut(writer, result);\r
-                       } else {\r
+                       } else if (service.getServiceType() == MsaWS.class) {\r
                                alignment = align(inputFile, (MsaWS<T>) msaws, preset,\r
                                                customOptions);\r
                                IOHelper.writeOut(writer, alignment);\r
+                       } else if (service.getServiceType() == FoldWS.class) {\r
+                               rnastruct = fold(inputFile, (FoldWS<T>) foldws, preset, customOptions);\r
+                               // No IOHelper method for rnastruct/String yet\r
+                               if (writer != null) {\r
+                                       writer.write(rnastruct.toString());\r
+                               }\r
                        }\r
                        writer.close();\r
                }\r
@@ -506,7 +518,79 @@ public class Jws2Client {
                }\r
                return alignment;\r
        }\r
-\r
+       \r
+       /**\r
+        * Return RNA secondary structure from a file using FoldWS\r
+        * \r
+        * @param <T>\r
+        *            web service type e.g. Clustal\r
+        * @param file\r
+        *            to read the results from\r
+        * @param foldws\r
+        *            FoldWS required\r
+        * @param preset\r
+        *            Preset to use optional\r
+        * @param customOptions\r
+        *            file which contains new line separated list of options\r
+        * @return RNAstruct\r
+        */\r
+       \r
+       static <T> RNAstruct fold(File file, FoldWS<T> foldws, Preset<T> preset,\r
+                       List<Option<T>> customOptions) {\r
+               FileInputStream instream = null;\r
+               Alignment alignment = null;\r
+               RNAstruct rnastruct = null;\r
+               try {\r
+                       instream = new FileInputStream(file);\r
+                       alignment = ClustalAlignmentUtil.readClustalFile(instream);\r
+                       instream.close();\r
+                       String jobId = null;\r
+                       if (customOptions != null && preset != null) {\r
+                               System.out.println("WARN: Parameters (-f) are defined together"\r
+                                               + "with a preset (-r), ignoring preset! ");\r
+                       }\r
+                       if (customOptions != null) {\r
+                               jobId = foldws.customFold(alignment, customOptions);\r
+                       } else if (preset != null) {\r
+                               jobId = foldws.presetFold(alignment, preset);\r
+                       } else {\r
+                               jobId = foldws.fold(alignment);\r
+                       }\r
+                       System.out.println("\n\ncalling fold.........");\r
+                       Thread.sleep(1000);\r
+                       rnastruct = foldws.getResult(jobId);\r
+                       log.info("log test print results:\n" + rnastruct.toString());\r
+                       System.out.println("print test results:\n " + rnastruct.toString());\r
+                               \r
+               } catch (IOException e) {\r
+                       System.err.println("Exception while reading the input file. Exception details: ");\r
+                       e.printStackTrace();\r
+               } catch (UnknownFileFormatException e) {\r
+                       System.err.println("Exception while reading input file. Doesnt look like a Clustal format file");\r
+                       e.printStackTrace();\r
+               } catch (JobSubmissionException e) {\r
+                       System.err.println("Exception while submitting job to the web server. ");\r
+                       e.printStackTrace();\r
+               } catch (ResultNotAvailableException e) {\r
+                       System.err.println("Exception while waiting for results. Exception details: ");\r
+                       e.printStackTrace();\r
+               } catch (InterruptedException ignored) {\r
+                       // ignore and propagate an interruption\r
+                       Thread.currentThread().interrupt();\r
+               } catch (WrongParameterException e) {\r
+                       e.printStackTrace();\r
+               } finally {\r
+                       if (instream != null) {\r
+                               try {\r
+                                       instream.close();\r
+                               } catch (IOException ignored) {\r
+                                       // ignore\r
+                               }\r
+                       }\r
+               }\r
+               return rnastruct;\r
+       }\r
+               \r
        /**\r
         * Prints Jws2Client usage information to standard out\r
         * \r
index 2ffafb6..6840916 100644 (file)
@@ -26,6 +26,7 @@ import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.namespace.QName;\r
 import javax.xml.ws.Service;\r
 \r
+import compbio.data.msa.FoldWS;\r
 import compbio.data.msa.JABAService;\r
 import compbio.data.msa.MsaWS;\r
 import compbio.data.msa.SequenceAnnotation;\r
@@ -39,7 +40,7 @@ public enum Services {
         * Make sure this class has NO references to runners or engines as it is a\r
         * part of minimal client package. Such things should go into ServicesUtil\r
         */\r
-       MafftWS, MuscleWS, ClustalWS, ClustalOWS, TcoffeeWS, ProbconsWS, AAConWS, JronnWS, DisemblWS, GlobPlotWS, IUPredWS;\r
+       MafftWS, MuscleWS, ClustalWS, ClustalOWS, TcoffeeWS, ProbconsWS, AAConWS, JronnWS, DisemblWS, GlobPlotWS, IUPredWS, RNAalifoldWS;\r
 \r
        public static Services getService(String servName) {\r
                servName = servName.trim().toLowerCase();\r
@@ -86,8 +87,10 @@ public enum Services {
                        case MuscleWS :\r
                        case ProbconsWS :\r
                        case TcoffeeWS :\r
-\r
                                return MsaWS.class;\r
+                               \r
+                       case RNAalifoldWS :\r
+                               return FoldWS.class;\r
                        default :\r
                                throw new RuntimeException("Unrecognised Web Service Type "\r
                                                + this + " - Should never happened!");\r
@@ -126,6 +129,8 @@ public enum Services {
                                return PROBCONS_INFO;\r
                        case TcoffeeWS :\r
                                return TCOFFEE_INFO;\r
+                       case RNAalifoldWS :\r
+                               return RNAALIFOLD_INFO;\r
                        default :\r
                                throw new RuntimeException("Unrecognised Web Service Type "\r
                                                + this + " - Should never happened!");\r
@@ -189,6 +194,12 @@ public enum Services {
                                        + "Parallelization of the MAFFT multiple sequence alignment program. ",\r
                        "6.8.57", "http://mafft.cbrc.jp/alignment/software/").toString();;\r
 \r
+       // TODO reference\r
+       public static final String RNAALIFOLD_INFO = new ServiceInfo(\r
+                       RNAalifoldWS,\r
+                       "Reference to come", "2.1.2",\r
+                       "http://www.tbi.univie.ac.at/RNA/").toString();;\r
+                       \r
        @XmlAccessorType(XmlAccessType.FIELD)\r
        static class ServiceInfo {\r
                Services service;\r
index 08b8131..9873875 100644 (file)
@@ -15,6 +15,7 @@ import compbio.runner.msa.Mafft;
 import compbio.runner.msa.Muscle;\r
 import compbio.runner.msa.Probcons;\r
 import compbio.runner.msa.Tcoffee;\r
+import compbio.runner.structure.RNAalifold;\r
 \r
 public class ServicesUtil {\r
 \r
@@ -53,6 +54,8 @@ public class ServicesUtil {
                                return Jronn.class;\r
                        case IUPredWS :\r
                                return IUPred.class;\r
+                       case RNAalifoldWS :\r
+                               return RNAalifold.class;\r
                        default :\r
                                throw new RuntimeException(\r
                                                "Unknown web service implementation class for service: "\r
index 83d7c93..f838b16 100644 (file)
@@ -8,11 +8,12 @@ import javax.jws.WebService;
 
 import org.apache.log4j.Logger;
 
+import compbio.data.msa.FoldWS;
 import compbio.data.msa.JABAService;
 import compbio.data.msa.JManagement;
 import compbio.data.msa.Metadata;
-import compbio.data.msa.MsaWS;
 import compbio.data.sequence.Alignment;
+import compbio.data.sequence.RNAstruct;
 import compbio.data.sequence.FastaSequence;
 import compbio.engine.AsyncExecutor;
 import compbio.engine.Configurator;
@@ -30,11 +31,10 @@ import compbio.metadata.ResultNotAvailableException;
 import compbio.metadata.RunnerConfig;
 import compbio.metadata.WrongParameterException;
 import compbio.runner.Util;
-import compbio.runner.msa.ClustalW;
 import compbio.runner.structure.RNAalifold;
 
-@WebService(targetNamespace = JABAService.SERVICE_NAMESPACE, serviceName = "RNAalifoldWS")
-public class RNAalifoldWS implements JABAService, JManagement, Metadata<RNAalifold> {
+@WebService(endpointInterface = "compbio.data.msa.FoldWS", targetNamespace = JABAService.SERVICE_NAMESPACE, serviceName = "RNAalifoldWS")
+public class RNAalifoldWS implements FoldWS<RNAalifold> {
 
        private static Logger log = Logger.getLogger(ClustalWS.class);
        
@@ -47,26 +47,62 @@ public class RNAalifoldWS implements JABAService, JManagement, Metadata<RNAalifo
        private static final LimitsManager<RNAalifold> limitMan = compbio.engine.client.Util
                        .getLimits(new RNAalifold().getType());
        
-       //public String fold()
+
+       @Override
+       public String fold(Alignment alignment)
+                       throws JobSubmissionException {
+               
+               // Validate clustal input here?
+               ConfiguredExecutable<RNAalifold> confRNAalifold = init(alignment);
+               return WSUtil.fold(alignment, confRNAalifold, log, "fold", getLimit(""));
+       }
        
        
-       ConfiguredExecutable<RNAalifold> init() throws JobSubmissionException {
+       ConfiguredExecutable<RNAalifold> init(Alignment dataset) throws JobSubmissionException {
                RNAalifold rnaalifold = new RNAalifold();
                rnaalifold.setInput(SkeletalExecutable.INPUT)
                                .setOutput(SkeletalExecutable.OUTPUT)
                                .setError(SkeletalExecutable.ERROR);
                ConfiguredExecutable<RNAalifold> confRNAalifold = Configurator
-                               .configureExecutable(rnaalifold);
+                               .configureExecutable(rnaalifold, dataset.getSequences());
                return confRNAalifold;
        }
+       
+       @Override
+       public String presetFold(Alignment alignment,
+                       Preset<RNAalifold> preset) throws JobSubmissionException,
+                       WrongParameterException {
+               // validate
+               if (preset == null) {
+                       throw new WrongParameterException("Preset must be Provided!");
+               }
+               Limit<RNAalifold> limit = getLimit(preset.getName());
+               ConfiguredExecutable<RNAalifold> confRNAalifold = init(alignment);
+               confRNAalifold.addParameters(preset.getOptions());
+               return WSUtil.fold(alignment, confRNAalifold, log, "presetFold", limit);
+       }
                
+       @Override 
+       public String customFold(Alignment alignment,
+                       List<Option<RNAalifold>> options) throws JobSubmissionException,
+                       WrongParameterException {
+               // validate
+               ConfiguredExecutable<RNAalifold> confRNAalifold = init(alignment);
+               List<String> params = WSUtil.getCommands(options, 
+                               RNAalifold.KEY_VALUE_SEPARATOR);
+               confRNAalifold.addParameters(params);
+               log.info("Setting parameters: " + params);
+               return WSUtil.fold(alignment, confRNAalifold, log, "customFold", 
+                               getLimit(""));
+       }
+       
        @Override
        public RunnerConfig<RNAalifold> getRunnerOptions() {
                return rnaalifoldOptions;
        }
        
        @SuppressWarnings("unchecked")
-       public String getResult(@WebParam(name = "jobId") String jobId) throws ResultNotAvailableException {
+       public RNAstruct getResult(String jobId) throws ResultNotAvailableException {
                
                WSUtil.validateJobId(jobId);
                AsyncExecutor asyncEngine = Configurator.getAsyncEngine(jobId);
index 71da240..9d81a6a 100644 (file)
@@ -25,6 +25,7 @@ import java.util.Set;
 \r
 import org.apache.log4j.Logger;\r
 \r
+import compbio.data.sequence.Alignment;\r
 import compbio.data.sequence.FastaSequence;\r
 import compbio.data.sequence.ScoreManager;\r
 import compbio.engine.AsyncExecutor;\r
@@ -112,17 +113,24 @@ public final class WSUtil {
                return jobId;\r
        }\r
        \r
-       // Hardcoded gapchar '-'\r
+       // Hardcoded gapchar '-' in this method\r
        \r
-       public static <T> String fold(List<FastaSequence> sequences,\r
+       public static <T> String fold(Alignment alignment,\r
                        ConfiguredExecutable<T> confExec, Logger logger,\r
                        String callingMethod, Limit<T> limit)\r
                        throws LimitExceededException, JobSubmissionException {\r
                \r
+               List<FastaSequence> sequences = alignment.getSequences();\r
                if (limit != null && limit.isExceeded(sequences)) {\r
                        throw LimitExceededException.newLimitExceeded(limit, sequences);\r
                }\r
                compbio.runner.Util.writeClustalInput(sequences, confExec, '-');\r
+               System.out.println("WSUtil-fold: Writing the clustal input file on the server: to file: "\r
+                               + confExec.getInput());\r
+               System.out.println("WSUtil-fold: The executable is configured with parameters: " \r
+                               + confExec.getParameters());\r
+//             System.out.println("WSUTil-fold: Dump the configured executable:\n" \r
+//                             + confExec.toString());\r
                AsyncExecutor engine = Configurator.getAsyncEngine(confExec);\r
                String jobId = engine.submitJob(confExec);\r
                reportUsage(confExec, logger);\r
diff --git a/webservices/compbio/ws/server/resource/RNAalifoldWS.wsdl b/webservices/compbio/ws/server/resource/RNAalifoldWS.wsdl
new file mode 100644 (file)
index 0000000..5c07638
--- /dev/null
@@ -0,0 +1,292 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<!-- Generated by JAX-WS RI at http://jax-ws.dev.java.net. RI's version is Metro/2.1 (branches/2.1-6728; 2011-02-03T14:14:58+0000) JAXWS-RI/2.2.3 JAXWS/2.2. -->
+<definitions targetNamespace="http://msa.data.compbio/01/01/2010/" name="RNAalifoldWS" xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:wsp="http://www.w3.org/ns/ws-policy" xmlns:tns="http://msa.data.compbio/01/01/2010/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:wsp1_2="http://schemas.xmlsoap.org/ws/2004/09/policy" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
+  <types>
+    <xsd:schema>
+      <xsd:import namespace="http://msa.data.compbio/01/01/2010/" schemaLocation="RNAalifoldWS_schema1.xsd"/>
+    </xsd:schema>
+  </types>
+  <message name="getResult">
+    <part name="parameters" element="tns:getResult"/>
+  </message>
+  <message name="getResultResponse">
+    <part name="parameters" element="tns:getResultResponse"/>
+  </message>
+  <message name="ResultNotAvailableException">
+    <part name="fault" element="tns:ResultNotAvailableException"/>
+  </message>
+  <message name="fold">
+    <part name="parameters" element="tns:fold"/>
+  </message>
+  <message name="foldResponse">
+    <part name="parameters" element="tns:foldResponse"/>
+  </message>
+  <message name="UnsupportedRuntimeException">
+    <part name="fault" element="tns:UnsupportedRuntimeException"/>
+  </message>
+  <message name="LimitExceededException">
+    <part name="fault" element="tns:LimitExceededException"/>
+  </message>
+  <message name="JobSubmissionException">
+    <part name="fault" element="tns:JobSubmissionException"/>
+  </message>
+  <message name="presetFold">
+    <part name="parameters" element="tns:presetFold"/>
+  </message>
+  <message name="presetFoldResponse">
+    <part name="parameters" element="tns:presetFoldResponse"/>
+  </message>
+  <message name="WrongParameterException">
+    <part name="fault" element="tns:WrongParameterException"/>
+  </message>
+  <message name="customFold">
+    <part name="parameters" element="tns:customFold"/>
+  </message>
+  <message name="customFoldResponse">
+    <part name="parameters" element="tns:customFoldResponse"/>
+  </message>
+  <message name="pullExecStatistics">
+    <part name="parameters" element="tns:pullExecStatistics"/>
+  </message>
+  <message name="pullExecStatisticsResponse">
+    <part name="parameters" element="tns:pullExecStatisticsResponse"/>
+  </message>
+  <message name="getJobStatus">
+    <part name="parameters" element="tns:getJobStatus"/>
+  </message>
+  <message name="getJobStatusResponse">
+    <part name="parameters" element="tns:getJobStatusResponse"/>
+  </message>
+  <message name="cancelJob">
+    <part name="parameters" element="tns:cancelJob"/>
+  </message>
+  <message name="cancelJobResponse">
+    <part name="parameters" element="tns:cancelJobResponse"/>
+  </message>
+  <message name="getRunnerOptions">
+    <part name="parameters" element="tns:getRunnerOptions"/>
+  </message>
+  <message name="getRunnerOptionsResponse">
+    <part name="parameters" element="tns:getRunnerOptionsResponse"/>
+  </message>
+  <message name="getLimit">
+    <part name="parameters" element="tns:getLimit"/>
+  </message>
+  <message name="getLimitResponse">
+    <part name="parameters" element="tns:getLimitResponse"/>
+  </message>
+  <message name="getPresets">
+    <part name="parameters" element="tns:getPresets"/>
+  </message>
+  <message name="getPresetsResponse">
+    <part name="parameters" element="tns:getPresetsResponse"/>
+  </message>
+  <message name="getLimits">
+    <part name="parameters" element="tns:getLimits"/>
+  </message>
+  <message name="getLimitsResponse">
+    <part name="parameters" element="tns:getLimitsResponse"/>
+  </message>
+  <portType name="FoldWS">
+    <operation name="getResult">
+      <input wsam:Action="http://msa.data.compbio/01/01/2010/FoldWS/getResultRequest" message="tns:getResult"/>
+      <output wsam:Action="http://msa.data.compbio/01/01/2010/FoldWS/getResultResponse" message="tns:getResultResponse"/>
+      <fault message="tns:ResultNotAvailableException" name="ResultNotAvailableException" wsam:Action="http://msa.data.compbio/01/01/2010/FoldWS/getResult/Fault/ResultNotAvailableException"/>
+    </operation>
+    <operation name="fold">
+      <input wsam:Action="http://msa.data.compbio/01/01/2010/FoldWS/foldRequest" message="tns:fold"/>
+      <output wsam:Action="http://msa.data.compbio/01/01/2010/FoldWS/foldResponse" message="tns:foldResponse"/>
+      <fault message="tns:UnsupportedRuntimeException" name="UnsupportedRuntimeException" wsam:Action="http://msa.data.compbio/01/01/2010/FoldWS/fold/Fault/UnsupportedRuntimeException"/>
+      <fault message="tns:LimitExceededException" name="LimitExceededException" wsam:Action="http://msa.data.compbio/01/01/2010/FoldWS/fold/Fault/LimitExceededException"/>
+      <fault message="tns:JobSubmissionException" name="JobSubmissionException" wsam:Action="http://msa.data.compbio/01/01/2010/FoldWS/fold/Fault/JobSubmissionException"/>
+    </operation>
+    <operation name="presetFold">
+      <input wsam:Action="http://msa.data.compbio/01/01/2010/FoldWS/presetFoldRequest" message="tns:presetFold"/>
+      <output wsam:Action="http://msa.data.compbio/01/01/2010/FoldWS/presetFoldResponse" message="tns:presetFoldResponse"/>
+      <fault message="tns:UnsupportedRuntimeException" name="UnsupportedRuntimeException" wsam:Action="http://msa.data.compbio/01/01/2010/FoldWS/presetFold/Fault/UnsupportedRuntimeException"/>
+      <fault message="tns:LimitExceededException" name="LimitExceededException" wsam:Action="http://msa.data.compbio/01/01/2010/FoldWS/presetFold/Fault/LimitExceededException"/>
+      <fault message="tns:JobSubmissionException" name="JobSubmissionException" wsam:Action="http://msa.data.compbio/01/01/2010/FoldWS/presetFold/Fault/JobSubmissionException"/>
+      <fault message="tns:WrongParameterException" name="WrongParameterException" wsam:Action="http://msa.data.compbio/01/01/2010/FoldWS/presetFold/Fault/WrongParameterException"/>
+    </operation>
+    <operation name="customFold">
+      <input wsam:Action="http://msa.data.compbio/01/01/2010/FoldWS/customFoldRequest" message="tns:customFold"/>
+      <output wsam:Action="http://msa.data.compbio/01/01/2010/FoldWS/customFoldResponse" message="tns:customFoldResponse"/>
+      <fault message="tns:UnsupportedRuntimeException" name="UnsupportedRuntimeException" wsam:Action="http://msa.data.compbio/01/01/2010/FoldWS/customFold/Fault/UnsupportedRuntimeException"/>
+      <fault message="tns:LimitExceededException" name="LimitExceededException" wsam:Action="http://msa.data.compbio/01/01/2010/FoldWS/customFold/Fault/LimitExceededException"/>
+      <fault message="tns:JobSubmissionException" name="JobSubmissionException" wsam:Action="http://msa.data.compbio/01/01/2010/FoldWS/customFold/Fault/JobSubmissionException"/>
+      <fault message="tns:WrongParameterException" name="WrongParameterException" wsam:Action="http://msa.data.compbio/01/01/2010/FoldWS/customFold/Fault/WrongParameterException"/>
+    </operation>
+    <operation name="pullExecStatistics">
+      <input wsam:Action="http://msa.data.compbio/01/01/2010/FoldWS/pullExecStatisticsRequest" message="tns:pullExecStatistics"/>
+      <output wsam:Action="http://msa.data.compbio/01/01/2010/FoldWS/pullExecStatisticsResponse" message="tns:pullExecStatisticsResponse"/>
+    </operation>
+    <operation name="getJobStatus">
+      <input wsam:Action="http://msa.data.compbio/01/01/2010/FoldWS/getJobStatusRequest" message="tns:getJobStatus"/>
+      <output wsam:Action="http://msa.data.compbio/01/01/2010/FoldWS/getJobStatusResponse" message="tns:getJobStatusResponse"/>
+    </operation>
+    <operation name="cancelJob">
+      <input wsam:Action="http://msa.data.compbio/01/01/2010/FoldWS/cancelJobRequest" message="tns:cancelJob"/>
+      <output wsam:Action="http://msa.data.compbio/01/01/2010/FoldWS/cancelJobResponse" message="tns:cancelJobResponse"/>
+    </operation>
+    <operation name="getRunnerOptions">
+      <input wsam:Action="http://msa.data.compbio/01/01/2010/FoldWS/getRunnerOptionsRequest" message="tns:getRunnerOptions"/>
+      <output wsam:Action="http://msa.data.compbio/01/01/2010/FoldWS/getRunnerOptionsResponse" message="tns:getRunnerOptionsResponse"/>
+    </operation>
+    <operation name="getLimit">
+      <input wsam:Action="http://msa.data.compbio/01/01/2010/FoldWS/getLimitRequest" message="tns:getLimit"/>
+      <output wsam:Action="http://msa.data.compbio/01/01/2010/FoldWS/getLimitResponse" message="tns:getLimitResponse"/>
+    </operation>
+    <operation name="getPresets">
+      <input wsam:Action="http://msa.data.compbio/01/01/2010/FoldWS/getPresetsRequest" message="tns:getPresets"/>
+      <output wsam:Action="http://msa.data.compbio/01/01/2010/FoldWS/getPresetsResponse" message="tns:getPresetsResponse"/>
+    </operation>
+    <operation name="getLimits">
+      <input wsam:Action="http://msa.data.compbio/01/01/2010/FoldWS/getLimitsRequest" message="tns:getLimits"/>
+      <output wsam:Action="http://msa.data.compbio/01/01/2010/FoldWS/getLimitsResponse" message="tns:getLimitsResponse"/>
+    </operation>
+  </portType>
+  <binding name="RNAalifoldWSPortBinding" type="tns:FoldWS">
+    <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/>
+    <operation name="getResult">
+      <soap:operation soapAction=""/>
+      <input>
+        <soap:body use="literal"/>
+      </input>
+      <output>
+        <soap:body use="literal"/>
+      </output>
+      <fault name="ResultNotAvailableException">
+        <soap:fault name="ResultNotAvailableException" use="literal"/>
+      </fault>
+    </operation>
+    <operation name="fold">
+      <soap:operation soapAction=""/>
+      <input>
+        <soap:body use="literal"/>
+      </input>
+      <output>
+        <soap:body use="literal"/>
+      </output>
+      <fault name="UnsupportedRuntimeException">
+        <soap:fault name="UnsupportedRuntimeException" use="literal"/>
+      </fault>
+      <fault name="LimitExceededException">
+        <soap:fault name="LimitExceededException" use="literal"/>
+      </fault>
+      <fault name="JobSubmissionException">
+        <soap:fault name="JobSubmissionException" use="literal"/>
+      </fault>
+    </operation>
+    <operation name="presetFold">
+      <soap:operation soapAction=""/>
+      <input>
+        <soap:body use="literal"/>
+      </input>
+      <output>
+        <soap:body use="literal"/>
+      </output>
+      <fault name="UnsupportedRuntimeException">
+        <soap:fault name="UnsupportedRuntimeException" use="literal"/>
+      </fault>
+      <fault name="LimitExceededException">
+        <soap:fault name="LimitExceededException" use="literal"/>
+      </fault>
+      <fault name="JobSubmissionException">
+        <soap:fault name="JobSubmissionException" use="literal"/>
+      </fault>
+      <fault name="WrongParameterException">
+        <soap:fault name="WrongParameterException" use="literal"/>
+      </fault>
+    </operation>
+    <operation name="customFold">
+      <soap:operation soapAction=""/>
+      <input>
+        <soap:body use="literal"/>
+      </input>
+      <output>
+        <soap:body use="literal"/>
+      </output>
+      <fault name="UnsupportedRuntimeException">
+        <soap:fault name="UnsupportedRuntimeException" use="literal"/>
+      </fault>
+      <fault name="LimitExceededException">
+        <soap:fault name="LimitExceededException" use="literal"/>
+      </fault>
+      <fault name="JobSubmissionException">
+        <soap:fault name="JobSubmissionException" use="literal"/>
+      </fault>
+      <fault name="WrongParameterException">
+        <soap:fault name="WrongParameterException" use="literal"/>
+      </fault>
+    </operation>
+    <operation name="pullExecStatistics">
+      <soap:operation soapAction=""/>
+      <input>
+        <soap:body use="literal"/>
+      </input>
+      <output>
+        <soap:body use="literal"/>
+      </output>
+    </operation>
+    <operation name="getJobStatus">
+      <soap:operation soapAction=""/>
+      <input>
+        <soap:body use="literal"/>
+      </input>
+      <output>
+        <soap:body use="literal"/>
+      </output>
+    </operation>
+    <operation name="cancelJob">
+      <soap:operation soapAction=""/>
+      <input>
+        <soap:body use="literal"/>
+      </input>
+      <output>
+        <soap:body use="literal"/>
+      </output>
+    </operation>
+    <operation name="getRunnerOptions">
+      <soap:operation soapAction=""/>
+      <input>
+        <soap:body use="literal"/>
+      </input>
+      <output>
+        <soap:body use="literal"/>
+      </output>
+    </operation>
+    <operation name="getLimit">
+      <soap:operation soapAction=""/>
+      <input>
+        <soap:body use="literal"/>
+      </input>
+      <output>
+        <soap:body use="literal"/>
+      </output>
+    </operation>
+    <operation name="getPresets">
+      <soap:operation soapAction=""/>
+      <input>
+        <soap:body use="literal"/>
+      </input>
+      <output>
+        <soap:body use="literal"/>
+      </output>
+    </operation>
+    <operation name="getLimits">
+      <soap:operation soapAction=""/>
+      <input>
+        <soap:body use="literal"/>
+      </input>
+      <output>
+        <soap:body use="literal"/>
+      </output>
+    </operation>
+  </binding>
+  <service name="RNAalifoldWS">
+    <port name="RNAalifoldWSPort" binding="tns:RNAalifoldWSPortBinding">
+      <soap:address location="REPLACE_WITH_ACTUAL_URL"/>
+    </port>
+  </service>
+</definitions>
+
diff --git a/webservices/compbio/ws/server/resource/RNAalifoldWS_schema1.xsd b/webservices/compbio/ws/server/resource/RNAalifoldWS_schema1.xsd
new file mode 100644 (file)
index 0000000..5c6f88d
--- /dev/null
@@ -0,0 +1,372 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<xs:schema version="1.0" targetNamespace="http://msa.data.compbio/01/01/2010/" xmlns:tns="http://msa.data.compbio/01/01/2010/" xmlns:xs="http://www.w3.org/2001/XMLSchema">
+
+  <xs:element name="JobSubmissionException" type="tns:JobSubmissionException"/>
+
+  <xs:element name="LimitExceededException" type="tns:LimitExceededException"/>
+
+  <xs:element name="ResultNotAvailableException" type="tns:ResultNotAvailableException"/>
+
+  <xs:element name="UnsupportedRuntimeException" type="tns:UnsupportedRuntimeException"/>
+
+  <xs:element name="WrongParameterException" type="tns:WrongParameterException"/>
+
+  <xs:element name="cancelJob" type="tns:cancelJob"/>
+
+  <xs:element name="cancelJobResponse" type="tns:cancelJobResponse"/>
+
+  <xs:element name="customFold" type="tns:customFold"/>
+
+  <xs:element name="customFoldResponse" type="tns:customFoldResponse"/>
+
+  <xs:element name="fold" type="tns:fold"/>
+
+  <xs:element name="foldResponse" type="tns:foldResponse"/>
+
+  <xs:element name="getJobStatus" type="tns:getJobStatus"/>
+
+  <xs:element name="getJobStatusResponse" type="tns:getJobStatusResponse"/>
+
+  <xs:element name="getLimit" type="tns:getLimit"/>
+
+  <xs:element name="getLimitResponse" type="tns:getLimitResponse"/>
+
+  <xs:element name="getLimits" type="tns:getLimits"/>
+
+  <xs:element name="getLimitsResponse" type="tns:getLimitsResponse"/>
+
+  <xs:element name="getPresets" type="tns:getPresets"/>
+
+  <xs:element name="getPresetsResponse" type="tns:getPresetsResponse"/>
+
+  <xs:element name="getResult" type="tns:getResult"/>
+
+  <xs:element name="getResultResponse" type="tns:getResultResponse"/>
+
+  <xs:element name="getRunnerOptions" type="tns:getRunnerOptions"/>
+
+  <xs:element name="getRunnerOptionsResponse" type="tns:getRunnerOptionsResponse"/>
+
+  <xs:element name="limits" type="tns:limitsManager"/>
+
+  <xs:element name="presetFold" type="tns:presetFold"/>
+
+  <xs:element name="presetFoldResponse" type="tns:presetFoldResponse"/>
+
+  <xs:element name="presets" type="tns:presetManager"/>
+
+  <xs:element name="pullExecStatistics" type="tns:pullExecStatistics"/>
+
+  <xs:element name="pullExecStatisticsResponse" type="tns:pullExecStatisticsResponse"/>
+
+  <xs:element name="runnerConfig" type="tns:runnerConfig"/>
+
+  <xs:complexType name="getJobStatus">
+    <xs:sequence>
+      <xs:element name="jobId" type="xs:string" minOccurs="0"/>
+    </xs:sequence>
+  </xs:complexType>
+
+  <xs:complexType name="getJobStatusResponse">
+    <xs:sequence>
+      <xs:element name="return" type="tns:jobStatus" minOccurs="0"/>
+    </xs:sequence>
+  </xs:complexType>
+
+  <xs:complexType name="getRunnerOptions">
+    <xs:sequence/>
+  </xs:complexType>
+
+  <xs:complexType name="getRunnerOptionsResponse">
+    <xs:sequence>
+      <xs:element name="return" type="tns:runnerConfig" minOccurs="0"/>
+    </xs:sequence>
+  </xs:complexType>
+
+  <xs:complexType name="runnerConfig">
+    <xs:sequence>
+      <xs:element name="options" type="tns:option" nillable="true" minOccurs="0" maxOccurs="unbounded"/>
+      <xs:element name="parameters" type="tns:parameter" nillable="true" minOccurs="0" maxOccurs="unbounded"/>
+      <xs:element name="prmSeparator" type="xs:string" minOccurs="0"/>
+      <xs:element name="runnerClassName" type="xs:string"/>
+    </xs:sequence>
+  </xs:complexType>
+
+  <xs:complexType name="option">
+    <xs:sequence>
+      <xs:element name="description" type="xs:string"/>
+      <xs:element name="optionNames" type="xs:string" maxOccurs="unbounded"/>
+      <xs:element name="name" type="xs:string"/>
+      <xs:element name="furtherDetails" type="xs:anyURI" minOccurs="0"/>
+      <xs:element name="defaultValue" type="xs:string" minOccurs="0"/>
+    </xs:sequence>
+    <xs:attribute name="isRequired" type="xs:boolean" use="required"/>
+  </xs:complexType>
+
+  <xs:complexType name="parameter">
+    <xs:complexContent>
+      <xs:extension base="tns:option">
+        <xs:sequence>
+          <xs:element name="possibleValues" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
+          <xs:element name="validValue" type="tns:valueConstrain" minOccurs="0"/>
+        </xs:sequence>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+
+  <xs:complexType name="valueConstrain">
+    <xs:sequence>
+      <xs:element name="type" type="tns:type"/>
+      <xs:element name="max" type="xs:string" minOccurs="0"/>
+      <xs:element name="min" type="xs:string" minOccurs="0"/>
+    </xs:sequence>
+  </xs:complexType>
+
+  <xs:complexType name="fold">
+    <xs:sequence>
+      <xs:element name="alignment" type="tns:alignment" minOccurs="0"/>
+    </xs:sequence>
+  </xs:complexType>
+
+  <xs:complexType name="alignment" final="extension restriction">
+    <xs:sequence>
+      <xs:element name="metadata" type="tns:alignmentMetadata" minOccurs="0"/>
+      <xs:element name="sequences" type="tns:fastaSequence" nillable="true" minOccurs="0" maxOccurs="unbounded"/>
+    </xs:sequence>
+  </xs:complexType>
+
+  <xs:complexType name="alignmentMetadata">
+    <xs:sequence>
+      <xs:element name="program" type="tns:program" minOccurs="0"/>
+      <xs:element name="gapchar" type="xs:unsignedShort"/>
+    </xs:sequence>
+  </xs:complexType>
+
+  <xs:complexType name="fastaSequence">
+    <xs:sequence>
+      <xs:element name="id" type="xs:string" minOccurs="0"/>
+      <xs:element name="sequence" type="xs:string" minOccurs="0"/>
+    </xs:sequence>
+  </xs:complexType>
+
+  <xs:complexType name="foldResponse">
+    <xs:sequence>
+      <xs:element name="return" type="xs:string" minOccurs="0"/>
+    </xs:sequence>
+  </xs:complexType>
+
+  <xs:complexType name="UnsupportedRuntimeException">
+    <xs:sequence>
+      <xs:element name="message" type="xs:string" minOccurs="0"/>
+    </xs:sequence>
+  </xs:complexType>
+
+  <xs:complexType name="LimitExceededException">
+    <xs:sequence>
+      <xs:element name="actualNumberofSequences" type="xs:int"/>
+      <xs:element name="message" type="xs:string" minOccurs="0"/>
+      <xs:element name="numberOfSequencesAllowed" type="xs:int"/>
+      <xs:element name="sequenceLenghtActual" type="xs:int"/>
+      <xs:element name="sequenceLenghtAllowed" type="xs:int"/>
+    </xs:sequence>
+  </xs:complexType>
+
+  <xs:complexType name="JobSubmissionException">
+    <xs:sequence>
+      <xs:element name="message" type="xs:string" minOccurs="0"/>
+    </xs:sequence>
+  </xs:complexType>
+
+  <xs:complexType name="getResult">
+    <xs:sequence>
+      <xs:element name="jobId" type="xs:string" minOccurs="0"/>
+    </xs:sequence>
+  </xs:complexType>
+
+  <xs:complexType name="getResultResponse">
+    <xs:sequence>
+      <xs:element name="return" type="tns:rnAstruct" minOccurs="0"/>
+    </xs:sequence>
+  </xs:complexType>
+
+  <xs:complexType name="rnAstruct" final="extension restriction">
+    <xs:sequence>
+      <xs:element name="sequence" type="xs:string" minOccurs="0"/>
+      <xs:element name="structure" type="xs:string" minOccurs="0"/>
+      <xs:element name="minEnergy" type="xs:float" minOccurs="0"/>
+      <xs:element name="energySum1" type="xs:float" minOccurs="0"/>
+      <xs:element name="energySum2" type="xs:float" minOccurs="0"/>
+    </xs:sequence>
+  </xs:complexType>
+
+  <xs:complexType name="ResultNotAvailableException">
+    <xs:sequence>
+      <xs:element name="message" type="xs:string" minOccurs="0"/>
+    </xs:sequence>
+  </xs:complexType>
+
+  <xs:complexType name="customFold">
+    <xs:sequence>
+      <xs:element name="alignment" type="tns:alignment" minOccurs="0"/>
+      <xs:element name="options" type="tns:option" minOccurs="0" maxOccurs="unbounded"/>
+    </xs:sequence>
+  </xs:complexType>
+
+  <xs:complexType name="customFoldResponse">
+    <xs:sequence>
+      <xs:element name="return" type="xs:string" minOccurs="0"/>
+    </xs:sequence>
+  </xs:complexType>
+
+  <xs:complexType name="WrongParameterException">
+    <xs:sequence>
+      <xs:element name="message" type="xs:string" minOccurs="0"/>
+    </xs:sequence>
+  </xs:complexType>
+
+  <xs:complexType name="getLimits">
+    <xs:sequence/>
+  </xs:complexType>
+
+  <xs:complexType name="getLimitsResponse">
+    <xs:sequence>
+      <xs:element name="return" type="tns:limitsManager" minOccurs="0"/>
+    </xs:sequence>
+  </xs:complexType>
+
+  <xs:complexType name="limitsManager">
+    <xs:sequence>
+      <xs:element name="runnerClassName" type="xs:string" minOccurs="0"/>
+      <xs:element name="limit" type="tns:limit" nillable="true" minOccurs="0" maxOccurs="unbounded"/>
+    </xs:sequence>
+  </xs:complexType>
+
+  <xs:complexType name="limit">
+    <xs:sequence>
+      <xs:element name="preset" type="xs:string" minOccurs="0"/>
+      <xs:element name="seqNumber" type="xs:int"/>
+      <xs:element name="seqLength" type="xs:int"/>
+    </xs:sequence>
+    <xs:attribute name="isDefault" type="xs:boolean" use="required"/>
+  </xs:complexType>
+
+  <xs:complexType name="getPresets">
+    <xs:sequence/>
+  </xs:complexType>
+
+  <xs:complexType name="getPresetsResponse">
+    <xs:sequence>
+      <xs:element name="return" type="tns:presetManager" minOccurs="0"/>
+    </xs:sequence>
+  </xs:complexType>
+
+  <xs:complexType name="presetManager">
+    <xs:sequence>
+      <xs:element name="runnerClassName" type="xs:string"/>
+      <xs:element name="preset" type="tns:preset" maxOccurs="unbounded"/>
+    </xs:sequence>
+  </xs:complexType>
+
+  <xs:complexType name="preset">
+    <xs:sequence>
+      <xs:element name="name" type="xs:string"/>
+      <xs:element name="description" type="xs:string" minOccurs="0"/>
+      <xs:element name="optlist" minOccurs="0">
+        <xs:complexType>
+          <xs:sequence>
+            <xs:element name="option" type="xs:string" maxOccurs="unbounded"/>
+          </xs:sequence>
+        </xs:complexType>
+      </xs:element>
+    </xs:sequence>
+  </xs:complexType>
+
+  <xs:complexType name="getLimit">
+    <xs:sequence>
+      <xs:element name="presetName" type="xs:string" minOccurs="0"/>
+    </xs:sequence>
+  </xs:complexType>
+
+  <xs:complexType name="getLimitResponse">
+    <xs:sequence>
+      <xs:element name="return" type="tns:limit" minOccurs="0"/>
+    </xs:sequence>
+  </xs:complexType>
+
+  <xs:complexType name="cancelJob">
+    <xs:sequence>
+      <xs:element name="jobId" type="xs:string" minOccurs="0"/>
+    </xs:sequence>
+  </xs:complexType>
+
+  <xs:complexType name="cancelJobResponse">
+    <xs:sequence>
+      <xs:element name="return" type="xs:boolean"/>
+    </xs:sequence>
+  </xs:complexType>
+
+  <xs:complexType name="pullExecStatistics">
+    <xs:sequence>
+      <xs:element name="jobId" type="xs:string" minOccurs="0"/>
+      <xs:element name="position" type="xs:long"/>
+    </xs:sequence>
+  </xs:complexType>
+
+  <xs:complexType name="pullExecStatisticsResponse">
+    <xs:sequence>
+      <xs:element name="return" type="tns:chunkHolder" minOccurs="0"/>
+    </xs:sequence>
+  </xs:complexType>
+
+  <xs:complexType name="chunkHolder">
+    <xs:sequence>
+      <xs:element name="chunk" type="xs:string" minOccurs="0"/>
+      <xs:element name="position" type="xs:long"/>
+    </xs:sequence>
+  </xs:complexType>
+
+  <xs:complexType name="presetFold">
+    <xs:sequence>
+      <xs:element name="alignment" type="tns:alignment" minOccurs="0"/>
+      <xs:element name="preset" type="tns:preset" minOccurs="0"/>
+    </xs:sequence>
+  </xs:complexType>
+
+  <xs:complexType name="presetFoldResponse">
+    <xs:sequence>
+      <xs:element name="return" type="xs:string" minOccurs="0"/>
+    </xs:sequence>
+  </xs:complexType>
+
+  <xs:simpleType name="jobStatus">
+    <xs:restriction base="xs:string">
+      <xs:enumeration value="PENDING"/>
+      <xs:enumeration value="RUNNING"/>
+      <xs:enumeration value="CANCELLED"/>
+      <xs:enumeration value="FINISHED"/>
+      <xs:enumeration value="FAILED"/>
+      <xs:enumeration value="UNDEFINED"/>
+      <xs:enumeration value="STARTED"/>
+      <xs:enumeration value="SUBMITTED"/>
+      <xs:enumeration value="COLLECTED"/>
+    </xs:restriction>
+  </xs:simpleType>
+
+  <xs:simpleType name="type">
+    <xs:restriction base="xs:string">
+      <xs:enumeration value="Integer"/>
+      <xs:enumeration value="Float"/>
+    </xs:restriction>
+  </xs:simpleType>
+
+  <xs:simpleType name="program">
+    <xs:restriction base="xs:string">
+      <xs:enumeration value="CLUSTAL"/>
+      <xs:enumeration value="MAFFT"/>
+      <xs:enumeration value="MUSCLE"/>
+      <xs:enumeration value="Tcoffee"/>
+      <xs:enumeration value="Probcons"/>
+    </xs:restriction>
+  </xs:simpleType>
+</xs:schema>
+