mirror of
https://github.com/gitbucket/gitbucket.git
synced 2025-11-03 12:05:59 +01:00
Provides declarative style plug-in definition.
This commit is contained in:
@@ -1,7 +1,9 @@
|
|||||||
package gitbucket.core.plugin
|
package gitbucket.core.plugin
|
||||||
|
|
||||||
import javax.servlet.ServletContext
|
import javax.servlet.ServletContext
|
||||||
|
import gitbucket.core.controller.ControllerBase
|
||||||
import gitbucket.core.service.SystemSettingsService.SystemSettings
|
import gitbucket.core.service.SystemSettingsService.SystemSettings
|
||||||
|
import gitbucket.core.util.ControlUtil._
|
||||||
import gitbucket.core.util.Version
|
import gitbucket.core.util.Version
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -15,16 +17,51 @@ trait Plugin {
|
|||||||
val description: String
|
val description: String
|
||||||
val versions: Seq[Version]
|
val versions: Seq[Version]
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Override to declare this plug-in provides images.
|
||||||
|
*/
|
||||||
|
val images: Seq[(String, Array[Byte])] = Nil
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Override to declare this plug-in provides controllers.
|
||||||
|
*/
|
||||||
|
val controllers: Seq[(String, ControllerBase)] = Nil
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Override to declare this plug-in provides JavaScript.
|
||||||
|
*/
|
||||||
|
val javaScripts: Seq[(String, String)] = Nil
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This method is invoked in initialization of plugin system.
|
* This method is invoked in initialization of plugin system.
|
||||||
* Register plugin functionality to PluginRegistry.
|
* Register plugin functionality to PluginRegistry.
|
||||||
*/
|
*/
|
||||||
def initialize(registry: PluginRegistry, context: ServletContext, settings: SystemSettings): Unit
|
def initialize(registry: PluginRegistry, context: ServletContext, settings: SystemSettings): Unit = {
|
||||||
|
images.foreach { case (id, in) =>
|
||||||
|
registry.addImage(id, in)
|
||||||
|
}
|
||||||
|
controllers.foreach { case (path, controller) =>
|
||||||
|
registry.addController(path, controller)
|
||||||
|
}
|
||||||
|
javaScripts.foreach { case (path, script) =>
|
||||||
|
registry.addJavaScript(path, script)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This method is invoked in shutdown of plugin system.
|
* This method is invoked in shutdown of plugin system.
|
||||||
* If the plugin has any resources, release them in this method.
|
* If the plugin has any resources, release them in this method.
|
||||||
*/
|
*/
|
||||||
def shutdown(registry: PluginRegistry, context: ServletContext, settings: SystemSettings): Unit
|
def shutdown(registry: PluginRegistry, context: ServletContext, settings: SystemSettings): Unit = {}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Helper method to get a resource from classpath.
|
||||||
|
*/
|
||||||
|
protected def fromClassPath(path: String): Array[Byte] =
|
||||||
|
using(getClass.getClassLoader.getResourceAsStream(path)){ in =>
|
||||||
|
val bytes = new Array[Byte](in.available)
|
||||||
|
in.read(bytes)
|
||||||
|
bytes
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -31,22 +31,32 @@ class PluginRegistry {
|
|||||||
|
|
||||||
def getPlugins(): List[PluginInfo] = plugins.toList
|
def getPlugins(): List[PluginInfo] = plugins.toList
|
||||||
|
|
||||||
|
def addImage(id: String, bytes: Array[Byte]): Unit = {
|
||||||
|
val encoded = StringUtils.newStringUtf8(Base64.encodeBase64(bytes, false))
|
||||||
|
images += ((id, encoded))
|
||||||
|
}
|
||||||
|
|
||||||
|
@deprecated
|
||||||
def addImage(id: String, in: InputStream): Unit = {
|
def addImage(id: String, in: InputStream): Unit = {
|
||||||
val bytes = using(in){ in =>
|
val bytes = using(in){ in =>
|
||||||
val bytes = new Array[Byte](in.available)
|
val bytes = new Array[Byte](in.available)
|
||||||
in.read(bytes)
|
in.read(bytes)
|
||||||
bytes
|
bytes
|
||||||
}
|
}
|
||||||
val encoded = StringUtils.newStringUtf8(Base64.encodeBase64(bytes, false))
|
addImage(id, bytes)
|
||||||
images += ((id, encoded))
|
|
||||||
}
|
}
|
||||||
|
|
||||||
def getImage(id: String): String = images(id)
|
def getImage(id: String): String = images(id)
|
||||||
|
|
||||||
def addController(controller: ControllerBase, path: String): Unit = {
|
def addController(path: String, controller: ControllerBase): Unit = {
|
||||||
controllers += ((controller, path))
|
controllers += ((controller, path))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@deprecated
|
||||||
|
def addController(controller: ControllerBase, path: String): Unit = {
|
||||||
|
addController(path, controller)
|
||||||
|
}
|
||||||
|
|
||||||
def getControllers(): List[(ControllerBase, String)] = controllers.toList
|
def getControllers(): List[(ControllerBase, String)] = controllers.toList
|
||||||
|
|
||||||
def addJavaScript(path: String, script: String): Unit = {
|
def addJavaScript(path: String, script: String): Unit = {
|
||||||
|
|||||||
Reference in New Issue
Block a user