mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-10-16 09:11:02 +00:00
Initial implementation of regatta leaderboards for fakeseries
This commit is contained in:
1 parent
e1462316e5
commit
150c4b67c1
5 files changed
+243
-58
No files matched your search
+2
@@ -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
|
||||||
|
|
||||||
})
|
})
|
||||||
|
|||||||
+60
-58
@@ -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>
|
||||||
+22
@@ -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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
+144
@@ -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());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
+15
@@ -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>
|
||||||
Reference in new issue
Block a user