Clover icon

Coverage Report

  1. Project Clover database Thu Jan 15 2026 16:11:02 GMT
  2. Package jalview.ws2.params

File SimpleParamDatastore.java

 

Coverage histogram

../../../img/srcFileCovDistChart2.png
57% of files have more coverage

Code metrics

30
97
13
1
273
230
32
0.33
7.46
13
2.46

Classes

Class Line # Actions
SimpleParamDatastore 30 97 32
0.11428571511.4%
 

Contributing tests

This file is covered by 463 tests. .

Source view

1    package jalview.ws2.params;
2   
3    import java.io.ByteArrayOutputStream;
4    import java.io.IOException;
5    import java.io.StringReader;
6    import java.lang.reflect.InvocationTargetException;
7    import java.net.URL;
8    import java.util.ArrayList;
9    import java.util.Collections;
10    import java.util.List;
11   
12    import javax.xml.bind.JAXBContext;
13    import javax.xml.bind.JAXBException;
14    import javax.xml.bind.Marshaller;
15    import javax.xml.bind.Unmarshaller;
16   
17    import jalview.bin.Console;
18    import jalview.util.MessageManager;
19    import jalview.ws.params.ArgumentI;
20    import jalview.ws.params.ParamDatastoreI;
21    import jalview.ws.params.ParamManager;
22    import jalview.ws.params.WsParamSetI;
23   
24    /**
25    * A web client agnostic parameters datastore that provides view of the
26    * parameters and delegates parameters storage to {@link ParamManager} if given.
27    * Parameter datastore maintains the applicable service url the list of service
28    * parameters and both presets and user defined parameter sets
29    */
 
