Merge remote-tracking branch 'origin/newhome'

This commit is contained in:
fmittag committed 2014-08-14 12:43:43 +02:00
commit 5ae5d6a4d4
6 files changed
+98 -61

No files matched your search

@@ -26,6 +26,7 @@ public interface TextMessages extends Messages {
String pleaseTryAgain();
String reloadPage();
String errorMessageLoadingData();
String raceNotScheduled();
String countdownDays();
String countdownHours();
@@ -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
@@ -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.
@@ -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<EventDTO>() {
@Override
public void onSuccess(final EventDTO event) {
if(event.getLeaderboardGroups().size() > 0) {
clientFactory.getSailingService().getRegattaStructureOfEvent(event.id, new AsyncCallback<List<RaceGroupDTO>>() {
@Override
public void onSuccess(List<RaceGroupDTO> 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<List<RaceGroupDTO>>() {
@Override
public void onSuccess(List<RaceGroupDTO> 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<List<RegattaOverviewEntryDTO>>(
new AsyncCallback<List<RegattaOverviewEntryDTO>>() {
@Override
public void onFailure(Throwable cause) {
Window.setStatus("Error while loading the race states with service getRaceStateEntriesForRaceGroup()");
}
@Override
public void onSuccess(List<RegattaOverviewEntryDTO> 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<List<RegattaOverviewEntryDTO>>(
new AsyncCallback<List<RegattaOverviewEntryDTO>>() {
@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<RegattaOverviewEntryDTO> 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);
}
}));
}
}
}
@@ -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<DivElement, EventRegattaRacesRace> {
}
@@ -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) {
@@ -41,6 +41,9 @@
<div ui:field="raceNotTrackedDiv" class="{local_res.css.eventregattarace_action} {local_res.css.eventregattarace_actiondisabled}">
<ui:text from='{i18n.eventRegattaRaceNotTracked}'/>
</div>
<div ui:field="raceNotScheduledDiv" class="{local_res.css.eventregattarace_action} {local_res.css.eventregattarace_actiondisabled}">
<ui:text from='{i18n.raceNotScheduled}'/>
</div>
<div ui:field="watchRaceDiv" class="{local_res.css.eventregattarace_action}">
<a ui:field="watchRaceLink" class="{res.mainCss.button} {local_res.css.eventregattarace_action_watch}"><ui:text from='{i18n.eventRegattaRaceWatch}'/></a>
</div>