summaryrefslogtreecommitdiff
path: root/java/src
diff options
context:
space:
mode:
authorBernard Normier <bernard@zeroc.com>2005-06-25 16:48:42 +0000
committerBernard Normier <bernard@zeroc.com>2005-06-25 16:48:42 +0000
commit68c4c2ad068c5647bef41659bb16811374d1fedc (patch)
treefee0b1ea8e3d0f32c53172e8a7e591eba7342db6 /java/src
parentAdded minimal client to CE build (diff)
downloadice-68c4c2ad068c5647bef41659bb16811374d1fedc.tar.bz2
ice-68c4c2ad068c5647bef41659bb16811374d1fedc.tar.xz
ice-68c4c2ad068c5647bef41659bb16811374d1fedc.zip
Fixed build
Diffstat (limited to 'java/src')
-rwxr-xr-xjava/src/IceGrid/Model.java105
-rwxr-xr-xjava/src/IceGrid/RegistryObserverI.java115
-rwxr-xr-xjava/src/IceGrid/SessionKeeper.java41
-rwxr-xr-xjava/src/IceGrid/TreeModelI.java37
-rwxr-xr-xjava/src/IceGrid/TreeNode/Adapter.java6
-rwxr-xr-xjava/src/IceGrid/TreeNode/Adapters.java17
-rwxr-xr-xjava/src/IceGrid/TreeNode/Application.java92
-rwxr-xr-xjava/src/IceGrid/TreeNode/ApplicationViewRoot.java61
-rwxr-xr-xjava/src/IceGrid/TreeNode/CommonBase.java5
-rwxr-xr-xjava/src/IceGrid/TreeNode/CommonBaseI.java71
-rwxr-xr-xjava/src/IceGrid/TreeNode/DbEnv.java7
-rwxr-xr-xjava/src/IceGrid/TreeNode/DbEnvs.java16
-rwxr-xr-xjava/src/IceGrid/TreeNode/Leaf.java4
-rwxr-xr-xjava/src/IceGrid/TreeNode/Node.java22
-rwxr-xr-xjava/src/IceGrid/TreeNode/NodeVar.java7
-rwxr-xr-xjava/src/IceGrid/TreeNode/NodeVars.java51
-rwxr-xr-xjava/src/IceGrid/TreeNode/NodeViewRoot.java91
-rwxr-xr-xjava/src/IceGrid/TreeNode/Parent.java268
-rwxr-xr-xjava/src/IceGrid/TreeNode/ServerInstance.java32
-rwxr-xr-xjava/src/IceGrid/TreeNode/ServerInstances.java64
-rwxr-xr-xjava/src/IceGrid/TreeNode/ServerTemplate.java25
-rwxr-xr-xjava/src/IceGrid/TreeNode/ServerTemplates.java49
-rwxr-xr-xjava/src/IceGrid/TreeNode/ServiceInstance.java21
-rwxr-xr-xjava/src/IceGrid/TreeNode/ServiceInstances.java25
-rwxr-xr-xjava/src/IceGrid/TreeNode/ServiceTemplate.java16
-rwxr-xr-xjava/src/IceGrid/TreeNode/ServiceTemplates.java41
26 files changed, 979 insertions, 310 deletions
diff --git a/java/src/IceGrid/Model.java b/java/src/IceGrid/Model.java
index 9d63a515658..2bbd9f110ae 100755
--- a/java/src/IceGrid/Model.java
+++ b/java/src/IceGrid/Model.java
@@ -93,48 +93,93 @@ class Model
// -- adapters, databases (see above)
-
//
- // WARNING: The following methods are called by the Server thread pool (or client
- // thread pool for bidir connections), not by the UI thread!
+ // The following methods all run in the UI thread
//
- void registryInit(int serial, final ApplicationDescriptor[] applications, String[] nodesUp)
+
+ void registryInit(int serial, final java.util.List applications, String[] nodesUp)
{
assert(_latestSerial == -1);
_latestSerial = serial;
- SwingUtilities.invokeLater(new Runnable()
- {
- public void run()
- {
- NodeViewRoot nodeViewRoot =
- (NodeViewRoot)TreeModelI.getTreeModel(TreeModelI.NODE_VIEW).getRoot();
-
- nodeViewRoot.init(applications);
-
- ApplicationViewRoot applicationViewRoot =
- (ApplicationViewRoot)TreeModelI.getTreeModel(TreeModelI.APPLICATION_VIEW).getRoot();
-
- applicationViewRoot.init(applications);
-
- }
- });
+ NodeViewRoot nodeViewRoot =
+ (NodeViewRoot)TreeModelI.getTreeModel(TreeModelI.NODE_VIEW).getRoot();
+ nodeViewRoot.init(applications);
+
+ ApplicationViewRoot applicationViewRoot =
+ (ApplicationViewRoot)TreeModelI.getTreeModel(TreeModelI.APPLICATION_VIEW).getRoot();
+ applicationViewRoot.init(applications);
}
- void applicationAdded(int serial, ApplicationDescriptor desc)
+ void applicationAdded(ApplicationDescriptor desc)
{
+ NodeViewRoot nodeViewRoot =
+ (NodeViewRoot)TreeModelI.getTreeModel(TreeModelI.NODE_VIEW).getRoot();
+ nodeViewRoot.put(desc.name, desc.nodes, true);
+
+ ApplicationViewRoot applicationViewRoot =
+ (ApplicationViewRoot)TreeModelI.getTreeModel(TreeModelI.APPLICATION_VIEW).getRoot();
+ applicationViewRoot.applicationAdded(desc);
}
- void applicationRemoved(int serial, String name)
+ void applicationRemoved(String name)
{
+ NodeViewRoot nodeViewRoot =
+ (NodeViewRoot)TreeModelI.getTreeModel(TreeModelI.NODE_VIEW).getRoot();
+ nodeViewRoot.remove(name);
+
+
+ ApplicationViewRoot applicationViewRoot =
+ (ApplicationViewRoot)TreeModelI.getTreeModel(TreeModelI.APPLICATION_VIEW).getRoot();
+ applicationViewRoot.applicationRemoved(name);
}
+ void applicationSynced(ApplicationDescriptor desc)
+ {
+ NodeViewRoot nodeViewRoot =
+ (NodeViewRoot)TreeModelI.getTreeModel(TreeModelI.NODE_VIEW).getRoot();
+ nodeViewRoot.remove(desc.name);
+ nodeViewRoot.put(desc.name, desc.nodes, true);
- //
- // Runs in UI thread
- //
- void lostSession()
+ ApplicationViewRoot applicationViewRoot =
+ (ApplicationViewRoot)TreeModelI.getTreeModel(TreeModelI.APPLICATION_VIEW).getRoot();
+
+ applicationViewRoot.applicationSynced(desc);
+ }
+
+ void applicationUpdated(ApplicationUpdateDescriptor desc)
+ {
+ NodeViewRoot nodeViewRoot =
+ (NodeViewRoot)TreeModelI.getTreeModel(TreeModelI.NODE_VIEW).getRoot();
+
+ for(int i = 0; i < desc.removeNodes.length; ++i)
+ {
+ nodeViewRoot.remove(desc.name, desc.removeNodes[i]);
+ }
+ nodeViewRoot.put(desc.name, desc.nodes, true);
+
+ ApplicationViewRoot applicationViewRoot =
+ (ApplicationViewRoot)TreeModelI.getTreeModel(TreeModelI.APPLICATION_VIEW).getRoot();
+
+ applicationViewRoot.applicationUpdated(desc);
+ }
+
+ boolean updateSerial(int serial)
+ {
+ if(serial == _latestSerial + 1)
+ {
+ _latestSerial = serial;
+ return true;
+ }
+ else
+ {
+ return false;
+ }
+ }
+
+
+ void sessionLost()
{
_latestSerial = -1;
@@ -149,6 +194,9 @@ class Model
applicationViewRoot.clear();
}
+
+
+
boolean save()
{
return true;
@@ -159,6 +207,11 @@ class Model
return true;
}
+
+
+
+
+
private int _latestSerial = -1;
}
diff --git a/java/src/IceGrid/RegistryObserverI.java b/java/src/IceGrid/RegistryObserverI.java
index 623ed8b2ee7..de9e5a084e4 100755
--- a/java/src/IceGrid/RegistryObserverI.java
+++ b/java/src/IceGrid/RegistryObserverI.java
@@ -8,14 +8,20 @@
// **********************************************************************
package IceGrid;
+import javax.swing.SwingUtilities;
+
class RegistryObserverI extends _RegistryObserverDisp
{
- RegistryObserverI(Model model)
+ RegistryObserverI(SessionKeeper sessionKeeper, Model model)
{
+ _sessionKeeper = sessionKeeper;
_model = model;
}
+ //
+ // Runs in the UI thread
+ //
synchronized void waitForInit()
{
//
@@ -41,53 +47,126 @@ class RegistryObserverI extends _RegistryObserverDisp
}
}
- if(!_initialized)
+ if(_initialized)
+ {
+ _model.registryInit(_serial, _applications, _nodesUp);
+ }
+ else
{
throw new Ice.TimeoutException();
}
}
- public void init(int serial, ApplicationDescriptor[] applications, String[] nodesUp, Ice.Current current)
+ public synchronized void init(int serial, java.util.LinkedList applications,
+ String[] nodesUp, Ice.Current current)
{
- synchronized(this)
- {
- _initialized = true;
- notify();
- }
-
- _model.registryInit(serial, applications, nodesUp);
+ _initialized = true;
+ _serial = serial;
+ _applications = applications;
+ _nodesUp = nodesUp;
+ notify();
}
- public void applicationAdded(int serial, ApplicationDescriptor desc, Ice.Current current)
+ public void applicationAdded(final int serial, final ApplicationDescriptor desc,
+ Ice.Current current)
{
- _model.applicationAdded(serial, desc);
+ SwingUtilities.invokeLater(new Runnable()
+ {
+ public void run()
+ {
+ if(_model.updateSerial(serial))
+ {
+ _model.applicationAdded(desc);
+ }
+ else
+ {
+ _sessionKeeper.sessionLost(
+ "Received application update (new application) out of sequence");
+ }
+ }
+ });
}
- public void applicationRemoved(int serial, String name, Ice.Current current)
+ public void applicationRemoved(final int serial, final String name,
+ final Ice.Current current)
{
- _model.applicationRemoved(serial, name);
+ SwingUtilities.invokeLater(new Runnable()
+ {
+ public void run()
+ {
+ if(_model.updateSerial(serial))
+ {
+ _model.applicationRemoved(name);
+ }
+ else
+ {
+ _sessionKeeper.sessionLost(
+ "Received application update (application removed) out of sequence");
+ }
+ }
+ });
}
- public void applicationSynced(int serial, ApplicationDescriptor desc, Ice.Current current)
+ public void applicationSynced(final int serial, final ApplicationDescriptor desc,
+ Ice.Current current)
{
-
+ SwingUtilities.invokeLater(new Runnable()
+ {
+ public void run()
+ {
+ if(_model.updateSerial(serial))
+ {
+ _model.applicationSynced(desc);
+ }
+ else
+ {
+ _sessionKeeper.sessionLost(
+ "Received application update (application synced) out of sequence");
+ }
+ }
+ });
}
- public void applicationUpdated(int serial, ApplicationUpdateDescriptor desc, Ice.Current current)
+ public void applicationUpdated(final int serial, final ApplicationUpdateDescriptor desc,
+ Ice.Current current)
{
-
+ SwingUtilities.invokeLater(new Runnable()
+ {
+ public void run()
+ {
+ if(_model.updateSerial(serial))
+ {
+ _model.applicationUpdated(desc);
+ }
+ else
+ {
+ _sessionKeeper.sessionLost("Received application update out of sequence");
+ }
+ }
+ });
}
public void nodeUp(String name, Ice.Current current)
{
+
}
+
public void nodeDown(String name, Ice.Current current)
{
}
private Model _model;
+ private SessionKeeper _sessionKeeper;
private boolean _initialized = false;
+
+ //
+ // Values given to init
+ //
+ private int _serial;
+ private java.util.LinkedList _applications;
+ private String[] _nodesUp;
+
};
diff --git a/java/src/IceGrid/SessionKeeper.java b/java/src/IceGrid/SessionKeeper.java
index cdf56ec811c..736766113c0 100755
--- a/java/src/IceGrid/SessionKeeper.java
+++ b/java/src/IceGrid/SessionKeeper.java
@@ -256,19 +256,7 @@ class SessionKeeper
{
public void run()
{
- destroyObservers();
- _model.lostSession();
-
- JOptionPane.showMessageDialog(
- _parent,
- "Failed to contact the IceGrid registry: " + e.toString(),
- "Session lost",
- JOptionPane.ERROR_MESSAGE);
-
- //
- // Offer New Connection dialog
- //
- createSession(false);
+ sessionLost("Failed to contact the IceGrid registry: " + e.toString());
}
});
}
@@ -366,12 +354,11 @@ class SessionKeeper
//
// Discard session
//
- _model.lostSession();
destroyObservers();
releaseSession();
+ _model.sessionLost();
}
-
Cursor oldCursor = parent.getCursor();
try
@@ -479,6 +466,28 @@ class SessionKeeper
return true;
}
+
+ //
+ // Runs in UI thread
+ //
+ void sessionLost(String message)
+ {
+ destroyObservers();
+ releaseSession();
+ _model.sessionLost();
+
+ JOptionPane.showMessageDialog(
+ _parent,
+ message,
+ "Session lost",
+ JOptionPane.ERROR_MESSAGE);
+
+ //
+ // Offer new Connection dialog
+ //
+ createSession(false);
+ }
+
//
// Runs in UI thread
//
@@ -529,7 +538,7 @@ class SessionKeeper
_nodeObserverIdentity.category = "nodeObserver";
RegistryObserverI registryObserverServant = new RegistryObserverI(
- _model);
+ this, _model);
RegistryObserverPrx registryObserver =
RegistryObserverPrxHelper.uncheckedCast(
diff --git a/java/src/IceGrid/TreeModelI.java b/java/src/IceGrid/TreeModelI.java
index e476aab9b24..092abc89e88 100755
--- a/java/src/IceGrid/TreeModelI.java
+++ b/java/src/IceGrid/TreeModelI.java
@@ -110,7 +110,7 @@ public class TreeModelI implements TreeModel
_root = root;
}
- public void fireNodesChanged(TreeModelEvent e)
+ public void fireNodesChangedEvent(TreeModelEvent e)
{
// Guaranteed to return a non-null array
Object[] listeners = _listenerList.getListenerList();
@@ -124,7 +124,7 @@ public class TreeModelI implements TreeModel
}
}
- public void fireStructureChanged(TreeModelEvent e)
+ public void fireStructureChangedEvent(TreeModelEvent e)
{
// Guaranteed to return a non-null array
Object[] listeners = _listenerList.getListenerList();
@@ -137,12 +137,37 @@ public class TreeModelI implements TreeModel
}
}
}
+
+ public void fireNodesInsertedEvent(TreeModelEvent e)
+ {
+ // Guaranteed to return a non-null array
+ Object[] listeners = _listenerList.getListenerList();
+
+ for(int i = listeners.length - 2; i >=0 ; i -= 2)
+ {
+ if (listeners[i] == TreeModelListener.class)
+ {
+ ((TreeModelListener)listeners[i + 1]).treeNodesInserted(e);
+ }
+ }
+ }
+ public void fireNodesRemovedEvent(TreeModelEvent e)
+ {
+ System.err.println("TreeModeI.fireNodesRemovedEvent");
- //
- // TODO: add methods to fire events
- //
-
+ // Guaranteed to return a non-null array
+ Object[] listeners = _listenerList.getListenerList();
+
+ for(int i = listeners.length - 2; i >=0 ; i -= 2)
+ {
+ if (listeners[i] == TreeModelListener.class)
+ {
+ System.err.println("firing");
+ ((TreeModelListener)listeners[i + 1]).treeNodesRemoved(e);
+ }
+ }
+ }
private Object _root;
private EventListenerList _listenerList = new EventListenerList();
diff --git a/java/src/IceGrid/TreeNode/Adapter.java b/java/src/IceGrid/TreeNode/Adapter.java
index ff557a0856d..405a2b22cca 100755
--- a/java/src/IceGrid/TreeNode/Adapter.java
+++ b/java/src/IceGrid/TreeNode/Adapter.java
@@ -14,15 +14,11 @@ class Adapter extends Leaf
{
Adapter(AdapterDescriptor descriptor, boolean inTemplate)
{
+ super(descriptor.name);
_descriptor = descriptor;
_inTemplate = inTemplate;
}
- public String toString()
- {
- return _descriptor.name;
- }
-
private AdapterDescriptor _descriptor;
private boolean _inTemplate;
}
diff --git a/java/src/IceGrid/TreeNode/Adapters.java b/java/src/IceGrid/TreeNode/Adapters.java
index 655ea272e66..d6067de149f 100755
--- a/java/src/IceGrid/TreeNode/Adapters.java
+++ b/java/src/IceGrid/TreeNode/Adapters.java
@@ -12,23 +12,22 @@ import IceGrid.AdapterDescriptor;
class Adapters extends Parent
{
- Adapters(AdapterDescriptor[] descriptors, boolean inTemplate)
+ Adapters(java.util.List descriptors, boolean inTemplate)
{
+ super("Adapters");
+
_descriptors = descriptors;
_inTemplate = inTemplate;
- for(int i = 0; i < _descriptors.length; ++i)
+ java.util.Iterator p = _descriptors.iterator();
+ while(p.hasNext())
{
- Adapter child = new Adapter(_descriptors[i], _inTemplate);
+ AdapterDescriptor descriptor = (AdapterDescriptor)p.next();
+ Adapter child = new Adapter(descriptor, _inTemplate);
addChild(child);
}
}
- public String toString()
- {
- return "Adapters";
- }
-
- private AdapterDescriptor[] _descriptors;
+ private java.util.List _descriptors;
private boolean _inTemplate;
}
diff --git a/java/src/IceGrid/TreeNode/Application.java b/java/src/IceGrid/TreeNode/Application.java
index 84ee0c1f9f5..00fa0b3e397 100755
--- a/java/src/IceGrid/TreeNode/Application.java
+++ b/java/src/IceGrid/TreeNode/Application.java
@@ -9,57 +9,93 @@
package IceGrid.TreeNode;
import IceGrid.ApplicationDescriptor;
+import IceGrid.ApplicationUpdateDescriptor;
class Application extends Parent
{
//
// Builds the application and all its subtrees
//
- Application(ApplicationDescriptor descriptor, NodeViewRoot nodeViewRoot)
+ Application(ApplicationDescriptor descriptor, NodeViewRoot nodeViewRoot,
+ boolean fireEvent)
{
- _nodeViewRoot = nodeViewRoot;
- update(descriptor, false);
- }
+ super(descriptor.name);
- void update(ApplicationDescriptor newDescriptor, boolean fireEvent)
- {
- assert(newDescriptor != null);
- clearChildren();
-
- _descriptor = newDescriptor;
+ _descriptor = descriptor;
+ _nodeViewRoot = nodeViewRoot;
- _serverTemplates = new ServerTemplates(_descriptor.serverTemplates, _descriptor.serviceTemplates);
+ _serverTemplates = new ServerTemplates(_descriptor.serverTemplates);
addChild(_serverTemplates);
- _serverTemplates.addParent(this); // no-op when this is not yet attached to its root
- // (i.e. during construction)
_serviceTemplates = new ServiceTemplates(_descriptor.serviceTemplates);
addChild(_serviceTemplates);
- _serviceTemplates.addParent(this);
_nodeVars = new NodeVars(_descriptor.nodes);
addChild(_nodeVars);
- _nodeVars.addParent(this);
-
+
_serverInstances = new ServerInstances(_descriptor.servers,
- _descriptor.serverTemplates,
- _descriptor.serviceTemplates,
- _nodeViewRoot);
+ _nodeViewRoot,
+ fireEvent);
addChild(_serverInstances);
- _serverInstances.addParent(this);
+ }
- if(fireEvent)
+ void update(ApplicationUpdateDescriptor desc)
+ {
+ //
+ // Variables
+ //
+ for(int i = 0; i < desc.removeVariables.length; ++i)
{
- // fireStructureChanged(this);
+ _descriptor.variables.remove(desc.removeVariables[i]);
}
- }
-
- public String toString()
- {
- return _descriptor.name;
+ _descriptor.variables.putAll(desc.variables);
+
+ //
+ // TODO: comment
+ //
+
+
+ //
+ // Server templates
+ //
+ for(int i = 0; i < desc.removeServerTemplates.length; ++i)
+ {
+ _descriptor.serverTemplates.remove(desc.removeServerTemplates[i]);
+ }
+ _descriptor.serverTemplates.putAll(desc.serverTemplates);
+ _serverTemplates.update(desc.serverTemplates, desc.removeServerTemplates);
+
+ //
+ // Service templates
+ //
+ for(int i = 0; i < desc.removeServiceTemplates.length; ++i)
+ {
+ _descriptor.serviceTemplates.remove(desc.removeServiceTemplates[i]);
+ }
+ _descriptor.serviceTemplates.putAll(desc.serviceTemplates);
+ _serviceTemplates.update(desc.serviceTemplates, desc.removeServiceTemplates);
+
+ //
+ // Nodes
+ //
+ for(int i = 0; i < desc.removeNodes.length; ++i)
+ {
+ _descriptor.nodes.remove(desc.removeNodes[i]);
+ }
+ _descriptor.nodes.addAll(desc.nodes);
+ _nodeVars.update(desc.nodes, desc.removeNodes);
+
+ //
+ // Servers
+ //
+ for(int i = 0; i < desc.removeServers.length; ++i)
+ {
+ _descriptor.servers.remove(desc.removeServers[i]);
+ }
+ _descriptor.servers.addAll(desc.servers);
+ _serverInstances.update(desc.servers, desc.removeServers);
}
-
private ApplicationDescriptor _descriptor;
private NodeViewRoot _nodeViewRoot;
diff --git a/java/src/IceGrid/TreeNode/ApplicationViewRoot.java b/java/src/IceGrid/TreeNode/ApplicationViewRoot.java
index 9b25db96042..73e66b21c17 100755
--- a/java/src/IceGrid/TreeNode/ApplicationViewRoot.java
+++ b/java/src/IceGrid/TreeNode/ApplicationViewRoot.java
@@ -9,28 +9,29 @@
package IceGrid.TreeNode;
import IceGrid.ApplicationDescriptor;
+import IceGrid.ApplicationUpdateDescriptor;
import IceGrid.TreeModelI;
public class ApplicationViewRoot extends Parent
{
public ApplicationViewRoot(NodeViewRoot nodeViewRoot)
{
- super(TreeModelI.APPLICATION_VIEW);
+ super("Applications", TreeModelI.APPLICATION_VIEW);
_nodeViewRoot = nodeViewRoot;
}
//
// The node view root must be (re-)initialized before the application view root
//
- public void init(ApplicationDescriptor[] descriptors)
+ public void init(java.util.List descriptors)
{
assert(_children.size() == 0);
-
- _descriptors = descriptors;
-
- for(int i = 0; i < descriptors.length; ++i)
+
+ java.util.Iterator p = descriptors.iterator();
+ while(p.hasNext())
{
- Application child = new Application(descriptors[i], _nodeViewRoot);
+ ApplicationDescriptor descriptor = (ApplicationDescriptor)p.next();
+ Application child = new Application(descriptor, _nodeViewRoot, false);
addChild(child);
child.addParent(this);
}
@@ -38,22 +39,54 @@ public class ApplicationViewRoot extends Parent
//
// Fire structure change for both application and node views
//
- fireStructureChanged(this);
- _nodeViewRoot.fireStructureChanged(this);
+ fireStructureChangedEvent(this);
+ _nodeViewRoot.fireStructureChangedEvent(this);
}
public void clear()
{
clearChildren();
- _descriptors = null;
- fireStructureChanged(this);
+ fireStructureChangedEvent(this);
+ }
+
+ public void applicationAdded(ApplicationDescriptor desc)
+ {
+ applicationAdded(desc, true);
+ }
+
+ private Application applicationAdded(ApplicationDescriptor desc, boolean fireEvent)
+ {
+ //
+ // This always fires insert events on the node view for the new server
+ // instances
+ //
+ Application child = new Application(desc, _nodeViewRoot, true);
+ addChild(child, fireEvent);
+ return child;
}
- public String toString()
+ public void applicationRemoved(String name)
+ {
+ applicationRemoved(name, true);
+ }
+
+ private void applicationRemoved(String name, boolean fireEvent)
+ {
+ removeChild(name, fireEvent);
+ }
+
+ public void applicationSynced(ApplicationDescriptor desc)
+ {
+ applicationRemoved(desc.name, false);
+ Application child = applicationAdded(desc, false);
+ child.fireStructureChangedEvent(this);
+ }
+
+ public void applicationUpdated(ApplicationUpdateDescriptor desc)
{
- return "Applications";
+ Application application = (Application)findChild(desc.name);
+ application.update(desc);
}
- private ApplicationDescriptor[] _descriptors;
private NodeViewRoot _nodeViewRoot;
}
diff --git a/java/src/IceGrid/TreeNode/CommonBase.java b/java/src/IceGrid/TreeNode/CommonBase.java
index 4329a00520f..3a7eb89a642 100755
--- a/java/src/IceGrid/TreeNode/CommonBase.java
+++ b/java/src/IceGrid/TreeNode/CommonBase.java
@@ -24,6 +24,11 @@ public interface CommonBase
boolean isLeaf();
//
+ // Unique within the scope of each parent
+ //
+ String getId();
+
+ //
// Add this node as a parent. This operation does something
// only when newParent a root node or was attached to a
// root node using addParent().
diff --git a/java/src/IceGrid/TreeNode/CommonBaseI.java b/java/src/IceGrid/TreeNode/CommonBaseI.java
index 920f7fce727..5d39c01ec1a 100755
--- a/java/src/IceGrid/TreeNode/CommonBaseI.java
+++ b/java/src/IceGrid/TreeNode/CommonBaseI.java
@@ -23,6 +23,16 @@ abstract class CommonBaseI implements CommonBase
public CommonBase parent;
}
+ public String toString()
+ {
+ return _id;
+ }
+
+ public String getId()
+ {
+ return _id;
+ }
+
public void addParent(CommonBase parent)
{
//
@@ -103,7 +113,7 @@ abstract class CommonBaseI implements CommonBase
//
// Fires a nodesChanged event with this node for this specific view
//
- void fireNodesChanged(Object source, int view)
+ void fireNodeChangedEvent(Object source, int view)
{
//
// Bug if I am not in this view
@@ -130,25 +140,25 @@ abstract class CommonBaseI implements CommonBase
childIndices[0] = _parents[view].getIndex(this);
event = new TreeModelEvent(source, _parents[view].getPath(view), childIndices, children);
}
- TreeModelI.getTreeModel(view).fireNodesChanged(event);
+ TreeModelI.getTreeModel(view).fireNodesChangedEvent(event);
}
//
// Fires a nodesChanged event with this node for all my views (usually just one)
//
- void fireNodesChanged(Object source)
+ void fireNodeChangedEvent(Object source)
{
for(int i = 0; i < TreeModelI.VIEW_COUNT; ++i)
{
if(_paths[i] != null)
{
- fireNodesChanged(source, i);
+ fireNodeChangedEvent(source, i);
}
}
}
- void fireStructureChanged(Object source, int view)
+ void fireStructureChangedEvent(Object source, int view)
{
//
// Bug if I am not in this view
@@ -156,60 +166,46 @@ abstract class CommonBaseI implements CommonBase
assert(_paths[view] != null);
TreeModelEvent event = new TreeModelEvent(source, _paths[view]);
- TreeModelI.getTreeModel(view).fireStructureChanged(event);
+ TreeModelI.getTreeModel(view).fireStructureChangedEvent(event);
}
- void fireStructureChanged(Object source)
+ void fireStructureChangedEvent(Object source)
{
for(int i = 0; i < TreeModelI.VIEW_COUNT; ++i)
{
if(_paths[i] != null)
{
- fireStructureChanged(source, i);
+ fireStructureChangedEvent(source, i);
}
}
}
- static String templateLabel(String templateName, String[] parameters)
+ static String templateLabel(String templateName, java.util.Collection col)
{
String result = templateName + "<";
- int i = 0;
- while(i < parameters.length)
+
+ java.util.Iterator p = col.iterator();
+ boolean firstElement = true;
+ while(p.hasNext())
{
- result += parameters[i++];
- if(i < parameters.length)
+ if(firstElement)
{
- result += ", ";
+ firstElement = false;
}
- }
- result += ">";
- return result;
- }
-
- static String templateLabel(String templateName, String[] parameters, java.util.Map parameterValues)
- {
- String result = templateName + "<";
- int i = 0;
- while(i < parameters.length)
- {
- String value = (String)parameterValues.get(parameters[i]);
- if(value == null)
- {
- value = "${" + parameters[i] + "}";
- }
- result += value;
- ++i;
- if(i < parameters.length)
+ else
{
result += ", ";
}
+ result += (String)p.next();
}
result += ">";
return result;
}
- protected CommonBaseI(int rootForView)
+ protected CommonBaseI(String id, int rootForView)
{
+ _id = id;
+
if(rootForView >= 0)
{
_paths[rootForView] = new TreePath(this);
@@ -220,5 +216,10 @@ abstract class CommonBaseI implements CommonBase
// view to Path/Parent arrays
//
protected TreePath[] _paths = new TreePath[TreeModelI.VIEW_COUNT];
- protected CommonBase[] _parents = new CommonBase[TreeModelI.VIEW_COUNT];
+ protected CommonBase[] _parents = new CommonBase[TreeModelI.VIEW_COUNT];
+
+ //
+ // Id (application name, server instance name etc)
+ //
+ protected String _id;
}
diff --git a/java/src/IceGrid/TreeNode/DbEnv.java b/java/src/IceGrid/TreeNode/DbEnv.java
index 22f5d6eac8c..81ee6e43f7b 100755
--- a/java/src/IceGrid/TreeNode/DbEnv.java
+++ b/java/src/IceGrid/TreeNode/DbEnv.java
@@ -14,15 +14,12 @@ class DbEnv extends Leaf
{
DbEnv(DbEnvDescriptor descriptor, boolean inTemplate)
{
+ super(descriptor.name);
+
_descriptor = descriptor;
_inTemplate = inTemplate;
}
- public String toString()
- {
- return _descriptor.name;
- }
-
private DbEnvDescriptor _descriptor;
private boolean _inTemplate;
}
diff --git a/java/src/IceGrid/TreeNode/DbEnvs.java b/java/src/IceGrid/TreeNode/DbEnvs.java
index e029bd8b9d3..b1073f635b4 100755
--- a/java/src/IceGrid/TreeNode/DbEnvs.java
+++ b/java/src/IceGrid/TreeNode/DbEnvs.java
@@ -12,22 +12,20 @@ import IceGrid.DbEnvDescriptor;
class DbEnvs extends Parent
{
- DbEnvs(DbEnvDescriptor[] descriptors, boolean inTemplate)
+ DbEnvs(java.util.List descriptors, boolean inTemplate)
{
+ super("DbEnvs");
_descriptors = descriptors;
_inTemplate = inTemplate;
- for(int i = 0; i < _descriptors.length; ++i)
+ java.util.Iterator p = _descriptors.iterator();
+ while(p.hasNext())
{
- addChild(new DbEnv(_descriptors[i], _inTemplate));
+ DbEnvDescriptor descriptor = (DbEnvDescriptor)p.next();
+ addChild(new DbEnv(descriptor, _inTemplate));
}
}
-
- public String toString()
- {
- return "DbEnvs";
- }
- private DbEnvDescriptor[] _descriptors;
+ private java.util.List _descriptors;
private boolean _inTemplate;
}
diff --git a/java/src/IceGrid/TreeNode/Leaf.java b/java/src/IceGrid/TreeNode/Leaf.java
index d322fd40e6c..192e65382fa 100755
--- a/java/src/IceGrid/TreeNode/Leaf.java
+++ b/java/src/IceGrid/TreeNode/Leaf.java
@@ -34,8 +34,8 @@ class Leaf extends CommonBaseI
return true;
}
- protected Leaf()
+ protected Leaf(String id)
{
- super(-1);
+ super(id, -1);
}
}
diff --git a/java/src/IceGrid/TreeNode/Node.java b/java/src/IceGrid/TreeNode/Node.java
index 7052617df33..265ac84a89c 100755
--- a/java/src/IceGrid/TreeNode/Node.java
+++ b/java/src/IceGrid/TreeNode/Node.java
@@ -8,6 +8,8 @@
// **********************************************************************
package IceGrid.TreeNode;
+import IceGrid.NodeDescriptor;
+
class Node extends Parent
{
//
@@ -19,15 +21,25 @@ class Node extends Parent
// TODO: consider showing per-application node variables
//
- Node(String name)
+ Node(String applicationName, NodeDescriptor descriptor)
{
- _name = name;
+ super(descriptor.name);
+ _applicationMap.put(applicationName, descriptor);
}
- public String toString()
+ void addApplication(String applicationName, NodeDescriptor descriptor)
+ {
+ _applicationMap.put(applicationName, descriptor);
+ }
+
+ //
+ // Returns true when this node should be destroyed
+ //
+ boolean removeApplication(String applicationName)
{
- return _name;
+ _applicationMap.remove(applicationName);
+ return (_applicationMap.size() == 0);
}
- private String _name;
+ private java.util.Map _applicationMap = new java.util.HashMap();
}
diff --git a/java/src/IceGrid/TreeNode/NodeVar.java b/java/src/IceGrid/TreeNode/NodeVar.java
index 916276c9cae..81e0451aba5 100755
--- a/java/src/IceGrid/TreeNode/NodeVar.java
+++ b/java/src/IceGrid/TreeNode/NodeVar.java
@@ -14,12 +14,13 @@ class NodeVar extends Leaf
{
NodeVar(NodeDescriptor descriptor)
{
- _descriptor = descriptor;
+ super(descriptor.name);
+ rebuild(descriptor);
}
- public String toString()
+ void rebuild(NodeDescriptor descriptor)
{
- return _descriptor.name;
+ _descriptor = descriptor;
}
private NodeDescriptor _descriptor;
diff --git a/java/src/IceGrid/TreeNode/NodeVars.java b/java/src/IceGrid/TreeNode/NodeVars.java
index 67acd38fea3..c12e4bd9692 100755
--- a/java/src/IceGrid/TreeNode/NodeVars.java
+++ b/java/src/IceGrid/TreeNode/NodeVars.java
@@ -12,20 +12,51 @@ import IceGrid.NodeDescriptor;
class NodeVars extends Parent
{
- NodeVars(NodeDescriptor[] descriptors)
+ NodeVars(java.util.List descriptors)
{
- _descriptors = descriptors;
-
- for(int i = 0; i < _descriptors.length; ++i)
+ super("Node settings");
+ java.util.Iterator p = descriptors.iterator();
+ while(p.hasNext())
{
- addChild(new NodeVar(_descriptors[i]));
+ NodeDescriptor descriptor = (NodeDescriptor)p.next();
+ addChild(new NodeVar(descriptor));
}
}
-
- public String toString()
+
+ void update(java.util.List descriptors, String[] removeNodes)
{
- return "Node settings";
- }
+ //
+ // Note: _descriptors is updated by Application
+ //
+
+ //
+ // One big set of removes
+ //
+ removeChildren(removeNodes);
- private NodeDescriptor[] _descriptors;
+ //
+ // One big set of updates, followed by inserts
+ //
+ java.util.Vector newChildren = new java.util.Vector();
+ java.util.Vector updatedChildren = new java.util.Vector();
+
+ java.util.Iterator p = descriptors.iterator();
+ while(p.hasNext())
+ {
+ NodeDescriptor nodeDescriptor = (NodeDescriptor)p.next();
+ NodeVar child = (NodeVar)findChild(nodeDescriptor.name);
+ if(child == null)
+ {
+ newChildren.add(new NodeVar(nodeDescriptor));
+ }
+ else
+ {
+ child.rebuild(nodeDescriptor);
+ updatedChildren.add(child);
+ }
+ }
+
+ updateChildren((CommonBaseI[])updatedChildren.toArray(new CommonBaseI[0]));
+ addChildren((CommonBaseI[])newChildren.toArray(new CommonBaseI[0]));
+ }
}
diff --git a/java/src/IceGrid/TreeNode/NodeViewRoot.java b/java/src/IceGrid/TreeNode/NodeViewRoot.java
index 5c606435483..72a504f54b2 100755
--- a/java/src/IceGrid/TreeNode/NodeViewRoot.java
+++ b/java/src/IceGrid/TreeNode/NodeViewRoot.java
@@ -9,32 +9,24 @@
package IceGrid.TreeNode;
import IceGrid.ApplicationDescriptor;
+import IceGrid.NodeDescriptor;
import IceGrid.TreeModelI;
public class NodeViewRoot extends Parent
{
public NodeViewRoot()
{
- super(TreeModelI.NODE_VIEW);
+ super("Nodes", TreeModelI.NODE_VIEW);
}
- public void init(ApplicationDescriptor[] applications)
+ public void init(java.util.List applications)
{
assert(_children.size() == 0);
-
- for(int i = 0; i < applications.length; ++i)
+ java.util.Iterator p = applications.iterator();
+ while(p.hasNext())
{
- for(int j = 0 ; j < applications[i].nodes.length; ++j)
- {
- String nodeName = applications[i].nodes[j].name;
- if(!_nodeMap.containsKey(nodeName))
- {
- Node child = new Node(nodeName);
- addChild(child);
- child.addParent(this);
- _nodeMap.put(nodeName, child);
- }
- }
+ ApplicationDescriptor descriptor = (ApplicationDescriptor)p.next();
+ put(descriptor.name, descriptor.nodes, false);
}
}
@@ -42,18 +34,77 @@ public class NodeViewRoot extends Parent
{
_nodeMap.clear();
clearChildren();
- fireStructureChanged(this);
+ fireStructureChangedEvent(this);
}
+ public void put(String applicationName, java.util.List nodeDescriptors,
+ boolean fireEvent)
+ {
+ java.util.Iterator p = nodeDescriptors.iterator();
- Node findNode(String name)
+ while(p.hasNext())
+ {
+ NodeDescriptor descriptor = (NodeDescriptor)p.next();
+ String nodeName = descriptor.name;
+
+ Node child = (Node)findChild(nodeName);
+ if(child == null)
+ {
+ child = new Node(applicationName, descriptor);
+ _nodeMap.put(nodeName, child);
+ child.addParent(this);
+ addChild(child, fireEvent);
+ }
+ else
+ {
+ child.addApplication(applicationName,
+ descriptor);
+ }
+ }
+ }
+
+ public void remove(String applicationName)
{
- return (Node)_nodeMap.get(name);
+ int i = 0;
+ java.util.Iterator p = _children.iterator();
+
+ while(p.hasNext())
+ {
+ Node child = (Node)p.next();
+ if(child.removeApplication(applicationName))
+ {
+ _nodeMap.remove(child.getId());
+ p.remove();
+ fireNodeRemovedEvent(this, child, i);
+ }
+ else
+ {
+ ++i;
+ }
+ }
+ }
+
+ public void remove(String applicationName, String nodeName)
+ {
+ Node child = (Node)_nodeMap.get(nodeName);
+ assert(child != null);
+
+ if(child.removeApplication(applicationName))
+ {
+ _nodeMap.remove(nodeName);
+ removeChild(nodeName, true);
+ }
+ }
+
+ public void removeServers(String[] removeServers)
+ {
+ // TODO: implement!
}
- public String toString()
+
+ Node findNode(String name)
{
- return "Nodes";
+ return (Node)_nodeMap.get(name);
}
private java.util.Map _nodeMap = new java.util.HashMap();
diff --git a/java/src/IceGrid/TreeNode/Parent.java b/java/src/IceGrid/TreeNode/Parent.java
index 6c3c544e539..6dbb6920591 100755
--- a/java/src/IceGrid/TreeNode/Parent.java
+++ b/java/src/IceGrid/TreeNode/Parent.java
@@ -9,6 +9,7 @@
package IceGrid.TreeNode;
import javax.swing.tree.TreePath;
+import javax.swing.event.TreeModelEvent;
import IceGrid.TreeModelI;
//
@@ -17,6 +18,16 @@ import IceGrid.TreeModelI;
class Parent extends CommonBaseI
{
+ static class ChildComparator implements java.util.Comparator
+ {
+ public int compare(Object o1, Object o2)
+ {
+ CommonBase child1 = (CommonBase)o1;
+ CommonBase child2 = (CommonBase)o1;
+ return child1.getId().compareTo(child2.getId());
+ }
+ }
+
public Object getChildAt(int childIndex)
{
try
@@ -104,13 +115,57 @@ class Parent extends CommonBaseI
}
}
-
+ CommonBase findChild(String id)
+ {
+ java.util.Iterator p = _children.iterator();
+ while(p.hasNext())
+ {
+ CommonBase child = (CommonBase)p.next();
+ if(id.equals(child.getId()))
+ {
+ return child;
+ }
+ }
+ return null;
+ }
+
void addChild(CommonBase child)
{
+ addChild(child, false);
+ }
+
+ void addChild(CommonBase child, boolean fireEvent)
+ {
//
- // TODO: sort children by alphabetic order according to toString()
+ // Sorted insert
//
- _children.add(child);
+
+ String id = child.getId();
+ int i = 0;
+ java.util.Iterator p = _children.iterator();
+
+ while(p.hasNext())
+ {
+ CommonBase existingChild = (CommonBase)p.next();
+ if(id.compareTo(existingChild.getId()) < 0)
+ {
+ break; // while
+ }
+ i++;
+ }
+
+ if(i < _children.size())
+ {
+ _children.add(i, child);
+ }
+ else
+ {
+ _children.add(child);
+ }
+ if(fireEvent)
+ {
+ fireNodeInsertedEvent(this, child, i);
+ }
}
void removeChild(CommonBase child)
@@ -118,21 +173,220 @@ class Parent extends CommonBaseI
_children.remove(child);
}
+ void removeChild(String id, boolean fireEvent)
+ {
+ int i = 0;
+ java.util.Iterator p = _children.iterator();
+ while(p.hasNext())
+ {
+ CommonBase child = (CommonBase)p.next();
+ i++;
+ if(id.equals(child.getId()))
+ {
+ p.remove();
+ if(fireEvent)
+ {
+ fireNodeRemovedEvent(this, child, i);
+ }
+ break;
+ }
+ }
+ }
+
void clearChildren()
{
_children.clear();
}
+
+
+ //
+ // The following methods fire events
+ //
+
+ void updateChildren(CommonBaseI[] children)
+ {
+ for(int i = 0; i < children.length; ++i)
+ {
+ children[i].fireStructureChangedEvent(this);
+ }
+ }
+
+ void addChildren(CommonBaseI[] newChildren)
+ {
+ if(newChildren.length == 0)
+ {
+ //
+ // Nothing to do;
+ //
+ return;
+ }
+
+ //
+ // Shallow copy
+ //
+ CommonBaseI[] children = (CommonBaseI[])newChildren.clone();
+
+ java.util.Arrays.sort(children, _childComparator);
+
+ int[] indices = new int[children.length];
+
+ int i = 0;
+ java.util.Iterator p = _children.iterator();
+ for(int j = 0; j < children.length; ++j)
+ {
+ String id = children[j].getId();
+
+ while(p.hasNext())
+ {
+ CommonBase existingChild = (CommonBase)p.next();
+ if(id.compareTo(existingChild.getId()) < 0)
+ {
+ break; // while
+ }
+ i++;
+ }
+
+ if(i < _children.size())
+ {
+ // Insert here, and increment i (since children is sorted)
+ _children.add(i, children[j]);
+ indices[j] = i;
+ i++;
+ }
+ else
+ {
+ // Append
+ _children.add(children[j]);
+ indices[j] = i;
+ i++;
+ }
+ }
+ fireNodesInsertedEvent(this, children, indices);
+ }
+
+
+ void removeChildren(String[] childIds)
+ {
+ if(childIds.length == 0)
+ {
+ //
+ // Nothing to do;
+ //
+ return;
+ }
+
+ //
+ // Shallow copy
+ //
+ String[] ids = (String[])childIds.clone();
+
+ java.util.Arrays.sort(ids);
+
+ System.err.println("childIds.length == " + childIds.length);
+ System.err.println("ids.length == " + ids.length);
+
+ Object[] childrenToRemove = new Object[ids.length];
+ int[] indices = new int[ids.length];
+
+ int i = 0;
+ int j = 0;
+ int k = 0;
+ java.util.Iterator p = _children.iterator();
+
+ while(p.hasNext() && j < ids.length)
+ {
+ CommonBase child = (CommonBase)p.next();
+ System.err.println("child.getId() == " + child.getId());
+ System.err.println("ids[j] == " + ids[j]);
+
+ if(ids[j].equals(child.getId()))
+ {
+ childrenToRemove[k] = child;
+ indices[k] = i;
+ p.remove();
+ ++j;
+ ++k;
+ }
+ ++i;
+ }
+
+ //
+ // Should be all removed
+ //
+ assert(k == ids.length);
+ fireNodesRemovedEvent(this, childrenToRemove, indices);
+ }
+
+
+
+ void fireNodeInsertedEvent(Object source, Object child, int index)
+ {
+ int[] childIndices = new int[1];
+ childIndices[0] = index;
+ Object[] children = new Object[1];
+ children[0] = child;
+
+ fireNodesInsertedEvent(source, children, childIndices);
+ }
- Parent(int rootForView)
+ void fireNodesInsertedEvent(Object source, Object[] children, int[] childIndices)
+ {
+ for(int i = 0; i < TreeModelI.VIEW_COUNT; ++i)
+ {
+ if(_paths[i] != null)
+ {
+ TreeModelEvent event = new TreeModelEvent(source, _paths[i],
+ childIndices, children);
+ TreeModelI.getTreeModel(i).fireNodesInsertedEvent(event);
+ }
+ }
+ }
+
+ void fireNodeRemovedEvent(Object source, Object child, int index)
+ {
+ int[] childIndices = new int[1];
+ childIndices[0] = index;
+ Object[] children = new Object[1];
+ children[0] = child;
+
+ fireNodesRemovedEvent(source, children, childIndices);
+ }
+
+ void fireNodesRemovedEvent(Object source, Object[] children, int[] childIndices)
+ {
+ for(int i = 0; i < TreeModelI.VIEW_COUNT; ++i)
+ {
+ if(_paths[i] != null)
+ {
+ System.err.print("Path = ");
+ for(int j = 0; j < _paths[i].getPath().length; ++j)
+ {
+ System.err.print(_paths[i].getPath()[j].toString());
+ }
+ System.err.println("");
+
+
+ TreeModelEvent event = new TreeModelEvent(source, _paths[i],
+ childIndices, children);
+ TreeModelI.getTreeModel(i).fireNodesRemovedEvent(event);
+ }
+ }
+ }
+
+
+
+
+ Parent(String id, int rootForView)
{
- super(rootForView);
+ super(id, rootForView);
}
- Parent()
+ Parent(String id)
{
- this(-1);
+ this(id, -1);
}
protected java.util.List _children = new java.util.LinkedList();
+ private ChildComparator _childComparator = new ChildComparator();
}
diff --git a/java/src/IceGrid/TreeNode/ServerInstance.java b/java/src/IceGrid/TreeNode/ServerInstance.java
index 8c204b8c5f7..2d3fac46db8 100755
--- a/java/src/IceGrid/TreeNode/ServerInstance.java
+++ b/java/src/IceGrid/TreeNode/ServerInstance.java
@@ -33,25 +33,22 @@ class ServerInstance extends Parent
// Builds the server instance and all its sub-tree
//
ServerInstance(ServerInstanceDescriptor descriptor,
- TemplateDescriptor templateDescriptor,
- java.util.Map serviceTemplates,
- NodeViewRoot nodeViewRoot)
+ NodeViewRoot nodeViewRoot,
+ boolean fireNodeViewEvent)
{
+ super(descriptor.descriptor.name);
_state = ServerState.Inactive;
_pid = 0;
_nodeViewRoot = nodeViewRoot;
- update(descriptor, templateDescriptor, serviceTemplates, false);
+ rebuild(descriptor, fireNodeViewEvent);
}
//
// Update the server instance and all its subtree
- // (sends a structure change event ... we don't optimize)
//
- void update(ServerInstanceDescriptor newDescriptor,
- TemplateDescriptor newTemplateDescriptor,
- java.util.Map serviceTemplates,
- boolean fireEvent)
+ void rebuild(ServerInstanceDescriptor newDescriptor,
+ boolean fireNodeViewEvent)
{
assert(newDescriptor != null);
clearChildren();
@@ -80,14 +77,12 @@ class ServerInstance extends Parent
}
_descriptor = newDescriptor;
- _templateDescriptor = newTemplateDescriptor;
if(_descriptor.descriptor instanceof IceBoxDescriptor)
{
_iceBoxDescriptor = (IceBoxDescriptor)_descriptor.descriptor;
- _serviceInstances = new ServiceInstances(_iceBoxDescriptor.services,
- serviceTemplates);
+ _serviceInstances = new ServiceInstances(_iceBoxDescriptor.services);
addChild(_serviceInstances);
_serviceInstances.addParent(this); // no-op when newNode == true
}
@@ -108,11 +103,7 @@ class ServerInstance extends Parent
{
Node node = _nodeViewRoot.findNode(_descriptor.node);
addParent(node); // propagates to children
- node.addChild(this);
- }
- else if(fireEvent)
- {
- // fireStructureChanged(this);
+ node.addChild(this, fireNodeViewEvent);
}
}
@@ -126,7 +117,7 @@ class ServerInstance extends Parent
//
// Change the node representation in all views
//
- fireNodesChanged(this);
+ fireNodeChangedEvent(this);
}
else
{
@@ -142,12 +133,11 @@ class ServerInstance extends Parent
{
String result = _descriptor.descriptor.name;
- if(_templateDescriptor != null)
+ if(!_descriptor.template.equals(""))
{
result += ": " + templateLabel(_descriptor.template,
- _templateDescriptor.parameters,
- _descriptor.parameterValues);
+ _descriptor.parameterValues.values());
}
return result;
}
diff --git a/java/src/IceGrid/TreeNode/ServerInstances.java b/java/src/IceGrid/TreeNode/ServerInstances.java
index 41e5d887524..b3a28f12fa0 100755
--- a/java/src/IceGrid/TreeNode/ServerInstances.java
+++ b/java/src/IceGrid/TreeNode/ServerInstances.java
@@ -9,41 +9,71 @@
package IceGrid.TreeNode;
import IceGrid.ServerInstanceDescriptor;
-import IceGrid.TemplateDescriptor;
class ServerInstances extends Parent
{
- ServerInstances(ServerInstanceDescriptor[] descriptors,
- java.util.Map serverTemplates,
- java.util.Map serviceTemplates,
- NodeViewRoot nodeViewRoot)
+ ServerInstances(java.util.List descriptors,
+ NodeViewRoot nodeViewRoot,
+ boolean fireEvent)
{
+ super("Server instances");
_descriptors = descriptors;
_nodeViewRoot = nodeViewRoot;
- for(int i = 0; i < _descriptors.length; ++i)
+ java.util.Iterator p = _descriptors.iterator();
+ while(p.hasNext())
{
- TemplateDescriptor templateDescriptor =
- (TemplateDescriptor)serverTemplates.
- get(_descriptors[i].template);
-
//
// The ServerInstance constructor inserts the new object in the
// node view model
//
- ServerInstance child = new ServerInstance(_descriptors[i],
- templateDescriptor,
- serviceTemplates,
- _nodeViewRoot);
+ ServerInstanceDescriptor descriptor =
+ (ServerInstanceDescriptor)p.next();
+
+ ServerInstance child = new ServerInstance(descriptor,
+ _nodeViewRoot,
+ fireEvent);
addChild(child);
}
}
- public String toString()
+ void update(java.util.List descriptors, String[] removeServers)
{
- return "Server instances";
+ //
+ // Note: _descriptors is updated by Application
+ //
+
+ //
+ // One big set of removes
+ //
+ removeChildren(removeServers);
+
+ //
+ // One big set of updates, followed by inserts
+ //
+ java.util.Vector newChildren = new java.util.Vector();
+ java.util.Vector updatedChildren = new java.util.Vector();
+
+ java.util.Iterator p = descriptors.iterator();
+ while(p.hasNext())
+ {
+ ServerInstanceDescriptor descriptor = (ServerInstanceDescriptor)p.next();
+ ServerInstance child = (ServerInstance)findChild(descriptor.descriptor.name);
+ if(child == null)
+ {
+ newChildren.add(new ServerInstance(descriptor, _nodeViewRoot, true));
+ }
+ else
+ {
+ child.rebuild(descriptor, true);
+ updatedChildren.add(child);
+ }
+ }
+
+ updateChildren((CommonBaseI[])updatedChildren.toArray(new CommonBaseI[0]));
+ addChildren((CommonBaseI[])newChildren.toArray(new CommonBaseI[0]));
}
- private ServerInstanceDescriptor[] _descriptors;
+ private java.util.List _descriptors;
private NodeViewRoot _nodeViewRoot;
}
diff --git a/java/src/IceGrid/TreeNode/ServerTemplate.java b/java/src/IceGrid/TreeNode/ServerTemplate.java
index 176522cdc6a..0a93dc255aa 100755
--- a/java/src/IceGrid/TreeNode/ServerTemplate.java
+++ b/java/src/IceGrid/TreeNode/ServerTemplate.java
@@ -13,26 +13,35 @@ import IceGrid.TemplateDescriptor;
class ServerTemplate extends Parent
{
- ServerTemplate(String name, TemplateDescriptor descriptor,
- java.util.Map serviceTemplates)
+ ServerTemplate(String name, TemplateDescriptor descriptor)
+ {
+ super(name);
+ rebuild(descriptor);
+ }
+
+ void rebuild(TemplateDescriptor descriptor)
{
- _name = name;
_descriptor = descriptor;
+ clearChildren();
+
+ //
+ // Fix-up parameters order
+ //
+ java.util.Collections.sort(_descriptor.parameters);
if(_descriptor.descriptor instanceof IceBoxDescriptor)
{
_iceBoxDescriptor = (IceBoxDescriptor)_descriptor.descriptor;
- _serviceInstances = new ServiceInstances(_iceBoxDescriptor.services,
- serviceTemplates);
+ _serviceInstances = new ServiceInstances(_iceBoxDescriptor.services);
addChild(_serviceInstances);
}
else
{
+ _serviceInstances = null;
_iceBoxDescriptor = null;
}
-
_adapters = new Adapters(_descriptor.descriptor.adapters, true);
addChild(_adapters);
@@ -40,12 +49,12 @@ class ServerTemplate extends Parent
addChild(_dbEnvs);
}
+
public String toString()
{
- return templateLabel(_name, _descriptor.parameters);
+ return templateLabel(_id, _descriptor.parameters);
}
- private String _name;
private TemplateDescriptor _descriptor;
private IceBoxDescriptor _iceBoxDescriptor;
diff --git a/java/src/IceGrid/TreeNode/ServerTemplates.java b/java/src/IceGrid/TreeNode/ServerTemplates.java
index 33538b64273..4882f13c32c 100755
--- a/java/src/IceGrid/TreeNode/ServerTemplates.java
+++ b/java/src/IceGrid/TreeNode/ServerTemplates.java
@@ -12,8 +12,10 @@ import IceGrid.TemplateDescriptor;
class ServerTemplates extends Parent
{
- ServerTemplates(java.util.Map descriptors, java.util.Map serviceTemplates)
+ ServerTemplates(java.util.Map descriptors)
{
+ super("Server templates");
+
_descriptors = descriptors;
java.util.Iterator p = _descriptors.entrySet().iterator();
@@ -22,15 +24,48 @@ class ServerTemplates extends Parent
{
java.util.Map.Entry entry = (java.util.Map.Entry)p.next();
addChild(new ServerTemplate((String)entry.getKey(),
- (TemplateDescriptor)entry.getValue(),
- serviceTemplates));
+ (TemplateDescriptor)entry.getValue()));
}
}
-
- public String toString()
+
+ void update(java.util.Map descriptors, String[] removeTemplates)
{
- return "Server templates";
- }
+ //
+ // Note: _descriptors is updated by Application
+ //
+
+ //
+ // One big set of removes
+ //
+ removeChildren(removeTemplates);
+ //
+ // One big set of updates, followed by inserts
+ //
+ java.util.Vector newChildren = new java.util.Vector();
+ java.util.Vector updatedChildren = new java.util.Vector();
+
+ java.util.Iterator p = descriptors.entrySet().iterator();
+ while(p.hasNext())
+ {
+ java.util.Map.Entry entry = (java.util.Map.Entry)p.next();
+ String name = (String)entry.getKey();
+ TemplateDescriptor templateDescriptor = (TemplateDescriptor)entry.getValue();
+ ServerTemplate child = (ServerTemplate)findChild(name);
+ if(child == null)
+ {
+ newChildren.add(new ServerTemplate(name, templateDescriptor));
+ }
+ else
+ {
+ child.rebuild(templateDescriptor);
+ updatedChildren.add(child);
+ }
+ }
+
+ updateChildren((CommonBaseI[])updatedChildren.toArray(new CommonBaseI[0]));
+ addChildren((CommonBaseI[])newChildren.toArray(new CommonBaseI[0]));
+ }
+
private java.util.Map _descriptors;
}
diff --git a/java/src/IceGrid/TreeNode/ServiceInstance.java b/java/src/IceGrid/TreeNode/ServiceInstance.java
index 55d333115f6..3cf2ddf41ac 100755
--- a/java/src/IceGrid/TreeNode/ServiceInstance.java
+++ b/java/src/IceGrid/TreeNode/ServiceInstance.java
@@ -13,11 +13,10 @@ import IceGrid.TemplateDescriptor;
class ServiceInstance extends Parent
{
- ServiceInstance(ServiceInstanceDescriptor descriptor,
- TemplateDescriptor templateDescriptor)
+ ServiceInstance(ServiceInstanceDescriptor descriptor)
{
+ super(descriptor.descriptor.name);
_descriptor = descriptor;
- _templateDescriptor = templateDescriptor;
if(_descriptor.descriptor != null)
{
@@ -31,27 +30,17 @@ class ServiceInstance extends Parent
public String toString()
{
- String result = "";
+ String result = _descriptor.descriptor.name;
- //
- // The if Temporary
- //
- if(_descriptor.descriptor != null)
- {
- result = _descriptor.descriptor.name;
- }
-
- if(_templateDescriptor != null)
+ if(!_descriptor.template.equals(""))
{
result += ": " + templateLabel(_descriptor.template,
- _templateDescriptor.parameters,
- _descriptor.parameterValues);
+ _descriptor.parameterValues.values());
}
return result;
}
private ServiceInstanceDescriptor _descriptor;
- private TemplateDescriptor _templateDescriptor;
private Adapters _adapters;
private DbEnvs _dbEnvs;
}
diff --git a/java/src/IceGrid/TreeNode/ServiceInstances.java b/java/src/IceGrid/TreeNode/ServiceInstances.java
index 4b80aafc68c..745b7805746 100755
--- a/java/src/IceGrid/TreeNode/ServiceInstances.java
+++ b/java/src/IceGrid/TreeNode/ServiceInstances.java
@@ -9,31 +9,22 @@
package IceGrid.TreeNode;
import IceGrid.ServiceInstanceDescriptor;
-import IceGrid.TemplateDescriptor;
class ServiceInstances extends Parent
{
- ServiceInstances(ServiceInstanceDescriptor[] descriptors,
- java.util.Map serviceTemplates)
+ ServiceInstances(java.util.List descriptors)
{
+ super("Service instances");
_descriptors = descriptors;
- for(int i = 0; i < _descriptors.length; ++i)
+ java.util.Iterator p = _descriptors.iterator();
+ while(p.hasNext())
{
- TemplateDescriptor templateDescriptor =
- (TemplateDescriptor)serviceTemplates.
- get(_descriptors[i].template);
-
- addChild(new ServiceInstance(_descriptors[i],
- templateDescriptor));
+ ServiceInstanceDescriptor descriptor =
+ (ServiceInstanceDescriptor)p.next();
+ addChild(new ServiceInstance(descriptor));
}
}
- public String toString()
- {
- return "Service instances";
- }
-
-
- private ServiceInstanceDescriptor[] _descriptors;
+ private java.util.List _descriptors;
}
diff --git a/java/src/IceGrid/TreeNode/ServiceTemplate.java b/java/src/IceGrid/TreeNode/ServiceTemplate.java
index 109334cd7a0..775a688ed39 100755
--- a/java/src/IceGrid/TreeNode/ServiceTemplate.java
+++ b/java/src/IceGrid/TreeNode/ServiceTemplate.java
@@ -14,8 +14,19 @@ class ServiceTemplate extends Parent
{
ServiceTemplate(String name, TemplateDescriptor descriptor)
{
- _name = name;
+ super(name);
+ rebuild(descriptor);
+ }
+
+ void rebuild(TemplateDescriptor descriptor)
+ {
_descriptor = descriptor;
+ clearChildren();
+
+ //
+ // Fix-up parameters order
+ //
+ java.util.Collections.sort(_descriptor.parameters);
_adapters = new Adapters(_descriptor.descriptor.adapters, true);
addChild(_adapters);
@@ -26,10 +37,9 @@ class ServiceTemplate extends Parent
public String toString()
{
- return templateLabel(_name, _descriptor.parameters);
+ return templateLabel(_id, _descriptor.parameters);
}
- private String _name;
private TemplateDescriptor _descriptor;
private Adapters _adapters;
private DbEnvs _dbEnvs;
diff --git a/java/src/IceGrid/TreeNode/ServiceTemplates.java b/java/src/IceGrid/TreeNode/ServiceTemplates.java
index 0058b85ccf9..b50cc633f36 100755
--- a/java/src/IceGrid/TreeNode/ServiceTemplates.java
+++ b/java/src/IceGrid/TreeNode/ServiceTemplates.java
@@ -14,6 +14,8 @@ class ServiceTemplates extends Parent
{
ServiceTemplates(java.util.Map descriptors)
{
+ super("Service templates");
+
_descriptors = descriptors;
java.util.Iterator p = _descriptors.entrySet().iterator();
@@ -26,11 +28,44 @@ class ServiceTemplates extends Parent
}
}
- public String toString()
+ void update(java.util.Map descriptors, String[] removeTemplates)
{
- return "Service templates";
- }
+ //
+ // Note: _descriptors is updated by Application
+ //
+
+ //
+ // One big set of removes
+ //
+ removeChildren(removeTemplates);
+ //
+ // One big set of updates, followed by inserts
+ //
+ java.util.Vector newChildren = new java.util.Vector();
+ java.util.Vector updatedChildren = new java.util.Vector();
+
+ java.util.Iterator p = descriptors.entrySet().iterator();
+ while(p.hasNext())
+ {
+ java.util.Map.Entry entry = (java.util.Map.Entry)p.next();
+ String name = (String)entry.getKey();
+ TemplateDescriptor templateDescriptor = (TemplateDescriptor)entry.getValue();
+ ServiceTemplate child = (ServiceTemplate)findChild(name);
+ if(child == null)
+ {
+ newChildren.add(new ServiceTemplate(name, templateDescriptor));
+ }
+ else
+ {
+ child.rebuild(templateDescriptor);
+ updatedChildren.add(child);
+ }
+ }
+
+ updateChildren((CommonBaseI[])updatedChildren.toArray(new CommonBaseI[0]));
+ addChildren((CommonBaseI[])newChildren.toArray(new CommonBaseI[0]));
+ }
private java.util.Map _descriptors;
}