瀏覽代碼

Move to injecting various things in the addon browser.

Add a deprecated method to the SwingController/Manager to avoid having
to propagate the changes all the way up through the prefs dialog.

Add dependency on the annotation processor library for factories.

Change-Id: I420b85ed73ba6ea02bbbb5fe18411fa18d994011
Reviewed-on: http://gerrit.dmdirc.com/3023
Automatic-Compile: DMDirc Build Manager
Reviewed-by: Greg Holmes <greg@dmdirc.com>
tags/0.8
Chris Smith 10 年之前
父節點
當前提交
f79dabdef0

+ 1
- 0
ivy.xml 查看文件

@@ -16,6 +16,7 @@
16 16
 
17 17
         <dependency org="com.google.guava" name="guava" rev="15.+" conf="build->default" />
18 18
         <dependency org="com.google.code.findbugs" name="jsr305" rev="2.+" conf="main->default" />
19
+        <dependency org="com.dmdirc" name="annotations" rev="[0.3.4,)" conf="main->default" />
19 20
 
20 21
         <dependency org="org.slf4j" name="slf4j-api" rev="1.+" conf="main->default" />
21 22
         <dependency org="org.igniterealtime.smack" name="smack" rev="3.+" conf="main->default" />

+ 6
- 0
src/com/dmdirc/addons/ui_swing/SwingController.java 查看文件

@@ -35,6 +35,7 @@ import com.dmdirc.addons.ui_swing.commands.Input;
35 35
 import com.dmdirc.addons.ui_swing.commands.PopInCommand;
36 36
 import com.dmdirc.addons.ui_swing.commands.PopOutCommand;
37 37
 import com.dmdirc.addons.ui_swing.commands.ServerSettings;
38
+import com.dmdirc.addons.ui_swing.components.addonbrowser.DataLoaderWorkerFactory;
38 39
 import com.dmdirc.addons.ui_swing.components.frames.TextFrame;
39 40
 import com.dmdirc.addons.ui_swing.components.statusbar.FeedbackNag;
40 41
 import com.dmdirc.addons.ui_swing.components.statusbar.SwingStatusBar;
@@ -926,4 +927,9 @@ public class SwingController extends BaseCommandPlugin implements UIController {
926 927
         return swingManager.getDialogManager();
927 928
     }
928 929
 
930
+    @Deprecated
931
+    public DataLoaderWorkerFactory getDataLoaderWorkerFactory() {
932
+        return swingManager.getDataLoaderWorkerFactory();
933
+    }
934
+
929 935
 }

+ 12
- 0
src/com/dmdirc/addons/ui_swing/SwingManager.java 查看文件

@@ -22,6 +22,7 @@
22 22
 
23 23
 package com.dmdirc.addons.ui_swing;
24 24
 
25
+import com.dmdirc.addons.ui_swing.components.addonbrowser.DataLoaderWorkerFactory;
25 26
 import com.dmdirc.addons.ui_swing.components.menubar.MenuBar;
26 27
 import com.dmdirc.addons.ui_swing.components.statusbar.SwingStatusBar;
27 28
 import com.dmdirc.addons.ui_swing.dialogs.DialogKeyListener;