30    public class SimpleParamDatastore implements ParamDatastoreI
31    {
32    protected URL serviceUrl;
33   
34    protected List<ArgumentI> parameters;
35   
36    protected List<SimpleParamSet> servicePresets;
37   
38    protected List<SimpleParamSet> userPresets = new ArrayList<>();
39   
40    protected ParamManager manager;
41   
42    /**
43    * Create new parameter datastore bound to the specified url with given
44    * service parameters and presets. Additionally, a parameters manager may be
45    * provided that will be used to load and store user parameter sets.
46    *
47    * @param serviceUrl
48    * applicable url
49    * @param parameters
50    * service parameters
51    * @param presets
52    * unmodifiable service presets
53    * @param manager
54    * parameter manager used to load and store user presets
55    */
 
56  1364 toggle public SimpleParamDatastore(URL serviceUrl, List<ArgumentI> parameters,
57    List<? extends WsParamSetI> presets, ParamManager manager)
58    {
59  1364 this.serviceUrl = serviceUrl;
60  1364 this.parameters = Collections
61    .unmodifiableList(new ArrayList<>(parameters));
62  1364 this.servicePresets = new ArrayList<>(presets.size());
63  1364 for (var preset : presets)
64    {
65  0 if (preset instanceof SimpleParamSet)
66  0 servicePresets.add((SimpleParamSet) preset);
67    else
68  0 servicePresets.add(new SimpleParamSet(preset));
69    }
70  1364 this.servicePresets = Collections.unmodifiableList(this.servicePresets);
71  1364 this.manager = manager;
72  1364 if (manager != null)
73  0 _initManager(manager);
74    }
75   
 
76  0 toggle private void _initManager(ParamManager manager)
77    {
78  0 manager.registerParser(serviceUrl.toString(), this);
79  0 WsParamSetI[] paramSets = manager.getParameterSet(null,
80    serviceUrl.toString(), true, false);
81  0 if (paramSets != null)
82    {
83  0 for (WsParamSetI paramSet : paramSets)
84    {
85    // TODO: handle mismatch between preset and current parameters
86  0 if (paramSet instanceof SimpleParamSet)
87  0 userPresets.add((SimpleParamSet) paramSet);
88    else
89    {
90  0 userPresets.add(new SimpleParamSet(paramSet));
91  0 Console.warn(String.format(
92    "Parameter set instance type %s is not applicable to service"
93    + "at %s.",
94    paramSet.getClass(), serviceUrl));
95    }
96    }
97    }
98    }
99   
 
100  105514 toggle @Override
101    public List<WsParamSetI> getPresets()
102    {
103  105514 List<WsParamSetI> presets = new ArrayList<>();
104  105514 presets.addAll(servicePresets);
105  105513 presets.addAll(userPresets);
106  105513 return presets;
107    }
108   
 
109  0 toggle @Override
110    public SimpleParamSet getPreset(String name)
111    {
112  0 SimpleParamSet preset = null;
113  0 preset = getUserPreset(name);
114  0 if (preset != null)
115  0 return preset;
116  0 preset = getServicePreset(name);
117  0 if (preset != null)
118  0 return preset;
119  0 return null;
120    }
121   
 
122  0 toggle public SimpleParamSet getUserPreset(String name)
123    {
124  0 for (SimpleParamSet preset : userPresets)
125    {
126  0 if (name.equals(preset.getName()))
127  0 return preset;
128    }
129  0 return null;
130    }
131   
 
132  0 toggle public SimpleParamSet getServicePreset(String name)
133    {
134  0 for (SimpleParamSet preset : servicePresets)
135    {
136  0 if (name.equals(preset.getName()))
137  0 return preset;
138    }
139  0 return null;
140    }
141   
 
142  152573 toggle @Override
143    public List<ArgumentI> getServiceParameters()
144    {
145  152573 return parameters;
146    }
147   
 
148  0 toggle @Override
149    public boolean presetExists(String name)
150    {
151  0 return getPreset(name) != null;
152    }
153   
 
154  0 toggle @Override
155    public void deletePreset(String name)
156    {
157  0 var userPreset = getUserPreset(name);
158  0 if (userPreset != null)
159    {
160  0 userPresets.remove(userPreset);
161  0 if (manager != null)
162    {
163  0 manager.deleteParameterSet(userPreset);
164    }
165    }
166  0 else if (getServicePreset(name) != null)
167    {
168  0 throw new RuntimeException(MessageManager.getString(
169    "error.implementation_error_attempt_to_delete_service_preset"));
170    }
171    else
172    {
173  0 Console.warn("Implementation error: no preset to delete");
174    }
175    }
176   
 
177  0 toggle @Override
178    public void storePreset(String presetName, String text,
179    List<ArgumentI> jobParams)
180    {
181  0 var builder = SimpleParamSet.newBuilder();
182  0 builder.name(presetName);
183  0 builder.description(text);
184  0 builder.arguments(jobParams);
185  0 builder.url(serviceUrl.toString());
186  0 builder.modifiable(true);
187  0 var preset = builder.build();
188  0 userPresets.add(preset);
189  0 if (manager != null)
190  0 manager.storeParameterSet(preset);
191    }
192   
 
193  0 toggle @Override
194    public void updatePreset(String oldName, String newName, String text,
195    List<ArgumentI> jobParams)
196    {
197  0 var preset = getPreset(oldName != null ? oldName : newName);
198  0 if (preset == null)
199  0 throw new RuntimeException(MessageManager.formatMessage(
200    "error.implementation_error_cannot_locate_oldname_presetname",
201    oldName, newName));
202  0 preset.setName(newName);
203  0 preset.setDescription(text);
204  0 preset.setArguments(jobParams);
205  0 preset.setApplicableUrls(new String[] { serviceUrl.toString() });
206  0 if (manager != null)
207  0 manager.storeParameterSet(preset);
208    }
209   
 
210  0 toggle @Override
211    public WsParamSetI parseServiceParameterFile(String name,
212    String description, String[] serviceURL, String parameters)
213    throws IOException
214    {
215  0 var builder = SimpleParamSet.newBuilder();
216  0 builder.name(name);
217  0 builder.description(description);
218  0 builder.urls(serviceURL);
219  0 builder.modifiable(true);
220  0 Unmarshaller unmarshaller;
221  0 try
222    {
223  0 var ctx = JAXBContext.class.getDeclaredConstructor()
224    .newInstance(ArgumentBeanList.class);
225  0 unmarshaller = ctx.createUnmarshaller();
226    } catch (JAXBException | InstantiationException | IllegalAccessException
227    | IllegalArgumentException | InvocationTargetException
228    | NoSuchMethodException | SecurityException e)
229    {
230  0 throw new RuntimeException(e);
231    }
232  0 ArgumentBeanList argList;
233  0 try
234    {
235  0 argList = (ArgumentBeanList) unmarshaller
236    .unmarshal(new StringReader(parameters));
237    } catch (JAXBException | ClassCastException e)
238    {
239  0 throw new IOException("Unable to load parameters from file", e);
240    }
241  0 builder.arguments(argList.arguments);
242  0 return builder.build();
243    }
244   
 
245  0 toggle @Override
246    public String generateServiceParameterFile(WsParamSetI pset)
247    throws IOException
248    {
249  0 Marshaller marshaller;
250  0 try
251    {
252  0 var ctx = JAXBContext.newInstance(ArgumentBeanList.class);
253  0 marshaller = ctx.createMarshaller();
254  0 marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
255  0 marshaller.setProperty(Marshaller.JAXB_FRAGMENT, true);
256    } catch (JAXBException e)
257    {
258  0 throw new RuntimeException(e);
259    }
260  0 ArgumentBeanList argList = ArgumentBeanList
261    .fromList(pset.getArguments());
262  0 var out = new ByteArrayOutputStream();
263  0 try
264    {
265  0 marshaller.marshal(argList, out);
266    } catch (JAXBException e)
267    {
268  0 throw new IOException("Unable to generate parameters file", e);
269    }
270  0 return out.toString();
271    }
272   
273    }