added expeditionconnector.persistence bundle; started support for Expedition sensor and GPS device identifiers

Change-Id: Idaab85dde6088c3679e729e426b2483570df8bb1
This commit is contained in:
Axel Uhl committed 2017-10-24 17:18:23 +02:00
1 parent 905bf8a0d9
commit dfd0f5b4d0
41 files changed
+585 -35

No files matched your search

@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
<classpathentry kind="src" path="src"/>
<classpathentry kind="output" path="bin"/>
</classpath>
@@ -0,0 +1,28 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>com.sap.sailing.expeditionconnector.persistence</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.jdt.core.javabuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.pde.ManifestBuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.pde.SchemaBuilder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.pde.PluginNature</nature>
<nature>org.eclipse.jdt.core.javanature</nature>
</natures>
</projectDescription>
@@ -0,0 +1,7 @@
eclipse.preferences.version=1
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
org.eclipse.jdt.core.compiler.compliance=1.8
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
org.eclipse.jdt.core.compiler.source=1.8
@@ -0,0 +1,3 @@
eclipse.preferences.version=1
pluginProject.extensions=false
resolve.requirebundle=false
@@ -0,0 +1,14 @@
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: Persistence
Bundle-SymbolicName: com.sap.sailing.expeditionconnector.persistence
Bundle-Version: 1.0.0.qualifier
Bundle-Activator: com.sap.sailing.expeditionconnector.persistence.impl.Activator
Bundle-Vendor: SAP
Bundle-RequiredExecutionEnvironment: JavaSE-1.8
Import-Package: org.osgi.framework;version="1.3.0"
Require-Bundle: com.sap.sailing.domain.persistence,
com.sap.sailing.expeditionconnector,
com.sap.sailing.domain.shared.android,
com.sap.sailing.domain.common,
com.sap.sse.common
@@ -0,0 +1,4 @@
source.. = src/
output.. = bin/
bin.includes = META-INF/,\
.
@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<parent>
<artifactId>root</artifactId>
<groupId>com.sap.sailing</groupId>
<version>1.0.0-SNAPSHOT</version>
</parent>
<artifactId>com.sap.sailing.expeditionconnector.persistence</artifactId>
<packaging>eclipse-plugin</packaging>
</project>
@@ -0,0 +1,59 @@
package com.sap.sailing.expeditionconnector.persistence.impl;
import java.util.Dictionary;
import java.util.HashSet;
import java.util.Hashtable;
import java.util.Set;
import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext;
import org.osgi.framework.ServiceRegistration;
import com.sap.sailing.domain.persistence.racelog.tracking.DeviceIdentifierMongoHandler;
import com.sap.sailing.expeditionconnector.ExpeditionGpsDeviceIdentifier;
import com.sap.sailing.expeditionconnector.ExpeditionSensorDeviceIdentifier;
import com.sap.sse.common.TypeBasedServiceFinder;
public class Activator implements BundleActivator {
private static BundleContext context;
/**
* Registrations of OSGi services to be de-registered when the bundle shuts down
*/
private Set<ServiceRegistration<?>> registrations = new HashSet<>();
static BundleContext getContext() {
return context;
}
/*
* (non-Javadoc)
*
* @see org.osgi.framework.BundleActivator#start(org.osgi.framework.BundleContext)
*/
public void start(BundleContext bundleContext) throws Exception {
Activator.context = bundleContext;
registrations.add(context.registerService(DeviceIdentifierMongoHandler.class, new ExpeditionGpsDeviceIdentifierMongoHandler(), getDict(ExpeditionGpsDeviceIdentifier.TYPE)));
registrations.add(context.registerService(DeviceIdentifierMongoHandler.class, new ExpeditionSensorDeviceIdentifierMongoHandler(), getDict(ExpeditionSensorDeviceIdentifier.TYPE)));
}
/*
* (non-Javadoc)
*
* @see org.osgi.framework.BundleActivator#stop(org.osgi.framework.BundleContext)
*/
public void stop(BundleContext bundleContext) throws Exception {
Activator.context = null;
for (ServiceRegistration<?> reg : registrations) {
reg.unregister();
}
registrations.clear();
}
private Dictionary<String, String> getDict(String type) {
Dictionary<String, String> properties = new Hashtable<String, String>();
properties.put(TypeBasedServiceFinder.TYPE, type);
return properties;
}
}
@@ -0,0 +1,15 @@
package com.sap.sailing.expeditionconnector.persistence.impl;
import com.sap.sailing.domain.common.racelog.tracking.TransformationException;
import com.sap.sailing.domain.persistence.racelog.tracking.DeviceIdentifierMongoHandler;
import com.sap.sailing.domain.racelogtracking.DeviceIdentifier;
import com.sap.sailing.expeditionconnector.impl.ExpeditionGpsDeviceIdentifierSerializationHandler;
public class ExpeditionGpsDeviceIdentifierMongoHandler extends ExpeditionGpsDeviceIdentifierSerializationHandler
implements DeviceIdentifierMongoHandler {
@Override
public DeviceIdentifier deserialize(Object serialized, String type, String stringRepresentation)
throws TransformationException {
return deserialize((String) serialized, type, stringRepresentation);
}
}
@@ -0,0 +1,15 @@
package com.sap.sailing.expeditionconnector.persistence.impl;
import com.sap.sailing.domain.common.racelog.tracking.TransformationException;
import com.sap.sailing.domain.persistence.racelog.tracking.DeviceIdentifierMongoHandler;
import com.sap.sailing.domain.racelogtracking.DeviceIdentifier;
import com.sap.sailing.expeditionconnector.impl.ExpeditionSensorDeviceIdentifierSerializationHandler;
public class ExpeditionSensorDeviceIdentifierMongoHandler extends ExpeditionSensorDeviceIdentifierSerializationHandler
implements DeviceIdentifierMongoHandler {
@Override
public DeviceIdentifier deserialize(Object serialized, String type, String stringRepresentation)
throws TransformationException {
return deserialize((String) serialized, type, stringRepresentation);
}
}
@@ -39,7 +39,7 @@ import com.sap.sailing.domain.test.mock.MockedTrackedRace;
import com.sap.sailing.expeditionconnector.ExpeditionListener;
import com.sap.sailing.expeditionconnector.ExpeditionMessage;
import com.sap.sailing.expeditionconnector.ExpeditionWindTracker;
import com.sap.sailing.expeditionconnector.ExpeditionWindTrackerFactory;
import com.sap.sailing.expeditionconnector.ExpeditionTrackerFactory;
import com.sap.sailing.expeditionconnector.UDPExpeditionReceiver;
import com.sap.sse.common.TimePoint;
import com.sap.sse.common.Util;
@@ -261,7 +261,7 @@ public class UDPExpeditionReceiverTest {
MockedTrackedRace race = new MockedTrackedRace();
DeclinationService declinationService = DeclinationService.INSTANCE;
ExpeditionWindTracker windTracker = new ExpeditionWindTracker(race, declinationService, receiver,
(ExpeditionWindTrackerFactory) ExpeditionWindTrackerFactory.getInstance());
(ExpeditionTrackerFactory) ExpeditionTrackerFactory.getInstance());
receiver.addListener(listener, /* validMessagesOnly */ true);
receiver.addListener(windTracker, /* validMessagesOnly */ true);
String[] lines = new String[validLines.length+1];
@@ -6,13 +6,15 @@ Bundle-Version: 1.0.0.qualifier
Bundle-Vendor: SAP
Bundle-RequiredExecutionEnvironment: JavaSE-1.8
Export-Package: com.sap.sailing.expeditionconnector,
com.sap.sailing.expeditionconnector.impl;x-friends:="com.sap.sailing.server.test"
com.sap.sailing.expeditionconnector.impl;x-friends:="com.sap.sailing.server.test,com.sap.sailing.expeditionconnector.persistence"
Require-Bundle: com.sap.sailing.domain,
com.sap.sailing.declination,
com.sap.sailing.udpconnector,
com.sap.sailing.domain.common,
com.sap.sse.common,
com.sap.sse
com.sap.sse,
com.sap.sailing.domain.shared.android,
com.sap.sailing.server.gateway.serialization.shared.android
Bundle-ActivationPolicy: lazy
Import-Package: org.osgi.framework
Bundle-Activator: com.sap.sailing.expeditionconnector.impl.Activator
@@ -0,0 +1,32 @@
package com.sap.sailing.expeditionconnector;
import java.io.Serializable;
import java.util.UUID;
import com.sap.sse.common.impl.NamedImpl;
public class ExpeditionDeviceConfiguration extends NamedImpl implements Serializable {
private static final long serialVersionUID = -7819154195403387909L;
private final UUID deviceUuid;
/**
* The ID listed as first element in a UDP message coming from Expedition, prefixed by a '#'
* character.
*/
private final int expeditionBoatId;
public ExpeditionDeviceConfiguration(String name, UUID deviceUuid, int expeditionBoatId) {
super(name);
this.deviceUuid = deviceUuid;
this.expeditionBoatId = expeditionBoatId;
}
public UUID getDeviceUuid() {
return deviceUuid;
}
public int getExpeditionBoatId() {
return expeditionBoatId;
}
}
@@ -0,0 +1,12 @@
package com.sap.sailing.expeditionconnector;
import java.util.UUID;
import com.sap.sailing.domain.racelogtracking.DeviceIdentifier;
public interface ExpeditionDeviceIdentifier extends DeviceIdentifier {
/**
* Derived from an {@link ExpeditionDeviceConfiguration#getDeviceUuid()}.
*/
UUID getId();
}
@@ -0,0 +1,12 @@
package com.sap.sailing.expeditionconnector;
/**
* A device identifier used to identify an installation of the regatta tool "Expedition"
* regarding its basic GPS information.
*
* @author Fredrik Teschke
*
*/
public interface ExpeditionGpsDeviceIdentifier extends ExpeditionDeviceIdentifier {
public static final String TYPE = "EXPEDITION_GPS";
}
@@ -0,0 +1,12 @@
package com.sap.sailing.expeditionconnector;
/**
* A device identifier used to identify an installation of the regatta tool "Expedition"
* regarding its sensor data beyond the basic GPS and wind information.
*
* @author Axel Uhl
*
*/
public interface ExpeditionSensorDeviceIdentifier extends ExpeditionDeviceIdentifier {
public static final String TYPE = "EXPEDITION_SENSOR";
}
@@ -1,22 +1,27 @@
package com.sap.sailing.expeditionconnector;
import java.net.SocketException;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
import java.util.logging.Logger;
import com.sap.sailing.declination.DeclinationService;
import com.sap.sailing.domain.base.RaceDefinition;
import com.sap.sailing.domain.tracking.DynamicTrackedRegatta;
import com.sap.sailing.domain.common.tracking.DoubleVectorFix;
import com.sap.sailing.domain.common.tracking.GPSFixMoving;
import com.sap.sailing.domain.racelog.tracking.SensorFixStore;
import com.sap.sailing.domain.tracking.DynamicTrackedRace;
import com.sap.sailing.domain.tracking.DynamicTrackedRegatta;
import com.sap.sailing.domain.tracking.WindTracker;
import com.sap.sailing.domain.tracking.WindTrackerFactory;
import com.sap.sailing.expeditionconnector.impl.Activator;
public class ExpeditionWindTrackerFactory implements WindTrackerFactory {
private static Logger logger = Logger.getLogger(ExpeditionWindTrackerFactory.class.getName());
public class ExpeditionTrackerFactory implements WindTrackerFactory {
private static Logger logger = Logger.getLogger(ExpeditionTrackerFactory.class.getName());
private static ExpeditionWindTrackerFactory defaultInstance;
private static ExpeditionTrackerFactory defaultInstance;
/**
* Remembers the wind tracker and the port on which the UDP receiver with which the wind tracker is
@@ -26,18 +31,28 @@ public class ExpeditionWindTrackerFactory implements WindTrackerFactory {
private final Map<Integer, UDPExpeditionReceiver> windReceivers;
/**
* When one or more device configurations exist then each {@link UDPExpeditionReceiver} created by this factory will
* also produce {@link GPSFixMoving} and {@link DoubleVectorFix} fixes and send them to the {@link SensorFixStore},
* using device identifiers of type {@link ExpeditionGpsDeviceIdentifier} and
* {@link ExpeditionSensorDeviceIdentifier}, respectively, whose inner ID is the
* {@link ExpeditionDeviceConfiguration#getDeviceUuid() UUID} of the device configuration.
*/
private final Map<UUID, ExpeditionDeviceConfiguration> deviceConfigurations;
private final int defaultPort;
public ExpeditionWindTrackerFactory() {
public ExpeditionTrackerFactory() {
this.windTrackers = new HashMap<RaceDefinition, WindTracker>();
windReceivers = new HashMap<Integer, UDPExpeditionReceiver>();
defaultPort = Activator.getInstance().getExpeditionUDPPort();
deviceConfigurations = new HashMap<>(); // TODO add persistence; these need to be loaded from the DB
logger.info("Created "+getClass().getName()+" with default UDP port "+defaultPort);
}
public synchronized static ExpeditionWindTrackerFactory getInstance() {
public synchronized static ExpeditionTrackerFactory getInstance() {
if (defaultInstance == null) {
defaultInstance = new ExpeditionWindTrackerFactory();
defaultInstance = new ExpeditionTrackerFactory();
}
return defaultInstance;
}
@@ -81,7 +96,7 @@ public class ExpeditionWindTrackerFactory implements WindTrackerFactory {
* Notifies the factory that the wind tracker has stopped tracking wind for <code>race</code>. This
* will remove the tracker from the respective caches.
*/
synchronized void windTrackerStopped(RaceDefinition race, ExpeditionWindTracker windTracker) {
synchronized void trackerStopped(RaceDefinition race, ExpeditionWindTracker windTracker) {
if (windTrackers.get(race) != windTracker) {
throw new IllegalArgumentException("Intenral error: expected to remove wind tracker "+windTracker+
", but another wind tracker "+windTrackers.get(race)+" was registered.");
@@ -101,4 +116,16 @@ public class ExpeditionWindTrackerFactory implements WindTrackerFactory {
public String toString() {
return "ExpeditionWindTrackerFactory [defaultPort=" + defaultPort + "]";
}
public Iterable<? extends ExpeditionDeviceConfiguration> getDeviceConfigurations() {
return Collections.unmodifiableCollection(deviceConfigurations.values());
}
public void addOrReplaceDeviceConfiguration(ExpeditionDeviceConfiguration deviceConfiguration) {
deviceConfigurations.put(deviceConfiguration.getDeviceUuid(), deviceConfiguration);
}
public void removeDeviceConfiguration(ExpeditionDeviceConfiguration deviceConfiguration) {
deviceConfigurations.remove(deviceConfiguration.getDeviceUuid());
}
}
@@ -20,7 +20,7 @@ import com.sap.sailing.domain.tracking.DynamicTrackedRace;
import com.sap.sailing.domain.tracking.WindTracker;
/**
* Can be subscribed to a {@link UDPExpeditionReceiver} and forwards the wind information
* Can be subscribed to a {@link UDPExpeditionReceiver} and forwards wind information
* received to the {@link DynamicTrackedRace} passed to the constructor.
*
* @author Axel Uhl (d043530)
@@ -35,7 +35,7 @@ public class ExpeditionWindTracker extends AbstractWindTracker implements Expedi
private final UDPExpeditionReceiver receiver;
private final ExpeditionWindTrackerFactory factory;
private final ExpeditionTrackerFactory factory;
/**
* @param declinationService
@@ -47,7 +47,7 @@ public class ExpeditionWindTracker extends AbstractWindTracker implements Expedi
* calling {@link #stop}, this subscription will be removed again.
*/
public ExpeditionWindTracker(DynamicTrackedRace race, DeclinationService declinationService,
UDPExpeditionReceiver receiver, ExpeditionWindTrackerFactory factory) {
UDPExpeditionReceiver receiver, ExpeditionTrackerFactory factory) {
super(race);
this.lastKnownPositionPerBoatID = new HashMap<Integer, Position>();
this.declinationService = declinationService;
@@ -60,7 +60,7 @@ public class ExpeditionWindTracker extends AbstractWindTracker implements Expedi
public void stop() {
synchronized (factory) {
receiver.removeListener(this);
factory.windTrackerStopped(getTrackedRace().getRace(), this);
factory.trackerStopped(getTrackedRace().getRace(), this);
}
}
@@ -0,0 +1,37 @@
package com.sap.sailing.expeditionconnector.impl;
import java.util.UUID;
import com.sap.sailing.expeditionconnector.ExpeditionDeviceIdentifier;
public abstract class AbstractExpeditionDeviceIdentifierImpl implements ExpeditionDeviceIdentifier {
private static final long serialVersionUID = -6605059302775505785L;
private final UUID id;
public AbstractExpeditionDeviceIdentifierImpl(UUID id) {
super();
this.id = id;
}
@Override
public String getStringRepresentation() {
return id.toString();
}
@Override
public UUID getId() {
return id;
}
@Override
public boolean equals(Object obj) {
return (obj instanceof ExpeditionDeviceIdentifier) &&
((ExpeditionDeviceIdentifier) obj).getIdentifierType().equals(getIdentifierType()) &&
((ExpeditionDeviceIdentifier) obj).getId().equals(getId());
}
@Override
public int hashCode() {
return 9478 ^ getIdentifierType().hashCode() ^ getId().hashCode();
}
}
@@ -1,13 +1,23 @@
package com.sap.sailing.expeditionconnector.impl;
import java.util.Dictionary;
import java.util.HashSet;
import java.util.Hashtable;
import java.util.Set;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext;
import org.osgi.framework.ServiceRegistration;
import com.sap.sailing.domain.racelogtracking.DeviceIdentifierStringSerializationHandler;
import com.sap.sailing.domain.tracking.WindTrackerFactory;
import com.sap.sailing.expeditionconnector.ExpeditionWindTrackerFactory;
import com.sap.sailing.expeditionconnector.ExpeditionGpsDeviceIdentifier;
import com.sap.sailing.expeditionconnector.ExpeditionSensorDeviceIdentifier;
import com.sap.sailing.expeditionconnector.ExpeditionTrackerFactory;
import com.sap.sailing.server.gateway.serialization.racelog.tracking.DeviceIdentifierJsonHandler;
import com.sap.sse.common.TypeBasedServiceFinder;
public class Activator implements BundleActivator {
private static Logger logger = Logger.getLogger(Activator.class.getName());
@@ -16,6 +26,11 @@ public class Activator implements BundleActivator {
private static Activator instance;
/**
* Registrations of OSGi services to be de-registered when the bundle shuts down
*/
private Set<ServiceRegistration<?>> registrations = new HashSet<>();
private static final int DEFAULT_PORT = 2013;
private int port;
@@ -25,6 +40,12 @@ public class Activator implements BundleActivator {
logger.log(Level.INFO, "setting default for "+EXPEDITION_UDP_PORT_PROPERTY_NAME+" to "+port);
}
private Dictionary<String, String> getDict(String type) {
Dictionary<String, String> properties = new Hashtable<String, String>();
properties.put(TypeBasedServiceFinder.TYPE, type);
return properties;
}
@Override
public void start(BundleContext context) throws Exception {
if (instance == null) {
@@ -35,8 +56,13 @@ public class Activator implements BundleActivator {
logger.log(Level.INFO, "found "+EXPEDITION_UDP_PORT_PROPERTY_NAME+"="+port+" in OSGi context");
}
// register the Expedition wind tracker factory as an OSGi service
context.registerService(ExpeditionWindTrackerFactory.class, ExpeditionWindTrackerFactory.getInstance(), /* properties */null);
context.registerService(WindTrackerFactory.class, ExpeditionWindTrackerFactory.getInstance(), /* properties */null);
registrations.add(context.registerService(ExpeditionTrackerFactory.class, ExpeditionTrackerFactory.getInstance(), /* properties */null));
registrations.add(context.registerService(WindTrackerFactory.class, ExpeditionTrackerFactory.getInstance(), /* properties */null));
registrations.add(context.registerService(DeviceIdentifierJsonHandler.class, new ExpeditionGpsDeviceIdentifierJsonHandler(), getDict(ExpeditionGpsDeviceIdentifier.TYPE)));
registrations.add(context.registerService(DeviceIdentifierStringSerializationHandler.class, new ExpeditionGpsStringSerializationHandler(), getDict(ExpeditionGpsDeviceIdentifier.TYPE)));
registrations.add(context.registerService(DeviceIdentifierJsonHandler.class, new ExpeditionSensorDeviceIdentifierJsonHandler(), getDict(ExpeditionSensorDeviceIdentifier.TYPE)));
registrations.add(context.registerService(DeviceIdentifierStringSerializationHandler.class, new ExpeditionSensorStringSerializationHandler(), getDict(ExpeditionSensorDeviceIdentifier.TYPE)));
}
public static Activator getInstance() {
@@ -48,6 +74,10 @@ public class Activator implements BundleActivator {
@Override
public void stop(BundleContext context) throws Exception {
for (ServiceRegistration<?> reg : registrations) {
reg.unregister();
}
registrations.clear();
}
public int getExpeditionUDPPort() {
@@ -0,0 +1,18 @@
package com.sap.sailing.expeditionconnector.impl;
import java.util.UUID;
import com.sap.sailing.expeditionconnector.ExpeditionGpsDeviceIdentifier;
public class ExpeditionGpsDeviceIdentifierImpl extends AbstractExpeditionDeviceIdentifierImpl implements ExpeditionGpsDeviceIdentifier {
private static final long serialVersionUID = -4049961972156611640L;
public ExpeditionGpsDeviceIdentifierImpl(UUID id) {
super(id);
}
@Override
public String getIdentifierType() {
return ExpeditionGpsDeviceIdentifier.TYPE;
}
}
@@ -0,0 +1,16 @@
package com.sap.sailing.expeditionconnector.impl;
import com.sap.sailing.domain.common.racelog.tracking.TransformationException;
import com.sap.sailing.domain.racelogtracking.DeviceIdentifier;
import com.sap.sailing.server.gateway.serialization.racelog.tracking.DeviceIdentifierJsonHandler;
public class ExpeditionGpsDeviceIdentifierJsonHandler extends ExpeditionGpsDeviceIdentifierSerializationHandler
implements DeviceIdentifierJsonHandler {
@Override
public DeviceIdentifier deserialize(Object serialized, String type, String stringRepresentation)
throws TransformationException {
return deserialize((String) serialized, type, stringRepresentation);
}
}
@@ -0,0 +1,28 @@
package com.sap.sailing.expeditionconnector.impl;
import java.util.UUID;
import com.sap.sailing.domain.common.racelog.tracking.TransformationException;
import com.sap.sailing.domain.racelogtracking.DeviceIdentifier;
import com.sap.sailing.expeditionconnector.ExpeditionGpsDeviceIdentifier;
import com.sap.sse.common.Util;
public class ExpeditionGpsDeviceIdentifierSerializationHandler {
private ExpeditionGpsDeviceIdentifier castIdentifier(DeviceIdentifier identifier) throws TransformationException {
if (!(identifier instanceof ExpeditionGpsDeviceIdentifier))
throw new TransformationException("Expected a ExpeditionGpsDeviceIdentifier, got instead: " + identifier);
return (ExpeditionGpsDeviceIdentifier) identifier;
}
public Util.Pair<String, String> serialize(DeviceIdentifier deviceIdentifier) throws TransformationException {
return new Util.Pair<String, String>(ExpeditionGpsDeviceIdentifier.TYPE, castIdentifier(deviceIdentifier).getId().toString());
}
public DeviceIdentifier deserialize(String input, String type, String stringRep) throws TransformationException {
try {
return new ExpeditionGpsDeviceIdentifierImpl(UUID.fromString(input));
} catch (IllegalArgumentException e) {
throw new TransformationException("Invalid string representation of smartphone UUID", e);
}
}
}
@@ -0,0 +1,8 @@
package com.sap.sailing.expeditionconnector.impl;
import com.sap.sailing.domain.racelogtracking.DeviceIdentifierStringSerializationHandler;
public class ExpeditionGpsStringSerializationHandler extends ExpeditionGpsDeviceIdentifierSerializationHandler
implements DeviceIdentifierStringSerializationHandler {
}
@@ -0,0 +1,18 @@
package com.sap.sailing.expeditionconnector.impl;
import java.util.UUID;
import com.sap.sailing.expeditionconnector.ExpeditionSensorDeviceIdentifier;
public class ExpeditionSensorDeviceIdentifierImpl extends AbstractExpeditionDeviceIdentifierImpl implements ExpeditionSensorDeviceIdentifier {
private static final long serialVersionUID = -4049961972156611640L;
public ExpeditionSensorDeviceIdentifierImpl(UUID id) {
super(id);
}
@Override
public String getIdentifierType() {
return ExpeditionSensorDeviceIdentifier.TYPE;
}
}
@@ -0,0 +1,16 @@
package com.sap.sailing.expeditionconnector.impl;
import com.sap.sailing.domain.common.racelog.tracking.TransformationException;
import com.sap.sailing.domain.racelogtracking.DeviceIdentifier;
import com.sap.sailing.server.gateway.serialization.racelog.tracking.DeviceIdentifierJsonHandler;
public class ExpeditionSensorDeviceIdentifierJsonHandler extends ExpeditionSensorDeviceIdentifierSerializationHandler
implements DeviceIdentifierJsonHandler {
@Override
public DeviceIdentifier deserialize(Object serialized, String type, String stringRepresentation)
throws TransformationException {
return deserialize((String) serialized, type, stringRepresentation);
}
}
@@ -0,0 +1,28 @@
package com.sap.sailing.expeditionconnector.impl;
import java.util.UUID;
import com.sap.sailing.domain.common.racelog.tracking.TransformationException;
import com.sap.sailing.domain.racelogtracking.DeviceIdentifier;
import com.sap.sailing.expeditionconnector.ExpeditionSensorDeviceIdentifier;
import com.sap.sse.common.Util;
public class ExpeditionSensorDeviceIdentifierSerializationHandler {
private ExpeditionSensorDeviceIdentifier castIdentifier(DeviceIdentifier identifier) throws TransformationException {
if (!(identifier instanceof ExpeditionSensorDeviceIdentifier))
throw new TransformationException("Expected a ExpeditionSensorDeviceIdentifier, got instead: " + identifier);
return (ExpeditionSensorDeviceIdentifier) identifier;
}
public Util.Pair<String, String> serialize(DeviceIdentifier deviceIdentifier) throws TransformationException {
return new Util.Pair<String, String>(ExpeditionSensorDeviceIdentifier.TYPE, castIdentifier(deviceIdentifier).getId().toString());
}
public DeviceIdentifier deserialize(String input, String type, String stringRep) throws TransformationException {
try {
return new ExpeditionSensorDeviceIdentifierImpl(UUID.fromString(input));
} catch (IllegalArgumentException e) {
throw new TransformationException("Invalid string representation of smartphone UUID", e);
}
}
}
@@ -0,0 +1,8 @@
package com.sap.sailing.expeditionconnector.impl;
import com.sap.sailing.domain.racelogtracking.DeviceIdentifierStringSerializationHandler;
public class ExpeditionSensorStringSerializationHandler extends ExpeditionSensorDeviceIdentifierSerializationHandler
implements DeviceIdentifierStringSerializationHandler {
}
@@ -47,6 +47,7 @@
<plugin id="com.sap.sailing.domain.tractracadapter" autoStart="false" startLevel="4" />
<plugin id="com.sap.sailing.domain.tractracadapter.persistence" autoStart="true" startLevel="3" />
<plugin id="com.sap.sailing.ess40.resultimport" autoStart="true" startLevel="3" />
<plugin id="com.sap.sailing.expeditionconnector.persistence" autoStart="true" startLevel="3" />
<plugin id="com.sap.sailing.freg.resultimport" autoStart="true" startLevel="3" />
<plugin id="com.sap.sailing.gwt.ui" autoStart="true" startLevel="5" />
<plugin id="com.sap.sailing.kiworesultimport" autoStart="true" startLevel="3" />
+7
View File
@@ -402,4 +402,11 @@ Computes leaderboard information for sailing races and offers RESTful APIs to al
version="0.0.0"
unpack="false"/>
<plugin
id="com.sap.sailing.expeditionconnector.persistence"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
</feature>
@@ -53,7 +53,8 @@ Require-Bundle: com.sap.sailing.domain,
com.sap.sailing.polars.datamining,
com.sap.sse.datamining.annotations,
com.sap.sse.shared.android,
com.sap.sailing.competitorimport
com.sap.sailing.competitorimport,
com.sap.sailing.expeditionconnector
Bundle-Activator: com.sap.sailing.gwt.ui.server.Activator
Bundle-ActivationPolicy: lazy
Import-Package: javax.servlet;version="3.1.0",
@@ -0,0 +1,52 @@
package com.google.gwt.user.client.rpc.core.com.sap.sailing.expeditionconnector;
import java.util.UUID;
import com.google.gwt.user.client.rpc.CustomFieldSerializer;
import com.google.gwt.user.client.rpc.SerializationException;
import com.google.gwt.user.client.rpc.SerializationStreamReader;
import com.google.gwt.user.client.rpc.SerializationStreamWriter;
import com.sap.sailing.expeditionconnector.ExpeditionDeviceConfiguration;
public class ExpeditionDeviceConfiguration_CustomFieldSerializer extends CustomFieldSerializer<ExpeditionDeviceConfiguration> {
@Override
public void serializeInstance(SerializationStreamWriter streamWriter, ExpeditionDeviceConfiguration instance)
throws SerializationException {
serialize(streamWriter, instance);
}
public static void serialize(SerializationStreamWriter streamWriter, ExpeditionDeviceConfiguration instance)
throws SerializationException {
streamWriter.writeString(instance.getName());
streamWriter.writeObject(instance.getDeviceUuid());
streamWriter.writeInt(instance.getExpeditionBoatId());
}
@Override
public boolean hasCustomInstantiateInstance() {
return true;
}
@Override
public ExpeditionDeviceConfiguration instantiateInstance(SerializationStreamReader streamReader)
throws SerializationException {
return instantiate(streamReader);
}
public static ExpeditionDeviceConfiguration instantiate(SerializationStreamReader streamReader)
throws SerializationException {
return new ExpeditionDeviceConfiguration(streamReader.readString(), (UUID) streamReader.readObject(), streamReader.readInt());
}
@Override
public void deserializeInstance(SerializationStreamReader streamReader, ExpeditionDeviceConfiguration instance)
throws SerializationException {
deserialize(streamReader, instance);
}
public static void deserialize(SerializationStreamReader streamReader, ExpeditionDeviceConfiguration instance) {
// Done by instantiateInstance
}
}
@@ -49,6 +49,7 @@ import com.sap.sailing.domain.common.tracking.impl.PreciseCompactGPSFixMovingImp
import com.sap.sailing.domain.racelog.tracking.GPSFixStore;
import com.sap.sailing.domain.racelogtracking.RaceLogTrackingAdapter;
import com.sap.sailing.domain.tracking.TrackedRace;
import com.sap.sailing.expeditionconnector.ExpeditionDeviceConfiguration;
import com.sap.sailing.gwt.ui.adminconsole.RaceLogSetTrackingTimesDTO;
import com.sap.sailing.gwt.ui.client.shared.charts.MarkPositionService.MarkTrackDTO;
import com.sap.sailing.gwt.ui.client.shared.charts.MarkPositionService.MarkTracksDTO;
@@ -682,4 +683,6 @@ public interface SailingService extends RemoteService, FileStorageManagementGwtS
* an option for charts, if it actually recorded for the race.
*/
List<DetailType> determineDetailTypes(String leaderboardGroupName, RegattaAndRaceIdentifier identifier);
List<ExpeditionDeviceConfiguration> getExpeditionDeviceConfigurations();
}
@@ -38,6 +38,7 @@ import com.sap.sailing.domain.common.dto.RegattaCreationParametersDTO;
import com.sap.sailing.domain.common.racelog.RacingProcedureType;
import com.sap.sailing.domain.common.tracking.impl.PreciseCompactGPSFixMovingImpl.PreciseCompactPosition;
import com.sap.sailing.domain.tracking.TrackedRace;
import com.sap.sailing.expeditionconnector.ExpeditionDeviceConfiguration;
import com.sap.sailing.gwt.ui.adminconsole.RaceLogSetTrackingTimesDTO;
import com.sap.sailing.gwt.ui.client.shared.charts.MarkPositionService.MarkTrackDTO;
import com.sap.sailing.gwt.ui.client.shared.charts.MarkPositionService.MarkTracksDTO;
@@ -846,4 +847,6 @@ public interface SailingServiceAsync extends ServerInfoRetriever, FileStorageMan
*/
void determineDetailTypes(String leaderboardGroupName, RegattaAndRaceIdentifier identifier,
AsyncCallback<List<DetailType>> callback);
void getExpeditionDeviceConfigurations(AsyncCallback<List<ExpeditionDeviceConfiguration>> callback);
}
@@ -303,6 +303,8 @@ import com.sap.sailing.domain.tractracadapter.TracTracAdapter;
import com.sap.sailing.domain.tractracadapter.TracTracAdapterFactory;
import com.sap.sailing.domain.tractracadapter.TracTracConfiguration;
import com.sap.sailing.domain.tractracadapter.TracTracConnectionConstants;
import com.sap.sailing.expeditionconnector.ExpeditionDeviceConfiguration;
import com.sap.sailing.expeditionconnector.ExpeditionTrackerFactory;
import com.sap.sailing.gwt.server.HomeServiceUtil;
import com.sap.sailing.gwt.ui.adminconsole.RaceLogSetTrackingTimesDTO;
import com.sap.sailing.gwt.ui.client.SailingService;
@@ -525,6 +527,8 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S
private final MongoObjectFactory mongoObjectFactory;
private final ServiceTracker<ExpeditionTrackerFactory, ExpeditionTrackerFactory> expeditionConnectorTracker;
private final SwissTimingAdapterPersistence swissTimingAdapterPersistence;
private final ServiceTracker<SwissTimingAdapterFactory, SwissTimingAdapterFactory> swissTimingAdapterTracker;
@@ -597,6 +601,7 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S
swissTimingReplayService = ServiceTrackerFactory.createAndOpen(context, SwissTimingReplayServiceFactory.class)
.getService().createSwissTimingReplayService(getSwissTimingAdapter().getSwissTimingDomainFactory(),
/* raceLogResolver */ getService());
expeditionConnectorTracker = ServiceTrackerFactory.createAndOpen(context, ExpeditionTrackerFactory.class);
scoreCorrectionProviderServiceTracker = ServiceTrackerFactory.createAndOpen(context,
ScoreCorrectionProvider.class);
competitorProviderServiceTracker = ServiceTrackerFactory.createAndOpen(context, CompetitorProvider.class);
@@ -6651,4 +6656,13 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S
}
return availableDetailsTypes;
}
@Override
public List<ExpeditionDeviceConfiguration> getExpeditionDeviceConfigurations() {
final List<ExpeditionDeviceConfiguration> result = new ArrayList<>();
final ExpeditionTrackerFactory expeditionConnector = expeditionConnectorTracker.getService();
if (expeditionConnector != null) {
Util.addAll(expeditionConnector.getDeviceConfigurations(), result);
}
}
}
@@ -11,7 +11,7 @@ import org.osgi.util.tracker.ServiceTracker;
import com.sap.sailing.expeditionconnector.ExpeditionListener;
import com.sap.sailing.expeditionconnector.ExpeditionMessage;
import com.sap.sailing.expeditionconnector.ExpeditionWindTrackerFactory;
import com.sap.sailing.expeditionconnector.ExpeditionTrackerFactory;
import com.sap.sailing.expeditionconnector.UDPExpeditionReceiver;
import com.sap.sailing.server.gateway.AbstractHttpPostServlet;
import com.sap.sailing.server.gateway.HttpMessageSenderServletRequestHandler;
@@ -50,9 +50,9 @@ public class ExpeditionThroughHttpPostServletHandler extends HttpMessageSenderSe
receiver.addListener(listener, validMessagesOnly);
}
private ServiceTracker<ExpeditionWindTrackerFactory, ExpeditionWindTrackerFactory> createExpeditionTrackerFactory(BundleContext context) {
ServiceTracker<ExpeditionWindTrackerFactory, ExpeditionWindTrackerFactory> result = new ServiceTracker<ExpeditionWindTrackerFactory, ExpeditionWindTrackerFactory>(
getContext(), ExpeditionWindTrackerFactory.class.getName(), null);
private ServiceTracker<ExpeditionTrackerFactory, ExpeditionTrackerFactory> createExpeditionTrackerFactory(BundleContext context) {
ServiceTracker<ExpeditionTrackerFactory, ExpeditionTrackerFactory> result = new ServiceTracker<ExpeditionTrackerFactory, ExpeditionTrackerFactory>(
getContext(), ExpeditionTrackerFactory.class.getName(), null);
result.open();
return result;
}
@@ -61,7 +61,7 @@ public class ExpeditionThroughHttpPostServletHandler extends HttpMessageSenderSe
protected void stop() {
UDPExpeditionReceiver receiver;
try {
ExpeditionWindTrackerFactory windTrackerFactory = createExpeditionTrackerFactory(getContext()).getService();
ExpeditionTrackerFactory windTrackerFactory = createExpeditionTrackerFactory(getContext()).getService();
receiver = windTrackerFactory.getOrCreateWindReceiverOnDefaultPort();
receiver.removeListener(listener);
} catch (SocketException e) {
@@ -21,7 +21,7 @@ import com.sap.sailing.domain.common.SpeedWithBearing;
import com.sap.sailing.domain.common.tracking.GPSFix;
import com.sap.sailing.expeditionconnector.ExpeditionListener;
import com.sap.sailing.expeditionconnector.ExpeditionMessage;
import com.sap.sailing.expeditionconnector.ExpeditionWindTrackerFactory;
import com.sap.sailing.expeditionconnector.ExpeditionTrackerFactory;
import com.sap.sailing.expeditionconnector.UDPExpeditionReceiver;
import com.sap.sailing.server.gateway.SailingServerHttpServlet;
@@ -112,9 +112,9 @@ public class ExpeditionWindMeasureStatusGetServlet extends SailingServerHttpServ
receiver.addListener(listener, validMessagesOnly);
}
private ServiceTracker<ExpeditionWindTrackerFactory, ExpeditionWindTrackerFactory> createExpeditionTrackerFactory(BundleContext context) {
ServiceTracker<ExpeditionWindTrackerFactory, ExpeditionWindTrackerFactory> result = new ServiceTracker<ExpeditionWindTrackerFactory, ExpeditionWindTrackerFactory>(
getContext(), ExpeditionWindTrackerFactory.class.getName(), null);
private ServiceTracker<ExpeditionTrackerFactory, ExpeditionTrackerFactory> createExpeditionTrackerFactory(BundleContext context) {
ServiceTracker<ExpeditionTrackerFactory, ExpeditionTrackerFactory> result = new ServiceTracker<ExpeditionTrackerFactory, ExpeditionTrackerFactory>(
getContext(), ExpeditionTrackerFactory.class.getName(), null);
result.open();
return result;
}
@@ -29,7 +29,7 @@ import com.sap.sailing.domain.igtimiadapter.datatypes.Fix;
import com.sap.sailing.domain.igtimiadapter.shared.IgtimiWindReceiver;
import com.sap.sailing.expeditionconnector.ExpeditionListener;
import com.sap.sailing.expeditionconnector.ExpeditionMessage;
import com.sap.sailing.expeditionconnector.ExpeditionWindTrackerFactory;
import com.sap.sailing.expeditionconnector.ExpeditionTrackerFactory;
import com.sap.sailing.expeditionconnector.UDPExpeditionReceiver;
import com.sap.sailing.server.gateway.SailingServerHttpServlet;
import com.sap.sse.common.Util;
@@ -148,8 +148,8 @@ public abstract class WindStatusServlet extends SailingServerHttpServlet impleme
private boolean registerExpeditionListener() {
boolean result = false;
try {
ServiceTracker<ExpeditionWindTrackerFactory, ExpeditionWindTrackerFactory> expeditionServiceTracker = new ServiceTracker<ExpeditionWindTrackerFactory, ExpeditionWindTrackerFactory>(
getContext(), ExpeditionWindTrackerFactory.class.getName(), null);
ServiceTracker<ExpeditionTrackerFactory, ExpeditionTrackerFactory> expeditionServiceTracker = new ServiceTracker<ExpeditionTrackerFactory, ExpeditionTrackerFactory>(
getContext(), ExpeditionTrackerFactory.class.getName(), null);
expeditionServiceTracker.open();
UDPExpeditionReceiver receiver = expeditionServiceTracker.getService().getOrCreateWindReceiverOnDefaultPort();
receiver.addListener(new ExpeditionListener() {
@@ -36,5 +36,5 @@
<booleanAttribute key="tracing" value="false"/>
<booleanAttribute key="useCustomFeatures" value="false"/>
<booleanAttribute key="useDefaultConfigArea" value="false"/>
<stringAttribute key="workspace_bundles" value="com.google.gwt.servlet@default:default,com.googlecode.java-diff-utils@default:default,com.googlecode.mgwt@default:default,com.sap.sailing.barbados.resultimport@default:default,com.sap.sailing.competitorimport@default:default,com.sap.sailing.dashboards.gwt@5:true,com.sap.sailing.datamining.provider@default:default,com.sap.sailing.datamining.shared@default:default,com.sap.sailing.datamining@default:default,com.sap.sailing.declination@default:default,com.sap.sailing.domain.common@default:default,com.sap.sailing.domain.deckmanadapter@4:true,com.sap.sailing.domain.expeditionadapter@4:true,com.sap.sailing.domain.igtimiadapter.persistence@default:default,com.sap.sailing.domain.igtimiadapter@default:default,com.sap.sailing.domain.persistence@default:default,com.sap.sailing.domain.racelogtrackingadapter@3:default,com.sap.sailing.domain.shared.android@default:default,com.sap.sailing.domain.swisstimingadapter.persistence@default:default,com.sap.sailing.domain.swisstimingadapter@4:true,com.sap.sailing.domain.swisstimingreplayadapter@4:true,com.sap.sailing.domain.tractracadapter.persistence@default:default,com.sap.sailing.domain.tractracadapter@4:true,com.sap.sailing.domain@default:default,com.sap.sailing.ess40.resultimport@default:default,com.sap.sailing.expeditionconnector@default:default,com.sap.sailing.freg.resultimport@default:default,com.sap.sailing.geocoding@default:default,com.sap.sailing.grib@default:default,com.sap.sailing.gwt.ui@5:true,com.sap.sailing.kiworesultimport@default:default,com.sap.sailing.manage2sail.resultimport@default:default,com.sap.sailing.manage2sail@default:default,com.sap.sailing.monitoring@default:default,com.sap.sailing.news@default:default,com.sap.sailing.nmeaconnector@default:default,com.sap.sailing.polars.datamining.shared@default:default,com.sap.sailing.polars.datamining@default:default,com.sap.sailing.polars@4:true,com.sap.sailing.resultimport@default:default,com.sap.sailing.sailwave.resultimport@default:default,com.sap.sailing.server.gateway.serialization.shared.android@default:default,com.sap.sailing.server.gateway.serialization@default:default,com.sap.sailing.server.gateway@5:true,com.sap.sailing.server.trackfiles@default:default,com.sap.sailing.server@default:default,com.sap.sailing.simulator@default:default,com.sap.sailing.udpconnector@default:default,com.sap.sailing.velum.resultimport@default:default,com.sap.sailing.www@4:true,com.sap.sailing.xrr.resultimport@default:default,com.sap.sailing.xrr.schema@default:default,com.sap.sailing.xrr.structureimport@default:default,com.sap.sailing.yachtscoring.resultimport@default:default,com.sap.sse.common@default:default,com.sap.sse.datamining.annotations@default:default,com.sap.sse.datamining.shared@default:default,com.sap.sse.datamining@default:default,com.sap.sse.filestorage@default:default,com.sap.sse.gwt.adminconsole@default:default,com.sap.sse.gwt@default:default,com.sap.sse.mail@4:true,com.sap.sse.mongodb@default:default,com.sap.sse.operationaltransformation@default:default,com.sap.sse.replication@4:true,com.sap.sse.security.common@default:default,com.sap.sse.security.ui@6:true,com.sap.sse.security.userstore.mongodb@4:true,com.sap.sse.security@5:true,com.sap.sse.shared.android@default:default,com.sap.sse@default:default,com.tractrac.clientmodule@default:default,net.sf.marineapi@default:default,org.json.simple@default:default,org.moxieapps.gwt.highcharts@default:default"/>
<stringAttribute key="workspace_bundles" value="com.google.gwt.servlet@default:default,com.googlecode.java-diff-utils@default:default,com.googlecode.mgwt@default:default,com.sap.sailing.barbados.resultimport@default:default,com.sap.sailing.competitorimport@default:default,com.sap.sailing.dashboards.gwt@5:true,com.sap.sailing.datamining.provider@default:default,com.sap.sailing.datamining.shared@default:default,com.sap.sailing.datamining@default:default,com.sap.sailing.declination@default:default,com.sap.sailing.domain.common@default:default,com.sap.sailing.domain.deckmanadapter@4:true,com.sap.sailing.domain.expeditionadapter@4:true,com.sap.sailing.domain.igtimiadapter.persistence@default:default,com.sap.sailing.domain.igtimiadapter@default:default,com.sap.sailing.domain.persistence@default:default,com.sap.sailing.domain.racelogtrackingadapter@3:default,com.sap.sailing.domain.shared.android@default:default,com.sap.sailing.domain.swisstimingadapter.persistence@default:default,com.sap.sailing.domain.swisstimingadapter@4:true,com.sap.sailing.domain.swisstimingreplayadapter@4:true,com.sap.sailing.domain.tractracadapter.persistence@default:default,com.sap.sailing.domain.tractracadapter@4:true,com.sap.sailing.domain@default:default,com.sap.sailing.ess40.resultimport@default:default,com.sap.sailing.expeditionconnector.persistence@3:true,com.sap.sailing.expeditionconnector@default:default,com.sap.sailing.freg.resultimport@default:default,com.sap.sailing.geocoding@default:default,com.sap.sailing.grib@default:default,com.sap.sailing.gwt.ui@5:true,com.sap.sailing.kiworesultimport@default:default,com.sap.sailing.manage2sail.resultimport@default:default,com.sap.sailing.manage2sail@default:default,com.sap.sailing.monitoring@default:default,com.sap.sailing.news@default:default,com.sap.sailing.nmeaconnector@default:default,com.sap.sailing.polars.datamining.shared@default:default,com.sap.sailing.polars.datamining@default:default,com.sap.sailing.polars@4:true,com.sap.sailing.resultimport@default:default,com.sap.sailing.sailwave.resultimport@default:default,com.sap.sailing.server.gateway.serialization.shared.android@default:default,com.sap.sailing.server.gateway.serialization@default:default,com.sap.sailing.server.gateway@5:true,com.sap.sailing.server.trackfiles@default:default,com.sap.sailing.server@default:default,com.sap.sailing.simulator@default:default,com.sap.sailing.udpconnector@default:default,com.sap.sailing.velum.resultimport@default:default,com.sap.sailing.www@4:true,com.sap.sailing.xrr.resultimport@default:default,com.sap.sailing.xrr.schema@default:default,com.sap.sailing.xrr.structureimport@default:default,com.sap.sailing.yachtscoring.resultimport@default:default,com.sap.sse.common@default:default,com.sap.sse.datamining.annotations@default:default,com.sap.sse.datamining.shared@default:default,com.sap.sse.datamining@default:default,com.sap.sse.filestorage@default:default,com.sap.sse.gwt.adminconsole@default:default,com.sap.sse.gwt@default:default,com.sap.sse.mail@4:true,com.sap.sse.mongodb@default:default,com.sap.sse.operationaltransformation@default:default,com.sap.sse.replication@4:true,com.sap.sse.security.common@default:default,com.sap.sse.security.ui@6:true,com.sap.sse.security.userstore.mongodb@4:true,com.sap.sse.security@5:true,com.sap.sse.shared.android@default:default,com.sap.sse@default:default,com.tractrac.clientmodule@default:default,net.sf.marineapi@default:default,org.json.simple@default:default,org.moxieapps.gwt.highcharts@default:default"/>
</launchConfiguration>
@@ -178,7 +178,7 @@ import com.sap.sailing.domain.tracking.WindTrackerFactory;
import com.sap.sailing.domain.tracking.impl.AbstractRaceChangeListener;
import com.sap.sailing.domain.tracking.impl.DynamicTrackedRegattaImpl;
import com.sap.sailing.domain.tracking.impl.TrackedRaceImpl;
import com.sap.sailing.expeditionconnector.ExpeditionWindTrackerFactory;
import com.sap.sailing.expeditionconnector.ExpeditionTrackerFactory;
import com.sap.sailing.server.RacingEventService;
import com.sap.sailing.server.Replicator;
import com.sap.sailing.server.anniversary.AnniversaryRaceDeterminator;
@@ -3512,7 +3512,7 @@ public class RacingEventServiceImpl implements RacingEventService, ClearStateTes
private Iterable<WindTrackerFactory> getWindTrackerFactories() {
final Set<WindTrackerFactory> result;
if (bundleContext == null) {
result = Collections.singleton((WindTrackerFactory) ExpeditionWindTrackerFactory.getInstance());
result = Collections.singleton((WindTrackerFactory) ExpeditionTrackerFactory.getInstance());
} else {
ServiceTracker<WindTrackerFactory, WindTrackerFactory> tracker = new ServiceTracker<WindTrackerFactory, WindTrackerFactory>(
bundleContext, WindTrackerFactory.class, null);
+1
View File
@@ -118,6 +118,7 @@
<module>com.sap.sailing.declination</module>
<module>com.sap.sailing.udpconnector</module>
<module>com.sap.sailing.expeditionconnector</module>
<module>com.sap.sailing.expeditionconnector.persistence</module>
<module>com.sap.sailing.server</module>
<module>com.sap.sailing.server.gateway</module>
<module>com.sap.sailing.server.gateway.serialization</module>