Added replication of CourseAreas and according replication test

This commit is contained in:
Armin Zamani committed 2013-02-02 20:23:19 +01:00
1 parent a2231263f7
commit 002427981c
4 files changed
+89

No files matched your search

@@ -9,7 +9,9 @@ import java.util.UUID;
import org.junit.Test;
import com.sap.sailing.domain.base.CourseArea;
import com.sap.sailing.domain.base.Event;
import com.sap.sailing.domain.common.impl.Util;
public class EventReplicationTest extends AbstractServerReplicationTest {
@@ -31,4 +33,28 @@ public class EventReplicationTest extends AbstractServerReplicationTest {
assertEquals(replicatedEvent.getPublicationUrl(), publicationUrl);
assertEquals(replicatedEvent.getVenue().getName(), venueName);
}
@Test
public void testCourseAreaReplication() throws InterruptedException {
final String eventName = "ESS Singapur";
final String venueName = "Singapur, Singapur";
final String publicationUrl = "http://ess40.sapsailing.com";
final boolean isPublic = false;
List<String> regattas = new ArrayList<String>();
final String courseArea = "Alpha";
Event masterEvent = master.addEvent(eventName, venueName, publicationUrl, isPublic, UUID.randomUUID(), regattas);
CourseArea masterCourseArea = master.addCourseArea(masterEvent.getId(), courseArea, UUID.randomUUID());
Thread.sleep(1000);
Event replicatedEvent = replica.getEvent(masterEvent.getId());
assertNotNull(replicatedEvent);
assertEquals(replicatedEvent.getName(), eventName);
assertEquals(Util.size(replicatedEvent.getVenue().getCourseAreas()), 1);
CourseArea replicatedCourseArea = Util.get(replicatedEvent.getVenue().getCourseAreas(), 0);
assertEquals(replicatedCourseArea.getId(), masterCourseArea.getId());
assertEquals(replicatedCourseArea.getName(), courseArea);
}
}
@@ -16,6 +16,7 @@ import java.util.ConcurrentModificationException;
import java.util.List;
import java.util.Map;
import com.sap.sailing.domain.base.CourseArea;
import com.sap.sailing.domain.base.Event;
import com.sap.sailing.domain.base.Fleet;
import com.sap.sailing.domain.base.RaceColumn;
@@ -490,6 +491,8 @@ public interface RacingEventService extends TrackedRegattaRegistry, RegattaFetch
void renameEvent(Serializable id, String newEventName);
void removeEvent(Serializable id);
CourseArea addCourseArea(Serializable eventId, String courseAreaName, Serializable courseAreaId);
com.sap.sailing.domain.base.DomainFactory getBaseDomainFactory();
@@ -29,6 +29,7 @@ import java.util.logging.Logger;
import com.sap.sailing.domain.base.Competitor;
import com.sap.sailing.domain.base.ControlPoint;
import com.sap.sailing.domain.base.CourseArea;
import com.sap.sailing.domain.base.Event;
import com.sap.sailing.domain.base.Fleet;
import com.sap.sailing.domain.base.Mark;
@@ -39,6 +40,7 @@ import com.sap.sailing.domain.base.Regatta;
import com.sap.sailing.domain.base.RegattaListener;
import com.sap.sailing.domain.base.Series;
import com.sap.sailing.domain.base.Waypoint;
import com.sap.sailing.domain.base.impl.CourseAreaImpl;
import com.sap.sailing.domain.base.impl.EventImpl;
import com.sap.sailing.domain.base.impl.RegattaImpl;
import com.sap.sailing.domain.common.Color;
@@ -104,6 +106,7 @@ import com.sap.sailing.operationaltransformation.Operation;
import com.sap.sailing.server.OperationExecutionListener;
import com.sap.sailing.server.RacingEventService;
import com.sap.sailing.server.RacingEventServiceOperation;
import com.sap.sailing.server.operationaltransformation.AddCourseArea;
import com.sap.sailing.server.operationaltransformation.AddDefaultRegatta;
import com.sap.sailing.server.operationaltransformation.AddRaceDefinition;
import com.sap.sailing.server.operationaltransformation.AddSpecificRegatta;
@@ -1613,4 +1616,19 @@ public class RacingEventServiceImpl implements RacingEventService, RegattaListen
mongoObjectFactory.storeRegattaForRaceID(race.getId().toString(), regatta);
}
@Override
public CourseArea addCourseArea(Serializable eventId, String courseAreaName, Serializable courseAreaId) {
CourseArea courseArea = new CourseAreaImpl(courseAreaName, courseAreaId);
synchronized (eventsById) {
if (!eventsById.containsKey(eventId)) {
throw new IllegalArgumentException("No sailing event with ID " + eventId + " found.");
}
Event event = eventsById.get(eventId);
event.getVenue().addCourseArea(courseArea);
replicate(new AddCourseArea(eventId, courseAreaName, courseAreaId));
mongoObjectFactory.storeEvent(event);
}
return courseArea;
}
}
@@ -0,0 +1,42 @@
package com.sap.sailing.server.operationaltransformation;
import java.io.Serializable;
import com.sap.sailing.domain.base.CourseArea;
import com.sap.sailing.server.RacingEventService;
import com.sap.sailing.server.RacingEventServiceOperation;
public class AddCourseArea extends AbstractRacingEventServiceOperation<CourseArea> {
private static final long serialVersionUID = -3650109848260363949L;
private final String courseAreaName;
private final Serializable courseAreaId;
private final Serializable eventId;
public AddCourseArea(Serializable eventId, String courseAreaName, Serializable courseAreaId) {
super();
this.eventId = eventId;
this.courseAreaId = courseAreaId;
this.courseAreaName = courseAreaName;
}
@Override
public CourseArea internalApplyTo(RacingEventService toState) throws Exception {
return toState.addCourseArea(eventId, courseAreaName, courseAreaId);
}
@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;
}
}