From 4e2fbc6ccc64add5504194111c52302f8f9b86ec Mon Sep 17 00:00:00 2001 From: Steffen Schaefer Date: Tue, 16 Jun 2015 17:28:58 +0200 Subject: [PATCH 1/2] Adjusted visibility of default constructors that are only needed for GWT serialization --- .../ui/shared/dispatch/event/GetEventOverviewNewsAction.java | 3 ++- .../ui/shared/dispatch/event/GetEventOverviewStageAction.java | 3 ++- .../gwt/ui/shared/dispatch/event/GetEventViewAction.java | 3 ++- .../ui/shared/dispatch/event/GetLiveRacesForEventAction.java | 3 ++- .../ui/shared/dispatch/event/GetLiveRacesForRegattaAction.java | 3 ++- .../gwt/ui/shared/dispatch/event/GetRaceListViewAction.java | 3 ++- .../dispatch/event/GetRegattasAndLiveRacesForEventAction.java | 3 ++- 7 files changed, 14 insertions(+), 7 deletions(-) diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/dispatch/event/GetEventOverviewNewsAction.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/dispatch/event/GetEventOverviewNewsAction.java index c36144046bb..076c0c72d09 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/dispatch/event/GetEventOverviewNewsAction.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/dispatch/event/GetEventOverviewNewsAction.java @@ -20,7 +20,8 @@ import com.sap.sailing.news.impl.LeaderboardUpdateNewsItem; public class GetEventOverviewNewsAction implements Action>> { private UUID eventId; - public GetEventOverviewNewsAction() { + @SuppressWarnings("unused") + private GetEventOverviewNewsAction() { } public GetEventOverviewNewsAction(UUID eventId) { diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/dispatch/event/GetEventOverviewStageAction.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/dispatch/event/GetEventOverviewStageAction.java index 77dd332870d..d02fb581341 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/dispatch/event/GetEventOverviewStageAction.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/dispatch/event/GetEventOverviewStageAction.java @@ -21,7 +21,8 @@ public class GetEventOverviewStageAction implements Action { private UUID eventId; - public GetEventViewAction() { + @SuppressWarnings("unused") + private GetEventViewAction() { } public GetEventViewAction(UUID eventId) { diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/dispatch/event/GetLiveRacesForEventAction.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/dispatch/event/GetLiveRacesForEventAction.java index 55a6baeb9f0..69e6860a28c 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/dispatch/event/GetLiveRacesForEventAction.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/dispatch/event/GetLiveRacesForEventAction.java @@ -14,7 +14,8 @@ public class GetLiveRacesForEventAction implements Action> { - public GetRaceListViewAction() { + @SuppressWarnings("unused") + private GetRaceListViewAction() { } public GetRaceListViewAction(UUID eventId) { diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/dispatch/event/GetRegattasAndLiveRacesForEventAction.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/dispatch/event/GetRegattasAndLiveRacesForEventAction.java index 37ef7704285..2ab98388786 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/dispatch/event/GetRegattasAndLiveRacesForEventAction.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/dispatch/event/GetRegattasAndLiveRacesForEventAction.java @@ -23,7 +23,8 @@ public class GetRegattasAndLiveRacesForEventAction implements Action Date: Tue, 16 Jun 2015 17:29:30 +0200 Subject: [PATCH 2/2] Initial implementation of event statistics calculation --- .../partials/statisticsBox/StatisticsBox.java | 15 +++++- .../mobile/places/event/EventActivity.java | 2 - .../home/mobile/places/event/EventView.java | 3 -- .../mobile/places/event/EventViewImpl.java | 11 +---- .../dispatch/event/EventStatisticsDTO.java} | 21 +++++++- .../event/GetEventStatisticsAction.java | 48 +++++++++++++++++++ 6 files changed, 83 insertions(+), 17 deletions(-) rename java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/{home/mobile/partials/statisticsBox/StatisticsDTO.java => ui/shared/dispatch/event/EventStatisticsDTO.java} (61%) create mode 100644 java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/dispatch/event/GetEventStatisticsAction.java diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/statisticsBox/StatisticsBox.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/statisticsBox/StatisticsBox.java index 58d0cb92ee2..8dc427c74e5 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/statisticsBox/StatisticsBox.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/statisticsBox/StatisticsBox.java @@ -5,9 +5,13 @@ import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; import com.google.gwt.user.client.ui.Composite; import com.google.gwt.user.client.ui.Widget; +import com.sap.sailing.gwt.home.client.place.event.regatta.tabs.reload.RefreshableWidget; import com.sap.sailing.gwt.home.mobile.partials.section.MobileSection; +import com.sap.sailing.gwt.ui.client.StringMessages; +import com.sap.sailing.gwt.ui.shared.dispatch.event.EventStatisticsDTO; -public class StatisticsBox extends Composite { +public class StatisticsBox extends Composite implements RefreshableWidget { + private static final StringMessages MSG = StringMessages.INSTANCE; public static final String ICON_REGATTAS_FOUGHT = "images/mobile/icon_regattasFought.svg"; public static final String ICON_COMPATITORS_COUNT = "images/mobile/icon_averageSpeed.svg"; @@ -30,4 +34,13 @@ public class StatisticsBox extends Composite { itemContainerUi.addContent(new StatisticsBoxItem(iconUrl, name, count)); } + @Override + public void setData(EventStatisticsDTO statistics, long nextUpdate, int updateNo) { + itemContainerUi.clearContent(); + addItem(StatisticsBox.ICON_REGATTAS_FOUGHT, MSG.regattas(), statistics.getRegattasFoughtCount()); + addItem(StatisticsBox.ICON_COMPATITORS_COUNT, MSG.competitors(), statistics.getCompetitorsCount()); + addItem(StatisticsBox.ICON_RACES_COUNT, MSG.races(), statistics.getRacesRunCount()); + addItem(StatisticsBox.ICON_TRACKED_COUNT, MSG.trackedRaces(), statistics.getTrackedRacesCount()); + } + } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/places/event/EventActivity.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/places/event/EventActivity.java index a154ac335bd..a439e670715 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/places/event/EventActivity.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/places/event/EventActivity.java @@ -14,7 +14,6 @@ import com.sap.sailing.gwt.home.client.place.event.AbstractEventPlace; import com.sap.sailing.gwt.home.client.place.event.EventContext; import com.sap.sailing.gwt.home.client.place.start.StartPlace; import com.sap.sailing.gwt.home.mobile.app.MobileApplicationClientFactory; -import com.sap.sailing.gwt.home.mobile.partials.statisticsBox.StatisticsDTO; import com.sap.sailing.gwt.home.mobile.places.event.EventView.Presenter; import com.sap.sailing.gwt.home.shared.app.PlaceNavigation; import com.sap.sailing.gwt.home.shared.dispatch.DispatchSystem; @@ -68,7 +67,6 @@ public class EventActivity extends AbstractActivity implements Presenter { } view.setQuickFinderValues(place.getCtx().getEventDTO().getRegattas()); view.getQuickfinder().addSelectionHandler(new QuickfinderSelectionHandler()); - view.setStatistics(new StatisticsDTO()); // TODO set correct stats view.setNavigator(clientFactory.getNavigator()); clientFactory.getHomeService().getMediaForEvent(currentEventUUId, new AsyncCallback() { @Override diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/places/event/EventView.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/places/event/EventView.java index cb8a26c2a52..dc55b62fcce 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/places/event/EventView.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/places/event/EventView.java @@ -6,7 +6,6 @@ import com.google.gwt.event.logical.shared.HasSelectionHandlers; import com.google.gwt.user.client.ui.Widget; import com.sap.sailing.gwt.home.client.place.event.EventContext; import com.sap.sailing.gwt.home.mobile.app.MobilePlacesNavigator; -import com.sap.sailing.gwt.home.mobile.partials.statisticsBox.StatisticsDTO; import com.sap.sailing.gwt.home.shared.app.PlaceNavigation; import com.sap.sailing.gwt.home.shared.dispatch.DispatchSystem; import com.sap.sailing.gwt.ui.shared.eventview.RegattaMetadataDTO; @@ -34,8 +33,6 @@ public interface EventView { String getRaceViewerURL(String regattaName, String trackedRaceName); } - void setStatistics(StatisticsDTO statistics); - void setNavigator(MobilePlacesNavigator navigator); } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/places/event/EventViewImpl.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/places/event/EventViewImpl.java index 4965c7f2038..ab32b9ae2a3 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/places/event/EventViewImpl.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/places/event/EventViewImpl.java @@ -20,13 +20,13 @@ import com.sap.sailing.gwt.home.mobile.partials.quickfinder.Quickfinder; import com.sap.sailing.gwt.home.mobile.partials.regattaStatus.RegattaStatus; import com.sap.sailing.gwt.home.mobile.partials.simpleinfoblock.SimpleInfoBlock; import com.sap.sailing.gwt.home.mobile.partials.statisticsBox.StatisticsBox; -import com.sap.sailing.gwt.home.mobile.partials.statisticsBox.StatisticsDTO; import com.sap.sailing.gwt.home.mobile.partials.updatesBox.UpdatesBox; import com.sap.sailing.gwt.home.mobile.places.event.overview.EventOverviewStage; import com.sap.sailing.gwt.ui.client.StringMessages; import com.sap.sailing.gwt.ui.shared.dispatch.ListResult; import com.sap.sailing.gwt.ui.shared.dispatch.event.GetEventOverviewNewsAction; import com.sap.sailing.gwt.ui.shared.dispatch.event.GetEventOverviewStageAction; +import com.sap.sailing.gwt.ui.shared.dispatch.event.GetEventStatisticsAction; import com.sap.sailing.gwt.ui.shared.dispatch.event.GetRegattasAndLiveRacesForEventAction; import com.sap.sailing.gwt.ui.shared.dispatch.news.NewsEntryDTO; import com.sap.sailing.gwt.ui.shared.eventview.RegattaMetadataDTO; @@ -67,6 +67,7 @@ public class EventViewImpl extends Composite implements EventView { refreshManager.add(overviewStageUi, new GetEventOverviewStageAction(eventId)); refreshManager.add(regattaStatusUi, new GetRegattasAndLiveRacesForEventAction(eventId)); refreshManager.add(newsRefreshable, new GetEventOverviewNewsAction(presenter.getCtx().getEventDTO().getId())); + refreshManager.add(statisticsBoxUi, new GetEventStatisticsAction(currentPresenter.getCtx().getEventDTO().getId())); impressionsUi.getElement().getStyle().setDisplay(Display.NONE); } @@ -84,14 +85,6 @@ public class EventViewImpl extends Composite implements EventView { } } - @Override - public void setStatistics(StatisticsDTO statistics) { - statisticsBoxUi.addItem(StatisticsBox.ICON_REGATTAS_FOUGHT, MSG.regattas(), statistics.getRegattasFoughtCount()); - statisticsBoxUi.addItem(StatisticsBox.ICON_COMPATITORS_COUNT, MSG.competitors(), statistics.getCompetitorsCount()); - statisticsBoxUi.addItem(StatisticsBox.ICON_RACES_COUNT, MSG.races(), statistics.getRacesRunCount()); - statisticsBoxUi.addItem(StatisticsBox.ICON_TRACKED_COUNT, MSG.trackedRaces(), statistics.getTrackedRacesCount()); - } - @Override public HasSelectionHandlers getQuickfinder() { return quickFinderUi; diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/statisticsBox/StatisticsDTO.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/dispatch/event/EventStatisticsDTO.java similarity index 61% rename from java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/statisticsBox/StatisticsDTO.java rename to java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/dispatch/event/EventStatisticsDTO.java index e5b0cfcea62..b744dee281e 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/statisticsBox/StatisticsDTO.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/dispatch/event/EventStatisticsDTO.java @@ -1,12 +1,29 @@ -package com.sap.sailing.gwt.home.mobile.partials.statisticsBox; +package com.sap.sailing.gwt.ui.shared.dispatch.event; -public class StatisticsDTO { +import com.sap.sailing.gwt.ui.shared.dispatch.DTO; + +public class EventStatisticsDTO implements DTO { private Integer regattasFoughtCount; private Integer competitorsCount; private Integer racesRunCount; private Integer trackedRacesCount; + @SuppressWarnings("unused") + private EventStatisticsDTO() { + } + + public EventStatisticsDTO(Integer regattasFoughtCount, Integer competitorsCount, Integer racesRunCount, + Integer trackedRacesCount) { + super(); + this.regattasFoughtCount = regattasFoughtCount; + this.competitorsCount = competitorsCount; + this.racesRunCount = racesRunCount; + this.trackedRacesCount = trackedRacesCount; + } + + + public Integer getRegattasFoughtCount() { return regattasFoughtCount; } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/dispatch/event/GetEventStatisticsAction.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/dispatch/event/GetEventStatisticsAction.java new file mode 100644 index 00000000000..bbdc99546b0 --- /dev/null +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/dispatch/event/GetEventStatisticsAction.java @@ -0,0 +1,48 @@ +package com.sap.sailing.gwt.ui.shared.dispatch.event; + +import java.util.UUID; + +import com.google.gwt.core.shared.GwtIncompatible; +import com.sap.sailing.domain.base.Event; +import com.sap.sailing.domain.leaderboard.Leaderboard; +import com.sap.sailing.domain.leaderboard.LeaderboardGroup; +import com.sap.sailing.gwt.server.HomeServiceUtil; +import com.sap.sailing.gwt.ui.shared.dispatch.Action; +import com.sap.sailing.gwt.ui.shared.dispatch.DispatchContext; +import com.sap.sailing.gwt.ui.shared.dispatch.ResultWithTTL; + +public class GetEventStatisticsAction implements Action> { + private UUID eventId; + + @SuppressWarnings("unused") + private GetEventStatisticsAction() { + } + + public GetEventStatisticsAction(UUID eventId) { + this.eventId = eventId; + } + + @GwtIncompatible + public ResultWithTTL execute(DispatchContext context) { + Event event = context.getRacingEventService().getEvent(eventId); + if (event == null) { + throw new RuntimeException("Event not found"); + } + + int competitors = 0; + int races = 0; + int trackedRaces = 0; + int regattas = 0; + + for(LeaderboardGroup lg: event.getLeaderboardGroups()) { + for(Leaderboard leaderboard : lg.getLeaderboards()) { + competitors += HomeServiceUtil.calculateCompetitorsCount(leaderboard); + races += HomeServiceUtil.calculateRaceCount(leaderboard); + trackedRaces += HomeServiceUtil.calculateTrackedRaceCount(leaderboard); + regattas++; + } + } + + return new ResultWithTTL(1000 * 60 * 5, new EventStatisticsDTO(regattas, competitors, races, trackedRaces)); + } +}