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]>

Reply via email to