cedric      01/12/27 09:41:35

  Added:       contrib/tiles/src/share/org/apache/struts/tiles
                        ActionController.java Controller.java
                        ControllerSupport.java TilesException.java
                        UrlController.java
               contrib/tiles/src/share/org/apache/struts/tiles/actions
                        DefinitionDispatcherAction.java NoOpAction.java
                        ReloadDefinitionsAction.java TilesAction.java
                        ViewDefinitionsAction.java
               contrib/tiles/src/share/org/apache/struts/tiles/beans
                        MenuItem.java SimpleMenuItem.java
               contrib/tiles/src/share/org/apache/struts/tiles/definition
                        ReloadableDefinitionsFactory.java
  Log:
  Add individual controller and reload capabilities
  Move actions in separate folder
  Create a bean folder repository
  
  Revision  Changes    Path
  1.1                  
jakarta-struts/contrib/tiles/src/share/org/apache/struts/tiles/ActionController.java
  
  Index: ActionController.java
  ===================================================================
  //Source file: H:\\TEMP\\generated\\org\\apache\\struts\\tiles\\ActionController.java
  
  package org.apache.struts.tiles;
  
  import org.apache.struts.action.Action;
  import org.apache.struts.action.ActionServlet;
  
  import java.io.IOException;
  import javax.servlet.http.HttpServletRequest;
  import javax.servlet.http.HttpServletResponse;
  import javax.servlet.ServletContext;
  import javax.servlet.ServletException;
  
  /**
   * Struts wrapper  implementation of Controller.
   * This implementation allows to wrap a Struts Action in a Controller
   */
  public class ActionController implements Controller
  {
      /** Struts action wrapped */
    private Action action;
  
     /**
      * Constructor.
      */
     public ActionController( Action action )
     {
      this.action = action;
     }
  
     /**
      * Method associated to a tile and called when immediately before tile is 
included.
      * This implementation call a Struts Action. No servlet is set by this method.
      *
      * @param tileContext Current tile context.
      * @param request Current request
      * @param response Current response
      * @param servletContext Current servlet context
      */
     public void perform(ComponentContext tileContext,
                         HttpServletRequest request, HttpServletResponse response,
                         ServletContext servletContext)
       throws ServletException, IOException
     {
     action.perform(null, null, request, response);
     }
  }
  
  
  
  1.1                  
jakarta-struts/contrib/tiles/src/share/org/apache/struts/tiles/Controller.java
  
  Index: Controller.java
  ===================================================================
  //Source file: H:\\TEMP\\generated\\org\\apache\\struts\\tiles\\Controller.java
  
  package org.apache.struts.tiles;
  
  import java.io.IOException;
  import javax.servlet.ServletException;
  import javax.servlet.http.HttpServletRequest;
  import javax.servlet.http.HttpServletResponse;
  import javax.servlet.ServletContext;
  
  /**
   * A controller is a piece of code called before rendering a jsp page.
   * A controller can be associated to a tile. See <insert> or <definition> for
   * association syntax.
   */
  public interface Controller
  {
  
     /**
      * Method associated to a tile and called when immediately before tile is 
included.
      * @param tileContext Current tile context.
      * @param request Current request
      * @param response Current response
      * @param servletContext Current servlet context
      */
     public void perform(ComponentContext tileContext,
                         HttpServletRequest request, HttpServletResponse response,
                         ServletContext servletContext)
          throws ServletException, IOException;
  }
  
  
  
  1.1                  
jakarta-struts/contrib/tiles/src/share/org/apache/struts/tiles/ControllerSupport.java
  
  Index: ControllerSupport.java
  ===================================================================
  //Source file: 
H:\\TEMP\\generated\\org\\apache\\struts\\tiles\\ControllerSupport.java
  
  package org.apache.struts.tiles;
  
  import java.io.IOException;
  import javax.servlet.ServletException;
  import javax.servlet.http.HttpServletRequest;
  import javax.servlet.http.HttpServletResponse;
  import javax.servlet.ServletContext;
  
  /**
   * Basic implementation of Controller.
   */
  public class ControllerSupport implements Controller
  {
  
     /**
      * Method associated to a tile and called when immediately before tile is 
included.
      * This implementation do nothing.
      * @param tileContext Current tile context.
      * @param request Current request
      * @param response Current response
      * @param servletContext Current servlet context
      */
     public void perform(ComponentContext tileContext,
                         HttpServletRequest request, HttpServletResponse response,
                         ServletContext servletContext)
          throws ServletException, IOException
     {
  
     }
  }
  
  
  
  1.1                  
