Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

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.-]+)
Code Block
languagehtml/xml
titleDefinicja 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:

Code Block
{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:

Tip

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:

Code Block
languagehtml/xml
titlesuncode-plugin.xml
<workflowversion key="checkversion" version="3.1.0"/>
Info

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

Kod modułu:

Code Block
languagejava
titleVersionModule
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" );
        }
    }
}
Tip

Tworzenie własnych modułów i wykorzystanie klasy ModuleSupport wymaga zależności do projektu plugin-framework-core

Dostępne moduły