JAL-2937 use preferences for presets, simplify some constructors
[jalview.git] / src / jalview / hmmer / HMMERParamStore.java
1 package jalview.hmmer;
2
3 import jalview.bin.Cache;
4 import jalview.gui.Preferences;
5 import jalview.util.MessageManager;
6 import jalview.viewmodel.AlignmentViewport;
7 import jalview.ws.params.ArgumentI;
8 import jalview.ws.params.ParamDatastoreI;
9 import jalview.ws.params.WsParamSetI;
10 import jalview.ws.params.simple.BooleanOption;
11 import jalview.ws.params.simple.IntegerParameter;
12 import jalview.ws.params.simple.LogarithmicParameter;
13 import jalview.ws.params.simple.Option;
14 import jalview.ws.params.simple.StringParameter;
15
16 import java.io.IOException;
17 import java.util.ArrayList;
18 import java.util.Collection;
19 import java.util.List;
20 import java.util.Scanner;
21
22 public final class HMMERParamStore implements ParamDatastoreI
23 {
24   private static final String HMMBUILD = "hmmbuild";
25
26   private static final String HMMALIGN = "hmmalign";
27
28   private static final String HMMSEARCH = "hmmsearch";
29
30   private String name;
31
32   private List<WsParamSetI> presets = new ArrayList<>();
33
34   private AlignmentViewport viewport;
35
36   private HMMERParamStore(String nam, AlignmentViewport av)
37   {
38     this.viewport = av;
39     this.name = nam;
40   }
41
42   public static HMMERParamStore forBuild(AlignmentViewport viewport)
43   {
44     return new HMMERParamStore(HMMBUILD, viewport);
45   }
46
47   public static HMMERParamStore forAlign(AlignmentViewport viewport)
48   {
49     return new HMMERParamStore(HMMALIGN, viewport);
50   }
51
52   public static HMMERParamStore forSearch(AlignmentViewport viewport)
53   {
54     return new HMMERParamStore(HMMSEARCH, viewport);
55   }
56
57   @Override
58   public List<WsParamSetI> getPresets()
59   {
60     return presets;
61   }
62
63   @Override
64   public WsParamSetI getPreset(String nam)
65   {
66     return null;
67   }
68
69   @Override
70   public List<ArgumentI> getServiceParameters()
71   {
72     List<ArgumentI> args = new ArrayList<>();
73     switch (name)
74     {
75     case HMMSEARCH:
76       getHMMSearchParams(args);
77       break;
78     case HMMALIGN:
79       getHMMAlignParams(args);
80       break;
81     case HMMBUILD:
82       getHMMBuildParams(args);
83       break;
84     default:
85     }
86
87     return args;
88   }
89
90   /**
91    * Answers default parameters for hmmsearch, taking into account any
92    * configured as user preferences
93    * 
94    * @param args
95    */
96   private void getHMMSearchParams(List<ArgumentI> args)
97   {
98     args.add(new IntegerParameter(
99             MessageManager.getString("label.number_of_results"),
100             MessageManager.getString("label.number_of_results_desc"), true,
101             100, 0, 100000));
102     String names = Cache.getProperty(Preferences.HMMSEARCH_DBS);
103     if (names != null && !names.isEmpty())
104     {
105       Collection<String> databases = new ArrayList<>();
106       databases.add(MessageManager.getString("label.this_alignment"));
107       Scanner nameScanner = new Scanner(names);
108
109       if (nameScanner.hasNext())
110       {
111         while (nameScanner.hasNext())
112         {
113           String next = nameScanner.next();
114           if ("null".equals(next))
115           {
116             Cache.setProperty(Preferences.HMMSEARCH_DBS, "");
117             Cache.setProperty(Preferences.HMMSEARCH_DB_PATHS, "");
118           }
119           else
120           {
121             databases.add(next);
122           }
123         }
124       }
125       nameScanner.close();
126       args.add(new Option(MessageManager.getString("label.database"),
127               MessageManager.getString("label.database_for_hmmsearch"),
128               true, MessageManager.getString("label.this_alignment"),
129               MessageManager.getString("label.this_alignment"), databases,
130               null));
131     }
132     args.add(new BooleanOption(
133             MessageManager.getString("label.auto_align_seqs"),
134             MessageManager.getString("label.auto_align_seqs_desc"), false,
135             false, true, null));
136     args.add(new BooleanOption(
137             MessageManager.getString("label.use_accessions"),
138             MessageManager.getString("label.use_accessions_desc"), false,
139             false, true, null));
140     args.add(new BooleanOption(
141             MessageManager.getString("label.trim_termini"),
142             MessageManager.getString("label.trim_termini_desc"), false,
143             false, true, null));
144     args.add(new LogarithmicParameter(
145             MessageManager.getString("label.seq_e_value"),
146             MessageManager.getString("label.seq_e_value_desc"), false, -3d,
147             -37.92977945, 1d, 10d));
148     /*
149     args.add(new DoubleParameter(
150             MessageManager.getString("label.seq_score"),
151             MessageManager.getString("label.seq_score_desc"), false,
152             0d, 0d, 10000d));
153        */
154     args.add(new LogarithmicParameter(
155             MessageManager.getString("label.dom_e_value"),
156             MessageManager.getString("label.dom_e_value_desc"), false, -3d,
157             -37.92977945, 1d, 10d));
158     /*
159     args.add(new DoubleParameter(
160             MessageManager.getString("label.dom_score"),
161             MessageManager.getString("label.dom_score_desc"), false, 0d,
162             0d,
163             10000d));
164             */
165   }
166
167   /**
168    * Answers default parameters for hmmalign, taking into account any configured
169    * as user preferences
170    * 
171    * @param args
172    */
173   private void getHMMAlignParams(List<ArgumentI> args)
174   {
175     boolean def = Cache.getDefault(Preferences.HMMALIGN_TRIM_TERMINI,
176             false);
177     args.add(new BooleanOption(
178             MessageManager.getString("label.trim_termini"),
179             MessageManager.getString("label.trim_termini_desc"),
180             false, false, def, null));
181   }
182
183   /**
184    * Answers default parameters for hmmbuild, taking into account any configured
185    * as user preferences
186    * 
187    * @param args
188    */
189   private void getHMMBuildParams(List<ArgumentI> args)
190   {
191     args.add(new StringParameter(MessageManager.getString("label.hmm_name"),
192             MessageManager.getString("label.hmm_name_desc"), true, ""));
193     // todo only enable Use Reference Annotation if RF is present
194     if (viewport.hasReferenceAnnotation())
195     {
196       args.add(new BooleanOption(
197               MessageManager.getString("label.use_reference"),
198               MessageManager.getString("label.use_reference_desc"), true,
199               true, true, null));
200     }
201
202     Collection<String> options = new ArrayList<>();
203     options.add(MessageManager.getString("label.alignment"));
204     options.add(MessageManager.getString("label.groups_and_alignment"));
205     options.add(MessageManager.getString("label.groups"));
206     options.add(MessageManager.getString("label.selected_group"));
207
208     args.add(new Option(MessageManager.getString("label.hmmbuild_for"),
209             MessageManager.getString("label.hmmbuild_for_desc"), true,
210             MessageManager.getString("label.alignment"),
211             MessageManager.getString("label.alignment"), options, null));
212   }
213
214   @Override
215   public boolean presetExists(String forName)
216   {
217     return false;
218   }
219
220   @Override
221   public void deletePreset(String forName)
222   {
223   }
224
225   @Override
226   public void storePreset(String presetName, String text,
227           List<ArgumentI> jobParams)
228   {
229   }
230
231   @Override
232   public void updatePreset(String oldName, String presetName, String text,
233           List<ArgumentI> jobParams)
234   {
235   }
236
237   @Override
238   public WsParamSetI parseServiceParameterFile(String forName,
239           String description, String[] serviceURL, String parameters)
240           throws IOException
241   {
242     return null;
243   }
244
245   @Override
246   public String generateServiceParameterFile(WsParamSetI pset)
247           throws IOException
248   {
249     return null;
250   }
251
252 }