Tom
2014-11-12 bae957cd80e59f16fe011dda45ce2624e2ffd4d2
src/main/java/com/gitblit/manager/PluginManager.java
@@ -37,8 +37,12 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import ro.fortsoft.pf4j.DefaultPluginFactory;
import ro.fortsoft.pf4j.DefaultPluginManager;
import ro.fortsoft.pf4j.ExtensionFactory;
import ro.fortsoft.pf4j.Plugin;
import ro.fortsoft.pf4j.PluginClassLoader;
import ro.fortsoft.pf4j.PluginFactory;
import ro.fortsoft.pf4j.PluginState;
import ro.fortsoft.pf4j.PluginStateEvent;
import ro.fortsoft.pf4j.PluginStateListener;
@@ -103,7 +107,19 @@
   public PluginManager start() {
      File dir = runtimeManager.getFileOrFolder(Keys.plugins.folder, "${baseFolder}/plugins");
      dir.mkdirs();
      pf4j = new DefaultPluginManager(dir);
      pf4j = new DefaultPluginManager(dir) {
         @Override
         protected PluginFactory createPluginFactory() {
            return new GuicePluginFactory();
         }
         @Override
         protected ExtensionFactory createExtensionFactory() {
            return new GuiceExtensionFactory();
         }
      };
      try {
         Version systemVersion = Version.createVersion(Constants.getVersion());
@@ -424,6 +440,10 @@
   protected File download(String url, boolean verifyChecksum) throws IOException {
      File file = downloadFile(url);
      if (!verifyChecksum) {
         return file;
      }
      File sha1File = null;
      try {
         sha1File = downloadFile(url + ".sha1");
@@ -437,7 +457,7 @@
      }
      if (sha1File == null && md5File == null && verifyChecksum) {
      if (sha1File == null && md5File == null) {
         throw new IOException("Missing SHA1 and MD5 checksums for " + url);
      }
@@ -572,4 +592,41 @@
   protected String getProxyAuthorization(URL url) {
      return "";
   }
   /**
    * Instantiates a plugin using pf4j but injects member fields
    * with Guice.
    */
   private class GuicePluginFactory extends DefaultPluginFactory {
      @Override
      public Plugin create(PluginWrapper pluginWrapper) {
         // use pf4j to create the plugin
         Plugin plugin = super.create(pluginWrapper);
         if (plugin != null) {
            // allow Guice to inject member fields
            runtimeManager.getInjector().injectMembers(plugin);
         }
         return plugin;
      }
   }
   /**
    * Instantiates an extension using Guice.
    */
   private class GuiceExtensionFactory implements ExtensionFactory {
      @Override
      public Object create(Class<?> extensionClass) {
         // instantiate && inject the extension
         logger.debug("Create instance for extension '{}'", extensionClass.getName());
         try {
            return runtimeManager.getInjector().getInstance(extensionClass);
         } catch (Exception e) {
            logger.error(e.getMessage(), e);
         }
         return null;
      }
   }
}