Services class refactored to get rid of engines and runners dependencies.
[jabaws.git] / webservices / compbio / ws / client / ServicesUtil.java
1 package compbio.ws.client;\r
2 \r
3 import java.io.File;\r
4 \r
5 import compbio.engine.client.ConfExecutable;\r
6 import compbio.engine.client.Executable;\r
7 import compbio.runner.conservation.AACon;\r
8 import compbio.runner.disorder.Disembl;\r
9 import compbio.runner.disorder.GlobPlot;\r
10 import compbio.runner.disorder.IUPred;\r
11 import compbio.runner.disorder.Jronn;\r
12 import compbio.runner.msa.ClustalO;\r
13 import compbio.runner.msa.ClustalW;\r
14 import compbio.runner.msa.Mafft;\r
15 import compbio.runner.msa.Muscle;\r
16 import compbio.runner.msa.Probcons;\r
17 import compbio.runner.msa.Tcoffee;\r
18 \r
19 public class ServicesUtil {\r
20 \r
21         public static Services getServiceByRunner(\r
22                         Class<Executable<?>> runnerClassName) {\r
23                 assert runnerClassName != null;\r
24                 String sname = runnerClassName.getSimpleName().toLowerCase();\r
25                 for (Services service : Services.values()) {\r
26                         if (service.toString().toLowerCase().contains(sname)) {\r
27                                 return service;\r
28                         }\r
29                 }\r
30                 return null;\r
31         }\r
32 \r
33         public static Class<? extends Executable<?>> getServiceImpl(Services service) {\r
34                 switch (service) {\r
35                         case AAConWS :\r
36                                 return AACon.class;\r
37                         case ClustalOWS :\r
38                                 return ClustalO.class;\r
39                         case ClustalWS :\r
40                                 return ClustalW.class;\r
41                         case MafftWS :\r
42                                 return Mafft.class;\r
43                         case MuscleWS :\r
44                                 return Muscle.class;\r
45                         case TcoffeeWS :\r
46                                 return Tcoffee.class;\r
47                         case ProbconsWS :\r
48                                 return Probcons.class;\r
49                         case DisemblWS :\r
50                                 return Disembl.class;\r
51                         case GlobPlotWS :\r
52                                 return GlobPlot.class;\r
53                         case JronnWS :\r
54                                 return Jronn.class;\r
55                         case IUPredWS :\r
56                                 return IUPred.class;\r
57                         default :\r
58                                 throw new RuntimeException(\r
59                                                 "Unknown web service implementation class for service: "\r
60                                                                 + service);\r
61                 }\r
62         }\r
63 \r
64         public static Class<? extends Executable<?>> getRunnerByJobDirectory(\r
65                         File jobdir) {\r
66                 Services service = getServiceByRunnerName(getRunnerNameByJobDirectory(jobdir));\r
67                 return getServiceImpl(service);\r
68         }\r
69 \r
70         private static String getRunnerNameByJobDirectory(File jobdir) {\r
71                 String name = jobdir.getName().split("#")[0];\r
72 \r
73                 if (name.startsWith(ConfExecutable.CLUSTER_TASK_ID_PREFIX)) {\r
74                         assert ConfExecutable.CLUSTER_TASK_ID_PREFIX.length() == 1;\r
75                         name = name.substring(1);\r
76                 }\r
77                 return name;\r
78         }\r
79 \r
80         public static Services getServiceByJobDirectory(File jobdir) {\r
81                 return getServiceByRunnerName(getRunnerNameByJobDirectory(jobdir));\r
82         }\r
83 \r
84         private static Services getServiceByRunnerName(String name) {\r
85                 for (Services service : Services.values()) {\r
86                         String runnerName = getServiceImpl(service).getSimpleName()\r
87                                         .toLowerCase();\r
88                         name = name.trim().toLowerCase();\r
89                         if (name.startsWith(runnerName)) {\r
90                                 return service;\r
91                         }\r
92                 }\r
93                 return null;\r
94         }\r
95 \r
96 }\r