Jalview 2.8 Source Header
[jalview.git] / src / jalview / ws / jws2 / dm / AAConSettings.java
1 /*
2  * Jalview - A Sequence Alignment Editor and Viewer (Version 2.8)
3  * Copyright (C) 2012 J Procter, AM Waterhouse, LM Lui, J Engelhardt, G Barton, M Clamp, S Searle
4  * 
5  * This file is part of Jalview.
6  * 
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 of the License, or (at your option) any later version.
10  *  
11  * Jalview is distributed in the hope that it will be useful, but 
12  * WITHOUT ANY WARRANTY; without even the implied warranty 
13  * of MERCHANTABILITY or FITNESS FOR A PARTICULAR 
14  * PURPOSE.  See the GNU General Public License for more details.
15  * 
16  * You should have received a copy of the GNU General Public License along with Jalview.  If not, see <http://www.gnu.org/licenses/>.
17  */
18 package jalview.ws.jws2.dm;
19
20 import java.util.ArrayList;
21 import java.util.List;
22
23 import compbio.metadata.Argument;
24 import compbio.metadata.Option;
25 import compbio.metadata.Preset;
26
27 import jalview.ws.jws2.JabaParamStore;
28 import jalview.ws.jws2.JabaPreset;
29 import jalview.ws.jws2.ParameterUtils;
30 import jalview.ws.jws2.jabaws2.Jws2Instance;
31 import jalview.ws.params.ArgumentI;
32 import jalview.ws.params.ParamManager;
33 import jalview.ws.params.WsParamSetI;
34
35 /**
36  * preferences for running AACon service
37  * 
38  * @author jprocter TODO: refactor to a generic 'last job and service run'
39  *         container ?
40  */
41 public class AAConSettings extends jalview.ws.params.AutoCalcSetting
42 {
43   Jws2Instance service;
44
45   public AAConSettings(boolean autoUpdate, Jws2Instance service,
46           WsParamSetI preset, List<ArgumentI> jobArgset)
47   {
48     super(preset, jobArgset, autoUpdate);
49     this.service = service;
50   }
51
52   public Jws2Instance getService()
53   {
54     return service;
55   }
56
57   public void setService(Jws2Instance service)
58   {
59     this.service = service;
60     if (preset != null)
61     {
62       // migrate preset to new service
63       for (String url : preset.getApplicableUrls())
64       {
65         if (url.equals(service.getUri()))
66         {
67           return;
68         }
69       }
70       WsParamSetI pr = service.getParamStore().getPreset(preset.getName());
71       if (pr instanceof JabaPreset && preset instanceof JabaPreset)
72       {
73         // easy - Presets are identical (we assume)
74         preset = pr;
75         return;
76       }
77       List<ArgumentI> oldargs = new ArrayList<ArgumentI>(), newargs = new ArrayList<ArgumentI>();
78       oldargs.addAll(preset.getArguments());
79       // need to compare parameters
80       for (ArgumentI newparg : pr.getArguments())
81       {
82         if (!oldargs.remove(newparg))
83         {
84           newargs.add(newparg);
85         }
86       }
87       if (oldargs.size() == 0 && newargs.size() == 0)
88       {
89         // exact match.
90         preset = pr;
91         return;
92       }
93       // Try even harder to migrate arguments.
94       throw new Error("Parameter migration not implemented yet");
95     }
96   }
97
98   public List<Argument> getJobArgset()
99   {
100     return jobArgset == null ? null : JabaParamStore
101             .getJabafromJwsArgs(jobArgset);
102   }
103
104   public void setJobArgset(List<Argument> jobArgset)
105   {
106     // TODO: test if parameters valid for service
107     this.jobArgset = jobArgset == null ? null : JabaParamStore
108             .getJwsArgsfromJaba(jobArgset);
109   }
110
111   public String getWsParamFile()
112   {
113     List<Option> opts = null;
114     if (jobArgset != null)
115     {
116       opts = JabaParamStore.getJabafromJwsArgs(jobArgset);
117     }
118     else
119     {
120       if (preset != null)
121       {
122         opts = JabaParamStore.getJabafromJwsArgs(preset.getArguments());
123       }
124     }
125     if (opts == null || opts.size() == 0)
126     {
127       return "";
128     }
129     StringBuffer pset = new StringBuffer();
130     for (String ps : ParameterUtils.writeParameterSet(opts, " "))
131     {
132       pset.append(ps);
133       pset.append("\n");
134     }
135     return pset.toString();
136   }
137
138   @Override
139   public String getServiceURI()
140   {
141     return service.getServiceTypeURI();
142   }
143
144   @Override
145   public String[] getServiceURLs()
146   {
147     return new String[]
148     { service.getUri() };
149   }
150 }