JAL-975 - bespoke AACons settings object to save current service settings for the...
[jalview.git] / src / jalview / ws / jws2 / dm / AAConsSettings.java
1 package jalview.ws.jws2.dm;
2
3 import java.util.ArrayList;
4 import java.util.List;
5
6 import compbio.metadata.Argument;
7 import compbio.metadata.Preset;
8
9 import jalview.ws.jws2.JabaPreset;
10 import jalview.ws.jws2.jabaws2.Jws2Instance;
11 import jalview.ws.params.ArgumentI;
12 import jalview.ws.params.WsParamSetI;
13
14 /**
15  * preferences for running AACons service
16  * 
17  * @author jprocter TODO: refactor to a generic 'last job and service run'
18  *         container ?
19  */
20 public class AAConsSettings
21 {
22   boolean autoUpdate;
23
24   Jws2Instance service;
25
26   WsParamSetI preset;
27
28   List<Argument> jobArgset;
29
30   public AAConsSettings(boolean autoUpdate, Jws2Instance service,
31           WsParamSetI preset, List<Argument> jobArgset)
32   {
33     super();
34     this.autoUpdate = autoUpdate;
35     this.service = service;
36     this.preset = preset;
37     this.jobArgset = jobArgset;
38   }
39
40   public boolean isAutoUpdate()
41   {
42     return autoUpdate;
43   }
44
45   public void setAutoUpdate(boolean autoUpdate)
46   {
47     this.autoUpdate = autoUpdate;
48   }
49
50   public Jws2Instance getService()
51   {
52     return service;
53   }
54
55   public void setService(Jws2Instance service)
56   {
57     this.service = service;
58     if (preset != null)
59     {
60       // migrate preset to new service
61       for (String url : preset.getApplicableUrls())
62       {
63         if (url.equals(service.getUri()))
64         {
65           return;
66         }
67       }
68       WsParamSetI pr = service.getParamStore().getPreset(preset.getName());
69       if (pr instanceof JabaPreset && preset instanceof JabaPreset)
70       {
71         // easy - Presets are identical (we assume)
72         preset = pr;
73         return;
74       }
75       List<ArgumentI> oldargs = new ArrayList<ArgumentI>(), newargs = new ArrayList<ArgumentI>();
76       oldargs.addAll(preset.getArguments());
77       // need to compare parameters
78       for (ArgumentI newparg : pr.getArguments())
79       {
80         if (!oldargs.remove(newparg))
81         {
82           newargs.add(newparg);
83         }
84       }
85       if (oldargs.size() == 0 && newargs.size() == 0)
86       {
87         // exact match.
88         preset = pr;
89         return;
90       }
91       // Try even harder to migrate arguments.
92       throw new Error("Parameter migration not implemented yet");
93     }
94   }
95
96   public WsParamSetI getPreset()
97   {
98     return preset;
99   }
100
101   public void setPreset(WsParamSetI preset)
102   {
103     // TODO: test if service URL is in presets
104     this.preset = preset;
105   }
106
107   public List<Argument> getJobArgset()
108   {
109     return jobArgset;
110   }
111
112   public void setJobArgset(List<Argument> jobArgset)
113   {
114     // TODO: test if parameters valid for service
115     this.jobArgset = jobArgset;
116   }
117
118 }