summaryrefslogtreecommitdiff
path: root/java/src
diff options
context:
space:
mode:
authorBernard Normier <bernard@zeroc.com>2005-10-07 20:02:29 +0000
committerBernard Normier <bernard@zeroc.com>2005-10-07 20:02:29 +0000
commit196551d1864fb20da5ecbdda5207e977f34da5c4 (patch)
treeb9b8a8ca53941fe73bbfc5cd52004233b10ae151 /java/src
parentfix for bug 475: IcePack -> IceGrid (diff)
downloadice-196551d1864fb20da5ecbdda5207e977f34da5c4.tar.bz2
ice-196551d1864fb20da5ecbdda5207e977f34da5c4.tar.xz
ice-196551d1864fb20da5ecbdda5207e977f34da5c4.zip
Support for default template parameters
Diffstat (limited to 'java/src')
-rwxr-xr-xjava/src/IceGrid/ParametersDialog.java301
-rwxr-xr-xjava/src/IceGrid/TreeNode/CommonBaseI.java41
-rwxr-xr-xjava/src/IceGrid/TreeNode/Editor.java15
-rwxr-xr-xjava/src/IceGrid/TreeNode/ListElementEditor.java1
-rwxr-xr-xjava/src/IceGrid/TreeNode/Node.java14
-rwxr-xr-xjava/src/IceGrid/TreeNode/Server.java22
-rwxr-xr-xjava/src/IceGrid/TreeNode/ServerInstanceEditor.java57
-rwxr-xr-xjava/src/IceGrid/TreeNode/ServerTemplate.java18
-rwxr-xr-xjava/src/IceGrid/TreeNode/ServerTemplateEditor.java1
-rwxr-xr-xjava/src/IceGrid/TreeNode/ServiceInstanceEditor.java64
-rwxr-xr-xjava/src/IceGrid/TreeNode/ServiceTemplate.java17
-rwxr-xr-xjava/src/IceGrid/TreeNode/ServiceTemplateEditor.java1
-rwxr-xr-xjava/src/IceGrid/TreeNode/Services.java62
-rwxr-xr-xjava/src/IceGrid/TreeNode/TemplateEditor.java136
-rwxr-xr-xjava/src/IceGrid/Utils.java118
15 files changed, 612 insertions, 256 deletions
diff --git a/java/src/IceGrid/ParametersDialog.java b/java/src/IceGrid/ParametersDialog.java
new file mode 100755
index 00000000000..fa699869ccc
--- /dev/null
+++ b/java/src/IceGrid/ParametersDialog.java
@@ -0,0 +1,301 @@
+// **********************************************************************
+//
+// Copyright (c) 2003-2005 ZeroC, Inc. All rights reserved.
+//
+// This copy of Ice is licensed to you under the terms described in the
+// ICE_LICENSE file included in this distribution.
+//
+// **********************************************************************
+package IceGrid;
+
+import java.awt.BorderLayout;
+import java.awt.Dimension;
+import java.awt.Frame;
+
+import java.awt.event.ActionEvent;
+import java.awt.event.MouseAdapter;
+import java.awt.event.MouseEvent;
+
+import javax.swing.AbstractAction;
+import javax.swing.Action;
+import javax.swing.DefaultCellEditor;
+import javax.swing.JButton;
+import javax.swing.JComponent;
+import javax.swing.JComboBox;
+import javax.swing.JDialog;
+import javax.swing.JPanel;
+import javax.swing.JPopupMenu;
+import javax.swing.JScrollPane;
+import javax.swing.JTable;
+import javax.swing.table.DefaultTableModel;
+import javax.swing.table.TableCellEditor;
+import javax.swing.table.TableColumn;
+
+import com.jgoodies.forms.factories.Borders;
+import com.jgoodies.forms.factories.ButtonBarFactory;
+
+//
+// A simple two-column table dialog to edit parameter-with-defaults
+// and parameter-values
+//
+
+public class ParametersDialog extends JDialog
+{
+ class PopupListener extends MouseAdapter
+ {
+ public void mousePressed(MouseEvent e)
+ {
+ maybeShowPopup(e);
+ }
+
+ public void mouseReleased(MouseEvent e)
+ {
+ maybeShowPopup(e);
+ }
+
+ private void maybeShowPopup(MouseEvent e)
+ {
+ if (e.isPopupTrigger())
+ {
+ _popup.show( e.getX(), e.getY());
+ }
+ }
+ }
+
+ class PopupMenu extends JPopupMenu
+ {
+ PopupMenu()
+ {
+ _addRow = new AbstractAction("Add a new parameter")
+ {
+ public void actionPerformed(ActionEvent e)
+ {
+ java.util.Vector newVector = new java.util.Vector(2);
+ newVector.add(null);
+ newVector.add(_nullObject);
+ _model.addRow(newVector);
+ }
+ };
+
+ _deleteRow = new AbstractAction("Delete selected parameter(s)")
+ {
+ public void actionPerformed(ActionEvent e)
+ {
+ for(;;)
+ {
+ int selectedRow = _table.getSelectedRow();
+ if(selectedRow == -1)
+ {
+ break;
+ }
+ else
+ {
+ _model.removeRow(selectedRow);
+ }
+ }
+ }
+ };
+
+ add(_addRow);
+ add(_deleteRow);
+ }
+
+ void show(int x, int y)
+ {
+ _deleteRow.setEnabled(_table.getSelectedRowCount() > 0);
+ show(_table, x, y);
+ }
+
+ private Action _addRow;
+ private Action _deleteRow;
+ }
+
+ public ParametersDialog(Frame parentFrame, String title,
+ String valHeading, boolean editNames,
+ final String nullLabel)
+ {
+ super(parentFrame, title, true);
+ _editNames = editNames;
+ _nullObject = new Object()
+ {
+ public String toString()
+ {
+ return nullLabel;
+ }
+ };
+
+ setDefaultCloseOperation(JDialog.HIDE_ON_CLOSE);
+
+ _columnNames = new java.util.Vector(2);
+ _columnNames.add("Name");
+ _columnNames.add(valHeading);
+
+ _table = new JTable();
+
+ JComboBox comboBox = new JComboBox();
+ comboBox.setEditable(true);
+ comboBox.addItem(_nullObject);
+ _cellEditor = new DefaultCellEditor(comboBox);
+
+ Action ok = new AbstractAction("OK")
+ {
+ public void actionPerformed(ActionEvent e)
+ {
+ _cancelled = false;
+ setVisible(false);
+ }
+ };
+ JButton okButton = new JButton(ok);
+
+ Action cancel = new AbstractAction("Cancel")
+ {
+ public void actionPerformed(ActionEvent e)
+ {
+ setVisible(false);
+ }
+ };
+ JButton cancelButton = new JButton(cancel);
+
+ JScrollPane scrollPane = new JScrollPane(_table);
+ if(_editNames)
+ {
+ PopupListener popupListener = new PopupListener();
+ _table.addMouseListener(popupListener);
+ scrollPane.addMouseListener(popupListener);
+ }
+ scrollPane.setBorder(Borders.DIALOG_BORDER);
+
+ getContentPane().add(scrollPane, BorderLayout.CENTER);
+ JPanel buttonBar = ButtonBarFactory.buildOKCancelBar(okButton, cancelButton);
+ buttonBar.setBorder(Borders.DIALOG_BORDER);
+
+ getContentPane().add(buttonBar, BorderLayout.SOUTH);
+ pack();
+ }
+
+ //
+ // true=ok, false=cancel
+ //
+ public boolean show(java.util.List names,
+ java.util.Map values,
+ JComponent onComponent)
+ {
+ _cancelled = true;
+
+ //
+ // Transform into vector of vectors
+ //
+ java.util.Vector vector = new java.util.Vector(names.size());
+ java.util.Iterator p = names.iterator();
+
+ while(p.hasNext())
+ {
+ java.util.Vector row = new java.util.Vector(2);
+ Object name = p.next();
+ row.add(name);
+ Object val = values.get(name);
+ if(val == null)
+ {
+ row.add(_nullObject);
+ }
+ else
+ {
+ row.add(val);
+ }
+ vector.add(row);
+ }
+
+ if(_editNames && vector.size() == 0)
+ {
+ java.util.Vector newVector = new java.util.Vector(2);
+ newVector.add(null);
+ newVector.add(_nullObject);
+ vector.add(newVector);
+ }
+
+ _model = new DefaultTableModel(vector, _columnNames)
+ {
+ public boolean isCellEditable(int row, int column)
+ {
+ if(_editNames)
+ {
+ return true;
+ }
+ else
+ {
+ return column > 0;
+ }
+ }
+ };
+
+ _table.setModel(_model);
+
+ TableColumn valColumn = _table.getColumnModel().getColumn(1);
+ valColumn.setCellEditor(_cellEditor);
+
+ setLocationRelativeTo(onComponent);
+ setVisible(true);
+
+ if(_cancelled)
+ {
+ return false;
+ }
+ else
+ {
+ if(_table.isEditing())
+ {
+ _table.getCellEditor().stopCellEditing();
+ }
+ vector = _model.getDataVector();
+
+ //
+ // Transform vector into list & map
+ //
+ if(_editNames)
+ {
+ names.clear();
+ }
+ values.clear();
+
+ p = vector.iterator();
+ while(p.hasNext())
+ {
+ java.util.Vector row = (java.util.Vector)p.next();
+
+ //
+ // Eliminate rows with null or empty names
+ //
+ String name = (String)row.elementAt(0);
+ if(name != null && name.length() > 0)
+ {
+ if(_editNames)
+ {
+ names.add(name);
+ }
+ Object val = row.elementAt(1);
+
+ //
+ // Eliminate entries with "default" value
+ //
+ if(val != _nullObject)
+ {
+ values.put(name, val);
+ }
+ }
+ }
+ return true;
+ }
+ }
+
+ private final boolean _editNames;
+ private final Object _nullObject;
+ private boolean _cancelled;
+ private JTable _table;
+ private DefaultTableModel _model;
+ private java.util.Vector _columnNames;
+ private PopupMenu _popup = new PopupMenu();
+ private TableCellEditor _cellEditor;
+}
+
+
+
diff --git a/java/src/IceGrid/TreeNode/CommonBaseI.java b/java/src/IceGrid/TreeNode/CommonBaseI.java
index b149a80129e..f2e3894752b 100755
--- a/java/src/IceGrid/TreeNode/CommonBaseI.java
+++ b/java/src/IceGrid/TreeNode/CommonBaseI.java
@@ -22,8 +22,8 @@ import IceGrid.SimpleInternalFrame;
import com.jgoodies.forms.factories.Borders;
import com.jgoodies.forms.factories.DefaultComponentFactory;
-import IceGrid.TreeModelI;
import IceGrid.Model;
+import IceGrid.Utils;
abstract class CommonBaseI implements CommonBase
{
@@ -309,24 +309,35 @@ abstract class CommonBaseI implements CommonBase
_model.getTreeModel().fireStructureChangedEvent(event);
}
- static String templateLabel(String templateName, java.util.Collection col)
+ static String templateLabel(String templateName,
+ java.util.List parameters,
+ final java.util.Map parameterValues,
+ final java.util.Map parameterDefaults)
{
String result = templateName + "<";
- java.util.Iterator p = col.iterator();
- boolean firstElement = true;
- while(p.hasNext())
- {
- if(firstElement)
- {
- firstElement = false;
- }
- else
+ Utils.Stringifier stringifier = new Utils.Stringifier()
{
- result += ", ";
- }
- result += (String)p.next();
- }
+ public String toString(Object obj)
+ {
+ String name = (String)obj;
+ String val = (String)parameterValues.get(name);
+ if(val == null)
+ {
+ val = (String)parameterDefaults.get(name);
+ }
+ if(val != null)
+ {
+ return val;
+ }
+ else
+ {
+ return "";
+ }
+ }
+ };
+
+ result += Utils.stringify(parameters, stringifier, ", ", null);
result += ">";
return result;
}
diff --git a/java/src/IceGrid/TreeNode/Editor.java b/java/src/IceGrid/TreeNode/Editor.java
index cd121886024..864763b8e11 100755
--- a/java/src/IceGrid/TreeNode/Editor.java
+++ b/java/src/IceGrid/TreeNode/Editor.java
@@ -201,22 +201,21 @@ abstract class Editor
return result;
}
- static java.util.TreeMap makeParameterValues(
+ static java.util.Map makeParameterValues(
java.util.Map oldParameterValues,
java.util.List newParameters)
{
- java.util.TreeMap result = new java.util.TreeMap();
+ java.util.Map result = new java.util.HashMap();
java.util.Iterator p = newParameters.iterator();
while(p.hasNext())
{
- String name = (String)p.next();
- String value = (String)oldParameterValues.get(name);
- if(value == null)
+ Object name = p.next();
+ Object value = oldParameterValues.get(name);
+ if(value != null)
{
- value = "";
- }
- result.put(name, value);
+ result.put(name, value);
+ }
}
return result;
}
diff --git a/java/src/IceGrid/TreeNode/ListElementEditor.java b/java/src/IceGrid/TreeNode/ListElementEditor.java
index 7326531e4d8..184c458caa8 100755
--- a/java/src/IceGrid/TreeNode/ListElementEditor.java
+++ b/java/src/IceGrid/TreeNode/ListElementEditor.java
@@ -99,7 +99,6 @@ abstract class ListElementEditor extends Editor
finally
{
model.enableDisplay();
- model.refreshDisplay();
}
}
}
diff --git a/java/src/IceGrid/TreeNode/Node.java b/java/src/IceGrid/TreeNode/Node.java
index 91e24049450..46ff6a05daf 100755
--- a/java/src/IceGrid/TreeNode/Node.java
+++ b/java/src/IceGrid/TreeNode/Node.java
@@ -86,7 +86,7 @@ class Node extends EditableParent implements InstanceParent
static private class Backup
{
java.util.TreeSet removedElements;
- java.util.TreeMap parameterValues;
+ java.util.Map parameterValues;
}
public Object rebuild(CommonBase child, java.util.List editables)
@@ -188,7 +188,9 @@ class Node extends EditableParent implements InstanceParent
// Build resolver
//
Utils.Resolver instanceResolver =
- new Utils.Resolver(_resolver, instanceDescriptor.parameterValues);
+ new Utils.Resolver(_resolver,
+ instanceDescriptor.parameterValues,
+ templateDescriptor.parameterDefaults);
String serverId = instanceResolver.substitute(serverDescriptor.id);
instanceResolver.put("server", serverId);
@@ -387,7 +389,9 @@ class Node extends EditableParent implements InstanceParent
// Build resolver
//
Utils.Resolver instanceResolver =
- new Utils.Resolver(_resolver, instanceDescriptor.parameterValues);
+ new Utils.Resolver(_resolver,
+ instanceDescriptor.parameterValues,
+ templateDescriptor.parameterDefaults);
String serverId = instanceResolver.substitute(serverDescriptor.id);
instanceResolver.put("server", serverId);
@@ -593,7 +597,9 @@ class Node extends EditableParent implements InstanceParent
// Build resolver
//
Utils.Resolver instanceResolver =
- new Utils.Resolver(_resolver, instanceDescriptor.parameterValues);
+ new Utils.Resolver(_resolver,
+ instanceDescriptor.parameterValues,
+ templateDescriptor.parameterDefaults);
String serverId = instanceResolver.substitute(serverDescriptor.id);
instanceResolver.put("server", serverId);
diff --git a/java/src/IceGrid/TreeNode/Server.java b/java/src/IceGrid/TreeNode/Server.java
index 088551d1f34..15a6baab86c 100755
--- a/java/src/IceGrid/TreeNode/Server.java
+++ b/java/src/IceGrid/TreeNode/Server.java
@@ -242,6 +242,12 @@ class Server extends EditableParent
{
_model.getStatusBar().setText("Starting server '" + _id + "'... failed!");
}
+
+ //
+ // Recompute actions in case this comes from popup menu
+ //
+ _model.showActions(_model.getSelectedNode());
+
}
public void stop()
{
@@ -265,12 +271,25 @@ class Server extends EditableParent
+ e.toString());
}
_model.getStatusBar().setText("Stopping server '" + _id + "'... done.");
+
+ //
+ // Recompute actions in case this comes from popup menu
+ //
+ _model.showActions(_model.getSelectedNode());
}
public void enable()
{
+ //
+ // Recompute actions in case this comes from popup menu
+ //
+ _model.showActions(_model.getSelectedNode());
}
public void disable()
{
+ //
+ // Recompute actions in case this comes from popup menu
+ //
+ _model.showActions(_model.getSelectedNode());
}
public void displayProperties()
@@ -563,8 +582,7 @@ class Server extends EditableParent
}
else
{
- return _id + ": " + templateLabel(_instanceDescriptor.template,
- _resolver.getParameters().values());
+ return _id + ": " + _instanceDescriptor.template + "<>";
}
}
diff --git a/java/src/IceGrid/TreeNode/ServerInstanceEditor.java b/java/src/IceGrid/TreeNode/ServerInstanceEditor.java
index d28c1a8673a..4f491f15c14 100755
--- a/java/src/IceGrid/TreeNode/ServerInstanceEditor.java
+++ b/java/src/IceGrid/TreeNode/ServerInstanceEditor.java
@@ -23,8 +23,8 @@ import javax.swing.event.ListDataListener;
import com.jgoodies.forms.builder.DefaultFormBuilder;
import IceGrid.Model;
+import IceGrid.ParametersDialog;
import IceGrid.ServerInstanceDescriptor;
-import IceGrid.TableDialog;
import IceGrid.TemplateDescriptor;
import IceGrid.Utils;
@@ -61,22 +61,18 @@ class ServerInstanceEditor extends Editor
//
// Parameter values
//
- _parameterValuesDialog = new TableDialog(parentFrame,
- "Parameter values",
- "Name",
- "Value", false);
+ _parametersDialog = new ParametersDialog(parentFrame,
+ "Parameter values",
+ "Value", false, "Use default");
- Action openParameterValuesDialog = new AbstractAction("...")
+ Action openParametersDialog = new AbstractAction("...")
{
public void actionPerformed(ActionEvent e)
{
- java.util.Map result =
- _parameterValuesDialog.show(_parameterValuesMap,
- _panel);
- if(result != null)
+ if(_parametersDialog.show(_parameterList, _parameterValuesMap,
+ _panel))
{
updated();
- _parameterValuesMap = new java.util.TreeMap(result);
setParameterValuesField();
//
// No need to redisplay details: since it's editable,
@@ -85,7 +81,7 @@ class ServerInstanceEditor extends Editor
}
}
};
- _parameterValuesButton = new JButton(openParameterValuesDialog);
+ _parametersButton = new JButton(openParametersDialog);
}
ServerInstanceDescriptor getDescriptor()
@@ -129,7 +125,7 @@ class ServerInstanceEditor extends Editor
builder.nextLine();
builder.append("Parameter values", _parameterValues);
- builder.append(_parameterValuesButton);
+ builder.append(_parametersButton);
builder.nextLine();
builder.appendSeparator();
@@ -183,7 +179,9 @@ class ServerInstanceEditor extends Editor
//
// Replace parameters but keep existing values
//
- _parameterValuesMap = makeParameterValues(_parameterValuesMap, td.parameters);
+ _parameterList = td.parameters;
+ _parameterValuesMap = makeParameterValues(_parameterValuesMap,
+ _parameterList);
setParameterValuesField();
//
@@ -202,9 +200,10 @@ class ServerInstanceEditor extends Editor
_template.getModel().addListDataListener(templateListener);
_template.setEnabled(isEditable);
- _parameterValuesMap = descriptor.parameterValues;
+ _parameterList = ((TemplateDescriptor)t.getDescriptor()).parameters;
+ _parameterValuesMap = new java.util.HashMap(descriptor.parameterValues);
setParameterValuesField();
- _parameterValuesButton.setEnabled(isEditable);
+ _parametersButton.setEnabled(isEditable);
_subEditor.show(false);
@@ -225,17 +224,21 @@ class ServerInstanceEditor extends Editor
{
public String toString(Object obj)
{
- java.util.Map.Entry entry = (java.util.Map.Entry)obj;
-
- return Utils.substitute((String)entry.getKey(), resolver)
- + "="
- + Utils.substitute((String)entry.getValue(), resolver);
+ String name = (String)obj;
+ String val = (String)_parameterValuesMap.get(name);
+ if(val != null)
+ {
+ return name + "=" + Utils.substitute(val, resolver);
+ }
+ else
+ {
+ return null;
+ }
}
};
_parameterValues.setText(
- Utils.stringify(_parameterValuesMap.entrySet(), stringifier,
- ", ", toolTipHolder));
+ Utils.stringify(_parameterList, stringifier, ", ", toolTipHolder));
_parameterValues.setToolTipText(toolTipHolder.value);
}
@@ -245,7 +248,9 @@ class ServerInstanceEditor extends Editor
private JButton _templateButton;
private JTextField _parameterValues = new JTextField(20);
- private java.util.TreeMap _parameterValuesMap;
- private TableDialog _parameterValuesDialog;
- private JButton _parameterValuesButton;
+ private java.util.List _parameterList;
+ private java.util.Map _parameterValuesMap;
+
+ private ParametersDialog _parametersDialog;
+ private JButton _parametersButton;
}
diff --git a/java/src/IceGrid/TreeNode/ServerTemplate.java b/java/src/IceGrid/TreeNode/ServerTemplate.java
index 84da8170682..c517d1fbfd7 100755
--- a/java/src/IceGrid/TreeNode/ServerTemplate.java
+++ b/java/src/IceGrid/TreeNode/ServerTemplate.java
@@ -143,24 +143,11 @@ class ServerTemplate extends EditableParent
return _propertiesHolder;
}
- public String toString()
- {
- if(_ephemeral)
- {
- return super.toString();
- }
- else
- {
- return templateLabel(_id, _templateDescriptor.parameters);
- }
- }
-
public Object getDescriptor()
{
return _templateDescriptor;
}
-
public Object saveDescriptor()
{
//
@@ -244,11 +231,6 @@ class ServerTemplate extends EditableParent
_propertiesHolder = new PropertiesHolder(_templateDescriptor.descriptor);
clearChildren();
- //
- // Fix-up parameters order
- //
- java.util.Collections.sort(_templateDescriptor.parameters);
-
if(_ephemeral)
{
_adapters = null;
diff --git a/java/src/IceGrid/TreeNode/ServerTemplateEditor.java b/java/src/IceGrid/TreeNode/ServerTemplateEditor.java
index c47b87e8d6d..c6296e2217d 100755
--- a/java/src/IceGrid/TreeNode/ServerTemplateEditor.java
+++ b/java/src/IceGrid/TreeNode/ServerTemplateEditor.java
@@ -16,6 +16,7 @@ class ServerTemplateEditor extends TemplateEditor
{
ServerTemplateEditor(JFrame parentFrame)
{
+ super(parentFrame);
_subEditor = new ServerSubEditor(this, parentFrame);
}
diff --git a/java/src/IceGrid/TreeNode/ServiceInstanceEditor.java b/java/src/IceGrid/TreeNode/ServiceInstanceEditor.java
index 6a182e2ac01..536d77fddcf 100755
--- a/java/src/IceGrid/TreeNode/ServiceInstanceEditor.java
+++ b/java/src/IceGrid/TreeNode/ServiceInstanceEditor.java
@@ -24,7 +24,7 @@ import com.jgoodies.forms.builder.DefaultFormBuilder;
import IceGrid.Model;
import IceGrid.ServiceInstanceDescriptor;
-import IceGrid.TableDialog;
+import IceGrid.ParametersDialog;
import IceGrid.TemplateDescriptor;
import IceGrid.Utils;
@@ -57,31 +57,27 @@ class ServiceInstanceEditor extends ListElementEditor
//
// Parameter values
//
- _parameterValuesDialog = new TableDialog(parentFrame,
- "Parameter values",
- "Name",
- "Value", false);
+ _parametersDialog = new ParametersDialog(parentFrame,
+ "Parameter values",
+ "Value", false, "Use default");
- Action openParameterValuesDialog = new AbstractAction("...")
+ Action openParametersDialog = new AbstractAction("...")
{
public void actionPerformed(ActionEvent e)
{
- java.util.Map result =
- _parameterValuesDialog.show(_parameterValuesMap,
- _panel);
- if(result != null)
+ if(_parametersDialog.show(_parameterList, _parameterValuesMap,
+ _panel))
{
updated();
- _parameterValuesMap = new java.util.TreeMap(result);
setParameterValuesField();
//
// No need to redisplay details: since it's editable,
- // we're not subsituting variables or parameters
+ // we're not substituting variables or parameters
//
}
}
};
- _parameterValuesButton = new JButton(openParameterValuesDialog);
+ _parametersButton = new JButton(openParametersDialog);
}
ServiceInstanceDescriptor getDescriptor()
@@ -124,7 +120,7 @@ class ServiceInstanceEditor extends ListElementEditor
builder.nextLine();
builder.append("Parameter values", _parameterValues);
- builder.append(_parameterValuesButton);
+ builder.append(_parametersButton);
builder.nextLine();
builder.appendSeparator();
@@ -186,7 +182,9 @@ class ServiceInstanceEditor extends ListElementEditor
//
// Replace parameters but keep existing values
//
- _parameterValuesMap = makeParameterValues(_parameterValuesMap, td.parameters);
+ _parameterList = td.parameters;
+ _parameterValuesMap = makeParameterValues(_parameterValuesMap,
+ _parameterList);
setParameterValuesField();
//
@@ -205,9 +203,13 @@ class ServiceInstanceEditor extends ListElementEditor
_template.getModel().addListDataListener(templateListener);
_template.setEnabled(isEditable);
- _parameterValuesMap = descriptor.parameterValues;
+ //
+ // The _parameterList is read-only
+ //
+ _parameterList = ((TemplateDescriptor)t.getDescriptor()).parameters;
+ _parameterValuesMap = new java.util.HashMap(descriptor.parameterValues);
setParameterValuesField();
- _parameterValuesButton.setEnabled(isEditable);
+ _parametersButton.setEnabled(isEditable);
_subEditor.show(false);
@@ -216,7 +218,7 @@ class ServiceInstanceEditor extends ListElementEditor
detectUpdates(true);
}
- void setParameterValuesField()
+ private void setParameterValuesField()
{
Service service = (Service)_target;
@@ -228,17 +230,21 @@ class ServiceInstanceEditor extends ListElementEditor
{
public String toString(Object obj)
{
- java.util.Map.Entry entry = (java.util.Map.Entry)obj;
-
- return Utils.substitute((String)entry.getKey(), resolver)
- + "="
- + Utils.substitute((String)entry.getValue(), resolver);
+ String name = (String)obj;
+ String val = (String)_parameterValuesMap.get(name);
+ if(val != null)
+ {
+ return name + "=" + Utils.substitute(val, resolver);
+ }
+ else
+ {
+ return null;
+ }
}
};
_parameterValues.setText(
- Utils.stringify(_parameterValuesMap.entrySet(), stringifier,
- ", ", toolTipHolder));
+ Utils.stringify(_parameterList, stringifier, ", ", toolTipHolder));
_parameterValues.setToolTipText(toolTipHolder.value);
}
@@ -248,7 +254,9 @@ class ServiceInstanceEditor extends ListElementEditor
private JButton _templateButton;
private JTextField _parameterValues = new JTextField(20);
- private java.util.TreeMap _parameterValuesMap;
- private TableDialog _parameterValuesDialog;
- private JButton _parameterValuesButton;
+ private java.util.List _parameterList;
+ private java.util.Map _parameterValuesMap;
+
+ private ParametersDialog _parametersDialog;
+ private JButton _parametersButton;
}
diff --git a/java/src/IceGrid/TreeNode/ServiceTemplate.java b/java/src/IceGrid/TreeNode/ServiceTemplate.java
index fce40111eca..826af93a9e4 100755
--- a/java/src/IceGrid/TreeNode/ServiceTemplate.java
+++ b/java/src/IceGrid/TreeNode/ServiceTemplate.java
@@ -109,11 +109,6 @@ class ServiceTemplate extends EditableParent
{
_templateDescriptor = descriptor;
_propertiesHolder = new PropertiesHolder(_templateDescriptor.descriptor);
-
- //
- // Fix-up parameters order
- //
- java.util.Collections.sort(_templateDescriptor.parameters);
clearChildren();
if(_ephemeral)
@@ -138,18 +133,6 @@ class ServiceTemplate extends EditableParent
return _propertiesHolder;
}
- public String toString()
- {
- if(_ephemeral)
- {
- return "*" + _id;
- }
- else
- {
- return templateLabel(_id, _templateDescriptor.parameters);
- }
- }
-
public Object getDescriptor()
{
return _templateDescriptor;
diff --git a/java/src/IceGrid/TreeNode/ServiceTemplateEditor.java b/java/src/IceGrid/TreeNode/ServiceTemplateEditor.java
index b423e0b8399..4215c3206a6 100755
--- a/java/src/IceGrid/TreeNode/ServiceTemplateEditor.java
+++ b/java/src/IceGrid/TreeNode/ServiceTemplateEditor.java
@@ -16,6 +16,7 @@ class ServiceTemplateEditor extends TemplateEditor
{
ServiceTemplateEditor(JFrame parentFrame)
{
+ super(parentFrame);
_subEditor = new ServiceSubEditor(this, parentFrame);
}
diff --git a/java/src/IceGrid/TreeNode/Services.java b/java/src/IceGrid/TreeNode/Services.java
index 0eae3774b6e..9e5d22f6cdc 100755
--- a/java/src/IceGrid/TreeNode/Services.java
+++ b/java/src/IceGrid/TreeNode/Services.java
@@ -94,7 +94,6 @@ class Services extends ListParent implements InstanceParent
newService(descriptor);
}
-
private Service createService(ServiceInstanceDescriptor descriptor,
Application application) throws UpdateFailedException
@@ -116,12 +115,12 @@ class Services extends ListParent implements InstanceParent
if(_resolver != null)
{
- serviceResolver = new Utils.Resolver(_resolver, descriptor.parameterValues);
+ serviceResolver = new Utils.Resolver(_resolver,
+ descriptor.parameterValues,
+ templateDescriptor.parameterDefaults);
serviceName = serviceResolver.substitute(serviceDescriptor.name);
serviceResolver.put("service", serviceName);
- displayString = serviceName + ": "
- + templateLabel(descriptor.template,
- serviceResolver.getParameters().values());
+ displayString = serviceName + ": " + descriptor.template + "<>";
}
else
{
@@ -129,8 +128,10 @@ class Services extends ListParent implements InstanceParent
// serviceName = TemplateName<unsubstituted param 1, ....>
//
serviceName = templateLabel(descriptor.template,
- descriptor.parameterValues.values());
-
+ templateDescriptor.parameters,
+ descriptor.parameterValues,
+ templateDescriptor.parameterDefaults);
+
}
}
else
@@ -267,10 +268,26 @@ class Services extends ListParent implements InstanceParent
ServiceDescriptor serviceDescriptor = (ServiceDescriptor)templateDescriptor.descriptor;
assert serviceDescriptor != null;
- Utils.Resolver serviceResolver = _resolver == null ? null :
- new Utils.Resolver(_resolver, descriptor.parameterValues);
-
- newName = Utils.substitute(serviceDescriptor.name, serviceResolver);
+
+ if(_resolver != null)
+ {
+ Utils.Resolver serviceResolver =
+ new Utils.Resolver(_resolver,
+ descriptor.parameterValues,
+ templateDescriptor.parameterDefaults);
+ newName = serviceResolver.substitute(serviceDescriptor.name);
+ }
+ else
+ {
+ //
+ // newName = TemplateName<unsubstituted param 1, ....>
+ //
+ newName = templateLabel(descriptor.template,
+ templateDescriptor.parameters,
+ descriptor.parameterValues,
+ templateDescriptor.parameterDefaults);
+
+ }
}
else
{
@@ -403,8 +420,7 @@ class Services extends ListParent implements InstanceParent
int index = _descriptors.indexOf(service.getDescriptor());
if(_model.canUpdate())
- {
- _model.disableDisplay();
+ {
getEditable().markModified();
Object descriptor = _descriptors.remove(index);
@@ -435,16 +451,12 @@ class Services extends ListParent implements InstanceParent
//
server.getServices().moveChild(index, up, true);
}
- }
-
- _model.setSelectionPath(service.getPath());
- _model.enableDisplay();
-
- //
- // Recompute actions
- //
- _model.showActions();
- }
+ }
+ }
+ //
+ // Recompute actions
+ //
+ _model.showActions(_model.getSelectedNode());
}
@@ -460,7 +472,7 @@ class Services extends ListParent implements InstanceParent
removeChild(child, true);
ServiceInstanceDescriptor descriptor = (ServiceInstanceDescriptor)child.getDescriptor();
- java.util.TreeMap savedParameterValues = null;
+ java.util.Map savedParameterValues = null;
if(descriptor.template.length() > 0)
{
@@ -502,7 +514,7 @@ class Services extends ListParent implements InstanceParent
public void restore(CommonBase child, Object backup)
{
- java.util.TreeMap savedParameterValues = (java.util.TreeMap)backup;
+ java.util.Map savedParameterValues = (java.util.Map)backup;
ServiceInstanceDescriptor descriptor =
(ServiceInstanceDescriptor)child.getDescriptor();
diff --git a/java/src/IceGrid/TreeNode/TemplateEditor.java b/java/src/IceGrid/TreeNode/TemplateEditor.java
index 60e52d82738..fa883acb9b8 100755
--- a/java/src/IceGrid/TreeNode/TemplateEditor.java
+++ b/java/src/IceGrid/TreeNode/TemplateEditor.java
@@ -8,56 +8,55 @@
// **********************************************************************
package IceGrid.TreeNode;
+import java.awt.event.ActionEvent;
+
+import javax.swing.AbstractAction;
+import javax.swing.Action;
+import javax.swing.JButton;
+import javax.swing.JFrame;
import javax.swing.JTextField;
-import javax.swing.text.*;
+
import java.util.regex.Pattern;
import com.jgoodies.forms.builder.DefaultFormBuilder;
import IceGrid.Model;
+import IceGrid.ParametersDialog;
import IceGrid.TemplateDescriptor;
import IceGrid.Utils;
class TemplateEditor extends Editor
{
- static class ParametersFilter extends DocumentFilter
- {
- public void insertString(DocumentFilter.FilterBypass fb,
- int offset,
- String string,
- AttributeSet attr)
- throws BadLocationException
- {
- if(_pattern.matcher(string).matches())
- {
- super.insertString(fb, offset, string, attr);
- }
- }
-
- public void replace(DocumentFilter.FilterBypass fb,
- int offset,
- int length,
- String text,
- AttributeSet attrs)
- throws BadLocationException
- {
- if(_pattern.matcher(text).matches())
- {
- super.replace(fb, offset, length, text, attrs);
- }
- }
-
- private Pattern _pattern = Pattern.compile("[\\w\\s]*");
- }
-
- TemplateEditor()
+ TemplateEditor(JFrame parentFrame)
{
_template.getDocument().addDocumentListener(_updateListener);
- _parameters.getDocument().addDocumentListener(_updateListener);
+ _parameters.setEditable(false);
+
+ //
+ // Parameters
+ //
+ _parametersDialog = new ParametersDialog(parentFrame,
+ "Parameters",
+ "Default value", true, "No default");
- AbstractDocument doc = (AbstractDocument)_parameters.getDocument();
- doc.setDocumentFilter(_parametersFilter);
+ Action openParametersDialog = new AbstractAction("...")
+ {
+ public void actionPerformed(ActionEvent e)
+ {
+ if(_parametersDialog.show(_parameterList, _parameterValuesMap,
+ _panel))
+ {
+ updated();
+ setParametersField();
+ //
+ // No need to redisplay details: since it's editable,
+ // we're not substituting variables or parameters
+ //
+ }
+ }
+ };
+ _parametersButton = new JButton(openParametersDialog);
}
TemplateDescriptor getDescriptor()
@@ -73,13 +72,15 @@ class TemplateEditor extends Editor
void writeDescriptor()
{
TemplateDescriptor descriptor = getDescriptor();
- descriptor.parameters = stringToParameters(_parameters.getText());
+ descriptor.parameters = _parameterList;
+ descriptor.parameterDefaults = _parameterValuesMap;
}
boolean isSimpleUpdate()
{
TemplateDescriptor descriptor = getDescriptor();
- return _parameters.getText().equals(parametersToString(descriptor.parameters));
+ return descriptor.parameters.equals(_parameterList)
+ && descriptor.parameterDefaults.equals(_parameterValuesMap);
}
void append(DefaultFormBuilder builder)
@@ -88,8 +89,8 @@ class TemplateEditor extends Editor
builder.append(_template, 3);
builder.nextLine();
- builder.append("Parameters");
- builder.append(_parameters, 3);
+ builder.append("Parameters", _parameters);
+ builder.append(_parametersButton);
builder.nextLine();
builder.appendSeparator();
@@ -101,7 +102,10 @@ class TemplateEditor extends Editor
TemplateDescriptor descriptor = getDescriptor();
_template.setText(_target.getId());
_template.setEditable(_target.isEphemeral());
- _parameters.setText(parametersToString(descriptor.parameters));
+
+ _parameterList = new java.util.LinkedList(descriptor.parameters);
+ _parameterValuesMap = new java.util.HashMap(descriptor.parameterDefaults);
+ setParametersField();
}
protected void applyUpdate()
@@ -182,33 +186,37 @@ class TemplateEditor extends Editor
}
}
- static private java.util.LinkedList stringToParameters(String s)
- {
- java.util.List params = java.util.Arrays.asList(s.split("\\s+"));
- java.util.Collections.sort(params);
- return new java.util.LinkedList(params);
- }
-
- static private String parametersToString(java.util.List list)
- {
- String result = "";
- java.util.Iterator p = list.iterator();
- while(p.hasNext())
- {
- if(result.equals(""))
- {
- result = (String)p.next();
- }
- else
+ private void setParametersField()
+ {
+ Ice.StringHolder toolTipHolder = new Ice.StringHolder();
+ Utils.Stringifier stringifier = new Utils.Stringifier()
{
- result = result + " " + (String)p.next();
- }
- }
- return result;
-
+ public String toString(Object obj)
+ {
+ String name = (String)obj;
+ String val = (String)_parameterValuesMap.get(name);
+ if(val != null)
+ {
+ return name + "=" + val;
+ }
+ else
+ {
+ return name;
+ }
+ }
+ };
+
+ _parameters.setText(
+ Utils.stringify(_parameterList, stringifier, ", ", toolTipHolder));
+ _parameters.setToolTipText(toolTipHolder.value);
}
private JTextField _template = new JTextField(20);
private JTextField _parameters = new JTextField(20);
- private DocumentFilter _parametersFilter = new ParametersFilter();
+
+ private java.util.LinkedList _parameterList;
+ private java.util.Map _parameterValuesMap;
+
+ private ParametersDialog _parametersDialog;
+ private JButton _parametersButton;
}
diff --git a/java/src/IceGrid/Utils.java b/java/src/IceGrid/Utils.java
index 22b51ccd31d..694c6c1128e 100755
--- a/java/src/IceGrid/Utils.java
+++ b/java/src/IceGrid/Utils.java
@@ -33,25 +33,44 @@ public class Utils
Ice.StringHolder toolTipHolder)
{
String result = "";
- toolTipHolder.value = null;
+ if(toolTipHolder != null)
+ {
+ toolTipHolder.value = null;
+ }
+
java.util.Iterator p = col.iterator();
+ boolean firstElement = true;
while(p.hasNext())
{
- if(result.length() > 0)
- {
- result += separator;
- toolTipHolder.value += "<br>";
- }
- else
+ String elt = stringifier.toString(p.next());
+ if(elt != null)
{
- toolTipHolder.value = "<html>";
+ if(firstElement)
+ {
+ firstElement = false;
+ if(toolTipHolder != null)
+ {
+ toolTipHolder.value = "<html>";
+ }
+ }
+ else
+ {
+ result += separator;
+ if(toolTipHolder != null)
+ {
+ toolTipHolder.value += "<br>";
+ }
+ }
+
+ result += elt;
+ if(toolTipHolder != null)
+ {
+ toolTipHolder.value += elt;
+ }
}
- String elt = stringifier.toString(p.next());
- result += elt;
- toolTipHolder.value += elt;
}
- if(toolTipHolder.value != null)
+ if(toolTipHolder != null && toolTipHolder.value != null)
{
toolTipHolder.value += "</html>";
}
@@ -240,20 +259,26 @@ public class Utils
//
public Resolver(java.util.Map[] variables)
{
- this(variables, null, null);
+ _variables = variables;
+ _resolvedVariableCache = new java.util.HashMap();
+ _parameters = null;
+ _subResolver = this;
}
//
// Resolver for instance; parameters is not yet substituted
//
- public Resolver(Resolver parent, java.util.TreeMap parameters)
+ public Resolver(Resolver parent, java.util.Map parameters,
+ java.util.Map defaults)
{
- java.util.TreeMap substitutedParameters =
- parent.substituteParameterValues(parameters);
+ java.util.Map substitutedParameters =
+ parent.substituteParameterValues(parameters, defaults);
_variables = parent._variables;
- _resolvedVariableCache = (java.util.HashMap)parent._resolvedVariableCache.clone();
+ _resolvedVariableCache =
+ new java.util.HashMap(parent._resolvedVariableCache);
_parameters = substitutedParameters;
+ _subResolver = new Resolver(_variables, _resolvedVariableCache);
}
//
@@ -262,39 +287,26 @@ public class Utils
public Resolver(Resolver parent)
{
_variables = parent._variables;
- _resolvedVariableCache = (java.util.HashMap)parent._resolvedVariableCache.clone();
- if(parent._parameters == null)
+ _resolvedVariableCache =
+ new java.util.HashMap(parent._resolvedVariableCache);
+ _parameters = parent._parameters;
+ if(_parameters == null)
{
- _parameters = null;
+ _subResolver = this;
}
else
{
- _parameters = (java.util.TreeMap)parent._parameters.clone();
+ _subResolver = new Resolver(_variables, _resolvedVariableCache);
}
}
- private Resolver(java.util.Map[] variables, // ordered read-only variable maps
- java.util.HashMap resolvedVariableCache, // null or read-write
- java.util.TreeMap parameters) // null or read-only
+ private Resolver(java.util.Map[] variables,
+ java.util.Map resolvedVariableCache)
{
_variables = variables;
_resolvedVariableCache = resolvedVariableCache;
- _parameters = parameters;
-
- assert _variables != null;
-
- if(_resolvedVariableCache == null)
- {
- _resolvedVariableCache = new java.util.HashMap();
- }
- if(_parameters == null)
- {
- _subResolver = this;
- }
- else
- {
- _subResolver = new Resolver(_variables, _resolvedVariableCache, null);
- }
+ _parameters = null;
+ _subResolver = this;
}
public String find(String name)
@@ -326,10 +338,10 @@ public class Utils
if(obj != null)
{
//
- // If I lookup up myself, I am in trouble!
+ // If I lookup myself, replace xxx${myself}xxx by xxx<error msg>xxx
//
_resolvedVariableCache.put(name, _recursiveDefError);
- String result = Utils.substitute((String)obj, _subResolver);
+ String result = _subResolver.substitute((String)obj);
_resolvedVariableCache.put(name, result);
return result;
}
@@ -417,21 +429,31 @@ public class Utils
//
// Substitute all the values from the input map
//
- public java.util.TreeMap substituteParameterValues(java.util.TreeMap input)
+ public java.util.Map substituteParameterValues(java.util.Map input,
+ java.util.Map defaults)
{
- java.util.TreeMap result = (java.util.TreeMap)input.clone();
- java.util.Iterator p = result.entrySet().iterator();
+ java.util.Map result = new java.util.HashMap();
+ java.util.Iterator p = input.entrySet().iterator();
while(p.hasNext())
{
java.util.Map.Entry entry = (java.util.Map.Entry)p.next();
- entry.setValue(substitute((String)entry.getValue()));
+ result.put(entry.getKey(), substitute((String)entry.getValue()));
+ }
+ p = defaults.entrySet().iterator();
+ while(p.hasNext())
+ {
+ java.util.Map.Entry entry = (java.util.Map.Entry)p.next();
+ if(result.get(entry.getKey()) == null)
+ {
+ result.put(entry.getKey(), substitute((String)entry.getValue()));
+ }
}
return result;
}
private java.util.Map[] _variables;
- private java.util.HashMap _resolvedVariableCache;
- private java.util.TreeMap _parameters;
+ private java.util.Map _resolvedVariableCache;
+ private java.util.Map _parameters;
private Resolver _subResolver;
static private String _recursiveDefError = "<recursive def error>";
}