/* Copyright 2005-2006 Tim Fennell
*
* 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 net.sourceforge.stripes.mock;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpSession;
import java.util.Collections;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Map;
import java.util.Random;
/**
* Simple mock implementation of HttpSession that implements most basic operations.
*
* @author Tim Fennell
* @since Stripes 1.1.1
*/
@SuppressWarnings("deprecation")
public class MockHttpSession implements HttpSession {
private long creationTime = System.currentTimeMillis();
private String sessionId = String.valueOf(new Random().nextLong());
private ServletContext context;
private Map<String,Object> attributes = new HashMap<String,Object>();
/** Default constructor which provides the session with access to the context. */
public MockHttpSession(ServletContext context) {
this.context = context;
}
/** Returns the time in milliseconds when the session was created. */
public long getCreationTime() { return this.creationTime; }
/** Returns an ID that was randomly generated when the session was created. */
public String getId() { return this.sessionId; }
/** Always returns the current time. */
public long getLastAccessedTime() { return System.currentTimeMillis(); }
/** Provides access to the servlet context within which the session exists. */
public ServletContext getServletContext() { return this.context; }
/** Sets the servlet context within which the session exists. */
public void setServletContext(ServletContext context) { this.context = context; }
/** Has no effect. */
public void setMaxInactiveInterval(int i) { }
/** Always returns Integer.MAX_VALUE. */
public int getMaxInactiveInterval() { return Integer.MAX_VALUE; }
/** Deprecated method always returns null. */
public javax.servlet.http.HttpSessionContext getSessionContext() { return null; }
/** Returns the value of the named attribute from an internal Map. */
public Object getAttribute(String key) { return this.attributes.get(key); }
/** Deprecated method. Use getAttribute() instead. */
public Object getValue(String key) { return getAttribute(key); }
/** Returns an enumeration of all the attribute names in the session. */
public Enumeration<String> getAttributeNames() {
return Collections.enumeration(this.attributes.keySet());
}
/** Returns a String[] of all the attribute names in session. Deprecated. */
public String[] getValueNames() {
return this.attributes.keySet().toArray(new String[this.attributes.size()]);
}
/** Stores the value in session, replacing any existing value with the same key. */
public void setAttribute(String key, Object value) {
this.attributes.put(key, value);
}
/** Stores the value in session, replacing any existing value with the same key. */
public void putValue(String key, Object value) {
setAttribute(key, value);
}
/** Removes any value stored in session with the key supplied. */
public void removeAttribute(String key) {
this.attributes.remove(key);
}
/** Removes any value stored in session with the key supplied. */
public void removeValue(String key) {
removeAttribute(key);
}
/** Clears the set of attributes, but has no other effect. */
public void invalidate() { this.attributes.clear(); }
/** Always returns false. */
public boolean isNew() { return false; }
}