From 84f406bfd20ec2076cf7616e7f396ad480513bc4 Mon Sep 17 00:00:00 2001 From: David Ostrovsky Date: Mon, 10 Mar 2014 01:50:49 +0100 Subject: 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 --- src/main/java/com/gitblit/manager/GitblitManager.java | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) (limited to 'src/main/java/com/gitblit/manager/GitblitManager.java') 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 List getExtensions(Class clazz) { + return pluginManager.getExtensions(clazz); + } + + @Override + public PluginWrapper whichPlugin(Class clazz) { + return pluginManager.whichPlugin(clazz); + } } -- cgit v1.2.3