source: trunk/jabberit_messenger/java_source/src/nu/fw/jeti/plugins/PluginsInfo.java @ 1091

Revision 1091, 10.9 KB checked in by alexandrecorreia, 15 years ago (diff)

Ticket #571 - Removido o arquivo rostericons.xml, usado pelo applet(Java).

Line 
1/*
2 *      Jeti, a Java Jabber client, Copyright (C) 2003 E.S. de Boer 
3 *
4 *  This program is free software; you can redistribute it and/or modify
5 *  it under the terms of the GNU General Public License as published by
6 *  the Free Software Foundation; either version 2 of the License, or
7 *  (at your option) any later version.
8 *
9 *  This program is distributed in the hope that it will be useful,
10 *      but WITHOUT ANY WARRANTY; without even the implied warranty of
11 *      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12 *      GNU General Public License for more details.
13 *
14 *  You should have received a copy of the GNU General Public License
15 *  along with this program; if not, write to the Free Software
16 *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
17 *
18 *      For questions, comments etc,
19 *      use the website at http://jeti.jabberstudio.org
20 *  or mail/IM me at jeti@jabber.org
21 *
22 *      Created on 26-dec-2003
23 */
24 
25package nu.fw.jeti.plugins;
26
27import java.io.IOException;
28import java.lang.ref.WeakReference;
29import java.lang.reflect.Method;
30import java.net.MalformedURLException;
31import java.net.URL;
32import java.text.MessageFormat;
33import java.util.*;
34
35import javax.swing.UIManager;
36import javax.xml.parsers.SAXParser;
37
38import nu.fw.jeti.backend.Start;
39import nu.fw.jeti.backend.URLClassloader;
40import nu.fw.jeti.jabber.Backend;
41import nu.fw.jeti.util.I18N;
42import nu.fw.jeti.util.Preferences;
43
44/**
45 * @author E.S. de Boer
46 *
47 */
48public class PluginsInfo
49{
50        private static URLClassloader classLoader;//change back to private
51        private static Map loadedPlugins = new HashMap();
52        public static Map loadedPreferencePanels = new HashMap();
53        private static Backend backend;
54        private static Map pluginInstances = new HashMap();
55                       
56        public PluginsInfo(Backend backend,SAXParser parser,Start start)
57        {
58                PluginsInfo.backend = backend;
59               
60                if( !Start.applet )
61                {
62                        classLoader = new URLClassloader(new URL[]{Start.programURL}, getClass().getClassLoader());
63                        UIManager.put("ClassLoader", classLoader);
64                }               
65                new PluginData(parser);         
66               
67               
68//              nu.fw.jeti.plugins.xmppuri.Plugin.init(backend);
69//              loadedPlugins.put("xmpp",nu.fw.jeti.plugins.xmpp.Plugin.class);
70//              nu.fw.jeti.plugins.xmpp.Plugin.init(backend);
71
72//              loadedPlugins.put("compression",nu.fw.jeti.plugins.compression.Plugin.class);
73//              nu.fw.jeti.plugins.compression.Plugin.init(backend);
74//              loadedPreferencePanels.put("groupchatalerter",nu.fw.jeti.plugins.groupchatalerter.PrefPanel.class);
75               
76//              loadedPlugins.put("groupchatalerter",nu.fw.jeti.plugins.groupchatalerter.Plugin.class);
77//              nu.fw.jeti.plugins.groupchatalerter.Plugin.init(backend);
78//              nu.fw.jeti.plugins.groupchat.Plugin.init(backend);
79               
80                //new test.QueryServers(backend);
81//             
82//              nu.fw.jeti.plugins.pubsub.Plugin.init(backend);
83//              nu.fw.jeti.plugins.useractivity.Plugin.init(backend);
84//
85//              nu.fw.jeti.plugins.jingle.Plugin.init(backend);
86               
87               
88//              try
89//              {
90//                      nu.fw.jeti.plugins.tts.Plugin.init(backend);
91//              }catch (Exception e){
92//                      e.printStackTrace();
93//              }
94               
95//                      nu.fw.jeti.plugins.vcard.Plugin.init(backend);
96               
97//              nu.fw.jeti.plugins.ichatavatars.Plugin.init(backend);
98//              loadedPlugins.put("ichatavatars", nu.fw.jeti.plugins.ichatavatars.Plugin.class);
99               
100        //      nu.fw.jeti.plugins.spell.Plugin.init(backend);
101        //      loadedPlugins.put("spell", nu.fw.jeti.plugins.spell.Plugin.class);
102        //      loadedPreferencePanels.put("spell",nu.fw.jeti.plugins.spell.PrefPanel.class);
103               
104        //      nu.fw.jeti.plugins.metaltheme.Plugin.init(backend);
105        //      loadedPreferencePanels.put("metaltheme",nu.fw.jeti.plugins.metaltheme.PrefPanel.class);
106               
107        //      nu.fw.jeti.plugins.filetransfer.Plugin.init(backend);
108        //      loadedPreferencePanels.put("filetransfer",nu.fw.jeti.plugins.filetransfer.PrefPanel.class);
109//             
110//                      nu.fw.jeti.plugins.sound.Plugin.init(backend);
111//                      loadedPreferencePanels.put("sound",nu.fw.jeti.plugins.sound.PrefPanel.class);
112//             
113        //      nu.fw.jeti.plugins.xhtml.Plugin.init(backend);
114        //      loadedPlugins.put("xhtml", nu.fw.jeti.plugins.xhtml.Plugin.class);
115                       
116                        //              }
117//              catch (Exception e)
118//              {
119//                      // TOD Auto-generated catch block
120//                      e.printStackTrace();
121//              }
122               
123//              nu.fw.jeti.plugins.search.Plugin.init(backend);
124               
125//              nu.fw.jeti.plugins.buddyspacemaps.Plugin.init(backend);
126               
127
128//             
129//              nu.fw.jeti.plugins.openpgp.Plugin.init(backend);
130//              loadedPlugins.put("openpgp", nu.fw.jeti.plugins.openpgp.Plugin.class);
131               
132                //nu.fw.jeti.plugins.translators.breezah.Plugin.init(backend);
133               
134                        //new nu.fw.jeti.plugins.logtoserver.Plugin(backend);
135                        //new nu.fw.jeti.plugins.servertolog.Plugin(backend);
136//     
137//              try
138//              {
139//                      nu.fw.jeti.plugins.emoticons.Plugin.init(backend);
140//              } catch (IOException e)
141//              {
142//                      e.printStackTrace();
143//              }
144//      loadedPlugins.put("emoticons", nu.fw.jeti.plugins.emoticons.Plugin.class);
145//      loadedPreferencePanels.put("emoticons",nu.fw.jeti.plugins.emoticons.PrefPanel.class);
146
147//              nu.fw.jeti.plugins.alertwindow.Plugin.init(backend);
148//              loadedPreferencePanels.put("alertwindow",nu.fw.jeti.plugins.alertwindow.PrefPanel.class);
149               
150                //start.LoadPlugins(urlString);
151                for (Iterator i = Preferences.getPlugins().iterator(); i.hasNext();)
152                {
153                        Object[] temp = (Object[]) i.next();
154                        if (temp[2] == null)continue; //missing plugin
155                        if (((Boolean) temp[1]).booleanValue())
156                        {
157                                start.setSplashText((String) temp[0]);
158                                loadPlugin((String) temp[0]);
159                        }
160                }
161        }
162               
163        //translator hackje vervang door translator interfaces as in io
164        private static Translator translator;
165       
166        public static void setTranslator(Translator translator)
167        {
168                PluginsInfo.translator = translator;
169        }
170       
171        public static Translator getTranslator()
172        {
173                return translator;
174        }
175       
176        public static boolean isPluginLoaded(String name)
177        {
178                return loadedPlugins.containsKey(name);
179        }
180
181        public static void loadPlugin(String name)
182        {
183                Class loadedClass =null;
184                if (!Start.applet)
185                {//non applet version
186                        URL url =null;// new URL[1];
187                        try
188                        {
189                                //if (Start.programURL != null)
190                                        url = new URL(Start.programURL, "plugins/" + name + ".jar");
191                                //else url = new URL(Start.localURL, "plugins/" + name + ".jar");
192                        }
193                        catch (MalformedURLException e)
194                        {}
195                        //System.out.println(url);
196                        //URLClassLoader loader = new URLClassLoader(url, parentClassLoader);
197                        classLoader.addURL(url);
198                        try
199                        {
200                                loadedClass = classLoader.loadClass("nu.fw.jeti.plugins." + name + ".Plugin");
201                        }
202                        catch (ClassNotFoundException e)
203                        {
204                                System.err.println(MessageFormat.format(I18N.gettext("main.error.{0}_plugin_not_found"), new Object[]{name}));
205                                return;
206                        }
207                }
208                else loadedClass = nu.fw.jeti.applet.Jeti.getPlugin(name);
209               
210               
211                try
212                {//init plugin
213                        Method m = loadedClass.getMethod("init",new Class[]{Backend.class});
214                        m.invoke(null,new Object[]{backend});
215                }catch(Exception e)
216                {
217                        e.printStackTrace();
218            //System.err.println(MessageFormat.format(I18N.gettext("main.error.{0}_plugin_failed_to_load"), new Object[]{name}));
219                        return;
220                }
221               
222               
223//              if (!loadOnFirstUse)
224//              {
225//                     
226//                      try
227//                      {
228//                              Constructor c = loadedClass.getConstructor(new Class[] { Class.forName("nu.fw.jeti.jabber.Backend")});
229//                              addInstance(name, new WeakReference(c.newInstance(new Object[] { backend })));
230//                      }
231//                      catch (InvocationTargetException ie)
232//                      {
233//                              ie.printStackTrace();
234//                              //System.out.println("Error while initializing " + name + " : " + ie.getCause().getMessage());
235//                              return;
236//                      }
237//                      catch (Exception e2)
238//                      {
239//                              e2.printStackTrace();
240//                              return;
241//                      }
242//              }
243               
244                loadedPlugins.put(name, loadedClass);
245                if(!Start.applet)
246                {       
247                        try
248                        {
249                                loadedPreferencePanels.put(name, classLoader.loadClass("nu.fw.jeti.plugins." + name + ".PrefPanel"));
250                        }
251                        catch (ClassNotFoundException e)
252                        {
253                            // Do nothing
254                        }
255                }
256                else nu.fw.jeti.applet.Jeti.getPrefPanel(name,loadedPreferencePanels);
257                //System.out.println(name + "loaded");
258        }
259       
260        public static void loadLibrary(String name)
261        {
262                URL url =null;
263                try
264                {
265                        url = new URL(Start.programURL, "lib/" + name + ".jar");
266                }
267                catch (MalformedURLException e)
268                {}
269                classLoader.addURL(url);
270        }
271       
272        public static void unloadPlugin(String name)
273        {
274                Class loadedClass = (Class)loadedPlugins.remove(name);
275                if (loadedClass == null) {
276                    return;
277                }
278                System.out.println("removing "+ name);
279                loadedPreferencePanels.remove(name);
280                List list = (List) pluginInstances.remove(name);
281                try
282                {//unload cleaning
283                        Method m = loadedClass.getMethod("unload",new Class[]{Backend.class});
284                        m.invoke(null,new Object[]{backend});
285                }catch(NoSuchMethodException e){System.out.println(name + " has no remove");}
286                catch(Exception e)
287                {
288                        e.printStackTrace();
289                }
290                               
291                if (list == null) return;
292                for (Iterator i = list.iterator(); i.hasNext();)
293                {//unload loaded plugins
294                        Plugins plugin = (Plugins)((WeakReference)i.next()).get();
295                        if (plugin !=null)plugin.unload();
296                }
297                System.out.println(name +" removed");
298        }
299       
300       
301        /**
302         * Gets a single instance of a plugin, the plugin has to have the static getInstance() method
303         * @param name name of the plugin
304         * @return instance of the plugin
305         */
306        public static Object getPluginInstance(String name)
307        {
308                Object o = null;
309                try
310                {
311                        Class loadedClass = (Class) loadedPlugins.get(name);
312                        try
313                        {
314                                Method m = loadedClass.getMethod("getInstance",null);
315                                o = m.invoke(null,null);
316                        }catch(NoSuchMethodException e){System.out.println(name + " has no instance method");}
317                        catch(Exception e)
318                        {
319                                e.printStackTrace();
320                        }
321                }
322                catch (Exception ie)
323                {
324                        ie.printStackTrace();
325                        //System.out.println("Error while initializing " + name + " : " + ie.getCause().getMessage());
326                        return null;
327                }
328                return o;
329        }
330       
331        public static Plugins newPluginInstance(String name)
332        {
333                Object o = null;
334                try
335                {
336                        o = ((Class) loadedPlugins.get(name)).newInstance();
337                        addInstance(name,o);
338                }
339                catch (Exception ie)
340                {
341                        ie.printStackTrace();
342                        //System.out.println("Error while initializing " + name + " : " + ie.getCause().getMessage());
343                        return null;
344                }
345                return (Plugins) o;
346        }
347
348        private static void addInstance(String name, Object object)
349        {
350                List list = (List) pluginInstances.get(name);
351                if (list == null)
352                {
353                        list = new LinkedList();
354                        pluginInstances.put(name, list);
355                }
356                list.add(new WeakReference(object));
357        }
358       
359        public static String getAbout()
360        {
361                StringBuffer buffer = new StringBuffer();
362                for(Iterator i = loadedPlugins.entrySet().iterator();i.hasNext();)
363                {
364                        Map.Entry entry = (Map.Entry)i.next();
365                        String text = null;
366                        try
367                        {
368                                 text = (String) ((Class)entry.getValue()).getField("ABOUT").get(null);
369                        }
370                        catch (Exception e1)
371                        {}
372                        if(text!=null) buffer.append("\n - " + (String)entry.getKey() + '\n' + text);
373                 }
374                 return buffer.toString();
375        }
376       
377        //remove plugins
378        public void exit()
379        {
380                String[] temp=new String[loadedPlugins.size()];
381                loadedPlugins.keySet().toArray(temp);
382                for(int i=0;i<temp.length;i++)
383                {
384                        unloadPlugin(temp[i]);
385                }
386                System.out.println("plugins unloaded");
387        }
388}
389/*
390 * Overrides for emacs
391 * Local variables:
392 * tab-width: 4
393 * End:
394 */
Note: See TracBrowser for help on using the repository browser.