Package com.adaptrex.tools.command

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

package com.adaptrex.tools.command;

import java.io.File;
import java.io.IOException;

import org.apache.commons.cli.Option;
import org.apache.commons.cli.ParseException;

import com.adaptrex.tools.Tools;
import com.adaptrex.tools.environment.IEnvironmentService;
import com.adaptrex.tools.framework.javascript.JavaScriptFramework;
import com.adaptrex.tools.log.ILogService;
import com.adaptrex.tools.webapp.IGenerateService;
import com.adaptrex.tools.webapp.IWebappService;
import com.adaptrex.tools.webapp.Webapp;
import com.google.inject.Inject;

import freemarker.template.TemplateException;

public class Generate extends Command {

  private static final String WEBAPP_USAGE = "adaptrex generate webapp -p <webapp-path> -n <name> " +
      "[-g <global-folder>] [-G <global-namespace>] " +
      "-b <base-package> -a <adaptrex-js> [-e <extjs> -s <sencha-touch>] " +
      "-v <presentation> -o <orm> -d <dependency-injection>" +
      "[-t <ext-theme>] [-T <sencha-touch-theme>]";
 
  private static final String PAGE_USAGE = "adaptrex generate page [-p <webapp-path>] " +
      "[-n <name>] [-a <adaptrex-js>] [-e <extjs>] [-s <sencha-touch>]";
 
  private IGenerateService generateService;
 
  @Inject
  public Generate(ICommandService commandService, ILogService logService, IGenerateService generateService,
      IEnvironmentService environmentService, IWebappService webappService) throws ParseException,
      IOException {
    super(commandService, logService, environmentService, webappService);
    this.generateService = generateService;
  }
 
  public void run() throws ParseException, IOException, TemplateException {
    String target = commandService.getTarget();
   
    if (target.equals("webapp")) generateWebapp();
    else if (target.equals("page")) generatePage();
  }
 
  /*
   * adaptrex generate page
   */
  private void generatePage() throws ParseException, IOException, TemplateException {
    setGeneratePageOptions();
    cl = commandService.parseCommands(PAGE_USAGE);
    commandService.requireOptions(PAGE_USAGE, "P", "N", "f");
   
    Webapp webapp = commandService.getWebapp();
   
    String pagePath    = cl.getOptionValue("P");
    String namespace  = cl.getOptionValue("N");
    String framework  = cl.getOptionValue("f");
   
    generateService.generatePage(webapp, pagePath, namespace, framework);
    commandService.printLog();
  }
 
  /*
   * adaptrex generate webapp
   */
  private void generateWebapp() throws ParseException, IOException, TemplateException {
    setGenerateWebappOptions();
    cl = commandService.parseCommands(WEBAPP_USAGE);
    commandService.requireOptions(WEBAPP_USAGE, "p", "n", "a", "b");
   
    if (!cl.hasOption("e") && !cl.hasOption("s")) {
      commandService.log("Error", "Missing Option",
          "You must specify at least one of the required ExtJS or Sencha Touch frameworks");
      commandService.printLog();
      return;
    }
   
    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);
   
    String name       = cl.getOptionValue("n");
    String pkg         = cl.getOptionValue("b");
    String adaptrexFolder   = cl.getOptionValue("a");
    String extFolder     = cl.getOptionValue("e");
    String stFolder     = cl.getOptionValue("s");
    String orm         = cl.getOptionValue("o", "jpa");
    String pres       = cl.getOptionValue("v", "jsp");
    String di         = cl.getOptionValue("d");
    String globalNamespace  = cl.getOptionValue("G");
    String globalFolder    = cl.getOptionValue("g");
    String extTheme      = cl.getOptionValue("t");
    String senchaTouchTheme = cl.getOptionValue("T");

    String reserved = Tools.hasReservedWord(pkg);
    if (reserved != null) {
      commandService.log("Error", "Package contains reserved word (" + reserved + ")",
          "Your base-package cannot contain a java reserved word.");
      commandService.printLog();
      return;
    }
   
    /*
     * Get default frameworks
     */
    if (adaptrexFolder == null) adaptrexFolder = JavaScriptFramework.DEFAULT;
    if (cl.hasOption("e") && extFolder == null) extFolder = JavaScriptFramework.DEFAULT;
    if (cl.hasOption("s") && stFolder == null) stFolder = JavaScriptFramework.DEFAULT;
   
    generateService.generateWebapp(
        name, path, pkg, globalNamespace, globalFolder,
        adaptrexFolder, extFolder, stFolder, orm, pres, di,
        extTheme, senchaTouchTheme);
   
    commandService.printLog();
  }
 
 
 
  /*
   * "adaptrex generate page" options
   */
  private void setGeneratePageOptions() {
    Option p = new Option("p", "webapp-path", true, "Path of the webapp to generate a new page for");
    p.setArgName("webapp-path");
    p.setOptionalArg(true);
    options.addOption(p);
   
    Option pg = new Option("P", "page-path", true, "Path of the page to generate");
    pg.setArgName("page-path");
    options.addOption(pg);
   
    Option ns = new Option("N", "namespace", true, "The namespace of the page to generate");
    ns.setArgName("namespace");
    options.addOption(ns);
   
    Option f = new Option("f", "framework", true, "The framework to use for this page (ext-js or sencha-touch)");
    f.setArgName("namespace");
    f.setOptionalArg(true);
    options.addOption(f);   
  }
 
 
  /*
   * "adaptrex generate webapp" options
   */
  private void setGenerateWebappOptions() {
    Option p = new Option("p", "webapp-path", true, "Path of the new webapp to generate");
    p.setArgName("webapp-path");
    options.addOption(p);
   
    Option n = new Option("n", "name", true, "The name of the webapp to create");
    n.setArgName("name");
    options.addOption(n);
   
    Option t = new Option("t", "ext-theme", true, "Copy an ExtJS theme to the webapp");
    t.setArgName("ext-theme");
    options.addOption(t);
   
    Option st = new Option("T", "sencha-touch-theme", true, "Copy a Sencha Touch theme to the webapp");
    st.setArgName("sencha-touch-theme");
    options.addOption(st)
   
    Option b = new Option("b", "base-package", true, "The base java package for the webapp");
    b.setArgName("base-package");
    options.addOption(b);
   
    Option a = new Option("a", "adaptrex-js", true, "The adaptrex-js folder for the webapp");
    a.setArgName("adaptrex-js");
    options.addOption(a);
   
    Option e = new Option("e", "extjs", true, "The extjs folder for the webapp");
    e.setArgName("extjs");
    e.setOptionalArg(true);
    options.addOption(e);
   
    Option s = new Option("s", "sencha-touch", true, "The sencha-touch folder for the webapp");
    s.setArgName("sencha-touch");
    s.setOptionalArg(true);
    options.addOption(s);
   
    Option o = new Option("o", "orm", true, "The ORM framework to use for the webapp");
    o.setArgName("orm");
    o.setOptionalArg(true);
    options.addOption(o);
   
    Option v = new Option("v", "presentation", true, "The presentation framework to use for the webapp");
    v.setArgName("presentation");
    v.setOptionalArg(true);
    options.addOption(v);
   
    Option d = new Option("d", "di", true, "The dependency injection framework to use for the webapp");
    d.setArgName("di");
    options.addOption(d);
   
    Option g = new Option("g", "common-folder", true, "The path to the folder containing common classes");
    g.setArgName("common-folder");
    options.addOption(g);
   
    Option gn = new Option("G", "common-namespace", true, "The namespace to use for common classes");
    gn.setArgName("common-namespace");
    options.addOption(gn);   
  }
}
TOP

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

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.