diff options
Diffstat (limited to 'java/src')
-rwxr-xr-x | java/src/IceGrid/TreeNode/AbstractServerEditor.java | 185 | ||||
-rwxr-xr-x | java/src/IceGrid/TreeNode/Adapters.java | 9 | ||||
-rwxr-xr-x | java/src/IceGrid/TreeNode/Application.java | 12 | ||||
-rwxr-xr-x | java/src/IceGrid/TreeNode/EditableParent.java | 5 | ||||
-rwxr-xr-x | java/src/IceGrid/TreeNode/Node.java | 324 | ||||
-rwxr-xr-x | java/src/IceGrid/TreeNode/Nodes.java | 9 | ||||
-rwxr-xr-x | java/src/IceGrid/TreeNode/ReplicatedAdapters.java | 4 | ||||
-rwxr-xr-x | java/src/IceGrid/TreeNode/Server.java | 208 | ||||
-rwxr-xr-x | java/src/IceGrid/TreeNode/ServerEditor.java | 19 | ||||
-rwxr-xr-x | java/src/IceGrid/TreeNode/ServerInstanceEditor.java | 29 | ||||
-rwxr-xr-x | java/src/IceGrid/TreeNode/ServerTemplates.java | 15 | ||||
-rwxr-xr-x | java/src/IceGrid/TreeNode/ServiceTemplates.java | 18 | ||||
-rwxr-xr-x | java/src/IceGrid/TreeNode/Services.java | 21 |
13 files changed, 734 insertions, 124 deletions
diff --git a/java/src/IceGrid/TreeNode/AbstractServerEditor.java b/java/src/IceGrid/TreeNode/AbstractServerEditor.java new file mode 100755 index 00000000000..20c332d2ebf --- /dev/null +++ b/java/src/IceGrid/TreeNode/AbstractServerEditor.java @@ -0,0 +1,185 @@ +// **********************************************************************
+//
+// 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 javax.swing.JOptionPane;
+
+import IceGrid.Model;
+import IceGrid.ServerDescriptor;
+import IceGrid.ServerInstanceDescriptor;
+
+//
+// Base class for ServerEditor and ServerInstanceEditor
+//
+
+abstract class AbstractServerEditor extends Editor
+{
+ abstract protected void writeDescriptor();
+ abstract protected boolean isSimpleUpdate();
+
+ protected void applyUpdate()
+ {
+ Server server = (Server)_target;
+ Model model = server.getModel();
+
+ if(model.canUpdate())
+ {
+ model.disableDisplay();
+
+ try
+ {
+ if(server.isEphemeral())
+ {
+ Node node = (Node)server.getParent();
+ writeDescriptor();
+ ServerInstanceDescriptor instanceDescriptor =
+ server.getInstanceDescriptor();
+ ServerDescriptor serverDescriptor =
+ server.getServerDescriptor();
+
+ server.destroy(); // just removes the child
+
+ try
+ {
+ node.tryAdd(instanceDescriptor, serverDescriptor);
+ }
+ catch(UpdateFailedException e)
+ {
+ //
+ // Add back ephemeral child
+ //
+ try
+ {
+ node.addChild(server, true);
+ }
+ catch(UpdateFailedException die)
+ {
+ assert false;
+ }
+ model.setSelectionPath(server.getPath());
+
+ JOptionPane.showMessageDialog(
+ model.getMainFrame(),
+ e.toString(),
+ "Apply failed",
+ JOptionPane.ERROR_MESSAGE);
+ return;
+ }
+
+ //
+ // Success
+ //
+ if(instanceDescriptor != null)
+ {
+ _target = node.findChildWithDescriptor(instanceDescriptor);
+ }
+ else
+ {
+ _target = node.findChildWithDescriptor(serverDescriptor);
+ }
+ model.setSelectionPath(_target.getPath());
+ model.showActions(_target);
+ }
+ else if(isSimpleUpdate())
+ {
+ writeDescriptor();
+ _target.getEditable().markModified();
+ }
+ else
+ {
+ //
+ // Save to be able to rollback
+ //
+ Object savedDescriptor = server.saveDescriptor();
+ Node node = (Node)server.getParent();
+ writeDescriptor();
+
+ ServerInstanceDescriptor instanceDescriptor =
+ server.getInstanceDescriptor();
+ ServerDescriptor serverDescriptor =
+ server.getServerDescriptor();
+
+ node.removeChild(server, true);
+ if(instanceDescriptor != null)
+ {
+ node.removeDescriptor(instanceDescriptor);
+ }
+ else
+ {
+ node.removeDescriptor(serverDescriptor);
+ }
+
+ try
+ {
+ node.tryAdd(instanceDescriptor, serverDescriptor);
+ }
+ catch(UpdateFailedException e)
+ {
+ //
+ // Restore all
+ //
+ server.restoreDescriptor(savedDescriptor);
+ if(instanceDescriptor != null)
+ {
+ node.addDescriptor(instanceDescriptor);
+ }
+ else
+ {
+ node.addDescriptor(serverDescriptor);
+ }
+
+ try
+ {
+ node.addChild(server, true);
+ }
+ catch(UpdateFailedException die)
+ {
+ assert false;
+ }
+ model.setSelectionPath(server.getPath());
+
+ JOptionPane.showMessageDialog(
+ model.getMainFrame(),
+ e.toString(),
+ "Apply failed",
+ JOptionPane.ERROR_MESSAGE);
+ return;
+ }
+
+ //
+ // Success
+ //
+ node.removeElement(server.getId());
+
+ if(instanceDescriptor != null)
+ {
+ _target = node.findChildWithDescriptor(instanceDescriptor);
+ }
+ else
+ {
+ _target = node.findChildWithDescriptor(serverDescriptor);
+ }
+ model.setSelectionPath(_target.getPath());
+ model.showActions(_target);
+ }
+
+ _applyButton.setEnabled(false);
+ _discardButton.setEnabled(false);
+ }
+ finally
+ {
+ model.enableDisplay();
+ }
+ }
+ }
+
+
+ protected AbstractServerEditor()
+ {}
+}
diff --git a/java/src/IceGrid/TreeNode/Adapters.java b/java/src/IceGrid/TreeNode/Adapters.java index 8463d2134ed..f80811725e0 100755 --- a/java/src/IceGrid/TreeNode/Adapters.java +++ b/java/src/IceGrid/TreeNode/Adapters.java @@ -41,7 +41,14 @@ class Adapters extends ListParent public boolean[] getAvailableActions() { boolean[] actions = new boolean[ACTION_COUNT]; - actions[PASTE] = canHaveNewChild(); + + Object descriptor = _model.getClipboard(); + if(descriptor != null) + { + actions[PASTE] = canHaveNewChild() && + descriptor instanceof AdapterDescriptor; + } + actions[NEW_ADAPTER] = canHaveNewChild(); return actions; } diff --git a/java/src/IceGrid/TreeNode/Application.java b/java/src/IceGrid/TreeNode/Application.java index a6fce75b90b..8e61129c0d0 100755 --- a/java/src/IceGrid/TreeNode/Application.java +++ b/java/src/IceGrid/TreeNode/Application.java @@ -78,29 +78,25 @@ public class Application extends EditableParent // Replicated Adapters
//
update.removeReplicatedAdapters = _replicatedAdapters.removedElements();
- update.replicatedAdapters = new java.util.LinkedList();
- _replicatedAdapters.getUpdates(update.replicatedAdapters);
+ update.replicatedAdapters = _replicatedAdapters.getUpdates();
//
// Server Templates
//
update.removeServerTemplates = _serverTemplates.removedElements();
- update.serverTemplates = new java.util.HashMap();
- _serverTemplates.getUpdates(update.serverTemplates);
+ update.serverTemplates = _serverTemplates.getUpdates();
//
// Service Templates
//
update.removeServiceTemplates = _serviceTemplates.removedElements();
- update.serviceTemplates = new java.util.HashMap();
- _serviceTemplates.getUpdates(update.serviceTemplates);
+ update.serviceTemplates =_serviceTemplates.getUpdates();
//
// Nodes
//
update.removeNodes = _nodes.removedElements();
- update.nodes = new java.util.LinkedList();
- _nodes.getUpdates(update.nodes);
+ update.nodes = _nodes.getUpdates();
return update;
}
diff --git a/java/src/IceGrid/TreeNode/EditableParent.java b/java/src/IceGrid/TreeNode/EditableParent.java index 0680face377..eb63b48ec08 100755 --- a/java/src/IceGrid/TreeNode/EditableParent.java +++ b/java/src/IceGrid/TreeNode/EditableParent.java @@ -59,6 +59,11 @@ class EditableParent extends Parent implements Editable _removedElements.add(child.getId());
removeChild(child, fireEvent);
}
+
+ void removeElement(String id)
+ {
+ _removedElements.add(id);
+ }
void purgeChildren(java.util.Set keepSet)
{
diff --git a/java/src/IceGrid/TreeNode/Node.java b/java/src/IceGrid/TreeNode/Node.java index 0d9ccf529bc..f2fc83c1ee4 100755 --- a/java/src/IceGrid/TreeNode/Node.java +++ b/java/src/IceGrid/TreeNode/Node.java @@ -9,9 +9,12 @@ package IceGrid.TreeNode;
import java.awt.Component;
+import javax.swing.Icon;
+import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
+import javax.swing.JPopupMenu;
import javax.swing.JTree;
-import javax.swing.Icon;
+
import javax.swing.tree.TreeCellRenderer;
import javax.swing.tree.DefaultTreeCellRenderer;
@@ -30,6 +33,109 @@ import IceGrid.Utils; class Node extends EditableParent implements InstanceParent
{
+ static public NodeDescriptor
+ copyDescriptor(NodeDescriptor nd)
+ {
+ NodeDescriptor copy = (NodeDescriptor)nd.clone();
+
+ copy.serverInstances = new java.util.LinkedList();
+ java.util.Iterator p = nd.serverInstances.iterator();
+ while(p.hasNext())
+ {
+ copy.serverInstances.add(Server.copyDescriptor(
+ (ServerInstanceDescriptor)p.next()));
+ }
+
+ copy.servers = new java.util.LinkedList();
+ p = nd.servers.iterator();
+ while(p.hasNext())
+ {
+ copy.serverInstances.add(Server.copyDescriptor(
+ (ServerDescriptor)p.next()));
+ }
+
+ return copy;
+ }
+
+ public boolean[] getAvailableActions()
+ {
+ boolean[] actions = new boolean[ACTION_COUNT];
+
+ actions[COPY] = true;
+ actions[DELETE] = true;
+
+ Object descriptor = _model.getClipboard();
+ if(descriptor != null)
+ {
+ actions[PASTE] = descriptor instanceof NodeDescriptor ||
+ descriptor instanceof ServerInstanceDescriptor ||
+ descriptor instanceof ServerDescriptor;
+ }
+ actions[NEW_SERVER] = true;
+ actions[NEW_SERVER_ICEBOX] = true;
+ actions[NEW_SERVER_FROM_TEMPLATE] = true;
+ return actions;
+ }
+
+ public JPopupMenu getPopupMenu()
+ {
+ if(_popup == null)
+ {
+ _popup = new PopupMenu(_model);
+
+ JMenuItem newServerItem = new JMenuItem(_model.getActions()[NEW_SERVER]);
+ newServerItem.setText("New server");
+ _popup.add(newServerItem);
+
+ JMenuItem newIceBoxItem = new JMenuItem(_model.getActions()[NEW_SERVER_ICEBOX]);
+ newIceBoxItem.setText("New IceBox server");
+ _popup.add(newIceBoxItem);
+
+ JMenuItem newServerFromTemplateItem =
+ new JMenuItem(_model.getActions()[NEW_SERVER_FROM_TEMPLATE]);
+ newServerFromTemplateItem.setText("New server from template");
+ _popup.add(newServerFromTemplateItem);
+ }
+ return _popup;
+ }
+ public void copy()
+ {
+ _model.setClipboard(copyDescriptor(_descriptor));
+ _model.getActions()[PASTE].setEnabled(true);
+ }
+ public void paste()
+ {
+ Object descriptor = _model.getClipboard();
+ if(descriptor instanceof NodeDescriptor)
+ {
+ _parent.paste();
+ }
+ else if(descriptor instanceof ServerInstanceDescriptor)
+ {
+ newServer(Server.copyDescriptor((ServerInstanceDescriptor)descriptor));
+ }
+ else
+ {
+ newServer(Server.copyDescriptor(((ServerDescriptor)descriptor)));
+ }
+ }
+ public void newServer()
+ {
+ newServer(Server.newServerDescriptor());
+ }
+ public void newServerIceBox()
+ {
+ newServer(Server.newIceBoxDescriptor());
+ }
+ public void newServerFromTemplate()
+ {
+ ServerInstanceDescriptor descriptor =
+ new ServerInstanceDescriptor("",
+ new java.util.HashMap());
+
+ newServer(descriptor);
+ }
+
public Component getTreeCellRendererComponent(
JTree tree,
Object value,
@@ -265,14 +371,56 @@ class Node extends EditableParent implements InstanceParent NodeUpdateDescriptor getUpdate()
{
- if(!isNew() && !isModified())
+ NodeUpdateDescriptor update = new NodeUpdateDescriptor();
+ update.name = _id;
+
+ //
+ // First: servers
+ //
+ if(isNew())
{
- return null;
+ update.removeServers = new String[0];
+ }
+ else
+ {
+ update.removeServers = removedElements();
+ for(int i = 0; i < update.removeServers.length; ++i)
+ {
+ System.err.println(update.removeServers[i]);
+ }
}
- NodeUpdateDescriptor update = new NodeUpdateDescriptor();
- update.name = _id;
+ update.serverInstances = new java.util.LinkedList();
+ update.servers = new java.util.LinkedList();
+
+ java.util.Iterator p = _children.iterator();
+ while(p.hasNext())
+ {
+ Server server = (Server)p.next();
+ if(isNew() || server.isModified() || server.isNew())
+ {
+ ServerInstanceDescriptor instanceDescriptor = server.getInstanceDescriptor();
+ if(instanceDescriptor != null)
+ {
+ update.serverInstances.add(instanceDescriptor);
+ }
+ else
+ {
+ update.servers.add(server.getDescriptor());
+ }
+ }
+ }
+ //
+ // Anything in this update?
+ //
+ if(!isNew() && !isModified() && update.removeServers.length == 0
+ && update.servers.size() == 0
+ && update.serverInstances.size() == 0)
+ {
+ return null;
+ }
+
if(isNew())
{
update.variables = _descriptor.variables;
@@ -286,7 +434,7 @@ class Node extends EditableParent implements InstanceParent update.variables = (java.util.TreeMap)_descriptor.variables.clone();
java.util.List removeVariables = new java.util.LinkedList();
- java.util.Iterator p = _origVariables.entrySet().iterator();
+ p = _origVariables.entrySet().iterator();
while(p.hasNext())
{
java.util.Map.Entry entry = (java.util.Map.Entry)p.next();
@@ -308,35 +456,7 @@ class Node extends EditableParent implements InstanceParent update.removeVariables = (String[])removeVariables.toArray(new String[0]);
}
- if(isNew())
- {
- update.removeServers = new String[0];
- }
- else
- {
- update.removeServers = removedElements();
- }
-
- update.serverInstances = new java.util.LinkedList();
- update.servers = new java.util.LinkedList();
- java.util.Iterator p = _children.iterator();
- while(p.hasNext())
- {
- Server server = (Server)p.next();
- if(isNew() || server.isModified() || server.isNew())
- {
- ServerInstanceDescriptor instanceDescriptor = server.getInstanceDescriptor();
- if(instanceDescriptor != null)
- {
- update.serverInstances.add(instanceDescriptor);
- }
- else
- {
- update.servers.add(server.getDescriptor());
- }
- }
- }
return update;
}
@@ -779,6 +899,141 @@ class Node extends EditableParent implements InstanceParent return _resolver;
}
+
+ void tryAdd(ServerInstanceDescriptor instanceDescriptor,
+ ServerDescriptor serverDescriptor) throws UpdateFailedException
+ {
+ try
+ {
+ if(instanceDescriptor != null)
+ {
+ _descriptor.serverInstances.add(instanceDescriptor);
+ addChild(createServer(true, instanceDescriptor, getApplication()),
+ true);
+ }
+ else
+ {
+ _descriptor.servers.add(serverDescriptor);
+ addChild(createServer(true, serverDescriptor, getApplication()),
+ true);
+ }
+ }
+ catch(UpdateFailedException e)
+ {
+ e.addParent(this);
+ if(instanceDescriptor != null)
+ {
+ removeDescriptor(instanceDescriptor);
+ }
+ else
+ {
+ removeDescriptor(serverDescriptor);
+ }
+ throw e;
+ }
+ }
+
+
+ void addDescriptor(ServerDescriptor sd)
+ {
+ _descriptor.servers.add(sd);
+ }
+
+ void removeDescriptor(ServerDescriptor sd)
+ {
+ //
+ // A straight remove uses equals(), which is not the desired behavior
+ //
+ java.util.Iterator p = _descriptor.servers.iterator();
+ while(p.hasNext())
+ {
+ if(sd == p.next())
+ {
+ p.remove();
+ break;
+ }
+ }
+ }
+ void addDescriptor(ServerInstanceDescriptor sd)
+ {
+ _descriptor.serverInstances.add(sd);
+ }
+ void removeDescriptor(ServerInstanceDescriptor sd)
+ {
+ //
+ // A straight remove uses equals(), which is not the desired behavior
+ //
+ java.util.Iterator p = _descriptor.serverInstances.iterator();
+ while(p.hasNext())
+ {
+ if(sd == p.next())
+ {
+ p.remove();
+ break;
+ }
+ }
+ }
+
+ private void newServer(ServerDescriptor descriptor)
+ {
+ descriptor.id = makeNewChildId(descriptor.id);
+
+ Server server = new Server(descriptor.id, null, descriptor, _model);
+ try
+ {
+ addChild(server, true);
+ }
+ catch(UpdateFailedException e)
+ {
+ assert false;
+ }
+ _model.setSelectionPath(server.getPath());
+ }
+
+ private void newServer(ServerInstanceDescriptor descriptor)
+ {
+ String id = makeNewChildId("NewServer");
+
+ //
+ // Make sure descriptor.template points to a real template
+ //
+ ServerTemplate t = getApplication().findServerTemplate(descriptor.template);
+
+ if(t == null)
+ {
+ t = (ServerTemplate)getApplication().getServerTemplates().getChildAt(0);
+
+ if(t == null)
+ {
+ JOptionPane.showMessageDialog(
+ _model.getMainFrame(),
+ "You need to create a server template before you can create a server from a template.",
+ "No Server Template",
+ JOptionPane.INFORMATION_MESSAGE);
+ return;
+ }
+ else
+ {
+ descriptor.template = t.getId();
+ descriptor.parameterValues = new java.util.HashMap();
+ }
+ }
+
+ ServerDescriptor sd = (ServerDescriptor)
+ ((TemplateDescriptor)t.getDescriptor()).descriptor;
+
+ Server server = new Server(id, descriptor, sd, _model);
+ try
+ {
+ addChild(server, true);
+ }
+ catch(UpdateFailedException e)
+ {
+ assert false;
+ }
+ _model.setSelectionPath(server.getPath());
+ }
+
private NodeDescriptor _descriptor;
private Utils.Resolver _resolver;
@@ -793,4 +1048,5 @@ class Node extends EditableParent implements InstanceParent static private Icon _nodeDownClosed;
static private NodeEditor _editor;
+ static private JPopupMenu _popup;
}
diff --git a/java/src/IceGrid/TreeNode/Nodes.java b/java/src/IceGrid/TreeNode/Nodes.java index 24d1e2bc9ef..d9d3a4d0afe 100755 --- a/java/src/IceGrid/TreeNode/Nodes.java +++ b/java/src/IceGrid/TreeNode/Nodes.java @@ -73,17 +73,20 @@ public class Nodes extends EditableParent }
}
- void getUpdates(java.util.LinkedList updates)
+ java.util.LinkedList getUpdates()
{
+ java.util.LinkedList updates = new java.util.LinkedList();
java.util.Iterator p = _children.iterator();
while(p.hasNext())
{
Node node = (Node)p.next();
- if(node.isNew() || node.isModified())
+ NodeUpdateDescriptor d = node.getUpdate();
+ if(d != null)
{
- updates.add(node.getUpdate());
+ updates.add(d);
}
}
+ return updates;
}
void update() throws UpdateFailedException
diff --git a/java/src/IceGrid/TreeNode/ReplicatedAdapters.java b/java/src/IceGrid/TreeNode/ReplicatedAdapters.java index 92e6cd479a9..3c13e059d99 100755 --- a/java/src/IceGrid/TreeNode/ReplicatedAdapters.java +++ b/java/src/IceGrid/TreeNode/ReplicatedAdapters.java @@ -45,8 +45,9 @@ class ReplicatedAdapters extends EditableParent }
}
- void getUpdates(java.util.List updates)
+ java.util.LinkedList getUpdates()
{
+ java.util.LinkedList updates = new java.util.LinkedList();
java.util.Iterator p = _children.iterator();
while(p.hasNext())
{
@@ -56,6 +57,7 @@ class ReplicatedAdapters extends EditableParent updates.add(ra.getDescriptor());
}
}
+ return updates;
}
diff --git a/java/src/IceGrid/TreeNode/Server.java b/java/src/IceGrid/TreeNode/Server.java index 15a6baab86c..053dd961d1c 100755 --- a/java/src/IceGrid/TreeNode/Server.java +++ b/java/src/IceGrid/TreeNode/Server.java @@ -39,6 +39,7 @@ import com.jgoodies.forms.util.LayoutStyle; import IceGrid.SimpleInternalFrame;
import IceGrid.AdapterDescriptor;
+import IceGrid.DistributionDescriptor;
import IceGrid.IceBoxDescriptor;
import IceGrid.Model;
import IceGrid.PropertyDescriptor;
@@ -71,6 +72,7 @@ class Server extends EditableParent // (and possibly other properties set through a PropertiesHolder)
//
copy.properties = (java.util.LinkedList)copy.properties.clone();
+ copy.distrib = (DistributionDescriptor)copy.distrib.clone();
if(copy instanceof IceBoxDescriptor)
{
@@ -101,7 +103,8 @@ class Server extends EditableParent into.activation = from.activation;
into.activationTimeout = from.activationTimeout;
into.deactivationTimeout = from.deactivationTimeout;
- into.distrib = from.distrib;
+ into.distrib.icepatch = from.distrib.icepatch;
+ into.distrib.directories = from.distrib.directories;
}
static public ServerDescriptor newServerDescriptor()
@@ -111,7 +114,7 @@ class Server extends EditableParent new java.util.LinkedList(),
new java.util.LinkedList(),
"",
- "",
+ "NewServer",
"",
"",
new java.util.LinkedList(),
@@ -141,7 +144,7 @@ class Server extends EditableParent new java.util.LinkedList(),
new java.util.LinkedList(),
"",
- "",
+ "NewIceBox",
"",
"",
new java.util.LinkedList(),
@@ -163,8 +166,9 @@ class Server extends EditableParent actions[COPY] = true;
Object clipboard = _model.getClipboard();
- if(clipboard != null && (clipboard instanceof ServerDescriptor
- || clipboard instanceof ServerInstanceDescriptor))
+ if(clipboard != null &&
+ (clipboard instanceof ServerDescriptor
+ || clipboard instanceof ServerInstanceDescriptor))
{
actions[PASTE] = true;
}
@@ -378,6 +382,37 @@ class Server extends EditableParent return _propertiesHolder;
}
+ public boolean destroy()
+ {
+ if(_parent == null)
+ {
+ return false;
+ }
+ Node node = (Node)_parent;
+
+ if(_ephemeral)
+ {
+ node.removeChild(this, true);
+ return true;
+ }
+ else if(_model.canUpdate())
+ {
+ if(_instanceDescriptor != null)
+ {
+ node.removeDescriptor(_instanceDescriptor);
+ }
+ else
+ {
+ node.removeDescriptor(_serverDescriptor);
+ }
+ node.removeElement(this, true);
+ return true;
+ }
+ return false;
+
+ }
+
+
public Object getDescriptor()
{
if(_instanceDescriptor != null)
@@ -390,7 +425,36 @@ class Server extends EditableParent }
}
-
+ public Object saveDescriptor()
+ {
+ if(_instanceDescriptor != null)
+ {
+ return _instanceDescriptor.clone();
+ }
+ else
+ {
+ return _serverDescriptor.clone();
+ }
+ }
+
+ public void restoreDescriptor(Object savedDescriptor)
+ {
+ if(_instanceDescriptor != null)
+ {
+ ServerInstanceDescriptor copy = (ServerInstanceDescriptor)savedDescriptor;
+
+ _instanceDescriptor.template = copy.template;
+ _instanceDescriptor.parameterValues = copy.parameterValues;
+
+ ServerTemplate t = getApplication().findServerTemplate(_instanceDescriptor.template);
+ _serverDescriptor = (ServerDescriptor)
+ ((TemplateDescriptor)t.getDescriptor()).descriptor;
+ }
+ else
+ {
+ shallowRestore((ServerDescriptor)savedDescriptor, _serverDescriptor);
+ }
+ }
//
// Builds the server and all its sub-tree
@@ -401,12 +465,22 @@ class Server extends EditableParent Application application) throws UpdateFailedException
{
super(brandNew, serverId, application.getModel());
+ _ephemeral = false;
rebuild(resolver, instanceDescriptor, serverDescriptor, application);
+
+ if(brandNew)
+ {
+ _state = ServerState.Inactive;
+ _toolTip = toolTip(_state, _pid);
+ _stateIconIndex = _state.value() + 1;
+ }
}
Server(Server o)
{
super(o, true);
+ _ephemeral = false;
+ assert o._ephemeral == false;
_state = o._state;
_stateIconIndex = o._stateIconIndex;
@@ -423,9 +497,35 @@ class Server extends EditableParent _dbEnvs = o._dbEnvs;
}
+ Server(String serverId, ServerInstanceDescriptor instanceDescriptor,
+ ServerDescriptor serverDescriptor, Model model)
+ {
+ super(true, serverId, model);
+ _ephemeral = true;
+ try
+ {
+ rebuild(null, instanceDescriptor, serverDescriptor, null);
+ }
+ catch(UpdateFailedException e)
+ {
+ assert false;
+ }
+
+ _state = ServerState.Inactive;
+ _toolTip = toolTip(_state, _pid);
+ _stateIconIndex = _state.value() + 1;
+ }
+
//
// Update the server and all its subtree
//
+
+ void rebuild() throws UpdateFailedException
+ {
+ rebuild(_resolver, _instanceDescriptor,
+ _serverDescriptor, getApplication());
+ }
+
void rebuild(Utils.Resolver resolver,
ServerInstanceDescriptor instanceDescriptor,
ServerDescriptor serverDescriptor,
@@ -440,50 +540,62 @@ class Server extends EditableParent boolean isEditable = (instanceDescriptor == null);
_propertiesHolder = new PropertiesHolder(serverDescriptor);
- try
+ if(_ephemeral)
{
- if(serverDescriptor instanceof IceBoxDescriptor)
+ _services = null;
+ _dbEnvs = null;
+ _adapters = null;
+ }
+ else
+ {
+ try
{
- IceBoxDescriptor iceBoxDescriptor = (IceBoxDescriptor)serverDescriptor;
+ if(serverDescriptor instanceof IceBoxDescriptor)
+ {
+ IceBoxDescriptor iceBoxDescriptor = (IceBoxDescriptor)serverDescriptor;
+
+ _services = new Services(iceBoxDescriptor.services,
+ isEditable, _resolver, application);
+ addChild(_services);
+ //
+ // IceBox has not dbEnv
+ //
+ assert serverDescriptor.dbEnvs.size() == 0;
+ _dbEnvs = null;
+ }
+ else
+ {
+ _services = null;
+ _dbEnvs = new DbEnvs(serverDescriptor.dbEnvs,
+ isEditable, _resolver, _model);
+ addChild(_dbEnvs);
+ }
- _services = new Services(iceBoxDescriptor.services,
- isEditable, _resolver, application);
- addChild(_services);
- //
- // IceBox has not dbEnv
- //
- assert serverDescriptor.dbEnvs.size() == 0;
- _dbEnvs = null;
+ _adapters = new Adapters(serverDescriptor.adapters,
+ isEditable, _services != null,
+ _resolver, _model);
+ addChild(_adapters);
}
- else
+ catch(UpdateFailedException e)
{
- _services = null;
- _dbEnvs = new DbEnvs(serverDescriptor.dbEnvs,
- isEditable, _resolver, _model);
- addChild(_dbEnvs);
+ e.addParent(this);
+ throw e;
}
-
- _adapters = new Adapters(serverDescriptor.adapters,
- isEditable, _services != null,
- _resolver, _model);
- addChild(_adapters);
- }
- catch(UpdateFailedException e)
- {
- e.addParent(this);
- throw e;
}
}
public void setParent(CommonBase parent)
{
- Ice.IntHolder pid = new Ice.IntHolder();
- _state = _model.getRoot().registerServer(_resolver.find("node"),
- _id,
- this,
- pid);
- _pid = pid.value;
+ if(!_ephemeral)
+ {
+ Ice.IntHolder pid = new Ice.IntHolder();
+ _state = _model.getRoot().registerServer(_resolver.find("node"),
+ _id,
+ this,
+ pid);
+ _pid = pid.value;
+ }
super.setParent(parent);
}
@@ -491,11 +603,13 @@ class Server extends EditableParent {
if(_parent != null)
{
- _model.getRoot().unregisterServer(_resolver.find("node"),
- _id, this);
+ if(!_ephemeral)
+ {
+ _model.getRoot().unregisterServer(_resolver.find("node"),
+ _id, this);
+ }
super.clearParent();
}
-
}
java.util.List findServiceInstances(String template)
@@ -551,6 +665,11 @@ class Server extends EditableParent return _serverDescriptor;
}
+ void setServerDescriptor(ServerDescriptor sd)
+ {
+ _serverDescriptor = sd;
+ }
+
Services getServices()
{
return _services;
@@ -573,10 +692,14 @@ class Server extends EditableParent }
}
+ public boolean isEphemeral()
+ {
+ return _ephemeral;
+ }
public String toString()
{
- if(_instanceDescriptor == null || isEphemeral())
+ if(_instanceDescriptor == null || _ephemeral)
{
return super.toString();
}
@@ -605,6 +728,7 @@ class Server extends EditableParent private ServerInstanceDescriptor _instanceDescriptor;
private ServerDescriptor _serverDescriptor;
+ private final boolean _ephemeral;
private Utils.Resolver _resolver;
diff --git a/java/src/IceGrid/TreeNode/ServerEditor.java b/java/src/IceGrid/TreeNode/ServerEditor.java index 4975fac7023..deb7e42e46b 100755 --- a/java/src/IceGrid/TreeNode/ServerEditor.java +++ b/java/src/IceGrid/TreeNode/ServerEditor.java @@ -16,10 +16,16 @@ import IceGrid.Model; import IceGrid.ServerDescriptor;
import IceGrid.Utils;
-class ServerEditor extends Editor
+class ServerEditor extends AbstractServerEditor
{
- protected void applyUpdate()
+ protected void writeDescriptor()
{
+ _subEditor.writeDescriptor();
+ }
+
+ protected boolean isSimpleUpdate()
+ {
+ return _subEditor.isSimpleUpdate();
}
ServerEditor(JFrame parentFrame)
@@ -48,15 +54,6 @@ class ServerEditor extends Editor _subEditor.append(builder);
}
- void writeDescriptor()
- {
- _subEditor.writeDescriptor();
- }
-
- boolean isSimpleUpdate()
- {
- return _subEditor.isSimpleUpdate();
- }
Object getSubDescriptor()
{
diff --git a/java/src/IceGrid/TreeNode/ServerInstanceEditor.java b/java/src/IceGrid/TreeNode/ServerInstanceEditor.java index 4f491f15c14..c451339ae22 100755 --- a/java/src/IceGrid/TreeNode/ServerInstanceEditor.java +++ b/java/src/IceGrid/TreeNode/ServerInstanceEditor.java @@ -24,14 +24,27 @@ import com.jgoodies.forms.builder.DefaultFormBuilder; import IceGrid.Model;
import IceGrid.ParametersDialog;
+import IceGrid.ServerDescriptor;
import IceGrid.ServerInstanceDescriptor;
import IceGrid.TemplateDescriptor;
import IceGrid.Utils;
-class ServerInstanceEditor extends Editor
+class ServerInstanceEditor extends AbstractServerEditor
{
- protected void applyUpdate()
+ protected void writeDescriptor()
{
+ ServerInstanceDescriptor descriptor = getDescriptor();
+ ServerTemplate t = (ServerTemplate)_template.getSelectedItem();
+
+ descriptor.template = t.getId();
+ descriptor.parameterValues = _parameterValuesMap;
+ ((Server)_target).setServerDescriptor(
+ (ServerDescriptor)((TemplateDescriptor)t.getDescriptor()).descriptor);
+ }
+
+ protected boolean isSimpleUpdate()
+ {
+ return false;
}
ServerInstanceEditor(JFrame parentFrame)
@@ -106,18 +119,6 @@ class ServerInstanceEditor extends Editor }
}
- void writeDescriptor()
- {
- ServerInstanceDescriptor descriptor = getDescriptor();
- descriptor.template = ((ServerTemplate)_template.getSelectedItem()).getId();
- descriptor.parameterValues = _parameterValuesMap;
- }
-
- boolean isSimpleUpdate()
- {
- return false;
- }
-
void append(DefaultFormBuilder builder)
{
builder.append("Template", _template);
diff --git a/java/src/IceGrid/TreeNode/ServerTemplates.java b/java/src/IceGrid/TreeNode/ServerTemplates.java index 9d75f4d42b9..aa8ef0c778e 100755 --- a/java/src/IceGrid/TreeNode/ServerTemplates.java +++ b/java/src/IceGrid/TreeNode/ServerTemplates.java @@ -114,8 +114,9 @@ class ServerTemplates extends Templates }
}
- void getUpdates(java.util.Map updates)
+ java.util.Map getUpdates()
{
+ java.util.Map updates = new java.util.HashMap();
java.util.Iterator p = _children.iterator();
while(p.hasNext())
{
@@ -125,6 +126,7 @@ class ServerTemplates extends Templates updates.put(t.getId(), t.getDescriptor());
}
}
+ return updates;
}
void update() throws UpdateFailedException
@@ -220,7 +222,16 @@ class ServerTemplates extends Templates }
catch(UpdateFailedException e)
{
- assert false; // impossible
+ e.addParent(this);
+
+ JOptionPane.showMessageDialog(
+ _model.getMainFrame(),
+ e.toString(),
+ "Apply failed",
+ JOptionPane.ERROR_MESSAGE);
+
+ removeDescriptor(newId);
+ return false;
}
return true;
}
diff --git a/java/src/IceGrid/TreeNode/ServiceTemplates.java b/java/src/IceGrid/TreeNode/ServiceTemplates.java index 70a41e1e9ac..b5b5e2d6778 100755 --- a/java/src/IceGrid/TreeNode/ServiceTemplates.java +++ b/java/src/IceGrid/TreeNode/ServiceTemplates.java @@ -142,11 +142,21 @@ class ServiceTemplates extends Templates try
{
- addChild(new ServiceTemplate(true, newId, descriptor, _model), true);
+ addChild(new ServiceTemplate(true, newId, descriptor, _model),
+ true);
}
catch(UpdateFailedException e)
{
- assert false; // impossible
+ e.addParent(this);
+
+ JOptionPane.showMessageDialog(
+ _model.getMainFrame(),
+ e.toString(),
+ "Apply failed",
+ JOptionPane.ERROR_MESSAGE);
+
+ removeDescriptor(newId);
+ return false;
}
return true;
}
@@ -157,8 +167,9 @@ class ServiceTemplates extends Templates }
- void getUpdates(java.util.Map updates)
+ java.util.Map getUpdates()
{
+ java.util.Map updates = new java.util.HashMap();
java.util.Iterator p = _children.iterator();
while(p.hasNext())
{
@@ -168,6 +179,7 @@ class ServiceTemplates extends Templates updates.put(t.getId(), t.getDescriptor());
}
}
+ return updates;
}
void update() throws UpdateFailedException
diff --git a/java/src/IceGrid/TreeNode/Services.java b/java/src/IceGrid/TreeNode/Services.java index 9e5d22f6cdc..ae66e317683 100755 --- a/java/src/IceGrid/TreeNode/Services.java +++ b/java/src/IceGrid/TreeNode/Services.java @@ -39,7 +39,13 @@ class Services extends ListParent implements InstanceParent public boolean[] getAvailableActions()
{
boolean[] actions = new boolean[ACTION_COUNT];
- actions[PASTE] = isEditable();
+
+ Object descriptor = _model.getClipboard();
+ if(descriptor != null)
+ {
+ actions[PASTE] = isEditable() &&
+ descriptor instanceof ServiceInstanceDescriptor;
+ }
actions[NEW_SERVICE] = isEditable();
actions[NEW_SERVICE_FROM_TEMPLATE] = isEditable();
return actions;
@@ -89,7 +95,7 @@ class Services extends ListParent implements InstanceParent {
ServiceInstanceDescriptor descriptor =
new ServiceInstanceDescriptor("",
- new java.util.TreeMap(),
+ new java.util.HashMap(),
null);
newService(descriptor);
}
@@ -191,7 +197,7 @@ class Services extends ListParent implements InstanceParent }
}
- void newService(ServiceInstanceDescriptor descriptor)
+ private void newService(ServiceInstanceDescriptor descriptor)
{
String baseName = descriptor.descriptor == null ? "NewService" :
descriptor.descriptor.name;
@@ -216,7 +222,7 @@ class Services extends ListParent implements InstanceParent {
JOptionPane.showMessageDialog(
_model.getMainFrame(),
- "You need to create a service template before you can create a service instance.",
+ "You need to create a service template before you can create a service from a template.",
"No Service Template",
JOptionPane.INFORMATION_MESSAGE);
return;
@@ -224,7 +230,7 @@ class Services extends ListParent implements InstanceParent else
{
descriptor.template = t.getId();
- descriptor.parameterValues = new java.util.TreeMap();
+ descriptor.parameterValues = new java.util.HashMap();
}
}
@@ -256,6 +262,11 @@ class Services extends ListParent implements InstanceParent protected boolean validate(Object d)
{
+ //
+ // TODO: insufficient: a child adapter could use ${service}
+ // as its name and collide with another adapter.
+ //
+
ServiceInstanceDescriptor descriptor = (ServiceInstanceDescriptor)d;
String newName;
|