Package com.arjuna.ats.tools.jmxbrowser

Source Code of com.arjuna.ats.tools.jmxbrowser.JMXBrowserFrame$MBeanWrapper

/*
* JBoss, Home of Professional Open Source
* Copyright 2006, Red Hat Middleware LLC, and individual contributors
* as indicated by the @author tags.
* See the copyright.txt in the distribution for a
* full listing of individual contributors.
* This copyrighted material is made available to anyone wishing to use,
* modify, copy, or redistribute it subject to the terms and conditions
* of the GNU Lesser General Public License, v. 2.1.
* This program is distributed in the hope that it will be useful, but WITHOUT A
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
* PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more details.
* You should have received a copy of the GNU Lesser General Public License,
* v.2.1 along with this distribution; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
* MA  02110-1301, USA.
*
* (C) 2005-2006,
* @author JBoss Inc.
*/
/*
* Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003
*
* Arjuna Technologies Ltd.
* Newcastle upon Tyne,
* Tyne and Wear,
* UK.
*
* $Id: JMXBrowserFrame.java 2342 2006-03-30 13:06:17Z  $
*/
package com.arjuna.ats.tools.jmxbrowser;

import com.arjuna.ats.tools.toolsframework.iconpanel.IconPanel;
import com.arjuna.ats.tools.toolsframework.iconpanel.IconPanelEntry;
import com.arjuna.ats.tools.toolsframework.iconpanel.IconSelectionListener;
import com.arjuna.ats.tools.toolsframework.iconpanel.IconImage;
import com.arjuna.ats.tools.jmxbrowser.panels.MBeanDetailsPanel;
import com.arjuna.ats.tools.jmxbrowser.panels.MBeanDetailsSupplier;
import com.arjuna.ats.tools.jmxbrowser.panels.MBeanDomainGroup;
import com.arjuna.ats.tsmx.TransactionServiceMX;
import com.arjuna.ats.tsmx.agent.exceptions.AgentNotFoundException;

import javax.swing.*;
import javax.management.ObjectName;
import javax.management.MBeanInfo;
import java.awt.*;
import java.awt.event.ComponentAdapter;
import java.awt.event.ComponentEvent;
import java.util.Set;
import java.util.Iterator;
import java.util.Hashtable;

public class JMXBrowserFrame extends JInternalFrame implements MBeanDetailsSupplier, IconSelectionListener
{
  private final static String JMX_BROWSER_FRAME_TITLE = "JMX Browser";
  private final static String MBEAN_ICON_IMAGE_FILENAME_ATTRIBUTE = "IconFilename";
  private final static String DEFAULT_ICON_FILENAME = "mbean-icon.gif";

  private JPanel        _mbeanPanel;
  private MBeanDetailsPanel   _detailsPanel;
    private Hashtable      _domainPanels = new Hashtable();
  private IconPanelEntry    _selectedIcon = null;

  public JMXBrowserFrame()
  {
    super( JMX_BROWSER_FRAME_TITLE, true, true, true, true );
    /** Create JMX layer **/
    TransactionServiceMX.getTransactionServiceMX();

    /** Setup frame **/
    GridBagLayout gbl = new GridBagLayout();
    GridBagConstraints gbc = new GridBagConstraints();
    this.getContentPane().setBackground(Color.white);
    this.getContentPane().setLayout(gbl);

      _mbeanPanel = new JPanel();
    _mbeanPanel.setLayout(new BoxLayout(_mbeanPanel, BoxLayout.Y_AXIS));
    _mbeanPanel.setBackground(Color.white);
    gbc.gridx = 1;
    gbc.gridy = 0;
    gbc.weightx = 1.0;
    gbc.weighty = 1.0;
    gbc.fill = GridBagConstraints.BOTH;
    JScrollPane scroller = new JScrollPane(_mbeanPanel,JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
    gbl.setConstraints(scroller, gbc);
    this.getContentPane().add(scroller);

    _detailsPanel = new MBeanDetailsPanel(this);
    gbc.gridx = 0;
    gbc.gridy = 0;
    gbc.fill = GridBagConstraints.BOTH;
    gbc.weightx = 0.1;
    gbc.weighty = 1.0;
    gbl.setConstraints(_detailsPanel, gbc);
    this.getContentPane().add(_detailsPanel);

    /** Create the JMX MBean icons **/
    createIcons();

    pack();
    setVisible(true);

    setSize(400,300);
  }

  private void createIcons()
  {
    Set mbeanNames = null;

    this.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));

