From 895aec0787b4b2104c1a78d98fab530d586693ac Mon Sep 17 00:00:00 2001 From: jprocter Date: Thu, 28 Apr 2005 15:46:32 +0000 Subject: [PATCH] First try with MuscleWS --- src/ext/vamsas/MuscleWS.java | 15 ++ src/ext/vamsas/MuscleWSService.java | 16 ++ src/ext/vamsas/MuscleWSServiceLocator.java | 136 +++++++++++ src/ext/vamsas/MuscleWSSoapBindingStub.java | 327 +++++++++++++++++++++++++++ src/jalview/ws/MsaWSClient.java | 233 +++++++++++++++++++ src/jalview/ws/WSClientI.java | 7 + 6 files changed, 734 insertions(+) create mode 100755 src/ext/vamsas/MuscleWS.java create mode 100755 src/ext/vamsas/MuscleWSService.java create mode 100755 src/ext/vamsas/MuscleWSServiceLocator.java create mode 100755 src/ext/vamsas/MuscleWSSoapBindingStub.java create mode 100755 src/jalview/ws/MsaWSClient.java create mode 100755 src/jalview/ws/WSClientI.java diff --git a/src/ext/vamsas/MuscleWS.java b/src/ext/vamsas/MuscleWS.java new file mode 100755 index 0000000..26e1f83 --- /dev/null +++ b/src/ext/vamsas/MuscleWS.java @@ -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 index 0000000..04026a3 --- /dev/null +++ b/src/ext/vamsas/MuscleWSService.java @@ -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 index 0000000..03f10d0 --- /dev/null +++ b/src/ext/vamsas/MuscleWSServiceLocator.java @@ -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 index 0000000..52914a5 --- /dev/null +++ b/src/ext/vamsas/MuscleWSSoapBindingStub.java @@ -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 index 0000000..44ffa11 --- /dev/null +++ b/src/jalview/ws/MsaWSClient.java @@ -0,0 +1,233 @@ +package jalview.ws; + +import org.apache.axis.client.*; +import javax.xml.namespace.QName; +import java.util.*; +import jalview.datamodel.*; +import jalview.gui.*; +import javax.swing.*; +import java.util.*; +import java.awt.*; +import jalview.analysis.AlignSeq; +import ext.vamsas.*; +import vamsas.objects.*; + +public class MsaWSClient +{ + int jobsRunning = 0; + ext.vamsas.MuscleWS server; + WebserviceInfo wsInfo; + /** + * MsaWSClient + * + * @param msa SequenceI[] + */ + public MsaWSClient(SequenceI[] msa) + { + wsInfo = new jalview.gui.WebserviceInfo("Muscle Alignment job", + "Edgar, Robert C. (2004), MUSCLE: multiple sequence alignment with high accuracy and high throughput, Nucleic Acids Research 32(5), 1792-97."); + + + wsInfo.setProgressText("Job details\n"); + + + MuscleWSServiceLocator loc = new MuscleWSServiceLocator(); // Default + try { + this.server = (MuscleWS) loc.getMuscleWS(); // JBPNote will be set from properties + } + catch (Exception ex) { + wsInfo.setProgressText("Serious! MuscleWS Service location failed\nfor URL :" + +loc.getMuscleWSAddress()+"\n"+ex.getMessage()); + ex.printStackTrace(); + } + + MsaWSThread musclethread = new MsaWSThread(msa); + wsInfo.setthisService(musclethread); + musclethread.start(); + } + + + protected class MsaWSThread extends Thread implements WSClientI + { + String ServiceName = "MuscleWS"; + public boolean isCancellable() + { + return true; + } + + String OutputHeader; + vamsas.objects.simple.MsaResult result = null; + vamsas.objects.simple.SequenceSet seqs = new vamsas.objects.simple. + SequenceSet(); + String jobId; + int allowedServerExceptions = 3; // thread dies if too many exceptions. + MsaWSThread(SequenceI[] msa) + { + OutputHeader = wsInfo.getProgressText(); + vamsas.objects.simple.Sequence[] seqarray = new vamsas.objects.simple. + Sequence[msa.length]; + for (int i = 0; i < msa.length; i++) + { + seqarray[i] = new vamsas.objects.simple.Sequence(); + seqarray[i].setId(msa[i].getName()); + seqarray[i].setSeq(AlignSeq.extractGaps("-. ", msa[i].getSequence())); + } + this.seqs = new vamsas.objects.simple.SequenceSet(); + this.seqs.setSeqs(seqarray); + } + + boolean jobComplete = false; + + public void cancelJob() { + if (!jobComplete) { + String cancelledMessage=""; + try { + vamsas.objects.simple.WsJobId cancelledJob = server.cancel(jobId); + if (cancelledJob.getStatus() == 2) + { + // CANCELLED_JOB + cancelledMessage = "Job cancelled."; + jobComplete = true; + jobsRunning--; + result = null; + } + else + if (cancelledJob.getStatus() == 3) + { + // VALID UNSTOPPABLE JOB + cancelledMessage += + "Server cannot cancel this job. just close the window.\n"; + } + if (cancelledJob.getJobId() != null) + cancelledMessage += "[" + cancelledJob.getJobId() + "]"; + cancelledMessage +="\n"; + } catch (Exception exc) { + cancelledMessage +="\nProblems cancelling the job : Exception received...\n"+exc+"\n"; + exc.printStackTrace(); + } + wsInfo.setProgressText(OutputHeader + cancelledMessage+"\n"); + } + } + + public void run() + { + + StartJob(); + + while (!jobComplete && (allowedServerExceptions > 0)) + { + try + { + result = server.getResult(jobId); + + if( result.isRunning() ) + wsInfo.setStatus(WebserviceInfo.STATE_RUNNING); + else if( result.isQueued() ) + wsInfo.setStatus(WebserviceInfo.STATE_QUEUING); + + if (result.isFinished()) + { + parseResult(); + jobComplete = true; + jobsRunning--; + } + else + { + wsInfo.setProgressText(OutputHeader + "\n" + result.getStatus()); + if (! (result.isJobFailed() || result.isServerError())) + { + Thread.sleep(5000); + // System.out.println("I'm alive "+seqid+" "+jobid); + } + } + } + catch (Exception ex) + { + allowedServerExceptions--; + wsInfo.appendProgressText("\n"+ServiceName+" Server exception!\n" + ex.getMessage()); + ex.printStackTrace(); + } + } + + if (! (result!=null && (result.isJobFailed() || result.isServerError()))) + wsInfo.setStatus(WebserviceInfo.STATE_STOPPED_OK); + else + wsInfo.setStatus(WebserviceInfo.STATE_STOPPED_ERROR); + } + + void StartJob() + { + try + { + vamsas.objects.simple.WsJobId jobsubmit = server.align(seqs); + if (jobsubmit.getStatus()==1) { + System.out.println(jobId=jobsubmit.getJobId()); + } else { + throw new Exception(jobsubmit.getJobId()); + } + } + catch (Exception e) + { + System.out.println(ServiceName + " Client: Failed to submit the prediction\n" + + e.toString() + "\n"); + e.printStackTrace(); + } + } + + private void addFloatAnnotations(Alignment al, int[] gapmap, Vector values, String Symname, String Visname, float min, float max, int winLength) { + + Annotation[] annotations = new Annotation[al.getWidth()]; + for (int j = 0; j < values.size(); j++) + { + float value = Float.parseFloat(values.get(j).toString()); + annotations[gapmap[j]] = new Annotation("", value+"",' ',value); + } + al.addAnnotation(new AlignmentAnnotation(Symname, Visname, annotations, min, max, winLength)); + } + private jalview.datamodel.Sequence[] getVamsasAlignment(vamsas.objects.simple.Alignment valign) { + vamsas.objects.simple.Sequence[] seqs = valign.getSeqs().getSeqs(); + jalview.datamodel.Sequence[] msa = new jalview.datamodel.Sequence[seqs.length]; + for (int i=0, j=seqs.length; i