1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package org.xnap.plugin.opennap;
21
22 import java.awt.event.ActionEvent;
23 import java.util.List;
24
25 import javax.swing.Icon;
26 import javax.swing.JMenu;
27 import javax.swing.JTabbedPane;
28
29 import org.xnap.XNap;
30 import org.xnap.XNapFacade;
31 import org.xnap.gui.AbstractPreferencesDialog;
32 import org.xnap.gui.DefaultPrefsWizardDialog;
33 import org.xnap.gui.Dialogs;
34 import org.xnap.gui.StatusBar;
35 import org.xnap.gui.XNapFrame;
36 import org.xnap.gui.action.AbstractWizardAction;
37 import org.xnap.gui.component.XNapCheckBoxMenuItem;
38 import org.xnap.gui.component.XNapMenu;
39 import org.xnap.gui.component.XNapMenuItem;
40 import org.xnap.gui.event.AbstractPreferencesDialogListener;
41 import org.xnap.gui.util.IconHelper;
42 import org.xnap.plugin.AbstractPlugin;
43 import org.xnap.plugin.opennap.action.OpenNapAddAnyToHotlistAction;
44 import org.xnap.plugin.opennap.action.OpenNapGetServerListAction;
45 import org.xnap.plugin.opennap.gui.OpenNapAdvancedPreferencesPanel;
46 import org.xnap.plugin.opennap.gui.OpenNapPreferencesPanel;
47 import org.xnap.plugin.opennap.gui.OpenNapSearchOptionsPanel;
48 import org.xnap.plugin.opennap.gui.OpenNapServerPanel;
49 import org.xnap.plugin.opennap.gui.OpenNapServerPreferencesPanel;
50 import org.xnap.plugin.opennap.gui.OpenNapStatusPanel;
51 import org.xnap.plugin.opennap.gui.OpenNapWhoisPanel;
52 import org.xnap.plugin.opennap.gui.OpenNapWizardPanel;
53 import org.xnap.plugin.opennap.gui.UseAutoConnectorAction;
54 import org.xnap.plugin.opennap.net.OpenNapSearchManager;
55 import org.xnap.plugin.opennap.net.OpenNapServerManager;
56 import org.xnap.plugin.opennap.net.OpenNapTransferManager;
57 import org.xnap.plugin.opennap.net.msg.MessageHandler;
58 import org.xnap.plugin.opennap.user.OpenNapUserManager;
59 import org.xnap.plugin.opennap.util.OpenNapPreferences;
60
61 /***
62 * Provides a plugin that can access multiple OpenNap servers.
63 */
64 public class OpenNapPlugin extends AbstractPlugin
65 {
66
67
68
69 public static String ICON_FILENAME = "network_local.png";
70
71 public static Icon ICON_16 = IconHelper.getIcon(ICON_FILENAME, 16, false);
72
73
74
75 private static OpenNapPlugin singleton;
76
77 private JMenu jmOpenNap;
78 private JTabbedPane jtpOpenNap;
79 private OpenNapServerPanel jpServers;
80 private OpenNapWhoisPanel jpWhois;
81 private OpenNapStatusPanel jlStatus;
82 private PreferencesDialogListener pdl;
83
84 private MessageHandler messageHandler;
85 private OpenNapPreferences napPrefs;
86 private OpenNapSearchManager searchManager;
87 private OpenNapServerManager serverManager;
88 private OpenNapUserManager userManager;
89 private OpenNapTransferManager transferManager;
90
91 private int dataPortErrorCount = 0;
92
93
94
95 public OpenNapPlugin()
96 {
97 }
98
99
100
101 /***
102 * Invoked when a DataPortErrorMessage is received.
103 */
104 public synchronized void dataPortErrorReceived()
105 {
106 dataPortErrorCount++;
107
108 if (dataPortErrorCount == 10) {
109 if (XNapFrame.getInstance() != null) {
110 Dialogs.showNotification
111 (XNapFrame.getInstance(), "DataPortError",
112 XNap.tr("XNap Warning"),
113 XNap.tr("A number of notifications have been received that the local port is misconfigured. Therefore it has been disabled. Open the plugin preferences to renable it."),
114 getPreferences());
115 }
116 getPreferences().setFirewalled(true);
117 dataPortErrorCount = 0;
118 }
119 }
120
121 public static OpenNapPlugin getInstance()
122 {
123 return singleton;
124 }
125
126 public static MessageHandler getMessageHandler()
127 {
128 return singleton.messageHandler;
129 }
130
131 public static OpenNapPreferences getPreferences()
132 {
133 return singleton.napPrefs;
134 }
135
136 public static OpenNapSearchManager getSearchManager()
137 {
138 return singleton.searchManager;
139 }
140
141 public static OpenNapServerManager getServerManager()
142 {
143 return singleton.serverManager;
144 }
145
146 public static OpenNapTransferManager getTransferManager()
147 {
148 return singleton.transferManager;
149 }
150
151 public static OpenNapUserManager getUserManager()
152 {
153 return singleton.userManager;
154 }
155
156 public void start()
157 {
158 singleton = this;
159 napPrefs = new OpenNapPreferences();
160 userManager = new OpenNapUserManager();
161 transferManager = new OpenNapTransferManager();
162 messageHandler = new MessageHandler();
163 searchManager = new OpenNapSearchManager();
164 serverManager = new OpenNapServerManager();
165
166 userManager.restore();
167 transferManager.restore();
168 serverManager.init();
169 serverManager.getConnector().setEnabled
170 (napPrefs.getUseAutoconnector());
171 }
172
173 public void startGUI()
174 {
175 jtpOpenNap = new JTabbedPane();
176 jtpOpenNap.setName("opennap");
177 XNapFrame.getInstance().insertTab
178 (getInfo().getName(), IconHelper.getListIcon(ICON_FILENAME),
179 jtpOpenNap);
180
181 jpServers = new OpenNapServerPanel();
182 getServerManager().addStatsListener(jpServers);
183 jtpOpenNap.add(XNap.tr("Server"), jpServers);
184
185 jpWhois = new OpenNapWhoisPanel();
186 jpWhois.setName("whois");
187 jtpOpenNap.add(XNap.tr("Whois"), jpWhois);
188
189 jlStatus = new OpenNapStatusPanel();
190 getServerManager().addStatsListener(jlStatus);
191 StatusBar.getInstance().addComponent(jlStatus);
192
193 initializeMenu();
194 XNapFrame.getInstance().getMainMenuBar().addPluginMenu(jmOpenNap);
195
196 pdl = new PreferencesDialogListener();
197 XNapFacade.addPluginPreferencesDialogListener(pdl);
198
199 XNapFrame.getInstance().getSearchPanel().getAdvancedPanel()
200 .addOptionsPanel(getSearchManager(), new OpenNapSearchOptionsPanel());
201
202 if (!napPrefs.getSeenStartupWizard()) {
203 showWizard();
204 }
205 }
206
207 public void initializeMenu()
208 {
209 jmOpenNap = new XNapMenu(getInfo().getName());
210 jmOpenNap.setIcon(IconHelper.getMenuIcon(ICON_FILENAME));
211
212 XNapMenu jmStartup = new XNapMenu(XNap.tr("Startup"));
213 jmOpenNap.add(jmStartup);
214 jmStartup.add(new XNapCheckBoxMenuItem(new UseAutoConnectorAction()));
215 jmOpenNap.addSeparator();
216 jmOpenNap.add(new XNapMenuItem(new OpenNapAddAnyToHotlistAction()));
217 jmOpenNap.addSeparator();
218 jmOpenNap.add(new XNapMenuItem(new OpenNapGetServerListAction()));
219 jmOpenNap.addSeparator();
220 jmOpenNap.add(new XNapMenuItem(new ShowWizardAction()));
221 }
222
223 public void showWizard()
224 {
225 DefaultPrefsWizardDialog d
226 = new DefaultPrefsWizardDialog(napPrefs, "seenStartupWizard");
227 d.addPanel(new OpenNapWizardPanel());
228 d.show(XNapFrame.getInstance());
229 }
230
231 public void stop()
232 {
233 userManager.save();
234 transferManager.save();
235 transferManager.clear();
236 messageHandler.die();
237 serverManager.die();
238
239 messageHandler = null;
240 serverManager = null;
241 searchManager = null;
242 transferManager = null;
243 userManager = null;
244 napPrefs = null;
245
246
247
248 }
249
250 public void stopGUI()
251 {
252 XNapFrame.getInstance().getSearchPanel().getAdvancedPanel()
253 .removeOptionsPanel(getSearchManager());
254
255 pdl.dispose();
256 XNapFacade.removePluginPreferencesDialogListener(pdl);
257 pdl = null;
258
259 XNapFrame.getInstance().getMainMenuBar().removePluginMenu(jmOpenNap);
260 jmOpenNap = null;
261
262 getServerManager().removeStatsListener(jlStatus);
263 StatusBar.getInstance().removeComponent(jlStatus);
264 jlStatus = null;
265
266 XNapFrame.getInstance().removeTab(jtpOpenNap);
267 jtpOpenNap = null;
268
269 getServerManager().removeStatsListener(jpServers);
270 jpServers = null;
271
272 jpWhois = null;
273 }
274
275
276
277 private class PreferencesDialogListener
278 extends AbstractPreferencesDialogListener
279 {
280
281 public void addPanels(AbstractPreferencesDialog dialog, List panels)
282 {
283 JTabbedPane jtp = new JTabbedPane();
284 dialog.addPanel(jtp, getInfo().getName(), ICON_FILENAME,
285 XNap.tr("{0} settings", getInfo().getName()));
286 panels.add(jtp);
287
288 OpenNapPreferencesPanel npp = new OpenNapPreferencesPanel();
289 dialog.addTab(jtp, npp);
290 panels.add(npp);
291
292 OpenNapServerPreferencesPanel spp = new OpenNapServerPreferencesPanel();
293 dialog.addTab(jtp, spp);
294 panels.add(spp);
295
296 OpenNapAdvancedPreferencesPanel napp
297 = new OpenNapAdvancedPreferencesPanel();
298 dialog.addTab(jtp, napp);
299 panels.add(napp);
300
301 }
302
303
304 }
305
306 private class ShowWizardAction extends AbstractWizardAction
307 {
308 public void actionPerformed(ActionEvent event)
309 {
310 showWizard();
311 }
312 }
313
314 }
315