Package org.cyclopsgroup.jmxterm.cmd

Source Code of org.cyclopsgroup.jmxterm.cmd.BeansCommand

package org.cyclopsgroup.jmxterm.cmd;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Set;

import javax.management.MalformedObjectNameException;
import javax.management.ObjectName;

import org.cyclopsgroup.jcli.annotation.Cli;
import org.cyclopsgroup.jcli.annotation.Option;
import org.cyclopsgroup.jmxterm.Command;
import org.cyclopsgroup.jmxterm.Session;

/**
* Command that shows list of beans
*
* @author <a href="mailto:jiaqi.guo@gmail.com">Jiaqi Guo</a>
*/
@Cli( name = "beans", description = "List available beans under a domain or all domains", note = "Without -d option, current select domain is applied. If there's no domain specified, all beans are listed. Example:\n beans\n beans -d java.lang" )
public class BeansCommand
    extends Command
{
    /**
     * Get list of bean names under current domain
     *
     * @param session Current JMX session
     * @param domainName Full domain name
     * @return List of bean names
     * @throws MalformedObjectNameException Input domain name is malformed
     * @throws IOException Communication error
     */
    public static List<String> getBeans( Session session, String domainName )
        throws MalformedObjectNameException, IOException
    {
        ObjectName queryName = null;
        if ( domainName != null )
        {
            queryName = new ObjectName( domainName + ":*" );
        }
        Set<ObjectName> names = session.getConnection().getServerConnection().queryNames( queryName, null );
        List<String> results = new ArrayList<String>( names.size() );
        for ( ObjectName name : names )
        {
            results.add( name.getCanonicalName() );
        }
        Collections.sort( results );
        return results;
    }

    private String domain;

    /**
     * @inheritDoc
     */
    @Override
    public List<String> doSuggestOption( String optionName )
        throws IOException
    {
        if ( optionName.equals( "d" ) )
        {
            return DomainsCommand.getCandidateDomains( getSession() );
        }
        return null;
    }

    /**
     * @inheritDoc
     */
    @Override
    public void execute()
        throws MalformedObjectNameException, IOException
    {
        Session session = getSession();
        String domainName = DomainCommand.getDomainName( domain, session );
        List<String> domains = new ArrayList<String>();
        if ( domainName == null )
        {
            domains.addAll( DomainsCommand.getCandidateDomains( session ) );
        }
        else
        {
            domains.add( domainName );
        }
        for ( String d : domains )
        {
            session.output.printMessage( "domain = " + d + ":" );
            for ( String bean : getBeans( session, d ) )
            {
                session.output.println( bean );
            }
        }
    }

    /**
     * @param domain Domain under which beans are listed
     */
    @Option( name = "d", longName = "domain", displayName = "domain", description = "Name of domain under which beans are listed" )
    public final void setDomain( String domain )
    {
        this.domain = domain;
    }
}
TOP

Related Classes of org.cyclopsgroup.jmxterm.cmd.BeansCommand

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.