- Timestamp:
- 07/08/09 15:34:43 (15 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/jabberit_messenger/java_source/src/nu/fw/jeti/plugins/PluginsInfo.java
r1091 r1097 25 25 package nu.fw.jeti.plugins; 26 26 27 import java.io.IOException;28 27 import java.lang.ref.WeakReference; 29 28 import java.lang.reflect.Method; 30 import java.net.MalformedURLException;31 import java.net.URL;32 29 import java.text.MessageFormat; 33 30 import java.util.*; 34 35 import javax.swing.UIManager;36 31 import javax.xml.parsers.SAXParser; 37 38 32 import nu.fw.jeti.backend.Start; 39 import nu.fw.jeti.backend.URLClassloader;40 33 import nu.fw.jeti.jabber.Backend; 41 34 import nu.fw.jeti.util.I18N; … … 48 41 public class PluginsInfo 49 42 { 50 private static URLClassloader classLoader;//change back to private43 private static Backend backend; 51 44 private static Map loadedPlugins = new HashMap(); 52 45 public static Map loadedPreferencePanels = new HashMap(); 53 private static Backend backend;54 46 private static Map pluginInstances = new HashMap(); 47 private static String pluginsJava; 55 48 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 49 public PluginsInfo( Backend backend, Start start ) 50 { 51 PluginsInfo.backend = backend; 52 PluginsInfo.pluginsJava = nu.fw.jeti.applet.Jeti.JAVAPLUGINS; 53 54 /** 55 * Carregando plugins: 56 * 57 * nu.fw.jeti.plugins.<NOME_do_Plugin>.Plugin.init( backend ); 58 * loadedPlugins.put("<NOME_do_Plugin>", nu.fw.jeti.plugins.<NOME_do_Plugin>.Plugin.class); 59 * 60 * Exemplo : Plugin xhtml 61 * nu.fw.jeti.plugins.xhtml.Plugin.init( backend ); 62 * loadedPlugins.put("xhtml", nu.fw.jeti.plugins.xhtml.Plugin.class); 63 */ 64 65 String[] plugins = pluginsJava.split(","); 66 67 for(int i = 0 ; i < plugins.length; i++) 68 PluginsInfo.loadPlugin(plugins[i].toString()); 69 } 70 176 71 public static boolean isPluginLoaded(String name) 177 72 { … … 179 74 } 180 75 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 76 private static void loadPlugin(String name) 77 { 78 Class loadedClass = nu.fw.jeti.applet.Jeti.getPlugin(name); 79 80 try 81 { 82 //Init plugin 213 83 Method m = loadedClass.getMethod("init",new Class[]{Backend.class}); 214 84 m.invoke(null,new Object[]{backend}); 215 }catch(Exception e) 85 } 86 catch(Exception e) 216 87 { 217 88 e.printStackTrace(); 218 //System.err.println(MessageFormat.format(I18N.gettext("main.error.{0}_plugin_failed_to_load"), new Object[]{name}));219 89 return; 220 90 } 221 91 222 223 // if (!loadOnFirstUse)224 // {225 //226 // try227 // {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 92 loadedPlugins.put(name, loadedClass); 245 if(!Start.applet)246 {247 try248 {249 loadedPreferencePanels.put(name, classLoader.loadClass("nu.fw.jeti.plugins." + name + ".PrefPanel"));250 }251 catch (ClassNotFoundException e)252 {253 // Do nothing254 }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 try264 {265 url = new URL(Start.programURL, "lib/" + name + ".jar");266 }267 catch (MalformedURLException e)268 {}269 classLoader.addURL(url);270 93 } 271 94 … … 273 96 { 274 97 Class loadedClass = (Class)loadedPlugins.remove(name); 275 if (loadedClass == null) { 276 return; 277 } 278 System.out.println("removing "+ name); 279 loadedPreferencePanels.remove(name); 98 99 if (loadedClass == null) 100 return; 101 102 System.out.println(I18N.gettext("main.pluginsInfo.Plugin_removing") + " : " + name); 103 104 loadedPreferencePanels.remove(name); 105 280 106 List list = (List) pluginInstances.remove(name); 281 try 282 {//unload cleaning 107 108 try 109 { 110 //unload cleaning 283 111 Method m = loadedClass.getMethod("unload",new Class[]{Backend.class}); 284 112 m.invoke(null,new Object[]{backend}); 285 }catch(NoSuchMethodException e){System.out.println(name + " has no remove");} 113 } 114 catch(NoSuchMethodException e) 115 { 116 System.out.println("ERRO : " + name + " " + I18N.gettext("main.pluginsInfo.has_no_remove")); 117 } 286 118 catch(Exception e) 287 119 { … … 289 121 } 290 122 291 if (list == null) return; 123 if ( list == null) 124 return; 125 292 126 for (Iterator i = list.iterator(); i.hasNext();) 293 {//unload loaded plugins 127 { 128 //unload loaded plugins 294 129 Plugins plugin = (Plugins)((WeakReference)i.next()).get(); 295 if (plugin !=null)plugin.unload(); 296 } 297 System.out.println(name +" removed"); 298 } 299 130 131 if ( plugin != null ) 132 plugin.unload(); 133 } 134 135 System.out.println( "Removed plugin : " + name ); 136 } 300 137 301 138 /** … … 314 151 Method m = loadedClass.getMethod("getInstance",null); 315 152 o = m.invoke(null,null); 316 }catch(NoSuchMethodException e){System.out.println(name + " has no instance method");} 153 } 154 catch(NoSuchMethodException e) 155 { 156 System.out.println(name + " has no instance method"); 157 } 317 158 catch(Exception e) 318 159 { … … 323 164 { 324 165 ie.printStackTrace(); 325 //System.out.println("Error while initializing " + name + " : " + ie.getCause().getMessage());326 166 return null; 327 167 } 168 328 169 return o; 329 170 } … … 332 173 { 333 174 Object o = null; 175 334 176 try 335 177 { … … 340 182 { 341 183 ie.printStackTrace(); 342 //System.out.println("Error while initializing " + name + " : " + ie.getCause().getMessage());343 184 return null; 344 185 } 186 345 187 return (Plugins) o; 346 188 } … … 349 191 { 350 192 List list = (List) pluginInstances.get(name); 193 351 194 if (list == null) 352 195 { … … 354 197 pluginInstances.put(name, list); 355 198 } 199 356 200 list.add(new WeakReference(object)); 357 201 } … … 360 204 { 361 205 StringBuffer buffer = new StringBuffer(); 206 362 207 for(Iterator i = loadedPlugins.entrySet().iterator();i.hasNext();) 363 208 { … … 368 213 text = (String) ((Class)entry.getValue()).getField("ABOUT").get(null); 369 214 } 370 catch (Exception e1) 371 {} 372 if(text!=null) buffer.append("\n - " + (String)entry.getKey() + '\n' + text); 373 } 374 return buffer.toString(); 215 catch (Exception e1){} 216 217 if( text != null) 218 buffer.append("\n - " + (String)entry.getKey() + '\n' + text); 219 } 220 221 return buffer.toString(); 375 222 } 376 223 377 // remove plugins224 // Remove plugins 378 225 public void exit() 379 226 { 380 String[] temp =new String[loadedPlugins.size()];227 String[] temp = new String[loadedPlugins.size()]; 381 228 loadedPlugins.keySet().toArray(temp); 229 382 230 for(int i=0;i<temp.length;i++) 383 231 { 384 232 unloadPlugin(temp[i]); 385 233 } 386 System.out.println("plugins unloaded"); 234 235 System.out.println(I18N.gettext("main.pluginsInfo.plugins_unloaded")); 387 236 } 388 237 } 238 389 239 /* 390 240 * Overrides for emacs
Note: See TracChangeset
for help on using the changeset viewer.