Skip to end of metadata
Go to start of metadata

Jeżeli w systemie jest zdefiniowany hook, to aby się do niego "wpiąć" należy go zaimplementować. W tym celu należy stworzyć klasę, która posiada adnotację @Hook oraz rozszerza abstrakcyjną klasę stworzoną dla danej sekcji hook'ów.

Należy unikać implementowania interfejsu dla sekcji hook'ów, a w zamian tego rozszerzać klasę abstrakcyjną dla tej sekcji. Pozwoli to uniknąć w przyszłości błędów kompilacji w momencie, gdy do interfejsu zostanie dodany nowy hook. Dodatkowo dzięki temu nie ma przymusu implementacji wszystkich hook'ów należących do danej sekcji.

 Klasa z implementacją hook'ów musi znajdować się w pakiecie com.suncode.pwfl.* lub com.suncode.client.* lub com.client.pwfl.*

Przykład
@Hook
public class SubstitutionHookImpl
    extends SubstitutionHookAdapter
{
	@Override
	public boolean confirmCreateSubstitution( String userName, Substitution substitution )
	{
		//implementacja metody
	}

    @Override
    public int getOrder()
    {
        return 0;
    }
}

W powyższym przykładzie został zaimplementowany tylko hook confirmCreateSubstitution na podstawie przykładu definicji hooka w Definiowanie sekcji hook'ów. Dodatkowo została ustawiona kolejność wykonywania hook'a poprzez nadpisanie metody getOrder(). Jeżeli zaimplementowany byłby ten sam hook z inną logiką i order miałby ustawiony na wyższą wartość, np.: 1, to wtedy zawsze ten hook będzie wykonywany po hooku z orderem 0.

Przykład: Hook z order 1
@Hook
public class SubstitutionHookSecond
    extends SubstitutionHookAdapter
{
	@Override
	public boolean confirmCreateSubstitution( String userName, Substitution substitution )
	{
		//implementacja metody
	}

    @Override
    public int getOrder()
    {
        return 1;
    }
}

Jeżeli dwa lub więcej hook'ów ma tą samą wartość Order, to wykonywanie tych hook'ów odbywa się w sposób losowy.

Nadpisywanie metody getOrder() nie jest obowiązkowe. Jeżeli nie zostanie to zrobione to domyślnie hook będzie ostatni w kolejce. Jeżeli w żadnym z hook'ów danego typu nie ustawimy wartości Order, to będą one wszystkie wykonywane w losowej kolejności.

  • No labels