aboutsummaryrefslogtreecommitdiffstats
path: root/demo/app/src
diff options
context:
space:
mode:
authorDecebal Suiu <decebal.suiu@gmail.com>2013-09-26 18:46:50 +0300
committerDecebal Suiu <decebal.suiu@gmail.com>2013-09-26 18:46:50 +0300
commitaab4e0129a722f98a70ca1b9ed1917befd31c9f0 (patch)
tree5f3e6617b20f31948c657e1c1e2adb8b060361eb /demo/app/src
parent5b5b81dabbaadefc9ef35c313120a3c23532710e (diff)
downloadpf4j-aab4e0129a722f98a70ca1b9ed1917befd31c9f0.tar.gz
pf4j-aab4e0129a722f98a70ca1b9ed1917befd31c9f0.zip
boost plugins development
Diffstat (limited to 'demo/app/src')
-rw-r--r--demo/app/src/main/java/ro/fortsoft/pf4j/demo/Boot.java88
1 files changed, 85 insertions, 3 deletions
diff --git a/demo/app/src/main/java/ro/fortsoft/pf4j/demo/Boot.java b/demo/app/src/main/java/ro/fortsoft/pf4j/demo/Boot.java
index 9f218cf..7681a75 100644
--- a/demo/app/src/main/java/ro/fortsoft/pf4j/demo/Boot.java
+++ b/demo/app/src/main/java/ro/fortsoft/pf4j/demo/Boot.java
@@ -12,12 +12,19 @@
*/
package ro.fortsoft.pf4j.demo;
+import java.io.File;
+import java.util.HashMap;
import java.util.List;
+import java.util.Map;
+import java.util.NoSuchElementException;
import org.apache.commons.lang.StringUtils;
import ro.fortsoft.pf4j.DefaultPluginManager;
+import ro.fortsoft.pf4j.PluginClasspath;
+import ro.fortsoft.pf4j.PluginDescriptorFinder;
import ro.fortsoft.pf4j.PluginManager;
+import ro.fortsoft.pf4j.PropertiesPluginDescriptorFinder;
import ro.fortsoft.pf4j.demo.api.Greeting;
/**
@@ -26,21 +33,25 @@ import ro.fortsoft.pf4j.demo.api.Greeting;
* @author Decebal Suiu
*/
public class Boot {
-
+
public static void main(String[] args) {
// print logo
printLogo();
- // load and start (active/resolved) plugins
- final PluginManager pluginManager = new DefaultPluginManager();
+ // create the plugin manager
+ final PluginManager pluginManager = createPluginManager();
+
+ // load and start (active/resolved) the plugins
pluginManager.loadPlugins();
pluginManager.startPlugins();
+ // retrieves the extensions for Greeting extension point
List<Greeting> greetings = pluginManager.getExtensions(Greeting.class);
for (Greeting greeting : greetings) {
System.out.println(">>> " + greeting.getGreeting());
}
+ // stop the plugins
pluginManager.stopPlugins();
/*
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() {
System.out.println(StringUtils.repeat("#", 40));
System.out.println(StringUtils.center("PF4J-DEMO", 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 + "'");
+ }
+
+ }
}