diff options
author | David Ostrovsky <david@ostrovsky.org> | 2014-03-10 01:50:49 +0100 |
---|---|---|
committer | James Moger <james.moger@gitblit.com> | 2014-04-10 18:58:09 -0400 |
commit | 84f406bfd20ec2076cf7616e7f396ad480513bc4 (patch) | |
tree | 661045f193871d676c1c06b996b831469cfc067c /src/main/java/com/gitblit/manager/PluginManager.java | |
parent | 261ddf0fcf9a55fbb5b4e7c6c2cdb4c2f8c860fe (diff) | |
download | gitblit-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/PluginManager.java')
-rw-r--r-- | src/main/java/com/gitblit/manager/PluginManager.java | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/src/main/java/com/gitblit/manager/PluginManager.java b/src/main/java/com/gitblit/manager/PluginManager.java new file mode 100644 index 00000000..5eb00e92 --- /dev/null +++ b/src/main/java/com/gitblit/manager/PluginManager.java @@ -0,0 +1,56 @@ +/* + * Copyright 2014 gitblit.com. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.gitblit.manager; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import ro.fortsoft.pf4j.DefaultPluginManager; + +import com.gitblit.Keys; + +/** + * The plugin manager maintains the lifecycle of plugins. It is exposed as + * Dagger bean. The extension consumers supposed to retrieve plugin manager + * from the Dagger DI and retrieve extensions provided by active plugins. + * + * @author David Ostrovsky + * + */ +public class PluginManager extends DefaultPluginManager implements + IPluginManager { + + private final Logger logger = LoggerFactory.getLogger(getClass()); + + public PluginManager(IRuntimeManager runtimeManager) { + super(runtimeManager.getFileOrFolder(Keys.plugins.folder, + "${baseFolder}/plugins")); + } + + @Override + public PluginManager start() { + logger.info("Plugin manager started"); + loadPlugins(); + startPlugins(); + return this; + } + + @Override + public PluginManager stop() { + stopPlugins(); + return null; + } +} |