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.tabs.EventSeriesCompetitorAnalyticsPlace;
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.SeriesMediaPlace;
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,
EventSeriesCompetitorAnalyticsPlace.Tokenizer.class,
EventSeriesLeaderboardPlace.Tokenizer.class,
EventSeriesRegattaLeaderboardPlace.Tokenizer.class,
SeriesMediaPlace.Tokenizer.class
})
@@ -1,67 +1,69 @@
<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent">
<ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder"
xmlns:g="urn:import:com.google.gwt.user.client.ui"
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: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="tm" type="com.sap.sailing.gwt.common.client.i18n.TextMessages" />
<ui:style>
.header {
position: relative;
width: 100%;
margin: 0;
padding: 0;
}
xmlns:g="urn:import:com.google.gwt.user.client.ui"
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: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="tm" type="com.sap.sailing.gwt.common.client.i18n.TextMessages" />
<ui:style>
.header {
position: relative;
width: 100%;
margin: 0;
padding: 0;
}
.mainHeader {
width: 66.6666666666667%;
}
.mainHeader {
width: 66.6666666666667%;
}
.sharingHeader {
width: 33.3333333333333%;
float: right;
padding: 0 1rem;
position:
relative;
padding: 1.333333333333333em 0;
text-align: right;
.sharingHeader {
width: 33.3333333333333%;
float: right;
padding: 0 1rem;
position: relative;
padding: 1.333333333333333em 0;
text-align: right;
background-color: maroon;
height: 2rem;
}
background-color: maroon;
height: 2rem;
}
.breadcrumb, .intro {
box-sizing: border-box;
-moz-box-sizing: border-box;
}
.breadcrumb, .intro {
box-sizing: border-box;
-moz-box-sizing: border-box;
}
.breadcrumb {
font-size: 0.866666666666667em;
font-weight: 600;
}
.breadcrumb {
font-size: 0.866666666666667em;
font-weight: 600;
}
.intro {
height: 5em;
}
</ui:style>
<g:HTMLPanel>
<c:TabPanel ui:field="tabPanelUi">
<c:header>
<h:SeriesHeader ui:field="seriesHeader" />
</c:header>
<c:tabcontent title="{i18n.events}">
<tabs:SeriesEventsTabView />
</c:tabcontent>
<c:tabcontent title="{tm.overallLeaderboard}">
<tabs:EventSeriesLeaderboardTabView />
</c:tabcontent>
<c:tabcontent title="{i18n.competitorsAnalytics}">
<tabs:EventSeriesCompetitorAnalyticsTabView />
</c:tabcontent>
<c:tabcontent title="{i18n.media}">
<tabs:SeriesMediaTabView />
</c:tabcontent>
</c:TabPanel>
</g:HTMLPanel>
.intro {
height: 5em;
}
</ui:style>
<g:HTMLPanel>
<c:TabPanel ui:field="tabPanelUi">
<c:header>
<h:SeriesHeader ui:field="seriesHeader" />
</c:header>
<c:tabcontent title="{i18n.events}">
<tabs:SeriesEventsTabView />
</c:tabcontent>
<c:tabcontent title="{tm.overallLeaderboard}">
<tabs:EventSeriesLeaderboardTabView />
</c:tabcontent>
<c:tabcontent title="{tm.regattaLeaderboards}">
<tabs:EventSeriesRegattaLeaderboardTabView />
</c:tabcontent>
<c:tabcontent title="{i18n.competitorsAnalytics}">
<tabs:EventSeriesCompetitorAnalyticsTabView />
</c:tabcontent>
<c:tabcontent title="{i18n.media}">
<tabs:SeriesMediaTabView />
</c:tabcontent>
</c:TabPanel>
</g:HTMLPanel>
</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>