2 * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
3 * Copyright (C) $$Year-Rel$$ The Jalview Authors
5 * This file is part of Jalview.
7 * Jalview is free software: you can redistribute it and/or
8 * modify it under the terms of the GNU General Public License
9 * as published by the Free Software Foundation, either version 3
10 * of the License, or (at your option) any later version.
12 * Jalview is distributed in the hope that it will be useful, but
13 * WITHOUT ANY WARRANTY; without even the implied warranty
14 * of MERCHANTABILITY or FITNESS FOR A PARTICULAR
15 * PURPOSE. See the GNU General Public License for more details.
17 * You should have received a copy of the GNU General Public License
18 * along with Jalview. If not, see <http://www.gnu.org/licenses/>.
19 * The Jalview Authors are detailed in the 'AUTHORS' file.
21 package jalview.ws.jws2;
23 import jalview.util.MessageManager;
24 import jalview.ws.jws2.dm.JabaOption;
25 import jalview.ws.jws2.dm.JabaParameter;
26 import jalview.ws.jws2.dm.JabaWsParamSet;
27 import jalview.ws.jws2.jabaws2.Jws2Instance;
28 import jalview.ws.params.ArgumentI;
29 import jalview.ws.params.ParamDatastoreI;
30 import jalview.ws.params.ParamManager;
31 import jalview.ws.params.WsParamSetI;
33 import java.io.IOException;
34 import java.util.ArrayList;
35 import java.util.Arrays;
36 import java.util.Hashtable;
37 import java.util.List;
38 import java.util.StringTokenizer;
40 import compbio.metadata.Argument;
41 import compbio.metadata.Option;
42 import compbio.metadata.Parameter;
43 import compbio.metadata.Preset;
44 import compbio.metadata.PresetManager;
45 import compbio.metadata.RunnerConfig;
47 public class JabaParamStore implements ParamDatastoreI
50 Hashtable<String, JabaWsParamSet> editedParams = new Hashtable<>();
52 private Jws2Instance service;
54 private RunnerConfig serviceOptions;
56 private Hashtable<String, JabaPreset> servicePresets;
58 public JabaParamStore(Jws2Instance service)
65 public JabaParamStore(Jws2Instance service, ParamManager manager)
67 this.service = service;
68 serviceOptions = service.getRunnerConfig();
69 this.manager = manager;
70 // discover all the user's locally stored presets for this service and
71 // populate the hash table
74 manager.registerParser(service.getUri(), this);
75 WsParamSetI[] prams = manager.getParameterSet(null, service.getUri(),
79 for (WsParamSetI paramset : prams)
81 if (paramset instanceof JabaWsParamSet)
83 editedParams.put(paramset.getName(), (JabaWsParamSet) paramset);
88 "Warning: Ignoring parameter set instance of type "
90 + " : Bound but not applicable for service at "
99 public List<WsParamSetI> getPresets()
101 List<WsParamSetI> prefs = new ArrayList<>();
102 if (servicePresets == null)
104 servicePresets = new Hashtable<>();
106 if ((prman = service.getPresets()) != null)
108 List pset = prman.getPresets();
111 for (Object pr : pset)
113 JabaPreset prset = new JabaPreset(service, (Preset) pr);
114 servicePresets.put(prset.getName(), prset);
119 for (JabaPreset pr : servicePresets.values())
123 for (WsParamSetI wspset : editedParams.values())
131 public WsParamSetI getPreset(String name)
133 for (WsParamSetI pr : getPresets())
135 if (pr.getName().equals(name))
143 public static List<ArgumentI> getJwsArgsfromJaba(List jabargs)
145 return getJwsArgsfromJaba(jabargs, true);
148 public static List<ArgumentI> getJwsArgsfromJaba(List jabargs,
151 List<ArgumentI> rgs = new ArrayList<>();
152 List<String> rgnames = new ArrayList<>();
153 for (Object rg : jabargs)
155 ArgumentI narg = null;
156 String nargstring = null;
157 if (rg instanceof Parameter)
159 narg = new JabaParameter((Parameter) rg);
160 nargstring = narg.getName(); // just sort by name for this
162 else if (rg instanceof Option)
164 narg = new JabaOption((Option) rg);
165 nargstring = (String) ((Option) rg).getOptionNames().get(0);
169 throw new Error(MessageManager.formatMessage(
170 "error.implementation_error_cannot_handle_jaba_param",
172 { rg.getClass().toString() }));
177 rgnames.add(nargstring);
184 ArgumentI[] rgssort = rgs.toArray(new ArgumentI[rgs.size()]);
185 String[] rgssorton = rgnames.toArray(new String[rgs.size()]);
186 jalview.util.QuickSort.sort(rgssorton, rgssort);
189 while (rgssort.length - i > i)
191 tmp1 = rgssort[rgssort.length - i - 1];
192 rgssort[rgssort.length - i - 1] = rgssort[i];
195 return Arrays.asList(rgssort);
198 public static List getJabafromJwsArgs(List<ArgumentI> jwsargs)
200 List rgs = new ArrayList();
201 for (ArgumentI rg : jwsargs)
203 Argument narg = (rg instanceof JabaOption)
204 ? ((JabaOption) rg).getOption()
208 throw new Error(MessageManager.formatMessage(
209 "error.implementation_error_cannot_handle_jaba_param",
211 { rg.getClass().toString() }));
222 public List<ArgumentI> getServiceParameters()
224 return getJwsArgsfromJaba(serviceOptions.getArguments());
228 public boolean presetExists(String name)
230 return (editedParams.containsKey(name)
231 || servicePresets.containsKey(name));
235 public void deletePreset(String name)
237 if (editedParams.containsKey(name))
239 WsParamSetI parameterSet = editedParams.get(name);
240 editedParams.remove(name);
243 manager.deleteParameterSet(parameterSet);
247 if (servicePresets.containsKey(name))
249 throw new Error(MessageManager.getString(
250 "error.implementation_error_attempt_to_delete_service_preset"));
255 public void storePreset(String presetName, String text,
256 List<ArgumentI> jobParams)
258 JabaWsParamSet jps = new JabaWsParamSet(presetName, text, jobParams);
259 jps.setApplicableUrls(new String[] { service.getUri() });
260 editedParams.put(jps.getName(), jps);
263 manager.storeParameterSet(jps);
268 public void updatePreset(String oldName, String presetName, String text,
269 List<ArgumentI> jobParams)
271 JabaWsParamSet jps = (JabaWsParamSet) ((oldName != null)
273 : getPreset(presetName));
276 throw new Error(MessageManager.formatMessage(
277 "error.implementation_error_cannot_locate_oldname_presetname",
279 { oldName, presetName }));
281 jps.setName(presetName);
282 jps.setDescription(text);
283 jps.setArguments(jobParams);
284 jps.setApplicableUrls(new String[] { service.getUri() });
285 if (oldName != null && !oldName.equals(jps.getName()))
287 editedParams.remove(oldName);
289 editedParams.put(jps.getName(), jps);
293 manager.storeParameterSet(jps);
298 * create a new, empty parameter set for this service
302 WsParamSetI newWsParamSet()
304 return new JabaWsParamSet();
307 private boolean involves(String[] urls)
309 boolean found = false;
310 for (String url : urls)
312 if (service.getNameURI().equals(url)
313 || service.getUri().equalsIgnoreCase(url))
323 public WsParamSetI parseServiceParameterFile(String name, String descr,
324 String[] urls, String parameterfile) throws IOException
328 throw new IOException(MessageManager.getString(
329 "error.implementation_error_cannot_find_service_url_in_given_set"));
332 JabaWsParamSet wsp = new JabaWsParamSet();
334 wsp.setDescription(descr);
335 wsp.setApplicableUrls(urls.clone());
337 List<String> lines = new ArrayList<>();
338 StringTokenizer st = new StringTokenizer(parameterfile, "\n");
339 while (st.hasMoreTokens())
341 lines.add(st.nextToken());
343 wsp.setjabaArguments(
344 ParameterUtils.processParameters(lines, serviceOptions, " "));
349 public String generateServiceParameterFile(WsParamSetI pset)
352 if (!involves(pset.getApplicableUrls()))
354 throw new IOException(MessageManager.formatMessage(
355 "error.implementation_error_cannot_find_service_url_in_given_set_param_store",
357 { service.getUri() }));
359 if (!(pset instanceof JabaWsParamSet))
361 throw new Error(MessageManager.getString(
362 "error.implementation_error_jabaws_param_set_only_handled_by"));
365 StringBuffer rslt = new StringBuffer();
366 for (String ln : ParameterUtils.writeParameterSet(
367 ((JabaWsParamSet) pset).getjabaArguments(), " "))
373 return rslt.toString();