diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/i18n/TextMessages.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/i18n/TextMessages.java index 8242422626f..b72e31dce95 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/i18n/TextMessages.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/i18n/TextMessages.java @@ -26,6 +26,7 @@ public interface TextMessages extends Messages { String pleaseTryAgain(); String reloadPage(); String errorMessageLoadingData(); + String raceNotScheduled(); String countdownDays(); String countdownHours(); diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/i18n/TextMessages.properties b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/i18n/TextMessages.properties index 9fd78257925..c6ec21ddeb3 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/i18n/TextMessages.properties +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/i18n/TextMessages.properties @@ -18,6 +18,7 @@ pleaseEnterASearchTerm=Please enter a search term. pleaseTryAgain=Please try again... reloadPage=Reload page errorMessageLoadingData=An error occured while loading the data for this page. +raceNotScheduled=Not scheduled. countdownDays=Days countdownHours=Hrs diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/i18n/TextMessages_de.properties b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/i18n/TextMessages_de.properties index d1cc7a31d48..22690949f0c 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/i18n/TextMessages_de.properties +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/i18n/TextMessages_de.properties @@ -18,6 +18,7 @@ pleaseEnterASearchTerm=Bitte gebe einen Suchbegriff ein. pleaseTryAgain=Bitte versuchen sie es erneut... reloadPage=Seite neu laden errorMessageLoadingData=Beim Laden der Daten für diese Seite ist ein Fehler aufgetreten. +raceNotScheduled=Keine Startzeit bekannt countdownDays=Tage countdownHours=Std. diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/EventActivity.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/EventActivity.java index a10f2bab13a..f9e1fdbf044 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/EventActivity.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/EventActivity.java @@ -32,22 +32,19 @@ public class EventActivity extends AbstractActivity { private final RegattaRaceStatesSettings raceStatesSettings; private EventView view; + private EventDTO event; public EventActivity(EventPlace place, EventClientFactory clientFactory) { this.clientFactory = clientFactory; this.eventPlace = place; + this.view = null; + this.event = null; + timerForClientServerOffset = new Timer(PlayModes.Replay); serverUpdateTimer = new Timer(PlayModes.Live, serverUpdateRateInMs); raceStatesSettings = new RegattaRaceStatesSettings(); - serverUpdateTimer.addTimeListener(new TimeListener() { - - @Override - public void timeChanged(Date newTime, Date oldTime) { - // loadAndUpdateEventRaceStatesLog(); - } - }); } @Override @@ -59,32 +56,7 @@ public class EventActivity extends AbstractActivity { clientFactory.getSailingService().getEventById(eventUUID, true, new AsyncCallback() { @Override public void onSuccess(final EventDTO event) { - if(event.getLeaderboardGroups().size() > 0) { - clientFactory.getSailingService().getRegattaStructureOfEvent(event.id, new AsyncCallback>() { - @Override - public void onSuccess(List raceGroups) { - if(raceGroups.size() > 0) { - for(LeaderboardGroupDTO leaderboardGroupDTO: event.getLeaderboardGroups()) { - final long clientTimeWhenResponseWasReceived = System.currentTimeMillis(); - if (leaderboardGroupDTO.getAverageDelayToLiveInMillis() != null) { - timerForClientServerOffset.setLivePlayDelayInMillis(leaderboardGroupDTO.getAverageDelayToLiveInMillis()); - } - timerForClientServerOffset.adjustClientServerOffset(clientTimeWhenRequestWasSent, leaderboardGroupDTO.getCurrentServerTime(), clientTimeWhenResponseWasReceived); - } - createEventView(event, raceGroups, panel); - } else { - createEventWithoutRegattasView(event, panel); - } - } - - @Override - public void onFailure(Throwable caught) { - createErrorView("Error while loading the regatta structure with service getRegattaStructureOfEvent()", caught, panel); - } - }); - } else { - createEventWithoutRegattasView(event, panel); - } + loadRegattaStructure(panel, clientTimeWhenRequestWasSent, event); } @Override @@ -94,6 +66,47 @@ public class EventActivity extends AbstractActivity { }); } + private void loadRegattaStructure(final AcceptsOneWidget panel, final long clientTimeWhenRequestWasSent, final EventDTO event) { + this.event = event; + if(event.getLeaderboardGroups().size() > 0) { + clientFactory.getSailingService().getRegattaStructureOfEvent(event.id, new AsyncCallback>() { + @Override + public void onSuccess(List raceGroups) { + if(raceGroups.size() > 0) { + for(LeaderboardGroupDTO leaderboardGroupDTO: event.getLeaderboardGroups()) { + final long clientTimeWhenResponseWasReceived = System.currentTimeMillis(); + if (leaderboardGroupDTO.getAverageDelayToLiveInMillis() != null) { + timerForClientServerOffset.setLivePlayDelayInMillis(leaderboardGroupDTO.getAverageDelayToLiveInMillis()); + } + timerForClientServerOffset.adjustClientServerOffset(clientTimeWhenRequestWasSent, leaderboardGroupDTO.getCurrentServerTime(), clientTimeWhenResponseWasReceived); + } + createEventView(event, raceGroups, panel); + + if(event.isRunning()) { + // create update time for race states only for running events + serverUpdateTimer.addTimeListener(new TimeListener() { + @Override + public void timeChanged(Date newTime, Date oldTime) { + loadAndUpdateEventRaceStatesLog(); + } + }); + } + + } else { + createEventWithoutRegattasView(event, panel); + } + } + + @Override + public void onFailure(Throwable caught) { + createErrorView("Error while loading the regatta structure with service getRegattaStructureOfEvent()", caught, panel); + } + }); + } else { + createEventWithoutRegattasView(event, panel); + } + } + private void createErrorView(String errorMessage, Throwable errorReason, AcceptsOneWidget panel) { ErrorView view = clientFactory.createErrorView(errorMessage, errorReason); panel.setWidget(view.asWidget()); @@ -111,31 +124,32 @@ public class EventActivity extends AbstractActivity { } protected void loadAndUpdateEventRaceStatesLog() { - final long clientTimeWhenRequestWasSent = System.currentTimeMillis(); - UUID eventUUID = UUID.fromString(eventPlace.getEventUuidAsString()); + if(view != null && event != null) { + final long clientTimeWhenRequestWasSent = System.currentTimeMillis(); - clientFactory.getSailingService().getRaceStateEntriesForRaceGroup(eventUUID, raceStatesSettings.getVisibleCourseAreas(), - raceStatesSettings.getVisibleRegattas(), raceStatesSettings.isShowOnlyCurrentlyRunningRaces(), raceStatesSettings.isShowOnlyRacesOfSameDay(), - new MarkedAsyncCallback>( - new AsyncCallback>() { - @Override - public void onFailure(Throwable cause) { - Window.setStatus("Error while loading the race states with service getRaceStateEntriesForRaceGroup()"); - } - - @Override - public void onSuccess(List result) { - final long clientTimeWhenResponseWasReceived = System.currentTimeMillis(); - Date serverTimeDuringRequest = null; - for (RegattaOverviewEntryDTO entryDTO : result) { - if (entryDTO.currentServerTime != null) { - serverTimeDuringRequest = entryDTO.currentServerTime; - } + clientFactory.getSailingService().getRaceStateEntriesForRaceGroup(event.id, raceStatesSettings.getVisibleCourseAreas(), + raceStatesSettings.getVisibleRegattas(), raceStatesSettings.isShowOnlyCurrentlyRunningRaces(), raceStatesSettings.isShowOnlyRacesOfSameDay(), + new MarkedAsyncCallback>( + new AsyncCallback>() { + @Override + public void onFailure(Throwable cause) { + Window.setStatus("Error while loading the race states with service getRaceStateEntriesForRaceGroup()"); } - view.updateEventRaceStates(result); - timerForClientServerOffset.adjustClientServerOffset(clientTimeWhenRequestWasSent, serverTimeDuringRequest, clientTimeWhenResponseWasReceived); - } - })); + + @Override + public void onSuccess(List result) { + final long clientTimeWhenResponseWasReceived = System.currentTimeMillis(); + Date serverTimeDuringRequest = null; + for (RegattaOverviewEntryDTO entryDTO : result) { + if (entryDTO.currentServerTime != null) { + serverTimeDuringRequest = entryDTO.currentServerTime; + } + } + view.updateEventRaceStates(result); + timerForClientServerOffset.adjustClientServerOffset(clientTimeWhenRequestWasSent, serverTimeDuringRequest, clientTimeWhenResponseWasReceived); + } + })); + } } } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/regattaraces/EventRegattaRacesRace.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/regattaraces/EventRegattaRacesRace.java index bbb14a009a9..66e1afc9c9c 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/regattaraces/EventRegattaRacesRace.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/regattaraces/EventRegattaRacesRace.java @@ -25,7 +25,7 @@ import com.sap.sse.gwt.client.player.Timer; public class EventRegattaRacesRace extends UIObject { private static EventRegattaRacesRaceUiBinder uiBinder = GWT.create(EventRegattaRacesRaceUiBinder.class); - private enum SimpleRaceStates { NOT_TRACKED, TRACKED_AND_NOT_LIVE, TRACKED_AND_LIVE }; + private enum SimpleRaceStates { NOT_TRACKED, TRACKED_AND_FINISHED, TRACKED_AND_RUNNING, TRACKED_BUT_NOT_SCHEDULED }; interface EventRegattaRacesRaceUiBinder extends UiBinder { } @@ -38,6 +38,7 @@ public class EventRegattaRacesRace extends UIObject { @UiField SpanElement averageRaceWind; @UiField DivElement raceNotTrackedDiv; + @UiField DivElement raceNotScheduledDiv; @UiField DivElement watchRaceDiv; @UiField DivElement analyzeRaceDiv; @UiField AnchorElement watchRaceLink; @@ -83,7 +84,7 @@ public class EventRegattaRacesRace extends UIObject { EventRegattaRacesResources.INSTANCE.css().ensureInjected(); setElement(uiBinder.createAndBindUi(this)); - allConditionalElements = new Element[] {raceWinnerDiv, raceLeaderDiv, watchRaceDiv, analyzeRaceDiv, raceNotTrackedDiv, + allConditionalElements = new Element[] {raceWinnerDiv, raceLeaderDiv, watchRaceDiv, analyzeRaceDiv, raceNotTrackedDiv, raceNotScheduledDiv, raceFeaturesDiv, legProgressDiv, raceFlagDiv, windStatusDiv }; if(fleet.getColor() != null) { @@ -127,7 +128,20 @@ public class EventRegattaRacesRace extends UIObject { SimpleRaceStates simpleRaceState = SimpleRaceStates.NOT_TRACKED; if(race != null && race.trackedRace != null) { - simpleRaceState = isLive() ? SimpleRaceStates.TRACKED_AND_LIVE : SimpleRaceStates.TRACKED_AND_NOT_LIVE; + if(isLive()) { + simpleRaceState = SimpleRaceStates.TRACKED_AND_RUNNING; + if(race.startOfRace == null) { + simpleRaceState = SimpleRaceStates.TRACKED_BUT_NOT_SCHEDULED; + } else if (race.endOfRace != null) { + simpleRaceState = SimpleRaceStates.TRACKED_AND_FINISHED; + } + } else { + if(race.startOfRace == null) { + simpleRaceState = SimpleRaceStates.TRACKED_BUT_NOT_SCHEDULED; + } else if (race.endOfRace != null) { + simpleRaceState = SimpleRaceStates.TRACKED_AND_FINISHED; + } + } } return simpleRaceState; } @@ -147,7 +161,10 @@ public class EventRegattaRacesRace extends UIObject { case NOT_TRACKED: showElement(raceNotTrackedDiv); break; - case TRACKED_AND_LIVE: + case TRACKED_BUT_NOT_SCHEDULED: + showElement(raceNotScheduledDiv); + break; + case TRACKED_AND_RUNNING: showElement(watchRaceDiv); if(race.startOfRace != null) { @@ -164,7 +181,7 @@ public class EventRegattaRacesRace extends UIObject { } break; - case TRACKED_AND_NOT_LIVE: + case TRACKED_AND_FINISHED: showElement(analyzeRaceDiv); if(race.trackedRaceStatistics.hasLeaderData && race.trackedRaceStatistics.leaderOrWinner != null) { diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/regattaraces/EventRegattaRacesRace.ui.xml b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/regattaraces/EventRegattaRacesRace.ui.xml index 885f864fb87..69bc2435f9e 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/regattaraces/EventRegattaRacesRace.ui.xml +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/regattaraces/EventRegattaRacesRace.ui.xml @@ -41,6 +41,9 @@
+
+ +