summaryrefslogtreecommitdiff
path: root/java/src/IceGrid/TreeNode/ServerInstance.java
diff options
context:
space:
mode:
authorBernard Normier <bernard@zeroc.com>2005-06-30 19:25:26 +0000
committerBernard Normier <bernard@zeroc.com>2005-06-30 19:25:26 +0000
commit685bc67bd5f7ee487ce4477a4b28815411aef2cd (patch)
tree572cfb9eed061fffc3f0d81143f005f700cd45fa /java/src/IceGrid/TreeNode/ServerInstance.java
parentmore icons (diff)
downloadice-685bc67bd5f7ee487ce4477a4b28815411aef2cd.tar.bz2
ice-685bc67bd5f7ee487ce4477a4b28815411aef2cd.tar.xz
ice-685bc67bd5f7ee487ce4477a4b28815411aef2cd.zip
Observer implementation
Diffstat (limited to 'java/src/IceGrid/TreeNode/ServerInstance.java')
-rwxr-xr-xjava/src/IceGrid/TreeNode/ServerInstance.java153
1 files changed, 123 insertions, 30 deletions
diff --git a/java/src/IceGrid/TreeNode/ServerInstance.java b/java/src/IceGrid/TreeNode/ServerInstance.java
index 2d3fac46db8..958aab0b188 100755
--- a/java/src/IceGrid/TreeNode/ServerInstance.java
+++ b/java/src/IceGrid/TreeNode/ServerInstance.java
@@ -8,14 +8,21 @@
// **********************************************************************
package IceGrid.TreeNode;
+import java.awt.Component;
import javax.swing.JPopupMenu;
import javax.swing.JPanel;
+import javax.swing.JTree;
+import javax.swing.Icon;
+import javax.swing.tree.DefaultTreeCellRenderer;
import IceGrid.TreeModelI;
import IceGrid.IceBoxDescriptor;
import IceGrid.ServerInstanceDescriptor;
import IceGrid.ServerState;
import IceGrid.TemplateDescriptor;
+import IceGrid.Utils;
+import IceGrid.Model;
+import IceGrid.ServerDynamicInfo;
class ServerInstance extends Parent
{
@@ -28,22 +35,86 @@ class ServerInstance extends Parent
{
return null;
}
+
+ public Component getTreeCellRendererComponent(
+ JTree tree,
+ Object value,
+ boolean sel,
+ boolean expanded,
+ boolean leaf,
+ int row,
+ boolean hasFocus)
+ {
+ if(_cellRenderer == null)
+ {
+ //
+ // Initialization
+ //
+ _cellRenderer = new DefaultTreeCellRenderer();
+ _icons = new Icon[7];
+ _icons[0] = Utils.getIcon("/icons/unknown.png");
+ _icons[ServerState.Inactive.value() + 1] = Utils.getIcon("/icons/inactive.png");
+ _icons[ServerState.Activating.value() + 1] = Utils.getIcon("/icons/activating.png");
+ _icons[ServerState.Active.value() + 1] = Utils.getIcon("/icons/active.png");
+ _icons[ServerState.Deactivating.value() + 1] = Utils.getIcon("/icons/deactivating.png");
+ _icons[ServerState.Destroying.value() + 1] = Utils.getIcon("/icons/destroying.png");
+ _icons[ServerState.Destroyed.value() + 1] = Utils.getIcon("/icons/destroyed.png");
+ }
+
+ //
+ // TODO: separate icons for open and close
+ //
+ if(expanded)
+ {
+ _cellRenderer.setOpenIcon(_icons[_stateIconIndex]);
+ }
+ else
+ {
+ _cellRenderer.setClosedIcon(_icons[_stateIconIndex]);
+ }
+
+ _cellRenderer.setToolTipText(_toolTip);
+ return _cellRenderer.getTreeCellRendererComponent(
+ tree, value, sel, expanded, leaf, row, hasFocus);
+ }
+
//
// Builds the server instance and all its sub-tree
//
ServerInstance(ServerInstanceDescriptor descriptor,
- NodeViewRoot nodeViewRoot,
+ Model model,
boolean fireNodeViewEvent)
{
- super(descriptor.descriptor.name);
- _state = ServerState.Inactive;
- _pid = 0;
- _nodeViewRoot = nodeViewRoot;
+ super(descriptor.descriptor.name, model);
rebuild(descriptor, fireNodeViewEvent);
}
+
+ void removeFromNode()
+ {
+ removeFromNode(true);
+ }
+
+ private void removeFromNode(boolean fireNodeViewEvent)
+ {
+ if(_serviceInstances != null)
+ {
+ _serviceInstances.unregisterAdapters();
+ }
+ if(_adapters != null)
+ {
+ _adapters.unregisterAll();
+ }
+
+ Node node = (Node)getParent(TreeModelI.NODE_VIEW);
+ if(node != null)
+ {
+ node.removeChild(_id, fireNodeViewEvent);
+ }
+ }
+
//
// Update the server instance and all its subtree
//
@@ -51,6 +122,7 @@ class ServerInstance extends Parent
boolean fireNodeViewEvent)
{
assert(newDescriptor != null);
+ removeFromNode(fireNodeViewEvent);
clearChildren();
//
@@ -75,14 +147,19 @@ class ServerInstance extends Parent
removeParent(parent);
((Parent)parent).removeChild(this);
}
-
_descriptor = newDescriptor;
+ Node node = _model.getNodeViewRoot().findNode(_descriptor.node);
+
if(_descriptor.descriptor instanceof IceBoxDescriptor)
{
_iceBoxDescriptor = (IceBoxDescriptor)_descriptor.descriptor;
- _serviceInstances = new ServiceInstances(_iceBoxDescriptor.services);
+ //
+ // We need to pass the node to register the adapters
+ //
+ _serviceInstances = new ServiceInstances(_iceBoxDescriptor.services,
+ _model, node);
addChild(_serviceInstances);
_serviceInstances.addParent(this); // no-op when newNode == true
}
@@ -91,41 +168,43 @@ class ServerInstance extends Parent
_iceBoxDescriptor = null;
}
- _adapters = new Adapters(_descriptor.descriptor.adapters, false);
+ _adapters = new Adapters(_descriptor.descriptor.adapters, _model, node);
addChild(_adapters);
_adapters.addParent(this); // no-op when newNode == true
- _dbEnvs = new DbEnvs(_descriptor.descriptor.dbEnvs, false);
+ _dbEnvs = new DbEnvs(_descriptor.descriptor.dbEnvs, _model, false);
addChild(_dbEnvs);
_dbEnvs.addParent(this); // no-op when newNode == true
if(newNode)
{
- Node node = _nodeViewRoot.findNode(_descriptor.node);
+ updateDynamicInfo(node.getServerDynamicInfo(_id), false);
addParent(node); // propagates to children
node.addChild(this, fireNodeViewEvent);
}
}
+
+ void updateDynamicInfo(ServerDynamicInfo info)
+ {
+ updateDynamicInfo(info, true);
+ }
- void updateDynamicInfo(ServerState state, int pid)
+ private void updateDynamicInfo(ServerDynamicInfo info, boolean fireEvent)
{
- if(state != _state)
- {
- _state = state;
- _pid = pid;
-
- //
- // Change the node representation in all views
- //
- fireNodeChangedEvent(this);
- }
- else
+ if(info.state != _state || info.pid != _pid)
{
- //
- // We don't show the pid on the GUI, so no need
- // to fire any event.
- //
- _pid = pid;
+ _state = info.state;
+ _pid = info.pid;
+ _toolTip = toolTip(info.state, info.pid);
+ _stateIconIndex = (_state == null ? 0 : _state.value() + 1);
+
+ if(fireEvent)
+ {
+ //
+ // Change the node representation in all views
+ //
+ fireNodeChangedEvent(this);
+ }
}
}
@@ -142,10 +221,21 @@ class ServerInstance extends Parent
return result;
}
+ private static String toolTip(ServerState state, int pid)
+ {
+ String result = (state == null ? "Unknown" : state.toString());
- private NodeViewRoot _nodeViewRoot;
- private ServerState _state;
- private int _pid;
+ if(pid != 0)
+ {
+ result += ", pid: " + pid;
+ }
+ return result;
+ }
+
+ private ServerState _state = null;
+ private int _stateIconIndex = 0;
+ private int _pid = 0;
+ private String _toolTip = toolTip(_state, _pid);
private ServerInstanceDescriptor _descriptor;
private TemplateDescriptor _templateDescriptor;
@@ -157,5 +247,8 @@ class ServerInstance extends Parent
private ServiceInstances _serviceInstances;
private Adapters _adapters;
private DbEnvs _dbEnvs;
+
+ static private DefaultTreeCellRenderer _cellRenderer;
+ static private Icon[] _icons;
}