JAL-3070 base interface for service endpoint implementation factory
[jalview.git] / src / jalview / ws / jws2 / jabaws2 / Jws2Instance.java
index cb8f75a..6097bdf 100644 (file)
@@ -23,10 +23,13 @@ package jalview.ws.jws2.jabaws2;
 import jalview.gui.AlignFrame;
 import jalview.gui.Desktop;
 import jalview.util.MessageManager;
+import jalview.ws.api.JalviewServiceEndpointProviderI;
+import jalview.ws.api.ServiceWithParameters;
 import jalview.ws.jws2.JabaParamStore;
 import jalview.ws.jws2.MsaWSClient;
 import jalview.ws.jws2.SequenceAnnotationWSClient;
 import jalview.ws.params.ParamDatastoreI;
+import jalview.ws.params.ParamManager;
 
 import java.io.Closeable;
 
@@ -38,18 +41,12 @@ import compbio.data.msa.SequenceAnnotation;
 import compbio.metadata.PresetManager;
 import compbio.metadata.RunnerConfig;
 
-public class Jws2Instance
+public class Jws2Instance extends ServiceWithParameters
+        implements JalviewServiceEndpointProviderI
 {
-  public String hosturl;
-
-  public String serviceType;
-
-  public String action;
 
   public JABAService service;
 
-  public String description;
-
   public String docUrl;
 
   /**
@@ -69,12 +66,8 @@ public class Jws2Instance
   public Jws2Instance(String hosturl, String serviceType, String action,
           String description, JABAService service)
   {
-    super();
-    this.hosturl = hosturl;
-    this.serviceType = serviceType;
+    super(action, action, serviceType, description, hosturl);
     this.service = service;
-    this.action = action;
-    this.description = description;
     int p = description.indexOf("MORE INFORMATION:");
     if (p > -1)
     {
@@ -115,32 +108,12 @@ public class Jws2Instance
       } catch (Exception ex)
       {
         System.err.println("Exception when retrieving presets for service "
-                + serviceType + " at " + hosturl);
+                + getServiceType() + " at " + getHostURL());
       }
     }
     return presets;
   }
 
-  public String getHost()
-  {
-    return hosturl;
-    /*
-     * try { URL serviceurl = new URL(hosturl); if (serviceurl.getPort()!=80) {
-     * return serviceurl.getHost()+":"+serviceurl.getPort(); } return
-     * serviceurl.getHost(); } catch (Exception e) {
-     * System.err.println("Failed to parse service URL '" + hosturl +
-     * "' as a valid URL!"); } return null;
-     */
-  }
-
-  /**
-   * @return short description of what the service will do
-   */
-  public String getActionText()
-  {
-    return action + " with " + serviceType;
-  }
-
   /**
    * non-thread safe - blocks whilst accessing service to get complete set of
    * available options and parameters
@@ -160,7 +133,7 @@ public class Jws2Instance
     throw new Error(MessageManager.formatMessage(
             "error.implementation_error_runner_config_not_available",
             new String[]
-            { serviceType, service.getClass().toString() }));
+            { getServiceType(), service.getClass().toString() }));
   }
 
   @Override
@@ -170,17 +143,16 @@ public class Jws2Instance
     {
       try
       {
-        Closeable svc = (Closeable) service;
-        service = null;
-        svc.close();
-      } catch (Exception e)
+        ((Closeable) service).close();
+      } catch (Throwable t)
       {
+        // ignore
       }
-      ;
     }
     super.finalize();
   }
 
+  @Override
   public ParamDatastoreI getParamStore()
   {
     if (paramStore == null)
@@ -202,11 +174,14 @@ public class Jws2Instance
 
   public String getUri()
   {
+    // TODO verify that service parameter sets in projects are consistent with
+    // Jalview 2.10.4
     // this is only valid for Jaba 1.0 - this formula might have to change!
-    return hosturl
-            + (hosturl.lastIndexOf("/") == (hosturl.length() - 1) ? ""
+    return getHostURL()
+            + (getHostURL().lastIndexOf("/") == (getHostURL().length() - 1)
+                    ? ""
                     : "/")
-            + serviceType;
+            + getName();
   }
 
   private boolean hasParams = false, lookedForParams = false;
@@ -240,9 +215,9 @@ public class Jws2Instance
     }
   }
 
-  public String getServiceTypeURI()
+  public String getNameURI()
   {
-    return "java:" + serviceType;
+    return "java:" + getName();
   }
 
   jalview.ws.uimodel.AlignAnalysisUIText aaui;
@@ -251,4 +226,42 @@ public class Jws2Instance
   {
     return aaui;
   }
+
+  /**
+   * initialise a parameter store for this service
+   * 
+   * @param userParameterStore
+   *          - the user ParamManager (e.g. Desktop.getUserParameterStore() )
+   */
+  @Override
+  public void initParamStore(ParamManager userParameterStore)
+  {
+    if (paramStore == null)
+    {
+      paramStore = new JabaParamStore(this, userParameterStore);
+    }
+  }
+
+  /**
+   * an object that implements one or more interfaces in jalview.ws.api
+   * 
+   * @return
+   */
+  @Override
+  public Object getEndpoint()
+  {
+    if (aaui!=null) {
+      // TODO complete
+      return null;
+    } else {
+      if (service instanceof MsaWS<?>)
+      {
+      return new JabawsMsaInstance(this);
+    } else {
+        // TODO complete
+        // service is for sequence analysis
+        return null;
+    }
+  }
+}
 }