Wtyczka favourites przychodzi z wbudowanym zbiorem elementów ulubionych. Elementy ulubione mogą być przedstawiane w postaci drzewa, aby ułatwić użytkownikowi wyszukiwanie interesujących go elementów.
Predefiniowane elementy to:
- Zadania - prowadzi do skrzynki zadań użytkownika
- Procesy- prowadzi do listy dostępnych procesów
- Proces - umożliwia stworzenie poszczególnych procesów
- Archiwum- otwiera elektroniczne archiwum systemu
- Klasy dokumentów - prowadzi do zakładki klas dokumentów
- Zestawy dokumentów - prowadzi do zakładki zestawów dokumentów
- Widoki - otwiera zakładkę widoków użytkownika
- Widok - wyświetla wyniki wybranego widoku użytkownika
Każda wtyczka może sama zdefiniować elementy ulubione, które będą dostępne dla użytkownika - dostarcza ona opis elementów oraz reguły ich wyświetlania w gadżecie lub stronie startowej.
Moduł <favourites>
Moduł favourites umożliwia wtyczką rejestrację własnych obiektów typu , które odpowiedzialne są za dostarczanie:
- definicji elementów (także w postaci drzewa) - elementy, które wyświetlane są użytkownikowi podczas budowy zestawów
- obiektów renderujących - przygotowujących dane do wyświetlenia
Zależności
Zależność do wtyczki favourites powinna być opcjonalna (wtyczka powinna działać, nawet jeżeli favourites nie są zainstalowane). W tym celu zależność należy zdefiniować z <optional>true</optional>:
<dependency> <groupId>com.suncode.plugin</groupId> <artifactId>favourites</artifactId> <version>1.0.0-SNAPSHOT</version> <optional>true</optional> <scope>provided</scope> </dependency>
Implementacja handler'a
W pierwszej kolejności należy stworzyć klasę implementującą interfejs :
public class ExampleFavouriteHandler implements FavouriteHandler { @Override public boolean supports(String type) { return "test".equals(type) || "test-sub".equals(type); } @Override public Collection<Definition> getDefinitions() { List<Definition> definitions = new ArrayList<Definition>(); Definition definition = new Definition("test"); definition.setName("TEST - Nazwa"); definition.setDescription("TEST - Opis"); definition.setTypeDescription("TEST - Typ"); definition.setCountable(false); definitions.add(definition); NestedDefinition nestedDefinition = new NestedDefinition(definition.getType(), "test-sub"); nestedDefinition.setName("TEST-SUB - Nazwa"); nestedDefinition.setDescription("TEST-SUB - Opis"); nestedDefinition.setTypeDescription("TEST-SUB - Typ"); nestedDefinition.setCountable(true); nestedDefinition.setParameter(RandomStringUtils.randomAlphabetic(5)); definitions.add(nestedDefinition); return definitions; } @Override public FavouritesRenderer getRenderer(FavouriteElement favourite) { ExampleFavouriteRenderer renderer = plugin.getContext().getBean(ExampleFavouriteRenderer.class); renderer.setFavourite(favourite); return renderer; } }
Komentarze do pliku:
4-5: informujemy jakie typy definicji wspieramy - jesteśmy ich autorami i potrafimy je narysować
12-17: element ulubiony typu test
19-25: element ulubiony typu test-sub - jest on zagnieżdżony w elemencie test, co spowoduje stworzenie struktury drzewa z oknie wyboru
24: zapisujemy dowolne dodatkowe informacje w parametrze, który później może służyć np. do budowania linków
32-34: pobieramy obiekt renderera z kontekstu (komponent ma scope=prototype)
Klasa handlera zdefiniowana w module <favourites> zostanie stworzona z wykorzystaniem kontekstu wtyczki, dzięki czemu możliwe jest standardowe korzystanie z adnotacji @Component.
Powyższy kod definicji będzie skutkował dodaniem 2 nowych elementów ulubionych do wyboru w postaci drzewa:
Implementacja obiektu renderującego
Obiekt odpowiedzialny za narysowanie elementów w gadżecie to .
Istnieje obiekt pomocniczy który dostarcza domyślne zachowanie rysowania pozwalając na łatwe przeciążenie.
Klasa ta musi być zawsze tworzona z wykorzystaniem kontekstu wtyczki jako prototype ponieważ nie jest ona ThreadSafe.
Implementacja takiego obiektu może wyglądać tak:
@Component @Scope(value="prototype") public class ExampleFavouriteRenderer extends FavouritesRendererSupport { @Override public boolean shouldRender() { return true; } @Override public String renderDescription() { return "Parametr:" + getFavourite().getParameter(); } @Override public String renderCount() { return RandomStringUtils.randomNumeric(3); } @Override public String renderAction() { FavouriteElement element = getFavourite(); if("test".equals(element.getType())){ return ""; } return getAnchor("Logout.do", "Logout"); } }
Komentarze do pliku:
1-2: komponent prototype
12: odczytujemy parametr tego elementu
23-26: możemy podejmować decyzje na podstawie aktualnego elementu
Deklaracja modułu <favourites>
Ostatnim krokiem jest deklaracja modułu <favoruites> w pliku suncode-plugin.xml:
<favourites key="favourite-entry" handler="com.suncode.plugin.example.ExampleFavouriteHandler"/>
Wyświetlana lista ulubionych
Tak skonfigurowany zestaw ulubionych:
Tak wygląda w gadżecie pulpitu:
Add Comment