Package com.scooterframework.tools.signon

Source Code of com.scooterframework.tools.signon.SignonGenerator

/*
*   This software is distributed under the terms of the FSF
*   Gnu Lesser General Public License (see lgpl.txt).
*
*   This program is distributed WITHOUT ANY WARRANTY. See the
*   GNU General Public License for more details.
*/
package com.scooterframework.tools.signon;

import java.io.File;
import java.util.HashMap;
import java.util.Map;

import com.scooterframework.admin.ApplicationConfig;
import com.scooterframework.tools.common.AbstractGenerator;
import com.scooterframework.tools.common.AmbiguousAppNameException;
import com.scooterframework.tools.common.Generator;
import com.scooterframework.tools.common.ToolsUtil;

/**
* This is the main class of signon generator.
*
* <p>
* Usage examples:
* <pre>
  Usage:
      java -jar tools/generate-signon.jar [app_path] [custom signon controller name]
 
  Examples:
      This page:
          java -jar tools/generate-signon.jar -help
 
      Generate scaffold controller and views of signon for blog app:
          java -jar tools/generate-signon.jar blog
 
      Generate scaffold controller and views of signon for blog app in user home directory:
          java -jar tools/generate-signon.jar /home/john/projects/blog
 
      Generate scaffold controller and views of signon for blog app, and blog is the only app under webapps:
          java -jar tools/generate-signon.jar
 
      Generate scaffold controller and views of signon with admin as controller name:
          java -jar tools/generate-signon.jar blog admin
* </pre>
* </p>
*
* @author (Fei) John Chen
*/
public class SignonGenerator {

  /**
   * @param args
   */
  public static void main(String[] args) {
      if (args.length > 2 || args.length == 1 && args[0].equalsIgnoreCase("-help")) {
      usage();
      return;
    }

    try {
      doTheWork(args);
    }
    catch(AmbiguousAppNameException ax) {
      log("ERROR ERROR ERROR: " + ax.getMessage());
      return;
    }
    catch(Throwable ex) {
      ex.printStackTrace();
      log("ERROR ERROR ERROR: " + ex.getMessage());
    }

    if (AbstractGenerator.frameworkInitiated)
      ApplicationConfig.configInstanceForApp().endApplication();
  }

