svn commit: r944 - in logback/trunk/logback-classic/src: main/java/ch/qos/logback/classic main/java/ch/qos/logback/classic/spi test/java/ch/qos/logback/classic/spi

Author: seb Date: Fri Nov 17 15:34:32 2006 New Revision: 944 Added: logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/spi/ContextListener.java logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/spi/EventType.java logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/spi/LogbackEvent.java logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/spi/ logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/spi/BasicContextListener.java logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/spi/ContextListenerTest.java Modified: logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/LoggerContext.java Log: first implementation of a ContextListener and LogbackEvent objects. Modified: logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/LoggerContext.java ============================================================================== --- logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/LoggerContext.java (original) +++ logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/LoggerContext.java Fri Nov 17 15:34:32 2006 @@ -10,12 +10,17 @@ package ch.qos.logback.classic; +import java.util.ArrayList; import java.util.HashMap; import java.util.Hashtable; +import java.util.List; import org.slf4j.ILoggerFactory; import org.slf4j.Marker; +import ch.qos.logback.classic.spi.ContextListener; +import ch.qos.logback.classic.spi.EventType; +import ch.qos.logback.classic.spi.LogbackEvent; import ch.qos.logback.classic.spi.LoggerContextRemoteView; import ch.qos.logback.classic.spi.TurboFilterAttachable; import ch.qos.logback.classic.spi.TurboFilterAttachableImpl; @@ -36,6 +41,7 @@ final Logger root; private int size; private int noAppenderWarning = 0; + private List<ContextListener> listenerList; // We want loggerCache to be synchronized so Hashtable is a good choice. In // practice, it @@ -164,9 +170,8 @@ } public void shutdownAndReset() { - root.recursiveReset(); - + notifyListeners(EventType.CONTEXT_RESTART); } public void addTurboFilter(TurboFilter newFilter) { @@ -200,4 +205,24 @@ } return cfai.getFirstTurboFilter(); } + + public void addListener(ContextListener listener) { + if (listenerList == null) { + listenerList = new ArrayList<ContextListener>(); + } + listenerList.add(listener); + } + + public void removeListener(ContextListener listener) { + if (listenerList != null) { + listenerList.remove(listener); + } + } + + private void notifyListeners(EventType eventType) { + LogbackEvent event = new LogbackEvent(this, eventType); + for (ContextListener listener: listenerList) { + listener.update(event); + } + } } Added: logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/spi/ContextListener.java ============================================================================== --- (empty file) +++ logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/spi/ContextListener.java Fri Nov 17 15:34:32 2006 @@ -0,0 +1,9 @@ +package ch.qos.logback.classic.spi; + +import java.util.EventListener; + +public interface ContextListener extends EventListener { + + public void update(LogbackEvent logbackEvent); + +} Added: logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/spi/EventType.java ============================================================================== --- (empty file) +++ logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/spi/EventType.java Fri Nov 17 15:34:32 2006 @@ -0,0 +1,5 @@ +package ch.qos.logback.classic.spi; + +public enum EventType { + CONTEXT_RESTART; +} Added: logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/spi/LogbackEvent.java ============================================================================== --- (empty file) +++ logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/spi/LogbackEvent.java Fri Nov 17 15:34:32 2006 @@ -0,0 +1,19 @@ +package ch.qos.logback.classic.spi; + +import java.util.EventObject; + +public class LogbackEvent extends EventObject { + + private static final long serialVersionUID = -2688530978380786446L; + + private final EventType type; + + public LogbackEvent(Object source, EventType type) { + super(source); + this.type = type; + } + + public EventType getType() { + return type; + } +} Added: logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/spi/BasicContextListener.java ============================================================================== --- (empty file) +++ logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/spi/BasicContextListener.java Fri Nov 17 15:34:32 2006 @@ -0,0 +1,12 @@ +package ch.qos.logback.classic.spi; + +public class BasicContextListener implements ContextListener { + + boolean updated = false; + LogbackEvent lastEvent; + + public void update(LogbackEvent logbackEvent) { + updated = true; + lastEvent = logbackEvent; + } +} Added: logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/spi/ContextListenerTest.java ============================================================================== --- (empty file) +++ logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/spi/ContextListenerTest.java Fri Nov 17 15:34:32 2006 @@ -0,0 +1,25 @@ +package ch.qos.logback.classic.spi; + +import junit.framework.TestCase; +import ch.qos.logback.classic.LoggerContext; + +public class ContextListenerTest extends TestCase { + + LoggerContext context; + BasicContextListener listener; + + public void setUp() throws Exception { + context = new LoggerContext(); + listener = new BasicContextListener(); + context.addListener(listener); + super.setUp(); + } + + public void testNotify() { + context.shutdownAndReset(); + assertTrue(listener.updated); + assertEquals(EventType.CONTEXT_RESTART, listener.lastEvent.getType()); + assertEquals(context, listener.lastEvent.getSource()); + } + +}
participants (1)
-
noreply.seb@qos.ch