Change header template for a new version
[jabaws.git] / webservices / compbio / ws / client / Services.java
index 95a0a89..6626a5c 100644 (file)
@@ -1,6 +1,6 @@
-/* Copyright (c) 2009 Peter Troshin\r
+/* Copyright (c) 2011 Peter Troshin\r
  *  \r
- *  JAva Bioinformatics Analysis Web Services (JABAWS) @version: 1.0     \r
+ *  JAva Bioinformatics Analysis Web Services (JABAWS) @version: 2.0     \r
  * \r
  *  This library is free software; you can redistribute it and/or modify it under the terms of the\r
  *  Apache License version 2 as published by the Apache Software Foundation\r
 \r
 package compbio.ws.client;\r
 \r
+import java.io.File;\r
 import java.net.URL;\r
+import java.util.Set;\r
 \r
 import javax.xml.namespace.QName;\r
 import javax.xml.ws.Service;\r
 \r
-import compbio.data.msa.Annotation;\r
 import compbio.data.msa.JABAService;\r
 import compbio.data.msa.MsaWS;\r
+import compbio.data.msa.SequenceAnnotation;\r
+import compbio.engine.client.ConfExecutable;\r
+import compbio.engine.client.Executable;\r
+import compbio.runner.conservation.AACon;\r
+import compbio.runner.disorder.Disembl;\r
+import compbio.runner.disorder.GlobPlot;\r
+import compbio.runner.disorder.IUPred;\r
+import compbio.runner.disorder.Jronn;\r
+import compbio.runner.msa.ClustalO;\r
+import compbio.runner.msa.ClustalW;\r
+import compbio.runner.msa.Mafft;\r
+import compbio.runner.msa.Muscle;\r
+import compbio.runner.msa.Probcons;\r
+import compbio.runner.msa.Tcoffee;\r
 \r
 /**\r
  * List of web services currently supported by JABAWS version 2\r
  * \r
  */\r
 public enum Services {\r
-       MafftWS, MuscleWS, ClustalWS, TcoffeeWS, ProbconsWS, AAConWS;\r
+       MafftWS, MuscleWS, ClustalWS, ClustalOWS, TcoffeeWS, ProbconsWS, AAConWS, JronnWS, DisemblWS, GlobPlotWS, IUPredWS;\r
 \r
        public static Services getService(String servName) {\r
                servName = servName.trim().toLowerCase();\r
-               if (servName.equalsIgnoreCase(MafftWS.toString())) {\r
-                       return MafftWS;\r
+               for (Services service : Services.values()) {\r
+                       if (service.toString().equalsIgnoreCase(servName)) {\r
+                               return service;\r
+                       }\r
                }\r
-               if (servName.equalsIgnoreCase(ClustalWS.toString())) {\r
-                       return ClustalWS;\r
-               }\r
-               if (servName.equalsIgnoreCase(TcoffeeWS.toString())) {\r
-                       return TcoffeeWS;\r
+               return null;\r
+       }\r
+\r
+       public static Services getServiceByRunner(\r
+                       Class<Executable<?>> runnerClassName) {\r
+               assert runnerClassName != null;\r
+               String sname = runnerClassName.getSimpleName().toLowerCase();\r
+               for (Services service : Services.values()) {\r
+                       if (service.toString().toLowerCase().contains(sname)) {\r
+                               return service;\r
+                       }\r
                }\r
-               if (servName.equalsIgnoreCase(MuscleWS.toString())) {\r
-                       return MuscleWS;\r
+               return null;\r
+       }\r
+\r
+       public Class<? extends Executable<?>> getServiceImpl() {\r
+               switch (this) {\r
+                       case AAConWS :\r
+                               return AACon.class;\r
+                       case ClustalOWS :\r
+                               return ClustalO.class;\r
+                       case ClustalWS :\r
+                               return ClustalW.class;\r
+                       case MafftWS :\r
+                               return Mafft.class;\r
+                       case MuscleWS :\r
+                               return Muscle.class;\r
+                       case TcoffeeWS :\r
+                               return Tcoffee.class;\r
+                       case ProbconsWS :\r
+                               return Probcons.class;\r
+                       case DisemblWS :\r
+                               return Disembl.class;\r
+                       case GlobPlotWS :\r
+                               return GlobPlot.class;\r
+                       case JronnWS :\r
+                               return Jronn.class;\r
+                       case IUPredWS :\r
+                               return IUPred.class;\r
+                       default :\r
+                               throw new RuntimeException(\r
+                                               "Unknown web service implementation class for service: "\r
+                                                               + this);\r
                }\r
-               if (servName.equalsIgnoreCase(ProbconsWS.toString())) {\r
-                       return ProbconsWS;\r
+       }\r
+\r
+       public static Class<? extends Executable<?>> getRunnerByJobDirectory(\r
+                       File jobdir) {\r
+               Services service = getServiceByRunnerName(getRunnerNameByJobDirectory(jobdir));\r
+               return service.getServiceImpl();\r
+       }\r
+\r
+       private static String getRunnerNameByJobDirectory(File jobdir) {\r
+               String name = jobdir.getName().split("#")[0];\r
+\r
+               if (name.startsWith(ConfExecutable.CLUSTER_TASK_ID_PREFIX)) {\r
+                       assert ConfExecutable.CLUSTER_TASK_ID_PREFIX.length() == 1;\r
+                       name = name.substring(1);\r
                }\r
-               if (servName.equalsIgnoreCase(AAConWS.toString())) {\r
-                       return AAConWS;\r
+               return name;\r
+       }\r
+\r
+       public static Services getServiceByJobDirectory(File jobdir) {\r
+               return getServiceByRunnerName(getRunnerNameByJobDirectory(jobdir));\r
+       }\r
+\r
+       private static Services getServiceByRunnerName(String name) {\r
+               for (Services service : Services.values()) {\r
+                       String runnerName = service.getServiceImpl().getSimpleName()\r
+                                       .toLowerCase();\r
+                       name = name.trim().toLowerCase();\r
+                       if (name.startsWith(runnerName)) {\r
+                               return service;\r
+                       }\r
                }\r
                return null;\r
        }\r
@@ -62,30 +139,49 @@ public enum Services {
                return Service.create(url, qname);\r
        }\r
 \r
-       JABAService getInterface(Service service) {\r
-               assert service != null;\r
-\r
-               QName portName = new QName(service.getServiceName().getNamespaceURI(),\r
-                               this.toString() + "Port");\r
+       public static String toString(Set<Services> services) {\r
+               if (services == null || services.isEmpty()) {\r
+                       return "";\r
+               }\r
+               String value = "";\r
+               String delim = ", ";\r
+               for (Services serv : services) {\r
+                       value += serv.toString() + delim;\r
+               }\r
+               value = value.substring(0, value.length() - delim.length());\r
+               return value;\r
+       }\r
 \r
+       Class<? extends JABAService> getServiceType() {\r
                switch (this) {\r
+                       // deliberate leaking\r
                        case AAConWS :\r
-\r
-                               return service.getPort(portName, Annotation.class);\r
+                       case JronnWS :\r
+                       case DisemblWS :\r
+                       case GlobPlotWS :\r
+                       case IUPredWS :\r
+                               return SequenceAnnotation.class;\r
 \r
                                // deliberate leaking\r
                        case ClustalWS :\r
+                       case ClustalOWS :\r
                        case MafftWS :\r
                        case MuscleWS :\r
                        case ProbconsWS :\r
                        case TcoffeeWS :\r
-                               // TODO remove\r
-                               System.out.println("Qname from serv: " + portName);\r
-\r
-                               return service.getPort(portName, MsaWS.class);\r
 \r
+                               return MsaWS.class;\r
                        default :\r
-                               throw new RuntimeException("Should never happened!");\r
+                               throw new RuntimeException("Unrecognised Web Service Type "\r
+                                               + this + " - Should never happened!");\r
                }\r
        }\r
+\r
+       JABAService getInterface(Service service) {\r
+               assert service != null;\r
+\r
+               QName portName = new QName(service.getServiceName().getNamespaceURI(),\r
+                               this.toString() + "Port");\r
+               return service.getPort(portName, this.getServiceType());\r
+       }\r
 }
\ No newline at end of file