Package com.adaptrex.tools.command

Source Code of com.adaptrex.tools.command.CommandService

package com.adaptrex.tools.command;

import static com.adaptrex.tools.Tools.CR;

import java.io.File;
import java.io.IOException;
import java.util.List;

import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.CommandLineParser;
import org.apache.commons.cli.GnuParser;
import org.apache.commons.cli.Option;
import org.apache.commons.cli.Options;
import org.apache.commons.cli.ParseException;
import org.apache.commons.cli.UnrecognizedOptionException;
import org.apache.commons.lang3.StringUtils;

import com.adaptrex.tools.Tools;
import com.adaptrex.tools.environment.IEnvironmentService;
import com.adaptrex.tools.framework.javascript.IDownloadService;
import com.adaptrex.tools.log.ILogService;
import com.adaptrex.tools.log.Log;
import com.adaptrex.tools.webapp.IWebappService;
import com.adaptrex.tools.webapp.Webapp;
import com.google.common.base.Strings;
import com.google.inject.Inject;
import com.google.inject.Singleton;

@Singleton
public class CommandService implements ICommandService {

  private IEnvironmentService environmentService;
  private ILogService logService;
 
  private String target;
  private String[] args;
 
  private Options options;
  private CommandLineParser parser;
  private CommandLine cl;
 
  @Inject
  public CommandService(IEnvironmentService environmentService, IDownloadService downloadService,
      IWebappService webappService, ILogService logService) {
    this.environmentService = environmentService;
    this.logService = logService;
  }
 
  public boolean initialize(String verb, String target, String[] args) throws IOException {
    this.target = target;
    this.args = args;
    this.options = new Options();
    this.parser = new GnuParser();
   
    boolean suppressInitError =
        verb.equals("install") ||
        (verb.equals("configure") && target.equals("environment"));

    boolean goodEnv = environmentService.initializeEnvironment(suppressInitError);
   
    printLog();
    return goodEnv;
  }
 
  @Override
  public String getTarget() {
    return this.target;
  }
 
  @Override
  public String[] getArgs() {
    return this.args;
  }
 
  @Override
  public CommandLineParser getParser() {
    return this.parser;
  }
 
  @Override
  public Options getOptions() {
    return this.options;
  }
 
 
  /*
   * Parse commands
   */
  public CommandLine parseCommands(String usage) throws ParseException {
    try {
      this.cl = parser.parse(options, args);
      return this.cl;
    } catch (UnrecognizedOptionException e) {
      throw new AdaptrexInvalidOptionException(usage, options, e.getOption());
    }
  }
 
  /*
   * Add webapp options
   */
  public void addWebappOptions() {
    Option p = new Option("p", "path", true, "The full system path to the webapp");
    p.setArgName("path");
    options.addOption(p);
  }
 
  /*
   * Add framework options
   */
  public void addFrameworkOptions() {
    Option a = new Option("a", "adaptrex-js", true,
        "Set the AdaptrexJS folder for this webapp, if the environment contains only one " +
        "AdaptrexJS folder, it will be automatically selected");
    a.setArgName("adaptrex-js");
    a.setOptionalArg(true);
    options.addOption(a);
   
    Option e = new Option("e", "extjs", true,
        "Set the ExtJS folder for this webapp, if the environment contains only one " +
        "ExtJS folder, it will be automatically selected");
    e.setArgName("extjs");
    e.setOptionalArg(true);
    options.addOption(e);
   
    Option s = new Option("s", "sencha-touch", true,
        "Set the Sencha Touch folder for this webapp, if the environment contains only one " +
        "Sencha Touch folder, it will be automatically selected");
    s.setArgName("sencha-touch");
    s.setOptionalArg(true);
    options.addOption(s);
  }
 
 
  public Webapp getWebapp() {
    Webapp webapp = null;
   
    if (cl.hasOption("p")) {
      String path = cl.getOptionValue("p");
      if (!path.contains(Tools.SLASH)){
        File curDirectory = new File (".");
        String curPath = curDirectory.getAbsolutePath();
        if (curPath.endsWith(".")) curPath = curPath.substring(0, curPath.length()-1);
        if (!curPath.endsWith(Tools.SLASH)) curPath += "/";
        path = curPath + path;
      }
      if (path.endsWith(Tools.SLASH)) path = path.substring(0, path.length()-1);
      webapp = environmentService.getWebapp(path, true);
     
    } else {
      File directory = new File (".");
      String path = directory.getAbsolutePath().replace(".", "");
      if (path.endsWith(Tools.SLASH)) path = path.substring(0, path.length()-1);
      webapp = environmentService.getWebapp(path, true);
     
      if (webapp == null) {
        path = path.replace(Tools.SLASH + "src" + Tools.SLASH + "main" + Tools.SLASH + "webapp", "");
        webapp = environmentService.getWebapp(path, true);
      }
    }
   
    printLog();
    return webapp;
  }
 
  public void requireOptions(String usage, String... requiredOptions)
      throws AdaptrexCommandMissingOptionException {
    for (String o : requiredOptions) {
      if (!cl.hasOption(o))
        throw new AdaptrexCommandMissingOptionException(usage, options);
    }
  }
 
  public void requireOneOption(String usage, String... requiredOptions)
      throws AdaptrexCommandMissingOptionException {
    for (String o : requiredOptions) {
      if (cl.hasOption(o)) return;
    }
    throw new AdaptrexCommandMissingOptionException(usage, options);
  }
 
 
  /*
   * Print environment log and clear items
   */
  public void printLog() {
    List<Log> logList = logService.getLog();
    for (Log log : logList) printLog(log);
    logList.clear();
  }
 
  /*
   * Print single log entry
   */
  public void printLog(Log log) {
    String msg = "[" + Strings.padEnd(log.getLogType(), 7, ' ') + "]  " + log.getTitle();
    if (log.getMessage() != null) {
      System.out.println("");
      String shortHR = StringUtils.repeat("-", log.getTitle().length() + 15);
      msg += CR + shortHR + CR +
          log.getMessage() + CR + shortHR + CR;
    }
    System.out.println(msg);
  }
 
  /*
   * Simple logging method
   */
  public void log(String logType, String title, String message) {
    printLog(new Log(logType, title, message));
  }
}
TOP

Related Classes of com.adaptrex.tools.command.CommandService

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.