diff options
author | Bernard Normier <bernard@zeroc.com> | 2005-09-21 22:19:49 +0000 |
---|---|---|
committer | Bernard Normier <bernard@zeroc.com> | 2005-09-21 22:19:49 +0000 |
commit | bc07c89bbe7fd2783da0eba80b338c4d259265f8 (patch) | |
tree | cdc8e5392ed4f8204ebd92762289366be8099d13 /java/src/IceGrid/TreeNode | |
parent | Removed unecessary compiler fix (diff) | |
download | ice-bc07c89bbe7fd2783da0eba80b338c4d259265f8.tar.bz2 ice-bc07c89bbe7fd2783da0eba80b338c4d259265f8.tar.xz ice-bc07c89bbe7fd2783da0eba80b338c4d259265f8.zip |
Added service instance + ability to sort services
Diffstat (limited to 'java/src/IceGrid/TreeNode')
-rwxr-xr-x | java/src/IceGrid/TreeNode/AdapterEditor.java | 76 | ||||
-rwxr-xr-x | java/src/IceGrid/TreeNode/Application.java | 10 | ||||
-rwxr-xr-x | java/src/IceGrid/TreeNode/CommonBase.java | 6 | ||||
-rwxr-xr-x | java/src/IceGrid/TreeNode/CommonBaseI.java | 6 | ||||
-rwxr-xr-x | java/src/IceGrid/TreeNode/CommunicatorEditor.java | 6 | ||||
-rwxr-xr-x | java/src/IceGrid/TreeNode/Editor.java | 55 | ||||
-rwxr-xr-x | java/src/IceGrid/TreeNode/Parent.java | 116 | ||||
-rwxr-xr-x | java/src/IceGrid/TreeNode/Service.java | 52 | ||||
-rwxr-xr-x | java/src/IceGrid/TreeNode/ServiceEditor.java | 44 | ||||
-rwxr-xr-x | java/src/IceGrid/TreeNode/ServiceInstanceEditor.java | 254 | ||||
-rwxr-xr-x | java/src/IceGrid/TreeNode/Services.java | 79 |
11 files changed, 562 insertions, 142 deletions
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;
}
|