psmith 2003/09/17 21:03:38 Modified: src/java/org/apache/log4j/chainsaw LogUI.java Log: Things that like to react when new Plugins are started/stopped are now decoupled from the things that actually create/stop them. Much cleaner. Revision Changes Path 1.31 +107 -89 jakarta-log4j/src/java/org/apache/log4j/chainsaw/LogUI.java Index: LogUI.java =================================================================== RCS file: /home/cvs/jakarta-log4j/src/java/org/apache/log4j/chainsaw/LogUI.java,v retrieving revision 1.30 retrieving revision 1.31 diff -u -r1.30 -r1.31 --- LogUI.java 17 Sep 2003 01:25:23 -0000 1.30 +++ LogUI.java 18 Sep 2003 04:03:38 -0000 1.31 @@ -49,22 +49,6 @@ package org.apache.log4j.chainsaw; -import org.apache.log4j.Level; -import org.apache.log4j.LogManager; -import org.apache.log4j.Priority; -import org.apache.log4j.UtilLoggingLevel; -import org.apache.log4j.chainsaw.icons.ChainsawIcons; -import org.apache.log4j.chainsaw.prefs.LoadSettingsEvent; -import org.apache.log4j.chainsaw.prefs.SaveSettingsEvent; -import org.apache.log4j.chainsaw.prefs.SettingsListener; -import org.apache.log4j.chainsaw.prefs.SettingsManager; -import org.apache.log4j.helpers.LogLog; -import org.apache.log4j.helpers.OptionConverter; -import org.apache.log4j.net.SocketNodeEventListener; -import org.apache.log4j.net.SocketReceiver; -import org.apache.log4j.plugins.PluginRegistry; -import org.apache.log4j.plugins.Receiver; - import java.awt.BorderLayout; import java.awt.Component; import java.awt.Dimension; @@ -79,20 +63,15 @@ import java.awt.event.MouseEvent; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; - import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; - import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.ObjectInputStream; - import java.lang.reflect.Method; - import java.net.URL; - import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; @@ -118,6 +97,24 @@ import javax.swing.event.ChangeListener; import javax.swing.event.EventListenerList; +import org.apache.log4j.Level; +import org.apache.log4j.LogManager; +import org.apache.log4j.Priority; +import org.apache.log4j.UtilLoggingLevel; +import org.apache.log4j.chainsaw.icons.ChainsawIcons; +import org.apache.log4j.chainsaw.prefs.LoadSettingsEvent; +import org.apache.log4j.chainsaw.prefs.SaveSettingsEvent; +import org.apache.log4j.chainsaw.prefs.SettingsListener; +import org.apache.log4j.chainsaw.prefs.SettingsManager; +import org.apache.log4j.helpers.LogLog; +import org.apache.log4j.helpers.OptionConverter; +import org.apache.log4j.net.SocketNodeEventListener; +import org.apache.log4j.plugins.Plugin; +import org.apache.log4j.plugins.PluginEvent; +import org.apache.log4j.plugins.PluginListener; +import org.apache.log4j.plugins.PluginRegistry; +import org.apache.log4j.plugins.Receiver; + /** * The main entry point for Chainsaw, this class represents the first frame @@ -345,6 +342,49 @@ * layout, table columns, and sets itself viewable. */ public void activateViewer() { + final SocketNodeEventListener socketListener = + new SocketNodeEventListener() { + public void socketOpened(String remoteInfo) { + statusBar.remoteConnectionReceived(remoteInfo); + } + + public void socketClosedEvent(Exception e) { + statusBar.setMessage("Collection lost! :: " + e.getMessage()); + } + }; + + PluginListener pluginListener = + new PluginListener() { + public void pluginStarted(PluginEvent e) { + statusBar.setMessage(e.getPlugin().getName() + " started!"); + } + + Method getSocketNodeEventListenerMethod(Plugin p) { + try { + return p.getClass().getMethod( + "removeSocketNodeEventListener", + new Class[] { SocketNodeEventListener.class }); + } catch (Exception e) { + return null; + } + } + + public void pluginStopped(PluginEvent e) { + Method method = getSocketNodeEventListenerMethod(e.getPlugin()); + + if (method != null) { + try { + method.invoke(e.getPlugin(), new Object[] { socketListener }); + } catch (Exception ex) { + LogLog.error("Failed to remove SocketNodeEventListener", ex); + } + } + statusBar.setMessage(e.getPlugin().getName() + " stopped!"); + } + }; + + PluginRegistry.addPluginListener(pluginListener); + getSettingsManager().configure( new SettingsListener() { public void loadSettings(LoadSettingsEvent event) { @@ -400,30 +440,6 @@ initGUI(); - /** - * Get all the SocketReceivers and configure a new SocketNodeEventListener - * so we can get notified of new Sockets - */ - List list = - PluginRegistry.getPlugins( - LogManager.getLoggerRepository(), SocketReceiver.class); - final SocketNodeEventListener socketListener = - new SocketNodeEventListener() { - public void socketOpened(String remoteInfo) { - statusBar.remoteConnectionReceived(remoteInfo); - } - - public void socketClosedEvent(Exception e) { - statusBar.setMessage("Collection lost! :: " + e.getMessage()); - } - }; - - for (Iterator iter = list.iterator(); iter.hasNext();) { - SocketReceiver item = (SocketReceiver) iter.next(); - LogLog.debug("Adding listener for " + item.getName()); - item.addSocketNodeEventListener(socketListener); - } - List utilList = UtilLoggingLevel.getAllPossibleLevels(); // TODO: Replace the array list creating with the standard way of retreiving the Level set. (TBD) @@ -553,14 +569,15 @@ }); pack(); - - this.handler.addPropertyChangeListener("dataRate", new PropertyChangeListener(){ - public void propertyChange(PropertyChangeEvent evt) { - double dataRate = ((Double)evt.getNewValue()).doubleValue(); - statusBar.setDataRate(dataRate); - - }}); + this.handler.addPropertyChangeListener( + "dataRate", + new PropertyChangeListener() { + public void propertyChange(PropertyChangeEvent evt) { + double dataRate = ((Double) evt.getNewValue()).doubleValue(); + statusBar.setDataRate(dataRate); + } + }); getSettingsManager().addSettingsListener(this); getSettingsManager().addSettingsListener(getToolBarAndMenus()); @@ -581,41 +598,43 @@ } /** - * Displays a warning dialog about having no Receivers defined - * and allows the user to choose some options for configuration - */ + * Displays a warning dialog about having no Receivers defined + * and allows the user to choose some options for configuration + */ private void showNoReceiversWarningPanel() { - final NoReceiversWarningPanel noReceiversWarningPanel = - new NoReceiversWarningPanel(); + final NoReceiversWarningPanel noReceiversWarningPanel = + new NoReceiversWarningPanel(); + + final SettingsListener sl = + new SettingsListener() { + public void loadSettings(LoadSettingsEvent event) { + int size = event.asInt("SavedConfigs.Size"); + Object[] configs = new Object[size]; - final SettingsListener sl = new SettingsListener() { - public void loadSettings(LoadSettingsEvent event) { - int size = event.asInt("SavedConfigs.Size"); - Object[] configs = new Object[size]; - - for (int i = 0; i < size; i++) { - configs[i] = event.getSetting("SavedConfigs." + i); - } - - noReceiversWarningPanel.getModel().setRememberedConfigs(configs); - } - - public void saveSettings(SaveSettingsEvent event) { - Object[] configs = - noReceiversWarningPanel.getModel().getRememberedConfigs(); - event.saveSetting("SavedConfigs.Size", configs.length); - - for (int i = 0; i < configs.length; i++) { - event.saveSetting("SavedConfigs." + i, configs[i].toString()); - } - } - }; - /** - * This listener sets up the NoReciversWarningPanel and - * loads saves the configs/logfiles - */ - getSettingsManager().addSettingsListener(sl); - getSettingsManager().configure(sl); + for (int i = 0; i < size; i++) { + configs[i] = event.getSetting("SavedConfigs." + i); + } + + noReceiversWarningPanel.getModel().setRememberedConfigs(configs); + } + + public void saveSettings(SaveSettingsEvent event) { + Object[] configs = + noReceiversWarningPanel.getModel().getRememberedConfigs(); + event.saveSetting("SavedConfigs.Size", configs.length); + + for (int i = 0; i < configs.length; i++) { + event.saveSetting("SavedConfigs." + i, configs[i].toString()); + } + } + }; + + /** + * This listener sets up the NoReciversWarningPanel and + * loads saves the configs/logfiles + */ + getSettingsManager().addSettingsListener(sl); + getSettingsManager().configure(sl); SwingUtilities.invokeLater( new Runnable() { @@ -666,9 +685,6 @@ PluginRegistry.startPlugin(simpleReceiver); receiversPanel.updateReceiverTreeInDispatchThread(); - getStatusBar().setMessage( - "Simple Receiver created, started, and listening on port " - + port + " (using " + receiverClass.getName() + ")"); } catch (Exception e) { LogLog.error("Error creating Receiver", e); getStatusBar().setMessage( @@ -690,7 +706,9 @@ } catch (Exception e) { LogLog.error("Error initializing Log4j", e); } - LogManager.getLoggerRepository().getRootLogger().addAppender(handler); + + LogManager.getLoggerRepository().getRootLogger() + .addAppender(handler); receiversPanel.updateReceiverTreeInDispatchThread(); }
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]