started to add race identifier to leaderboard race column DTO

This commit is contained in:
Axel Uhl committed 2012-01-20 13:01:13 +01:00
1 parent 9edd08373a
commit 58a3ddbd19
4 files changed
+80 -66

No files matched your search

@@ -681,7 +681,7 @@ public class LeaderboardConfigPanel extends FormPanel implements EventDisplayer,
// new Pair<Boolean, Boolean>(/* medal race */ columnNameAndMedalRace.getB(),
// /* tracked */ false));
selectedLeaderboard.addRace(result.getRaceColumnName(), result.isMedalRace(),
false);
null);
selectedLeaderboard.invalidateCompetitorOrdering();
}
});
@@ -746,7 +746,7 @@ public class LeaderboardConfigPanel extends FormPanel implements EventDisplayer,
public void changeTrackingRace(EventNameAndRaceName eventNameAndRaceName, boolean isTracked) {
for (RaceInLeaderboardDTO race : raceColumnList.getList()) {
if (race.getRaceColumnName().equals(eventNameAndRaceName.getRaceName())) {
race.setTrackedRace(isTracked);
race.setRaceIdentifier(eventNameAndRaceName);
}
}
raceColumnList.refresh();
@@ -189,7 +189,7 @@ public class SailingServiceImpl extends RemoteServiceServlet implements SailingS
result.name = leaderboard.getName();
result.competitorDisplayNames = new HashMap<CompetitorDTO, String>();
for (RaceInLeaderboard raceColumn : leaderboard.getRaceColumns()) {
result.addRace(raceColumn.getName(), raceColumn.isMedalRace(), raceColumn.getTrackedRace() != null);
result.addRace(raceColumn.getName(), raceColumn.isMedalRace(), raceColumn.getTrackedRace());
}
result.rows = new HashMap<CompetitorDTO, LeaderboardRowDTO>();
result.hasCarriedPoints = leaderboard.hasCarriedPoints();
@@ -891,7 +891,7 @@ public class SailingServiceImpl extends RemoteServiceServlet implements SailingS
dao.name = leaderboard.getName();
dao.competitorDisplayNames = new HashMap<CompetitorDTO, String>();
for (RaceInLeaderboard raceColumn : leaderboard.getRaceColumns()) {
dao.addRace(raceColumn.getName(), raceColumn.isMedalRace(), raceColumn.getTrackedRace() != null);
dao.addRace(raceColumn.getName(), raceColumn.isMedalRace(), raceColumn.getTrackedRace());
}
dao.hasCarriedPoints = leaderboard.hasCarriedPoints();
dao.discardThresholds = leaderboard.getResultDiscardingRule().getDiscardIndexResultsStartingWithHowManyRaces();
@@ -7,6 +7,9 @@ import java.util.List;
import java.util.Map;
import com.google.gwt.user.client.rpc.IsSerializable;
import com.sap.sailing.domain.tracking.TrackedRace;
import com.sap.sailing.server.api.EventNameAndRaceName;
import com.sap.sailing.server.api.RaceIdentifier;
/**
* Captures the serializable properties of a leaderboard which in particular has the competitors, any optional display
@@ -24,17 +27,17 @@ public class LeaderboardDTO implements IsSerializable {
public Map<CompetitorDTO, LeaderboardRowDTO> rows;
public boolean hasCarriedPoints;
public int[] discardThresholds;
private boolean competitorsOrderedAccordingToTotalRank;
private final transient TotalRankingComparator totalRankingComparator;
public LeaderboardDTO() {
totalRankingComparator = new TotalRankingComparator();
competitorsOrderedAccordingToTotalRank = false;
races = new ArrayList<RaceInLeaderboardDTO>();
}
public String getDisplayName(CompetitorDTO competitor) {
if (competitorDisplayNames == null || competitorDisplayNames.get(competitor) == null) {
return competitor.name;
@@ -42,19 +45,19 @@ public class LeaderboardDTO implements IsSerializable {
return competitorDisplayNames.get(competitor);
}
}
public Comparator<LeaderboardRowDTO> getTotalRankingComparator() {
return totalRankingComparator;
}
public Comparator<LeaderboardRowDTO> getMedalRaceComparator(String medalRaceName) {
return new MedalRaceComparator(medalRaceName);
}
/**
* If the race whose name is specified in <code>raceName</code> has any competitor who has valid {@link LeaderboardEntryDTO#legDetails}
* for that race, the number of entries in the leg details is returned, telling the number of legs that the race has. Otherwise,
* -1 is returned.
* If the race whose name is specified in <code>raceName</code> has any competitor who has valid
* {@link LeaderboardEntryDTO#legDetails} for that race, the number of entries in the leg details is returned,
* telling the number of legs that the race has. Otherwise, -1 is returned.
*/
public int getLegCount(String raceName) {
for (LeaderboardRowDTO row : rows.values()) {
@@ -66,8 +69,8 @@ public class LeaderboardDTO implements IsSerializable {
}
/**
* Tells if the <code>competitor</code> scored (and therefore presumably participated) in a medal race
* represented in this leaderboard.
* Tells if the <code>competitor</code> scored (and therefore presumably participated) in a medal race represented
* in this leaderboard.
*/
public boolean scoredInMedalRace(CompetitorDTO competitor) {
LeaderboardRowDTO row = rows.get(competitor);
@@ -78,9 +81,9 @@ public class LeaderboardDTO implements IsSerializable {
}
return false;
}
public int getTotalPoints(LeaderboardRowDTO object) {
int totalPoints = object.carriedPoints==null?0:object.carriedPoints;
int totalPoints = object.carriedPoints == null ? 0 : object.carriedPoints;
for (LeaderboardEntryDTO e : object.fieldsByRaceName.values()) {
totalPoints += e.totalPoints;
}
@@ -136,10 +139,10 @@ public class LeaderboardDTO implements IsSerializable {
return result;
}
}
private class MedalRaceComparator implements Comparator<LeaderboardRowDTO> {
private final String medalRaceName;
public MedalRaceComparator(String medalRaceName) {
this.medalRaceName = medalRaceName;
}
@@ -150,7 +153,8 @@ public class LeaderboardDTO implements IsSerializable {
if (scoredInMedalRace(o1.competitor)) {
if (scoredInMedalRace(o2.competitor)) {
// both scored in medal race
result = o1.fieldsByRaceName.get(medalRaceName).netPoints - o2.fieldsByRaceName.get(medalRaceName).netPoints;
result = o1.fieldsByRaceName.get(medalRaceName).netPoints
- o2.fieldsByRaceName.get(medalRaceName).netPoints;
} else {
// only o1 scored in medal race, so o1 scores better = "less"
result = -1;
@@ -163,16 +167,16 @@ public class LeaderboardDTO implements IsSerializable {
// neither one scored in any medal race; to be considered equal for medal race comparison
result = 0;
}
}
return result;
}
}
/**
* To be called after something was incrementally altered in this leaderboard that may affect the
* competitor ranking, in particular anything score related. Probably the only change that wouldn't
* affect the ordering is a name change.
* To be called after something was incrementally altered in this leaderboard that may affect the competitor
* ranking, in particular anything score related. Probably the only change that wouldn't affect the ordering is a
* name change.
*/
public void invalidateCompetitorOrdering() {
competitorsOrderedAccordingToTotalRank = false;
@@ -205,8 +209,8 @@ public class LeaderboardDTO implements IsSerializable {
}
/**
* Find the name of the last race in {@link #raceNamesAndMedalRaceAndTracked}'s keys for which both, <code>c1</code> and
* <code>c2</code> have been assigned a score.
* Find the name of the last race in {@link #raceNamesAndMedalRaceAndTracked}'s keys for which both, <code>c1</code>
* and <code>c2</code> have been assigned a score.
*/
private String getNameOfLastRaceSoFar(CompetitorDTO c1, CompetitorDTO c2) {
String nameOfLastRaceSoFar = null;
@@ -248,73 +252,81 @@ public class LeaderboardDTO implements IsSerializable {
});
competitorsOrderedAccordingToTotalRank = true;
}
return competitors.indexOf(competitor)+1;
return competitors.indexOf(competitor) + 1;
};
public boolean raceIsTracked(String raceColumnName){
for (RaceInLeaderboardDTO race : races){
if (race.getRaceColumnName().equals(raceColumnName)){
public boolean raceIsTracked(String raceColumnName) {
for (RaceInLeaderboardDTO race : races) {
if (race.getRaceColumnName().equals(raceColumnName)) {
return race.isTrackedRace();
}
}
return false;
return false;
}
public boolean raceIsMedalRace(String raceColumnName){
public boolean raceIsMedalRace(String raceColumnName) {
return getRaceInLeaderboardByName(raceColumnName).isMedalRace();
}
public void addRace(String raceColumnName, boolean medalRace, boolean trackedRace){
public void addRace(String raceColumnName, boolean medalRace, TrackedRace trackedRace) {
RaceInLeaderboardDTO raceInLeaderboardDTO = new RaceInLeaderboardDTO();
raceInLeaderboardDTO.setRaceColumnName(raceColumnName);
raceInLeaderboardDTO.setMedalRace(medalRace);
raceInLeaderboardDTO.setTrackedRace(trackedRace);
if (trackedRace != null) {
RaceIdentifier raceIdentifier = new EventNameAndRaceName(
trackedRace.getTrackedEvent().getEvent().getName(), trackedRace.getRace().getName());
raceInLeaderboardDTO.setRaceIdentifier(raceIdentifier);
}
races.add(raceInLeaderboardDTO);
}
public void addRaceAt(String raceColumnName, boolean medalRace, boolean trackedRace, int index){
public void addRaceAt(String raceColumnName, boolean medalRace, TrackedRace trackedRace, int index) {
RaceInLeaderboardDTO raceInLeaderboardDTO = new RaceInLeaderboardDTO();
raceInLeaderboardDTO.setRaceColumnName(raceColumnName);
raceInLeaderboardDTO.setMedalRace(medalRace);
raceInLeaderboardDTO.setTrackedRace(trackedRace);
if (trackedRace != null) {
RaceIdentifier raceIdentifier = new EventNameAndRaceName(
trackedRace.getTrackedEvent().getEvent().getName(), trackedRace.getRace().getName());
raceInLeaderboardDTO.setRaceIdentifier(raceIdentifier);
}
races.add(index, raceInLeaderboardDTO);
}
public void removeRace(String raceColumnName){
races.remove(getRaceInLeaderboardByName(raceColumnName));
public void removeRace(String raceColumnName) {
races.remove(getRaceInLeaderboardByName(raceColumnName));
}
public void renameRace(String oldName, String newName){
public void renameRace(String oldName, String newName) {
RaceInLeaderboardDTO race = getRaceInLeaderboardByName(oldName);
race.setRaceColumnName(newName);
race.setRaceColumnName(newName);
}
private RaceInLeaderboardDTO getRaceInLeaderboardByName(String raceColumnName) {
for (RaceInLeaderboardDTO race : races){
if (race.getRaceColumnName().equals(raceColumnName)){
for (RaceInLeaderboardDTO race : races) {
if (race.getRaceColumnName().equals(raceColumnName)) {
return race;
}
}
return null;
}
public List<String> getRaceColumnNameList(){
public List<String> getRaceColumnNameList() {
List<String> raceColumnNames = new ArrayList<String>();
for (RaceInLeaderboardDTO raceInLeaderboardDTO : races){
for (RaceInLeaderboardDTO raceInLeaderboardDTO : races) {
raceColumnNames.add(raceInLeaderboardDTO.getRaceColumnName());
}
return raceColumnNames;
return raceColumnNames;
}
public List<RaceInLeaderboardDTO> getRaceInLeaderboardList(){
public List<RaceInLeaderboardDTO> getRaceInLeaderboardList() {
return races;
}
public List<RaceInLeaderboardDTO> getRaceList(){
public List<RaceInLeaderboardDTO> getRaceList() {
return races;
}
public boolean raceListContains(String raceColumnName) {
return getRaceInLeaderboardByName(raceColumnName) != null;
}
@@ -340,8 +352,8 @@ public class LeaderboardDTO implements IsSerializable {
}
}
}
public void setIsMedalRace(String raceColumnName, boolean medalRace){
public void setIsMedalRace(String raceColumnName, boolean medalRace) {
getRaceInLeaderboardByName(raceColumnName).setMedalRace(medalRace);
}
@@ -1,11 +1,13 @@
package com.sap.sailing.gwt.ui.shared;
import com.google.gwt.user.client.rpc.IsSerializable;
import com.sap.sailing.server.api.RaceIdentifier;
public class RaceInLeaderboardDTO implements IsSerializable {
private String raceColumnName;
private boolean medalRace;
private boolean trackedRace;
private RaceIdentifier trackedRaceIdentifier;
public String getRaceColumnName() {
return raceColumnName;
}
@@ -19,10 +21,10 @@ public class RaceInLeaderboardDTO implements IsSerializable {
this.medalRace = medalRace;
}
public boolean isTrackedRace() {
return trackedRace;
return trackedRaceIdentifier != null;
}
public void setTrackedRace(boolean trackedRace) {
this.trackedRace = trackedRace;
public void setRaceIdentifier(RaceIdentifier raceIdentifier) {
this.trackedRaceIdentifier = raceIdentifier;
}