Browse Source

Tear Server and FrameContainer apart.

pull/650/head
Chris Smith 8 years ago
parent
commit
96933fd89a

+ 14
- 2
src/com/dmdirc/FrameContainer.java View File

28
 import com.dmdirc.events.FrameIconChangedEvent;
28
 import com.dmdirc.events.FrameIconChangedEvent;
29
 import com.dmdirc.events.FrameNameChangedEvent;
29
 import com.dmdirc.events.FrameNameChangedEvent;
30
 import com.dmdirc.events.FrameTitleChangedEvent;
30
 import com.dmdirc.events.FrameTitleChangedEvent;
31
+import com.dmdirc.interfaces.Connection;
31
 import com.dmdirc.interfaces.InputModel;
32
 import com.dmdirc.interfaces.InputModel;
32
 import com.dmdirc.interfaces.WindowModel;
33
 import com.dmdirc.interfaces.WindowModel;
33
 import com.dmdirc.interfaces.config.AggregateConfigProvider;
34
 import com.dmdirc.interfaces.config.AggregateConfigProvider;
51
  * The frame container implements basic methods that should be present in all objects that handle a
52
  * The frame container implements basic methods that should be present in all objects that handle a
52
  * frame.
53
  * frame.
53
  */
54
  */
54
-public abstract class FrameContainer implements WindowModel {
55
+public class FrameContainer implements WindowModel {
55
 
56
 
56
     /** Listeners not yet using ListenerSupport. */
57
     /** Listeners not yet using ListenerSupport. */
57
     protected final ListenerList listeners = new ListenerList();
58
     protected final ListenerList listeners = new ListenerList();
79
     private BackBuffer backBuffer;
80
     private BackBuffer backBuffer;
80
     /** The input model for this container. */
81
     /** The input model for this container. */
81
     private Optional<InputModel> inputModel = Optional.empty();
82
     private Optional<InputModel> inputModel = Optional.empty();
83
+    /** The connection associated with this model. */
84
+    private Optional<Connection> connection = Optional.empty();
82
 
85
 
83
     /**
86
     /**
84
      * Instantiate new frame container.
87
      * Instantiate new frame container.
85
      */
88
      */
86
-    protected FrameContainer(
89
+    public FrameContainer(
87
             final String icon,
90
             final String icon,
88
             final String name,
91
             final String name,
89
             final String title,
92
             final String title,
234
         return unreadStatusManager;
237
         return unreadStatusManager;
235
     }
238
     }
236
 
239
 
240
+    public void setConnection(@Nullable final Connection connection) {
241
+        this.connection = Optional.ofNullable(connection);
242
+    }
243
+
244
+    @Override
245
+    public Optional<Connection> getConnection() {
246
+        return connection;
247
+    }
248
+
237
 }
249
 }

+ 76
- 67
src/com/dmdirc/Server.java View File

23
 package com.dmdirc;
23
 package com.dmdirc;
24
 
24
 
25
 import com.dmdirc.config.profiles.Profile;
25
 import com.dmdirc.config.profiles.Profile;
26
+import com.dmdirc.events.FrameClosingEvent;
26
 import com.dmdirc.events.ServerConnectErrorEvent;
27
 import com.dmdirc.events.ServerConnectErrorEvent;
27
 import com.dmdirc.events.ServerConnectedEvent;
28
 import com.dmdirc.events.ServerConnectedEvent;
28
 import com.dmdirc.events.ServerConnectingEvent;
29
 import com.dmdirc.events.ServerConnectingEvent;
83
 import org.slf4j.Logger;
84
 import org.slf4j.Logger;
84
 import org.slf4j.LoggerFactory;
85
 import org.slf4j.LoggerFactory;
85
 
86
 
87
+import net.engio.mbassy.listener.Handler;
88
+
86
 import static com.dmdirc.util.LogUtils.APP_ERROR;
89
 import static com.dmdirc.util.LogUtils.APP_ERROR;
87
 import static com.google.common.base.Preconditions.checkNotNull;
90
 import static com.google.common.base.Preconditions.checkNotNull;
88
 
91
 
90
  * The Server class represents the client's view of a server. It maintains a list of all channels,
93
  * The Server class represents the client's view of a server. It maintains a list of all channels,
91
  * queries, etc, and handles parser callbacks pertaining to the server.
94
  * queries, etc, and handles parser callbacks pertaining to the server.
