package app.navigation.player; import app.data.entity.Player; import app.data.entity.Season; import app.data.service.PlayerService; import app.data.service.SeasonService; import app.navigation.Navigable; import app.navigation.Navigation; import com.vaadin.flow.component.select.Select; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.lang.NonNull; import org.springframework.lang.Nullable; import java.util.List; import java.util.Optional; public class PlayerNavigation extends Navigation { PlayerNavigation(@Autowired PlayerService playerService, @Autowired SeasonService seasonService) { super(playerService, seasonService); } @Override @SuppressWarnings("unchecked") protected List getChildren(@Nullable PARENT parent, @NonNull Class childClass) { if (childClass.equals(Player.class)) { return (List) getPlayerService().getAllPlayersSorted(); } if (childClass.equals(Season.class)) { return (List) getSeasonService().getAllSeasonsForPlayerSorted((Player) parent); } throw new UnsupportedOperationException(String.format("This method is not supported for childClass %s", childClass.getSimpleName())); } @Override @SuppressWarnings("unchecked") protected T getDefaultValue(Class clazz) { if(clazz.equals(Player.class)) { assert !getPlayerList().isEmpty(); return (T) getPlayerList().get(0); } if (clazz.equals(Season.class)) { assert !getSeasonList().isEmpty(); return (T) getSeasonList().get(getSeasonList().size() - 1); } throw new UnsupportedOperationException(String.format("This method is not supported for clazz %s", clazz.getSimpleName())); } public PlayerService getPlayerService() { return (PlayerService) serviceMap.get(Player.class); } public SeasonService getSeasonService() { return (SeasonService) serviceMap.get(Season.class); } @SuppressWarnings("unchecked") public List getSeasonList() { return (List) listMap.get(Season.class); } @SuppressWarnings("unchecked") public List getPlayerList() { return (List) listMap.get(Player.class); } @SuppressWarnings("unchecked") public Select getSeasonSelect() { return (Select) selectMap.get(Season.class); } @SuppressWarnings("unchecked") public Select getPlayerSelect() { return (Select) selectMap.get(Player.class); } public Optional getSelectedPlayer() { return getPlayerSelect().getOptionalValue(); } public Optional getSelectedSeason() { return getSeasonSelect().getOptionalValue(); } }