X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FWsJobParameters.java;h=1d56b69ee097fae18d24828a6c4a18b0910bf992;hb=c13784724ba3826e6cc3faeb85571cf30776592d;hp=3facfa106e9a08393072ae1bdb1e4ce042abf929;hpb=6fbc6ebb2f261d9071e40fcf51b02584a2119aa2;p=jalview.git diff --git a/src/jalview/gui/WsJobParameters.java b/src/jalview/gui/WsJobParameters.java index 3facfa1..1d56b69 100644 --- a/src/jalview/gui/WsJobParameters.java +++ b/src/jalview/gui/WsJobParameters.java @@ -73,9 +73,19 @@ import compbio.metadata.WrongParameterException; import compbio.metadata.ValueConstrain.Type; import jalview.util.jarInputStreamProvider; +import jalview.ws.jws2.JabaParamStore; +import jalview.ws.jws2.JabaPreset; import jalview.ws.jws2.Jws2Discoverer; import jalview.ws.jws2.ParameterUtils; import jalview.ws.jws2.Jws2Discoverer.Jws2Instance; +import jalview.ws.jws2.dm.JabaOption; +import jalview.ws.jws2.dm.JabaParameter; +import jalview.ws.params.ArgumentI; +import jalview.ws.params.OptionI; +import jalview.ws.params.ParamDatastoreI; +import jalview.ws.params.ParameterI; +import jalview.ws.params.ValueConstrainI; +import jalview.ws.params.WsParamSetI; /** * job parameter editing/browsing dialog box. User can browse existing settings @@ -136,21 +146,20 @@ public class WsJobParameters extends JPanel implements ItemListener, JScrollPane paramPane = new JScrollPane(); - // JList paramList = new JList(); JPanel paramList = new JPanel(); RunnerConfig serviceOptions; - private BorderLayout jparamLayout; + ParamDatastoreI paramStore; WsJobParameters(Jws2Instance service) { this(service, null); } - public WsJobParameters(Jws2Instance service, Preset p) + public WsJobParameters(Jws2Instance service, WsParamSetI preset) { - this(null, service, p, null); + this(null, service, preset, null); } /** @@ -158,16 +167,36 @@ public class WsJobParameters extends JPanel implements ItemListener, * @param desktop * - if null, create new JFrame outside of desktop * @param service - * @param p + * @param preset */ - public WsJobParameters(JFrame parent, Jws2Instance service, Preset p, + public WsJobParameters(JFrame parent, Jws2Instance service, WsParamSetI preset, List jobArgset) { + this(parent, null, service, preset, jobArgset); + } + + /** + * + * @param parent + * @param paramStorei + * @param service + * @param preset + * @param jobArgset + */ + public WsJobParameters(JFrame parent, ParamDatastoreI paramStorei, + Jws2Instance service, WsParamSetI preset, List jobArgset) + { super(); jbInit(); + this.paramStore = paramStorei; + if (paramStore == null) + { + paramStore = service.getParamStore(); + } + this.service = service; // argSetModified(false); // populate parameter table - initForService(service, p, jobArgset); + initForService(service, preset, jobArgset); // display in new JFrame attached to parent. validate(); } @@ -319,7 +348,7 @@ public class WsJobParameters extends JPanel implements ItemListener, setDetails.add(setDescrView, BorderLayout.CENTER); // setDetails.setPreferredSize(new Dimension(360, 100)); jobParameters.setBorder(new TitledBorder("Parameters")); - jobParameters.setLayout(jparamLayout = new BorderLayout()); + jobParameters.setLayout(new BorderLayout()); paramPane.setPreferredSize(new Dimension(360, 300)); paramPane.getVerticalScrollBar().setUnitIncrement(20); // paramPanel.setPreferredSize(new Dimension(360, 300)); @@ -360,11 +389,7 @@ public class WsJobParameters extends JPanel implements ItemListener, if (isUserPreset) { String curname = ((String) setName.getSelectedItem()).trim(); - if (curname.length() > 0 && !curname.equals(lastParmSet)) - { - _deleteUserPreset(lastParmSet); - } - _storeCurrentPreset(curname); + _updatePreset(lastParmSet, curname); lastParmSet = curname; isUserPreset = true; initArgSetModified(); @@ -372,6 +397,12 @@ public class WsJobParameters extends JPanel implements ItemListener, } } + + private void _deleteUserPreset(String lastParmSet2) + { + paramStore.deletePreset(lastParmSet2); + } + protected void delete_actionPerformed(ActionEvent e) { if (isUserPreset) @@ -429,11 +460,17 @@ public class WsJobParameters extends JPanel implements ItemListener, */ boolean settingDialog = false; - void initForService(Jws2Instance service, Preset p, - List jobArgset) + void initForService(Jws2Instance service, WsParamSetI jabap, + List jabajobArgset) { + WsParamSetI p = null; + List jobArgset = null; settingDialog = true; - this.service = service; + { // instantiate the abstract proxy for Jaba objects + jobArgset = jabajobArgset == null ? null : JabaParamStore + .getJwsArgsfromJaba(jabajobArgset); + p = jabap; // (jabap != null) ? paramStore.getPreset(jabap.getName()) : null; + } // TODO: Recover window geometry prefs for this service // jobPanel.setDividerLocation(proportionalLocation) // settingsPanel.setDividerLocation(proportionalLocation) @@ -442,30 +479,27 @@ public class WsJobParameters extends JPanel implements ItemListener, { exnames.put((String) setName.getItemAt(i), setName.getItemAt(i)); } + servicePresets = new Hashtable(); // Add the default entry - if not present already. if (!exnames.contains(SVC_DEF)) { setName.addItem(SVC_DEF); exnames.put(SVC_DEF, SVC_DEF); + servicePresets.put(SVC_DEF, SVC_DEF); } - serviceOptions = service.getRunnerConfig(); - // add any presets not already added. String curname = (p == null ? "" : p.getName()); - PresetManager prman = service.getPresets(); - servicePresets = new Hashtable(); - if (prman != null) + for (WsParamSetI pr : paramStore.getPresets()) { - List prList = service.getPresets().getPresets(); - if (prList != null) + if (!pr.isModifiable()) { - for (Object pr : prList) - { - servicePresets.put(((Preset) pr).getName(), "preset"); - if (!exnames.contains(((Preset) pr).getName())) - { - setName.addItem(((Preset) pr).getName()); - } - } + servicePresets.put(pr.getName(), "preset"); + } + else + { + } + if (!exnames.contains(pr.getName())) + { + setName.addItem(pr.getName()); } } // TODO: if initial jobArgset matches a given user setting or preset then @@ -494,34 +528,32 @@ public class WsJobParameters extends JPanel implements ItemListener, } @SuppressWarnings("unchecked") - private void updateTable(Preset p, List jobArgset) + private void updateTable(WsParamSetI p, List jobArgset) { - List setargs = new ArrayList(); // populate table from default parameter set. - List args = serviceOptions.getArguments(); + List args = paramStore.getServiceParameters(); // split to params and required arguments { - for (Argument arg : args) + for (ArgumentI myarg : args) { - Argument myarg = (Argument) arg; // Ideally, Argument would implement isRequired ! - if (myarg instanceof Parameter) + if (myarg instanceof ParameterI) { - Parameter parm = (Parameter) myarg; + ParameterI parm = (ParameterI) myarg; addParameter(parm); } else { - if (myarg instanceof Option) + if (myarg instanceof OptionI) { - Option opt = (Option) myarg; + OptionI opt = (OptionI) myarg; addOption(opt).resetToDefault(); } else { System.err.println("Ignoring unknown service argument type " - + arg.getClass().getName()); + + myarg.getClass().getName()); } } } @@ -536,14 +568,13 @@ public class WsJobParameters extends JPanel implements ItemListener, // TODO - URL link try { - args = p.getArguments(serviceOptions); + args = p.getArguments(); } catch (Exception e) { e.printStackTrace(); } // TODO: check if args should be unselected prior to resetting using the // preset - setargs.clear(); } else { @@ -551,6 +582,7 @@ public class WsJobParameters extends JPanel implements ItemListener, { isUserPreset = false; // first call - so create a dummy name + setName.setSelectedItem(lastSetName = SVC_DEF); } } @@ -563,20 +595,20 @@ public class WsJobParameters extends JPanel implements ItemListener, // get setargs from current object if (args != null) { - for (Argument arg : args) + for (ArgumentI arg : args) { - if (arg instanceof Parameter) + if (arg instanceof ParameterI) { - setParameter((Parameter) arg); + setParameter((ParameterI) arg); } else { - if (arg instanceof Option) + if (arg instanceof OptionI) { // System.out.println("Setting option " // + System.identityHashCode(arg) + ":" + arg.getName() // + " with " + arg.getDefaultValue()); - selectOption((Option) arg, arg.getDefaultValue()); + selectOption((OptionI) arg, arg.getDefaultValue()); } } @@ -642,13 +674,18 @@ public class WsJobParameters extends JPanel implements ItemListener, { return; } - if (!b) { modifiedElements.remove(modifiedElement); } else { + if (b && modifiedElement == setName + && modifiedElements.contains(modifiedElement)) + { + // HACK! prevents iteration on makeSetNameValid + b = false; + } modifiedElements.put(modifiedElement, modifiedElement); } // set mod status based on presence of elements in table @@ -686,7 +723,7 @@ public class WsJobParameters extends JPanel implements ItemListener, if (newuserset) { int i = 0; - while (_getUserPreset(tnm) != null) + while (paramStore.getPreset(tnm) != null) { tnm = nm + " (" + (++i) + ")"; renamed = true; @@ -721,21 +758,21 @@ public class WsJobParameters extends JPanel implements ItemListener, settingDialog = stn; } - private void addParameter(Parameter parm) + private void addParameter(ParameterI arg) { - ParamBox pb = paramSet.get(parm.getName()); + ParamBox pb = paramSet.get(arg.getName()); if (pb == null) { - pb = new ParamBox(this, parm); - paramSet.put(parm.getName(), pb); + pb = new ParamBox(this, arg); + paramSet.put(arg.getName(), pb); paramList.add(pb); } pb.init(); // take the defaults from the parameter - pb.updateControls(parm); + pb.updateControls(arg); } - private void setParameter(Parameter arg) + private void setParameter(ParameterI arg) { ParamBox pb = paramSet.get(arg.getName()); if (pb == null) @@ -749,27 +786,27 @@ public class WsJobParameters extends JPanel implements ItemListener, } - private void selectOption(Option opt, String string) + private void selectOption(OptionI option, String string) { - OptionBox cb = optSet.get(opt.getName()); + OptionBox cb = optSet.get(option.getName()); if (cb == null) { - cb = addOption(opt); + cb = addOption(option); } cb.enabled.setSelected(string != null); // initial state for an option. if (string != null) { - if (opt.getPossibleValues().contains(string)) + if (option.getPossibleValues().contains(string)) { cb.val.setSelectedItem(string); } else { - throw new Error("Invalid value " + string + " for option " + opt); + throw new Error("Invalid value " + string + " for option " + option); } } - if (opt.isRequired() && !cb.enabled.isSelected()) + if (option.isRequired() && !cb.enabled.isSelected()) { // TODO: indicate paramset is not valid.. option needs to be selected! } @@ -791,7 +828,7 @@ public class WsJobParameters extends JPanel implements ItemListener, JTextField valueField = null; - ValueConstrain validator = null; + ValueConstrainI validator = null; JPanel settingPanel = new JPanel(); @@ -807,7 +844,7 @@ public class WsJobParameters extends JPanel implements ItemListener, final URL finfo; - public ParamBox(final WsJobParameters pmlayout, Parameter parm) + public ParamBox(final WsJobParameters pmlayout, ParameterI parm) { pmdialogbox = pmlayout; setPreferredSize(new Dimension(PARAM_WIDTH, PARAM_CLOSEDHEIGHT)); @@ -891,7 +928,7 @@ public class WsJobParameters extends JPanel implements ItemListener, boolean adjusting = false; - Parameter parameter; + ParameterI parameter; JComboBox choicebox; @@ -900,7 +937,7 @@ public class WsJobParameters extends JPanel implements ItemListener, return (descisvisible ? PARAM_HEIGHT : PARAM_CLOSEDHEIGHT); } - public void updateControls(Parameter parm) + public void updateControls(ParameterI parm) { adjusting = true; boolean init = (choicebox == null && valueField == null); @@ -956,23 +993,16 @@ public class WsJobParameters extends JPanel implements ItemListener, Object lastVal; - public Parameter getParameter() + public ParameterI getParameter() { - Parameter prm = ParameterUtils.copyParameter(parameter); - try + ParameterI prm = parameter.copy(); + if (choice) { - if (choice) - { - prm.setDefaultValue((String) choicebox.getSelectedItem()); - } - else - { - prm.setDefaultValue(valueField.getText()); - } - } catch (WrongParameterException e) + prm.setDefaultValue((String) choicebox.getSelectedItem()); + } + else { - e.printStackTrace(); - return null; + prm.setDefaultValue(valueField.getText()); } return prm; } @@ -990,6 +1020,16 @@ public class WsJobParameters extends JPanel implements ItemListener, { valueField.setText(valueField.getText().trim()); iVal = Integer.valueOf(valueField.getText()); + if (validator.getMin()!=null && validator.getMin().intValue()>iVal) + { + iVal = validator.getMin().intValue(); + // TODO: provide visual indication that hard limit was reached for this parameter + } + if (validator.getMax()!=null && validator.getMax().intValue()fVal) + { + fVal = validator.getMin().floatValue(); + // TODO: provide visual indication that hard limit was reached for this parameter + } + if (validator.getMax()!=null && validator.getMax().floatValue() rg = lastserv.getRunnerConfig().getOptions(); for (Option o : rg) @@ -1476,24 +1518,28 @@ public class WsJobParameters extends JPanel implements ItemListener, lastserv.getRunnerConfig(), " "); readparam = jalview.ws.jws2.ParameterUtils .writeParameterSet(pset, " "); - Iterator o=pr.getOptions().iterator(),s = writeparam.iterator(), t = readparam - .iterator(); - boolean failed=false; + Iterator o = pr.getOptions().iterator(), s = writeparam + .iterator(), t = readparam.iterator(); + boolean failed = false; while (s.hasNext() && t.hasNext()) { - String on=o.next(),sn = s.next(),st=t.next(); + String on = o.next(), sn = s.next(), st = t.next(); if (!sn.equals(st)) { - System.out.println("Original was "+on+" Phase 1 wrote " + sn - + "\tPhase 2 wrote " + st); - failed=true; + System.out.println("Original was " + on + + " Phase 1 wrote " + sn + "\tPhase 2 wrote " + + st); + failed = true; } } if (failed) { - System.out.println("Original parameters:\n"+pr.getOptions()); - System.out.println("Wrote parameters in first set:\n"+writeparam); - System.out.println("Wrote parameters in second set:\n"+readparam); + System.out.println("Original parameters:\n" + + pr.getOptions()); + System.out.println("Wrote parameters in first set:\n" + + writeparam); + System.out.println("Wrote parameters in second set:\n" + + readparam); } } catch (Exception e) @@ -1501,7 +1547,7 @@ public class WsJobParameters extends JPanel implements ItemListener, e.printStackTrace(); } } - WsJobParameters pgui = new WsJobParameters(lastserv, pr); + WsJobParameters pgui = new WsJobParameters(lastserv, new JabaPreset(lastserv, pr)); JFrame jf = new JFrame("Parameters for " + lastserv.getActionText()); JPanel cont = new JPanel(); @@ -1573,13 +1619,13 @@ public class WsJobParameters extends JPanel implements ItemListener, } } - public List getJobParams() + public List getJobParams() { - List argSet = new ArrayList(); + List argSet = new ArrayList(); // recover options and parameters from GUI for (OptionBox opts : optSet.values()) { - Option opt = opts.getOptionIfEnabled(); + OptionI opt = opts.getOptionIfEnabled(); if (opt != null) { argSet.add(opt); @@ -1587,7 +1633,7 @@ public class WsJobParameters extends JPanel implements ItemListener, } for (ParamBox parambox : paramSet.values()) { - Parameter parm = parambox.getParameter(); + ParameterI parm = parambox.getParameter(); if (parm != null) { argSet.add(parm); @@ -1599,56 +1645,39 @@ public class WsJobParameters extends JPanel implements ItemListener, String lastParmSet = null; - Hashtable editedParams = new Hashtable(); - - /** + /* + * Hashtable editedParams = new Hashtable(); + * * 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 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 params) - { - for (Argument 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) pset[2]); - return pset; - } - - /** - * remove the given user preset from the preset stash + * @param storeSetName - lastParmSet + * + * @param descr - setDescr.getText() + * + * @param jobParams - getJobParams() + * + * private void _storeUserPreset(String storeSetName, String descr, + * List 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 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) 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 _deleteUserPreset(String setName) - { - editedParams.remove(setName); - } private void syncSetNamesWithStore() { @@ -1659,7 +1688,7 @@ public class WsJobParameters extends JPanel implements ItemListener, while (n < setName.getItemCount()) { String item = (String) setName.getItemAt(n); - if (!isServicePreset(item) && _getUserPreset(item) == null) + if (!item.equals(SVC_DEF) && !paramStore.presetExists(item)) { setName.removeItemAt(n); } @@ -1669,11 +1698,15 @@ public class WsJobParameters extends JPanel implements ItemListener, n++; } } - for (String upn : editedParams.keySet()) + if (!items.contains(SVC_DEF)) { - if (!items.contains(upn)) + setName.addItem(SVC_DEF); + } + for (WsParamSetI upn : paramStore.getPresets()) + { + if (!items.contains(upn.getName())) { - setName.addItem(upn); + setName.addItem(upn.getName()); } } } @@ -1687,47 +1720,37 @@ public class WsJobParameters extends JPanel implements ItemListener, { settingDialog = true; // updateTable(null,null); // first reset to defaults - Object[] pset = null; + WsParamSetI pset = null; if (nextPreset != null && nextPreset.length() > 0) { - pset = _getUserPreset(nextPreset); + pset = paramStore.getPreset(nextPreset); } if (pset != null) { - isUserPreset = true; - setDescr.setText((String) pset[1]); - updateTable(null, (List) pset[2]); - lastParmSet = nextPreset; - } - else - { - isUserPreset = false; - setDescr.setText(""); - // must be a default preset from service - Preset p = null; - try + if (pset.isModifiable()) { - PresetManager prman = service.getPresets(); - if (prman != null) - { - isUserPreset = false; - p = prman.getPresetByName(nextPreset); - } - } catch (Exception ex) - { - ex.printStackTrace(); - } - if (p != null) - { - updateTable(p, null); + isUserPreset = true; + setDescr.setText(pset.getDescription()); + updateTable(null, pset.getArguments()); lastParmSet = nextPreset; } else { - updateTable(null, null); - lastParmSet = SVC_DEF; + isUserPreset = false; + setDescr.setText(""); + // must be a default preset from service + updateTable(pset, null); + lastParmSet = nextPreset; } } + else + { + isUserPreset = false; + // Service defaults + updateTable(null, null); + lastParmSet = SVC_DEF; + } + initArgSetModified(); syncSetNamesWithStore(); setName.setSelectedItem(lastParmSet); @@ -1780,6 +1803,10 @@ public class WsJobParameters extends JPanel implements ItemListener, } } + 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. @@ -1788,7 +1815,12 @@ public class WsJobParameters extends JPanel implements ItemListener, */ private void _storeCurrentPreset(String curSetName2) { - _storeUserPreset(curSetName2, setDescr.getText(), getJobParams()); + paramStore.storePreset(curSetName2, setDescr.getText(), getJobParams()); + } + private void _updatePreset(String lastParmSet2, String curname) + { + paramStore.updatePreset(lastParmSet2, curname, setDescr.getText(), getJobParams()); + } /** @@ -1865,7 +1897,11 @@ public class WsJobParameters extends JPanel implements ItemListener, checkDescrModified(); } - public Preset getPreset() + /** + * + * @return null or the service preset selected by the user + */ + public WsParamSetI getPreset() { if (isUserPreset || isModified() || (lastParmSet != null && lastParmSet.equals(SVC_DEF))) @@ -1874,15 +1910,7 @@ public class WsJobParameters extends JPanel implements ItemListener, } else { - Preset p = null; - try - { - return (Preset) service.getPresets().getPresetByName(lastParmSet); - } catch (Exception e) - { - e.printStackTrace(); - return null; - } + return paramStore.getPreset(lastParmSet); } } } \ No newline at end of file