Author: apetrelli
Date: Sun Dec 6 18:02:10 2009
New Revision: 887725
URL: http://svn.apache.org/viewvc?rev=887725&view=rev
Log:
TILESSB-16
Added a specific map for session scope under JSP.
Fixed CompleteAutoloadTilesContainerFactory.
Fixed getting the current locale in DefaultLocaleResolver.
Added:
tiles/sandbox/trunk/tiles-request/tiles-request-jsp/src/main/java/org/apache/tiles/jsp/context/JspSessionScopeMap.java
(with props)
Modified:
tiles/sandbox/trunk/tiles-request/tiles-request-jsp/src/main/java/org/apache/tiles/jsp/context/JspTilesRequestContext.java
tiles/sandbox/trunk/tiles3/tiles-core/src/main/java/org/apache/tiles/locale/impl/DefaultLocaleResolver.java
tiles/sandbox/trunk/tiles3/tiles-extras/src/main/java/org/apache/tiles/extras/complete/CompleteAutoloadTilesContainerFactory.java
Added:
tiles/sandbox/trunk/tiles-request/tiles-request-jsp/src/main/java/org/apache/tiles/jsp/context/JspSessionScopeMap.java
URL:
http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles-request/tiles-request-jsp/src/main/java/org/apache/tiles/jsp/context/JspSessionScopeMap.java?rev=887725&view=auto
==============================================================================
---
tiles/sandbox/trunk/tiles-request/tiles-request-jsp/src/main/java/org/apache/tiles/jsp/context/JspSessionScopeMap.java
(added)
+++
tiles/sandbox/trunk/tiles-request/tiles-request-jsp/src/main/java/org/apache/tiles/jsp/context/JspSessionScopeMap.java
Sun Dec 6 18:02:10 2009
@@ -0,0 +1,273 @@
+/*
+ * $Id$
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.jsp.context;
+
+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 javax.servlet.http.HttpServletRequest;
+import javax.servlet.jsp.PageContext;
+
+import org.apache.tiles.request.util.MapEntry;
+
+/**
+ * <p>Private implementation of <code>Map</code> for servlet request
+ * attributes.</p>
+ *
+ * @version $Rev$ $Date$
+ */
+
+final class JspSessionScopeMap implements Map<String, Object> {
+
+ /**
+ * The request object to use.
+ */
+ private PageContext request = null;
+
+ private static final int scopeId = PageContext.SESSION_SCOPE;
+
+ /**
+ * Constructor.
+ *
+ * @param request The request object to use.
+ */
+ public JspSessionScopeMap(PageContext pageContext) {
+ this.request = pageContext;
+ }
+
+
+ /** {...@inheritdoc} */
+ public void clear() {
+ if (request.getSession() == null) {
+ return;
+ }
+ Iterator<String> keys = keySet().iterator();
+ while (keys.hasNext()) {
+ request.removeAttribute(keys.next(), scopeId);
+ }
+ }
+
+
+ /** {...@inheritdoc} */
+ public boolean containsKey(Object key) {
+ if (request.getSession() == null) {
+ return false;
+ }
+ return (request.getAttribute(key(key), scopeId) != null);
+ }
+
+
+ /** {...@inheritdoc} */
+ public boolean containsValue(Object value) {
+ if (request.getSession() == null) {
+ return false;
+ }
+ if (value == null) {
+ return (false);
+ }
+ Enumeration<String> keys = request.getAttributeNamesInScope(scopeId);
+ while (keys.hasMoreElements()) {
+ Object next = request.getAttribute(keys.nextElement(), scopeId);
+ if (next == value) {
+ return (true);
+ }
+ }
+ return (false);
+ }
+
+
+ /** {...@inheritdoc} */
+ public Set<Map.Entry<String, Object>> entrySet() {
+ Set<Map.Entry<String, Object>> set = new HashSet<Map.Entry<String,
Object>>();
+ if (request.getSession() != null) {
+ Enumeration<String> keys =
request.getAttributeNamesInScope(scopeId);
+ String key;
+ while (keys.hasMoreElements()) {
+ key = keys.nextElement();
+ set.add(new MapEntry<String, Object>(key,
+ request.getAttribute(key, scopeId), true));
+ }
+ }
+ return (set);
+ }
+
+
+ /** {...@inheritdoc} */
+ @Override
+ public boolean equals(Object o) {
+ PageContext otherRequest = ((JspSessionScopeMap) o).request;
+ if (otherRequest.getSession() == null) {
+ return request.getSession() == null;
+ } else if (request.getSession() == null) {
+ return false;
+ }
+ boolean retValue = true;
+ for (Enumeration<String> attribs = request
+ .getAttributeNamesInScope(scopeId); attribs
+ .hasMoreElements()
+ && retValue;) {
+ String attributeName = attribs.nextElement();
+ retValue = request.getAttribute(attributeName, scopeId).equals(
+ otherRequest.getAttribute(attributeName));
+ }
+
+ return retValue;
+ }
+
+
+ /** {...@inheritdoc} */
+ public Object get(Object key) {
+ if (request.getSession() == null) {
+ return null;
+ }
+ return (request.getAttribute(key(key), scopeId));
+ }
+
+
+ /** {...@inheritdoc} */
+ @Override
+ public int hashCode() {
+ if (request.getSession() == null) {
+ return 0;
+ }
+ return (request.hashCode()) + scopeId;
+ }
+
+
+ /** {...@inheritdoc} */
+ public boolean isEmpty() {
+ if (request.getSession() == null) {
+ return true;
+ }
+ return (size() < 1);
+ }
+
+
+ /** {...@inheritdoc} */
+ public Set<String> keySet() {
+ Set<String> set = new HashSet<String>();
+ if (request.getSession() != null) {
+ Enumeration<String> keys =
request.getAttributeNamesInScope(scopeId);
+ while (keys.hasMoreElements()) {
+ set.add(keys.nextElement());
+ }
+ }
+ return (set);
+ }
+
+
+ /** {...@inheritdoc} */
+ public Object put(String key, Object value) {
+ forceSessionCreation();
+ if (value == null) {
+ return (remove(key));
+ }
+ String skey = key(key);
+ Object previous = request.getAttribute(skey, scopeId);
+ request.setAttribute(skey, value, scopeId);
+ return (previous);
+ }
+
+
+
+ /** {...@inheritdoc} */
+ public void putAll(Map<? extends String, ? extends Object> map) {
+ forceSessionCreation();
+ Iterator<? extends String> keys = map.keySet().iterator();
+ while (keys.hasNext()) {
+ String key = keys.next();
+ request.setAttribute(key, map.get(key), scopeId);
+ }
+ }
+
+
+ /** {...@inheritdoc} */
+ public Object remove(Object key) {
+ if (request.getSession() == null) {
+ return null;
+ }
+ String skey = key(key);
+ Object previous = request.getAttribute(skey, scopeId);
+ request.removeAttribute(skey, scopeId);
+ return (previous);
+ }
+
+
+ /** {...@inheritdoc} */
+ public int size() {
+ int n = 0;
+ if (request.getSession() != null) {
+ Enumeration<String> keys =
request.getAttributeNamesInScope(scopeId);
+ while (keys.hasMoreElements()) {
+ keys.nextElement();
+ n++;
+ }
+ }
+ return (n);
+ }
+
+
+ /** {...@inheritdoc} */
+ public Collection<Object> values() {
+ List<Object> list = new ArrayList<Object>();
+ if (request.getSession() != null) {
+ Enumeration<String> keys =
request.getAttributeNamesInScope(scopeId);
+ while (keys.hasMoreElements()) {
+ list.add(request.getAttribute(keys.nextElement()));
+ }
+ }
+ return (list);
+ }
+
+
+ /**
+ * Returns the string representation of the key.
+ *
+ * @param key The key.
+ * @return The string representation of the key.
+ * @throws IllegalArgumentException If the key is <code>null</code>.
+ */
+ private String key(Object key) {
+ if (key == null) {
+ throw new IllegalArgumentException();
+ } else if (key instanceof String) {
+ return ((String) key);
+ } else {
+ return (key.toString());
+ }
+ }
+
+
+ private void forceSessionCreation() {
+ ServletRequest servletRequest = request.getRequest();
+ if (servletRequest instanceof HttpServletRequest) {
+ HttpServletRequest httpRequest = (HttpServletRequest)
servletRequest;
+ httpRequest.getSession();
+ }
+ }
+}
Propchange:
tiles/sandbox/trunk/tiles-request/tiles-request-jsp/src/main/java/org/apache/tiles/jsp/context/JspSessionScopeMap.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
tiles/sandbox/trunk/tiles-request/tiles-request-jsp/src/main/java/org/apache/tiles/jsp/context/JspSessionScopeMap.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Modified:
tiles/sandbox/trunk/tiles-request/tiles-request-jsp/src/main/java/org/apache/tiles/jsp/context/JspTilesRequestContext.java
URL:
http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles-request/tiles-request-jsp/src/main/java/org/apache/tiles/jsp/context/JspTilesRequestContext.java?rev=887725&r1=887724&r2=887725&view=diff
==============================================================================
---
tiles/sandbox/trunk/tiles-request/tiles-request-jsp/src/main/java/org/apache/tiles/jsp/context/JspTilesRequestContext.java
(original)
+++
tiles/sandbox/trunk/tiles-request/tiles-request-jsp/src/main/java/org/apache/tiles/jsp/context/JspTilesRequestContext.java
Sun Dec 6 18:02:10 2009
@@ -44,8 +44,7 @@
* @version $Rev$ $Date$
*/
@ScopeOrder({"page", "request", "session", "application"})
-public class JspTilesRequestContext extends TilesRequestContextWrapper
- implements Request {
+public class JspTilesRequestContext extends TilesRequestContextWrapper {
/**
* The current page context.
@@ -156,7 +155,7 @@
public Map<String, Object> getSessionScope() {
if ((sessionScope == null) && (pageContext != null)) {
- sessionScope = new JspScopeMap(pageContext,
PageContext.SESSION_SCOPE);
+ sessionScope = new JspSessionScopeMap(pageContext);
}
return (sessionScope);
}
Modified:
tiles/sandbox/trunk/tiles3/tiles-core/src/main/java/org/apache/tiles/locale/impl/DefaultLocaleResolver.java
URL:
http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles3/tiles-core/src/main/java/org/apache/tiles/locale/impl/DefaultLocaleResolver.java?rev=887725&r1=887724&r2=887725&view=diff
==============================================================================
---
tiles/sandbox/trunk/tiles3/tiles-core/src/main/java/org/apache/tiles/locale/impl/DefaultLocaleResolver.java
(original)
+++
tiles/sandbox/trunk/tiles3/tiles-core/src/main/java/org/apache/tiles/locale/impl/DefaultLocaleResolver.java
Sun Dec 6 18:02:10 2009
@@ -44,7 +44,7 @@
/** {...@inheritdoc} */
public Locale resolveLocale(Request request) {
Locale retValue = null;
- Map<String, Object> session = request.getContext("request");
+ Map<String, Object> session = request.getContext("session");
if (session != null) {
retValue = (Locale) session.get(DefaultLocaleResolver.LOCALE_KEY);
}
Modified:
tiles/sandbox/trunk/tiles3/tiles-extras/src/main/java/org/apache/tiles/extras/complete/CompleteAutoloadTilesContainerFactory.java
URL:
http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles3/tiles-extras/src/main/java/org/apache/tiles/extras/complete/CompleteAutoloadTilesContainerFactory.java?rev=887725&r1=887724&r2=887725&view=diff
==============================================================================
---
tiles/sandbox/trunk/tiles3/tiles-extras/src/main/java/org/apache/tiles/extras/complete/CompleteAutoloadTilesContainerFactory.java
(original)
+++
tiles/sandbox/trunk/tiles3/tiles-extras/src/main/java/org/apache/tiles/extras/complete/CompleteAutoloadTilesContainerFactory.java
Sun Dec 6 18:02:10 2009
@@ -65,6 +65,7 @@
import org.apache.tiles.impl.mgmt.CachingTilesContainer;
import org.apache.tiles.locale.LocaleResolver;
import org.apache.tiles.mvel.MVELAttributeEvaluator;
+import org.apache.tiles.mvel.ScopeVariableResolverFactory;
import org.apache.tiles.mvel.TilesContextBeanVariableResolverFactory;
import org.apache.tiles.mvel.TilesContextVariableResolverFactory;
import org.apache.tiles.ognl.AnyScopePropertyAccessor;
@@ -288,9 +289,12 @@
*/
private MVELAttributeEvaluator createMVELEvaluator() {
TilesRequestContextHolder requestHolder = new
TilesRequestContextHolder();
- VariableResolverFactory variableResolverFactory = new
TilesContextVariableResolverFactory(
+ VariableResolverFactory variableResolverFactory = new
ScopeVariableResolverFactory(
requestHolder);
variableResolverFactory
+ .setNextFactory(new TilesContextVariableResolverFactory(
+ requestHolder));
+ variableResolverFactory
.setNextFactory(new TilesContextBeanVariableResolverFactory(
requestHolder));
MVELAttributeEvaluator mvelEvaluator = new
MVELAttributeEvaluator(requestHolder,