Build Plug-ins
How to build and install a plug-in
This page describes how to build new Weasis plug-ins and how they can be incorporated into the distributions, see also this page for the IDE configuration.
List of plug-ins types
- Media viewer or editor (main central panel that implements
ViewerPlugin
orImageViewerPlugin
and the factory implementsSeriesViewerFactory
) - Toolbar associated with a viewer (implements
Toolbar
) - Tool associated with a viewer (right panel that implements
DockableTool
) - Data Explorer (data model implements
DataExplorerModel
and data view implementsDataExplorerView
, and the factory implementsDataExplorerViewFactory
) - Import data into an explorer (ex.
ImportDicom
and the factory implementsDicomImportFactory
) - Export data into an explorer (ex.
ExportDicom
and the factory implementsDicomExportFactory
) - DICOM editor or viewer for special modalities (
DicomSpecialElementFactory
andSeriesViewerFactory
), see weasis-dicom-sr - Media codec (implements
Codec
) - Preferences (implements
PreferencesPageFactory
) - UI aggregator. This is the application main user interface bundle. The maven artifact of this bundle must be defined in config.properties (ex. weasis.main.ui=weasis-base-ui)
See the Weasis Architecture to understand the plug-in hierarchy.
Build plug-ins from Maven archetype
- From the folder Weasis/archetype execute: mvn install
- Generate a sample project by executing the following command: mvn archetype:generate -DarchetypeCatalog=local
- Select the archetype:
- weasis-plugin-base-viewer-archetype (example of a toolbar and a tool for the non DICOM viewer)
- weasis-plugin-dicom-viewer-archetype (example of a toolbar and a tool for the DICOM viewer)
From Eclipse: File > New > Maven Project and Search for weasis archetype in catalog filter.
From Intellij: File > New Project > Maven, check “Create from archetype” and select a Weasis archetype
In the pom.xml of the new plug-in, the tag <relativePath> must be adapted to your relative path of Weasis sources.
The default value is <relativePath>../Weasis/weasis-parent/pom.xml</relativePath>
Install plug-ins
For the installed distribution
The file “app/conf/ext-config.properties” must be adapted and plug-ins must be placed in the directory “app/plugins”.
Example with weasis-isowriter:
-
Add in app/conf/ext-config.properties:
felix.auto.start.85=${weasis.codebase.url}/plugins/weasis-isowriter-2.6.1.jar
TipIf you want to use another directory for a plugin on your computer, you should use one of the following properties:
On Windows:felix.auto.start.85=file:///C:/path/to/weasis-isowriter-2.6.1.jar
On linux:felix.auto.start.85=file:///home/Username/path/to/weasis-isowriter-2.6.1.jar
On macOS:felix.auto.start.85=file:///Users/Username/path/to/weasis-isowriter-2.6.1.jar
TipFor not modifying the current ext-config.properties create a new file and add to the launcher the following VM argument:
-Dfelix.extended.config.properties="file:///your_plugin_path/myplugin-config.properties"
-
Place the file “weasis-isowriter-2.6.1.jar” in the directory “/weasis/plugins”
For the WEB distribution
Build a new war file containing the plug-ins and the ext-config.properties file.
-
Build “weasis-ext.war” with the following structure:
weasis-ext/ ├── conf/ │ ├── ext-config.properties ├── WEB-INF/ │ ├── web.xml ├── plugin1.jar └── plugin2.jar
-
In /weasis-ext/conf/ext-config.properties, add the plug-ins references:
felix.auto.start.85= \ ${weasis.codebase.ext.url}/plugin1.jar \ ${weasis.codebase.ext.url}/plugin2.jar
NoteUsing
${weasis.codebase.ext.url}
allows you to keep the base URL abstract, so moving the package to another server won’t be a problem. Otherwise absolute URLs must be used. The default value of${weasis.codebase.ext.url}
is ${weasis.codebase.url}-ext. -
weasis-ext is the default web context when launching Weasis, using another web context requires modifying the property weasis.ext.url, it can be done by:
weasis.ext.url=${server.base.url}/weasis-newext
-
Changing the property in weasis-pacs-connector configuration.
NoteIt is also possible to add the code base for plugins (cdb-ext) directly in the URL:
http://localhost:8080/weasis-pacs-connector/viewer?patientID=9702672&cdb-ext=http://localhost:8080/plugins/weasis-ext
For debugging a specific configuration: add to the launcher the following VM argument:
-Dfelix.extended.config.properties="http://server:port/weasis-ext/conf/ext-config.properties
An example that makes a package of weasis-isowriter plugin:
- Build “weasis-ext.war”:
weasis-ext/ ├── conf/ │ ├── ext-config.properties ├── WEB-INF/ │ ├── web.xml └── weasis-isowriter-2.0.3.jar
Build OSGi services
All the plug-in type described in the list above are OSGi services that are registered and aggregated in the GUI. Building the plug-in from the Maven archetype will configure the OSGi service automatically. For adding new OSGi services, here is the procedure:
-
Create a class implementing one of the plug-in types and add at least the annotations @Component and @Service, for instance:
@Component(immediate = false) @Service public class SamplePrefFactory implements PreferencesPageFactory { ... }
TipFor more information about annotations see the Apache Felix SCR Annotations.
-
Add in pom.xml of the plug-in the maven-scr-plugin (to generate XML file from the Java annotations) and the property for loading any XML file in maven-bundle-plugin:
<build> <plugins> <plugin> <groupId>org.apache.felix</groupId> <artifactId>maven-scr-plugin</artifactId> </plugin> <plugin> <groupId>org.apache.felix</groupId> <artifactId>maven-bundle-plugin</artifactId> </plugin> ...