mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-09-30 17:36:40 +00:00
- added new LeaderboardSettingsFactory for creating different kind of settings
This commit is contained in:
1 parent
6000aed5f1
commit
9299fa1210
11 files changed
+123
-33
No files matched your search
+3
-2
@@ -15,6 +15,7 @@ import com.sap.sailing.gwt.ui.client.CompetitorSelectionModel;
|
||||
import com.sap.sailing.gwt.ui.client.EventDisplayer;
|
||||
import com.sap.sailing.gwt.ui.client.EventRefresher;
|
||||
import com.sap.sailing.gwt.ui.leaderboard.LeaderboardPanel;
|
||||
import com.sap.sailing.gwt.ui.leaderboard.LeaderboardSettingsFactory;
|
||||
import com.sap.sailing.gwt.ui.shared.EventDTO;
|
||||
|
||||
public class AdminConsole extends AbstractEntryPoint implements EventRefresher {
|
||||
@@ -52,8 +53,8 @@ public class AdminConsole extends AbstractEntryPoint implements EventRefresher {
|
||||
eventDisplayers.add(raceMapPanel);
|
||||
raceMapPanel.setSize("90%", "90%");
|
||||
tabPanel.add(raceMapPanel, stringMessages.map(), /* asHTML */ false);
|
||||
LeaderboardPanel defaultLeaderboardPanel = new LeaderboardPanel(sailingService, null,
|
||||
new CompetitorSelectionModel(/* hasMultiSelection */true),
|
||||
LeaderboardPanel defaultLeaderboardPanel = new LeaderboardPanel(sailingService, LeaderboardSettingsFactory.getDefaultSettings(),
|
||||
null, new CompetitorSelectionModel(/* hasMultiSelection */true),
|
||||
DefaultLeaderboardName.DEFAULT_LEADERBOARD_NAME, null, this, stringMessages);
|
||||
defaultLeaderboardPanel.setSize("90%", "90%");
|
||||
tabPanel.add(defaultLeaderboardPanel, stringMessages.defaultLeaderboard(), /* asHTML */ false);
|
||||
|
||||
+4
-2
@@ -46,10 +46,12 @@ public abstract class AbstractEntryPoint implements EntryPoint, ErrorReporter {
|
||||
public void onModuleLoad() {
|
||||
stringMessages = GWT.create(StringMessages.class);
|
||||
errorDialogBox = createErrorDialog();
|
||||
ServiceDefTarget serviceDef = (ServiceDefTarget) sailingService;
|
||||
ServiceDefTarget sailingServiceDef = (ServiceDefTarget) sailingService;
|
||||
ServiceDefTarget userManagementServiceDef = (ServiceDefTarget) userManagementService;
|
||||
String moduleBaseURL = GWT.getModuleBaseURL();
|
||||
String baseURL = moduleBaseURL.substring(0, moduleBaseURL.lastIndexOf('/', moduleBaseURL.length()-2)+1);
|
||||
serviceDef.setServiceEntryPoint(baseURL + "sailing");
|
||||
sailingServiceDef.setServiceEntryPoint(baseURL + "sailing");
|
||||
userManagementServiceDef.setServiceEntryPoint(baseURL + "usermanagement");
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
+12
-14
@@ -786,21 +786,21 @@ public class LeaderboardPanel extends FormPanel implements TimeListener, PlaySta
|
||||
}
|
||||
}
|
||||
|
||||
public LeaderboardPanel(SailingServiceAsync sailingService,
|
||||
public LeaderboardPanel(SailingServiceAsync sailingService, LeaderboardSettings settings,
|
||||
CompetitorSelectionProvider competitorSelectionProvider, String leaderboardName, String leaderboardGroupName,
|
||||
ErrorReporter errorReporter, final StringMessages stringConstants) {
|
||||
this(sailingService, /* preSelectedRace */ null, competitorSelectionProvider, leaderboardName, leaderboardGroupName, errorReporter, stringConstants);
|
||||
this(sailingService, settings, /* preSelectedRace */ null, competitorSelectionProvider, leaderboardName, leaderboardGroupName, errorReporter, stringConstants);
|
||||
}
|
||||
|
||||
public LeaderboardPanel(SailingServiceAsync sailingService, RaceIdentifier preSelectedRace,
|
||||
public LeaderboardPanel(SailingServiceAsync sailingService, LeaderboardSettings settings, RaceIdentifier preSelectedRace,
|
||||
CompetitorSelectionProvider competitorSelectionProvider, String leaderboardName, String leaderboardGroupName,
|
||||
ErrorReporter errorReporter, final StringMessages stringConstants) {
|
||||
this(sailingService, preSelectedRace, competitorSelectionProvider, new Timer(PlayModes.Replay, /* delayBetweenAutoAdvancesInMilliseconds */3000l),
|
||||
this(sailingService, settings, preSelectedRace, competitorSelectionProvider, new Timer(PlayModes.Replay, /* delayBetweenAutoAdvancesInMilliseconds */3000l),
|
||||
leaderboardName, leaderboardGroupName, errorReporter, stringConstants);
|
||||
timer.setDelay(getDelayInMilliseconds()); // set time/delay before adding as listener
|
||||
}
|
||||
|
||||
public LeaderboardPanel(SailingServiceAsync sailingService, RaceIdentifier preSelectedRace,
|
||||
public LeaderboardPanel(SailingServiceAsync sailingService, LeaderboardSettings settings, RaceIdentifier preSelectedRace,
|
||||
CompetitorSelectionProvider competitorSelectionProvider, Timer timer, String leaderboardName, String leaderboardGroupName,
|
||||
ErrorReporter errorReporter, final StringMessages stringConstants) {
|
||||
this.sailingService = sailingService;
|
||||
@@ -811,18 +811,16 @@ public class LeaderboardPanel extends FormPanel implements TimeListener, PlaySta
|
||||
this.errorReporter = errorReporter;
|
||||
this.stringConstants = stringConstants;
|
||||
this.selectedLegDetails = new ArrayList<DetailType>();
|
||||
this.selectedLegDetails.add(DetailType.DISTANCE_TRAVELED);
|
||||
this.selectedLegDetails.add(DetailType.AVERAGE_SPEED_OVER_GROUND_IN_KNOTS);
|
||||
this.selectedLegDetails.add(DetailType.RANK_GAIN);
|
||||
this.selectedRaceDetails = new ArrayList<DetailType>();
|
||||
this.selectedRaceDetails.add(DetailType.DISPLAY_LEGS);
|
||||
this.selectedRaceColumns = new ArrayList<RaceInLeaderboardDTO>();
|
||||
this.selectedManeuverDetails = new ArrayList<DetailType>();
|
||||
selectedManeuverDetails.add(DetailType.TACK);
|
||||
selectedManeuverDetails.add(DetailType.JIBE);
|
||||
selectedManeuverDetails.add(DetailType.PENALTY_CIRCLE);
|
||||
delayInMilliseconds = 0l;
|
||||
autoExpandFirstRace = false;
|
||||
|
||||
selectedLegDetails.addAll(settings.getLegDetailsToShow());
|
||||
selectedManeuverDetails.addAll(settings.getManeuverDetailsToShow());
|
||||
selectedRaceDetails.addAll(settings.getRaceDetailsToShow());
|
||||
delayInMilliseconds = settings.getDelayInMilliseconds();
|
||||
autoExpandFirstRace = settings.isAutoExpandFirstRace();
|
||||
|
||||
this.timer = timer;
|
||||
timer.addPlayStateListener(this);
|
||||
timer.addTimeListener(this);
|
||||
|
||||
+60
@@ -0,0 +1,60 @@
|
||||
package com.sap.sailing.gwt.ui.leaderboard;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
import com.sap.sailing.domain.common.DetailType;
|
||||
import com.sap.sailing.gwt.ui.shared.RaceInLeaderboardDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.UserDTO;
|
||||
import com.sap.sailing.gwt.ui.usermanagement.UserRoles;
|
||||
|
||||
/*
|
||||
* A factory class creating leaderboard settings for different contexts (user role, live or replay mode, etc.
|
||||
*/
|
||||
public class LeaderboardSettingsFactory {
|
||||
|
||||
public static LeaderboardSettings getSettingsForUserRole(UserDTO user)
|
||||
{
|
||||
LeaderboardSettings settings = null;
|
||||
if (user != null && user.roles.contains(UserRoles.moderator.name())) {
|
||||
ArrayList<DetailType> maneuverDetails = new ArrayList<DetailType>();
|
||||
maneuverDetails.add(DetailType.TACK);
|
||||
maneuverDetails.add(DetailType.JIBE);
|
||||
maneuverDetails.add(DetailType.PENALTY_CIRCLE);
|
||||
|
||||
ArrayList<DetailType> legDetails = new ArrayList<DetailType>();
|
||||
legDetails.add(DetailType.DISTANCE_TRAVELED);
|
||||
legDetails.add(DetailType.AVERAGE_SPEED_OVER_GROUND_IN_KNOTS);
|
||||
legDetails.add(DetailType.RANK_GAIN);
|
||||
|
||||
ArrayList<DetailType> raceDetails = new ArrayList<DetailType>();
|
||||
raceDetails.add(DetailType.DISPLAY_LEGS);
|
||||
|
||||
ArrayList<RaceInLeaderboardDTO> raceColumns = new ArrayList<RaceInLeaderboardDTO>();
|
||||
|
||||
settings = new LeaderboardSettings(maneuverDetails, legDetails, raceDetails, raceColumns, true, 0l, 0l);
|
||||
} else {
|
||||
// anonymous user
|
||||
settings = getDefaultSettings();
|
||||
}
|
||||
return settings;
|
||||
}
|
||||
|
||||
public static LeaderboardSettings getDefaultSettings() {
|
||||
ArrayList<DetailType> maneuverDetails = new ArrayList<DetailType>();
|
||||
maneuverDetails.add(DetailType.TACK);
|
||||
maneuverDetails.add(DetailType.JIBE);
|
||||
maneuverDetails.add(DetailType.PENALTY_CIRCLE);
|
||||
|
||||
ArrayList<DetailType> legDetails = new ArrayList<DetailType>();
|
||||
legDetails.add(DetailType.DISTANCE_TRAVELED);
|
||||
legDetails.add(DetailType.AVERAGE_SPEED_OVER_GROUND_IN_KNOTS);
|
||||
legDetails.add(DetailType.RANK_GAIN);
|
||||
|
||||
ArrayList<DetailType> raceDetails = new ArrayList<DetailType>();
|
||||
raceDetails.add(DetailType.DISPLAY_LEGS);
|
||||
|
||||
ArrayList<RaceInLeaderboardDTO> raceColumns = new ArrayList<RaceInLeaderboardDTO>();
|
||||
|
||||
return new LeaderboardSettings(maneuverDetails, legDetails, raceDetails, raceColumns, true, 0l, 0l);
|
||||
}
|
||||
}
|
||||
+3
-14
@@ -34,6 +34,7 @@ import com.sap.sailing.gwt.ui.client.Timer;
|
||||
import com.sap.sailing.gwt.ui.client.Timer.PlayModes;
|
||||
import com.sap.sailing.gwt.ui.leaderboard.LeaderboardPanel;
|
||||
import com.sap.sailing.gwt.ui.leaderboard.LeaderboardSettings;
|
||||
import com.sap.sailing.gwt.ui.leaderboard.LeaderboardSettingsFactory;
|
||||
import com.sap.sailing.gwt.ui.shared.EventDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.LegTimepointDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.RaceDTO;
|
||||
@@ -41,7 +42,6 @@ import com.sap.sailing.gwt.ui.shared.RegattaDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.UserDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.components.ComponentViewer;
|
||||
import com.sap.sailing.gwt.ui.shared.panels.BreadcrumbPanel;
|
||||
import com.sap.sailing.gwt.ui.usermanagement.UserRoles;
|
||||
|
||||
/**
|
||||
* A panel showing a list of components visualizing a race from the events announced by calls to {@link #fillEvents(List)}.
|
||||
@@ -92,8 +92,6 @@ public class RaceBoardPanel extends FormPanel implements EventDisplayer, RaceSel
|
||||
ArrayList<Pair<String, String>> breadcrumbLinksData = new ArrayList<Pair<String, String>>();
|
||||
String debugParam = Window.Location.getParameter("gwt.codesvr");
|
||||
|
||||
getUserSpecificLeaderBoardSettings(user);
|
||||
|
||||
if(leaderboardGroupName != null) {
|
||||
String link = "/gwt/Spectator.html?leaderboardGroupName=" + leaderboardGroupName;
|
||||
if(debugParam != null && !debugParam.isEmpty())
|
||||
@@ -107,7 +105,8 @@ public class RaceBoardPanel extends FormPanel implements EventDisplayer, RaceSel
|
||||
componentsNavigationPanel.addStyleName("raceBoardNavigation");
|
||||
|
||||
// create the default leaderboard and select the right race
|
||||
LeaderboardPanel leaderboardPanel = new LeaderboardPanel(sailingService, selectedRaceIdentifier, competitorSelectionModel,
|
||||
LeaderboardSettings leaderBoardSettings = LeaderboardSettingsFactory.getSettingsForUserRole(user);
|
||||
LeaderboardPanel leaderboardPanel = new LeaderboardPanel(sailingService, leaderBoardSettings, selectedRaceIdentifier, competitorSelectionModel,
|
||||
timer, leaderboardName, leaderboardGroupName, errorReporter, stringMessages);
|
||||
|
||||
CollapsableComponentViewer<LeaderboardSettings> leaderboardViewer = new CollapsableComponentViewer<LeaderboardSettings>(
|
||||
@@ -141,16 +140,6 @@ public class RaceBoardPanel extends FormPanel implements EventDisplayer, RaceSel
|
||||
timePanel = new TimePanel(timer, stringMessages);
|
||||
}
|
||||
|
||||
private LeaderboardSettings getUserSpecificLeaderBoardSettings(UserDTO user)
|
||||
{
|
||||
LeaderboardSettings settings = null;
|
||||
if (user != null && user.roles.contains(UserRoles.moderator.name())) {
|
||||
|
||||
} else {
|
||||
// anonymous user
|
||||
}
|
||||
return settings;
|
||||
}
|
||||
|
||||
private void addComponentViewerMenuEntry(final ComponentViewer c) {
|
||||
Anchor menuEntry = new Anchor(c.getViewerName());
|
||||
|
||||
+34
@@ -69,6 +69,7 @@ import com.sap.sailing.domain.common.WindSource;
|
||||
import com.sap.sailing.domain.common.impl.DegreeBearingImpl;
|
||||
import com.sap.sailing.domain.common.impl.DegreePosition;
|
||||
import com.sap.sailing.domain.common.impl.KilometersPerHourSpeedImpl;
|
||||
import com.sap.sailing.domain.common.impl.Util;
|
||||
import com.sap.sailing.domain.common.impl.Util.Pair;
|
||||
import com.sap.sailing.domain.leaderboard.Leaderboard;
|
||||
import com.sap.sailing.domain.leaderboard.Leaderboard.Entry;
|
||||
@@ -754,6 +755,39 @@ public class SailingServiceImpl extends RemoteServiceServlet implements SailingS
|
||||
Iterable<TrackedLeg> trackedLegs = trackedRace.getTrackedLegs();
|
||||
int i = 1;
|
||||
for (TrackedLeg trackedLeg : trackedLegs) {
|
||||
if(i == 1) {
|
||||
// try to calculate the point in time where all boats passed the start line in a small time frame
|
||||
Waypoint from = trackedLeg.getLeg().getFrom();
|
||||
Iterable<MarkPassing> markPassings = trackedRace.getMarkPassingsInOrder(from);
|
||||
int markPassingsCount = Util.size(markPassings);
|
||||
|
||||
if(markPassings != null && markPassingsCount >= 4) {
|
||||
long maxTimeFrameInMs = 60 * 1000; // = 1 minute
|
||||
Iterator<MarkPassing> iterator = markPassings.iterator();
|
||||
long currentTimeToCheck = 0;
|
||||
int enoughCompetitors = markPassingsCount / 2;
|
||||
int currentCompetitorsInTime = 0;
|
||||
|
||||
while (iterator.hasNext()) {
|
||||
MarkPassing currentMarkPassing = iterator.next();
|
||||
long diff = currentMarkPassing.getTimePoint().asMillis() - currentTimeToCheck;
|
||||
if(diff > maxTimeFrameInMs) {
|
||||
// reset the check
|
||||
currentCompetitorsInTime = 0;
|
||||
currentTimeToCheck = currentMarkPassing.getTimePoint().asMillis();
|
||||
} else {
|
||||
currentCompetitorsInTime++;
|
||||
if(currentCompetitorsInTime == enoughCompetitors) {
|
||||
LegTimepointDTO legTimepointDTO = new LegTimepointDTO("L0");
|
||||
legTimepointDTO.firstPassingDate = currentMarkPassing.getTimePoint().asDate();
|
||||
result.add(legTimepointDTO);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Waypoint to = trackedLeg.getLeg().getTo();
|
||||
Iterable<MarkPassing> markPassings = trackedRace.getMarkPassingsInOrder(to);
|
||||
if(markPassings != null) {
|
||||
|
||||
@@ -13,6 +13,9 @@ public class UserDTO implements IsSerializable {
|
||||
|
||||
public List<String> roles;
|
||||
|
||||
public UserDTO() {
|
||||
}
|
||||
|
||||
public UserDTO(String principalName) {
|
||||
super();
|
||||
this.principalName = principalName;
|
||||
|
||||
+1
-1
@@ -479,7 +479,7 @@ public class OverviewEventPanel extends AbstractEventPanel {
|
||||
}
|
||||
currentLeaderboard = boardToDisplay;
|
||||
CompetitorSelectionModel competitorSelectionModel = new CompetitorSelectionModel(true);
|
||||
displayedLeaderboardPanel = new LeaderboardPanel(sailingService, competitorSelectionModel,
|
||||
displayedLeaderboardPanel = new LeaderboardPanel(sailingService, null, competitorSelectionModel,
|
||||
currentLeaderboard.name, null, errorReporter, stringConstants);
|
||||
leaderboardPanel.add(displayedLeaderboardPanel);
|
||||
}
|
||||
|
||||
+1
@@ -47,6 +47,7 @@
|
||||
<source path='components'/>
|
||||
<source path='adminconsole'/>
|
||||
<source path='leaderboard'/>
|
||||
<source path='usermanagement'/>
|
||||
<source path='shared'/>
|
||||
<source path='test'/>
|
||||
</module>
|
||||
+1
@@ -34,5 +34,6 @@
|
||||
<source path='raceboard'/>
|
||||
<source path='leaderboard'/>
|
||||
<source path='adminconsole'/>
|
||||
<source path='usermanagement'/>
|
||||
<source path='shared'/>
|
||||
</module>
|
||||
+1
@@ -37,5 +37,6 @@
|
||||
<source path='spectator'/>
|
||||
<source path='leaderboard'/>
|
||||
<source path='adminconsole'/>
|
||||
<source path='usermanagement'/>
|
||||
<source path='test'/>
|
||||
</module>
|
||||
Reference in new issue
Block a user