Selaa lähdekoodia

Pass in dependencies to ServerManager explicitly.

Avoid static/singleton references, and use a temporary Provider<>
implementation that will eventually be replaced by Dagger.

Change-Id: Id1bda9437f71cc9ddceb0a9ed1ba38d4787f2226
Reviewed-on: http://gerrit.dmdirc.com/2671
Reviewed-by: Greg Holmes <greg@dmdirc.com>
Automatic-Compile: DMDirc Build Manager
tags/0.8rc1
Chris Smith 10 vuotta sitten
vanhempi
commit
08bac19e14

+ 18
- 2
src/com/dmdirc/Main.java Näytä tiedosto

@@ -57,6 +57,8 @@ import java.util.Map;
57 57
 import java.util.Timer;
58 58
 import java.util.TimerTask;
59 59
 
60
+import javax.inject.Provider;
61
+
60 62
 /**
61 63
  * Main class, handles initialisation.
62 64
  */
@@ -66,7 +68,7 @@ public class Main implements LifecycleController {
66 68
     private final int FEEDBACK_DELAY = 30 * 60 * 1000;
67 69
 
68 70
     /** The UI to use for the client. */
69
-    private final Collection<UIController> CONTROLLERS = new HashSet<UIController>();
71
+    private final Collection<UIController> CONTROLLERS = new HashSet<>();
70 72
 
71 73
     /** The config dir to use for the client. */
72 74
     private String configdir;
@@ -106,7 +108,9 @@ public class Main implements LifecycleController {
106 108
         Thread.setDefaultUncaughtExceptionHandler(new DMDircExceptionHandler());
107 109
 
108 110
         IdentityManager.getIdentityManager().loadVersionIdentity();
109
-        serverManager = new ServerManager();
111
+        serverManager = new ServerManager(
112
+                new ParserFactoryProvider(),
113
+                IdentityManager.getIdentityManager());
110 114
         ActionManager.initActionManager(serverManager, IdentityManager.getIdentityManager());
111 115
 
112 116
         final CommandLineParser clp = new CommandLineParser(this, args);
@@ -506,4 +510,16 @@ public class Main implements LifecycleController {
506 510
         }
507 511
     }
508 512
 
513
+    /**
514
+     * Temporary class to lazily provide {@link ParserFactory}s.
515
+     */
516
+    private class ParserFactoryProvider implements Provider<ParserFactory> {
517
+
518
+        /** {@inheritDoc} */
519
+        @Override
520
+        public ParserFactory get() {
521
+            return new ParserFactory(pluginManager);
522
+        }
523
+    }
524
+
509 525
 }

+ 25
- 11
src/com/dmdirc/ServerManager.java Näytä tiedosto

@@ -27,7 +27,7 @@ import com.dmdirc.commandparser.CommandManager;
27 27
 import com.dmdirc.commandparser.parsers.ServerCommandParser;
28 28
 import com.dmdirc.config.ConfigManager;
29 29
 import com.dmdirc.config.Identity;
30
-import com.dmdirc.config.IdentityManager;
30
+import com.dmdirc.interfaces.IdentityController;
31 31
 import com.dmdirc.interfaces.ServerFactory;
32 32
 import com.dmdirc.logger.ErrorLevel;
33 33
 import com.dmdirc.logger.Logger;
@@ -41,6 +41,8 @@ import java.util.List;
41 41
 import java.util.Set;
42 42
 import java.util.concurrent.CopyOnWriteArraySet;
43 43
 
44
+import javax.inject.Provider;
45
+
44 46
 /**
45 47
  * The ServerManager maintains a list of all servers, and provides methods to
46 48
  * search or iterate over them.
@@ -48,12 +50,25 @@ import java.util.concurrent.CopyOnWriteArraySet;
48 50
 public class ServerManager implements ServerFactory {
49 51
 
50 52
     /** All servers that currently exist. */
51
-    private final Set<Server> servers = new CopyOnWriteArraySet<Server>();
53
+    private final Set<Server> servers = new CopyOnWriteArraySet<>();
54
+
55
+    /** Provider of {@link ParserFactory}s for servers. */
56
+    private final Provider<ParserFactory> parserFactoryProvider;
57
+
58
+    /** The identity controller to use to find profiles. */
59
+    private final IdentityController identityController;
52 60
 
53 61
     /**
54 62
      * Creates a new instance of ServerManager.
63
+     *
64
+     * @param parserFactoryProvider The provider of {@link ParserFactory}s to give to servers.
65
+     * @param identityController The identity controller to use to find profiles.
55 66
      */
