summaryrefslogtreecommitdiff
path: root/java/src
diff options
context:
space:
mode:
authorBernard Normier <bernard@zeroc.com>2005-09-22 22:54:37 +0000
committerBernard Normier <bernard@zeroc.com>2005-09-22 22:54:37 +0000
commit3edcb2644f19293797bc1cc3295a89fbd0cd9e27 (patch)
tree98a8c5be210d8a94b97f91985d74aa208c726947 /java/src
parentvc6 fix (diff)
downloadice-3edcb2644f19293797bc1cc3295a89fbd0cd9e27.tar.bz2
ice-3edcb2644f19293797bc1cc3295a89fbd0cd9e27.tar.xz
ice-3edcb2644f19293797bc1cc3295a89fbd0cd9e27.zip
Refactoring to use the same service sub-editor for plain services, service
instances, and service templates
Diffstat (limited to 'java/src')
-rwxr-xr-xjava/src/IceGrid/TreeNode/AdapterEditor.java15
-rwxr-xr-xjava/src/IceGrid/TreeNode/CommunicatorSubEditor.java (renamed from java/src/IceGrid/TreeNode/CommunicatorEditor.java)38
-rwxr-xr-xjava/src/IceGrid/TreeNode/Editor.java54
-rwxr-xr-xjava/src/IceGrid/TreeNode/ServiceEditor.java109
-rwxr-xr-xjava/src/IceGrid/TreeNode/ServiceInstanceEditor.java139
-rwxr-xr-xjava/src/IceGrid/TreeNode/ServiceSubEditor.java98
-rwxr-xr-xjava/src/IceGrid/TreeNode/ServiceTemplate.java20
-rwxr-xr-xjava/src/IceGrid/TreeNode/ServiceTemplateEditor.java48
-rwxr-xr-xjava/src/IceGrid/TreeNode/Services.java16
-rwxr-xr-xjava/src/IceGrid/TreeNode/TemplateEditor.java375
10 files changed, 402 insertions, 510 deletions
diff --git a/java/src/IceGrid/TreeNode/AdapterEditor.java b/java/src/IceGrid/TreeNode/AdapterEditor.java
index 1de85cb55fa..e9d592f4e45 100755
--- a/java/src/IceGrid/TreeNode/AdapterEditor.java
+++ b/java/src/IceGrid/TreeNode/AdapterEditor.java
@@ -8,30 +8,17 @@
// **********************************************************************
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.tree.TreePath;
import com.jgoodies.forms.builder.DefaultFormBuilder;
-import com.jgoodies.forms.factories.Borders;
-import com.jgoodies.forms.factories.ButtonBarFactory;
import IceGrid.AdapterDescriptor;
import IceGrid.Model;
@@ -363,6 +350,4 @@ class AdapterEditor extends Editor
private JButton _objectsButton;
private JButton _idButton;
-
- private JPanel _panel;
}
diff --git a/java/src/IceGrid/TreeNode/CommunicatorEditor.java b/java/src/IceGrid/TreeNode/CommunicatorSubEditor.java
index 53017d2a94e..001e4ae14d2 100755
--- a/java/src/IceGrid/TreeNode/CommunicatorEditor.java
+++ b/java/src/IceGrid/TreeNode/CommunicatorSubEditor.java
@@ -28,12 +28,11 @@ import IceGrid.Model;
import IceGrid.TableDialog;
import IceGrid.Utils;
-abstract class CommunicatorEditor extends Editor
+class CommunicatorSubEditor
{
- abstract protected Utils.Resolver getResolver();
-
- CommunicatorEditor(JFrame parentFrame)
+ CommunicatorSubEditor(Editor mainEditor, JFrame parentFrame)
{
+ _mainEditor = mainEditor;
_properties.setEditable(false);
//
@@ -49,10 +48,11 @@ abstract class CommunicatorEditor extends Editor
public void actionPerformed(ActionEvent e)
{
java.util.Map result =
- _propertiesDialog.show(_propertiesMap, _panel);
+ _propertiesDialog.show(_propertiesMap,
+ _mainEditor.getPanel());
if(result != null)
{
- updated();
+ _mainEditor.updated();
_propertiesMap = result;
setPropertiesField();
}
@@ -60,13 +60,13 @@ abstract class CommunicatorEditor extends Editor
};
_propertiesButton = new JButton(openPropertiesDialog);
- _description.getDocument().addDocumentListener(_updateListener);
+ _description.getDocument().addDocumentListener(
+ _mainEditor.getUpdateListener());
}
void setPropertiesField()
{
- final Utils.Resolver resolver = _target.getModel().substitute() ?
- getResolver() : null;
+ final Utils.Resolver detailResolver = _mainEditor.getDetailResolver();
Ice.StringHolder toolTipHolder = new Ice.StringHolder();
Utils.Stringifier stringifier = new Utils.Stringifier()
@@ -75,9 +75,9 @@ abstract class CommunicatorEditor extends Editor
{
java.util.Map.Entry entry = (java.util.Map.Entry)obj;
- return Utils.substitute((String)entry.getKey(), resolver)
+ return Utils.substitute((String)entry.getKey(), detailResolver)
+ "="
- + Utils.substitute((String)entry.getValue(), resolver);
+ + Utils.substitute((String)entry.getValue(), detailResolver);
}
};
@@ -90,7 +90,6 @@ abstract class CommunicatorEditor extends Editor
void append(DefaultFormBuilder builder)
{
-
builder.append("Description");
builder.nextLine();
builder.append("");
@@ -109,20 +108,27 @@ abstract class CommunicatorEditor extends Editor
void writeDescriptor(CommunicatorDescriptor descriptor)
{
- descriptor.properties = mapToProperties(_propertiesMap);
+ descriptor.properties = Editor.mapToProperties(_propertiesMap);
descriptor.description = _description.getText();
}
void show(CommunicatorDescriptor descriptor, boolean isEditable)
{
- _propertiesMap = propertiesToMap(descriptor.properties);
+ Utils.Resolver detailResolver = _mainEditor.getDetailResolver();
+ isEditable = isEditable && (detailResolver == null);
+
+ _propertiesMap = Editor.propertiesToMap(descriptor.properties);
setPropertiesField();
_propertiesButton.setEnabled(isEditable);
- _description.setText(descriptor.description);
- _description.setEnabled(isEditable);
+ _description.setText(
+ Utils.substitute(descriptor.description, detailResolver));
+ _description.setEditable(isEditable);
+ _description.setOpaque(isEditable);
}
+ protected Editor _mainEditor;
+
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 e14b8a99e6a..5ecf9433877 100755
--- a/java/src/IceGrid/TreeNode/Editor.java
+++ b/java/src/IceGrid/TreeNode/Editor.java
@@ -31,6 +31,7 @@ import com.jgoodies.forms.util.LayoutStyle;
import IceGrid.Model;
import IceGrid.PropertyDescriptor;
+import IceGrid.Utils;
//
// Base class for all editors
@@ -43,6 +44,19 @@ abstract class Editor
void postUpdate() {}
+ //
+ // Used by the sub-editor (when there is one)
+ //
+ Object getSubDescriptor()
+ {
+ return null;
+ }
+
+ Utils.Resolver getDetailResolver()
+ {
+ return null;
+ }
+
protected Editor()
{
//
@@ -93,6 +107,13 @@ abstract class Editor
_target = target;
}
+ CommonBase getTarget()
+ {
+ return _target;
+ }
+
+
+
JComponent getComponent()
{
if(_panel == null)
@@ -129,7 +150,7 @@ abstract class Editor
return _panel;
}
- protected void updated()
+ void updated()
{
if(_detectUpdates)
{
@@ -137,6 +158,17 @@ abstract class Editor
_discardButton.setEnabled(true);
}
}
+
+ DocumentListener getUpdateListener()
+ {
+ return _updateListener;
+ }
+
+ JPanel getPanel()
+ {
+ return _panel;
+ }
+
protected void detectUpdates(boolean val)
{
@@ -269,6 +301,26 @@ abstract class Editor
return result;
}
+ static java.util.TreeMap makeParameterValues(
+ java.util.Map oldParameterValues,
+ java.util.List newParameters)
+ {
+ java.util.TreeMap result = new java.util.TreeMap();
+
+ java.util.Iterator p = newParameters.iterator();
+ while(p.hasNext())
+ {
+ String name = (String)p.next();
+ String value = (String)oldParameterValues.get(name);
+ if(value == null)
+ {
+ value = "";
+ }
+ result.put(name, value);
+ }
+ return result;
+ }
+
protected JButton _applyButton;
protected JButton _discardButton;
protected DocumentListener _updateListener;
diff --git a/java/src/IceGrid/TreeNode/ServiceEditor.java b/java/src/IceGrid/TreeNode/ServiceEditor.java
index 7a768ec72e3..387058ebe8d 100755
--- a/java/src/IceGrid/TreeNode/ServiceEditor.java
+++ b/java/src/IceGrid/TreeNode/ServiceEditor.java
@@ -8,106 +8,55 @@
// **********************************************************************
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.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.ServiceDescriptor;
-import IceGrid.ServiceInstanceDescriptor;
import IceGrid.Model;
-import IceGrid.ObjectDescriptor;
-import IceGrid.TableDialog;
+import IceGrid.ServiceInstanceDescriptor;
import IceGrid.Utils;
-class ServiceEditor extends CommunicatorEditor
+class ServiceEditor extends Editor
{
ServiceEditor(JFrame parentFrame)
{
- super(parentFrame);
-
- _name.getDocument().addDocumentListener(_updateListener);
- _entry.getDocument().addDocumentListener(_updateListener);
+ _subEditor = new ServiceSubEditor(this, parentFrame);
}
- protected Utils.Resolver getResolver()
- {
- if(_target instanceof Service)
- {
- Service service = (Service)_target;
-
- if(service.getModel().substitute())
- {
- return service.getResolver();
- }
- }
- return null;
- }
-
- ServiceDescriptor getServiceDescriptor()
+ //
+ // From Editor:
+ //
+ Utils.Resolver getDetailResolver()
{
- if(_target instanceof Service)
+ Service service = (Service)_target;
+ if(service.getModel().substitute())
{
- return ((Service)_target).getServiceDescriptor();
+ return service.getResolver();
}
else
{
return null;
}
}
-
+
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();
+ _subEditor.append(builder);
}
-
- //
- // From Editor:
- //
void writeDescriptor()
{
- ServiceDescriptor descriptor = getServiceDescriptor();
- descriptor.name = _name.getText();
- descriptor.entry = _entry.getText();
+ _subEditor.writeDescriptor();
}
boolean isSimpleUpdate()
{
- return getServiceDescriptor().name.equals(_name.getText());
+ return _subEditor.isSimpleUpdate();
+ }
+
+ Object getSubDescriptor()
+ {
+ return ((Service)_target).getServiceDescriptor();
}
void show(Service service)
@@ -122,28 +71,12 @@ class ServiceEditor extends CommunicatorEditor
detectUpdates(false);
setTarget(service);
- ServiceDescriptor descriptor = service.getServiceDescriptor();
- Model model = service.getModel();
-
- Utils.Resolver resolver = getResolver();
-
- boolean isEditable = service.isEditable() && resolver == null;
-
- _name.setText(
- Utils.substitute(descriptor.name, resolver));
- _name.setEditable(isEditable);
-
- _entry.setText(
- Utils.substitute(descriptor.entry, resolver));
- _entry.setEditable(isEditable);
-
- show(descriptor, isEditable);
+ _subEditor.show(service.isEditable());
_applyButton.setEnabled(service.isEphemeral());
_discardButton.setEnabled(service.isEphemeral());
detectUpdates(true);
}
- private JTextField _name = new JTextField(20);
- private JTextField _entry = new JTextField(20);
+ private ServiceSubEditor _subEditor;
}
diff --git a/java/src/IceGrid/TreeNode/ServiceInstanceEditor.java b/java/src/IceGrid/TreeNode/ServiceInstanceEditor.java
index 4236bd3b1ef..f4a8c6b8ec8 100755
--- a/java/src/IceGrid/TreeNode/ServiceInstanceEditor.java
+++ b/java/src/IceGrid/TreeNode/ServiceInstanceEditor.java
@@ -8,38 +8,22 @@
// **********************************************************************
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.ServiceInstanceDescriptor;
import IceGrid.TableDialog;
import IceGrid.TemplateDescriptor;
import IceGrid.Utils;
@@ -48,6 +32,8 @@ class ServiceInstanceEditor extends Editor
{
ServiceInstanceEditor(JFrame parentFrame)
{
+ _subEditor = new ServiceSubEditor(this, parentFrame);
+
_parameterValues.setEditable(false);
//
@@ -67,42 +53,6 @@ class ServiceInstanceEditor extends Editor
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
@@ -124,6 +74,10 @@ class ServiceInstanceEditor extends Editor
updated();
_parameterValuesMap = new java.util.TreeMap(result);
setParameterValuesField();
+ //
+ // No need to redisplay details: since it's editable,
+ // we're not subsituting variables or parameters
+ //
}
}
};
@@ -138,6 +92,32 @@ class ServiceInstanceEditor extends Editor
//
// From Editor:
//
+ Utils.Resolver getTopResolver()
+ {
+ Services services = (Services)_target.getParent();
+ if(services.getModel().substitute())
+ {
+ return services.getResolver();
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ Utils.Resolver getDetailResolver()
+ {
+ Service service = (Service)_target;
+ if(service.getModel().substitute())
+ {
+ return service.getResolver();
+ }
+ else
+ {
+ return null;
+ }
+ }
+
void writeDescriptor()
{
ServiceInstanceDescriptor descriptor = getDescriptor();
@@ -163,9 +143,15 @@ class ServiceInstanceEditor extends Editor
builder.appendSeparator();
builder.nextLine();
- //
- // TODO: add service fields (read-only)
- //
+ _subEditor.append(builder);
+ }
+
+ Object getSubDescriptor()
+ {
+ ServiceTemplate template = (ServiceTemplate)_template.getSelectedItem();
+
+ TemplateDescriptor descriptor = (TemplateDescriptor)template.getDescriptor();
+ return descriptor.descriptor;
}
void show(Service service)
@@ -203,15 +189,45 @@ class ServiceInstanceEditor extends Editor
assert t != null;
_template.setSelectedItem(t);
+ 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
+ //
+ _parameterValuesMap = makeParameterValues(_parameterValuesMap, td.parameters);
+ setParameterValuesField();
+
+ //
+ // Redisplay details
+ //
+ _subEditor.show(false);
+ }
+
+ public void intervalAdded(ListDataEvent e)
+ {}
+
+ public void intervalRemoved(ListDataEvent e)
+ {}
+ };
+
+ _template.getModel().addListDataListener(templateListener);
_template.setEnabled(isEditable);
_parameterValuesMap = descriptor.parameterValues;
setParameterValuesField();
- _parameterValues.setEnabled(isEditable);
+ _parameterValuesButton.setEnabled(isEditable);
- //
- // TODO: sub editor
- //
+ _subEditor.show(false);
+
_applyButton.setEnabled(service.isEphemeral());
_discardButton.setEnabled(service.isEphemeral());
detectUpdates(true);
@@ -243,7 +259,8 @@ class ServiceInstanceEditor extends Editor
_parameterValues.setToolTipText(toolTipHolder.value);
}
-
+ private ServiceSubEditor _subEditor;
+
private JComboBox _template = new JComboBox();
private JButton _templateButton;
private JTextField _parameterValues = new JTextField(20);
diff --git a/java/src/IceGrid/TreeNode/ServiceSubEditor.java b/java/src/IceGrid/TreeNode/ServiceSubEditor.java
new file mode 100755
index 00000000000..182ef4197e8
--- /dev/null
+++ b/java/src/IceGrid/TreeNode/ServiceSubEditor.java
@@ -0,0 +1,98 @@
+// **********************************************************************
+//
+// 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.event.ActionEvent;
+
+import javax.swing.AbstractAction;
+import javax.swing.Action;
+import javax.swing.JFrame;
+import javax.swing.JTextField;
+
+import com.jgoodies.forms.builder.DefaultFormBuilder;
+
+import IceGrid.ServiceDescriptor;
+import IceGrid.ServiceInstanceDescriptor;
+import IceGrid.Model;
+import IceGrid.Utils;
+
+class ServiceSubEditor extends CommunicatorSubEditor
+{
+ ServiceSubEditor(Editor mainEditor, JFrame parentFrame)
+ {
+ super(mainEditor, parentFrame);
+
+ _name.getDocument().addDocumentListener(
+ _mainEditor.getUpdateListener());
+ _entry.getDocument().addDocumentListener(
+ _mainEditor.getUpdateListener());
+ }
+
+ ServiceDescriptor getServiceDescriptor()
+ {
+ return (ServiceDescriptor)
+ _mainEditor.getSubDescriptor();
+ }
+
+ 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();
+ }
+
+ void writeDescriptor()
+ {
+ ServiceDescriptor descriptor = getServiceDescriptor();
+ descriptor.name = _name.getText();
+ descriptor.entry = _entry.getText();
+ super.writeDescriptor(descriptor);
+ }
+
+ boolean isSimpleUpdate()
+ {
+ return getServiceDescriptor().name.equals(_name.getText());
+ }
+
+ void show(boolean isEditable)
+ {
+ ServiceDescriptor descriptor = getServiceDescriptor();
+ Utils.Resolver detailResolver = _mainEditor.getDetailResolver();
+
+ isEditable = isEditable && (detailResolver == null);
+
+ if(detailResolver != null)
+ {
+ _name.setText(detailResolver.find("service"));
+ }
+ else
+ {
+ _name.setText(descriptor.name);
+ }
+ _name.setEditable(isEditable);
+
+ _entry.setText(
+ Utils.substitute(descriptor.entry, detailResolver));
+ _entry.setEditable(isEditable);
+
+ show(descriptor, isEditable);
+ }
+
+ private JTextField _name = new JTextField(20);
+ private JTextField _entry = new JTextField(20);
+}
diff --git a/java/src/IceGrid/TreeNode/ServiceTemplate.java b/java/src/IceGrid/TreeNode/ServiceTemplate.java
index 023cc6cc501..0f555515362 100755
--- a/java/src/IceGrid/TreeNode/ServiceTemplate.java
+++ b/java/src/IceGrid/TreeNode/ServiceTemplate.java
@@ -8,11 +8,29 @@
// **********************************************************************
package IceGrid.TreeNode;
+import com.jgoodies.uif_lite.panel.SimpleInternalFrame;
+
import IceGrid.TemplateDescriptor;
import IceGrid.Model;
class ServiceTemplate extends EditableParent
{
+ public void displayProperties()
+ {
+ SimpleInternalFrame propertiesFrame = _model.getPropertiesFrame();
+ propertiesFrame.setTitle("Properties for " + _id);
+
+ if(_editor == null)
+ {
+ _editor = new ServiceTemplateEditor(_model.getMainFrame());
+ }
+ _editor.show(this);
+ propertiesFrame.setContent(_editor.getComponent());
+ propertiesFrame.validate();
+ propertiesFrame.repaint();
+ }
+
+
ServiceTemplate(boolean brandNew, String name,
TemplateDescriptor descriptor, Model model)
throws DuplicateIdException
@@ -74,4 +92,6 @@ class ServiceTemplate extends EditableParent
private DbEnvs _dbEnvs;
private PropertiesHolder _propertiesHolder;
+
+ static private ServiceTemplateEditor _editor;
}
diff --git a/java/src/IceGrid/TreeNode/ServiceTemplateEditor.java b/java/src/IceGrid/TreeNode/ServiceTemplateEditor.java
new file mode 100755
index 00000000000..73af00f50cc
--- /dev/null
+++ b/java/src/IceGrid/TreeNode/ServiceTemplateEditor.java
@@ -0,0 +1,48 @@
+// **********************************************************************
+//
+// 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 javax.swing.JFrame;
+
+import com.jgoodies.forms.builder.DefaultFormBuilder;
+
+class ServiceTemplateEditor extends TemplateEditor
+{
+ ServiceTemplateEditor(JFrame parentFrame)
+ {
+ _subEditor = new ServiceSubEditor(this, parentFrame);
+ }
+
+ void writeDescriptor()
+ {
+ super.writeDescriptor();
+ _subEditor.writeDescriptor();
+ }
+
+ void append(DefaultFormBuilder builder)
+ {
+ super.append(builder);
+ _subEditor.append(builder);
+ }
+
+ void show(ServiceTemplate t)
+ {
+ detectUpdates(false);
+ setTarget(t);
+
+ super.show();
+ _subEditor.show(true);
+
+ _applyButton.setEnabled(t.isEphemeral());
+ _discardButton.setEnabled(t.isEphemeral());
+ detectUpdates(true);
+ }
+
+ private ServiceSubEditor _subEditor;
+}
diff --git a/java/src/IceGrid/TreeNode/Services.java b/java/src/IceGrid/TreeNode/Services.java
index 87a46a73046..a9a97a1fb2b 100755
--- a/java/src/IceGrid/TreeNode/Services.java
+++ b/java/src/IceGrid/TreeNode/Services.java
@@ -225,10 +225,11 @@ class Services extends SimpleContainer
//
// Make sure descriptor.template points to a real template
//
- if(getApplication().findServiceTemplate(descriptor.template) == null)
+ ServiceTemplate t = getApplication().findServiceTemplate(descriptor.template);
+
+ if(t == null)
{
- CommonBase t = (CommonBase)
- getApplication().getServiceTemplates().getChildAt(0);
+ t = (ServiceTemplate)getApplication().getServiceTemplates().getChildAt(0);
if(t == null)
{
@@ -242,8 +243,17 @@ class Services extends SimpleContainer
else
{
descriptor.template = t.getId();
+ descriptor.parameterValues = new java.util.TreeMap();
}
}
+
+ //
+ // Validate/update parameterValues
+ //
+ TemplateDescriptor td = (TemplateDescriptor)t.getDescriptor();
+ descriptor.parameterValues = Editor.makeParameterValues(descriptor.parameterValues,
+ td.parameters);
+
}
Service service = new Service(name, descriptor, _model);
diff --git a/java/src/IceGrid/TreeNode/TemplateEditor.java b/java/src/IceGrid/TreeNode/TemplateEditor.java
index 042af49bef3..abab7d965c2 100755
--- a/java/src/IceGrid/TreeNode/TemplateEditor.java
+++ b/java/src/IceGrid/TreeNode/TemplateEditor.java
@@ -8,104 +8,78 @@
// **********************************************************************
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.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;
-import IceGrid.ObjectDescriptor;
-import IceGrid.TableDialog;
+import IceGrid.TemplateDescriptor;
import IceGrid.Utils;
-abstract class TemplateEditor extends Editor
+class TemplateEditor extends Editor
{
- /*
-
- TemplateEditor(boolean service)
+ TemplateEditor()
{
- _templateId.addDocumentListener(_updateListener);
- _parameters.addDocumentListener(_updateListener);
+ _template.getDocument().addDocumentListener(_updateListener);
+ _parameters.getDocument().addDocumentListener(_updateListener);
+ }
- if(service)
- {
- _subEditor = new ServiceEditor(this);
- }
- else
- {
- // TODO: ServerEditor
- }
+ TemplateDescriptor getDescriptor()
+ {
+ return (TemplateDescriptor)_target.getDescriptor();
}
- JComponent getComponent()
+ Object getSubDescriptor()
{
- 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("Template ID");
- builder.append(_templateId, 3);
- builder.nextLine();
- builder.append("Parameters");
- builder.append(_parameters, 3);
- builder.nextLine();
- _subEditor.buildSubPanel(builder);
-
-
- _panel = buildPanel(builder.getPanel());
- }
- return _panel;
+ return getDescriptor().descriptor;
}
+
+ void writeDescriptor()
+ {
+ TemplateDescriptor descriptor = getDescriptor();
+ descriptor.parameters = stringToParameters(_parameters.getText());
+ }
- protected CommonBase getTarget()
+ boolean isSimpleUpdate()
+ {
+ //
+ // Not used since we have our own applyUpdate()
+ //
+ return false;
+ }
+
+ void append(DefaultFormBuilder builder)
+ {
+ builder.append("Template ID");
+ builder.append(_template, 3);
+ builder.nextLine();
+
+ builder.append("Parameters");
+ builder.append(_parameters, 3);
+ builder.nextLine();
+
+ builder.appendSeparator();
+ builder.nextLine();
+ }
+
+ void show()
{
- return _template;
+ TemplateDescriptor descriptor = getDescriptor();
+ _template.setText(_target.getId());
+ _parameters.setText(parametersToString(descriptor.parameters));
}
- static private java.util.LinkedList stringToSortedParams(String s)
+ static private java.util.LinkedList stringToParameters(String s)
{
- java.util.List params = java.util.Arrays.asList(s.getText.split("\s+"));
+ java.util.List params = java.util.Arrays.asList(s.split("\\s+"));
java.util.Collections.sort(params);
- return java.util.LinkedList(params);
+ return new java.util.LinkedList(params);
}
- static private String stringify(java.util.List params)
+ static private String parametersToString(java.util.List list)
{
String result = "";
- java.util.Iterator p = params.iterator();
+ java.util.Iterator p = list.iterator();
while(p.hasNext())
{
if(result.equals(""))
@@ -118,260 +92,9 @@ abstract class TemplateEditor extends Editor
}
}
return result;
- }
- void writeDescriptor(boolean fullUpdate)
- {
- TemplateDescriptor descriptor = _template.getDescriptor();
-
- if(fullUpdate)
- {
- descriptor.descriptor = _instanceEditor.getNewDescriptor();
- }
- else
- {
- _instanceEditor.writeDescriptor();
- }
- descriptor.params = stringToSortedParams(_parameters.getText());
}
- TemplateDescriptor getNewDescriptor()
- {
- return new TemplateDescriptor(
- _instanceEditor.getNewDescriptor(),
- stringToSortedParams(_parameters.getText()));
- }
-
- private boolean isUpdateSafe()
- {
- //
- // If parameter change => not safe!
- //
- if(_origParams.equals(_parameters.getText()))
- {
- return _instanceEditor.isUpdateSafe();
- }
- else
- {
- return false;
- }
- }
-
- protected void applyUpdate()
- {
- if(_template.getModel().canUpdate())
- {
- _template.getModel().disableDisplay();
-
- String oldId = _template.getId();
- String newId = _templateId.getText();
-
- try
- {
- TemplateDescriptor descriptor = _template.getDescriptor();
-
- if(_template.isEphemeral())
- {
- Templates parent = (Templates)_template.getParent();
- writeDescriptor(false);
-
- if(!parent.addDescriptor(newId, descriptor))
- {
- JOptionPane.showMessageDialog(
- _template.getModel().getMainFrame(),
- "The id '" + newId + "' is already in use",
- "Duplicate template id",
- JOptionPane.ERROR_MESSAGE);
- }
- _template.destroy();
-
- if(!_template.getApplication().applyUpdate())
- {
- //
- // Restores old display
- //
- parent = (Templates)_templates.getModel()
- .findNewNode(parent.getPath());
- parent.removeDescriptor(newId);
- try
- {
- parent.addChild(_adapter, true);
- }
- catch(DuplicateIdException die)
- {
- assert false;
- }
- _template.setParent(parent);
- _template.getModel().setSelectionPath(
- _template.getPath());
- return;
- }
- else
- {
- parent = (Templates)_template.getModel()
- .findNewNode(parent.getPath());
- _template = (Template)parent.findChild(newId);
- _template.getModel()
- .setSelectionPath(_template.getPath());
- }
- }
- else if(oldId.equals(newId))
- {
- if(isSafeUpdate())
- {
- writeDescriptor(false);
- }
- else
- {
- //
- // Full update
- //
-
- //
- // Save to be able to rollback
- //
- TemplateDescriptor oldDescriptor = null;
- try
- {
- //
- // Shallow copy
- //
- oldDescriptor = (TemplateDescriptor)descriptor.clone();
- }
- catch(CloneNotSupportedException ce)
- {
- assert false; // impossible
- }
-
- TreePath oldPath = _template.getPath();
- Templates parent = (Templates)_template.getParent();
-
- writeDescriptor(true);
-
- if(!_template.getApplication().applyUpdate())
- {
- //
- // Restore descriptor
- // IMPORTANT: keep the same object!
- //
- descriptor.descriptor = oldDescriptor.descriptor;
- descriptor.parameters = oldDescriptor.parameters;
-
- //
- // Need to find new template node!
- //
- _template = (Template)_template.getModel().findNewNode(oldPath);
- _template.getModel().setSelectionPath(_template.getPath());
- //
- //
- // Everything was restored, user must deal with error
- //
- return;
- }
- //
- // Else, no renaming, so proper node already selected
- //
- }
- }
- else
- {
- //
- // Renaming
- //
-
- Templates parent = (Templates)_template.getParent();
-
- TemplateDescriptor oldDescriptor = descriptor;
- TemplateDescriptor newDescriptor = getNewDescriptor();
-
- if(!parent.addDescriptor(newId, newDescriptor))
- {
- JOptionPane.showMessageDialog(
- _template.getModel().getMainFrame(),
- "The id '" + newId + "' is already in use",
- "Duplicate template id",
- JOptionPane.ERROR_MESSAGE);
- }
- parent.removeDescriptor(oldId);
-
- if(!_template.getApplication().applyUpdate())
- {
- parent = (Templates)_template.getModel()
- .findNewNode(parent.getPath());
-
- parent.addDescriptor(oldId, oldDescriptor);
-
- //
- // Need to find new template node!
- //
- _template = (Template)_template.getModel().findNewNode(oldPath);
- _template.getModel().setSelectionPath(_template.getPath());
- //
- //
- // Everything was restored, user must deal with error
- //
- return;
- }
- else
- {
- _instanceEditor.cascadeDelete(oldId);
-
- parent = (Templates)_template.getModel()
- .findNewNode(parent.getPath());
- _template = (Template)parent.findChild(newId);
- _template.getModel()
- .setSelectionPath(_template.getPath());
- }
- }
-
- //
- // Mark modified
- //
- _template.markModified();
-
- _applyButton.setEnabled(false);
- _discardButton.setEnabled(false);
- }
- finally
- {
- _template.getModel().enableDisplay();
- }
- }
- //
- // Otherwise, may wait until other user is done!
- //
- }
-
-
- void show(Template template)
- {
- detectUpdates(false);
-
- _template = template;
- TemplateDescriptor descriptor = _template.getDescriptor();
-
- _templateId.setText(_template.getId());
- _origParams = stringify(_template.parameters);
- _parameters.setText(_origParams);
- _instanceEditor.show();
-
- _applyButton.setEnabled(_template.isEphemeral());
- _discardButton.setEnabled(_template.isEphemeral());
- detectUpdates(true);
- }
-
- TemplateDescriptor getDescriptor()
- {
- return _template.getDescriptor();
- }
-
-
- private JTextField _templateId = new JTextField(20);
+ private JTextField _template = new JTextField(20);
private JTextField _parameters = new JTextField(20);
-
- private String _origParams;
-
- private JPanel _panel;
- private Template _template;
- */
}