Czym są moduły wtyczek
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.
Deklaracja modułów
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.
- Jedynym ograniczeniem jest klucz modułu key: może występować tylko 1 moduł o podanym kluczu, klucz może składać się ze znaków alfanumerycznych kropki . i średnika (regex: [a-zA-Z0-9.-]+)
<some-module key="module1" ...> ... </some-module> <some-module key="module2" ...> ... </some-module> <!-- NIEDOZWOLONE - duplikacja klucza modułu: module1 --> <some-other-module key="module1" />
Pobieranie modułów
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.
Tworzenie modułów
Moduły możemy podzielić na 2 rodzaje, w zależności od ich implementacji:
- moduły void: moduły nie zwracają żadnych obiektów, same zajmują się np. zarejestrowaniem wtyczki podczas startu i wyrejestrowaniem podczas zatrzymania
- moduły, których wynikiem są obiekty, otrzymywane przez funckcję Module.getObject()
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
Dostępne moduły