Thanks, Ted,
I'll be the first user of it :-) 

How do I get a hold of an instance that implements this interface?

Gabe



[EMAIL PROTECTED] wrote:
> 
> husted      02/02/22 02:17:33
> 
>   Added:       src/share/org/apache/struts/config
>                         ConfigHelperInterface.java ConfigHelper.java
>   Log:
>   Preliminary ConfigHelper to provide API support to alternate presentation layer.
>   This builds with the latest changes, but does not exploit them. Additional
>   changes to follow.
> 
>   Revision  Changes    Path
>   1.1                  
>jakarta-struts/src/share/org/apache/struts/config/ConfigHelperInterface.java
> 
>   Index: ConfigHelperInterface.java
>   ===================================================================
>   /*
>    * $Header: 
>/home/cvs/jakarta-struts/src/share/org/apache/struts/config/ConfigHelperInterface.java,v
> 1.1 2002/02/22 10:17:33 husted Exp $
>    * $Revision: 1.1 $
>    * $Date: 2002/02/22 10:17:33 $
>    *
>    * ====================================================================
>    *
>    * The Apache Software License, Version 1.1
>    *
>    * Copyright (c) 1999-2001 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.config;
> 
> 
>   import java.util.Iterator;
>   import java.util.Locale;
>   import javax.sql.DataSource;
> 
>   import org.apache.struts.action.ActionErrors;
>   import org.apache.struts.action.ActionMapping;
>   import org.apache.struts.action.ActionMappings;
>   import org.apache.struts.action.ActionMessages;
>   import org.apache.struts.action.ActionForm;
>   import org.apache.struts.action.ActionFormBean;
>   import org.apache.struts.action.ActionFormBeans;
>   import org.apache.struts.action.ActionForward;
>   import org.apache.struts.action.ActionForwards;
> 
>   import org.apache.struts.upload.MultipartRequestWrapper;
>   import org.apache.struts.util.MessageResources;
> 
>   // since 1.1
>   import org.apache.struts.action.ActionMessages;
> 
> 
>   /**
>    * NOTE: THIS CLASS IS UNDER ACTIVE DEVELOPMENT.
>    * THE CURRENT CODE IS WRITTEN FOR CLARITY NOT EFFICIENCY.
>    * NOT EVERY API FUNCTION HAS BEEN IMPLEMENTED YET.
>    *
>    * A helper object to expose the Struts shared resources,
>    * which are be stored in the application, session, or
>    * request contexts, as appropriate.
>    *
>    * An instance should be created for each request
>    * processed. The  methods which return resources from
>    * the request or session contexts are not thread-safe.
>    *
>    * Provided for use by other servlets in the application
>    * so they can easily access the Struts shared resources.
>    *
>    * The resources are stored under attributes in the
>    * application, session, or request contexts.
>    *
>    * The ActionConfig methods simply return the resources
>    * from under the context and key used by the Struts
>    * ActionServlet when the resources are created.
>    *
>    * @since 1.1
>    * @author Ted Husted
>    * @version $Revision: 1.1 $ $Date: 2002/02/22 10:17:33 $
>    */
>   public interface ConfigHelperInterface {
> 
> 
>   // ------------------------------------------------ Application Context
> 
>       public DataSource getDataSource();
> 
> 
>       /**
>        * The <code>org.apache.struts.action.ActionFormBeans</code> collection
>        * for this application.
>        */
>       public ActionMessages getActionMessages();
> 
> 
>       /**
>        * The <code>org.apache.struts.action.ActionFormBeans</code> collection
>        * for this application.
>        */
>       public ActionFormBeans getActionFormBeans();
> 
> 
>       /**
>        * The <code>org.apache.struts.action.ActionForwards</code> collection
>        * for this application.
>        */
>       public ActionForwards getActionForwards();
> 
> 
>       /**
>        * The context attributes key under which our
>        * <code>org.apache.struts.action.ActionMappings</code> collection
>        * is normally stored, unless overridden when initializing our
>        * ActionServlet.
>        */
>       public ActionMappings getActionMappings();
> 
> 
>       /**
>        * The application resources for this application.
>        */
>       public MessageResources getMessageResources();
> 
> 
>       /**
>        * The path-mapped pattern (<code>/action/*</code>) or
>        * extension mapped pattern ((<code>*.do</code>)
>        * used to determine our Action URIs in this application.
>        */
>       public String getServletMapping();
> 
> 
>   // ---------------------------------------------------- Session Context
> 
> 
>       /**
>        * The <code>java.util.Locale</code> for the user, if any.
>        * If a default locale object is not in the user's session,
>        * the system default locale is returned.
>        * If used, the user locale is typically set during login
>        * processing under the key <code>Action.LOCALE_KEY</code>.
>        */
>       public Locale getLocale();
> 
> 
>       /**
>        * The transaction token stored in this session, if it is used.
>        */
>       public String getToken();
> 
> 
>   // ---------------------------------------------------- Request Context
> 
> 
>       /**
>        * The <code>org.apache.struts.action.ActionErrors</code> object,
>        * for this request.
>        */
>       public ActionErrors getActionErrors();
> 
> 
>       /**
>        * The runtime JspException that may be been thrown by a Struts tag
>        * extension, or compatible presentation extension, and placed
>        * in the request.
>        */
>       public Throwable getException();
> 
> 
>       /**
>        * The multipart object for this request.
>        */
>       public MultipartRequestWrapper getMultipartRequestWrapper();
> 
> 
>      /**
>        * The <code>org.apache.struts.ActionMapping</code>
>        * instance for this request.
>        */
>       public ActionMapping getMapping();
> 
> 
> 
>   // ---------------------------------------------------- Utility Methods
> 
>       /**
>        * Return true if a message string for the specified message key
>        * is present for the user's Locale.
>        *
>        * @param key Message key
>        */
>       public boolean isMessage(String key);
> 
> 
> 
>       /*
>        * Retrieve and return the <code>ActionForm</code> bean associated with
>        * this mapping, creating and stashing one if necessary.  If there is no
>        * form bean associated with this mapping, return <code>null</code>.
>        *
>        */
>        public ActionForm getActionForm();
> 
> 
> 
>       /**
>        * Return the form bean definition associated with the specified
>        * logical name, if any; otherwise return <code>null</code>.
>        *
>        * @param name Logical name of the requested form bean definition
>        */
>       public ActionFormBean getFormBean(String name);
> 
> 
> 
>       /**
>        * Return the forwarding associated with the specified logical name,
>        * if any; otherwise return <code>null</code>.
>        *
>        * @param name Logical name of the requested forwarding
>        */
>       public ActionForward getActionForward(String name);
> 
> 
> 
>       /**
>        * Return the mapping associated with the specified request path, if any;
>        * otherwise return <code>null</code>.
>        *
>        * @param path Request path for which a mapping is requested
>        */
>       public ActionMapping getActionMapping(String path);
> 
> 
> 
>       /**
>        * Return the form action converted into an action mapping path.  The
>        * value of the <code>action</code> property is manipulated as follows in
>        * computing the name of the requested mapping:
>        * <ul>
>        * <li>Any filename extension is removed (on the theory that extension
>        *     mapping is being used to select the controller servlet).</li>
>        * <li>If the resulting value does not start with a slash, then a
>        *     slash is prepended.</li>
>        * </ul>
>        * :FIXME: Bad assumption =:o)
>        */
>       public String getActionMappingName(String action);
> 
> 
> 
>       /**
>        * Return the form action converted into a server-relative URL.
>        */
>       public String getActionMappingURL(String action);
> 
> 
> 
>       /**
>        * Return the url encoded to maintain the user session, if any.
>        */
>       public String getEncodeURL(String url);
> 
> 
> 
>   // ------------------------------------------------ Presentation API
> 
> 
>       /**
>        * Renders the reference for a HTML <base> element
>        *
>        * @author Luis Arias <[EMAIL PROTECTED]>
>        * @author Ted Husted
>        */
>       public String getOrigRef();
> 
> 
> 
>       /**
>        * Renders the reference for a HTML <base> element
>        *
>        * @author Luis Arias <[EMAIL PROTECTED]>
>        * @author Ted Husted
>        */
>       public String getBaseRef();
> 
> 
> 
>       /**
>        * Return the path for the specified forward,
>        * otherwise return <code>null</code>.
>        *
>        * @param name Name given to local or global forward.
>        */
>        public String getLink(String name);
> 
> 
>       /**
>        * Return the localized message for the specified key,
>        * otherwise return <code>null</code>.
>        *
>        * @param key Message key
>        */
>       public String getMessage(String key);
> 
> 
>       /**
>        * Look up and return a message string, based on the specified parameters.
>        *
>        * @param key Message key to be looked up and returned
>        * @param args Replacement parameters for this message
>        */
>       public String getMessage(String key, Object args[]);
> 
> 
>       /**
>        * Return the URL for the specified ActionMapping,
>        * otherwise return <code>null</code>.
>        *
>        * @param name Name given to local or global forward.
>        */
>       public String getAction(String path);
> 
> 
>       /**
>        * Return the number of error messages.
>        */
>       public int getErrorSize();
> 
> 
>       /**
>        * Return true if there are no errors queued
>        */
>       public boolean getErrorsEmpty();
> 
> 
>       /**
>        * Return the error messages
>        */
>       public Iterator getErrors();
> 
> 
>       /**
>        * Returns the errors.header, any errors, and the errors.footer.
>        */
>       public String getErrorOutput();
> 
> 
>       /**
>        * Return the number of error messages.
>        *
>        * @param property Property name
>        */
>       public int getErrorSize(String property);
> 
> 
>       /**
>        * Returns the errors.header, any errors, and the errors.footer.
>        *
>        * @param property Property name
>        */
>       public String getErrorOutput(String property);
> 
> 
>       /**
>        * Return an ActionError for a property
>        *
>        * @param property Property name
>        */
>       public Iterator getErrors(String property);
> 
> 
>   }
> 
> 
> 
>   1.1                  
>jakarta-struts/src/share/org/apache/struts/config/ConfigHelper.java
> 
>   Index: ConfigHelper.java
>   ===================================================================
>   /*
>    * $Header: 
>/home/cvs/jakarta-struts/src/share/org/apache/struts/config/ConfigHelper.java,v 1.1 
>2002/02/22 10:17:33 husted Exp $
>    * $Revision: 1.1 $
>    * $Date: 2002/02/22 10:17:33 $
>    *
>    * ====================================================================
>    *
>    * The Apache Software License, Version 1.1
>    *
>    * Copyright (c) 1999-2001 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.config;
> 
> 
>   import javax.servlet.ServletContext;
>   import javax.servlet.http.HttpServlet;
>   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.ActionError;
> 
>   import java.util.Iterator;
>   import java.util.Locale;
>   import javax.sql.DataSource;
> 
>   import org.apache.struts.action.ActionErrors;
>   import org.apache.struts.action.ActionMapping;
>   import org.apache.struts.action.ActionMappings;
>   import org.apache.struts.action.ActionMessages;
>   import org.apache.struts.action.ActionForm;
>   import org.apache.struts.action.ActionFormBean;
>   import org.apache.struts.action.ActionFormBeans;
>   import org.apache.struts.action.ActionForward;
>   import org.apache.struts.action.ActionForwards;
> 
>   import org.apache.struts.upload.MultipartRequestWrapper;
>   import org.apache.struts.util.MessageResources;
> 
>   // since 1.1
>   import org.apache.struts.action.ActionMessages;
> 
> 
>   /**
>    * NOTE: THIS CLASS IS UNDER ACTIVE DEVELOPMENT.
>    * THE CURRENT CODE IS WRITTEN FOR CLARITY NOT EFFICIENCY.
>    * NOT EVERY API FUNCTION HAS BEEN IMPLEMENTED YET.
>    *
>    * A helper object to expose the Struts shared resources,
>    * which are be stored in the application, session, or
>    * request contexts, as appropriate.
>    *
>    * An instance should be created for each request
>    * processed. The  methods which return resources from
>    * the request or session contexts are not thread-safe.
>    *
>    * Provided for use by other servlets in the application
>    * so they can easily access the Struts shared resources.
>    *
>    * The resources are stored under attributes in the
>    * application, session, or request contexts.
>    *
>    * The ActionConfig methods simply return the resources
>    * from under the context and key used by the Struts
>    * ActionServlet when the resources are created.
>    *
>    * @since 1.1
>    * @author Ted Husted
>    * @version $Revision: 1.1 $ $Date: 2002/02/22 10:17:33 $
>    */
>   public class ConfigHelper implements ConfigHelperInterface {
> 
> 
>   // --------------------------------------------------------  Properites
> 
> 
>       /**
>        * The application associated with this instance.
>        */
>       private ServletContext application = null;
> 
> 
>       /**
>        * Set the application associated with this instance.
>        * [servlet.getServletContext()]
>        */
>       public void setApplication(ServletContext application) {
>           this.application = application;
>       }
> 
> 
>       /**
>        * The session associated with this instance.
>        */
>       private HttpSession session = null;
> 
> 
>       /**
>        * Set the session associated with this instance.
>        */
>       public void setSession(HttpSession session) {
>           this.session = session;
>       }
> 
> 
>       /**
>        * The request associated with this instance.
>        */
>       private HttpServletRequest request = null;
> 
> 
>       /**
>        * Set the request associated with this object.
>        * Session object is also set or cleared.
>        */
>       public void setRequest(HttpServletRequest request) {
>           this.request = request;
>           if (this.request==null)
>               setSession(null);
>           else
>               setSession(this.request.getSession());
>       }
> 
> 
>       /**
>        * The response associated with this instance.
>        */
>       private HttpServletResponse response = null;
> 
> 
>       /**
>        * Set the response associated with this isntance.
>        * Session object is also set or cleared.
>        */
>       public void setResponse(HttpServletResponse response) {
>           this.response = response;
>       }
> 
> 
>       /**
>        * The forward associated with this instance.
>        */
>       private ActionForward forward = null;
> 
> 
>       /**
>        * Set the forward associated with this instance.
>        */
>       public void setForward(ActionForward forward) {
>           this.forward = forward;
>       }
> 
> 
>       /**
>        * Set the application and request for this object instance.
>        * The ServletContext can be set by any servlet in the application.
>        * The request should be the instant request.
>        * Most of the other methods retrieve their own objects
>        * by reference to the application, request, or session
>        * attributes.
>        * Do not call other methods without setting these first!
>        * This is also called by the convenience constructor.
>        *
>        * @param application - The associated ServletContext.
>        * @param request - The associated HTTP request.
>        * @param response - The associated HTTP response.
>        */
>       public void setResources(ServletContext application,
>           HttpServletRequest request, HttpServletResponse response) {
>           setApplication(application);
>           setRequest(request);
>           setResponse(response);
>       }
> 
> 
>   // ------------------------------------------------ Application Context
> 
>       /**
>        * The strong>default</strong>
>        * configured data source (which must implement
>        * <code>javax.sql.DataSource</code>),
>        * if one is configured for this application.
>        */
>       public DataSource getDataSource() {
> 
>       if (this.application==null)
>           return null;
>       return (DataSource)
>           this.application.getAttribute(Action.DATA_SOURCE_KEY);
> 
>       }
> 
> 
>       public ActionMessages getActionMessages() {
> 
>           if (this.application==null)
>               return null;
>           return (ActionMessages)
>               this.application.getAttribute(Action.MESSAGE_KEY);
> 
>       }
> 
> 
>       /**
>        * The <code>org.apache.struts.action.ActionFormBeans</code> collection
>        * for this application.
>        */
>       public ActionFormBeans getActionFormBeans() {
> 
>           if (this.application==null)
>               return null;
>           return (ActionFormBeans)
>               this.application.getAttribute(Action.FORM_BEANS_KEY);
> 
>       }
> 
> 
>       /**
>        * The <code>org.apache.struts.action.ActionForwards</code> collection
>        * for this application.
>        */
>       public ActionForwards getActionForwards() {
> 
>           if (this.application==null)
>               return null;
>           return (ActionForwards)
>               this.application.getAttribute(Action.FORWARDS_KEY);
> 
>       }
> 
> 
>       /**
>        * The context attributes key under which our
>        * <code>org.apache.struts.action.ActionMappings</code> collection
>        * is normally stored, unless overridden when initializing our
>        * ActionServlet.
>        */
>       public ActionMappings getActionMappings() {
>           if (this.application==null)
>               return null;
>           return (ActionMappings)
>               this.application.getAttribute(Action.MAPPINGS_KEY);
>       }
> 
> 
>       /**
>        * The application resources for this application.
>        */
>       public MessageResources getMessageResources() {
> 
>           if (this.application==null)
>               return null;
>           return (MessageResources)
>               this.application.getAttribute(Action.MESSAGES_KEY);
> 
>       }
> 
> 
>       /**
>        * The path-mapped pattern (<code>/action/*</code>) or
>        * extension mapped pattern ((<code>*.do</code>)
>        * used to determine our Action URIs in this application.
>        */
>       public String getServletMapping() {
> 
>           if (this.application==null)
>               return null;
>           return (String)
>               this.application.getAttribute(Action.SERVLET_KEY);
> 
>       }
> 
> 
>   // ---------------------------------------------------- Session Context
> 
> 
>       /**
>        * The <code>java.util.Locale</code> for the user, if any.
>        * If a default locale object is not in the user's session,
>        * the system default locale is returned.
>        * If used, the user locale is typically set during login
>        * processing under the key <code>Action.LOCALE_KEY</code>.
>        */
>       public Locale getLocale() {
>           Locale locale = null;
> 
>           if (session!=null)
>               locale = (Locale) session.getAttribute(Action.LOCALE_KEY);
> 
>           if ((locale==null) && (request!=null))
>               locale = request.getLocale();
> 
>           return locale;
>       }
> 
> 
>       /**
>        * The transaction token stored in this session, if it is used.
>        */
>       public String getToken() {
> 
>           if (this.session==null) return null;
>           return (String) session.getAttribute(Action.TRANSACTION_TOKEN_KEY);
> 
>       }
> 
> 
>   // ---------------------------------------------------- Request Context
> 
> 
>       /**
>        * The <code>org.apache.struts.action.ActionErrors</code> object,
>        * for this request.
>        */
>       public ActionErrors getActionErrors() {
> 
>           if (this.request==null)
>               return null;
>           return (ActionErrors)
>               this.request.getAttribute(Action.ERROR_KEY);
> 
>       }
> 
> 
>       /**
>        * The runtime JspException that may be been thrown by a Struts tag
>        * extension, or compatible presentation extension, and placed
>        * in the request.
>        */
>       public Throwable getException() {
> 
>           if (this.request==null)
>               return null;
>           return (Throwable)
>               this.request.getAttribute(Action.EXCEPTION_KEY);
> 
>       }
> 
> 
>       /**
>        * The multipart object for this request.
>        */
>       public MultipartRequestWrapper getMultipartRequestWrapper() {
> 
>           if (this.request==null)
>               return null;
>           return (MultipartRequestWrapper)
>               this.request.getAttribute(Action.MULTIPART_KEY);
>       }
> 
> 
>      /**
>        * The <code>org.apache.struts.ActionMapping</code>
>        * instance for this request.
>        */
>       public ActionMapping getMapping() {
> 
>           if (this.request==null)
>               return null;
>           return (ActionMapping)
>               this.request.getAttribute(Action.MAPPING_KEY);
> 
>       }
> 
> 
> 
>   // ---------------------------------------------------- Utility Methods
> 
>       /**
>        * Return true if a message string for the specified message key
>        * is present for the user's Locale.
>        *
>        * @param key Message key
>        */
>       public boolean isMessage(String key) {
> 
>           // Look up the requested MessageResources
>           MessageResources resources = getMessageResources();
> 
>           if (resources == null) return false;
> 
>           // Return the requested message presence indicator
>           return (resources.isPresent(getLocale(), key));
> 
>       }
> 
> 
>       /*
>        * Retrieve and return the <code>ActionForm</code> bean associated with
>        * this mapping, creating and stashing one if necessary.  If there is no
>        * form bean associated with this mapping, return <code>null</code>.
>        *
>        */
>        public ActionForm getActionForm() {
> 
>           // Is there a mapping associated with this request?
>           ActionMapping mapping = getMapping();
>           if (mapping == null)
>               return (null);
> 
>           // Is there a form bean associated with this mapping?
>           String attribute = mapping.getAttribute();
>           if (attribute == null)
>               return (null);
> 
>           // Look up the existing form bean, if any
>           ActionForm instance = null;
>           if ("request".equals(mapping.getScope())) {
>               instance = (ActionForm) this.request.getAttribute(attribute);
>           } else {
>               instance = (ActionForm) this.session.getAttribute(attribute);
>           }
> 
>           return instance;
>       }
> 
> 
>       /**
>        * Return the form bean definition associated with the specified
>        * logical name, if any; otherwise return <code>null</code>.
>        *
>        * @param name Logical name of the requested form bean definition
>        */
>       public ActionFormBean getFormBean(String name) {
> 
>           ActionFormBeans formBeans = getActionFormBeans();
> 
>           if (formBeans==null)
>               return null;
>           return formBeans.findFormBean(name);
> 
>       }
> 
> 
>       /**
>        * Return the forwarding associated with the specified logical name,
>        * if any; otherwise return <code>null</code>.
>        *
>        * @param name Logical name of the requested forwarding
>        */
>       public ActionForward getActionForward(String name) {
> 
>           ActionForwards forwards = getActionForwards();
> 
>           if (forwards==null)
>               return null;
>           return forwards.findForward(name);
> 
>       }
> 
> 
>       /**
>        * Return the mapping associated with the specified request path, if any;
>        * otherwise return <code>null</code>.
>        *
>        * @param path Request path for which a mapping is requested
>        */
>       public ActionMapping getActionMapping(String path) {
> 
>           ActionMappings mappings = getActionMappings();
> 
>           if (mappings==null)
>               return null;
>           return mappings.findMapping(path);
> 
>       }
> 
> 
>       /**
>        * Return the form action converted into an action mapping path.  The
>        * value of the <code>action</code> property is manipulated as follows in
>        * computing the name of the requested mapping:
>        * <ul>
>        * <li>Any filename extension is removed (on the theory that extension
>        *     mapping is being used to select the controller servlet).</li>
>        * <li>If the resulting value does not start with a slash, then a
>        *     slash is prepended.</li>
>        * </ul>
>        */
>       public String getActionMappingName(String action) {
> 
>           String value = action;
>           int question = action.indexOf("?");
>           if (question >= 0)
>               value = value.substring(0, question);
>           int slash = value.lastIndexOf("/");
>           int period = value.lastIndexOf(".");
>           if ((period >= 0) && (period > slash))
>               value = value.substring(0, period);
>           if (value.startsWith("/"))
>               return (value);
>           else
>               return ("/" + value);
> 
>       }
> 
> 
>       /**
>        * Return the form action converted into a server-relative URL.
>        */
>       public String getActionMappingURL(String action) {
> 
>           StringBuffer value = new StringBuffer(this.request.getContextPath());
> 
>           // Use our servlet mapping, if one is specified
>           String servletMapping = getServletMapping();
> 
>           if (servletMapping != null) {
>               String queryString = null;
>               int question = action.indexOf("?");
>               if (question >= 0)
>                   queryString = action.substring(question);
>               String actionMapping = getActionMappingName(action);
>               if (servletMapping.startsWith("*.")) {
>                   value.append(actionMapping);
>                   value.append(servletMapping.substring(1));
>               } else if (servletMapping.endsWith("/*")) {
>                   value.append(servletMapping.substring
>                                (0, servletMapping.length() - 2));
>                   value.append(actionMapping);
>               }
>               if (queryString != null)
>                   value.append(queryString);
>           }
> 
>           // Otherwise, assume extension mapping is in use and extension is
>           // already included in the action property
>           else {
>               if (!action.startsWith("/"))
>                   value.append("/");
>               value.append(action);
>           }
> 
>           // Return the completed value
>           return (value.toString());
> 
>       }
> 
> 
> 
>       /**
>        * Return the url encoded to maintain the user session, if any.
>        */
>       public String getEncodeURL(String url) {
> 
>           if ((session!=null) && (response != null)) {
> 
>               boolean redirect = false;
>               if (forward!=null)
>                   redirect = forward.getRedirect();
> 
>               if (redirect)
>                   return response.encodeRedirectURL(url);
>               else
>                   return response.encodeURL(url);
>           } else
>               return (url);
>       }
> 
> 
> 
>   // ------------------------------------------------ Presentation API
> 
> 
>       /**
>        * Renders the reference for a HTML <base> element
>        *
>        * @author Luis Arias <[EMAIL PROTECTED]>
>        * @author Ted Husted
>        */
>       public String getOrigRef() {
> 
>    // HttpServletRequest request = (HttpServletRequest)pageContext.getRequest();
> 
>           if (request==null) return null;
> 
>           StringBuffer result = new StringBuffer();
>           result.append(request.getScheme());
>           result.append("://");
>           result.append(request.getServerName());
>           if ("http".equals(request.getScheme()) &&
>               (80 == request.getServerPort())) {
>               ;
>           } else if ("https".equals(request.getScheme()) &&
>                      (443 == request.getServerPort())) {
>               ;
>           } else {
>               result.append(":");
>               result.append(request.getServerPort());
>           }
>           result.append(request.getRequestURI());
> 
>           return result.toString();
>       }
> 
> 
>       /**
>        * Renders the reference for a HTML <base> element
>        *
>        * @author Luis Arias <[EMAIL PROTECTED]>
>        * @author Ted Husted
>        */
>       public String getBaseRef() {
> 
>           if (request==null) return null;
> 
>           StringBuffer result = new StringBuffer();
>           result.append(request.getScheme());
>           result.append("://");
>           result.append(request.getServerName());
>           if ("http".equals(request.getScheme()) &&
>               (80 == request.getServerPort())) {
>               ;
>           } else if ("https".equals(request.getScheme()) &&
>                      (443 == request.getServerPort())) {
>               ;
>           } else {
>               result.append(":");
>               result.append(request.getServerPort());
>           }
>           String path = null;
>           if (forward==null)
>               path = request.getRequestURI();
>           else
>               path = request.getContextPath() + forward.getPath();
>           result.append(path);
> 
>           return result.toString();
>       }
> 
> 
>       /**
>        * Return the path for the specified forward,
>        * otherwise return <code>null</code>.
>        *
>        * @param name Name given to local or global forward.
>        */
>        public String getLink(String name) {
> 
>           ActionForward forward = getActionForward(name);
>           if (forward == null)
>               return null;
> 
>          StringBuffer path = new StringBuffer(this.request.getContextPath());
>          path.append(forward.getPath());
> 
>          // :TODO: What about runtime parameters?
> 
>          return getEncodeURL( path.toString() );
> 
>       }
> 
> 
>       /**
>        * Return the localized message for the specified key,
>        * otherwise return <code>null</code>.
>        *
>        * @param key Message key
>        */
>       public String getMessage(String key) {
> 
>           MessageResources resources = getMessageResources();
>           if (resources == null)
>               return null;
>           return resources.getMessage(getLocale(),key);
> 
>       }
> 
> 
> 
>       /**
>        * Look up and return a message string, based on the specified parameters.
>        *
>        * @param key Message key to be looked up and returned
>        * @param args Replacement parameters for this message
>        */
>       public String getMessage(String key, Object args[]) {
> 
>           MessageResources resources = getMessageResources();
> 
>           if (resources == null) return null;
> 
>           // Return the requested message
>           if (args == null)
>               return (resources.getMessage(getLocale(), key));
>           else
>               return (resources.getMessage(getLocale(), key, args));
> 
>       }
> 
> 
> 
>       /**
>        * Return the URL for the specified ActionMapping,
>        * otherwise return <code>null</code>.
>        *
>        * @param name Name given to local or global forward.
>        */
>       public String getAction(String path) {
> 
>           return getEncodeURL( getActionMappingURL(path) );
> 
>       }
> 
> 
> 
>       /**
>        * Return the number of error messages.
>        */
>       public int getErrorSize() {
> 
>           ActionErrors actionErrors = getActionErrors();
> 
>           if (actionErrors == null)
>               return 0;
> 
>           return actionErrors.size();
>       }
> 
> 
> 
>       /**
>        * Return true if there are no errors queued
>        */
>       public boolean getErrorsEmpty() {
> 
>           ActionErrors actionErrors = getActionErrors();
> 
>           if (actionErrors == null)
>               return false;
> 
>           return actionErrors.empty();
>       }
> 
> 
>       /**
>        * Return the error messages
>        */
>       public Iterator getErrors() {
> 
>           ActionErrors actionErrors = getActionErrors();
> 
>           if (actionErrors == null)
>               return null;
> 
>           return actionErrors.get();
>       }
> 
> 
>       /**
>        * Return an ActionError for a property
>        *
>        * @param property Property name
>        */
>       public Iterator getErrors(String property) {
> 
>           ActionErrors actionErrors = getActionErrors();
> 
>           if (actionErrors == null)
>               return null;
> 
>           return actionErrors.get(property);
>       }
> 
> 
>       /**
>        * Return the number of error messages.
>        *
>        * @param property Property name
>        */
>       public int getErrorSize(String property) {
> 
>           ActionErrors actionErrors = getActionErrors();
> 
>           if (actionErrors == null)
>               return 0;
> 
>           return actionErrors.size(property);
>       }
> 
> 
>       /**
>        * Returns the errors.header, any errors, and the errors.footer.
>        *
>        * @param property Property name
>        */
>       public String getErrorOutput(String property) {
> 
>           ActionErrors errors = getActionErrors();
> 
>           if ((errors==null) || (errors.empty()))
>               return null;
> 
>           // Check for presence of header and footer message keys
>           boolean headerPresent = isMessage("errors.header");
>           boolean footerPresent = isMessage("errors.footer");
> 
>           // Render the error messages appropriately
>           StringBuffer results = new StringBuffer();
>           String message = null;
>           if (headerPresent)
>               message = getMessage("errors.header");
>           Iterator reports = null;
> 
>           if (property == null)
>               reports = errors.get();
>           else
>               reports = errors.get(property);
> 
>          // Render header if this is a global tag or there is an error for this 
>property
>          boolean propertyMsgPresent = reports.hasNext();
>          if ((message != null)&&(property == null) || propertyMsgPresent) {
>              results.append(message);
>              results.append("\r\n");
>          }
> 
>           while (reports.hasNext()) {
>               ActionError report = (ActionError) reports.next();
>               message = getMessage( report.getKey(),
>                   report.getValues());
>               if (message != null) {
>                   results.append(message);
>                   results.append("\r\n");
>               }
>           }
>           message = null;
>           if (footerPresent)
>               message = getMessage("errors.footer");
> 
>           if ((message != null)&&(property == null) || propertyMsgPresent) {
>               results.append(message);
>               results.append("\r\n");
>           }
> 
>           // return result
>           return results.toString();
> 
>       }
> 
> 
>       /**
>        * Wrapper for getErrorMarkup(null)
>        */
>       public String getErrorOutput() {
>           return getErrorOutput((String) null);
>       }
> 
> 
> 
>   // --------------------------------------------- Presentation Wrappers
> 
> 
> 
>       /**
>        * Wrapper for getLink(String)
>        *
>        * @param name Name given to local or global forward.
>        */
>       public String link(String name) {
>           return getLink(name);
>       }
> 
> 
>       /**
>        * Wrapper for getMessage(String)
>        *
>        * @param key Message key
>        */
>       public String message(String key) {
>           return getMessage(key);
>       }
> 
> 
>       /**
>        * Wrapper for getMessage(String,Object[])
>        *
>        * @param key Message key to be looked up and returned
>        * @param args Replacement parameters for this message
>        */
>       public String message(String key, Object args[]) {
>           return getMessage(key, args);
>       }
> 
> 
>       /**
>        * Wrapper for getAction(String)
>        *
>        * @param name Name given to local or global forward.
>        */
>       public String action(String path) {
>           return getAction(path);
>       }
> 
> 
>       /**
>        * Alias for getErrorSize()
>        */
>       public int errorSize() {
>           return getErrorSize();
>       }
> 
> 
>       /**
>        * Wrapper for getErrorEmpty()
>        */
>       public boolean errorsEmpty() {
>           return getErrorsEmpty();
>       }
> 
> 
>       /**
>        * Wrapper for getErrors()
>        */
>       public Iterator errors() {
>           return errors();
>       }
> 
> 
>       /**
>        * Wrapper for getErrors(String)
>        */
>       public Iterator errors(String property) {
>           return getErrors(property);
>       }
> 
> 
>       /**
>        * Wrapper for getErrorSize(String)
>        *
>        * @param property Property name
>        */
>       public int errorSize(String property) {
>           return getErrorSize(property);
>       }
> 
> 
>       /**
>        * Wrapper for getErrorMarkup(String)
>        */
>       public String errorOutput(String property) {
>           return getErrorOutput(property);
>       }
> 
> 
> 
>       /**
>        * Wrapper for getErrorMarkup()
>        */
>       public String errorOutput() {
>           return getErrorOutput();
>       }
> 
> 
> 
>   // ------------------------------------------------------- Constructors
> 
> 
>       public ConfigHelper() {
>           super();
>       }
> 
> 
>       public ConfigHelper(
>               ServletContext application,
>               HttpServletRequest request,
>               HttpServletResponse response) {
>           super();
>           setResources(application,request,response);
>       }
> 
>   }
> 
> 
> 
> 
> --
> To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>

--
Gabriel Sidler
Software Engineer, Eivycom GmbH, Zurich, Switzerland

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

Reply via email to