diff options
author | Bernard Normier <bernard@zeroc.com> | 2005-10-10 22:24:31 +0000 |
---|---|---|
committer | Bernard Normier <bernard@zeroc.com> | 2005-10-10 22:24:31 +0000 |
commit | ea938944ac62d3959193d4fb6fc8f0355be4d550 (patch) | |
tree | 7d7e3ff9e84d5db9d07bb9a67baa50d1200504be /java/src | |
parent | bug fix (diff) | |
download | ice-ea938944ac62d3959193d4fb6fc8f0355be4d550.tar.bz2 ice-ea938944ac62d3959193d4fb6fc8f0355be4d550.tar.xz ice-ea938944ac62d3959193d4fb6fc8f0355be4d550.zip |
Partial node edit + more actions
Diffstat (limited to 'java/src')
-rwxr-xr-x | java/src/IceGrid/Model.java | 59 | ||||
-rwxr-xr-x | java/src/IceGrid/TreeNode/Adapter.java | 9 | ||||
-rwxr-xr-x | java/src/IceGrid/TreeNode/CommonBase.java | 15 | ||||
-rwxr-xr-x | java/src/IceGrid/TreeNode/CommonBaseI.java | 12 | ||||
-rwxr-xr-x | java/src/IceGrid/TreeNode/Node.java | 197 | ||||
-rwxr-xr-x | java/src/IceGrid/TreeNode/NodeEditor.java | 24 | ||||
-rwxr-xr-x | java/src/IceGrid/TreeNode/Nodes.java | 93 | ||||
-rwxr-xr-x | java/src/IceGrid/TreeNode/Server.java | 20 |
8 files changed, 331 insertions, 98 deletions
diff --git a/java/src/IceGrid/Model.java b/java/src/IceGrid/Model.java index 6754cbaf7a8..21ba692e440 100755 --- a/java/src/IceGrid/Model.java +++ b/java/src/IceGrid/Model.java @@ -189,6 +189,21 @@ public class Model add(toolsMenu);
//
+ // Application sub-menu
+ //
+ JMenu appMenu = new JMenu("Application");
+ toolsMenu.add(appMenu);
+ appMenu.add(_actions[CommonBase.APPLICATION_REFRESH_INSTALLATION]);
+ appMenu.add(_actions[CommonBase.APPLICATION_REFRESH_INSTALLATION_NO_SHUTDOWN]);
+
+ //
+ // Node sub-menu
+ //
+ JMenu nodeMenu = new JMenu("Node");
+ toolsMenu.add(nodeMenu);
+ nodeMenu.add(_actions[CommonBase.SHUTDOWN_NODE]);
+
+ //
// Server sub-menu
//
JMenu serverMenu = new JMenu("Server");
@@ -198,7 +213,9 @@ public class Model serverMenu.addSeparator();
serverMenu.add(_actions[CommonBase.ENABLE]);
serverMenu.add(_actions[CommonBase.DISABLE]);
-
+ serverMenu.addSeparator();
+ serverMenu.add(_actions[CommonBase.SERVER_REFRESH_INSTALLATION]);
+ serverMenu.add(_actions[CommonBase.SERVER_REFRESH_INSTALLATION_NO_SHUTDOWN]);
//
// Service sub-menu
//
@@ -1055,7 +1072,45 @@ public class Model _actionsTarget.disable();
}
};
-
+ _actions[CommonBase.SHUTDOWN_NODE] = new AbstractAction("Shutdown")
+ {
+ public void actionPerformed(ActionEvent e)
+ {
+ _actionsTarget.shutdownNode();
+ }
+ };
+ _actions[CommonBase.APPLICATION_REFRESH_INSTALLATION] =
+ new AbstractAction("Refresh installation")
+ {
+ public void actionPerformed(ActionEvent e)
+ {
+ _actionsTarget.applicationRefreshInstallation(true);
+ }
+ };
+ _actions[CommonBase.APPLICATION_REFRESH_INSTALLATION_NO_SHUTDOWN] =
+ new AbstractAction("Refresh installation (no shutdown)")
+ {
+ public void actionPerformed(ActionEvent e)
+ {
+ _actionsTarget.applicationRefreshInstallation(false);
+ }
+ };
+ _actions[CommonBase.SERVER_REFRESH_INSTALLATION] =
+ new AbstractAction("Refresh installation")
+ {
+ public void actionPerformed(ActionEvent e)
+ {
+ _actionsTarget.serverRefreshInstallation(true);
+ }
+ };
+ _actions[CommonBase.SERVER_REFRESH_INSTALLATION_NO_SHUTDOWN] =
+ new AbstractAction("Refresh installation (no shutdown)")
+ {
+ public void actionPerformed(ActionEvent e)
+ {
+ _actionsTarget.serverRefreshInstallation(false);
+ }
+ };
}
//
diff --git a/java/src/IceGrid/TreeNode/Adapter.java b/java/src/IceGrid/TreeNode/Adapter.java index 8e72f5d77fc..518d3032715 100755 --- a/java/src/IceGrid/TreeNode/Adapter.java +++ b/java/src/IceGrid/TreeNode/Adapter.java @@ -125,9 +125,14 @@ class Adapter extends Leaf _instanceId, this); createToolTip(); + + super.setParent(parent); + fireNodeChangedEvent(this); + } + else + { + super.setParent(parent); } - - super.setParent(parent); } public void clearParent() diff --git a/java/src/IceGrid/TreeNode/CommonBase.java b/java/src/IceGrid/TreeNode/CommonBase.java index 377947dc52f..87e89ee4743 100755 --- a/java/src/IceGrid/TreeNode/CommonBase.java +++ b/java/src/IceGrid/TreeNode/CommonBase.java @@ -137,7 +137,15 @@ public interface CommonBase extends TreeCellRenderer static final int ENABLE = 20;
static final int DISABLE = 21;
- static public final int ACTION_COUNT = 22;
+ static final int SHUTDOWN_NODE = 22;
+
+ static final int APPLICATION_REFRESH_INSTALLATION = 23;
+ static final int APPLICATION_REFRESH_INSTALLATION_NO_SHUTDOWN = 24;
+
+ static final int SERVER_REFRESH_INSTALLATION = 25;
+ static final int SERVER_REFRESH_INSTALLATION_NO_SHUTDOWN = 26;
+
+ static public final int ACTION_COUNT = 27;
boolean[] getAvailableActions();
@@ -167,5 +175,10 @@ public interface CommonBase extends TreeCellRenderer void enable();
void disable();
+ void shutdownNode();
+
+ void applicationRefreshInstallation(boolean shutdown);
+ void serverRefreshInstallation(boolean shutdown);
+
JPopupMenu getPopupMenu();
}
diff --git a/java/src/IceGrid/TreeNode/CommonBaseI.java b/java/src/IceGrid/TreeNode/CommonBaseI.java index f2e3894752b..07c24dcf767 100755 --- a/java/src/IceGrid/TreeNode/CommonBaseI.java +++ b/java/src/IceGrid/TreeNode/CommonBaseI.java @@ -261,6 +261,18 @@ abstract class CommonBaseI implements CommonBase {
assert false;
}
+ public void shutdownNode()
+ {
+ assert false;
+ }
+ public void applicationRefreshInstallation(boolean shutdown)
+ {
+ assert false;
+ }
+ public void serverRefreshInstallation(boolean shutdown)
+ {
+ assert false;
+ }
public JPopupMenu getPopupMenu()
{
diff --git a/java/src/IceGrid/TreeNode/Node.java b/java/src/IceGrid/TreeNode/Node.java index f2fc83c1ee4..b219ae5860c 100755 --- a/java/src/IceGrid/TreeNode/Node.java +++ b/java/src/IceGrid/TreeNode/Node.java @@ -50,8 +50,8 @@ class Node extends EditableParent implements InstanceParent p = nd.servers.iterator();
while(p.hasNext())
{
- copy.serverInstances.add(Server.copyDescriptor(
- (ServerDescriptor)p.next()));
+ copy.servers.add(Server.copyDescriptor(
+ (ServerDescriptor)p.next()));
}
return copy;
@@ -74,6 +74,7 @@ class Node extends EditableParent implements InstanceParent actions[NEW_SERVER] = true;
actions[NEW_SERVER_ICEBOX] = true;
actions[NEW_SERVER_FROM_TEMPLATE] = true;
+ actions[SHUTDOWN_NODE] = _up;
return actions;
}
@@ -95,6 +96,9 @@ class Node extends EditableParent implements InstanceParent new JMenuItem(_model.getActions()[NEW_SERVER_FROM_TEMPLATE]);
newServerFromTemplateItem.setText("New server from template");
_popup.add(newServerFromTemplateItem);
+
+ _popup.addSeparator();
+ _popup.add(_model.getActions()[SHUTDOWN_NODE]);
}
return _popup;
}
@@ -135,8 +139,60 @@ class Node extends EditableParent implements InstanceParent newServer(descriptor);
}
+ public void shutdownNode()
+ {
+ // TODO: implement!
+ }
- public Component getTreeCellRendererComponent(
+ public boolean destroy()
+ {
+ if(_parent == null)
+ {
+ return false;
+ }
+ Nodes nodes = (Nodes)_parent;
+
+ if(_ephemeral)
+ {
+ nodes.removeChild(this, true);
+ return true;
+ }
+ else if(!_inRegistry)
+ {
+ JOptionPane.showMessageDialog(
+ _model.getMainFrame(),
+ "There is no definition for this node in application '"
+ + getApplication().getId()
+ + "'; this node only appears here because it's up and running.",
+ "Nothing to destroy",
+ JOptionPane.INFORMATION_MESSAGE);
+ return false;
+ }
+ else if(_model.canUpdate())
+ {
+ Application application = getApplication();
+
+ nodes.removeDescriptor(_id);
+ nodes.removeElement(this, true);
+ if(_up)
+ {
+ try
+ {
+ Node cleanNode = new Node(false, _id, null, application, true);
+ nodes.addChild(cleanNode, true);
+ }
+ catch(UpdateFailedException e)
+ {
+ assert false;
+ }
+ }
+ return true;
+ }
+ return false;
+ }
+
+
+ public Component getTreeCellRendererComponent(
JTree tree,
Object value,
boolean sel,
@@ -211,6 +267,11 @@ class Node extends EditableParent implements InstanceParent return _descriptor;
}
+ public boolean isEphemeral()
+ {
+ return _ephemeral;
+ }
+
static private class Backup
{
java.util.TreeSet removedElements;
@@ -358,14 +419,14 @@ class Node extends EditableParent implements InstanceParent {
_up = false;
- if(_descriptor == null)
+ if(_inRegistry)
{
- return true;
+ fireNodeChangedEvent(this);
+ return false;
}
else
{
- fireNodeChangedEvent(this);
- return false;
+ return true;
}
}
@@ -461,23 +522,16 @@ class Node extends EditableParent implements InstanceParent }
- NodeDescriptor update(NodeUpdateDescriptor update, Application application)
+ void update(NodeUpdateDescriptor update, Application application)
throws UpdateFailedException
{
- if(_descriptor == null)
- {
- NodeDescriptor descriptor = new NodeDescriptor(update.variables,
- update.serverInstances,
- update.servers,
- update.loadFactor.value);
-
- init(descriptor, application, true);
- return _descriptor;
- }
-
//
- // Otherwise it's a real update
+ // Load factor
//
+ if(update.loadFactor != null)
+ {
+ _descriptor.loadFactor = update.loadFactor.value;
+ }
//
// Variables
@@ -596,7 +650,11 @@ class Node extends EditableParent implements InstanceParent updateChildren((CommonBaseI[])updatedChildren.toArray(new CommonBaseI[0]));
addChildren((CommonBaseI[])newChildren.toArray(new CommonBaseI[0]));
- return null;
+ if(!_inRegistry)
+ {
+ ((Nodes)_parent).addDescriptor(update.name, _descriptor);
+ _inRegistry = true;
+ }
}
public void commit()
@@ -608,49 +666,24 @@ class Node extends EditableParent implements InstanceParent }
}
- Node(String nodeName, Model model)
- {
- super(false, nodeName, model);
- _up = true;
- }
-
- Node(boolean brandNew, String nodeName, NodeDescriptor descriptor, Application application)
+ Node(boolean brandNew, String nodeName, NodeDescriptor descriptor,
+ Application application, boolean up)
throws UpdateFailedException
{
super(brandNew, nodeName, application.getModel());
- init(descriptor, application, false);
- }
-
- Node(Node o)
- {
- super(o);
- _descriptor = o._descriptor;
- _resolver = o._resolver;
- _origVariables = o._origVariables;
- _up = o._up;
+ _ephemeral = false;
+ _inRegistry = (descriptor != null);
+ _up = up;
- //
- // Deep-copy children
- //
- java.util.Iterator p = o._children.iterator();
- while(p.hasNext())
+ if(!_inRegistry)
{
- Server server = (Server)p.next();
- try
- {
- addChild(new Server(server));
- }
- catch(UpdateFailedException e)
- {
- assert false; // impossible
- }
+ assert !brandNew;
+ descriptor = new NodeDescriptor(new java.util.TreeMap(),
+ new java.util.LinkedList(),
+ new java.util.LinkedList(),
+ "");
}
- }
-
- void init(NodeDescriptor descriptor, Application application, boolean fireEvent)
- throws UpdateFailedException
- {
- assert _descriptor == null;
+
_descriptor = descriptor;
_origVariables = (java.util.Map)_descriptor.variables.clone();
@@ -682,24 +715,47 @@ class Node extends EditableParent implements InstanceParent ServerDescriptor serverDescriptor = (ServerDescriptor)p.next();
addChild(createServer(false, serverDescriptor, application));
}
+ }
+
+ Node(String nodeName, NodeDescriptor descriptor, Model model)
+ {
+ super(true, nodeName, model);
+ _ephemeral = true;
+ _inRegistry = false;
+ }
- if(fireEvent)
+ Node(Node o)
+ {
+ super(o);
+ _inRegistry = o._inRegistry;
+ _ephemeral = false;
+ assert o._ephemeral == false;
+
+ _descriptor = o._descriptor;
+ _resolver = o._resolver;
+ _origVariables = o._origVariables;
+ _up = o._up;
+
+ //
+ // Deep-copy children
+ //
+ java.util.Iterator p = o._children.iterator();
+ while(p.hasNext())
{
- fireStructureChangedEvent(this);
+ Server server = (Server)p.next();
+ try
+ {
+ addChild(new Server(server));
+ }
+ catch(UpdateFailedException e)
+ {
+ assert false; // impossible
+ }
}
}
-
void update() throws UpdateFailedException
{
- if(_descriptor == null)
- {
- //
- // Nothing to do
- //
- return;
- }
-
Application application = getApplication();
_resolver = new Utils.Resolver(new java.util.Map[]
@@ -1040,6 +1096,9 @@ class Node extends EditableParent implements InstanceParent private java.util.Map _origVariables;
private boolean _up = false;
+ private final boolean _ephemeral;
+
+ private boolean _inRegistry;
static private DefaultTreeCellRenderer _cellRenderer;
static private Icon _nodeUpOpen;
diff --git a/java/src/IceGrid/TreeNode/NodeEditor.java b/java/src/IceGrid/TreeNode/NodeEditor.java index 5d8bffb6d96..f7194f0caf0 100755 --- a/java/src/IceGrid/TreeNode/NodeEditor.java +++ b/java/src/IceGrid/TreeNode/NodeEditor.java @@ -67,6 +67,9 @@ class NodeEditor extends Editor builder.append("Variables", _variables);
builder.append(_variablesButton);
builder.nextLine();
+ builder.append("Load Factor");
+ builder.append(_loadFactor, 3);
+ builder.nextLine();
}
boolean isSimpleUpdate()
@@ -93,13 +96,22 @@ class NodeEditor extends Editor NodeDescriptor descriptor = (NodeDescriptor)_target.getDescriptor();
- _variablesMap = descriptor.variables;
- setVariablesField();
-
- _loadFactor.setText(descriptor.loadFactor);
-
+ if(descriptor == null)
+ {
+ _variablesMap = new java.util.TreeMap();
+ setVariablesField();
+ _loadFactor.setText("");
+ }
+ else
+ {
+ _variablesMap = descriptor.variables;
+ setVariablesField();
+
+ _loadFactor.setText(descriptor.loadFactor);
+ }
+
_applyButton.setEnabled(node.isEphemeral());
- _discardButton.setEnabled(node.isEphemeral());
+ _discardButton.setEnabled(node.isEphemeral());
detectUpdates(true);
}
diff --git a/java/src/IceGrid/TreeNode/Nodes.java b/java/src/IceGrid/TreeNode/Nodes.java index d9d3a4d0afe..d245fb92a4b 100755 --- a/java/src/IceGrid/TreeNode/Nodes.java +++ b/java/src/IceGrid/TreeNode/Nodes.java @@ -8,6 +8,9 @@ // **********************************************************************
package IceGrid.TreeNode;
+import javax.swing.JMenuItem;
+import javax.swing.JPopupMenu;
+
import IceGrid.ApplicationDescriptor;
import IceGrid.NodeDescriptor;
import IceGrid.TreeModelI;
@@ -21,32 +24,75 @@ import IceGrid.ServerState; public class Nodes extends EditableParent
{
+ public boolean[] getAvailableActions()
+ {
+ boolean[] actions = new boolean[ACTION_COUNT];
+
+ Object descriptor = _model.getClipboard();
+ if(descriptor != null)
+ {
+ actions[PASTE] = descriptor instanceof NodeDescriptor;
+ }
+ actions[NEW_NODE] = true;
+ return actions;
+ }
+
+ public JPopupMenu getPopupMenu()
+ {
+ if(_popup == null)
+ {
+ _popup = new PopupMenu(_model);
+
+ JMenuItem newNodeItem = new JMenuItem(_model.getActions()[NEW_NODE]);
+ newNodeItem.setText("New node");
+ _popup.add(newNodeItem);
+ }
+ return _popup;
+ }
+
+ public void paste()
+ {
+ Object descriptor = _model.getClipboard();
+ newNode(Node.copyDescriptor((NodeDescriptor)descriptor));
+ }
+ public void newNode()
+ {
+ newNode(new NodeDescriptor(
+ new java.util.TreeMap(),
+ new java.util.LinkedList(),
+ new java.util.LinkedList(),
+ "1.0"
+ ));
+ }
+
public Nodes(java.util.Map nodeMap, Application application)
throws UpdateFailedException
{
super(false, "Nodes", application.getModel());
_descriptors = nodeMap;
+ java.util.Set nodesUp = _model.getRoot().getNodesUp();
+
java.util.Iterator p = nodeMap.entrySet().iterator();
while(p.hasNext())
{
java.util.Map.Entry entry = (java.util.Map.Entry)p.next();
String nodeName = (String)entry.getKey();
NodeDescriptor nodeDescriptor = (NodeDescriptor)entry.getValue();
- addChild(new Node(false, nodeName, nodeDescriptor, application));
+ addChild(new Node(false, nodeName, nodeDescriptor,
+ application, nodesUp.contains(nodeName)));
}
//
// Also create a Node for each node that is up
//
- Root root = _model.getRoot();
- p = root.getNodesUp().iterator();
+ p = nodesUp.iterator();
while(p.hasNext())
{
String nodeName = (String)p.next();
if(findChild(nodeName) == null)
{
- addChild(new Node(nodeName, application.getModel()));
+ addChild(new Node(false, nodeName, null, application, true));
}
}
}
@@ -166,6 +212,7 @@ public class Nodes extends EditableParent {
NodeUpdateDescriptor update = (NodeUpdateDescriptor)p.next();
Node node = findNode(update.name);
+
if(node == null)
{
NodeDescriptor nodeDescriptor = new NodeDescriptor(update.variables,
@@ -173,16 +220,12 @@ public class Nodes extends EditableParent update.servers,
update.loadFactor.value);
_descriptors.put(update.name, nodeDescriptor);
- node = new Node(false, update.name, nodeDescriptor, application);
+ node = new Node(false, update.name, nodeDescriptor, application, false);
newChildren.add(node);
}
else
{
- NodeDescriptor nodeDescriptor = node.update(update, application);
- if(nodeDescriptor != null)
- {
- _descriptors.put(update.name, nodeDescriptor);
- }
+ node.update(update, application);
}
}
@@ -194,9 +237,9 @@ public class Nodes extends EditableParent Node node = findNode(nodeName);
if(node == null)
{
- node = new Node(nodeName, _model);
try
{
+ node = new Node(false, nodeName, null, getApplication(), true);
addChild(node, true);
}
catch(UpdateFailedException e)
@@ -246,5 +289,33 @@ public class Nodes extends EditableParent return result;
}
+ void addDescriptor(String nodeName, NodeDescriptor descriptor)
+ {
+ _descriptors.put(nodeName, descriptor);
+ }
+ void removeDescriptor(String nodeName)
+ {
+ _descriptors.remove(nodeName);
+ }
+
+
+ private void newNode(NodeDescriptor descriptor)
+ {
+ String name = makeNewChildId("NewNode");
+
+ Node node = new Node(name, descriptor, _model);
+ try
+ {
+ addChild(node, true);
+ }
+ catch(UpdateFailedException e)
+ {
+ assert false;
+ }
+ _model.setSelectionPath(node.getPath());
+ }
+
+
private java.util.Map _descriptors;
+ static private JPopupMenu _popup;
}
diff --git a/java/src/IceGrid/TreeNode/Server.java b/java/src/IceGrid/TreeNode/Server.java index 053dd961d1c..4af0729545e 100755 --- a/java/src/IceGrid/TreeNode/Server.java +++ b/java/src/IceGrid/TreeNode/Server.java @@ -193,6 +193,9 @@ class Server extends EditableParent _popup.addSeparator();
_popup.add(_model.getActions()[ENABLE]);
_popup.add(_model.getActions()[DISABLE]);
+ _popup.addSeparator();
+ _popup.add(_model.getActions()[SERVER_REFRESH_INSTALLATION]);
+ _popup.add(_model.getActions()[SERVER_REFRESH_INSTALLATION_NO_SHUTDOWN]);
}
return _popup;
}
@@ -409,7 +412,6 @@ class Server extends EditableParent return true;
}
return false;
-
}
@@ -590,13 +592,17 @@ class Server extends EditableParent if(!_ephemeral)
{
Ice.IntHolder pid = new Ice.IntHolder();
- _state = _model.getRoot().registerServer(_resolver.find("node"),
- _id,
- this,
- pid);
- _pid = pid.value;
+ ServerState state = _model.getRoot().registerServer(_resolver.find("node"),
+ _id,
+ this,
+ pid);
+ super.setParent(parent);
+ updateDynamicInfo(state, pid.value);
+ }
+ else
+ {
+ super.setParent(parent);
}
- super.setParent(parent);
}
public void clearParent()
|