diff options
Diffstat (limited to 'java/src')
27 files changed, 1282 insertions, 370 deletions
diff --git a/java/src/IceGrid/TreeNode/Adapter.java b/java/src/IceGrid/TreeNode/Adapter.java index 4057169999e..90521825e12 100755 --- a/java/src/IceGrid/TreeNode/Adapter.java +++ b/java/src/IceGrid/TreeNode/Adapter.java @@ -9,6 +9,10 @@ package IceGrid.TreeNode;
import java.awt.Component;
+import java.awt.event.ActionEvent;
+
+import javax.swing.AbstractAction;
+import javax.swing.Action;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
@@ -38,6 +42,37 @@ class Adapter extends Leaf if(_scrollPane == null)
{
//
+ // gotoReplicatedAdapter action
+ //
+ AbstractAction gotoReplicatedAdapter = new AbstractAction("->")
+ {
+ public void actionPerformed(ActionEvent e)
+ {
+ Object obj = _id.getSelectedItem();
+ if(obj != null && _adapter != null)
+ {
+ ReplicatedAdapter ra = null;
+ if(obj instanceof ReplicatedAdapter)
+ {
+ ra = (ReplicatedAdapter)obj;
+ }
+ else
+ {
+ ra = _adapter.getApplication().
+ findReplicatedAdapter((String)obj);
+ }
+ if(ra != null)
+ {
+ _adapter.getModel().getTree().setSelectionPath
+ (ra.getPath());
+ }
+ }
+ }
+ };
+ gotoReplicatedAdapter.putValue(Action.SHORT_DESCRIPTION, "Goto this replicated adapter");
+
+
+ //
// Build everything using JGoodies's DefaultFormBuilder
//
FormLayout layout = new FormLayout(
@@ -52,6 +87,7 @@ class Adapter extends Leaf builder.append(_name, 3);
builder.nextLine();
+ _idButton = new JButton(gotoReplicatedAdapter);
builder.append("Id", _id );
builder.append(_idButton);
builder.nextLine();
@@ -89,13 +125,19 @@ class Adapter extends Leaf Utils.substitute(descriptor.name, resolver));
_name.setEditable(editable);
+ //
+ // Need to make control editable & enabled before changing it
+ //
+ _id.setEnabled(true);
+ _id.setEditable(true);
+
ReplicatedAdapters replicatedAdapters =
adapter.getApplication().getReplicatedAdapters();
_id.setModel(replicatedAdapters.createComboBoxModel());
String adapterId = Utils.substitute(descriptor.id, resolver);
ReplicatedAdapter replicatedAdapter =
- (ReplicatedAdapter) replicatedAdapters.findChild(adapterId);
+ (ReplicatedAdapter)replicatedAdapters.findChild(adapterId);
if(replicatedAdapter != null)
{
@@ -105,9 +147,9 @@ class Adapter extends Leaf {
_id.setSelectedItem(adapterId);
}
- _id.setEditable(editable);
_id.setEnabled(editable);
-
+ _id.setEditable(editable);
+
_endpoints.setText(
Utils.substitute(adapter.getEndpoints(), resolver));
_endpoints.setEditable(editable);
@@ -134,8 +176,7 @@ class Adapter extends Leaf Utils.stringify(descriptor.objects, stringifier,
", ", toolTipHolder));
_objects.setToolTipText(toolTipHolder.value);
- _objects.setEditable(editable);
- _objectsButton.setEnabled(editable);
+ _objects.setEditable(false);
_registerProcess.setSelected(descriptor.registerProcess);
_registerProcess.setEnabled(editable);
@@ -152,7 +193,7 @@ class Adapter extends Leaf private JCheckBox _waitForActivation = new JCheckBox("Wait for Activation");
private JTextField _objects = new JTextField(20);
private JButton _objectsButton = new JButton("...");
- private JButton _idButton = new JButton("->");
+ private JButton _idButton;
private Adapter _adapter;
private JScrollPane _scrollPane;
@@ -199,36 +240,35 @@ class Adapter extends Leaf Adapter(String adapterName, AdapterDescriptor descriptor,
- boolean editable, Utils.Resolver resolver,
- Model model)
+ Utils.Resolver resolver, Application application, Model model)
{
super(adapterName, model);
_descriptor = descriptor;
- _editable = editable;
_resolver = resolver;
if(resolver != null)
{
+ assert application != null;
//
// In a server instance
//
- _adapterId = _resolver.substitute(_descriptor.id);
+ _instanceId
+ = new AdapterInstanceId(_resolver.find("server"),
+ _resolver.substitute(_descriptor.id));
- _proxy = _model.getRoot().registerAdapter(_resolver.find("node"),
- _resolver.find("server"),
- _adapterId,
- this);
+ _proxy = application.registerAdapter(_resolver.find("node"),
+ _instanceId,
+ this);
createToolTip();
}
}
- public void cleanup()
+ public void unregister()
{
- if(_resolver != null)
+ if(_instanceId != null)
{
- _model.getRoot().unregisterAdapter(_resolver.find("node"),
- _resolver.find("server"),
- _adapterId,
+ getApplication().unregisterAdapter(_resolver.find("node"),
+ _instanceId,
this);
}
}
@@ -253,7 +293,7 @@ class Adapter extends Leaf boolean isEditable()
{
- return _editable;
+ return ((Adapters)_parent).isEditable();
}
String getEndpoints()
@@ -268,9 +308,9 @@ class Adapter extends Leaf ph.put(_descriptor.name + ".Endpoints", newEndpoints);
}
- Application getApplication()
+ AdapterInstanceId getInstanceId()
{
- return (Application)_path.getPath()[1];
+ return _instanceId;
}
private void createToolTip()
@@ -286,10 +326,10 @@ class Adapter extends Leaf }
private AdapterDescriptor _descriptor;
- private boolean _editable;
private Utils.Resolver _resolver;
+ private boolean _isEditable;
- private String _adapterId;
+ private AdapterInstanceId _instanceId;
private Ice.ObjectPrx _proxy;
private String _toolTip;
diff --git a/java/src/IceGrid/TreeNode/AdapterInstanceId.java b/java/src/IceGrid/TreeNode/AdapterInstanceId.java new file mode 100755 index 00000000000..53d0498dbfc --- /dev/null +++ b/java/src/IceGrid/TreeNode/AdapterInstanceId.java @@ -0,0 +1,40 @@ +// **********************************************************************
+//
+// 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;
+
+class AdapterInstanceId
+{
+ AdapterInstanceId(String serverId, String adapterId)
+ {
+ this.serverId = serverId;
+ this.adapterId = adapterId;
+ }
+
+ public boolean equals(Object obj)
+ {
+ try
+ {
+ AdapterInstanceId other = (AdapterInstanceId)obj;
+ return serverId.equals(other.serverId)
+ && adapterId.equals(other.adapterId);
+ }
+ catch(ClassCastException e)
+ {
+ return false;
+ }
+ }
+
+ public int hashCode()
+ {
+ return serverId.hashCode() ^ adapterId.hashCode();
+ }
+
+ String serverId;
+ String adapterId;
+};
diff --git a/java/src/IceGrid/TreeNode/Adapters.java b/java/src/IceGrid/TreeNode/Adapters.java index e28978c98d6..0bc6d57eb28 100755 --- a/java/src/IceGrid/TreeNode/Adapters.java +++ b/java/src/IceGrid/TreeNode/Adapters.java @@ -14,10 +14,14 @@ import IceGrid.Utils; class Adapters extends Parent
{
- Adapters(java.util.List descriptors, boolean editable,
- Utils.Resolver resolver, Model model)
+ Adapters(java.util.List descriptors, boolean isEditable,
+ Utils.Resolver resolver, Application application,
+ Model model)
+ throws DuplicateIdException
{
super("Adapters", model);
+ _isEditable = isEditable;
+
java.util.Iterator p = descriptors.iterator();
while(p.hasNext())
{
@@ -26,18 +30,25 @@ class Adapters extends Parent String adapterName = Utils.substitute(descriptor.name,
resolver);
- addChild(new Adapter(adapterName, descriptor, editable,
- resolver, _model));
+ addChild(new Adapter(adapterName, descriptor,
+ resolver, application, _model));
}
}
-
- public void cleanup()
+
+ public void unregister()
{
java.util.Iterator p = _children.iterator();
while(p.hasNext())
{
Adapter adapter = (Adapter)p.next();
- adapter.cleanup();
+ adapter.unregister();
}
}
+
+ boolean isEditable()
+ {
+ return _isEditable;
+ }
+
+ private boolean _isEditable;
}
diff --git a/java/src/IceGrid/TreeNode/Application.java b/java/src/IceGrid/TreeNode/Application.java index 07501665182..76ca587b55b 100755 --- a/java/src/IceGrid/TreeNode/Application.java +++ b/java/src/IceGrid/TreeNode/Application.java @@ -8,21 +8,23 @@ // **********************************************************************
package IceGrid.TreeNode;
+import IceGrid.AdapterDynamicInfo;
import IceGrid.ApplicationDescriptor;
import IceGrid.ApplicationUpdateDescriptor;
-import IceGrid.TemplateDescriptor;
import IceGrid.Model;
import IceGrid.ServerDynamicInfo;
-import IceGrid.AdapterDynamicInfo;
+import IceGrid.ServerState;
+import IceGrid.TemplateDescriptor;
-class Application extends Parent
+class Application extends EditableParent
{
//
// Builds the application and all its subtrees
//
Application(ApplicationDescriptor descriptor, Model model)
+ throws DuplicateIdException
{
- super(descriptor.name, model);
+ super(false, descriptor.name, model);
_descriptor = descriptor;
_replicatedAdapters = new ReplicatedAdapters(_descriptor.replicatedAdapters,
@@ -41,7 +43,74 @@ class Application extends Parent addChild(_nodes);
}
+ Application(Application o)
+ {
+ super(o);
+
+ //
+ // We don't deep-copy _descriptor because it's difficult :)
+ // So we'll have to be carefull to properly recover the "old" descriptor.
+ //
+ _descriptor = o._descriptor;
+
+ try
+ {
+ _replicatedAdapters = new ReplicatedAdapters(o._replicatedAdapters);
+ addChild(_replicatedAdapters);
+
+ _serviceTemplates = new ServiceTemplates(o._serviceTemplates);
+ addChild(_serviceTemplates);
+
+ _serverTemplates = new ServerTemplates(o._serverTemplates);
+ addChild(_serverTemplates);
+
+ _nodes = new Nodes(o._nodes);
+ addChild(_nodes);
+ }
+ catch(DuplicateIdException e)
+ {
+ assert false; // impossible
+ }
+ }
+
+ //
+ // Try to apply a major update (the caller must change the descriptor,
+ // and restore it if the applyUpdate is unsuccessful
+ //
+ boolean applyUpdate()
+ {
+ // TODO: hourglass
+
+ Application copy = new Application(this);
+
+ try
+ {
+ update();
+ }
+ catch(DuplicateIdException e)
+ {
+ // TODO: error message to the user
+
+
+ _model.getRoot().restore(copy);
+ return false;
+ }
+
+
+ return true;
+ }
+
+ void update() throws DuplicateIdException
+ {
+ _replicatedAdapters.update();
+ _serverTemplates.update();
+ _serviceTemplates.update();
+ _nodes.update();
+ }
+
+
void update(ApplicationUpdateDescriptor desc)
+ throws DuplicateIdException
{
//
// Description
@@ -115,6 +184,17 @@ class Application extends Parent return (ServerTemplate)_serverTemplates.findChild(id);
}
+ ReplicatedAdapter findReplicatedAdapter(String id)
+ {
+ return (ReplicatedAdapter)_replicatedAdapters.findChild(id);
+ }
+
+ Node findNode(String id)
+ {
+ return (Node)_nodes.findChild(id);
+ }
+
+
TemplateDescriptor findServerTemplateDescriptor(String templateName)
{
return (TemplateDescriptor)
@@ -126,12 +206,6 @@ class Application extends Parent return (TemplateDescriptor)
_descriptor.serviceTemplates.get(templateName);
}
-
-
- Node findNode(String id)
- {
- return (Node)_nodes.findChild(id);
- }
ServerTemplates getServerTemplates()
{
@@ -151,25 +225,222 @@ class Application extends Parent return _descriptor.variables;
}
- void nodeUp(String nodeName)
+ void nodeUp(String nodeName, Root.DynamicInfo info)
{
+ //
+ // Need to tell *every* server on this node
+ //
+ java.util.List serverList = (java.util.List)_nodeServerMap.get(nodeName);
+ if(serverList != null)
+ {
+ java.util.Iterator p = serverList.iterator();
+ while(p.hasNext())
+ {
+ Server server = (Server)p.next();
+ ServerDynamicInfo serverInfo = (ServerDynamicInfo)
+ info.serverInfoMap.get(server.getId());
+ if(serverInfo == null)
+ {
+ server.updateDynamicInfo(ServerState.Inactive, 0);
+ }
+ else
+ {
+ server.updateDynamicInfo(serverInfo.state, serverInfo.pid);
+ }
+ }
+ }
+
+ //
+ // Tell adapters
+ //
+ java.util.List adapterList = (java.util.List)_nodeAdapterMap.get(nodeName);
+ if(adapterList != null)
+ {
+ java.util.Iterator p = adapterList.iterator();
+ while(p.hasNext())
+ {
+ Adapter adapter = (Adapter)p.next();
+ Ice.ObjectPrx proxy =
+ (Ice.ObjectPrx)info.adapterInfoMap.get(adapter.getInstanceId());
+ if(proxy != null)
+ {
+ adapter.updateProxy(proxy);
+ }
+ }
+ }
+
_nodes.nodeUp(nodeName);
}
void nodeDown(String nodeName)
{
_nodes.nodeDown(nodeName);
+
+ java.util.List serverList = (java.util.List)_nodeServerMap.get(nodeName);
+ if(serverList != null)
+ {
+ java.util.Iterator p = serverList.iterator();
+ while(p.hasNext())
+ {
+ Server server = (Server)p.next();
+ server.updateDynamicInfo(null, 0);
+ }
+ }
+
+ java.util.List adapterList = (java.util.List)_nodeAdapterMap.get(nodeName);
+ if(adapterList != null)
+ {
+ java.util.Iterator p = adapterList.iterator();
+ while(p.hasNext())
+ {
+ Adapter adapter = (Adapter)p.next();
+ adapter.updateProxy(null);
+ }
+ }
}
- public void cleanup()
+ Ice.ObjectPrx registerAdapter(String nodeName, AdapterInstanceId instanceId,
+ Adapter adapter)
{
- _nodes.cleanup();
+ _adapterMap.put(instanceId, adapter);
+
+ java.util.List adapterList = (java.util.List)_nodeAdapterMap.get(nodeName);
+ if(adapterList == null)
+ {
+ adapterList = new java.util.LinkedList();
+ _nodeAdapterMap.put(nodeName, adapterList);
+ }
+ adapterList.add(adapter);
+
+ Root.DynamicInfo info = (Root.DynamicInfo)_model.getRoot().getDynamicInfo(nodeName);
+ if(info == null)
+ {
+ // Node is down
+ return null;
+ }
+ else
+ {
+ return (Ice.ObjectPrx)info.adapterInfoMap.get(instanceId);
+ }
}
+
+ void unregisterAdapter(String nodeName, AdapterInstanceId instanceId,
+ Adapter adapter)
+ {
+ _adapterMap.remove(instanceId);
+ java.util.List adapterList = (java.util.List)_nodeAdapterMap.get(nodeName);
+ if(adapterList != null)
+ {
+ adapterList.remove(adapter);
+ }
+ }
+
+ ServerState registerServer(String nodeName, String serverId, Server server,
+ Ice.IntHolder pid)
+ {
+ _serverMap.put(serverId, server);
+
+ java.util.List serverList = (java.util.List)_nodeServerMap.get(nodeName);
+ if(serverList == null)
+ {
+ serverList = new java.util.LinkedList();
+ _nodeServerMap.put(nodeName, serverList);
+ }
+ serverList.add(server);
+
+ Root.DynamicInfo info = (Root.DynamicInfo)_model.getRoot().getDynamicInfo(nodeName);
+ if(info == null)
+ {
+ // Node is down
+ pid.value = 0;
+ return null;
+ }
+ else
+ {
+ ServerDynamicInfo serverInfo =
+ (ServerDynamicInfo)info.serverInfoMap.get(serverId);
+ if(serverInfo == null)
+ {
+ pid.value = 0;
+ return ServerState.Inactive;
+ }
+ else
+ {
+ pid.value = serverInfo.pid;
+ return serverInfo.state;
+ }
+ }
+ }
+
+ void unregisterServer(String nodeName, String serverId, Server server)
+ {
+ _serverMap.remove(serverId);
+ java.util.List serverList = (java.util.List)_nodeServerMap.get(nodeName);
+ if(serverList != null)
+ {
+ serverList.remove(server);
+ }
+ }
+
+ public boolean updateServer(ServerDynamicInfo updatedInfo)
+ {
+ //
+ // Is this Server registered?
+ //
+ Server server = (Server)_serverMap.get(updatedInfo.id);
+ if(server != null)
+ {
+ server.updateDynamicInfo(updatedInfo.state, updatedInfo.pid);
+ return true;
+ }
+ else
+ {
+ return false;
+ }
+ }
+
+ public boolean updateAdapter(AdapterInstanceId instanceId, Ice.ObjectPrx proxy)
+ {
+ //
+ // Is this Adapter registered?
+ //
+ Adapter adapter = (Adapter)_adapterMap.get(instanceId);
+ if(adapter != null)
+ {
+ adapter.updateProxy(proxy);
+ return true;
+ }
+ else
+ {
+ return false;
+ }
+ }
+
private ApplicationDescriptor _descriptor;
//
+ // AdapterInstanceId to Adapter
+ //
+ private java.util.Map _adapterMap = new java.util.HashMap();
+
+ //
+ // Nodename to list of Adapter (used when a node goes down)
+ //
+ private java.util.Map _nodeAdapterMap = new java.util.HashMap();
+
+ //
+ // ServerId to Server
+ //
+ private java.util.Map _serverMap = new java.util.HashMap();
+
+ //
+ // Nodename to list of Server (used when a node goes down)
+ //
+ private java.util.Map _nodeServerMap = new java.util.HashMap();
+
+ //
// Children
//
private ReplicatedAdapters _replicatedAdapters;
diff --git a/java/src/IceGrid/TreeNode/CommonBase.java b/java/src/IceGrid/TreeNode/CommonBase.java index 24c4357482a..b52afa78f2d 100755 --- a/java/src/IceGrid/TreeNode/CommonBase.java +++ b/java/src/IceGrid/TreeNode/CommonBase.java @@ -36,9 +36,10 @@ public interface CommonBase extends TreeCellRenderer Model getModel();
//
- // Clean-up when removed from the tree
+ // Unregister this element with the enclosing application;
+ // often no-op
//
- void cleanup();
+ void unregister();
//
// Set this node as a parent, and recursively update
@@ -67,4 +68,14 @@ public interface CommonBase extends TreeCellRenderer JPopupMenu getPopupMenu();
void displayProperties();
+
+ //
+ // Get properties
+ //
+ PropertiesHolder getPropertiesHolder();
+
+ //
+ // The enclosing editable
+ //
+ Editable getEditable();
}
diff --git a/java/src/IceGrid/TreeNode/CommonBaseI.java b/java/src/IceGrid/TreeNode/CommonBaseI.java index 8b601197a17..e6adbf13b5e 100755 --- a/java/src/IceGrid/TreeNode/CommonBaseI.java +++ b/java/src/IceGrid/TreeNode/CommonBaseI.java @@ -35,7 +35,7 @@ abstract class CommonBaseI implements CommonBase return _id;
}
- public void cleanup()
+ public void unregister()
{
//
// Nothing to do
@@ -72,7 +72,18 @@ abstract class CommonBaseI implements CommonBase {
return _parent;
}
-
+
+ public Editable getEditable()
+ {
+ if(_parent != null)
+ {
+ return _parent.getEditable();
+ }
+ else
+ {
+ return null;
+ }
+ }
public JPopupMenu getPopupMenu()
{
@@ -111,6 +122,11 @@ abstract class CommonBaseI implements CommonBase return null;
}
+ public PropertiesHolder getPropertiesHolder()
+ {
+ return null;
+ }
+
//
// Fires a nodesChanged event with this node
//
@@ -185,6 +201,30 @@ abstract class CommonBaseI implements CommonBase }
}
+ protected CommonBaseI(CommonBaseI o)
+ {
+ //
+ // Not attached to any tree yet
+ //
+ _path = null;
+ _parent = null;
+
+ _id = o._id;
+ _model = o._model;
+ }
+
+ Application getApplication()
+ {
+ if(_path == null || _path.getPathCount() < 2)
+ {
+ return null;
+ }
+ else
+ {
+ return (Application)_path.getPath()[1];
+ }
+ }
+
public Model getModel()
{
return _model;
diff --git a/java/src/IceGrid/TreeNode/DbEnv.java b/java/src/IceGrid/TreeNode/DbEnv.java index a73acfb44b5..e0993021306 100755 --- a/java/src/IceGrid/TreeNode/DbEnv.java +++ b/java/src/IceGrid/TreeNode/DbEnv.java @@ -15,16 +15,13 @@ import IceGrid.Utils; class DbEnv extends Leaf
{
DbEnv(String dbEnvName, DbEnvDescriptor descriptor,
- boolean editable, Utils.Resolver resolver,
- Model model)
+ Utils.Resolver resolver, Model model)
{
super(dbEnvName, model);
_descriptor = descriptor;
- _editable = editable;
_resolver = resolver;
}
private DbEnvDescriptor _descriptor;
- private boolean _editable;
private Utils.Resolver _resolver;
}
diff --git a/java/src/IceGrid/TreeNode/DbEnvs.java b/java/src/IceGrid/TreeNode/DbEnvs.java index aa44785fe08..af53177eae7 100755 --- a/java/src/IceGrid/TreeNode/DbEnvs.java +++ b/java/src/IceGrid/TreeNode/DbEnvs.java @@ -15,19 +15,22 @@ import IceGrid.Utils; class DbEnvs extends Parent
{
DbEnvs(java.util.List descriptors,
- boolean editable,
+ boolean isEditable,
Utils.Resolver resolver,
Model model)
+ throws DuplicateIdException
{
super("DbEnvs", model);
+ _isEditable = isEditable;
java.util.Iterator p = descriptors.iterator();
while(p.hasNext())
{
DbEnvDescriptor descriptor = (DbEnvDescriptor)p.next();
String dbEnvName = Utils.substitute(descriptor.name, resolver);
- addChild(new DbEnv(dbEnvName, descriptor, editable,
- resolver, _model));
+ addChild(new DbEnv(dbEnvName, descriptor, resolver, _model));
}
}
+
+ private boolean _isEditable;
}
diff --git a/java/src/IceGrid/TreeNode/DuplicateIdException.java b/java/src/IceGrid/TreeNode/DuplicateIdException.java new file mode 100755 index 00000000000..e3e5c2085c1 --- /dev/null +++ b/java/src/IceGrid/TreeNode/DuplicateIdException.java @@ -0,0 +1,27 @@ +// **********************************************************************
+//
+// 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;
+
+class DuplicateIdException extends Exception
+{
+ DuplicateIdException(Parent parent, String id)
+ {
+ _parent = parent;
+ _id = id;
+ }
+
+ public String toString()
+ {
+ return _parent.getId() + " cannot have two children with '"
+ + _id + "' as id";
+ }
+
+ private Parent _parent;
+ private String _id;
+}
diff --git a/java/src/IceGrid/TreeNode/Editable.java b/java/src/IceGrid/TreeNode/Editable.java new file mode 100755 index 00000000000..45661b342cc --- /dev/null +++ b/java/src/IceGrid/TreeNode/Editable.java @@ -0,0 +1,20 @@ +// **********************************************************************
+//
+// 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 IceGrid.Model;
+
+
+interface Editable
+{
+ boolean isModified();
+ void markModified();
+}
+
+
diff --git a/java/src/IceGrid/TreeNode/EditableLeaf.java b/java/src/IceGrid/TreeNode/EditableLeaf.java new file mode 100755 index 00000000000..7511c9e0ac8 --- /dev/null +++ b/java/src/IceGrid/TreeNode/EditableLeaf.java @@ -0,0 +1,43 @@ +// **********************************************************************
+//
+// 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 IceGrid.Model;
+
+class EditableLeaf extends Leaf implements Editable
+{
+ public boolean isModified()
+ {
+ return _modified;
+ }
+
+ public void markModified()
+ {
+ _modified = true;
+ }
+
+ public Editable getEditable()
+ {
+ return this;
+ }
+
+ protected EditableLeaf(boolean brandNew, String id, Model model)
+ {
+ super(id, model);
+ _modified = brandNew;
+ }
+
+ protected EditableLeaf(EditableLeaf o)
+ {
+ super(o);
+ _modified = o._modified;
+ }
+
+
+ private boolean _modified;
+}
diff --git a/java/src/IceGrid/TreeNode/EditableParent.java b/java/src/IceGrid/TreeNode/EditableParent.java new file mode 100755 index 00000000000..b0b379dbe9a --- /dev/null +++ b/java/src/IceGrid/TreeNode/EditableParent.java @@ -0,0 +1,86 @@ +// **********************************************************************
+//
+// 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 IceGrid.Model;
+
+//
+// Corresponds to "root" editable descriptors such as Server,
+// Service, ServerTemplate, ServiceTemplate, Node etc.
+//
+class EditableParent extends Parent implements Editable
+{
+ EditableParent(boolean brandNew, String id, Model model, boolean root)
+ {
+ super(id, model, root);
+ _modified = brandNew;
+ }
+
+ EditableParent(boolean brandNew, String id, Model model)
+ {
+ this(brandNew, id, model, false);
+ }
+
+ EditableParent(EditableParent o, boolean copyChildren)
+ {
+ super(o, copyChildren);
+ _modified = o._modified;
+ _removedElements = (java.util.TreeSet)o._removedElements.clone();
+ }
+
+
+ EditableParent(EditableParent o)
+ {
+ this(o, false);
+ }
+
+ public boolean isModified()
+ {
+ return _modified;
+ }
+
+ public void markModified()
+ {
+ _modified = true;
+ }
+
+ void removeElement(CommonBase child)
+ {
+ _removedElements.add(child.getId());
+ removeChild(child);
+ }
+
+ void purgeChildren(java.util.Set keepSet)
+ {
+ java.util.Iterator p = _children.iterator();
+ while(p.hasNext())
+ {
+ CommonBase child = (CommonBase)p.next();
+ if(!keepSet.contains(child.getId()))
+ {
+ removeElement(child);
+ }
+ }
+ }
+
+ java.util.Set removedElements()
+ {
+ return _removedElements;
+ }
+
+ public Editable getEditable()
+ {
+ return this;
+ }
+
+ private boolean _modified;
+ private java.util.TreeSet _removedElements = new java.util.TreeSet();
+}
+
+
diff --git a/java/src/IceGrid/TreeNode/Leaf.java b/java/src/IceGrid/TreeNode/Leaf.java index d5396e0b9d9..c85ba343f00 100755 --- a/java/src/IceGrid/TreeNode/Leaf.java +++ b/java/src/IceGrid/TreeNode/Leaf.java @@ -40,4 +40,9 @@ class Leaf extends CommonBaseI {
super(id, model, false);
}
+
+ protected Leaf(Leaf o)
+ {
+ super(o);
+ }
}
diff --git a/java/src/IceGrid/TreeNode/Node.java b/java/src/IceGrid/TreeNode/Node.java index 62981547130..7468f558d2e 100755 --- a/java/src/IceGrid/TreeNode/Node.java +++ b/java/src/IceGrid/TreeNode/Node.java @@ -26,7 +26,7 @@ import IceGrid.ServerState; import IceGrid.TemplateDescriptor;
import IceGrid.Utils;
-class Node extends Parent
+class Node extends EditableParent
{
//
// Node creation/deletion/renaming is done by starting/restarting
@@ -112,17 +112,18 @@ class Node extends Parent }
}
- public void cleanup()
+ public void unregister()
{
java.util.Iterator p = _children.iterator();
while(p.hasNext())
{
Server server = (Server)p.next();
- server.cleanup();
+ server.unregister();
}
}
NodeDescriptor update(NodeUpdateDescriptor update, Application application)
+ throws DuplicateIdException
{
if(_descriptor == null)
{
@@ -207,7 +208,7 @@ class Node extends Parent }
else
{
- server = new Server(serverId, instanceResolver, instanceDescriptor,
+ server = new Server(false, serverId, instanceResolver, instanceDescriptor,
serverDescriptor, application);
newChildren.add(server);
_descriptor.serverInstances.add(instanceDescriptor);
@@ -243,7 +244,7 @@ class Node extends Parent }
else
{
- server = new Server(serverId, instanceResolver, null,
+ server = new Server(false, serverId, instanceResolver, null,
serverDescriptor, application);
newChildren.add(server);
_descriptor.servers.add(serverDescriptor);
@@ -265,17 +266,44 @@ class Node extends Parent Node(String nodeName, Model model)
{
- super(nodeName, model);
+ super(false, nodeName, model);
_up = true;
}
- Node(String nodeName, NodeDescriptor descriptor, Application application)
+ Node(boolean brandNew, String nodeName, NodeDescriptor descriptor, Application application)
+ throws DuplicateIdException
{
- super(nodeName, application.getModel());
+ super(brandNew, nodeName, application.getModel());
init(descriptor, application, false);
}
+ Node(Node o)
+ {
+ super(o);
+ _descriptor = o._descriptor;
+ _resolver = o._resolver;
+ _up = o._up;
+
+ //
+ // Deep-copy children
+ //
+ java.util.Iterator p = o._children.iterator();
+ while(p.hasNext())
+ {
+ Server server = (Server)p.next();
+ try
+ {
+ addChild(new Server(server));
+ }
+ catch(DuplicateIdException e)
+ {
+ assert false; // impossible
+ }
+ }
+ }
+
void init(NodeDescriptor descriptor, Application application, boolean fireEvent)
+ throws DuplicateIdException
{
assert _descriptor == null;
_descriptor = descriptor;
@@ -320,7 +348,7 @@ class Node extends Parent //
// Create server
//
- Server server = new Server(serverId, instanceResolver, instanceDescriptor,
+ Server server = new Server(false, serverId, instanceResolver, instanceDescriptor,
serverDescriptor, application);
addChild(server);
server.setParent(this);
@@ -344,7 +372,7 @@ class Node extends Parent //
// Create server
//
- Server server = new Server(serverId, instanceResolver, null, serverDescriptor,
+ Server server = new Server(false, serverId, instanceResolver, null, serverDescriptor,
application);
addChild(server);
server.setParent(this);
@@ -354,14 +382,133 @@ class Node extends Parent {
fireNodeChangedEvent(this);
}
-
}
+
+ void update() throws DuplicateIdException
+ {
+ if(_descriptor == null)
+ {
+ //
+ // Nothing to do
+ //
+ return;
+ }
+
+ Application application = getApplication();
+
+ _resolver = new Utils.Resolver(new java.util.Map[]
+ {_descriptor.variables, application.getVariables()});
+
+ _resolver.put("application", application.getId());
+ _resolver.put("node", getId());
+
+ //
+ // Existing servers not in this list will be removed
+ //
+ java.util.Set serverIdSet = new java.util.HashSet();
+
+ //
+ // Template instances
+ //
+ java.util.Iterator p = _descriptor.serverInstances.iterator();
+ while(p.hasNext())
+ {
+ ServerInstanceDescriptor instanceDescriptor =
+ (ServerInstanceDescriptor)p.next();
+
+ //
+ // Find template
+ //
+ TemplateDescriptor templateDescriptor =
+ application.findServerTemplateDescriptor(instanceDescriptor.template);
+
+ if(templateDescriptor != null)
+ {
+ ServerDescriptor serverDescriptor =
+ (ServerDescriptor)templateDescriptor.descriptor;
+
+ assert serverDescriptor != null;
+
+ //
+ // Build resolver
+ //
+ Utils.Resolver instanceResolver =
+ new Utils.Resolver(_resolver, instanceDescriptor.parameterValues);
+
+ String serverId = instanceResolver.substitute(serverDescriptor.id);
+ instanceResolver.put("server", serverId);
+ serverIdSet.add(serverId);
+
+ //
+ // Lookup server
+ //
+ Server server = (Server)findChild(serverId);
+ if(server != null)
+ {
+ server.rebuild(instanceResolver, instanceDescriptor,
+ serverDescriptor, application);
+ }
+ else
+ {
+ //
+ // Create server
+ //
+ server = new Server(true, serverId, instanceResolver, instanceDescriptor,
+ serverDescriptor, application);
+ addChild(server);
+ server.setParent(this);
+ }
+ }
+ //
+ // Otherwise this template-instance will most likely be deleted
+ //
+ }
+
+ //
+ // Plain servers
+ //
+ p = _descriptor.servers.iterator();
+ while(p.hasNext())
+ {
+ ServerDescriptor serverDescriptor = (ServerDescriptor)p.next();
+
+ //
+ // Build resolver
+ //
+ Utils.Resolver instanceResolver = new Utils.Resolver(_resolver);
+ String serverId = instanceResolver.substitute(serverDescriptor.id);
+ instanceResolver.put("server", serverId);
+ serverIdSet.add(serverId);
+
+ //
+ // Lookup server
+ //
+ Server server = (Server)findChild(serverId);
+ if(server != null)
+ {
+ server.rebuild(instanceResolver, null, serverDescriptor, application);
+ }
+ else
+ {
+ //
+ // Create server
+ //
+ server = new Server(true, serverId, instanceResolver, null, serverDescriptor,
+ application);
+ addChild(server);
+ server.setParent(this);
+ }
+ }
+
+ purgeChildren(serverIdSet);
+
+ }
+
private NodeDescriptor _descriptor;
private Utils.Resolver _resolver;
private boolean _up = false;
- private java.util.Map _serverDynamicInfoMap;
static private DefaultTreeCellRenderer _cellRenderer;
static private Icon _nodeUpOpen;
diff --git a/java/src/IceGrid/TreeNode/Nodes.java b/java/src/IceGrid/TreeNode/Nodes.java index d8aa6a9c644..3e17eae7bbc 100755 --- a/java/src/IceGrid/TreeNode/Nodes.java +++ b/java/src/IceGrid/TreeNode/Nodes.java @@ -19,11 +19,12 @@ import IceGrid.ServerDynamicInfo; import IceGrid.AdapterDynamicInfo;
import IceGrid.ServerState;
-public class Nodes extends Parent
+public class Nodes extends EditableParent
{
public Nodes(java.util.Map nodeMap, Application application)
+ throws DuplicateIdException
{
- super("Nodes", application.getModel());
+ super(false, "Nodes", application.getModel());
_descriptors = nodeMap;
java.util.Iterator p = nodeMap.entrySet().iterator();
@@ -32,7 +33,7 @@ public class Nodes extends Parent java.util.Map.Entry entry = (java.util.Map.Entry)p.next();
String nodeName = (String)entry.getKey();
NodeDescriptor nodeDescriptor = (NodeDescriptor)entry.getValue();
- addChild(new Node(nodeName, nodeDescriptor, application));
+ addChild(new Node(false, nodeName, nodeDescriptor, application));
}
//
@@ -49,8 +50,49 @@ public class Nodes extends Parent }
}
}
+
+ Nodes(Nodes o)
+ {
+ super(o);
+ _descriptors = o._descriptors;
+
+ //
+ // Deep-copy children
+ //
+ java.util.Iterator p = o._children.iterator();
+ while(p.hasNext())
+ {
+ try
+ {
+ addChild(new Server((Server)p.next()));
+ }
+ catch(DuplicateIdException e)
+ {
+ assert false;
+ }
+ }
+ }
+
+ void update() throws DuplicateIdException
+ {
+ java.util.Iterator p = _descriptors.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();
+
+ Node node = findNode(nodeName);
+ if(node != null)
+ {
+ node.update();
+ }
+ }
+ purgeChildren(_descriptors.keySet());
+ }
void update(java.util.List updates, String[] removeNodes)
+ throws DuplicateIdException
{
Application application = (Application)getParent();
@@ -80,7 +122,7 @@ public class Nodes extends Parent update.serverInstances,
update.servers);
_descriptors.put(update.name, nodeDescriptor);
- node = new Node(update.name, nodeDescriptor, application);
+ node = new Node(false, update.name, nodeDescriptor, application);
newChildren.add(node);
}
else
@@ -97,8 +139,8 @@ public class Nodes extends Parent p = newChildren.iterator();
while(p.hasNext())
{
- ServerTemplate serverTemplate = (ServerTemplate)p.next();
- serverTemplate.setParent(this);
+ Node node = (Node)p.next();
+ node.setParent(this);
}
}
@@ -108,7 +150,15 @@ public class Nodes extends Parent if(node == null)
{
node = new Node(nodeName, _model);
- addChild(node, true);
+ try
+ {
+ addChild(node, true);
+ }
+ catch(DuplicateIdException e)
+ {
+ // Impossible
+ assert false;
+ }
}
else
{
@@ -134,13 +184,13 @@ public class Nodes extends Parent //
}
- public void cleanup()
+ public void unregister()
{
java.util.Iterator p = _children.iterator();
while(p.hasNext())
{
Node node = (Node)p.next();
- node.cleanup();
+ node.unregister();
}
}
diff --git a/java/src/IceGrid/TreeNode/Parent.java b/java/src/IceGrid/TreeNode/Parent.java index 46b36a597d4..6abb9aebc09 100755 --- a/java/src/IceGrid/TreeNode/Parent.java +++ b/java/src/IceGrid/TreeNode/Parent.java @@ -43,6 +43,8 @@ class Parent extends CommonBaseI public void setSelectedItem(Object obj)
{
+ System.err.println("setSelectedItem");
+
_selectedItem = obj;
fireContentsChanged(this, -1, -1);
}
@@ -132,12 +134,13 @@ class Parent extends CommonBaseI return null;
}
- void addChild(CommonBase child)
+ void addChild(CommonBase child) throws DuplicateIdException
{
addChild(child, false);
}
void addChild(CommonBase child, boolean fireEvent)
+ throws DuplicateIdException
{
//
// Sorted insert
@@ -150,7 +153,13 @@ class Parent extends CommonBaseI while(p.hasNext())
{
CommonBase existingChild = (CommonBase)p.next();
- if(id.compareTo(existingChild.getId()) < 0)
+ int cmp = id.compareTo(existingChild.getId());
+
+ if(cmp == 0)
+ {
+ throw new DuplicateIdException(this, id);
+ }
+ if(cmp < 0)
{
break; // while
}
@@ -173,7 +182,7 @@ class Parent extends CommonBaseI void removeChild(CommonBase child)
{
- child.cleanup();
+ child.unregister();
_children.remove(child);
}
@@ -187,7 +196,7 @@ class Parent extends CommonBaseI i++;
if(id.equals(child.getId()))
{
- child.cleanup();
+ child.unregister();
p.remove();
if(fireEvent)
{
@@ -204,7 +213,7 @@ class Parent extends CommonBaseI while(p.hasNext())
{
CommonBase child = (CommonBase)p.next();
- child.cleanup();
+ child.unregister();
}
_children.clear();
}
@@ -232,6 +241,7 @@ class Parent extends CommonBaseI }
void addChildren(CommonBaseI[] newChildren)
+ throws DuplicateIdException
{
if(newChildren.length == 0)
{
@@ -259,7 +269,12 @@ class Parent extends CommonBaseI while(p.hasNext())
{
CommonBase existingChild = (CommonBase)p.next();
- if(id.compareTo(existingChild.getId()) < 0)
+ int cmp = id.compareTo(existingChild.getId());
+ if(cmp == 0)
+ {
+ throw new DuplicateIdException(this, id);
+ }
+ if(cmp < 0)
{
break; // while
}
@@ -315,7 +330,7 @@ class Parent extends CommonBaseI CommonBase child = (CommonBase)p.next();
if(ids[j].equals(child.getId()))
{
- child.cleanup();
+ child.unregister();
childrenToRemove[k] = child;
indices[k] = i;
p.remove();
@@ -368,7 +383,7 @@ class Parent extends CommonBaseI if(id.equals(child.getId()))
{
- child.cleanup();
+ child.unregister();
childrenToRemove.add(child);
indices[k++] = i;
p.remove();
@@ -458,6 +473,20 @@ class Parent extends CommonBaseI this(id, model, false);
}
+ protected Parent(Parent o)
+ {
+ this(o, false);
+ // Derived class is responsible to populate the children
+ }
+
+ protected Parent(Parent o, boolean copyChildren)
+ {
+ super(o);
+ if(copyChildren)
+ {
+ _children = o._children;
+ }
+ }
protected java.util.List _children = new java.util.LinkedList();
private ChildComparator _childComparator = new ChildComparator();
diff --git a/java/src/IceGrid/TreeNode/PropertiesHolder.java b/java/src/IceGrid/TreeNode/PropertiesHolder.java index 27cef9dc611..543985c3cb7 100755 --- a/java/src/IceGrid/TreeNode/PropertiesHolder.java +++ b/java/src/IceGrid/TreeNode/PropertiesHolder.java @@ -12,12 +12,19 @@ import IceGrid.CommunicatorDescriptor; import IceGrid.Model;
import IceGrid.PropertyDescriptor;
-class PropertiesHolder extends Parent
+class PropertiesHolder
{
- String get(String key)
+ PropertiesHolder(CommunicatorDescriptor descriptor,
+ Editable editable)
{
assert _descriptor != null;
+ _descriptor = descriptor;
+ _editable = editable;
+ }
+
+ String get(String key)
+ {
java.util.Iterator p = _descriptor.properties.iterator();
while(p.hasNext())
{
@@ -32,11 +39,7 @@ class PropertiesHolder extends Parent void put(String key, String value)
{
- //
- // TODO mark-modified?
- //
-
- assert _descriptor != null;
+ assert _editable != null;
java.util.Iterator p = _descriptor.properties.iterator();
while(p.hasNext())
@@ -49,13 +52,9 @@ class PropertiesHolder extends Parent }
}
_descriptor.properties.add(new PropertyDescriptor(key, value));
+ _editable.markModified();
}
- PropertiesHolder(String id, Model model)
- {
- super(id, model);
- }
-
- protected CommunicatorDescriptor _descriptor;
-
+ private CommunicatorDescriptor _descriptor;
+ private Editable _editable;
}
diff --git a/java/src/IceGrid/TreeNode/ReplicatedAdapter.java b/java/src/IceGrid/TreeNode/ReplicatedAdapter.java index 27a15bc3151..da406916c74 100755 --- a/java/src/IceGrid/TreeNode/ReplicatedAdapter.java +++ b/java/src/IceGrid/TreeNode/ReplicatedAdapter.java @@ -12,18 +12,33 @@ import IceGrid.ReplicatedAdapterDescriptor; import IceGrid.Model;
import IceGrid.Utils;
-class ReplicatedAdapter extends Leaf
+class ReplicatedAdapter extends EditableLeaf
{
- ReplicatedAdapter(ReplicatedAdapterDescriptor descriptor,
- Model model)
+ ReplicatedAdapter(boolean brandNew,
+ ReplicatedAdapterDescriptor descriptor,
+ Model model)
{
- super(descriptor.id, model);
+ //
+ // Make the assumption that app variables can't be used in
+ // the descriptor.id
+ //
+
+ super(brandNew, descriptor.id, model);
rebuild(descriptor);
}
+ ReplicatedAdapter(ReplicatedAdapter o)
+ {
+ super(o);
+ _descriptor = o._descriptor;
+ }
+
void rebuild(ReplicatedAdapterDescriptor descriptor)
{
_descriptor = descriptor;
+ //
+ // And that's it since there is no children
+ //
}
private ReplicatedAdapterDescriptor _descriptor;
diff --git a/java/src/IceGrid/TreeNode/ReplicatedAdapters.java b/java/src/IceGrid/TreeNode/ReplicatedAdapters.java index 3c0bcc1a7fd..4b0063e3962 100755 --- a/java/src/IceGrid/TreeNode/ReplicatedAdapters.java +++ b/java/src/IceGrid/TreeNode/ReplicatedAdapters.java @@ -14,22 +14,57 @@ import IceGrid.ReplicatedAdapterDescriptor; import IceGrid.Model;
import IceGrid.Utils;
-class ReplicatedAdapters extends Parent
+class ReplicatedAdapters extends EditableParent
{
ReplicatedAdapters(java.util.List descriptors, Model model)
+ throws DuplicateIdException
{
- super("Replicated Adapters", model);
- java.util.Iterator p = descriptors.iterator();
+ super(false, "Replicated Adapters", model);
+ _descriptors = descriptors;
+
+ java.util.Iterator p = _descriptors.iterator();
while(p.hasNext())
{
ReplicatedAdapterDescriptor descriptor
= (ReplicatedAdapterDescriptor)p.next();
- addChild(new ReplicatedAdapter(descriptor, _model));
+ addChild(new ReplicatedAdapter(false, descriptor, _model));
+ }
+ }
+
+ ReplicatedAdapters(ReplicatedAdapters o)
+ throws DuplicateIdException
+ {
+ super(o);
+ java.util.Iterator p = o._children.iterator();
+ while(p.hasNext())
+ {
+ ReplicatedAdapter ra = (ReplicatedAdapter)p.next();
+ addChild(new ReplicatedAdapter(ra));
+ }
+ }
+
+ void update() throws DuplicateIdException
+ {
+ java.util.Set keepSet = new java.util.HashSet();
+
+ java.util.Iterator p = _descriptors.iterator();
+ while(p.hasNext())
+ {
+ ReplicatedAdapterDescriptor descriptor
+ = (ReplicatedAdapterDescriptor)p.next();
+ keepSet.add(descriptor.id);
+
+ ReplicatedAdapter ra = (ReplicatedAdapter)findChild(descriptor.id);
+ assert ra != null;
+ ra.rebuild(descriptor);
}
+ purgeChildren(keepSet);
}
+
void update(java.util.List descriptors, String[] removeAdapters)
+ throws DuplicateIdException
{
_descriptors = descriptors;
@@ -54,7 +89,7 @@ class ReplicatedAdapters extends Parent = (ReplicatedAdapter)findChild(descriptor.id);
if(child == null)
{
- newChildren.add(new ReplicatedAdapter(descriptor,
+ newChildren.add(new ReplicatedAdapter(false, descriptor,
_model));
}
else
diff --git a/java/src/IceGrid/TreeNode/Root.java b/java/src/IceGrid/TreeNode/Root.java index 7634e71f4d5..1a5e8a970cd 100755 --- a/java/src/IceGrid/TreeNode/Root.java +++ b/java/src/IceGrid/TreeNode/Root.java @@ -18,39 +18,8 @@ import IceGrid.ServerState; import IceGrid.TreeModelI;
-public class Root extends Parent
+public class Root extends EditableParent
{
- static class AdapterInstanceId
- {
- AdapterInstanceId(String serverId, String adapterId)
- {
- this.serverId = serverId;
- this.adapterId = adapterId;
- }
-
- public boolean equals(Object obj)
- {
- try
- {
- AdapterInstanceId other = (AdapterInstanceId)obj;
- return serverId.equals(other.serverId)
- && adapterId.equals(other.adapterId);
- }
- catch(ClassCastException e)
- {
- return false;
- }
- }
-
- public int hashCode()
- {
- return serverId.hashCode() ^ adapterId.hashCode();
- }
-
- String serverId;
- String adapterId;
- };
-
static class DynamicInfo
{
//
@@ -67,7 +36,7 @@ public class Root extends Parent public Root(Model model)
{
- super("Applications", model, true);
+ super(false, "Applications", model, true);
}
public void init(java.util.List descriptors)
@@ -78,9 +47,22 @@ public class Root extends Parent while(p.hasNext())
{
ApplicationDescriptor descriptor = (ApplicationDescriptor)p.next();
- Application child = new Application(descriptor, _model);
- addChild(child);
- child.setParent(this);
+ try
+ {
+ Application child = new Application(descriptor, _model);
+ addChild(child);
+ child.setParent(this);
+ }
+ catch(DuplicateIdException e)
+ {
+ //
+ // Bug in the IceGrid registry
+ //
+ System.err.println("Failed to create application "
+ + descriptor.name + ": "
+ + e.toString());
+ assert false;
+ }
}
fireStructureChangedEvent(this);
expandChildren();
@@ -94,9 +76,22 @@ public class Root extends Parent public void applicationAdded(ApplicationDescriptor desc)
{
- Application child = new Application(desc, _model);
- child.setParent(this);
- addChild(child, true);
+ try
+ {
+ Application child = new Application(desc, _model);
+ child.setParent(this);
+ addChild(child, true);
+ }
+ catch(DuplicateIdException e)
+ {
+ //
+ // Bug in the IceGrid registry
+ //
+ System.err.println("Failed to create application "
+ + desc.name + ": "
+ + e.toString());
+ assert false;
+ }
expandChildren();
}
@@ -108,8 +103,21 @@ public class Root extends Parent public void applicationUpdated(ApplicationUpdateDescriptor desc)
{
- Application application = (Application)findChild(desc.name);
- application.update(desc);
+ try
+ {
+ Application application = (Application)findChild(desc.name);
+ application.update(desc);
+ }
+ catch(DuplicateIdException e)
+ {
+ //
+ // Bug in the IceGrid registry
+ //
+ System.err.println("Failed to update application "
+ + desc.name + ": "
+ + e.toString());
+ assert false;
+ }
expandChildren();
}
@@ -127,48 +135,19 @@ public class Root extends Parent info.serverInfoMap.put(updatedInfo.servers[i].id, updatedInfo.servers[i]);
}
- //
- // Need to tell *every* server on this node
- //
- java.util.List serverList = (java.util.List)_nodeServerMap.get(nodeName);
- if(serverList != null)
- {
- java.util.Iterator p = serverList.iterator();
- while(p.hasNext())
- {
- Server server = (Server)p.next();
- ServerDynamicInfo serverInfo = (ServerDynamicInfo)info.
- serverInfoMap.get(server.getId());
- if(serverInfo == null)
- {
- server.updateDynamicInfo(ServerState.Inactive, 0);
- }
- else
- {
- server.updateDynamicInfo(serverInfo.state, serverInfo.pid);
- }
- }
- }
-
for(int i = 0; i < updatedInfo.adapters.length; ++i)
{
+ assert(updatedInfo.adapters[i].proxy != null);
AdapterInstanceId instanceId = new AdapterInstanceId(
- "" /* updatedInfo.adapters[i].serverId */, updatedInfo.adapters[i].id);
-
+ updatedInfo.adapters[i].serverId, updatedInfo.adapters[i].id);
info.adapterInfoMap.put(instanceId, updatedInfo.adapters[i].proxy);
-
- Adapter adapter = (Adapter)_adapterMap.get(instanceId);
- if(adapter != null)
- {
- adapter.updateProxy(updatedInfo.adapters[i].proxy);
- }
}
java.util.Iterator p = _children.iterator();
while(p.hasNext())
{
Application application = (Application)p.next();
- application.nodeUp(nodeName);
+ application.nodeUp(nodeName, info);
}
}
@@ -182,26 +161,6 @@ public class Root extends Parent Application application = (Application)p.next();
application.nodeDown(nodeName);
}
-
- java.util.List serverList = (java.util.List)_nodeServerMap.get(nodeName);
- if(serverList != null)
- {
- while(p.hasNext())
- {
- Server server = (Server)p.next();
- server.updateDynamicInfo(null, 0);
- }
- }
-
- java.util.List adapterList = (java.util.List)_nodeAdapterMap.get(nodeName);
- if(adapterList != null)
- {
- while(p.hasNext())
- {
- Adapter adapter = (Adapter)p.next();
- adapter.updateProxy(null);
- }
- }
}
public java.util.Set getNodesUp()
@@ -218,13 +177,14 @@ public class Root extends Parent assert info != null;
info.serverInfoMap.put(updatedInfo.id, updatedInfo);
- //
- // Is a corresponding Server registered?
- //
- Server server = (Server)_serverMap.get(updatedInfo.id);
- if(server != null)
+ java.util.Iterator p = _children.iterator();
+ while(p.hasNext())
{
- server.updateDynamicInfo(updatedInfo.state, updatedInfo.pid);
+ Application application = (Application)p.next();
+ if(application.updateServer(updatedInfo))
+ {
+ break; // while
+ }
}
}
@@ -239,126 +199,41 @@ public class Root extends Parent = new AdapterInstanceId("" /* updatedInfo.serverId */, updatedInfo.id);
info.adapterInfoMap.put(instanceId, updatedInfo.proxy);
- //
- // Is a corresponding Adapter registered?
- //
- Adapter adapter = (Adapter)_adapterMap.get(instanceId);
- if(adapter != null)
- {
- adapter.updateProxy(updatedInfo.proxy);
- }
- }
-
- Ice.ObjectPrx registerAdapter(String nodeName, String serverId, String adapterId,
- Adapter adapter)
- {
- AdapterInstanceId instanceId = new AdapterInstanceId(serverId, adapterId);
-
- _adapterMap.put(instanceId, adapter);
-
- java.util.List adapterList = (java.util.List)_nodeAdapterMap.get(nodeName);
- if(adapterList == null)
- {
- adapterList = new java.util.LinkedList();
- _nodeAdapterMap.put(nodeName, adapterList);
- }
- adapterList.add(adapter);
-
- DynamicInfo info = (DynamicInfo)_dynamicInfoMap.get(nodeName);
- if(info == null)
- {
- // Node is down
- return null;
- }
- else
+ java.util.Iterator p = _children.iterator();
+ while(p.hasNext())
{
- return (Ice.ObjectPrx)info.adapterInfoMap.get(instanceId);
+ Application application = (Application)p.next();
+ if(application.updateAdapter(instanceId, updatedInfo.proxy))
+ {
+ break; // while
+ }
}
}
- void unregisterAdapter(String nodeName, String serverId, String adapterId,
- Adapter adapter)
+ DynamicInfo getDynamicInfo(String nodeName)
{
- AdapterInstanceId instanceId = new AdapterInstanceId(serverId, adapterId);
- _adapterMap.remove(instanceId);
-
- java.util.List adapterList = (java.util.List)_nodeAdapterMap.get(nodeName);
- if(adapterList != null)
- {
- adapterList.remove(adapter);
- }
+ return (DynamicInfo)_dynamicInfoMap.get(nodeName);
}
- ServerState registerServer(String nodeName, String serverId, Server server,
- Ice.IntHolder pid)
+ void restore(Application copy)
{
- _serverMap.put(serverId, server);
-
- java.util.List serverList = (java.util.List)_nodeServerMap.get(nodeName);
- if(serverList == null)
+ //
+ // TODO: fire event or not?
+ //
+ removeChild(copy.getId(), true);
+ try
{
- serverList = new java.util.LinkedList();
- _nodeServerMap.put(nodeName, serverList);
+ addChild(copy, true);
}
- serverList.add(server);
-
- DynamicInfo info = (DynamicInfo)_dynamicInfoMap.get(nodeName);
- if(info == null)
- {
- // Node is down
- pid.value = 0;
- return null;
- }
- else
+ catch(DuplicateIdException e)
{
- ServerDynamicInfo serverInfo = (ServerDynamicInfo)info.
- serverInfoMap.get(serverId);
- if(serverInfo == null)
- {
- pid.value = 0;
- return ServerState.Inactive;
- }
- else
- {
- pid.value = serverInfo.pid;
- return serverInfo.state;
- }
+ assert false; // impossible
}
}
- void unregisterServer(String nodeName, String serverId, Server server)
- {
- _serverMap.remove(serverId);
- java.util.List serverList = (java.util.List)_nodeServerMap.get(nodeName);
- if(serverList != null)
- {
- serverList.remove(server);
- }
- }
-
-
//
// Nodename to DynamicInfo
//
private java.util.Map _dynamicInfoMap = new java.util.HashMap();
- //
- // AdapterInstanceId to Adapter
- //
- private java.util.Map _adapterMap = new java.util.HashMap();
-
- //
- // Nodename to list of Adapter (used when a node goes down)
- //
- private java.util.Map _nodeAdapterMap = new java.util.HashMap();
-
- //
- // ServerId to Server
- //
- private java.util.Map _serverMap = new java.util.HashMap();
-
- //
- // Nodename to list of Server (used when a node goes down)
- //
- private java.util.Map _nodeServerMap = new java.util.HashMap();
}
diff --git a/java/src/IceGrid/TreeNode/Server.java b/java/src/IceGrid/TreeNode/Server.java index b799e49c786..d90883e5ca6 100755 --- a/java/src/IceGrid/TreeNode/Server.java +++ b/java/src/IceGrid/TreeNode/Server.java @@ -56,7 +56,7 @@ import IceGrid.Utils; // - Server instance
// - Icebox instance
//
-class Server extends PropertiesHolder
+class Server extends EditableParent
{
static class Editor
{
@@ -380,17 +380,22 @@ class Server extends PropertiesHolder }
+ public PropertiesHolder getPropertiesHolder()
+ {
+ return _propertiesHolder;
+ }
+
//
// Builds the server and all its sub-tree
//
- Server(String serverId, Utils.Resolver resolver,
- ServerInstanceDescriptor instanceDescriptor,
+ Server(boolean brandNew, String serverId,
+ Utils.Resolver resolver, ServerInstanceDescriptor instanceDescriptor,
ServerDescriptor serverDescriptor,
- Application application)
+ Application application) throws DuplicateIdException
{
- super(serverId, application.getModel());
+ super(brandNew, serverId, application.getModel());
Ice.IntHolder pid = new Ice.IntHolder();
- _state = _model.getRoot().registerServer(resolver.find("node"),
+ _state = getApplication().registerServer(resolver.find("node"),
_id,
this,
pid);
@@ -398,33 +403,49 @@ class Server extends PropertiesHolder rebuild(resolver, instanceDescriptor, serverDescriptor, application);
}
+ Server(Server o)
+ {
+ super(o, true);
+
+ _state = o._state;
+ _stateIconIndex = o._stateIconIndex;
+ _pid = o._pid;
+ _toolTip = o._toolTip;
+
+ _instanceDescriptor = o._instanceDescriptor;
+ _serverDescriptor = o._serverDescriptor;
+
+ Utils.Resolver _resolver = o._resolver;
+
+ _services = o._services;
+ _adapters = o._adapters;
+ _dbEnvs = o._dbEnvs;
+ }
+
//
// Update the server and all its subtree
//
void rebuild(Utils.Resolver resolver,
ServerInstanceDescriptor instanceDescriptor,
ServerDescriptor serverDescriptor,
- Application application)
+ Application application) throws DuplicateIdException
{
assert serverDescriptor != null;
_resolver = resolver;
_instanceDescriptor = instanceDescriptor;
_serverDescriptor = serverDescriptor;
- _descriptor = serverDescriptor;
-
clearChildren();
- boolean editable = (instanceDescriptor == null);
+ boolean isEditable = (instanceDescriptor == null);
+ _propertiesHolder = new PropertiesHolder(serverDescriptor,
+ isEditable ? this : null);
if(serverDescriptor instanceof IceBoxDescriptor)
{
IceBoxDescriptor iceBoxDescriptor = (IceBoxDescriptor)serverDescriptor;
-
- //
- // We need to pass the node to register the adapters
- //
+
_services = new Services(iceBoxDescriptor.services,
- editable, _resolver, application);
+ isEditable ? this : null, _resolver, application);
addChild(_services);
_services.setParent(this);
@@ -438,29 +459,26 @@ class Server extends PropertiesHolder {
_services = null;
_dbEnvs = new DbEnvs(serverDescriptor.dbEnvs,
- editable, _resolver, _model);
+ isEditable, _resolver, _model);
addChild(_dbEnvs);
_dbEnvs.setParent(this);
}
_adapters = new Adapters(serverDescriptor.adapters,
- editable, _resolver, _model);
+ isEditable, _resolver, application, _model);
addChild(_adapters);
_adapters.setParent(this);
}
-
- public void cleanup()
+ public void unregister()
{
- assert _resolver != null;
-
- _model.getRoot().unregisterServer(_resolver.find("node"),
+ getApplication().unregisterServer(_resolver.find("node"),
_id,
this);
- _adapters.cleanup();
+ _adapters.unregister();
if(_services != null)
{
- _services.cleanup();
+ _services.unregister();
}
}
@@ -586,6 +604,8 @@ class Server extends PropertiesHolder private Utils.Resolver _resolver;
+ private PropertiesHolder _propertiesHolder;
+
//
// Children
//
diff --git a/java/src/IceGrid/TreeNode/ServerTemplate.java b/java/src/IceGrid/TreeNode/ServerTemplate.java index 6c050a01d6c..98852037241 100755 --- a/java/src/IceGrid/TreeNode/ServerTemplate.java +++ b/java/src/IceGrid/TreeNode/ServerTemplate.java @@ -41,22 +41,37 @@ import IceGrid.TemplateDescriptor; import IceGrid.Utils;
-class ServerTemplate extends PropertiesHolder
+class ServerTemplate extends EditableParent
{
//
// Application is needed to lookup service templates
//
- ServerTemplate(String name, TemplateDescriptor descriptor, Application application)
+ ServerTemplate(boolean brandNew, String name, TemplateDescriptor descriptor,
+ Application application)
+ throws DuplicateIdException
{
- super(name, application.getModel());
+ super(brandNew, name, application.getModel());
rebuild(descriptor, application);
}
+ ServerTemplate(ServerTemplate o)
+ {
+ super(o, true);
+ _templateDescriptor = o._templateDescriptor;
+ _iceBoxDescriptor = o._iceBoxDescriptor;
+ _services = o._services;
+ _dbEnvs = o._dbEnvs;
+ _adapters = o._adapters;
+
+ _propertiesHolder = new PropertiesHolder(_templateDescriptor.descriptor, this);
+ }
+
void rebuild(TemplateDescriptor descriptor, Application application)
+ throws DuplicateIdException
{
_templateDescriptor = descriptor;
- _descriptor = _templateDescriptor.descriptor;
+ _propertiesHolder = new PropertiesHolder(_templateDescriptor.descriptor, this);
clearChildren();
//
@@ -68,7 +83,7 @@ class ServerTemplate extends PropertiesHolder {
_iceBoxDescriptor = (IceBoxDescriptor)_templateDescriptor.descriptor;
- _services = new Services(_iceBoxDescriptor.services, true, null,
+ _services = new Services(_iceBoxDescriptor.services, this, null,
application);
addChild(_services);
@@ -86,10 +101,14 @@ class ServerTemplate extends PropertiesHolder }
_adapters = new Adapters(_templateDescriptor.descriptor.adapters, true,
- null, _model);
+ null, null, _model);
addChild(_adapters);
}
+ public PropertiesHolder getPropertiesHolder()
+ {
+ return _propertiesHolder;
+ }
public String toString()
{
@@ -107,4 +126,6 @@ class ServerTemplate extends PropertiesHolder private Services _services;
private Adapters _adapters;
private DbEnvs _dbEnvs;
+
+ private PropertiesHolder _propertiesHolder;
}
diff --git a/java/src/IceGrid/TreeNode/ServerTemplates.java b/java/src/IceGrid/TreeNode/ServerTemplates.java index 530ccc7e8e1..42e000950fe 100755 --- a/java/src/IceGrid/TreeNode/ServerTemplates.java +++ b/java/src/IceGrid/TreeNode/ServerTemplates.java @@ -12,11 +12,12 @@ import IceGrid.Model; import IceGrid.TemplateDescriptor;
import IceGrid.TreeModelI;
-class ServerTemplates extends Parent
+class ServerTemplates extends EditableParent
{
ServerTemplates(java.util.Map descriptors, Application application)
+ throws DuplicateIdException
{
- super("Server templates", application.getModel());
+ super(false, "Server templates", application.getModel());
_descriptors = descriptors;
@@ -25,19 +26,68 @@ class ServerTemplates extends Parent while(p.hasNext())
{
java.util.Map.Entry entry = (java.util.Map.Entry)p.next();
- addChild(new ServerTemplate((String)entry.getKey(),
+ addChild(new ServerTemplate(false, (String)entry.getKey(),
(TemplateDescriptor)entry.getValue(),
application));
}
}
+
+ ServerTemplates(ServerTemplates o)
+ {
+ super(o);
+ _descriptors = o._descriptors;
+
+ //
+ // Deep-copy children
+ //
+ java.util.Iterator p = o._children.iterator();
+ while(p.hasNext())
+ {
+ try
+ {
+ addChild(new ServerTemplate((ServerTemplate)p.next()));
+ }
+ catch(DuplicateIdException e)
+ {
+ assert false;
+ }
+ }
+ }
+
+ void update() throws DuplicateIdException
+ {
+ //
+ // The only template-descriptor update going through the
+ // update() calls is the update or removal of one template;
+ // template addition does not require a complex validation.
+ //
+
+ Application application = getApplication();
+
+ java.util.Iterator p = _descriptors.entrySet().iterator();
+ while(p.hasNext())
+ {
+ java.util.Map.Entry entry = (java.util.Map.Entry)p.next();
+ String templateId = (String)entry.getKey();
+ TemplateDescriptor d = (TemplateDescriptor)entry.getValue();
+
+ ServerTemplate t = (ServerTemplate)findChild(templateId);
+ if(t != null)
+ {
+ t.rebuild(d, application);
+ }
+ }
+ purgeChildren(_descriptors.keySet());
+ }
void update(java.util.Map updates, String[] removeTemplates)
+ throws DuplicateIdException
{
//
// Note: _descriptors is updated by Application
//
- Application application = (Application)getParent();
+ Application application = getApplication();
//
// One big set of removes
@@ -60,7 +110,7 @@ class ServerTemplates extends Parent ServerTemplate child = (ServerTemplate)findChild(name);
if(child == null)
{
- newChildren.add(new ServerTemplate(name, templateDescriptor,
+ newChildren.add(new ServerTemplate(false, name, templateDescriptor,
application));
}
else
diff --git a/java/src/IceGrid/TreeNode/Service.java b/java/src/IceGrid/TreeNode/Service.java index 53261c292df..07e99d1f534 100755 --- a/java/src/IceGrid/TreeNode/Service.java +++ b/java/src/IceGrid/TreeNode/Service.java @@ -14,38 +14,38 @@ import IceGrid.ServiceInstanceDescriptor; import IceGrid.TemplateDescriptor;
import IceGrid.Utils;
-class Service extends PropertiesHolder
+class Service extends Parent
{
Service(String name,
String displayString,
ServiceInstanceDescriptor instanceDescriptor,
ServiceDescriptor serviceDescriptor,
- boolean editable,
+ Editable editable,
Utils.Resolver resolver,
+ Application application,
Model model)
+ throws DuplicateIdException
{
super(name, model);
_displayString = displayString;
_instanceDescriptor = instanceDescriptor;
_serviceDescriptor = serviceDescriptor;
- _descriptor = serviceDescriptor;
+ _propertiesHolder = new PropertiesHolder(serviceDescriptor, editable);
- _editable = editable;
+ _isEditable = editable != null;
_resolver = resolver;
- boolean childrenEditable = _editable &&
- (_instanceDescriptor.template.length() == 0);
+ boolean areChildrenEditable = _instanceDescriptor.template.length() == 0 && editable != null;
_adapters = new Adapters(serviceDescriptor.adapters,
- childrenEditable, resolver, _model);
+ areChildrenEditable, resolver, application, _model);
addChild(_adapters);
_dbEnvs = new DbEnvs(serviceDescriptor.dbEnvs,
- childrenEditable, resolver, _model);
+ areChildrenEditable, resolver, _model);
addChild(_dbEnvs);
}
-
public String toString()
{
if(_displayString != null)
@@ -58,16 +58,23 @@ class Service extends PropertiesHolder }
}
- public void cleanup()
+ public PropertiesHolder getPropertiesHolder()
{
- _adapters.cleanup();
+ return _propertiesHolder;
+ }
+
+ public void unregister()
+ {
+ _adapters.unregister();
}
private ServiceInstanceDescriptor _instanceDescriptor;
private ServiceDescriptor _serviceDescriptor;
private String _displayString;
- private boolean _editable;
+ private boolean _isEditable;
private Utils.Resolver _resolver;
private Adapters _adapters;
private DbEnvs _dbEnvs;
+
+ private PropertiesHolder _propertiesHolder;
}
diff --git a/java/src/IceGrid/TreeNode/ServiceTemplate.java b/java/src/IceGrid/TreeNode/ServiceTemplate.java index bfc0c177609..7cee10443ca 100755 --- a/java/src/IceGrid/TreeNode/ServiceTemplate.java +++ b/java/src/IceGrid/TreeNode/ServiceTemplate.java @@ -11,18 +11,31 @@ package IceGrid.TreeNode; import IceGrid.TemplateDescriptor;
import IceGrid.Model;
-class ServiceTemplate extends PropertiesHolder
+class ServiceTemplate extends EditableParent
{
- ServiceTemplate(String name, TemplateDescriptor descriptor, Model model)
+ ServiceTemplate(boolean brandNew, String name,
+ TemplateDescriptor descriptor, Model model)
+ throws DuplicateIdException
{
- super(name, model);
+ super(brandNew, name, model);
rebuild(descriptor);
}
+
+ ServiceTemplate(ServiceTemplate o)
+ {
+ super(o, true);
+ _templateDescriptor = o._templateDescriptor;
+ _adapters = o._adapters;
+ _dbEnvs = o._dbEnvs;
+ _propertiesHolder = new PropertiesHolder(_templateDescriptor.descriptor, this);
+ }
+
void rebuild(TemplateDescriptor descriptor)
+ throws DuplicateIdException
{
_templateDescriptor = descriptor;
- _descriptor = _templateDescriptor.descriptor;
+ _propertiesHolder = new PropertiesHolder(_templateDescriptor.descriptor, this);
clearChildren();
//
@@ -31,7 +44,7 @@ class ServiceTemplate extends PropertiesHolder java.util.Collections.sort(_templateDescriptor.parameters);
_adapters = new Adapters(_templateDescriptor.descriptor.adapters, true,
- null, _model);
+ null, null, _model);
addChild(_adapters);
_dbEnvs = new DbEnvs(_templateDescriptor.descriptor.dbEnvs, true,
@@ -39,6 +52,11 @@ class ServiceTemplate extends PropertiesHolder addChild(_dbEnvs);
}
+ public PropertiesHolder getPropertiesHolder()
+ {
+ return _propertiesHolder;
+ }
+
public String toString()
{
return templateLabel(_id, _templateDescriptor.parameters);
@@ -47,4 +65,6 @@ class ServiceTemplate extends PropertiesHolder private TemplateDescriptor _templateDescriptor;
private Adapters _adapters;
private DbEnvs _dbEnvs;
+
+ private PropertiesHolder _propertiesHolder;
}
diff --git a/java/src/IceGrid/TreeNode/ServiceTemplates.java b/java/src/IceGrid/TreeNode/ServiceTemplates.java index adb73425d13..04e772bd081 100755 --- a/java/src/IceGrid/TreeNode/ServiceTemplates.java +++ b/java/src/IceGrid/TreeNode/ServiceTemplates.java @@ -11,11 +11,12 @@ package IceGrid.TreeNode; import IceGrid.TemplateDescriptor;
import IceGrid.Model;
-class ServiceTemplates extends Parent
+class ServiceTemplates extends EditableParent
{
ServiceTemplates(java.util.Map descriptors, Model model)
+ throws DuplicateIdException
{
- super("Service templates", model);
+ super(false, "Service templates", model);
_descriptors = descriptors;
@@ -24,13 +25,60 @@ class ServiceTemplates extends Parent while(p.hasNext())
{
java.util.Map.Entry entry = (java.util.Map.Entry)p.next();
- addChild(new ServiceTemplate((String)entry.getKey(),
+ addChild(new ServiceTemplate(false, (String)entry.getKey(),
(TemplateDescriptor)entry.getValue(),
_model));
}
}
+ ServiceTemplates(ServiceTemplates o)
+ {
+ super(o);
+ _descriptors = o._descriptors;
+
+ //
+ // Deep-copy children
+ //
+ java.util.Iterator p = o._children.iterator();
+ while(p.hasNext())
+ {
+ try
+ {
+ addChild(new ServiceTemplate((ServiceTemplate)p.next()));
+ }
+ catch(DuplicateIdException e)
+ {
+ assert false;
+ }
+ }
+ }
+
+ void update() throws DuplicateIdException
+ {
+ //
+ // The only template-descriptor update going through the
+ // update() calls is the update or removal of one template;
+ // template addition does not require a complex validation.
+ //
+ java.util.Iterator p = _descriptors.entrySet().iterator();
+ while(p.hasNext())
+ {
+ java.util.Map.Entry entry = (java.util.Map.Entry)p.next();
+ String templateId = (String)entry.getKey();
+ TemplateDescriptor d = (TemplateDescriptor)entry.getValue();
+
+ ServiceTemplate t = (ServiceTemplate)findChild(templateId);
+ if(t != null)
+ {
+ t.rebuild(d);
+ }
+ }
+ purgeChildren(_descriptors.keySet());
+ }
+
+
void update(java.util.Map descriptors, String[] removeTemplates)
+ throws DuplicateIdException
{
//
// Note: _descriptors is updated by Application
@@ -57,8 +105,8 @@ class ServiceTemplates extends Parent ServiceTemplate child = (ServiceTemplate)findChild(name);
if(child == null)
{
- newChildren.add(new ServiceTemplate(name, templateDescriptor,
- _model));
+ newChildren.add(new ServiceTemplate(false, name,
+ templateDescriptor, _model));
}
else
{
diff --git a/java/src/IceGrid/TreeNode/Services.java b/java/src/IceGrid/TreeNode/Services.java index 7848234a622..ebf5a2aea2d 100755 --- a/java/src/IceGrid/TreeNode/Services.java +++ b/java/src/IceGrid/TreeNode/Services.java @@ -17,9 +17,10 @@ import IceGrid.Utils; class Services extends Parent
{
Services(java.util.List descriptors,
- boolean editable,
+ Editable editable,
Utils.Resolver resolver, // Null within template
Application application)
+ throws DuplicateIdException
{
super("Services", application.getModel());
_descriptors = descriptors;
@@ -79,24 +80,25 @@ class Services extends Parent serviceName = serviceDescriptor.name;
}
}
-
+
addChild(new Service(serviceName,
displayString,
descriptor,
serviceDescriptor,
editable,
serviceResolver,
+ application,
_model));
}
}
- public void cleanup()
+ public void unregister()
{
java.util.Iterator p = _children.iterator();
while(p.hasNext())
{
Service service = (Service)p.next();
- service.cleanup();
+ service.unregister();
}
}
|