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.*
@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.
@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.
