|
What this is
Other links
The source code/* * Sun Public License Notice * * The contents of this file are subject to the Sun Public License * Version 1.0 (the "License"). You may not use this file except in * compliance with the License. A copy of the License is available at * http://www.sun.com/ * * The Original Code is NetBeans. The Initial Developer of the Original * Code is Sun Microsystems, Inc. Portions Copyright 1997-2004 Sun * Microsystems, Inc. All Rights Reserved. */ package org.netbeans.modules.web.project; import org.netbeans.api.project.Project; import org.netbeans.api.project.ProjectManager; import org.netbeans.modules.j2ee.deployment.devmodules.api.Deployment; import org.netbeans.modules.web.api.webmodule.WebModule; import org.netbeans.modules.web.project.ui.customizer.WebProjectProperties; import org.netbeans.spi.project.support.ant.AntProjectHelper; import org.netbeans.spi.project.support.ant.EditableProperties; import org.netbeans.spi.project.support.ant.GeneratedFilesHelper; import org.netbeans.spi.project.support.ant.ProjectGenerator; import org.openide.filesystems.FileObject; import org.openide.filesystems.FileUtil; import org.openide.filesystems.Repository; import org.openide.filesystems.FileStateInvalidException; import org.openide.loaders.DataFolder; import org.openide.loaders.DataObject; import org.openide.util.NbBundle; import org.w3c.dom.Document; import org.w3c.dom.Element; import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; /** * Create a fresh WebProject from scratch or by importing and exisitng web module * in one of the recognized directory structures. * * @author Pavel Buzek */ public class WebProjectGenerator { private static final String DEFAULT_DOC_BASE_FOLDER = "web"; //NOI18N private static final String DEFAULT_SRC_FOLDER = "src"; //NOI18N private static final String DEFAULT_BUILD_DIR = "build"; //NOI18N private static final String WEB_INF = "WEB-INF"; //NOI18N private WebProjectGenerator() {} /** * Create a new empty J2SE project. * @param dir the top-level directory (need not yet exist but if it does it must be empty) * @param name the code name for the project * @return the helper object permitting it to be further customized * @throws IOException in case something went wrong */ public static AntProjectHelper createProject(File dir, String name, String j2eeLevel, String contextPath) throws IOException { final FileObject fo = Utils.getValidEmptyDir(dir); AntProjectHelper h = setupProject (fo, name, j2eeLevel); fo.createFolder(DEFAULT_SRC_FOLDER); // NOI18N FileObject webFO = fo.createFolder(DEFAULT_DOC_BASE_FOLDER); // NOI18N FileObject webInfFO = webFO.createFolder(WEB_INF); // NOI18N // create web.xml // PENDING : should be easier to define in layer and copy related FileObject (doesn't require systemClassLoader) if (WebModule.J2EE_14_LEVEL.equals(j2eeLevel)) FileUtil.copyFile(Repository.getDefault().getDefaultFileSystem().findResource("org-netbeans-modules-web-project/web-2.4.xml"), webInfFO, "web"); //NOI18N else if (WebModule.J2EE_13_LEVEL.equals(j2eeLevel)) FileUtil.copyFile(Repository.getDefault().getDefaultFileSystem().findResource("org-netbeans-modules-web-project/web-2.3.xml"), webInfFO, "web"); //NOI18N EditableProperties ep = h.getProperties(AntProjectHelper.PROJECT_PROPERTIES_PATH); ep.put (WebProjectProperties.SOURCE_ROOT, "."); //NOI18N ep.setProperty(WebProjectProperties.WEB_DOCBASE_DIR, DEFAULT_DOC_BASE_FOLDER); //NOI18N ep.setProperty(WebProjectProperties.SRC_DIR, DEFAULT_SRC_FOLDER); //NOI18N h.putProperties(AntProjectHelper.PROJECT_PROPERTIES_PATH, ep); Project p = ProjectManager.getDefault().findProject(h.getProjectDirectory ()); ProjectManager.getDefault().saveProject(p); //create default index.jsp createIndexJSP(webFO); ProjectWebModule pwm = (ProjectWebModule) p.getLookup ().lookup (ProjectWebModule.class); if (pwm != null) //should not be null pwm.setContextPath(contextPath); return h; } public static AntProjectHelper importProject(File dir, String name, FileObject wmFO, FileObject javaRoot, FileObject docBase, FileObject libFolder, String j2eeLevel, String buildfile) throws IOException { FileObject fo = Utils.getValidDir(dir); AntProjectHelper h = setupProject (fo, name, j2eeLevel); EditableProperties ep = h.getProperties(AntProjectHelper.PROJECT_PROPERTIES_PATH); if (FileUtil.isParentOf (fo, wmFO) || fo.equals (wmFO)) { ep.put (WebProjectProperties.SOURCE_ROOT, "."); //NOI18N ep.setProperty(WebProjectProperties.WEB_DOCBASE_DIR, relativePath (fo, docBase)); //NOI18N ep.setProperty(WebProjectProperties.SRC_DIR, relativePath (fo, javaRoot)); //NOI18N if (libFolder != null) { ep.setProperty(WebProjectProperties.LIBRARIES_DIR, relativePath (fo, libFolder)); //NOI18N } } else { File wmRoot = FileUtil.toFile (wmFO); ep.put (WebProjectProperties.SOURCE_ROOT, wmRoot.getAbsolutePath ()); String docPath = relativePath (wmFO, docBase); docPath = docPath.length () > 0 ? "${"+WebProjectProperties.SOURCE_ROOT+"}/" + docPath : "${"+WebProjectProperties.SOURCE_ROOT+"}"; //NOI18N ep.setProperty(WebProjectProperties.WEB_DOCBASE_DIR, docPath); String javaPath = relativePath (wmFO, javaRoot); javaPath = javaPath.length () > 0 ? "${"+WebProjectProperties.SOURCE_ROOT+"}/" + javaPath : "${"+WebProjectProperties.SOURCE_ROOT+"}"; //NOI18N ep.setProperty(WebProjectProperties.SRC_DIR, javaPath); if (libFolder != null) { String libPath = relativePath (wmFO, libFolder); libPath = libPath.length () > 0 ? "${"+WebProjectProperties.SOURCE_ROOT+"}/" + libPath : "${"+WebProjectProperties.SOURCE_ROOT+"}"; //NOI18N ep.setProperty(WebProjectProperties.LIBRARIES_DIR, libPath); } } if (! GeneratedFilesHelper.BUILD_XML_PATH.equals (buildfile)) { ep.setProperty (WebProjectProperties.BUILD_FILE, buildfile); } h.putProperties(AntProjectHelper.PROJECT_PROPERTIES_PATH, ep); Project p = ProjectManager.getDefault().findProject(h.getProjectDirectory ()); ProjectManager.getDefault().saveProject(p); return h; } private static String relativePath (FileObject parent, FileObject child) { if (child.equals (parent)) return ""; if (!FileUtil.isParentOf (parent, child)) throw new IllegalArgumentException ("Cannot find relative path, " + parent + " is not parent of " + child); return child.getPath ().substring (parent.getPath ().length () + 1); } public static Collection getBaseLibraries() { Collection c = getBaseLibraries(WebModule.J2EE_14_LEVEL); c.addAll(getBaseLibraries(WebModule.J2EE_13_LEVEL)); return c; } public static Collection getBaseLibraries(String j2eeLevel) { Collection c = new ArrayList(); if (WebModule.J2EE_14_LEVEL.equals(j2eeLevel)) { c.add("servlet24"); c.add("jsp20"); } else if (WebModule.J2EE_13_LEVEL.equals(j2eeLevel)) { c.add("servlet23"); } return c; } public static Collection getIncompatibleLibraries(String j2eeLevel) { Collection c = new ArrayList(); if (WebModule.J2EE_14_LEVEL.equals(j2eeLevel)) { c.addAll(getBaseLibraries(WebModule.J2EE_13_LEVEL)); c.add("jstl"); } else if (WebModule.J2EE_13_LEVEL.equals(j2eeLevel)) { c.addAll(getBaseLibraries(WebModule.J2EE_14_LEVEL)); c.add("jstl11"); } return c; } private static AntProjectHelper setupProject (FileObject dirFO, String name, String j2eeLevel) throws IOException { AntProjectHelper h = ProjectGenerator.createProject(dirFO, WebProjectType.TYPE); Element data = h.getPrimaryConfigurationData(true); Document doc = data.getOwnerDocument(); Element nameEl = doc.createElementNS(WebProjectType.PROJECT_CONFIGURATION_NAMESPACE, "name"); // NOI18N nameEl.appendChild(doc.createTextNode(name)); data.appendChild(nameEl); Element minant = doc.createElementNS(WebProjectType.PROJECT_CONFIGURATION_NAMESPACE, "minimum-ant-version"); // NOI18N minant.appendChild(doc.createTextNode("1.6")); // NOI18N data.appendChild(minant); Element wmLibs = doc.createElementNS (WebProjectType.PROJECT_CONFIGURATION_NAMESPACE, "web-module-libraries"); //NOI18N for (Iterator it = getBaseLibraries(j2eeLevel).iterator(); it.hasNext();) { wmLibs.appendChild (createLibraryElement(doc, (String) it.next())); } data.appendChild (wmLibs); Element addLibs = doc.createElementNS(WebProjectType.PROJECT_CONFIGURATION_NAMESPACE, "web-module-additional-libraries"); //NOI18N data.appendChild(addLibs); h.putPrimaryConfigurationData(data, true); EditableProperties ep = h.getProperties(AntProjectHelper.PROJECT_PROPERTIES_PATH); // XXX the following just for testing, TBD: ep.setProperty(WebProjectProperties.DIST_DIR, "dist"); ep.setProperty(WebProjectProperties.DIST_WAR, "${"+WebProjectProperties.DIST_DIR+"}/${" + WebProjectProperties.WAR_NAME + "}"); if (WebModule.J2EE_14_LEVEL.equals(j2eeLevel)) ep.setProperty(WebProjectProperties.JAVAC_CLASSPATH, "${libs.servlet24.classpath}:${libs.jsp20.classpath}"); else if (WebModule.J2EE_13_LEVEL.equals(j2eeLevel)) ep.setProperty(WebProjectProperties.JAVAC_CLASSPATH, "${libs.servlet23.classpath}"); ep.setProperty(WebProjectProperties.J2EE_PLATFORM, j2eeLevel); ep.setProperty(WebProjectProperties.WAR_NAME, name + ".war"); ep.setProperty(WebProjectProperties.WAR_COMPRESS, "false"); ep.setProperty(WebProjectProperties.WAR_CONTENT_ADDITIONAL, ""); ep.setProperty(WebProjectProperties.LAUNCH_URL_RELATIVE, ""); ep.setProperty(WebProjectProperties.DISPLAY_BROWSER, "true"); Deployment deployment = Deployment.getDefault (); String serverInstanceID = deployment.getDefaultServerInstanceID (); if (serverInstanceID != null) { ep.setProperty(WebProjectProperties.J2EE_SERVER_TYPE, deployment.getServerID (serverInstanceID)); } else { ep.setProperty(WebProjectProperties.J2EE_SERVER_TYPE, ""); } ep.setProperty(WebProjectProperties.JAVAC_SOURCE, "${default.javac.source}"); //NOI18N ep.setProperty(WebProjectProperties.JAVAC_DEBUG, "true"); ep.setProperty(WebProjectProperties.JAVAC_DEPRECATION, "false"); ep.setProperty("javac.compilerargs", ""); // NOI18N ep.setComment("javac.compilerargs", new String[] { "# " + NbBundle.getMessage(WebProjectGenerator.class, "COMMENT_javac.compilerargs"), // NOI18N }, false); //xxx Default should be 1.2 //http://projects.netbeans.org/buildsys/j2se-project-ui-spec.html#Build_Compiling_Sources ep.setProperty(WebProjectProperties.JAVAC_TARGET, "${default.javac.source}"); //NOI18N ep.setProperty(WebProjectProperties.BUILD_DIR, DEFAULT_BUILD_DIR); ep.setProperty(WebProjectProperties.BUILD_WEB_DIR, "${"+WebProjectProperties.BUILD_DIR+"}/web"); ep.setProperty(WebProjectProperties.BUILD_GENERATED_DIR, "${"+WebProjectProperties.BUILD_DIR+"}/generated"); ep.setProperty(WebProjectProperties.BUILD_CLASSES_DIR, "${"+WebProjectProperties.BUILD_WEB_DIR+"}/WEB-INF/classes"); ep.setProperty(WebProjectProperties.BUILD_CLASSES_EXCLUDES, "**/*.java,**/*.form"); ep.setProperty(WebProjectProperties.DIST_JAVADOC_DIR, "${"+WebProjectProperties.DIST_DIR+"}/javadoc"); ep.setProperty(WebProjectProperties.NO_DEPENDENCIES, "false"); ep.setProperty(WebProjectProperties.JAVA_PLATFORM, "default_platform"); ep.setProperty(WebProjectProperties.DEBUG_CLASSPATH, "${"+WebProjectProperties.JAVAC_CLASSPATH+"}:${"+WebProjectProperties.BUILD_CLASSES_DIR+"}"); ep.setProperty("runmain.jvmargs", ""); // NOI18N ep.setComment("runmain.jvmargs", new String[] { "# " + NbBundle.getMessage(WebProjectGenerator.class, "COMMENT_runmain.jvmargs"), // NOI18N "# " + NbBundle.getMessage(WebProjectGenerator.class, "COMMENT_runmain.jvmargs_2"), // NOI18N }, false); ep.setProperty(WebProjectProperties.JAVADOC_PRIVATE, "false"); // NOI18N ep.setProperty(WebProjectProperties.JAVADOC_NO_TREE, "false"); // NOI18N ep.setProperty(WebProjectProperties.JAVADOC_USE, "true"); // NOI18N ep.setProperty(WebProjectProperties.JAVADOC_NO_NAVBAR, "false"); // NOI18N ep.setProperty(WebProjectProperties.JAVADOC_NO_INDEX, "false"); // NOI18N ep.setProperty(WebProjectProperties.JAVADOC_SPLIT_INDEX, "true"); // NOI18N ep.setProperty(WebProjectProperties.JAVADOC_AUTHOR, "false"); // NOI18N ep.setProperty(WebProjectProperties.JAVADOC_VERSION, "false"); // NOI18N ep.setProperty(WebProjectProperties.JAVADOC_WINDOW_TITLE, ""); // NOI18N ep.setProperty(WebProjectProperties.JAVADOC_ENCODING, ""); // NOI18N ep.setProperty(WebProjectProperties.JAVADOC_PREVIEW, "true"); // NOI18N ep.setProperty(WebProjectProperties.COMPILE_JSPS, "false"); // NOI18N h.putProperties(AntProjectHelper.PROJECT_PROPERTIES_PATH, ep); ep = h.getProperties(AntProjectHelper.PRIVATE_PROPERTIES_PATH); if (serverInstanceID != null) { ep.setProperty(WebProjectProperties.J2EE_SERVER_INSTANCE, serverInstanceID); } h.putProperties(AntProjectHelper.PRIVATE_PROPERTIES_PATH, ep); Project p = ProjectManager.getDefault().findProject(dirFO); ProjectManager.getDefault().saveProject(p); return h; } private static Element createLibraryElement(Document doc, String libraryName) { Element servletLib = doc.createElementNS (WebProjectType.PROJECT_CONFIGURATION_NAMESPACE, "library"); //NOI18N Element servletLibName = doc.createElementNS (WebProjectType.PROJECT_CONFIGURATION_NAMESPACE, "file"); //NOI18N servletLibName.appendChild (doc.createTextNode ("${libs." + libraryName + ".classpath}")); //NOI18N servletLib.appendChild (servletLibName); return servletLib; } private static void createIndexJSP(FileObject webFolder) throws IOException { FileObject jspTemplate = Repository.getDefault().getDefaultFileSystem().findResource( "Templates/JSP_Servlet/JSP.jsp" ); if (jspTemplate == null) return; // Don't know the template DataObject mt = DataObject.find(jspTemplate); DataFolder webDf = DataFolder.findFolder(webFolder); mt.createFromTemplate(webDf, "index"); } } |
... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2021 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.