From 1c301ba07b13c1cd941c44805ee09d1ac8759bd5 Mon Sep 17 00:00:00 2001
From: James Moger <james.moger@gitblit.com>
Date: Thu, 03 Jul 2014 17:00:41 -0400
Subject: [PATCH] Support injection of plugin Extensions

---
 src/main/java/com/gitblit/manager/PluginManager.java |   30 +++++++++++++++++++++++++++++-
 1 files changed, 29 insertions(+), 1 deletions(-)

diff --git a/src/main/java/com/gitblit/manager/PluginManager.java b/src/main/java/com/gitblit/manager/PluginManager.java
index a35ff6f..874e24b 100644
--- a/src/main/java/com/gitblit/manager/PluginManager.java
+++ b/src/main/java/com/gitblit/manager/PluginManager.java
@@ -37,7 +37,9 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import ro.fortsoft.pf4j.DefaultExtensionFinder;
 import ro.fortsoft.pf4j.DefaultPluginManager;
+import ro.fortsoft.pf4j.ExtensionFinder;
 import ro.fortsoft.pf4j.PluginClassLoader;
 import ro.fortsoft.pf4j.PluginState;
 import ro.fortsoft.pf4j.PluginStateEvent;
@@ -103,7 +105,33 @@
 	public PluginManager start() {
 		File dir = runtimeManager.getFileOrFolder(Keys.plugins.folder, "${baseFolder}/plugins");
 		dir.mkdirs();
-		pf4j = new DefaultPluginManager(dir);
+		pf4j = new DefaultPluginManager(dir) {
+			@Override
+		    protected ExtensionFinder createExtensionFinder() {
+		    	DefaultExtensionFinder extensionFinder = new DefaultExtensionFinder(this) {
+		    		@Override
+					protected ExtensionFactory createExtensionFactory() {
+		    			return new ExtensionFactory() {
+		    				@Override
+		    				public Object create(Class<?> extensionType) {
+		    					// instantiate && inject the extension
+		    					logger.debug("Create instance for extension '{}'", extensionType.getName());
+		    					try {
+		    						return runtimeManager.getInjector().getInstance(extensionType);
+		    					} catch (Exception e) {
+		    						logger.error(e.getMessage(), e);
+		    					}
+		    					return null;
+		    				}
+
+		    			};
+		    		}
+		    	};
+		        addPluginStateListener(extensionFinder);
+
+		        return extensionFinder;
+		    }
+		};
 
 		try {
 			Version systemVersion = Version.createVersion(Constants.getVersion());

--
Gitblit v1.9.1