    private static void doTheWork(String[] args) throws Throwable {
        String signonControllerName = "signon";
      String scooterHome = ToolsUtil.setSystemProperty("scooter.home", ToolsUtil.detectRootPath());
      String defaultWebappsName = ToolsUtil.setSystemProperty("webapps.name", "webapps");
     
      String appName = "";
    String webappsPath = "";
    String webappPath = "";
    if (args.length == 0) {//use implicit app name
          webappsPath = scooterHome + File.separator + defaultWebappsName;
      appName = ToolsUtil.detectImplicitAppName(webappsPath);
          webappPath = webappsPath + File.separator + appName;
    }
    else if (args.length > 0) {
      String firstArg = args[0];
      if (ToolsUtil.containsPath(firstArg)) {
        String[] ss = ToolsUtil.getPathAndName(firstArg);
        webappsPath = ss[0];
        webappPath  = ss[1];
        appName     = ss[2];
      }
      else {
        appName = firstArg;
            webappsPath = scooterHome + File.separator + defaultWebappsName;
            webappPath = webappsPath + File.separator + appName;
      }
     
      if (args.length == 2) {
        signonControllerName = args[1].toLowerCase();
      }
    }
    appName = appName.toLowerCase();
        System.setProperty("app.name", appName);
       
        webappsPath = ToolsUtil.setSystemProperty("webapps.path", webappsPath);
        ToolsUtil.validatePathExistence(webappsPath);
       
        webappPath = ToolsUtil.setSystemProperty("app.path", webappPath);
        ToolsUtil.validatePathExistence(webappPath);
       
      String appLogs = ToolsUtil.setSystemProperty("app.logs", (scooterHome + File.separator + "logs"));
        ToolsUtil.validatePathExistence(appLogs);
       
        String classFiles = webappPath + File.separator + "WEB-INF" + File.separator + "classes";
        System.setProperty(ApplicationConfig.SYSTEM_KEY_CLASSFILE, classFiles);
        ToolsUtil.validatePathExistence(classFiles);
       
        String propertyFiles = webappPath + File.separator + "WEB-INF" + File.separator + "config";
        System.setProperty(ApplicationConfig.SYSTEM_KEY_PROPERTYFILE, propertyFiles);
        ToolsUtil.validatePathExistence(propertyFiles);
       
        String sourceFiles = webappPath + File.separator + "WEB-INF" + File.separator + "src";
        System.setProperty(ApplicationConfig.SYSTEM_KEY_SOURCEFILE, sourceFiles);
        ToolsUtil.validatePathExistence(sourceFiles);
       
        String referenceFiles = scooterHome + File.separator + "lib";
        System.setProperty(ApplicationConfig.SYSTEM_KEY_REFERENCEFILE, referenceFiles);
        ToolsUtil.validatePathExistence(referenceFiles);
       
        String pluginFiles = scooterHome + File.separator + "plugins";
        System.setProperty(ApplicationConfig.SYSTEM_KEY_PLUGINFILE, pluginFiles);
        ToolsUtil.validatePathExistence(pluginFiles);
       
      String targetDir = webappPath;

    log("Generating code for app named " + appName + ":");
      log("scooter.home: " + scooterHome);
      log("Target dir: " + targetDir);
   
    //create all properties
      Map<String, String> allProps = new HashMap<String, String>();
      allProps.put("scooter.home", scooterHome);
      allProps.put("webapps.path", webappsPath);
      allProps.put("app.path", webappPath);
      allProps.put("app.name", appName);
     
      String templateRoot = scooterHome + File.separator +
              "source" + File.separator +
              "templates";
     
      String vliPath = templateRoot + File.separator +
              "view" + File.separator +
              "security" + File.separator +
              "login.tmpl";
    Generator vli = new ViewLoginGenerator(vliPath, allProps, signonControllerName, "login");
    vli.generate();
     
      String vloPath = templateRoot + File.separator +
              "view" + File.separator +
              "security" + File.separator +
              "logout.tmpl";
    Generator vlo = new ViewLogoutGenerator(vloPath, allProps, signonControllerName, "logout");
    vlo.generate();
     
      String vmaPath = templateRoot + File.separator +
              "view" + File.separator +
              "security" + File.separator +
              "signon_main.tmpl";
    Generator vma = new ViewMainGenerator(vmaPath, allProps, signonControllerName, "main");
    vma.generate();
     
      String scPath = templateRoot + File.separator +
              "controller" + File.separator +
              "SignonController.tmpl";
    Generator sc = new ControllerSignonGenerator(scPath, allProps, signonControllerName);
    sc.generate();
     
      String shdPath = templateRoot + File.separator +
              "view" + File.separator +
              "security" + File.separator +
              "header.tmpl";
    Generator shd = new SecureHeaderGenerator(shdPath, allProps);
    shd.generate();
     
      String sdePath = templateRoot + File.separator +
              "view" + File.separator +
              "security" + File.separator +
              "decorators.xml.tmpl";
    Generator sde = new SecureXMLDecoratorGenerator(sdePath, allProps);
    sde.generate();
    }

    private static void log(Object o) {
    System.out.println(o);
    }

    private static void usage() {
      log("Summary:");
      log("    This is a utility that generates signon codes.");
      log("");
      log("Usage:");
      log("    java -jar tools/generate-signon.jar [app_path] [custom signon controller name]");
      log("");
      log("Examples:");
      log("    This page:");
      log("        java -jar tools/generate-signon.jar -help");
      log("");
      log("    Generate scaffold controller and views of signon for blog app:");
      log("        java -jar tools/generate-signon.jar blog");
      log("");
      log("    Generate scaffold controller and views of signon for blog app in user home directory:");
      log("        java -jar tools/generate-signon.jar /home/john/projects/blog");
      log("");
      log("    Generate scaffold controller and views of signon for blog app, and blog is the only app under webapps:");
      log("        java -jar tools/generate-signon.jar");
      log("");
      log("    Generate scaffold controller and views of signon with admin as controller name:");
      log("        java -jar tools/generate-signon.jar blog admin");
      log("");
    }
}
TOP

Related Classes of com.scooterframework.tools.signon.SignonGenerator

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.