0N/A/*
0N/A * Copyright (c) 2004, 2006, Oracle and/or its affiliates. All rights reserved.
0N/A * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
0N/A *
0N/A * This code is free software; you can redistribute it and/or modify it
2362N/A * under the terms of the GNU General Public License version 2 only, as
0N/A * published by the Free Software Foundation. Oracle designates this
2362N/A * particular file as subject to the "Classpath" exception as provided
0N/A * by Oracle in the LICENSE file that accompanied this code.
0N/A *
0N/A * This code is distributed in the hope that it will be useful, but WITHOUT
0N/A * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
0N/A * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
0N/A * version 2 for more details (a copy is included in the LICENSE file that
0N/A * accompanied this code).
0N/A *
0N/A * You should have received a copy of the GNU General Public License version
0N/A * 2 along with this work; if not, write to the Free Software Foundation,
0N/A * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
2362N/A *
2362N/A * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
2362N/A * or visit www.oracle.com if you need additional information or have any
0N/A * questions.
0N/A */
0N/A
0N/Apackage sun.tools.jconsole;
0N/A
0N/Aimport java.awt.*;
0N/Aimport java.awt.event.*;
0N/Aimport java.util.List;
0N/Aimport java.util.TreeSet;
0N/Aimport java.util.Comparator;
3984N/A
0N/Aimport javax.swing.*;
0N/Aimport javax.swing.border.*;
0N/A
0N/Aimport javax.management.MBeanServerConnection;
0N/Aimport javax.management.ObjectName;
0N/Aimport javax.management.InstanceAlreadyExistsException;
0N/Aimport javax.management.InstanceNotFoundException;
0N/A
0N/A
0N/Aimport static sun.tools.jconsole.Utilities.*;
0N/A
0N/A@SuppressWarnings("serial")
0N/Apublic class CreateMBeanDialog extends InternalDialog
0N/A implements ActionListener {
0N/A JConsole jConsole;
0N/A JComboBox<ProxyClient> connections;
0N/A JButton createMBeanButton, unregisterMBeanButton, cancelButton;
0N/A
0N/A private static final String HOTSPOT_MBEAN =
0N/A "sun.management.HotspotInternal";
0N/A private static final String HOTSPOT_MBEAN_OBJECTNAME =
0N/A "sun.management:type=HotspotInternal";
0N/A public CreateMBeanDialog(JConsole jConsole) {
0N/A super(jConsole, "JConsole: Hotspot MBeans", true);
0N/A
0N/A this.jConsole = jConsole;
0N/A setAccessibleDescription(this,
0N/A Messages.HOTSPOT_MBEANS_DIALOG_ACCESSIBLE_DESCRIPTION);
0N/A Container cp = getContentPane();
((JComponent)cp).setBorder(new EmptyBorder(10, 10, 4, 10));
JPanel centerPanel = new JPanel(new VariableGridLayout(0,
1,
4,
4,
false,
true));
cp.add(centerPanel, BorderLayout.CENTER);
connections = new JComboBox<ProxyClient>();
updateConnections();
centerPanel.add(new LabeledComponent(Resources.format(Messages.MANAGE_HOTSPOT_MBEANS_IN_COLON_),
connections));
JPanel bottomPanel = new JPanel(new BorderLayout());
cp.add(bottomPanel, BorderLayout.SOUTH);
JPanel buttonPanel = new JPanel();
bottomPanel.add(buttonPanel, BorderLayout.NORTH);
buttonPanel.add(createMBeanButton =
new JButton(Messages.CREATE));
buttonPanel.add(unregisterMBeanButton =
new JButton(Messages.UNREGISTER));
buttonPanel.add(cancelButton =
new JButton(Messages.CANCEL));
statusBar = new JLabel(" ", JLabel.CENTER);
bottomPanel.add(statusBar, BorderLayout.SOUTH);
createMBeanButton.addActionListener(this);
unregisterMBeanButton.addActionListener(this);
cancelButton.addActionListener(this);
LabeledComponent.layout(centerPanel);
pack();
setLocationRelativeTo(jConsole);
}
private void updateConnections() {
List<VMInternalFrame> frames = jConsole.getInternalFrames();
TreeSet<ProxyClient> data =
new TreeSet<ProxyClient>(new Comparator<ProxyClient>() {
public int compare(ProxyClient o1, ProxyClient o2) {
// TODO: Need to understand how this method being used?
return o1.connectionName().compareTo(o2.connectionName());
}
});
if (frames.size() == 0) {
JComponent cp = (JComponent)jConsole.getContentPane();
Component comp = ((BorderLayout)cp.getLayout()).
getLayoutComponent(BorderLayout.CENTER);
if (comp instanceof VMPanel) {
VMPanel vmpanel = (VMPanel) comp;
ProxyClient client = vmpanel.getProxyClient(false);
if (client != null && client.hasPlatformMXBeans()) {
data.add(client);
}
}
} else {
for (VMInternalFrame f : frames) {
ProxyClient client = f.getVMPanel().getProxyClient(false);
if (client != null && client.hasPlatformMXBeans()) {
data.add(client);
}
}
}
connections.invalidate();
connections.setModel(new DefaultComboBoxModel<ProxyClient>
(data.toArray(new ProxyClient[data.size()])));
connections.validate();
}
public void actionPerformed(final ActionEvent ev) {
setVisible(false);
statusBar.setText("");
if (ev.getSource() != cancelButton) {
new Thread("CreateMBeanDialog.actionPerformed") {
public void run() {
try {
Object c = connections.getSelectedItem();
if(c == null) return;
if(ev.getSource() == createMBeanButton) {
MBeanServerConnection connection =
((ProxyClient) c).
getMBeanServerConnection();
connection.createMBean(HOTSPOT_MBEAN, null);
} else {
if(ev.getSource() == unregisterMBeanButton) {
MBeanServerConnection connection =
((ProxyClient) c).
getMBeanServerConnection();
connection.unregisterMBean(new
ObjectName(HOTSPOT_MBEAN_OBJECTNAME));
}
}
return;
} catch(InstanceAlreadyExistsException e) {
statusBar.setText(Messages.ERROR_COLON_MBEANS_ALREADY_EXIST);
} catch(InstanceNotFoundException e) {
statusBar.setText(Messages.ERROR_COLON_MBEANS_DO_NOT_EXIST);
} catch(Exception e) {
statusBar.setText(e.toString());
}
setVisible(true);
}
}.start();
}
}
public void setVisible(boolean b) {
boolean wasVisible = isVisible();
if(b) {
setLocationRelativeTo(jConsole);
invalidate();
updateConnections();
validate();
repaint();
}
super.setVisible(b);
if (b && !wasVisible) {
// Need to delay this to make focus stick
SwingUtilities.invokeLater(new Runnable() {
public void run() {
connections.requestFocus();
}
});
}
}
}