001: /*
002: * Copyright © 2002-2005tagtraum industries
003: */
004: package com.tagtraum.jo;
005:
006: import javax.servlet.http.HttpSessionAttributeListener;
007: import javax.servlet.http.HttpSessionListener;
008: import javax.servlet.http.HttpSessionBindingEvent;
009: import javax.servlet.http.HttpSessionEvent;
010: import javax.servlet.http.HttpSession;
011: import javax.servlet.ServletContextListener;
012: import javax.servlet.ServletContextAttributeListener;
013: import javax.servlet.ServletContextAttributeEvent;
014: import javax.servlet.ServletContextEvent;
015: import javax.servlet.ServletContext;
016: import java.util.EventListener;
017: import java.util.List;
018: import java.util.ArrayList;
019:
020: /**
021: * Support class that eases the firing of certain ServletContext/HttpSession events
022: * to listeners declared in the deployment descriptor.
023: *
024: * @author <a href="mailto:hs@tagtraum.com">Hendrik Schreiber</a>
025: * @version 1.1beta1 ($Revision: 1.3 $)
026: */
027: public class ListenerSupport {
028:
029: private List sessionAttributeListeners;
030: private List sessionListeners;
031: private List servletContextListeners;
032: private List servletContextAttributeListeners;
033:
034: public ListenerSupport() {
035: sessionAttributeListeners = new ArrayList();
036: sessionListeners = new ArrayList();
037: servletContextListeners = new ArrayList();
038: servletContextAttributeListeners = new ArrayList();
039: }
040:
041: public void addListener(EventListener eventListener) {
042: boolean addedListener = false;
043: if (eventListener instanceof HttpSessionAttributeListener) {
044: sessionAttributeListeners.add(eventListener);
045: addedListener = true;
046: }
047: if (eventListener instanceof HttpSessionListener) {
048: sessionListeners.add(eventListener);
049: addedListener = true;
050: }
051: if (eventListener instanceof ServletContextListener) {
052: servletContextListeners.add(eventListener);
053: addedListener = true;
054: }
055: if (eventListener instanceof ServletContextAttributeListener) {
056: servletContextAttributeListeners.add(eventListener);
057: addedListener = true;
058: }
059: if (!addedListener)
060: throw new IllegalArgumentException(
061: "EventListener does not implement known interface: "
062: + eventListener);
063: }
064:
065: // session attribute listeners
066:
067: public void fireSessionAttributeAdded(HttpSession session,
068: String name, Object value) {
069: HttpSessionBindingEvent event = new HttpSessionBindingEvent(
070: session, name, value);
071: for (int i = 0, max = sessionAttributeListeners.size(); i < max; i++) {
072: ((HttpSessionAttributeListener) sessionAttributeListeners
073: .get(i)).attributeAdded(event);
074: }
075: }
076:
077: public void fireSessionAttributeRemoved(HttpSession session,
078: String name, Object value) {
079: HttpSessionBindingEvent event = new HttpSessionBindingEvent(
080: session, name, value);
081: for (int i = 0, max = sessionAttributeListeners.size(); i < max; i++) {
082: ((HttpSessionAttributeListener) sessionAttributeListeners
083: .get(i)).attributeRemoved(event);
084: }
085: }
086:
087: public void fireSessionAttributeReplaced(HttpSession session,
088: String name, Object value) {
089: HttpSessionBindingEvent event = new HttpSessionBindingEvent(
090: session, name, value);
091: for (int i = 0, max = sessionAttributeListeners.size(); i < max; i++) {
092: ((HttpSessionAttributeListener) sessionAttributeListeners
093: .get(i)).attributeReplaced(event);
094: }
095: }
096:
097: // servletcontext attribute listeners
098:
099: public void fireServletContextAttributeAdded(
100: ServletContext servletContext, String name, Object value) {
101: ServletContextAttributeEvent event = new ServletContextAttributeEvent(
102: servletContext, name, value);
103: for (int i = 0, max = servletContextAttributeListeners.size(); i < max; i++) {
104: ((ServletContextAttributeListener) servletContextAttributeListeners
105: .get(i)).attributeAdded(event);
106: }
107: }
108:
109: public void fireServletContextAttributeRemoved(
110: ServletContext servletContext, String name, Object value) {
111: ServletContextAttributeEvent event = new ServletContextAttributeEvent(
112: servletContext, name, value);
113: for (int i = 0, max = servletContextAttributeListeners.size(); i < max; i++) {
114: ((ServletContextAttributeListener) servletContextAttributeListeners
115: .get(i)).attributeRemoved(event);
116: }
117: }
118:
119: public void fireServletContextAttributeReplaced(
120: ServletContext servletContext, String name, Object value) {
121: ServletContextAttributeEvent event = new ServletContextAttributeEvent(
122: servletContext, name, value);
123: for (int i = 0, max = servletContextAttributeListeners.size(); i < max; i++) {
124: ((ServletContextAttributeListener) servletContextAttributeListeners
125: .get(i)).attributeReplaced(event);
126: }
127: }
128:
129: // servletcontext lifecycle listeners
130:
131: public void fireServletContextInitialized(
132: ServletContext servletContext) {
133: ServletContextEvent event = new ServletContextEvent(
134: servletContext);
135: for (int i = 0, max = servletContextListeners.size(); i < max; i++) {
136: ((ServletContextListener) servletContextListeners.get(i))
137: .contextInitialized(event);
138: }
139: }
140:
141: public void fireServletContextDestroyed(
142: ServletContext servletContext) {
143: // destroy in reverse order
144: ServletContextEvent event = new ServletContextEvent(
145: servletContext);
146: for (int i = servletContextListeners.size() - 1; i >= 0; i--) {
147: ((ServletContextListener) servletContextListeners.get(i))
148: .contextDestroyed(event);
149: }
150: }
151:
152: // session lifecycle listeners
153:
154: public void fireSessionCreated(HttpSession session) {
155: HttpSessionEvent event = new HttpSessionEvent(session);
156: for (int i = 0, max = sessionListeners.size(); i < max; i++) {
157: ((HttpSessionListener) sessionListeners.get(i))
158: .sessionCreated(event);
159: }
160: }
161:
162: public void fireSessionDestroyed(HttpSession session) {
163: // destroy in reverse order
164: HttpSessionEvent event = new HttpSessionEvent(session);
165: for (int i = sessionListeners.size() - 1; i >= 0; i--) {
166: ((HttpSessionListener) sessionListeners.get(i))
167: .sessionDestroyed(event);
168: }
169: }
170:
171: }
|