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);
+        }
     }
 
 


Reply via email to