diff options
Diffstat (limited to 'java/src')
-rwxr-xr-x | java/src/IceGrid/TreeNode/AbstractServerEditor.java | 22 | ||||
-rwxr-xr-x | java/src/IceGrid/TreeNode/AdapterEditor.java | 8 | ||||
-rwxr-xr-x | java/src/IceGrid/TreeNode/DbEnvEditor.java | 6 | ||||
-rwxr-xr-x | java/src/IceGrid/TreeNode/Node.java | 25 | ||||
-rwxr-xr-x | java/src/IceGrid/TreeNode/Nodes.java | 3 | ||||
-rwxr-xr-x | java/src/IceGrid/TreeNode/ReplicaGroup.java | 117 | ||||
-rwxr-xr-x | java/src/IceGrid/TreeNode/ReplicaGroupEditor.java | 383 | ||||
-rwxr-xr-x | java/src/IceGrid/TreeNode/ReplicaGroups.java | 111 |
8 files changed, 617 insertions, 58 deletions
diff --git a/java/src/IceGrid/TreeNode/AbstractServerEditor.java b/java/src/IceGrid/TreeNode/AbstractServerEditor.java index daaca3e8eb6..43813792f92 100755 --- a/java/src/IceGrid/TreeNode/AbstractServerEditor.java +++ b/java/src/IceGrid/TreeNode/AbstractServerEditor.java @@ -47,7 +47,7 @@ abstract class AbstractServerEditor extends Editor try
{
- node.tryAdd(instanceDescriptor, serverDescriptor);
+ node.tryAdd(instanceDescriptor, serverDescriptor, true);
}
catch(UpdateFailedException e)
{
@@ -106,18 +106,10 @@ abstract class AbstractServerEditor extends Editor server.getServerDescriptor();
node.removeChild(server, true);
- if(instanceDescriptor != null)
- {
- node.removeDescriptor(instanceDescriptor);
- }
- else
- {
- node.removeDescriptor(serverDescriptor);
- }
try
{
- node.tryAdd(instanceDescriptor, serverDescriptor);
+ node.tryAdd(instanceDescriptor, serverDescriptor, false);
}
catch(UpdateFailedException e)
{
@@ -125,15 +117,7 @@ abstract class AbstractServerEditor extends Editor // Restore all
//
server.restoreDescriptor(savedDescriptor);
- if(instanceDescriptor != null)
- {
- node.addDescriptor(instanceDescriptor);
- }
- else
- {
- node.addDescriptor(serverDescriptor);
- }
-
+
try
{
node.addChild(server, true);
diff --git a/java/src/IceGrid/TreeNode/AdapterEditor.java b/java/src/IceGrid/TreeNode/AdapterEditor.java index 33f713f2498..c30fd52c851 100755 --- a/java/src/IceGrid/TreeNode/AdapterEditor.java +++ b/java/src/IceGrid/TreeNode/AdapterEditor.java @@ -128,7 +128,8 @@ class AdapterEditor extends ListElementEditor // _name.getDocument().addDocumentListener(_updateListener); _endpoints.getDocument().addDocumentListener(_updateListener); - + _description.getDocument().addDocumentListener(_updateListener); + JTextField idTextField = (JTextField) _id.getEditor().getEditorComponent(); idTextField.getDocument().addDocumentListener(_updateListener); @@ -325,7 +326,8 @@ class AdapterEditor extends ListElementEditor _description.setText( Utils.substitute(descriptor.description, resolver)); _description.setEditable(isEditable); - + _description.setOpaque(isEditable); + // // Need to make control editable & enabled before changing it // @@ -440,8 +442,8 @@ class AdapterEditor extends ListElementEditor private JTextField _endpoints = new JTextField(20); private JCheckBox _registerProcess; private JCheckBox _waitForActivation; - private JTextField _objects = new JTextField(20); + private JTextField _objects = new JTextField(20); private java.util.Map _objectsMap; private TableDialog _objectsDialog; private JButton _objectsButton; diff --git a/java/src/IceGrid/TreeNode/DbEnvEditor.java b/java/src/IceGrid/TreeNode/DbEnvEditor.java index df58f9b992f..390d449db8c 100755 --- a/java/src/IceGrid/TreeNode/DbEnvEditor.java +++ b/java/src/IceGrid/TreeNode/DbEnvEditor.java @@ -63,11 +63,6 @@ class DbEnvEditor extends ListElementEditor }; _propertiesButton = new JButton(openPropertiesDialog); } - - - // - // From Editor: - // void writeDescriptor() { @@ -133,6 +128,7 @@ class DbEnvEditor extends ListElementEditor _description.setText( Utils.substitute(descriptor.description, resolver)); _description.setEditable(isEditable); + _description.setOpaque(isEditable); _dbHome.setText( Utils.substitute(descriptor.dbHome, resolver)); diff --git a/java/src/IceGrid/TreeNode/Node.java b/java/src/IceGrid/TreeNode/Node.java index 4203a1195d5..7d8f7cd0065 100755 --- a/java/src/IceGrid/TreeNode/Node.java +++ b/java/src/IceGrid/TreeNode/Node.java @@ -931,19 +931,18 @@ class Node extends EditableParent void tryAdd(ServerInstanceDescriptor instanceDescriptor,
- ServerDescriptor serverDescriptor) throws UpdateFailedException
+ ServerDescriptor serverDescriptor,
+ boolean addDescriptor) throws UpdateFailedException
{
try
{
if(instanceDescriptor != null)
{
- _descriptor.serverInstances.add(instanceDescriptor);
addChild(createServer(true, instanceDescriptor, getApplication()),
true);
}
else
{
- _descriptor.servers.add(serverDescriptor);
addChild(createServer(true, serverDescriptor, getApplication()),
true);
}
@@ -951,24 +950,22 @@ class Node extends EditableParent catch(UpdateFailedException e)
{
e.addParent(this);
+ throw e;
+ }
+
+ if(addDescriptor)
+ {
if(instanceDescriptor != null)
{
- removeDescriptor(instanceDescriptor);
+ _descriptor.serverInstances.add(instanceDescriptor);
}
else
{
- removeDescriptor(serverDescriptor);
+ _descriptor.servers.add(serverDescriptor);
}
- throw e;
}
}
-
- void addDescriptor(ServerDescriptor sd)
- {
- _descriptor.servers.add(sd);
- }
-
void removeDescriptor(ServerDescriptor sd)
{
//
@@ -984,10 +981,6 @@ class Node extends EditableParent }
}
}
- void addDescriptor(ServerInstanceDescriptor sd)
- {
- _descriptor.serverInstances.add(sd);
- }
void removeDescriptor(ServerInstanceDescriptor sd)
{
//
diff --git a/java/src/IceGrid/TreeNode/Nodes.java b/java/src/IceGrid/TreeNode/Nodes.java index ca390eaab2a..269dca6f8ab 100755 --- a/java/src/IceGrid/TreeNode/Nodes.java +++ b/java/src/IceGrid/TreeNode/Nodes.java @@ -320,10 +320,11 @@ public class Nodes extends EditableParent addChild(node, true);
}
catch(UpdateFailedException e)
- {
+ {
e.addParent(this);
throw e;
}
+ _descriptors.put(nodeName, descriptor);
}
private void newNode(NodeDescriptor descriptor)
diff --git a/java/src/IceGrid/TreeNode/ReplicaGroup.java b/java/src/IceGrid/TreeNode/ReplicaGroup.java index 2c5432a17c3..56e1fb145de 100755 --- a/java/src/IceGrid/TreeNode/ReplicaGroup.java +++ b/java/src/IceGrid/TreeNode/ReplicaGroup.java @@ -8,8 +8,9 @@ // **********************************************************************
package IceGrid.TreeNode;
-import IceGrid.ReplicaGroupDescriptor;
import IceGrid.Model;
+import IceGrid.ReplicaGroupDescriptor;
+import IceGrid.SimpleInternalFrame;
import IceGrid.Utils;
class ReplicaGroup extends EditableLeaf
@@ -20,19 +21,110 @@ class ReplicaGroup extends EditableLeaf return (ReplicaGroupDescriptor)d.clone();
}
- ReplicaGroup(boolean brandNew,
- ReplicaGroupDescriptor descriptor,
- Model model)
+ //
+ // Actions
+ //
+ public boolean[] getAvailableActions()
{
- //
- // Make the assumption that app variables can't be used in
- // the descriptor.id
- //
+ boolean[] actions = new boolean[ACTION_COUNT];
+ actions[COPY] = true;
+
+ if(_parent.getAvailableActions()[PASTE])
+ {
+ actions[PASTE] = true;
+ }
+ actions[DELETE] = true;
+ return actions;
+ }
+
+ public void copy()
+ {
+ _model.setClipboard(copyDescriptor(_descriptor));
+ _model.getActions()[PASTE].setEnabled(true);
+
+ }
+ public void paste()
+ {
+ _parent.paste();
+ }
+
+ public boolean destroy()
+ {
+ if(_parent == null)
+ {
+ return false;
+ }
+ ReplicaGroups replicaGroups = (ReplicaGroups)_parent;
+
+ if(_ephemeral)
+ {
+ replicaGroups.removeChild(this, true);
+ return true;
+ }
+ else if(_model.canUpdate())
+ {
+ replicaGroups.removeDescriptor(_descriptor);
+ replicaGroups.removeElement(this, true);
+ return true;
+ }
+ return false;
+ }
+
+ public void displayProperties()
+ {
+ SimpleInternalFrame propertiesFrame = _model.getPropertiesFrame();
+
+ propertiesFrame.setTitle("Properties for " + _id);
+ if(_editor == null)
+ {
+ _editor = new ReplicaGroupEditor(_model.getMainFrame());
+ }
+ propertiesFrame.setContent(_editor.getComponent());
+ _editor.show(this);
+
+ propertiesFrame.validate();
+ propertiesFrame.repaint();
+ }
+
+ public Object getDescriptor()
+ {
+ return _descriptor;
+ }
+
+ public Object saveDescriptor()
+ {
+ return _descriptor.clone();
+ }
+ public void restoreDescriptor(Object savedDescriptor)
+ {
+ ReplicaGroupDescriptor clone = (ReplicaGroupDescriptor)savedDescriptor;
+ _descriptor.id = clone.id;
+ _descriptor.objects = clone.objects;
+ _descriptor.loadBalancing = clone.loadBalancing;
+ }
+ public boolean isEphemeral()
+ {
+ return _ephemeral;
+ }
+
+ ReplicaGroup(boolean brandNew,
+ ReplicaGroupDescriptor descriptor,
+ Model model)
+ {
super(brandNew, descriptor.id, model);
+ _ephemeral = false;
rebuild(descriptor);
}
-
+
+ ReplicaGroup(ReplicaGroupDescriptor descriptor,
+ Model model)
+ {
+ super(false, descriptor.id, model);
+ _ephemeral = true;
+ rebuild(descriptor);
+ }
+
void rebuild(ReplicaGroupDescriptor descriptor)
{
_descriptor = descriptor;
@@ -41,10 +133,7 @@ class ReplicaGroup extends EditableLeaf //
}
- public Object getDescriptor()
- {
- return _descriptor;
- }
-
private ReplicaGroupDescriptor _descriptor;
+ private final boolean _ephemeral;
+ static private ReplicaGroupEditor _editor;
}
diff --git a/java/src/IceGrid/TreeNode/ReplicaGroupEditor.java b/java/src/IceGrid/TreeNode/ReplicaGroupEditor.java new file mode 100755 index 00000000000..434bec75a85 --- /dev/null +++ b/java/src/IceGrid/TreeNode/ReplicaGroupEditor.java @@ -0,0 +1,383 @@ +// ********************************************************************** +// +// 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 java.awt.event.ItemEvent; +import java.awt.event.ItemListener; + +import javax.swing.AbstractAction; +import javax.swing.Action; +import javax.swing.DefaultComboBoxModel; +import javax.swing.JButton; +import javax.swing.JCheckBox; +import javax.swing.JComboBox; +import javax.swing.JFrame; +import javax.swing.JLabel; +import javax.swing.JOptionPane; +import javax.swing.JScrollPane; +import javax.swing.JTextArea; +import javax.swing.JTextField; + +import com.jgoodies.forms.builder.DefaultFormBuilder; +import com.jgoodies.forms.layout.CellConstraints; + +import IceGrid.AdaptiveLoadBalancingPolicy; +import IceGrid.RandomLoadBalancingPolicy; +import IceGrid.RoundRobinLoadBalancingPolicy; + +import IceGrid.Model; +import IceGrid.ObjectDescriptor; +import IceGrid.ReplicaGroupDescriptor; +import IceGrid.TableDialog; +import IceGrid.Utils; + +class ReplicaGroupEditor extends Editor +{ + protected void applyUpdate() + { + ReplicaGroup replicaGroup = getReplicaGroup(); + Model model = replicaGroup.getModel(); + + if(model.canUpdate()) + { + model.disableDisplay(); + + try + { + if(replicaGroup.isEphemeral()) + { + ReplicaGroups replicaGroups = (ReplicaGroups)replicaGroup.getParent(); + writeDescriptor(); + ReplicaGroupDescriptor descriptor = + (ReplicaGroupDescriptor)replicaGroup.getDescriptor(); + replicaGroup.destroy(); // just removes the child + + try + { + replicaGroups.tryAdd(descriptor, true); + } + catch(UpdateFailedException e) + { + // + // Add back ephemeral child + // + try + { + replicaGroups.addChild(replicaGroup, true); + } + catch(UpdateFailedException die) + { + assert false; + } + model.setSelectionPath(replicaGroup.getPath()); + + JOptionPane.showMessageDialog( + model.getMainFrame(), + e.toString(), + "Apply failed", + JOptionPane.ERROR_MESSAGE); + return; + } + + // + // Success + // + _target = replicaGroups.findChildWithDescriptor(descriptor); + } + else if(isSimpleUpdate()) + { + writeDescriptor(); + _target.getEditable().markModified(); + } + else + { + // + // Save to be able to rollback + // + Object savedDescriptor = replicaGroup.saveDescriptor(); + ReplicaGroups replicaGroups = (ReplicaGroups)replicaGroup.getParent(); + writeDescriptor(); + ReplicaGroupDescriptor descriptor = + (ReplicaGroupDescriptor)replicaGroup.getDescriptor(); + + replicaGroups.removeChild(replicaGroup, true); + try + { + replicaGroups.tryAdd(descriptor, false); + } + catch(UpdateFailedException e) + { + // + // Restore all + // + replicaGroup.restoreDescriptor(savedDescriptor); + try + { + replicaGroups.addChild(replicaGroup, true); + } + catch(UpdateFailedException die) + { + assert false; + } + model.setSelectionPath(replicaGroup.getPath()); + + JOptionPane.showMessageDialog( + model.getMainFrame(), + e.toString(), + "Apply failed", + JOptionPane.ERROR_MESSAGE); + return; + } + + // + // Success + // + replicaGroups.removeElement(replicaGroup.getId()); // replaced by brand new ReplicaGroup + + _target = replicaGroups.findChildWithDescriptor(descriptor); + model.setSelectionPath(_target.getPath()); + model.showActions(_target); + } + + _applyButton.setEnabled(false); + _discardButton.setEnabled(false); + } + finally + { + model.enableDisplay(); + } + } + } + + ReplicaGroupEditor(JFrame parentFrame) + { + _objects.setEditable(false); + + // + // _objectsButton + // + _objectsDialog = new TableDialog(parentFrame, + "Registered Objects", + "Object Identity", + "Type", true); + + Action openObjectsDialog = new AbstractAction("...") + { + public void actionPerformed(ActionEvent e) + { + java.util.Map result = _objectsDialog.show(_objectsMap, + _panel); + if(result != null) + { + updated(); + _objectsMap = result; + setObjectsField(); + } + } + }; + _objectsButton = new JButton(openObjectsDialog); + + // + // load balancing + // + _loadBalancing.addItemListener(new ItemListener() + { + public void itemStateChanged(ItemEvent e) + { + if(e.getStateChange() == ItemEvent.SELECTED) + { + updated(); + + Object item = e.getItem(); + _nReplicasLabel.setVisible(item != RETURN_ALL); + _nReplicas.setVisible(item != RETURN_ALL); + + _loadSampleLabel.setVisible(item == ADAPTIVE); + _loadSample.setVisible(item == ADAPTIVE); + } + } + }); + + // + // Associate updateListener with various fields + // + _id.getDocument().addDocumentListener(_updateListener); + _description.getDocument().addDocumentListener(_updateListener); + _nReplicas.getDocument().addDocumentListener(_updateListener); + + _loadSample.setEditable(true); + JTextField loadSampleTextField = (JTextField) + _loadSample.getEditor().getEditorComponent(); + loadSampleTextField.getDocument().addDocumentListener(_updateListener); + + } + + void writeDescriptor() + { + ReplicaGroupDescriptor descriptor = + (ReplicaGroupDescriptor)getReplicaGroup().getDescriptor(); + + descriptor.id = _id.getText(); + // descriptor.description = _description.getText(); + descriptor.objects = AdapterEditor.mapToObjectDescriptorSeq(_objectsMap); + + Object loadBalancing = _loadBalancing.getSelectedItem(); + if(loadBalancing == RETURN_ALL) + { + descriptor.loadBalancing = null; + } + else if(loadBalancing == RANDOM) + { + descriptor.loadBalancing = new RandomLoadBalancingPolicy( + _nReplicas.getText()); + } + else if(loadBalancing == ROUND_ROBIN) + { + descriptor.loadBalancing = new RoundRobinLoadBalancingPolicy( + _nReplicas.getText()); + } + else if(loadBalancing == ADAPTIVE) + { + descriptor.loadBalancing = new AdaptiveLoadBalancingPolicy( + _nReplicas.getText(), + _loadSample.getSelectedItem().toString()); + } + else + { + assert false; + } + } + + boolean isSimpleUpdate() + { + ReplicaGroupDescriptor descriptor = + (ReplicaGroupDescriptor)getReplicaGroup().getDescriptor(); + return descriptor.id.equals(_id.getText()); + } + + void append(DefaultFormBuilder builder) + { + builder.append("Replica Group ID" ); + builder.append(_id, 3); + builder.nextLine(); + + builder.append("Description"); + builder.nextLine(); + builder.append(""); + builder.nextRow(-2); + CellConstraints cc = new CellConstraints(); + JScrollPane scrollPane = new JScrollPane(_description); + builder.add(scrollPane, + cc.xywh(builder.getColumn(), builder.getRow(), 3, 3)); + builder.nextRow(2); + builder.nextLine(); + + builder.append("Registered Objects"); + builder.append(_objects, _objectsButton); + builder.nextLine(); + + builder.append("Load Balancing Policy"); + builder.append(_loadBalancing, 3); + builder.nextLine(); + _nReplicasLabel = builder.append("How many Adapters?"); + builder.append(_nReplicas, 3); + builder.nextLine(); + _loadSampleLabel = builder.append("Load Sample"); + builder.append(_loadSample, 3); + builder.nextLine(); + } + + + void setObjectsField() + { + Ice.StringHolder toolTipHolder = new Ice.StringHolder(); + + _objects.setText( + Utils.stringify(_objectsMap, "=", ", ", toolTipHolder)); + _objects.setToolTipText(toolTipHolder.value); + } + + void show(ReplicaGroup replicaGroup) + { + detectUpdates(false); + setTarget(replicaGroup); + + ReplicaGroupDescriptor descriptor = + (ReplicaGroupDescriptor)replicaGroup.getDescriptor(); + + _id.setText(descriptor.id); + //_description.setText(descriptor.description); + + _objectsMap = AdapterEditor.objectDescriptorSeqToMap(descriptor.objects); + setObjectsField(); + + if(descriptor.loadBalancing == null) + { + _loadBalancing.setSelectedItem(RETURN_ALL); + _nReplicas.setText("1"); + _loadSample.setSelectedItem("1"); + } + else if(descriptor.loadBalancing instanceof RandomLoadBalancingPolicy) + { + _loadBalancing.setSelectedItem(RANDOM); + _nReplicas.setText(descriptor.loadBalancing.nReplicas); + _loadSample.setSelectedItem("1"); + } + else if(descriptor.loadBalancing instanceof RoundRobinLoadBalancingPolicy) + { + _loadBalancing.setSelectedItem(ROUND_ROBIN); + _nReplicas.setText(descriptor.loadBalancing.nReplicas); + _loadSample.setSelectedItem("1"); + } + else if(descriptor.loadBalancing instanceof AdaptiveLoadBalancingPolicy) + { + _loadBalancing.setSelectedItem(ADAPTIVE); + _nReplicas.setText(descriptor.loadBalancing.nReplicas); + _loadSample.setSelectedItem( + ((AdaptiveLoadBalancingPolicy)descriptor.loadBalancing).loadSample); + } + else + { + assert false; + } + + _applyButton.setEnabled(replicaGroup.isEphemeral()); + _discardButton.setEnabled(replicaGroup.isEphemeral()); + detectUpdates(true); + } + + private ReplicaGroup getReplicaGroup() + { + return (ReplicaGroup)_target; + } + + static private String RETURN_ALL = "Return all"; + static private String RANDOM = "Random"; + static private String ROUND_ROBIN = "Round-robin"; + static private String ADAPTIVE = "Adaptive"; + + private JTextField _id = new JTextField(20); + private JTextArea _description = new JTextArea(3, 20); + + private JComboBox _loadBalancing = new JComboBox(new Object[] + {ADAPTIVE, RANDOM, RETURN_ALL, ROUND_ROBIN}); + + private JLabel _nReplicasLabel; + private JTextField _nReplicas = new JTextField(20); + + private JLabel _loadSampleLabel; + private JComboBox _loadSample = new JComboBox(new Object[] + {"1", "5", "15"}); + + private JTextField _objects = new JTextField(20); + private java.util.Map _objectsMap; + private TableDialog _objectsDialog; + private JButton _objectsButton; +} diff --git a/java/src/IceGrid/TreeNode/ReplicaGroups.java b/java/src/IceGrid/TreeNode/ReplicaGroups.java index 1ef6b629493..daa73b18961 100755 --- a/java/src/IceGrid/TreeNode/ReplicaGroups.java +++ b/java/src/IceGrid/TreeNode/ReplicaGroups.java @@ -9,6 +9,8 @@ package IceGrid.TreeNode;
import javax.swing.AbstractListModel;
+import javax.swing.JMenuItem;
+import javax.swing.JPopupMenu;
import IceGrid.ReplicaGroupDescriptor;
import IceGrid.Model;
@@ -29,6 +31,56 @@ class ReplicaGroups extends EditableParent return copy;
}
+ //
+ // Actions
+ //
+ public boolean[] getAvailableActions()
+ {
+ boolean[] actions = new boolean[ACTION_COUNT];
+
+ Object descriptor = _model.getClipboard();
+ if(descriptor != null)
+ {
+ actions[PASTE] = descriptor instanceof ReplicaGroupDescriptor;
+ }
+
+ actions[NEW_REPLICA_GROUP] = true;
+ return actions;
+ }
+
+ public JPopupMenu getPopupMenu()
+ {
+ if(_popup == null)
+ {
+ _popup = new PopupMenu(_model);
+ JMenuItem item = new JMenuItem(_model.getActions()[NEW_REPLICA_GROUP]);
+ item.setText("New replica group");
+ _popup.add(item);
+ }
+ return _popup;
+ }
+
+ public void newReplicaGroup()
+ {
+ ReplicaGroupDescriptor descriptor = new
+ ReplicaGroupDescriptor(
+ makeNewChildId("NewReplicaGroup"),
+ null,
+ new java.util.LinkedList());
+
+ newReplicaGroup(descriptor);
+ }
+
+ public void paste()
+ {
+ Object descriptor = _model.getClipboard();
+
+ ReplicaGroupDescriptor d = ReplicaGroup.copyDescriptor(
+ (ReplicaGroupDescriptor)descriptor);
+ d.id = makeNewChildId(d.id);
+ newReplicaGroup(d);
+ }
+
ReplicaGroups(java.util.List descriptors, Model model)
throws UpdateFailedException
{
@@ -101,5 +153,64 @@ class ReplicaGroups extends EditableParent addChildren((CommonBaseI[])newChildren.toArray(new CommonBaseI[0]));
}
+
+
+ void removeDescriptor(Object descriptor)
+ {
+ //
+ // A straight remove uses equals(), which is not the desired behavior
+ //
+ java.util.Iterator p = _descriptors.iterator();
+ while(p.hasNext())
+ {
+ if(descriptor == p.next())
+ {
+ p.remove();
+ break;
+ }
+ }
+ }
+
+ void tryAdd(ReplicaGroupDescriptor descriptor, boolean addDescriptor)
+ throws UpdateFailedException
+ {
+ try
+ {
+ addChild(createReplicaGroup(true, descriptor), true);
+ }
+ catch(UpdateFailedException e)
+ {
+ e.addParent(this);
+ throw e;
+ }
+
+ if(addDescriptor)
+ {
+ _descriptors.add(descriptor);
+ }
+ }
+
+
+ private ReplicaGroup createReplicaGroup(boolean brandNew,
+ ReplicaGroupDescriptor descriptor)
+ {
+ return new ReplicaGroup(brandNew, descriptor, _model);
+ }
+
+ private void newReplicaGroup(ReplicaGroupDescriptor descriptor)
+ {
+ ReplicaGroup replicaGroup = new ReplicaGroup(descriptor, _model);
+ try
+ {
+ addChild(replicaGroup, true);
+ }
+ catch(UpdateFailedException e)
+ {
+ assert false;
+ }
+ _model.setSelectionPath(replicaGroup.getPath());
+ }
+
private java.util.List _descriptors;
+ static private JPopupMenu _popup;
}
|