📄 strutsgenerator.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 + -