f0539dcda1453cdb0e77817e96738622f0d1ba5d
[jabaws.git] / webservices / compbio / ws / client / MetadataHelper.java
1 package compbio.ws.client;\r
2 \r
3 import static compbio.ws.client.Constraints.pseparator;\r
4 \r
5 import java.util.ArrayList;\r
6 import java.util.Collections;\r
7 import java.util.List;\r
8 \r
9 import compbio.data.msa.Metadata;\r
10 import compbio.metadata.Limit;\r
11 import compbio.metadata.LimitsManager;\r
12 import compbio.metadata.Option;\r
13 import compbio.metadata.Preset;\r
14 import compbio.metadata.PresetManager;\r
15 import compbio.metadata.RunnerConfig;\r
16 import compbio.metadata.WrongParameterException;\r
17 \r
18 public class MetadataHelper {\r
19 \r
20         /**\r
21          * Returns a list of options supported by web service\r
22          * \r
23          * @param <T>\r
24          *            web service type\r
25          * @param msaws\r
26          *            web service proxy\r
27          * @return List of options supported by a web service\r
28          */\r
29         static <T> List<Option<T>> getParametersList(Metadata<T> msaws) {\r
30                 assert msaws != null;\r
31                 RunnerConfig<T> config = msaws.getRunnerOptions();\r
32                 if (config == null) {\r
33                         return Collections.emptyList();\r
34                 }\r
35                 return config.getArguments();\r
36         }\r
37 \r
38         /**\r
39          * Returns an objects from which the list of presets supported by web\r
40          * service <T> can be obtained\r
41          * \r
42          * @param <T>\r
43          *            web service type\r
44          * @param msaws\r
45          *            web service proxy\r
46          * @return PresetManager, object which operates on presets\r
47          */\r
48         static <T> PresetManager<T> getPresetList(Metadata<T> msaws) {\r
49                 assert msaws != null;\r
50                 PresetManager<T> presetman = msaws.getPresets();\r
51                 return presetman;\r
52         }\r
53 \r
54         /**\r
55          * Returns a list of limits supported by web service Each limit correspond\r
56          * to a particular preset.\r
57          * \r
58          * @param <T>\r
59          *            web service type\r
60          * @param msaws\r
61          *            web service proxy\r
62          * @return List of limits supported by a web service\r
63          */\r
64         static <T> List<Limit<T>> getLimits(Metadata<T> msaws) {\r
65                 assert msaws != null;\r
66                 LimitsManager<T> lmanger = msaws.getLimits();\r
67 \r
68                 return lmanger != null ? lmanger.getLimits() : null;\r
69         }\r
70 \r
71         /**\r
72          * Returns {@code Preset} by its name\r
73          * \r
74          * @see Preset\r
75          * @param <T>\r
76          * @param msaws\r
77          * @param presetName\r
78          * @return Return a Preset by its optionName\r
79          */\r
80         static <T> Preset<T> getPreset(Metadata<T> msaws, String presetName) {\r
81                 assert presetName != null;\r
82                 PresetManager<T> presets = MetadataHelper.getPresetList(msaws);\r
83                 if (presets == null) {\r
84                         System.out\r
85                                         .println("No presets are supported by the service! Ignoring -r directive!");\r
86                         return null;\r
87                 }\r
88                 Preset<T> pre = presets.getPresetByName(presetName);\r
89                 if (pre == null) {\r
90                         System.out.println("Cannot find preset: " + presetName\r
91                                         + " WARN: ignoring -r directive!");\r
92                 }\r
93                 return pre;\r
94         }\r
95 \r
96         /**\r
97          * Converts options supplied via parameters file into {@code Option} objects\r
98          * \r
99          * @param <T>\r
100          *            web service type\r
101          * @param params\r
102          * @param options\r
103          * @return List of Options of type T\r
104          */\r
105         static <T> List<Option<T>> processParameters(List<String> params,\r
106                         RunnerConfig<T> options) {\r
107                 List<Option<T>> chosenOptions = new ArrayList<Option<T>>();\r
108                 for (String param : params) {\r
109                         String oname = null;\r
110                         if (isParameter(param)) {\r
111                                 oname = getParamName(param);\r
112                         } else {\r
113                                 oname = param;\r
114                         }\r
115                         Option<T> o = options.getArgumentByOptionName(oname);\r
116                         if (o == null) {\r
117                                 System.out.println("WARN ignoring unsuppoted parameter: "\r
118                                                 + oname);\r
119                                 continue;\r
120                         }\r
121                         if (isParameter(param)) {\r
122                                 try {\r
123                                         o.setValue(getParamValue(param));\r
124                                 } catch (WrongParameterException e) {\r
125                                         System.out\r
126                                                         .println("Problem setting value for the parameter: "\r
127                                                                         + param);\r
128                                         e.printStackTrace();\r
129                                 }\r
130                         }\r
131                         chosenOptions.add(o);\r
132                 }\r
133                 return chosenOptions;\r
134         }\r
135 \r
136         static String getParamName(String fullName) {\r
137                 assert isParameter(fullName);\r
138                 return fullName.substring(0, fullName.indexOf(pseparator));\r
139         }\r
140 \r
141         static String getParamValue(String fullName) {\r
142                 assert isParameter(fullName);\r
143                 return fullName.substring(fullName.indexOf(pseparator) + 1);\r
144         }\r
145 \r
146         static boolean isParameter(String param) {\r
147                 return param.contains(pseparator);\r
148         }\r
149 \r
150 }\r