92
  */
95
  */
93
-public class Server extends FrameContainer implements Connection {
96
+public class Server implements Connection {
94
 
97
 
95
     private static final Logger LOG = LoggerFactory.getLogger(Server.class);
98
     private static final Logger LOG = LoggerFactory.getLogger(Server.class);
96
     /** The name of the general domain. */
99
     /** The name of the general domain. */
163
     private final HighlightManager highlightManager;
166
     private final HighlightManager highlightManager;
164
     /** Listener to use for config changes. */
167
     /** Listener to use for config changes. */
165
     private final ConfigChangeListener configListener = (domain, key) -> updateTitle();
168
     private final ConfigChangeListener configListener = (domain, key) -> updateTitle();
169
+    private final FrameContainer windowModel;
166
     /** The future used when a reconnect timer is scheduled. */
170
     /** The future used when a reconnect timer is scheduled. */
167
     private ScheduledFuture<?> reconnectTimerFuture;
171
     private ScheduledFuture<?> reconnectTimerFuture;
168
 
172
 
183
             @Nonnull final Profile profile,
187
             @Nonnull final Profile profile,
184
             final BackBufferFactory backBufferFactory,
188
             final BackBufferFactory backBufferFactory,
185
             final UserManager userManager) {
189
             final UserManager userManager) {
186
-        super("server-disconnected",
187
-                getHost(uri),
188
-                getHost(uri),
189
-                configMigrator.getConfigProvider(),
190
-                backBufferFactory,
191
-                eventBus,
192
-                Arrays.asList(
193
-                        WindowComponent.TEXTAREA.getIdentifier(),
194
-                        WindowComponent.INPUTFIELD.getIdentifier(),
195
-                        WindowComponent.CERTIFICATE_VIEWER.getIdentifier()));
190
+        // TODO: Pass this in
191
+        windowModel =
192
+                new FrameContainer("server-disconnected", getHost(uri), getHost(uri),
193
+                        configMigrator.getConfigProvider(), backBufferFactory, eventBus,
194
+                        Arrays.asList(WindowComponent.TEXTAREA.getIdentifier(),
195
+                                WindowComponent.INPUTFIELD.getIdentifier(),
196
+                                WindowComponent.CERTIFICATE_VIEWER.getIdentifier()));
197
+        windowModel.setConnection(this);
196
 
198
 
197
         this.parserFactory = parserFactory;
199
         this.parserFactory = parserFactory;
198
         this.identityFactory = identityFactory;
200
         this.identityFactory = identityFactory;
206
         this.inviteManager = new InviteManagerImpl(this);
208
         this.inviteManager = new InviteManagerImpl(this);
207
 
209
 
208
         awayMessage = Optional.empty();
210
         awayMessage = Optional.empty();
209
-        eventHandler = new ServerEventHandler(this, groupChatManager, getEventBus());
211
+        eventHandler = new ServerEventHandler(this, groupChatManager, windowModel.getEventBus());
210
 
212
 
211
         this.address = uri;
213
         this.address = uri;
212
         this.profile = profile;
214
         this.profile = profile;
214
 
216
 
215
         updateIcon();
217
         updateIcon();
216
 
218
 
217
-        getConfigManager().addChangeListener("formatter", "serverName", configListener);
218
-        getConfigManager().addChangeListener("formatter", "serverTitle", configListener);
219
+        windowModel.getConfigManager().addChangeListener("formatter", "serverName", configListener);
220
+        windowModel.getConfigManager().addChangeListener("formatter", "serverTitle", configListener);
219
 
221
 
220
-        initBackBuffer();
221
-        this.highlightManager = new HighlightManager(getConfigManager(),
222
-                new ColourManager(getConfigManager()));
222
+        windowModel.initBackBuffer();
223
+        this.highlightManager = new HighlightManager(windowModel.getConfigManager(),
224
+                new ColourManager(windowModel.getConfigManager()));
223
         highlightManager.init();
225
         highlightManager.init();
224
-        getEventBus().subscribe(highlightManager);
226
+        windowModel.getEventBus().subscribe(highlightManager);
227
+        windowModel.getEventBus().subscribe(this);
225
     }
228
     }
226
 
229
 
