summaryrefslogtreecommitdiffstats
path: root/src/main/java/com/gitblit/manager/GitblitManager.java
diff options
context:
space:
mode:
authorDavid Ostrovsky <david@ostrovsky.org>2014-03-10 01:50:49 +0100
committerJames Moger <james.moger@gitblit.com>2014-04-10 18:58:09 -0400
commit84f406bfd20ec2076cf7616e7f396ad480513bc4 (patch)
tree661045f193871d676c1c06b996b831469cfc067c /src/main/java/com/gitblit/manager/GitblitManager.java
parent261ddf0fcf9a55fbb5b4e7c6c2cdb4c2f8c860fe (diff)
downloadgitblit-84f406bfd20ec2076cf7616e7f396ad480513bc4.tar.gz
gitblit-84f406bfd20ec2076cf7616e7f396ad480513bc4.zip
Add plugins/extension infrastructure
Plugins are stored in `${baseFolder}/plugins` and are loaded during startup by the PluginManager. A plugin defines it's metadata in META-INF/MANIFEST.MF: Plugin-Class: com.gitblit.plugins.cookbook.CookbookPlugin Plugin-Dependencies: foo, bar Plugin-Id: gitblit-plugin Plugin-Provider: John Doe Plugin-Version: 1.0 Plugins can define extension points that can be implemented by other plugins and they can depend on other plugins: Plugin-Dependencies: foo, bar During the load phase, a directed acyclic graph is built and the loading order of the dependency chain is reversed using a topological sort; parent followed by children. The parent plugin classloader is the combined classloader of all parent plugins. Change-Id: I738821fa2bff02a5dbe339a944cc7e3c4dd8e299
Diffstat (limited to 'src/main/java/com/gitblit/manager/GitblitManager.java')
-rw-r--r--src/main/java/com/gitblit/manager/GitblitManager.java18
1 files changed, 17 insertions, 1 deletions
diff --git a/src/main/java/com/gitblit/manager/GitblitManager.java b/src/main/java/com/gitblit/manager/GitblitManager.java
index 8856715a..34c101e2 100644
--- a/src/main/java/com/gitblit/manager/GitblitManager.java
+++ b/src/main/java/com/gitblit/manager/GitblitManager.java
@@ -43,6 +43,8 @@ import org.eclipse.jgit.transport.RefSpec;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import ro.fortsoft.pf4j.PluginWrapper;
+
import com.gitblit.Constants;
import com.gitblit.Constants.AccessPermission;
import com.gitblit.Constants.AccessRestrictionType;
@@ -116,6 +118,8 @@ public class GitblitManager implements IGitblit {
protected final IFederationManager federationManager;
+ protected final IPluginManager pluginManager;
+
public GitblitManager(
IRuntimeManager runtimeManager,
INotificationManager notificationManager,
@@ -124,7 +128,8 @@ public class GitblitManager implements IGitblit {
IPublicKeyManager publicKeyManager,
IRepositoryManager repositoryManager,
IProjectManager projectManager,
- IFederationManager federationManager) {
+ IFederationManager federationManager,
+ IPluginManager pluginManager) {
this.settings = runtimeManager.getSettings();
this.runtimeManager = runtimeManager;
@@ -135,6 +140,7 @@ public class GitblitManager implements IGitblit {
this.repositoryManager = repositoryManager;
this.projectManager = projectManager;
this.federationManager = federationManager;
+ this.pluginManager = pluginManager;
}
@Override
@@ -1171,4 +1177,14 @@ public class GitblitManager implements IGitblit {
public boolean isIdle(Repository repository) {
return repositoryManager.isIdle(repository);
}
+
+ @Override
+ public <T> List<T> getExtensions(Class<T> clazz) {
+ return pluginManager.getExtensions(clazz);
+ }
+
+ @Override
+ public PluginWrapper whichPlugin(Class<?> clazz) {
+ return pluginManager.whichPlugin(clazz);
+ }
}