1 19 package org.java.plugin; 20 21 import java.net.URL ; 22 import java.util.Map ; 23 24 import org.java.plugin.registry.PluginDescriptor; 25 import org.java.plugin.registry.PluginRegistry; 26 27 46 public abstract class PluginManager { 47 55 public static PluginManager lookup(final Object obj) { 56 if (obj == null) { 57 return null; 58 } 59 ClassLoader clsLoader; 60 if (obj instanceof Plugin) { 61 return ((Plugin) obj).getManager(); 62 } else if (obj instanceof Class ) { 63 clsLoader = ((Class ) obj).getClassLoader(); 64 } else if (obj instanceof ClassLoader ) { 65 clsLoader = (ClassLoader ) obj; 66 } else { 67 clsLoader = obj.getClass().getClassLoader(); 68 } 69 if (!(clsLoader instanceof PluginClassLoader)) { 70 return lookup(clsLoader.getParent()); 71 } 72 return ((PluginClassLoader) clsLoader).getPluginManager(); 73 } 74 75 78 public abstract PluginRegistry getRegistry(); 79 80 83 public abstract PathResolver getPathResolver(); 84 85 107 public abstract Map publishPlugins(final PluginLocation[] locations) 108 throws JpfException; 109 110 117 public abstract Plugin getPlugin(final String id) 118 throws PluginLifecycleException; 119 120 128 public abstract void activatePlugin(final String id) 129 throws PluginLifecycleException; 130 131 139 public abstract Plugin getPluginFor(final Object obj); 140 141 145 public abstract boolean isPluginActivated(final PluginDescriptor descr); 146 147 151 public abstract boolean isBadPlugin(final PluginDescriptor descr); 152 153 157 public abstract boolean isPluginActivating(final PluginDescriptor descr); 158 159 166 public abstract PluginClassLoader getPluginClassLoader( 167 final PluginDescriptor descr); 168 169 178 public abstract void shutdown(); 179 180 187 public abstract void deactivatePlugin(final String id); 188 189 201 public abstract PluginDescriptor[] disablePlugin( 202 final PluginDescriptor descr); 203 204 214 public abstract PluginDescriptor[] enablePlugin( 215 final PluginDescriptor descr, final boolean includeDependings); 216 217 221 public abstract boolean isPluginEnabled(final PluginDescriptor descr); 222 223 229 public abstract void registerListener(final EventListener listener); 230 231 237 public abstract void unregisterListener(final EventListener listener); 238 239 241 247 protected final void initPlugin(final Plugin plugin, 248 final PluginDescriptor descr) { 249 plugin.setManager(this); 250 plugin.setDescriptor(descr); 251 } 252 253 259 protected final void startPlugin(final Plugin plugin) throws Exception { 260 plugin.start(); 261 } 262 263 268 protected final void stopPlugin(final Plugin plugin) throws Exception { 269 plugin.stop(); 270 } 271 272 276 protected final void disposeClassLoader(final PluginClassLoader cl) { 277 cl.dispose(); 278 } 279 280 284 protected final void notifyClassLoader(final PluginClassLoader cl) { 285 cl.pluginsSetChanged(); 286 } 287 288 292 public interface EventListener { 293 298 void pluginActivated(Plugin plugin); 299 300 305 void pluginDeactivated(Plugin plugin); 306 307 312 void pluginDisabled(PluginDescriptor descriptor); 313 314 319 void pluginEnabled(PluginDescriptor descriptor); 320 } 321 322 328 public abstract static class EventListenerAdapter implements EventListener { 329 333 public void pluginActivated(final Plugin plugin) { 334 } 336 337 341 public void pluginDeactivated(final Plugin plugin) { 342 } 344 345 349 public void pluginDisabled(final PluginDescriptor descriptor) { 350 } 352 353 357 public void pluginEnabled(final PluginDescriptor descriptor) { 358 } 360 } 361 362 367 public static interface PluginLocation { 368 371 URL getManifestLocation(); 372 373 376 URL getContextLocation(); 377 } 378 } 379 | Popular Tags |