mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-09-26 23:46:36 +00:00
added remaining leaderboard manipulation operations
This commit is contained in:
Executable
+29
@@ -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
|
||||
}
|
||||
+1
-1
@@ -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;
|
||||
|
||||
+1
-1
@@ -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;
|
||||
|
||||
+1
-1
@@ -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;
|
||||
|
||||
+1
-1
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
/**
|
||||
|
||||
+1
-28
@@ -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();
|
||||
|
||||
+1
@@ -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 {
|
||||
|
||||
|
||||
+1
-1
@@ -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;
|
||||
|
||||
+2
-2
@@ -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<Pair<Competitor, RaceInLeaderboard>, Integer> correctedScores;
|
||||
|
||||
public ScoreCorrectionImpl() {
|
||||
this.maxPointsReasons = new HashMap<Util.Pair<Competitor,RaceInLeaderboard>, ScoreCorrection.MaxPointsReason>();
|
||||
this.maxPointsReasons = new HashMap<Util.Pair<Competitor,RaceInLeaderboard>, MaxPointsReason>();
|
||||
this.correctedScores = new HashMap<Util.Pair<Competitor,RaceInLeaderboard>, Integer>();
|
||||
}
|
||||
|
||||
|
||||
+4
-2
@@ -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
|
||||
* <code>date</code> after the max points reason has been updated to <code>maxPointsReasonAsString</code>.
|
||||
*/
|
||||
Pair<Integer, Integer> updateLeaderboardMaxPointsReason(String leaderboardName, String competitorIdAsString,
|
||||
String raceColumnName, String maxPointsReasonAsString, Date date) throws NoWindException;
|
||||
String raceColumnName, MaxPointsReason maxPointsReason, Date date) throws NoWindException;
|
||||
|
||||
Pair<Integer, Integer> updateLeaderboardScoreCorrection(String leaderboardName, String competitorIdAsString,
|
||||
String raceName, Integer correctedScore, Date date) throws NoWindException;
|
||||
|
||||
+2
-1
@@ -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<Void> callback);
|
||||
|
||||
void updateLeaderboardMaxPointsReason(String leaderboardName, String competitorID, String raceColumnName,
|
||||
String maxPointsReasonAsString, Date date, AsyncCallback<Pair<Integer, Integer>> asyncCallback);
|
||||
MaxPointsReason maxPointsReason, Date date, AsyncCallback<Pair<Integer, Integer>> asyncCallback);
|
||||
|
||||
void updateLeaderboardScoreCorrection(String leaderboardName, String competitorID, String raceName,
|
||||
Integer correctedScore, Date date, AsyncCallback<Pair<Integer, Integer>> asyncCallback);
|
||||
|
||||
+8
-3
@@ -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<String> selectionCellContents = new ArrayList<String>();
|
||||
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<Pair<Integer, Integer>>() {
|
||||
@Override
|
||||
public void onFailure(Throwable t) {
|
||||
|
||||
+6
-10
@@ -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<Integer, Integer> 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<Integer, Integer>(updatedEntry.getNetPoints(), updatedEntry.getTotalPoints());
|
||||
|
||||
+3
-3
@@ -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));
|
||||
|
||||
+45
@@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
+51
@@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
+54
@@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
+57
@@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user