summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBernard Normier <bernard@zeroc.com>2005-09-21 22:19:49 +0000
committerBernard Normier <bernard@zeroc.com>2005-09-21 22:19:49 +0000
commitbc07c89bbe7fd2783da0eba80b338c4d259265f8 (patch)
treecdc8e5392ed4f8204ebd92762289366be8099d13
parentRemoved unecessary compiler fix (diff)
downloadice-bc07c89bbe7fd2783da0eba80b338c4d259265f8.tar.bz2
ice-bc07c89bbe7fd2783da0eba80b338c4d259265f8.tar.xz
ice-bc07c89bbe7fd2783da0eba80b338c4d259265f8.zip
Added service instance + ability to sort services
-rwxr-xr-xjava/src/IceGrid/Model.java32
-rwxr-xr-xjava/src/IceGrid/TableDialog.java32
-rwxr-xr-xjava/src/IceGrid/TreeNode/AdapterEditor.java76
-rwxr-xr-xjava/src/IceGrid/TreeNode/Application.java10
-rwxr-xr-xjava/src/IceGrid/TreeNode/CommonBase.java6
-rwxr-xr-xjava/src/IceGrid/TreeNode/CommonBaseI.java6
-rwxr-xr-xjava/src/IceGrid/TreeNode/CommunicatorEditor.java6
-rwxr-xr-xjava/src/IceGrid/TreeNode/Editor.java55
-rwxr-xr-xjava/src/IceGrid/TreeNode/Parent.java116
-rwxr-xr-xjava/src/IceGrid/TreeNode/Service.java52
-rwxr-xr-xjava/src/IceGrid/TreeNode/ServiceEditor.java44
-rwxr-xr-xjava/src/IceGrid/TreeNode/ServiceInstanceEditor.java254
-rwxr-xr-xjava/src/IceGrid/TreeNode/Services.java79
13 files changed, 618 insertions, 150 deletions
diff --git a/java/src/IceGrid/Model.java b/java/src/IceGrid/Model.java
index 3138a7ebbe3..ff0db7c5e75 100755
--- a/java/src/IceGrid/Model.java
+++ b/java/src/IceGrid/Model.java
@@ -48,8 +48,6 @@ import IceGrid.TreeNode.Application;
import IceGrid.TreeNode.CommonBase;
import IceGrid.TreeNode.Root;
-
-
//
// The class that holds all the data and more!
//
@@ -159,6 +157,9 @@ public class Model
add(_delete);
addSeparator();
add(new JToggleButton(_substituteVar));
+ addSeparator();
+ add(_moveUp);
+ add(_moveDown);
}
}
@@ -847,6 +848,31 @@ public class Model
_substituteVar.putValue(Action.SHORT_DESCRIPTION,
"Substitute variables and parameters in servers' properties");
+
+ _moveUp = new AbstractAction("Up")
+ {
+ public void actionPerformed(ActionEvent e)
+ {
+ CommonBase currentNode = (CommonBase)_tree.getLastSelectedPathComponent();
+ if(currentNode != null)
+ {
+ currentNode.moveUp();
+ }
+ }
+ };
+
+ _moveDown = new AbstractAction("Down")
+ {
+ public void actionPerformed(ActionEvent e)
+ {
+ CommonBase currentNode = (CommonBase)_tree.getLastSelectedPathComponent();
+ if(currentNode != null)
+ {
+ currentNode.moveDown();
+ }
+ }
+ };
+
_about = new AbstractAction("About...")
{
public void actionPerformed(ActionEvent e)
@@ -983,4 +1009,6 @@ public class Model
private Action _delete;
private Action _about;
private Action _substituteVar;
+ private Action _moveUp;
+ private Action _moveDown;
}
diff --git a/java/src/IceGrid/TableDialog.java b/java/src/IceGrid/TableDialog.java
index 9b685c18605..570a5650c74 100755
--- a/java/src/IceGrid/TableDialog.java
+++ b/java/src/IceGrid/TableDialog.java
@@ -104,9 +104,11 @@ public class TableDialog extends JDialog
private Action _deleteRow;
}
- public TableDialog(Frame parentFrame, String title, String heading0, String heading1)
+ public TableDialog(Frame parentFrame, String title,
+ String heading0, String heading1, boolean editKeys)
{
super(parentFrame, title, true);
+ _editKeys = editKeys;
setDefaultCloseOperation(JDialog.HIDE_ON_CLOSE);
_columnNames = new java.util.Vector(2);
@@ -114,8 +116,6 @@ public class TableDialog extends JDialog
_columnNames.add(heading1);
_table = new JTable();
- PopupListener popupListener = new PopupListener();
- _table.addMouseListener(popupListener);
Action ok = new AbstractAction("OK")
{
@@ -137,7 +137,12 @@ public class TableDialog extends JDialog
JButton cancelButton = new JButton(cancel);
JScrollPane scrollPane = new JScrollPane(_table);
- scrollPane.addMouseListener(popupListener);
+ if(_editKeys)
+ {
+ PopupListener popupListener = new PopupListener();
+ _table.addMouseListener(popupListener);
+ scrollPane.addMouseListener(popupListener);
+ }
scrollPane.setBorder(Borders.DIALOG_BORDER);
getContentPane().add(scrollPane, BorderLayout.CENTER);
@@ -168,12 +173,26 @@ public class TableDialog extends JDialog
row.add(entry.getValue());
vector.add(row);
}
- if(vector.size() == 0)
+ if(_editKeys && vector.size() == 0)
{
vector.add(new java.util.Vector(2));
}
- _model = new DefaultTableModel(vector, _columnNames);
+ _model = new DefaultTableModel(vector, _columnNames)
+ {
+ public boolean isCellEditable(int row, int column)
+ {
+ if(_editKeys)
+ {
+ return true;
+ }
+ else
+ {
+ return column > 0;
+ }
+ }
+ };
+
_table.setModel(_model);
setLocationRelativeTo(onComponent);
@@ -213,6 +232,7 @@ public class TableDialog extends JDialog
}
}
+ private final boolean _editKeys;
private boolean _cancelled;
private JTable _table;
private DefaultTableModel _model;
diff --git a/java/src/IceGrid/TreeNode/AdapterEditor.java b/java/src/IceGrid/TreeNode/AdapterEditor.java
index 89883f2e683..1de85cb55fa 100755
--- a/java/src/IceGrid/TreeNode/AdapterEditor.java
+++ b/java/src/IceGrid/TreeNode/AdapterEditor.java
@@ -32,8 +32,6 @@ import javax.swing.tree.TreePath;
import com.jgoodies.forms.builder.DefaultFormBuilder;
import com.jgoodies.forms.factories.Borders;
import com.jgoodies.forms.factories.ButtonBarFactory;
-import com.jgoodies.forms.layout.FormLayout;
-import com.jgoodies.forms.util.LayoutStyle;
import IceGrid.AdapterDescriptor;
import IceGrid.Model;
@@ -75,7 +73,7 @@ class AdapterEditor extends Editor
}
if(ra != null)
{
- adapter.getModel().getTree().setSelectionPath
+ adapter.getModel().setSelectionPath
(ra.getPath());
}
}
@@ -91,7 +89,7 @@ class AdapterEditor extends Editor
_objectsDialog = new TableDialog(parentFrame,
"Registered Objects",
"Object Identity",
- "Type");
+ "Type", true);
AbstractAction openObjectsDialog = new AbstractAction("...")
{
@@ -140,48 +138,7 @@ class AdapterEditor extends Editor
idTextField.getDocument().addDocumentListener(_updateListener);
}
-
- JComponent getComponent()
- {
- if(_panel == null)
- {
- //
- // Build everything using JGoodies's DefaultFormBuilder
- //
- FormLayout layout = new FormLayout(
- "right:pref, 3dlu, fill:pref:grow, 3dlu, pref", "");
- DefaultFormBuilder builder = new DefaultFormBuilder(layout);
- builder.setBorder(Borders.DLU2_BORDER);
- builder.setRowGroupingEnabled(true);
-
- builder.setLineGapSize(LayoutStyle.getCurrent().getLinePad());
-
- builder.append("Name" );
- builder.append(_name, 3);
- builder.nextLine();
-
- builder.append("Id", _id );
- builder.append(_idButton);
- builder.nextLine();
-
- builder.append("Endpoints" );
- builder.append(_endpoints, 3);
- builder.nextLine();
-
- builder.append("Registered Objects");
- builder.append(_objects, _objectsButton);
- builder.nextLine();
-
- builder.append("", _registerProcess);
- builder.nextLine();
- builder.append("", _waitForActivation);
- builder.nextLine();
-
- _panel = buildPanel(builder.getPanel());
- }
- return _panel;
- }
-
+
//
// From Editor:
//
@@ -204,6 +161,30 @@ class AdapterEditor extends Editor
return descriptor.name.equals(_name.getText());
}
+ void append(DefaultFormBuilder builder)
+ {
+ builder.append("Name" );
+ builder.append(_name, 3);
+ builder.nextLine();
+
+ builder.append("Id", _id );
+ builder.append(_idButton);
+ builder.nextLine();
+
+ builder.append("Endpoints" );
+ builder.append(_endpoints, 3);
+ builder.nextLine();
+
+ builder.append("Registered Objects");
+ builder.append(_objects, _objectsButton);
+ builder.nextLine();
+
+ builder.append("", _registerProcess);
+ builder.nextLine();
+ builder.append("", _waitForActivation);
+ builder.nextLine();
+ }
+
void postUpdate()
{
//
@@ -213,6 +194,7 @@ class AdapterEditor extends Editor
}
+
void setObjectsField()
{
Adapter adapter = getAdapter();
@@ -378,7 +360,7 @@ class AdapterEditor extends Editor
private java.util.Map _objectsMap;
private TableDialog _objectsDialog;
- private JButton _objectsButton = new JButton("...");
+ private JButton _objectsButton;
private JButton _idButton;
diff --git a/java/src/IceGrid/TreeNode/Application.java b/java/src/IceGrid/TreeNode/Application.java
index 52a55b38a86..ac4e187da38 100755
--- a/java/src/IceGrid/TreeNode/Application.java
+++ b/java/src/IceGrid/TreeNode/Application.java
@@ -311,6 +311,11 @@ public class Application extends EditableParent
return (ServerTemplate)_serverTemplates.findChild(id);
}
+ ServiceTemplate findServiceTemplate(String id)
+ {
+ return (ServiceTemplate)_serviceTemplates.findChild(id);
+ }
+
ReplicatedAdapter findReplicatedAdapter(String id)
{
return (ReplicatedAdapter)_replicatedAdapters.findChild(id);
@@ -338,6 +343,11 @@ public class Application extends EditableParent
{
return _serverTemplates;
}
+
+ ServiceTemplates getServiceTemplates()
+ {
+ return _serviceTemplates;
+ }
ReplicatedAdapters getReplicatedAdapters()
{
diff --git a/java/src/IceGrid/TreeNode/CommonBase.java b/java/src/IceGrid/TreeNode/CommonBase.java
index 90fa92d1e92..ce7f6a80d21 100755
--- a/java/src/IceGrid/TreeNode/CommonBase.java
+++ b/java/src/IceGrid/TreeNode/CommonBase.java
@@ -128,4 +128,10 @@ public interface CommonBase extends TreeCellRenderer
// is not of the proper type
//
void paste(Object descriptor);
+
+ //
+ // Change the sorting order (using no-op)
+ //
+ void moveUp();
+ void moveDown();
}
diff --git a/java/src/IceGrid/TreeNode/CommonBaseI.java b/java/src/IceGrid/TreeNode/CommonBaseI.java
index d5259b72f4c..ce5a99cded6 100755
--- a/java/src/IceGrid/TreeNode/CommonBaseI.java
+++ b/java/src/IceGrid/TreeNode/CommonBaseI.java
@@ -276,6 +276,12 @@ abstract class CommonBaseI implements CommonBase
return _model;
}
+ public void moveUp()
+ {}
+
+ public void moveDown()
+ {}
+
protected TreePath _path;
protected CommonBase _parent;
diff --git a/java/src/IceGrid/TreeNode/CommunicatorEditor.java b/java/src/IceGrid/TreeNode/CommunicatorEditor.java
index 97fd6caeae9..53017d2a94e 100755
--- a/java/src/IceGrid/TreeNode/CommunicatorEditor.java
+++ b/java/src/IceGrid/TreeNode/CommunicatorEditor.java
@@ -42,7 +42,7 @@ abstract class CommunicatorEditor extends Editor
_propertiesDialog = new TableDialog(parentFrame,
"Properties",
"Name",
- "Value");
+ "Value", true);
Action openPropertiesDialog = new AbstractAction("...")
{
@@ -88,7 +88,7 @@ abstract class CommunicatorEditor extends Editor
}
- void add(DefaultFormBuilder builder)
+ void append(DefaultFormBuilder builder)
{
builder.append("Description");
@@ -123,8 +123,6 @@ abstract class CommunicatorEditor extends Editor
_description.setEnabled(isEditable);
}
- protected JPanel _panel;
-
private JTextField _properties = new JTextField(20);
private JTextArea _description = new JTextArea(3, 20);
diff --git a/java/src/IceGrid/TreeNode/Editor.java b/java/src/IceGrid/TreeNode/Editor.java
index 9588c9cb619..e14b8a99e6a 100755
--- a/java/src/IceGrid/TreeNode/Editor.java
+++ b/java/src/IceGrid/TreeNode/Editor.java
@@ -26,6 +26,8 @@ import javax.swing.event.DocumentListener;
import com.jgoodies.forms.builder.DefaultFormBuilder;
import com.jgoodies.forms.factories.Borders;
import com.jgoodies.forms.factories.ButtonBarFactory;
+import com.jgoodies.forms.layout.FormLayout;
+import com.jgoodies.forms.util.LayoutStyle;
import IceGrid.Model;
import IceGrid.PropertyDescriptor;
@@ -37,6 +39,8 @@ abstract class Editor
{
abstract void writeDescriptor();
abstract boolean isSimpleUpdate();
+ abstract void append(DefaultFormBuilder builder);
+
void postUpdate() {}
protected Editor()
@@ -89,24 +93,40 @@ abstract class Editor
_target = target;
}
- protected JPanel buildPanel(JPanel innerPanel)
+ JComponent getComponent()
{
- JScrollPane scrollPane =
- new JScrollPane(innerPanel,
- JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
- JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
-
- scrollPane.setBorder(Borders.DIALOG_BORDER);
+ if(_panel == null)
+ {
+ //
+ // Build everything using JGoodies's DefaultFormBuilder
+ //
+ FormLayout layout = new FormLayout(
+ "right:pref, 3dlu, fill:pref:grow, 3dlu, pref", "");
+
+ DefaultFormBuilder builder = new DefaultFormBuilder(layout);
+ builder.setBorder(Borders.DLU2_BORDER);
+ builder.setRowGroupingEnabled(true);
+ builder.setLineGapSize(LayoutStyle.getCurrent().getLinePad());
+
+ append(builder);
+
+ JScrollPane scrollPane =
+ new JScrollPane(builder.getPanel(),
+ JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
+ JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
+
+ scrollPane.setBorder(Borders.DIALOG_BORDER);
- JPanel outerPanel = new JPanel(new BorderLayout());
- outerPanel.add(scrollPane, BorderLayout.CENTER);
+ _panel = new JPanel(new BorderLayout());
+ _panel.add(scrollPane, BorderLayout.CENTER);
- JComponent buttonBar =
- ButtonBarFactory.buildRightAlignedBar(_applyButton,
- _discardButton);
- buttonBar.setBorder(Borders.DIALOG_BORDER);
- outerPanel.add(buttonBar, BorderLayout.SOUTH);
- return outerPanel;
+ JComponent buttonBar =
+ ButtonBarFactory.buildRightAlignedBar(_applyButton,
+ _discardButton);
+ buttonBar.setBorder(Borders.DIALOG_BORDER);
+ _panel.add(buttonBar, BorderLayout.SOUTH);
+ }
+ return _panel;
}
protected void updated()
@@ -252,8 +272,9 @@ abstract class Editor
protected JButton _applyButton;
protected JButton _discardButton;
protected DocumentListener _updateListener;
-
+
protected CommonBase _target;
+ protected JPanel _panel;
- private boolean _detectUpdates = true;
+ private boolean _detectUpdates = true;
}
diff --git a/java/src/IceGrid/TreeNode/Parent.java b/java/src/IceGrid/TreeNode/Parent.java
index 717ea75f047..aae8fe13399 100755
--- a/java/src/IceGrid/TreeNode/Parent.java
+++ b/java/src/IceGrid/TreeNode/Parent.java
@@ -43,8 +43,11 @@ class Parent extends CommonBaseI
public void setSelectedItem(Object obj)
{
- _selectedItem = obj;
- fireContentsChanged(this, -1, -1);
+ if(obj != _selectedItem)
+ {
+ _selectedItem = obj;
+ fireContentsChanged(this, -1, -1);
+ }
}
private Object _selectedItem;
@@ -154,44 +157,99 @@ class Parent extends CommonBaseI
void addChild(CommonBase child, boolean fireEvent)
throws DuplicateIdException
{
- //
- // Sorted insert
- //
-
- String id = child.getId();
- int i = 0;
- java.util.Iterator p = _children.iterator();
-
- while(p.hasNext())
+ if(_sortChildren)
{
- CommonBase existingChild = (CommonBase)p.next();
- int cmp = id.compareTo(existingChild.getId());
-
- if(cmp == 0)
+ //
+ // Sorted insert
+ //
+ String id = child.getId();
+ int i = 0;
+ java.util.Iterator p = _children.iterator();
+
+ while(p.hasNext())
+ {
+ CommonBase existingChild = (CommonBase)p.next();
+ int cmp = id.compareTo(existingChild.getId());
+
+ if(cmp == 0)
+ {
+ throw new DuplicateIdException(this, id);
+ }
+ if(cmp < 0)
+ {
+ break; // while
+ }
+ i++;
+ }
+
+ if(i < _children.size())
{
- throw new DuplicateIdException(this, id);
+ _children.add(i, child);
}
- if(cmp < 0)
+ else
+ {
+ _children.add(child);
+ }
+ if(fireEvent)
{
- break; // while
+ fireNodeInsertedEvent(this, child, i);
}
- i++;
- }
-
- if(i < _children.size())
- {
- _children.add(i, child);
}
else
{
+ //
+ // Unsorted insert
+ //
+ String id = child.getId();
+ java.util.Iterator p = _children.iterator();
+ while(p.hasNext())
+ {
+ CommonBase existingChild = (CommonBase)p.next();
+ if(id.equals(existingChild.getId()))
+ {
+ throw new DuplicateIdException(this, id);
+ }
+ }
+
_children.add(child);
- }
+ if(fireEvent)
+ {
+ fireNodeInsertedEvent(this, child, _children.size() - 1);
+ }
+ }
+ }
+
+ void moveChild(int index, boolean up, boolean fireEvent)
+ {
+ assert !_sortChildren;
+
+ Object child = _children.remove(index);
+ assert child != null;
+
if(fireEvent)
{
- fireNodeInsertedEvent(this, child, i);
+ fireNodeRemovedEvent(this, child, index);
+ }
+
+ if(up)
+ {
+ _children.add(index - 1, child);
+ if(fireEvent)
+ {
+ fireNodeInsertedEvent(this, child, index - 1);
+ }
+ }
+ else
+ {
+ _children.add(index + 1, child);
+ if(fireEvent)
+ {
+ fireNodeInsertedEvent(this, child, index + 1);
+ }
}
}
+
void removeChild(CommonBase child)
{
if(_children.remove(child))
@@ -514,7 +572,13 @@ class Parent extends CommonBaseI
_children = (java.util.LinkedList)o._children.clone();
}
}
+
+ protected void sortChildren(boolean val)
+ {
+ _sortChildren = val;
+ }
protected java.util.LinkedList _children = new java.util.LinkedList();
private ChildComparator _childComparator = new ChildComparator();
+ private boolean _sortChildren = true;
}
diff --git a/java/src/IceGrid/TreeNode/Service.java b/java/src/IceGrid/TreeNode/Service.java
index fb76c3a2b84..187532df994 100755
--- a/java/src/IceGrid/TreeNode/Service.java
+++ b/java/src/IceGrid/TreeNode/Service.java
@@ -107,19 +107,19 @@ class Service extends Parent
public void displayProperties()
{
- //
- // Temporary
- //
- if(_instanceDescriptor.descriptor == null)
- {
- super.displayProperties();
- return;
- }
-
SimpleInternalFrame propertiesFrame = _model.getPropertiesFrame();
propertiesFrame.setTitle("Properties for " + _id);
- if(_instanceDescriptor.descriptor != null)
+ if(_instanceDescriptor.template.length() > 0)
+ {
+ if(_instanceEditor == null)
+ {
+ _instanceEditor = new ServiceInstanceEditor(_model.getMainFrame());
+ }
+ _instanceEditor.show(this);
+ propertiesFrame.setContent(_instanceEditor.getComponent());
+ }
+ else
{
if(_editor == null)
{
@@ -128,12 +128,6 @@ class Service extends Parent
_editor.show(this);
propertiesFrame.setContent(_editor.getComponent());
}
- else
- {
- //
- // Use instance editor
- //
- }
propertiesFrame.validate();
propertiesFrame.repaint();
}
@@ -163,6 +157,24 @@ class Service extends Parent
}
}
+ public void moveUp()
+ {
+ move(true);
+ }
+
+ public void moveDown()
+ {
+ move(false);
+ }
+
+ private void move(boolean up)
+ {
+ if(!_ephemeral)
+ {
+ ((Services)_parent).move(this, up);
+ }
+ }
+
Service(String name,
String displayString,
ServiceInstanceDescriptor instanceDescriptor,
@@ -220,6 +232,11 @@ class Service extends Parent
return _resolver;
}
+ Utils.Resolver getParentResolver()
+ {
+ return ((Services)_parent).getResolver();
+ }
+
boolean isEditable()
{
return ((Services)_parent).isEditable();
@@ -232,6 +249,7 @@ class Service extends Parent
private ServiceInstanceDescriptor _instanceDescriptor;
private ServiceDescriptor _serviceDescriptor;
+
private String _displayString;
private boolean _ephemeral;
private Utils.Resolver _resolver;
@@ -241,5 +259,5 @@ class Service extends Parent
private PropertiesHolder _propertiesHolder;
static private ServiceEditor _editor;
- // static private ServiceInstanceEditor _instanceEditor;
+ static private ServiceInstanceEditor _instanceEditor;
}
diff --git a/java/src/IceGrid/TreeNode/ServiceEditor.java b/java/src/IceGrid/TreeNode/ServiceEditor.java
index 8d7b6d725d2..7a768ec72e3 100755
--- a/java/src/IceGrid/TreeNode/ServiceEditor.java
+++ b/java/src/IceGrid/TreeNode/ServiceEditor.java
@@ -78,36 +78,20 @@ class ServiceEditor extends CommunicatorEditor
}
}
- JComponent getComponent()
- {
- if(_panel == null)
- {
- //
- // Build everything using JGoodies's DefaultFormBuilder
- //
- FormLayout layout = new FormLayout(
- "right:pref, 3dlu, fill:pref:grow, 3dlu, pref", "");
- DefaultFormBuilder builder = new DefaultFormBuilder(layout);
- builder.setBorder(Borders.DLU2_BORDER);
- builder.setRowGroupingEnabled(true);
- builder.setLineGapSize(LayoutStyle.getCurrent().getLinePad());
-
- builder.append("Name");
- builder.append(_name, 3);
- builder.nextLine();
-
- //
- // Add Communicator fields
- //
- add(builder);
-
- builder.append("Entry");
- builder.append(_entry, 3);
- builder.nextLine();
-
- _panel = buildPanel(builder.getPanel());
- }
- return _panel;
+ void append(DefaultFormBuilder builder)
+ {
+ builder.append("Name");
+ builder.append(_name, 3);
+ builder.nextLine();
+
+ //
+ // Add Communicator fields
+ //
+ super.append(builder);
+
+ builder.append("Entry");
+ builder.append(_entry, 3);
+ builder.nextLine();
}
diff --git a/java/src/IceGrid/TreeNode/ServiceInstanceEditor.java b/java/src/IceGrid/TreeNode/ServiceInstanceEditor.java
new file mode 100755
index 00000000000..4236bd3b1ef
--- /dev/null
+++ b/java/src/IceGrid/TreeNode/ServiceInstanceEditor.java
@@ -0,0 +1,254 @@
+// **********************************************************************
+//
+// 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.TreeNode;
+
+import java.awt.BorderLayout;
+import java.awt.Component;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
+import javax.swing.AbstractAction;
+import javax.swing.Action;
+import javax.swing.JButton;
+import javax.swing.JCheckBox;
+import javax.swing.JComboBox;
+import javax.swing.JComponent;
+import javax.swing.JFrame;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JTextField;
+import javax.swing.JTree;
+
+import javax.swing.event.DocumentListener;
+import javax.swing.event.ListDataEvent;
+import javax.swing.event.ListDataListener;
+
+
+import javax.swing.tree.TreePath;
+
+import com.jgoodies.forms.builder.DefaultFormBuilder;
+import com.jgoodies.forms.factories.Borders;
+import com.jgoodies.forms.factories.ButtonBarFactory;
+import com.jgoodies.forms.layout.FormLayout;
+import com.jgoodies.forms.util.LayoutStyle;
+
+import IceGrid.ServiceInstanceDescriptor;
+import IceGrid.Model;
+import IceGrid.TableDialog;
+import IceGrid.TemplateDescriptor;
+import IceGrid.Utils;
+
+class ServiceInstanceEditor extends Editor
+{
+ ServiceInstanceEditor(JFrame parentFrame)
+ {
+ _parameterValues.setEditable(false);
+
+ //
+ // Template
+ //
+ Action gotoTemplate = new AbstractAction("->")
+ {
+ public void actionPerformed(ActionEvent e)
+ {
+ CommonBase t = (CommonBase)_template.getSelectedItem();
+ if(t != null)
+ {
+ t.getModel().setSelectionPath(t.getPath());
+ }
+ }
+ };
+ gotoTemplate.putValue(Action.SHORT_DESCRIPTION,
+ "Goto this template");
+ _templateButton = new JButton(gotoTemplate);
+
+
+ ListDataListener templateListener = new ListDataListener()
+ {
+ public void contentsChanged(ListDataEvent e)
+ {
+ updated();
+
+ ServiceTemplate t =
+ (ServiceTemplate)_template.getModel().getSelectedItem();
+
+ TemplateDescriptor td = (TemplateDescriptor)t.getDescriptor();
+
+ //
+ // Replace parameters but keep existing values
+ //
+ java.util.TreeMap newMap = new java.util.TreeMap();
+ java.util.Iterator p = td.parameters.iterator();
+ while(p.hasNext())
+ {
+ String name = (String)p.next();
+ newMap.put(name, _parameterValuesMap.get(name));
+ }
+ _parameterValuesMap = newMap;
+ setParameterValuesField();
+ }
+
+ public void intervalAdded(ListDataEvent e)
+ {}
+
+
+ public void intervalRemoved(ListDataEvent e)
+ {}
+ };
+
+ _template.getModel().addListDataListener(templateListener);
+
+ //
+ // Parameter values
+ //
+ _parameterValuesDialog = new TableDialog(parentFrame,
+ "Parameter values",
+ "Name",
+ "Value", false);
+
+ Action openParameterValuesDialog = new AbstractAction("...")
+ {
+ public void actionPerformed(ActionEvent e)
+ {
+ java.util.Map result =
+ _parameterValuesDialog.show(_parameterValuesMap,
+ _panel);
+ if(result != null)
+ {
+ updated();
+ _parameterValuesMap = new java.util.TreeMap(result);
+ setParameterValuesField();
+ }
+ }
+ };
+ _parameterValuesButton = new JButton(openParameterValuesDialog);
+ }
+
+ ServiceInstanceDescriptor getDescriptor()
+ {
+ return (ServiceInstanceDescriptor)_target.getDescriptor();
+ }
+
+ //
+ // From Editor:
+ //
+ void writeDescriptor()
+ {
+ ServiceInstanceDescriptor descriptor = getDescriptor();
+ descriptor.template = ((ServiceTemplate)_template.getSelectedItem()).getId();
+ descriptor.parameterValues = _parameterValuesMap;
+ }
+
+ boolean isSimpleUpdate()
+ {
+ return false;
+ }
+
+ void append(DefaultFormBuilder builder)
+ {
+ builder.append("Template", _template);
+ builder.append(_templateButton);
+ builder.nextLine();
+
+ builder.append("Parameter values", _parameterValues);
+ builder.append(_parameterValuesButton);
+ builder.nextLine();
+
+ builder.appendSeparator();
+ builder.nextLine();
+
+ //
+ // TODO: add service fields (read-only)
+ //
+ }
+
+ void show(Service service)
+ {
+ detectUpdates(false);
+ setTarget(service);
+
+ //
+ // If it's not a template instance, it's shown using
+ // ServiceEditor.show()
+ //
+ assert getDescriptor().template.length() > 0;
+
+
+ ServiceInstanceDescriptor descriptor =
+ (ServiceInstanceDescriptor)service.getDescriptor();
+ Model model = service.getModel();
+
+ Utils.Resolver resolver = model.substitute() ?
+ service.getParentResolver() : null;
+
+ boolean isEditable = service.isEditable() && resolver == null;
+
+ //
+ // Need to make control enabled before changing it
+ //
+ _template.setEnabled(true);
+
+ ServiceTemplates serviceTemplates =
+ service.getApplication().getServiceTemplates();
+ _template.setModel(serviceTemplates.createComboBoxModel());
+
+ ServiceTemplate t = (ServiceTemplate)
+ serviceTemplates.findChild(descriptor.template);
+ assert t != null;
+ _template.setSelectedItem(t);
+
+ _template.setEnabled(isEditable);
+
+ _parameterValuesMap = descriptor.parameterValues;
+ setParameterValuesField();
+ _parameterValues.setEnabled(isEditable);
+
+ //
+ // TODO: sub editor
+ //
+ _applyButton.setEnabled(service.isEphemeral());
+ _discardButton.setEnabled(service.isEphemeral());
+ detectUpdates(true);
+ }
+
+ void setParameterValuesField()
+ {
+ Service service = (Service)_target;
+
+ final Utils.Resolver resolver = service.getModel().substitute() ?
+ service.getParentResolver() : null;
+
+ Ice.StringHolder toolTipHolder = new Ice.StringHolder();
+ Utils.Stringifier stringifier = new Utils.Stringifier()
+ {
+ 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);
+ }
+ };
+
+ _parameterValues.setText(
+ Utils.stringify(_parameterValuesMap.entrySet(), stringifier,
+ ", ", toolTipHolder));
+ _parameterValues.setToolTipText(toolTipHolder.value);
+ }
+
+
+ private JComboBox _template = new JComboBox();
+ private JButton _templateButton;
+ private JTextField _parameterValues = new JTextField(20);
+
+ private java.util.TreeMap _parameterValuesMap;
+ private TableDialog _parameterValuesDialog;
+ private JButton _parameterValuesButton;
+}
diff --git a/java/src/IceGrid/TreeNode/Services.java b/java/src/IceGrid/TreeNode/Services.java
index 2444782eda8..47d717c03a7 100755
--- a/java/src/IceGrid/TreeNode/Services.java
+++ b/java/src/IceGrid/TreeNode/Services.java
@@ -12,6 +12,7 @@ import java.awt.event.ActionEvent;
import javax.swing.AbstractAction;
import javax.swing.Action;
+import javax.swing.JOptionPane;
import javax.swing.JPopupMenu;
import IceGrid.Model;
@@ -111,6 +112,9 @@ class Services extends SimpleContainer
super("Services", application.getModel());
_descriptors = descriptors;
_isEditable = (editable != null);
+ _resolver = resolver;
+
+ sortChildren(false);
java.util.Iterator p = _descriptors.iterator();
while(p.hasNext())
@@ -180,7 +184,7 @@ class Services extends SimpleContainer
}
}
- addChild(new Service(serviceName,
+ addChild(new Service(serviceName,
displayString,
descriptor,
serviceDescriptor,
@@ -216,6 +220,31 @@ class Services extends SimpleContainer
{
descriptor.descriptor.name = name;
}
+ else
+ {
+ //
+ // Make sure descriptor.template points to a real template
+ //
+ if(getApplication().findServiceTemplate(descriptor.template) == null)
+ {
+ CommonBase t = (CommonBase)
+ getApplication().getServiceTemplates().getChildAt(0);
+
+ if(t == null)
+ {
+ JOptionPane.showMessageDialog(
+ _model.getMainFrame(),
+ "You need to create a service template before you can create a service instance.",
+ "No Service Template",
+ JOptionPane.INFORMATION_MESSAGE);
+ return;
+ }
+ else
+ {
+ descriptor.template = t.getId();
+ }
+ }
+ }
Service service = new Service(name, descriptor, _model);
try
@@ -260,6 +289,54 @@ class Services extends SimpleContainer
return _isEditable;
}
+ Utils.Resolver getResolver()
+ {
+ return _resolver;
+ }
+
+ void move(Service service, boolean up)
+ {
+ if(!_isEditable)
+ {
+ return;
+ }
+ //
+ // Note: can't have any ephemeral in the list, since a non-ephemeral
+ // is selected
+ //
+
+ Object descriptor = service.getDescriptor();
+ int index = _descriptors.indexOf(descriptor);
+ assert index != -1;
+ if(up && index == 0 || !up && (index == _descriptors.size() - 1))
+ {
+ return;
+ }
+
+ if(_model.canUpdate())
+ {
+ _model.disableDisplay();
+
+ getEditable().markModified();
+
+ _descriptors.remove(index);
+ if(up)
+ {
+ _descriptors.add(index - 1, descriptor);
+ }
+ else
+ {
+ _descriptors.add(index + 1, descriptor);
+ }
+ moveChild(index, up, true);
+
+ _model.setSelectionPath(service.getPath());
+ _model.enableDisplay();
+ }
+ }
+
+
private final boolean _isEditable;
+ private final Utils.Resolver _resolver;
static private NewPopupMenu _popup;
}