package org.cyclopsgroup.jmxterm.cmd;
import java.io.IOException;
import java.util.HashSet;
import java.util.List;
import org.apache.commons.lang.Validate;
import org.cyclopsgroup.jcli.annotation.Argument;
import org.cyclopsgroup.jcli.annotation.Cli;
import org.cyclopsgroup.jmxterm.Command;
import org.cyclopsgroup.jmxterm.Session;
import org.cyclopsgroup.jmxterm.SyntaxUtils;
/**
* Get or set current selected domain
*
* @author <a href="mailto:jiaqi.guo@gmail.com">Jiaqi Guo</a>
*/
@Cli( name = "domain", description = "Display or set current selected domain. ", note = "With a parameter, parameter defined domain is selected, otherwise it displays current selected domain."
+ " eg. domain java.lang" )
public class DomainCommand
extends Command
{
/**
* Get domain name from given domain expression
*
* @param domain Domain expression, which can be a name or NULL
* @param session Current JMX session
* @return String name of domain coming from given parameter or current session
* @throws IOException
*/
static String getDomainName( String domain, Session session )
throws IOException
{
Validate.notNull( session, "Session can't be NULL" );
Validate.isTrue( session.getConnection() != null, "Session isn't opened" );
if ( domain == null )
{
return session.getDomain();
}
if ( SyntaxUtils.isNull( domain ) )
{
return null;
}
HashSet<String> domains = new HashSet<String>( DomainsCommand.getCandidateDomains( session ) );
if ( !domains.contains( domain ) )
{
throw new IllegalArgumentException( "Domain " + domain + " doesn't exist, check your spelling" );
}
return domain;
}
private String domain;
/**
* @inheritDoc
*/
@Override
public List<String> doSuggestArgument()
throws IOException
{
return DomainsCommand.getCandidateDomains( getSession() );
}
/**
* @inheritDoc
*/
@Override
public void execute()
throws IOException
{
Session session = getSession();
if ( domain == null )
{
if ( session.getDomain() == null )
{
session.output.printMessage( "domain is not set" );
session.output.println( SyntaxUtils.NULL );
}
else
{
session.output.printMessage( "domain = " + session.getDomain() );
session.output.println( session.getDomain() );
}
return;
}
String domainName = getDomainName( domain, session );
if ( domainName == null )
{
session.unsetDomain();
session.output.printMessage( "domain is unset" );
}
else
{
session.setDomain( domainName );
session.output.printMessage( "domain is set to " + session.getDomain() );
}
}
/**
* @param domain Domain to select
*/
@Argument( displayName = "domain", description = "Name of domain to set" )
public final void setDomain( String domain )
{
this.domain = domain;
}
}