diff options
author | Bernard Normier <bernard@zeroc.com> | 2007-01-09 20:59:01 +0000 |
---|---|---|
committer | Bernard Normier <bernard@zeroc.com> | 2007-01-09 20:59:01 +0000 |
commit | f6fa6818a1fc822bc9941b53e447d81063bc6db8 (patch) | |
tree | ecc3936ba48b336fcf741663638eaa933f3f106b /java/src/IceGridGUI | |
parent | Removed extra -GZ setting (diff) | |
download | ice-f6fa6818a1fc822bc9941b53e447d81063bc6db8.tar.bz2 ice-f6fa6818a1fc822bc9941b53e447d81063bc6db8.tar.xz ice-f6fa6818a1fc822bc9941b53e447d81063bc6db8.zip |
Fixed bug #1642: show application info attributes
Diffstat (limited to 'java/src/IceGridGUI')
-rwxr-xr-x | java/src/IceGridGUI/Coordinator.java | 76 | ||||
-rw-r--r-- | java/src/IceGridGUI/LiveDeployment/ApplicationDetailsDialog.java | 105 | ||||
-rwxr-xr-x | java/src/IceGridGUI/LiveDeployment/RegistryEditor.java | 192 | ||||
-rwxr-xr-x | java/src/IceGridGUI/LiveDeployment/Root.java | 74 |
4 files changed, 429 insertions, 18 deletions
diff --git a/java/src/IceGridGUI/Coordinator.java b/java/src/IceGridGUI/Coordinator.java index 983d3418471..cd9345b0985 100755 --- a/java/src/IceGridGUI/Coordinator.java +++ b/java/src/IceGridGUI/Coordinator.java @@ -412,8 +412,12 @@ public class Coordinator _appMenu.setEnabled(false); toolsMenu.add(_appMenu); _appMenu.add(_patchApplication); + _appMenu.add(_showApplicationDetails); + _appMenu.addSeparator(); + _appMenu.add(_removeApplicationFromRegistry); _appMenu.setEnabled(false); + // // Node sub-menu // @@ -716,6 +720,7 @@ public class Coordinator void applicationAdded(int serial, ApplicationInfo info) { _liveDeploymentRoot.applicationAdded(info); + _liveDeploymentPane.refresh(); _statusBar.setText( "Last update: new application '" + info.descriptor.name + "'"); updateSerial(serial); @@ -724,6 +729,7 @@ public class Coordinator void applicationRemoved(int serial, String name) { _liveDeploymentRoot.applicationRemoved(name); + _liveDeploymentPane.refresh(); _statusBar.setText( "Last update: application '" + name + "' was removed"); @@ -1168,6 +1174,8 @@ public class Coordinator _logout.setEnabled(false); _openApplicationFromRegistry.setEnabled(false); _patchApplication.setEnabled(false); + _showApplicationDetails.setEnabled(false); + _removeApplicationFromRegistry.setEnabled(false); _appMenu.setEnabled(false); _newApplicationWithDefaultTemplates.setEnabled(false); _acquireExclusiveWriteAccess.setEnabled(false); @@ -1448,6 +1456,8 @@ public class Coordinator _logout.setEnabled(true); _openApplicationFromRegistry.setEnabled(true); _patchApplication.setEnabled(true); + _showApplicationDetails.setEnabled(true); + _removeApplicationFromRegistry.setEnabled(true); _appMenu.setEnabled(true); _newApplicationWithDefaultTemplates.setEnabled(true); _acquireExclusiveWriteAccess.setEnabled(true); @@ -2143,6 +2153,68 @@ public class Coordinator } }; _patchApplication.setEnabled(false); + + _showApplicationDetails = new AbstractAction("Show details") + { + public void actionPerformed(ActionEvent e) + { + Object[] applicationNames = _liveDeploymentRoot.getApplicationNames(); + + if(applicationNames.length == 0) + { + JOptionPane.showMessageDialog( + _mainFrame, + "There is no application deployed in this IceGrid registry", + "No application", + JOptionPane.INFORMATION_MESSAGE); + } + else + { + String appName = (String)JOptionPane.showInputDialog( + _mainFrame, "Which Application do you to display", + "Show details", + JOptionPane.QUESTION_MESSAGE, null, + applicationNames, applicationNames[0]); + + if(appName != null) + { + _liveDeploymentRoot.showApplicationDetails(appName); + } + } + } + }; + _showApplicationDetails.setEnabled(false); + + _removeApplicationFromRegistry = new AbstractAction("Remove from Registry") + { + public void actionPerformed(ActionEvent e) + { + Object[] applicationNames = _liveDeploymentRoot.getApplicationNames(); + + if(applicationNames.length == 0) + { + JOptionPane.showMessageDialog( + _mainFrame, + "There is no application deployed in this IceGrid registry", + "No application", + JOptionPane.INFORMATION_MESSAGE); + } + else + { + String appName = (String)JOptionPane.showInputDialog( + _mainFrame, "Which Application do you want to remove?", + "Remove application", + JOptionPane.QUESTION_MESSAGE, null, + applicationNames, applicationNames[0]); + + if(appName != null) + { + removeApplicationFromRegistry(appName); + } + } + } + }; + _removeApplicationFromRegistry.setEnabled(false); _cut = new ActionWrapper("Cut"); @@ -2287,7 +2359,7 @@ public class Coordinator { String text = "IceGrid Admin version " + IceUtil.Version.ICE_STRING_VERSION + "\n" - + "Copyright \u00A9 2005-2006 ZeroC, Inc. All rights reserved.\n"; + + "Copyright \u00A9 2005-2007 ZeroC, Inc. All rights reserved.\n"; JOptionPane.showMessageDialog( _mainFrame, @@ -2593,6 +2665,8 @@ public class Coordinator private Action _helpContents; private Action _about; private Action _patchApplication; + private Action _showApplicationDetails; + private Action _removeApplicationFromRegistry; private Action _cutText = new javax.swing.text.DefaultEditorKit.CutAction(); private Action _copyText = new javax.swing.text.DefaultEditorKit.CopyAction(); diff --git a/java/src/IceGridGUI/LiveDeployment/ApplicationDetailsDialog.java b/java/src/IceGridGUI/LiveDeployment/ApplicationDetailsDialog.java new file mode 100644 index 00000000000..e6865e63bc2 --- /dev/null +++ b/java/src/IceGridGUI/LiveDeployment/ApplicationDetailsDialog.java @@ -0,0 +1,105 @@ +// ********************************************************************** +// +// Copyright (c) 2003-2007 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.LiveDeployment; + +import java.awt.BorderLayout; +import java.awt.Container; +import java.awt.Dimension; +import java.awt.Frame; + +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; + +import javax.swing.BoxLayout; +import javax.swing.JButton; +import javax.swing.JComboBox; +import javax.swing.JComponent; +import javax.swing.JDialog; +import javax.swing.JFrame; +import javax.swing.JPanel; +import javax.swing.JScrollPane; +import javax.swing.JTextField; + +import com.jgoodies.forms.builder.DefaultFormBuilder; +import com.jgoodies.forms.factories.Borders; +import com.jgoodies.forms.factories.ButtonBarFactory; +import com.jgoodies.forms.layout.FormLayout; +import com.jgoodies.forms.util.LayoutStyle; + +import IceGrid.*; + +class ApplicationDetailsDialog extends JDialog +{ + ApplicationDetailsDialog(final Root root) + { + super(root.getCoordinator().getMainFrame(), + "Application Details - IceGrid Admin", true); + setDefaultCloseOperation(JDialog.HIDE_ON_CLOSE); + _mainFrame = root.getCoordinator().getMainFrame(); + + _name.setEditable(false); + _uuid.setEditable(false); + _createTime.setEditable(false); + _createUser.setEditable(false); + _updateTime.setEditable(false); + _updateUser.setEditable(false); + _revision.setEditable(false); + + FormLayout layout = new FormLayout("right:pref, 3dlu, pref", ""); + DefaultFormBuilder builder = new DefaultFormBuilder(layout); + builder.setDefaultDialogBorder(); + builder.setRowGroupingEnabled(true); + builder.setLineGapSize(LayoutStyle.getCurrent().getLinePad()); + + builder.append("Name", _name); + builder.nextLine(); + builder.append("UUID", _uuid); + builder.nextLine(); + builder.append("Created", _createTime); + builder.nextLine(); + builder.append("Created by", _createUser); + builder.nextLine(); + builder.append("Last Update", _updateTime); + builder.nextLine(); + builder.append("Updated by", _updateUser); + builder.nextLine(); + builder.append("Revision", _revision); + builder.nextLine(); + + Container contentPane = getContentPane(); + contentPane.add(builder.getPanel()); + + pack(); + setResizable(false); + } + + void showDialog(ApplicationInfo info) + { + _name.setText(info.descriptor.name); + _uuid.setText(info.uuid); + _createTime.setText(java.text.DateFormat.getDateTimeInstance().format(new java.util.Date(info.createTime))); + _createUser.setText(info.createUser); + _updateTime.setText(java.text.DateFormat.getDateTimeInstance().format(new java.util.Date(info.updateTime))); + _updateUser.setText(info.updateUser); + _revision.setText(Integer.toString(info.revision)); + + setLocationRelativeTo(_mainFrame); + setVisible(true); + } + + private JTextField _name = new JTextField(30); + private JTextField _uuid = new JTextField(30); + private JTextField _createTime = new JTextField(30); + private JTextField _createUser = new JTextField(30); + private JTextField _updateTime = new JTextField(30); + private JTextField _updateUser = new JTextField(30); + private JTextField _revision = new JTextField(30); + private JFrame _mainFrame; + +} diff --git a/java/src/IceGridGUI/LiveDeployment/RegistryEditor.java b/java/src/IceGridGUI/LiveDeployment/RegistryEditor.java index 1087e234f2d..b4f0f395bf9 100755 --- a/java/src/IceGridGUI/LiveDeployment/RegistryEditor.java +++ b/java/src/IceGridGUI/LiveDeployment/RegistryEditor.java @@ -9,11 +9,18 @@ package IceGridGUI.LiveDeployment; import java.awt.event.ActionEvent; +import java.awt.event.ActionEvent; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; +import java.awt.event.MouseListener; import javax.swing.AbstractAction; import javax.swing.Action; import javax.swing.JButton; import javax.swing.JLabel; +import javax.swing.JMenuItem; +import javax.swing.JOptionPane; +import javax.swing.JPopupMenu; import javax.swing.JScrollPane; import javax.swing.JTextField; import javax.swing.KeyStroke; @@ -31,6 +38,98 @@ class RegistryEditor extends Editor _hostname.setEditable(false); _endpoints.setEditable(false); + Action openDefinition = new AbstractAction("Open definition") + { + public void actionPerformed(ActionEvent e) + { + int selectedRow = _applications.getSelectedRow(); + if(selectedRow != -1) + { + String appName = (String)_applications.getValueAt(selectedRow, 0); + ApplicationPane app = _target.getCoordinator().openLiveApplication(appName); + + if(app != null && app.getRoot().getSelectedNode() == null) + { + app.getRoot().setSelectedNode(app.getRoot()); + } + } + } + + }; + + Action showDetails = new AbstractAction("Show details") + { + public void actionPerformed(ActionEvent e) + { + int selectedRow = _applications.getSelectedRow(); + if(selectedRow != -1) + { + String appName = (String)_applications.getValueAt(selectedRow, 0); + _target.showApplicationDetails(appName); + } + } + + }; + + Action removeApplication = new AbstractAction("Remove from registry") + { + public void actionPerformed(ActionEvent e) + { + int selectedRow = _applications.getSelectedRow(); + if(selectedRow != -1) + { + String appName = (String)_applications.getValueAt(selectedRow, 0); + + int confirm = JOptionPane.showConfirmDialog( + _target.getCoordinator().getMainFrame(), + "You are about to remove application '" + appName + "' from the IceGrid registry. " + + "Do you want to proceed?", + "Remove Confirmation", + JOptionPane.YES_NO_OPTION); + + if(confirm == JOptionPane.YES_OPTION) + { + _target.getCoordinator().removeApplicationFromRegistry(appName); + } + } + } + }; + + removeApplication.putValue(Action.ACCELERATOR_KEY, + KeyStroke.getKeyStroke("DELETE")); + + _applications.getActionMap().put("delete", removeApplication); + _applications.getInputMap().put( + KeyStroke.getKeyStroke("DELETE"), "delete"); + + final JPopupMenu appPopup = new JPopupMenu(); + appPopup.add(openDefinition); + appPopup.add(showDetails); + appPopup.addSeparator(); + appPopup.add(removeApplication); + + _applications.addMouseListener(new MouseAdapter() + { + public void mousePressed(MouseEvent e) + { + maybeShowPopup(e); + } + + public void mouseReleased(MouseEvent e) + { + maybeShowPopup(e); + } + + private void maybeShowPopup(MouseEvent e) + { + if (e.isPopupTrigger() && _applications.getSelectedRow() != -1) + { + appPopup.show(_applications, e.getX(), e.getY()); + } + } + }); + + Action deleteObject = new AbstractAction("Remove selected object") { public void actionPerformed(ActionEvent e) @@ -45,6 +144,9 @@ class RegistryEditor extends Editor } } }; + deleteObject.putValue(Action.ACCELERATOR_KEY, + KeyStroke.getKeyStroke("DELETE")); + _objects.getActionMap().put("delete", deleteObject); _objects.getInputMap().put( KeyStroke.getKeyStroke("DELETE"), "delete"); @@ -60,6 +162,9 @@ class RegistryEditor extends Editor } } }; + addObject.putValue(Action.ACCELERATOR_KEY, + KeyStroke.getKeyStroke("INSERT")); + _objects.getActionMap().put("insert", addObject); _objects.getInputMap().put( KeyStroke.getKeyStroke("INSERT"), "insert"); @@ -67,6 +172,35 @@ class RegistryEditor extends Editor _objects.setToolTipText("<html>Well-known objects registered through the Admin interface.<br>" + "Well-known objects registered using Adapter or Replica Group<br>" + "definitions are not displayed here.</html>"); + + + final JPopupMenu objectsPopup = new JPopupMenu(); + objectsPopup.add(addObject); + objectsPopup.addSeparator(); + final JMenuItem deleteObjectMenuItem = objectsPopup.add(deleteObject); + + _objects.addMouseListener(new MouseAdapter() + { + public void mousePressed(MouseEvent e) + { + maybeShowPopup(e); + } + + public void mouseReleased(MouseEvent e) + { + maybeShowPopup(e); + } + + private void maybeShowPopup(MouseEvent e) + { + if (e.isPopupTrigger()) + { + deleteObjectMenuItem.setEnabled(_objects.getSelectedRow() != -1); + objectsPopup.show(_objects, e.getX(), e.getY()); + } + } + }); + Action deleteAdapter = new AbstractAction("Remove selected adapter") { @@ -82,10 +216,37 @@ class RegistryEditor extends Editor } } }; + deleteAdapter.putValue(Action.ACCELERATOR_KEY, + KeyStroke.getKeyStroke("DELETE")); + _adapters.getActionMap().put("delete", deleteAdapter); _adapters.getInputMap().put( KeyStroke.getKeyStroke("DELETE"), "delete"); _adapters.setToolTipText("<html>Object adapters registered at run time.</html>"); + + final JPopupMenu adaptersPopup = new JPopupMenu(); + adaptersPopup.add(deleteAdapter); + + _adapters.addMouseListener(new MouseAdapter() + { + public void mousePressed(MouseEvent e) + { + maybeShowPopup(e); + } + + public void mouseReleased(MouseEvent e) + { + maybeShowPopup(e); + } + + private void maybeShowPopup(MouseEvent e) + { + if (e.isPopupTrigger() && _adapters.getSelectedRow() != -1) + { + adaptersPopup.show(_adapters, e.getX(), e.getY()); + } + } + }); } protected void appendProperties(DefaultFormBuilder builder) @@ -100,7 +261,7 @@ class RegistryEditor extends Editor builder.append(_endpoints, 3); builder.nextLine(); - builder.appendSeparator("Dynamic Well-Known Objects"); + builder.appendSeparator("Deployed Applications"); builder.append(""); builder.nextLine(); builder.append(""); @@ -117,13 +278,36 @@ class RegistryEditor extends Editor builder.nextLine(); builder.append(""); builder.nextRow(-14); - JScrollPane scrollPane = new JScrollPane(_objects); - scrollPane.setToolTipText(_objects.getToolTipText()); + JScrollPane scrollPane = new JScrollPane(_applications); + scrollPane.setToolTipText(_applications.getToolTipText()); builder.add(scrollPane, cc.xywh(builder.getColumn(), builder.getRow(), 3, 14)); builder.nextRow(14); builder.nextLine(); + builder.appendSeparator("Dynamic Well-Known Objects"); + builder.append(""); + builder.nextLine(); + builder.append(""); + builder.nextLine(); + builder.append(""); + builder.nextLine(); + builder.append(""); + builder.nextLine(); + builder.append(""); + builder.nextLine(); + builder.append(""); + builder.nextLine(); + builder.append(""); + builder.nextLine(); + builder.append(""); + builder.nextRow(-14); + scrollPane = new JScrollPane(_objects); + scrollPane.setToolTipText(_objects.getToolTipText()); + builder.add(scrollPane, cc.xywh(builder.getColumn(), builder.getRow(), 3, 14)); + builder.nextRow(14); + builder.nextLine(); + builder.appendSeparator("Dynamic Object Adapters"); builder.append(""); builder.nextLine(); @@ -160,12 +344,14 @@ class RegistryEditor extends Editor _target = root; _hostname.setText(root.getRegistryInfo().hostname); _endpoints.setText(root.getRegistryInfo().endpoints); + _applications.setSortedMap(root.getApplicationMap()); _objects.setObjects(root.getObjects()); _adapters.setAdapters(root.getAdapters()); } private JTextField _hostname = new JTextField(20); private JTextField _endpoints = new JTextField(20); + private TableField _applications = new TableField("Name", "Last Update"); private TableField _objects = new TableField("Proxy", "Type"); private TableField _adapters = new TableField("ID", "Endpoints", "Replica Group"); diff --git a/java/src/IceGridGUI/LiveDeployment/Root.java b/java/src/IceGridGUI/LiveDeployment/Root.java index 55b3949892f..f252dbf1f47 100755 --- a/java/src/IceGridGUI/LiveDeployment/Root.java +++ b/java/src/IceGridGUI/LiveDeployment/Root.java @@ -104,31 +104,56 @@ public class Root extends ListArrayTreeNode public ApplicationDescriptor getApplicationDescriptor(String name) { - return (ApplicationDescriptor)_descriptorMap.get(name); + ApplicationInfo app = (ApplicationInfo)_infoMap.get(name); + if(app == null) + { + return null; + } + else + { + return app.descriptor; + } } public Object[] getApplicationNames() { - return _descriptorMap.keySet().toArray(); + return _infoMap.keySet().toArray(); } public Object[] getPatchableApplicationNames() { java.util.List result = new java.util.ArrayList(); - java.util.Iterator p = _descriptorMap.entrySet().iterator(); + java.util.Iterator p = _infoMap.entrySet().iterator(); while(p.hasNext()) { java.util.Map.Entry entry = (java.util.Map.Entry)p.next(); - ApplicationDescriptor app = (ApplicationDescriptor)entry.getValue(); - if(app.distrib.icepatch.length() > 0) + ApplicationInfo app = (ApplicationInfo)entry.getValue(); + if(app.descriptor.distrib.icepatch.length() > 0) { result.add(entry.getKey()); } } return result.toArray(); } + + public java.util.SortedMap getApplicationMap() + { + java.util.SortedMap r = new java.util.TreeMap(); + + java.util.Iterator p = _infoMap.entrySet().iterator(); + while(p.hasNext()) + { + java.util.Map.Entry entry = (java.util.Map.Entry)p.next(); + + ApplicationInfo app = (ApplicationInfo)entry.getValue(); + + r.put(entry.getKey(), + java.text.DateFormat.getDateTimeInstance().format(new java.util.Date(app.updateTime))); + } + return r; + } public Editor getEditor() @@ -191,7 +216,7 @@ public class Root extends ListArrayTreeNode _objects.clear(); _replicaName = null; - _descriptorMap.clear(); + _infoMap.clear(); _nodes.clear(); _slaves.clear(); _treeModel.nodeStructureChanged(this); @@ -258,13 +283,26 @@ public class Root extends ListArrayTreeNode } } + public void showApplicationDetails(String appName) + { + ApplicationInfo app = (ApplicationInfo)_infoMap.get(appName); + if(app != null) + { + if(_applicationDetailsDialog == null) + { + _applicationDetailsDialog = new ApplicationDetailsDialog(this); + } + + _applicationDetailsDialog.showDialog(app); + } + } // // From the Registry Observer: // public void applicationAdded(ApplicationInfo info) { - _descriptorMap.put(info.descriptor.name, info.descriptor); + _infoMap.put(info.descriptor.name, info); java.util.Iterator p = info.descriptor.nodes.entrySet().iterator(); while(p.hasNext()) @@ -287,7 +325,7 @@ public class Root extends ListArrayTreeNode public void applicationRemoved(String name) { - _descriptorMap.remove(name); + _infoMap.remove(name); java.util.List toRemove = new java.util.LinkedList(); int[] toRemoveIndices = new int[_nodes.size()]; @@ -308,7 +346,13 @@ public class Root extends ListArrayTreeNode public void applicationUpdated(ApplicationUpdateInfo update) { - ApplicationDescriptor appDesc = (ApplicationDescriptor)_descriptorMap.get(update.descriptor.name); + ApplicationInfo app = (ApplicationInfo)_infoMap.get(update.descriptor.name); + + app.updateTime = update.updateTime; + app.updateUser = update.updateUser; + app.revision = update.revision; + + ApplicationDescriptor appDesc = app.descriptor; // // Update various fields of appDesc @@ -879,9 +923,9 @@ public class Root extends ListArrayTreeNode PropertySetDescriptor findNamedPropertySet(String name, String applicationName) { - ApplicationDescriptor descriptor = (ApplicationDescriptor) - _descriptorMap.get(applicationName); - return (PropertySetDescriptor)descriptor.propertySets.get(name); + ApplicationInfo app = (ApplicationInfo) + _infoMap.get(applicationName); + return (PropertySetDescriptor)app.descriptor.propertySets.get(name); } @@ -999,9 +1043,9 @@ public class Root extends ListArrayTreeNode private final java.util.List _slaves = new java.util.LinkedList(); // - // Maps application name to current application descriptor + // Maps application name to current application info // - private final java.util.Map _descriptorMap = new java.util.TreeMap(); + private final java.util.Map _infoMap = new java.util.TreeMap(); // // Map AdapterId => AdapterInfo @@ -1038,6 +1082,8 @@ public class Root extends ListArrayTreeNode int _logMaxReadSize; int _logPeriod; + private ApplicationDetailsDialog _applicationDetailsDialog; + static private RegistryEditor _editor; static private JPopupMenu _popup; static private DefaultTreeCellRenderer _cellRenderer; |