Added: struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/context/servlet/ServletRequestScopeMap.java URL: http://svn.apache.org/viewcvs/struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/context/servlet/ServletRequestScopeMap.java?rev=405486&view=auto ============================================================================== --- struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/context/servlet/ServletRequestScopeMap.java (added) +++ struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/context/servlet/ServletRequestScopeMap.java Tue May 9 10:55:29 2006 @@ -0,0 +1,181 @@ +/* + * $Id$ + * + * Copyright 1999-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.tiles.context.servlet; + + +import java.util.ArrayList; +import java.util.Collection; +import java.util.Enumeration; +import java.util.HashSet; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Set; +import javax.servlet.ServletRequest; +import org.apache.tiles.context.MapEntry; + + +/** + * <p>Private implementation of <code>Map</code> for servlet request + * attributes.</p> + * + * @version $Revision$ $Date$ + */ + +final class ServletRequestScopeMap implements Map { + + + public ServletRequestScopeMap(ServletRequest request) { + this.request = request; + } + + + private ServletRequest request = null; + + + public void clear() { + Iterator keys = keySet().iterator(); + while (keys.hasNext()) { + request.removeAttribute((String) keys.next()); + } + } + + + public boolean containsKey(Object key) { + return (request.getAttribute(key(key)) != null); + } + + + public boolean containsValue(Object value) { + if (value == null) { + return (false); + } + Enumeration keys = request.getAttributeNames(); + while (keys.hasMoreElements()) { + Object next = request.getAttribute((String) keys.nextElement()); + if (next == value) { + return (true); + } + } + return (false); + } + + + public Set entrySet() { + Set set = new HashSet(); + Enumeration keys = request.getAttributeNames(); + String key; + while (keys.hasMoreElements()) { + key = (String) keys.nextElement(); + set.add(new MapEntry(key, request.getAttribute(key), true)); + } + return (set); + } + + + public boolean equals(Object o) { + return (request.equals(o)); + } + + + public Object get(Object key) { + return (request.getAttribute(key(key))); + } + + + public int hashCode() { + return (request.hashCode()); + } + + + public boolean isEmpty() { + return (size() < 1); + } + + + public Set keySet() { + Set set = new HashSet(); + Enumeration keys = request.getAttributeNames(); + while (keys.hasMoreElements()) { + set.add(keys.nextElement()); + } + return (set); + } + + + public Object put(Object key, Object value) { + if (value == null) { + return (remove(key)); + } + String skey = key(key); + Object previous = request.getAttribute(skey); + request.setAttribute(skey, value); + return (previous); + } + + + public void putAll(Map map) { + Iterator keys = map.keySet().iterator(); + while (keys.hasNext()) { + String key = (String) keys.next(); + request.setAttribute(key, map.get(key)); + } + } + + + public Object remove(Object key) { + String skey = key(key); + Object previous = request.getAttribute(skey); + request.removeAttribute(skey); + return (previous); + } + + + public int size() { + int n = 0; + Enumeration keys = request.getAttributeNames(); + while (keys.hasMoreElements()) { + keys.nextElement(); + n++; + } + return (n); + } + + + public Collection values() { + List list = new ArrayList(); + Enumeration keys = request.getAttributeNames(); + while (keys.hasMoreElements()) { + list.add(request.getAttribute((String) keys.nextElement())); + } + return (list); + } + + + private String key(Object key) { + if (key == null) { + throw new IllegalArgumentException(); + } else if (key instanceof String) { + return ((String) key); + } else { + return (key.toString()); + } + } + + +} \ No newline at end of file
Propchange: struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/context/servlet/ServletRequestScopeMap.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/context/servlet/ServletRequestScopeMap.java ------------------------------------------------------------------------------ svn:keywords = Date Author Id Revision HeadURL Added: struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/context/servlet/ServletSessionScopeMap.java URL: http://svn.apache.org/viewcvs/struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/context/servlet/ServletSessionScopeMap.java?rev=405486&view=auto ============================================================================== --- struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/context/servlet/ServletSessionScopeMap.java (added) +++ struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/context/servlet/ServletSessionScopeMap.java Tue May 9 10:55:29 2006 @@ -0,0 +1,180 @@ +/* + * Copyright 1999-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.tiles.context.servlet; + + +import java.util.ArrayList; +import java.util.Collection; +import java.util.Enumeration; +import java.util.HashSet; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Set; +import javax.servlet.http.HttpSession; +import org.apache.tiles.context.MapEntry; + + +/** + * <p>Private implementation of <code>Map</code> for HTTP session + * attributes.</p> + * + * @author Craig R. McClanahan + * @version $Revision$ $Date$ + */ + +final class ServletSessionScopeMap implements Map { + + + public ServletSessionScopeMap(HttpSession session) { + this.session = session; + } + + + private HttpSession session = null; + + + public void clear() { + Iterator keys = keySet().iterator(); + while (keys.hasNext()) { + session.removeAttribute((String) keys.next()); + } + } + + + public boolean containsKey(Object key) { + return (session.getAttribute(key(key)) != null); + } + + + public boolean containsValue(Object value) { + if (value == null) { + return (false); + } + Enumeration keys = session.getAttributeNames(); + while (keys.hasMoreElements()) { + Object next = session.getAttribute((String) keys.nextElement()); + if (next == value) { + return (true); + } + } + return (false); + } + + + public Set entrySet() { + Set set = new HashSet(); + Enumeration keys = session.getAttributeNames(); + String key; + while (keys.hasMoreElements()) { + key = (String) keys.nextElement(); + set.add(new MapEntry(key, session.getAttribute(key), true)); + } + return (set); + } + + + public boolean equals(Object o) { + return (session.equals(o)); + } + + + public Object get(Object key) { + return (session.getAttribute(key(key))); + } + + + public int hashCode() { + return (session.hashCode()); + } + + + public boolean isEmpty() { + return (size() < 1); + } + + + public Set keySet() { + Set set = new HashSet(); + Enumeration keys = session.getAttributeNames(); + while (keys.hasMoreElements()) { + set.add(keys.nextElement()); + } + return (set); + } + + + public Object put(Object key, Object value) { + if (value == null) { + return (remove(key)); + } + String skey = key(key); + Object previous = session.getAttribute(skey); + session.setAttribute(skey, value); + return (previous); + } + + + public void putAll(Map map) { + Iterator keys = map.keySet().iterator(); + while (keys.hasNext()) { + String key = (String) keys.next(); + session.setAttribute(key, map.get(key)); + } + } + + + public Object remove(Object key) { + String skey = key(key); + Object previous = session.getAttribute(skey); + session.removeAttribute(skey); + return (previous); + } + + + public int size() { + int n = 0; + Enumeration keys = session.getAttributeNames(); + while (keys.hasMoreElements()) { + keys.nextElement(); + n++; + } + return (n); + } + + + public Collection values() { + List list = new ArrayList(); + Enumeration keys = session.getAttributeNames(); + while (keys.hasMoreElements()) { + list.add(session.getAttribute((String) keys.nextElement())); + } + return (list); + } + + + private String key(Object key) { + if (key == null) { + throw new IllegalArgumentException(); + } else if (key instanceof String) { + return ((String) key); + } else { + return (key.toString()); + } + } + + +} \ No newline at end of file Propchange: struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/context/servlet/ServletSessionScopeMap.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/context/servlet/ServletSessionScopeMap.java ------------------------------------------------------------------------------ svn:keywords = Date Author Id Revision HeadURL Copied: struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/context/servlet/ServletTilesContext.java (from r399725, struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/context/ServletTilesContext.java) URL: http://svn.apache.org/viewcvs/struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/context/servlet/ServletTilesContext.java?p2=struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/context/servlet/ServletTilesContext.java&p1=struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/context/ServletTilesContext.java&r1=399725&r2=405486&rev=405486&view=diff ============================================================================== --- struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/context/ServletTilesContext.java (original) +++ struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/context/servlet/ServletTilesContext.java Tue May 9 10:55:29 2006 @@ -16,7 +16,7 @@ * limitations under the License. */ -package org.apache.tiles.context; +package org.apache.tiles.context.servlet; import java.io.IOException; import java.net.MalformedURLException; @@ -30,6 +30,8 @@ import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; import org.apache.tiles.TilesContext; /** @@ -41,83 +43,160 @@ private ServletContext servletContext; - private ServletRequest request; + private HttpServletRequest request; - private ServletResponse response; + private HttpServletResponse response; + /** + * <p>The lazily instantiated <code>Map</code> of application scope + * attributes.</p> + */ + private Map applicationScope = null; + + /** + * <p>The lazily instantiated <code>Map</code> of header name-value + * combinations (immutable).</p> + */ + private Map header = null; + + + /** + * <p>The lazily instantitated <code>Map</code> of header name-values + * combinations (immutable).</p> + */ + private Map headerValues = null; + + + /** + * <p>The lazily instantiated <code>Map</code> of context initialization + * parameters.</p> + */ + private Map initParam = null; + + + /** + * <p>The lazily instantiated <code>Map</code> of request + * parameter name-value.</p> + */ + private Map param = null; + + + /** + * <p>The lazily instantiated <code>Map</code> of request + * parameter name-values.</p> + */ + private Map paramValues = null; + + /** + * <p>The lazily instantiated <code>Map</code> of request scope + * attributes.</p> + */ + private Map requestScope = null; + + /** + * <p>The lazily instantiated <code>Map</code> of session scope + * attributes.</p> + */ + private Map sessionScope = null; + + /** Creates a new instance of ServletTilesContext */ public ServletTilesContext(ServletContext servletContext) { - this.servletContext = servletContext; + initialize(servletContext, null, null); } /** Creates a new instance of ServletTilesContext */ - public ServletTilesContext(ServletContext servletContext, ServletRequest request) { - this.servletContext = servletContext; - this.request = request; + public ServletTilesContext(ServletContext servletContext, + HttpServletRequest request) { + initialize(servletContext, request, null); } /** Creates a new instance of ServletTilesContext */ public ServletTilesContext(ServletContext servletContext, - ServletRequest request, - ServletResponse response) { - this.servletContext = servletContext; - this.request = request; - this.response = response; + HttpServletRequest request, + HttpServletResponse response) { + initialize(servletContext, request, response); } public Map getApplicationScope() { - Enumeration e = servletContext.getAttributeNames(); - Map contextMap = new HashMap(); - while (e.hasMoreElements()) { - String key = (String) e.nextElement(); - contextMap.put(key, servletContext.getAttribute(key)); + + if ((applicationScope == null) && (servletContext != null)) { + applicationScope = new ServletApplicationScopeMap(servletContext); } - - return contextMap; + return (applicationScope); + } + public Map getHeader() { - return null; + + if ((header == null) && (request != null)) { + header = new ServletHeaderMap(request); + } + return (header); + } + public Map getHeaderValues() { - return null; + + if ((headerValues == null) && (request != null)) { + headerValues = new ServletHeaderValuesMap(request); + } + return (headerValues); + } + public Map getInitParams() { - Enumeration e = servletContext.getInitParameterNames(); - Map paramMap = new HashMap(); - while (e.hasMoreElements()) { - String key = (String) e.nextElement(); - paramMap.put(key, servletContext.getInitParameter(key)); + + if ((initParam == null) && (servletContext != null)) { + initParam = new ServletInitParamMap(servletContext); } - - return paramMap; + return (initParam); + } + public Map getParam() { - return null; + + if ((param == null) && (request != null)) { + param = new ServletParamMap(request); + } + return (param); + } + public Map getParamValues() { - return request.getParameterMap(); + + if ((paramValues == null) && (request != null)) { + paramValues = new ServletParamValuesMap(request); + } + return (paramValues); + } + public Map getRequestScope() { - Enumeration e = request.getAttributeNames(); - Map params = new HashMap(); - while (e.hasMoreElements()) { - String key = (String) e.nextElement(); - params.put(key, request.getAttribute(key)); + + if ((requestScope == null) && (request != null)) { + requestScope = new ServletRequestScopeMap(request); } - - return params; + return (requestScope); + } + public Map getSessionScope() { - return null; - } + if ((sessionScope == null) && (request != null)) { + sessionScope = new ServletSessionScopeMap(request.getSession()); + } + return (sessionScope); + + } + public void dispatch(String path) throws IOException, Exception { RequestDispatcher rd = request.getRequestDispatcher(path); try { @@ -143,5 +222,63 @@ public Locale getRequestLocale() { return request.getLocale(); } + + public ServletContext getServletContext() { + return servletContext; + } + public ServletRequest getRequest() { + return request; + } + + public ServletResponse getResponse() { + return response; + } + + /** + * <p>Initialize (or reinitialize) this [EMAIL PROTECTED] ServletWebContext} instance + * for the specified Servlet API objects.</p> + * + * @param context The <code>ServletContext</code> for this web application + * @param request The <code>HttpServletRequest</code> for this request + * @param response The <code>HttpServletResponse</code> for this request + */ + public void initialize(ServletContext context, + HttpServletRequest request, + HttpServletResponse response) { + + // Save the specified Servlet API object references + this.servletContext = context; + this.request = request; + this.response = response; + + // Perform other setup as needed + + } + + + /** + * <p>Release references to allocated resources acquired in + * <code>initialize()</code> of via subsequent processing. After this + * method is called, subsequent calls to any other method than + * <code>initialize()</code> will return undefined results.</p> + */ + public void release() { + + // Release references to allocated collections + applicationScope = null; + header = null; + headerValues = null; + initParam = null; + param = null; + paramValues = null; + requestScope = null; + sessionScope = null; + + // Release references to Servlet API objects + servletContext = null; + request = null; + response = null; + + } } Modified: struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/filter/TilesFilter.java URL: http://svn.apache.org/viewcvs/struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/filter/TilesFilter.java?rev=405486&r1=405485&r2=405486&view=diff ============================================================================== --- struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/filter/TilesFilter.java (original) +++ struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/filter/TilesFilter.java Tue May 9 10:55:29 2006 @@ -67,7 +67,7 @@ try { TilesContext tilesContext = TilesContextFactory.getInstance( - request, filterConfig.getServletContext()); + filterConfig.getServletContext(), request); DefinitionsFactory factory = TilesUtil.getDefinitionsFactory(tilesContext); if (factory instanceof ReloadableDefinitionsFactory) { Modified: struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/taglib/InitDefinitionsTag.java URL: http://svn.apache.org/viewcvs/struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/taglib/InitDefinitionsTag.java?rev=405486&r1=405485&r2=405486&view=diff ============================================================================== --- struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/taglib/InitDefinitionsTag.java (original) +++ struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/taglib/InitDefinitionsTag.java Tue May 9 10:55:29 2006 @@ -72,7 +72,8 @@ * Do start tag. */ public int doStartTag() throws JspException { - TilesContext tilesContext = TilesContextFactory.getInstance(pageContext); + TilesContext tilesContext = TilesContextFactory.getInstance(pageContext.getServletContext(), + pageContext.getRequest(), pageContext.getResponse()); DefinitionsFactory factory = TilesUtil.getDefinitionsFactory(tilesContext); if(factory != null ) { return SKIP_BODY; Modified: struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/taglib/InsertTag.java URL: http://svn.apache.org/viewcvs/struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/taglib/InsertTag.java?rev=405486&r1=405485&r2=405486&view=diff ============================================================================== --- struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/taglib/InsertTag.java (original) +++ struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/taglib/InsertTag.java Tue May 9 10:55:29 2006 @@ -553,8 +553,9 @@ throws JspException { try { - TilesContext tilesContext = TilesContextFactory.getInstance( - pageContext); + TilesContext tilesContext = TilesContextFactory.getInstance( + pageContext.getServletContext(), + pageContext.getRequest(), pageContext.getResponse()); ComponentDefinition definition = TilesUtil.getDefinition( name, tilesContext); @@ -703,7 +704,9 @@ throws JspException { try { - TilesContext tilesContext = TilesContextFactory.getInstance(pageContext); + TilesContext tilesContext = TilesContextFactory.getInstance( + pageContext.getServletContext(), + pageContext.getRequest(), pageContext.getResponse()); ComponentDefinition definition = TilesUtil.getDefinition(name, tilesContext); @@ -875,7 +878,9 @@ // Call controller if any if (controller != null) { try { - TilesContext tilesContext = TilesContextFactory.getInstance(pageContext); + TilesContext tilesContext = TilesContextFactory.getInstance( + pageContext.getServletContext(), + pageContext.getRequest(), pageContext.getResponse()); controller.execute(tilesContext, subCompContext); } catch (Exception e) { throw new ServletException(e); Modified: struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/taglib/util/TagUtils.java URL: http://svn.apache.org/viewcvs/struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/taglib/util/TagUtils.java?rev=405486&r1=405485&r2=405486&view=diff ============================================================================== --- struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/taglib/util/TagUtils.java (original) +++ struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/taglib/util/TagUtils.java Tue May 9 10:55:29 2006 @@ -172,7 +172,9 @@ * @return Requested bean or <code>null</code> if not found. */ public static Object findAttribute(String beanName, PageContext pageContext) { - TilesContext tilesContext = TilesContextFactory.getInstance(pageContext); + TilesContext tilesContext = TilesContextFactory.getInstance( + pageContext.getServletContext(), + pageContext.getRequest(), pageContext.getResponse()); ComponentContext compContext = ComponentContext.getContext(tilesContext); if (compContext != null) { @@ -196,7 +198,9 @@ */ public static Object getAttribute(String beanName, int scope, PageContext pageContext) { if (scope == ComponentConstants.COMPONENT_SCOPE) { - TilesContext tilesContext = TilesContextFactory.getInstance(pageContext); + TilesContext tilesContext = TilesContextFactory.getInstance( + pageContext.getServletContext(), + pageContext.getRequest(), pageContext.getResponse()); ComponentContext compContext = ComponentContext.getContext(tilesContext); return compContext.getAttribute(beanName); } @@ -340,7 +344,9 @@ throws JspException { try { - TilesContext tilesContext = TilesContextFactory.getInstance(pageContext); + TilesContext tilesContext = TilesContextFactory.getInstance( + pageContext.getServletContext(), + pageContext.getRequest(), pageContext.getResponse()); return TilesUtil.getDefinition( name, tilesContext);