3 import java.awt.BorderLayout;
5 import java.awt.Component;
6 import java.awt.Dimension;
7 import java.awt.FlowLayout;
9 import java.awt.GridLayout;
10 import java.awt.Rectangle;
11 import java.awt.event.ActionEvent;
12 import java.awt.event.ActionListener;
13 import java.awt.event.ComponentEvent;
14 import java.awt.event.ComponentListener;
15 import java.awt.event.ContainerEvent;
16 import java.awt.event.ContainerListener;
17 import java.awt.event.ItemEvent;
18 import java.awt.event.ItemListener;
19 import java.awt.event.KeyEvent;
20 import java.awt.event.KeyListener;
21 import java.awt.event.MouseEvent;
22 import java.awt.event.MouseListener;
23 import java.awt.event.WindowEvent;
24 import java.awt.event.WindowListener;
25 import java.awt.event.WindowStateListener;
26 import java.util.ArrayList;
27 import java.util.EventObject;
28 import java.util.HashSet;
29 import java.util.Hashtable;
30 import java.util.Iterator;
31 import java.util.List;
33 import java.util.Vector;
35 import javax.swing.JButton;
36 import javax.swing.JCheckBox;
37 import javax.swing.JComboBox;
38 import javax.swing.JDialog;
39 import javax.swing.JFrame;
40 import javax.swing.JLabel;
41 import javax.swing.JList;
42 import javax.swing.JOptionPane;
43 import javax.swing.JPanel;
44 import javax.swing.JScrollPane;
45 import javax.swing.JSlider;
46 import javax.swing.JSplitPane;
47 import javax.swing.JTable;
48 import javax.swing.JTextArea;
49 import javax.swing.JTextField;
50 import javax.swing.ListSelectionModel;
51 import javax.swing.SwingConstants;
52 import javax.swing.SwingUtilities;
53 import javax.swing.border.TitledBorder;
54 import javax.swing.event.CellEditorListener;
55 import javax.swing.event.ChangeEvent;
56 import javax.swing.event.ChangeListener;
57 import javax.swing.table.*;
59 import compbio.metadata.Argument;
60 import compbio.metadata.Option;
61 import compbio.metadata.Parameter;
62 import compbio.metadata.Preset;
63 import compbio.metadata.PresetManager;
64 import compbio.metadata.RunnerConfig;
65 import compbio.metadata.ValueConstrain;
66 import compbio.metadata.WrongParameterException;
67 import compbio.metadata.ValueConstrain.Type;
69 import jalview.ws.jws2.Jws2Discoverer;
70 import jalview.ws.jws2.Jws2Discoverer.Jws2Instance;
72 public class WsJobParameters extends JPanel implements ItemListener,
75 private static final int PARAM_WIDTH = 340, PARAM_HEIGHT = 150,
76 PARAM_CLOSEDHEIGHT = 80;
78 private static final int OPTSET_HEIGHT = 30;
80 JPanel setDetails = new JPanel();
82 JSplitPane settingsPanel = new JSplitPane();
84 JSplitPane jobPanel = new JSplitPane();
86 JPanel jobOptions = new JPanel();
88 JScrollPane jobOptionsPane = new JScrollPane();
90 JPanel jobParameters = new JPanel();
92 JButton savmodified = new JButton();
94 JButton renmodified = new JButton();
96 JButton startjob = new JButton();
98 JButton canceljob = new JButton();
100 JComboBox setName = new JComboBox();
102 JTextArea setDescr = new JTextArea();
104 JScrollPane paramPane = new JScrollPane();
106 // JList paramList = new JList();
107 JPanel paramList = new JPanel();
109 RunnerConfig serviceOptions;
111 private BorderLayout jparamLayout;
113 WsJobParameters(Jws2Instance service)
118 public WsJobParameters(Jws2Instance service, Preset p)
120 this(null, service, p, null);
126 * - if null, create new JFrame outside of desktop
130 public WsJobParameters(JFrame parent, Jws2Instance service, Preset p,
131 List<Argument> jobArgset)
135 // argSetModified(false);
136 // populate parameter table
137 initForService(service, p, jobArgset);
138 // display in new JFrame attached to parent.
144 JDialog frame = null;
146 public boolean showRunDialog()
149 frame = new JDialog(Desktop.instance, true);
151 frame.setTitle("Edit parameters for " + service.getActionText());
152 Rectangle deskr = Desktop.instance.getBounds();
153 frame.setBounds(new Rectangle((int) (deskr.getCenterX() - 240),
154 (int) (deskr.getCenterY() - 92), 380, 385));
155 frame.setContentPane(this);
157 frame.setVisible(true);
166 private void jbInit()
168 savmodified.setText("Save");
169 savmodified.setToolTipText("Not implemented yet :) ");
170 savmodified.setFont(new java.awt.Font("Verdana", Font.PLAIN, 10));
171 savmodified.setForeground(Color.red);
172 savmodified.setHorizontalAlignment(SwingConstants.RIGHT);
173 savmodified.addActionListener(new ActionListener()
176 public void actionPerformed(ActionEvent e)
178 savModified_actionPerformed(e);
181 renmodified.setText("Rename");
182 renmodified.setToolTipText("Not implemented yet :) ");
183 renmodified.setFont(new java.awt.Font("Verdana", Font.PLAIN, 10));
184 renmodified.setForeground(Color.red);
185 renmodified.setHorizontalAlignment(SwingConstants.CENTER);
186 renmodified.addActionListener(new ActionListener()
189 public void actionPerformed(ActionEvent e)
191 renModified_actionPerformed(e);
194 renmodified.setVisible(false);
195 startjob.setFont(new java.awt.Font("Verdana", Font.PLAIN, 10));
196 startjob.setText("Start");
197 startjob.setToolTipText("Start Job");
198 startjob.addActionListener(new ActionListener()
200 public void actionPerformed(ActionEvent e)
202 startjob_actionPerformed(e);
205 canceljob.setFont(new java.awt.Font("Verdana", Font.PLAIN, 10));
206 canceljob.setText("Cancel");
207 canceljob.setToolTipText("Cancel Job");
208 canceljob.addActionListener(new ActionListener()
210 public void actionPerformed(ActionEvent e)
212 canceljob_actionPerformed(e);
216 setDetails.setBorder(new TitledBorder("Details"));
217 setDetails.setLayout(new BorderLayout());
218 setDescr.setColumns(40);
219 setDescr.setWrapStyleWord(true);
220 setDescr.setLineWrap(true);
221 setDescr.setBackground(getBackground());
222 setDescr.setEditable(false);
223 JScrollPane setDescrView = new JScrollPane();
224 // setDescrView.setPreferredSize(new Dimension(350, 200));
225 setDescrView.getViewport().setView(setDescr);
226 setName.setEditable(true);
227 setName.addItemListener(this);
228 setName.getEditor().addActionListener(this);
229 savmodified.setEnabled(false); // initially unmodified parameters
230 // modified.setPreferredSize(new Dimension(15, 15));
231 JPanel SetNamePanel = new JPanel();
232 SetNamePanel.setLayout(new BorderLayout());
233 SetNamePanel.add(setName, BorderLayout.WEST);
234 SetNamePanel.add(renmodified, BorderLayout.CENTER);
235 SetNamePanel.add(savmodified, BorderLayout.EAST);
236 setDetails.add(SetNamePanel, BorderLayout.NORTH);
237 setDetails.add(setDescrView, BorderLayout.CENTER);
238 // setDetails.setPreferredSize(new Dimension(360, 100));
239 jobParameters.setBorder(new TitledBorder("Parameters"));
240 jobParameters.setLayout(jparamLayout = new BorderLayout());
241 paramPane.setPreferredSize(new Dimension(360, 300));
242 paramPane.getVerticalScrollBar().setUnitIncrement(20);
243 // paramPanel.setPreferredSize(new Dimension(360, 300));
244 // TODO: relayout buttons nicely
245 paramPane.getViewport().setView(paramList);
246 jobParameters.add(paramPane, BorderLayout.CENTER);
247 JPanel jobOptionsPanel = new JPanel();
248 jobOptionsPanel.setLayout(new BorderLayout());
249 jobOptionsPanel.setBorder(new TitledBorder("Options"));
250 jobOptionsPane.getViewport().setView(jobOptions);
251 jobOptionsPanel.add(jobOptionsPane, BorderLayout.CENTER);
252 settingsPanel.setLeftComponent(jobOptionsPanel);
253 settingsPanel.setRightComponent(jobParameters);
254 settingsPanel.setOrientation(JSplitPane.VERTICAL_SPLIT);
255 settingsPanel.setDividerLocation(0.4);
257 setLayout(new BorderLayout());
258 // setPreferredSize(new Dimension(400, 600));
259 // setSize(new Dimension(400, 600));
260 jobPanel.setLeftComponent(setDetails);
261 jobPanel.setRightComponent(settingsPanel);
262 jobPanel.setOrientation(JSplitPane.VERTICAL_SPLIT);
263 jobPanel.setDividerLocation(0.8);
264 add(jobPanel, BorderLayout.CENTER);
265 JPanel dialogpanel = new JPanel();
266 dialogpanel.add(startjob);
267 dialogpanel.add(canceljob);
268 add(dialogpanel, BorderLayout.SOUTH);
271 protected void renModified_actionPerformed(ActionEvent e)
274 // TODO Auto-generated method stub
275 // save current prefs with new name and delete user pref with old name
279 protected void savModified_actionPerformed(ActionEvent e)
281 // TODO Auto-generated method stub
282 // Store the current settings
283 // write out param file and name.
285 initArgSetModified(); // reset the modification state
289 protected void canceljob_actionPerformed(ActionEvent e)
294 frame.setVisible(false);
298 protected void startjob_actionPerformed(ActionEvent e)
303 frame.setVisible(false);
307 Jws2Instance service;
310 * set if dialog is being set - so handlers will avoid spurious events
312 boolean settingDialog = false;
314 void initForService(Jws2Instance service, Preset p,
315 List<Argument> jobArgset)
317 settingDialog = true;
318 this.service = service;
319 // TODO: Recover window geometry prefs for this service
320 // jobPanel.setDividerLocation(proportionalLocation)
321 // settingsPanel.setDividerLocation(proportionalLocation)
322 Hashtable exnames = new Hashtable();
323 for (int i=0,iSize=setName.getItemCount(); i<iSize; i++)
325 exnames.put((String) setName.getItemAt(i),setName.getItemAt(i));
327 // Add the default entry - if not present already.
328 if (!exnames.contains("Defaults"))
330 setName.addItem("Defaults");
331 exnames.put("Defaults", "Defaults");
333 serviceOptions = service.getRunnerConfig();
334 // add any presets not already added.
335 String curname = (p == null ? "" : p.getName());
336 PresetManager prman = service.getPresets();
339 List prList = service.getPresets().getPresets();
342 for (Object pr : prList)
344 if (!exnames.contains(((Preset) pr).getName()))
346 setName.addItem(((Preset) pr).getName());
351 updateTable(p, jobArgset);
352 initArgSetModified();
353 settingDialog = false;
357 @SuppressWarnings("unchecked")
358 private void updateTable(Preset p, List<Argument> jobArgset)
360 List<Parameter> setargs = new ArrayList<Parameter>();
361 // populate table from default parameter set.
362 List<Argument> args = serviceOptions.getArguments();
364 // split to params and required arguments
366 for (Argument arg : args)
368 Argument myarg = (Argument) arg;
369 // Ideally, Argument would implement isRequired !
370 if (myarg instanceof Parameter)
372 Parameter parm = (Parameter) myarg;
377 if (myarg instanceof Option)
379 Option opt = (Option) myarg;
381 // Apply default value, always.
382 selectOption(opt, opt.getDefaultValue());
386 System.err.println("Ignoring unknown service argument type "
387 + arg.getClass().getName());
391 args = null; // no more args to process.
395 // initialise setname
396 setName.setSelectedItem(lastSetName=p.getName());
397 setDescr.setText(lastDescrText=p.getDescription());
401 args = p.getArguments(serviceOptions);
402 // quick test of getArguments
403 for (Object rg: p.getOptions())
405 String _rg = ((String) rg).substring(1);// remove initial arg character -
408 int _rgs = _rg.indexOf(" ");
411 _rgv = _rg.substring(_rgs+1);
412 _rg = _rg.substring(0,_rgs);
415 for (Argument ar:args)
417 if (ar.getName().equalsIgnoreCase(_rg) || ar.getDefaultValue()!=null && ar.getDefaultValue().equalsIgnoreCase(_rgv))
425 System.err.println("Couldn't set Argument: "+rg.toString());
428 } catch (Exception e)
432 // TODO: check if args should be unselected prior to resetting using the
438 if (lastParmSet == null)
440 // first call - so create a dummy name
441 setName.setSelectedItem(lastSetName="Defaults");
445 if (jobArgset != null)
447 argSetModified(jobArgset, true);
450 // get setargs from current object
453 for (Argument arg : args)
455 if (arg instanceof Parameter)
457 setargs.add((Parameter) arg);
461 if (arg instanceof Option)
463 System.out.println("Setting option "+arg.getName()+" with "+arg.getDefaultValue());
464 selectOption((Option) arg, arg.getDefaultValue());
471 // mdl.setData(setargs);
472 // jobOptions.setLayout(new GridLayout(optSet.size() / 2 + 1, 2));
473 jobOptions.setPreferredSize(new Dimension(PARAM_WIDTH, optSet.size()
475 jobOptions.setLayout(new GridLayout(optSet.size(), 1));
476 refreshParamLayout();
477 // paramPanel.setLayout(new GridLayout(paramSet.size(), 1));
479 // paramPane.getViewport().validate();
480 paramPane.validate();
484 private boolean isModified()
486 return savmodified.isEnabled();
489 private Hashtable modifiedElements = new Hashtable();
491 * reset gui and modification state settings
493 private void initArgSetModified() {
495 modifiedElements.clear();
496 renmodified.setVisible(false);
497 savmodified.setEnabled(false);
500 private void argSetModified(Object modifiedElement, boolean b)
504 modifiedElements.remove(modifiedElement);
508 modifiedElements.put(modifiedElement, modifiedElement);
510 // set mod status based on presence of elements in table
511 savmodified.setEnabled(modifiedElements.size() > 0);
512 // special reveal if setName has been modified
513 if (modifiedElements.get(setName) != null)
515 if (curSetName != null && lastSetName!=null && !lastSetName.equals(curSetName))
517 // also test to see if lastSetName exists in preset store
518 renmodified.setVisible(true);
523 // setname isn't in modlist - so don't rename
524 renmodified.setEnabled(false);
529 private void addParameter(Parameter parm)
531 ParamBox pb = paramSet.get(parm.getName());
534 pb = new ParamBox(this, parm);
535 paramSet.put(parm.getName(), pb);
539 // take the defaults from the parameter
540 pb.updateControls(parm);
543 private void selectOption(Option opt, String string)
545 OptionBox cb = optSet.get(opt.getName());
552 // no value specified.
553 if (opt.isRequired())
555 // indicate option needs to be selected!
559 cb.enabled.setSelected(false);
564 cb.enabled.setSelected(true);
566 if (opt.getPossibleValues().contains(string))
568 cb.val.setSelectedItem(string);
572 throw new Error("Invalid value " + string + " for option " + opt);
576 cb.setInitialValue();
579 Map<String, ParamBox> paramSet = new Hashtable<String, ParamBox>();
581 public class ParamBox extends JPanel implements ChangeListener,
584 JButton showDesc = new JButton();
586 JTextArea string = new JTextArea();
588 JScrollPane descPanel = new JScrollPane();
590 JSlider slider = null;
592 JTextField valueField = null;
594 ValueConstrain validator = null;
596 JPanel settingPanel = new JPanel();
598 JPanel controlPanel = new JPanel();
600 boolean integ = false;
602 boolean choice = false;
604 boolean descisvisible = false;
606 final WsJobParameters pmdialogbox;
608 public ParamBox(final WsJobParameters pmlayout, Parameter parm)
610 pmdialogbox = pmlayout;
611 setPreferredSize(new Dimension(PARAM_WIDTH, PARAM_CLOSEDHEIGHT));
612 setBorder(new TitledBorder(parm.getName()));
614 showDesc.setFont(new Font("Verdana", Font.PLAIN, 6));
615 showDesc.setText("+");
616 string.setFont(new Font("Verdana", Font.PLAIN, 11));
617 string.setBackground(getBackground());
618 // string.setSize(new Dimension(PARAM_WIDTH, 80));
619 string.setEditable(false);
620 descPanel.getViewport().setView(string);
621 // descPanel.setLocation(2,17);
622 descPanel.setVisible(false);
623 // string.setMinimumSize(new Dimension(140,80));
624 // string.setMaximumSize(new Dimension(280,80));
625 final ParamBox me = this;
626 showDesc.addActionListener(new ActionListener()
630 public void actionPerformed(ActionEvent e)
632 descisvisible = !descisvisible;
633 descPanel.setVisible(descisvisible);
634 me.setPreferredSize(new Dimension(PARAM_WIDTH,
635 (descisvisible) ? PARAM_HEIGHT : PARAM_CLOSEDHEIGHT));
637 pmlayout.refreshParamLayout();
640 string.setWrapStyleWord(true);
641 string.setLineWrap(true);
642 string.setColumns(32);
643 string.setText(parm.getDescription());
644 JPanel firstrow = new JPanel();
645 firstrow.setLayout(null);
646 controlPanel.setLayout(new BorderLayout());
647 controlPanel.setBounds(new Rectangle(39, 10, PARAM_WIDTH - 70,
648 PARAM_CLOSEDHEIGHT - 50));
649 showDesc.setBounds(new Rectangle(10, 10, 16, 16));
650 firstrow.add(showDesc);
651 firstrow.add(controlPanel);
652 firstrow.setBounds(new Rectangle(10, 20, PARAM_WIDTH - 30,
653 PARAM_CLOSEDHEIGHT - 30));
655 validator = parm.getValidValue();
657 if (validator != null)
659 integ = validator.getType() == Type.Integer;
663 if (parameter.getPossibleValues() != null)
668 updateControls(parm);
669 descPanel.setBounds(new Rectangle(10, PARAM_CLOSEDHEIGHT,
670 PARAM_WIDTH - 20, PARAM_HEIGHT - PARAM_CLOSEDHEIGHT - 5));
677 // reset the widget's initial value.
681 boolean adjusting = false;
687 public int getBoxHeight()
689 return (descisvisible ? PARAM_HEIGHT : PARAM_CLOSEDHEIGHT);
692 public void updateControls(Parameter parm)
695 boolean init = (choicebox==null && valueField==null);
702 choicebox = new JComboBox();
703 choicebox.addActionListener(this);
704 controlPanel.add(choicebox, BorderLayout.CENTER);
708 slider = new JSlider();
709 slider.addChangeListener(this);
710 valueField = new JTextField();
711 valueField.addActionListener(this);
712 valueField.setPreferredSize(new Dimension(60, 25));
713 controlPanel.add(slider, BorderLayout.WEST);
714 controlPanel.add(valueField, BorderLayout.EAST);
724 List vals = parm.getPossibleValues();
725 for (Object val : vals)
727 choicebox.addItem(val);
731 if (parm.getDefaultValue() != null)
733 choicebox.setSelectedItem(parm.getDefaultValue());
738 valueField.setText(parm.getDefaultValue());
741 lastVal = updateSliderFromValueField();
747 public Parameter getParameter()
753 parameter.setDefaultValue((String) choicebox.getSelectedItem());
757 parameter.setDefaultValue(valueField.getText());
759 } catch (WrongParameterException e)
767 public Object updateSliderFromValueField()
771 if (validator != null)
778 valueField.setText(valueField.getText().trim());
779 iVal = Integer.valueOf(valueField.getText());
780 } catch (Exception e)
784 if (validator.getMin() != null && validator.getMax() != null)
786 slider.getModel().setRangeProperties(iVal, 1,
787 validator.getMin().intValue(),
788 validator.getMax().intValue(), true);
792 slider.setVisible(false);
802 fVal = Float.valueOf(valueField.getText());
803 } catch (Exception e)
807 if (validator.getMin() != null && validator.getMax() != null)
809 slider.getModel().setRangeProperties((int) fVal * 1000, 1,
810 (int) validator.getMin().floatValue() * 1000,
811 (int) validator.getMax().floatValue() * 1000, true);
815 slider.setVisible(false);
825 slider.setVisible(false);
827 { valueField.getText().trim() };
832 { (String) choicebox.getSelectedItem() };
839 public void stateChanged(ChangeEvent e)
843 valueField.setText(""
844 + ((integ) ? ("" + (int) slider.getValue())
845 : ("" + (float) (slider.getValue() / 1000f))));
852 public void actionPerformed(ActionEvent e)
860 updateSliderFromValueField();
865 private void checkIfModified()
867 Object cstate = updateSliderFromValueField();
868 boolean notmod = false;
869 if (cstate.getClass() == lastVal.getClass())
871 if (cstate instanceof int[])
873 notmod = (((int[]) cstate)[0] == ((int[]) lastVal)[0]);
875 else if (cstate instanceof float[])
877 notmod = (((float[]) cstate)[0] == ((float[]) lastVal)[0]);
879 else if (cstate instanceof String[])
881 notmod = (((String[]) cstate)[0].equals(((String[]) lastVal)[0]));
884 pmdialogbox.argSetModified(this, !notmod);
888 Map<String, OptionBox> optSet = new Hashtable<String, OptionBox>();
890 public class OptionBox extends JPanel implements ActionListener
892 JComboBox val = new JComboBox();
894 JCheckBox enabled = new JCheckBox();
898 public OptionBox(Option opt)
901 setLayout(new BorderLayout());
902 enabled.setSelected(opt.isRequired()); // TODO: lock required options
903 enabled.setFont(new Font("Verdana", Font.PLAIN, 11));
904 enabled.setText(opt.getName());
905 enabled.setToolTipText(opt.getDescription());
906 enabled.addActionListener(this);
907 add(enabled, BorderLayout.NORTH);
908 if (opt.getPossibleValues().size() > 1)
910 setLayout(new GridLayout(1, 2));
911 for (Object str : opt.getPossibleValues())
913 val.addItem((String) str);
915 val.setSelectedItem((String) opt.getDefaultValue());
916 val.addActionListener(this);
917 add(val, BorderLayout.SOUTH);
919 // TODO: add actionListeners for popup (to open further info),
920 // and to update list of parameters if an option is enabled
921 // that takes a value.
925 boolean initEnabled = false;
927 String initVal = null;
929 public void setInitialValue()
931 initEnabled = enabled.isSelected();
932 if (option.getPossibleValues() != null
933 && option.getPossibleValues().size() > 1)
935 initVal = (String) val.getSelectedItem();
939 public Option getOptionIfEnabled()
941 if (!enabled.isSelected())
947 if (val.getSelectedItem() != null)
949 option.setDefaultValue((String) val.getSelectedItem());
951 } catch (WrongParameterException e)
960 public void actionPerformed(ActionEvent e)
962 if (e.getSource() != enabled)
964 enabled.setSelected(true);
969 private void checkIfModified()
971 boolean notmod = (initEnabled == enabled.isSelected());
974 notmod = initVal.equals(val.getSelectedItem());
976 argSetModified(this, !notmod);
980 private OptionBox addOption(Option opt)
982 OptionBox cb = optSet.get(opt.getName());
985 cb = new OptionBox(opt);
986 optSet.put(opt.getName(), cb);
992 protected void refreshParamLayout()
995 for (ParamBox pbox : paramSet.values())
997 s += pbox.getBoxHeight();
999 paramList.setPreferredSize(new Dimension(PARAM_WIDTH, s));
1000 paramList.setLayout(new FlowLayout());
1005 * testing method - grab a service and parameter set and show the window
1009 public static void main(String[] args)
1011 jalview.ws.jws2.Jws2Discoverer disc = jalview.ws.jws2.Jws2Discoverer
1014 if (args.length > 3)
1016 Vector<String> services = new Vector<String>();
1017 services.addElement(args[p++]);
1018 Jws2Discoverer.setServiceUrls(services);
1023 } catch (Exception e)
1025 System.err.println("Aborting. Problem discovering services.");
1026 e.printStackTrace();
1029 Jws2Discoverer.Jws2Instance lastserv = null;
1030 for (Jws2Discoverer.Jws2Instance service : disc.getServices())
1033 if (p < args.length && service.serviceType.equalsIgnoreCase(args[p]))
1038 if (lastserv != null)
1040 List<Preset> prl = null;
1042 if (++p < args.length)
1044 PresetManager prman = lastserv.getPresets();
1047 pr = prman.getPresetByName(args[p]);
1050 // just grab the last preset.
1051 prl = prman.getPresets();
1055 Iterator<Preset> en = (prl == null) ? null : prl.iterator();
1062 en = prl.iterator();
1066 WsJobParameters pgui = new WsJobParameters(lastserv, pr);
1067 JFrame jf = new JFrame("Parameters for " + lastserv.getActionText());
1068 JPanel cont = new JPanel();
1069 // jf.setPreferredSize(new Dimension(600, 800));
1072 final Thread thr = Thread.currentThread();
1073 jf.addWindowListener(new WindowListener()
1077 public void windowActivated(WindowEvent e)
1079 // TODO Auto-generated method stub
1084 public void windowClosed(WindowEvent e)
1089 public void windowClosing(WindowEvent e)
1096 public void windowDeactivated(WindowEvent e)
1098 // TODO Auto-generated method stub
1103 public void windowDeiconified(WindowEvent e)
1105 // TODO Auto-generated method stub
1110 public void windowIconified(WindowEvent e)
1112 // TODO Auto-generated method stub
1117 public void windowOpened(WindowEvent e)
1119 // TODO Auto-generated method stub
1124 jf.setVisible(true);
1125 boolean inter = false;
1130 Thread.sleep(10000);
1131 } catch (Exception e)
1142 public List<Argument> getJobParams()
1144 List<Argument> argSet = new ArrayList<Argument>();
1145 // recover options and parameters from GUI
1146 for (OptionBox opts : optSet.values())
1148 Option opt = opts.getOptionIfEnabled();
1154 for (ParamBox parambox : paramSet.values())
1156 Parameter parm = parambox.getParameter();
1166 String lastParmSet = null;
1168 Hashtable<String, Object[]> editedParams = new Hashtable<String, Object[]>();
1171 * store the given parameters in the user parameter set database.
1173 * @param storeSetName
1176 * - setDescr.getText()
1180 private void _storeUserPreset(String storeSetName, String descr,
1181 List<Argument> jobParams)
1183 // this is a simple hash store.
1185 editedParams.put(storeSetName, pset = new Object[3]);
1186 pset[0] = storeSetName;
1188 pset[2] = jobParams;
1191 private Object[] _getUserPreset(String setName)
1193 return editedParams.get(setName);
1196 private void reInitDialog(String nextPreset)
1198 settingDialog = true;
1199 // updateTable(null,null);
1200 Object[] pset = _getUserPreset(nextPreset);
1203 setDescr.setText((String) pset[1]);
1204 updateTable(null, (List<Argument>) pset[2]);
1205 lastParmSet = nextPreset;
1210 // must be a default preset from service
1214 PresetManager prman = service.getPresets();
1217 p = prman.getPresetByName(nextPreset);
1219 } catch (Exception ex)
1221 ex.printStackTrace();
1225 updateTable(p, null);
1226 lastParmSet = nextPreset;
1229 initArgSetModified();
1231 settingDialog = false;
1235 String curSetName = null;
1238 public void itemStateChanged(ItemEvent e)
1245 if (e.getSource() == setName)
1247 String setname = (String) setName.getSelectedItem();
1248 if (setname == null)
1252 if (curSetName == null || !setname.equals(curSetName))
1256 raiseQueryAndSave();
1258 reInitDialog(setname);
1264 * ask the user if they wan't to save the current settings before switching
1266 private void raiseQueryAndSave()
1272 * last saved name for this user preset
1274 String lastSetName = null;
1277 * last saved value of the description text for this user preset
1279 String lastDescrText = null;
1282 public void actionPerformed(ActionEvent e)
1284 if (e.getSource() instanceof Component)
1286 Component src = (Component) e.getSource();
1287 if (src.getParent() == setName)
1289 // rename any existing records we know about for this set.
1290 curSetName = (String) e.getActionCommand();
1291 System.err.println("Command " + curSetName + " : "
1292 + setName.getSelectedItem());
1293 if (curSetName.trim().equals(setName.getSelectedItem()))
1297 if (curSetName!=null)
1299 argSetModified(setName, lastSetName!=null || !curSetName.equals(lastSetName));
1305 if (e.getSource() == setDescr)
1307 if (lastDescrText != null)
1309 argSetModified(setDescr, !setDescr.getText().equals(lastDescrText));