4 import java.io.FileInputStream;
5 import java.io.FileOutputStream;
6 import java.io.IOException;
7 import java.io.InputStreamReader;
8 import java.io.OutputStreamWriter;
9 import java.io.PrintWriter;
10 import java.util.ArrayList;
11 import java.util.Hashtable;
12 import java.util.List;
13 import java.util.StringTokenizer;
15 import javax.swing.JButton;
16 import javax.swing.JOptionPane;
18 import jalview.bin.Cache;
19 import jalview.io.JalviewFileChooser;
20 import jalview.ws.jws2.dm.JabaWsParamSet;
21 import jalview.ws.params.ParamDatastoreI;
22 import jalview.ws.params.ParamManager;
23 import jalview.ws.params.WsParamSetI;
26 * store and retrieve web service parameter sets.
31 public class WsParamSetManager implements ParamManager
33 Hashtable<String, ParamDatastoreI> paramparsers = new Hashtable<String, ParamDatastoreI>();
36 public WsParamSetI[] getParameterSet(String name, String serviceUrl,
37 boolean modifiable, boolean unmodifiable)
39 String files = Cache.getProperty("WS_PARAM_FILES");
44 StringTokenizer st = new StringTokenizer(files, "|");
46 ArrayList<WsParamSetI> params = new ArrayList<WsParamSetI>();
47 while (st.hasMoreTokens())
49 pfile = st.nextToken();
52 WsParamSetI[] pset = parseParamFile(pfile);
53 for (WsParamSetI p : pset)
56 if (serviceUrl != null)
58 for (String url : p.getApplicableUrls())
60 if (url.equals(serviceUrl))
70 add &= (modifiable == p.isModifiable() || unmodifiable == !p
72 add &= name == null || p.getName().equals(name);
81 } catch (IOException e)
84 .info("Failed to parse parameter file "
86 + " (Check that all JALVIEW_WSPARAMFILES entries are valid!)",
90 return params.toArray(new WsParamSetI[0]);
93 private WsParamSetI[] parseParamFile(String filename) throws IOException
95 List<WsParamSetI> psets = new ArrayList<WsParamSetI>();
96 InputStreamReader is = new InputStreamReader(
97 new java.io.FileInputStream(new File(filename)), "UTF-8");
99 jalview.schemabinding.version2.WebServiceParameterSet wspset = new jalview.schemabinding.version2.WebServiceParameterSet();
101 org.exolab.castor.xml.Unmarshaller unmar = new org.exolab.castor.xml.Unmarshaller(
103 unmar.setWhitespacePreserve(true);
106 wspset = (jalview.schemabinding.version2.WebServiceParameterSet) unmar
108 } catch (Exception ex)
110 throw new IOException(ex);
112 if (wspset != null && wspset.getParameters().length() > 0)
114 for (String url : wspset.getServiceURL())
116 ParamDatastoreI parser = paramparsers.get(url);
119 WsParamSetI pset = parser.parseServiceParameterFile(
120 wspset.getName(), wspset.getDescription(),
121 wspset.getServiceURL(), wspset.getParameters());
124 pset.setSourceFile(filename);
132 return psets.toArray(new WsParamSetI[0]);
136 public void storeParameterSet(WsParamSetI parameterSet)
138 String filename = parameterSet.getSourceFile();
142 if (filename != null && !((outfile = new File(filename)).canWrite()))
144 Cache.log.info("Can't write to " + filename
145 + " - Prompting for new file to write to.");
148 } catch (Exception e)
153 ParamDatastoreI parser = null;
154 for (String urls : parameterSet.getApplicableUrls())
158 parser = paramparsers.get(urls);
164 "Implementation error: Can't find a marshaller for the parameter set");
166 if (filename == null)
168 JalviewFileChooser chooser = new JalviewFileChooser(
169 jalview.bin.Cache.getProperty("LAST_DIRECTORY"), new String[]
170 { "wsparams" }, new String[]
171 { "Web Service Parameter File" },
172 "Web Service Parameter File");
173 chooser.setFileView(new jalview.io.JalviewFileView());
174 chooser.setDialogTitle("Choose a filename for this parameter file");
175 chooser.setToolTipText("Save");
176 int value = chooser.showOpenDialog(Desktop.instance);
177 if (value == JalviewFileChooser.APPROVE_OPTION)
179 outfile = chooser.getSelectedFile();
181 .setProperty("LAST_DIRECTORY", outfile.getParent());
182 filename = outfile.getAbsolutePath();
183 if (!filename.endsWith(".wsparams"))
185 filename = filename.concat(".wsparams");
186 outfile = new File(filename);
192 String paramFiles = jalview.bin.Cache.getDefault("WS_PARAM_FILES",
194 if (paramFiles.indexOf(filename) == -1)
196 if (paramFiles.length() > 0)
198 paramFiles = paramFiles.concat("|");
200 paramFiles = paramFiles.concat(filename);
202 jalview.bin.Cache.setProperty("WS_PARAM_FILES", paramFiles);
204 jalview.schemabinding.version2.WebServiceParameterSet paramxml = new jalview.schemabinding.version2.WebServiceParameterSet();
206 paramxml.setName(parameterSet.getName());
207 paramxml.setDescription(parameterSet.getDescription());
208 paramxml.setServiceURL(parameterSet.getApplicableUrls().clone());
209 paramxml.setVersion("1.0");
212 paramxml.setParameters(parser
213 .generateServiceParameterFile(parameterSet));
214 PrintWriter out = new PrintWriter(new OutputStreamWriter(
215 new FileOutputStream(outfile), "UTF-8"));
216 paramxml.marshal(out);
218 parameterSet.setSourceFile(filename);
219 } catch (Exception e)
221 Cache.log.error("Couldn't write parameter file to " + outfile, e);
228 * JalviewFileChooser chooser = new JalviewFileChooser(jalview.bin.Cache
229 * .getProperty("LAST_DIRECTORY"), new String[] { "jc" }, new String[] {
230 * "Jalview User Colours" }, "Jalview User Colours"); chooser.setFileView(new
231 * jalview.io.JalviewFileView());
232 * chooser.setDialogTitle("Load colour scheme");
233 * chooser.setToolTipText("Load");
235 * int value = chooser.showOpenDialog(this);
237 * if (value == JalviewFileChooser.APPROVE_OPTION) { File choice =
238 * chooser.getSelectedFile(); jalview.bin.Cache.setProperty("LAST_DIRECTORY",
239 * choice.getParent()); String defaultColours = jalview.bin.Cache.getDefault(
240 * "USER_DEFINED_COLOURS", choice.getPath()); if
241 * (defaultColours.indexOf(choice.getPath()) == -1) { defaultColours =
242 * defaultColours.concat("|") .concat(choice.getPath()); } (non-Javadoc)
245 * jalview.ws.params.ParamManager#deleteParameterSet(jalview.ws.params.WsParamSetI
249 public void deleteParameterSet(WsParamSetI parameterSet)
251 String filename = parameterSet.getSourceFile();
252 if (filename == null || filename.trim().length() < 1)
256 String paramFiles = jalview.bin.Cache.getDefault("WS_PARAM_FILES", "");
257 if (paramFiles.indexOf(filename) > -1)
259 String nparamFiles = new String();
260 StringTokenizer st = new StringTokenizer(paramFiles, "|");
261 while (st.hasMoreElements())
263 String fl = st.nextToken();
264 if (!fl.equals(filename))
266 nparamFiles = nparamFiles.concat("|").concat(fl);
269 jalview.bin.Cache.setProperty("WS_PARAM_FILES", nparamFiles);
274 File pfile = new File(filename);
275 if (pfile.exists() && pfile.canWrite())
277 if (JOptionPane.showConfirmDialog(Desktop.instance,
278 "Delete the preset's file, too ?", "Delete User Preset ?",
279 JOptionPane.OK_CANCEL_OPTION) == JOptionPane.OK_OPTION)
284 } catch (Exception e)
287 .error("Exception when trying to delete webservice user preset: ",
293 public void registerParser(String hosturl, ParamDatastoreI paramdataStore)
295 paramparsers.put(hosturl, paramdataStore);