+
+ String lastParmSet = null;
+
+ /*
+ * Hashtable<String, Object[]> editedParams = new Hashtable<String,
+ * Object[]>();
+ *
+ * store the given parameters in the user parameter set database.
+ *
+ * @param storeSetName - lastParmSet
+ *
+ * @param descr - setDescr.getText()
+ *
+ * @param jobParams - getJobParams()
+ *
+ * private void _storeUserPreset(String storeSetName, String descr,
+ * List<ArgumentI> jobParams) { // this is a simple hash store. Object[] pset;
+ * editedParams.put(storeSetName, pset = new Object[3]); pset[0] =
+ * storeSetName; pset[1] = descr; pset[2] = jobParams; // writeParam("Saving "
+ * + storeSetName + ": ", jobParams); }
+ *
+ * private void writeParam(String nm, List<ArgumentI> params) { for (ArgumentI
+ * p : params) { System.out.println(nm + ":" + System.identityHashCode(p) +
+ * " Name: " + p.getName() + " Value: " + p.getDefaultValue()); } }
+ *
+ * private Object[] _getUserPreset(String setName) { Object[] pset =
+ * editedParams.get(setName); // if (pset != null) // writeParam("Retrieving "
+ * + setName + ": ", (List<Argument>) pset[2]); return pset; }
+ *
+ * * remove the given user preset from the preset stash
+ *
+ * @param setName
+ *
+ * private void _deleteUserPreset(String setName) {
+ * editedParams.remove(setName); }
+ */
+
+ private void syncSetNamesWithStore()
+ {
+ int n = 0;
+ // remove any set names in the drop down menu that aren't either a reserved
+ // setting, or a user defined or service preset.
+ Vector items = new Vector();
+ while (n < setName.getItemCount())
+ {
+ String item = (String) setName.getItemAt(n);
+ if (!item.equals(SVC_DEF) && !paramStore.presetExists(item))
+ {
+ setName.removeItemAt(n);
+ }
+ else
+ {
+ items.addElement(item);
+ n++;
+ }
+ }
+ if (!items.contains(SVC_DEF))
+ {
+ setName.addItem(SVC_DEF);
+ }
+ for (WsParamSetI upn : paramStore.getPresets())
+ {
+ if (!items.contains(upn.getName()))
+ {
+ setName.addItem(upn.getName());
+ }
+ }
+ }
+
+ /**
+ * true if lastParmSet is a user preset
+ */
+ boolean isUserPreset = false;
+
+ private void reInitDialog(String nextPreset)
+ {
+ settingDialog = true;
+ // updateTable(null,null); // first reset to defaults
+ WsParamSetI pset = null;
+ if (nextPreset != null && nextPreset.length() > 0)
+ {
+ pset = paramStore.getPreset(nextPreset);
+ }
+ if (pset != null)
+ {
+ if (pset.isModifiable())
+ {
+ isUserPreset = true;
+ setDescr.setText(pset.getDescription());
+ updateTable(null, pset.getArguments());
+ lastParmSet = nextPreset;
+ }
+ else
+ {
+ isUserPreset = false;
+ setDescr.setText("");
+ // must be a default preset from service
+ updateTable(pset, null);
+ lastParmSet = nextPreset;
+ }
+ }
+ else
+ {
+ isUserPreset = false;
+ // Service defaults
+ setDescr.setText("");
+ updateTable(null, null);
+ lastParmSet = SVC_DEF;
+ }
+
+ initArgSetModified();
+ syncSetNamesWithStore();
+ setName.setSelectedItem(lastParmSet);
+ SetNamePanel.validate();
+ validate();
+ settingDialog = false;
+
+ }
+
+ String curSetName = null;
+
+ public void itemStateChanged(ItemEvent e)
+ {
+ if (e.getSource() == setName && e.getStateChange() == e.SELECTED)
+ {
+ final String setname = (String) setName.getSelectedItem();
+ System.out.println("Item state changed for " + setname
+ + " (handling ? " + !settingDialog + ")");
+ if (settingDialog)
+ {
+ // ignore event
+ return;
+ }
+ if (setname == null)
+ {
+ return;
+ }
+ javax.swing.SwingUtilities.invokeLater(new Runnable()
+ {
+ public void run()
+ {
+ doPreferenceComboStateChange(setname);
+ }
+ });
+ }
+ }
+
+ private void doPreferenceComboStateChange(String setname)
+ {
+ // user has selected a different item from combo-box
+ if (isModified())
+ {
+ String lsetname = (curSetName != null) ? curSetName : lastParmSet;
+ if (lsetname.equals(setname))
+ {
+ // setname was just edited - so ignore this event.
+ return;
+ }
+ settingDialog = true;
+ System.out.println("Prompting to save " + lsetname);
+ if (javax.swing.JOptionPane
+ .showConfirmDialog(
+ this,
+ "Parameter set '"
+ + lsetname
+ + "' is modifed, and your changes will be lost.\nReally change preset ?",
+ "Warning: Unsaved Changes",
+ javax.swing.JOptionPane.OK_CANCEL_OPTION) != JOptionPane.OK_OPTION)
+ {
+ // revert the combobox to the current item
+ settingDialog = true;
+ setName.setSelectedItem(lsetname);
+ settingDialog = false;
+ // and leave.
+ return;
+ // System.out.println("Saving for " + lsetname);
+ // _storeCurrentPreset(lsetname);
+
+ }
+ }
+ settingDialog = true;
+ reInitDialog(setname);
+ settingDialog = false;
+
+ }
+
+ private void _renameExistingPreset(String oldName, String curSetName2)
+ {
+ paramStore.updatePreset(oldName, curSetName2, setDescr.getText(),
+ getJobParams());
+ }
+
+ /**
+ * store current settings as given name. You should then reset gui.
+ *
+ * @param curSetName2
+ */
+ private void _storeCurrentPreset(String curSetName2)
+ {
+ paramStore.storePreset(curSetName2, setDescr.getText(), getJobParams());
+ }
+
+ private void _updatePreset(String lastParmSet2, String curname)
+ {
+ paramStore.updatePreset(lastParmSet2, curname, setDescr.getText(),
+ getJobParams());
+
+ }
+
+ /**
+ * last saved name for this user preset
+ */
+ String lastSetName = null;
+
+ /**
+ * last saved value of the description text for this user preset
+ */
+ String lastDescrText = null;
+
+ public void actionPerformed(ActionEvent e)
+ {
+ if (e.getSource() instanceof Component)
+ {
+ Component src = (Component) e.getSource();
+ if (src.getParent() == setName)
+ {
+ // rename any existing records we know about for this set.
+ String newname = (String) e.getActionCommand().trim();
+ String msg = null;
+ if (isServicePreset(newname))
+ {
+ final String oldname = curSetName != null ? curSetName
+ : lastParmSet;
+ final Component ourframe = this;
+ settingDialog = true;
+ setName.getEditor().setItem(oldname);
+ settingDialog = false;
+ javax.swing.SwingUtilities.invokeLater(new Runnable()
+ {
+ public void run()
+ {
+ JOptionPane.showMessageDialog(ourframe,
+ "Invalid name - preset already exists.",
+ "Invalid name", JOptionPane.WARNING_MESSAGE);
+ }
+ });
+
+ return;
+ }
+ curSetName = newname;
+ System.err.println("New name for user setting " + curSetName
+ + " (was " + setName.getSelectedItem() + ")");
+ if (curSetName.equals(setName.getSelectedItem()))
+ {
+ curSetName = null;
+ }
+ if (curSetName != null)
+ {
+ argSetModified(setName, true);
+ return;
+ }
+
+ }
+ }
+ }
+
+ private void checkDescrModified()
+ {
+ if (!settingDialog)
+ {
+
+ argSetModified(
+ setDescr,
+ (lastDescrText == null ? setDescr.getText().trim().length() > 0
+ : !setDescr.getText().equals(lastDescrText)));
+
+ }
+ }
+
+ public void insertUpdate(DocumentEvent e)
+ {
+ checkDescrModified();
+ }
+
+ public void removeUpdate(DocumentEvent e)
+ {
+ checkDescrModified();
+ }
+
+ public void changedUpdate(DocumentEvent e)
+ {
+ checkDescrModified();
+ }
+
+ /**
+ *
+ * @return null or the service preset selected by the user
+ */
+ public WsParamSetI getPreset()
+ {
+ if (isUserPreset || isModified()
+ || (lastParmSet != null && lastParmSet.equals(SVC_DEF)))
+ {
+ return null;
+ }
+ else
+ {
+ return paramStore.getPreset(lastParmSet);
+ }
+ }