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.gui;
21
22 import java.awt.event.ActionEvent;
23 import java.io.IOException;
24
25 import javax.swing.AbstractAction;
26 import javax.swing.Action;
27 import javax.swing.JFileChooser;
28
29 import org.xnap.XNap;
30 import org.xnap.gui.StatusBar;
31 import org.xnap.gui.util.IconHelper;
32 import org.xnap.plugin.opennap.OpenNapPlugin;
33 import org.xnap.plugin.opennap.net.OpenNapServerFileWriter;
34 import org.xnap.plugin.opennap.net.OpenNapServerWriter;
35 import org.xnap.plugin.opennap.net.WSXFileWriter;
36
37 /***
38 * This class handles the command to save a user-specified file
39 * containing a list of hosts. Once the user selects a file the
40 * ServerPanel.doLoadServersFile() method is called.
41 */
42 public class SaveServerFileAction extends AbstractAction
43 {
44
45
46
47
48
49 private JFileChooser chooser;
50
51
52
53 public SaveServerFileAction(JFileChooser chooser)
54 {
55 this.chooser = chooser;
56
57 putValue(Action.NAME, XNap.tr("Save Server File") + "...");
58 putValue(Action.SHORT_DESCRIPTION,
59 XNap.tr("Saves a file with the servers in the table."));
60 putValue(IconHelper.XNAP_ICON, "filesaveas.png");
61 }
62
63
64
65 public void actionPerformed(ActionEvent event)
66 {
67 if (chooser.showSaveDialog(null) == JFileChooser.APPROVE_OPTION) {
68 String filename = chooser.getSelectedFile().getAbsolutePath();
69 OpenNapServerWriter writer =
70 (filename.endsWith("wsx"))
71 ? (OpenNapServerWriter)new WSXFileWriter(filename)
72 : (OpenNapServerWriter)new OpenNapServerFileWriter(filename);
73 saveServerFile(writer);
74 }
75 }
76
77 /***
78 * Invokes {@link Connector.addFromFile(String, boolean)} in a thread.
79 */
80 public static void saveServerFile(final OpenNapServerWriter writer)
81 {
82 Runnable r = new Runnable()
83 {
84 public void run()
85 {
86 try {
87 int count
88 = OpenNapPlugin.getServerManager().saveTo(writer);
89 StatusBar.setTextLater
90 (XNap.tr("Write {0} servers", new Integer(count)));
91 }
92 catch (IOException e) {
93 StatusBar.setTextLater
94 (XNap.tr("Could not write file: {0}",
95 e.getLocalizedMessage()));
96 }
97 }
98 };
99
100 Thread t = new Thread(r, "SaveServerFile");
101 t.start();
102 }
103
104 }
105