You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by ki...@apache.org on 2002/11/23 02:36:49 UTC

cvs commit: jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/tagplugin TagPlugin.java TagPluginContext.java TagPluginFactory.java

kinman      2002/11/22 17:36:49

  Modified:    jasper2/src/share/org/apache/jasper/compiler Generator.java
                        Node.java
  Added:       jasper2/src/share/org/apache/jasper/compiler
                        TagPluginManager.java
               jasper2/src/share/org/apache/jasper/compiler/tagplugin
                        TagPlugin.java TagPluginContext.java
                        TagPluginFactory.java
  Log:
  - Define interfaces for tag plugins.
  - Modify Generator to prepare attributes that may be access from plugins.
  
  Revision  Changes    Path
  1.130     +83 -67    jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/Generator.java
  
  Index: Generator.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/Generator.java,v
  retrieving revision 1.129
  retrieving revision 1.130
  diff -u -r1.129 -r1.130
  --- Generator.java	22 Nov 2002 23:47:15 -0000	1.129
  +++ Generator.java	23 Nov 2002 01:36:49 -0000	1.130
  @@ -1558,6 +1558,8 @@
                   generateLocalVariables( out, n );
               }
   
  +	    prepareCustomAttributes(n, handlerInfo);
  +
   	    if (n.implementsSimpleTag()) {
   		generateCustomDoTag(n, handlerInfo, tagHandlerVar);
   	    } else {
  @@ -1879,6 +1881,69 @@
   	    }
   	}
   
  +	/**
  +	 * Preprocess the attributes for the custom tag, except fragment
  +	 * attributes.
  +	 */
  +	private void prepareCustomAttributes(Node.CustomTag n,
  +					     TagHandlerInfo handlerInfo)
  +                    throws JasperException {
  +
  +            Node.JspAttribute[] attrs = n.getJspAttributes();
  +            for (int i=0; i<attrs.length; i++) {
  +                String attrValue = attrs[i].getValue();
  +                if (attrValue == null) {
  +                    if (attrs[i].isNamedAttribute() ) {
  +                        if (!n.checkIfAttributeIsJspFragment(
  +				attrs[i].getName())) {
  +                            attrValue = generateNamedAttributeValue(
  +                                attrs[i].getNamedAttributeNode() );
  +                        }
  +                    }
  +                    else {
  +                        continue;
  +                    }
  +                }
  +                String attrName = attrs[i].getName();
  +
  +                Method m = null;
  +                Class[] c = null;
  +                if (attrs[i].isDynamic()) {
  +                    c = OBJECT_CLASS;
  +                } else {
  +                    m = handlerInfo.getSetterMethod(attrName);
  +                    if (m == null) {
  +                        err.jspError(n, "jsp.error.unable.to_find_method",
  +                                     attrName);
  +                    }
  +                    c = m.getParameterTypes();
  +                    // XXX assert(c.length > 0)
  +                }
  +
  +                if (attrs[i].isExpression()) {
  +                    // Do nothing
  +                } else if (attrs[i].isNamedAttribute()) {
  +                    if (!n.checkIfAttributeIsJspFragment(attrs[i].getName())
  +                            && !attrs[i].isDynamic()) {
  +                        attrValue = convertString(
  +                                c[0], attrValue, attrName,
  +                                handlerInfo.getPropertyEditorClass(attrName),
  +                                false);
  +                    }
  +                } else if (attrs[i].isELInterpreterInput()) {
  +                    // run attrValue through the expression interpreter
  +                    attrValue = JspUtil.interpreterCall(this.isTagFile,
  +                        attrValue, c[0], n.getPrefix(), "_jspx_fnmap" );
  +                } else {
  +                    attrValue = convertString(
  +                                c[0], attrValue, attrName,
  +                                handlerInfo.getPropertyEditorClass(attrName),
  +                                true);
  +                }
  +		attrs[i].setProcessedValue(attrValue);
  +	    }
  +	}
  +
   	private void generateCustomStart(Node.CustomTag n,
   					 TagHandlerInfo handlerInfo,
   					 String tagHandlerVar,
  @@ -2384,70 +2449,20 @@
   		out.println(");");
   	    }
   
  -	    Node.JspAttribute[] attrs = n.getJspAttributes();
  -	    for (int i=0; i<attrs.length; i++) {
  -		String attrValue = attrs[i].getValue();
  -		if (attrValue == null) {
  -                    if( attrs[i].isNamedAttribute() ) {
  -                        if( n.checkIfAttributeIsJspFragment( 
  -                            attrs[i].getName() ) ) 
  -                        {
  -                            // XXX - no need to generate temporary variable 
  -                            // here
  -                            attrValue = generateNamedAttributeJspFragment( 
  +            Node.JspAttribute[] attrs = n.getJspAttributes();
  +            for (int i=0; i<attrs.length; i++) {
  +                String attrValue = attrs[i].getProcessedValue();
  +		if (attrValue == null && attrs[i].isNamedAttribute() &&
  +			n.checkIfAttributeIsJspFragment(attrs[i].getName())) {
  +		    // XXX - no need to generate temporary variable here
  +		    attrValue = generateNamedAttributeJspFragment(
                                   attrs[i].getNamedAttributeNode(),
  -                                tagHandlerVar );
  -                        }
  -                        else {
  -                            attrValue = generateNamedAttributeValue( 
  -                                attrs[i].getNamedAttributeNode() );
  -                        }
  -                    } 
  -                    else {
  -                        continue;
  -                    }
  -		}
  -		String attrName = attrs[i].getName();
  -
  -		Method m = null;
  -		Class[] c = null;
  -		if (attrs[i].isDynamic()) {
  -		    c = OBJECT_CLASS;
  -		} else {
  -		    m = handlerInfo.getSetterMethod(attrName);
  -		    if (m == null) {
  -			err.jspError(n, "jsp.error.unable.to_find_method",
  -				     attrName);
  -		    }
  -		    c = m.getParameterTypes();
  -		    // XXX assert(c.length > 0)
  -		}
  -
  -		if (attrs[i].isExpression()) {
  -		    // Do nothing
  -		} else if (attrs[i].isNamedAttribute()) {
  -		    if (!n.checkIfAttributeIsJspFragment(attrs[i].getName())
  -			    && !attrs[i].isDynamic()) {
  -			attrValue = convertString(
  -                                c[0], attrValue, attrName,
  -				handlerInfo.getPropertyEditorClass(attrName),
  -				false);
  -		    }
  -		} else if (attrs[i].isELInterpreterInput()) {
  -                    // run attrValue through the expression interpreter
  -                    attrValue = JspUtil.interpreterCall(this.isTagFile,
  -                        attrValue, c[0], n.getPrefix(), "_jspx_fnmap" );
  -                } else {
  -		    attrValue = convertString(
  -                                c[0], attrValue, attrName,
  -				handlerInfo.getPropertyEditorClass(attrName),
  -				true);
  -		}
  -		
  -		if (attrs[i].isDynamic()) {
  -		    out.printin(tagHandlerVar);
  -		    out.print(".");
  -		    out.print("setDynamicAttribute(");
  +                                tagHandlerVar);
  +                }
  +                if (attrs[i].isDynamic()) {
  +                    out.printin(tagHandlerVar);
  +                    out.print(".");
  +                    out.print("setDynamicAttribute(");
                       String uri = attrs[i].getURI();
                       if( "".equals( uri ) || (uri == null) ) {
                           out.print( "null" );
  @@ -2455,6 +2470,7 @@
                       else {
                           out.print("\"" + attrs[i].getURI() + "\"");
                       }
  +
   		    out.print(", \"");
   		    out.print(attrs[i].getLocalName());
   		    out.print("\", ");
  @@ -2463,7 +2479,7 @@
   		} else {
   		    out.printin(tagHandlerVar);
   		    out.print(".");
  -		    out.print(m.getName());
  +		    out.print(handlerInfo.getSetterMethod(attrs[i].getName()).getName());
   		    out.print("(");
   		    out.print(attrValue);
   		    out.println(");");
  
  
  
  1.40      +18 -3     jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/Node.java
  
  Index: Node.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/Node.java,v
  retrieving revision 1.39
  retrieving revision 1.40
  diff -u -r1.39 -r1.40
  --- Node.java	8 Nov 2002 19:55:47 -0000	1.39
  +++ Node.java	23 Nov 2002 01:36:49 -0000	1.40
  @@ -1395,6 +1395,13 @@
   	private String uri;
   	private String localName;
   	private String value;
  +	/**
  +	 * Value of the attribute after being proccessed, so that it
  +	 * represents a Java expression, and not arbitary statements.
  +	 * Currently only for CustomTag 's.
  +	 * TODO: Maybe it's a good idea that it should contain NO EL.
  +	 */
  +	private String processedValue;
   	private boolean expression;
           private boolean el;
   	private boolean dynamic;
  @@ -1512,6 +1519,14 @@
   	 */
   	public boolean isDynamic() {
   	    return dynamic;
  +	}
  +
  +	public String getProcessedValue() {
  +	    return processedValue;
  +	}
  +
  +	public void setProcessedValue(String pv) {
  +	    processedValue = pv;
   	}
       }
   
  
  
  
  1.1                  jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/TagPluginManager.java
  
  Index: TagPluginManager.java
  ===================================================================
  /*
   * $Header: /home/cvs/jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/TagPluginManager.java,v 1.1 2002/11/23 01:36:49 kinman Exp $
   * $Revision: 1.1 $
   * $Date: 2002/11/23 01:36:49 $
   *
   * ====================================================================
   *
   * 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 apache@apache.org.
   *
   * 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.jasper.compiler;
  
  import java.util.*;
  import java.io.*;
  import org.apache.jasper.JasperException;
  import org.apache.jasper.xmlparser.ParserUtils;
  import org.apache.jasper.xmlparser.TreeNode;
  import org.apache.jasper.JspCompilationContext;
  import org.apache.jasper.compiler.tagplugin.TagPlugin;
  import org.apache.jasper.compiler.tagplugin.TagPluginFactory;
  import org.apache.jasper.compiler.tagplugin.TagPluginContext;
  
  /**
   * Manages tag plugin optimizations.
   * @author Kin-man Chung
   */
  
  public class TagPluginManager {
  
      static private final String plugInsXml = "tagPlugins.xml";
      private boolean initialized = false;
      private Hashtable tagPlugins = null;
      private JspCompilationContext ctxt;
  
  
      TagPluginManager(JspCompilationContext ctxt) {
  	this.ctxt = ctxt;
  	init();
      }
  
      private void init() {
  	if (initialized)
  	    return;
  
  	InputStream is = ctxt.getResourceAsStream(plugInsXml);
  	if (is == null)
  	    return;
  
  	TreeNode root = null;
  	try {
  	    root = (new ParserUtils()).parseXMLDocument(plugInsXml, is);
  	} catch (JasperException ex) {
  	}
  	if (root == null)
  	    return;
  
  	TreeNode tagPluginsNode = root.findChild("tag-plugins");
  	if (tagPluginsNode == null) {
  	    // Error
  	    return;
  	}
  
  	Iterator pluginList = tagPluginsNode.findChildren("tag-plugin");
  	while (pluginList.hasNext()) {
  	    TreeNode pluginNode = (TreeNode) pluginList.next();
              TreeNode tagClassNode = pluginNode.findChild("tag-class");
  	    if (tagClassNode == null) {
  		// Error
  		return;
  	    }
  	    String tagClass = tagClassNode.getBody().trim();
  	    TreeNode pluginClassNode = pluginNode.findChild("plugin-class");
  	    if (pluginClassNode == null) {
  		// Error
  		return;
  	    }
  
  	    String pluginClassStr = pluginClassNode.getBody();
  	    TagPlugin tagPlugin = null;
  	    try {
  		Class pluginClass = Class.forName(pluginClassStr);
  		tagPlugin = (TagPlugin) pluginClass.newInstance();
  	    } catch (ClassNotFoundException e) {
  	    } catch (InstantiationException e) {
  	    } catch (IllegalAccessException e) {
  	    }
  	    if (tagPlugin == null) {
  		return;
  	    }
  	    tagPlugins.put(tagClass, tagPlugin);
  	}
      }
  
      public TagPlugin getPlugInClass(Node.CustomTag n, ServletWriter out) {
  
  	if (tagPlugins == null) {
  	    return null;
  	}
  
  	TagPluginFactory tagPluginFactory = (TagPluginFactory)
  		tagPlugins.get(n.getTagHandlerClass().getName());
  	if (tagPluginFactory == null) {
  	    return null;
  	}
  
  	TagPluginContext tagPluginContext = new TagPluginContextImpl(n, out);
  	return tagPluginFactory.createTagPlugin(n.getName(), tagPluginContext);
      }
  
      static class TagPluginContextImpl implements TagPluginContext {
  	Node.CustomTag node;
  	ServletWriter out;
  
  	TagPluginContextImpl(Node.CustomTag n, ServletWriter out) {
  	    this.node = n;
  	    this.out = out;
  	}
  
  	public ServletWriter getServletWriter() {
  	    return out;
  	}
  
  	public boolean isScriptless() {
  	    return node.getChildInfo().isScriptless();
  	}
  
  	public String getAttributeValue(String attribute) {
  	    Node.JspAttribute[] attrs = node.getJspAttributes();
  	    for (int i=0; i < attrs.length; i++) {
  		if (attrs[i].getName().equals(attribute)) {
  		    return attrs[i].getProcessedValue();
  		}
  	    }
  	    return null;
  	}
      }
  }
  
  
  
  1.1                  jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/tagplugin/TagPlugin.java
  
  Index: TagPlugin.java
  ===================================================================
  /*
   * $Header: /home/cvs/jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/tagplugin/TagPlugin.java,v 1.1 2002/11/23 01:36:49 kinman Exp $
   * $Revision: 1.1 $
   * $Date: 2002/11/23 01:36:49 $
   *
   * ====================================================================
   *
   * 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 apache@apache.org.
   *
   * 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.jasper.compiler.tagplugin;
  
  /**
   * This interface is to be implemented by the plugin author, to supply
   * an alternate implementation of the tag handlers.  Used to specify
   * the Java codes that need to be generated when a tag is referenced.
   */
  
  public interface TagPlugin {
  
      /**
       * Invoked to generate Java codes at the start of a custom tag.
       */
      void atSTag();
  
      /**
       * Invoked to generate Java codes at the end of a custom tag.
       */
      void atETag();
  }
  
  
  
  
  1.1                  jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/tagplugin/TagPluginContext.java
  
  Index: TagPluginContext.java
  ===================================================================
  /*
   * $Header: /home/cvs/jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/tagplugin/TagPluginContext.java,v 1.1 2002/11/23 01:36:49 kinman Exp $
   * $Revision: 1.1 $
   * $Date: 2002/11/23 01:36:49 $
   *
   * ====================================================================
   *
   * 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 apache@apache.org.
   *
   * 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.jasper.compiler.tagplugin;
  
  import org.apache.jasper.compiler.ServletWriter;
  
  /**
   * This interface allows the plugin author to query about the properties
   * of the current tag, and to use Jasper resources, such as ServletWriter.
   */
  
  public interface TagPluginContext {
      /**
        * @return true if the body of the tag is scriptless.
        */
      boolean isScriptless();
  
      /**
       * Get the evaluated value of the given attribute for the current tag
       * @return null if the attribute is not specified, or a java expression
       *              that when evaluateed, represent the attribute value
       */
      String getAttributeValue(String attribute);
  
      /**
       * Used for outputting Java fragments to the output stream.
       */
      ServletWriter getServletWriter();
  }
  
  
  
  
  1.1                  jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/tagplugin/TagPluginFactory.java
  
  Index: TagPluginFactory.java
  ===================================================================
  /*
   * $Header: /home/cvs/jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/tagplugin/TagPluginFactory.java,v 1.1 2002/11/23 01:36:49 kinman Exp $
   * $Revision: 1.1 $
   * $Date: 2002/11/23 01:36:49 $
   *
   * ====================================================================
   *
   * 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 apache@apache.org.
   *
   * 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.jasper.compiler.tagplugin;
  
  /**
   * This interface is to be implemented by the plugin, to supply
   * an alternate implementation of the tag handlers.  Used for create
   * an instance of a TagPlugin.
   */
  
  public interface TagPluginFactory {
  
      /**
       * Invoked at the beginning of a custom tag.  Used to create a
       * TagPlugin object for the tag.
       * @param tagName The name of the current tag
       * @param tpContext A TagPlugContext created by Jasper containing context
       *                  informantion about the tag under compilation
       * @return a TagPlugin for the current tag, or a false if the plugin
       *         cannot be found or created and that Jasper should generate
       *         Tag API's as usual.
       */
  
      TagPlugin createTagPlugin(String tagName, TagPluginContext tpContext);
  }
  
  
  
  

--
To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>