Browse Source

Inject StatusBarManager and MessageSinkManager.

Pass the MSM into Main so it actually gets created, as the few
places that refer to it aren't being inflated by dagger yet.

Change-Id: Ic92f88aac29d4c68fdbc062a582b3e44ecd23637
Reviewed-on: http://gerrit.dmdirc.com/2691
Automatic-Compile: DMDirc Build Manager
Reviewed-by: Greg Holmes <greg@dmdirc.com>
tags/0.8rc1
Chris Smith 10 years ago
parent
commit
d92598e079

+ 30
- 0
src/com/dmdirc/ClientModule.java View File

@@ -33,8 +33,10 @@ import com.dmdirc.interfaces.IdentityController;
33 33
 import com.dmdirc.interfaces.LifecycleController;
34 34
 import com.dmdirc.logger.ErrorLevel;
35 35
 import com.dmdirc.logger.Logger;
36
+import com.dmdirc.messages.MessageSinkManager;
36 37
 import com.dmdirc.plugins.PluginManager;
37 38
 import com.dmdirc.ui.WarningDialog;
39
+import com.dmdirc.ui.core.components.StatusBarManager;
38 40
 
39 41
 import java.awt.GraphicsEnvironment;
40 42
 import java.io.File;
@@ -133,6 +135,34 @@ public class ClientModule {
133 135
         return controller;
134 136
     }
135 137
 
138
+    /**
139
+     * Provides a status bar manager.
140
+     *
141
+     * @return The status bar manager the client should use.
142
+     */
143
+    @Provides
144
+    @Singleton
145
+    public StatusBarManager getStatusBarManager() {
146
+        final StatusBarManager manager = new StatusBarManager();
147
+        StatusBarManager.setStatusBarManager(manager);
148
+        return manager;
149
+    }
150
+
151
+    /**
152
+     * Gets the message sink manager for the client.
153
+     *
154
+     * @param statusBarManager The status bar manager to use for status bar sinks.
155
+     * @return The message sink manager the client should use.
156
+     */
157
+    @Provides
158
+    @Singleton
159
+    public MessageSinkManager getMessageSinkManager(final StatusBarManager statusBarManager) {
160
+        final MessageSinkManager messageSinkManager = new MessageSinkManager();
161
+        MessageSinkManager.setManager(messageSinkManager);
162
+        messageSinkManager.loadDefaultSinks(statusBarManager);
163
+        return messageSinkManager;
164
+    }
165
+
136 166
     /**
137 167
      * Called when the global config cannot be loaded due to an error. This
138 168
      * method informs the user of the problem and installs a new default config

+ 2
- 2
src/com/dmdirc/Main.java View File

@@ -111,6 +111,7 @@ public class Main implements LifecycleController {
111 111
      * @param pluginManager The plugin manager the client will use.
112 112
      * @param commandManager The command manager the client will use.
113 113
      * @param commandLoader The command loader to use to initialise the command manager.
114
+     * @param messageSinkManager Unused for now - TODO: remove me when it's injected somewhere sensible.
114 115
      * @param configDir The base configuration directory to use.
115 116
      */
116 117
     @Inject
