Clover icon

Coverage Report

  1. Project Clover database Thu Nov 7 2024 10:11:34 GMT
  2. Package jalview.gui

File OptsAndParamsPage.java

 

Coverage histogram

../../img/srcFileCovDistChart0.png
60% of files have more coverage

Code metrics

128
267
49
3
942
749
131
0.49
5.45
16.33
2.67

Classes

Class Line # Actions
OptsAndParamsPage 72 49 23
0.00%
OptsAndParamsPage.OptionBox 79 55 34
0.00%
OptsAndParamsPage.ParamBox 273 163 74
0.00%
 

Contributing tests

No tests hitting this source file were found.

Source view

1    /*
2    * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
3    * Copyright (C) $$Year-Rel$$ The Jalview Authors
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
10    * of the License, or (at your option) any later version.
11    *
12    * Jalview is distributed in the hope that it will be useful, but
13    * WITHOUT ANY WARRANTY; without even the implied warranty
14    * of MERCHANTABILITY or FITNESS FOR A PARTICULAR
15    * PURPOSE. See the GNU General Public License for more details.
16    *
17    * You should have received a copy of the GNU General Public License
18    * along with Jalview. If not, see <http://www.gnu.org/licenses/>.
19    * The Jalview Authors are detailed in the 'AUTHORS' file.
20    */
21    package jalview.gui;
22   
23    import java.awt.BorderLayout;
24    import java.awt.Component;
25    import java.awt.Dimension;
26    import java.awt.Font;
27    import java.awt.GridLayout;
28    import java.awt.Rectangle;
29    import java.awt.event.ActionEvent;
30    import java.awt.event.ActionListener;
31    import java.awt.event.FocusAdapter;
32    import java.awt.event.FocusEvent;
33    import java.awt.event.KeyEvent;
34    import java.awt.event.KeyListener;
35    import java.awt.event.MouseEvent;
36    import java.awt.event.MouseListener;
37    import java.net.URL;
38    import java.util.ArrayList;
39    import java.util.List;
40    import java.util.Map;
41   
42    import javax.swing.JButton;
43    import javax.swing.JCheckBox;
44    import javax.swing.JComboBox;
45    import javax.swing.JComponent;
46    import javax.swing.JLabel;
47    import javax.swing.JMenuItem;
48    import javax.swing.JPanel;
49    import javax.swing.JPopupMenu;
50    import javax.swing.JScrollPane;
51    import javax.swing.JTextArea;
52    import javax.swing.JTextField;
53    import javax.swing.border.TitledBorder;
54    import javax.swing.event.ChangeEvent;
55    import javax.swing.event.ChangeListener;
56   
57    import jalview.util.MessageManager;
58    import jalview.ws.params.ArgumentI;
59    import jalview.ws.params.OptionI;
60    import jalview.ws.params.ParameterI;
61    import jalview.ws.params.ValueConstrainI;
62    import jalview.ws.params.ValueConstrainI.ValueType;
63    import net.miginfocom.swing.MigLayout;
64   
65    /**
66    * GUI generator/manager for options and parameters. Originally abstracted from
67    * the WsJobParameters dialog box.
68    *
69    * @author jprocter
70    *
71    */
 
