[Httpunit-commit] CVS: httpunit/src/com/meterware/servletunit ServletUnitContext.java,1.6,1.7 Servle
Brought to you by:
russgold
Update of /cvsroot/httpunit/httpunit/src/com/meterware/servletunit In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv24680/src/com/meterware/servletunit Modified Files: ServletUnitContext.java ServletUnitHttpSession.java ServletUnitServletContext.java SessionListenerDispatcher.java WebApplication.java Log Message: Added support for attribute binding listeners Index: ServletUnitContext.java =================================================================== RCS file: /cvsroot/httpunit/httpunit/src/com/meterware/servletunit/ServletUnitContext.java,v retrieving revision 1.6 retrieving revision 1.7 diff -u -r1.6 -r1.7 --- ServletUnitContext.java 13 Feb 2004 05:45:19 -0000 1.6 +++ ServletUnitContext.java 15 Feb 2004 06:42:01 -0000 1.7 @@ -34,6 +34,9 @@ this( null, new SessionListenerDispatcher() { public void sendSessionCreated( HttpSession session ) {} public void sendSessionDestroyed( HttpSession session ) {} + public void sendAttributeAdded( HttpSession session, String name, Object value ) {} + public void sendAttributeReplaced( HttpSession session, String name, Object oldValue ) {} + public void sendAttributeRemoved( HttpSession session, String name, Object oldValue ) {} } ); } Index: ServletUnitHttpSession.java =================================================================== RCS file: /cvsroot/httpunit/httpunit/src/com/meterware/servletunit/ServletUnitHttpSession.java,v retrieving revision 1.9 retrieving revision 1.10 diff -u -r1.9 -r1.10 --- ServletUnitHttpSession.java 13 Feb 2004 05:45:19 -0000 1.9 +++ ServletUnitHttpSession.java 15 Feb 2004 06:42:01 -0000 1.10 @@ -174,7 +174,15 @@ **/ public void setAttribute( String name, Object value ) { if (_invalid) throw new IllegalStateException(); - _values.put( name, value ); + + if (!_values.containsKey( name )) { + _values.put( name, value ); + _listenerDispatcher.sendAttributeAdded( this, name, value ); + } else { + Object oldValue = _values.get( name ); + _values.put( name, value ); + _listenerDispatcher.sendAttributeReplaced( this, name, oldValue ); + } } @@ -184,7 +192,11 @@ **/ public void removeAttribute( String name ) { if (_invalid) throw new IllegalStateException(); - _values.remove( name ); + if (_values.containsKey( name )) { + Object oldValue = _values.get( name ); + _values.remove( name ); + _listenerDispatcher.sendAttributeRemoved( this, name, oldValue ); + } } Index: ServletUnitServletContext.java =================================================================== RCS file: /cvsroot/httpunit/httpunit/src/com/meterware/servletunit/ServletUnitServletContext.java,v retrieving revision 1.12 retrieving revision 1.13 diff -u -r1.12 -r1.13 --- ServletUnitServletContext.java 11 Feb 2003 04:32:01 -0000 1.12 +++ ServletUnitServletContext.java 15 Feb 2004 06:42:01 -0000 1.13 @@ -287,12 +287,21 @@ } public void setAttribute( String name, Object attribute ) { - _attributes.put( name, attribute ); + if (!_attributes.containsKey( name )) { + _attributes.put( name, attribute ); + _application.sendAttributeAdded( name, attribute ); + } else { + Object oldValue = _attributes.get( name ); + _attributes.put( name, attribute ); + _application.sendAttributeReplaced( name, oldValue ); + } } public void removeAttribute( String name ) { + Object oldValue = _attributes.get( name ); _attributes.remove( name ); + _application.sendAttributeRemoved( name, oldValue ); } Index: SessionListenerDispatcher.java =================================================================== RCS file: /cvsroot/httpunit/httpunit/src/com/meterware/servletunit/SessionListenerDispatcher.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- SessionListenerDispatcher.java 13 Feb 2004 05:45:19 -0000 1.1 +++ SessionListenerDispatcher.java 15 Feb 2004 06:42:01 -0000 1.2 @@ -34,4 +34,13 @@ void sendSessionDestroyed( HttpSession session ); + + void sendAttributeAdded( HttpSession session, String name, Object value ); + + + void sendAttributeReplaced( HttpSession session, String name, Object oldValue ); + + + void sendAttributeRemoved( HttpSession session, String name, Object oldValue ); + } Index: WebApplication.java =================================================================== RCS file: /cvsroot/httpunit/httpunit/src/com/meterware/servletunit/WebApplication.java,v retrieving revision 1.21 retrieving revision 1.22 diff -u -r1.21 -r1.22 --- WebApplication.java 13 Feb 2004 05:45:19 -0000 1.21 +++ WebApplication.java 15 Feb 2004 06:42:01 -0000 1.22 @@ -61,8 +61,12 @@ private ArrayList _contextListeners = new ArrayList(); + private ArrayList _contextAttributeListeners = new ArrayList(); + private ArrayList _sessionListeners = new ArrayList(); + private ArrayList _sessionAttributeListeners = new ArrayList(); + private boolean _useBasicAuthentication; private boolean _useFormAuthentication; @@ -131,7 +135,9 @@ Object listener = Class.forName( listenerName ).newInstance(); if (listener instanceof ServletContextListener) _contextListeners.add( listener ); + if (listener instanceof ServletContextAttributeListener) _contextAttributeListeners.add( listener ); if (listener instanceof HttpSessionListener) _sessionListeners.add( listener ); + if (listener instanceof HttpSessionAttributeListener) _sessionAttributeListeners.add( listener ); } catch (Throwable x) { throw new RuntimeException("Unable to load context listener " + listenerName, x); } @@ -164,6 +170,36 @@ } + void sendAttributeAdded( String name, Object value ) { + ServletContextAttributeEvent event = new ServletContextAttributeEvent( getServletContext(), name, value ); + + for (Iterator i = _contextAttributeListeners.iterator(); i.hasNext();) { + ServletContextAttributeListener listener = (ServletContextAttributeListener) i.next(); + listener.attributeAdded( event ); + } + } + + + void sendAttributeReplaced( String name, Object value ) { + ServletContextAttributeEvent event = new ServletContextAttributeEvent( getServletContext(), name, value ); + + for (Iterator i = _contextAttributeListeners.iterator(); i.hasNext();) { + ServletContextAttributeListener listener = (ServletContextAttributeListener) i.next(); + listener.attributeReplaced( event ); + } + } + + + void sendAttributeRemoved( String name, Object value ) { + ServletContextAttributeEvent event = new ServletContextAttributeEvent( getServletContext(), name, value ); + + for (Iterator i = _contextAttributeListeners.iterator(); i.hasNext();) { + ServletContextAttributeListener listener = (ServletContextAttributeListener) i.next(); + listener.attributeRemoved( event ); + } + } + + private void extractSecurityConstraints( Document document ) throws SAXException { NodeList nl = document.getElementsByTagName( "security-constraint" ); for (int i = 0; i < nl.getLength(); i++) { @@ -329,6 +365,36 @@ } + public void sendAttributeAdded( HttpSession session, String name, Object value ) { + HttpSessionBindingEvent event = new HttpSessionBindingEvent( session, name, value ); + + for (Iterator i = _sessionAttributeListeners.iterator(); i.hasNext();) { + HttpSessionAttributeListener listener = (HttpSessionAttributeListener) i.next(); + listener.attributeAdded( event ); + } + } + + + public void sendAttributeReplaced( HttpSession session, String name, Object oldValue ) { + HttpSessionBindingEvent event = new HttpSessionBindingEvent( session, name, oldValue ); + + for (Iterator i = _sessionAttributeListeners.iterator(); i.hasNext();) { + HttpSessionAttributeListener listener = (HttpSessionAttributeListener) i.next(); + listener.attributeReplaced( event ); + } + } + + + public void sendAttributeRemoved( HttpSession session, String name, Object oldValue ) { + HttpSessionBindingEvent event = new HttpSessionBindingEvent( session, name, oldValue ); + + for (Iterator i = _sessionAttributeListeners.iterator(); i.hasNext();) { + HttpSessionAttributeListener listener = (HttpSessionAttributeListener) i.next(); + listener.attributeRemoved( event ); + } + } + + //--------------------------------------------------- private members -------------------------------------------------- @@ -441,6 +507,7 @@ final static int DONT_AUTOLOAD = Integer.MIN_VALUE; final static int ANY_LOAD_ORDER = Integer.MAX_VALUE; + class ServletConfiguration { private Servlet _servlet; |