First try with MuscleWS
authorjprocter <Jim Procter>
Thu, 28 Apr 2005 15:46:32 +0000 (15:46 +0000)
committerjprocter <Jim Procter>
Thu, 28 Apr 2005 15:46:32 +0000 (15:46 +0000)
src/ext/vamsas/MuscleWS.java [new file with mode: 0755]
src/ext/vamsas/MuscleWSService.java [new file with mode: 0755]
src/ext/vamsas/MuscleWSServiceLocator.java [new file with mode: 0755]
src/ext/vamsas/MuscleWSSoapBindingStub.java [new file with mode: 0755]
src/jalview/ws/MsaWSClient.java [new file with mode: 0755]
src/jalview/ws/WSClientI.java [new file with mode: 0755]

diff --git a/src/ext/vamsas/MuscleWS.java b/src/ext/vamsas/MuscleWS.java
new file mode 100755 (executable)
index 0000000..26e1f83
--- /dev/null
@@ -0,0 +1,15 @@
+/**
+ * MuscleWS.java
+ *
+ * This file was auto-generated from WSDL
+ * by the Apache Axis 1.2RC2 Nov 16, 2004 (12:19:44 EST) WSDL2Java emitter.
+ */
+
+package ext.vamsas;
+
+public interface MuscleWS extends java.rmi.Remote {
+    public vamsas.objects.simple.WsJobId align(vamsas.objects.simple.SequenceSet seqSet) throws java.rmi.RemoteException;
+    public vamsas.objects.simple.Alignment getalign(java.lang.String job_id) throws java.rmi.RemoteException;
+    public vamsas.objects.simple.MsaResult getResult(java.lang.String job_id) throws java.rmi.RemoteException;
+    public vamsas.objects.simple.WsJobId cancel(java.lang.String jobId) throws java.rmi.RemoteException;
+}
diff --git a/src/ext/vamsas/MuscleWSService.java b/src/ext/vamsas/MuscleWSService.java
new file mode 100755 (executable)
index 0000000..04026a3
--- /dev/null
@@ -0,0 +1,16 @@
+/**
+ * MuscleWSService.java
+ *
+ * This file was auto-generated from WSDL
+ * by the Apache Axis 1.2RC2 Nov 16, 2004 (12:19:44 EST) WSDL2Java emitter.
+ */
+
+package ext.vamsas;
+
+public interface MuscleWSService extends javax.xml.rpc.Service {
+    public java.lang.String getMuscleWSAddress();
+
+    public ext.vamsas.MuscleWS getMuscleWS() throws javax.xml.rpc.ServiceException;
+
+    public ext.vamsas.MuscleWS getMuscleWS(java.net.URL portAddress) throws javax.xml.rpc.ServiceException;
+}
diff --git a/src/ext/vamsas/MuscleWSServiceLocator.java b/src/ext/vamsas/MuscleWSServiceLocator.java
new file mode 100755 (executable)
index 0000000..03f10d0
--- /dev/null
@@ -0,0 +1,136 @@
+/**
+ * MuscleWSServiceLocator.java
+ *
+ * This file was auto-generated from WSDL
+ * by the Apache Axis 1.2RC2 Nov 16, 2004 (12:19:44 EST) WSDL2Java emitter.
+ */
+
+package ext.vamsas;
+
+public class MuscleWSServiceLocator extends org.apache.axis.client.Service implements ext.vamsas.MuscleWSService {
+
+    public MuscleWSServiceLocator() {
+    }
+
+
+    public MuscleWSServiceLocator(org.apache.axis.EngineConfiguration config) {
+        super(config);
+    }
+
+    // Use to get a proxy class for MuscleWS
+    private java.lang.String MuscleWS_address = "http://anaplog.compbio.dundee.ac.uk:8080/axis/services/MuscleWS";
+
+    public java.lang.String getMuscleWSAddress() {
+        return MuscleWS_address;
+    }
+
+    // The WSDD service name defaults to the port name.
+    private java.lang.String MuscleWSWSDDServiceName = "MuscleWS";
+
+    public java.lang.String getMuscleWSWSDDServiceName() {
+        return MuscleWSWSDDServiceName;
+    }
+
+    public void setMuscleWSWSDDServiceName(java.lang.String name) {
+        MuscleWSWSDDServiceName = name;
+    }
+
+    public ext.vamsas.MuscleWS getMuscleWS() throws javax.xml.rpc.ServiceException {
+       java.net.URL endpoint;
+        try {
+            endpoint = new java.net.URL(MuscleWS_address);
+        }
+        catch (java.net.MalformedURLException e) {
+            throw new javax.xml.rpc.ServiceException(e);
+        }
+        return getMuscleWS(endpoint);
+    }
+
+    public ext.vamsas.MuscleWS getMuscleWS(java.net.URL portAddress) throws javax.xml.rpc.ServiceException {
+        try {
+            ext.vamsas.MuscleWSSoapBindingStub _stub = new ext.vamsas.MuscleWSSoapBindingStub(portAddress, this);
+            _stub.setPortName(getMuscleWSWSDDServiceName());
+            return _stub;
+        }
+        catch (org.apache.axis.AxisFault e) {
+            return null;
+        }
+    }
+
+    public void setMuscleWSEndpointAddress(java.lang.String address) {
+        MuscleWS_address = address;
+    }
+
+    /**
+     * For the given interface, get the stub implementation.
+     * If this service has no port for the given interface,
+     * then ServiceException is thrown.
+     */
+    public java.rmi.Remote getPort(Class serviceEndpointInterface) throws javax.xml.rpc.ServiceException {
+        try {
+            if (ext.vamsas.MuscleWS.class.isAssignableFrom(serviceEndpointInterface)) {
+                ext.vamsas.MuscleWSSoapBindingStub _stub = new ext.vamsas.MuscleWSSoapBindingStub(new java.net.URL(MuscleWS_address), this);
+                _stub.setPortName(getMuscleWSWSDDServiceName());
+                return _stub;
+            }
+        }
+        catch (java.lang.Throwable t) {
+            throw new javax.xml.rpc.ServiceException(t);
+        }
+        throw new javax.xml.rpc.ServiceException("There is no stub implementation for the interface:  " + (serviceEndpointInterface == null ? "null" : serviceEndpointInterface.getName()));
+    }
+
+    /**
+     * For the given interface, get the stub implementation.
+     * If this service has no port for the given interface,
+     * then ServiceException is thrown.
+     */
+    public java.rmi.Remote getPort(javax.xml.namespace.QName portName, Class serviceEndpointInterface) throws javax.xml.rpc.ServiceException {
+        if (portName == null) {
+            return getPort(serviceEndpointInterface);
+        }
+        java.lang.String inputPortName = portName.getLocalPart();
+        if ("MuscleWS".equals(inputPortName)) {
+            return getMuscleWS();
+        }
+        else  {
+            java.rmi.Remote _stub = getPort(serviceEndpointInterface);
+            ((org.apache.axis.client.Stub) _stub).setPortName(portName);
+            return _stub;
+        }
+    }
+
+    public javax.xml.namespace.QName getServiceName() {
+        return new javax.xml.namespace.QName("vamsas", "MuscleWSService");
+    }
+
+    private java.util.HashSet ports = null;
+
+    public java.util.Iterator getPorts() {
+        if (ports == null) {
+            ports = new java.util.HashSet();
+            ports.add(new javax.xml.namespace.QName("vamsas", "MuscleWS"));
+        }
+        return ports.iterator();
+    }
+
+    /**
+    * Set the endpoint address for the specified port name.
+    */
+    public void setEndpointAddress(java.lang.String portName, java.lang.String address) throws javax.xml.rpc.ServiceException {
+        if ("MuscleWS".equals(portName)) {
+            setMuscleWSEndpointAddress(address);
+        }
+        else { // Unknown Port Name
+            throw new javax.xml.rpc.ServiceException(" Cannot set Endpoint Address for Unknown Port" + portName);
+        }
+    }
+
+    /**
+    * Set the endpoint address for the specified port name.
+    */
+    public void setEndpointAddress(javax.xml.namespace.QName portName, java.lang.String address) throws javax.xml.rpc.ServiceException {
+        setEndpointAddress(portName.getLocalPart(), address);
+    }
+
+}
diff --git a/src/ext/vamsas/MuscleWSSoapBindingStub.java b/src/ext/vamsas/MuscleWSSoapBindingStub.java
new file mode 100755 (executable)
index 0000000..52914a5
--- /dev/null
@@ -0,0 +1,327 @@
+/**
+ * MuscleWSSoapBindingStub.java
+ *
+ * This file was auto-generated from WSDL
+ * by the Apache Axis 1.2RC2 Nov 16, 2004 (12:19:44 EST) WSDL2Java emitter.
+ */
+
+package ext.vamsas;
+
+public class MuscleWSSoapBindingStub extends org.apache.axis.client.Stub implements ext.vamsas.MuscleWS {
+    private java.util.Vector cachedSerClasses = new java.util.Vector();
+    private java.util.Vector cachedSerQNames = new java.util.Vector();
+    private java.util.Vector cachedSerFactories = new java.util.Vector();
+    private java.util.Vector cachedDeserFactories = new java.util.Vector();
+
+    static org.apache.axis.description.OperationDesc [] _operations;
+
+    static {
+        _operations = new org.apache.axis.description.OperationDesc[4];
+        _initOperationDesc1();
+    }
+
+    private static void _initOperationDesc1(){
+        org.apache.axis.description.OperationDesc oper;
+        oper = new org.apache.axis.description.OperationDesc();
+        oper.setName("align");
+        oper.addParameter(new javax.xml.namespace.QName("", "seqSet"), new javax.xml.namespace.QName("simple.objects.vamsas", "SequenceSet"), vamsas.objects.simple.SequenceSet.class, org.apache.axis.description.ParameterDesc.IN, false, false);
+        oper.setReturnType(new javax.xml.namespace.QName("simple.objects.vamsas", "WsJobId"));
+        oper.setReturnClass(vamsas.objects.simple.WsJobId.class);
+        oper.setReturnQName(new javax.xml.namespace.QName("", "alignReturn"));
+        oper.setStyle(org.apache.axis.constants.Style.RPC);
+        oper.setUse(org.apache.axis.constants.Use.ENCODED);
+        _operations[0] = oper;
+
+        oper = new org.apache.axis.description.OperationDesc();
+        oper.setName("getalign");
+        oper.addParameter(new javax.xml.namespace.QName("", "job_id"), new javax.xml.namespace.QName("http://www.w3.org/2001/XMLSchema", "string"), java.lang.String.class, org.apache.axis.description.ParameterDesc.IN, false, false);
+        oper.setReturnType(new javax.xml.namespace.QName("simple.objects.vamsas", "Alignment"));
+        oper.setReturnClass(vamsas.objects.simple.Alignment.class);
+        oper.setReturnQName(new javax.xml.namespace.QName("", "getalignReturn"));
+        oper.setStyle(org.apache.axis.constants.Style.RPC);
+        oper.setUse(org.apache.axis.constants.Use.ENCODED);
+        _operations[1] = oper;
+
+        oper = new org.apache.axis.description.OperationDesc();
+        oper.setName("getResult");
+        oper.addParameter(new javax.xml.namespace.QName("", "job_id"), new javax.xml.namespace.QName("http://www.w3.org/2001/XMLSchema", "string"), java.lang.String.class, org.apache.axis.description.ParameterDesc.IN, false, false);
+        oper.setReturnType(new javax.xml.namespace.QName("simple.objects.vamsas", "MsaResult"));
+        oper.setReturnClass(vamsas.objects.simple.MsaResult.class);
+        oper.setReturnQName(new javax.xml.namespace.QName("", "getResultReturn"));
+        oper.setStyle(org.apache.axis.constants.Style.RPC);
+        oper.setUse(org.apache.axis.constants.Use.ENCODED);
+        _operations[2] = oper;
+
+        oper = new org.apache.axis.description.OperationDesc();
+        oper.setName("cancel");
+        oper.addParameter(new javax.xml.namespace.QName("", "jobId"), new javax.xml.namespace.QName("http://www.w3.org/2001/XMLSchema", "string"), java.lang.String.class, org.apache.axis.description.ParameterDesc.IN, false, false);
+        oper.setReturnType(new javax.xml.namespace.QName("simple.objects.vamsas", "WsJobId"));
+        oper.setReturnClass(vamsas.objects.simple.WsJobId.class);
+        oper.setReturnQName(new javax.xml.namespace.QName("", "cancelReturn"));
+        oper.setStyle(org.apache.axis.constants.Style.RPC);
+        oper.setUse(org.apache.axis.constants.Use.ENCODED);
+        _operations[3] = oper;
+
+    }
+
+    public MuscleWSSoapBindingStub() throws org.apache.axis.AxisFault {
+         this(null);
+    }
+
+    public MuscleWSSoapBindingStub(java.net.URL endpointURL, javax.xml.rpc.Service service) throws org.apache.axis.AxisFault {
+         this(service);
+         super.cachedEndpoint = endpointURL;
+    }
+
+    public MuscleWSSoapBindingStub(javax.xml.rpc.Service service) throws org.apache.axis.AxisFault {
+        if (service == null) {
+            super.service = new org.apache.axis.client.Service();
+        } else {
+            super.service = service;
+        }
+            java.lang.Class cls;
+            javax.xml.namespace.QName qName;
+            java.lang.Class beansf = org.apache.axis.encoding.ser.BeanSerializerFactory.class;
+            java.lang.Class beandf = org.apache.axis.encoding.ser.BeanDeserializerFactory.class;
+            java.lang.Class enumsf = org.apache.axis.encoding.ser.EnumSerializerFactory.class;
+            java.lang.Class enumdf = org.apache.axis.encoding.ser.EnumDeserializerFactory.class;
+            java.lang.Class arraysf = org.apache.axis.encoding.ser.ArraySerializerFactory.class;
+            java.lang.Class arraydf = org.apache.axis.encoding.ser.ArrayDeserializerFactory.class;
+            java.lang.Class simplesf = org.apache.axis.encoding.ser.SimpleSerializerFactory.class;
+            java.lang.Class simpledf = org.apache.axis.encoding.ser.SimpleDeserializerFactory.class;
+            java.lang.Class simplelistsf = org.apache.axis.encoding.ser.SimpleListSerializerFactory.class;
+            java.lang.Class simplelistdf = org.apache.axis.encoding.ser.SimpleListDeserializerFactory.class;
+            qName = new javax.xml.namespace.QName("simple.objects.vamsas", "Sequence");
+            cachedSerQNames.add(qName);
+            cls = vamsas.objects.simple.Sequence.class;
+            cachedSerClasses.add(cls);
+            cachedSerFactories.add(beansf);
+            cachedDeserFactories.add(beandf);
+
+            qName = new javax.xml.namespace.QName("vamsas", "ArrayOf_tns1_Sequence");
+            cachedSerQNames.add(qName);
+            cls = vamsas.objects.simple.Sequence[].class;
+            cachedSerClasses.add(cls);
+            cachedSerFactories.add(arraysf);
+            cachedDeserFactories.add(arraydf);
+
+            qName = new javax.xml.namespace.QName("simple.objects.vamsas", "MsaResult");
+            cachedSerQNames.add(qName);
+            cls = vamsas.objects.simple.MsaResult.class;
+            cachedSerClasses.add(cls);
+            cachedSerFactories.add(beansf);
+            cachedDeserFactories.add(beandf);
+
+            qName = new javax.xml.namespace.QName("simple.objects.vamsas", "SequenceSet");
+            cachedSerQNames.add(qName);
+            cls = vamsas.objects.simple.SequenceSet.class;
+            cachedSerClasses.add(cls);
+            cachedSerFactories.add(beansf);
+            cachedDeserFactories.add(beandf);
+
+            qName = new javax.xml.namespace.QName("http://simple.objects.vamsas", "Object");
+            cachedSerQNames.add(qName);
+            cls = vamsas.objects.simple.Object.class;
+            cachedSerClasses.add(cls);
+            cachedSerFactories.add(beansf);
+            cachedDeserFactories.add(beandf);
+
+            qName = new javax.xml.namespace.QName("simple.objects.vamsas", "Alignment");
+            cachedSerQNames.add(qName);
+            cls = vamsas.objects.simple.Alignment.class;
+            cachedSerClasses.add(cls);
+            cachedSerFactories.add(beansf);
+            cachedDeserFactories.add(beandf);
+
+            qName = new javax.xml.namespace.QName("simple.objects.vamsas", "WsJobId");
+            cachedSerQNames.add(qName);
+            cls = vamsas.objects.simple.WsJobId.class;
+            cachedSerClasses.add(cls);
+            cachedSerFactories.add(beansf);
+            cachedDeserFactories.add(beandf);
+
+            qName = new javax.xml.namespace.QName("vamsas", "ArrayOf_xsd_string");
+            cachedSerQNames.add(qName);
+            cls = java.lang.String[].class;
+            cachedSerClasses.add(cls);
+            cachedSerFactories.add(arraysf);
+            cachedDeserFactories.add(arraydf);
+
+            qName = new javax.xml.namespace.QName("simple.objects.vamsas", "Result");
+            cachedSerQNames.add(qName);
+            cls = vamsas.objects.simple.Result.class;
+            cachedSerClasses.add(cls);
+            cachedSerFactories.add(beansf);
+            cachedDeserFactories.add(beandf);
+
+    }
+
+    protected org.apache.axis.client.Call createCall() throws java.rmi.RemoteException {
+        try {
+            org.apache.axis.client.Call _call =
+                    (org.apache.axis.client.Call) super.service.createCall();
+            if (super.maintainSessionSet) {
+                _call.setMaintainSession(super.maintainSession);
+            }
+            if (super.cachedUsername != null) {
+                _call.setUsername(super.cachedUsername);
+            }
+            if (super.cachedPassword != null) {
+                _call.setPassword(super.cachedPassword);
+            }
+            if (super.cachedEndpoint != null) {
+                _call.setTargetEndpointAddress(super.cachedEndpoint);
+            }
+            if (super.cachedTimeout != null) {
+                _call.setTimeout(super.cachedTimeout);
+            }
+            if (super.cachedPortName != null) {
+                _call.setPortName(super.cachedPortName);
+            }
+            java.util.Enumeration keys = super.cachedProperties.keys();
+            while (keys.hasMoreElements()) {
+                java.lang.String key = (java.lang.String) keys.nextElement();
+                _call.setProperty(key, super.cachedProperties.get(key));
+            }
+            // All the type mapping information is registered
+            // when the first call is made.
+            // The type mapping information is actually registered in
+            // the TypeMappingRegistry of the service, which
+            // is the reason why registration is only needed for the first call.
+            synchronized (this) {
+                if (firstCall()) {
+                    // must set encoding style before registering serializers
+                    _call.setSOAPVersion(org.apache.axis.soap.SOAPConstants.SOAP11_CONSTANTS);
+                    _call.setEncodingStyle(org.apache.axis.Constants.URI_SOAP11_ENC);
+                    for (int i = 0; i < cachedSerFactories.size(); ++i) {
+                        java.lang.Class cls = (java.lang.Class) cachedSerClasses.get(i);
+                        javax.xml.namespace.QName qName =
+                                (javax.xml.namespace.QName) cachedSerQNames.get(i);
+                        java.lang.Class sf = (java.lang.Class)
+                                 cachedSerFactories.get(i);
+                        java.lang.Class df = (java.lang.Class)
+                                 cachedDeserFactories.get(i);
+                        _call.registerTypeMapping(cls, qName, sf, df, false);
+                    }
+                }
+            }
+            return _call;
+        }
+        catch (java.lang.Throwable _t) {
+            throw new org.apache.axis.AxisFault("Failure trying to get the Call object", _t);
+        }
+    }
+
+    public vamsas.objects.simple.WsJobId align(vamsas.objects.simple.SequenceSet seqSet) throws java.rmi.RemoteException {
+        if (super.cachedEndpoint == null) {
+            throw new org.apache.axis.NoEndPointException();
+        }
+        org.apache.axis.client.Call _call = createCall();
+        _call.setOperation(_operations[0]);
+        _call.setUseSOAPAction(true);
+        _call.setSOAPActionURI("");
+        _call.setSOAPVersion(org.apache.axis.soap.SOAPConstants.SOAP11_CONSTANTS);
+        _call.setOperationName(new javax.xml.namespace.QName("vamsas", "align"));
+
+        setRequestHeaders(_call);
+        setAttachments(_call);
+        java.lang.Object _resp = _call.invoke(new java.lang.Object[] {seqSet});
+
+        if (_resp instanceof java.rmi.RemoteException) {
+            throw (java.rmi.RemoteException)_resp;
+        }
+        else {
+            extractAttachments(_call);
+            try {
+                return (vamsas.objects.simple.WsJobId) _resp;
+            } catch (java.lang.Exception _exception) {
+                return (vamsas.objects.simple.WsJobId) org.apache.axis.utils.JavaUtils.convert(_resp, vamsas.objects.simple.WsJobId.class);
+            }
+        }
+    }
+
+    public vamsas.objects.simple.Alignment getalign(java.lang.String job_id) throws java.rmi.RemoteException {
+        if (super.cachedEndpoint == null) {
+            throw new org.apache.axis.NoEndPointException();
+        }
+        org.apache.axis.client.Call _call = createCall();
+        _call.setOperation(_operations[1]);
+        _call.setUseSOAPAction(true);
+        _call.setSOAPActionURI("");
+        _call.setSOAPVersion(org.apache.axis.soap.SOAPConstants.SOAP11_CONSTANTS);
+        _call.setOperationName(new javax.xml.namespace.QName("vamsas", "getalign"));
+
+        setRequestHeaders(_call);
+        setAttachments(_call);
+        java.lang.Object _resp = _call.invoke(new java.lang.Object[] {job_id});
+
+        if (_resp instanceof java.rmi.RemoteException) {
+            throw (java.rmi.RemoteException)_resp;
+        }
+        else {
+            extractAttachments(_call);
+            try {
+                return (vamsas.objects.simple.Alignment) _resp;
+            } catch (java.lang.Exception _exception) {
+                return (vamsas.objects.simple.Alignment) org.apache.axis.utils.JavaUtils.convert(_resp, vamsas.objects.simple.Alignment.class);
+            }
+        }
+    }
+
+    public vamsas.objects.simple.MsaResult getResult(java.lang.String job_id) throws java.rmi.RemoteException {
+        if (super.cachedEndpoint == null) {
+            throw new org.apache.axis.NoEndPointException();
+        }
+        org.apache.axis.client.Call _call = createCall();
+        _call.setOperation(_operations[2]);
+        _call.setUseSOAPAction(true);
+        _call.setSOAPActionURI("");
+        _call.setSOAPVersion(org.apache.axis.soap.SOAPConstants.SOAP11_CONSTANTS);
+        _call.setOperationName(new javax.xml.namespace.QName("vamsas", "getResult"));
+
+        setRequestHeaders(_call);
+        setAttachments(_call);
+        java.lang.Object _resp = _call.invoke(new java.lang.Object[] {job_id});
+
+        if (_resp instanceof java.rmi.RemoteException) {
+            throw (java.rmi.RemoteException)_resp;
+        }
+        else {
+            extractAttachments(_call);
+            try {
+                return (vamsas.objects.simple.MsaResult) _resp;
+            } catch (java.lang.Exception _exception) {
+                return (vamsas.objects.simple.MsaResult) org.apache.axis.utils.JavaUtils.convert(_resp, vamsas.objects.simple.MsaResult.class);
+            }
+        }
+    }
+
+    public vamsas.objects.simple.WsJobId cancel(java.lang.String jobId) throws java.rmi.RemoteException {
+        if (super.cachedEndpoint == null) {
+            throw new org.apache.axis.NoEndPointException();
+        }
+        org.apache.axis.client.Call _call = createCall();
+        _call.setOperation(_operations[3]);
+        _call.setUseSOAPAction(true);
+        _call.setSOAPActionURI("");
+        _call.setSOAPVersion(org.apache.axis.soap.SOAPConstants.SOAP11_CONSTANTS);
+        _call.setOperationName(new javax.xml.namespace.QName("vamsas", "cancel"));
+
+        setRequestHeaders(_call);
+        setAttachments(_call);
+        java.lang.Object _resp = _call.invoke(new java.lang.Object[] {jobId});
+
+        if (_resp instanceof java.rmi.RemoteException) {
+            throw (java.rmi.RemoteException)_resp;
+        }
+        else {
+            extractAttachments(_call);
+            try {
+                return (vamsas.objects.simple.WsJobId) _resp;
+            } catch (java.lang.Exception _exception) {
+                return (vamsas.objects.simple.WsJobId) org.apache.axis.utils.JavaUtils.convert(_resp, vamsas.objects.simple.WsJobId.class);
+            }
+        }
+    }
+
+}
diff --git a/src/jalview/ws/MsaWSClient.java b/src/jalview/ws/MsaWSClient.java
new file mode 100755 (executable)
index 0000000..44ffa11
--- /dev/null
@@ -0,0 +1,233 @@
+package jalview.ws;\r
+\r
+import org.apache.axis.client.*;\r
+import javax.xml.namespace.QName;\r
+import java.util.*;\r
+import jalview.datamodel.*;\r
+import jalview.gui.*;\r
+import javax.swing.*;\r
+import java.util.*;\r
+import java.awt.*;\r
+import jalview.analysis.AlignSeq;\r
+import ext.vamsas.*;\r
+import vamsas.objects.*;\r
+\r
+public class MsaWSClient\r
+{\r
+  int jobsRunning = 0;\r
+  ext.vamsas.MuscleWS server;\r
+  WebserviceInfo wsInfo;\r
+  /**\r
+   * MsaWSClient\r
+   *\r
+   * @param msa SequenceI[]\r
+   */\r
+  public MsaWSClient(SequenceI[] msa)\r
+  {\r
+    wsInfo = new jalview.gui.WebserviceInfo("Muscle Alignment job",\r
+                                "Edgar, Robert C. (2004), MUSCLE: multiple sequence alignment with high accuracy and high throughput, Nucleic Acids Research 32(5), 1792-97.");\r
+\r
+\r
+    wsInfo.setProgressText("Job details\n");\r
+\r
+\r
+    MuscleWSServiceLocator loc = new MuscleWSServiceLocator(); // Default\r
+    try {\r
+      this.server = (MuscleWS) loc.getMuscleWS(); // JBPNote will be set from properties\r
+    }\r
+    catch (Exception ex) {\r
+      wsInfo.setProgressText("Serious! MuscleWS Service location failed\nfor URL :"\r
+                     +loc.getMuscleWSAddress()+"\n"+ex.getMessage());\r
+      ex.printStackTrace();\r
+    }\r
+\r
+    MsaWSThread musclethread = new MsaWSThread(msa);\r
+    wsInfo.setthisService(musclethread);\r
+    musclethread.start();\r
+  }\r
+\r
+\r
+  protected class MsaWSThread extends Thread implements WSClientI\r
+  {\r
+    String ServiceName = "MuscleWS";\r
+    public boolean isCancellable()\r
+    {\r
+      return true;\r
+    }\r
+\r
+    String OutputHeader;\r
+    vamsas.objects.simple.MsaResult result = null;\r
+    vamsas.objects.simple.SequenceSet seqs = new vamsas.objects.simple.\r
+        SequenceSet();\r
+    String jobId;\r
+    int allowedServerExceptions = 3; // thread dies if too many exceptions.\r
+    MsaWSThread(SequenceI[] msa)\r
+    {\r
+      OutputHeader = wsInfo.getProgressText();\r
+      vamsas.objects.simple.Sequence[] seqarray = new vamsas.objects.simple.\r
+          Sequence[msa.length];\r
+      for (int i = 0; i < msa.length; i++)\r
+      {\r
+        seqarray[i] = new vamsas.objects.simple.Sequence();\r
+        seqarray[i].setId(msa[i].getName());\r
+        seqarray[i].setSeq(AlignSeq.extractGaps("-. ", msa[i].getSequence()));\r
+      }\r
+      this.seqs = new vamsas.objects.simple.SequenceSet();\r
+      this.seqs.setSeqs(seqarray);\r
+    }\r
+\r
+    boolean jobComplete = false;\r
+\r
+    public void cancelJob() {\r
+      if (!jobComplete) {\r
+        String cancelledMessage="";\r
+        try {\r
+          vamsas.objects.simple.WsJobId cancelledJob = server.cancel(jobId);\r
+          if (cancelledJob.getStatus() == 2)\r
+          {\r
+            // CANCELLED_JOB\r
+            cancelledMessage = "Job cancelled.";\r
+            jobComplete = true;\r
+            jobsRunning--;\r
+            result = null;\r
+          }\r
+          else\r
+          if (cancelledJob.getStatus() == 3)\r
+          {\r
+            // VALID UNSTOPPABLE JOB\r
+            cancelledMessage +=\r
+                "Server cannot cancel this job. just close the window.\n";\r
+          }\r
+          if (cancelledJob.getJobId() != null)\r
+            cancelledMessage += "[" + cancelledJob.getJobId() + "]";\r
+          cancelledMessage +="\n";\r
+        } catch (Exception exc) {\r
+          cancelledMessage +="\nProblems cancelling the job : Exception received...\n"+exc+"\n";\r
+          exc.printStackTrace();\r
+        }\r
+        wsInfo.setProgressText(OutputHeader + cancelledMessage+"\n");\r
+      }\r
+    }\r
+\r
+    public void run()\r
+    {\r
+\r
+      StartJob();\r
+\r
+      while (!jobComplete && (allowedServerExceptions > 0))\r
+      {\r
+        try\r
+        {\r
+          result = server.getResult(jobId);\r
+\r
+         if( result.isRunning() )\r
+           wsInfo.setStatus(WebserviceInfo.STATE_RUNNING);\r
+         else if( result.isQueued() )\r
+           wsInfo.setStatus(WebserviceInfo.STATE_QUEUING);\r
+\r
+          if (result.isFinished())\r
+          {\r
+            parseResult();\r
+            jobComplete = true;\r
+            jobsRunning--;\r
+          }\r
+          else\r
+          {\r
+            wsInfo.setProgressText(OutputHeader + "\n" + result.getStatus());\r
+            if (! (result.isJobFailed() || result.isServerError()))\r
+            {\r
+              Thread.sleep(5000);\r
+              //  System.out.println("I'm alive "+seqid+" "+jobid);\r
+            }\r
+          }\r
+        }\r
+        catch (Exception ex)\r
+        {\r
+          allowedServerExceptions--;\r
+          wsInfo.appendProgressText("\n"+ServiceName+" Server exception!\n" + ex.getMessage());\r
+          ex.printStackTrace();\r
+        }\r
+      }\r
+\r
+      if (! (result!=null && (result.isJobFailed() || result.isServerError())))\r
+        wsInfo.setStatus(WebserviceInfo.STATE_STOPPED_OK);\r
+      else\r
+        wsInfo.setStatus(WebserviceInfo.STATE_STOPPED_ERROR);\r
+    }\r
+\r
+    void StartJob()\r
+    {\r
+      try\r
+      {\r
+        vamsas.objects.simple.WsJobId jobsubmit = server.align(seqs);\r
+        if (jobsubmit.getStatus()==1) {\r
+          System.out.println(jobId=jobsubmit.getJobId());\r
+        } else {\r
+          throw new Exception(jobsubmit.getJobId());\r
+        }\r
+      }\r
+      catch (Exception e)\r
+      {\r
+        System.out.println(ServiceName + " Client: Failed to submit the prediction\n" +\r
+                           e.toString() + "\n");\r
+        e.printStackTrace();\r
+      }\r
+    }\r
+\r
+    private void addFloatAnnotations(Alignment al, int[] gapmap, Vector values, String Symname, String Visname, float min, float max, int winLength) {\r
+\r
+      Annotation[] annotations = new Annotation[al.getWidth()];\r
+      for (int j = 0; j < values.size(); j++)\r
+      {\r
+        float value = Float.parseFloat(values.get(j).toString());\r
+        annotations[gapmap[j]] = new Annotation("", value+"",' ',value);\r
+      }\r
+      al.addAnnotation(new AlignmentAnnotation(Symname, Visname, annotations, min, max, winLength));\r
+    }\r
+    private jalview.datamodel.Sequence[] getVamsasAlignment(vamsas.objects.simple.Alignment valign) {\r
+      vamsas.objects.simple.Sequence[] seqs = valign.getSeqs().getSeqs();\r
+      jalview.datamodel.Sequence[] msa = new jalview.datamodel.Sequence[seqs.length];\r
+      for (int i=0, j=seqs.length; i<j;i++)\r
+        msa[i] = new jalview.datamodel.Sequence(seqs[i].getId(), seqs[i].getSeq());\r
+      return msa;\r
+    }\r
+    void parseResult()\r
+    {\r
+      SequenceI[] seqs=null;\r
+      try {\r
+        // OutputHeader = output.getText();\r
+        if (result.isFailed()) {\r
+          OutputHeader +="Job failed.\n";\r
+        }\r
+        if (result.getStatus()!=null) {\r
+          OutputHeader += "\n"+result.getStatus();\r
+        }\r
+        if (result.getMsa()!=null) {\r
+          OutputHeader += "\nAlignment Object Method Notes\n";\r
+          String lines[] = result.getMsa().getMethod();\r
+          for (int line=0;line<lines.length; line++)\r
+            OutputHeader+=lines[line]+"\n";\r
+\r
+          // JBPNote The returned files from a webservice could be hidden behind icons in the monitor window that, when clicked, pop up their corresponding data\r
+          seqs = getVamsasAlignment(result.getMsa());\r
+        }\r
+\r
+        wsInfo.setProgressText(OutputHeader);\r
+        if (seqs!=null) {\r
+          Alignment al;\r
+          al = new Alignment(seqs);\r
+\r
+          // TODO: JBPNote Should also rename the query sequence sometime...\r
+          AlignFrame af = new AlignFrame(al);\r
+          Desktop.addInternalFrame(af,\r
+                                   ServiceName + " Alignment",\r
+                                   AlignFrame.NEW_WINDOW_WIDTH,\r
+                                   AlignFrame.NEW_WINDOW_HEIGHT);\r
+        }\r
+      }catch(Exception ex){ex.printStackTrace();}\r
+\r
+    }\r
+\r
+  }\r
+  }\r
+\r
diff --git a/src/jalview/ws/WSClientI.java b/src/jalview/ws/WSClientI.java
new file mode 100755 (executable)
index 0000000..2474078
--- /dev/null
@@ -0,0 +1,7 @@
+package jalview.ws;
+
+public interface WSClientI
+{
+  boolean isCancellable();
+  void cancelJob();
+}