suppress button works, but no persistence yet

This commit is contained in:
Axel Uhl committed 2012-09-21 18:20:35 +02:00
1 parent 78bca31e18
commit cdde8abe7c
19 files changed
+103 -14

No files matched your search

@@ -199,6 +199,7 @@ public class DomainObjectFactoryImpl implements DomainObjectFactory {
*/
private Leaderboard loadLeaderboard(DBObject dbLeaderboard, RegattaRegistry regattaRegistry, LeaderboardRegistry leaderboardRegistry,
LeaderboardGroup groupForMetaLeaderboard) {
// TODO load suppressed competitors
Leaderboard result = null;
String leaderboardName = (String) dbLeaderboard.get(FieldNames.LEADERBOARD_NAME.name());
if (leaderboardRegistry != null) {
@@ -129,6 +129,7 @@ public class MongoObjectFactoryImpl implements MongoObjectFactory {
@Override
public void storeLeaderboard(Leaderboard leaderboard) {
// TODO store suppressed competitors
DBCollection leaderboardCollection = database.getCollection(CollectionNames.LEADERBOARDS.name());
try {
leaderboardCollection.ensureIndex(FieldNames.LEADERBOARD_NAME.name());
@@ -10,4 +10,6 @@ public interface ScoreCorrectionListener {
void maxPointsReasonChanced(Competitor competitor, MaxPointsReason oldMaxPointsReason, MaxPointsReason newMaxPointsReason);
void carriedPointsChanged(Competitor competitor, Double oldCarriedPoints, Double newCarriedPoints);
void isSuppressedChanged(Competitor competitor, boolean newIsSuppressed);
}
@@ -42,4 +42,6 @@ public interface SettableScoreCorrection extends ScoreCorrection {
void setComment(String scoreCorrectionComment);
void notifyListenersAboutCarriedPointsChange(Competitor competitor, Double oldCarriedPoints, Double newCarriedPoints);
void notifyListenersAboutIsSuppressedChange(Competitor competitor, boolean suppressed);
}
@@ -90,7 +90,7 @@ public abstract class AbstractLeaderboardImpl extends AbstractSimpleLeaderboardI
@Override
public Competitor getCompetitorByIdAsString(String idAsString) {
for (Competitor competitor : getCompetitors()) {
for (Competitor competitor : getAllCompetitors()) {
if (competitor.getId().toString().equals(idAsString)) {
return competitor;
}
@@ -625,5 +625,6 @@ public abstract class AbstractSimpleLeaderboardImpl implements Leaderboard, Race
} else {
suppressedCompetitors.remove(competitor);
}
getScoreCorrection().notifyListenersAboutIsSuppressedChange(competitor, suppressed);
}
}
@@ -108,6 +108,13 @@ public class ScoreCorrectionImpl implements SettableScoreCorrection {
}
}
@Override
public void notifyListenersAboutIsSuppressedChange(Competitor competitor, boolean suppressed) {
for (ScoreCorrectionListener listener : getScoreCorrectionListeners()) {
listener.isSuppressedChanged(competitor, suppressed);
}
}
@Override
public void setMaxPointsReason(Competitor competitor, RaceColumn raceColumn, MaxPointsReason reason) {
Pair<Competitor, RaceColumn> key = raceColumn.getKey(competitor);
@@ -66,6 +66,11 @@ public abstract class AbstractMetaLeaderboard extends AbstractSimpleLeaderboardI
public void carriedPointsChanged(Competitor competitor, Double oldCarriedPoints, Double newCarriedPoints) {
getScoreCorrection().notifyListenersAboutCarriedPointsChange(competitor, oldCarriedPoints, newCarriedPoints);
}
@Override
public void isSuppressedChanged(Competitor competitor, boolean newIsSuppressed) {
getScoreCorrection().notifyListenersAboutIsSuppressedChange(competitor, newIsSuppressed);
}
}
public AbstractMetaLeaderboard(String name, ScoringScheme scoringScheme, ThresholdBasedResultDiscardingRule resultDiscardingRule) {
@@ -263,4 +263,6 @@ public interface SailingService extends RemoteService {
void removeLeaderboardColumns(String leaderboardName, List<String> columnsToRemove);
StrippedLeaderboardDTO getLeaderboard(String leaderboardName);
void suppressCompetitorInLeaderboard(String leaderboardName, String competitorIdAsString, boolean suppressed);
}
@@ -431,4 +431,6 @@ public interface SailingServiceAsync {
void getLeaderboard(String leaderboardName, AsyncCallback<StrippedLeaderboardDTO> callback);
void suppressCompetitorInLeaderboard(String leaderboardName, String competitorIdAsString, boolean suppressed, AsyncCallback<Void> asyncCallback);
}
@@ -529,8 +529,22 @@ public class EditableLeaderboardPanel extends LeaderboardPanel {
public FieldUpdater<LeaderboardRowDTO, String> getFieldUpdater() {
return new FieldUpdater<LeaderboardRowDTO, String>() {
@Override
public void update(int index, LeaderboardRowDTO object, String value) {
// TODO called when the user clicked the button; suppress the competitor in the current leaderboard
public void update(int index, final LeaderboardRowDTO row, String value) {
getSailingService().suppressCompetitorInLeaderboard(getLeaderboardName(), row.competitor.id,
/* suppressed */ true,
new AsyncCallback<Void>() {
@Override
public void onFailure(Throwable caught) {
getErrorReporter().reportError("Error trying to suppress competitor "+row.competitor.name+
" in leaderboard "+getLeaderboardName());
}
@Override
public void onSuccess(Void result) {
// force a reload of the entire editable leaderboard to hide the now suppressed competitor
timeChanged(getLeaderboardDisplayDate());
}
});
}
};
}
@@ -173,6 +173,11 @@ public class LeaderboardDTOCache {
public void carriedPointsChanged(Competitor competitor, Double oldCarriedPoints, Double newCarriedPoints) {
removeFromCache(leaderboard);
}
@Override
public void isSuppressedChanged(Competitor competitor, boolean newIsSuppressed) {
removeFromCache(leaderboard);
}
}
public LeaderboardDTOCache(SailingServiceImpl sailingService, boolean waitForLatestAnalyses) {
@@ -201,6 +201,7 @@ import com.sap.sailing.server.operationaltransformation.RenameLeaderboard;
import com.sap.sailing.server.operationaltransformation.RenameLeaderboardColumn;
import com.sap.sailing.server.operationaltransformation.RenameLeaderboardGroup;
import com.sap.sailing.server.operationaltransformation.SetRaceIsKnownToStartUpwind;
import com.sap.sailing.server.operationaltransformation.SetSuppressedFlagForCompetitorInLeaderboard;
import com.sap.sailing.server.operationaltransformation.SetWindSourcesToExclude;
import com.sap.sailing.server.operationaltransformation.StopTrackingRace;
import com.sap.sailing.server.operationaltransformation.StopTrackingRegatta;
@@ -2034,6 +2035,11 @@ public class SailingServiceImpl extends RemoteServiceServlet implements SailingS
getService().apply(new RenameLeaderboardColumn(leaderboardName, oldColumnName, newColumnName));
}
@Override
public void suppressCompetitorInLeaderboard(String leaderboardName, String competitorIdAsString, boolean suppressed) {
getService().apply(new SetSuppressedFlagForCompetitorInLeaderboard(leaderboardName, competitorIdAsString, suppressed));
}
@Override
public boolean connectTrackedRaceToLeaderboardColumn(String leaderboardName, String raceColumnName, String fleetName, RaceIdentifier raceIdentifier) {
return getService().apply(new ConnectTrackedRaceToLeaderboardColumn(leaderboardName, raceColumnName, fleetName, raceIdentifier));
@@ -2726,4 +2732,5 @@ public class SailingServiceImpl extends RemoteServiceServlet implements SailingS
fregService.registerResultUrl(new URL(result));
}
}
}
@@ -47,7 +47,7 @@ public class LeaderboardDiscardingRulesTest {
assertNotNull(leaderboard);
int[] discardingRulesNew = new int[] { 1, 5 };
leaderboard.setResultDiscardingRule(new ResultDiscardingRuleImpl(discardingRulesNew));
racingEventService.updateStoredFlexibleLeaderboard(leaderboard);
racingEventService.updateStoredLeaderboard(leaderboard);
Leaderboard leaderboardNew = racingEventService.getLeaderboardByName(LEADERBOARDNAME);
assertNotNull(leaderboardNew);
int[] result = leaderboardNew.getResultDiscardingRule().getDiscardIndexResultsStartingWithHowManyRaces();
@@ -265,7 +265,7 @@ public interface RacingEventService extends TrackedRegattaRegistry, RegattaFetch
/**
* Updates the leaderboard data in the persistent store
*/
void updateStoredFlexibleLeaderboard(FlexibleLeaderboard leaderboard);
void updateStoredLeaderboard(Leaderboard leaderboard);
void updateStoredRegattaLeaderboard(RegattaLeaderboard leaderboard);
@@ -331,7 +331,7 @@ public class RacingEventServiceImpl implements RacingEventService, RegattaListen
// uses the default fleet as the single fleet for the new column
RaceColumn result = ((FlexibleLeaderboard) leaderboard).addRaceColumn(columnName, medalRace,
leaderboard.getFleet(null));
updateStoredFlexibleLeaderboard((FlexibleLeaderboard) leaderboard);
updateStoredLeaderboard((FlexibleLeaderboard) leaderboard);
return result;
} else {
throw new IllegalArgumentException("Leaderboard named " + leaderboardName + " is not a FlexibleLeaderboard");
@@ -346,7 +346,7 @@ public class RacingEventServiceImpl implements RacingEventService, RegattaListen
Leaderboard leaderboard = getLeaderboardByName(leaderboardName);
if (leaderboard != null && leaderboard instanceof FlexibleLeaderboard) {
((FlexibleLeaderboard) leaderboard).moveRaceColumnUp(columnName);
updateStoredFlexibleLeaderboard((FlexibleLeaderboard) leaderboard);
updateStoredLeaderboard((FlexibleLeaderboard) leaderboard);
} else {
throw new IllegalArgumentException("Leaderboard named " + leaderboardName + " not found");
}
@@ -357,7 +357,7 @@ public class RacingEventServiceImpl implements RacingEventService, RegattaListen
Leaderboard leaderboard = getLeaderboardByName(leaderboardName);
if (leaderboard != null && leaderboard instanceof FlexibleLeaderboard) {
((FlexibleLeaderboard) leaderboard).moveRaceColumnDown(columnName);
updateStoredFlexibleLeaderboard((FlexibleLeaderboard) leaderboard);
updateStoredLeaderboard((FlexibleLeaderboard) leaderboard);
} else {
throw new IllegalArgumentException("Leaderboard named " + leaderboardName + " not found");
}
@@ -368,7 +368,7 @@ public class RacingEventServiceImpl implements RacingEventService, RegattaListen
Leaderboard leaderboard = getLeaderboardByName(leaderboardName);
if (leaderboard != null && leaderboard instanceof FlexibleLeaderboard) {
((FlexibleLeaderboard) leaderboard).removeRaceColumn(columnName);
updateStoredFlexibleLeaderboard((FlexibleLeaderboard) leaderboard);
updateStoredLeaderboard((FlexibleLeaderboard) leaderboard);
} else {
throw new IllegalArgumentException("Leaderboard named "+leaderboardName+" not found");
}
@@ -379,7 +379,7 @@ public class RacingEventServiceImpl implements RacingEventService, RegattaListen
Leaderboard leaderboard = getLeaderboardByName(leaderboardName);
if (leaderboard != null) {
leaderboard.getRaceColumnByName(oldColumnName).setName(newColumnName);
updateStoredFlexibleLeaderboard((FlexibleLeaderboard) leaderboard);
updateStoredLeaderboard((FlexibleLeaderboard) leaderboard);
} else {
throw new IllegalArgumentException("Leaderboard named "+leaderboardName+" not found");
}
@@ -409,7 +409,7 @@ public class RacingEventServiceImpl implements RacingEventService, RegattaListen
}
@Override
public void updateStoredFlexibleLeaderboard(FlexibleLeaderboard leaderboard) {
public void updateStoredLeaderboard(Leaderboard leaderboard) {
mongoObjectFactory.storeLeaderboard(leaderboard);
syncGroupsAfterLeaderboardChange(leaderboard, true);
}
@@ -1076,7 +1076,7 @@ public class RacingEventServiceImpl implements RacingEventService, RegattaListen
}
}
if (changed) {
updateStoredFlexibleLeaderboard((FlexibleLeaderboard) leaderboard);
updateStoredLeaderboard((FlexibleLeaderboard) leaderboard);
}
}
}
@@ -32,7 +32,7 @@ public abstract class AbstractLeaderboardColumnOperation<ResultType> extends Abs
*/
protected void updateDB(RacingEventService toState, Leaderboard leaderboard, RaceColumn raceColumn) {
if (leaderboard instanceof FlexibleLeaderboard) {
toState.updateStoredFlexibleLeaderboard((FlexibleLeaderboard) leaderboard);
toState.updateStoredLeaderboard((FlexibleLeaderboard) leaderboard);
} else {
assert raceColumn instanceof RaceColumnInSeries;
toState.updateStoredRegatta(((RaceColumnInSeries) raceColumn).getSeries().getRegatta());
@@ -27,7 +27,7 @@ public abstract class AbstractLeaderboardOperation<ResultType> extends AbstractR
protected void updateStoredLeaderboard(RacingEventService toState, Leaderboard leaderboard) {
if (leaderboard instanceof FlexibleLeaderboard) {
toState.updateStoredFlexibleLeaderboard((FlexibleLeaderboard) leaderboard);
toState.updateStoredLeaderboard((FlexibleLeaderboard) leaderboard);
} else if (leaderboard instanceof RegattaLeaderboardImpl) {
toState.updateStoredRegattaLeaderboard((RegattaLeaderboard) leaderboard);
}
@@ -0,0 +1,40 @@
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;
import com.sap.sailing.server.RacingEventServiceOperation;
public class SetSuppressedFlagForCompetitorInLeaderboard extends AbstractLeaderboardOperation<Void> {
private static final long serialVersionUID = -6509970065541824854L;
private final String competitorIdAsString;
private final boolean suppressed;
public SetSuppressedFlagForCompetitorInLeaderboard(String leaderboardName, String competitorIdAsString, boolean suppressed) {
super(leaderboardName);
this.competitorIdAsString = competitorIdAsString;
this.suppressed = suppressed;
}
@Override
public Void internalApplyTo(RacingEventService toState) throws Exception {
Leaderboard leaderboard = toState.getLeaderboardByName(getLeaderboardName());
Competitor competitor = leaderboard.getCompetitorByIdAsString(competitorIdAsString);
leaderboard.setSuppressed(competitor, suppressed);
toState.updateStoredLeaderboard(leaderboard);
return null;
}
@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;
}
}