summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xjava/src/IceGridGUI/Coordinator.java76
-rw-r--r--java/src/IceGridGUI/LiveDeployment/ApplicationDetailsDialog.java105
-rwxr-xr-xjava/src/IceGridGUI/LiveDeployment/RegistryEditor.java192
-rwxr-xr-xjava/src/IceGridGUI/LiveDeployment/Root.java74
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;