This is an automated email from the ASF dual-hosted git repository.

grobmeier pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/logging-chainsaw.git


The following commit(s) were added to refs/heads/master by this push:
     new e60d736  removed SettingsManager singleton in favor to injecting it
e60d736 is described below

commit e60d736a8b3a15c31690f72b90efc1408eb55e69
Author: Christian Grobmeier <[email protected]>
AuthorDate: Tue Nov 28 22:36:54 2023 +0100

    removed SettingsManager singleton in favor to injecting it
---
 .../chainsaw/ApplicationPreferenceModelPanel.java  | 22 +++---
 .../org/apache/log4j/chainsaw/ChainsawStarter.java | 19 +++---
 .../log4j/chainsaw/ChainsawToolBarAndMenus.java    | 28 +++-----
 src/main/java/org/apache/log4j/chainsaw/LogUI.java | 79 ++++++++++------------
 .../log4j/chainsaw/ReceiverConfigurationPanel.java | 18 ++---
 .../log4j/chainsaw/TableColorizingRenderer.java    |  6 +-
 .../apache/log4j/chainsaw/color/ColorPanel.java    | 14 ++--
 .../apache/log4j/chainsaw/color/RuleColorizer.java |  9 ++-
 .../chainsaw/components/logpanel/LogPanel.java     | 42 ++++++------
 .../logpanel/LogPanelPreferencePanel.java          | 14 ++--
 .../log4j/chainsaw/prefs/SettingsManager.java      | 42 ++++--------
 .../log4j/chainsaw/receivers/ReceiversPanel.java   |  6 +-
 .../log4j/chainsaw/zeroconf/ZeroConfPlugin.java    |  6 +-
 13 files changed, 137 insertions(+), 168 deletions(-)

diff --git 
a/src/main/java/org/apache/log4j/chainsaw/ApplicationPreferenceModelPanel.java 
b/src/main/java/org/apache/log4j/chainsaw/ApplicationPreferenceModelPanel.java
index a5e61e6..d1dbd4d 100644
--- 
a/src/main/java/org/apache/log4j/chainsaw/ApplicationPreferenceModelPanel.java
+++ 
b/src/main/java/org/apache/log4j/chainsaw/ApplicationPreferenceModelPanel.java
@@ -19,7 +19,6 @@ package org.apache.log4j.chainsaw;
 
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
-import org.apache.log4j.chainsaw.helper.SwingHelper;
 import org.apache.log4j.chainsaw.osx.OSXIntegration;
 
 import javax.swing.*;
@@ -27,9 +26,6 @@ import javax.swing.tree.DefaultMutableTreeNode;
 import javax.swing.tree.DefaultTreeModel;
 import javax.swing.tree.TreeModel;
 import java.awt.*;
-import java.io.File;
-import java.net.MalformedURLException;
-import java.net.URL;
 import java.util.Dictionary;
 import java.util.Enumeration;
 import java.util.Hashtable;
