diff options
author | Bernard Normier <bernard@zeroc.com> | 2006-05-08 20:55:38 +0000 |
---|---|---|
committer | Bernard Normier <bernard@zeroc.com> | 2006-05-08 20:55:38 +0000 |
commit | 8ff9dd62a9241109b599896c1f06516009275fe0 (patch) | |
tree | d397a64aa0bb37b2496d7fa7d0b484da9d7fa73e /java/src/IceGridGUI/Application/ServerInstance.java | |
parent | Fix (diff) | |
download | ice-8ff9dd62a9241109b599896c1f06516009275fe0.tar.bz2 ice-8ff9dd62a9241109b599896c1f06516009275fe0.tar.xz ice-8ff9dd62a9241109b599896c1f06516009275fe0.zip |
Simplified Application view; fixed PropertySets issues
Diffstat (limited to 'java/src/IceGridGUI/Application/ServerInstance.java')
-rwxr-xr-x | java/src/IceGridGUI/Application/ServerInstance.java | 347 |
1 files changed, 347 insertions, 0 deletions
diff --git a/java/src/IceGridGUI/Application/ServerInstance.java b/java/src/IceGridGUI/Application/ServerInstance.java new file mode 100755 index 00000000000..245bd7e33e9 --- /dev/null +++ b/java/src/IceGridGUI/Application/ServerInstance.java @@ -0,0 +1,347 @@ +// **********************************************************************
+//
+// 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 IceGridGUI.Application;
+
+import java.awt.Component;
+
+import javax.swing.Icon;
+import javax.swing.JTree;
+
+import javax.swing.tree.TreeCellRenderer;
+import javax.swing.tree.DefaultTreeCellRenderer;
+
+import IceGrid.*;
+import IceGridGUI.*;
+
+class ServerInstance extends TreeNode implements Server
+{
+ static public ServerInstanceDescriptor
+ copyDescriptor(ServerInstanceDescriptor sid)
+ {
+ return (ServerInstanceDescriptor)sid.clone();
+ }
+
+ //
+ // Actions
+ //
+ public boolean[] getAvailableActions()
+ {
+ boolean[] actions = new boolean[ACTION_COUNT];
+ actions[COPY] = true;
+
+ Object clipboard = getCoordinator().getClipboard();
+ if(clipboard != null &&
+ (clipboard instanceof ServerDescriptor
+ || clipboard instanceof ServerInstanceDescriptor))
+ {
+ actions[PASTE] = true;
+ }
+
+ actions[DELETE] = true;
+ if(!_ephemeral)
+ {
+ actions[SHOW_VARS] = true;
+ actions[SUBSTITUTE_VARS] = true;
+ }
+
+ return actions;
+ }
+
+ public void copy()
+ {
+ getCoordinator().setClipboard(copyDescriptor(_descriptor));
+ getCoordinator().getActionsForMenu().get(PASTE).setEnabled(true);
+ }
+
+ public Editor getEditor()
+ {
+ if(_editor == null)
+ {
+ _editor = (ServerInstanceEditor)
+ getRoot().getEditor(ServerInstanceEditor.class, this);
+ }
+ _editor.show(this);
+ return _editor;
+ }
+
+ protected Editor createEditor()
+ {
+ return new ServerInstanceEditor(getCoordinator().getMainFrame());
+ }
+
+ public Component getTreeCellRendererComponent(
+ JTree tree,
+ Object value,
+ boolean sel,
+ boolean expanded,
+ boolean leaf,
+ int row,
+ boolean hasFocus)
+ {
+ if(_cellRenderer == null)
+ {
+ //
+ // Initialization
+ //
+ _cellRenderer = new DefaultTreeCellRenderer();
+
+ _serverIcon = Utils.getIcon("/icons/16x16/server_inactive.png");
+ _iceboxServerIcon = Utils.getIcon("/icons/16x16/icebox_server_inactive.png");
+ }
+
+ _cellRenderer.setLeafIcon(_isIceBox ? _iceboxServerIcon : _serverIcon);
+
+ return _cellRenderer.getTreeCellRendererComponent(
+ tree, value, sel, expanded, leaf, row, hasFocus);
+ }
+
+ public void destroy()
+ {
+ Node node = (Node)_parent;
+
+ if(_ephemeral)
+ {
+ node.removeServer(this);
+ }
+ else
+ {
+ node.removeDescriptor(_descriptor);
+ node.removeServer(this);
+ node.getEditable().removeElement(_id, _editable, Server.class);
+ getRoot().updated();
+ }
+ }
+
+
+ public Object getDescriptor()
+ {
+ return _descriptor;
+ }
+
+ public Object saveDescriptor()
+ {
+ return _descriptor.clone();
+ }
+
+ public void restoreDescriptor(Object savedDescriptor)
+ {
+ ServerInstanceDescriptor copy = (ServerInstanceDescriptor)savedDescriptor;
+
+ _descriptor.template = copy.template;
+ _descriptor.parameterValues = copy.parameterValues;
+ _descriptor.propertySet = copy.propertySet;
+ }
+
+ //
+ // Builds the server and all its sub-tree
+ //
+ ServerInstance(boolean brandNew, TreeNode parent, String serverId,
+ Utils.Resolver resolver,
+ ServerInstanceDescriptor instanceDescriptor,
+ boolean isIceBox)
+ throws UpdateFailedException
+ {
+ super(parent, serverId);
+ _ephemeral = false;
+ _editable = new Editable(brandNew);
+ rebuild(resolver, instanceDescriptor, isIceBox);
+ }
+
+ ServerInstance(TreeNode parent, String serverId,
+ ServerInstanceDescriptor instanceDescriptor)
+ {
+ super(parent, serverId);
+ _ephemeral = true;
+ _editable = null;
+ rebuild(null, instanceDescriptor, false);
+ }
+
+ void write(XMLWriter writer) throws java.io.IOException
+ {
+ if(!_ephemeral)
+ {
+ TemplateDescriptor templateDescriptor
+ = getRoot().findServerTemplateDescriptor(_descriptor.template);
+
+ java.util.LinkedList attributes = parameterValuesToAttributes(
+ _descriptor.parameterValues, templateDescriptor.parameters);
+ attributes.addFirst(createAttribute("template", _descriptor.template));
+
+ writer.writeElement("server-instance", attributes);
+ }
+ }
+
+
+ boolean isIceBox()
+ {
+ return _isIceBox;
+ }
+
+ void isIceBox(boolean newValue)
+ {
+ _isIceBox = newValue;
+ }
+
+ static private class Backup
+ {
+ Backup(Editable ne)
+ {
+ nodeEditable = ne;
+ }
+
+ Editable nodeEditable;
+ java.util.Map parameterValues;
+ }
+
+ public Object rebuild(java.util.List editables) throws UpdateFailedException
+ {
+ Backup backup = new Backup(((Node)_parent).getEditable().save());
+ Node node = (Node)_parent;
+
+ TemplateDescriptor templateDescriptor
+ = getRoot().findServerTemplateDescriptor(_descriptor.template);
+
+ java.util.Set parameters = new java.util.HashSet(templateDescriptor.parameters);
+ if(!parameters.equals(_descriptor.parameterValues.keySet()))
+ {
+ backup.parameterValues = _descriptor.parameterValues;
+ _descriptor.parameterValues = EditorBase.makeParameterValues(
+ _descriptor.parameterValues, templateDescriptor.parameters);
+ }
+ ServerInstance newServer = node.createServer(false, _descriptor);
+
+
+ if(_id.equals(newServer.getId()))
+ {
+ //
+ // A simple update. We can't simply rebuild server because
+ // we need to keep a backup
+ //
+ if(_editable.isModified())
+ {
+ newServer.getEditable().markModified();
+ }
+
+ node.removeServer(this);
+ try
+ {
+ node.insertServer(newServer, true);
+ }
+ catch(UpdateFailedException e)
+ {
+ assert false; // impossible, we just removed a child with
+ // this id
+ }
+
+ if(backup.parameterValues != null)
+ {
+ editables.add(newServer.getEditable());
+ }
+ }
+ else
+ {
+ newServer.getEditable().markNew();
+ node.removeServer(this);
+ node.getEditable().removeElement(_id, _editable, Server.class);
+ try
+ {
+ node.insertServer(newServer, true);
+ }
+ catch(UpdateFailedException e)
+ {
+ restore(backup);
+ throw e;
+ }
+ }
+
+ return backup;
+ }
+
+ public void restore(Object backupObj)
+ {
+ Backup backup = (Backup)backupObj;
+ Node node = (Node)_parent;
+
+ node.getEditable().restore(backup.nodeEditable);
+
+ if(backup.parameterValues != null)
+ {
+ _descriptor.parameterValues = backup.parameterValues;
+ }
+
+ TreeNode badServer = node.findChildWithDescriptor(_descriptor);
+
+ if(badServer != null)
+ {
+ node.removeServer(badServer);
+ }
+
+ try
+ {
+ node.insertServer(this, true);
+ }
+ catch(UpdateFailedException e)
+ {
+ assert false; // impossible
+ }
+ }
+
+ //
+ // Update the server
+ //
+ void rebuild(Utils.Resolver resolver,
+ ServerInstanceDescriptor instanceDescriptor,
+ boolean isIceBox)
+ {
+ _resolver = resolver;
+ _isIceBox = isIceBox;
+ _descriptor = instanceDescriptor;
+ }
+
+ Utils.Resolver getResolver()
+ {
+ return _resolver;
+ }
+
+ public Editable getEditable()
+ {
+ return _editable;
+ }
+
+ public boolean isEphemeral()
+ {
+ return _ephemeral;
+ }
+
+ public String toString()
+ {
+ if(_ephemeral)
+ {
+ return super.toString();
+ }
+ else
+ {
+ return _id + ": " + _descriptor.template + "<>";
+ }
+ }
+
+ private ServerInstanceDescriptor _descriptor;
+ private final boolean _ephemeral;
+ private boolean _isIceBox;
+
+ private ServerInstanceEditor _editor;
+
+ private Utils.Resolver _resolver;
+ private Editable _editable;
+
+ static private DefaultTreeCellRenderer _cellRenderer;
+ static private Icon _serverIcon;
+ static private Icon _iceboxServerIcon;
+
+}
|