Skip to content

Instantly share code, notes, and snippets.

@Romain-P
Created June 11, 2014 21:13
Show Gist options
  • Select an option

  • Save Romain-P/cf5fef7a1ec83402a349 to your computer and use it in GitHub Desktop.

Select an option

Save Romain-P/cf5fef7a1ec83402a349 to your computer and use it in GitHub Desktop.
;)
package org.heater.core.plugin;
import com.google.inject.AbstractModule;
import com.google.inject.Inject;
import com.google.inject.Module;
import com.google.inject.multibindings.Multibinder;
import net.xeoh.plugins.base.PluginManager;
import net.xeoh.plugins.base.impl.PluginManagerFactory;
import net.xeoh.plugins.base.options.GetPluginOption;
import net.xeoh.plugins.base.options.addpluginsfrom.OptionReportAfter;
import net.xeoh.plugins.base.util.PluginManagerUtil;
import org.heater.api.HeaterActivator;
import java.io.File;
import java.net.URL;
import java.net.URLClassLoader;
import java.util.*;
public class PluginHandler {
private final List<HeaterActivator> instances;
private Module module;
@Inject Set<HeaterActivator> plugins;
public PluginHandler() {
this.instances = new ArrayList<>();
}
public PluginHandler initialize() {
PluginManagerUtil manager = new PluginManagerUtil(PluginManagerFactory.createPluginManager());
manager.addPluginsFrom(new File("plugins/").toURI());
for(HeaterActivator plugin: manager.getPlugins(HeaterActivator.class))
instances.add(plugin);
return this;
}
public void terminate() {
if(plugins == null) return;
for(HeaterActivator plugin: plugins)
plugin.stop();
}
public void installPlugins() {
if(plugins == null) return;
for(HeaterActivator plugin: plugins)
plugin.start();
}
private Module buildModule() {
return new AbstractModule() {
@Override
protected void configure() {
bind(PluginHandler.class).toInstance(PluginHandler.this);
Multibinder<HeaterActivator> binder = Multibinder.newSetBinder(binder(), HeaterActivator.class);
for(HeaterActivator instance: instances) {
binder.addBinding().toInstance(instance);
install(instance.pluginModule());
}
}
};
}
public Module getModule() {
return module != null ? module : (module = buildModule());
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment