Moduły wtyczek to komponenty, które umożliwiają w deklaratywny sposób (poprzez wpisy w suncode-plugin.xml) dostarczyć pewną funkcjonalność wtyczce lub pobrać o niej informacje.
Twórca wtyczki nie musi martwić się o zwolnienie wykorzystywanych zasobów co byłoby konieczne, jeżeli wtyczka chciałaby uzyskać pewną funkcjonalność samodzielnie. Moduły mogą być dostarczone przez system PlusWorkflow oraz przez inne wtyczki.
Moduły są w pełni dynamiczne i w taki sposób powinny być tworzone.
Wszystkie wykorzystywane moduły deklarowane są w deskryptorze wtyczki. Deklaracja modułu to nic innego, jak dodanie elementu xml o nazwie która jednoznacznie identyfikuje moduł oraz dostarczenia innych wymaganych atrybutów/elementów.
<some-module key="module1" ...> ... </some-module> <some-module key="module2" ...> ... </some-module> <!-- NIEDOZWOLONE - duplikacja klucza modułu: module1 --> <some-other-module key="module1" /> |
Każdy moduł ma uniwersalny klucz modułu. Składa się on z klucz wtyczki oraz klucz modułu:
{pluginkey}:{modulekey} np. com.suncode.plugin-tutorial:module1 |
Interfejs ModuleAccessor zawiera wszystkie publiczne metody akcji na modułach. Możemy go pobrać z wtyczki jak i z samego systemu:
Obiekt PluginFramework implementuje ten interfejs, dlatego można ich używać tak samo. |
Moduły możemy podzielić na 2 rodzaje, w zależności od ich implementacji:
Każdy moduł musi implementować interfejs Module oraz zadeklarować, jakie obiekty tworzy ten konkretny moduł.
Stworzymy teraz moduł, który wymusi odpowiednią wersję systemu PlusWorkflow. Deklaracja modułu będzie wyglądać następująco:
<workflowversion key="checkversion" version="3.1.0"/> |
Zakładamy że moduł został już zarejestrowany z systemu lub z wtyczki |
Kod modułu:
package com.suncode.plugin.tutorial; import com.suncode.plugin.framework.PluginsException; import com.suncode.plugin.framework.support.ModuleHelper; import com.suncode.plugin.framework.support.module.ModuleSupport; import com.suncode.pwfl.SystemVersion; public class VersionModule extends ModuleSupport<Void> { private String targetVersion; @Override protected void initModule() throws PluginsException { // odczyt atrybutu modułu targetVersion = ModuleHelper.getAttribute( "version", getDefinition() ); } @Override public void enable() throws PluginsException { // niekompatybilna wersja -> nie możemy uruchomić wtyczki if ( !targetVersion.equals( SystemVersion.getVersion() ) ) { throw new PluginsException( "Niekompatybilna wersja systemu PlusWorkflow" ); } } } |
Tworzenie własnych modułów i wykorzystanie klasy ModuleSupport wymaga zależności do projektu plugin-framework-core |