View Javadoc

1   /*
2    *  XNap - A P2P framework and client.
3    *
4    *  See the file AUTHORS for copyright information.
5    *
6    *  This program is free software; you can redistribute it and/or modify
7    *  it under the terms of the GNU General Public License as published by
8    *  the Free Software Foundation.
9    *
10   *  This program is distributed in the hope that it will be useful,
11   *  but WITHOUT ANY WARRANTY; without even the implied warranty of
12   *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13   *  GNU General Public License for more details.
14   *
15   *  You should have received a copy of the GNU General Public License
16   *  along with this program; if not, write to the Free Software
17   *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
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.OpenNapServerFileReader;
34  import org.xnap.plugin.opennap.net.OpenNapServerReader;
35  import org.xnap.plugin.opennap.net.WSXFileReader;
36  
37  /***
38   * This class handles the command to open 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 OpenServerFileAction extends AbstractAction
43  {
44      
45      //--- Constant(s) ---
46      
47      //--- Data field(s) ---
48  
49  	JFileChooser chooser;
50      
51      //--- Constructor(s) ---
52      
53      public OpenServerFileAction(JFileChooser chooser) 
54      {
55  		this.chooser = chooser;
56  
57  		putValue(Action.NAME, XNap.tr("Import Server File") + "...");
58  		putValue(IconHelper.XNAP_ICON, "fileimport.png");
59  		putValue(Action.SHORT_DESCRIPTION,
60  				 XNap.tr("Imports a file with the servers you wish to use."));
61      }
62  
63      //--- Method(s) ---
64      
65      public void actionPerformed(ActionEvent event) 
66      {
67  		if (chooser.showOpenDialog(null) == JFileChooser.APPROVE_OPTION) {
68  			String filename = chooser.getSelectedFile().getAbsolutePath();
69  
70  			OpenNapServerReader reader =
71  				(filename.endsWith("wsx")) 
72  				? (OpenNapServerReader)new WSXFileReader(filename)
73  				: (OpenNapServerReader)new OpenNapServerFileReader(filename);
74  
75  			openServerFile(reader);
76  		}
77      }
78  
79      /***
80       * Invokes {@link OpenNapServerManager#addFromFile(String,
81       * boolean)} in a thread.  */
82      public static void openServerFile(final OpenNapServerReader reader)
83      {
84  		Runnable runner = new Runnable()
85  			{
86  				public void run() 
87  				{
88  					try {
89  						int count = OpenNapPlugin.getServerManager().addFrom
90  							(reader, false);
91  						StatusBar.setTextLater
92  							(XNap.tr("Added {0} servers", new Integer(count)));
93  					}
94  					catch (IOException e) {
95  						StatusBar.setTextLater
96  							(XNap.tr("Could not read file: {0}", 
97  									 e.getLocalizedMessage()));
98  					}
99  				}
100 			};
101 
102 		Thread t = new Thread(runner, "ImportServerFile");
103 		t.start();
104     }
105 
106 }
107