James Moger
2014-07-03 1c301ba07b13c1cd941c44805ee09d1ac8759bd5
Support injection of plugin Extensions
1 files modified
30 ■■■■■ changed files
src/main/java/com/gitblit/manager/PluginManager.java 30 ●●●●● patch | view | raw | blame | history
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());