Browse Source

boost plugins development

pull/3/head
Decebal Suiu 11 years ago
parent
commit
aab4e0129a
  1. 88
      demo/app/src/main/java/ro/fortsoft/pf4j/demo/Boot.java

88
demo/app/src/main/java/ro/fortsoft/pf4j/demo/Boot.java

@ -12,12 +12,19 @@
*/ */
package ro.fortsoft.pf4j.demo; package ro.fortsoft.pf4j.demo;
import java.io.File;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.NoSuchElementException;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import ro.fortsoft.pf4j.DefaultPluginManager; import ro.fortsoft.pf4j.DefaultPluginManager;
import ro.fortsoft.pf4j.PluginClasspath;
import ro.fortsoft.pf4j.PluginDescriptorFinder;
import ro.fortsoft.pf4j.PluginManager; import ro.fortsoft.pf4j.PluginManager;
import ro.fortsoft.pf4j.PropertiesPluginDescriptorFinder;
import ro.fortsoft.pf4j.demo.api.Greeting; import ro.fortsoft.pf4j.demo.api.Greeting;
/** /**
@ -26,21 +33,25 @@ import ro.fortsoft.pf4j.demo.api.Greeting;
* @author Decebal Suiu * @author Decebal Suiu
*/ */
public class Boot { public class Boot {
public static void main(String[] args) { public static void main(String[] args) {
// print logo // print logo
printLogo(); printLogo();
// load and start (active/resolved) plugins // create the plugin manager
final PluginManager pluginManager = new DefaultPluginManager(); final PluginManager pluginManager = createPluginManager();
// load and start (active/resolved) the plugins
pluginManager.loadPlugins(); pluginManager.loadPlugins();
pluginManager.startPlugins(); pluginManager.startPlugins();
// retrieves the extensions for Greeting extension point
List<Greeting> greetings = pluginManager.getExtensions(Greeting.class); List<Greeting> greetings = pluginManager.getExtensions(Greeting.class);
for (Greeting greeting : greetings) { for (Greeting greeting : greetings) {
System.out.println(">>> " + greeting.getGreeting()); System.out.println(">>> " + greeting.getGreeting());
} }
// stop the plugins
pluginManager.stopPlugins(); pluginManager.stopPlugins();
/* /*
Runtime.getRuntime().addShutdownHook(new Thread() { Runtime.getRuntime().addShutdownHook(new Thread() {
@ -53,11 +64,82 @@ public class Boot {
}); });
*/ */
} }
private static PluginManager createPluginManager() {
// retrieves the pf4j runtime mode
String modeAsString = System.getProperty("pf4j.mode", RuntimeMode.PROD.toString());
RuntimeMode mode = RuntimeMode.byName(modeAsString);
System.out.println("PF4J runtime mode: '" + mode + "'");
// create the plugin manager depending on runtime mode
PluginManager pluginManager = null;
if (mode == RuntimeMode.PROD) {
pluginManager = new DefaultPluginManager();
} else if (mode == RuntimeMode.DEV) {
// run from eclipse IDE (for example)
pluginManager = new DefaultPluginManager(new File("../plugins")) {
@Override
protected PluginClasspath createPluginClasspath() {
PluginClasspath pluginClasspath = super.createPluginClasspath();
// modify plugin classes
List<String> pluginClasses = pluginClasspath.getClassesDirectories();
pluginClasses.clear();
pluginClasses.add("target/classes");
return pluginClasspath;
}
@Override
protected PluginDescriptorFinder createPluginDescriptorFinder() {
return new PropertiesPluginDescriptorFinder();
}
};
}
return pluginManager;
}
private static void printLogo() { private static void printLogo() {
System.out.println(StringUtils.repeat("#", 40)); System.out.println(StringUtils.repeat("#", 40));
System.out.println(StringUtils.center("PF4J-DEMO", 40)); System.out.println(StringUtils.center("PF4J-DEMO", 40));
System.out.println(StringUtils.repeat("#", 40)); System.out.println(StringUtils.repeat("#", 40));
} }
public enum RuntimeMode {
DEV("dev"), // development
PROD("prod"); // production
private final String name;
private static final Map<String, RuntimeMode> map = new HashMap<String, RuntimeMode>();
static {
for (RuntimeMode mode : RuntimeMode.values()) {
map.put(mode.name, mode);
}
}
private RuntimeMode(final String name) {
this.name = name;
}
@Override
public String toString() {
return name;
}
public static RuntimeMode byName(String name) {
if (map.containsKey(name)) {
return map.get(name);
}
throw new NoSuchElementException("Cannot found PF4J runtime mode with name '" + name + "'");
}
}
} }

Loading…
Cancel
Save