Skip to end of metadata
Go to start of metadata

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.-]+)
Definicja modułu
<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:

suncode-plugin.xml
<workflowversion key="checkversion" version="3.1.0"/>

Zakładamy że moduł został już zarejestrowany z systemu lub z wtyczki

Kod modułu:

VersionModule
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

 

  • No labels