    try
    {
      mbeanNames = TransactionServiceMX.getTransactionServiceMX().getAgentInterface().getAgent().queryNames(null, null);
    }
    catch (AgentNotFoundException e)
    {
      JOptionPane.showMessageDialog( this, "Failed to retrieve JMX Agent reference", "Error", JOptionPane.ERROR_MESSAGE );
      e.printStackTrace();
    }

    Iterator i = mbeanNames.iterator();

    while ( i.hasNext() )
    {
      ObjectName mbeanName = ((ObjectName)i.next());

      addMbean(mbeanName);
    }

    layoutAllGroups();

    _detailsPanel.updateAll();

    this.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
  }

  private String getIconFilename(ObjectName on)
  {
    String iconFilename = DEFAULT_ICON_FILENAME;

    try
    {
      iconFilename = (String)TransactionServiceMX.getTransactionServiceMX().getAgentInterface().getAgent().getAttribute(on, MBEAN_ICON_IMAGE_FILENAME_ATTRIBUTE);
    }
    catch (Exception e)
    {
      // Ignore
    }

    if ( iconFilename == null )
    {
      iconFilename = DEFAULT_ICON_FILENAME;
    }

    return iconFilename;
  }

  private void addMbean(ObjectName on)
  {
    MBeanDomainGroup domainGroup = (MBeanDomainGroup)_domainPanels.get( on.getDomain() );

    if ( domainGroup == null )
    {
      domainGroup = new MBeanDomainGroup( on.getDomain() );
      _domainPanels.put( on.getDomain(), domainGroup);
      _mbeanPanel.add( domainGroup );
    }

    IconPanelEntry ipe = domainGroup.getIconPanel().addIcon( new IconPanelEntry( new MBeanWrapper( on ), getIconFilename( on ) ) );
    ipe.addSelectionListener(this);
  }

  private void layoutAllGroups()
  {
    Component[] c = _mbeanPanel.getComponents();
        int y = 0;

    for (int count=0;count<c.length;count++)
    {
          MBeanDomainGroup group = (MBeanDomainGroup)c[count];

      group.getIconPanel().layoutContainer();
    }
  }

  public int getNumberOfMBeans()
  {
    int beanCount = 0;

    if ( _domainPanels != null )
    {
      Iterator domainPanelIterator = _domainPanels.values().iterator();

      while ( domainPanelIterator.hasNext() )
      {
        MBeanDomainGroup group = (MBeanDomainGroup)domainPanelIterator.next();
        beanCount += group.getIconPanel().getIconCount();
      }
    }

    return beanCount;
  }

  public IconImage getSelectedMBeanIconImage()
  {
    if ( _selectedIcon != null )
    {
      return _selectedIcon.getIconImage();
    }

    return null;
  }

  public ObjectName getSelectedMBeanName()
  {
    if ( _selectedIcon != null )
    {
      MBeanWrapper selected = (MBeanWrapper)(_selectedIcon.getData());

      return selected.getObjectName();
    }

    return null;
  }

  public MBeanInfo getSelectedMBean()
  {
    MBeanInfo mbeanInfo = null;
    if ( _selectedIcon != null )
    {
      MBeanWrapper selected = (MBeanWrapper)(_selectedIcon.getData());

      try
      {
        mbeanInfo = TransactionServiceMX.getTransactionServiceMX().getAgentInterface().getAgent().getMBeanInfo(selected.getObjectName());
      }
      catch (Exception e)
      {
        e.printStackTrace(System.err);
        JOptionPane.showMessageDialog(this,"Failed to retrieve mbean information","Error",JOptionPane.ERROR_MESSAGE);
      }
    }

    return mbeanInfo;
  }

  public void iconSelected(IconPanelEntry icon, boolean selected)
  {
    if ( selected )
    {
      Iterator domainPanelIterator = _domainPanels.values().iterator();

      while ( domainPanelIterator.hasNext() )
      {
        MBeanDomainGroup group = (MBeanDomainGroup) domainPanelIterator.next();

        group.clearSelection();
      }

      icon.setSelected(true);
      _selectedIcon = icon;
    }
    else
    {
      _selectedIcon = null;
    }

    _detailsPanel.updateMBeanSpecific();
  }

  private class MBeanWrapper
  {
    private ObjectName _objName;

    public MBeanWrapper(ObjectName objName)
    {
      _objName = objName;
    }

    public ObjectName getObjectName()
    {
      return _objName;
    }

    public String toString()
    {
      return _objName.getKeyPropertyListString();
    }
  }
}
TOP

Related Classes of com.arjuna.ats.tools.jmxbrowser.JMXBrowserFrame$MBeanWrapper

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.