package org.cyclopsgroup.jmxterm.boot; import java.io.File; import org.apache.commons.lang.Validate; import org.cyclopsgroup.jcli.annotation.Cli; import org.cyclopsgroup.jcli.annotation.Option; /** * Options for main class * * @author <a href="mailto:jiaqi.guo@gmail.com">Jiaqi Guo</a> */ @Cli( name = "jmxterm", description = "Main executable of JMX terminal CLI tool", note = "Without any option, this command opens an interactive command line based console. With a given input file, commands in file will be executed and process ends after file is processed" ) public class CliMainOptions { /** * Constant <code>stderr</code> that identifies standard error output */ public static final String STDERR = "stderr"; /** * Constant <code>stdin</code> that identifies standard input */ public static final String STDIN = "stdin"; /** * Constant <code>stdout</code> that identifies standard output */ public static final String STDOUT = "stdout"; private boolean exitOnFailure; private boolean help; private String input = STDIN; private boolean nonInteractive; private boolean appendToOutput = false; private String output = STDOUT; private String password; private String url; private String user; private String verboseLevel; /** * @return #setInput(String) */ public final String getInput() { return input; } /** * @return #setOutput(String) */ public final String getOutput() { return output; } /** * @return Password for user/password authentication */ public final String getPassword() { return password; } /** * @return #setUrl(String) */ public final String getUrl() { return url; } /** * @return User name for user/password authentication */ public final String getUser() { return user; } /** * @return Verbose option */ public final String getVerboseLevel() { return verboseLevel; } /** * @return True if terminal exits on any failure */ public final boolean isExitOnFailure() { return exitOnFailure; } /** * @return True if terminal exits on any failure */ public final boolean isAppendToOutput() { return appendToOutput; } /** * @return {@link #setHelp(boolean)} */ public final boolean isHelp() { return help; } /** * @return True if CLI runs without user interaction, such as piped input */ public final boolean isNonInteractive() { return nonInteractive; } /** * @param exitOnFailure True if terminal exits on any failure */ @Option( name = "e", longName = "exitonfailure", description = "With this flag, terminal exits for any Exception" ) public final void setExitOnFailure( boolean exitOnFailure ) { this.exitOnFailure = exitOnFailure; } /** * @param help True to turn on <code>help</code> flag */ @Option( name = "h", longName = "help", description = "Show usage of this command line" ) public final void setHelp( boolean help ) { this.help = help; } /** * @param file Input script path or <code>stdin</code> as default value for console input */ @Option( name = "i", longName = "input", description = "Input script file. There can only be one input file. \"stdin\" is the default value which means console input" ) public final void setInput( String file ) { Validate.notNull( file, "Input file can't be NULL" ); Validate.isTrue( new File( file ).isFile(), "File " + file + " doesn't exist" ); this.input = file; } /** * @param nonInteractive True if CLI runs without user interaction, such as piped input */ @Option( name = "n", longName = "noninteract", description = "Non interactive mode. Use this mode if input doesn't come from human or jmxterm is embedded" ) public final void setNonInteractive( boolean nonInteractive ) { this.nonInteractive = nonInteractive; } /** * @param outputFile It can be a file or {@link #STDERR} or {@link #STDERR} */ @Option( name = "o", longName = "output", description = "Output file, stdout or stderr. Default value is stdout" ) public final void setOutput( String outputFile ) { Validate.notNull( outputFile, "Output file can't be NULL" ); this.output = outputFile; } /** * @param password Password for user/password authentication */ @Option( name = "p", longName = "password", description = "Password for user/password authentication" ) public final void setPassword( String password ) { Validate.notNull( password, "Password can't be NULL" ); this.password = password; } /** * @param url MBean server URL */ @Option( name = "l", longName = "url", description = "Location of MBean service. It can be <host>:<port> or full service URL." ) public final void setUrl( String url ) { Validate.notNull( url, "URL can't be NULL" ); this.url = url; } /** * @param user User name for user/password authentication */ @Option( name = "u", longName = "user", description = "User name for user/password authentication" ) public final void setUser( String user ) { Validate.notNull( user, "User can't be NULL" ); this.user = user; } /** * @param verboseLevel Verbose level */ @Option( name = "v", longName = "verbose", description = "Verbose level, could be silent|brief|verbose. Default value is brief" ) public final void setVerboseLevel( String verboseLevel ) { this.verboseLevel = verboseLevel; } /** * @param appendToOutput True if outputfile is preserved */ @Option( name = "a", longName = "appendtooutput", description = "With this flag, the outputfile is preserved and content is appended to it" ) public final void setAppendToOutput( boolean appendToOutput ) { this.appendToOutput = appendToOutput; } }