@@ -72,6 +73,9 @@ public class SwingManager {
72 73
     /** The key listener that supports dialogs. */
73 74
     private final DialogKeyListener dialogKeyListener;
74 75
 
76
+    /** Factory used to create data loader workers. */
77
+    private final DataLoaderWorkerFactory dataLoaderWorkerFactory;
78
+
75 79
     /** Provider of first run executors. */
76 80
     private final Provider<FirstRunWizardExecutor> firstRunExecutor;
77 81
 
@@ -89,6 +93,7 @@ public class SwingManager {
89 93
      * @param ctrlTabManager The window manager that handles ctrl+tab behaviour.
90 94
      * @param urlHandler The URL handler to use.
91 95
      * @param dialogKeyListener The key listener that supports dialogs.
96
+     * @param dataLoaderWorkerFactory Factory used to create data loader workers.
92 97
      * @param firstRunExecutor A provider of first run executors.
93 98
      */
94 99
     @Inject
@@ -104,6 +109,7 @@ public class SwingManager {
104 109
             final CtrlTabWindowManager ctrlTabManager,
105 110
             final URLHandler urlHandler,
106 111
             final DialogKeyListener dialogKeyListener,
112
+            final DataLoaderWorkerFactory dataLoaderWorkerFactory,
107 113
             final Provider<FirstRunWizardExecutor> firstRunExecutor) {
108 114
         this.dialogManager = dialogManager;
109 115
         this.eventQueue = eventQueue;
@@ -113,6 +119,7 @@ public class SwingManager {
113 119
         this.statusBarManager = statusBarManager;
114 120
         this.urlHandler = urlHandler;
115 121
         this.dialogKeyListener = dialogKeyListener;
122
+        this.dataLoaderWorkerFactory = dataLoaderWorkerFactory;
116 123
         this.firstRunExecutor = firstRunExecutor;
117 124
 
118 125
         this.mainFrame = mainFrame;
@@ -167,6 +174,11 @@ public class SwingManager {
167 174
         return dialogManager;
168 175
     }
169 176
 
177
+    @Deprecated
178
+    public DataLoaderWorkerFactory getDataLoaderWorkerFactory() {
179
+        return dataLoaderWorkerFactory;
180
+    }
181
+
170 182
     /**
171 183
      * Retrieves the window factory to use.
172 184
      *

+ 15
- 10
src/com/dmdirc/addons/ui_swing/components/addonbrowser/AddonInfoLabel.java 查看文件

@@ -22,8 +22,8 @@
22 22
 
23 23
 package com.dmdirc.addons.ui_swing.components.addonbrowser;
24 24
 
25
-import com.dmdirc.addons.ui_swing.SwingController;
26 25
 import com.dmdirc.addons.ui_swing.components.text.TextLabel;
26
+import com.dmdirc.addons.ui_swing.dialogs.DialogManager;
27 27
 
28 28
 import java.awt.Color;
29 29
 import java.awt.Font;
@@ -51,23 +51,28 @@ public class AddonInfoLabel extends JPanel {
51 51
     private final AddonInfo addonInfo;
52 52
     /** Parent window. */
53 53
     private final BrowserWindow parentWindow;
54
-    /** Swing controller. */
55
-    private final SwingController controller;
54
+    /** The manager that will be used for installer dialogs. */
55
+    private final DialogManager dialogManager;
56
+    /** Factory to use to create install workers. */
57
+    private final InstallWorkerFactory workerFactory;
56 58
 
57 59
     /**
58 60
      * Creates a new addon info label to describe the specified addon info.
59 61
      *
60
-     * @param controller Swing controller
62
+     * @param dialogManager The manager that will be used for installer dialogs.
61 63
      * @param addonInfo Addon to describe
62 64
      * @param parentWindow Parent window
65
+     * @param workerFactory
63 66
      */
64
-    public AddonInfoLabel(final SwingController controller,
65
-            final AddonInfo addonInfo, final BrowserWindow parentWindow) {
66
-        super();
67
-
68
-        this.controller = controller;
67
+    public AddonInfoLabel(
68
+            final DialogManager dialogManager,
69
+            final AddonInfo addonInfo,
70
+            final BrowserWindow parentWindow,
71
+            final InstallWorkerFactory workerFactory) {
72
+        this.dialogManager = dialogManager;
69 73
         this.addonInfo = addonInfo;
70 74
         this.parentWindow = parentWindow;
75
+        this.workerFactory = workerFactory;
71 76
 
72 77
         init();
73 78
     }
@@ -95,7 +100,7 @@ public class AddonInfoLabel extends JPanel {
95 100
                 "wmax 100%-170, hmax 150, growy, wrap, pushy, gapleft 5");
96 101
 
97 102
         final JButton button = new JButton("Install");
98
-        button.addActionListener(new InstallListener(controller, addonInfo,
103
+        button.addActionListener(new InstallListener(dialogManager, workerFactory, addonInfo,
99 104
                 parentWindow));
100 105
         final boolean installed = addonInfo.isInstalled();
101 106
         add(button, "split, gapleft 5");

+ 7
- 11
src/com/dmdirc/addons/ui_swing/components/addonbrowser/BrowserWindow.java 查看文件

@@ -22,8 +22,6 @@
22 22
 
23 23
 package com.dmdirc.addons.ui_swing.components.addonbrowser;
24 24
 
25
-import com.dmdirc.addons.ui_swing.SwingController;
26
-
27 25
 import java.awt.Window;
28 26
 import java.awt.event.ActionEvent;
29 27
 import java.awt.event.ActionListener;
@@ -85,19 +83,20 @@ public class BrowserWindow extends JDialog implements ActionListener {
85 83
     private final JRadioButton statusButton = new JRadioButton("Status", false);
86 84
     /** Row sorter. */
87 85
     private final AddonSorter sorter;
88
-    /** Swing controller. */
89
-    private final SwingController controller;
86
+    /** Factory to use to produce workers to load addon data. */
87
+    private final DataLoaderWorkerFactory loaderFactory;
90 88
 
91 89
     /**
92 90
      * Creates and displays a new browser window.
93 91
      *
94
-     * @param controller Swing controller
92
+     * @param loaderFactory Factory to use to produce workers.
95 93
      * @param parentWindow Parent window
96 94
      */
97
-    public BrowserWindow(final SwingController controller,
95
+    public BrowserWindow(
96
+            final DataLoaderWorkerFactory loaderFactory,
98 97
             final Window parentWindow) {
99 98
         super(parentWindow, "DMDirc Addon Browser", ModalityType.MODELESS);
100
-        this.controller = controller;
99
+        this.loaderFactory = loaderFactory;
101 100
         setIconImages(parentWindow.getIconImages());
102 101
         setResizable(false);
103 102
         setLayout(new MigLayout("fill, wmin 650, hmin 600"));
@@ -195,10 +194,7 @@ public class BrowserWindow extends JDialog implements ActionListener {
195 194
      * @param download Download new addon feed?
196 195
      */
197 196
     public final void loadData(final boolean download) {
198
-        new DataLoaderWorker(controller, list, download,
199
-                controller.getIdentityManager().getConfigurationDirectory(),
200
-                this, scrollPane)
201
-                .executeInExecutor();
197
+        loaderFactory.getDataLoaderWorker(list, download, this, scrollPane).executeInExecutor();
202 198
     }
203 199
 
204 200
     /**

+ 19
- 8
src/com/dmdirc/addons/ui_swing/components/addonbrowser/DataLoaderWorker.java 查看文件

@@ -26,9 +26,13 @@ import com.dmdirc.addons.ui_swing.SwingController;
26 26
 import com.dmdirc.addons.ui_swing.UIUtilities;
27 27
 import com.dmdirc.addons.ui_swing.components.LoggingSwingWorker;
28 28
 import com.dmdirc.addons.ui_swing.components.text.TextLabel;
29
+import com.dmdirc.commandline.CommandLineOptionsModule.Directory;
30
+import com.dmdirc.commandline.CommandLineOptionsModule.DirectoryType;
29 31
 import com.dmdirc.logger.ErrorLevel;
30 32
 import com.dmdirc.logger.Logger;
31 33
 import com.dmdirc.updater.UpdateChecker;
34
+import com.dmdirc.util.annotations.factory.Factory;
35
+import com.dmdirc.util.annotations.factory.Unbound;
32 36
 import com.dmdirc.util.io.ConfigFile;
33 37
 import com.dmdirc.util.io.DownloadListener;
34 38
 import com.dmdirc.util.io.Downloader;
@@ -53,6 +57,7 @@ import net.miginfocom.swing.MigLayout;
53 57
 /**
54 58
  * Loads the addon data feed into the addon browser.
55 59
  */
60
+@Factory(inject = true)
56 61
 public class DataLoaderWorker
57 62
         extends LoggingSwingWorker<Collection<AddonInfo>, Object>
58 63
         implements DownloadListener {
@@ -71,24 +76,30 @@ public class DataLoaderWorker
71 76
     private final SwingController controller;
72 77
     /** Directory to store temporary files in. */
73 78
     private final String tempDirectory;
79
+    /** Factory to use to produce install workers. */
80
+    private final InstallWorkerFactory workerFactory;
74 81
 
75 82
     /**
76 83
      * Creates a new data loader worker.
77 84
      *
78 85
      * @param controller Swing controller
86
+     * @param workerFactory Factory to use to produce install workers.
87
+     * @param tempDirectory The directory to store temporary items in, such as the addons feed.
79 88
      * @param table Table to load data into
80 89
      * @param download Download new addons feed?
81
-     * @param tempDirectory The directory to store temporary items in, such as the addons feed.
82 90
      * @param browserWindow Browser window to pass to table objects
83 91
      * @param scrollPane Table's parent scrollpane
84 92
      */
85
-    public DataLoaderWorker(final SwingController controller,
86
-            final AddonTable table, final boolean download,
87
-            final String tempDirectory,
88
-            final BrowserWindow browserWindow, final JScrollPane scrollPane) {
89
-        super();
90
-
93
+    public DataLoaderWorker(
94
+            final SwingController controller,
95
+            final InstallWorkerFactory workerFactory,
96
+            @Directory(DirectoryType.TEMPORARY) final String tempDirectory,
97
+            @Unbound final AddonTable table,
98
+            @Unbound final boolean download,
99
+            @Unbound final BrowserWindow browserWindow,
100
+            @Unbound final JScrollPane scrollPane) {
91 101
         this.controller = controller;
102
+        this.workerFactory = workerFactory;
92 103
         this.download = download;
93 104
         this.table = table;
94 105
         this.tempDirectory = tempDirectory;
@@ -162,7 +173,7 @@ public class DataLoaderWorker
162 173
         table.getModel().setRowCount(0);
163 174
         for (final AddonInfo info : data) {
164 175
             table.getModel().addRow(new Object[]{
165
-                new AddonInfoLabel(controller, info, browserWindow),
176
+                new AddonInfoLabel(controller.getDialogManager(), info, browserWindow, workerFactory),
166 177
             });
167 178
         }
168 179
         table.getSelectionModel().setSelectionInterval(selectedRow, selectedRow);

+ 15
- 10
src/com/dmdirc/addons/ui_swing/components/addonbrowser/InstallListener.java 查看文件

@@ -22,7 +22,7 @@
22 22
 
23 23
 package com.dmdirc.addons.ui_swing.components.addonbrowser;
24 24
 
25
-import com.dmdirc.addons.ui_swing.SwingController;
25
+import com.dmdirc.addons.ui_swing.dialogs.DialogManager;
26 26
 
27 27
 import java.awt.event.ActionEvent;
28 28
 import java.awt.event.ActionListener;
@@ -34,23 +34,28 @@ public class InstallListener implements ActionListener {
34 34
 
35 35
     /** Addon info. */
36 36
     private final AddonInfo info;
37
+    /** Factory to use to create install workers. */
38
+    private final InstallWorkerFactory workerFactory;
37 39
     /** Parent window. */
38 40
     private final BrowserWindow parentWindow;
39 41
     /** Swing controller. */
40
-    private final SwingController controller;
42
+    private final DialogManager dialogManager;
41 43
 
42 44
     /**
43 45
      * Instantiates a new install listener.
44 46
      *
45
-     * @param controller Swing controller
47
+     * @param dialogManager Manager to use for installer dialogs.
48
+     * @param workerFactory Factory to use to construct install workers.
46 49
      * @param info Addoninfo to install
47 50
      * @param parentWindow Parent window
48 51
      */
49
-    public InstallListener(final SwingController controller,
50
-            final AddonInfo info, final BrowserWindow parentWindow) {
51
-        super();
52
-
53
-        this.controller = controller;
52
+    public InstallListener(
53
+            final DialogManager dialogManager,
54
+            final InstallWorkerFactory workerFactory,
55
+            final AddonInfo info,
56
+            final BrowserWindow parentWindow) {
57
+        this.dialogManager = dialogManager;
58
+        this.workerFactory = workerFactory;
54 59
         this.info = info;
55 60
         this.parentWindow = parentWindow;
56 61
     }
@@ -62,9 +67,9 @@ public class InstallListener implements ActionListener {
62 67
      */
63 68
     @Override
64 69
     public void actionPerformed(final ActionEvent e) {
65
-        final InstallerWindow installer = new InstallerWindow(controller,
70
+        final InstallerWindow installer = new InstallerWindow(dialogManager,
66 71
                 parentWindow, info);
67 72
         installer.display(parentWindow);
68
-        new InstallWorker(info, installer, controller).executeInExecutor();
73
+        workerFactory.getInstallWorker(info, installer).executeInExecutor();
69 74
     }
70 75
 }

+ 29
- 15
src/com/dmdirc/addons/ui_swing/components/addonbrowser/InstallWorker.java 查看文件

@@ -23,8 +23,12 @@
23 23
 package com.dmdirc.addons.ui_swing.components.addonbrowser;
24 24
 
25 25
 import com.dmdirc.actions.ActionManager;
26
-import com.dmdirc.addons.ui_swing.SwingController;
27 26
 import com.dmdirc.addons.ui_swing.components.LoggingSwingWorker;
27
+import com.dmdirc.commandline.CommandLineOptionsModule.Directory;
28
+import com.dmdirc.commandline.CommandLineOptionsModule.DirectoryType;
29
+import com.dmdirc.plugins.PluginManager;
30
+import com.dmdirc.util.annotations.factory.Factory;
31
+import com.dmdirc.util.annotations.factory.Unbound;
28 32
 import com.dmdirc.util.io.Downloader;
29 33
 
30 34
 import java.io.File;
@@ -34,30 +38,44 @@ import java.util.concurrent.ExecutionException;
34 38
 /**
35 39
  * Downloads a given addon from the addon site and loads it into the client.
36 40
  */
41
+@Factory(inject = true)
37 42
 public class InstallWorker extends LoggingSwingWorker<String, Void> {
38 43
 
39 44
     /** Addon info. */
40 45
     private final AddonInfo info;
41 46
     /** Window to show installer progress. */
42 47
     private final InstallerWindow installer;
43
-    /** */
44
-    private final SwingController controller;
48
+    /** Temporary directory to download files to. */
49
+    private final String tempDirectory;
50
+    /** Directory to install plugins in. */
51
+    private final String pluginDirectory;
52
+    /** Directory to install themes in. */
53
+    private final String themeDirectory;
54
+    /** Plugin manager to inform of new plugins. */
55
+    private final PluginManager pluginManager;
45 56
 
46
-    public InstallWorker(final AddonInfo info, final InstallerWindow window,
47
-            final SwingController controller) {
57
+    public InstallWorker(
58
+            @Directory(DirectoryType.TEMPORARY) final String tempDirectory,
59
+            @Directory(DirectoryType.PLUGINS) final String pluginDirectory,
60
+            @Directory(DirectoryType.THEMES) final String themeDirectory,
61
+            final PluginManager pluginManager,
62
+            @Unbound final AddonInfo info,
63
+            @Unbound final InstallerWindow window) {
48 64
         super();
49 65
 
50 66
         this.info = info;
51 67
         this.installer = window;
52
-        this.controller = controller;
68
+        this.tempDirectory = tempDirectory;
69
+        this.pluginDirectory = pluginDirectory;
70
+        this.themeDirectory = themeDirectory;
71
+        this.pluginManager = pluginManager;
53 72
     }
54 73
 
55 74
     /** {@inheritDoc} */
56 75
     @Override
57 76
     protected String doInBackground() {
58 77
         try {
59
-            final File file = new File(controller.getIdentityManager().getConfigurationDirectory(),
60
-                    "." + info.getId());
78
+            final File file = new File(tempDirectory, "." + info.getId());
61 79
             Downloader.downloadPage("http://addons.dmdirc.com/addondownload/"
62 80
                     + info.getDownload(), file.getAbsolutePath());
63 81
 
@@ -66,20 +84,16 @@ public class InstallWorker extends LoggingSwingWorker<String, Void> {
66 84
                     ActionManager.installActionPack(file.getAbsolutePath());
67 85
                     break;
68 86
                 case TYPE_PLUGIN:
69
-                    final File newFile = new File(
70
-                            controller.getPluginManager().getDirectory(),
71
-                            info.getTitle() + ".jar");
87
+                    final File newFile = new File(pluginDirectory, info.getTitle() + ".jar");
72 88
                     if (file.renameTo(newFile)) {
73
-                        controller.getPluginManager().addPlugin(
74
-                                newFile.getName());
89
+                        pluginManager.addPlugin(newFile.getName());
75 90
                     } else {
76 91
                         return "Unable to install addon, failed to move file: "
77 92
                                 + file.getAbsolutePath();
78 93
                     }
79 94
                     break;
80 95
                 case TYPE_THEME:
81
-                    if (!file.renameTo(new File(controller.getThemeManager().getDirectory()
82
-                            + info.getTitle() + ".zip"))) {
96
+                    if (!file.renameTo(new File(themeDirectory, info.getTitle() + ".zip"))) {
83 97
                         return "Unable to install addon, failed to move file: "
84 98
                                 + file.getAbsolutePath();
85 99
                     }

+ 4
- 4
src/com/dmdirc/addons/ui_swing/components/addonbrowser/InstallerWindow.java 查看文件

@@ -22,8 +22,8 @@
22 22
 
23 23
 package com.dmdirc.addons.ui_swing.components.addonbrowser;
24 24
 
25
-import com.dmdirc.addons.ui_swing.SwingController;
26 25
 import com.dmdirc.addons.ui_swing.components.text.TextLabel;
26
+import com.dmdirc.addons.ui_swing.dialogs.DialogManager;
27 27
 import com.dmdirc.addons.ui_swing.dialogs.StandardDialog;
28 28
 
29 29
 import java.awt.event.ActionEvent;
@@ -57,13 +57,13 @@ public class InstallerWindow extends StandardDialog implements ActionListener {
57 57
     /**
58 58
      * Instantiates a new installer window.
59 59
      *
60
-     * @param controller Swing controller
60
+     * @param dialogManager The dialog manager looking after this window.
61 61
      * @param parentWindow Parent window
62 62
      * @param info Associated addon info
63 63
      */
64
-    public InstallerWindow(final SwingController controller,
64
+    public InstallerWindow(final DialogManager dialogManager,
65 65
             final BrowserWindow parentWindow, final AddonInfo info) {
66
-        super(controller.getDialogManager(), parentWindow, ModalityType.MODELESS);
66
+        super(dialogManager, parentWindow, ModalityType.MODELESS);
67 67
         this.info = info;
68 68
         this.parentWindow = parentWindow;
69 69
         setTitle("Installing addon...");

+ 1
- 1
src/com/dmdirc/addons/ui_swing/components/addonpanel/AddonPanel.java 查看文件

@@ -207,7 +207,7 @@ public abstract class AddonPanel extends JPanel implements AddonToggleListener,
207 207
     @Override
208 208
     public void hyperlinkUpdate(final HyperlinkEvent e) {
209 209
         if (e.getEventType() == EventType.ACTIVATED) {
210
-            new BrowserWindow(controller, parentWindow);
210
+            new BrowserWindow(controller.getDataLoaderWorkerFactory(), parentWindow);
211 211
         }
212 212
     }
213 213
 

Loading…
取消
儲存