costin 01/05/04 13:00:29 Added: proposals/jasper34/generator/org/apache/jasper34/core JasperException.java JspCompilationContext.java Options.java TagLibraries.java Log: First step in refactoring the code generator. The core contain common interfaces, that makes the connection between jasper and the container. Expect more changes after we get it working ( in the new packaging ), this is just the old code with code separated by functionality. Revision Changes Path 1.1 jakarta-tomcat/proposals/jasper34/generator/org/apache/jasper34/core/JasperException.java Index: JasperException.java =================================================================== /* * $Header: /home/cvs/jakarta-tomcat/proposals/jasper34/generator/org/apache/jasper34/core/JasperException.java,v 1.1 2001/05/04 20:00:28 costin Exp $ * $Revision: 1.1 $ * $Date: 2001/05/04 20:00:28 $ * * ==================================================================== * * The Apache Software License, Version 1.1 * * Copyright (c) 1999 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, if * any, must include the following acknowlegement: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "Tomcat", and "Apache Software * Foundation" must not be used to endorse or promote products derived * from this software without prior written permission. For written * permission, please contact [EMAIL PROTECTED] * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * <http://www.apache.org/>. * */ package org.apache.jasper34.core; /** * Base class for all exceptions generated by the JSP engine. Makes it * convienient to catch just this at the top-level. * * @author Anil K. Vijendran */ public class JasperException extends javax.servlet.ServletException { public JasperException(String reason) { super(reason); } /** * Creates a JasperException with the embedded exception and the reason for * throwing a JasperException */ public JasperException (String reason, Throwable exception) { super(reason, exception); } /** * Creates a JasperException with the embedded exception */ public JasperException (Throwable exception) { super(exception); } } 1.1 jakarta-tomcat/proposals/jasper34/generator/org/apache/jasper34/core/JspCompilationContext.java Index: JspCompilationContext.java =================================================================== /* * ==================================================================== * * The Apache Software License, Version 1.1 * * Copyright (c) 1999 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, if * any, must include the following acknowlegement: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "Tomcat", and "Apache Software * Foundation" must not be used to endorse or promote products derived * from this software without prior written permission. For written * permission, please contact [EMAIL PROTECTED] * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * <http://www.apache.org/>. * */ package org.apache.jasper34.core; //import org.apache.jasper34.generator11.parse.JspReader; //import org.apache.jasper34.generator11.ServletWriter; //import org.apache.jasper.runtime.JspLoader; //import org.apache.jasper.compiler.TagLibraries; import java.io.IOException; //import org.apache.jasper.compiler.Compiler; /** * A place holder for various things that are used through out the JSP * engine. This is a per-request/per-context data structure. Some of * the instance variables are set at different points. * * JspLoader creates this object and passes this off to the "compiler" * subsystem, which then initializes the rest of the variables. * * @author Anil K. Vijendran * @author Harish Prabandham */ public interface JspCompilationContext { /** * The classpath that is passed off to the Java compiler. */ public String getClassPath(); // XXX REFACTOR // /** // * Get the input reader for the JSP text. // */ // public Object getReader(); // /** // * Where is the servlet being generated? // */ // public Object getWriter(); /** * What class loader to use for loading classes while compiling * this JSP? I don't think this is used right now -- akv. */ public ClassLoader getClassLoader(); /** Add a jar to the classpath used by the loader */ public void addJar( String jar ) throws IOException ; /** * Are we processing something that has been declared as an * errorpage? */ public boolean isErrorPage(); /** * What is the scratch directory we are generating code into? * FIXME: In some places this is called scratchDir and in some * other places it is called outputDir. */ public String getOutputDir(); /** * Path of the JSP URI. Note that this is not a file name. This is * the context rooted URI of the JSP file. */ public String getJspFile(); /** * Just the class name (does not include package org.apache.jasper34.generator11; * generated class. */ public String getServletClassName(); /** * The package org.apache.jasper34.generator11; */ public String getServletPackageName(); /** * Utility method to get the full class name from the package org.apache.jasper34.generator11; * class name. */ public String getFullClassName(); /** * Full path name of the Java file into which the servlet is being * generated. */ public String getServletJavaFileName(); /** * Are we keeping generated code around? */ public boolean keepGenerated(); /** * What's the content type of this JSP? Content type includes * content type and encoding. */ public String getContentType(); /** * Get hold of the Options object for this context. */ public Options getOptions(); public void setContentType(String contentType); // public void setReader(Object reader); // public void setWriter(Object writer); public void setServletClassName(String servletClassName); public void setServletPackageName(String servletPackageName); public void setServletJavaFileName(String servletJavaFileName); public void setErrorPage(boolean isErrPage); // /** // * Create a "Compiler" object based on some init param data. This // * is not done yet. Right now we're just hardcoding the actual // * compilers that are created. // */ // public Compiler createCompiler() throws JasperException; /** * Get the full value of a URI relative to this compilations context */ public String resolveRelativeUri(String uri); /** * Gets a resource as a stream, relative to the meanings of this * context's implementation. *@returns a null if the resource cannot be found or represented * as an InputStream. */ public java.io.InputStream getResourceAsStream(String res); /** Get tag library info */ public TagLibraries getTagLibraries(); /** * Gets the actual path of a URI relative to the context of * the compilation. */ public String getRealPath(String path); public void log( String s, Throwable ex ); public String getString( String key, Object par[] ); public String getString( String key ); public String debug( String key, Object params[] ); public String log( String key, Object params[] ); } 1.1 jakarta-tomcat/proposals/jasper34/generator/org/apache/jasper34/core/Options.java Index: Options.java =================================================================== /* * $Header: /home/cvs/jakarta-tomcat/proposals/jasper34/generator/org/apache/jasper34/core/Options.java,v 1.1 2001/05/04 20:00:28 costin Exp $ * $Revision: 1.1 $ * $Date: 2001/05/04 20:00:28 $ * * ==================================================================== * * The Apache Software License, Version 1.1 * * Copyright (c) 1999 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, if * any, must include the following acknowlegement: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "Tomcat", and "Apache Software * Foundation" must not be used to endorse or promote products derived * from this software without prior written permission. For written * permission, please contact [EMAIL PROTECTED] * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * <http://www.apache.org/>. * */ package org.apache.jasper34.core; import java.io.File; import javax.servlet.ServletConfig; import javax.servlet.ServletContext; /** * A class to hold all init parameters specific to the JSP engine. * * @author Anil K. Vijendran * @author Hans Bergsten */ public interface Options { /** * Are we keeping generated code around? */ public boolean getKeepGenerated(); /** * Are we supporting large files? */ public boolean getLargeFile(); /** * Are we supporting HTML mapped servlets? */ public boolean getMappedFile(); /** * Should errors be sent to client or thrown into stderr? */ public boolean getSendErrorToClient(); /** * Should we include debug information in compiled class? */ public boolean getClassDebugInfo(); /** * Class ID for use in the plugin tag when the browser is IE. */ public String getIeClassId(); /** * What is my scratch dir? */ public File getScratchDir(); /** * What classpath should I use while compiling the servlets * generated from JSP files? */ public String getClassPath(); /** * What compiler plugin should I use to compile the servlets * generated from JSP files? */ public Class getJspCompilerPlugin(); /** * Path of the compiler to use for compiling JSP pages. */ public String getJspCompilerPath(); /** * ProtectionDomain for this JSP Context when using a SecurityManager */ public Object getProtectionDomain(); /** * Java platform encoding to generate the JSP * page servlet. */ public String getJavaEncoding(); } 1.1 jakarta-tomcat/proposals/jasper34/generator/org/apache/jasper34/core/TagLibraries.java Index: TagLibraries.java =================================================================== /* * The Apache Software License, Version 1.1 * * Copyright (c) 1999 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, if * any, must include the following acknowlegement: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "Tomcat", and "Apache Software * Foundation" must not be used to endorse or promote products derived * from this software without prior written permission. For written * permission, please contact [EMAIL PROTECTED] * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * <http://www.apache.org/>. * */ package org.apache.jasper34.core; import java.lang.reflect.Constructor; import java.util.Hashtable; import javax.servlet.jsp.tagext.TagLibraryInfo; import javax.servlet.jsp.tagext.TagInfo; import javax.servlet.jsp.tagext.Tag; //import org.apache.jasper.Constants; //import org.apache.jasper.JasperException; /** * A container for all tag libraries that have been imported using * the taglib directive. * * @author Anil K. Vijendran * @author Mandar Raje */ public class TagLibraries { JspCompilationContext context; public TagLibraries(JspCompilationContext context, ClassLoader cl) { this.context=context; this.tagLibInfos = new Hashtable(); this.tagCaches = new Hashtable(); this.cl = cl; } public void addTagLibrary(String prefix, TagLibraryInfo tli) { tagLibInfos.put(prefix, tli); } public boolean isUserDefinedTag(String prefix, String shortTagName) throws JasperException { TagLibraryInfo tli = (TagLibraryInfo) tagLibInfos.get(prefix); if (tli == null) return false; else if (tli.getTag(shortTagName) != null) return true; throw new JasperException(context.getString("jsp.error.bad_tag", new Object[] { shortTagName, prefix } )); } public TagLibraryInfo getTagLibInfo(String prefix) { return (TagLibraryInfo) tagLibInfos.get(prefix); } // XXX REFACTORED public Object getTagCache(String prefix, String shortTagName) { return tagCaches.get(new TagID(prefix, shortTagName)); } public void putTagCache(String prefix, String shortTagName, Object tc) { tagCaches.put(new TagID(prefix, shortTagName), tc); } private Hashtable tagLibInfos; private Hashtable tagCaches; private ClassLoader cl; private static class TagID { private String prefix; private String shortTagName; public TagID(String prefix, String shortTagName) { this.prefix = prefix; this.shortTagName = shortTagName; } public boolean equals(Object obj) { return (prefix.equals(((TagID)obj).prefix)) && (shortTagName.equals(((TagID)obj).shortTagName)); } public int hashCode() { return prefix.hashCode() + shortTagName.hashCode(); } } }