Package org.cyclopsgroup.jmxterm

Source Code of org.cyclopsgroup.jmxterm.Session

package org.cyclopsgroup.jmxterm;

import java.io.IOException;
import java.util.Map;

import javax.management.remote.JMXServiceURL;

import org.apache.commons.lang.Validate;
import org.cyclopsgroup.jmxterm.io.CommandInput;
import org.cyclopsgroup.jmxterm.io.CommandOutput;
import org.cyclopsgroup.jmxterm.io.UnimplementedCommandInput;
import org.cyclopsgroup.jmxterm.io.VerboseCommandOutput;
import org.cyclopsgroup.jmxterm.io.VerboseCommandOutputConfig;
import org.cyclopsgroup.jmxterm.io.VerboseLevel;

/**
* JMX communication context. This class exists for the whole lifecycle of a command execution. It is NOT thread safe.
* The caller(CommandCenter) makes sure all calls are synchronized.
*
* @author <a href="mailto:jiaqi.guo@gmail.com">Jiaqi Guo</a>
*/
public abstract class Session
    implements VerboseCommandOutputConfig
{
    private String bean;

    private boolean closed;

    private String domain;

    private final CommandInput input;

    /**
     * Public output field. TODO Reevaluate if this field should be public or exposed by a getter method
     */
    public final CommandOutput output;

    private final JavaProcessManager processManager;
   
    private VerboseLevel verboseLevel = VerboseLevel.BRIEF;

    /**
     * @param output Output destination
     * @param input Command line input
     * @param processManager Process manager
     */
    protected Session( CommandOutput output, CommandInput input, JavaProcessManager processManager )
    {
        Validate.notNull( output, "Output can't be NULL" );
        Validate.notNull( processManager, "Process manager can't be NULL" );
        this.output = new VerboseCommandOutput( output, this );
        this.input = input == null ? new UnimplementedCommandInput() : input;
        this.processManager = processManager;
    }

    /**
     * Close JMX terminal console. Supposedly, process terminates after this call
     */
    public void close()
    {
        if ( closed )
        {
            return;
        }
        closed = true;
    }

    /**
     * Connect to MBean server
     *
     * @param url URL to connect
     * @param env Environment variables
     * @throws IOException
     */
    public abstract void connect( JMXServiceURL url, Map<String, Object> env )
        throws IOException;

    /**
     * Close JMX connector
     *
     * @throws IOException Thrown when connection can't be closed
     */
    public abstract void disconnect()
        throws IOException;

    /**
     * @return Current selected bean
     */
    public final String getBean()
    {
        return bean;
    }

    /**
     * @return Current open JMX server connection
     */
    public abstract Connection getConnection();

    /**
     * @return Current domain
     */
    public final String getDomain()
    {
        return domain;
    }

    /**
     * @return General input of command lines, which could be interactive environment, a file or piped input
     */
    public final CommandInput getInput()
    {
        return input;
    }

    /**
     * @return Java process manager to load processes
     */
    public JavaProcessManager getProcessManager()
    {
        return processManager;
    }

    /**
     * @inheritDoc
     */
    public final VerboseLevel getVerboseLevel()
    {
        return verboseLevel;
    }

    /**
     * @return True if {@link #close()} has been called
     */
    public final boolean isClosed()
    {
        return closed;
    }

    /**
     * @return True if there's a open connection to JMX server
     */
    public abstract boolean isConnected();

    /**
     * Set current selected bean
     *
     * @param bean Bean to select
     */
    public final void setBean( String bean )
    {
        this.bean = bean;
    }

    /**
     * Set current selected domain
     *
     * @param domain Domain to select
     */
    public final void setDomain( String domain )
    {
        Validate.notNull( domain, "domain can't be NULL" );
        this.domain = domain;
    }

    /**
     * @param verboseLevel Level of verbose
     */
    public final void setVerboseLevel( VerboseLevel verboseLevel )
    {
        Validate.notNull( verboseLevel, "Verbose level can't be NULL" );
        this.verboseLevel = verboseLevel;
    }

    /**
     * Set domain and bean to be NULL
     */
    public void unsetDomain()
    {
        bean = null;
        domain = null;
    }
}
TOP

Related Classes of org.cyclopsgroup.jmxterm.Session

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.