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.azureus;
21  
22  import java.util.Hashtable;
23  import java.util.Iterator;
24  import java.util.List;
25  
26  import org.apache.log4j.Logger;
27  import org.gudy.azureus2.core3.config.COConfigurationManager;
28  import org.gudy.azureus2.core3.download.DownloadManager;
29  import org.gudy.azureus2.core3.global.GlobalManager;
30  import org.gudy.azureus2.core3.global.GlobalManagerFactory;
31  import org.gudy.azureus2.core3.global.GlobalManagerListener;
32  import org.gudy.azureus2.core3.internat.ILocaleUtilChooser;
33  import org.gudy.azureus2.core3.internat.LocaleUtil;
34  import org.gudy.azureus2.core3.logging.LGLogger;
35  import org.gudy.azureus2.ui.common.util.LocaleUtilHeadless;
36  import org.xnap.XNapFacade;
37  import org.xnap.gui.AbstractPreferencesDialog;
38  import org.xnap.gui.XNapFrame;
39  import org.xnap.gui.event.AbstractPreferencesDialogListener;
40  import org.xnap.gui.util.IconHelper;
41  import org.xnap.plugin.AbstractPlugin;
42  
43  /***
44   * Provides a gnutella network plugin based on the azureus library.
45   */
46  public class AzureusPlugin extends AbstractPlugin 
47  	implements GlobalManagerListener, ILocaleUtilChooser 
48  {
49  
50      //--- Constant(s) ---
51      
52      //--- Data Field(s) ---
53  
54      private static Logger logger = Logger.getLogger(AzureusPlugin.class);
55      private static AzureusPlugin singleton;
56  
57      private AzureusPreferences azureusPrefs;
58      private GlobalManager globalManager;
59      private AzureusTorrentPanel torrentPanel;
60      private PreferencesDialogListener pdl;
61  
62      private boolean started = false;
63      private Hashtable downloadByManager;
64      
65      //--- Constructor(s) ---
66  
67      public AzureusPlugin()
68      {
69      }
70  
71      //--- Method(s) ---
72  
73      public static AzureusPlugin getInstance()
74      {
75  		return singleton;
76      }
77  
78  	public static AzureusPreferences getPreferences()
79  	{
80  		return singleton.azureusPrefs;
81  	}
82      
83      /***
84       * Returns the global manager.
85       */
86      public static GlobalManager getGlobalManager()
87      {
88  		return singleton.globalManager;
89      }
90  
91      /***
92       * Starts the plugin.
93       */
94      public void start() 
95      {
96  		singleton = this;
97  
98  		downloadByManager = new Hashtable();
99  		
100 	    COConfigurationManager.checkConfiguration();
101 	 	LGLogger.initialise();
102 
103 	    LocaleUtil.setLocaleUtilChooser(this);
104 
105 		azureusPrefs = new AzureusPreferences();
106 		
107 		globalManager = GlobalManagerFactory.create(false);
108 		globalManager.addListener(this);
109 		
110 //		List list = globalManager.getDownloadManagers();
111 //		for (Iterator it = list.iterator(); it.hasNext();) {
112 //			downloadManagerAdded((DownloadManager)it.next());
113 //		}
114     }
115 
116     /***
117      * Starts the GUI of the plugin.
118      */
119     public void startGUI()
120     {
121 		torrentPanel = new AzureusTorrentPanel();
122 		XNapFrame.getInstance().insertTab
123 			(getInfo().getName(), IconHelper.getListIcon("socket.png"), torrentPanel);
124 		
125 		pdl = new PreferencesDialogListener();
126 		XNapFacade.addPluginPreferencesDialogListener(pdl);
127     }
128 
129     /***
130      * Stops the plugin. Disposes all singletons.
131      */
132     public void stop()
133     {
134     	for (Iterator it = downloadByManager.values().iterator(); it.hasNext();) {
135     		org.xnap.transfer.DownloadManager.getInstance().remove
136 				((AzureusDownloadContainer)it.next());
137     	}
138     	downloadByManager = null;
139     	
140 		globalManager = null;
141 		azureusPrefs = null;
142 
143 		singleton = null;
144     }
145 
146     /***
147      * Stops the GUI of the plugin.
148      */
149     public void stopGUI()
150     {
151 		pdl.dispose();
152 		XNapFacade.removePluginPreferencesDialogListener(pdl);
153 		pdl = null;
154 
155 		XNapFrame.getInstance().removeTab(torrentPanel);
156 		torrentPanel = null;
157     }
158 
159     // --- Inner Class(es) ---
160 
161     private class PreferencesDialogListener 
162 		extends AbstractPreferencesDialogListener
163     {
164 
165 		public void addPanels(AbstractPreferencesDialog dialog, List panels) 
166 		{
167 //  			AzureusPreferencesPanel jpp = new AzureusPreferencesPanel();
168 //  			panels.add(jpp);
169 //  			panels.add(dialog.addPanel(jpp, "socket.png"));
170 		}
171 
172     }
173 
174 	/***
175 	 *  @see org.gudy.azureus2.core3.global.GlobalManagerListener#downloadManagerAdded(org.gudy.azureus2.core3.download.DownloadManager)
176 	 */
177 	public synchronized void downloadManagerAdded(DownloadManager d) 
178 	{
179 		if (!downloadByManager.contains(d)) {
180 			AzureusDownloadContainer container = new AzureusDownloadContainer(d);
181 			downloadByManager.put(d, container);
182 			org.xnap.transfer.DownloadManager.getInstance().add(container);
183 		}
184 	}
185 
186 	/***
187 	 *  @see org.gudy.azureus2.core3.global.GlobalManagerListener#downloadManagerRemoved(org.gudy.azureus2.core3.download.DownloadManager)
188 	 */
189 	public synchronized void downloadManagerRemoved(DownloadManager d) 
190 	{
191 		AzureusDownloadContainer container = (AzureusDownloadContainer)downloadByManager.get(d);
192 		if (container != null) {
193 			downloadByManager.remove(d);
194 			org.xnap.transfer.DownloadManager.getInstance().remove(container);
195 		}
196 	}
197 
198 	/***
199 	 *  @see org.gudy.azureus2.core3.global.GlobalManagerListener#destroyInitiated()
200 	 */
201 	public void destroyInitiated() 
202 	{
203 		logger.warn("GlobalManager destroy initiated");
204 	}
205 
206 	/***
207 	 *  @see org.gudy.azureus2.core3.global.GlobalManagerListener#destroyed()
208 	 */
209 	public void destroyed() 
210 	{
211 		logger.warn("GlobalManager destroyed");
212 	}
213 
214 	/***
215 	 *  @see org.gudy.azureus2.core3.internat.ILocaleUtilChooser#getProperLocaleUtil()
216 	 */
217 	public LocaleUtil getProperLocaleUtil() 
218 	{
219 		return new LocaleUtilHeadless();
220 	}
221 
222 }