jakarta-struts/contrib/tiles/src/share/org/apache/struts/tiles/TilesException.java
  
  Index: TilesException.java
  ===================================================================
  //Source file: H:\\TEMP\\generated\\org\\apache\\struts\\tiles\\TilesException.java
  
  package org.apache.struts.tiles;
  
  
  /**
   * Root class of Tiles exception
   * @author Cedric Dumoulin
   */
  public class TilesException extends Exception
  {
  
  
    /**
     * Any "wrapped" exception will be exposed when this is serialized.
     * @serial
     */
    private Exception exception;
      /**
       * Constructor.
      * Create a new MapperFactoryException.
      *
      * @param message The error or warning message.
      */
    public TilesException()
      {
      super();
      this.exception = null;
    }
  
      /**
       * Constructor.
      * Create a new MapperFactoryException.
      *
      * @param message The error or warning message.
      */
    public TilesException(String message)
      {
      super(message);
      this.exception = null;
    }
  
  
    /**
      * Create a new MapperFactoryException wrapping an existing exception.
      *
      * <p>The existing exception will be embedded in the new
      * one, and its message will become the default message for
      * the MapperFactoryException.</p>
      *
      * @param e The exception to be wrapped in a SAXException.
      */
    public TilesException(Exception e)
    {
      super();
      this.exception = e;
    }
  
  
    /**
      * Create a new MapperFactoryException from an existing exception.
      *
      * <p>The existing exception will be embedded in the new
      * one, but the new exception will have its own message.</p>
      *
      * @param message The detail message.
      * @param e The exception to be wrapped in a MapperFactoryException.
      * @see org.xml.sax.Parser#setLocale
      */
    public TilesException(String message, Exception e)
    {
      super(message);
      this.exception = e;
    }
  
  
    /**
      * Return a detail message for this exception.
      *
      * <p>If there is a embedded exception, and if the MapperFactoryException
      * has no detail message of its own, this method will return
      * the detail message from the embedded exception.</p>
      *
      * @return The error or warning message.
      */
    public String getMessage ()
    {
      String message = super.getMessage ();
  
      if (message == null && exception != null) {
        return exception.getMessage();
      } else {
        return message;
      }
    }
  
  
    /**
      * Return the embedded exception, if any.
      *
      * @return The embedded exception, or null if there is none.
      */
    public Exception getException ()
    {
      return exception;
    }
  
  }
  
  
  
  1.1                  
jakarta-struts/contrib/tiles/src/share/org/apache/struts/tiles/UrlController.java
  
  Index: UrlController.java
  ===================================================================
  package org.apache.struts.tiles;
  
  import java.io.IOException;
  import javax.servlet.http.HttpServletRequest;
  import javax.servlet.http.HttpServletResponse;
  import javax.servlet.ServletContext;
  import javax.servlet.ServletException;
  import javax.servlet.RequestDispatcher;
  
  
  /**
   * Controller including a local URL
   * @author Cedric Dumoulin
   * @version
   */
  
  public class UrlController implements Controller
  {
  
      /** Url associated to this controller */
    protected String url;
  
      /**
       * Constructor.
       */
    public UrlController( String url )
    {
    this.url=url;
    }
  
     /**
      * Method associated to a tile and called when immediately before tile is 
included.
      * This implementation call a Struts Action. No servlet is set by this method.
      *
      * @param tileContext Current tile context.
      * @param request Current request
      * @param response Current response
      * @param servletContext Current servlet context
      */
     public void perform(ComponentContext tileContext,
                         HttpServletRequest request, HttpServletResponse response,
                         ServletContext servletContext)
       throws ServletException, IOException
     {
     RequestDispatcher rd = servletContext.getRequestDispatcher( url );
     if( rd == null )
       throw new ServletException( "Controller can't find url '" + url + "'." );
  
     rd.include( request, response );
     }
  
  }
  
  
  1.1                  