72    public class OptsAndParamsPage
73    {
74    /**
75    * compact or verbose style parameters
76    */
77    boolean compact = false;
78   
 
79    public class OptionBox extends JPanel
80    implements MouseListener, ActionListener
81    {
82    JCheckBox enabled = new JCheckBox();
83   
84    final URL finfo;
85   
86    boolean hasLink = false;
87   
88    boolean initEnabled = false;
89   
90    String initVal = null;
91   
92    OptionI option;
93   
94    JLabel optlabel = new JLabel();
95   
96    JComboBox<String> val = new JComboBox<>();
97   
 
98  0 toggle public OptionBox(OptionI opt)
99    {
100  0 option = opt;
101  0 setLayout(new BorderLayout());
102  0 enabled.setSelected(opt.isRequired()); // TODO: lock required options
103  0 enabled.setFont(new Font("Verdana", Font.PLAIN, 11));
104  0 enabled.setText("");
105  0 enabled.setText(opt.getName());
106  0 enabled.addActionListener(this);
107  0 finfo = option.getFurtherDetails();
108  0 String desc = opt.getDescription();
109  0 if (finfo != null)
110    {
111  0 hasLink = true;
112   
113  0 enabled.setToolTipText(JvSwingUtils.wrapTooltip(true,
114  0 ((desc == null || desc.trim().length() == 0)
115    ? MessageManager.getString(
116    "label.opt_and_params_further_details")
117    : desc) + "<br><img src=\"" + linkImageURL
118    + "\"/>"));
119  0 enabled.addMouseListener(this);
120    }
121    else
122    {
123  0 if (desc != null && desc.trim().length() > 0)
124    {
125  0 enabled.setToolTipText(
126    JvSwingUtils.wrapTooltip(true, opt.getDescription()));
127    }
128    }
129  0 add(enabled, BorderLayout.NORTH);
130  0 for (String str : opt.getPossibleValues())
131    {
132  0 val.addItem(str);
133    }
134  0 val.setSelectedItem(opt.getValue());
135  0 if (opt.getPossibleValues().size() > 1)
136    {
137  0 setLayout(new GridLayout(1, 2));
138  0 val.addActionListener(this);
139  0 add(val, BorderLayout.SOUTH);
140    }
141    // TODO: add actionListeners for popup (to open further info),
142    // and to update list of parameters if an option is enabled
143    // that takes a value. JBPNote: is this TODO still valid ?
144  0 setInitialValue();
145    }
146   
 
147  0 toggle @Override
148    public void actionPerformed(ActionEvent e)
149    {
150  0 if (e.getSource() != enabled)
151    {
152  0 enabled.setSelected(true);
153    }
154  0 checkIfModified();
155    }
156   
 
157  0 toggle private void checkIfModified()
158    {
159  0 boolean notmod = (initEnabled == enabled.isSelected());
160  0 if (enabled.isSelected())
161    {
162  0 if (initVal != null)
163    {
164  0 notmod &= initVal.equals(val.getSelectedItem());
165    }
166    else
167    {
168    // compare against default service setting
169  0 notmod &= option.getValue() == null
170    || option.getValue().equals(val.getSelectedItem());
171    }
172    }
173    else
174    {
175  0 notmod &= (initVal != null) ? initVal.equals(val.getSelectedItem())
176    : val.getSelectedItem() != initVal;
177    }
178  0 poparent.argSetModified(this, !notmod);
179    }
180   
 
181  0 toggle public OptionI getOptionIfEnabled()
182    {
183  0 if (!enabled.isSelected())
184    {
185  0 return null;
186    }
187  0 OptionI opt = option.copy();
188  0 if (opt.getPossibleValues() != null
189    && opt.getPossibleValues().size() == 1)
190    {
191    // Hack to make sure the default value for an enabled option with only
192    // one value is actually returned
193  0 opt.setValue(opt.getPossibleValues().get(0));
194    }
195  0 if (val.getSelectedItem() != null)
196    {
197  0 opt.setValue((String) val.getSelectedItem());
198    }
199    else
200    {
201  0 if (option.getValue() != null)
202    {
203  0 opt.setValue(option.getValue());
204    }
205    }
206  0 return opt;
207    }
208   
 
209  0 toggle @Override
210    public void mouseClicked(MouseEvent e)
211    {
212  0 if (e.isPopupTrigger()) // for Windows
213    {
214  0 showUrlPopUp(this, finfo.toString(), e.getX(), e.getY());
215    }
216    }
217   
 
218  0 toggle @Override
219    public void mouseEntered(MouseEvent e)
220    {
221    // TODO Auto-generated method stub
222   
223    }
224   
 
225  0 toggle @Override
226    public void mouseExited(MouseEvent e)
227    {
228    // TODO Auto-generated method stub
229   
230    }
231   
 
232  0 toggle @Override
233    public void mousePressed(MouseEvent e)
234    {
235  0 if (e.isPopupTrigger()) // Mac
236    {
237  0 showUrlPopUp(this, finfo.toString(), e.getX(), e.getY());
238    }
239    }
240   
 
241  0 toggle @Override
242    public void mouseReleased(MouseEvent e)
243    {
244    }
245   
 
246  0 toggle public void resetToDefault(boolean setDefaultParams)
247    {
248  0 enabled.setSelected(false);
249  0 if (option.isRequired()
250    || (setDefaultParams && option.getValue() != null))
251    {
252    // Apply default value
253  0 selectOption(option, option.getValue());
254    }
255    }
256   
 
257  0 toggle public void setInitialValue()
258    {
259  0 initEnabled = enabled.isSelected();
260  0 if (option.getPossibleValues() != null
261    && option.getPossibleValues().size() > 1)
262    {
263  0 initVal = (String) val.getSelectedItem();
264    }
265    else
266    {
267  0 initVal = (initEnabled) ? (String) val.getSelectedItem() : null;
268    }
269    }
270   
271    }
272   
 
273    public class ParamBox extends JPanel
274    implements ChangeListener, ActionListener, MouseListener
275    {
276    boolean adjusting = false;
277   
278    boolean choice = false;
279   
280    JComboBox<String> choicebox;
281   
282    JPanel controlPanel = new JPanel();
283   
284    boolean descisvisible = false;
285   
286    JScrollPane descPanel = new JScrollPane();
287   
288    final URL finfo;
289   
290    boolean integ = false;
291   
292    String lastVal;
293   
294    ParameterI parameter;
295   
296    final OptsParametersContainerI pmdialogbox;
297   
298    JPanel settingPanel = new JPanel();
299   
300    JButton showDesc = new JButton();
301   
302    Slider slider = null;
303   
304    JTextArea string = new JTextArea();
305   
306    ValueConstrainI validator = null;
307   
308    JTextField valueField = null;
309   
 
310  0 toggle public ParamBox(final OptsParametersContainerI pmlayout,
311    ParameterI parm)
312    {
313  0 pmdialogbox = pmlayout;
314  0 finfo = parm.getFurtherDetails();
315  0 validator = parm.getValidValue();
316  0 parameter = parm;
317  0 if (validator != null)
318    {
319  0 integ = validator.getType() == ValueType.Integer;
320    }
321    else
322    {
323  0 if (parameter.getPossibleValues() != null)
324    {
325  0 choice = true;
326    }
327    }
328   
329  0 if (!compact)
330    {
331  0 makeExpanderParam(parm);
332    }
333    else
334    {
335  0 makeCompactParam(parm);
336   
337    }
338    }
339   
 
340  0 toggle private void makeCompactParam(ParameterI parm)
341    {
342  0 setLayout(new MigLayout("", "[][grow]"));
343   
344  0 String ttipText = null;
345   
346  0 controlPanel.setLayout(new BorderLayout());
347   
348  0 if (parm.getDescription() != null
349    && parm.getDescription().trim().length() > 0)
350    {
351    // Only create description boxes if there actually is a description.
352  0 ttipText = (JvSwingUtils.wrapTooltip(true,
353  0 parm.getDescription() + (finfo != null ? "<br><img src=\""
354    + linkImageURL + "\"/>"
355    + MessageManager.getString(
356    "label.opt_and_params_further_details")
357    : "")));
358    }
359   
360  0 JvSwingUtils.mgAddtoLayout(this, ttipText, new JLabel(parm.getName()),
361    controlPanel, "");
362  0 updateControls(parm);
363  0 validate();
364    }
365   
 
366  0 toggle private void makeExpanderParam(final ParameterI parm)
367    {
368  0 setPreferredSize(new Dimension(PARAM_WIDTH, PARAM_CLOSEDHEIGHT));
369  0 setBorder(new TitledBorder(parm.getName()));
370  0 setLayout(null);
371  0 showDesc.setFont(new Font("Verdana", Font.PLAIN, 6));
372  0 showDesc.setText("+");
373  0 string.setFont(new Font("Verdana", Font.PLAIN, 11));
374  0 string.setBackground(getBackground());
375   
376  0 string.setEditable(false);
377  0 descPanel.getViewport().setView(string);
378   
379  0 descPanel.setVisible(false);
380   
381  0 JPanel firstrow = new JPanel();
382  0 firstrow.setLayout(null);
383  0 controlPanel.setLayout(new BorderLayout());
384  0 controlPanel.setBounds(new Rectangle(39, 10, PARAM_WIDTH - 70,
385    PARAM_CLOSEDHEIGHT - 50));
386  0 firstrow.add(controlPanel);
387  0 firstrow.setBounds(new Rectangle(10, 20, PARAM_WIDTH - 30,
388    PARAM_CLOSEDHEIGHT - 30));
389   
390  0 final ParamBox me = this;
391   
392  0 if (parm.getDescription() != null
393    && parm.getDescription().trim().length() > 0)
394    {
395    // Only create description boxes if there actually is a description.
396  0 if (finfo != null)
397    {
398  0 showDesc.setToolTipText(JvSwingUtils.wrapTooltip(true,
399    MessageManager.formatMessage(
400    "label.opt_and_params_show_brief_desc_image_link",
401    new String[]
402    { linkImageURL.toExternalForm() })));
403  0 showDesc.addMouseListener(this);
404    }
405    else
406    {
407  0 showDesc.setToolTipText(
408    JvSwingUtils.wrapTooltip(true, MessageManager.getString(
409    "label.opt_and_params_show_brief_desc")));
410    }
411  0 showDesc.addActionListener(new ActionListener()
412    {
413   
 
414  0 toggle @Override
415    public void actionPerformed(ActionEvent e)
416    {
417  0 descisvisible = !descisvisible;
418  0 descPanel.setVisible(descisvisible);
419  0 descPanel.getVerticalScrollBar().setValue(0);
420  0 me.setPreferredSize(new Dimension(PARAM_WIDTH,
421  0 (descisvisible) ? PARAM_HEIGHT : PARAM_CLOSEDHEIGHT));
422  0 me.validate();
423  0 pmdialogbox.refreshParamLayout();
424    }
425    });
426  0 string.setWrapStyleWord(true);
427  0 string.setLineWrap(true);
428  0 string.setColumns(32);
429  0 string.setText(parm.getDescription());
430  0 showDesc.setBounds(new Rectangle(10, 10, 16, 16));
431  0 firstrow.add(showDesc);
432    }
433  0 add(firstrow);
434  0 validator = parm.getValidValue();
435  0 parameter = parm;
436  0 if (validator != null)
437    {
438  0 integ = validator.getType() == ValueType.Integer;
439    }
440    else
441    {
442  0 if (parameter.getPossibleValues() != null)
443    {
444  0 choice = true;
445    }
446    }
447  0 updateControls(parm);
448  0 descPanel.setBounds(new Rectangle(10, PARAM_CLOSEDHEIGHT,
449    PARAM_WIDTH - 20, PARAM_HEIGHT - PARAM_CLOSEDHEIGHT - 5));
450  0 add(descPanel);
451  0 validate();
452    }
453   
454    /**
455    * Action on input in text field
456    */
 
457  0 toggle @Override
458    public void actionPerformed(ActionEvent e)
459    {
460  0 if (adjusting)
461    {
462  0 return;
463    }
464  0 if (!choice)
465    {
466  0 updateSliderFromValueField();
467    }
468  0 checkIfModified();
469    }
470   
 
471  0 toggle private void checkIfModified()
472    {
473  0 Object cstate = getCurrentValue();
474  0 boolean modified = !cstate.equals(lastVal);
475  0 pmdialogbox.argSetModified(this, modified);
476    }
477   
478    /**
479    * Answers the current value of the parameter, as text
480    *
481    * @return
482    */
 
483  0 toggle private String getCurrentValue()
484    {
485  0 return choice ? (String) choicebox.getSelectedItem()
486    : valueField.getText();
487    }
488   
 
489  0 toggle @Override
490    public int getBaseline(int width, int height)
491    {
492  0 return 0;
493    }
494   
495    // from
496    // http://stackoverflow.com/questions/2743177/top-alignment-for-flowlayout
497    // helpful hint of using the Java 1.6 alignBaseLine property of FlowLayout
 
498  0 toggle @Override
499    public Component.BaselineResizeBehavior getBaselineResizeBehavior()
500    {
501  0 return Component.BaselineResizeBehavior.CONSTANT_ASCENT;
502    }
503   
 
504  0 toggle public int getBoxHeight()
505    {
506  0 return (descisvisible ? PARAM_HEIGHT : PARAM_CLOSEDHEIGHT);
507    }
508   
 
509  0 toggle public ParameterI getParameter()
510    {
511  0 ParameterI prm = parameter.copy();
512  0 if (choice)
513    {
514  0 prm.setValue((String) choicebox.getSelectedItem());
515    }
516    else
517    {
518  0 prm.setValue(valueField.getText());
519    }
520  0 return prm;
521    }
522   
 
523  0 toggle public void init()
524    {
525    // reset the widget's initial value.
526  0 lastVal = null;
527    }
528   
 
529  0 toggle @Override
530    public void mouseClicked(MouseEvent e)
531    {
532  0 if (e.isPopupTrigger()) // for Windows
533    {
534  0 showUrlPopUp(this, finfo.toString(), e.getX(), e.getY());
535    }
536    }
537   
 
538  0 toggle @Override
539    public void mouseEntered(MouseEvent e)
540    {
541    // TODO Auto-generated method stub
542   
543    }
544   
 
545  0 toggle @Override
546    public void mouseExited(MouseEvent e)
547    {
548    // TODO Auto-generated method stub
549   
550    }
551   
 
552  0 toggle @Override
553    public void mousePressed(MouseEvent e)
554    {
555  0 if (e.isPopupTrigger()) // for Mac
556    {
557  0 showUrlPopUp(this, finfo.toString(), e.getX(), e.getY());
558    }
559    }
560   
 
561  0 toggle @Override
562    public void mouseReleased(MouseEvent e)
563    {
564    // TODO Auto-generated method stub
565   
566    }
567   
568    /**
569    * Action on change of slider value
570    */
 
571  0 toggle @Override
572    public void stateChanged(ChangeEvent e)
573    {
574  0 if (!adjusting)
575    {
576  0 float value = slider.getSliderValue();
577  0 valueField.setText(integ ? Integer.toString((int) value)
578    : Float.toString(value));
579  0 checkIfModified();
580    }
581    }
582   
 
583  0 toggle public void updateControls(ParameterI parm)
584    {
585  0 adjusting = true;
586  0 boolean init = (choicebox == null && valueField == null);
587  0 if (init)
588    {
589  0 if (choice)
590    {
591  0 choicebox = new JComboBox<>();
592  0 choicebox.addActionListener(this);
593  0 controlPanel.add(choicebox, BorderLayout.CENTER);
594    }
595    else
596    {
597  0 valueField = new JTextField();
598  0 valueField.addActionListener(this);
599  0 valueField.addKeyListener(new KeyListener()
600    {
601   
 
602  0 toggle @Override
603    public void keyTyped(KeyEvent e)
604    {
605    }
606   
 
607  0 toggle @Override
608    public void keyReleased(KeyEvent e)
609    {
610  0 if (e.isActionKey())
611    {
612  0 if (valueField.getText().trim().length() > 0)
613    {
614  0 actionPerformed(null);
615    }
616    }
617    }
618   
 
619  0 toggle @Override
620    public void keyPressed(KeyEvent e)
621    {
622    }
623    });
624  0 valueField.addFocusListener(new FocusAdapter()
625    {
626   
 
627  0 toggle @Override
628    public void focusLost(FocusEvent e)
629    {
630  0 actionPerformed(null);
631    }
632   
633    });
634  0 valueField.setPreferredSize(new Dimension(60, 25));
635  0 valueField.setText(parm.getValue());
636  0 slider = makeSlider(parm.getValidValue());
637  0 updateSliderFromValueField();
638  0 slider.addChangeListener(this);
639   
640  0 controlPanel.add(slider, BorderLayout.WEST);
641  0 controlPanel.add(valueField, BorderLayout.EAST);
642    }
643    }
644   
645  0 if (parm != null)
646    {
647  0 if (choice)
648    {
649  0 if (init)
650    {
651  0 List<String> vals = parm.getPossibleValues();
652  0 for (String val : vals)
653    {
654  0 choicebox.addItem(val);
655    }
656    }
657   
658  0 if (parm.getValue() != null)
659    {
660  0 choicebox.setSelectedItem(parm.getValue());
661    }
662    }
663    else
664    {
665  0 valueField.setText(parm.getValue());
666    }
667    }
668  0 lastVal = getCurrentValue();
669  0 adjusting = false;
670    }
671   
 
672  0 toggle private Slider makeSlider(ValueConstrainI validValue)
673    {
674  0 if (validValue != null)
675    {
676  0 final Number minValue = validValue.getMin();
677  0 final Number maxValue = validValue.getMax();
678  0 if (minValue != null && maxValue != null)
679    {
680  0 return new Slider(minValue.floatValue(), maxValue.floatValue(),
681    minValue.floatValue());
682    }
683    }
684   
685    /*
686    * otherwise, a nominal slider which will not be visible
687    */
688  0 return new Slider(0, 100, 50);
689    }
690   
 
691  0 toggle public void updateSliderFromValueField()
692    {
693  0 if (validator != null)
694    {
695  0 final Number minValue = validator.getMin();
696  0 final Number maxValue = validator.getMax();
697  0 if (integ)
698    {
699  0 int iVal = 0;
700  0 try
701    {
702  0 valueField.setText(valueField.getText().trim());
703  0 iVal = Integer.valueOf(valueField.getText());
704  0 if (minValue != null && minValue.intValue() > iVal)
705    {
706  0 iVal = minValue.intValue();
707    // TODO: provide visual indication that hard limit was reached for
708    // this parameter
709    }
710  0 if (maxValue != null && maxValue.intValue() < iVal)
711    {
712  0 iVal = maxValue.intValue();
713    }
714    } catch (NumberFormatException e)
715    {
716  0 jalview.bin.Console.errPrintln(e.toString());
717    }
718  0 if (minValue != null || maxValue != null)
719    {
720  0 valueField.setText(String.valueOf(iVal));
721  0 slider.setSliderValue(iVal);
722    }
723    else
724    {
725  0 slider.setVisible(false);
726    }
727    }
728    else
729    {
730  0 float fVal = 0f;
731  0 try
732    {
733  0 valueField.setText(valueField.getText().trim());
734  0 fVal = Float.valueOf(valueField.getText());
735  0 if (minValue != null && minValue.floatValue() > fVal)
736    {
737  0 fVal = minValue.floatValue();
738    // TODO: provide visual indication that hard limit was reached for
739    // this parameter
740    // update value field to reflect any bound checking we performed.
741  0 valueField.setText("" + fVal);
742    }
743  0 if (maxValue != null && maxValue.floatValue() < fVal)
744    {
745  0 fVal = maxValue.floatValue();
746    // TODO: provide visual indication that hard limit was reached for
747    // this parameter
748    // update value field to reflect any bound checking we performed.
749  0 valueField.setText("" + fVal);
750    }
751    } catch (NumberFormatException e)
752    {
753  0 jalview.bin.Console.errPrintln(e.toString());
754    }
755  0 if (minValue != null && maxValue != null)
756    {
757  0 slider.setSliderModel(minValue.floatValue(),
758    maxValue.floatValue(), fVal);
759    }
760    else
761    {
762  0 slider.setVisible(false);
763    }
764    }
765    }
766    else
767    {
768  0 if (!choice)
769    {
770  0 slider.setVisible(false);
771    }
772    }
773    }
774    }
775   
776    public static final int PARAM_WIDTH = 340;
777   
778    public static final int PARAM_HEIGHT = 150;
779   
780    public static final int PARAM_CLOSEDHEIGHT = 80;
781   
 
782  0 toggle public OptsAndParamsPage(OptsParametersContainerI paramContainer)
783    {
784  0 this(paramContainer, false);
785    }
786   
 
787  0 toggle public OptsAndParamsPage(OptsParametersContainerI paramContainer,
788    boolean compact)
789    {
790  0 poparent = paramContainer;
791  0 this.compact = compact;
792    }
793   
 
794  0 toggle public static void showUrlPopUp(JComponent invoker, final String finfo,
795    int x, int y)
796    {
797   
798  0 JPopupMenu mnu = new JPopupMenu();
799  0 JMenuItem mitem = new JMenuItem(
800    MessageManager.formatMessage("label.view_params", new String[]
801    { finfo }));
802  0 mitem.addActionListener(new ActionListener()
803    {
804   
 
805  0 toggle @Override
806    public void actionPerformed(ActionEvent e)
807    {
808  0 Desktop.showUrl(finfo);
809   
810    }
811    });
812  0 mnu.add(mitem);
813  0 mnu.show(invoker, x, y);
814    }
815   
816    URL linkImageURL = getClass().getResource("/images/link.gif");
817   
818    Map<String, OptionBox> optSet = new java.util.LinkedHashMap<>();
819   
820    Map<String, ParamBox> paramSet = new java.util.LinkedHashMap<>();
821   
 
822  0 toggle public Map<String, OptionBox> getOptSet()
823    {
824  0 return optSet;
825    }
826   
 
827  0 toggle public void setOptSet(Map<String, OptionBox> optSet)
828    {
829  0 this.optSet = optSet;
830    }
831   
 
832  0 toggle public Map<String, ParamBox> getParamSet()
833    {
834  0 return paramSet;
835    }
836   
 
837  0 toggle public void setParamSet(Map<String, ParamBox> paramSet)
838    {
839  0 this.paramSet = paramSet;
840    }
841   
842    OptsParametersContainerI poparent;
843   
 
844  0 toggle OptionBox addOption(OptionI opt)
845    {
846  0 OptionBox cb = optSet.get(opt.getName());
847  0 if (cb == null)
848    {
849  0 cb = new OptionBox(opt);
850  0 optSet.put(opt.getName(), cb);
851    // jobOptions.add(cb, FlowLayout.LEFT);
852    }
853  0 return cb;
854    }
855   
 
856  0 toggle ParamBox addParameter(ParameterI arg)
857    {
858  0 ParamBox pb = paramSet.get(arg.getName());
859  0 if (pb == null)
860    {
861  0 pb = new ParamBox(poparent, arg);
862  0 paramSet.put(arg.getName(), pb);
863    // paramList.add(pb);
864    }
865  0 pb.init();
866    // take the defaults from the parameter
867  0 pb.updateControls(arg);
868  0 return pb;
869    }
870   
 
871  0 toggle void selectOption(OptionI option, String string)
872    {
873  0 OptionBox cb = optSet.get(option.getName());
874  0 if (cb == null)
875    {
876  0 cb = addOption(option);
877    }
878  0 cb.enabled.setSelected(string != null); // initial state for an option.
879  0 if (string != null)
880    {
881  0 if (option.getPossibleValues().contains(string))
882    {
883  0 cb.val.setSelectedItem(string);
884    }
885    else
886    {
887  0 throw new Error(MessageManager.formatMessage(
888    "error.invalid_value_for_option", new String[]
889    { string, option.getName() }));
890    }
891   
892    }
893  0 if (option.isRequired() && !cb.enabled.isSelected())
894    {
895    // TODO: indicate paramset is not valid.. option needs to be selected!
896    }
897  0 cb.setInitialValue();
898    }
899   
 
900  0 toggle void setParameter(ParameterI arg)
901    {
902  0 ParamBox pb = paramSet.get(arg.getName());
903  0 if (pb == null)
904    {
905  0 addParameter(arg);
906    }
907    else
908    {
909  0 pb.updateControls(arg);
910    }
911   
912    }
913   
914    /**
915    * recover options and parameters from GUI
916    *
917    * @return
918    */
 
919  0 toggle public List<ArgumentI> getCurrentSettings()
920    {
921  0 List<ArgumentI> argSet = new ArrayList<>();
922  0 for (OptionBox opts : getOptSet().values())
923    {
924  0 OptionI opt = opts.getOptionIfEnabled();
925  0 if (opt != null)
926    {
927  0 argSet.add(opt);
928    }
929    }
930  0 for (ParamBox parambox : getParamSet().values())
931    {
932  0 ParameterI parm = parambox.getParameter();
933  0 if (parm != null)
934    {
935  0 argSet.add(parm);
936    }
937    }
938   
939  0 return argSet;
940    }
941   
942    }