mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-11-06 02:52:22 +00:00
added expeditionconnector.persistence bundle; started support for Expedition sensor and GPS device identifiers
Change-Id: Idaab85dde6088c3679e729e426b2483570df8bb1
This commit is contained in:
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>
|
||||
Executable
+7
@@ -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
|
||||
Executable
+3
@@ -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>
|
||||
+59
@@ -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;
|
||||
}
|
||||
}
|
||||
+15
@@ -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);
|
||||
}
|
||||
}
|
||||
+15
@@ -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);
|
||||
}
|
||||
}
|
||||
+2
-2
@@ -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
|
||||
+32
@@ -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;
|
||||
}
|
||||
}
|
||||
+12
@@ -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();
|
||||
}
|
||||
+12
@@ -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";
|
||||
}
|
||||
+12
@@ -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";
|
||||
}
|
||||
+35
-8
@@ -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());
|
||||
}
|
||||
}
|
||||
+4
-4
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+37
@@ -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();
|
||||
}
|
||||
}
|
||||
+33
-3
@@ -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() {
|
||||
|
||||
+18
@@ -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;
|
||||
}
|
||||
}
|
||||
+16
@@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
+28
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
+8
@@ -0,0 +1,8 @@
|
||||
package com.sap.sailing.expeditionconnector.impl;
|
||||
|
||||
import com.sap.sailing.domain.racelogtracking.DeviceIdentifierStringSerializationHandler;
|
||||
|
||||
public class ExpeditionGpsStringSerializationHandler extends ExpeditionGpsDeviceIdentifierSerializationHandler
|
||||
implements DeviceIdentifierStringSerializationHandler {
|
||||
|
||||
}
|
||||
+18
@@ -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;
|
||||
}
|
||||
}
|
||||
+16
@@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
+28
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
+8
@@ -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" />
|
||||
|
||||
@@ -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",
|
||||
|
||||
+52
@@ -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
|
||||
}
|
||||
|
||||
}
|
||||
+3
@@ -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();
|
||||
}
|
||||
+3
@@ -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);
|
||||
}
|
||||
+14
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
+5
-5
@@ -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) {
|
||||
|
||||
+4
-4
@@ -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;
|
||||
}
|
||||
|
||||
+3
-3
@@ -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>
|
||||
+2
-2
@@ -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);
|
||||
|
||||
@@ -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>
|
||||
|
||||
Reference in new issue
Block a user