Versions Compared

Key

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

...

Code Block
languagejava
titleExampleFavouriteHandler.java
linenumberstrue
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 = new ExampleFavouriteRendererplugin.getContext().getBean(ExampleFavouriteRenderer.class);
		renderer.setFavourite(favourite);
		return renderer;
	}
}

...

24: zapisujemy dowolne dodatkowe informacje w parametrze, który później może służyć np. do budowania linków

32-34: tworzymy obiekt, który narysuje podany element ulubionych.pobieramy obiekt renderera z kontekstu (komponent ma scope=prototype)

Tip

Klasa handlera zdefiniowana w module <favourites> zostanie stworzona z wykorzystaniem kontekstu wtyczki, dzięki czemu możliwe jest standardowe korzystanie z adnotacji @Component.

...

Tip

Istnieje obiekt pomocniczy który dostarcza domyślne zachowanie rysowania pozwalając na łatwe przeciążenie.

Note

Obiekt FavouritesRendererSupportKlasa ta musi być zawsze tworzona z wykorzystaniem kontekstu wtyczki jako prototype ponieważ nie jest ThreadSafe - zawsze musimy stworzyć nową instancję tej klasy zwracając ją w metodzie getRenderer(FavouriteElement favourite)ona ThreadSafe.

 

Implementacja takiego obiektu może wyglądać tak:

Code Block
languagejava
titleExampleFavouriteRenderer.java
linenumberstrue
@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:

10: 1-2: komponent prototype

12: odczytujemy parametr tego elementu

2123-2426: możemy podejmować decyzje na podstawie aktualnego elementu

Wyświetlana lista ulubionych

Tak skonfigurowany zestaw ulubionych:

Image Added

Tak wygląda  w gadżecie pulpitu:

Image Added

Deklaracja modułu <favourites>

...