227
     /**
230
     /**
278
                     return;
281
                     return;
279
                 case CONNECTED:
282
                 case CONNECTED:
280
                 case CONNECTING:
283
                 case CONNECTING:
281
-                    disconnect(getConfigManager().getOption(DOMAIN_GENERAL, "quitmessage"));
284
+                    disconnect(windowModel.getConfigManager()
285
+                            .getOption(DOMAIN_GENERAL, "quitmessage"));
282
                 case DISCONNECTING:
286
                 case DISCONNECTING:
283
                     while (!myState.getState().isDisconnected()) {
287
                     while (!myState.getState().isDisconnected()) {
284
                         try {
288
                         try {
313
                 parser = Optional.ofNullable(buildParser());
317
                 parser = Optional.ofNullable(buildParser());
314
 
318
 
315
                 if (!parser.isPresent()) {
319
                 if (!parser.isPresent()) {
316
-                    getEventBus().publishAsync(
320
+                    windowModel.getEventBus().publishAsync(
317
                             new ServerUnknownProtocolEvent(this, address.getScheme()));
321
                             new ServerUnknownProtocolEvent(this, address.getScheme()));
318
                     return;
322
                     return;
319
                 }
323
                 }
338
             }
342
             }
339
         }
343
         }
340
 
344
 
341
-        getEventBus().publish(new ServerConnectingEvent(this, address));
345
+        windowModel.getEventBus().publish(new ServerConnectingEvent(this, address));
342
     }
346
     }
343
 
347
 
344
     @Override
348
     @Override
356
 
360
 
357
     @Override
361
     @Override
358
     public void reconnect() {
362
     public void reconnect() {
359
-        reconnect(getConfigManager().getOption(DOMAIN_GENERAL, "reconnectmessage"));
363
+        reconnect(windowModel.getConfigManager().getOption(DOMAIN_GENERAL, "reconnectmessage"));
360
     }
364
     }
361
 
365
 
362
     @Override
366
     @Override
363
     public void disconnect() {
367
     public void disconnect() {
364
-        disconnect(getConfigManager().getOption(DOMAIN_GENERAL, "quitmessage"));
368
+        disconnect(windowModel.getConfigManager().getOption(DOMAIN_GENERAL, "quitmessage"));
365
     }
369
     }
366
 
370
 
367
     @Override
371
     @Override
403
                 parserLock.readLock().unlock();
407
                 parserLock.readLock().unlock();
404
             }
408
             }
405
 
409
 
406
-            if (getConfigManager().getOptionBool(DOMAIN_GENERAL, "closequeriesonquit")) {
410
+            if (windowModel.getConfigManager()
411
+                    .getOptionBool(DOMAIN_GENERAL, "closequeriesonquit")) {
407
                 closeQueries();
412
                 closeQueries();
408
             }
413
             }
409
         }
414
         }
423
             }
428
             }
424
 
429
 
425
             final int delay = Math.max(1000,
430
             final int delay = Math.max(1000,
426
-                    getConfigManager().getOptionInt(DOMAIN_GENERAL, "reconnectdelay"));
431
+                    windowModel.getConfigManager().getOptionInt(DOMAIN_GENERAL, "reconnectdelay"));
427
 
432
 
428
-            getEventBus().publishAsync(new ServerReconnectScheduledEvent(this, delay / 1000));
433
+            windowModel.getEventBus().publishAsync(
434
+                    new ServerReconnectScheduledEvent(this, delay / 1000));
429
 
435
 
430
             reconnectTimerFuture = executorService.schedule(() -> {
436
             reconnectTimerFuture = executorService.schedule(() -> {
431
                 synchronized (myStateLock) {
437
                 synchronized (myStateLock) {
483
             if (!getState().isDisconnected()) {
489
             if (!getState().isDisconnected()) {
484
                 newQuery.reregister();
490
                 newQuery.reregister();
485
             }
491
             }
486
-            getInputModel().get().getTabCompleter().addEntry(TabCompletionType.QUERY_NICK, nick);
492
+            windowModel.getInputModel().get().getTabCompleter()
493
+                    .addEntry(TabCompletionType.QUERY_NICK, nick);
487
             queries.put(lnick, newQuery);
494
             queries.put(lnick, newQuery);
488
         }
495
         }
489
 
496
 
492
 
499
 
493
     @Override
500
     @Override
494
     public void updateQuery(final Query query, final String oldNick, final String newNick) {
501
     public void updateQuery(final Query query, final String oldNick, final String newNick) {
495
-        getInputModel().get().getTabCompleter().removeEntry(TabCompletionType.QUERY_NICK, oldNick);
496
-        getInputModel().get().getTabCompleter().addEntry(TabCompletionType.QUERY_NICK, newNick);
502
+        windowModel.getInputModel().get().getTabCompleter()
503
+                .removeEntry(TabCompletionType.QUERY_NICK, oldNick);
504
+        windowModel.getInputModel().get().getTabCompleter()
505
+                .addEntry(TabCompletionType.QUERY_NICK, newNick);
497
 
506
 
498
         queries.put(converter.toLowerCase(newNick), query);
507
         queries.put(converter.toLowerCase(newNick), query);
499
         queries.remove(converter.toLowerCase(oldNick));
508
         queries.remove(converter.toLowerCase(oldNick));
506
 
515
 
507
     @Override
516
     @Override
508
     public void delQuery(final Query query) {
517
     public void delQuery(final Query query) {
509
-        getInputModel().get().getTabCompleter().removeEntry(
518
+        windowModel.getInputModel().get().getTabCompleter().removeEntry(
510
                 TabCompletionType.QUERY_NICK, query.getNickname());
519
                 TabCompletionType.QUERY_NICK, query.getNickname());
511
         queries.remove(converter.toLowerCase(query.getNickname()));
520
         queries.remove(converter.toLowerCase(query.getNickname()));
512
     }
521
     }
545
      */
