changed updateLeaderboardGroup such that it uses String for Leaderboard identification; added more operations

This commit is contained in:
Axel Uhl
2012-04-18 17:28:50 +02:00
parent 319c58dc79
commit 93f99db38f
18 changed files with 223 additions and 41 deletions
@@ -573,7 +573,12 @@ public class LeaderboardGroupConfigPanel extends AbstractEventPanel {
}
private void updateGroup(final String oldGroupName, final LeaderboardGroupDTO groupToUpdate) {
sailingService.updateLeaderboardGroup(oldGroupName, groupToUpdate.name, groupToUpdate.description, groupToUpdate.leaderboards, new AsyncCallback<Void>() {
List<String> leaderboardNames = new ArrayList<String>();
for (LeaderboardDTO leaderboardDTO : groupToUpdate.leaderboards) {
leaderboardNames.add(leaderboardDTO.name);
}
sailingService.updateLeaderboardGroup(oldGroupName, groupToUpdate.name, groupToUpdate.description,
leaderboardNames, new AsyncCallback<Void>() {
@Override
public void onFailure(Throwable t) {
errorReporter.reportError("Error trying to update leaderboard group " + oldGroupName + ": "
@@ -167,7 +167,7 @@ public interface SailingService extends RemoteService {
LeaderboardGroupDTO createLeaderboardGroup(String groupName, String description);
void updateLeaderboardGroup(String oldName, String newName, String description, List<LeaderboardDTO> leaderboards);
void updateLeaderboardGroup(String oldName, String newName, String description, List<String> leaderboardNames);
MultiCompetitorRaceDataDTO getCompetitorsRaceData(RaceIdentifier race, List<Pair<Date, CompetitorDTO>> competitors,
Date toDate, long stepSize, DetailType detailType)
@@ -289,9 +289,9 @@ public interface SailingServiceAsync {
* @param oldName The old name of the group
* @param newName The new name of the group
* @param description The new description of the group
* @param leaderboards The new leaderboards of the group
* @param leaderboardNames The list of names of the new leaderboards of the group
*/
void updateLeaderboardGroup(String oldName, String newName, String description, List<LeaderboardDTO> leaderboards, AsyncCallback<Void> callback);
void updateLeaderboardGroup(String oldName, String newName, String description, List<String> leaderboardNames, AsyncCallback<Void> callback);
/**
* Returns the mark passings and the data for the given {@link DetailType} of all competitors in
@@ -522,9 +522,9 @@ public class SailingServiceImpl extends RemoteServiceServlet implements SailingS
@Override
public void removeAndUntrackRace(EventAndRaceIdentifier eventAndRaceidentifier) throws Exception{
Event event = getEvent(eventAndRaceidentifier);
if(event!= null) {
if (event!= null) {
RaceDefinition race = getRace(eventAndRaceidentifier);
if(race != null) {
if (race != null) {
getService().removeRace(event, race);
}
}
@@ -1823,22 +1823,8 @@ public class SailingServiceImpl extends RemoteServiceServlet implements SailingS
}
@Override
public void updateLeaderboardGroup(String oldName, String newName, String description, List<LeaderboardDTO> leaderboards) {
if (!oldName.equals(newName)) {
getService().renameLeaderboardGroup(oldName, newName);
}
LeaderboardGroup group = getService().getLeaderboardGroupByName(newName);
if (!description.equals(group.getDescription())) {
group.setDescriptiom(description);
}
group.clearLeaderboards();
for (LeaderboardDTO leaderboardDTO : leaderboards) {
Leaderboard leaderboard = getService().getLeaderboardByName(leaderboardDTO.name);
if (leaderboard != null) {
group.addLeaderboard(leaderboard);
}
}
getService().updateStoredLeaderboardGroup(group);
public void updateLeaderboardGroup(String oldName, String newName, String description, List<String> leaderboardNames) {
getService().updateLeaderboardGroup(oldName, newName, description, leaderboardNames);
}
}
@@ -18,7 +18,7 @@ import com.sap.sailing.operationaltransformation.PeerImpl;
import com.sap.sailing.server.RacingEventService;
import com.sap.sailing.server.impl.RacingEventServiceImpl;
import com.sap.sailing.server.operationaltransformation.AddColumnToLeaderboard;
import com.sap.sailing.server.operationaltransformation.AddLeaderboard;
import com.sap.sailing.server.operationaltransformation.CreateLeaderboard;
import com.sap.sailing.server.operationaltransformation.MoveLeaderboardColumnUp;
import com.sap.sailing.server.operationaltransformation.OperationalTransformer;
import com.sap.sailing.server.operationaltransformation.RacingEventServiceOperation;
@@ -48,7 +48,7 @@ public class OperationalTransformationTest {
@Test
public void testAddLeaderboard() {
RacingEventServiceOperation addLeaderboardOp = new AddLeaderboard(LEADERBOARDNAME, new int[] { 5 });
RacingEventServiceOperation addLeaderboardOp = new CreateLeaderboard(LEADERBOARDNAME, new int[] { 5 });
server.apply(addLeaderboardOp);
server.waitForNotRunning();
replica.waitForNotRunning();
@@ -326,4 +326,6 @@ public interface RacingEventService extends TrackedEventRegistry {
*/
void addRace(EventIdentifier addToEvent, RaceDefinition raceDefinition);
void updateLeaderboardGroup(String oldName, String newName, String description, List<String> leaderboardNames);
}
@@ -859,6 +859,25 @@ public class RacingEventServiceImpl implements RacingEventService, EventFetcher,
}
}
@Override
public void updateLeaderboardGroup(String oldName, String newName, String description, List<String> leaderboardNames) {
if (!oldName.equals(newName)) {
renameLeaderboardGroup(oldName, newName);
}
LeaderboardGroup group = getLeaderboardGroupByName(newName);
if (!description.equals(group.getDescription())) {
group.setDescriptiom(description);
}
group.clearLeaderboards();
for (String leaderboardName : leaderboardNames) {
Leaderboard leaderboard = getLeaderboardByName(leaderboardName);
if (leaderboard != null) {
group.addLeaderboard(leaderboard);
}
}
mongoObjectFactory.storeLeaderboardGroup(group);
}
@Override
public void updateStoredLeaderboardGroup(LeaderboardGroup leaderboardGroup) {
mongoObjectFactory.storeLeaderboardGroup(leaderboardGroup);
@@ -0,0 +1,20 @@
package com.sap.sailing.server.operationaltransformation;
public abstract class AbstractLeaderboardGroupOperation extends AbstractRacingEventServiceOperation {
private static final long serialVersionUID = 4341066708061847418L;
private final String leaderboardGroupName;
public AbstractLeaderboardGroupOperation(String leaderboardGroupName) {
super();
this.leaderboardGroupName = leaderboardGroupName;
}
protected String getLeaderboardGroupName() {
return leaderboardGroupName;
}
protected boolean affectsSameLeaderboardGroup(AbstractLeaderboardGroupOperation other) {
return getLeaderboardGroupName().equals(other.getLeaderboardGroupName());
}
}
@@ -25,12 +25,12 @@ public abstract class AbstractRacingEventServiceOperation implements RacingEvent
}
@Override
public RacingEventServiceOperation transformAddLeaderboardClientOp(AddLeaderboard addLeaderboard) {
public RacingEventServiceOperation transformAddLeaderboardClientOp(CreateLeaderboard addLeaderboard) {
return addLeaderboard;
}
@Override
public RacingEventServiceOperation transformAddLeaderboardServerOp(AddLeaderboard addLeaderboard) {
public RacingEventServiceOperation transformAddLeaderboardServerOp(CreateLeaderboard addLeaderboard) {
return addLeaderboard;
}
@@ -47,12 +47,12 @@ public abstract class AbstractRacingEventServiceOperation implements RacingEvent
}
@Override
public RacingEventServiceOperation transformRemoveColumnFromLeaderboardServerOp(RemoveColumnFromLeaderboard removeColumnFromLeaderboardServerOp) {
public RacingEventServiceOperation transformRemoveColumnFromLeaderboardServerOp(RemoveLeaderboardColumn removeColumnFromLeaderboardServerOp) {
return removeColumnFromLeaderboardServerOp;
}
@Override
public RacingEventServiceOperation transformRemoveColumnFromLeaderboardClientOp(RemoveColumnFromLeaderboard removeColumnFromLeaderboardClientOp) {
public RacingEventServiceOperation transformRemoveColumnFromLeaderboardClientOp(RemoveLeaderboardColumn removeColumnFromLeaderboardClientOp) {
return removeColumnFromLeaderboardClientOp;
}
@@ -3,7 +3,7 @@ package com.sap.sailing.server.operationaltransformation;
import com.sap.sailing.server.RacingEventService;
/**
* Doesn't transform for the {@link RemoveColumnFromLeaderboard} because only existing leaderboards can be removed,
* Doesn't transform for the {@link RemoveLeaderboardColumn} because only existing leaderboards can be removed,
* and adding is only possible for non-existing names.
*
* @author Axel Uhl (d043530)
@@ -2,11 +2,11 @@ package com.sap.sailing.server.operationaltransformation;
import com.sap.sailing.server.RacingEventService;
public class AddLeaderboard extends AbstractLeaderboardOperation {
public class CreateLeaderboard extends AbstractLeaderboardOperation {
private static final long serialVersionUID = 891352705068098580L;
private final int[] discardThresholds;
public AddLeaderboard(String leaderboardName, int[] discardThresholds) {
public CreateLeaderboard(String leaderboardName, int[] discardThresholds) {
super(leaderboardName);
this.discardThresholds = discardThresholds;
}
@@ -0,0 +1,36 @@
package com.sap.sailing.server.operationaltransformation;
import java.util.List;
import com.sap.sailing.server.RacingEventService;
public class CreateLeaderboardGroup extends AbstractLeaderboardGroupOperation {
private static final long serialVersionUID = -5028997286564650805L;
private final String description;
private final List<String> leaderboardNames;
public CreateLeaderboardGroup(String leaderboardGroupName, String description, List<String> leaderboardNames) {
super(leaderboardGroupName);
this.description = description;
this.leaderboardNames = leaderboardNames;
}
@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) {
toState.addLeaderboardGroup(getLeaderboardGroupName(), description, leaderboardNames);
return toState;
}
}
@@ -31,17 +31,17 @@ public interface RacingEventServiceOperation extends Operation<RacingEventServic
* operation deals with the leaderboard column being removed by <code>removeColumnFromLeaderboardClientOp</code>,
* the result will be <code>null</code>, meaning that this operation cannot be applied after the column has been removed.
*/
RacingEventServiceOperation transformRemoveColumnFromLeaderboardClientOp(RemoveColumnFromLeaderboard removeColumnFromLeaderboardClientOp);
RacingEventServiceOperation transformRemoveColumnFromLeaderboardClientOp(RemoveLeaderboardColumn removeColumnFromLeaderboardClientOp);
RacingEventServiceOperation transformRemoveColumnFromLeaderboardServerOp(RemoveColumnFromLeaderboard removeColumnFromLeaderboardServerOp);
RacingEventServiceOperation transformRemoveColumnFromLeaderboardServerOp(RemoveLeaderboardColumn removeColumnFromLeaderboardServerOp);
RacingEventServiceOperation transformRenameLeaderboardColumnClientOp(RenameLeaderboardColumn renameLeaderboardColumnClientOp);
RacingEventServiceOperation transformRenameLeaderboardColumnServerOp(RenameLeaderboardColumn renameLeaderboardColumnServerOp);
RacingEventServiceOperation transformAddLeaderboardClientOp(AddLeaderboard addLeaderboard);
RacingEventServiceOperation transformAddLeaderboardClientOp(CreateLeaderboard addLeaderboard);
RacingEventServiceOperation transformAddLeaderboardServerOp(AddLeaderboard addLeaderboard);
RacingEventServiceOperation transformAddLeaderboardServerOp(CreateLeaderboard addLeaderboard);
RacingEventServiceOperation transformRemoveLeaderboardClientOp(RemoveLeaderboard removeLeaderboard);
@@ -0,0 +1,45 @@
package com.sap.sailing.server.operationaltransformation;
import java.io.IOException;
import com.sap.sailing.domain.base.Event;
import com.sap.sailing.domain.base.RaceDefinition;
import com.sap.sailing.domain.common.EventAndRaceIdentifier;
import com.sap.sailing.server.RacingEventService;
public class RemoveAndUntrackRace extends AbstractRaceOperation {
private static final long serialVersionUID = 4260421466093529004L;
public RemoveAndUntrackRace(EventAndRaceIdentifier raceIdentifier) {
super(raceIdentifier);
}
@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) {
Event event = toState.getEvent(getRaceIdentifier());
if (event!= null) {
RaceDefinition race = event.getRaceByName(getRaceIdentifier().getRaceName());
if (race != null) {
try {
toState.removeRace(event, race);
} catch (IOException | InterruptedException e) {
throw new RuntimeException(e);
}
}
}
return toState;
}
}
@@ -47,7 +47,7 @@ public class RemoveLeaderboard extends AbstractLeaderboardOperation {
@Override
public RacingEventServiceOperation transformRemoveColumnFromLeaderboardServerOp(
RemoveColumnFromLeaderboard removeColumnFromLeaderboardServerOp) {
RemoveLeaderboardColumn removeColumnFromLeaderboardServerOp) {
if (affectsSameLeaderboard(removeColumnFromLeaderboardServerOp)) {
return AbstractRacingEventServiceOperation.getNoOp();
} else {
@@ -57,7 +57,7 @@ public class RemoveLeaderboard extends AbstractLeaderboardOperation {
@Override
public RacingEventServiceOperation transformRemoveColumnFromLeaderboardClientOp(
RemoveColumnFromLeaderboard removeColumnFromLeaderboardClientOp) {
RemoveLeaderboardColumn removeColumnFromLeaderboardClientOp) {
if (affectsSameLeaderboard(removeColumnFromLeaderboardClientOp)) {
return AbstractRacingEventServiceOperation.getNoOp();
} else {
@@ -2,10 +2,10 @@ package com.sap.sailing.server.operationaltransformation;
import com.sap.sailing.server.RacingEventService;
public class RemoveColumnFromLeaderboard extends AbstractLeaderboardColumnOperation {
public class RemoveLeaderboardColumn extends AbstractLeaderboardColumnOperation {
private static final long serialVersionUID = 5425526859417359535L;
public RemoveColumnFromLeaderboard(String columnName, String leaderboardName) {
public RemoveLeaderboardColumn(String columnName, String leaderboardName) {
super(leaderboardName, columnName);
}
@@ -47,7 +47,7 @@ public class RemoveColumnFromLeaderboard extends AbstractLeaderboardColumnOperat
@Override
public RacingEventServiceOperation transformRemoveColumnFromLeaderboardServerOp(
RemoveColumnFromLeaderboard removeColumnFromLeaderboardServerOp) {
RemoveLeaderboardColumn removeColumnFromLeaderboardServerOp) {
if (affectsSameColumn(removeColumnFromLeaderboardServerOp)) {
return AbstractRacingEventServiceOperation.getNoOp();
} else {
@@ -57,7 +57,7 @@ public class RemoveColumnFromLeaderboard extends AbstractLeaderboardColumnOperat
@Override
public RacingEventServiceOperation transformRemoveColumnFromLeaderboardClientOp(
RemoveColumnFromLeaderboard removeColumnFromLeaderboardClientOp) {
RemoveLeaderboardColumn removeColumnFromLeaderboardClientOp) {
if (affectsSameColumn(removeColumnFromLeaderboardClientOp)) {
return AbstractRacingEventServiceOperation.getNoOp();
} else {
@@ -0,0 +1,30 @@
package com.sap.sailing.server.operationaltransformation;
import com.sap.sailing.server.RacingEventService;
public class RemoveLeaderboardGroup extends AbstractLeaderboardGroupOperation {
private static final long serialVersionUID = 3177217793859319236L;
public RemoveLeaderboardGroup(String leaderboardGroupName) {
super(leaderboardGroupName);
}
@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) {
toState.removeLeaderboardGroup(getLeaderboardGroupName());
return toState;
}
}
@@ -0,0 +1,39 @@
package com.sap.sailing.server.operationaltransformation;
import java.util.List;
import com.sap.sailing.server.RacingEventService;
public class UpdateLeaderboardGroup extends AbstractLeaderboardGroupOperation {
private static final long serialVersionUID = -1822477339916802467L;
private final String newName;
private final String newDescription;
private final List<String> leaderboardNames;
public UpdateLeaderboardGroup(String leaderboardGroupName, String newName, String newDescription,
List<String> leaderboardNames) {
super(leaderboardGroupName);
this.newName = newName;
this.newDescription = newDescription;
this.leaderboardNames = leaderboardNames;
}
@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) {
toState.updateLeaderboardGroup(getLeaderboardGroupName(), newName, newDescription, leaderboardNames);
return toState;
}
}