2 * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
3 * Copyright (C) $$Year-Rel$$ The Jalview Authors
5 * This file is part of Jalview.
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.
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.
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.
23 import jalview.gui.OptsAndParamsPage.OptionBox;
24 import jalview.gui.OptsAndParamsPage.ParamBox;
25 import jalview.util.MessageManager;
26 import jalview.ws.api.UIinfo;
27 import jalview.ws.params.ArgumentI;
28 import jalview.ws.params.OptionI;
29 import jalview.ws.params.ParamDatastoreI;
30 import jalview.ws.params.ParameterI;
31 import jalview.ws.params.WsParamSetI;
33 import java.awt.BorderLayout;
34 import java.awt.Component;
35 import java.awt.Dimension;
36 import java.awt.FlowLayout;
38 import java.awt.GridBagConstraints;
39 import java.awt.GridBagLayout;
40 import java.awt.GridLayout;
41 import java.awt.Rectangle;
42 import java.awt.event.ActionEvent;
43 import java.awt.event.ActionListener;
44 import java.awt.event.HierarchyBoundsListener;
45 import java.awt.event.HierarchyEvent;
46 import java.awt.event.ItemEvent;
47 import java.awt.event.ItemListener;
48 import java.util.Hashtable;
49 import java.util.List;
50 import java.util.Vector;
52 import javax.swing.JButton;
53 import javax.swing.JComboBox;
54 import javax.swing.JDialog;
55 import javax.swing.JLabel;
56 import javax.swing.JPanel;
57 import javax.swing.JScrollPane;
58 import javax.swing.JTextArea;
59 import javax.swing.border.TitledBorder;
60 import javax.swing.event.DocumentEvent;
61 import javax.swing.event.DocumentListener;
63 import net.miginfocom.swing.MigLayout;
66 * job parameter editing/browsing dialog box. User can browse existing settings
67 * (user + presets + Defaults), and any changes to parameters creates a modified
68 * user parameter set. LOGIC: If the parameter set is modified, and its name is
69 * a valid, non-existant user parameter set, then a save button is shown. If the
70 * parameter set is modified and its name is a valid, extant user parameter set,
71 * then an update button is shown. If user parameter set's name is edited, and
72 * old name exists as a writable user parameter set, then rename button is
73 * shown. If current parameter set is associated with a user defined parameter
74 * set, then : if set is modifed, a 'revert' button is shown. if set is not
75 * modified, a 'delete' button is shown.
80 public class WsJobParameters extends JPanel implements ItemListener,
81 ActionListener, DocumentListener, OptsParametersContainerI
83 private static final int PREFERRED_WIDTH = 540;
85 private static final int DEFAULT_HEIGHT = 640;
87 // the default parameter set shown to the user
88 private static final String SVC_DEF = "Defaults";
90 private int maxOptWidth = 200;
92 // URL linkImageURL = getClass().getResource("/images/link.gif");
94 // TODO ABSRACT FROM JABAWS CLASSES
97 * manager for options and parameters.
99 OptsAndParamsPage opanp;
102 * panel containing job options
104 JPanel optionsPanel = new JPanel();
107 * panel containing job parameters
109 JPanel paramsPanel = new JPanel();
111 JPanel setNamePanel = new JPanel();
113 JButton createpref = new JButton();
115 JButton deletepref = new JButton();
117 JButton revertpref = new JButton();
119 JButton updatepref = new JButton();
121 JComboBox<String> setName = new JComboBox<>();
123 JTextArea setDescr = new JTextArea();
125 JScrollPane paramPane = new JScrollPane();
127 ParamDatastoreI paramStore;
129 // set true when 'Start Job' is clicked
130 boolean startJob = false;
132 JDialog frame = null;
137 * list of service presets in the gui
139 Hashtable<String, String> servicePresets = null;
142 * set if dialog is being set - so handlers will avoid spurious events
144 boolean settingDialog = false;
146 private Hashtable<Object, Object> modifiedElements = new Hashtable<>();
148 String lastParmSet = null;
150 public WsJobParameters(ParamDatastoreI store, WsParamSetI preset,
151 List<ArgumentI> args)
155 // parameters dialog in 'compact' format (help as tooltips)
156 opanp = new OptsAndParamsPage(this, true);
158 this.paramStore = store;
165 * Constructor given a set of parameters and presets, a service to be invoked,
166 * and a list of (Jabaws client) arguments
173 public WsJobParameters(ParamDatastoreI paramStorei, UIinfo service,
174 WsParamSetI preset, List<ArgumentI> jobArgset)
178 // parameters dialog in 'expanded' format (help text boxes)
179 opanp = new OptsAndParamsPage(this, false);
182 this.paramStore = paramStorei;
183 if (paramStore == null && service != null)
185 paramStore = service.getParamStore();
187 this.service = service;
188 initForService(preset, jobArgset);
193 * Shows a modal dialog containing the parameters and Start or Cancel options.
194 * Answers true if the job is started, false if cancelled.
198 public boolean showRunDialog()
201 frame = new JDialog(Desktop.instance, true);
204 frame.setTitle(MessageManager.formatMessage("label.edit_params_for",
206 { service.getActionText() }));
209 Rectangle deskr = Desktop.instance.getBounds();
210 Dimension pref = this.getPreferredSize();
212 new Rectangle((int) (deskr.getCenterX() - pref.width / 2),
213 (int) (deskr.getCenterY() - pref.height / 2),
214 pref.width, pref.height));
215 frame.setContentPane(this);
217 // should perhaps recover defaults from user prefs.
220 javax.swing.SwingUtilities.invokeLater(new Runnable()
225 // jobPanel.setDividerLocation(0.25);
229 frame.setVisible(true);
234 private void jbInit()
236 this.addHierarchyBoundsListener(new HierarchyBoundsListener()
240 public void ancestorResized(HierarchyEvent arg0)
242 refreshParamLayout();
246 public void ancestorMoved(HierarchyEvent arg0)
248 // TODO Auto-generated method stub
252 updatepref = JvSwingUtils.makeButton(
253 MessageManager.getString("action.update"),
254 MessageManager.getString("label.update_user_parameter_set"),
259 public void actionPerformed(ActionEvent e)
261 update_actionPerformed();
264 deletepref = JvSwingUtils.makeButton(
265 MessageManager.getString("action.delete"),
266 MessageManager.getString("label.delete_user_parameter_set"),
271 public void actionPerformed(ActionEvent e)
273 delete_actionPerformed();
276 createpref = JvSwingUtils.makeButton(
277 MessageManager.getString("action.create"),
278 MessageManager.getString("label.create_user_parameter_set"),
283 public void actionPerformed(ActionEvent e)
285 create_actionPerformed();
288 revertpref = JvSwingUtils.makeButton(
289 MessageManager.getString("action.revert"),
291 .getString("label.revert_changes_user_parameter_set"),
296 public void actionPerformed(ActionEvent e)
298 revert_actionPerformed();
302 JButton startjob = JvSwingUtils.makeButton(
303 MessageManager.getString("action.start_job"),
304 MessageManager.getString("label.start_job_current_settings"),
308 public void actionPerformed(ActionEvent e)
310 startjob_actionPerformed();
313 JButton canceljob = JvSwingUtils.makeButton(
314 MessageManager.getString("action.cancel_job"),
315 MessageManager.getString("label.cancel_job_close_dialog"),
319 public void actionPerformed(ActionEvent e)
321 canceljob_actionPerformed();
325 JPanel setDetails = new JPanel();
326 setDetails.setBorder(
327 new TitledBorder(MessageManager.getString("label.details")));
328 setDetails.setLayout(new BorderLayout());
329 setDescr.setColumns(40);
330 setDescr.setWrapStyleWord(true);
331 setDescr.setLineWrap(true);
332 setDescr.setBackground(getBackground());
333 setDescr.setEditable(true);
334 setDescr.getDocument().addDocumentListener(this);
335 setDescr.setToolTipText(
336 MessageManager.getString("label.edit_notes_parameter_set"));
337 JScrollPane setDescrView = new JScrollPane();
338 setDescrView.getViewport().setView(setDescr);
339 setName.setEditable(true);
340 setName.addItemListener(this);
341 setName.getEditor().addActionListener(this);
342 JPanel setNameInfo = new JPanel(new FlowLayout(FlowLayout.LEFT));
343 GridBagLayout gbl = new GridBagLayout();
344 setNamePanel.setLayout(gbl);
346 JLabel setNameLabel = new JLabel(
347 MessageManager.getString("label.current_parameter_set_name"));
348 setNameLabel.setFont(new java.awt.Font("Verdana", Font.PLAIN, 10));
350 setNameInfo.add(setNameLabel);
351 setNameInfo.add(setName);
353 // initial button visibility
354 updatepref.setVisible(false);
355 deletepref.setVisible(false);
356 revertpref.setVisible(false);
357 createpref.setVisible(false);
358 JPanel setsavebuts = new JPanel();
359 setsavebuts.setLayout(new FlowLayout(FlowLayout.LEFT, 10, 0)); // GridLayout(1,2));
360 JPanel spacer = new JPanel();
361 spacer.setPreferredSize(new Dimension(2, 30));
362 setsavebuts.add(spacer);
363 setsavebuts.add(deletepref);
364 setsavebuts.add(revertpref);
365 setsavebuts.add(createpref);
366 setsavebuts.add(updatepref);
367 // setsavebuts.setSize(new Dimension(150, 30));
368 JPanel buttonArea = new JPanel(new GridLayout(1, 1));
369 buttonArea.add(setsavebuts);
370 setNamePanel.add(setNameInfo);
371 GridBagConstraints gbc = new GridBagConstraints();
373 gbl.setConstraints(setNameInfo, gbc);
374 setNamePanel.add(buttonArea);
375 gbc = new GridBagConstraints();
379 gbl.setConstraints(buttonArea, gbc);
380 setDetails.add(setDescrView, BorderLayout.CENTER);
382 // paramPane.setPreferredSize(new Dimension(360, 400));
383 // paramPane.setPreferredSize(null);
384 optionsPanel.setBorder(
385 new TitledBorder(MessageManager.getString("label.options")));
386 optionsPanel.setOpaque(true);
387 paramsPanel.setBorder(
388 new TitledBorder(MessageManager.getString("label.parameters")));
389 paramsPanel.setOpaque(true);
390 // optsAndparams.setScrollableWidth(ScrollableSizeHint.FIT);
391 // optsAndparams.setScrollableHeight(ScrollableSizeHint.NONE);
392 // optsAndparams.setLayout(new BorderLayout());
393 JPanel optsAndparams = new JPanel();
394 optsAndparams.setLayout(new BorderLayout());
395 optsAndparams.add(optionsPanel, BorderLayout.NORTH);
396 optsAndparams.add(paramsPanel, BorderLayout.CENTER);
397 JPanel jp = new JPanel(new BorderLayout());
398 jp.add(optsAndparams, BorderLayout.CENTER);
399 paramPane.getViewport().setView(jp);
400 paramPane.setBorder(null);
401 setLayout(new BorderLayout());
403 JPanel jobPanel = new JPanel();
404 jobPanel.setPreferredSize(null);
405 jobPanel.setLayout(new BorderLayout());
406 jobPanel.add(setDetails, BorderLayout.NORTH);
407 jobPanel.add(paramPane, BorderLayout.CENTER);
408 // jobPanel.setOrientation(JSplitPane.VERTICAL_SPLIT);
410 add(setNamePanel, BorderLayout.NORTH);
411 add(jobPanel, BorderLayout.CENTER);
413 JPanel dialogpanel = new JPanel();
414 dialogpanel.add(startjob);
415 dialogpanel.add(canceljob);
416 // JAL-1580: setMaximumSize() doesn't work, so just size for the worst case:
417 // check for null is for JUnit usage
418 final int windowHeight = Desktop.instance == null ? DEFAULT_HEIGHT
419 : Desktop.instance.getHeight();
420 // setPreferredSize(new Dimension(PREFERRED_WIDTH, windowHeight));
421 add(dialogpanel, BorderLayout.SOUTH);
425 protected void revert_actionPerformed()
427 reInitDialog(lastParmSet);
428 updateWebServiceMenus();
431 protected void update_actionPerformed()
435 String curname = ((String) setName.getSelectedItem()).trim();
436 _updatePreset(lastParmSet, curname);
437 lastParmSet = curname;
439 initArgSetModified();
440 syncSetNamesWithStore();
444 private void _deleteUserPreset(String lastParmSet2)
446 paramStore.deletePreset(lastParmSet2);
449 protected void delete_actionPerformed()
453 // delete current preset's saved entry
454 _deleteUserPreset(lastParmSet);
456 reInitDialog(null); // service default
457 updateWebServiceMenus();
460 protected void create_actionPerformed()
462 String curname = ((String) setName.getSelectedItem()).trim();
463 if (curname.length() > 0)
465 _storeCurrentPreset(curname);
466 lastParmSet = curname;
468 reInitDialog(curname);
469 initArgSetModified();
470 updateWebServiceMenus();
474 // TODO: show warning
475 System.err.println("Invalid name. Not saved.");
479 protected void canceljob_actionPerformed()
484 frame.setVisible(false);
488 protected void startjob_actionPerformed()
493 frame.setVisible(false);
497 void initForService(WsParamSetI paramSet, List<ArgumentI> jobArgset)
499 settingDialog = true;
501 init(paramSet, jobArgset);
505 void init(WsParamSetI p, List<ArgumentI> jobArgset)
507 Hashtable<String, String> exnames = new Hashtable<>();
508 for (int i = 0, iSize = setName.getItemCount(); i < iSize; i++)
510 exnames.put(setName.getItemAt(i), setName.getItemAt(i));
512 servicePresets = new Hashtable<>();
513 // Add the default entry - if not present already.
514 if (!exnames.contains(SVC_DEF))
516 setName.addItem(SVC_DEF);
517 exnames.put(SVC_DEF, SVC_DEF);
518 servicePresets.put(SVC_DEF, SVC_DEF);
521 // String curname = (p == null ? "" : p.getName());
522 for (WsParamSetI pr : paramStore.getPresets())
524 if (!pr.isModifiable())
526 servicePresets.put(pr.getName(), "preset");
531 if (!exnames.contains(pr.getName()))
533 setName.addItem(pr.getName());
536 // TODO: if initial jobArgset matches a given user setting or preset then
537 // should recover setting accordingly
538 // updateTable(p, jobArgset);
541 reInitDialog(p.getName());
542 initArgSetModified();
546 if (jobArgset != null && jobArgset.size() > 0)
548 curSetName = "Supplied Settings";
549 isUserPreset = false;
550 updateTable(p, jobArgset);
551 setName.setSelectedItem(curSetName);
552 updateButtonDisplay();
560 settingDialog = false;
563 private void updateTable(WsParamSetI p, List<ArgumentI> jobArgset)
565 boolean setDefaultParams = false;
566 if (lastParmSet == null)
568 isUserPreset = false;
569 // First call - so provide Service default settings
570 setName.setSelectedItem(lastSetName = SVC_DEF);
572 if (p == null && SVC_DEF.equals("" + setName.getSelectedItem()))
574 // indicate that service defaults should be set if available
575 setDefaultParams = true;
577 // populate table from default parameter set.
578 List<ArgumentI> args = paramStore.getServiceParameters();
580 // split to params and required arguments
583 boolean optset = false;
584 for (ArgumentI myarg : args)
586 // Ideally, Argument would implement isRequired !
587 if (myarg instanceof ParameterI)
589 ParameterI parm = (ParameterI) myarg;
590 opanp.addParameter(parm).validate();
594 if (myarg instanceof OptionI)
596 OptionI opt = (OptionI) myarg;
597 OptionBox ob = opanp.addOption(opt);
598 ob.resetToDefault(setDefaultParams);
599 if (maxOptWidth < ob.getPreferredSize().width)
601 maxOptWidth = ob.getPreferredSize().width;
604 cw += ob.getPreferredSize().width + 5;
608 System.err.println("Ignoring unknown service argument type "
609 + myarg.getClass().getName());
613 args = null; // no more args to process.
617 isUserPreset = false;
618 // initialise setname
619 setName.setSelectedItem(lastSetName = p.getName());
620 setDescr.setText(lastDescrText = p.getDescription());
624 args = p.getArguments();
625 } catch (Exception e)
629 // TODO: check if args should be unselected prior to resetting using the
633 if (jobArgset != null)
635 argSetModified(jobArgset, true);
638 // get setargs from current object
641 for (ArgumentI arg : args)
643 if (arg instanceof ParameterI)
645 opanp.setParameter((ParameterI) arg);
649 if (arg instanceof OptionI)
651 // System.out.println("Setting option "
652 // + System.identityHashCode(arg) + ":" + arg.getName()
653 // + " with " + arg.getDefaultValue());
654 opanp.selectOption((OptionI) arg, arg.getValue());
661 refreshParamLayout();
665 private boolean isModified()
667 return modifiedElements.size() > 0;
671 * reset gui and modification state settings
673 private void initArgSetModified()
676 modifiedElements.clear();
677 updateButtonDisplay();
680 private void updateButtonDisplay()
682 boolean _update = false, _create = false, _delete = false,
684 if (modifiedElements.size() > 0)
688 _update = isUserPreset; // can only update user presets
689 if (!isUserPreset || modifiedElements.containsKey(setName))
691 // name modified - can create new preset
699 // can still delete a user preset
700 _delete = isUserPreset;
702 createpref.setVisible(_create);
703 updatepref.setVisible(_update);
704 deletepref.setVisible(_delete);
705 revertpref.setVisible(_revert);
710 public void argSetModified(Object modifiedElement, boolean b)
718 modifiedElements.remove(modifiedElement);
722 if (b && modifiedElement == setName
723 && modifiedElements.contains(modifiedElement))
725 // HACK! prevents iteration on makeSetNameValid
728 modifiedElements.put(modifiedElement, modifiedElement);
730 // set mod status based on presence of elements in table
731 if (b && modifiedElements.size() > 0)
733 makeSetNameValid(!isUserPreset);
734 setNamePanel.revalidate();
736 updateButtonDisplay();
739 private boolean isServicePreset(String selectedItem)
741 return selectedItem.equals(SVC_DEF)
742 || servicePresets.containsKey(selectedItem);
746 * check if the current set name is a valid set name for saving, if not, then
749 private void makeSetNameValid(boolean newuserset)
751 boolean stn = settingDialog;
752 boolean renamed = false;
753 settingDialog = true;
754 String nm = (curSetName != null ? curSetName
755 : (String) setName.getSelectedItem());
756 // check if the name is reserved - if it is, rename it.
757 if (isServicePreset(nm))
766 while (paramStore.getPreset(tnm) != null)
768 tnm = nm + " (" + (++i) + ")";
777 boolean makeupdate = false;
778 // sync the gui with the preset database
779 for (int i = 0, iS = setName.getItemCount(); i < iS; i++)
781 String snm = setName.getItemAt(i);
785 // setName.setSelectedIndex(i);
790 setName.addItem(curSetName = nm);
791 setName.setSelectedItem(curSetName);
795 settingDialog = false; // we need this name change to be registered.
796 argSetModified(setName, renamed);
802 * Rebuilds the Options and Parameters panels
805 public void refreshParamLayout()
807 final int rightMargin = 40;
808 final int availableWidth = paramPane.getViewport().getSize().width
810 - optionsPanel.getBorder().getBorderInsets(optionsPanel).left
811 + optionsPanel.getBorder().getBorderInsets(optionsPanel).right;
813 if (opanp.getOptSet().size() > 0)
816 int currentWidth = hgap;
819 * layout constraint 'nogrid' prevents vertical column alignment,
820 * allowing controls to flow without extra space inserted to align
822 optionsPanel.setLayout(new MigLayout("nogrid", "", ""));
823 optionsPanel.removeAll();
824 JPanel lastAdded = null;
827 * add each control in turn; if adding would overflow the right margin,
828 * remove and re-add the previous parameter with "wrap" (after)
829 * in order to start a new row
831 for (OptionBox pbox : opanp.getOptSet().values())
834 int boxWidth = pbox.getSize().width;
835 currentWidth += boxWidth + hgap;
836 boolean wrapAfterLast = currentWidth > availableWidth
837 && lastAdded != null;
838 // System.out.println(String.format(
839 // "%s width=%d, paneWidth=%d, currentWidth=%d, wrapAfterLast=%s",
840 // pbox.toString(), boxWidth, panewidth, currentWidth,
844 optionsPanel.remove(lastAdded);
845 optionsPanel.add(lastAdded, "wrap");
846 currentWidth = hgap + boxWidth;
848 optionsPanel.add(pbox);
851 optionsPanel.revalidate();
855 optionsPanel.setVisible(false);
858 if (opanp.getParamSet().size() > 0)
860 paramsPanel.removeAll();
861 paramsPanel.setLayout(new MigLayout("", "", ""));
863 int currentWidth = hgap;
865 JPanel lastAdded = null;
866 for (ParamBox pbox : opanp.getParamSet().values())
869 int boxWidth = pbox.getSize().width;
870 currentWidth += boxWidth + hgap;
871 boolean wrapAfterLast = currentWidth > availableWidth
872 && lastAdded != null;
875 paramsPanel.remove(lastAdded);
876 paramsPanel.add(lastAdded, "wrap");
877 currentWidth = pbox.getSize().width + hgap;
879 paramsPanel.add(pbox);
884 * s = 2 * sep; for (ParamBox pbox : opanp.getParamSet().values()) {
885 * pbox.validate(); s += sep +
886 * pbox.getPreferredSize().height+pbox.getBorder
887 * ().getBorderInsets(pbox).bottom; }
889 * // paramList.setPreferredSize(new Dimension(w, s));
890 * os+=s+2*sep+paramList
891 * .getBorder().getBorderInsets(paramList).bottom+paramList
892 * .getBorder().getBorderInsets(paramList).top;
894 paramsPanel.revalidate();
898 paramsPanel.setVisible(false);
900 // TODO: waste some time trying to eliminate any unnecessary .validate calls
902 // System.out.println("Size will be : "+w+","+os);
903 // optsAndparams.setPreferredSize(null);
904 // paramPane.getViewport().setView(optsAndparams);
905 paramPane.getViewport().setAutoscrolls(true);
906 paramPane.revalidate();
910 public boolean isServiceDefaults()
912 return (!isModified()
913 && (lastParmSet != null && lastParmSet.equals(SVC_DEF)));
916 public List<ArgumentI> getJobParams()
918 return opanp.getCurrentSettings();
922 * Hashtable<String, Object[]> editedParams = new Hashtable<String,
925 * store the given parameters in the user parameter set database.
927 * @param storeSetName - lastParmSet
929 * @param descr - setDescr.getText()
931 * @param jobParams - getJobParams()
933 * private void _storeUserPreset(String storeSetName, String descr,
934 * List<ArgumentI> jobParams) { // this is a simple hash store. Object[] pset;
935 * editedParams.put(storeSetName, pset = new Object[3]); pset[0] =
936 * storeSetName; pset[1] = descr; pset[2] = jobParams; // writeParam("Saving "
937 * + storeSetName + ": ", jobParams); }
939 * private void writeParam(String nm, List<ArgumentI> params) { for (ArgumentI
940 * p : params) { System.out.println(nm + ":" + System.identityHashCode(p) +
941 * " Name: " + p.getName() + " Value: " + p.getDefaultValue()); } }
943 * private Object[] _getUserPreset(String setName) { Object[] pset =
944 * editedParams.get(setName); // if (pset != null) // writeParam("Retrieving "
945 * + setName + ": ", (List<Argument>) pset[2]); return pset; }
947 * * remove the given user preset from the preset stash
951 * private void _deleteUserPreset(String setName) {
952 * editedParams.remove(setName); }
955 private void syncSetNamesWithStore()
958 // remove any set names in the drop down menu that aren't either a reserved
959 // setting, or a user defined or service preset.
960 Vector<String> items = new Vector<>();
961 while (n < setName.getItemCount())
963 String item = setName.getItemAt(n);
964 if (!item.equals(SVC_DEF) && !paramStore.presetExists(item))
966 setName.removeItemAt(n);
970 items.addElement(item);
974 if (!items.contains(SVC_DEF))
976 setName.addItem(SVC_DEF);
978 for (WsParamSetI upn : paramStore.getPresets())
980 if (!items.contains(upn.getName()))
982 setName.addItem(upn.getName());
988 * true if lastParmSet is a user preset
990 boolean isUserPreset = false;
992 private void reInitDialog(String nextPreset)
994 settingDialog = true;
995 // updateTable(null,null); // first reset to defaults
996 WsParamSetI pset = null;
997 if (nextPreset != null && nextPreset.length() > 0)
999 pset = paramStore.getPreset(nextPreset);
1003 if (pset.isModifiable())
1005 isUserPreset = true;
1006 setDescr.setText(pset.getDescription());
1007 updateTable(null, pset.getArguments());
1008 lastParmSet = nextPreset;
1012 isUserPreset = false;
1013 setDescr.setText("");
1014 // must be a default preset from service
1015 updateTable(pset, null);
1016 lastParmSet = nextPreset;
1021 isUserPreset = false;
1023 setDescr.setText("");
1024 updateTable(null, null);
1025 lastParmSet = SVC_DEF;
1028 initArgSetModified();
1029 syncSetNamesWithStore();
1030 setName.setSelectedItem(lastParmSet);
1031 setNamePanel.validate();
1033 settingDialog = false;
1037 * Rebuild the AlignFrame web service menus (after add/delete of a preset
1040 protected void updateWebServiceMenus()
1042 if (Desktop.instance == null)
1046 for (AlignFrame alignFrame : Desktop.getAlignFrames())
1048 alignFrame.BuildWebServiceMenu();
1052 String curSetName = null;
1055 public void itemStateChanged(ItemEvent e)
1057 if (e.getSource() == setName
1058 && e.getStateChange() == ItemEvent.SELECTED)
1060 final String setname = (String) setName.getSelectedItem();
1061 // System.out.println("Item state changed for " + setname
1062 // + " (handling ? " + !settingDialog + ")");
1068 if (setname == null)
1072 javax.swing.SwingUtilities.invokeLater(new Runnable()
1077 doPreferenceComboStateChange(setname);
1083 private void doPreferenceComboStateChange(String setname)
1085 // user has selected a different item from combo-box
1088 String lsetname = (curSetName != null) ? curSetName : lastParmSet;
1089 if (lsetname.equals(setname))
1091 // setname was just edited - so ignore this event.
1094 settingDialog = true;
1095 System.out.println("Prompting to save " + lsetname);
1096 if (JvOptionPane.showConfirmDialog(this, "Parameter set '" + lsetname
1097 + "' is modifed, and your changes will be lost.\nReally change preset ?",
1098 "Warning: Unsaved Changes",
1099 JvOptionPane.OK_CANCEL_OPTION) != JvOptionPane.OK_OPTION)
1101 // revert the combobox to the current item
1102 settingDialog = true;
1103 setName.setSelectedItem(lsetname);
1104 settingDialog = false;
1107 // System.out.println("Saving for " + lsetname);
1108 // _storeCurrentPreset(lsetname);
1112 settingDialog = true;
1113 reInitDialog(setname);
1114 settingDialog = false;
1119 * store current settings as given name. You should then reset gui.
1121 * @param curSetName2
1123 private void _storeCurrentPreset(String curSetName2)
1125 paramStore.storePreset(curSetName2, setDescr.getText(), getJobParams());
1128 private void _updatePreset(String lastParmSet2, String curname)
1130 paramStore.updatePreset(lastParmSet2, curname, setDescr.getText(),
1136 * last saved name for this user preset
1138 String lastSetName = null;
1141 * last saved value of the description text for this user preset
1143 String lastDescrText = null;
1146 public void actionPerformed(ActionEvent e)
1148 if (e.getSource() instanceof Component)
1150 Component src = (Component) e.getSource();
1151 if (src.getParent() == setName)
1153 // rename any existing records we know about for this set.
1154 String newname = e.getActionCommand().trim();
1156 if (isServicePreset(newname))
1158 final String oldname = curSetName != null ? curSetName
1160 final Component ourframe = this;
1161 settingDialog = true;
1162 setName.getEditor().setItem(oldname);
1163 settingDialog = false;
1164 javax.swing.SwingUtilities.invokeLater(new Runnable()
1169 JvOptionPane.showMessageDialog(ourframe,
1170 MessageManager.getString(
1171 "label.invalid_name_preset_exists"),
1172 MessageManager.getString("label.invalid_name"),
1173 JvOptionPane.WARNING_MESSAGE);
1179 curSetName = newname;
1180 System.err.println("New name for user setting " + curSetName
1181 + " (was " + setName.getSelectedItem() + ")");
1182 if (curSetName.equals(setName.getSelectedItem()))
1186 if (curSetName != null)
1188 argSetModified(setName, true);
1196 private void checkDescrModified()
1201 argSetModified(setDescr,
1202 (lastDescrText == null
1203 ? setDescr.getText().trim().length() > 0
1204 : !setDescr.getText().equals(lastDescrText)));
1210 public void insertUpdate(DocumentEvent e)
1212 checkDescrModified();
1216 public void removeUpdate(DocumentEvent e)
1218 checkDescrModified();
1222 public void changedUpdate(DocumentEvent e)
1224 checkDescrModified();
1229 * @return null or the service preset selected by the user
1231 public WsParamSetI getPreset()
1233 if (isUserPreset || isModified()
1234 || (lastParmSet != null && lastParmSet.equals(SVC_DEF)))
1240 return paramStore.getPreset(lastParmSet);