diff --git a/java/com.sap.sailing.domain.common/src/com/sap/sailing/domain/common/MaxPointsReason.java b/java/com.sap.sailing.domain.common/src/com/sap/sailing/domain/common/MaxPointsReason.java new file mode 100755 index 00000000000..8ef198681a2 --- /dev/null +++ b/java/com.sap.sailing.domain.common/src/com/sap/sailing/domain/common/MaxPointsReason.java @@ -0,0 +1,29 @@ +package com.sap.sailing.domain.common; + +/** + * The reasons why a competitor may get the maximum number of points, usually equaling the + * number of competitors enlisted for the regatta plus one. + * + * @author Axel Uhl (d043530) + * + */ +public enum MaxPointsReason { + /** The competitor finished the race properly */ + NONE, + /** Did Not Start */ + DNS, + /** Did Not Finish */ + DNF, + /** DiSQualified */ + DSQ, + /** On Course Side (jumped the gun) */ + OCS, + /** Disqualified, non-discardable */ + DND, + /** Black Flag Disqualified */ + BFD, + /** Did Not Compete */ + DNC, + /** Retired After Finishing */ + RAF +} \ No newline at end of file diff --git a/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/DomainObjectFactoryImpl.java b/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/DomainObjectFactoryImpl.java index 009447a6e62..aaf6f94fefc 100644 --- a/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/DomainObjectFactoryImpl.java +++ b/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/DomainObjectFactoryImpl.java @@ -21,6 +21,7 @@ import com.sap.sailing.domain.base.SpeedWithBearing; import com.sap.sailing.domain.base.impl.KnotSpeedWithBearingImpl; import com.sap.sailing.domain.base.impl.MillisecondsTimePoint; import com.sap.sailing.domain.common.EventNameAndRaceName; +import com.sap.sailing.domain.common.MaxPointsReason; import com.sap.sailing.domain.common.Position; import com.sap.sailing.domain.common.RaceIdentifier; import com.sap.sailing.domain.common.TimePoint; @@ -33,7 +34,6 @@ import com.sap.sailing.domain.common.impl.WindSourceWithAdditionalID; import com.sap.sailing.domain.leaderboard.Leaderboard; import com.sap.sailing.domain.leaderboard.LeaderboardGroup; import com.sap.sailing.domain.leaderboard.RaceInLeaderboard; -import com.sap.sailing.domain.leaderboard.ScoreCorrection.MaxPointsReason; import com.sap.sailing.domain.leaderboard.SettableScoreCorrection; import com.sap.sailing.domain.leaderboard.ThresholdBasedResultDiscardingRule; import com.sap.sailing.domain.leaderboard.impl.LeaderboardGroupImpl; diff --git a/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/LeaderboardImplWithDelayedCarriedPoints.java b/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/LeaderboardImplWithDelayedCarriedPoints.java index ae2831ec7a6..57aacab2d49 100755 --- a/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/LeaderboardImplWithDelayedCarriedPoints.java +++ b/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/LeaderboardImplWithDelayedCarriedPoints.java @@ -5,9 +5,9 @@ import java.util.Iterator; import java.util.Map; import com.sap.sailing.domain.base.Competitor; +import com.sap.sailing.domain.common.MaxPointsReason; import com.sap.sailing.domain.leaderboard.Leaderboard; import com.sap.sailing.domain.leaderboard.RaceInLeaderboard; -import com.sap.sailing.domain.leaderboard.ScoreCorrection.MaxPointsReason; import com.sap.sailing.domain.leaderboard.SettableScoreCorrection; import com.sap.sailing.domain.leaderboard.ThresholdBasedResultDiscardingRule; import com.sap.sailing.domain.leaderboard.impl.LeaderboardImpl; diff --git a/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/MongoObjectFactoryImpl.java b/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/MongoObjectFactoryImpl.java index 6e6ba82e1e2..fe01107a674 100755 --- a/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/MongoObjectFactoryImpl.java +++ b/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/MongoObjectFactoryImpl.java @@ -15,13 +15,13 @@ import com.sap.sailing.domain.base.RaceDefinition; import com.sap.sailing.domain.base.SpeedWithBearing; import com.sap.sailing.domain.base.Timed; import com.sap.sailing.domain.common.Bearing; +import com.sap.sailing.domain.common.MaxPointsReason; import com.sap.sailing.domain.common.RaceIdentifier; import com.sap.sailing.domain.common.Speed; import com.sap.sailing.domain.common.WindSource; import com.sap.sailing.domain.leaderboard.Leaderboard; import com.sap.sailing.domain.leaderboard.LeaderboardGroup; import com.sap.sailing.domain.leaderboard.RaceInLeaderboard; -import com.sap.sailing.domain.leaderboard.ScoreCorrection.MaxPointsReason; import com.sap.sailing.domain.leaderboard.SettableScoreCorrection; import com.sap.sailing.domain.persistence.MongoObjectFactory; import com.sap.sailing.domain.tracking.Positioned; diff --git a/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/LeaderboardOfflineTest.java b/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/LeaderboardOfflineTest.java index b5193890672..c62dd8d8c6b 100755 --- a/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/LeaderboardOfflineTest.java +++ b/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/LeaderboardOfflineTest.java @@ -22,13 +22,13 @@ import com.sap.sailing.domain.base.impl.MillisecondsTimePoint; import com.sap.sailing.domain.base.impl.NationalityImpl; import com.sap.sailing.domain.base.impl.PersonImpl; import com.sap.sailing.domain.base.impl.TeamImpl; +import com.sap.sailing.domain.common.MaxPointsReason; import com.sap.sailing.domain.common.NoWindException; import com.sap.sailing.domain.common.TimePoint; 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.RaceInLeaderboard; -import com.sap.sailing.domain.leaderboard.ScoreCorrection.MaxPointsReason; import com.sap.sailing.domain.leaderboard.impl.LeaderboardImpl; import com.sap.sailing.domain.leaderboard.impl.ResultDiscardingRuleImpl; import com.sap.sailing.domain.leaderboard.impl.ScoreCorrectionImpl; diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/Leaderboard.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/Leaderboard.java index 899d8eed4fe..5b0a822da34 100644 --- a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/Leaderboard.java +++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/Leaderboard.java @@ -3,11 +3,11 @@ package com.sap.sailing.domain.leaderboard; import java.util.Map; import com.sap.sailing.domain.base.Competitor; +import com.sap.sailing.domain.common.MaxPointsReason; import com.sap.sailing.domain.common.Named; import com.sap.sailing.domain.common.NoWindException; import com.sap.sailing.domain.common.TimePoint; import com.sap.sailing.domain.common.impl.Util.Pair; -import com.sap.sailing.domain.leaderboard.ScoreCorrection.MaxPointsReason; import com.sap.sailing.domain.tracking.TrackedRace; /** diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/ScoreCorrection.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/ScoreCorrection.java index 5df62fe0f46..9acbac04ea9 100755 --- a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/ScoreCorrection.java +++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/ScoreCorrection.java @@ -1,6 +1,7 @@ package com.sap.sailing.domain.leaderboard; import com.sap.sailing.domain.base.Competitor; +import com.sap.sailing.domain.common.MaxPointsReason; import com.sap.sailing.domain.common.TimePoint; import com.sap.sailing.domain.tracking.TrackedRace; @@ -15,34 +16,6 @@ import com.sap.sailing.domain.tracking.TrackedRace; * */ public interface ScoreCorrection { - /** - * The reasons why a competitor may get the maximum number of points, usually equaling the - * number of competitors enlisted for the regatta plus one. - * - * @author Axel Uhl (d043530) - * - */ - enum MaxPointsReason { - /** The competitor finished the race properly */ - NONE, - /** Did Not Start */ - DNS, - /** Did Not Finish */ - DNF, - /** DiSQualified */ - DSQ, - /** On Course Side (jumped the gun) */ - OCS, - /** Disqualified, non-discardable */ - DND, - /** Black Flag Disqualified */ - BFD, - /** Did Not Compete */ - DNC, - /** Retired After Finishing */ - RAF - }; - public interface Result { int getCorrectedScore(); MaxPointsReason getMaxPointsReason(); diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/SettableScoreCorrection.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/SettableScoreCorrection.java index 14e2d8a8020..b4285aee737 100755 --- a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/SettableScoreCorrection.java +++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/SettableScoreCorrection.java @@ -1,6 +1,7 @@ package com.sap.sailing.domain.leaderboard; import com.sap.sailing.domain.base.Competitor; +import com.sap.sailing.domain.common.MaxPointsReason; public interface SettableScoreCorrection extends ScoreCorrection { diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/impl/LeaderboardImpl.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/impl/LeaderboardImpl.java index aaf96c605d7..41e387f258b 100644 --- a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/impl/LeaderboardImpl.java +++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/impl/LeaderboardImpl.java @@ -9,6 +9,7 @@ import java.util.Map; import java.util.Set; import com.sap.sailing.domain.base.Competitor; +import com.sap.sailing.domain.common.MaxPointsReason; import com.sap.sailing.domain.common.Named; import com.sap.sailing.domain.common.NoWindException; import com.sap.sailing.domain.common.TimePoint; @@ -16,7 +17,6 @@ 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.RaceInLeaderboard; -import com.sap.sailing.domain.leaderboard.ScoreCorrection.MaxPointsReason; import com.sap.sailing.domain.leaderboard.ScoreCorrection.Result; import com.sap.sailing.domain.leaderboard.SettableScoreCorrection; import com.sap.sailing.domain.leaderboard.ThresholdBasedResultDiscardingRule; diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/impl/ScoreCorrectionImpl.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/impl/ScoreCorrectionImpl.java index 133dcbcd772..d53b2abf8e5 100755 --- a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/impl/ScoreCorrectionImpl.java +++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/impl/ScoreCorrectionImpl.java @@ -4,11 +4,11 @@ import java.util.HashMap; import java.util.Map; import com.sap.sailing.domain.base.Competitor; +import com.sap.sailing.domain.common.MaxPointsReason; import com.sap.sailing.domain.common.TimePoint; import com.sap.sailing.domain.common.impl.Util; import com.sap.sailing.domain.common.impl.Util.Pair; import com.sap.sailing.domain.leaderboard.RaceInLeaderboard; -import com.sap.sailing.domain.leaderboard.ScoreCorrection; import com.sap.sailing.domain.leaderboard.SettableScoreCorrection; import com.sap.sailing.domain.tracking.TrackedRace; @@ -33,7 +33,7 @@ public class ScoreCorrectionImpl implements SettableScoreCorrection { private final Map, Integer> correctedScores; public ScoreCorrectionImpl() { - this.maxPointsReasons = new HashMap, ScoreCorrection.MaxPointsReason>(); + this.maxPointsReasons = new HashMap, MaxPointsReason>(); this.correctedScores = new HashMap, Integer>(); } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/SailingService.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/SailingService.java index af75da8c20e..31574605b14 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/SailingService.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/SailingService.java @@ -10,6 +10,7 @@ import com.google.gwt.user.client.rpc.RemoteServiceRelativePath; import com.sap.sailing.domain.common.DetailType; import com.sap.sailing.domain.common.EventAndRaceIdentifier; import com.sap.sailing.domain.common.EventIdentifier; +import com.sap.sailing.domain.common.MaxPointsReason; import com.sap.sailing.domain.common.NoWindException; import com.sap.sailing.domain.common.RaceIdentifier; import com.sap.sailing.domain.common.WindSource; @@ -122,10 +123,11 @@ public interface SailingService extends RemoteService { void updateLeaderboardCarryValue(String leaderboardName, String competitorIdAsString, Integer carriedPoints); /** - * @return the new net points in {@link Pair#getA()} and the new total points in {@link Pair#getB()} + * @return the new net points in {@link Pair#getA()} and the new total points in {@link Pair#getB()} for time point + * date after the max points reason has been updated to maxPointsReasonAsString. */ Pair updateLeaderboardMaxPointsReason(String leaderboardName, String competitorIdAsString, - String raceColumnName, String maxPointsReasonAsString, Date date) throws NoWindException; + String raceColumnName, MaxPointsReason maxPointsReason, Date date) throws NoWindException; Pair updateLeaderboardScoreCorrection(String leaderboardName, String competitorIdAsString, String raceName, Integer correctedScore, Date date) throws NoWindException; diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/SailingServiceAsync.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/SailingServiceAsync.java index 818b06a5117..8c0bc9d8d2a 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/SailingServiceAsync.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/SailingServiceAsync.java @@ -9,6 +9,7 @@ import com.google.gwt.user.client.rpc.AsyncCallback; import com.sap.sailing.domain.common.DetailType; import com.sap.sailing.domain.common.EventAndRaceIdentifier; import com.sap.sailing.domain.common.EventIdentifier; +import com.sap.sailing.domain.common.MaxPointsReason; import com.sap.sailing.domain.common.RaceIdentifier; import com.sap.sailing.domain.common.WindSource; import com.sap.sailing.domain.common.impl.Util.Pair; @@ -209,7 +210,7 @@ public interface SailingServiceAsync { void updateLeaderboardCarryValue(String leaderboardName, String competitorID, Integer carriedPoints, AsyncCallback callback); void updateLeaderboardMaxPointsReason(String leaderboardName, String competitorID, String raceColumnName, - String maxPointsReasonAsString, Date date, AsyncCallback> asyncCallback); + MaxPointsReason maxPointsReason, Date date, AsyncCallback> asyncCallback); void updateLeaderboardScoreCorrection(String leaderboardName, String competitorID, String raceName, Integer correctedScore, Date date, AsyncCallback> asyncCallback); diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/leaderboardedit/EditableLeaderboardPanel.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/leaderboardedit/EditableLeaderboardPanel.java index 280f6939eab..5e03fa5e2ce 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/leaderboardedit/EditableLeaderboardPanel.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/leaderboardedit/EditableLeaderboardPanel.java @@ -1,7 +1,6 @@ package com.sap.sailing.gwt.ui.leaderboardedit; import java.util.ArrayList; -import java.util.Arrays; import java.util.HashMap; import java.util.List; @@ -13,6 +12,7 @@ import com.google.gwt.cell.client.HasCell; import com.google.gwt.cell.client.SelectionCell; import com.google.gwt.safehtml.shared.SafeHtmlBuilder; import com.google.gwt.user.client.rpc.AsyncCallback; +import com.sap.sailing.domain.common.MaxPointsReason; import com.sap.sailing.domain.common.impl.Util.Pair; import com.sap.sailing.gwt.ui.actions.AsyncActionsExecutor; import com.sap.sailing.gwt.ui.client.CompetitorSelectionModel; @@ -143,7 +143,12 @@ public class EditableLeaderboardPanel extends LeaderboardPanel { public MaxPointsDropDownCellProvider(String raceName) { this.raceName = raceName; - dropDownCell = new SelectionCell(Arrays.asList(new String[] { "", "DNS", "DNF", "OCS", "DND", "RAF", "BFD", "DNC", "DSQ" })); + List selectionCellContents = new ArrayList(); + selectionCellContents.add(""); // represents "no" max points reason + for (MaxPointsReason maxPointReason : MaxPointsReason.values()) { + selectionCellContents.add(maxPointReason.name()); + } + dropDownCell = new SelectionCell(selectionCellContents); } @Override @@ -160,7 +165,7 @@ public class EditableLeaderboardPanel extends LeaderboardPanel { EditableLeaderboardPanel.this.getData()); getWhiteboardOwner().whiteboardProduced(whiteboard); getSailingService().updateLeaderboardMaxPointsReason(getLeaderboardName(), row.competitor.id, - raceName, value == null || value.trim().length() == 0 ? null : value.trim(), + raceName, value == null || value.trim().length() == 0 ? null : MaxPointsReason.valueOf(value.trim()), getLeaderboardDisplayDate(), new AsyncCallback>() { @Override public void onFailure(Throwable t) { diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/SailingServiceImpl.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/SailingServiceImpl.java index 3f6b5867e28..8990460e6cf 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/SailingServiceImpl.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/SailingServiceImpl.java @@ -58,6 +58,7 @@ import com.sap.sailing.domain.common.EventIdentifier; import com.sap.sailing.domain.common.EventName; import com.sap.sailing.domain.common.EventNameAndRaceName; import com.sap.sailing.domain.common.LegType; +import com.sap.sailing.domain.common.MaxPointsReason; import com.sap.sailing.domain.common.NoWindError; import com.sap.sailing.domain.common.NoWindException; import com.sap.sailing.domain.common.Placemark; @@ -80,7 +81,6 @@ import com.sap.sailing.domain.leaderboard.Leaderboard; import com.sap.sailing.domain.leaderboard.Leaderboard.Entry; import com.sap.sailing.domain.leaderboard.LeaderboardGroup; import com.sap.sailing.domain.leaderboard.RaceInLeaderboard; -import com.sap.sailing.domain.leaderboard.ScoreCorrection.MaxPointsReason; import com.sap.sailing.domain.leaderboard.impl.ResultDiscardingRuleImpl; import com.sap.sailing.domain.persistence.DomainObjectFactory; import com.sap.sailing.domain.persistence.MongoObjectFactory; @@ -1269,13 +1269,13 @@ public class SailingServiceImpl extends RemoteServiceServlet implements SailingS } @Override - public void updateLeaderboard(String leaderboardName, String newLeaderboardName, int[] newDiscardingThreasholds) { + public void updateLeaderboard(String leaderboardName, String newLeaderboardName, int[] newDiscardingThresholds) { if (!leaderboardName.equals(newLeaderboardName)) { getService().renameLeaderboard(leaderboardName, newLeaderboardName); } Leaderboard leaderboard = getService().getLeaderboardByName(newLeaderboardName); - if (!Arrays.equals(leaderboard.getResultDiscardingRule().getDiscardIndexResultsStartingWithHowManyRaces(), newDiscardingThreasholds)) { - leaderboard.setResultDiscardingRule(new ResultDiscardingRuleImpl(newDiscardingThreasholds)); + if (!Arrays.equals(leaderboard.getResultDiscardingRule().getDiscardIndexResultsStartingWithHowManyRaces(), newDiscardingThresholds)) { + leaderboard.setResultDiscardingRule(new ResultDiscardingRuleImpl(newDiscardingThresholds)); } getService().updateStoredLeaderboard(leaderboard); } @@ -1381,7 +1381,7 @@ public class SailingServiceImpl extends RemoteServiceServlet implements SailingS @Override public Pair updateLeaderboardMaxPointsReason(String leaderboardName, String competitorIdAsString, String raceColumnName, - String maxPointsReasonAsString, Date date) throws NoWindException { + MaxPointsReason maxPointsReason, Date date) throws NoWindException { TimePoint timePoint = new MillisecondsTimePoint(date); Leaderboard leaderboard = getService().getLeaderboardByName(leaderboardName); if (leaderboard != null) { @@ -1391,11 +1391,7 @@ public class SailingServiceImpl extends RemoteServiceServlet implements SailingS if (raceColumn == null) { throw new IllegalArgumentException("Didn't find race "+raceColumnName+" in leaderboard "+leaderboardName); } - if (maxPointsReasonAsString == null) { - leaderboard.getScoreCorrection().setMaxPointsReason(competitor, raceColumn, null); // null means "unset" - } else { - leaderboard.getScoreCorrection().setMaxPointsReason(competitor, raceColumn, MaxPointsReason.valueOf(maxPointsReasonAsString)); - } + leaderboard.getScoreCorrection().setMaxPointsReason(competitor, raceColumn, maxPointsReason); getService().updateStoredLeaderboard(leaderboard); Entry updatedEntry = leaderboard.getEntry(competitor, raceColumn, timePoint); return new Pair(updatedEntry.getNetPoints(), updatedEntry.getTotalPoints()); diff --git a/java/com.sap.sailing.mongodb.test/src/com/sap/sailing/mongodb/test/TestStoringAndRetrievingLeaderboards.java b/java/com.sap.sailing.mongodb.test/src/com/sap/sailing/mongodb/test/TestStoringAndRetrievingLeaderboards.java index f0650d8e9cb..0ac9ccd370b 100755 --- a/java/com.sap.sailing.mongodb.test/src/com/sap/sailing/mongodb/test/TestStoringAndRetrievingLeaderboards.java +++ b/java/com.sap.sailing.mongodb.test/src/com/sap/sailing/mongodb/test/TestStoringAndRetrievingLeaderboards.java @@ -16,10 +16,10 @@ import com.sap.sailing.domain.base.impl.CompetitorImpl; import com.sap.sailing.domain.base.impl.NationalityImpl; import com.sap.sailing.domain.base.impl.PersonImpl; import com.sap.sailing.domain.base.impl.TeamImpl; +import com.sap.sailing.domain.common.MaxPointsReason; import com.sap.sailing.domain.common.impl.Util; import com.sap.sailing.domain.leaderboard.Leaderboard; import com.sap.sailing.domain.leaderboard.RaceInLeaderboard; -import com.sap.sailing.domain.leaderboard.ScoreCorrection; import com.sap.sailing.domain.leaderboard.impl.LeaderboardImpl; import com.sap.sailing.domain.leaderboard.impl.ResultDiscardingRuleImpl; import com.sap.sailing.domain.leaderboard.impl.ScoreCorrectionImpl; @@ -97,7 +97,7 @@ public class TestStoringAndRetrievingLeaderboards extends AbstractMongoDBTest { final String leaderboardName = "TestLeaderboard"; final String raceColumnName1 = "My First Race 1"; final String raceColumnName2 = "My First Race 2"; - final ScoreCorrection.MaxPointsReason maxPointsReason = ScoreCorrection.MaxPointsReason.DNF; + final MaxPointsReason maxPointsReason = MaxPointsReason.DNF; final int[] discardIndexResultsStartingWithHowManyRaces = new int[] { 5, 8 }; LeaderboardImpl leaderboard = new LeaderboardImpl(leaderboardName, new ScoreCorrectionImpl(), new ResultDiscardingRuleImpl(discardIndexResultsStartingWithHowManyRaces)); @@ -124,7 +124,7 @@ public class TestStoringAndRetrievingLeaderboards extends AbstractMongoDBTest { final String raceColumnName1 = "My First Race 1"; final String raceColumnName2 = "My First Race 2"; final int correctedPoints = 2; - final ScoreCorrection.MaxPointsReason maxPointsReason = ScoreCorrection.MaxPointsReason.DNF; + final MaxPointsReason maxPointsReason = MaxPointsReason.DNF; final int[] discardIndexResultsStartingWithHowManyRaces = new int[] { 5, 8 }; LeaderboardImpl leaderboard = new LeaderboardImpl(leaderboardName, new ScoreCorrectionImpl(), new ResultDiscardingRuleImpl(discardIndexResultsStartingWithHowManyRaces)); diff --git a/java/com.sap.sailing.server/src/com/sap/sailing/server/operationaltransformation/UpdateLeaderboard.java b/java/com.sap.sailing.server/src/com/sap/sailing/server/operationaltransformation/UpdateLeaderboard.java new file mode 100755 index 00000000000..46e3b4b0f48 --- /dev/null +++ b/java/com.sap.sailing.server/src/com/sap/sailing/server/operationaltransformation/UpdateLeaderboard.java @@ -0,0 +1,45 @@ +package com.sap.sailing.server.operationaltransformation; + +import java.util.Arrays; + +import com.sap.sailing.domain.leaderboard.Leaderboard; +import com.sap.sailing.domain.leaderboard.impl.ResultDiscardingRuleImpl; +import com.sap.sailing.server.RacingEventService; + +public class UpdateLeaderboard extends AbstractLeaderboardOperation { + private static final long serialVersionUID = -8040361040050151768L; + private final String newLeaderboardName; + private final int[] newDiscardingThresholds; + + public UpdateLeaderboard(String leaderboardName, String newLeaderboardName, int[] newDiscardingThresholds) { + super(leaderboardName); + this.newLeaderboardName = newLeaderboardName; + this.newDiscardingThresholds = newDiscardingThresholds; + } + + @Override + public RacingEventServiceOperation transformClientOp(RacingEventServiceOperation serverOp) { + // TODO Auto-generated method stub + return null; + } + + @Override + public RacingEventServiceOperation transformServerOp(RacingEventServiceOperation clientOp) { + // TODO Auto-generated method stub + return null; + } + + @Override + public RacingEventService applyTo(RacingEventService toState) { + if (!getLeaderboardName().equals(newLeaderboardName)) { + toState.renameLeaderboard(getLeaderboardName(), newLeaderboardName); + } + Leaderboard leaderboard = toState.getLeaderboardByName(newLeaderboardName); + if (!Arrays.equals(leaderboard.getResultDiscardingRule().getDiscardIndexResultsStartingWithHowManyRaces(), newDiscardingThresholds)) { + leaderboard.setResultDiscardingRule(new ResultDiscardingRuleImpl(newDiscardingThresholds)); + } + toState.updateStoredLeaderboard(leaderboard); + return toState; + } + +} diff --git a/java/com.sap.sailing.server/src/com/sap/sailing/server/operationaltransformation/UpdateLeaderboardCarryValue.java b/java/com.sap.sailing.server/src/com/sap/sailing/server/operationaltransformation/UpdateLeaderboardCarryValue.java new file mode 100755 index 00000000000..07ab3f2c4aa --- /dev/null +++ b/java/com.sap.sailing.server/src/com/sap/sailing/server/operationaltransformation/UpdateLeaderboardCarryValue.java @@ -0,0 +1,51 @@ +package com.sap.sailing.server.operationaltransformation; + +import com.sap.sailing.domain.base.Competitor; +import com.sap.sailing.domain.leaderboard.Leaderboard; +import com.sap.sailing.server.RacingEventService; + +public class UpdateLeaderboardCarryValue extends AbstractLeaderboardOperation { + private static final long serialVersionUID = 5467731814788887426L; + private final String competitorIdAsString; + private final Integer newCarriedValue; + + public UpdateLeaderboardCarryValue(String leaderboardName, String competitorIdAsString, Integer newCarriedValue) { + super(leaderboardName); + this.competitorIdAsString = competitorIdAsString; + this.newCarriedValue = newCarriedValue; + } + + @Override + public RacingEventServiceOperation transformClientOp(RacingEventServiceOperation serverOp) { + // TODO Auto-generated method stub + return null; + } + + @Override + public RacingEventServiceOperation transformServerOp(RacingEventServiceOperation clientOp) { + // TODO Auto-generated method stub + return null; + } + + @Override + public RacingEventService applyTo(RacingEventService toState) { + Leaderboard leaderboard = toState.getLeaderboardByName(getLeaderboardName()); + if (leaderboard != null) { + Competitor competitor = leaderboard.getCompetitorByIdAsString(competitorIdAsString); + if (competitor != null) { + if (newCarriedValue == null) { + leaderboard.unsetCarriedPoints(competitor); + } else { + leaderboard.setCarriedPoints(competitor, newCarriedValue); + } + toState.updateStoredLeaderboard(leaderboard); + } else { + throw new IllegalArgumentException("Didn't find competitor ID "+competitorIdAsString+" in leaderboard "+getLeaderboardName()); + } + } else { + throw new IllegalArgumentException("Didn't find leaderboard "+getLeaderboardName()); + } + return toState; + } + +} diff --git a/java/com.sap.sailing.server/src/com/sap/sailing/server/operationaltransformation/UpdateLeaderboardMaxPointsReason.java b/java/com.sap.sailing.server/src/com/sap/sailing/server/operationaltransformation/UpdateLeaderboardMaxPointsReason.java new file mode 100755 index 00000000000..33d39e20f60 --- /dev/null +++ b/java/com.sap.sailing.server/src/com/sap/sailing/server/operationaltransformation/UpdateLeaderboardMaxPointsReason.java @@ -0,0 +1,54 @@ +package com.sap.sailing.server.operationaltransformation; + +import com.sap.sailing.domain.base.Competitor; +import com.sap.sailing.domain.common.MaxPointsReason; +import com.sap.sailing.domain.leaderboard.Leaderboard; +import com.sap.sailing.domain.leaderboard.RaceInLeaderboard; +import com.sap.sailing.server.RacingEventService; + +public class UpdateLeaderboardMaxPointsReason extends AbstractLeaderboardColumnOperation { + private static final long serialVersionUID = -492130952256848047L; + private final String competitorIdAsString; + private final MaxPointsReason newMaxPointsReason; + + public UpdateLeaderboardMaxPointsReason(String leaderboardName, String columnName, String competitorIdAsString, + MaxPointsReason newMaxPointsReason) { + super(leaderboardName, columnName); + this.competitorIdAsString = competitorIdAsString; + this.newMaxPointsReason = newMaxPointsReason; + } + + @Override + public RacingEventServiceOperation transformClientOp(RacingEventServiceOperation serverOp) { + // TODO Auto-generated method stub + return null; + } + + @Override + public RacingEventServiceOperation transformServerOp(RacingEventServiceOperation clientOp) { + // TODO Auto-generated method stub + return null; + } + + @Override + public RacingEventService applyTo(RacingEventService toState) { + Leaderboard leaderboard = toState.getLeaderboardByName(getLeaderboardName()); + if (leaderboard != null) { + Competitor competitor = leaderboard.getCompetitorByIdAsString(competitorIdAsString); + if (competitor != null) { + RaceInLeaderboard raceColumn = leaderboard.getRaceColumnByName(getColumnName()); + if (raceColumn == null) { + throw new IllegalArgumentException("Didn't find race "+getColumnName()+" in leaderboard "+getLeaderboardName()); + } + leaderboard.getScoreCorrection().setMaxPointsReason(competitor, raceColumn, newMaxPointsReason); + toState.updateStoredLeaderboard(leaderboard); + } else { + throw new IllegalArgumentException("Didn't find competitor with ID "+competitorIdAsString+" in leaderboard "+getLeaderboardName()); + } + } else { + throw new IllegalArgumentException("Didn't find leaderboard "+getLeaderboardName()); + } + return toState; + } + +} diff --git a/java/com.sap.sailing.server/src/com/sap/sailing/server/operationaltransformation/UpdateLeaderboardScoreCorrection.java b/java/com.sap.sailing.server/src/com/sap/sailing/server/operationaltransformation/UpdateLeaderboardScoreCorrection.java new file mode 100755 index 00000000000..16f8609b998 --- /dev/null +++ b/java/com.sap.sailing.server/src/com/sap/sailing/server/operationaltransformation/UpdateLeaderboardScoreCorrection.java @@ -0,0 +1,57 @@ +package com.sap.sailing.server.operationaltransformation; + +import com.sap.sailing.domain.base.Competitor; +import com.sap.sailing.domain.leaderboard.Leaderboard; +import com.sap.sailing.domain.leaderboard.RaceInLeaderboard; +import com.sap.sailing.server.RacingEventService; + +public class UpdateLeaderboardScoreCorrection extends AbstractLeaderboardColumnOperation { + private static final long serialVersionUID = -977025759476022993L; + private final String competitorIdAsString; + private final Integer correctedScore; + + public UpdateLeaderboardScoreCorrection(String leaderboardName, String columnName, String competitorIdAsString, + Integer correctedScore) { + super(leaderboardName, columnName); + this.competitorIdAsString = competitorIdAsString; + this.correctedScore = correctedScore; + } + + @Override + public RacingEventServiceOperation transformClientOp(RacingEventServiceOperation serverOp) { + // TODO Auto-generated method stub + return null; + } + + @Override + public RacingEventServiceOperation transformServerOp(RacingEventServiceOperation clientOp) { + // TODO Auto-generated method stub + return null; + } + + @Override + public RacingEventService applyTo(RacingEventService toState) { + Leaderboard leaderboard = toState.getLeaderboardByName(getLeaderboardName()); + if (leaderboard != null) { + Competitor competitor = leaderboard.getCompetitorByIdAsString(competitorIdAsString); + if (competitor != null) { + RaceInLeaderboard raceColumn = leaderboard.getRaceColumnByName(getColumnName()); + if (raceColumn == null) { + throw new IllegalArgumentException("Didn't find race "+getColumnName()+" in leaderboard "+getLeaderboardName()); + } + if (correctedScore == null) { + leaderboard.getScoreCorrection().uncorrectScore(competitor, raceColumn); + } else { + leaderboard.getScoreCorrection().correctScore(competitor, raceColumn, correctedScore); + } + } else { + throw new IllegalArgumentException("Didn't find competitor with ID "+competitorIdAsString+" in leaderboard "+getLeaderboardName()); + } + } else { + throw new IllegalArgumentException("Didn't find leaderboard "+getLeaderboardName()); + } + toState.updateStoredLeaderboard(leaderboard); + return toState; + } + +}