OptionCommand.java

package org.cyclopsgroup.jmxterm.cmd;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import org.cyclopsgroup.jcli.annotation.Cli;
import org.cyclopsgroup.jcli.annotation.Option;
import org.cyclopsgroup.jmxterm.Command;
import org.cyclopsgroup.jmxterm.Session;
import org.cyclopsgroup.jmxterm.io.VerboseLevel;

/**
 * Command to change/display console options
 *
 * @author <a href="mailto:jiaqi.guo@gmail.com">Jiaqi Guo</a>
 */
@Cli(name = "option", description = "Set options for command session")
public class OptionCommand extends Command {
  private static final List<String> VERBOSE_LEVEL_VALUES;

  static {
    List<String> verboseLevelValues = new ArrayList<String>();
    for (VerboseLevel level : VerboseLevel.values()) {
      verboseLevelValues.add(level.name().toLowerCase());
    }
    VERBOSE_LEVEL_VALUES = Collections.unmodifiableList(verboseLevelValues);
  }

  private String verboseLevel;

  @Override
  public List<String> doSuggestOption(String name) {
    return VERBOSE_LEVEL_VALUES;
  }

  @Override
  public void execute() {
    Session session = getSession();
    if (verboseLevel == null) {
      session.output.printMessage("no change for verbose, verbose = " + session.getVerboseLevel());
    } else {
      VerboseLevel v = VerboseLevel.valueOf(verboseLevel.toUpperCase());
      session.setVerboseLevel(v);
      session.output.printMessage("verbose option is turned to " + v);
    }
  }

  /**
   * @param verbose Verbose level of session
   */
  @Option(
      name = "v",
      longName = "verbose",
      description = "Verbose level(case insensitive): silent|brief|verbose")
  public final void setVerboseLevel(String verbose) {
    this.verboseLevel = verbose;
  }
}