# added replication to device configuratiom

This commit is contained in:
Lukas Niemeier committed 2013-10-24 20:00:39 +02:00
1 parent d8192aa7b2
commit 5230799349
12 files changed
+144 -5

No files matched your search

@@ -1,8 +1,10 @@
package com.sap.sailing.domain.base;
import java.io.Serializable;
import java.util.List;
import java.util.UUID;
import com.sap.sailing.domain.base.configuration.DeviceConfigurationMatcher;
import com.sap.sailing.domain.common.MarkType;
import com.sap.sailing.domain.common.NauticalSide;
@@ -82,5 +84,7 @@ public interface SharedDomainFactory {
CourseArea getExistingCourseAreaById(Serializable courseAreaId);
DeviceConfigurationMatcher getOrCreateDeviceConfigurationMatcher(DeviceConfigurationMatcher.Type type, List<String> clientIdentifiers);
}
@@ -2,7 +2,9 @@ package com.sap.sailing.domain.base.configuration;
import java.io.Serializable;
public interface DeviceConfigurationMatcher extends Serializable {
import com.sap.sailing.domain.base.IsManagedBySharedDomainFactory;
public interface DeviceConfigurationMatcher extends IsManagedBySharedDomainFactory, Serializable {
final static int RANK_SINGLE = 1;
final static int RANK_MULTI = 2;
final static int RANK_ANY = 3;
@@ -1,7 +1,10 @@
package com.sap.sailing.domain.base.configuration.impl;
import java.io.Serializable;
import java.util.Collections;
import com.sap.sailing.domain.base.IsManagedBySharedDomainFactory;
import com.sap.sailing.domain.base.SharedDomainFactory;
import com.sap.sailing.domain.base.configuration.DeviceConfigurationIdentifier;
import com.sap.sailing.domain.base.configuration.DeviceConfigurationMatcher;
@@ -30,4 +33,9 @@ public enum DeviceConfigurationMatcherAny implements DeviceConfigurationMatcher
return DeviceConfigurationMatcherAny.class.getSimpleName();
}
@Override
public IsManagedBySharedDomainFactory resolve(SharedDomainFactory domainFactory) {
return domainFactory.getOrCreateDeviceConfigurationMatcher(getMatcherType(), Collections.<String>emptyList());
}
}
@@ -5,6 +5,8 @@ import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import com.sap.sailing.domain.base.IsManagedBySharedDomainFactory;
import com.sap.sailing.domain.base.SharedDomainFactory;
import com.sap.sailing.domain.base.configuration.DeviceConfigurationIdentifier;
import com.sap.sailing.domain.base.configuration.DeviceConfigurationMatcher;
@@ -48,4 +50,9 @@ public class DeviceConfigurationMatcherMulti implements DeviceConfigurationMatch
return "DeviceConfigurationMatcherMulti [clientIdentifiers=" + clientIdentifiers + "]";
}
@Override
public IsManagedBySharedDomainFactory resolve(SharedDomainFactory domainFactory) {
return domainFactory.getOrCreateDeviceConfigurationMatcher(getMatcherType(), clientIdentifiers);
}
}
@@ -1,7 +1,10 @@
package com.sap.sailing.domain.base.configuration.impl;
import java.io.Serializable;
import java.util.Arrays;
import com.sap.sailing.domain.base.IsManagedBySharedDomainFactory;
import com.sap.sailing.domain.base.SharedDomainFactory;
import com.sap.sailing.domain.base.configuration.DeviceConfigurationIdentifier;
import com.sap.sailing.domain.base.configuration.DeviceConfigurationMatcher;
@@ -43,4 +46,9 @@ public class DeviceConfigurationMatcherSingle implements DeviceConfigurationMatc
return "DeviceConfigurationMatcherSingle [clientIdentifier=" + clientIdentifier + "]";
}
@Override
public IsManagedBySharedDomainFactory resolve(SharedDomainFactory domainFactory) {
return domainFactory.getOrCreateDeviceConfigurationMatcher(getMatcherType(), Arrays.asList(clientIdentifier));
}
}
@@ -114,6 +114,4 @@ public interface DomainFactory extends SharedDomainFactory {
*/
void updateRaceDTOWithTrackedRaceData(TrackedRace trackedRace, RaceDTO raceDTO);
DeviceConfigurationMatcher getOrCreateDeviceConfigurationMatcher(DeviceConfigurationMatcher.Type type, List<String> clientIdentifiers);
}
@@ -0,0 +1,27 @@
package com.sap.sailing.server.replication.test;
import static org.junit.Assert.assertEquals;
import java.util.Map;
import org.junit.Test;
import com.sap.sailing.domain.base.configuration.DeviceConfiguration;
import com.sap.sailing.domain.base.configuration.DeviceConfigurationMatcher;
import com.sap.sailing.domain.base.configuration.impl.DeviceConfigurationImpl;
import com.sap.sailing.domain.base.configuration.impl.DeviceConfigurationMatcherAny;
public class DeviceConfigurationReplicationTest extends AbstractServerReplicationTest {
@Test
public void testEventReplication() throws InterruptedException {
DeviceConfigurationMatcher matcher = DeviceConfigurationMatcherAny.INSTANCE;
DeviceConfigurationImpl configuration = new DeviceConfigurationImpl();
master.createOrUpdateDeviceConfiguration(matcher, configuration);
Thread.sleep(1000);
Map<DeviceConfigurationMatcher, DeviceConfiguration> configurationMap = replica.getAllDeviceConfigurations();
assertEquals(1, configurationMap.size());
assertEquals(matcher.getMatcherType(), configurationMap.keySet().iterator().next().getMatcherType());
}
}
@@ -131,10 +131,12 @@ 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.CreateOrUpdateDeviceConfiguration;
import com.sap.sailing.server.operationaltransformation.CreateTrackedRace;
import com.sap.sailing.server.operationaltransformation.RecordCompetitorGPSFix;
import com.sap.sailing.server.operationaltransformation.RecordMarkGPSFix;
import com.sap.sailing.server.operationaltransformation.RecordWindFix;
import com.sap.sailing.server.operationaltransformation.RemoveDeviceConfiguration;
import com.sap.sailing.server.operationaltransformation.RemoveEvent;
import com.sap.sailing.server.operationaltransformation.RemoveMediaTrackOperation;
import com.sap.sailing.server.operationaltransformation.RemoveWindFix;
@@ -2131,16 +2133,18 @@ public class RacingEventServiceImpl implements RacingEventService, RegattaListen
public void createOrUpdateDeviceConfiguration(DeviceConfigurationMatcher matcher, DeviceConfiguration configuration) {
synchronized (configurationMap) {
configurationMap.put(matcher, configuration);
mongoObjectFactory.storeDeviceConfiguration(matcher, configuration);
}
mongoObjectFactory.storeDeviceConfiguration(matcher, configuration);
replicate(new CreateOrUpdateDeviceConfiguration(matcher, configuration));
}
@Override
public void removeDeviceConfiguration(DeviceConfigurationMatcher matcher) {
synchronized (configurationMap) {
configurationMap.remove(matcher);
mongoObjectFactory.removeDeviceConfiguration(matcher);
}
mongoObjectFactory.removeDeviceConfiguration(matcher);
replicate(new RemoveDeviceConfiguration(matcher));
}
@Override
@@ -0,0 +1,27 @@
package com.sap.sailing.server.operationaltransformation;
import com.sap.sailing.domain.base.configuration.DeviceConfigurationMatcher;
import com.sap.sailing.server.RacingEventServiceOperation;
public abstract class AbstractDeviceConfigurationOperation extends AbstractRacingEventServiceOperation<Void> {
private static final long serialVersionUID = -4918619894046424881L;
protected DeviceConfigurationMatcher matcher;
public AbstractDeviceConfigurationOperation(DeviceConfigurationMatcher matcher) {
this.matcher = matcher;
}
@Override
public RacingEventServiceOperation<?> transformClientOp(RacingEventServiceOperation<?> serverOp) {
return null;
}
@Override
public RacingEventServiceOperation<?> transformServerOp(RacingEventServiceOperation<?> clientOp) {
return null;
}
}
@@ -0,0 +1,24 @@
package com.sap.sailing.server.operationaltransformation;
import com.sap.sailing.domain.base.configuration.DeviceConfiguration;
import com.sap.sailing.domain.base.configuration.DeviceConfigurationMatcher;
import com.sap.sailing.server.RacingEventService;
public class CreateOrUpdateDeviceConfiguration extends AbstractDeviceConfigurationOperation {
private static final long serialVersionUID = -3859272800957110301L;
private DeviceConfiguration configuration;
public CreateOrUpdateDeviceConfiguration(DeviceConfigurationMatcher matcher, DeviceConfiguration configuration) {
super(matcher);
this.configuration = configuration;
}
@Override
public Void internalApplyTo(RacingEventService toState) throws Exception {
toState.createOrUpdateDeviceConfiguration(matcher, configuration);
return null;
}
}
@@ -0,0 +1,21 @@
package com.sap.sailing.server.operationaltransformation;
import com.sap.sailing.domain.base.configuration.DeviceConfigurationMatcher;
import com.sap.sailing.server.RacingEventService;
public class RemoveDeviceConfiguration extends AbstractDeviceConfigurationOperation {
private static final long serialVersionUID = 4558840313811769137L;
public RemoveDeviceConfiguration(DeviceConfigurationMatcher matcher) {
super(matcher);
}
@Override
public Void internalApplyTo(RacingEventService toState) throws Exception {
toState.removeDeviceConfiguration(matcher);
return null;
}
}
@@ -4,11 +4,13 @@ import java.io.Serializable;
import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import android.annotation.SuppressLint;
import com.sap.sailing.domain.base.Boat;
import com.sap.sailing.domain.base.BoatClass;
import com.sap.sailing.domain.base.Competitor;
@@ -20,6 +22,8 @@ import com.sap.sailing.domain.base.Nationality;
import com.sap.sailing.domain.base.SharedDomainFactory;
import com.sap.sailing.domain.base.Team;
import com.sap.sailing.domain.base.Waypoint;
import com.sap.sailing.domain.base.configuration.DeviceConfigurationMatcher;
import com.sap.sailing.domain.base.configuration.DeviceConfigurationMatcher.Type;
import com.sap.sailing.domain.base.impl.BoatClassImpl;
import com.sap.sailing.domain.base.impl.CompetitorImpl;
import com.sap.sailing.domain.base.impl.CourseAreaImpl;
@@ -167,4 +171,9 @@ public enum DomainFactoryImpl implements SharedDomainFactory {
return courseAreaCache.get(courseAreaId);
}
@Override
public DeviceConfigurationMatcher getOrCreateDeviceConfigurationMatcher(Type type, List<String> clientIdentifiers) {
throw new UnsupportedOperationException("Not yet implemented");
}
}