\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.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 1\r
+ * List of web services currently supported by JABAWS version 2\r
* \r
*/\r
public enum Services {\r
- MafftWS, MuscleWS, ClustalWS, TcoffeeWS, ProbconsWS;\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
+ public static Services getService(String servName) {\r
+ servName = servName.trim().toLowerCase();\r
+ for (Services service : Services.values()) {\r
+ if (service.toString().equalsIgnoreCase(servName)) {\r
+ return service;\r
+ }\r
+ }\r
+ return null;\r
}\r
- if (servName.equalsIgnoreCase(ClustalWS.toString())) {\r
- return ClustalWS;\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
+ return null;\r
}\r
- if (servName.equalsIgnoreCase(TcoffeeWS.toString())) {\r
- return TcoffeeWS;\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
}\r
- if (servName.equalsIgnoreCase(MuscleWS.toString())) {\r
- return MuscleWS;\r
+\r
+ public static Class<? extends Executable<?>> getRunnerByJobDirectory(\r
+ File jobdir) {\r
+ Services service = getServiceByRunnerName(getRunnerNameByJobDirectory(jobdir));\r
+ return service.getServiceImpl();\r
}\r
- if (servName.equalsIgnoreCase(ProbconsWS.toString())) {\r
- return ProbconsWS;\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
+ return name;\r
}\r
- return null;\r
- }\r
\r
- public static Services getService(Class wsImplClass) {\r
- return getService(wsImplClass.getSimpleName());\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
\r
+ Service getService(URL url, String sqname) {\r
+ QName qname = new QName(sqname, this.toString());\r
+ return Service.create(url, qname);\r
+ }\r
+\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
+ 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
+\r
+ return MsaWS.class;\r
+ default :\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