56
-    public ServerManager() {
67
+    public ServerManager(
68
+            final Provider<ParserFactory> parserFactoryProvider,
69
+            final IdentityController identityController) {
70
+        this.parserFactoryProvider = parserFactoryProvider;
71
+        this.identityController = identityController;
57 72
     }
58 73
 
59 74
     /** {@inheritDoc} */
@@ -65,7 +80,7 @@ public class ServerManager implements ServerFactory {
65 80
                 this,
66 81
                 configManager,
67 82
                 new ServerCommandParser(configManager),
68
-                new ParserFactory(Main.mainInstance.getPluginManager()),
83
+                parserFactoryProvider.get(),
69 84
                 WindowManager.getWindowManager(),
70 85
                 AliasWrapper.getAliasWrapper(),
71 86
                 CommandManager.getCommandManager(),
@@ -98,7 +113,7 @@ public class ServerManager implements ServerFactory {
98 113
      * @return A list of all servers
99 114
      */
100 115
     public List<Server> getServers() {
101
-        return new ArrayList<Server>(servers);
116
+        return new ArrayList<>(servers);
102 117
     }
103 118
 
104 119
     /**
@@ -150,7 +165,7 @@ public class ServerManager implements ServerFactory {
150 165
      * @return A list of servers connected to the network
151 166
      */
152 167
     public List<Server> getServersByNetwork(final String network) {
153
-        final List<Server> res = new ArrayList<Server>();
168
+        final List<Server> res = new ArrayList<>();
154 169
 
155 170
         for (Server server : servers) {
156 171
             if (server.isNetwork(network)) {
@@ -168,7 +183,7 @@ public class ServerManager implements ServerFactory {
168 183
      * @return A list of servers connected to the network
169 184
      */
170 185
     public List<Server> getServersByAddress(final String address) {
171
-        final List<Server> res = new ArrayList<Server>();
186
+        final List<Server> res = new ArrayList<>();
172 187
 
173 188
         for (Server server : servers) {
174 189
             if (server.getAddress().equalsIgnoreCase(address)) {
@@ -188,8 +203,8 @@ public class ServerManager implements ServerFactory {
188 203
      * @since 0.6.3
189 204
      */
190 205
     public Server connectToAddress(final URI uri) {
191
-        return connectToAddress(uri, IdentityManager.getIdentityManager()
192
-                .getIdentitiesByType("profile").get(0));
206
+        return connectToAddress(uri,
207
+                identityController.getIdentitiesByType("profile").get(0));
193 208
     }
194 209
 
195 210
     /**
@@ -249,8 +264,7 @@ public class ServerManager implements ServerFactory {
249 264
 
250 265
         if (connectedServer == null) {
251 266
             try {
252
-                connectToAddress(new URI("irc://irc.quakenet.org/DMDirc"),
253
-                        IdentityManager.getIdentityManager().getIdentitiesByType("profile").get(0));
267
+                connectToAddress(new URI("irc://irc.quakenet.org/DMDirc"));
254 268
             } catch (URISyntaxException ex) {
255 269
                 Logger.appError(ErrorLevel.MEDIUM, "Unable to construct new server", ex);
256 270
             }

+ 10
- 1
test/com/dmdirc/ServerManagerTest.java Näytä tiedosto

@@ -22,23 +22,32 @@
22 22
 
23 23
 package com.dmdirc;
24 24
 
25
+import com.dmdirc.interfaces.IdentityController;
25 26
 import com.dmdirc.parser.common.ChannelJoinRequest;
26 27
 
28
+import javax.inject.Provider;
29
+
27 30
 import org.junit.After;
28 31
 import org.junit.Before;
29 32
 import org.junit.Ignore;
30 33
 import org.junit.Test;
34
+import org.junit.runner.RunWith;
35
+import org.mockito.Mock;
36
+import org.mockito.runners.MockitoJUnitRunner;
31 37
 
32 38
 import static org.junit.Assert.*;
33 39
 import static org.mockito.Mockito.*;
34 40
 
41
+@RunWith(MockitoJUnitRunner.class)
35 42
 public class ServerManagerTest {
36 43
 
44
+    @Mock private IdentityController identityController;
45
+    @Mock private Provider<ParserFactory> parserFactoryProvider;
37 46
     private ServerManager serverManager;
38 47
 
39 48
     @Before
40 49
     public void setUp() throws Exception {
41
-        serverManager = new ServerManager();
50
+        serverManager = new ServerManager(parserFactoryProvider, identityController);
42 51
     }
43 52
 
44 53
     @After

+ 11
- 1
test/com/dmdirc/TestMain.java Näytä tiedosto

@@ -6,17 +6,25 @@ import com.dmdirc.config.IdentityManager;
6 6
 import com.dmdirc.config.InvalidIdentityFileException;
7 7
 import com.dmdirc.plugins.PluginManager;
8 8
 
9
+import javax.inject.Provider;
10
+import org.mockito.Mock;
11
+import org.mockito.MockitoAnnotations;
12
+
9 13
 /**
10 14
  * Main subclass to init things needed for testing.
11 15
  */
12 16
 public class TestMain extends Main {
13 17
     private static Main instance;
14 18
 
19
+    @Mock private Provider<ParserFactory> parserFactoryProvider;
20
+
15 21
     public TestMain() { }
16 22
 
17 23
     /** {@inheritDoc} */
18 24
     @Override
19 25
     public void init(final String[] args) {
26
+        MockitoAnnotations.initMocks(this);
27
+
20 28
         // TODO: Tests probably shouldn't rely on a config dir... Who knows
21 29
         //       what the user has done with their config.
22 30
         IdentityManager.getIdentityManager().loadVersionIdentity();
@@ -28,7 +36,9 @@ public class TestMain extends Main {
28 36
             // DON'T do anything to the user's configuration... (so no calls
29 37
             // to handleInvalidConfigFile(); here)
30 38
         }
31
-        serverManager = new ServerManager();
39
+        serverManager = new ServerManager(
40
+                parserFactoryProvider,
41
+                IdentityManager.getIdentityManager());
32 42
         ActionManager.initActionManager(serverManager, IdentityManager.getIdentityManager());
33 43
         pluginManager = new PluginManager(IdentityManager.getIdentityManager(), this);
34 44
         pluginManager.refreshPlugins();

Loading…
Peruuta
Tallenna