added command to conenct tracked race to leaderboard column

This commit is contained in:
Axel Uhl
2012-04-20 13:40:38 +02:00
parent 2908c840bb
commit fbcf748000
4 changed files with 74 additions and 3 deletions
@@ -140,6 +140,9 @@ import com.sap.sailing.gwt.ui.shared.WindDTO;
import com.sap.sailing.gwt.ui.shared.WindInfoForRaceDTO;
import com.sap.sailing.gwt.ui.shared.WindTrackInfoDTO;
import com.sap.sailing.server.RacingEventService;
import com.sap.sailing.server.operationaltransformation.AddColumnToLeaderboard;
import com.sap.sailing.server.operationaltransformation.RemoveLeaderboardColumn;
import com.sap.sailing.server.operationaltransformation.RenameLeaderboardColumn;
/**
* The server side implementation of the RPC service.
@@ -1290,17 +1293,17 @@ public class SailingServiceImpl extends RemoteServiceServlet implements SailingS
@Override
public void addColumnToLeaderboard(String columnName, String leaderboardName, boolean medalRace) {
getService().addColumnToLeaderboard(columnName, leaderboardName, medalRace);
getService().apply(new AddColumnToLeaderboard(columnName, leaderboardName, medalRace));
}
@Override
public void removeLeaderboardColumn(String leaderboardName, String columnName) {
getService().removeLeaderboardColumn(leaderboardName, columnName);
getService().apply(new RemoveLeaderboardColumn(columnName, leaderboardName));
}
@Override
public void renameLeaderboardColumn(String leaderboardName, String oldColumnName, String newColumnName) {
getService().renameLeaderboardColumn(leaderboardName, oldColumnName, newColumnName);
getService().apply(new RenameLeaderboardColumn(leaderboardName, oldColumnName, newColumnName));
}
@Override
@@ -37,6 +37,7 @@ import com.sap.sailing.domain.tractracadapter.DomainFactory;
import com.sap.sailing.domain.tractracadapter.RaceRecord;
import com.sap.sailing.domain.tractracadapter.TracTracRaceTracker;
import com.sap.sailing.expeditionconnector.ExpeditionListener;
import com.sap.sailing.server.operationaltransformation.RacingEventServiceOperation;
/**
* An OSGi service that can be used to track boat races using a TracTrac connector that pushes
@@ -327,5 +328,10 @@ public interface RacingEventService extends TrackedEventRegistry {
void addRace(EventIdentifier addToEvent, RaceDefinition raceDefinition);
void updateLeaderboardGroup(String oldName, String newName, String description, List<String> leaderboardNames);
/**
* Executes an operation whose effects need to be replicated to any replica of this service known.
*/
void apply(RacingEventServiceOperation operation);
}
@@ -69,7 +69,9 @@ import com.sap.sailing.domain.tractracadapter.Receiver;
import com.sap.sailing.expeditionconnector.ExpeditionListener;
import com.sap.sailing.expeditionconnector.ExpeditionWindTrackerFactory;
import com.sap.sailing.expeditionconnector.UDPExpeditionReceiver;
import com.sap.sailing.operationaltransformation.Operation;
import com.sap.sailing.server.RacingEventService;
import com.sap.sailing.server.operationaltransformation.RacingEventServiceOperation;
public class RacingEventServiceImpl implements RacingEventService, EventFetcher, RaceFetcher {
private static final Logger logger = Logger.getLogger(RacingEventServiceImpl.class.getName());
@@ -908,4 +910,15 @@ public class RacingEventServiceImpl implements RacingEventService, EventFetcher,
return scheduler;
}
/**
* Currently, the operation is executed by immediately {@link Operation#applyTo(Object) applying} it to this
* service object.<p>
*
* Future implementations of this method will need to also replicate the effects of the operation to all replica
* of this service known.
*/
@Override
public void apply(RacingEventServiceOperation operation) {
operation.applyTo(this);
}
}
@@ -0,0 +1,49 @@
package com.sap.sailing.server.operationaltransformation;
import com.sap.sailing.domain.common.RaceIdentifier;
import com.sap.sailing.domain.leaderboard.Leaderboard;
import com.sap.sailing.domain.leaderboard.RaceInLeaderboard;
import com.sap.sailing.domain.tracking.TrackedRace;
import com.sap.sailing.server.RacingEventService;
public class ConnectTrackedRaceToLeaderboardColumn extends AbstractLeaderboardColumnOperation {
private static final long serialVersionUID = -1336511401516212508L;
private final RaceIdentifier raceToConnect;
public ConnectTrackedRaceToLeaderboardColumn(String leaderboardName, String columnName, RaceIdentifier raceToConnect) {
super(leaderboardName, columnName);
this.raceToConnect = raceToConnect;
}
@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) {
boolean success = false;
TrackedRace trackedRace = toState.getExistingTrackedRace(raceToConnect);
if (trackedRace != null) {
Leaderboard leaderboard = toState.getLeaderboardByName(getLeaderboardName());
if (leaderboard != null) {
RaceInLeaderboard raceColumn = leaderboard.getRaceColumnByName(getColumnName());
if (raceColumn != null) {
raceColumn.setTrackedRace(trackedRace);
raceColumn.setRaceIdentifier(trackedRace.getRaceIdentifier());
success = true;
toState.updateStoredLeaderboard(leaderboard);
}
}
}
return toState;
}
}