From a2231263f7be4c26ca146be7b63efd99e83b2e5f Mon Sep 17 00:00:00 2001 From: Armin Zamani Date: Sat, 2 Feb 2013 19:04:24 +0100 Subject: [PATCH] Sailing Events are fully replicated when created/added, added replication test for event creation --- .../gwt/ui/server/SailingServiceImpl.java | 2 +- .../impl/rc/EventsJsonExportServlet.java | 3 +- .../test/EventReplicationTest.java | 34 +++++++ .../sailing/server/RacingEventService.java | 4 +- .../server/impl/RacingEventServiceImpl.java | 7 +- .../CreateEvent.java | 95 ++++++++++--------- 6 files changed, 92 insertions(+), 53 deletions(-) create mode 100644 java/com.sap.sailing.server.replication.test/src/com/sap/sailing/server/replication/test/EventReplicationTest.java diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/SailingServiceImpl.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/SailingServiceImpl.java index 83fa0916bfe..19f81757bca 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/SailingServiceImpl.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/SailingServiceImpl.java @@ -2827,7 +2827,7 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S @Override public EventDTO createEvent(String eventName, String venue, String publicationUrl, boolean isPublic) { - return convertToEventDTO(getService().apply(new CreateEvent(eventName, venue, publicationUrl, isPublic, new ArrayList()))); + return convertToEventDTO(getService().apply(new CreateEvent(eventName, venue, publicationUrl, isPublic, UUID.randomUUID(), new ArrayList()))); } @Override diff --git a/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/impl/rc/EventsJsonExportServlet.java b/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/impl/rc/EventsJsonExportServlet.java index 9edef6783f2..cc89faf6b48 100644 --- a/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/impl/rc/EventsJsonExportServlet.java +++ b/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/impl/rc/EventsJsonExportServlet.java @@ -62,7 +62,8 @@ public class EventsJsonExportServlet extends JsonExportServlet { "Kieler Woche 2012 - Where Sailing meets people", "Schilksee", "http://www.youtube.com", - true, Collections.emptyList()); + true, UUID.randomUUID(), + Collections.emptyList()); Venue schilksee = kielerWocheEvent.getVenue(); diff --git a/java/com.sap.sailing.server.replication.test/src/com/sap/sailing/server/replication/test/EventReplicationTest.java b/java/com.sap.sailing.server.replication.test/src/com/sap/sailing/server/replication/test/EventReplicationTest.java new file mode 100644 index 00000000000..672305ce2c6 --- /dev/null +++ b/java/com.sap.sailing.server.replication.test/src/com/sap/sailing/server/replication/test/EventReplicationTest.java @@ -0,0 +1,34 @@ +package com.sap.sailing.server.replication.test; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; + +import org.junit.Test; + +import com.sap.sailing.domain.base.Event; + +public class EventReplicationTest extends AbstractServerReplicationTest { + + @Test + public void testEventReplication() throws InterruptedException { + final String eventName = "ESS Masquat"; + final String venueName = "Masquat, Oman"; + final String publicationUrl = "http://ess40.sapsailing.com"; + final boolean isPublic = false; + List regattas = new ArrayList(); + regattas.add("Day1"); + regattas.add("Day2"); + Event masterEvent = master.addEvent(eventName, venueName, publicationUrl, isPublic, UUID.randomUUID(), regattas); + + Thread.sleep(1000); + Event replicatedEvent = replica.getEvent(masterEvent.getId()); + assertNotNull(replicatedEvent); + assertEquals(replicatedEvent.getName(), eventName); + assertEquals(replicatedEvent.getPublicationUrl(), publicationUrl); + assertEquals(replicatedEvent.getVenue().getName(), venueName); + } +} diff --git a/java/com.sap.sailing.server/src/com/sap/sailing/server/RacingEventService.java b/java/com.sap.sailing.server/src/com/sap/sailing/server/RacingEventService.java index e1541e509e4..84b61982fc2 100755 --- a/java/com.sap.sailing.server/src/com/sap/sailing/server/RacingEventService.java +++ b/java/com.sap.sailing.server/src/com/sap/sailing/server/RacingEventService.java @@ -453,11 +453,13 @@ public interface RacingEventService extends TrackedRegattaRegistry, RegattaFetch * The publication URL of the new event * @param isPublic * Indicates whether the event is public accessible via the publication URL or not + * @param id + * The id of the new event * @param regattaNames * The names of the regattas contained in the new event.
* @return The new event */ - Event addEvent(String eventName, String venueName, String publicationUrl, boolean isPublic, List regattaNames); + Event addEvent(String eventName, String venueName, String publicationUrl, boolean isPublic, Serializable id, List regattaNames); /** * Updates a sailing event with the name eventName, the venuevenue and the diff --git a/java/com.sap.sailing.server/src/com/sap/sailing/server/impl/RacingEventServiceImpl.java b/java/com.sap.sailing.server/src/com/sap/sailing/server/impl/RacingEventServiceImpl.java index fc09a80eb6b..38dbed5997d 100755 --- a/java/com.sap.sailing.server/src/com/sap/sailing/server/impl/RacingEventServiceImpl.java +++ b/java/com.sap.sailing.server/src/com/sap/sailing/server/impl/RacingEventServiceImpl.java @@ -19,7 +19,6 @@ import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set; -import java.util.UUID; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; @@ -109,6 +108,7 @@ import com.sap.sailing.server.operationaltransformation.AddDefaultRegatta; import com.sap.sailing.server.operationaltransformation.AddRaceDefinition; import com.sap.sailing.server.operationaltransformation.AddSpecificRegatta; import com.sap.sailing.server.operationaltransformation.ConnectTrackedRaceToLeaderboardColumn; +import com.sap.sailing.server.operationaltransformation.CreateEvent; import com.sap.sailing.server.operationaltransformation.CreateTrackedRace; import com.sap.sailing.server.operationaltransformation.RecordCompetitorGPSFix; import com.sap.sailing.server.operationaltransformation.RecordMarkGPSFix; @@ -1544,13 +1544,14 @@ public class RacingEventServiceImpl implements RacingEventService, RegattaListen } @Override - public Event addEvent(String eventName, String venue, String publicationUrl, boolean isPublic, List regattaNames) { - Event result = new EventImpl(eventName, venue, publicationUrl, isPublic, UUID.randomUUID()); + public Event addEvent(String eventName, String venue, String publicationUrl, boolean isPublic, Serializable id, List regattaNames) { + Event result = new EventImpl(eventName, venue, publicationUrl, isPublic, id); synchronized (eventsById) { if (eventsById.containsKey(result.getId())) { throw new IllegalArgumentException("Event with ID " + result.getId() + " already exists which is pretty surprising..."); } eventsById.put(result.getId(), result); + replicate(new CreateEvent(eventName, venue, publicationUrl, isPublic, id, regattaNames)); } mongoObjectFactory.storeEvent(result); return result; diff --git a/java/com.sap.sailing.server/src/com/sap/sailing/server/operationaltransformation/CreateEvent.java b/java/com.sap.sailing.server/src/com/sap/sailing/server/operationaltransformation/CreateEvent.java index 512fe612f72..0858649ddca 100644 --- a/java/com.sap.sailing.server/src/com/sap/sailing/server/operationaltransformation/CreateEvent.java +++ b/java/com.sap.sailing.server/src/com/sap/sailing/server/operationaltransformation/CreateEvent.java @@ -1,47 +1,48 @@ -package com.sap.sailing.server.operationaltransformation; - -import java.util.List; - -import com.sap.sailing.domain.base.Event; -import com.sap.sailing.server.RacingEventService; -import com.sap.sailing.server.RacingEventServiceOperation; - -public class CreateEvent extends AbstractEventOperation { - private static final long serialVersionUID = 308389324918359960L; - private final String venue; - private final String publicationUrl; - private final boolean isPublic; - private final List regattaNames; - private final String eventName; - - public CreateEvent(String eventName, String venue, String publicationUrl, boolean isPublic, List regattaNames) { - super(/* id */ null); - this.eventName = eventName; - this.venue = venue; - this.regattaNames = regattaNames; - this.publicationUrl = publicationUrl; - this.isPublic = isPublic; - } - - @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; - } - - protected String getEventName() { - return eventName; - } - - @Override - public Event internalApplyTo(RacingEventService toState) { - return toState.addEvent(getEventName(), venue, publicationUrl, isPublic, regattaNames); - } - -} +package com.sap.sailing.server.operationaltransformation; + +import java.io.Serializable; +import java.util.List; + +import com.sap.sailing.domain.base.Event; +import com.sap.sailing.server.RacingEventService; +import com.sap.sailing.server.RacingEventServiceOperation; + +public class CreateEvent extends AbstractEventOperation { + private static final long serialVersionUID = 308389324918359960L; + private final String venue; + private final String publicationUrl; + private final boolean isPublic; + private final List regattaNames; + private final String eventName; + + public CreateEvent(String eventName, String venue, String publicationUrl, boolean isPublic, Serializable id, List regattaNames) { + super(id); + this.eventName = eventName; + this.venue = venue; + this.regattaNames = regattaNames; + this.publicationUrl = publicationUrl; + this.isPublic = isPublic; + } + + @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; + } + + protected String getEventName() { + return eventName; + } + + @Override + public Event internalApplyTo(RacingEventService toState) { + return toState.addEvent(getEventName(), venue, publicationUrl, isPublic, getId(), regattaNames); + } + +}