Package com.google.jstestdriver.config

Source Code of com.google.jstestdriver.config.CmdLineFlags

package com.google.jstestdriver.config;

import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Lists;
import com.google.jstestdriver.Plugin;
import com.google.jstestdriver.model.BasePaths;
import com.google.jstestdriver.runner.RunnerMode;

import java.io.File;
import java.io.IOException;
import java.io.PrintStream;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;

/**
* A collection of CmdLinFlags with convenience methods for the preparsable
* flags: config, plugins, and basePath. It is used to allow the initialization
* system to have plugins that draw from the flags and the configuration.
*
* @author corbinrsmith@gmail.com (Cory Smith)
*
*/
public class CmdLineFlags {
  private static final Map<String, CmdLineFlagMetaData> PREPARSE_FLAGS =
    ImmutableMap.<String, CmdLineFlagMetaData>builder()
      .put(
          "--plugins",
          new CmdLineFlagMetaData("--plugins", "VAL[,VAL]",
              "Comma separated list of paths to plugin jars."))
      .put("--config", new CmdLineFlagMetaData("--config", "VAL", "Path to configuration file."))
      .put(
          "--basePath",
          new CmdLineFlagMetaData("--basePath", "VAL[,VAL]", "Override the base path(s) in the "
              + "configuration file. Defaults to the parent directory of the configuration file."))
      .put(
          "--runnerMode",
          new CmdLineFlagMetaData("--runnerMode", "VAL", "The configuration of the "
              + "logging and frequency that the runner reports actions: DEBUG, "
              + "DEBUG_NO_TRACE, DEBUG_OBSERVE, PROFILE, QUIET (default), INFO")).build();
  private final List<CmdLineFlag> flags;

  public CmdLineFlags(List<CmdLineFlag> flags) {
    this.flags = flags;
  }

  public List<Plugin> getPlugins() throws IOException {
    for (CmdLineFlag cmdLineFlag : flags) {
      if ("--plugins".equals(cmdLineFlag.flag)) {
        List<Plugin> plugins = Lists.newLinkedList();
        for (String pluginPath : cmdLineFlag.valuesList()) {
          plugins.add(new Plugin(null, pluginPath, null,
              Collections.<String> emptyList()));
        }
        return plugins;
      }
    }
    return Collections.<Plugin> emptyList();
  }

  private String getConfigPathNoDefault() {
    for (CmdLineFlag cmdLineFlag : flags) {
      if ("--config".equals(cmdLineFlag.flag)) {
        return cmdLineFlag.safeValue();
      }
    }
    return null;
  }

  private BasePaths getBasePathNoDefault() throws IOException {
    for (CmdLineFlag cmdLineFlag : flags) {
      if ("--basePath".equals(cmdLineFlag.flag)) {
        BasePaths paths = new BasePaths();
        for (String stringPath : cmdLineFlag.valuesList()) {
          paths.add(new File(stringPath).getCanonicalFile());
        }
        return paths;
      }
    }
    return null;
  }

  public ConfigurationSource getConfigurationSource() throws IOException {
    String configPath = getConfigPathNoDefault();
    if (configPath != null) {
      return new UserConfigurationSource(new File(configPath).getAbsoluteFile());
    }
    return new DefaultConfigurationSource();
  }

  public BasePaths getBasePath() throws IOException {
    final BasePaths basePaths = getBasePathNoDefault();
    if (basePaths != null) {
      return basePaths;
    }
    return new BasePaths(getConfigurationSource().getParentFile());
  }

  public RunnerMode getRunnerMode() {
    for (CmdLineFlag cmdLineFlag : flags) {
      if ("--runnerMode".equals(cmdLineFlag.flag)) {
        return RunnerMode.valueOf(cmdLineFlag.safeValue());
      }
    }
    return RunnerMode.QUIET;
  }

  public String[] getUnusedFlagsAsArgs() {
    final ArrayList<String> args = Lists.newArrayList();
    for (CmdLineFlag flag : flags) {
      if (!PREPARSE_FLAGS.containsKey(flag.flag)) {
        flag.addToArgs(args);
      }
    }
    return args.toArray(new String[args.size()]);
  }

  public static void printUsage(PrintStream out) {
    for (CmdLineFlagMetaData meta : PREPARSE_FLAGS.values()) {
      try {
        meta.printUsage(out);
        out.write('\n');
      } catch (IOException e) {
        e.printStackTrace();
      }
    }
  }
}
TOP

Related Classes of com.google.jstestdriver.config.CmdLineFlags

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.