-
Notifications
You must be signed in to change notification settings - Fork 133
Plugin Development
In order to integrate additional features over Dicoogle, you may create your own PluginSet
. A PluginSet is a composition of plugins developed with the intent of supporting a given functionality. There are 5 particular types of plugins:
- Storage plugins are responsible for storing and retrieving data. A basic implementation would keep files in the local file system, but Dicoogle can be extended to support remote storage with plugins of this type.
- Indexer plugins implement index generation. A fully deployed instance of Dicoogle should have at least one DICOM indexer.
- Query plugins provide a means of querying the indexed data. Often a query provider is coupled with a particular indexer, and are bundled together in the plugin set.
- Jetty Service plugins support the attachment of Eclipse jetty servlets, so as to host new web services in Dicoogle.
- Web Service plugins contain a Restlet server resource that can be attached to Dicoogle, also for hosting web services.
- Web User Interface Plugins, unlike other kinds of plugins, are developed in JavaScript and provide new UI components that are automatically loaded into Dicoogle's web application. For further details, see the Dicoogle Web Core documentation.
Graphical plugins, which were based on Java Swing components, are currently obsolete. For extending the user interface, please develop web plugins instead.
Here is a list of tasks frequently performed when developing plugins for Dicoogle.
Interactions with the core platform are made via the PlatformInterface
. This is the top-level API of Dicoogle that is exposed to other plugins.
In order to obtain this platform interface, plugins (or the plugin set) need to implement the interface PlatformCommunicatorInterface
. The method setPlatformProxy
declared therein behaves like a callback, which will be called by the platform shortly after the plugin is loaded. Usually, plugins can simply pass the argument into an attribute for future use:
public class MyQueryPlugin implements QueryInterface, PlatformCommunicatorInterface
private DicooglePlatformInterface platform;
// ... other content
void setPlatformProxy(DicooglePlatformInterface platform) {
this.platform = platform;
}