jakarta-struts/contrib/tiles/src/share/org/apache/struts/tiles/actions/DefinitionDispatcherAction.java
  
  Index: DefinitionDispatcherAction.java
  ===================================================================
  /*
   */
  
  
  package org.apache.struts.tiles.actions;
  
  import org.apache.struts.tiles.*;
  
  import java.io.IOException;
  import java.io.PrintWriter;
  import javax.servlet.ServletException;
  import javax.servlet.http.HttpServletRequest;
  import javax.servlet.http.HttpServletResponse;
  import javax.servlet.http.HttpSession;
  import org.apache.struts.action.Action;
  import org.apache.struts.action.ActionForm;
  import org.apache.struts.action.ActionForward;
  import org.apache.struts.action.ActionMapping;
  
  
  /**
   * <p>An <strong>Action</strong> that dispatches to a Tiles Definition
   * that is named by the request parameter whose name is specified
   * by the <code>parameter</code> property of the corresponding
   * ActionMapping.
   * This action is usefull in following situations :
   * <li>
   * <ul>To associate an Url to a definition</ul>
   * <ul>To use Struts <link> tag on a definition</ul>
   * </li>
   * <p>To configure the use of this action in your
   * <code>struts-config.xml</code> file, create an entry like this:</p>
   *
   * <code>
   *   &lt;action path="/saveSubscription"
   *           type="org.apache.struts.tiles.actions.DefinitionDispatcherAction"
   *           name="subscriptionForm"
   *          scope="request"
   *          input="/subscription.jsp"
   *      parameter="def"/&gt;
   * </code>
   *
   * <p>which will use the value of the request parameter named "def"
   * to pick the appropriate definition name.
   *
   * @author Niall Pemberton <[EMAIL PROTECTED]>
   * @author Craig R. McClanahan
   * @author Cedric Dumoulin
   * @version $Revision: 1.1 $ $Date: 2001/12/27 17:41:35 $
   */
  
  public final class DefinitionDispatcherAction extends Action {
  
      /**
       * Process the specified HTTP request, and create the corresponding HTTP
       * response (or forward to another web component that will create it).
       * Return an <code>ActionForward</code> instance describing where and how
       * control should be forwarded, or <code>null</code> if the response has
       * already been completed.
       *
       * @param servlet The ActionServlet making this request
       * @param mapping The ActionMapping used to select this instance
       * @param actionForm The optional ActionForm bean for this request (if any)
       * @param request The HTTP request we are processing
       * @param response The HTTP response we are creating
       *
       * @exception IOException if an input/output error occurs
       * @exception ServletException if a servlet exception occurs
       */
      public ActionForward perform(
                                   ActionMapping mapping,
                                   ActionForm form,
                                   HttpServletRequest request,
                                   HttpServletResponse response)
                            throws IOException, ServletException
      {
          // Identify the request parameter containing the method name
          // If none defined, use "def"
          String parameter = mapping.getParameter();
          if (parameter == null) {
            parameter = "def";
          }
  
          // Identify the method name to be dispatched to
          String name = request.getParameter(parameter);
          if (name == null)
            {
            String msg = "Definition dispatcher action : can't get parameter '"
                             + parameter + "'.";
            printError( response, msg );
            return (null);
            }
  
          // Try to dispatch to requested definition
        try
          {
            // Read definition from factory, but we can create it here.
          ComponentDefinition definition = DefinitionsUtil.getDefinition( name, 
request, getServlet().getServletContext() );
          DefinitionsUtil.setActionDefinition( request, definition);
          }
         catch( FactoryNotFoundException ex )
          {
          printError( response, "Error - DefinitionDispatcherAction : Can't get 
definition factory.");
          return (mapping.findForward(null));
          }
         catch( NoSuchDefinitionException ex )
          {
          printError( response, "Error - DefinitionDispatcherAction : Can't get 
definition '" + name +"'.");
          return (mapping.findForward(null));
          }
         catch( DefinitionsFactoryException ex )
          {
          printError( response, "Error - DefinitionDispatcherAction : General error '" 
+ ex.getMessage() +"'.");
          return (mapping.findForward(null));
          }
  
     return (mapping.findForward(null));
  
     }
  
    protected void printError( HttpServletResponse response, String msg )
        throws IOException
      {
      response.setContentType("text/plain");
      PrintWriter writer = response.getWriter();
      writer.println(msg);
      writer.flush();
      writer.close();
      }
  }
  
  
  
  
  1.1                  
jakarta-struts/contrib/tiles/src/share/org/apache/struts/tiles/actions/NoOpAction.java
  
  Index: NoOpAction.java
  ===================================================================
  /*
   */
  
  
  package org.apache.struts.tiles.actions;
  
  import java.io.IOException;
  import java.util.Locale;
  import java.util.Vector;
  import javax.servlet.RequestDispatcher;
  import javax.servlet.ServletException;
  import javax.servlet.http.HttpServletRequest;
  import javax.servlet.http.HttpSession;
  import javax.servlet.http.HttpServletResponse;
  import org.apache.struts.action.Action;
  import org.apache.struts.action.ActionForm;
  import org.apache.struts.action.ActionForward;
  import org.apache.struts.action.ActionMapping;
  import org.apache.struts.action.ActionServlet;
  import org.apache.struts.util.MessageResources;
  
  import org.apache.struts.util.RequestUtils;
  
  
  /**
   * Implementation of <strong>Action</strong> that populates an instance of
   * <code>SubscriptionForm</code> from the currently specified subscription.
   *
   * @author Cedric Dumoulin
   * @version $Revision: 1.1 $ $Date: 2001/12/27 17:41:35 $
   */
  
  public final class NoOpAction extends Action {
  
  
      // --------------------------------------------------------- Public Methods
  
  
      /**
       * No op action.
       * Action doing nothing.
       *
       * @param servlet The ActionServlet making this request
       * @param mapping The ActionMapping used to select this instance
       * @param actionForm The optional ActionForm bean for this request (if any)
       * @param request The HTTP request we are processing
       * @param response The HTTP response we are creating
       *
       * @exception IOException if an input/output error occurs
       * @exception ServletException if a servlet exception occurs
       */
      public ActionForward perform(
                                   ActionMapping mapping,
                                   ActionForm form,
                                   HttpServletRequest request,
                                   HttpServletResponse response)
                            throws IOException, ServletException
      {
        // No op action.
          return (mapping.findForward("success"));
      }
  
  
  }
  
  
  
  1.1                  
jakarta-struts/contrib/tiles/src/share/org/apache/struts/tiles/actions/ReloadDefinitionsAction.java
  
  Index: ReloadDefinitionsAction.java
  ===================================================================
  /*
   */
  
  
  package org.apache.struts.tiles.actions;
  
  import org.apache.struts.tiles.DefinitionsUtil;
  import org.apache.struts.tiles.DefinitionsFactoryException;
  import org.apache.struts.tiles.definition.ReloadableDefinitionsFactory;
  
  import java.io.IOException;
  import java.io.PrintWriter;
  import javax.servlet.ServletException;
  import javax.servlet.ServletContext;
  import javax.servlet.http.HttpServletRequest;
  import javax.servlet.http.HttpServletResponse;
  import javax.servlet.http.HttpSession;
  import org.apache.struts.action.Action;
  import org.apache.struts.action.ActionForm;
  import org.apache.struts.action.ActionForward;
  import org.apache.struts.action.ActionMapping;
  
  
  
  /**
   * <p>A standard <strong>Action</strong> that calls the
   * <code>reload()</code> method of our controller servlet to
   * reload its configuration information from the configuration
   * files (which have presumably been updated) dynamically.</p>
   *
   * @author Craig R. McClanahan
   * @author Cedric Dumoulin
   * @version $Revision: 1.1 $ $Date: 2001/12/27 17:41:35 $
   */
  
  public final class ReloadDefinitionsAction extends Action {
  
      /**
       * Process the specified HTTP request, and create the corresponding HTTP
       * response (or forward to another web component that will create it).
       * Return an <code>ActionForward</code> instance describing where and how
       * control should be forwarded, or <code>null</code> if the response has
       * already been completed.
       *
       * @param mapping The ActionMapping used to select this instance
       * @param actionForm The optional ActionForm bean for this request (if any)
       * @param request The HTTP request we are processing
       * @param response The HTTP response we are creating
       *
       * @exception IOException if an input/output error occurs
       * @exception ServletException if a servlet exception occurs
       */
      public ActionForward perform(
                                   ActionMapping mapping,
                                   ActionForm form,
                                   HttpServletRequest request,
                                   HttpServletResponse response)
                            throws IOException, ServletException
      {
          response.setContentType("text/plain");
          PrintWriter writer = response.getWriter();
  
          try {
            ServletContext context = getServlet().getServletContext();
              ReloadableDefinitionsFactory factory = 
(ReloadableDefinitionsFactory)DefinitionsUtil.getDefinitionsFactory(context );
              factory.reload(context);
              writer.println("OK");
          } catch (ClassCastException e) {
              writer.println("FAIL - " + e.toString());
              getServlet().log("ReloadAction", e);
          } catch (DefinitionsFactoryException e) {
              writer.println("FAIL - " + e.toString());
              getServlet().log("ReloadAction", e);
          }
  
          writer.flush();
          writer.close();
  
          return (null);
  
      }
  
  }
  
  
  
  
  1.1                  
jakarta-struts/contrib/tiles/src/share/org/apache/struts/tiles/actions/TilesAction.java
  
  Index: TilesAction.java
  ===================================================================
  package org.apache.struts.tiles.actions;
  
  import org.apache.struts.tiles.ComponentContext;
  
  import java.io.IOException;
  import javax.servlet.ServletException;
  import javax.servlet.http.HttpServletRequest;
  import javax.servlet.http.HttpSession;
  import javax.servlet.http.HttpServletResponse;
  import org.apache.struts.action.Action;
  import org.apache.struts.action.ActionForm;
  import org.apache.struts.action.ActionForward;
  import org.apache.struts.action.ActionMapping;
  import org.apache.struts.action.ActionServlet;
  
  /**
   * Base class for Tiles Actions.
   * This class as the same role as Struts Action. It provides a method perform(...)
   * called when action is invoked. The difference is that the perform() method takes
   * an additional parameter : tile context.
   * This class extends Struts Action. Subclasses should implements new perform() 
method
   * instead of Struts perform() method.
   * @version $Revision: 1.1 $ $Date: 2001/12/27 17:41:35 $
   */
  
  public abstract class TilesAction extends Action
  {
  
      /**
       * Original Struts Action's method.
       * Retrieve current Tile context, and call Tile's perform method.
       *
       * @param mapping The ActionMapping used to select this instance
       * @param actionForm The optional ActionForm bean for this request (if any)
       * @param request The HTTP request we are processing
       * @param response The HTTP response we are creating
       *
       * @exception IOException if an input/output error occurs
       * @exception ServletException if a servlet exception occurs
       */
      public ActionForward perform(
                                   ActionMapping mapping,
                                   ActionForm form,
                                   HttpServletRequest request,
                                   HttpServletResponse response)
                            throws IOException, ServletException
    {
      // Try to retrieve tile context
    ComponentContext context = ComponentContext.getContext( request );
      if( context == null )
        {
        throw new ServletException( "Can't find Tile context for '" + 
this.getClass().getName()
                                  + "'. TilesAction subclasses must be called from a 
Tile" );
        }
    return perform( context, mapping, form, request, response );
    }
  
      /**
       * Process the specified HTTP request, and create the corresponding HTTP
       * response (or forward to another web component that will create it).
       * Return an <code>ActionForward</code> instance describing where and how
       * control should be forwarded, or <code>null</code> if the response has
       * already been completed.
       * This method should be implemented by subclasses.
       *
       * @param context The current Tile context, containing Tile attributes
       * @param mapping The ActionMapping used to select this instance
       * @param actionForm The optional ActionForm bean for this request (if any)
       * @param request The HTTP request we are processing
       * @param response The HTTP response we are creating
       *
       * @exception IOException if an input/output error occurs
       * @exception ServletException if a servlet exception occurs
       */
      abstract public ActionForward perform( ComponentContext context,
                                   ActionMapping mapping,
                                   ActionForm form,
                                   HttpServletRequest request,
                                   HttpServletResponse response)
                            throws IOException, ServletException;
  }
  
  
  1.1                  
jakarta-struts/contrib/tiles/src/share/org/apache/struts/tiles/actions/ViewDefinitionsAction.java
  
  Index: ViewDefinitionsAction.java
  ===================================================================
  /*
   */
  
  
  package org.apache.struts.tiles.actions;
  
  import org.apache.struts.tiles.DefinitionsUtil;
  import org.apache.struts.tiles.DefinitionsFactoryException;
  import org.apache.struts.tiles.ComponentDefinitionsFactory;
  
  import java.io.IOException;
  import java.io.PrintWriter;
  import javax.servlet.ServletException;
  import javax.servlet.ServletContext;
  import javax.servlet.http.HttpServletRequest;
  import javax.servlet.http.HttpServletResponse;
  import javax.servlet.http.HttpSession;
  import org.apache.struts.action.Action;
  import org.apache.struts.action.ActionForm;
  import org.apache.struts.action.ActionForward;
  import org.apache.struts.action.ActionMapping;
  
  
  
  /**
   * <p>A standard <strong>Action</strong> that calls the
   * <code>reload()</code> method of our controller servlet to
   * reload its configuration information from the configuration
   * files (which have presumably been updated) dynamically.</p>
   *
   * @author Craig R. McClanahan
   * @author Cedric Dumoulin
   * @version $Revision: 1.1 $ $Date: 2001/12/27 17:41:35 $
   */
  
  public final class ViewDefinitionsAction extends Action {
  
      /**
       * Process the specified HTTP request, and create the corresponding HTTP
       * response (or forward to another web component that will create it).
       * Return an <code>ActionForward</code> instance describing where and how
       * control should be forwarded, or <code>null</code> if the response has
       * already been completed.
       *
       * @param mapping The ActionMapping used to select this instance
       * @param actionForm The optional ActionForm bean for this request (if any)
       * @param request The HTTP request we are processing
       * @param response The HTTP response we are creating
       *
       * @exception IOException if an input/output error occurs
       * @exception ServletException if a servlet exception occurs
       */
      public ActionForward perform(
                                   ActionMapping mapping,
                                   ActionForm form,
                                   HttpServletRequest request,
                                   HttpServletResponse response)
                            throws IOException, ServletException
      {
          response.setContentType("text/plain");
          PrintWriter writer = response.getWriter();
  
          try {
            ServletContext context = getServlet().getServletContext();
              ComponentDefinitionsFactory factory = 
DefinitionsUtil.getDefinitionsFactory(context );
              writer.println( factory );
          } catch (Exception e) {
              writer.println("FAIL - " + e.toString());
              getServlet().log("ReloadAction", e);
          }
  
          writer.flush();
          writer.close();
  
          return (null);
  
      }
  
  }
  
  
  
  
  1.1                  
jakarta-struts/contrib/tiles/src/share/org/apache/struts/tiles/beans/MenuItem.java
  
  Index: MenuItem.java
  ===================================================================
  package org.apache.struts.tiles.beans;
  
  import java.io.Serializable;
  
  
    /**
     * A bean MenuItem interface.
     *
     */
  public interface MenuItem extends Serializable
  {
      /**
       * Set value property
       */
    public void setValue(String value);
  
      /**
       * Get value property
       */
    public String getValue();
  
      /**
       * Set link property
       */
    public void setLink(String link);
  
      /**
       * Get link property
       */
    public String getLink();
  
      /**
       * Set icon property
       */
    public void setIcon(String link);
  
      /**
       * Get icon property
       */
    public String getIcon();
  
      /**
       * Set tooltip property
       */
    public void setTooltip(String link);
  
      /**
       * Get tooltip property
       */
    public String getTooltip();
  }
  
  
  1.1                  
jakarta-struts/contrib/tiles/src/share/org/apache/struts/tiles/beans/SimpleMenuItem.java
  
  Index: SimpleMenuItem.java
  ===================================================================
  package org.apache.struts.tiles.beans;
  
  import java.io.Serializable;
  
  
    /**
     * A bean MenuItem implementation.
     * Used to read menu item in definitions.
     */
  public class SimpleMenuItem implements MenuItem, Serializable
  {
  
    private String value;
    private String link;
    private String icon;
    private String tooltip;
  
      /**
       * Constructor.
       */
    public SimpleMenuItem()
    {
    }
      /**
       * Set value property
       */
    public void setValue(String value)
    {
      this.value = value;
    }
  
      /**
       * Get value property
       */
    public String getValue()
    {
      return value;
    }
  
      /**
       * Set link property
       */
    public void setLink(String link)
    {
      this.link = link;
    }
  
      /**
       * Get link property
       */
    public String getLink()
    {
      return link;
    }
  
      /**
       * Get icon property
       */
    public void setIcon(String icon)
    {
      this.icon = icon;
    }
  
      /**
       * Get icon property
       */
    public String getIcon()
    {
      return icon;
    }
  
      /**
       * Get tooltip property
       */
    public void setTooltip(String tooltip)
    {
      this.tooltip = tooltip;
    }
  
      /**
       * Get tooltip property
       */
    public String getTooltip()
    {
      return tooltip;
    }
  }
  
  
  1.1                  
jakarta-struts/contrib/tiles/src/share/org/apache/struts/tiles/definition/ReloadableDefinitionsFactory.java
  
  Index: ReloadableDefinitionsFactory.java
  ===================================================================
  /*
   * $Header: 
/home/cvs/jakarta-struts/contrib/tiles/src/share/org/apache/struts/tiles/definition/ReloadableDefinitionsFactory.java,v
 1.1 2001/12/27 17:41:35 cedric Exp $
   * $Revision: 1.1 $
   * $Date: 2001/12/27 17:41:35 $
   * $Author: cedric $
   *
   */
  
  
  package org.apache.struts.tiles.definition;
  
  import javax.servlet.ServletConfig;
  import javax.servlet.ServletContext;
  import javax.servlet.http.HttpServletRequest;
  import javax.servlet.ServletRequest;
  
  import java.util.Map;
  import java.util.HashMap;
  import java.util.Enumeration;
  
  import org.apache.struts.tiles.*;
  import org.apache.struts.tiles.xmlDefinition.I18nFactorySet;
  
  /**
   * A reloadable factory.
   * This factory is the main entrance to any factory implementation. It takes in
   * charge real implementation instance, and allows reload of it by creating a new
   * instance.
   *
   */
  public class ReloadableDefinitionsFactory implements ComponentDefinitionsFactory
  {
      /** The real factory instance */
    protected ComponentDefinitionsFactory factory;
      /** Initialization parameters */
    protected Map properties;
  
      /** Name of init property carrying factory class name */
    public static final String DEFINITIONS_FACTORY_CLASSNAME = 
"definitions-factory-class";
  
      /**
       * Constructor.
       * Create a factory according to servlet settings.
       * @throws DefinitionsFactoryException If factory creation fail.
       */
    public ReloadableDefinitionsFactory( ServletContext servletContext, ServletConfig 
servletConfig )
      throws DefinitionsFactoryException
    {
    properties = new ServletPropertiesMap( servletConfig );
    factory = createFactory( servletContext, properties);
    }
  
      /**
       * Constructor.
       * Create a factory according to servlet settings.
       * @throws DefinitionsFactoryException If factory creation fail.
       */
    public ReloadableDefinitionsFactory( ServletContext servletContext, Map properties 
)
      throws DefinitionsFactoryException
    {
    this.properties = properties;
    factory = createFactory( servletContext, properties);
    }
  
  
     /**
     * Create Definition factory from provided classname.
     * If a factory class name is provided, a factory of this class is created. 
Otherwise,
     * default factory is created.
     * Factory must have a constructor taking ServletContext and Map as parameter.
     * @param classname Class name of the factory to create.
     * @param servletContext Servlet Context passed to newly created factory.
     * @param properties Map of name/property passed to newly created factory.
     * @return newly created factory.
     * @throw DefinitionsFactoryException If an error occur while initializing factory
     */
    public ComponentDefinitionsFactory createFactoryFromClassname(ServletContext 
servletContext, Map properties, String classname)
      throws DefinitionsFactoryException
    {
    if( classname == null )
      return createFactory( servletContext, properties );
  
      // Try to create from classname
    try
      {
      Class factoryClass = Class.forName(classname);
      ComponentDefinitionsFactory factory = 
(ComponentDefinitionsFactory)factoryClass.newInstance();
      factory.initFactory( servletContext, properties);
      return factory;
      }
     catch( ClassCastException ex )
      { // Bad classname
      throw new DefinitionsFactoryException( "Error - createDefinitionsFactory : 
Factory class '"
                                             + classname +" must implements 
'ComponentDefinitionsFactory'.", 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 );
      }
  
    }
  
     /**
     * Create default Definition factory.
     * Factory must have a constructor taking ServletContext and Map as parameter.
     * In this implementation, default factory is of class I18nFactorySet
     * @param servletContext Servlet Context passed to newly created factory.
     * @param properties Map of name/property passed to newly created factory.
     * @return newly created factory.
     * @throw DefinitionsFactoryException If an error occur while initializing factory
     */
    public ComponentDefinitionsFactory createDefaultFactory(ServletContext 
servletContext, Map properties)
      throws DefinitionsFactoryException
    {
      ComponentDefinitionsFactory factory = new I18nFactorySet(servletContext, 
properties); ;
      return factory;
    }
  
     /**
     * Create Definition factory.
     * Convenience method. ServletConfig is wrapped into a Map allowing retrieval
     * of init parameters. Factory classname is also retrieved, as well as debug level.
     * Finally, approriate createDefinitionsFactory() is called.
     * @param servletContext Servlet Context passed to newly created factory.
     * @param servletConfig Servlet config containing parameters to be passed to newly 
created factory.
     */
    public ComponentDefinitionsFactory createFactory(ServletContext servletContext, 
Map properties)
      throws DefinitionsFactoryException
    {
      String classname = (String)properties.get(DEFINITIONS_FACTORY_CLASSNAME);
  
      return new I18nFactorySet( servletContext, properties );
    }
  
  
    /**
     * Get a definition by its name.
     * Call appropriate method on underlying factory instance.
     * Throw appropriate exception if definition or definition factory is not found.
     * @param name Name of requested definition.
     * @param request Current servelet request
     * @param servletContext current servlet context
     * @throw FactoryNotFoundException Can't find definition factory.
     * @throw DefinitionsFactoryException General error in factory while getting 
definition.
     * @throws NoSuchDefinitionException No definition found for specified name
     */
    public ComponentDefinition getDefinition(String definitionName, ServletRequest 
request, ServletContext servletContext)
      throws FactoryNotFoundException, DefinitionsFactoryException
    {
    return factory.getDefinition(definitionName, (HttpServletRequest)request, 
servletContext);
    }
  
    /**
     * Reload underlying factory.
     * Reload is done creating a new factory instance, and replacing old instance
     * by the new one.
     * @param request Current servelet request
     * @param servletContext current servlet context
     * @throws DefinitionsFactoryException If factory creation fail.
     */
    public void reload(ServletContext servletContext)
      throws DefinitionsFactoryException
    {
    ComponentDefinitionsFactory newInstance = createFactory( servletContext, 
properties);
    factory = newInstance;
    }
  
    /**
     * Get underlying factory instance.
     */
    public ComponentDefinitionsFactory getFactory()
    {
    return factory;
    }
  
     /**
       * Init factory.
       * This method is required by interface ComponentDefinitionsFactory. It is
       * not used in this implementation, as it manage itself underlying creation
       * and initialization.
       * @param servletContext Servlet Context passed to newly created factory.
       * @param properties Map of name/property passed to newly created factory.
       * Map can contains more properties than requested.
       * @throws DefinitionsFactoryException An error occur during initialization.
     */
     public void initFactory(ServletContext servletContext, Map properties) throws 
DefinitionsFactoryException
     {  // do nothing
     }
  
     /**
      * Get this object as a String
      */
     public String toString()
     {
     return factory.toString();
     }
  
    /**
     * Inner class.
     * Wrapper for ServletContext init parameters.
     * Object of this class is an hashmap containing parameters and values
     * defined in the servlet config file (web.xml).
     */
   class ServletPropertiesMap extends HashMap {
      /**
       * Constructor.
       */
    ServletPropertiesMap( ServletConfig config )
      {
        // This implementation is very simple.
        // It is possible to avoid creation of a new structure, but this need
        // imply writing all Map interface.
      Enumeration enum = config.getInitParameterNames();
      while( enum.hasMoreElements() )
        {
        String key = (String)enum.nextElement();
        put( key, config.getInitParameter( key ) );
        }
      }
  }  // end inner class
  }
  
  

--
To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>

Reply via email to