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.

<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:

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