Author: craigmcc Date: Mon May 8 07:55:58 2006 New Revision: 405065 URL: http://svn.apache.org/viewcvs?rev=405065&view=rev Log: Support attribute added/removed/replaced event firing on the mock ServletContext, HttpServletRequest, and HttpSession classes.
PR: SHALE-174 Modified: struts/shale/trunk/test-framework/src/java/org/apache/shale/test/base/AbstractJsfTestCase.java struts/shale/trunk/test-framework/src/java/org/apache/shale/test/mock/MockHttpServletRequest.java struts/shale/trunk/test-framework/src/java/org/apache/shale/test/mock/MockHttpSession.java struts/shale/trunk/test-framework/src/java/org/apache/shale/test/mock/MockServletContext.java Modified: struts/shale/trunk/test-framework/src/java/org/apache/shale/test/base/AbstractJsfTestCase.java URL: http://svn.apache.org/viewcvs/struts/shale/trunk/test-framework/src/java/org/apache/shale/test/base/AbstractJsfTestCase.java?rev=405065&r1=405064&r2=405065&view=diff ============================================================================== --- struts/shale/trunk/test-framework/src/java/org/apache/shale/test/base/AbstractJsfTestCase.java (original) +++ struts/shale/trunk/test-framework/src/java/org/apache/shale/test/base/AbstractJsfTestCase.java Mon May 8 07:55:58 2006 @@ -98,7 +98,9 @@ servletContext = new MockServletContext(); config = new MockServletConfig(servletContext); session = new MockHttpSession(); + session.setServletContext(servletContext); request = new MockHttpServletRequest(session); + request.setServletContext(servletContext); response = new MockHttpServletResponse(); // Set up JSF API Objects Modified: struts/shale/trunk/test-framework/src/java/org/apache/shale/test/mock/MockHttpServletRequest.java URL: http://svn.apache.org/viewcvs/struts/shale/trunk/test-framework/src/java/org/apache/shale/test/mock/MockHttpServletRequest.java?rev=405065&r1=405064&r2=405065&view=diff ============================================================================== --- struts/shale/trunk/test-framework/src/java/org/apache/shale/test/mock/MockHttpServletRequest.java (original) +++ struts/shale/trunk/test-framework/src/java/org/apache/shale/test/mock/MockHttpServletRequest.java Mon May 8 07:55:58 2006 @@ -32,7 +32,10 @@ import java.util.Vector; import javax.servlet.RequestDispatcher; +import javax.servlet.ServletContext; import javax.servlet.ServletInputStream; +import javax.servlet.ServletRequestAttributeEvent; +import javax.servlet.ServletRequestAttributeListener; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; @@ -89,6 +92,15 @@ // ----------------------------------------------------- Mock Object Methods + /** + * <p>Add a new listener instance that should be notified about + * attribute changes.</p> + */ + public void addAttributeListener(ServletRequestAttributeListener listener) { + attributeListeners.add(listener); + } + + public void addDateHeader(String name, long value) { headers.add(name + ": " + formatDate(value)); @@ -126,6 +138,13 @@ } + public ServletContext getServletContext() { + + return this.servletContext; + + } + + public void setHttpSession(HttpSession session) { this.session = session; @@ -151,6 +170,13 @@ } + public void setServletContext(ServletContext servletContext) { + + this.servletContext = servletContext; + + } + + public void setUserPrincipal(Principal principal) { this.principal = principal; @@ -161,6 +187,7 @@ // ------------------------------------------------------ Instance Variables + private List attributeListeners = new ArrayList(); private HashMap attributes = new HashMap(); private String contextPath = null; private List headers = new ArrayList(); @@ -169,6 +196,7 @@ private String pathInfo = null; private Principal principal = null; private String queryString = null; + private ServletContext servletContext = null; private String servletPath = null; private HttpSession session = null; @@ -608,17 +636,30 @@ public void removeAttribute(String name) { - attributes.remove(name); + if (attributes.containsKey(name)) { + Object value = attributes.remove(name); + fireAttributeRemoved(name, value); + } } public void setAttribute(String name, Object value) { + if (name == null) { + throw new IllegalArgumentException("Attribute name cannot be null"); + } if (value == null) { - attributes.remove(name); + removeAttribute(name); + return; + } + if (attributes.containsKey(name)) { + Object oldValue = attributes.get(name); + attributes.put(name, value); + fireAttributeReplaced(name, oldValue); } else { attributes.put(name, value); + fireAttributeAdded(name, value); } } @@ -631,7 +672,52 @@ } - // --------------------------------------------------------- Support Methods + // --------------------------------------------------------- Private Methods + + + private void fireAttributeAdded(String key, Object value) { + if (attributeListeners.size() < 1) { + return; + } + ServletRequestAttributeEvent event = + new ServletRequestAttributeEvent(getServletContext(), this, key, value); + Iterator listeners = attributeListeners.iterator(); + while (listeners.hasNext()) { + ServletRequestAttributeListener listener = + (ServletRequestAttributeListener) listeners.next(); + listener.attributeAdded(event); + } + } + + + private void fireAttributeRemoved(String key, Object value) { + if (attributeListeners.size() < 1) { + return; + } + ServletRequestAttributeEvent event = + new ServletRequestAttributeEvent(getServletContext(), this, key, value); + Iterator listeners = attributeListeners.iterator(); + while (listeners.hasNext()) { + ServletRequestAttributeListener listener = + (ServletRequestAttributeListener) listeners.next(); + listener.attributeRemoved(event); + } + } + + + private void fireAttributeReplaced(String key, Object value) { + if (attributeListeners.size() < 1) { + return; + } + ServletRequestAttributeEvent event = + new ServletRequestAttributeEvent(getServletContext(), this, key, value); + Iterator listeners = attributeListeners.iterator(); + while (listeners.hasNext()) { + ServletRequestAttributeListener listener = + (ServletRequestAttributeListener) listeners.next(); + listener.attributeAdded(event); + } + } /** Modified: struts/shale/trunk/test-framework/src/java/org/apache/shale/test/mock/MockHttpSession.java URL: http://svn.apache.org/viewcvs/struts/shale/trunk/test-framework/src/java/org/apache/shale/test/mock/MockHttpSession.java?rev=405065&r1=405064&r2=405065&view=diff ============================================================================== --- struts/shale/trunk/test-framework/src/java/org/apache/shale/test/mock/MockHttpSession.java (original) +++ struts/shale/trunk/test-framework/src/java/org/apache/shale/test/mock/MockHttpSession.java Mon May 8 07:55:58 2006 @@ -16,11 +16,16 @@ package org.apache.shale.test.mock; +import java.util.ArrayList; import java.util.Enumeration; import java.util.HashMap; +import java.util.Iterator; +import java.util.List; import javax.servlet.ServletContext; import javax.servlet.http.HttpSession; +import javax.servlet.http.HttpSessionAttributeListener; +import javax.servlet.http.HttpSessionBindingEvent; import javax.servlet.http.HttpSessionContext; /** @@ -53,6 +58,22 @@ // ----------------------------------------------------- Mock Object Methods + /** + * <p>Add a new listener instance that should be notified about + * attribute changes.</p> + */ + public void addAttributeListener(HttpSessionAttributeListener listener) { + attributeListeners.add(listener); + } + + + public ServletContext getServletContext() { + + return this.servletContext; + + } + + public void setServletContext(ServletContext servletContext) { this.servletContext = servletContext; @@ -63,6 +84,7 @@ // ------------------------------------------------------ Instance Variables + private List attributeListeners = new ArrayList(); private HashMap attributes = new HashMap(); private String id = "123"; private ServletContext servletContext = null; @@ -121,13 +143,6 @@ } - public ServletContext getServletContext() { - - return this.servletContext; - - } - - public HttpSessionContext getSessionContext() { throw new UnsupportedOperationException(); @@ -172,7 +187,10 @@ public void removeAttribute(String name) { - attributes.remove(name); + if (attributes.containsKey(name)) { + Object value = attributes.remove(name); + fireAttributeRemoved(name, value); + } } @@ -186,10 +204,20 @@ public void setAttribute(String name, Object value) { + if (name == null) { + throw new IllegalArgumentException("Attribute name cannot be null"); + } if (value == null) { - attributes.remove(name); + removeAttribute(name); + return; + } + if (attributes.containsKey(name)) { + Object oldValue = attributes.get(name); + attributes.put(name, value); + fireAttributeReplaced(name, oldValue); } else { attributes.put(name, value); + fireAttributeAdded(name, value); } } @@ -199,6 +227,54 @@ throw new UnsupportedOperationException(); + } + + + // --------------------------------------------------------- Support Methods + + + private void fireAttributeAdded(String key, Object value) { + if (attributeListeners.size() < 1) { + return; + } + HttpSessionBindingEvent event = + new HttpSessionBindingEvent(this, key, value); + Iterator listeners = attributeListeners.iterator(); + while (listeners.hasNext()) { + HttpSessionAttributeListener listener = + (HttpSessionAttributeListener) listeners.next(); + listener.attributeAdded(event); + } + } + + + private void fireAttributeRemoved(String key, Object value) { + if (attributeListeners.size() < 1) { + return; + } + HttpSessionBindingEvent event = + new HttpSessionBindingEvent(this, key, value); + Iterator listeners = attributeListeners.iterator(); + while (listeners.hasNext()) { + HttpSessionAttributeListener listener = + (HttpSessionAttributeListener) listeners.next(); + listener.attributeRemoved(event); + } + } + + + private void fireAttributeReplaced(String key, Object value) { + if (attributeListeners.size() < 1) { + return; + } + HttpSessionBindingEvent event = + new HttpSessionBindingEvent(this, key, value); + Iterator listeners = attributeListeners.iterator(); + while (listeners.hasNext()) { + HttpSessionAttributeListener listener = + (HttpSessionAttributeListener) listeners.next(); + listener.attributeAdded(event); + } } Modified: struts/shale/trunk/test-framework/src/java/org/apache/shale/test/mock/MockServletContext.java URL: http://svn.apache.org/viewcvs/struts/shale/trunk/test-framework/src/java/org/apache/shale/test/mock/MockServletContext.java?rev=405065&r1=405064&r2=405065&view=diff ============================================================================== --- struts/shale/trunk/test-framework/src/java/org/apache/shale/test/mock/MockServletContext.java (original) +++ struts/shale/trunk/test-framework/src/java/org/apache/shale/test/mock/MockServletContext.java Mon May 8 07:55:58 2006 @@ -21,14 +21,19 @@ import java.io.InputStream; import java.net.MalformedURLException; import java.net.URL; +import java.util.ArrayList; import java.util.Enumeration; import java.util.HashSet; import java.util.Hashtable; +import java.util.Iterator; +import java.util.List; import java.util.Set; import javax.servlet.RequestDispatcher; import javax.servlet.Servlet; import javax.servlet.ServletContext; +import javax.servlet.ServletContextAttributeEvent; +import javax.servlet.ServletContextAttributeListener; import javax.servlet.ServletException; @@ -53,6 +58,15 @@ /** + * <p>Add a new listener instance that should be notified about + * attribute changes.</p> + */ + public void addAttributeListener(ServletContextAttributeListener listener) { + attributeListeners.add(listener); + } + + + /** * <p>Add a context initialization parameter to the set of * parameters recognized by this instance.</p> */ @@ -88,6 +102,7 @@ // ------------------------------------------------------ Instance Variables + private List attributeListeners = new ArrayList(); private Hashtable attributes = new Hashtable(); private File documentRoot = null; private Hashtable mimeTypes = new Hashtable(); @@ -329,15 +344,80 @@ public void removeAttribute(String name) { - attributes.remove(name); + if (attributes.containsKey(name)) { + Object value = attributes.remove(name); + fireAttributeRemoved(name, value); + } } public void setAttribute(String name, Object value) { - attributes.put(name, value); + if (name == null) { + throw new IllegalArgumentException("Attribute name cannot be null"); + } + if (value == null) { + removeAttribute(name); + return; + } + if (attributes.containsKey(name)) { + Object oldValue = attributes.get(name); + attributes.put(name, value); + fireAttributeReplaced(name, oldValue); + } else { + attributes.put(name, value); + fireAttributeAdded(name, value); + } + + } + + + // --------------------------------------------------------- Private Methods + + private void fireAttributeAdded(String key, Object value) { + if (attributeListeners.size() < 1) { + return; + } + ServletContextAttributeEvent event = + new ServletContextAttributeEvent(this, key, value); + Iterator listeners = attributeListeners.iterator(); + while (listeners.hasNext()) { + ServletContextAttributeListener listener = + (ServletContextAttributeListener) listeners.next(); + listener.attributeAdded(event); + } + } + + + private void fireAttributeRemoved(String key, Object value) { + if (attributeListeners.size() < 1) { + return; + } + ServletContextAttributeEvent event = + new ServletContextAttributeEvent(this, key, value); + Iterator listeners = attributeListeners.iterator(); + while (listeners.hasNext()) { + ServletContextAttributeListener listener = + (ServletContextAttributeListener) listeners.next(); + listener.attributeRemoved(event); + } + } + + + private void fireAttributeReplaced(String key, Object value) { + if (attributeListeners.size() < 1) { + return; + } + ServletContextAttributeEvent event = + new ServletContextAttributeEvent(this, key, value); + Iterator listeners = attributeListeners.iterator(); + while (listeners.hasNext()) { + ServletContextAttributeListener listener = + (ServletContextAttributeListener) listeners.next(); + listener.attributeAdded(event); + } }