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();
        }
      }
  }
  
  
  
  

Reply via email to