@@ -51,23 +47,21 @@ public class ApplicationPreferenceModelPanel extends 
AbstractPreferencePanel {
     private JTextField cyclicBufferSize;
     private GeneralAllPrefPanel generalAllPrefPanel;
     private AbstractConfiguration m_globalConfiguration;
+    private SettingsManager settingsManager;
 
-    ApplicationPreferenceModelPanel() {
-        m_globalConfiguration = 
SettingsManager.getInstance().getGlobalConfiguration();
+    ApplicationPreferenceModelPanel(SettingsManager settingsManager) {
+        this.m_globalConfiguration = settingsManager.getGlobalConfiguration();
+        this.settingsManager = settingsManager;
         initComponents();
         getOkButton().addActionListener(
             e -> {
-                SettingsManager.getInstance().saveGlobalSettings();
+                settingsManager.saveGlobalSettings();
                 hidePanel();
             });
 
         getCancelButton().addActionListener(e -> hidePanel());
     }
 
-    public void updateModel(){
-
-    }
-
     /* (non-Javadoc)
      * @see org.apache.log4j.chainsaw.AbstractPreferencePanel#createTreeModel()
      */
@@ -128,7 +122,7 @@ public class ApplicationPreferenceModelPanel extends 
AbstractPreferencePanel {
          *
          */
         private void setupListeners() {
-            final AbstractConfiguration config = 
SettingsManager.getInstance().getGlobalConfiguration();
+            final AbstractConfiguration config = 
settingsManager.getGlobalConfiguration();
 
             topPlacement.addActionListener(
                 e -> config.setProperty("tabPlacement", SwingConstants.TOP));
@@ -221,7 +215,7 @@ public class ApplicationPreferenceModelPanel extends 
AbstractPreferencePanel {
             JPanel lfPanel = new JPanel();
             lfPanel.setLayout(new BoxLayout(lfPanel, BoxLayout.Y_AXIS));
             lfPanel.setBorder(BorderFactory.createTitledBorder(" Look & Feel 
"));
-            final AbstractConfiguration configuration = 
SettingsManager.getInstance().getGlobalConfiguration();
+            final AbstractConfiguration configuration = 
settingsManager.getGlobalConfiguration();
 
             for (final UIManager.LookAndFeelInfo lfInfo : lookAndFeels) {
                 final JRadioButton lfItem = new JRadioButton(" " + 
lfInfo.getName() + " ");
@@ -272,7 +266,7 @@ public class ApplicationPreferenceModelPanel extends 
AbstractPreferencePanel {
         }
 
         public void updateModel(){
-            AbstractConfiguration config = 
SettingsManager.getInstance().getGlobalConfiguration();
+            AbstractConfiguration config = 
settingsManager.getGlobalConfiguration();
 
             statusBar.setSelected(config.getBoolean("statusBar"));
             receivers.setSelected(config.getBoolean("showReceivers"));
diff --git a/src/main/java/org/apache/log4j/chainsaw/ChainsawStarter.java 
b/src/main/java/org/apache/log4j/chainsaw/ChainsawStarter.java
index 896198d..c7dc52a 100644
--- a/src/main/java/org/apache/log4j/chainsaw/ChainsawStarter.java
+++ b/src/main/java/org/apache/log4j/chainsaw/ChainsawStarter.java
@@ -21,8 +21,6 @@ import java.util.Locale;
 public class ChainsawStarter {
     private static Logger logger = LogManager.getLogger(ChainsawStarter.class);
 
-
-
     /**
      * Starts Chainsaw by attaching a new instance to the Log4J main root 
Logger
      * via a ChainsawAppender, and activates itself
@@ -34,8 +32,9 @@ public class ChainsawStarter {
             System.setProperty("apple.laf.useScreenMenuBar", "true");
         }
 
-        AbstractConfiguration configuration = 
SettingsManager.getInstance().getGlobalConfiguration();
+        SettingsManager settingsManager = new SettingsManager();
 
+        AbstractConfiguration configuration = 
settingsManager.getGlobalConfiguration();
         EventQueue.invokeLater(() -> {
             String lookAndFeelClassName = 
configuration.getString("lookAndFeelClassName");
             if (lookAndFeelClassName == null || 
lookAndFeelClassName.trim().isEmpty()) {
@@ -60,7 +59,7 @@ public class ChainsawStarter {
                     
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                 }catch(Exception ex){}
             }
-            createChainsawGUI(null);
+            createChainsawGUI(settingsManager, null);
         });
     }
 
@@ -71,11 +70,11 @@ public class ChainsawStarter {
      *
      * @param newShutdownAction DOCUMENT ME!
      */
-    public static void createChainsawGUI(Action newShutdownAction) {
-        AbstractConfiguration config = 
SettingsManager.getInstance().getGlobalConfiguration();
+    public static void createChainsawGUI(SettingsManager settingsManager, 
Action newShutdownAction) {
         SplashViewer splashViewer = new SplashViewer();
 
-        if (config.getBoolean("okToRemoveSecurityManager", false)) {
+        AbstractConfiguration configuration = 
settingsManager.getGlobalConfiguration();
+        if (configuration.getBoolean("okToRemoveSecurityManager", false)) {
             System.setSecurityManager(null);
             // this SHOULD set the Policy/Permission stuff for any
             // code loaded from our custom classloader.
@@ -90,14 +89,14 @@ public class ChainsawStarter {
             });
         }
 
-        final LogUI logUI = new LogUI();
+        final LogUI logUI = new LogUI(settingsManager);
         final LoggerContext ctx = (LoggerContext) 
org.apache.logging.log4j.LogManager.getContext(false);
         logUI.chainsawAppender = 
ctx.getConfiguration().getAppender("chainsaw");
 
-        if (config.getBoolean("slowSplash", true)) {
+        if (configuration.getBoolean("slowSplash", true)) {
             splashViewer.showSplash(logUI);
         }
-        logUI.cyclicBufferSize = config.getInt("cyclicBufferSize", 50000);
+        logUI.cyclicBufferSize = configuration.getInt("cyclicBufferSize", 
50000);
 
 
         /**
diff --git 
a/src/main/java/org/apache/log4j/chainsaw/ChainsawToolBarAndMenus.java 
b/src/main/java/org/apache/log4j/chainsaw/ChainsawToolBarAndMenus.java
index f19de0e..d02c965 100644
--- a/src/main/java/org/apache/log4j/chainsaw/ChainsawToolBarAndMenus.java
+++ b/src/main/java/org/apache/log4j/chainsaw/ChainsawToolBarAndMenus.java
@@ -17,6 +17,8 @@
 
 package org.apache.log4j.chainsaw;
 
+import org.apache.commons.configuration2.AbstractConfiguration;
+import org.apache.commons.configuration2.event.ConfigurationEvent;
 import org.apache.log4j.chainsaw.components.elements.SmallButton;
 import org.apache.log4j.chainsaw.components.elements.SmallToggleButton;
 import org.apache.log4j.chainsaw.components.logpanel.LogPanel;
@@ -35,9 +37,6 @@ import java.awt.event.KeyEvent;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
-import org.apache.commons.configuration2.AbstractConfiguration;
-import org.apache.commons.configuration2.event.ConfigurationEvent;
-import org.apache.log4j.chainsaw.prefs.SettingsManager;
 
 
 /**
@@ -89,6 +88,7 @@ class ChainsawToolBarAndMenus implements ChangeListener {
     private final JCheckBoxMenuItem menuShowWelcome = new JCheckBoxMenuItem();
     private final JToolBar toolbar;
     private final LogUI logui;
+    private AbstractConfiguration configuration;
     private final SmallButton clearButton = new SmallButton();
     private final SmallToggleButton detailPaneButton = new SmallToggleButton();
     private final SmallToggleButton logTreePaneButton = new 
SmallToggleButton();
@@ -98,8 +98,9 @@ class ChainsawToolBarAndMenus implements ChangeListener {
     private final Action[] logPanelSpecificActions;
     private final JMenu activeTabMenu = new JMenu("Current tab");
 
-    ChainsawToolBarAndMenus(final LogUI logui) {
+    ChainsawToolBarAndMenus(final LogUI logui, AbstractConfiguration 
configuration) {
         this.logui = logui;
+        this.configuration = configuration;
         toolbar = new JToolBar(SwingConstants.HORIZONTAL);
         menuBar = new JMenuBar();
         fileMenu = new FileMenu(logui);
@@ -138,7 +139,7 @@ class ChainsawToolBarAndMenus implements ChangeListener {
                 toggleLogTreeAction, toggleScrollToBottomAction, 
changeModelAction,
             };
 
-            
SettingsManager.getInstance().getGlobalConfiguration().addEventListener(ConfigurationEvent.SET_PROPERTY,
+            configuration.addEventListener(ConfigurationEvent.SET_PROPERTY,
             evt -> {
                 if( evt.getPropertyName().equals( "statusBar" ) ){
                     boolean value = (Boolean) evt.getPropertyValue();
@@ -146,7 +147,7 @@ class ChainsawToolBarAndMenus implements ChangeListener {
                 }
             });
 
-            
SettingsManager.getInstance().getGlobalConfiguration().addEventListener(ConfigurationEvent.SET_PROPERTY,
+            configuration.addEventListener(ConfigurationEvent.SET_PROPERTY,
             evt -> {
                 if( evt.getPropertyName().equals( "showReceivers" ) ){
                     boolean value = (Boolean) evt.getPropertyValue();
@@ -395,8 +396,6 @@ class ChainsawToolBarAndMenus implements ChangeListener {
 
         viewMenu.setMnemonic('V');
 
-        AbstractConfiguration configuration = 
SettingsManager.getInstance().getGlobalConfiguration();
-
         toggleShowToolbarCheck.setAction(toggleToolbarAction);
         toggleShowToolbarCheck.setSelected(configuration.getBoolean("toolbar", 
true));
 
@@ -440,8 +439,7 @@ class ChainsawToolBarAndMenus implements ChangeListener {
             new AbstractAction("Show Status bar") {
                 public void actionPerformed(ActionEvent arg0) {
                     boolean isSelected = toggleStatusBarCheck.isSelected();
-                    SettingsManager.getInstance().getGlobalConfiguration()
-                            .setProperty("statusBar", isSelected);
+                    configuration.setProperty("statusBar", isSelected);
                 }
             };
 
@@ -632,10 +630,8 @@ class ChainsawToolBarAndMenus implements ChangeListener {
                 public void actionPerformed(ActionEvent arg0) {
                     // Since this action can be triggered from either a button
                     // or a check box, get the current value and invert it.
-                    boolean currentValue = 
SettingsManager.getInstance().getGlobalConfiguration()
-                            .getBoolean("showReceivers", false);
-                    SettingsManager.getInstance().getGlobalConfiguration()
-                            .setProperty("showReceivers", !currentValue);
+                    boolean currentValue = 
configuration.getBoolean("showReceivers", false);
+                    configuration.setProperty("showReceivers", !currentValue);
                 }
             };
 
@@ -683,8 +679,7 @@ class ChainsawToolBarAndMenus implements ChangeListener {
             new AbstractAction("Show Toolbar") {
                 public void actionPerformed(ActionEvent e) {
                     boolean isSelected = toggleShowToolbarCheck.isSelected();
-                    SettingsManager.getInstance().getGlobalConfiguration()
-                            .setProperty("toolbar", isSelected);
+                    configuration.setProperty("toolbar", isSelected);
                 }
             };
 
@@ -794,7 +789,6 @@ class ChainsawToolBarAndMenus implements ChangeListener {
     }
 
     private void scanState() {
-        AbstractConfiguration configuration = 
SettingsManager.getInstance().getGlobalConfiguration();
         boolean showReceiversByDefault = 
configuration.getBoolean("showReceivers", false);
 
         toggleStatusBarCheck.setSelected(logui.isStatusBarVisible());
diff --git a/src/main/java/org/apache/log4j/chainsaw/LogUI.java 
b/src/main/java/org/apache/log4j/chainsaw/LogUI.java
index a95509e..ff531fb 100644
--- a/src/main/java/org/apache/log4j/chainsaw/LogUI.java
+++ b/src/main/java/org/apache/log4j/chainsaw/LogUI.java
@@ -114,7 +114,7 @@ public class LogUI extends JFrame {
     public ChainsawAppender chainsawAppender;
     private ChainsawToolBarAndMenus chainsawToolBarAndMenus;
     private ChainsawAbout aboutBox;
-    private final SettingsManager settingsManager = 
SettingsManager.getInstance();
+    private SettingsManager settingsManager;
     private final JFrame tutorialFrame = new JFrame("Chainsaw Tutorial");
     private JSplitPane mainReceiverSplitPane;
     private double lastMainReceiverSplitLocation = 
DEFAULT_MAIN_RECEIVER_SPLIT_LOCATION;
@@ -123,7 +123,7 @@ public class LogUI extends JFrame {
     public int cyclicBufferSize;
     private List<ChainsawReceiver> m_receivers = new ArrayList<>();
     private List<ReceiverEventListener> m_receiverListeners = new 
ArrayList<>();
-    private ZeroConfPlugin m_zeroConf = new ZeroConfPlugin();
+    private ZeroConfPlugin m_zeroConf = new ZeroConfPlugin(settingsManager);
 
     private static Logger logger = LogManager.getLogger();
 
@@ -145,18 +145,22 @@ public class LogUI extends JFrame {
 
     //map of tab names to rulecolorizers
     private Map<String, RuleColorizer> allColorizers = new HashMap<>();
-    private RuleColorizer globalRuleColorizer = new RuleColorizer(true);
-    private ReceiverConfigurationPanel receiverConfigurationPanel = new 
ReceiverConfigurationPanel();
+    private RuleColorizer globalRuleColorizer = new 
RuleColorizer(settingsManager, true);
+    private ReceiverConfigurationPanel receiverConfigurationPanel = new 
ReceiverConfigurationPanel(settingsManager);
+    private AbstractConfiguration configuration;
 
     /**
      * Constructor which builds up all the visual elements of the frame 
including
      * the Menu bar
      */
-    public LogUI() {
+    public LogUI(SettingsManager settingsManager) {
         super("Chainsaw");
+
+        this.settingsManager = settingsManager;
+        this.configuration = settingsManager.getGlobalConfiguration();
         setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
 
-        
globalRuleColorizer.setConfiguration(SettingsManager.getInstance().getGlobalConfiguration());
+        globalRuleColorizer.setConfiguration(configuration);
         globalRuleColorizer.loadColorSettings();
 
         if (ChainsawIcons.WINDOW_ICON != null) {
@@ -194,7 +198,7 @@ public class LogUI extends JFrame {
         statusBar = new ChainsawStatusBar(this);
         setupReceiverPanel();
 
-        setToolBarAndMenus(new ChainsawToolBarAndMenus(this));
+        setToolBarAndMenus(new ChainsawToolBarAndMenus(this, configuration));
         toolbar = getToolBarAndMenus().getToolbar();
         setJMenuBar(getToolBarAndMenus().getMenubar());
 
@@ -227,7 +231,7 @@ public class LogUI extends JFrame {
 
         });
 
-        applicationPreferenceModelPanel = new 
ApplicationPreferenceModelPanel();
+        applicationPreferenceModelPanel = new 
ApplicationPreferenceModelPanel(settingsManager);
 
         applicationPreferenceModelPanel.setOkCancelActionListener(
             e -> preferencesFrame.setVisible(false));
@@ -246,7 +250,7 @@ public class LogUI extends JFrame {
     }
 
     private void setupReceiverPanel() {
-        receiversPanel = new ReceiversPanel(this, statusBar);
+        receiversPanel = new ReceiversPanel(settingsManager, this, statusBar);
 //        receiversPanel.addPropertyChangeListener(
 //            "visible",
 //            evt -> getApplicationPreferenceModel().setReceivers(
@@ -311,7 +315,7 @@ public class LogUI extends JFrame {
      * etc.
      */
     private void loadSettings() {
-        AbstractConfiguration config = 
SettingsManager.getInstance().getGlobalConfiguration();
+        AbstractConfiguration config = 
settingsManager.getGlobalConfiguration();
         setLocation(
             config.getInt(LogUI.MAIN_WINDOW_X, 0), 
config.getInt(LogUI.MAIN_WINDOW_Y, 0));
         int width = config.getInt(LogUI.MAIN_WINDOW_WIDTH, -1);
@@ -326,7 +330,7 @@ public class LogUI extends JFrame {
         }
 
         getToolBarAndMenus().stateChange();
-        RuleColorizer colorizer = new RuleColorizer();
+        RuleColorizer colorizer = new RuleColorizer(settingsManager);
         allColorizers.put(ChainsawConstants.DEFAULT_COLOR_RULE_NAME, 
colorizer);
     }
 
@@ -597,7 +601,7 @@ public class LogUI extends JFrame {
 
         setVisible(true);
 
-        if 
(settingsManager.getGlobalConfiguration().getBoolean("showReceivers", false)) {
+        if (configuration.getBoolean("showReceivers", false)) {
             showReceiverPanel();
         } else {
             hideReceiverPanel();
@@ -609,7 +613,7 @@ public class LogUI extends JFrame {
 
         if (
             noReceiversDefined
-                && 
settingsManager.getGlobalConfiguration().getBoolean("showNoReceiverWarning", 
true)) {
+                && configuration.getBoolean("showNoReceiverWarning", true)) {
             SwingHelper.invokeOnEDT(this::showReceiverConfigurationPanel);
         }
 
@@ -661,10 +665,10 @@ public class LogUI extends JFrame {
          * hide those tabs out of currently loaded tabs..
          */
 
-        if 
(!settingsManager.getGlobalConfiguration().getBoolean("displayWelcomeTab", 
true)) {
+        if (!configuration.getBoolean("displayWelcomeTab", true)) {
             displayPanel(ChainsawTabbedPane.WELCOME_TAB, false);
         }
-        if 
(!settingsManager.getGlobalConfiguration().getBoolean("displayZeroconfTab", 
true)) {
+        if (!configuration.getBoolean("displayZeroconfTab", true)) {
             displayPanel(ChainsawTabbedPane.ZEROCONF, false);
         }
         chainsawToolBarAndMenus.stateChange();
@@ -811,7 +815,7 @@ public class LogUI extends JFrame {
 //            evt -> 
handler.setIdentifierExpression(evt.getNewValue().toString()));
 //        
handler.setIdentifierExpression(applicationPreferenceModel.getIdentifierExpression());
 
-        int tooltipDisplayMillis = 
settingsManager.getGlobalConfiguration().getInt("tooltipDisplayMillis", 4000);
+        int tooltipDisplayMillis = 
configuration.getInt("tooltipDisplayMillis", 4000);
 //        applicationPreferenceModel.addPropertyChangeListener(
 //            "toolTipDisplayMillis",
 //            evt -> ToolTipManager.sharedInstance().setDismissDelay(
@@ -845,17 +849,17 @@ public class LogUI extends JFrame {
 //                    }
 //                }));
 //
-        
settingsManager.getGlobalConfiguration().addEventListener(ConfigurationEvent.SET_PROPERTY,
+        configuration.addEventListener(ConfigurationEvent.SET_PROPERTY,
             evt -> {
                 if( evt.getPropertyName().equals( "statusBar" ) ){
                     boolean value = (Boolean) evt.getPropertyValue();
                     statusBar.setVisible(value);
                 }
             });
-        boolean showStatusBar = 
settingsManager.getGlobalConfiguration().getBoolean("statusBar", true);
+        boolean showStatusBar = configuration.getBoolean("statusBar", true);
         setStatusBarVisible(showStatusBar);
 
-        
settingsManager.getGlobalConfiguration().addEventListener(ConfigurationEvent.SET_PROPERTY,
+        configuration.addEventListener(ConfigurationEvent.SET_PROPERTY,
             evt -> {
                 if( evt.getPropertyName().equals( "showReceivers" ) ){
                     boolean value = (Boolean) evt.getPropertyValue();
@@ -866,7 +870,7 @@ public class LogUI extends JFrame {
                     }
                 }
             });
-        boolean showReceivers = 
settingsManager.getGlobalConfiguration().getBoolean("showReceivers", false);
+        boolean showReceivers = configuration.getBoolean("showReceivers", 
false);
         setStatusBarVisible(showStatusBar);
         if( showReceivers ){
             showReceiverPanel();
@@ -892,14 +896,14 @@ public class LogUI extends JFrame {
 ////    }
 //
 //
-        
settingsManager.getGlobalConfiguration().addEventListener(ConfigurationEvent.SET_PROPERTY,
+        configuration.addEventListener(ConfigurationEvent.SET_PROPERTY,
             evt -> {
                 if( evt.getPropertyName().equals( "toolbar" ) ){
                     boolean value = (Boolean) evt.getPropertyValue();
                     toolbar.setVisible(value);
                 }
             });
-        boolean showToolbar = 
settingsManager.getGlobalConfiguration().getBoolean("toolbar", true);
+        boolean showToolbar = configuration.getBoolean("toolbar", true);
         toolbar.setVisible(showToolbar);
 
     }
@@ -1088,10 +1092,10 @@ public class LogUI extends JFrame {
      */
     public boolean exit() {
         for(ChainsawReceiver rx : m_receivers){
-            getSettingsManager().saveSettingsForReceiver(rx);
+            settingsManager.saveSettingsForReceiver(rx);
         }
 
-        getSettingsManager().saveAllSettings();
+        settingsManager.saveAllSettings();
 
         return shutdown();
     }
@@ -1118,13 +1122,13 @@ public class LogUI extends JFrame {
     }
 
     public void showApplicationPreferences() {
-        applicationPreferenceModelPanel.updateModel();
+        // applicationPreferenceModelPanel.updateModel();
         preferencesFrame.setVisible(true);
     }
 
     public void loadReceiver() {
         Runnable r = () -> {
-            JFileChooser jfc = new 
JFileChooser(SettingsManager.getSettingsDirectory());
+            JFileChooser jfc = new 
JFileChooser(settingsManager.getSettingsDirectory());
             int returnVal = jfc.showOpenDialog(this);
             if(returnVal != JFileChooser.APPROVE_OPTION) {
                 return;
@@ -1135,7 +1139,7 @@ public class LogUI extends JFrame {
             // Create the receiver
             String fileToLoad = jfc.getSelectedFile().getName();
             String receiverName = fileToLoad.split( "-" )[0];
-            AbstractConfiguration config = 
SettingsManager.getInstance().getSettingsForReceiverTab(receiverName);
+            AbstractConfiguration config = 
settingsManager.getSettingsForReceiverTab(receiverName);
             String typeToLoad = config.getString("receiver.type");
             ServiceLoader<ChainsawReceiverFactory> sl = 
ServiceLoader.load(ChainsawReceiverFactory.class);
 
@@ -1143,7 +1147,7 @@ public class LogUI extends JFrame {
                 if(crFactory.getReceiverName().equals(typeToLoad)){
                     ChainsawReceiver rx = crFactory.create();
                     rx.setName(receiverName);
-                    SettingsManager.getInstance().loadSettingsForReceiver(rx);
+                    settingsManager.loadSettingsForReceiver(rx);
                     addReceiver(rx);
 
                     rx.start();
@@ -1194,7 +1198,7 @@ public class LogUI extends JFrame {
      * Shutsdown by ensuring the Appender gets a chance to close.
      */
     public boolean shutdown() {
-        boolean confirmExit = 
settingsManager.getGlobalConfiguration().getBoolean("confirmExit", true);
+        boolean confirmExit = configuration.getBoolean("confirmExit", true);
         if (confirmExit) {
             if (
                 JOptionPane.showConfirmDialog(
@@ -1376,19 +1380,6 @@ public class LogUI extends JFrame {
         return panelMap;
     }
 
-    //  public Map getLevelMap() {
-    //    return levelMap;
-    //  }
-
-    /**
-     * DOCUMENT ME!
-     *
-     * @return DOCUMENT ME!
-     */
-    public SettingsManager getSettingsManager() {
-        return settingsManager;
-    }
-
     /**
      * DOCUMENT ME!
      *
@@ -1401,7 +1392,7 @@ public class LogUI extends JFrame {
     /**
      * DOCUMENT ME!
      *
-     * @param tbms DOCUMENT ME!
+     * @param tbms          DOCUMENT ME!
      */
     public void setToolBarAndMenus(ChainsawToolBarAndMenus tbms) {
         this.chainsawToolBarAndMenus = tbms;
@@ -1486,7 +1477,7 @@ public class LogUI extends JFrame {
     private void buildLogPanel(
         boolean customExpression, final String ident, final 
List<ChainsawLoggingEvent> events, final ChainsawReceiver rx)
         throws IllegalArgumentException {
-        final LogPanel thisPanel = new LogPanel(getStatusBar(), ident, 
cyclicBufferSize, allColorizers, applicationPreferenceModel, 
globalRuleColorizer);
+        final LogPanel thisPanel = new LogPanel(settingsManager, 
getStatusBar(), ident, cyclicBufferSize, allColorizers, 
applicationPreferenceModel, globalRuleColorizer);
 
         if( !customExpression && rx != null ){
             thisPanel.setReceiver(rx);
diff --git 
a/src/main/java/org/apache/log4j/chainsaw/ReceiverConfigurationPanel.java 
b/src/main/java/org/apache/log4j/chainsaw/ReceiverConfigurationPanel.java
index 7c57538..a21b756 100644
--- a/src/main/java/org/apache/log4j/chainsaw/ReceiverConfigurationPanel.java
+++ b/src/main/java/org/apache/log4j/chainsaw/ReceiverConfigurationPanel.java
@@ -47,7 +47,7 @@ import org.apache.logging.log4j.Logger;
 class ReceiverConfigurationPanel extends JPanel {
     private final Logger logger = LogManager.getLogger();
 
-    private final PanelModel panelModel = new PanelModel();
+    private final PanelModel panelModel;
 
     //network receiver widgets
     private JComboBox<String> networkReceiverPortComboBox;
@@ -102,10 +102,11 @@ class ReceiverConfigurationPanel extends JPanel {
     //used as frame for file open dialogs
     private Container dialog;
 
-    ReceiverConfigurationPanel() {
+    ReceiverConfigurationPanel(SettingsManager settingsManager) {
         setBorder(BorderFactory.createEmptyBorder(5, 15, 5, 15));
         setLayout(new GridBagLayout());
 
+        panelModel = new PanelModel(settingsManager);
         buttonGroup = new ButtonGroup();
 
         lowerPanel = new JPanel(new BorderLayout());
@@ -647,15 +648,6 @@ class ReceiverConfigurationPanel extends JPanel {
         return result;
     }
 
-    public static void main(String[] args) {
-
-        JFrame frame = new JFrame();
-        frame.getContentPane().add(new ReceiverConfigurationPanel());
-        frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
-        frame.pack();
-        frame.setVisible(true);
-    }
-
     /**
      * @return Returns the dontWarnMeAgain.
      */
@@ -680,8 +672,8 @@ class ReceiverConfigurationPanel extends JPanel {
         private String lastLogFormat;
         private File saveConfigFile;
 
-        public PanelModel() {
-            file = new 
File(SettingsManager.getInstance().getSettingsDirectory(), 
"receiver-config.xml");
+        public PanelModel(SettingsManager settingsManager) {
+            file = new File(settingsManager.getSettingsDirectory(), 
"receiver-config.xml");
         }
 
         boolean isNetworkReceiverMode() {
diff --git 
a/src/main/java/org/apache/log4j/chainsaw/TableColorizingRenderer.java 
b/src/main/java/org/apache/log4j/chainsaw/TableColorizingRenderer.java
index 09279d4..9a1f8bb 100644
--- a/src/main/java/org/apache/log4j/chainsaw/TableColorizingRenderer.java
+++ b/src/main/java/org/apache/log4j/chainsaw/TableColorizingRenderer.java
@@ -75,6 +75,7 @@ public class TableColorizingRenderer extends 
DefaultTableCellRenderer {
     private final JPanel multiLinePanel = new JPanel(new BorderLayout());
     private final JPanel generalPanel = new JPanel(new BorderLayout());
     private final JPanel levelPanel = new JPanel(new BorderLayout());
+    private SettingsManager settingsManager;
     private ApplicationPreferenceModel applicationPreferenceModel;
     private JTextPane multiLineTextPane;
     private MutableAttributeSet boldAttributeSet;
@@ -89,9 +90,10 @@ public class TableColorizingRenderer extends 
DefaultTableCellRenderer {
     /**
      * Creates a new TableColorizingRenderer object.
      */
-    public TableColorizingRenderer(RuleColorizer colorizer, 
ApplicationPreferenceModel applicationPreferenceModel,
+    public TableColorizingRenderer(SettingsManager settingsManager, 
RuleColorizer colorizer, ApplicationPreferenceModel applicationPreferenceModel,
                                    EventContainer eventContainer, 
LogPanelPreferenceModel logPanelPreferenceModel,
                                    boolean colorizeSearch) {
+        this.settingsManager = settingsManager;
         this.applicationPreferenceModel = applicationPreferenceModel;
         this.logPanelPreferenceModel = logPanelPreferenceModel;
         this.eventContainer = eventContainer;
@@ -404,7 +406,7 @@ public class TableColorizingRenderer extends 
DefaultTableCellRenderer {
         Color background;
         Color foreground;
         Rule loggerRule = colorizer.getLoggerRule();
-        AbstractConfiguration configuration = 
SettingsManager.getInstance().getGlobalConfiguration();
+        AbstractConfiguration configuration = 
settingsManager.getGlobalConfiguration();
         //use logger colors in table instead of event colors if event passes 
logger rule
         if (loggerRule != null && 
loggerRule.evaluate(loggingEventWrapper.getLoggingEvent(), null)) {
             background = configuration.get(Color.class, 
"searchBackgroundColor", ChainsawConstants.FIND_LOGGER_BACKGROUND);
diff --git a/src/main/java/org/apache/log4j/chainsaw/color/ColorPanel.java 
b/src/main/java/org/apache/log4j/chainsaw/color/ColorPanel.java
index 8ddcbee..127dbed 100644
--- a/src/main/java/org/apache/log4j/chainsaw/color/ColorPanel.java
+++ b/src/main/java/org/apache/log4j/chainsaw/color/ColorPanel.java
@@ -82,14 +82,16 @@ public class ColorPanel extends JPanel {
     private JCheckBox globalRulesCheckbox;
     private final LogPanel parentLogPanel;
     private JLabel rulesLabel;
+    private SettingsManager settingsManager;
 
-    public ColorPanel(final RuleColorizer globalColorizer,
+    public ColorPanel(SettingsManager settingsManager, final RuleColorizer 
globalColorizer,
                       final FilterModel filterModel,
                       final Map<String, RuleColorizer> allLogPanelColorizers,
                       final LogPanel parent) {
         super(new BorderLayout());
+        this.settingsManager = settingsManager;
 
-        AbstractConfiguration configuration = 
SettingsManager.getInstance().getGlobalConfiguration();
+        AbstractConfiguration configuration = 
settingsManager.getGlobalConfiguration();
 
         this.filterModel = filterModel;
         this.allLogPanelColorizers = allLogPanelColorizers;
@@ -227,7 +229,7 @@ public class ColorPanel extends JPanel {
                 Object selectedItem = 
loadPanelColorizersComboBox.getSelectedItem();
                 if (selectedItem != null) {
                     RuleColorizer sourceColorizer = 
allLogPanelColorizers.get(selectedItem.toString());
-                    RuleColorizer newColorizer = new RuleColorizer();
+                    RuleColorizer newColorizer = new 
RuleColorizer(settingsManager);
                     newColorizer.setRules(sourceColorizer.getRules());
                     parent.setRuleColorizer(newColorizer);
                     updateColors();
@@ -270,7 +272,7 @@ public class ColorPanel extends JPanel {
             }
         }
 
-        AbstractConfiguration configuration = 
SettingsManager.getInstance().getGlobalConfiguration();
+        AbstractConfiguration configuration = 
settingsManager.getGlobalConfiguration();
         //update search and alternating colors, since they may have changed 
from another color panel
         searchDataVectorEntry.set(0, configuration.get(Color.class, 
"searchBackgroundColor", ChainsawConstants.FIND_LOGGER_BACKGROUND));
         searchDataVectorEntry.set(1, configuration.get(Color.class, 
"searchForegroundColor", ChainsawConstants.FIND_LOGGER_FOREGROUND));
@@ -445,7 +447,7 @@ public class ColorPanel extends JPanel {
 
     private void saveSearchColors() {
         Vector thisVector = searchTableModel.getDataVector().get(0);
-        AbstractConfiguration globalConfig = 
SettingsManager.getInstance().getGlobalConfiguration();
+        AbstractConfiguration globalConfig = 
settingsManager.getGlobalConfiguration();
         globalConfig.setProperty("searchBackgroundColor", 
RuleColorizer.colorToRGBString((Color) thisVector.get(0)));
         globalConfig.setProperty("searchForegroundColor", 
RuleColorizer.colorToRGBString((Color) thisVector.get(1)));
     }
@@ -541,7 +543,7 @@ public class ColorPanel extends JPanel {
                         if( globalRulesCheckbox.isSelected() ){
                             parentLogPanel.setRuleColorizer(globalColorizer);
                         }else{
-                            parentLogPanel.setRuleColorizer(new 
RuleColorizer());
+                            parentLogPanel.setRuleColorizer(new 
RuleColorizer(settingsManager));
                         }
                         componentChanged();
                         
parentLogPanel.getCurrentRuleColorizer().addPropertyChangeListener(
diff --git a/src/main/java/org/apache/log4j/chainsaw/color/RuleColorizer.java 
b/src/main/java/org/apache/log4j/chainsaw/color/RuleColorizer.java
index d79bc50..e61c482 100644
--- a/src/main/java/org/apache/log4j/chainsaw/color/RuleColorizer.java
+++ b/src/main/java/org/apache/log4j/chainsaw/color/RuleColorizer.java
@@ -61,6 +61,7 @@ public class RuleColorizer implements Colorizer {
     private static final String DEFAULT_WARN_EXPRESSION = "level == WARN";
     private static final String DEFAULT_FATAL_ERROR_EXCEPTION_EXPRESSION = 
"level == FATAL || level == ERROR || exception exists";
     private static final String DEFAULT_MARKER_EXPRESSION = "prop.marker 
exists";
+    private SettingsManager settingsManager;
 
     public static List<ColorRule> defaultRules(){
         List<ColorRule> rulesList = new ArrayList<>();
@@ -85,12 +86,14 @@ public class RuleColorizer implements Colorizer {
         return rulesList;
     }
 
-    public RuleColorizer() {
+    public RuleColorizer(SettingsManager settingsManager) {
+        this.settingsManager = settingsManager;
         this.rules = defaultRules();
         isGlobal = false;
     }
 
-    public RuleColorizer(boolean isGlobal){
+    public RuleColorizer(SettingsManager settingsManager, boolean isGlobal){
+        this.settingsManager = settingsManager;
         this.rules = defaultRules();
         this.isGlobal = isGlobal;
     }
@@ -185,7 +188,7 @@ public class RuleColorizer implements Colorizer {
     }
 
     public void setUseDefaultSettings(boolean useDefaultSettings){
-        if( configuration == 
SettingsManager.getInstance().getGlobalConfiguration() ){
+        if( configuration == settingsManager.getGlobalConfiguration() ){
             return;
         }
 
diff --git 
a/src/main/java/org/apache/log4j/chainsaw/components/logpanel/LogPanel.java 
b/src/main/java/org/apache/log4j/chainsaw/components/logpanel/LogPanel.java
index 4e9a9e5..3f807bd 100644
--- a/src/main/java/org/apache/log4j/chainsaw/components/logpanel/LogPanel.java
+++ b/src/main/java/org/apache/log4j/chainsaw/components/logpanel/LogPanel.java
@@ -62,7 +62,6 @@ import 
org.apache.commons.configuration2.AbstractConfiguration;
 import org.apache.commons.configuration2.event.ConfigurationEvent;
 import org.apache.log4j.chainsaw.logevents.ChainsawLoggingEvent;
 import org.apache.log4j.chainsaw.logevents.Level;
-import org.apache.log4j.spi.LoggingEventFieldResolver;
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
 
@@ -120,6 +119,7 @@ public class LogPanel extends DockablePanel implements 
ChainsawEventBatchListene
     private static final DateFormat TIMESTAMP_DATE_FORMAT = new 
SimpleDateFormat(Constants.TIMESTAMP_RULE_FORMAT);
     private static final double DEFAULT_DETAIL_SPLIT_LOCATION = 0.71d;
     private static final double DEFAULT_LOG_TREE_SPLIT_LOCATION = 0.2d;
+    private SettingsManager settingsManager;
     private final String identifier;
     private final ChainsawStatusBar statusBar;
     private final JFrame logPanelPreferencesFrame = new JFrame();
@@ -188,26 +188,29 @@ public class LogPanel extends DockablePanel implements 
ChainsawEventBatchListene
      * Creates a new LogPanel object.  If a LogPanel with this identifier has
      * been loaded previously, reload settings saved on last exit.
      *
-     * @param statusBar  shared status bar, provided by main application
-     * @param identifier used to load and save settings
+     * @param settingsManager
+     * @param statusBar       shared status bar, provided by main application
+     * @param identifier      used to load and save settings
      */
-    public LogPanel(final ChainsawStatusBar statusBar, 
-            final String identifier,
-            int cyclicBufferSize,
+    public LogPanel(SettingsManager settingsManager, final ChainsawStatusBar 
statusBar,
+                    final String identifier,
+                    int cyclicBufferSize,
                     Map<String, RuleColorizer> allColorizers,
                     final ApplicationPreferenceModel 
applicationPreferenceModel,
                     RuleColorizer globalRuleColorizer) {
+        this.settingsManager = settingsManager;
+
         this.identifier = identifier;
         this.statusBar = statusBar;
         this.applicationPreferenceModel = applicationPreferenceModel;
-        this.logPanelPreferencesPanel = new 
LogPanelPreferencePanel(identifier);
+        this.logPanelPreferencesPanel = new 
LogPanelPreferencePanel(settingsManager, identifier);
         this.colorizer = globalRuleColorizer;
         this.m_globalColorizer = globalRuleColorizer;
         this.m_allColorizers = allColorizers;
         logger.debug("creating logpanel for {}", identifier);
 
-        m_configuration = 
SettingsManager.getInstance().getCombinedSettingsForRecevierTab(identifier);
-        AbstractConfiguration tabConfig = 
SettingsManager.getInstance().getSettingsForReceiverTab(identifier);
+        m_configuration = 
settingsManager.getCombinedSettingsForRecevierTab(identifier);
+        AbstractConfiguration tabConfig = 
settingsManager.getSettingsForReceiverTab(identifier);
 
         setLayout(new BorderLayout());
 
@@ -692,7 +695,7 @@ public class LogPanel extends DockablePanel implements 
ChainsawEventBatchListene
             ((ImageIcon) ChainsawIcons.ICON_PREFERENCES).getImage());
 
         allColorizers.put(identifier, colorizer);
-        colorPanel = new ColorPanel(m_globalColorizer, filterModel, 
allColorizers, this);
+        colorPanel = new ColorPanel(settingsManager, m_globalColorizer, 
filterModel, allColorizers, this);
 
         colorFrame.getContentPane().add(colorPanel);
 
@@ -848,12 +851,12 @@ public class LogPanel extends DockablePanel implements 
ChainsawEventBatchListene
                 }
             });
 
-        renderer = new TableColorizingRenderer(colorizer, 
applicationPreferenceModel, tableModel, preferenceModel, true);
+        renderer = new TableColorizingRenderer(settingsManager, colorizer, 
applicationPreferenceModel, tableModel, preferenceModel, true);
         renderer.setToolTipsVisible(preferenceModel.isToolTips());
 
         table.setDefaultRenderer(Object.class, renderer);
 
-        searchRenderer = new TableColorizingRenderer(colorizer, 
applicationPreferenceModel, searchModel, preferenceModel, false);
+        searchRenderer = new TableColorizingRenderer(settingsManager, 
colorizer, applicationPreferenceModel, searchModel, preferenceModel, false);
         searchRenderer.setToolTipsVisible(preferenceModel.isToolTips());
 
         searchTable.setDefaultRenderer(Object.class, searchRenderer);
@@ -1937,7 +1940,6 @@ public class LogPanel extends DockablePanel implements 
ChainsawEventBatchListene
      * Accessor
      *
      * @return identifier
-     * @see EventBatchListener
      */
     public String getInterestedIdentifier() {
         return getIdentifier();
@@ -2027,12 +2029,12 @@ public class LogPanel extends DockablePanel implements 
ChainsawEventBatchListene
             }
         }
 
-        AbstractConfiguration configuration = 
SettingsManager.getInstance().getSettingsForReceiverTab(identifier);
+        AbstractConfiguration configuration = 
settingsManager.getSettingsForReceiverTab(identifier);
 
         if( configuration.getBoolean( "color.rules.default", true ) ){
             colorizer = m_globalColorizer;
         }else{
-            setRuleColorizer(new RuleColorizer());
+            setRuleColorizer(new RuleColorizer(settingsManager));
             colorizer.setConfiguration(configuration);
             colorizer.loadColorSettings();
         }
@@ -2158,7 +2160,7 @@ public class LogPanel extends DockablePanel implements 
ChainsawEventBatchListene
         if( colorizer == m_globalColorizer ){
             // Current colorizer is the global one, so set our new colorizer
             colorizer = newRuleColor;
-            AbstractConfiguration configuration = 
SettingsManager.getInstance().getSettingsForReceiverTab(identifier);
+            AbstractConfiguration configuration = 
settingsManager.getSettingsForReceiverTab(identifier);
 
             colorizer.setConfiguration(configuration);
             colorizer.setUseDefaultSettings(false);
@@ -2204,7 +2206,7 @@ public class LogPanel extends DockablePanel implements 
ChainsawEventBatchListene
      * Toggle panel preference for detail visibility on or off
      */
     public void toggleDetailVisible() {
-        AbstractConfiguration config = 
SettingsManager.getInstance().getSettingsForReceiverTab(identifier);
+        AbstractConfiguration config = 
settingsManager.getSettingsForReceiverTab(identifier);
 
         boolean visible = config.getBoolean("logpanel.detailColumnVisible");
         config.setProperty("logpanel.detailColumnVisible", !visible);
@@ -2216,7 +2218,7 @@ public class LogPanel extends DockablePanel implements 
ChainsawEventBatchListene
      * @return detail visibility flag
      */
     public boolean isDetailVisible() {
-        AbstractConfiguration config = 
SettingsManager.getInstance().getSettingsForReceiverTab(identifier);
+        AbstractConfiguration config = 
settingsManager.getSettingsForReceiverTab(identifier);
 
         boolean visible = config.getBoolean("logpanel.detailColumnVisible");
         return visible;
@@ -2230,7 +2232,7 @@ public class LogPanel extends DockablePanel implements 
ChainsawEventBatchListene
      * Toggle panel preference for logger tree visibility on or off
      */
     public void toggleLogTreeVisible() {
-        AbstractConfiguration config = 
SettingsManager.getInstance().getSettingsForReceiverTab(identifier);
+        AbstractConfiguration config = 
settingsManager.getSettingsForReceiverTab(identifier);
 
         boolean visible = config.getBoolean("logpanel.logTreePanelVisible");
         config.setProperty("logpanel.logTreePanelVisible", !visible);
@@ -2242,7 +2244,7 @@ public class LogPanel extends DockablePanel implements 
ChainsawEventBatchListene
      * @return logger tree visibility flag
      */
     public boolean isLogTreeVisible() {
-        AbstractConfiguration config = 
SettingsManager.getInstance().getSettingsForReceiverTab(identifier);
+        AbstractConfiguration config = 
settingsManager.getSettingsForReceiverTab(identifier);
 
         return config.getBoolean("logpanel.logTreePanelVisible");
     }
diff --git 
a/src/main/java/org/apache/log4j/chainsaw/components/logpanel/LogPanelPreferencePanel.java
 
b/src/main/java/org/apache/log4j/chainsaw/components/logpanel/LogPanelPreferencePanel.java
index 7fdcb40..098feca 100644
--- 
a/src/main/java/org/apache/log4j/chainsaw/components/logpanel/LogPanelPreferencePanel.java
+++ 
b/src/main/java/org/apache/log4j/chainsaw/components/logpanel/LogPanelPreferencePanel.java
@@ -49,11 +49,13 @@ public class LogPanelPreferencePanel extends 
AbstractPreferencePanel {
 
     private final ModifiableListModel columnListModel = new 
ModifiableListModel();
     private ApplicationPreferenceModel appPreferenceModel;
+    private SettingsManager settingsManager;
     private final String m_panelIdentifier;
 
     //~ Constructors 
============================================================
 
-    public LogPanelPreferencePanel(String panelIdent) {
+    public LogPanelPreferencePanel(SettingsManager settingsManager, String 
panelIdent) {
+        this.settingsManager = settingsManager;
         m_panelIdentifier = panelIdent;
         initComponents();
 
@@ -109,7 +111,7 @@ public class LogPanelPreferencePanel extends 
AbstractPreferencePanel {
             final JList columnList = new JList();
             columnList.setVisibleRowCount(17);
 
-            AbstractConfiguration mergedConfig = 
SettingsManager.getInstance().getCombinedSettingsForRecevierTab(m_panelIdentifier);
+            AbstractConfiguration mergedConfig = 
settingsManager.getCombinedSettingsForRecevierTab(m_panelIdentifier);
 
             String[] columnsOrder = mergedConfig.getStringArray( 
"table.columns.order" );
 
@@ -197,7 +199,7 @@ public class LogPanelPreferencePanel extends 
AbstractPreferencePanel {
         private void initComponents() {
             setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
 
-            AbstractConfiguration config = 
SettingsManager.getInstance().getCombinedSettingsForRecevierTab(m_panelIdentifier);
+            AbstractConfiguration config = 
settingsManager.getCombinedSettingsForRecevierTab(m_panelIdentifier);
 
 
             JPanel dateFormatPanel = new JPanel();
@@ -445,7 +447,7 @@ public class LogPanelPreferencePanel extends 
AbstractPreferencePanel {
          * DOCUMENT ME!
          */
         private void initPanelComponents() {
-            AbstractConfiguration config = 
SettingsManager.getInstance().getCombinedSettingsForRecevierTab(m_panelIdentifier);
+            AbstractConfiguration config = 
settingsManager.getCombinedSettingsForRecevierTab(m_panelIdentifier);
 
             
JTextComponentFormatter.applySystemFontAndSize(clearTableExpression);
             setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
@@ -485,8 +487,8 @@ public class LogPanelPreferencePanel extends 
AbstractPreferencePanel {
          * DOCUMENT ME!
          */
         private void setupListeners() {
-            Configuration config = 
SettingsManager.getInstance().getCombinedSettingsForRecevierTab(m_panelIdentifier).getConfiguration(0);
-            AbstractConfiguration tabConfig = 
SettingsManager.getInstance().getSettingsForReceiverTab(m_panelIdentifier);
+            Configuration config = 
settingsManager.getCombinedSettingsForRecevierTab(m_panelIdentifier).getConfiguration(0);
+            AbstractConfiguration tabConfig = 
settingsManager.getSettingsForReceiverTab(m_panelIdentifier);
 
             ActionListener wrapMessageListener = e -> 
config.setProperty("logpanel.wrapMsg", wrapMessage.isSelected());
 
diff --git a/src/main/java/org/apache/log4j/chainsaw/prefs/SettingsManager.java 
b/src/main/java/org/apache/log4j/chainsaw/prefs/SettingsManager.java
index a1cb3c1..421be92 100644
--- a/src/main/java/org/apache/log4j/chainsaw/prefs/SettingsManager.java
+++ b/src/main/java/org/apache/log4j/chainsaw/prefs/SettingsManager.java
@@ -16,24 +16,9 @@
  */
 package org.apache.log4j.chainsaw.prefs;
 
-import java.beans.IntrospectionException;
-import java.beans.PropertyDescriptor;
-import javax.swing.event.EventListenerList;
-import java.io.*;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import java.net.URL;
-import java.net.URLEncoder;
-import java.util.EventListener;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Properties;
-import java.util.ServiceLoader;
-import java.util.logging.Level;
 import org.apache.commons.configuration2.AbstractConfiguration;
 import org.apache.commons.configuration2.CombinedConfiguration;
 import org.apache.commons.configuration2.PropertiesConfiguration;
-import org.apache.commons.configuration2.builder.BasicConfigurationBuilder;
 import org.apache.commons.configuration2.builder.FileBasedConfigurationBuilder;
 import 
org.apache.commons.configuration2.builder.fluent.FileBasedBuilderParameters;
 import org.apache.commons.configuration2.builder.fluent.Parameters;
@@ -45,6 +30,16 @@ import org.apache.log4j.chainsaw.ChainsawReceiverFactory;
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
 
+import java.beans.IntrospectionException;
+import java.beans.PropertyDescriptor;
+import java.io.File;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.net.URL;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.ServiceLoader;
+
 
 /**
  * SettingManager allows components to register interest in Saving/Loading
@@ -55,7 +50,7 @@ import org.apache.logging.log4j.Logger;
  */
 public final class SettingsManager {
     private static final Logger logger = LogManager.getLogger();
-    private static final SettingsManager instance = new SettingsManager();
+
     private static final String GLOBAL_SETTINGS_FILE_NAME = 
"chainsaw.settings.properties";
 
     private class TabSettingsData{
@@ -75,7 +70,7 @@ public final class SettingsManager {
      * Initialises the SettingsManager by loading the default Properties from
      * a resource
      */
-    private SettingsManager() {
+    public SettingsManager() {
         m_tabSettings = new HashMap<>();
         Parameters params = new Parameters();
         File f = new File(getSettingsDirectory(), GLOBAL_SETTINGS_FILE_NAME);
@@ -133,15 +128,6 @@ public final class SettingsManager {
 //        }
     }
 
-    /**
-     * Returns the singleton instance of the SettingsManager
-     *
-     * @return settings manager
-     */
-    public static SettingsManager getInstance() {
-        return instance;
-    }
-
     public AbstractConfiguration getGlobalConfiguration(){
         return m_configuration;
     }
@@ -161,8 +147,6 @@ public final class SettingsManager {
             return m_tabSettings.get( identifier ).tabSettings;
         }
         
-        PropertiesConfiguration configuration = null;
-
         // Either we don't contain the key, or we got an exception.  
Regardless,
         // create a new configuration that we can use
         FileBasedBuilderParameters params = new Parameters().fileBased();
@@ -176,7 +160,7 @@ public final class SettingsManager {
         }
 
         FileBasedConfigurationBuilder<PropertiesConfiguration> builder =
-                new FileBasedConfigurationBuilder<PropertiesConfiguration>(
+                new FileBasedConfigurationBuilder<>(
                 PropertiesConfiguration.class)
                 .configure(params
                         .setListDelimiterHandler(new 
DefaultListDelimiterHandler(','))
diff --git 
a/src/main/java/org/apache/log4j/chainsaw/receivers/ReceiversPanel.java 
b/src/main/java/org/apache/log4j/chainsaw/receivers/ReceiversPanel.java
index 7f1cc7c..b0f1212 100644
--- a/src/main/java/org/apache/log4j/chainsaw/receivers/ReceiversPanel.java
+++ b/src/main/java/org/apache/log4j/chainsaw/receivers/ReceiversPanel.java
@@ -86,10 +86,12 @@ public class ReceiversPanel extends JPanel implements 
SettingsListener {
     private final LogUI m_parent;
     private final Map<Class,PropertyDescriptor[]> m_classToProperties = 
             new HashMap<>();
+    private SettingsManager settingsManager;
     private final ChainsawStatusBar m_statusBar;
 
-    public ReceiversPanel(LogUI parentUi, ChainsawStatusBar sb) {
+    public ReceiversPanel(SettingsManager settingsManager, LogUI parentUi, 
ChainsawStatusBar sb) {
         super(new BorderLayout());
+        this.settingsManager = settingsManager;
         m_statusBar = sb;
         m_parent = parentUi;
         final ReceiversTreeModel model = new ReceiversTreeModel();
@@ -529,7 +531,7 @@ public class ReceiversPanel extends JPanel implements 
SettingsListener {
      */
 
     public void saveSettings(SaveSettingsEvent event) {
-        File file = new 
File(SettingsManager.getInstance().getSettingsDirectory(), 
"receiver-config.xml");
+        File file = new File(settingsManager.getSettingsDirectory(), 
"receiver-config.xml");
         m_parent.saveReceiversToFile(file);
     }
 
diff --git 
a/src/main/java/org/apache/log4j/chainsaw/zeroconf/ZeroConfPlugin.java 
b/src/main/java/org/apache/log4j/chainsaw/zeroconf/ZeroConfPlugin.java
index fc80264..3337b11 100644
--- a/src/main/java/org/apache/log4j/chainsaw/zeroconf/ZeroConfPlugin.java
+++ b/src/main/java/org/apache/log4j/chainsaw/zeroconf/ZeroConfPlugin.java
@@ -85,9 +85,11 @@ public class ZeroConfPlugin extends DockablePanel {
     private static final String NEW_UDP_APPENDER_SERVICE_NAME = 
"_log4j._udp.local.";
 
     private JmDNS jmDNS;
+    private SettingsManager settingsManager;
 
-    public ZeroConfPlugin() {
+    public ZeroConfPlugin(SettingsManager settingsManager) {
         setName("Zeroconf");
+        this.settingsManager = settingsManager;
         deviceTable.setRowHeight(ChainsawConstants.DEFAULT_ROW_HEIGHT);
         try{
             activateOptions();
@@ -107,7 +109,7 @@ public class ZeroConfPlugin extends DockablePanel {
     }
 
     private File getPreferenceFileLocation() {
-        return new File(SettingsManager.getInstance().getSettingsDirectory(), 
"zeroconfprefs.xml");
+        return new File(settingsManager.getSettingsDirectory(), 
"zeroconfprefs.xml");
     }
 
     private void activateOptions() throws IOException {

Reply via email to