@@ -122,6 +123,7 @@ public class Main implements LifecycleController {
122 123
             final PluginManager pluginManager,
123 124
             final CommandManager commandManager,
124 125
             final CommandLoader commandLoader,
126
+            final MessageSinkManager messageSinkManager,
125 127
             @Directory(DirectoryType.BASE) final String configDir) {
126 128
         this.identityManager = identityManager;
127 129
         this.serverManager = serverManager;
@@ -162,8 +164,6 @@ public class Main implements LifecycleController {
162 164
     public void init() {
163 165
         UpdateChecker.init(this);
164 166
 
165
-        MessageSinkManager.getManager().loadDefaultSinks();
166
-
167 167
         pluginManager.refreshPlugins();
168 168
         checkBundledPlugins(pluginManager, identityManager.getGlobalConfiguration());
169 169
 

+ 17
- 5
src/com/dmdirc/messages/MessageSinkManager.java View File

@@ -25,6 +25,7 @@ package com.dmdirc.messages;
25 25
 import com.dmdirc.WritableFrameContainer;
26 26
 import com.dmdirc.logger.ErrorLevel;
27 27
 import com.dmdirc.logger.Logger;
28
+import com.dmdirc.ui.core.components.StatusBarManager;
28 29
 
29 30
 import java.util.ArrayList;
30 31
 import java.util.Date;
@@ -37,7 +38,7 @@ import java.util.regex.Matcher;
37 38
 public class MessageSinkManager {
38 39
 
39 40
     /** A singleton instance of the manager. */
40
-    private static final MessageSinkManager INSTANCE = new MessageSinkManager();
41
+    private static MessageSinkManager instance;
41 42
 
42 43
     /** The configuration domain to use for looking up default sinks. */
43 44
     public static final String CONFIG_DOMAIN = "notifications";
@@ -46,7 +47,7 @@ public class MessageSinkManager {
46 47
     public static final String DEFAULT_SINK = "self";
47 48
 
48 49
     /** A list of known sinks. */
49
-    private final List<MessageSink> sinks = new ArrayList<MessageSink>();
50
+    private final List<MessageSink> sinks = new ArrayList<>();
50 51
 
51 52
     /**
52 53
      * Adds a new sink to the list of known sinks.
@@ -125,8 +126,10 @@ public class MessageSinkManager {
125 126
 
126 127
     /**
127 128
      * Loads the default message sinks into this manager.
129
+     *
130
+     * @param statusBarManager The status bar manager to give to status-bar related sinks.
128 131
      */
129
-    public void loadDefaultSinks() {
132
+    public void loadDefaultSinks(final StatusBarManager statusBarManager) {
130 133
         addSink(new AllMessageSink());
131 134
         addSink(new ChannelMessageSink());
132 135
         addSink(new CommonChanelsMessageSink());
@@ -138,7 +141,7 @@ public class MessageSinkManager {
138 141
         addSink(new NullMessageSink());
139 142
         addSink(new SelfMessageSink());
140 143
         addSink(new ServerMessageSink());
141
-        addSink(new StatusBarMessageSink());
144
+        addSink(new StatusBarMessageSink(statusBarManager));
142 145
     }
143 146
 
144 147
     /**
@@ -147,7 +150,16 @@ public class MessageSinkManager {
147 150
      * @return A singleton manager instance
148 151
      */
149 152
     public static MessageSinkManager getManager() {
150
-        return INSTANCE;
153
+        return instance;
154
+    }
155
+
156
+    /**
157
+     * Sets the singleton instance of the sink manager.
158
+     *
159
+     * @param manager The new singleton manager instance.
160
+     */
161
+    public static void setManager(final MessageSinkManager manager) {
162
+        instance = manager;
151 163
     }
152 164
 
153 165
 }

+ 13
- 2
src/com/dmdirc/messages/StatusBarMessageSink.java View File

@@ -38,6 +38,18 @@ public class StatusBarMessageSink implements MessageSink {
38 38
     /** The pattern to use to match this sink. */
39 39
     private static final Pattern PATTERN = Pattern.compile("statusbar");
40 40
 
41
+    /** The status bar manager to add messages to. */
42
+    private final StatusBarManager statusBarManager;
43
+
44
+    /**
45
+     * Creates a new instance of {@link StatusBarMessageSink}.
46
+     *
47
+     * @param statusBarManager The status bar manager to add messages to.
48
+     */
49
+    public StatusBarMessageSink(final StatusBarManager statusBarManager) {
50
+        this.statusBarManager = statusBarManager;
51
+    }
52
+
41 53
     /** {@inheritDoc} */
42 54
     @Override
43 55
     public Pattern getPattern() {
@@ -52,8 +64,7 @@ public class StatusBarMessageSink implements MessageSink {
52 64
             final String messageType, final Object... args) {
53 65
         final String message = Formatter.formatMessage(source.getConfigManager(),
54 66
                 messageType, args);
55
-        StatusBarManager.getStatusBarManager().setMessage(
56
-                new StatusMessage(message, source.getConfigManager()));
67
+        statusBarManager.setMessage(new StatusMessage(message, source.getConfigManager()));
57 68
     }
58 69
 
59 70
 }

+ 12
- 3
src/com/dmdirc/ui/core/components/StatusBarManager.java View File

@@ -37,10 +37,10 @@ import java.util.concurrent.CopyOnWriteArraySet;
37 37
 public class StatusBarManager implements StatusBar {
38 38
 
39 39
     /** A singleton instance of the manager. */
40
-    private static final StatusBarManager INSTANCE = new StatusBarManager();
40
+    private static StatusBarManager instance;
41 41
 
42 42
     /** A collection of known status bars. */
43
-    private final Collection<StatusBar> statusBars = new CopyOnWriteArraySet<StatusBar>();
43
+    private final Collection<StatusBar> statusBars = new CopyOnWriteArraySet<>();
44 44
 
45 45
     /**
46 46
      * Registers a new status bar with the manager. All requests to
@@ -100,7 +100,16 @@ public class StatusBarManager implements StatusBar {
100 100
      * @return A singleton instance of the status bar manager.
101 101
      */
102 102
     public static StatusBarManager getStatusBarManager() {
103
-        return INSTANCE;
103
+        return instance;
104
+    }
105
+
106
+    /**
107
+     * Sets the singleton instance of the status bar manager.
108
+     *
109
+     * @param manager The manager to use as a singleton instance.
110
+     */
111
+    public static void setStatusBarManager(final StatusBarManager manager) {
112
+        instance = manager;
104 113
     }
105 114
 
106 115
 }

+ 1
- 1
test/com/dmdirc/TestMain.java View File

@@ -33,7 +33,7 @@ public class TestMain extends Main {
33 33
             final CommandManager commandManager,
34 34
             final String configDir) {
35 35
         super(identityManager, serverManager, actionManager, commandLineParser,
36
-                pluginManager, commandManager, null, configDir);
36
+                pluginManager, commandManager, null, null, configDir);
37 37
         this.identityManager = identityManager;
38 38
         this.serverManager = serverManager;
39 39
         this.actionManager = actionManager;

+ 3
- 0
test/com/dmdirc/ui/WindowManagerTest.java View File

@@ -34,6 +34,7 @@ import com.dmdirc.config.InvalidIdentityFileException;
34 34
 import com.dmdirc.harness.TestWritableFrameContainer;
35 35
 import com.dmdirc.interfaces.ui.FrameListener;
36 36
 import com.dmdirc.interfaces.ui.Window;
37
+import com.dmdirc.ui.core.components.StatusBarManager;
37 38
 
38 39
 import java.util.Arrays;
39 40
 import java.util.Collection;
@@ -50,6 +51,7 @@ public class WindowManagerTest {
50 51
 
51 52
     @Mock private ConfigManager cm;
52 53
     @Mock private ServerManager serverManager;
54
+    @Mock private StatusBarManager statusBarManager;
53 55
     private CommandManager commands;
54 56
 
55 57
     @Before
@@ -59,6 +61,7 @@ public class WindowManagerTest {
59 61
         when(cm.getBinder()).thenReturn(binder);
60 62
         commands = new CommandManager(serverManager);
61 63
         commands.initialise(cm);
64
+        StatusBarManager.setStatusBarManager(statusBarManager);
62 65
     }
63 66
 
64 67
     @Test

+ 6
- 6
test/com/dmdirc/ui/core/components/StatusBarManagerTest.java View File

@@ -34,7 +34,7 @@ public class StatusBarManagerTest {
34 34
     @Test
35 35
     public void testRegisterStatusBar() {
36 36
         final StatusBar sb = mock(StatusBar.class);
37
-        StatusBarManager instance = StatusBarManager.getStatusBarManager();
37
+        StatusBarManager instance = new StatusBarManager();
38 38
         instance.registerStatusBar(sb);
39 39
         instance.clearMessage();
40 40
         verify(sb).clearMessage();
@@ -43,7 +43,7 @@ public class StatusBarManagerTest {
43 43
     @Test
44 44
     public void testUnregisterStatusBar() {
45 45
         final StatusBar sb = mock(StatusBar.class);
46
-        StatusBarManager instance = StatusBarManager.getStatusBarManager();
46
+        StatusBarManager instance = new StatusBarManager();
47 47
         instance.registerStatusBar(sb);
48 48
         instance.unregisterStatusBar(sb);
49 49
         instance.clearMessage();
@@ -54,7 +54,7 @@ public class StatusBarManagerTest {
54 54
     public void testSetMessage() {
55 55
         final StatusMessage message = mock(StatusMessage.class);
56 56
         final StatusBar sb = mock(StatusBar.class);
57
-        StatusBarManager instance = StatusBarManager.getStatusBarManager();
57
+        StatusBarManager instance = new StatusBarManager();
58 58
         instance.registerStatusBar(sb);
59 59
         instance.setMessage(message);
60 60
         verify(sb).setMessage(message);
@@ -63,7 +63,7 @@ public class StatusBarManagerTest {
63 63
     @Test
64 64
     public void testClearMessage() {
65 65
         final StatusBar sb = mock(StatusBar.class);
66
-        StatusBarManager instance = StatusBarManager.getStatusBarManager();
66
+        StatusBarManager instance = new StatusBarManager();
67 67
         instance.registerStatusBar(sb);
68 68
         instance.clearMessage();
69 69
         verify(sb).clearMessage();
@@ -73,7 +73,7 @@ public class StatusBarManagerTest {
73 73
     public void testAddComponent() {
74 74
         final StatusBarComponent comp = mock(StatusBarComponent.class);
75 75
         final StatusBar sb = mock(StatusBar.class);
76
-        StatusBarManager instance = StatusBarManager.getStatusBarManager();
76
+        StatusBarManager instance = new StatusBarManager();
77 77
         instance.registerStatusBar(sb);
78 78
         instance.addComponent(comp);
79 79
         verify(sb).addComponent(comp);
@@ -83,7 +83,7 @@ public class StatusBarManagerTest {
83 83
     public void testRemoveComponent() {
84 84
         final StatusBarComponent comp = mock(StatusBarComponent.class);
85 85
         final StatusBar sb = mock(StatusBar.class);
86
-        StatusBarManager instance = StatusBarManager.getStatusBarManager();
86
+        StatusBarManager instance = new StatusBarManager();
87 87
         instance.registerStatusBar(sb);
88 88
         instance.removeComponent(comp);
89 89
         verify(sb).removeComponent(comp);

Loading…
Cancel
Save