- added new LeaderboardSettingsFactory for creating different kind of settings

This commit is contained in:
fmittag committed 2012-02-07 18:24:17 +01:00
1 parent 6000aed5f1
commit 9299fa1210
11 files changed
+123 -33

No files matched your search

@@ -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);
@@ -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
@@ -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);
@@ -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);
}
}
@@ -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());
@@ -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;
@@ -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);
}
@@ -47,6 +47,7 @@
<source path='components'/>
<source path='adminconsole'/>
<source path='leaderboard'/>
<source path='usermanagement'/>
<source path='shared'/>
<source path='test'/>
</module>
@@ -34,5 +34,6 @@
<source path='raceboard'/>
<source path='leaderboard'/>
<source path='adminconsole'/>
<source path='usermanagement'/>
<source path='shared'/>
</module>
@@ -37,5 +37,6 @@
<source path='spectator'/>
<source path='leaderboard'/>
<source path='adminconsole'/>
<source path='usermanagement'/>
<source path='test'/>
</module>