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.