/* * Copyright 2004-2010 the Seasar Foundation and the Others. * * 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.slim3.util; import java.io.Serializable; import java.util.ArrayList; import java.util.Collection; import java.util.Enumeration; import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; import java.util.Map.Entry; import javax.servlet.http.HttpServletRequest; /** * {@link HttpServletRequest} acts as {link Map}. * * @author higa * @since 1.0.0 * */ public class RequestMap extends HashMap<String, Object> { private static final long serialVersionUID = 1L; /** * The request. */ protected HttpServletRequest request; /** * Constructor. * * @param request * the request */ public RequestMap(HttpServletRequest request) { if (request == null) { throw new NullPointerException("The request parameter is null."); } this.request = request; } @Override public void clear() { List<String> names = new ArrayList<String>(); for (Enumeration<?> e = request.getAttributeNames(); e .hasMoreElements();) { names.add(StringUtil.toString(e.nextElement())); } for (String name : names) { request.removeAttribute(name); } } @Override public boolean containsKey(Object key) { for (Enumeration<?> e = request.getAttributeNames(); e .hasMoreElements();) { String k = StringUtil.toString(e.nextElement()); if (key == null && k == null || key != null && key.equals(k)) { return true; } } return false; } @Override public boolean containsValue(Object value) { for (Enumeration<?> e = request.getAttributeNames(); e .hasMoreElements();) { String k = StringUtil.toString(e.nextElement()); Object v = request.getAttribute(k); if (value == null && v == null || value != null && value.equals(v)) { return true; } } return false; } @Override public Set<Entry<String, Object>> entrySet() { Set<Entry<String, Object>> set = new HashSet<Entry<String, Object>>(); for (Enumeration<?> e = request.getAttributeNames(); e .hasMoreElements();) { String key = StringUtil.toString(e.nextElement()); set.add(new EntryImpl(key, request.getAttribute(key))); } return set; } @Override public Object get(Object key) { return request.getAttribute(StringUtil.toString(key)); } @Override public boolean isEmpty() { return size() == 0; } @Override public Set<String> keySet() { Set<String> set = new HashSet<String>(); for (Enumeration<?> e = request.getAttributeNames(); e .hasMoreElements();) { set.add(StringUtil.toString(e.nextElement())); } return set; } @Override public Object put(String key, Object value) { Object old = request.getAttribute(key); request.setAttribute(key, value); return old; } @Override public void putAll(Map<? extends String, ? extends Object> m) { for (String key : m.keySet()) { request.setAttribute(key, m.get(key)); } } @Override public Object remove(Object key) { String k = StringUtil.toString(key); Object old = request.getAttribute(k); request.removeAttribute(k); return old; } @Override public int size() { int size = 0; for (Enumeration<?> e = request.getAttributeNames(); e .hasMoreElements(); e.nextElement()) { size++; } return size; } @Override public Collection<Object> values() { List<Object> list = new ArrayList<Object>(); for (Enumeration<?> e = request.getAttributeNames(); e .hasMoreElements();) { list .add(request.getAttribute(StringUtil.toString(e.nextElement()))); } return list; } /** * An implementation for {@link Entry}. */ protected static class EntryImpl implements Entry<String, Object>, Serializable { private static final long serialVersionUID = 1L; /** * The key. */ protected String key; /** * The value. */ protected Object value; /** * Constructor. * * @param key * the key * @param value * the value */ public EntryImpl(String key, Object value) { this.key = key; this.value = value; } public String getKey() { return key; } public Object getValue() { return value; } public Object setValue(Object value) { Object old = value; this.value = value; return old; } @Override public boolean equals(Object obj) { if (this == obj) { return true; } if (!(obj instanceof Entry<?, ?>)) { return false; } Entry<?, ?> other = (Entry<?, ?>) obj; if (key == null) { return other.getKey() == null; } return key.equals(other.getKey()); } @Override public int hashCode() { if (key == null) { return 0; } return key.hashCode(); } } }