1 package jalview.ws.jws2;
3 import java.io.BufferedReader;
4 import java.io.IOException;
7 import java.util.ArrayList;
8 import java.util.Hashtable;
10 import java.util.StringTokenizer;
12 import compbio.metadata.Argument;
13 import compbio.metadata.Option;
14 import compbio.metadata.Parameter;
15 import compbio.metadata.Preset;
16 import compbio.metadata.PresetManager;
17 import compbio.metadata.RunnerConfig;
19 import jalview.ws.jws2.Jws2Discoverer.Jws2Instance;
20 import jalview.ws.jws2.dm.JabaOption;
21 import jalview.ws.jws2.dm.JabaParameter;
22 import jalview.ws.jws2.dm.JabaWsParamSet;
23 import jalview.ws.params.ArgumentI;
24 import jalview.ws.params.ParamDatastoreI;
25 import jalview.ws.params.ParamManager;
26 import jalview.ws.params.WsParamSetI;
28 public class JabaParamStore implements ParamDatastoreI
31 Hashtable<String, JabaWsParamSet> editedParams = new Hashtable<String, JabaWsParamSet>();
33 private Jws2Instance service;
35 private RunnerConfig serviceOptions;
37 private Hashtable<String, JabaPreset> servicePresets;
39 public JabaParamStore(Jws2Instance service)
46 public JabaParamStore(Jws2Instance service, ParamManager manager)
48 this.service = service;
49 serviceOptions = service.getRunnerConfig();
50 this.manager = manager;
51 // discover all the user's locally stored presets for this service and
52 // populate the hash table
55 manager.registerParser(service.getUri(), this);
56 WsParamSetI[] prams = manager.getParameterSet(null, service.getUri(),
60 for (WsParamSetI paramset : prams)
62 if (paramset instanceof JabaWsParamSet)
64 editedParams.put(paramset.getName(), (JabaWsParamSet) paramset);
69 .println("Warning: Ignoring parameter set instance of type "
71 + " : Bound but not applicable for service at "
80 public List<WsParamSetI> getPresets()
82 List<WsParamSetI> prefs = new ArrayList();
83 if (servicePresets == null)
85 servicePresets = new Hashtable<String, JabaPreset>();
87 if ((prman = service.getPresets()) != null)
89 List pset = prman.getPresets();
92 for (Object pr : pset)
94 JabaPreset prset = new JabaPreset(service, (Preset) pr);
95 servicePresets.put(prset.getName(), prset);
100 for (JabaPreset pr : servicePresets.values())
104 for (WsParamSetI wspset : editedParams.values())
112 public WsParamSetI getPreset(String name)
114 for (WsParamSetI pr : getPresets())
116 if (pr.getName().equals(name))
124 public static List<ArgumentI> getJwsArgsfromJaba(List jabargs)
126 List<ArgumentI> rgs = new ArrayList<ArgumentI>();
127 for (Object rg : jabargs)
129 ArgumentI narg = (rg instanceof Parameter) ? new JabaParameter(
130 (Parameter) rg) : (rg instanceof Option) ? new JabaOption(
135 "Implementation Error: Cannot handle Jaba parameter object "
146 public static List getJabafromJwsArgs(List<ArgumentI> jwsargs)
148 List rgs = new ArrayList();
149 for (ArgumentI rg : jwsargs)
151 Argument narg = (rg instanceof JabaOption) ? ((JabaOption) rg)
156 "Implementation Error: Cannot handle Jaba parameter object "
168 public List<ArgumentI> getServiceParameters()
170 return getJwsArgsfromJaba(serviceOptions.getArguments());
174 public boolean presetExists(String name)
176 return (editedParams.containsKey(name) || servicePresets
181 public void deletePreset(String name)
183 if (editedParams.containsKey(name))
185 WsParamSetI parameterSet = editedParams.get(name);
186 editedParams.remove(name);
189 manager.deleteParameterSet(parameterSet);
193 if (servicePresets.containsKey(name))
196 "Implementation error: Attempt to delete a service preset!");
201 public void storePreset(String presetName, String text,
202 List<ArgumentI> jobParams)
204 JabaWsParamSet jps = new JabaWsParamSet(presetName, text, jobParams);
205 jps.setApplicableUrls(new String[]
206 { service.getUri() });
207 editedParams.put(jps.getName(), jps);
210 manager.storeParameterSet(jps);
215 public void updatePreset(String oldName, String presetName, String text,
216 List<ArgumentI> jobParams)
218 JabaWsParamSet jps = (JabaWsParamSet) ((oldName != null) ? getPreset(oldName)
219 : getPreset(presetName));
222 throw new Error("Implementation error: Can't locate either oldname ("
223 + oldName + ") or presetName (" + presetName
224 + "in the datastore!");
226 jps.setName(presetName);
227 jps.setDescription(text);
228 jps.setArguments(jobParams);
229 jps.setApplicableUrls(new String[]
230 { service.getUri() });
231 if (oldName != null && !oldName.equals(jps.getName()))
233 editedParams.remove(oldName);
235 editedParams.put(jps.getName(), jps);
239 manager.storeParameterSet(jps);
244 * create a new, empty parameter set for this service
248 WsParamSetI newWsParamSet()
250 return new JabaWsParamSet();
253 private boolean involves(String[] urls)
255 boolean found = false;
256 for (String url : urls)
258 if (service.getUri().equalsIgnoreCase(url))
268 public WsParamSetI parseServiceParameterFile(String name, String descr,
269 String[] urls, String parameterfile) throws IOException
273 throw new IOException(
274 "Implementation error: Cannot find service url in the given url set!");
277 JabaWsParamSet wsp = new JabaWsParamSet();
279 wsp.setDescription(descr);
280 wsp.setApplicableUrls(urls.clone());
282 List<String> lines = new ArrayList<String>();
283 StringTokenizer st = new StringTokenizer(parameterfile, "\n");
284 while (st.hasMoreTokens())
286 lines.add(st.nextToken());
288 wsp.setjabaArguments(ParameterUtils.processParameters(lines,
289 serviceOptions, " "));
294 public String generateServiceParameterFile(WsParamSetI pset)
297 if (!involves(pset.getApplicableUrls()))
299 throw new IOException(
300 "Implementation error: Cannot find service url in the given url set for this service parameter store ("
301 + service.getUri() + ") !");
304 if (!(pset instanceof JabaWsParamSet))
307 "Implementation error: JabaWsParamSets can only be handled by JabaParamStore");
310 StringBuffer rslt = new StringBuffer();
311 for (String ln : ParameterUtils.writeParameterSet(
312 ((JabaWsParamSet) pset).getjabaArguments(), " "))
318 return rslt.toString();