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