From 8ff9dd62a9241109b599896c1f06516009275fe0 Mon Sep 17 00:00:00 2001 From: Bernard Normier Date: Mon, 8 May 2006 20:55:38 +0000 Subject: Simplified Application view; fixed PropertySets issues --- .../src/IceGridGUI/Application/ServerInstance.java | 347 +++++++++++++++++++++ 1 file changed, 347 insertions(+) create mode 100755 java/src/IceGridGUI/Application/ServerInstance.java (limited to 'java/src/IceGridGUI/Application/ServerInstance.java') 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; + +} -- cgit v1.2.3