diff options
Diffstat (limited to 'java/src/IceGridGUI/Application/AbstractServerEditor.java')
-rw-r--r-- | java/src/IceGridGUI/Application/AbstractServerEditor.java | 181 |
1 files changed, 181 insertions, 0 deletions
diff --git a/java/src/IceGridGUI/Application/AbstractServerEditor.java b/java/src/IceGridGUI/Application/AbstractServerEditor.java new file mode 100644 index 00000000000..d17974e3e92 --- /dev/null +++ b/java/src/IceGridGUI/Application/AbstractServerEditor.java @@ -0,0 +1,181 @@ +// ********************************************************************** +// +// Copyright (c) 2003-2011 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 javax.swing.JOptionPane; +import javax.swing.JTextField; +import javax.swing.JToolBar; + +import com.jgoodies.looks.Options; +import com.jgoodies.looks.HeaderStyle; +import com.jgoodies.looks.BorderStyle; +import com.jgoodies.looks.plastic.PlasticLookAndFeel; + +import com.jgoodies.forms.builder.DefaultFormBuilder; + +import IceGrid.*; +import IceGridGUI.*; + +// +// Base class for ServerEditor and ServerInstanceEditor +// + +abstract class AbstractServerEditor extends Editor +{ + abstract protected void writeDescriptor(); + abstract protected boolean isSimpleUpdate(); + + protected void buildPropertiesPanel() + { + super.buildPropertiesPanel(); + _propertiesPanel.setName("Server Properties"); + } + + protected boolean applyUpdate(boolean refresh) + { + Root root = _target.getRoot(); + Server server = (Server)_target; + + root.disableSelectionListener(); + try + { + if(_target.isEphemeral()) + { + Node node = (Node)_target.getParent(); + writeDescriptor(); + + _target.destroy(); // just removes the child + + try + { + if(server instanceof PlainServer) + { + node.tryAdd((ServerDescriptor)server.getDescriptor(), true); + } + else + { + node.tryAdd((ServerInstanceDescriptor)server.getDescriptor(), true); + } + } + catch(UpdateFailedException e) + { + // + // Add back ephemeral child + // + try + { + node.insertServer(_target, true); + } + catch(UpdateFailedException die) + { + assert false; + } + root.setSelectedNode(_target); + + JOptionPane.showMessageDialog( + root.getCoordinator().getMainFrame(), + e.toString(), + "Apply failed", + JOptionPane.ERROR_MESSAGE); + return false; + } + + // + // Success + // + _target = (TreeNode)node.findChildWithDescriptor(server.getDescriptor()); + root.updated(); + + if(refresh) + { + root.setSelectedNode(_target); + } + + } + else if(isSimpleUpdate()) + { + writeDescriptor(); + root.updated(); + server.getEditable().markModified(); + } + else + { + // + // Save to be able to rollback + // + Object savedDescriptor = server.saveDescriptor(); + Node node = (Node)_target.getParent(); + writeDescriptor(); + + node.removeServer(_target); + + try + { + if(server instanceof PlainServer) + { + node.tryAdd((ServerDescriptor)server.getDescriptor(), false); + } + else + { + node.tryAdd((ServerInstanceDescriptor)server.getDescriptor(), false); + } + } + catch(UpdateFailedException e) + { + // + // Restore + // + try + { + node.insertServer(_target, true); + } + catch(UpdateFailedException die) + { + assert false; + } + server.restoreDescriptor(savedDescriptor); + root.setSelectedNode(_target); + + JOptionPane.showMessageDialog( + root.getCoordinator().getMainFrame(), + e.toString(), + "Apply failed", + JOptionPane.ERROR_MESSAGE); + return false; + } + + // + // Success + // + node.getEditable().removeElement(_target.getId(), server.getEditable(), + Server.class); // replaced by brand new Server + + _target = node.findChildWithDescriptor(server.getDescriptor()); + root.updated(); + if(refresh) + { + root.setSelectedNode(_target); + } + } + + if(refresh) + { + root.getCoordinator().getCurrentTab().showNode(_target); + } + _applyButton.setEnabled(false); + _discardButton.setEnabled(false); + return true; + } + finally + { + root.enableSelectionListener(); + } + } +} |