Initial implementation of regatta leaderboards for fakeseries

This commit is contained in:
Steffen Schaefer committed 2015-03-16 12:04:57 +01:00
1 parent e1462316e5
commit 150c4b67c1
5 files changed
+243 -58

No files matched your search

@@ -16,6 +16,7 @@ import com.sap.sailing.gwt.home.client.place.events.EventsPlace;
import com.sap.sailing.gwt.home.client.place.fakeseries.SeriesDefaultPlace; import com.sap.sailing.gwt.home.client.place.fakeseries.SeriesDefaultPlace;
import com.sap.sailing.gwt.home.client.place.fakeseries.tabs.EventSeriesCompetitorAnalyticsPlace; import com.sap.sailing.gwt.home.client.place.fakeseries.tabs.EventSeriesCompetitorAnalyticsPlace;
import com.sap.sailing.gwt.home.client.place.fakeseries.tabs.EventSeriesLeaderboardPlace; import com.sap.sailing.gwt.home.client.place.fakeseries.tabs.EventSeriesLeaderboardPlace;
import com.sap.sailing.gwt.home.client.place.fakeseries.tabs.EventSeriesRegattaLeaderboardPlace;
import com.sap.sailing.gwt.home.client.place.fakeseries.tabs.SeriesEventsPlace; import com.sap.sailing.gwt.home.client.place.fakeseries.tabs.SeriesEventsPlace;
import com.sap.sailing.gwt.home.client.place.fakeseries.tabs.SeriesMediaPlace; import com.sap.sailing.gwt.home.client.place.fakeseries.tabs.SeriesMediaPlace;
import com.sap.sailing.gwt.home.client.place.regatta.RegattaPlace; import com.sap.sailing.gwt.home.client.place.regatta.RegattaPlace;
@@ -47,6 +48,7 @@ import com.sap.sailing.gwt.home.client.place.whatsnew.WhatsNewPlace;
SeriesEventsPlace.Tokenizer.class, SeriesEventsPlace.Tokenizer.class,
EventSeriesCompetitorAnalyticsPlace.Tokenizer.class, EventSeriesCompetitorAnalyticsPlace.Tokenizer.class,
EventSeriesLeaderboardPlace.Tokenizer.class, EventSeriesLeaderboardPlace.Tokenizer.class,
EventSeriesRegattaLeaderboardPlace.Tokenizer.class,
SeriesMediaPlace.Tokenizer.class SeriesMediaPlace.Tokenizer.class
}) })
@@ -1,67 +1,69 @@
<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent"> <!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent">
<ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder" <ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder"
xmlns:g="urn:import:com.google.gwt.user.client.ui" xmlns:g="urn:import:com.google.gwt.user.client.ui"
xmlns:c="urn:import:com.sap.sailing.gwt.common.client.controls.tabbar" xmlns:c="urn:import:com.sap.sailing.gwt.common.client.controls.tabbar"
xmlns:tabs="urn:import:com.sap.sailing.gwt.home.client.place.fakeseries.tabs" xmlns:tabs="urn:import:com.sap.sailing.gwt.home.client.place.fakeseries.tabs"
xmlns:h="urn:import:com.sap.sailing.gwt.home.client.place.fakeseries.partials.header"> xmlns:h="urn:import:com.sap.sailing.gwt.home.client.place.fakeseries.partials.header">
<ui:with field="i18n" type="com.sap.sailing.gwt.ui.client.StringMessages" /> <ui:with field="i18n" type="com.sap.sailing.gwt.ui.client.StringMessages" />
<ui:with field="tm" type="com.sap.sailing.gwt.common.client.i18n.TextMessages" /> <ui:with field="tm" type="com.sap.sailing.gwt.common.client.i18n.TextMessages" />
<ui:style> <ui:style>
.header { .header {
position: relative; position: relative;
width: 100%; width: 100%;
margin: 0; margin: 0;
padding: 0; padding: 0;
} }
.mainHeader { .mainHeader {
width: 66.6666666666667%; width: 66.6666666666667%;
} }
.sharingHeader { .sharingHeader {
width: 33.3333333333333%; width: 33.3333333333333%;
float: right; float: right;
padding: 0 1rem; padding: 0 1rem;
position: position: relative;
relative; padding: 1.333333333333333em 0;
padding: 1.333333333333333em 0; text-align: right;
text-align: right;
background-color: maroon; background-color: maroon;
height: 2rem; height: 2rem;
} }
.breadcrumb, .intro { .breadcrumb, .intro {
box-sizing: border-box; box-sizing: border-box;
-moz-box-sizing: border-box; -moz-box-sizing: border-box;
} }
.breadcrumb { .breadcrumb {
font-size: 0.866666666666667em; font-size: 0.866666666666667em;
font-weight: 600; font-weight: 600;
} }
.intro { .intro {
height: 5em; height: 5em;
} }
</ui:style> </ui:style>
<g:HTMLPanel> <g:HTMLPanel>
<c:TabPanel ui:field="tabPanelUi"> <c:TabPanel ui:field="tabPanelUi">
<c:header> <c:header>
<h:SeriesHeader ui:field="seriesHeader" /> <h:SeriesHeader ui:field="seriesHeader" />
</c:header> </c:header>
<c:tabcontent title="{i18n.events}"> <c:tabcontent title="{i18n.events}">
<tabs:SeriesEventsTabView /> <tabs:SeriesEventsTabView />
</c:tabcontent> </c:tabcontent>
<c:tabcontent title="{tm.overallLeaderboard}"> <c:tabcontent title="{tm.overallLeaderboard}">
<tabs:EventSeriesLeaderboardTabView /> <tabs:EventSeriesLeaderboardTabView />
</c:tabcontent> </c:tabcontent>
<c:tabcontent title="{i18n.competitorsAnalytics}"> <c:tabcontent title="{tm.regattaLeaderboards}">
<tabs:EventSeriesCompetitorAnalyticsTabView /> <tabs:EventSeriesRegattaLeaderboardTabView />
</c:tabcontent> </c:tabcontent>
<c:tabcontent title="{i18n.media}"> <c:tabcontent title="{i18n.competitorsAnalytics}">
<tabs:SeriesMediaTabView /> <tabs:EventSeriesCompetitorAnalyticsTabView />
</c:tabcontent> </c:tabcontent>
</c:TabPanel> <c:tabcontent title="{i18n.media}">
</g:HTMLPanel> <tabs:SeriesMediaTabView />
</c:tabcontent>
</c:TabPanel>
</g:HTMLPanel>
</ui:UiBinder> </ui:UiBinder>
@@ -0,0 +1,22 @@
package com.sap.sailing.gwt.home.client.place.fakeseries.tabs;
import com.sap.sailing.gwt.home.client.place.fakeseries.AbstractSeriesPlace;
import com.sap.sailing.gwt.home.client.place.fakeseries.AbstractSeriesTabPlace;
import com.sap.sailing.gwt.home.client.place.fakeseries.SeriesContext;
public class EventSeriesRegattaLeaderboardPlace extends AbstractSeriesTabPlace {
public EventSeriesRegattaLeaderboardPlace(String id) {
super(id);
}
public EventSeriesRegattaLeaderboardPlace(SeriesContext context) {
super(context);
}
public static class Tokenizer extends AbstractSeriesPlace.Tokenizer<EventSeriesRegattaLeaderboardPlace> {
@Override
protected EventSeriesRegattaLeaderboardPlace getRealPlace(SeriesContext context) {
return new EventSeriesRegattaLeaderboardPlace(context);
}
}
}
@@ -0,0 +1,144 @@
package com.sap.sailing.gwt.home.client.place.fakeseries.tabs;
import com.google.gwt.core.client.GWT;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.AcceptsOneWidget;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.HTMLPanel;
import com.google.gwt.user.client.ui.Label;
import com.sap.sailing.domain.common.RaceIdentifier;
import com.sap.sailing.domain.common.dto.LeaderboardDTO;
import com.sap.sailing.domain.common.dto.RaceColumnDTO;
import com.sap.sailing.gwt.common.client.controls.tabbar.TabView;
import com.sap.sailing.gwt.home.client.place.event.oldmultileaderboard.OldMultiLeaderboard;
import com.sap.sailing.gwt.home.client.place.event.seriesanalytics.EventSeriesAnalyticsDataManager;
import com.sap.sailing.gwt.home.client.place.event2.EventParamUtils;
import com.sap.sailing.gwt.home.client.place.fakeseries.SeriesTabView;
import com.sap.sailing.gwt.home.client.place.fakeseries.SeriesView;
import com.sap.sailing.gwt.home.client.shared.placeholder.Placeholder;
import com.sap.sailing.gwt.ui.client.LeaderboardUpdateListener;
import com.sap.sailing.gwt.ui.leaderboard.LeaderboardSettings;
import com.sap.sailing.gwt.ui.leaderboard.LeaderboardUrlSettings;
import com.sap.sailing.gwt.ui.leaderboard.MultiLeaderboardPanel;
import com.sap.sailing.gwt.ui.shared.fakeseries.EventSeriesViewDTO.EventSeriesState;
import com.sap.sse.gwt.shared.GwtHttpRequestUtils;
public class EventSeriesRegattaLeaderboardTabView extends Composite implements SeriesTabView<EventSeriesRegattaLeaderboardPlace>,
LeaderboardUpdateListener {
private SeriesView.Presenter currentPresenter;
@UiField
protected OldMultiLeaderboard leaderboard;
public EventSeriesRegattaLeaderboardTabView() {
}
@Override
public Class<EventSeriesRegattaLeaderboardPlace> getPlaceClassForActivation() {
return EventSeriesRegattaLeaderboardPlace.class;
}
@Override
public void setPresenter(SeriesView.Presenter currentPresenter) {
this.currentPresenter = currentPresenter;
}
@Override
public TabView.State getState() {
return TabView.State.VISIBLE;
}
@Override
public void start(final EventSeriesRegattaLeaderboardPlace myPlace, final AcceptsOneWidget contentArea) {
contentArea.setWidget(new Placeholder());
String leaderboardName = myPlace.getCtx().getSeriesDTO().getLeaderboardId();
if (leaderboardName != null && !leaderboardName.isEmpty()) {
EventSeriesAnalyticsDataManager regattaAnalyticsManager = currentPresenter.getCtx()
.getAnalyticsManager();
boolean autoExpandLastRaceColumn = GwtHttpRequestUtils.getBooleanParameter(
LeaderboardUrlSettings.PARAM_AUTO_EXPAND_LAST_RACE_COLUMN, false);
final LeaderboardSettings leaderboardSettings = EventParamUtils
.createLeaderboardSettingsFromURLParameters(Window.Location
.getParameterMap());
final RaceIdentifier preselectedRace = EventParamUtils
.getPreselectedRace(Window.Location.getParameterMap());
MultiLeaderboardPanel leaderboardPanel = regattaAnalyticsManager.createMultiLeaderboardPanel(leaderboardSettings,
null, // TODO: preselectedLeaderboardName
preselectedRace,
"leaderboardGroupName", // TODO: keep using magic string? ask frank!
currentPresenter.getCtx().getSeriesDTO().getLeaderboardId(),
true, // this information came from place, now hard coded. check with frank
autoExpandLastRaceColumn);
initWidget(ourUiBinder.createAndBindUi(this));
leaderboard.setMultiLeaderboard(leaderboardPanel,
currentPresenter.getAutoRefreshTimer());
leaderboardPanel.addLeaderboardUpdateListener(this);
if (currentPresenter.getCtx().getSeriesDTO().getState() != EventSeriesState.RUNNING) {
// TODO: this.leaderboard.hideRefresh();
} else {
// TODO: start autorefresh?
}
regattaAnalyticsManager.hideCompetitorChart();
contentArea.setWidget(this);
} else {
contentArea.setWidget(new Label("No leaderboard specified, cannot proceed to leaderboardpage"));
new com.google.gwt.user.client.Timer() {
@Override
public void run() {
currentPresenter.getHomeNavigation().goToPlace();
}
}.schedule(3000);
}
}
@Override
public void updatedLeaderboard(LeaderboardDTO leaderboard) {
this.leaderboard.updatedMultiLeaderboard(leaderboard, true); // TODO hard coded
}
@Override
public void currentRaceSelected(RaceIdentifier raceIdentifier, RaceColumnDTO raceColumn) {
}
@Override
public void stop() {
}
interface MyBinder extends UiBinder<HTMLPanel, EventSeriesRegattaLeaderboardTabView> {
}
private static MyBinder ourUiBinder = GWT.create(MyBinder.class);
@Override
public EventSeriesRegattaLeaderboardPlace placeToFire() {
return new EventSeriesRegattaLeaderboardPlace(currentPresenter.getCtx());
}
}
@@ -0,0 +1,15 @@
<ui:UiBinder xmlns:ui='urn:ui:com.google.gwt.uibinder'
xmlns:s="urn:import:com.sap.sailing.gwt.home.client.place.event"
xmlns:g='urn:import:com.google.gwt.user.client.ui'>
<ui:style>
.outerBox {
padding-top: 10px;
}
</ui:style>
<g:HTMLPanel styleName="{style.outerBox}">
<s:oldmultileaderboard.OldMultiLeaderboard ui:field='leaderboard'/>
</g:HTMLPanel>
</ui:UiBinder>