From efa5aae5b0f933a1b87125b93b1d13aa61ecd2cb Mon Sep 17 00:00:00 2001 From: fmittag Date: Thu, 14 Aug 2014 15:50:09 +0200 Subject: [PATCH] fix for history management for event subpages --- .../home/client/app/PlaceNavigatorImpl.java | 5 ++-- .../home/client/place/event/EventPlace.java | 26 ++++++++++++++++--- .../event/TabletAndDesktopEventView.java | 25 ++++++++++++++++++ 3 files changed, 50 insertions(+), 6 deletions(-) diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/app/PlaceNavigatorImpl.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/app/PlaceNavigatorImpl.java index a079cc46f8d..062d2af5b40 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/app/PlaceNavigatorImpl.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/app/PlaceNavigatorImpl.java @@ -7,6 +7,7 @@ import com.google.gwt.user.client.Window; import com.sap.sailing.gwt.home.client.place.aboutus.AboutUsPlace; import com.sap.sailing.gwt.home.client.place.contact.ContactPlace; import com.sap.sailing.gwt.home.client.place.event.EventPlace; +import com.sap.sailing.gwt.home.client.place.event.EventPlace.NavigationTabs; import com.sap.sailing.gwt.home.client.place.events.EventsPlace; import com.sap.sailing.gwt.home.client.place.searchresult.SearchResultPlace; import com.sap.sailing.gwt.home.client.place.solutions.SolutionsPlace; @@ -30,13 +31,13 @@ public class PlaceNavigatorImpl implements PlaceNavigator { @Override public void goToEvent(String eventUuidAsString, String baseUrl, boolean isOnRemoteServer) { - EventPlace eventPlace = new EventPlace(eventUuidAsString, null); + EventPlace eventPlace = new EventPlace(eventUuidAsString, NavigationTabs.Regattas, null); gotoPlace(baseUrl, isOnRemoteServer, eventPlace, new EventPlace.Tokenizer()); } @Override public void goToRegattaOfEvent(String eventUuidAsString, String leaderboardIdAsNameString, String baseUrl, boolean isOnRemoteServer) { - EventPlace eventPlace = new EventPlace(eventUuidAsString, leaderboardIdAsNameString); + EventPlace eventPlace = new EventPlace(eventUuidAsString, NavigationTabs.Regatta, leaderboardIdAsNameString); gotoPlace(baseUrl, isOnRemoteServer, eventPlace, new EventPlace.Tokenizer()); } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/EventPlace.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/EventPlace.java index 81c9450c1ad..3a90c9bb2e5 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/EventPlace.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/EventPlace.java @@ -6,16 +6,30 @@ import com.sap.sailing.gwt.home.client.AbstractBasePlace; public class EventPlace extends AbstractBasePlace { private final String eventUuidAsString; private final String leaderboardIdAsNameString; + private final NavigationTabs navigationTab; + + private final static String PARAM_EVENTID = "eventId"; + private final static String PARAM_LEADEROARD_NAME = "leaderboardName"; + private final static String PARAM_NAVIGATION_TAB = "navigationTab"; + + public enum NavigationTabs { Overview, Regattas, Regatta, Media, Schedule }; public EventPlace(String url) { super(url); - eventUuidAsString = getParameter("eventId"); - leaderboardIdAsNameString = getParameter("leaderboardName"); + eventUuidAsString = getParameter(PARAM_EVENTID); + leaderboardIdAsNameString = getParameter(PARAM_LEADEROARD_NAME); + String paramNavTab = getParameter(PARAM_NAVIGATION_TAB); + if(paramNavTab != null) { + navigationTab = NavigationTabs.valueOf(paramNavTab); + } else { + navigationTab = NavigationTabs.Regattas; + } } - public EventPlace(String eventUuidAsString, String leaderboardIdAsNameString) { - super("eventId", eventUuidAsString, "leaderboardName", leaderboardIdAsNameString); + public EventPlace(String eventUuidAsString, NavigationTabs navigationTab, String leaderboardIdAsNameString) { + super(PARAM_EVENTID, eventUuidAsString, PARAM_NAVIGATION_TAB, navigationTab.name(), PARAM_LEADEROARD_NAME, leaderboardIdAsNameString); this.eventUuidAsString = eventUuidAsString; + this.navigationTab = navigationTab; this.leaderboardIdAsNameString = leaderboardIdAsNameString; } @@ -27,6 +41,10 @@ public class EventPlace extends AbstractBasePlace { return leaderboardIdAsNameString; } + public NavigationTabs getNavigationTab() { + return navigationTab; + } + public static class Tokenizer implements PlaceTokenizer { @Override public String getToken(EventPlace place) { diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/TabletAndDesktopEventView.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/TabletAndDesktopEventView.java index be71efadf7c..fcac38248e6 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/TabletAndDesktopEventView.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/TabletAndDesktopEventView.java @@ -6,14 +6,18 @@ import java.util.List; import java.util.Map; import com.google.gwt.core.client.GWT; +import com.google.gwt.place.shared.Place; +import com.google.gwt.place.shared.PlaceTokenizer; import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; +import com.google.gwt.user.client.History; import com.google.gwt.user.client.Window; import com.google.gwt.user.client.ui.Composite; import com.google.gwt.user.client.ui.Widget; import com.sap.sailing.domain.common.LeaderboardNameConstants; import com.sap.sailing.domain.common.RegattaAndRaceIdentifier; import com.sap.sailing.domain.common.dto.RaceDTO; +import com.sap.sailing.gwt.home.client.place.event.EventPlace.NavigationTabs; import com.sap.sailing.gwt.home.client.place.event.header.EventHeader; import com.sap.sailing.gwt.home.client.place.event.media.EventMedia; import com.sap.sailing.gwt.home.client.place.event.overview.EventOverview; @@ -99,12 +103,18 @@ public class TabletAndDesktopEventView extends Composite implements EventView, E public void goToOverview() { setVisibleEventElement(eventOverview); eventHeader.setDataNavigationType("normal"); + + EventPlace place = new EventPlace(event.id.toString(), NavigationTabs.Overview, null); + pushPlaceToHistoryStack(place, new EventPlace.Tokenizer()); } @Override public void goToRegattas() { setVisibleEventElement(eventRegattaList); eventHeader.setDataNavigationType("normal"); + + EventPlace place = new EventPlace(event.id.toString(), NavigationTabs.Regattas, null); + pushPlaceToHistoryStack(place, new EventPlace.Tokenizer()); } @Override @@ -112,18 +122,27 @@ public class TabletAndDesktopEventView extends Composite implements EventView, E eventRegattaRaces.setRaces(leaderboardGroup, leaderboard, raceGroup); eventHeader.setDataNavigationType("compact"); setVisibleEventElement(eventRegattaRaces); + + EventPlace place = new EventPlace(event.id.toString(), NavigationTabs.Regatta, leaderboard.name); + pushPlaceToHistoryStack(place, new EventPlace.Tokenizer()); } @Override public void goToSchedule() { setVisibleEventElement(eventSchedule); eventHeader.setDataNavigationType("normal"); + + EventPlace place = new EventPlace(event.id.toString(), NavigationTabs.Schedule, null); + pushPlaceToHistoryStack(place, new EventPlace.Tokenizer()); } @Override public void goToMedia() { setVisibleEventElement(eventMedia); eventHeader.setDataNavigationType("normal"); + + EventPlace place = new EventPlace(event.id.toString(), NavigationTabs.Media, null); + pushPlaceToHistoryStack(place, new EventPlace.Tokenizer()); } @Override @@ -205,4 +224,10 @@ public class TabletAndDesktopEventView extends Composite implements EventView, E } return result; } + + private void pushPlaceToHistoryStack(T destinationPlace, PlaceTokenizer tokenizer) { + String placeHistoryToken = destinationPlace.getClass().getSimpleName() + ":" + tokenizer.getToken(destinationPlace); + History.newItem(placeHistoryToken, false); + } + }