cedric      2002/11/05 06:16:41

  Added:       src/share/org/apache/struts/tiles DefaultTilesUtilImpl.java
                        StrutsModulesTilesUtilImpl.java TilesUtil.java
                        TilesUtilInterface.java
  Log:
  Let TilesPlugin be struts 1.1 module aware:
    Change the initialization method,
    Add a configurable TilesUtil class
    Change other class accordingly
  
  Revision  Changes    Path
  1.1                  
jakarta-struts/src/share/org/apache/struts/tiles/DefaultTilesUtilImpl.java
  
  Index: DefaultTilesUtilImpl.java
  ===================================================================
  /*
   * $Header: 
/home/cvs/jakarta-struts/src/share/org/apache/struts/tiles/DefaultTilesUtilImpl.java,v 
1.1 2002/11/05 14:16:41 cedric Exp $
   * $Revision: 1.1 $
   * $Date: 2002/11/05 14:16:41 $
   *
   * ====================================================================
   *
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 1999-2002 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", "Struts", 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.struts.tiles;
  
  import org.apache.struts.tiles.definition.ComponentDefinitionsFactoryWrapper;
  
  import javax.servlet.*;
  import javax.servlet.http.*;
  import java.io.IOException;
  import org.apache.commons.logging.Log;
  import org.apache.commons.logging.LogFactory;
  
    /**
     * Default implementation of TilesUtil.
     * This class conatains default implementation of utilities. This implementation
     * is intended to be used without Struts
     */
  public class DefaultTilesUtilImpl implements TilesUtilInterface
  {
       /** Commons Logging instance.*/
    protected Log log = LogFactory.getLog(DefaultTilesUtilImpl.class);
  
      /** Constant name used to store factory in servlet context */
    public static final String DEFINITIONS_FACTORY = 
"org.apache.struts.tiles.DEFINITIONS_FACTORY";
  
      /**
       * Do a forward using request dispatcher.
       *
       * This method is used by the Tiles package anytime a forward is required.
       * @param uri Uri or Definition name to forward
       * @param request Current page request
       * @param servletContext Current servlet context
       */
    public void doForward(String uri, HttpServletRequest request, HttpServletResponse 
response,
                          ServletContext servletContext)
      throws IOException, ServletException
    {
    request.getRequestDispatcher( uri ).forward(request, response);
    }
  
      /**
       * Do an include using request dispatcher.
       *
       * This method is used by the Tiles package anytime an include is required.
       * @param uri Uri or Definition name to forward
       * @param request Current page request
       * @param response Current page response
       * @param servletContext Current servlet context
       */
    public void doInclude(String uri, HttpServletRequest request, HttpServletResponse 
response,
                          ServletContext servletContext)
      throws IOException, ServletException
    {
    request.getRequestDispatcher( uri ).include(request, response);
    }
  
      /**
       * Get the default definition factory from appropriate servlet context.
       * @param servletContext Current servlet context
       * @return Definitions factory or null if not found.
       */
    public DefinitionsFactory getDefaultDefinitionsFactory(ServletContext 
servletContext)
    {
    return (DefinitionsFactory)servletContext.getAttribute(DEFINITIONS_FACTORY);
    }
  
      /**
       * Get definition factory from appropriate servlet context.
       * @return Definitions factory or null if not found.
       */
    public DefinitionsFactory getDefinitionsFactory(ServletRequest request, 
ServletContext servletContext)
    {
    return (DefinitionsFactory)servletContext.getAttribute(DEFINITIONS_FACTORY);
    }
  
      /**
       * Create Definition factory from specified configuration object.
       * Create an instance of the factory , with the class specified in the config
       * object. Then, initialize this factory, and finally store the factory in
       * appropriate context by the way of
       * {@link #makeDefinitionsFactoryAccessible(DefinitionsFactory, ServletContext)}.
       * Factory creation is done by the way of {@link 
#createDefinitionFactoryInstance(String)}
       * <p>
       *
       * @param servletContext Servlet Context passed to newly created factory.
       * @param factoryConfig Configuration object passed to factory.
       * @return newly created factory of type specified in the config object.
       * @throws DefinitionsFactoryException If an error occur while initializing 
factory
       */
    public DefinitionsFactory createDefinitionsFactory(ServletContext servletContext, 
DefinitionsFactoryConfig factoryConfig)
      throws DefinitionsFactoryException
    {
        // Create configurable factory
      DefinitionsFactory factory = 
createDefinitionFactoryInstance(factoryConfig.getFactoryClassname());
      factory.init( factoryConfig, servletContext );
        // Make factory accessible from jsp tags (push it in appropriate context)
      makeDefinitionsFactoryAccessible(factory, servletContext );
      return factory;
    }
  
    /**
     * Create Definition factory of specified classname.
     * Factory class must extends the {@link DefinitionsFactory} class.
     * The factory is wrapped appropriately with {@link 
ComponentDefinitionsFactoryWrapper}
     * if it is instance of the deprecated ComponentDefinitionsFactory class.
     * @param classname Class name of the factory to create.
     * @return newly created factory.
     * @throws DefinitionsFactoryException If an error occur while initializing factory
     */
    protected DefinitionsFactory createDefinitionFactoryInstance(String classname)
      throws DefinitionsFactoryException
    {
    try
      {
      Class factoryClass = Class.forName(classname);
      Object factory = factoryClass.newInstance();
  
        // Backward compatibility : if factory classes implements old interface,
        // provide appropriate wrapper
      if( factory instanceof ComponentDefinitionsFactory )
        {
        factory = new ComponentDefinitionsFactoryWrapper( 
(ComponentDefinitionsFactory)factory );
        } // end if
      return (DefinitionsFactory)factory;
      }
     catch( ClassCastException ex )
      { // Bad classname
      throw new DefinitionsFactoryException( "Error - createDefinitionsFactory : 
Factory class '"
                                             + classname +" must implements 
'TilesDefinitionsFactory'.", ex );
      }
     catch( ClassNotFoundException ex )
      { // Bad classname
      throw new DefinitionsFactoryException( "Error - createDefinitionsFactory : Bad 
class name '"
                                             + classname +"'.", ex );
      }
     catch( InstantiationException ex )
      { // Bad constructor or error
      throw new DefinitionsFactoryException( ex );
      }
     catch( IllegalAccessException ex )
      { //
      throw new DefinitionsFactoryException( ex );
      }
    }
    /**
     * Make definition factory accessible to Tags.
     * Factory is stored in servlet context.
     * @param factory Factory to make accessible
     * @param servletContext Current servlet context
     */
   protected void makeDefinitionsFactoryAccessible(DefinitionsFactory factory, 
ServletContext servletContext)
    {
    servletContext.setAttribute(DEFINITIONS_FACTORY, factory);
    }
  
  }
  
  
  1.1                  
jakarta-struts/src/share/org/apache/struts/tiles/StrutsModulesTilesUtilImpl.java
  
  Index: StrutsModulesTilesUtilImpl.java
  ===================================================================
  /*
   * $Header: 
/home/cvs/jakarta-struts/src/share/org/apache/struts/tiles/StrutsModulesTilesUtilImpl.java,v
 1.1 2002/11/05 14:16:41 cedric Exp $
   * $Revision: 1.1 $
   * $Date: 2002/11/05 14:16:41 $
   *
   * ====================================================================
   *
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 1999-2002 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", "Struts", 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.struts.tiles;
  
  import org.apache.struts.tiles.definition.ComponentDefinitionsFactoryWrapper;
  import org.apache.struts.tiles.TilesRequestProcessor;
  
  import org.apache.struts.util.RequestUtils;
  import org.apache.struts.config.ApplicationConfig;
  import org.apache.struts.action.Action;
  
  import javax.servlet.*;
  import javax.servlet.http.*;
  import java.io.IOException;
  import org.apache.commons.logging.Log;
  import org.apache.commons.logging.LogFactory;
  
    /**
     * Implementation of TilesUtil for Struts multi modules.
     * Methods in this implementation are aware of the Struts module context.
     * <br>
     * <ul>
     * <li>The method getFactory(...) return the factory for the current struts
     * module.</li>
     * <li>Methods doForward() and doInclude() use their counterparts in the
     * current RequestProcessor.</li>
     * <li>The method createFactory(...) creates a factory for the current module and
     * stores it under appropriate property name.</li>
     * </ul>
     */
  public class StrutsModulesTilesUtilImpl extends DefaultTilesUtilImpl implements 
TilesUtilInterface
  {
       /** Commons Logging instance.*/
    protected Log log = LogFactory.getLog(StrutsModulesTilesUtilImpl.class);
  
      /**
       * Do a forward using request dispatcher.
       *
       * This method is used by the Tiles package anytime a forward is required.
       * @param uri Uri or Definition name to forward
       * @param request Current page request
       * @param response Current page response
       * @param servletContext Current servlet context
       */
    public void doForward(String uri, HttpServletRequest request, HttpServletResponse 
response,
                          ServletContext servletContext)
      throws IOException, ServletException
    {
    request.getRequestDispatcher( uri ).include(request, response);
    }
  
      /**
       * Do an include using request dispatcher.
       *
       * This method is used by the Tiles package anytime an include is required.
       * @param uri Uri or Definition name to forward
       * @param request Current page request
       * @param response Current page response
       * @param servletContext Current servlet context
       */
    public void doInclude(String uri, HttpServletRequest request, HttpServletResponse 
response,
                          ServletContext servletContext)
      throws IOException, ServletException
    {
      // modify uri
    request.getRequestDispatcher( uri ).forward(request, response);
    }
  
      /**
       * Get definition factory from appropriate servlet context.
       * @return Definitions factory or null if not found.
       */
    public DefinitionsFactory getDefinitionsFactory(ServletRequest request, 
ServletContext servletContext)
    {
    ApplicationConfig appConfig = getModuleConfig( (HttpServletRequest)request, 
servletContext);
    return 
(DefinitionsFactory)servletContext.getAttribute(DEFINITIONS_FACTORY+appConfig.getPrefix()
 );
    }
  
      /**
       * Create Definition factory from specified configuration object.
       * Create a ConfigurableDefinitionsFactory and initialize it with the 
configuration
       * object. This later can contains the factory classname to use.
       * Factory is made accessible from tags.
       * <p>
       * Fallback of several factory creation methods.
       *
       * @param servletContext Servlet Context passed to newly created factory.
       * @param factoryConfig Configuration object passed to factory.
       * @return newly created factory of type ConfigurableDefinitionsFactory.
       * @throws DefinitionsFactoryException If an error occur while initializing 
factory
       */
    public DefinitionsFactory createDefinitionsFactory(ServletContext servletContext, 
DefinitionsFactoryConfig factoryConfig)
      throws DefinitionsFactoryException
    {
        // Create configurable factory
      DefinitionsFactory factory = 
createDefinitionFactoryInstance(factoryConfig.getFactoryClassname());
      factory.init( factoryConfig, servletContext );
        // Make factory accessible from jsp tags (push it in appropriate context)
      makeDefinitionsFactoryAccessible(factory, servletContext );
      return factory;
    }
  
    /**
     * Make definition factory accessible to Tags.
     * Factory is stored in servlet context.
     * @param factory Factory to make accessible
     * @param servletContext Current servlet context
     */
   protected void makeDefinitionsFactoryAccessible(DefinitionsFactory factory, 
ServletContext servletContext)
    {
    String prefix = factory.getConfig().getFactoryName();
    servletContext.setAttribute(DEFINITIONS_FACTORY+prefix, factory);
    }
  
    /**
     * Get Tiles request processor associated to the current module.
     */
   protected TilesRequestProcessor getRequestProcessor(HttpServletRequest request, 
ServletContext servletContext)
    {
    ApplicationConfig appConfig = getModuleConfig( request, servletContext);
    return 
(TilesRequestProcessor)servletContext.getAttribute(Action.REQUEST_PROCESSOR_KEY+appConfig.getPrefix()
 );
    }
  
    /**
     * Get the current ApplicationConfig.
     * <br>
     * Lookup in the request, and do selectApplication if not found. The side effect
     * is that the Application object is set in the request if it was not present.
     */
   protected ApplicationConfig getModuleConfig(HttpServletRequest request, 
ServletContext servletContext)
    {
    ApplicationConfig appConfig = RequestUtils.getModuleConfig( request, 
servletContext);
    if(appConfig==null)
      {
        // ApplicationConfig not found in current request. Select it.
      RequestUtils.selectApplication(request, servletContext);
      appConfig = RequestUtils.getModuleConfig( request, servletContext);
      }
  
    return appConfig;
    }
  
  }
  
  
  1.1                  jakarta-struts/src/share/org/apache/struts/tiles/TilesUtil.java
  
  Index: TilesUtil.java
  ===================================================================
  /*
   * $Header: 
/home/cvs/jakarta-struts/src/share/org/apache/struts/tiles/TilesUtil.java,v 1.1 
2002/11/05 14:16:41 cedric Exp $
   * $Revision: 1.1 $
   * $Date: 2002/11/05 14:16:41 $
   *
   * ====================================================================
   *
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 1999-2002 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", "Struts", 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.struts.tiles;
  
  import javax.servlet.*;
  import javax.servlet.http.*;
  import java.io.IOException;
  import org.apache.commons.logging.Log;
  import org.apache.commons.logging.LogFactory;
  
    /**
     * Class containing utilities for Tiles.
     */
  public class TilesUtil
  {
       /** Commons Logging instance.*/
    protected static Log log = LogFactory.getLog(TilesUtil.class);
  
      /** The implementation of tilesUtilImpl */
    protected static TilesUtilInterface tilesUtilImpl = new DefaultTilesUtilImpl();
  
    protected static String test=null;
  
      /**
       * Static constructor for tests
       */
    public TilesUtil()
    {
    if(test==null)
      {
      test="initialized";
      log.warn( "TilesUtil is called for the first time" );
      }
     else
      {
      log.error( "TilesUtil is already initialized" );
      } // end if
    }
  
      /**
       * Get the real implementation.
       */
    static public TilesUtilInterface getTilesUtil()
    {
    return tilesUtilImpl;
    }
  
      /**
       * Set the real implementation.
       * This method should be called only once.
       * Successive calls have no effect.
       */
    static public void setTilesUtil(TilesUtilInterface tilesUtil)
    {
    if( implAlreadySet)
      return;
    tilesUtilImpl = tilesUtil;
    implAlreadySet = true;
    }
      /** Flag to know if internal implementation have been set by the setter method */
    private static boolean implAlreadySet=false;
  
      /**
       * Do a forward using request dispatcher.
       *
       * This method is used by the Tiles package anytime a forward is required.
       * @param uri Uri or Definition name to forward
       * @param request Current page request
       * @param response Current page response
       * @param servletContext Current servlet context
       */
    public static void doForward(String uri, HttpServletRequest request, 
HttpServletResponse response,
                          ServletContext servletContext)
                              throws IOException, ServletException
    {
    tilesUtilImpl.doForward(uri, request, response, servletContext);
    }
  
      /**
       * Do an include using request dispatcher.
       *
       * This method is used by the Tiles package anytime an include is required.
       * @param uri Uri or Definition name to forward
       * @param request Current page request
       * @param response Current page response
       * @param servletContext Current servlet context
       */
    public static void doInclude(String uri, HttpServletRequest request, 
HttpServletResponse response,
                          ServletContext servletContext)
          throws IOException, ServletException
    {
    tilesUtilImpl.doInclude(uri, request, response, servletContext);
    }
  
      /**
       * @param servletContext Current servlet context
       * @return Definitions factory or null if not found.
       */
    static  public DefinitionsFactory getDefaultDefinitionsFactory(ServletContext 
servletContext)
    {
    return tilesUtilImpl.getDefaultDefinitionsFactory(servletContext);
    }
  
      /**
       * Get definition factory from appropriate servlet context.
       * @return Definitions factory or null if not found.
       */
    static  public DefinitionsFactory getDefinitionsFactory(ServletRequest request, 
ServletContext servletContext)
    {
    return tilesUtilImpl.getDefinitionsFactory(request, servletContext);
    }
  
      /**
       * Create Definition factory from specified configuration object.
       * Create a ConfigurableDefinitionsFactory and initialize it with the 
configuration
       * object. This later can contains the factory classname to use.
       * Factory is made accessible from tags.
       * <p>
       * Fallback of several factory creation methods.
       *
       * @param servletContext Servlet Context passed to newly created factory.
       * @param factoryConfig Configuration object passed to factory.
       * @return newly created factory of type ConfigurableDefinitionsFactory.
       * @throws DefinitionsFactoryException If an error occur while initializing 
factory
       */
    public static DefinitionsFactory createDefinitionsFactory(ServletContext 
servletContext, DefinitionsFactoryConfig factoryConfig)
      throws DefinitionsFactoryException
    {
    return tilesUtilImpl.createDefinitionsFactory(servletContext, factoryConfig);
    }
  
    /**
     * Get a definition by its name.
     * First, retrieve definition factory, and then get requested definition.
     * Throw appropriate exception if definition or definition factory is not found.
     * @param definitionName Name of requested definition.
     * @param request Current servelet request
     * @param servletContext current servlet context
     * @throws FactoryNotFoundException Can't find definition factory.
     * @throws DefinitionsFactoryException General error in factory while getting 
definition.
     * @throws NoSuchDefinitionException No definition found for specified name
     */
    static public ComponentDefinition getDefinition(String definitionName, 
ServletRequest request, ServletContext servletContext)
      throws FactoryNotFoundException, DefinitionsFactoryException
    {
    try
      {
      return getDefinitionsFactory(request, 
servletContext).getDefinition(definitionName,
                                                         (HttpServletRequest)request,
                                                          servletContext);
      }
     catch( NullPointerException ex )
      {  // Factory not found in context
      throw new FactoryNotFoundException( "Can't get definitions factory from 
context." );
      }
    }
  
  
  }
  
  
  1.1                  
jakarta-struts/src/share/org/apache/struts/tiles/TilesUtilInterface.java
  
  Index: TilesUtilInterface.java
  ===================================================================
  /*
   * $Header: 
/home/cvs/jakarta-struts/src/share/org/apache/struts/tiles/TilesUtilInterface.java,v 
1.1 2002/11/05 14:16:41 cedric Exp $
   * $Revision: 1.1 $
   * $Date: 2002/11/05 14:16:41 $
   *
   * ====================================================================
   *
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 1999-2002 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", "Struts", 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.struts.tiles;
  
  import javax.servlet.*;
  import javax.servlet.http.*;
  import java.io.IOException;
  import org.apache.commons.logging.Log;
  import org.apache.commons.logging.LogFactory;
  
    /**
     * Class containing utilities for Tiles.
     */
  public interface TilesUtilInterface
  {
      /**
       * Do a forward using request dispatcher.
       *
       * This method is used by the Tiles package anytime a forward is required.
       * @param uri Uri or Definition name to forward
       * @param request Current page request
       * @param response Current page response
       * @param servletContext Current servlet context
       */
    public void doForward(String uri, HttpServletRequest request, HttpServletResponse 
response,
                          ServletContext servletContext)
          throws IOException, ServletException;
  
      /**
       * Do an include using request dispatcher.
       *
       * This method is used by the Tiles package anytime an include is required.
       * @param uri Uri or Definition name to forward
       * @param request Current page request
       * @param response Current page response
       * @param servletContext Current servlet context
       */
    public void doInclude(String uri, HttpServletRequest request, HttpServletResponse 
response,
                          ServletContext servletContext)
          throws IOException, ServletException;
  
      /**
       * Get the default definition factory from appropriate servlet context.
       * @param servletContext Current servlet context
       * @return Definitions factory or null if not found.
       */
    public DefinitionsFactory getDefaultDefinitionsFactory(ServletContext 
servletContext);
  
      /**
       * Get definition factory from appropriate servlet context.
       * Implementation can use the request to select the factory.
       * @param response Current page response
       * @param servletContext Current servlet context
       * @return Definitions factory or null if not found.
       */
    public DefinitionsFactory getDefinitionsFactory(ServletRequest request, 
ServletContext servletContext);
  
      /**
       * Create Definition factory from specified configuration object.
       * Create a ConfigurableDefinitionsFactory and initialize it with the 
configuration
       * object. This later can contains the factory classname to use.
       * Factory is made accessible from tags.
       * <p>
       * Fallback of several factory creation methods.
       *
       * @param servletContext Servlet Context passed to newly created factory.
       * @param factoryConfig Configuration object passed to factory.
       * @return newly created factory of type ConfigurableDefinitionsFactory.
       * @throws DefinitionsFactoryException If an error occur while initializing 
factory
       */
    public DefinitionsFactory createDefinitionsFactory(ServletContext servletContext, 
DefinitionsFactoryConfig factoryConfig)
      throws DefinitionsFactoryException;
  
  }
  
  

--
To unsubscribe, e-mail:   <mailto:struts-dev-unsubscribe@;jakarta.apache.org>
For additional commands, e-mail: <mailto:struts-dev-help@;jakarta.apache.org>

Reply via email to