package jalview.gui;
import java.awt.BorderLayout;
+import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.GridLayout;
+import java.awt.Rectangle;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ComponentEvent;
import java.awt.event.ComponentListener;
import java.awt.event.ContainerEvent;
import java.awt.event.ContainerListener;
+import java.awt.event.ItemEvent;
+import java.awt.event.ItemListener;
+import java.awt.event.KeyEvent;
+import java.awt.event.KeyListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.WindowEvent;
import java.util.EventObject;
import java.util.HashSet;
import java.util.Hashtable;
+import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Vector;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
+import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
+import javax.swing.JList;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
+import javax.swing.JSlider;
import javax.swing.JTable;
import javax.swing.JTextArea;
+import javax.swing.JTextField;
import javax.swing.ListSelectionModel;
+import javax.swing.SwingConstants;
import javax.swing.SwingUtilities;
import javax.swing.border.TitledBorder;
import javax.swing.event.CellEditorListener;
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.ChangeListener;
import javax.swing.table.*;
import compbio.metadata.Argument;
import compbio.metadata.PresetManager;
import compbio.metadata.RunnerConfig;
import compbio.metadata.ValueConstrain;
+import compbio.metadata.WrongParameterException;
import compbio.metadata.ValueConstrain.Type;
import jalview.ws.jws2.Jws2Discoverer;
import jalview.ws.jws2.Jws2Discoverer.Jws2Instance;
-public class WsJobParameters extends JPanel
+public class WsJobParameters extends JPanel implements ItemListener,
+ ActionListener
{
+ private static final int PARAM_WIDTH = 340, PARAM_HEIGHT = 150,PARAM_CLOSEDHEIGHT=80;
+
+ private static final int OPTSET_HEIGHT = 30;
+
JPanel setDetails = new JPanel();
JPanel settingsPanel = new JPanel();
JPanel jobOptions = new JPanel();
+ JScrollPane jobOptionsPane = new JScrollPane();
+
JPanel jobParameters = new JPanel();
JPanel paramButtons = new JPanel();
+ JPanel paramPanel = new JPanel();
+
+ JLabel modified = new JLabel();
+
+ JButton startjob = new JButton();
+
+ JButton canceljob = new JButton();
+
JButton exportParams = new JButton();
JButton importParams = new JButton();
JButton editParam = new JButton();
- JLabel setName = new JLabel();
+ JComboBox setName = new JComboBox();
JTextArea setDescr = new JTextArea();
- JTable paramTable = new JTable();
-
JScrollPane paramPane = new JScrollPane();
+ // JList paramList = new JList();
+ JPanel paramList = new JPanel();
+
RunnerConfig serviceOptions;
List<Parameter> availableParameters;
public WsJobParameters(Jws2Instance service, Preset p)
{
- this(null, service, p);
+ this(null, service, p, null);
}
/**
* @param service
* @param p
*/
- public WsJobParameters(JFrame parent, Jws2Instance service, Preset p)
+ public WsJobParameters(JFrame parent, Jws2Instance service, Preset p,
+ List<Argument> jobArgset)
{
super();
jbInit();
- initTableUI();
+ argSetModified(false);
// populate parameter table
- initForService(service, p);
+ initForService(service, p, jobArgset);
// display in new JFrame attached to parent.
validate();
}
+ int response = -1;
+
+ JDialog frame = null;
+
+ public boolean showRunDialog()
+ {
+
+ frame = new JDialog(Desktop.instance, true);
+
+ frame.setTitle("Edit parameters for " + service.getActionText());
+ Rectangle deskr = Desktop.instance.getBounds();
+ frame.setBounds(new Rectangle((int) (deskr.getCenterX() - 240),
+ (int) (deskr.getCenterY() - 92), 380, 385));
+ frame.setContentPane(this);
+
+ frame.setVisible(true);
+
+ if (response > 0)
+ {
+ return true;
+ }
+ return false;
+ }
+
private void jbInit()
{
+ modified.setText("*");
+ modified.setFont(new java.awt.Font("Verdana", Font.PLAIN, 10));
+ modified.setForeground(Color.red);
+ modified.setHorizontalAlignment(SwingConstants.RIGHT);
+
exportParams.setFont(new java.awt.Font("Verdana", Font.PLAIN, 10));
exportParams.setText("Export");
exportParams.setToolTipText("Export parameters to a file");
editParam_actionPerformed(e);
}
});
+ startjob.setFont(new java.awt.Font("Verdana", Font.PLAIN, 10));
+ startjob.setText("Start");
+ startjob.setToolTipText("Start Job");
+ startjob.addActionListener(new ActionListener()
+ {
+ public void actionPerformed(ActionEvent e)
+ {
+ startjob_actionPerformed(e);
+ }
+ });
+ canceljob.setFont(new java.awt.Font("Verdana", Font.PLAIN, 10));
+ canceljob.setText("Cancel");
+ canceljob.setToolTipText("Cancel Job");
+ canceljob.addActionListener(new ActionListener()
+ {
+ public void actionPerformed(ActionEvent e)
+ {
+ canceljob_actionPerformed(e);
+ }
+ });
setDetails.setBorder(new TitledBorder("Details"));
- setDetails.setLayout(new GridLayout(2, 1));
+ setDetails.setLayout(new BorderLayout());
setDescr.setColumns(40);
setDescr.setWrapStyleWord(true);
- setDescr.setPreferredSize(new Dimension(350, 100));
- setDetails.add(setName);
- setDetails.add(setDescr);
- setDetails.setPreferredSize(new Dimension(360, 150));
- settingsPanel.setLayout(new BorderLayout());
- jobOptions.setBorder(new TitledBorder("Options"));
+ setDescr.setLineWrap(true);
+ setDescr.setBackground(getBackground());
+ setDescr.setEditable(false);
+ JScrollPane setDescrView = new JScrollPane();
+ // setDescrView.setPreferredSize(new Dimension(350, 200));
+ setDescrView.getViewport().setView(setDescr);
+ setName.setEditable(true);
+ setName.addItemListener(this);
+ setName.getEditor().addActionListener(this);
+ modified.setPreferredSize(new Dimension(15, 15));
+ JPanel SetNamePanel = new JPanel();
+ SetNamePanel.setLayout(new BorderLayout());
+ SetNamePanel.add(setName, BorderLayout.WEST);
+ SetNamePanel.add(modified, BorderLayout.EAST);
+ setDetails.add(SetNamePanel, BorderLayout.NORTH);
+ setDetails.add(setDescrView, BorderLayout.CENTER);
+ // setDetails.setPreferredSize(new Dimension(360, 100));
jobParameters.setBorder(new TitledBorder("Parameters"));
jobParameters.setLayout(jparamLayout = new BorderLayout());
paramPane.setPreferredSize(new Dimension(360, 300));
+ paramPane.getVerticalScrollBar().setUnitIncrement(20);
+ // paramPanel.setPreferredSize(new Dimension(360, 300));
paramButtons.setLayout(new GridLayout(2, 3));
paramButtons.add(addParam);
paramButtons.add(editParam);
paramButtons.add(exportParams);
paramButtons.add(importParams);
paramButtons.add(resetParams);
+ paramPane.getViewport().setView(paramList);
jobParameters.add(paramPane, BorderLayout.NORTH);
- jobParameters.add(paramButtons, BorderLayout.SOUTH);
- settingsPanel.add(jobOptions, BorderLayout.NORTH);
- settingsPanel.add(jobParameters, BorderLayout.SOUTH);
+ // jobParameters.add(paramButtons, BorderLayout.SOUTH);
+ settingsPanel.setLayout(new GridLayout(2,1));
+ // settingsPanel.add(modified, BorderLayout.NORTH);
+ JPanel jobOptionsPanel = new JPanel();
+ jobOptionsPanel.setLayout(new BorderLayout());
+ jobOptionsPanel.setBorder(new TitledBorder("Options"));
+ jobOptionsPane.getViewport().setView(jobOptions);
+ jobOptionsPanel.add(jobOptionsPane, BorderLayout.CENTER);
+ settingsPanel.add(jobOptionsPanel);
+ settingsPanel.add(jobParameters);
+
setLayout(new BorderLayout());
- setPreferredSize(new Dimension(400, 600));
- setSize(new Dimension(400, 600));
+ // setPreferredSize(new Dimension(400, 600));
+ // setSize(new Dimension(400, 600));
add(setDetails, BorderLayout.NORTH);
add(settingsPanel, BorderLayout.CENTER);
+ JPanel dialogpanel = new JPanel();
+ dialogpanel.add(startjob);
+ dialogpanel.add(canceljob);
+ add(dialogpanel, BorderLayout.SOUTH);
}
- /**
- * need to populate table and validate after calling this to set up table and
- * add it to pane
- */
- public void initTableUI()
+ protected void canceljob_actionPerformed(ActionEvent e)
{
- paramTable = new JTable();
- paramTable.getTableHeader()
- .setFont(new Font("Verdana", Font.PLAIN, 12));
- paramTable.setFont(new Font("Verdana", Font.PLAIN, 12));
-
- paramPane.getViewport().removeAll();
- paramPane.getViewport().add(paramTable);
- paramTable.setDefaultRenderer(Argument.class, new ArgumentRenderer());
- paramTable.setDefaultRenderer(Parameter.class, new ArgumentRenderer());
- paramTable.setDefaultRenderer(Option.class, new ArgumentRenderer());
- paramTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
- paramTable.addMouseListener(new MouseListener()
+ response = 0;
+ if (frame != null)
{
-
- @Override
- public void mouseClicked(MouseEvent e)
- {
- if (e.getClickCount() > 1)
- {
- editParam_actionPerformed(null);
- }
- }
-
- @Override
- public void mouseEntered(MouseEvent e)
- {
- // tooltips
- // TODO Auto-generated method stub
-
- }
-
- @Override
- public void mouseExited(MouseEvent e)
- {
- // tooltips
- // TODO Auto-generated method stub
-
- }
-
- @Override
- public void mousePressed(MouseEvent e)
- {
- // TODO Auto-generated method stub
-
- }
-
- @Override
- public void mouseReleased(MouseEvent e)
- {
- // TODO Auto-generated method stub
-
- }
-
- });
- // paramTable.setDefaultEditor(Argument.class, new WsArgumentEditor(this));
+ frame.setVisible(false);
+ }
}
- public class WsArgumentEditor implements TableCellEditor
+ protected void startjob_actionPerformed(ActionEvent e)
{
-
- int p;
-
- Argument arg;
-
- WsJobParameters wsparm;
-
- public WsArgumentEditor(WsJobParameters wsJobParameters)
- {
- wsparm = wsJobParameters;
- p = wsparm.paramTable.getSelectedRow();
- arg = (Argument) wsparm.paramTable.getValueAt(p, wsparm.paramTable
- .getSelectedColumn());
- /*
- * if (arg instanceof Option) { if
- * (JOptionPane.showInternalConfirmDialog(Desktop.desktop,
- * "Remove option "+arg.getName(),
- * "Delete option ?",JOptionPane.YES_NO_OPTION,
- * JOptionPane.QUESTION_MESSAGE) == JOptionPane.YES_OPTION) {
- *
- * } }
- */
- }
-
- @Override
- public Component getTableCellEditorComponent(JTable table,
- Object value, boolean isSelected, int row, int column)
- {
- // TODO Auto-generated method stub
- return null;
- }
-
- @Override
- public void addCellEditorListener(CellEditorListener l)
- {
- // TODO Auto-generated method stub
-
- }
-
- @Override
- public void cancelCellEditing()
- {
- // TODO Auto-generated method stub
-
- }
-
- @Override
- public Object getCellEditorValue()
- {
- // TODO Auto-generated method stub
- return null;
- }
-
- @Override
- public boolean isCellEditable(EventObject anEvent)
- {
- // TODO Auto-generated method stub
- return false;
- }
-
- @Override
- public void removeCellEditorListener(CellEditorListener l)
- {
- // TODO Auto-generated method stub
-
- }
-
- @Override
- public boolean shouldSelectCell(EventObject anEvent)
+ response = 1;
+ if (frame != null)
{
- // TODO Auto-generated method stub
- return false;
+ frame.setVisible(false);
}
-
- @Override
- public boolean stopCellEditing()
- {
- // TODO Auto-generated method stub
- return false;
- }
-
}
protected void editParam_actionPerformed(ActionEvent e)
}
- void initForService(Jws2Instance service, Preset p)
+ Jws2Instance service;
+
+ void initForService(Jws2Instance service, Preset p,
+ List<Argument> jobArgset)
{
+ this.service = service;
serviceOptions = service.getRunnerConfig();
- updateTable(p);
+ // add any presets not already added.
+ String curname = (p == null ? "" : p.getName());
+ PresetManager prman = service.getPresets();
+ if (prman != null)
+ {
+ List prList = service.getPresets().getPresets();
+ if (prList != null)
+ {
+ for (Object pr : prList)
+ {
+ if (p == null || !curname.equals(((Preset) pr).getName()))
+ {
+ setName.addItem(((Preset) pr).getName());
+ }
+ }
+ }
+ }
+ updateTable(p, jobArgset);
}
@SuppressWarnings("unchecked")
- private void updateTable(Preset p)
+ private void updateTable(Preset p, List<Argument> jobArgset)
{
- WsParameterTableModel mdl = null;
- TableModel tmdl = paramTable.getModel();
- if (tmdl instanceof WsParameterTableModel)
- {
- mdl = (WsParameterTableModel) tmdl;
- }
- if (mdl == null)
- {
- paramTable.setModel(mdl = new WsParameterTableModel());
- }
availableParameters = new ArrayList<Parameter>();
List<Parameter> setargs = new ArrayList<Parameter>();
// populate table from default parameter set.
List<Argument> args = serviceOptions.getArguments();
-
+
// split to params and required arguments
{
for (Argument arg : args)
if (myarg instanceof Parameter)
{
Parameter parm = (Parameter) myarg;
- if (parm.isRequired())
+ if (true) // parm.isRequired())
{
- setargs.add(parm);
+ addParameter(parm);
}
else
{
}
}
}
+ args = null; // no more args to process.
}
-
if (p != null)
{
+ if (lastParmSet == null)
+ {
+ // initialise setname
+ setName.addItem(p.getName());
+ }
setDescr.setText(p.getDescription());
- setName.setText(p.getName());
// TODO - URL link
try
{
{
e.printStackTrace();
}
+ // TODO: check if args should be unselected prior to resetting using the
+ // preset
setargs.clear();
- // get setargs from current object
- if (args != null)
+ }
+ else
+ {
+ if (lastParmSet == null)
+ {
+ // first call - so create a dummy name
+ setName.addItem("Defaults *");
+ }
+ }
+ if (jobArgset != null)
+ {
+ argSetModified(true);
+ args = jobArgset;
+ }
+ // get setargs from current object
+ if (args != null)
+ {
+ for (Argument arg : args)
{
- for (Argument arg : args)
+ if (arg instanceof Parameter)
{
- if (arg instanceof Parameter)
- {
- setargs.add((Parameter) arg);
- }
- else
+ setargs.add((Parameter) arg);
+ }
+ else
+ {
+ if (arg instanceof Option)
{
- if (arg instanceof Option)
- {
- selectOption((Option) arg, arg.getDefaultValue());
- }
+ selectOption((Option) arg, arg.getDefaultValue());
}
-
}
+
}
}
- mdl.setData(setargs);
- paramTable.setModel(mdl);
- // paramTable.validate();
- jobOptions.setLayout(new GridLayout(optSet.size() / 2 + 1, 2));
- jobOptions.validate();
+ // mdl.setData(setargs);
+ // jobOptions.setLayout(new GridLayout(optSet.size() / 2 + 1, 2));
+ jobOptions.setPreferredSize(new Dimension(PARAM_WIDTH, optSet.size()
+ * OPTSET_HEIGHT));
+ jobOptions.setLayout(new GridLayout(optSet.size(), 1));
+ refreshParamLayout();
+ // paramPanel.setLayout(new GridLayout(paramSet.size(), 1));
+ // paramList.va
+ // paramPane.getViewport().validate();
+ paramPane.validate();
+ validate();
+ }
+
+ private boolean isModified()
+ {
+ return modified.isVisible();
+ }
+
+ private void argSetModified(boolean b)
+ {
+ modified.setVisible(b);
+ /*
+ * String setn = (String)setName.getSelectedItem(); if (setn==null) return;
+ * int p = setName.getSelectedIndex(); if (b) { if (setn.length()<2 ||
+ * setn.lastIndexOf(" *")!=setn.length()-2) { setn = setn+" *"; } } else {
+ * if (setn.lastIndexOf(" *")==setn.length()-2) { setn =
+ * setn.substring(0,setn.length()-2); } } // edit the list
+ *
+ * Object[] objects = new Object[setName.getItemCount()]; for (int
+ * i=0;i<objects.length; i++) { objects[i] = setName.getItemAt(i); }
+ * objects[p] = setn; setName.removeAllItems(); for (int
+ * i=0;i<objects.length; i++) { setName.addItem(objects[i]); }
+ * setName.setSelectedIndex(p);
+ */
+ validate();
+ }
+
+ private void addParameter(Parameter parm)
+ {
+ ParamBox pb = paramSet.get(parm.getName());
+ if (pb == null)
+ {
+ pb = new ParamBox(this, parm);
+ paramSet.put(parm.getName(), pb);
+ paramList.add(pb);
+ }
}
private void selectOption(Option opt, String string)
}
}
- Map<String, OptionBox> optSet = new Hashtable<String, OptionBox>();
+ Map<String, ParamBox> paramSet = new Hashtable<String, ParamBox>();
- public class OptionBox extends JPanel
+ public class ParamBox extends JPanel implements ChangeListener,
+ ActionListener
{
- JComboBox val = new JComboBox();
+ JButton showDesc = new JButton();
- JCheckBox enabled = new JCheckBox();
+ JTextArea string = new JTextArea();
+ JScrollPane descPanel = new JScrollPane();
- public OptionBox(Option opt)
+ JSlider slider = null;
+
+ JTextField valueField = null;
+
+ ValueConstrain validator = null;
+ JPanel settingPanel = new JPanel();
+ JPanel controlPanel=new JPanel();
+
+ boolean integ = false;
+
+ boolean choice = false;
+ boolean descisvisible=false;
+ public ParamBox(final WsJobParameters pmlayout, Parameter parm)
{
- setLayout(new BorderLayout());
- enabled.setSelected(opt.isRequired());
- enabled.setFont(new Font("Verdana", Font.PLAIN, 11));
- enabled.setText(opt.getName());
- enabled.setToolTipText(opt.getDescription());
- add(enabled, BorderLayout.NORTH);
- if (opt.getPossibleValues().size() > 1)
+ setPreferredSize(new Dimension(PARAM_WIDTH, PARAM_CLOSEDHEIGHT));
+ setBorder(new TitledBorder(parm.getName()));
+ setLayout(null);
+ showDesc.setFont(new Font("Verdana", Font.PLAIN, 11));
+ showDesc.setText("?");
+ string.setFont(new Font("Verdana", Font.PLAIN, 11));
+ string.setBackground(getBackground());
+ // string.setSize(new Dimension(PARAM_WIDTH, 80));
+ string.setEditable(false);
+ descPanel.getViewport().setView(string);
+ //descPanel.setLocation(2,17);
+ descPanel.setVisible(false);
+ // string.setMinimumSize(new Dimension(140,80));
+ // string.setMaximumSize(new Dimension(280,80));
+ final ParamBox me=this;
+ showDesc.addActionListener(new ActionListener() {
+
+ @Override
+ public void actionPerformed(ActionEvent e)
+ {
+ descisvisible=!descisvisible;
+ descPanel.setVisible(descisvisible);
+ me.setPreferredSize(new Dimension(PARAM_WIDTH, (descisvisible) ? PARAM_HEIGHT : PARAM_CLOSEDHEIGHT));
+ me.validate();
+ pmlayout.refreshParamLayout();
+ }
+ });
+ string.setWrapStyleWord(true);
+ string.setLineWrap(true);
+ string.setColumns(32);
+ string.setText(parm.getDescription());
+ // name.setToolTipText(parm.getDescription());
+ JPanel firstrow = new JPanel();
+ firstrow.setLayout(null);
+ controlPanel.setLayout(new BorderLayout());
+ controlPanel.setBounds(new Rectangle(39, 10, PARAM_WIDTH-70,PARAM_CLOSEDHEIGHT-50));
+ showDesc.setBounds(new Rectangle(10,10,16,16));
+ firstrow.add(showDesc);
+ firstrow.add(controlPanel);
+ firstrow.setBounds(new Rectangle(10,20,PARAM_WIDTH-30, PARAM_CLOSEDHEIGHT-30));
+ add(firstrow);
+ validator = parm.getValidValue();
+ parameter = parm;
+ if (validator != null)
{
- setLayout(new GridLayout(1,2));
- for (Object str : opt.getPossibleValues())
+ integ = validator.getType() == Type.Integer;
+ }
+ else
+ {
+ if (parameter.getPossibleValues() != null)
{
- val.addItem((String) str);
+ choice = true;
}
- val.setSelectedItem((String) opt.getDefaultValue());
- add(val, BorderLayout.SOUTH);
}
- // TODO: add actionListeners for popup (to open further info),
- // and to update list of parameters if an option is enabled
- // that takes a value.
- }
- }
-
- private OptionBox addOption(Option opt)
- {
- OptionBox cb = optSet.get(opt.getName());
- if (cb == null)
- {
- cb = new OptionBox(opt);
- optSet.put(opt.getName(), cb);
- jobOptions.add(cb);
+ updateControls(parm);
+ descPanel.setBounds(new Rectangle(10,PARAM_CLOSEDHEIGHT+10, PARAM_WIDTH-20, PARAM_HEIGHT-PARAM_CLOSEDHEIGHT-30));
+ add(descPanel);
+ validate();
}
- return cb;
- }
- class WsParameterTableModel extends AbstractTableModel
- {
- // arg list - vector for thread safety
- public Vector<Parameter> data = new Vector<Parameter>();
- private String[] colNames =
- { "Parameter", "Value" };
+ boolean adjusting = false;
- @Override
- public int getColumnCount()
- {
- return 2;
- }
+ Parameter parameter;
- @Override
- public int findColumn(String columnName)
+ JComboBox choicebox;
+ public int getBoxHeight()
{
- // TODO Auto-generated method stub
- return super.findColumn(columnName);
+ return (descisvisible ? PARAM_HEIGHT : PARAM_CLOSEDHEIGHT);
}
-
- public void setData(List<Parameter> setargs)
+ public void updateControls(Parameter parm)
{
- if (setargs != null)
+ adjusting = true;
+ boolean init = valueField == null;
+ float fVal = 0f;
+ int iVal = 0;
+ if (init)
{
- data = new Vector<Parameter>(setargs);
+ if (choice)
+ {
+ choicebox = new JComboBox();
+ choicebox.addActionListener(this);
+ controlPanel.add(choicebox,BorderLayout.CENTER);
+ }
+ else
+ {
+ slider = new JSlider();
+ slider.addChangeListener(this);
+ valueField = new JTextField();
+ valueField.addActionListener(this);
+ valueField.setPreferredSize(new Dimension(60, 25));
+ controlPanel.add(slider,BorderLayout.WEST);
+ controlPanel.add(valueField, BorderLayout.EAST);
+ }
}
- else
+
+ if (parm != null)
{
- data = new Vector<Parameter>();
+ if (choice)
+ {
+ List vals = parm.getPossibleValues();
+ for (Object val : vals)
+ {
+ choicebox.addItem(val);
+ }
+ if (parm.getDefaultValue() != null)
+ {
+ choicebox.setSelectedItem(parm.getDefaultValue());
+ }
+ }
+ else
+ {
+ valueField.setText(parm.getDefaultValue());
+ }
}
+ updateSliderFromValueField();
+ adjusting = false;
}
- public List<Parameter> getData()
- {
- return new ArrayList<Parameter>(data);
- }
-
- @Override
- public int getRowCount()
+ public Parameter getParameter()
{
- return data.size();
+ try
+ {
+ if (choice)
+ {
+ parameter.setDefaultValue((String) choicebox.getSelectedItem());
+ }
+ else
+ {
+ parameter.setDefaultValue(valueField.getText());
+ }
+ } catch (WrongParameterException e)
+ {
+ e.printStackTrace();
+ return null;
+ }
+ return parameter;
}
- @Override
- public Object getValueAt(int rowIndex, int columnIndex)
+ public Object updateSliderFromValueField()
{
- if (rowIndex >= 0 && rowIndex < data.size())
+ int iVal;
+ float fVal;
+ if (validator != null)
{
- Parameter prm = data.elementAt(rowIndex);
- switch (columnIndex)
+ if (integ)
{
- case 0:
- return prm.getName();
- case 1:
- Object exc = null;
- // the accessor name for the parameter value is possibly confusing
- String val = prm.getDefaultValue();
+ iVal = 0;
try
{
- if (prm.getValidValue().getType().equals(Type.Float))
- {
- exc = new Float(0);
- return Float.parseFloat(val);
- }
- if (prm.getValidValue().getType().equals(Type.Integer))
- {
- exc = new Integer(0);
- return Integer.parseInt(val);
- }
- } catch (NumberFormatException e)
+ valueField.setText(valueField.getText().trim());
+ iVal = Integer.valueOf(valueField.getText());
+ } catch (Exception e)
{
- return exc;
}
- // must be a string
- return val;
-
- default:
+ ;
+ if (validator.getMin() != null && validator.getMax() != null)
+ {
+ slider.getModel().setRangeProperties(iVal, 1,
+ validator.getMin().intValue(),
+ validator.getMax().intValue(), true);
+ }
+ else
+ {
+ slider.setVisible(false);
+ }
+ return new int[]
+ { iVal };
+ }
+ else
+ {
+ fVal = 0f;
+ try
+ {
+ fVal = Float.valueOf(valueField.getText());
+ } catch (Exception e)
+ {
+ }
+ ;
+ if (validator.getMin() != null && validator.getMax() != null)
+ {
+ slider.getModel().setRangeProperties((int) fVal * 1000, 1,
+ (int) validator.getMin().floatValue() * 1000,
+ (int) validator.getMax().floatValue() * 1000, true);
+ }
+ else
+ {
+ slider.setVisible(false);
+ }
+ return new float[]
+ { fVal };
}
}
- return null;
- }
-
- /*
- * (non-Javadoc)
- *
- * @see javax.swing.table.AbstractTableModel#getColumnClass(int)
- */
- @Override
- public Class<?> getColumnClass(int columnIndex)
- {
- switch (columnIndex)
+ else
{
- case 0:
- return String.class;
- case 1:
- return Parameter.class;
+ if (!choice)
+ {
+ slider.setVisible(false);
+ return new String[]
+ { valueField.getText().trim() };
+ }
+ else
+ {
+ return new String[]
+ { (String) choicebox.getSelectedItem() };
+ }
}
- return super.getColumnClass(columnIndex);
+
}
- /*
- * (non-Javadoc)
- *
- * @see javax.swing.table.AbstractTableModel#getColumnName(int)
- */
@Override
- public String getColumnName(int column)
+ public void stateChanged(ChangeEvent e)
{
- return colNames[column];
+ if (!adjusting)
+ {
+ valueField.setText(""
+ + ((integ) ? ("" + (int) slider.getValue())
+ : ("" + (float) (slider.getValue() / 1000f))));
+ }
}
- /*
- * (non-Javadoc)
- *
- * @see javax.swing.table.AbstractTableModel#isCellEditable(int, int)
- */
@Override
- public boolean isCellEditable(int rowIndex, int columnIndex)
+ public void actionPerformed(ActionEvent e)
{
- if (columnIndex == 1)
+ if (choice)
{
- return true;
}
- return false;
+ else if (!adjusting)
+ {
+ updateSliderFromValueField();
+ }
+ argSetModified(true);
}
+
}
- class ArgumentRenderer implements TableCellRenderer
+ Map<String, OptionBox> optSet = new Hashtable<String, OptionBox>();
+
+ public class OptionBox extends JPanel implements ActionListener
{
+ JComboBox val = new JComboBox();
- @Override
- public Component getTableCellRendererComponent(JTable table,
- Object value, boolean isSelected, boolean hasFocus, int row,
- int column)
+ JCheckBox enabled = new JCheckBox();
+
+ Option option;
+
+ public OptionBox(Option opt)
{
- if (value instanceof Option)
+ option = opt;
+ setLayout(new BorderLayout());
+ enabled.setSelected(opt.isRequired());
+ enabled.setFont(new Font("Verdana", Font.PLAIN, 11));
+ enabled.setText(opt.getName());
+ enabled.setToolTipText(opt.getDescription());
+ add(enabled, BorderLayout.NORTH);
+ if (opt.getPossibleValues().size() > 1)
{
- JCheckBox cb = new JCheckBox();
- cb.setSelected(true);
- return cb;
+ setLayout(new GridLayout(1, 2));
+ for (Object str : opt.getPossibleValues())
+ {
+ val.addItem((String) str);
+ }
+ val.setSelectedItem((String) opt.getDefaultValue());
+ val.addActionListener(this);
+ add(val, BorderLayout.SOUTH);
}
- if (value instanceof Boolean)
+ // TODO: add actionListeners for popup (to open further info),
+ // and to update list of parameters if an option is enabled
+ // that takes a value.
+ }
+
+ public Option getOptionIfEnabled()
+ {
+ if (!enabled.isSelected())
{
- JCheckBox cb = new JCheckBox();
- cb.setSelected(((Boolean) value).booleanValue());
- return cb;
+ return null;
}
- if (value instanceof String)
+ try
{
- JLabel lbl = new JLabel();
- lbl.setFont(new Font("Verdana", Font.PLAIN, 11));
- lbl.setText((String) value);
- return lbl;
- }
- if (value instanceof Parameter)
+ if (val.getSelectedItem() != null)
+ {
+ option.setDefaultValue((String) val.getSelectedItem());
+ }
+ } catch (WrongParameterException e)
{
- String val = ((Parameter) value).getDefaultValue();
- ValueConstrain constr = ((Parameter) value).getValidValue();
- JLabel lbl = new JLabel();
- lbl.setFont(new Font("Verdana", Font.PLAIN, 11));
- lbl.setText(val);
- return lbl;
- /*
- * type dependent return value if
- * (constr.getType().equals(Type.Integer))
- *
- * { lbl.setText(val); } if (constr.getType().equals(Type.Float)) { }
- * return lbl;
- */
+ e.printStackTrace();
+ return null;
}
- return null;
+ return option;
+ }
+
+ @Override
+ public void actionPerformed(ActionEvent e)
+ {
+ argSetModified(true);
+ enabled.setSelected(true);
+ }
+ }
+
+ private OptionBox addOption(Option opt)
+ {
+ OptionBox cb = optSet.get(opt.getName());
+ if (cb == null)
+ {
+ cb = new OptionBox(opt);
+ optSet.put(opt.getName(), cb);
+ jobOptions.add(cb);
+ }
+ return cb;
+ }
+
+ protected void refreshParamLayout()
+ {
+ int s=100;
+ for (ParamBox pbox : paramSet.values()){
+ s+=pbox.getBoxHeight();
}
+ paramList.setPreferredSize(new Dimension(PARAM_WIDTH, s));
+ paramList.setLayout(new FlowLayout());
+ validate();
}
/**
}
if (lastserv != null)
{
+ List<Preset> prl = null;
Preset pr = null;
if (++p < args.length)
{
if (pr == null)
{
// just grab the last preset.
- List<Preset> prl = prman.getPresets();
- pr = prl.get(prl.size() - 1);
+ prl = prman.getPresets();
}
}
}
+ Iterator<Preset> en = (prl == null) ? null : prl.iterator();
while (true)
{
+ if (en != null)
+ {
+ if (!en.hasNext())
+ {
+ en = prl.iterator();
+ }
+ pr = en.next();
+ }
WsJobParameters pgui = new WsJobParameters(lastserv, pr);
JFrame jf = new JFrame("Parameters for " + lastserv.getActionText());
JPanel cont = new JPanel();
- cont.setSize(new Dimension(600, 800));
+ jf.setPreferredSize(new Dimension(600, 800));
cont.add(pgui);
jf.add(cont);
final Thread thr = Thread.currentThread();
}
}
}
+
+ public List<Argument> getJobParams()
+ {
+ List<Argument> argSet = new ArrayList<Argument>();
+ // recover options and parameters from GUI
+ for (OptionBox opts : optSet.values())
+ {
+ Option opt = opts.getOptionIfEnabled();
+ if (opt != null)
+ {
+ argSet.add(opt);
+ }
+ }
+ for (ParamBox parambox : paramSet.values())
+ {
+ Parameter parm = parambox.getParameter();
+ if (parm != null)
+ {
+ argSet.add(parm);
+ }
+ }
+
+ return argSet;
+ }
+
+ String lastParmSet = null;
+
+ Hashtable<String, Object[]> editedParams = new Hashtable<String, Object[]>();
+
+ @Override
+ public void itemStateChanged(ItemEvent e)
+ {
+ if (e.getSource() == setName)
+ {
+ String setname = (String) setName.getSelectedItem();
+ if (setname == null)
+ {
+ return;
+ }
+ // if modified - warn user - or at least save current edited set.
+ if (lastParmSet != null)
+ {
+ // save current state
+ Object[] pset;
+ editedParams.put(lastParmSet, pset = new Object[3]);
+ pset[0] = lastParmSet;
+ pset[1] = setDescr.getText();
+ pset[2] = getJobParams();
+ }
+ Object[] pset = editedParams.get(setname);
+ if (pset != null)
+ {
+ setDescr.setText((String) pset[1]);
+ updateTable(null, (List<Argument>) pset[2]);
+ lastParmSet = setname;
+ validate();
+ }
+ else
+ {
+ // must be a default preset from service
+ Preset p = null;
+ try
+ {
+ PresetManager prman = service.getPresets();
+ if (prman!=null)
+ {
+ p = prman.getPresetByName(setname);
+ }
+ } catch (Exception ex)
+ {
+ ex.printStackTrace();
+ }
+ if (p != null)
+ {
+ updateTable(p, null);
+ validate();
+ lastParmSet = setname;
+ }
+ }
+
+ }
+ }
+
+ @Override
+ public void actionPerformed(ActionEvent e)
+ {
+ if (e.getSource() == setName)
+ {
+ // rename any existing records we know about for this set.
+ String newname = (String) setName.getSelectedItem();
+ System.err.println("Command " + newname + " : "
+ + e.getActionCommand());
+ }
+ }
}