554
      */
546
     @Nullable
555
     @Nullable
547
     private Parser buildParser() {
556
     private Parser buildParser() {
548
-        final Parser myParser = parserFactory.getParser(profile, address, getConfigManager())
557
+        final Parser myParser = parserFactory
558
+                .getParser(profile, address, windowModel.getConfigManager())
549
                 .orElse(null);
559
                 .orElse(null);
550
 
560
 
551
         if (myParser != null) {
561
         if (myParser != null) {
554
 
564
 
555
         if (myParser instanceof SecureParser) {
565
         if (myParser instanceof SecureParser) {
556
             final CertificateManager certificateManager =
566
             final CertificateManager certificateManager =
557
-                    new CertificateManager(this, address.getHost(), getConfigManager(),
558
-                            userSettings, getEventBus());
567
+                    new CertificateManager(this, address.getHost(), windowModel.getConfigManager(),
568
+                            userSettings, windowModel.getEventBus());
559
             final SecureParser secureParser = (SecureParser) myParser;
569
             final SecureParser secureParser = (SecureParser) myParser;
560
             secureParser.setTrustManagers(certificateManager);
570
             secureParser.setTrustManagers(certificateManager);
561
             secureParser.setKeyManagers(certificateManager.getKeyManager());
571
             secureParser.setKeyManagers(certificateManager.getKeyManager());
582
         final String icon = myState.getState() == ServerState.CONNECTED
592
         final String icon = myState.getState() == ServerState.CONNECTED
583
                 ? protocolDescription.get().isSecure(address)
593
                 ? protocolDescription.get().isSecure(address)
584
                 ? "secure-server" : "server" : "server-disconnected";
594
                 ? "secure-server" : "server" : "server-disconnected";
585
-        setIcon(icon);
595
+        windowModel.setIcon(icon);
586
     }
596
     }
587
 
597
 
588
     /**
598
     /**
726
         return myState;
736
         return myState;
727
     }
737
     }
728
 
738
 
729
-    @Override
730
-    public void close() {
731
-        synchronized (myStateLock) {
732
-            eventHandler.unregisterCallbacks();
733
-            getConfigManager().removeListener(configListener);
734
-            highlightManager.stop();
735
-            getEventBus().unsubscribe(highlightManager);
736
-            executorService.shutdown();
737
-
738
-            disconnect();
739
+    @Handler
740
+    private void handleClose(final FrameClosingEvent event) {
741
+        if (event.getContainer() == windowModel) {
742
+            synchronized (myStateLock) {
743
+                eventHandler.unregisterCallbacks();
744
+                windowModel.getConfigManager().removeListener(configListener);
745
+                highlightManager.stop();
746
+                windowModel.getEventBus().unsubscribe(highlightManager);
747
+                executorService.shutdown();
739
 
748
 
740
-            myState.transition(ServerState.CLOSING);
741
-        }
749
+                disconnect();
742
 
750
 
743
-        groupChatManager.closeAll();
744
-        closeQueries();
745
-        inviteManager.removeInvites();
751
+                myState.transition(ServerState.CLOSING);
752
+            }
746
 
753
 
747
-        super.close();
754
+            groupChatManager.closeAll();
755
+            closeQueries();
756
+            inviteManager.removeInvites();
757
+            windowModel.getEventBus().unsubscribe(this);
758
+        }
748
     }
759
     }
749
 
760
 
750
     @Override
761
     @Override
751
     public WindowModel getWindowModel() {
762
     public WindowModel getWindowModel() {
752
-        return this;
763
+        return windowModel;
753
     }
764
     }
754
 
765
 
755
     @Override
766
     @Override
756
     public void sendCTCPReply(final String source, final String type, final String args) {
767
     public void sendCTCPReply(final String source, final String type, final String args) {
757
         if ("VERSION".equalsIgnoreCase(type)) {
768
         if ("VERSION".equalsIgnoreCase(type)) {
758
             parser.get().sendCTCPReply(source, "VERSION",
769
             parser.get().sendCTCPReply(source, "VERSION",
759
-                    "DMDirc " + getConfigManager().getOption("version", "version") +
770
+                    "DMDirc " + windowModel.getConfigManager().getOption("version", "version") +
760
                             " - https://www.dmdirc.com/");
771
                             " - https://www.dmdirc.com/");
761
         } else if ("PING".equalsIgnoreCase(type)) {
772
         } else if ("PING".equalsIgnoreCase(type)) {
762
             parser.get().sendCTCPReply(source, "PING", args);
773
             parser.get().sendCTCPReply(source, "PING", args);
765
         }
776
         }
766
     }
777
     }
767
 
778
 
768
-    @Override
769
-    public Optional<Connection> getConnection() {
770
-        return Optional.of(this);
771
-    }
772
-
773
     @Override
779
     @Override
774
     public void updateTitle() {
780
     public void updateTitle() {
775
         synchronized (myStateLock) {
781
         synchronized (myStateLock) {
785
                     getLocalUser().map(User::getNickname).orElse("Unknown")
791
                     getLocalUser().map(User::getNickname).orElse("Unknown")
786
                 };
792
                 };
787
 
793
 
788
-                setName(Formatter.formatMessage(getConfigManager(),
794
+                windowModel.setName(Formatter.formatMessage(windowModel.getConfigManager(),
789
                         "serverName", arguments));
795
                         "serverName", arguments));
790
-                setTitle(Formatter.formatMessage(getConfigManager(),
796
+                windowModel.setTitle(Formatter.formatMessage(windowModel.getConfigManager(),
791
                         "serverTitle", arguments));
797
                         "serverTitle", arguments));
792
             } finally {
798
             } finally {
793
                 parserLock.readLock().unlock();
799
                 parserLock.readLock().unlock();
808
             return;
814
             return;
809
         }
815
         }
810
 
816
 
811
-        getEventBus().publish(new ServerDisconnectedEvent(this));
817
+        windowModel.getEventBus().publish(new ServerDisconnectedEvent(this));
812
 
818
 
813
         eventHandler.unregisterCallbacks();
819
         eventHandler.unregisterCallbacks();
814
 
820
 
837
 
843
 
838
             updateIcon();
844
             updateIcon();
839
 
845
 
840
-            if (getConfigManager().getOptionBool(DOMAIN_GENERAL, "closequeriesondisconnect")) {
846
+            if (windowModel.getConfigManager()
847
+                    .getOptionBool(DOMAIN_GENERAL, "closequeriesondisconnect")) {
841
                 closeQueries();
848
                 closeQueries();
842
             }
849
             }
843
 
850
 
844
             inviteManager.removeInvites();
851
             inviteManager.removeInvites();
845
             updateAwayState(Optional.empty());
852
             updateAwayState(Optional.empty());
846
 
853
 
847
-            if (getConfigManager().getOptionBool(DOMAIN_GENERAL, "reconnectondisconnect")
854
+            if (windowModel.getConfigManager()
855
+                    .getOptionBool(DOMAIN_GENERAL, "reconnectondisconnect")
848
                     && myState.getState() == ServerState.TRANSIENTLY_DISCONNECTED) {
856
                     && myState.getState() == ServerState.TRANSIENTLY_DISCONNECTED) {
849
                 doDelayedReconnect();
857
                 doDelayedReconnect();
850
             }
858
             }
884
 
892
 
885
             updateIcon();
893
             updateIcon();
886
 
894
 
887
-            getEventBus().publish(new ServerConnectErrorEvent(this, getErrorDescription
888
-                    (errorInfo)));
895
+            windowModel.getEventBus().publish(new ServerConnectErrorEvent(this,
896
+                    getErrorDescription(errorInfo)));
889
 
897
 
890
-            if (getConfigManager().getOptionBool(DOMAIN_GENERAL, "reconnectonconnectfailure")) {
898
+            if (windowModel.getConfigManager()
899
+                    .getOptionBool(DOMAIN_GENERAL, "reconnectonconnectfailure")) {
891
                 doDelayedReconnect();
900
                 doDelayedReconnect();
892
             }
901
             }
893
         }
902
         }
949
             groupChatManager.handleConnected();
958
             groupChatManager.handleConnected();
950
         }
959
         }
951
 
960
 
952
-        getEventBus().publish(new ServerConnectedEvent(this));
961
+        windowModel.getEventBus().publish(new ServerConnectedEvent(this));
953
     }
962
     }
954
 
963
 
955
     @Override
964
     @Override
960
     @Override
969
     @Override
961
     public void updateIgnoreList() {
970
     public void updateIgnoreList() {
962
         ignoreList.clear();
971
         ignoreList.clear();
963
-        ignoreList.addAll(getConfigManager().getOptionList("network", "ignorelist"));
972
+        ignoreList.addAll(windowModel.getConfigManager().getOptionList("network", "ignorelist"));
964
     }
973
     }
965
 
974
 
966
     @Override
975
     @Override

+ 3
- 3
src/com/dmdirc/ServerEventHandler.java View File

248
     @Handler
248
     @Handler
249
     public void onPingFailed(final PingFailureEvent event) {
249
     public void onPingFailed(final PingFailureEvent event) {
250
         eventBus.publishAsync(new StatusBarMessageEvent(new StatusMessage(
250
         eventBus.publishAsync(new StatusBarMessageEvent(new StatusMessage(
251
-                "No ping reply from " + owner.getName() + " for over " +
251
+                "No ping reply from " + owner.getWindowModel().getName() + " for over " +
252
                         (int) Math.floor(event.getParser().getPingTime() / 1000.0) + " seconds.",
252
                         (int) Math.floor(event.getParser().getPingTime() / 1000.0) + " seconds.",
253
-                owner.getConfigManager())));
253
+                owner.getWindowModel().getConfigManager())));
254
 
254
 
255
         eventBus.publishAsync(new ServerNoPingEvent(owner, event.getParser().getPingTime()));
255
         eventBus.publishAsync(new ServerNoPingEvent(owner, event.getParser().getPingTime()));
256
 
256
 
257
         if (event.getParser().getPingTime()
257
         if (event.getParser().getPingTime()
258
-                >= owner.getConfigManager().getOptionInt("server", "pingtimeout")) {
258
+                >= owner.getWindowModel().getConfigManager().getOptionInt("server", "pingtimeout")) {
259
             LOG.warn("Server appears to be stoned, reconnecting");
259
             LOG.warn("Server appears to be stoned, reconnecting");
260
             eventBus.publishAsync(new ServerStonedEvent(owner));
260
             eventBus.publishAsync(new ServerStonedEvent(owner));
261
             owner.reconnect();
261
             owner.reconnect();

+ 3
- 2
src/com/dmdirc/ServerFactoryImpl.java View File

92
                 identityFactory, queryFactory.get(), eventBus,
92
                 identityFactory, queryFactory.get(), eventBus,
93
                 messageEncoderFactory, userSettings, groupChatManagerFactory, executorService,
93
                 messageEncoderFactory, userSettings, groupChatManagerFactory, executorService,
94
                 uri, profile, backBufferFactory, userManager);
94
                 uri, profile, backBufferFactory, userManager);
95
-        server.setInputModel(new DefaultInputModel(
95
+        // TODO: Yuck!
96
+        ((FrameContainer) server.getWindowModel()).setInputModel(new DefaultInputModel(
96
                 server::sendLine,
97
                 server::sendLine,
97
                 new ServerCommandParser(
98
                 new ServerCommandParser(
98
-                        server.getConfigManager(),
99
+                        server.getWindowModel().getConfigManager(),
99
                         commandController.get(),
100
                         commandController.get(),
100
                         eventBus,
101
                         eventBus,
101
                         server),
102
                         server),

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

113
                 uri,
113
                 uri,
114
                 profile);
114
                 profile);
115
         registerServer(server);
115
         registerServer(server);
116
-        windowManager.addWindow(server);
116
+        windowManager.addWindow(server.getWindowModel());
117
         return server;
117
         return server;
118
     }
118
     }
119
 
119
 
152
     public void closeAll(final String message) {
152
     public void closeAll(final String message) {
153
         for (Server server : servers) {
153
         for (Server server : servers) {
154
             server.disconnect(message);
154
             server.disconnect(message);
155
-            server.close();
155
+            server.getWindowModel().close();
156
         }
156
         }
157
     }
157
     }
158
 
158
 

+ 7
- 2
test/com/dmdirc/ServerManagerTest.java View File

25
 import com.dmdirc.config.profiles.Profile;
25
 import com.dmdirc.config.profiles.Profile;
26
 import com.dmdirc.config.profiles.ProfileManager;
26
 import com.dmdirc.config.profiles.ProfileManager;
27
 import com.dmdirc.interfaces.GroupChatManager;
27
 import com.dmdirc.interfaces.GroupChatManager;
28
+import com.dmdirc.interfaces.WindowModel;
28
 import com.dmdirc.interfaces.config.AggregateConfigProvider;
29
 import com.dmdirc.interfaces.config.AggregateConfigProvider;
29
 import com.dmdirc.interfaces.config.ConfigProviderMigrator;
30
 import com.dmdirc.interfaces.config.ConfigProviderMigrator;
30
 import com.dmdirc.interfaces.config.IdentityFactory;
31
 import com.dmdirc.interfaces.config.IdentityFactory;
63
     @Mock private WindowManager windowManager;
64
     @Mock private WindowManager windowManager;
64
     @Mock private ServerFactoryImpl serverFactoryImpl;
65
     @Mock private ServerFactoryImpl serverFactoryImpl;
65
     @Mock private Server server;
66
     @Mock private Server server;
67
+    @Mock private WindowModel windowModel;
66
     @Mock private GroupChatManager groupChatManager;
68
     @Mock private GroupChatManager groupChatManager;
67
     @Mock private DMDircMBassador eventBus;
69
     @Mock private DMDircMBassador eventBus;
68
     @Mock private Channel channel;
70
     @Mock private Channel channel;
77
 
79
 
78
         when(server.getState()).thenReturn(ServerState.DISCONNECTED);
80
         when(server.getState()).thenReturn(ServerState.DISCONNECTED);
79
         when(server.getGroupChatManager()).thenReturn(groupChatManager);
81
         when(server.getGroupChatManager()).thenReturn(groupChatManager);
82
+        when(server.getWindowModel()).thenReturn(windowModel);
80
 
83
 
81
         when(profileManager.getProfiles()).thenReturn(Collections.singletonList(profile));
84
         when(profileManager.getProfiles()).thenReturn(Collections.singletonList(profile));
82
         when(profileManager.getDefault()).thenReturn(profile);
85
         when(profileManager.getDefault()).thenReturn(profile);
138
     @Test
141
     @Test
139
     public void testCloseAllWithMessage() {
142
     public void testCloseAllWithMessage() {
140
         final Server serverA = mock(Server.class);
143
         final Server serverA = mock(Server.class);
144
+        final WindowModel model = mock(WindowModel.class);
145
+        when(serverA.getWindowModel()).thenReturn(model);
141
         serverManager.registerServer(serverA);
146
         serverManager.registerServer(serverA);
142
         serverManager.closeAll("message here");
147
         serverManager.closeAll("message here");
143
         verify(serverA).disconnect("message here");
148
         verify(serverA).disconnect("message here");
144
-        verify(serverA).close();
149
+        verify(model).close();
145
     }
150
     }
146
 
151
 
147
     @Test
152
     @Test
206
     @Test
211
     @Test
207
     public void testAddsNewServersToWindowManager() {
212
     public void testAddsNewServersToWindowManager() {
208
         serverManager.connectToAddress(URI.create("irc://fobar"));
213
         serverManager.connectToAddress(URI.create("irc://fobar"));
209
-        verify(windowManager).addWindow(server);
214
+        verify(windowManager).addWindow(windowModel);
210
     }
215
     }
211
 
216
 
212
 }
217
 }

Loading…
Cancel
Save