diff options
author | Matthew Newhook <matthew@zeroc.com> | 2014-10-20 11:40:05 -0230 |
---|---|---|
committer | Matthew Newhook <matthew@zeroc.com> | 2014-10-20 11:40:05 -0230 |
commit | b51469b41167fb86ae2059a15cf0475c53fdda7b (patch) | |
tree | fc85d6ca2efd89c67e1e4e7438f437c3e08313f4 /java/src/IceGridGUI/Application/Root.java | |
parent | Fixed (ICE-5695) - IceSSL: misleading exception (diff) | |
download | ice-b51469b41167fb86ae2059a15cf0475c53fdda7b.tar.bz2 ice-b51469b41167fb86ae2059a15cf0475c53fdda7b.tar.xz ice-b51469b41167fb86ae2059a15cf0475c53fdda7b.zip |
Down with ant. From the gradle to the grave.
Diffstat (limited to 'java/src/IceGridGUI/Application/Root.java')
-rw-r--r-- | java/src/IceGridGUI/Application/Root.java | 1582 |
1 files changed, 0 insertions, 1582 deletions
diff --git a/java/src/IceGridGUI/Application/Root.java b/java/src/IceGridGUI/Application/Root.java deleted file mode 100644 index 31f00581390..00000000000 --- a/java/src/IceGridGUI/Application/Root.java +++ /dev/null @@ -1,1582 +0,0 @@ -// ********************************************************************** -// -// Copyright (c) 2003-2014 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 java.awt.Cursor; - -import javax.swing.JOptionPane; -import javax.swing.JPopupMenu; -import javax.swing.JTree; -import javax.swing.SwingUtilities; -import javax.swing.tree.DefaultTreeCellRenderer; -import javax.swing.tree.DefaultTreeModel; -import javax.swing.tree.TreePath; - -import java.io.File; - -import IceGrid.*; -import IceGridGUI.*; - -public class Root extends ListTreeNode -{ - // - // Construct a normal, existing Application - // - public Root(Coordinator coordinator, ApplicationDescriptor desc, boolean live, File file) - throws UpdateFailedException - { - super(false, null, desc.name); - _coordinator = coordinator; - _traceSaveToRegistry = coordinator.traceSaveToRegistry(); - - _descriptor = desc; - - _file = file; - _live = live; - - - init(); - } - - // - // Construct a new Application - // - public Root(Coordinator coordinator, ApplicationDescriptor desc) - { - super(true, null, desc.name); - _coordinator = coordinator; - _traceSaveToRegistry = coordinator.traceSaveToRegistry(); - _descriptor = desc; - - _file = null; - _live = false; - - try - { - init(); - } - catch(UpdateFailedException e) - { - // - // Impossible - // - assert false; - } - } - - private void init() - throws UpdateFailedException - { - _resolver = new Utils.Resolver(_descriptor.variables); - _resolver.put("application", _descriptor.name); - - _origVariables = _descriptor.variables; - _origDescription = _descriptor.description; - _origDistrib = (DistributionDescriptor)_descriptor.distrib.clone(); - - _propertySets = new PropertySets(this, _descriptor.propertySets); - _replicaGroups = new ReplicaGroups(this, _descriptor.replicaGroups); - _serviceTemplates = new ServiceTemplates(this, _descriptor.serviceTemplates); - _serverTemplates = new ServerTemplates(this, _descriptor.serverTemplates); - _nodes = new Nodes(this, _descriptor.nodes); - - _children.add(_nodes); - _children.add(_propertySets); - _children.add(_replicaGroups); - _children.add(_serverTemplates); - _children.add(_serviceTemplates); - - _tree = new JTree(this, true); - _treeModel = (DefaultTreeModel)_tree.getModel(); - - // - // Rebind "copy" and "paste" - // - javax.swing.ActionMap am = _tree.getActionMap(); - am.put("copy", _coordinator.getActionsForMenu().get(COPY)); - am.put("paste", _coordinator.getActionsForMenu().get(PASTE)); - } - - static public ApplicationDescriptor - copyDescriptor(ApplicationDescriptor ad) - { - ApplicationDescriptor copy = (ApplicationDescriptor)ad.clone(); - - copy.propertySets = PropertySets.copyDescriptors(copy.propertySets); - - copy.replicaGroups = ReplicaGroups.copyDescriptors(copy.replicaGroups); - - copy.serverTemplates = ServerTemplates.copyDescriptors(copy.serverTemplates); - - copy.serviceTemplates = ServiceTemplates.copyDescriptors(copy.serviceTemplates); - - copy.nodes = Nodes.copyDescriptors(copy.nodes); - - copy.distrib = (DistributionDescriptor)copy.distrib.clone(); - return copy; - } - - @Override - public Editor getEditor() - { - if(_editor == null) - { - _editor = (ApplicationEditor)getEditor(ApplicationEditor.class, this); - } - _editor.show(this); - return _editor; - } - - @Override - protected Editor createEditor() - { - return new ApplicationEditor(); - } - - public TreeNode findNodeLike(TreePath path, boolean exactMatch) - { - TreeNode result = null; - if(path == null) - { - return null; - } - - for(int i = 0; i < path.getPathCount(); ++i) - { - TreeNode node = (TreeNode)path.getPathComponent(i); - - if(result == null) - { - if(node.getId().equals(_id)) - { - result = this; - } - else - { - return null; - } - } - else - { - TreeNode newNode = result.findChildLike(node); - if(newNode == null) - { - if(exactMatch) - { - return null; - } - else - { - return result; - } - } - else - { - result = newNode; - } - } - } - - return result; - } - - // - // Check that this node is attached to the tree - // - public boolean hasNode(TreeNode node) - { - while(node != this) - { - TreeNode parent = (TreeNode)node.getParent(); - if(parent == null || parent.getIndex(node) == -1) - { - return false; - } - else - { - node = parent; - } - } - return true; - } - - public void setSelectedNode(TreeNode node) - { - _tree.setSelectionPath(node.getPath()); - } - - public TreeNode getSelectedNode() - { - TreePath path = _tree.getSelectionPath(); - if(path == null) - { - return null; - } - else - { - return (TreeNode)path.getLastPathComponent(); - } - } - - public void selectServer(String nodeName, String serverId) - { - TreeNode target = _nodes; - if(target != null) - { - Node node = (Node)target.findChild(nodeName); - if(node != null) - { - target = node; - Server server = node.findServer(serverId); - if(server != null) - { - target = (TreeNode)server; - } - } - setSelectedNode(target); - } - } - - @Override - public Component getTreeCellRendererComponent( - JTree tree, - Object value, - boolean sel, - boolean expanded, - boolean leaf, - int row, - boolean hasFocus) - { - if(_cellRenderer == null) - { - _cellRenderer = new DefaultTreeCellRenderer(); - _cellRenderer.setOpenIcon(Utils.getIcon("/icons/16x16/application_open.png")); - _cellRenderer.setClosedIcon(Utils.getIcon("/icons/16x16/application_closed.png")); - } - - return _cellRenderer.getTreeCellRendererComponent(tree, value, sel, expanded, leaf, row, hasFocus); - } - - @Override - public boolean[] getAvailableActions() - { - boolean[] actions = new boolean[ACTION_COUNT]; - - actions[COPY] = true; - actions[DELETE] = true; - - Object descriptor = _coordinator.getClipboard(); - if(descriptor != null) - { - actions[PASTE] = descriptor instanceof ApplicationDescriptor; - } - - actions[SHOW_VARS] = true; - actions[SUBSTITUTE_VARS] = true; - actions[NEW_NODE] = true; - actions[NEW_PROPERTY_SET] = true; - actions[NEW_REPLICA_GROUP] = true; - actions[NEW_TEMPLATE_SERVER] = true; - actions[NEW_TEMPLATE_SERVER_ICEBOX] = true; - actions[NEW_TEMPLATE_SERVICE] = true; - - return actions; - } - - @Override - public JPopupMenu getPopupMenu() - { - ApplicationActions actions = _coordinator.getActionsForPopup(); - if(_popup == null) - { - _popup = new JPopupMenu(); - _popup.add(actions.get(NEW_NODE)); - _popup.add(actions.get(NEW_PROPERTY_SET)); - _popup.add(actions.get(NEW_REPLICA_GROUP)); - _popup.addSeparator(); - _popup.add(actions.get(NEW_TEMPLATE_SERVER)); - _popup.add(actions.get(NEW_TEMPLATE_SERVER_ICEBOX)); - _popup.addSeparator(); - _popup.add(actions.get(NEW_TEMPLATE_SERVICE)); - } - actions.setTarget(this); - return _popup; - } - - @Override - public void copy() - { - _coordinator.setClipboard(copyDescriptor(_descriptor)); - _coordinator.getActionsForMenu().get(PASTE).setEnabled(true); - } - - @Override - public void paste() - { - _coordinator.pasteApplication(); - } - - @Override - public void newNode() - { - _nodes.newNode(); - } - - @Override - public void newPropertySet() - { - _propertySets.newPropertySet(); - } - - @Override - public void newReplicaGroup() - { - _replicaGroups.newReplicaGroup(); - } - - @Override - public void newTemplateServer() - { - _serverTemplates.newTemplateServer(); - } - - @Override - public void newTemplateServerIceBox() - { - _serverTemplates.newTemplateServerIceBox(); - } - - @Override - public void newTemplateService() - { - _serviceTemplates.newTemplateService(); - } - - public void save() - { - if(_live) - { - saveToRegistry(true); - } - else if(_file != null) - { - File file = _coordinator.saveToFile(false, this, _file); - if(file != null) - { - _file = file; - commit(); - _coordinator.getSaveAction().setEnabled(false); - _coordinator.getDiscardUpdatesAction().setEnabled(false); - } - } - else - { - assert false; - } - } - - public void saveToRegistry(final boolean restart) - { - // - // To be run in GUI thread when exclusive write access is acquired - // - Runnable runnable = new Runnable() - { - private void release() - { - _coordinator.releaseExclusiveWriteAccess(); - _coordinator.getMainFrame().setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); - } - - private void handleFailure(String prefix, String title, String message) - { - release(); - - if(isSelected()) - { - _coordinator.getSaveAction().setEnabled(isLive() && _coordinator.connectedToMaster() || - hasFile()); - _coordinator.getSaveToRegistryAction().setEnabled(true); - _coordinator.getSaveToRegistryWithoutRestartAction().setEnabled(true); - _coordinator.getDiscardUpdatesAction().setEnabled(true); - } - - _coordinator.getStatusBar().setText(prefix + "failed!"); - - JOptionPane.showMessageDialog( - _coordinator.getMainFrame(), - message, - title, - JOptionPane.ERROR_MESSAGE); - } - - @Override - public void run() - { - _coordinator.getMainFrame().setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); - boolean asyncRelease = false; - - try - { - if(_live && _canUseUpdateDescriptor) - { - ApplicationUpdateDescriptor updateDescriptor = createUpdateDescriptor(); - if(updateDescriptor != null) - { - final String prefix = "Updating application '" + _id + "'..."; - _coordinator.getStatusBar().setText(prefix); - - - Ice.Callback cb = new Ice.Callback() - { - @Override - public void completed(Ice.AsyncResult result) - { - try - { - if(restart) - { - _coordinator.getAdmin().end_updateApplication(result); - } - else - { - _coordinator.getAdmin().end_updateApplicationWithoutRestart(result); - } - - if(_traceSaveToRegistry) - { - _coordinator.traceSaveToRegistry( - "updateApplication for application " + _id + ": success"); - } - - SwingUtilities.invokeLater(new Runnable() - { - @Override - public void run() - { - commit(); - release(); - _coordinator.getStatusBar().setText(prefix + "done."); - } - }); - } - catch(final Exception ex) - { - if(_traceSaveToRegistry) - { - _coordinator.traceSaveToRegistry( - "updateApplication for application " + _id + ": failed"); - } - - SwingUtilities.invokeLater(new Runnable() - { - @Override - public void run() - { - _skipUpdates--; - if(ex instanceof Ice.UserException) - { - handleFailure(prefix, "Update failed", - "IceGrid exception: " + ex.toString()); - } - else - { - handleFailure(prefix, "Update failed", - "Communication exception: " + - ex.toString()); - } - } - - }); - } - } - }; - - if(_traceSaveToRegistry) - { - _coordinator.traceSaveToRegistry("sending updateApplication for application " + _id); - } - - if(restart) - { - _coordinator.getAdmin().begin_updateApplication(updateDescriptor, cb); - } - else - { - _coordinator.getAdmin().begin_updateApplicationWithoutRestart(updateDescriptor, cb); - } - asyncRelease = true; - - // - // If the update fails, we know we can't get other updates - // since we have exclusive write access - // - _skipUpdates++; - } - else - { - final String prefix = "Application '" + _id + "' is already up-to-date"; - _coordinator.getStatusBar().setText(prefix); - commit(); - } - } - else - { - // - // Add or sync application - // - if(_coordinator.getLiveDeploymentRoot().getApplicationDescriptor(_id) == null) - { - assert _live == false; - - final String prefix = "Adding application '" + _id + "'..."; - _coordinator.getStatusBar().setText(prefix); - - Callback_Admin_addApplication cb = new Callback_Admin_addApplication() - { - @Override - public void response() - { - if(_traceSaveToRegistry) - { - _coordinator.traceSaveToRegistry("addApplication for application " + - _id + ": success"); - } - - SwingUtilities.invokeLater(new Runnable() - { - @Override - public void run() - { - commit(); - liveReset(); - _coordinator.addLiveApplication(Root.this); - release(); - _coordinator.getStatusBar().setText(prefix + "done."); - } - }); - } - - @Override - public void exception(final Ice.UserException e) - { - if(_traceSaveToRegistry) - { - _coordinator.traceSaveToRegistry("addApplication for application " + - _id + ": failed"); - } - - SwingUtilities.invokeLater(new Runnable() - { - @Override - public void run() - { - handleFailure(prefix, "Add failed", - "IceGrid exception: " + e.toString()); - } - - }); - } - - @Override - public void exception(final Ice.LocalException e) - { - if(_traceSaveToRegistry) - { - _coordinator.traceSaveToRegistry("addApplication for application " + - _id + ": failed"); - } - - SwingUtilities.invokeLater(new Runnable() - { - @Override - public void run() - { - handleFailure(prefix, "Add failed", - "Communication exception: " + e.toString()); - } - }); - } - - }; - - if(_traceSaveToRegistry) - { - _coordinator.traceSaveToRegistry("sending addApplication for application " + _id); - } - - _coordinator.getAdmin().begin_addApplication(_descriptor, cb); - asyncRelease = true; - } - else - { - final String prefix = "Synchronizing application '" + _id + "'..."; - _coordinator.getStatusBar().setText(prefix); - - Ice.Callback cb = new Ice.Callback() - { - @Override - public void completed(Ice.AsyncResult result) - { - try - { - if(restart) - { - _coordinator.getAdmin().end_syncApplication(result); - } - else - { - _coordinator.getAdmin().end_syncApplicationWithoutRestart(result); - } - - if(_traceSaveToRegistry) - { - _coordinator.traceSaveToRegistry("syncApplication for application " + - _id + ": success"); - } - - SwingUtilities.invokeLater(new Runnable() - { - @Override - public void run() - { - commit(); - if(!_live) - { - // - // Make this tab live or close it if there is one already - // open - // - ApplicationPane app = _coordinator.getLiveApplication(_id); - if(app == null) - { - liveReset(); - _coordinator.addLiveApplication(Root.this); - } - else - { - boolean selected = isSelected(); - _coordinator.getMainPane().removeApplication(Root.this); - if(selected) - { - _coordinator.getMainPane().setSelectedComponent(app); - } - } - } - - release(); - _coordinator.getStatusBar().setText(prefix + "done."); - } - }); - } - catch(final Exception ex) - { - if(_traceSaveToRegistry) - { - _coordinator.traceSaveToRegistry("syncApplication for application " + - _id + ": failed"); - } - - SwingUtilities.invokeLater(new Runnable() - { - @Override - public void run() - { - if(_live) - { - _skipUpdates--; - } - - if(ex instanceof Ice.UserException) - { - handleFailure(prefix, "Sync failed", - "IceGrid exception: " + ex.toString()); - } - else - { - handleFailure(prefix, "Sync failed", - "Communication exception: " + - ex.toString()); - } - } - - }); - } - } - }; - - if(_traceSaveToRegistry) - { - _coordinator.traceSaveToRegistry("sending syncApplication for application " + _id); - } - - if(restart) - { - _coordinator.getAdmin().begin_syncApplication(_descriptor, cb); - } - else - { - _coordinator.getAdmin().begin_syncApplicationWithoutRestart(_descriptor, cb); - } - - asyncRelease = true; - if(_live) - { - _skipUpdates++; - } - } - } - - if(isSelected()) - { - _coordinator.getSaveAction().setEnabled(false); - _coordinator.getSaveToRegistryAction().setEnabled(false); - _coordinator.getSaveToRegistryWithoutRestartAction().setEnabled(false); - _coordinator.getDiscardUpdatesAction().setEnabled(false); - } - } - catch(Ice.LocalException e) - { - if(_traceSaveToRegistry) - { - _coordinator.traceSaveToRegistry("Ice communications exception while saving application " + - _id); - } - - JOptionPane.showMessageDialog( - _coordinator.getMainFrame(), - e.toString(), - "Communication Exception", - JOptionPane.ERROR_MESSAGE); - } - finally - { - if(!asyncRelease) - { - _coordinator.getMainFrame().setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); - _coordinator.releaseExclusiveWriteAccess(); - } - } - } - }; - - try - { - _coordinator.acquireExclusiveWriteAccess(runnable); - } - catch(AccessDeniedException e) - { - _coordinator.accessDenied(e); - } - catch(Ice.LocalException e) - { - JOptionPane.showMessageDialog( - _coordinator.getMainFrame(), - e.toString(), - "Communication Exception", - JOptionPane.ERROR_MESSAGE); - } - } - - public void saveToFile() - { - File file = _coordinator.saveToFile(true, this, _file); - if(file != null) - { - _file = file; - _live = false; - - _coordinator.removeLiveApplication(_id); - _coordinator.getMainPane().resetIcon(this); - - commit(); - _coordinator.getSaveAction().setEnabled(false); - _coordinator.getDiscardUpdatesAction().setEnabled(false); - _coordinator.getSaveToRegistryAction().setEnabled(_coordinator.connectedToMaster()); - _coordinator.getSaveToRegistryWithoutRestartAction().setEnabled(_coordinator.connectedToMaster()); - } - } - - public void discardUpdates() - { - ApplicationDescriptor desc = null; - - if(_live) - { - desc = _coordinator.getLiveDeploymentRoot().getApplicationDescriptor(_id); - assert desc != null; - desc = IceGridGUI.Application.Root.copyDescriptor(desc); - } - else if(_file != null) - { - desc = _coordinator.parseFile(_file); - if(desc == null) - { - return; - } - } - else - { - assert false; - } - - Root newRoot; - - try - { - newRoot = new Root(_coordinator, desc, _live, _file); - } - catch(UpdateFailedException e) - { - JOptionPane.showMessageDialog( - _coordinator.getMainFrame(), - e.toString(), - "Bad Application Descriptor: Unable reload Application", - JOptionPane.ERROR_MESSAGE); - return; - } - - ApplicationPane app = _coordinator.getMainPane().findApplication(this); - assert app != null; - app.setRoot(newRoot); - - TreeNode node = newRoot.findNodeLike(_tree.getSelectionPath(), false); - if(node == null) - { - newRoot.setSelectedNode(newRoot); - } - else - { - newRoot.setSelectedNode(node); - } - _coordinator.getCurrentTab().selected(); - } - - private void liveReset() - { - _live = true; - _skipUpdates = 0; - _file = null; - _coordinator.getMainPane().resetIcon(this); - } - - private ApplicationUpdateDescriptor createUpdateDescriptor() - { - ApplicationUpdateDescriptor update = new ApplicationUpdateDescriptor(); - update.name = _descriptor.name; - if(_editable.isModified()) - { - // - // Diff description - // - if(!_descriptor.description.equals(_origDescription)) - { - update.description = new IceGrid.BoxedString(_descriptor.description); - } - - // - // Diff variables - // - update.variables = new java.util.TreeMap<String, String>(_descriptor.variables); - java.util.List<String> removeVariables = new java.util.LinkedList<String>(); - - for(java.util.Map.Entry<String, String> p : _origVariables.entrySet()) - { - String key = p.getKey(); - String newValue = update.variables.get(key); - if(newValue == null) - { - removeVariables.add(key); - } - else - { - String value = p.getValue(); - if(newValue.equals(value)) - { - update.variables.remove(key); - } - } - } - update.removeVariables = removeVariables.toArray(new String[0]); - - // - // Diff distribution - // - if(!_descriptor.distrib.equals(_origDistrib)) - { - update.distrib = new IceGrid.BoxedDistributionDescriptor(_descriptor.distrib); - } - } - else - { - update.variables = new java.util.TreeMap<String, String>(); - update.removeVariables = new String[0]; - } - - // - // Property sets - // - update.removePropertySets = _propertySets.getEditable().removedElements(PropertySet.class); - update.propertySets = _propertySets.getUpdates(); - - // - // Replica Groups - // - update.removeReplicaGroups = _replicaGroups.getEditable().removedElements(ReplicaGroup.class); - update.replicaGroups = _replicaGroups.getUpdates(); - - // - // Server Templates - // - update.removeServerTemplates = _serverTemplates.getEditable().removedElements(ServerTemplate.class); - update.serverTemplates = _serverTemplates.getUpdates(); - - // - // Service Templates - // - update.removeServiceTemplates = _serviceTemplates.getEditable().removedElements(ServiceTemplate.class); - update.serviceTemplates =_serviceTemplates.getUpdates(); - - // - // Nodes - // - update.removeNodes = _nodes.getEditable().removedElements(Node.class); - update.nodes = _nodes.getUpdates(); - - // - // Return null if nothing changed - // - if(!_editable.isModified() && - update.removePropertySets.length == 0 && - update.propertySets.size() == 0 && - update.removeReplicaGroups.length == 0 && - update.replicaGroups.size() == 0 && - update.removeServerTemplates.length == 0 && - update.serverTemplates.size() == 0 && - update.removeServiceTemplates.length == 0 && - update.serviceTemplates.size() == 0 && - update.removeNodes.length == 0 && - update.nodes.size() == 0) - { - return null; - } - else - { - return update; - } - } - - private void commit() - { - _updated = false; - _registryUpdatesEnabled = true; - _canUseUpdateDescriptor = true; - - assert _concurrentUpdates.size() == 0; - - _editable.commit(); - _origVariables = _descriptor.variables; - _origDescription = _descriptor.description; - _origDistrib = (DistributionDescriptor)_descriptor.distrib.clone(); - - _nodes.commit(); - _propertySets.commit(); - _replicaGroups.commit(); - _serverTemplates.commit(); - _serviceTemplates.commit(); - } - - @Override - public boolean isEphemeral() - { - return false; - } - - @Override - public void destroy() - { - if(!_live && _file == null) - { - _coordinator.getMainPane().removeApplication(this); - } - else if(_live) - { - int confirm = JOptionPane.showConfirmDialog( - _coordinator.getMainFrame(), - "You are about to remove application '" + _id + "' from the IceGrid registry. " - + "Do you want to proceed?", - "Remove Confirmation", - JOptionPane.YES_NO_OPTION); - - if(confirm == JOptionPane.YES_OPTION) - { - _coordinator.removeApplicationFromRegistry(_id); - _discardMe = true; - } - } - else - { - assert _file != null; - - int confirm = JOptionPane.showConfirmDialog( - _coordinator.getMainFrame(), - "You are about to remove application '" + _id + "' and its associated file. " - + "Do you want to proceed?", - "Remove Confirmation", - JOptionPane.YES_NO_OPTION); - - if(confirm == JOptionPane.YES_OPTION) - { - if(_file.delete()) - { - _coordinator.getMainPane().removeApplication(this); - } - } - } - } - - public boolean update(ApplicationUpdateDescriptor desc) - { - assert _live == true; - - if(_skipUpdates > 0) - { - _skipUpdates--; - return false; - } - - if(!_registryUpdatesEnabled) - { - if(_updated) - { - _canUseUpdateDescriptor = false; - } - else - { - _concurrentUpdates.add(desc); - } - return false; - } - - try - { - // - // Description - // - if(desc.description != null) - { - _descriptor.description = desc.description.value; - _origDescription = _descriptor.description; - } - - // - // Variables - // - for(String name : desc.removeVariables) - { - _descriptor.variables.remove(name); - } - _descriptor.variables.putAll(desc.variables); - - // - // Distrib - // - if(desc.distrib != null) - { - _descriptor.distrib = desc.distrib.value; - _origDistrib = (DistributionDescriptor)_descriptor.distrib.clone(); - } - - // - // Property Sets - // - for(String id : desc.removePropertySets) - { - _descriptor.propertySets.remove(id); - } - _descriptor.propertySets.putAll(desc.propertySets); - _propertySets.update(desc.propertySets, desc.removePropertySets); - - // - // Replica groups - // - for(String id : desc.removeReplicaGroups) - { - _descriptor.replicaGroups.remove(id); - } - _descriptor.replicaGroups.addAll(desc.replicaGroups); - _replicaGroups.update(desc.replicaGroups, desc.removeReplicaGroups); - - // - // Service templates - // - for(String id : desc.removeServiceTemplates) - { - _descriptor.serviceTemplates.remove(id); - } - _descriptor.serviceTemplates.putAll(desc.serviceTemplates); - _serviceTemplates.update(desc.serviceTemplates, desc.removeServiceTemplates); - - // - // Server templates - // - for(String id : desc.removeServerTemplates) - { - _descriptor.serverTemplates.remove(id); - } - _descriptor.serverTemplates.putAll(desc.serverTemplates); - _serverTemplates.update(desc.serverTemplates, desc.removeServerTemplates, desc.serviceTemplates.keySet()); - - // - // Nodes - // - for(String id : desc.removeNodes) - { - _descriptor.nodes.remove(id); - } - - // - // Updates also _descriptor.nodes - // - _nodes.update(desc.nodes, desc.removeNodes, desc.serverTemplates.keySet(), desc.serviceTemplates.keySet()); - } - catch(UpdateFailedException e) - { - // - // Received invalid update from IceGrid registry: a bug! - // - assert false; - } - - return true; - } - - public JTree getTree() - { - return _tree; - } - - public DefaultTreeModel getTreeModel() - { - return _treeModel; - } - - @Override - public Coordinator getCoordinator() - { - return _coordinator; - } - - public boolean isSelectionListenerEnabled() - { - return _selectionListenerEnabled; - } - - public void enableSelectionListener() - { - _selectionListenerEnabled = true; - } - - public void disableSelectionListener() - { - _selectionListenerEnabled = false; - } - - public void cancelEdit() - { - if(!_updated) - { - _registryUpdatesEnabled = true; - - // - // Apply now any delayed concurrent update - // - for(ApplicationUpdateDescriptor p : _concurrentUpdates) - { - boolean ok = update(p); - assert ok; - } - if(!_concurrentUpdates.isEmpty()) - { - _applicationPane.refresh(); - _concurrentUpdates.clear(); - } - - _coordinator.getSaveAction().setEnabled(false); - _coordinator.getDiscardUpdatesAction().setEnabled(false); - _coordinator.getSaveToRegistryAction().setEnabled( - hasFile() && _coordinator.connectedToMaster()); - _coordinator.getSaveToRegistryWithoutRestartAction().setEnabled( - hasFile() && _coordinator.connectedToMaster()); - } - } - - public boolean kill() - { - _live = false; - - if(_registryUpdatesEnabled || _discardMe) - { - return true; - } - else - { - _coordinator.getMainPane().resetIcon(this); - _coordinator.getCurrentTab().selected(); // only needed when 'this' corresponds to the current tab - return false; - } - } - - public boolean isLive() - { - return _live; - } - - public boolean hasFile() - { - return _file != null; - } - - public boolean needsSaving() - { - return _updated || !_registryUpdatesEnabled; - } - - public void setPane(ApplicationPane app) - { - _applicationPane = app; - } - - public ApplicationPane getPane() - { - return _applicationPane; - } - - Editor getEditor(Class c, TreeNode node) - { - Editor result = _editorMap.get(c); - if(result == null) - { - result = node.createEditor(); - _editorMap.put(c, result); - } - return result; - } - - @Override - Object getDescriptor() - { - return _descriptor; - } - - ApplicationDescriptor saveDescriptor() - { - ApplicationDescriptor clone = (ApplicationDescriptor)_descriptor.clone(); - clone.distrib = (IceGrid.DistributionDescriptor)clone.distrib.clone(); - return clone; - } - - void restoreDescriptor(ApplicationDescriptor clone) - { - _descriptor.name = clone.name; - _descriptor.variables = clone.variables; - _descriptor.distrib.icepatch = clone.distrib.icepatch; - _descriptor.distrib.directories = clone.distrib.directories; - _descriptor.description = clone.description; - } - - @Override - public void write(XMLWriter writer) - throws java.io.IOException - { - writer.writeStartTag("icegrid"); - - java.util.List<String[]> attributes = new java.util.LinkedList<String[]>(); - attributes.add(createAttribute("name", _id)); - - writer.writeStartTag("application", attributes); - - if(_descriptor.description.length() > 0) - { - writer.writeElement("description", _descriptor.description); - } - writeVariables(writer, _descriptor.variables); - writeDistribution(writer, _descriptor.distrib); - - _serviceTemplates.write(writer); - _serverTemplates.write(writer); - _replicaGroups.write(writer); - _propertySets.write(writer); - _nodes.write(writer); - - writer.writeEndTag("application"); - writer.writeEndTag("icegrid"); - } - - // - // Methods called by editors; see also cancelEdit() above - // - void disableRegistryUpdates() - { - if(_registryUpdatesEnabled) - { - _registryUpdatesEnabled = false; - _coordinator.getSaveAction().setEnabled(_live && _coordinator.connectedToMaster() || _file != null); - _coordinator.getDiscardUpdatesAction().setEnabled(_live || _file != null); - _coordinator.getSaveToRegistryAction().setEnabled(_coordinator.connectedToMaster()); - _coordinator.getSaveToRegistryWithoutRestartAction().setEnabled(_coordinator.connectedToMaster()); - } - } - - void updated() - { - _updated = true; - disableRegistryUpdates(); // can be still enabled when updated() is called by destroy() - - _concurrentUpdates.clear(); - } - - void rebuild() - throws UpdateFailedException - { - Utils.Resolver oldResolver = _resolver; - String oldId = _id; - _id = _descriptor.name; - _resolver = new Utils.Resolver(_descriptor.variables); - _resolver.put("application", _id); - - try - { - _nodes.rebuild(); - } - catch(UpdateFailedException e) - { - _id = oldId; - _resolver = oldResolver; - throw e; - } - } - - // - // Called when a server-template is deleted, to remove all - // corresponding instances. - // - void removeServerInstances(String templateId) - { - _nodes.removeServerInstances(templateId); - } - - // - // Called when a service-template is deleted, to remove all - // corresponding instances - // - void removeServiceInstances(String templateId) - { - _nodes.removeServiceInstances(templateId); - _serverTemplates.removeServiceInstances(templateId); - } - - ServerTemplate findServerTemplate(String id) - { - return (ServerTemplate)_serverTemplates.findChild(id); - } - - ServiceTemplate findServiceTemplate(String id) - { - return (ServiceTemplate)_serviceTemplates.findChild(id); - } - - ReplicaGroup findReplicaGroup(String id) - { - return (ReplicaGroup)_replicaGroups.findChild(id); - } - - Node findNode(String id) - { - return (Node)_nodes.findChild(id); - } - - java.util.List<ServerInstance> findServerInstances(String template) - { - return _nodes.findServerInstances(template); - } - - java.util.List<ServiceInstance> findServiceInstances(String template) - { - java.util.List<ServiceInstance> result = _serverTemplates.findServiceInstances(template); - result.addAll(_nodes.findServiceInstances(template)); - return result; - } - - TemplateDescriptor findServerTemplateDescriptor(String templateName) - { - return _descriptor.serverTemplates.get(templateName); - } - - TemplateDescriptor findServiceTemplateDescriptor(String templateName) - { - return _descriptor.serviceTemplates.get(templateName); - } - - ServerTemplates getServerTemplates() - { - return _serverTemplates; - } - - ServiceTemplates getServiceTemplates() - { - return _serviceTemplates; - } - - ReplicaGroups getReplicaGroups() - { - return _replicaGroups; - } - - boolean pasteIceBox(IceBoxDescriptor ibd) - { - // - // During paste, check that all service instances refer to existing services, - // and remove any extra template parameters - // - for(ServiceInstanceDescriptor p : ibd.services) - { - if(p.template.length() > 0) - { - TemplateDescriptor td = findServiceTemplateDescriptor(p.template); - - if(td == null) - { - JOptionPane.showMessageDialog( - _coordinator.getMainFrame(), - "Descriptor refers to undefined service template '" + p.template + "'", - "Cannot paste", - JOptionPane.ERROR_MESSAGE); - return false; - } - - p.parameterValues.keySet().retainAll(td.parameters); - } - } - return true; - } - - @Override - public Root getRoot() - { - return this; - } - - @Override - Utils.Resolver getResolver() - { - return _resolver; - } - - // - // Should only be used for reading - // - java.util.Map<String, String> getVariables() - { - return _descriptor.variables; - } - - private boolean isSelected() - { - if(_coordinator.getCurrentTab() instanceof ApplicationPane) - { - return ((ApplicationPane)_coordinator.getCurrentTab()).getRoot() == Root.this; - } - else - { - return false; - } - } - - private final Coordinator _coordinator; - private final boolean _traceSaveToRegistry; - - // - // 'this' is the root of the tree - // - private JTree _tree; - private DefaultTreeModel _treeModel; - private Utils.Resolver _resolver; - - private boolean _live; - - // - // null when this application is not tied to a file - // - private File _file; - - private ApplicationDescriptor _descriptor; - - // - // Keeps original version (as shallow copies) to be able to build - // ApplicationUpdateDescriptor. Only used when _live == true - // - private java.util.Map<String, String> _origVariables; - private String _origDescription; - private DistributionDescriptor _origDistrib; - - // - // When this application (and children) is being updated, we - // no longer apply updates from the registry. Only meaningful when - // _live == true - // - private boolean _registryUpdatesEnabled = true; - - private boolean _discardMe = false; - - // - // True when any update was applied to this application - // (including children) - // - private boolean _updated = false; - - // - // Updates saved when _updated == false and - // _registryUpdatesEnabled == false - // - private java.util.List<ApplicationUpdateDescriptor> _concurrentUpdates = - new java.util.LinkedList<ApplicationUpdateDescriptor>(); - - // - // When _live is true and _canUseUpdateDescriptor is true, we can - // save the updates using an ApplicationUpdateDescriptor - // - private boolean _canUseUpdateDescriptor = true; - // - // Updates to skip (because already applied locally) - // - private int _skipUpdates = 0; - - private Nodes _nodes; - private PropertySets _propertySets; - private ReplicaGroups _replicaGroups; - private ServerTemplates _serverTemplates; - private ServiceTemplates _serviceTemplates; - - private boolean _selectionListenerEnabled = true; - - private ApplicationEditor _editor; - - // - // Map editor-class to Editor object - // - private java.util.Map<Class, Editor> _editorMap = new java.util.HashMap<Class, Editor>(); - - private ApplicationPane _applicationPane; - - static private DefaultTreeCellRenderer _cellRenderer; - static private JPopupMenu _popup; -} |