⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 strutsgenerator.java

📁 自动生成JAVA-Struts网站的程序
💻 JAVA
字号:
/* *  Copyright(C) 2002 Azrul Azwar (pikapikane@yahoo.co.jp) * *  This library is free software; you can redistribute it and/or *  modify it under the terms of the GNU Lesser General Public *  License as published by the Free Software Foundation; either *  version 2.1 of the License, or (at your option) any later version. * *  This library is distributed in the hope that it will be useful, *  but WITHOUT ANY WARRANTY; without even the implied warranty of *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU *  Lesser General Public License for more details. * *  You should have received a copy of the GNU Lesser General Public *  License along with this library; if not, write to the Free Software *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA * */package com.javanovic.karapansapi.strutsgen;import com.javanovic.karapansapi.Generator;import com.javanovic.karapansapi.xml.*;import com.sutternow.templates.BeanTemplates;import com.sutternow.templates.Listing;import org.apache.velocity.VelocityContext;import java.io.File;import java.util.*;/** * @author     roel * @version    1.1.2 */public class StrutsGenerator extends Generator {  protected final static String TEMPLATE_DIR = "template/";  protected final static String LAYOUT_DIR = "layout";  protected final static String XSLT_FILE = "xslt/html.xsl";  private String strPackage;  public static void main(String[] args) throws Exception {    if(args.length < 1) {      System.out.println("Syntax: java StrutsGenerator application.xml");      System.exit(1);    }    long start = System.currentTimeMillis();    XMLHandler handler = new XMLHandlerImpl();    Strutscreator app = handler.load(args[0]);    StrutsGenerator gen = createStrutsGenerator();    ResourceBundle prop = PropertyResourceBundle.getBundle("com.javanovic.karapansapi.strutsgen.strutsgen");    gen.setLayoutDir(prop.getString("layout.dir"));    gen.setTemplateDir(prop.getString("template.dir"));    gen.setXsltFile(prop.getString("xslt.file"));    gen.generateFiles(app);    long end = System.currentTimeMillis();    System.out.print((double) (end - start) / 1000);    System.out.println(" seconds");    java.text.DecimalFormat f = new java.text.DecimalFormat("#,###");    System.out.println(      f.format(gen.getGeneratedByteCount() / 1024) + " KB generated");  }  public void generateFiles(Strutscreator tree) throws Exception {    super.generateFiles(tree);    strPackage = tree.getBuild().getPackage();    copyDirectoryLayout();    createDefaultDir();    generateAppFiles(tree);    generateHtmlMenu(tree);    Bean[] beans = tree.getBean();    for(int i = 0; i < beans.length; i++) {      generateHtml(beans[i]);      //todo need to tap in here for non static beans.      generateObject(beans[i]);    }  }  protected String getPath(String strPackage) {    String path = outputdir;    path = path + "src" + File.separator;    if(strPackage != null && strPackage.compareTo("") != 0) {      String myPackage = strPackage;      myPackage = myPackage.replace('.', File.separatorChar);      File directory = new File(path + myPackage);      directory.mkdirs();      path += myPackage;      path = path.concat(File.separator);    }    return path;  }  protected void createDefaultDir() {    File directory = new File(outputdir + "src" + File.separator + "resources");    directory.mkdirs();    directory = new File(outputdir + "sql");    directory.mkdirs();  }  private void generateAppFiles(Strutscreator tree) {    /*  App files are files that are global or apply to app beans */    String s = File.separator;    String htmlDir = outputdir + "webroot" + File.separator;    VelocityContext context = new VelocityContext(strutsContext);    String fileName = htmlDir + "template" + File.separator + "header.jsp";    applyXsltTemplate(context, fileName, "web/header.vm");    fileName = htmlDir + "template" + File.separator + "footer.jsp";    applyXsltTemplate(context, fileName, "web/footer.vm");    fileName = outputdir + "sql" + s + "create.sql";    context.put("beans", tree.getBean());    applyTemplate(context, fileName, "sql.vm");    fileName = outputdir + "build.xml";    applyTemplate(context, fileName, "build-xml.vm");    fileName = getPath(strPackage + ".dao") + "DAO.java";    applyTemplate(context, fileName, "dao/dao-abstract.vm");    fileName = getPath(strPackage + ".dao") + "DAOCacheManager.java";    applyTemplate(context, fileName, "dao/dao-cache-manager.vm");    fileName = getPath(strPackage + ".dao.hibernate") + "DAOService.java";    applyTemplate(context, fileName, "dao/hibernate/DAOService.vm");    fileName = getPath(strPackage + ".util") + "Pager.java";    applyTemplate(context, fileName, "util/pager.vm");    fileName = getPath(strPackage + ".util") + "CachedObject.java";    applyTemplate(context, fileName, "util/cached-object.vm");    fileName = getPath(strPackage + ".util") + "CacheManager.java";    applyTemplate(context, fileName, "util/cache-manager.vm");    fileName = getPath(strPackage + ".util") + "PasswordValidator.java";    applyTemplate(context, fileName, "util/password-validator.vm");    fileName = getPath(strPackage + ".util") + "StringBeanUtilsConverterDate.java";    applyTemplate(context, fileName, "util/beanutil-string.vm");    fileName = getPath(strPackage + ".util") + "DateBeanUtilsConverter.java";    applyTemplate(context, fileName, "util/beanutil-date.vm");    fileName = getPath(strPackage + ".controller") + "Logout.java";    applyTemplate(context, fileName, "logout-action.vm");    fileName = getPath(strPackage + ".controller") + "SizeCacheManager.java";    applyTemplate(context, fileName, "size-cache-manager.vm");    //context.put("dateFormat", tree.getBuild().getDateFormat());    fileName = getPath(strPackage + ".controller") + "DispatchForward.java";    applyTemplate(context, fileName, "struts-dispatch-forward.vm");    boolean haveApplicationVar = false;    boolean haveSessionVar = false;    for(int i = 0; i < tree.getGlobalReference().length; i++) {      if(tree.getGlobalReference(i).getScope().equals("application")) {        haveApplicationVar = true;      }      if(tree.getGlobalReference(i).getScope().equals("session")) {        haveSessionVar = true;      }      if(haveApplicationVar && haveSessionVar) {        break;      }    }    if(haveApplicationVar) {      fileName = getPath(strPackage + ".plugin") + "StartUp.java";      applyTemplate(context, fileName, "startup-application.vm");    }    if(haveSessionVar) {      fileName = getPath(strPackage + ".filter") + "StartUp.java";      applyTemplate(context, fileName, "startup-session.vm");    }    fileName = outputdir + "webroot" + s + "WEB-INF" + s + "struts-config.xml";    context = new VelocityContext(strutsContext);    if(haveApplicationVar) {      context.put("haveApplicationVar", "true");    }    context.put("beans", tree.getBean());    applyTemplate(context, fileName, "struts-config.vm");    fileName = outputdir + "webroot" + s + "WEB-INF" + s + "tiles-def.xml";    applyTemplate(context, fileName, "tiles-def-xml.vm");    fileName = outputdir + "webroot" + s + "WEB-INF" + s + "password-rule.xml";    applyTemplate(context, fileName, "password-rule-xml.vm");    //context.put("dateFormat", tree.getBuild().getDateFormat());    fileName = outputdir + "webroot" + s + "WEB-INF" + s + "validation.xml";    applyTemplate(context, fileName, "validation-xml.vm");    context.put("globalValueRef", tree.getGlobalValueRef());    fileName =      outputdir + "src" + s + "resources" + s + "application.properties";    applyTemplate(context, fileName, "web-properties.vm");    context = new VelocityContext(strutsContext);    context.put("security", tree.getSecurity());    if(haveSessionVar) {      context.put("haveSessionVar", "true");    }    fileName = outputdir + "webroot" + s + "WEB-INF" + s + "web.xml";    applyTemplate(context, fileName, "web-xml.vm");  }  private void generateBeanObjects(Bean bean, BeanTemplates templates) {      /* version of gernateOjbect that uses stored templates rather than fixed */      VelocityContext context = new VelocityContext(strutsContext);      context.put("bean", bean);      Enumeration enum = templates.enumerateListing();      while (enum.hasMoreElements()) {          Listing listing = (Listing)enum.nextElement();          String fileName = getPath(strPackage + listing.getPackageBranch()) + bean.getName() + listing.getFileSuffix();          System.out.println("Generating file " + fileName + " with template " + listing.getName());          applyTemplate(context, fileName, listing.getName());      }  }  private void generateObject(Bean bean) {    String fileName = getPath(strPackage + ".model") + bean.getName() + ".java";    VelocityContext context = new VelocityContext(strutsContext);    context.put("bean", bean);    applyTemplate(context, fileName, "model.vm");    if(bean.getGenerateDao()) {      fileName = getPath(strPackage + ".dao") + bean.getName() + "DAO.java";      applyTemplate(context, fileName, "dao/dao.vm");    }    if(bean.getGenerateDao() || bean.getGenerateProcess()) {      fileName =        getPath(strPackage + ".controller") + bean.getName() + "Form.java";      applyTemplate(context, fileName, "struts-form.vm");      fileName =        getPath(strPackage + ".controller") + bean.getName() + "Action.java";      applyTemplate(context, fileName, "struts-action.vm");    }  }  private void generateHtml(Bean bean) {    if(!(bean.getGenerateDao() || bean.getGenerateProcess())) {      return;    }    String htmlDir = outputdir + "webroot" + File.separator + "manager"      + File.separator + bean.getName() + File.separator;    File f = new File(htmlDir);    f.mkdirs();    VelocityContext context = new VelocityContext(strutsContext);    context.put("bean", bean);    String fileName;    if(bean.getGenerateDao()) {      fileName = htmlDir + "entry.jsp";      applyXsltTemplate(context, fileName, "web/entry.vm");      fileName = htmlDir + "summary.jsp";      applyXsltTemplate(context, fileName, "web/summary.vm");      fileName = htmlDir + "view.jsp";      applyXsltTemplate(context, fileName, "web/view.vm");      fileName = htmlDir + "remove.jsp";      applyXsltTemplate(context, fileName, "web/remove.vm");      htmlDir = outputdir + "webroot" + File.separator + "query"        + File.separator + bean.getName() + File.separator;      f = new File(htmlDir);      f.mkdirs();      Column[] fields = bean.getPrimaryKey().getColumn();      context = new VelocityContext(strutsContext);      context.put("beanName", bean.getName());      context.put("processName", "view");      context.put("actionName", "/" + bean.getName() + "/view");      context.put("pageTitle", "SearchByPK");      context.put("isQuery", "true");      context.put("singlePage", "true");      context.put("pageFields", fields);      context.put("successPath", "1");      context.put("cancelPath", "1");      fileName = htmlDir + "SearchByPK.jsp";      applyXsltTemplate(context, fileName, "web/process.vm");      Query[] query = bean.getQuery();      for(int i = 0; i < query.length; i++) {        fields = util.getQueryVariableColumnList(bean, query[i]);        if(fields != null) {          context = new VelocityContext(strutsContext);          context.put("beanName", bean.getName());          context.put("processName", query[i].getName());          context.put("actionName", "/" + bean.getName() + "/" + query[i].getName());          context.put("pageTitle", query[i].getName());          context.put("isQuery", "true");          context.put("singlePage", "true");          context.put("pageFields", fields);          context.put("cancelPath", "1");          fileName = htmlDir + query[i].getName() + ".jsp";          applyXsltTemplate(context, fileName, "web/process.vm");        }      }    }    if(bean.getGenerateProcess()) {      com.javanovic.karapansapi.xml.Process[] processes =        bean.getProcess();      if(processes.length > 0) {        htmlDir = outputdir + "webroot" + File.separator + "process" + File.separator          + bean.getName() + File.separator;        f = new File(htmlDir);        f.mkdirs();      }      for(int i = 0; i < processes.length; i++) {        Page[] pages = processes[i].getPage();        if(pages.length == 1) {          context = new VelocityContext(strutsContext);          context.put("beanName", bean.getName());          context.put("processName", "/" + bean.getName() + "/" + processes[i].getName());          context.put("pageTitle", pages[0].getTitle());          context.put("forwards", pages[0].getForward());          context.put("actionName", "/" + bean.getName() + "/" + processes[i].getName());          context.put("singlePage", "true");          context.put("pageFields", util.getProcessPageFieldList(bean, pages[0]));          // for existance indication only          context.put("successPath", "1");          context.put("cancelPath", processes[i].getCancelPath());          fileName = htmlDir + processes[i].getName() + ".jsp";          applyXsltTemplate(context, fileName, "web/process.vm");        } else {          for(int j = 0; j < pages.length; j++) {            context = new VelocityContext(strutsContext);            context.put("beanName", bean.getName());            context.put("pageNumber", new Integer(j + 1));            context.put("processName", processes[i].getName());            context.put("actionName", "/" + bean.getName() + "/" + processes[i].getName() + (j + 1));            context.put("pageTitle", pages[j].getTitle());            context.put("forwards", pages[j].getForward());            context.put("pageFields", util.getProcessPageFieldList(bean, pages[j]));            if(j == pages.length - 1) {              context.put("successPath", "1");            } else {              context.put("continuePath", "1");            }            context.put("cancelPath", processes[i].getCancelPath());            if(j > 0) {              context.put("backPath", "1");            }            fileName = htmlDir + processes[i].getName() + (j + 1) + ".jsp";            applyXsltTemplate(context, fileName, "web/process.vm");          }        }        if(processes[i].getSuccessPath() == null) {          fileName = htmlDir + processes[i].getName() + "Finish.jsp";          applyXsltTemplate(context, fileName, "web/process-finish.vm");        }      }    }  }  private void generateHtmlMenu(Strutscreator tree) {    String htmlDir = outputdir + "webroot" + File.separator;    VelocityContext context = new VelocityContext(strutsContext);    context.put("menu", tree.getMenu());    String fileName = htmlDir + "template" + File.separator + "menu.jsp";    applyXsltTemplate(context, fileName, "web/menu.vm");  }  public static StrutsGenerator createStrutsGenerator() {    return new StrutsGenerator();  }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -