mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-10-25 21:43:49 +00:00
added ping mark functionality to adminConsole
This commit is contained in:
1 parent
335e090ebc
commit
9cffd20913
53 files changed
+440
-109
No files matched your search
@@ -32,4 +32,5 @@ Web-ContextPath: /igtimi
|
||||
Bundle-Activator: com.sap.sailing.domain.igtimiadapter.impl.Activator
|
||||
Export-Package: com.sap.sailing.domain.igtimiadapter,
|
||||
com.sap.sailing.domain.igtimiadapter.datatypes,
|
||||
com.sap.sailing.domain.igtimiadapter.impl;x-friends:="com.sap.sailing.gwt.ui.test",
|
||||
com.sap.sailing.domain.igtimiadapter.shared
|
||||
@@ -22,7 +22,11 @@ Export-Package: com.sap.sailing.domain.persistence,
|
||||
com.sap.sailing.domain.racelogtrackingadapter.test",
|
||||
com.sap.sailing.domain.persistence.media,
|
||||
com.sap.sailing.domain.persistence.racelog.tracking,
|
||||
com.sap.sailing.domain.persistence.racelog.tracking.impl;x-friends:="com.sap.sailing.domain.racelogtrackingadapter.testsupport,com.sap.sailing.mongodb.test,com.sap.sailing.domain.racelogtrackingadapter.test"
|
||||
com.sap.sailing.domain.persistence.racelog.tracking.impl;
|
||||
x-friends:="com.sap.sailing.domain.racelogtrackingadapter.testsupport,
|
||||
com.sap.sailing.mongodb.test,
|
||||
com.sap.sailing.domain.racelogtrackingadapter.test,
|
||||
com.sap.sailing.server"
|
||||
Bundle-ActivationPolicy: lazy
|
||||
Import-Package: org.json.simple,
|
||||
org.json.simple.parser,
|
||||
|
||||
+6
-24
@@ -1,46 +1,28 @@
|
||||
package com.sap.sailing.domain.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.common.racelog.tracking.TypeBasedServiceFinder;
|
||||
import com.sap.sailing.domain.persistence.racelog.tracking.GPSFixMongoHandler;
|
||||
import com.sap.sailing.domain.persistence.racelog.tracking.impl.GPSFixMovingMongoHandlerImpl;
|
||||
import com.sap.sailing.domain.persistence.racelog.tracking.impl.GPSFixMongoHandlerImpl;
|
||||
import com.sap.sailing.domain.tracking.impl.GPSFixImpl;
|
||||
import com.sap.sailing.domain.tracking.impl.GPSFixMovingImpl;
|
||||
import com.sap.sailing.mongodb.MongoDBService;
|
||||
|
||||
public class Activator implements BundleActivator {
|
||||
private Set<ServiceRegistration<?>> registrations = new HashSet<>();
|
||||
@Override
|
||||
public void start(BundleContext context) throws Exception {
|
||||
for (CollectionNames name : CollectionNames.values())
|
||||
MongoDBService.INSTANCE.registerExclusively(CollectionNames.class, name.name());
|
||||
|
||||
MongoObjectFactoryImpl mof = new MongoObjectFactoryImpl(null);
|
||||
DomainObjectFactoryImpl dof = new DomainObjectFactoryImpl(null, null);
|
||||
Dictionary<String, String> properties = new Hashtable<String, String>();
|
||||
properties.put(TypeBasedServiceFinder.TYPE, GPSFixImpl.class.getName());
|
||||
registrations.add(context.registerService(GPSFixMongoHandler.class,
|
||||
new GPSFixMongoHandlerImpl(mof, dof), properties));
|
||||
properties.put(TypeBasedServiceFinder.TYPE, GPSFixMovingImpl.class.getName());
|
||||
registrations.add(context.registerService(GPSFixMongoHandler.class,
|
||||
new GPSFixMovingMongoHandlerImpl(mof, dof), properties));
|
||||
for (CollectionNames name : CollectionNames.values())
|
||||
MongoDBService.INSTANCE.registerExclusively(CollectionNames.class, name.name());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void stop(BundleContext context) throws Exception {
|
||||
for (ServiceRegistration<?> reg : registrations) {
|
||||
reg.unregister();
|
||||
}
|
||||
registrations.clear();
|
||||
for (ServiceRegistration<?> reg : registrations) {
|
||||
reg.unregister();
|
||||
}
|
||||
registrations.clear();
|
||||
}
|
||||
|
||||
}
|
||||
+4
-2
@@ -156,6 +156,7 @@ public class DomainObjectFactoryImpl implements DomainObjectFactory {
|
||||
private RaceLogEventRestoreFactory raceLogEventFactory;
|
||||
private final DomainFactory baseDomainFactory;
|
||||
private final TypeBasedServiceFinder<DeviceIdentifierMongoHandler> deviceIdentifierServiceFinder;
|
||||
private final TypeBasedServiceFinderFactory serviceFinderFactory;
|
||||
|
||||
/**
|
||||
* Uses <code>null</code> as the {@link TypeBasedServiceFinder}, meaning that no {@link DeviceIdentifier}s can be loaded
|
||||
@@ -167,6 +168,7 @@ public class DomainObjectFactoryImpl implements DomainObjectFactory {
|
||||
|
||||
public DomainObjectFactoryImpl(DB db, DomainFactory baseDomainFactory, TypeBasedServiceFinderFactory serviceFinderFactory) {
|
||||
super();
|
||||
this.serviceFinderFactory = serviceFinderFactory;
|
||||
if (serviceFinderFactory != null) {
|
||||
this.deviceIdentifierServiceFinder = serviceFinderFactory.createServiceFinder(DeviceIdentifierMongoHandler.class);
|
||||
} else {
|
||||
@@ -924,7 +926,7 @@ public class DomainObjectFactoryImpl implements DomainObjectFactory {
|
||||
BasicDBList dbSeries = (BasicDBList) dbRegatta.get(FieldNames.REGATTA_SERIES.name());
|
||||
Iterable<Series> series = loadSeries(dbSeries, trackedRegattaRegistry);
|
||||
RaceLogStore raceLogStore = MongoRaceLogStoreFactory.INSTANCE.getMongoRaceLogStore(
|
||||
new MongoObjectFactoryImpl(database),
|
||||
new MongoObjectFactoryImpl(database, serviceFinderFactory),
|
||||
this);
|
||||
|
||||
Serializable courseAreaId = (Serializable) dbRegatta.get(FieldNames.COURSE_AREA_ID.name());
|
||||
@@ -1087,7 +1089,7 @@ public class DomainObjectFactoryImpl implements DomainObjectFactory {
|
||||
List<RaceLogEvent> eventsToMigrate = loadRaceLogEvents(result, query);
|
||||
if (!eventsToMigrate.isEmpty()) {
|
||||
// ... migrate them...
|
||||
MongoRaceLogStoreVisitor storeVisitor = new MongoRaceLogStoreVisitor(identifier, new MongoObjectFactoryImpl(database));
|
||||
MongoRaceLogStoreVisitor storeVisitor = new MongoRaceLogStoreVisitor(identifier, new MongoObjectFactoryImpl(database, serviceFinderFactory));
|
||||
for (RaceLogEvent event : eventsToMigrate) {
|
||||
event.accept(storeVisitor);
|
||||
}
|
||||
|
||||
+4
-2
@@ -1143,8 +1143,10 @@ public class MongoObjectFactoryImpl implements MongoObjectFactory {
|
||||
|
||||
public static DBObject storeDeviceId(
|
||||
TypeBasedServiceFinder<DeviceIdentifierMongoHandler> deviceIdentifierServiceFinder, DeviceIdentifier device)
|
||||
throws TransformationException, NoCorrespondingServiceRegisteredException{
|
||||
Object deviceTypeId = deviceIdentifierServiceFinder.findService(device.getIdentifierType()).transformForth(device);
|
||||
throws TransformationException, NoCorrespondingServiceRegisteredException {
|
||||
String type = device.getIdentifierType();
|
||||
DeviceIdentifierMongoHandler handler = deviceIdentifierServiceFinder.findService(type);
|
||||
Object deviceTypeId = handler.transformForth(device);
|
||||
return new BasicDBObjectBuilder()
|
||||
.add(FieldNames.DEVICE_TYPE.name(), device.getIdentifierType())
|
||||
.add(FieldNames.DEVICE_TYPE_ID.name(), deviceTypeId).get();
|
||||
|
||||
+5
-3
@@ -4,6 +4,8 @@ import com.mongodb.BasicDBObject;
|
||||
import com.mongodb.DBObject;
|
||||
import com.sap.sailing.domain.common.Position;
|
||||
import com.sap.sailing.domain.common.TimePoint;
|
||||
import com.sap.sailing.domain.persistence.DomainObjectFactory;
|
||||
import com.sap.sailing.domain.persistence.MongoObjectFactory;
|
||||
import com.sap.sailing.domain.persistence.impl.DomainObjectFactoryImpl;
|
||||
import com.sap.sailing.domain.persistence.impl.MongoObjectFactoryImpl;
|
||||
import com.sap.sailing.domain.persistence.racelog.tracking.GPSFixMongoHandler;
|
||||
@@ -14,9 +16,9 @@ public class GPSFixMongoHandlerImpl implements GPSFixMongoHandler {
|
||||
MongoObjectFactoryImpl mof;
|
||||
DomainObjectFactoryImpl dof;
|
||||
|
||||
public GPSFixMongoHandlerImpl(MongoObjectFactoryImpl mof, DomainObjectFactoryImpl dof) {
|
||||
this.mof = mof;
|
||||
this.dof = dof;
|
||||
public GPSFixMongoHandlerImpl(MongoObjectFactory mof, DomainObjectFactory dof) {
|
||||
this.mof = (MongoObjectFactoryImpl) mof;
|
||||
this.dof = (DomainObjectFactoryImpl) dof;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
+5
-3
@@ -5,6 +5,8 @@ import com.mongodb.DBObject;
|
||||
import com.sap.sailing.domain.common.Position;
|
||||
import com.sap.sailing.domain.common.SpeedWithBearing;
|
||||
import com.sap.sailing.domain.common.TimePoint;
|
||||
import com.sap.sailing.domain.persistence.DomainObjectFactory;
|
||||
import com.sap.sailing.domain.persistence.MongoObjectFactory;
|
||||
import com.sap.sailing.domain.persistence.impl.DomainObjectFactoryImpl;
|
||||
import com.sap.sailing.domain.persistence.impl.MongoObjectFactoryImpl;
|
||||
import com.sap.sailing.domain.persistence.racelog.tracking.GPSFixMongoHandler;
|
||||
@@ -16,9 +18,9 @@ public class GPSFixMovingMongoHandlerImpl implements GPSFixMongoHandler {
|
||||
MongoObjectFactoryImpl mof;
|
||||
DomainObjectFactoryImpl dof;
|
||||
|
||||
public GPSFixMovingMongoHandlerImpl(MongoObjectFactoryImpl mof, DomainObjectFactoryImpl dof) {
|
||||
this.mof = mof;
|
||||
this.dof = dof;
|
||||
public GPSFixMovingMongoHandlerImpl(MongoObjectFactory mof, DomainObjectFactory dof) {
|
||||
this.mof = (MongoObjectFactoryImpl) mof;
|
||||
this.dof = (DomainObjectFactoryImpl) dof;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package com.sap.sailing.domain.racelog.tracking.test;
|
||||
package com.sap.sailing.domain.racelogtracking.test;
|
||||
|
||||
import static com.sap.sailing.domain.common.impl.Util.size;
|
||||
import static junit.framework.Assert.assertEquals;
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package com.sap.sailing.domain.racelog.tracking.test;
|
||||
package com.sap.sailing.domain.racelogtracking.test;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.DataOutputStream;
|
||||
+3
-3
@@ -1,4 +1,4 @@
|
||||
package com.sap.sailing.domain.racelog.tracking.test.impl;
|
||||
package com.sap.sailing.domain.racelogtracking.test.impl;
|
||||
|
||||
import static com.sap.sailing.domain.common.impl.Util.size;
|
||||
import static junit.framework.Assert.assertNotNull;
|
||||
@@ -45,10 +45,10 @@ import com.sap.sailing.domain.racelog.RaceLogEventAuthor;
|
||||
import com.sap.sailing.domain.racelog.RaceLogEventFactory;
|
||||
import com.sap.sailing.domain.racelog.tracking.DeviceIdentifier;
|
||||
import com.sap.sailing.domain.racelog.tracking.GPSFixStore;
|
||||
import com.sap.sailing.domain.racelog.tracking.RaceLogTrackingAdapter;
|
||||
import com.sap.sailing.domain.racelog.tracking.SmartphoneImeiIdentifier;
|
||||
import com.sap.sailing.domain.racelog.tracking.impl.RaceLogTrackingAdapterFactoryImpl;
|
||||
import com.sap.sailing.domain.racelog.tracking.test.mock.MockServiceFinderFactory;
|
||||
import com.sap.sailing.domain.racelogtracking.RaceLogTrackingAdapter;
|
||||
import com.sap.sailing.domain.racelogtracking.impl.RaceLogTrackingAdapterFactoryImpl;
|
||||
import com.sap.sailing.domain.tracking.RacesHandle;
|
||||
import com.sap.sailing.domain.tracking.Track;
|
||||
import com.sap.sailing.domain.tracking.TrackedRace;
|
||||
+3
-3
@@ -1,4 +1,4 @@
|
||||
package com.sap.sailing.domain.racelog.tracking.test.impl;
|
||||
package com.sap.sailing.domain.racelogtracking.test.impl;
|
||||
|
||||
import static com.sap.sailing.domain.common.impl.Util.size;
|
||||
import static junit.framework.Assert.assertEquals;
|
||||
@@ -20,9 +20,9 @@ import com.sap.sailing.domain.common.racelog.tracking.NoCorrespondingServiceRegi
|
||||
import com.sap.sailing.domain.common.racelog.tracking.TransformationException;
|
||||
import com.sap.sailing.domain.racelog.tracking.DeviceIdentifier;
|
||||
import com.sap.sailing.domain.racelog.tracking.SmartphoneImeiIdentifier;
|
||||
import com.sap.sailing.domain.racelog.tracking.servlet.RecordFixesPostServlet;
|
||||
import com.sap.sailing.domain.racelog.tracking.test.AbstractGPSFixStoreTest;
|
||||
import com.sap.sailing.domain.racelog.tracking.test.mock.MockDeviceAndSessioinIdentifierWithGPSFixesDeserializer;
|
||||
import com.sap.sailing.domain.racelogtracking.servlet.RecordFixesPostServlet;
|
||||
import com.sap.sailing.domain.racelogtracking.test.AbstractGPSFixStoreTest;
|
||||
import com.sap.sailing.domain.tracking.GPSFix;
|
||||
import com.sap.sailing.domain.tracking.GPSFixMoving;
|
||||
import com.sap.sailing.domain.tracking.impl.DynamicGPSFixMovingTrackImpl;
|
||||
+2
-2
@@ -1,4 +1,4 @@
|
||||
package com.sap.sailing.domain.racelog.tracking.test.impl;
|
||||
package com.sap.sailing.domain.racelogtracking.test.impl;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
@@ -22,7 +22,7 @@ import com.sap.sailing.domain.common.racelog.tracking.TransformationException;
|
||||
import com.sap.sailing.domain.racelog.impl.EmptyRaceLogStore;
|
||||
import com.sap.sailing.domain.racelog.tracking.DeviceIdentifier;
|
||||
import com.sap.sailing.domain.racelog.tracking.SmartphoneImeiIdentifier;
|
||||
import com.sap.sailing.domain.racelog.tracking.test.AbstractGPSFixStoreTest;
|
||||
import com.sap.sailing.domain.racelogtracking.test.AbstractGPSFixStoreTest;
|
||||
import com.sap.sailing.domain.tracking.TrackedRegatta;
|
||||
import com.sap.sailing.domain.tracking.impl.DynamicTrackedRaceImpl;
|
||||
import com.sap.sailing.domain.tracking.impl.EmptyWindStore;
|
||||
+2
-2
@@ -1,4 +1,4 @@
|
||||
package com.sap.sailing.domain.racelog.tracking.test.manual;
|
||||
package com.sap.sailing.domain.racelogtracking.test.manual;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.Serializable;
|
||||
@@ -18,7 +18,7 @@ import com.sap.sailing.domain.common.impl.KnotSpeedWithBearingImpl;
|
||||
import com.sap.sailing.domain.common.impl.MillisecondsTimePoint;
|
||||
import com.sap.sailing.domain.common.impl.Util.Triple;
|
||||
import com.sap.sailing.domain.racelog.tracking.SmartphoneImeiIdentifier;
|
||||
import com.sap.sailing.domain.racelog.tracking.test.AbstractJsonOverHttpTest;
|
||||
import com.sap.sailing.domain.racelogtracking.test.AbstractJsonOverHttpTest;
|
||||
import com.sap.sailing.domain.tracking.GPSFix;
|
||||
import com.sap.sailing.domain.tracking.GPSFixMoving;
|
||||
import com.sap.sailing.domain.tracking.impl.GPSFixImpl;
|
||||
@@ -1,7 +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.7"/>
|
||||
<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
|
||||
<classpathentry kind="src" path="src"/>
|
||||
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
|
||||
<classpathentry kind="output" path="bin"/>
|
||||
</classpath>
|
||||
+3
-3
@@ -1,7 +1,7 @@
|
||||
eclipse.preferences.version=1
|
||||
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
|
||||
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7
|
||||
org.eclipse.jdt.core.compiler.compliance=1.7
|
||||
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
|
||||
org.eclipse.jdt.core.compiler.compliance=1.6
|
||||
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
|
||||
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
|
||||
org.eclipse.jdt.core.compiler.source=1.7
|
||||
org.eclipse.jdt.core.compiler.source=1.6
|
||||
@@ -4,7 +4,7 @@ Bundle-Name: Testsupport
|
||||
Bundle-SymbolicName: com.sap.sailing.domain.racelogtrackingadapter.testsupport
|
||||
Bundle-Version: 1.0.0.qualifier
|
||||
Bundle-Vendor: SAP
|
||||
Bundle-RequiredExecutionEnvironment: JavaSE-1.7
|
||||
Bundle-RequiredExecutionEnvironment: JavaSE-1.6
|
||||
Require-Bundle: com.sap.sailing.domain.shared.android,
|
||||
com.sap.sailing.domain,
|
||||
com.sap.sailing.domain.common,
|
||||
|
||||
+1
-1
@@ -20,7 +20,7 @@ import com.sap.sailing.server.gateway.serialization.racelog.tracking.GPSFixJsonH
|
||||
*
|
||||
*/
|
||||
public class MockServiceFinderFactory implements TypeBasedServiceFinderFactory {
|
||||
Map<Class<?>, TypeBasedServiceFinder<?>> serviceFinders = new HashMap<>();
|
||||
Map<Class<?>, TypeBasedServiceFinder<?>> serviceFinders = new HashMap<Class<?>, TypeBasedServiceFinder<?>>();
|
||||
|
||||
public MockServiceFinderFactory() {
|
||||
serviceFinders.put(DeviceIdentifierMongoHandler.class, new MockSmartphoneImeiMongoServiceFinder());
|
||||
|
||||
+1
-1
@@ -3,7 +3,7 @@ package com.sap.sailing.domain.racelog.tracking.test.mock;
|
||||
import com.sap.sailing.domain.common.racelog.tracking.TypeBasedServiceFinder;
|
||||
import com.sap.sailing.domain.persistence.racelog.tracking.DeviceIdentifierMongoHandler;
|
||||
import com.sap.sailing.domain.racelog.tracking.SmartphoneImeiIdentifier;
|
||||
import com.sap.sailing.domain.racelog.tracking.impl.SmartphoneImeiMongoHandlerImpl;
|
||||
import com.sap.sailing.domain.racelogtracking.impl.SmartphoneImeiMongoHandlerImpl;
|
||||
|
||||
/**
|
||||
* A simplified implementation of the {@link TypeBasedServiceFinder} interface that, when the device type
|
||||
|
||||
@@ -18,8 +18,8 @@ Import-Package: javax.servlet;version="2.6.0",
|
||||
org.json.simple,
|
||||
org.json.simple.parser,
|
||||
org.osgi.framework;version="1.6.0"
|
||||
Export-Package: com.sap.sailing.domain.racelog.tracking,
|
||||
com.sap.sailing.domain.racelog.tracking.impl;x-friends:="com.sap.sailing.domain.racelogtrackingadapter.testsupport",
|
||||
com.sap.sailing.domain.racelog.tracking.servlet;x-friends:="com.sap.sailing.domain.racelogtrackingadapter.test"
|
||||
Export-Package: com.sap.sailing.domain.racelogtracking,
|
||||
com.sap.sailing.domain.racelogtracking.impl;x-friends:="com.sap.sailing.domain.racelogtrackingadapter.testsupport,com.sap.sailing.gwt.ui.test",
|
||||
com.sap.sailing.domain.racelogtracking.servlet;x-friends:="com.sap.sailing.domain.racelogtrackingadapter.test"
|
||||
Web-ContextPath: /tracking
|
||||
Bundle-Activator: com.sap.sailing.domain.racelog.tracking.impl.Activator
|
||||
Bundle-Activator: com.sap.sailing.domain.racelogtracking.impl.Activator
|
||||
@@ -7,7 +7,7 @@
|
||||
|
||||
<servlet>
|
||||
<servlet-name>RecordFixesPostServlet</servlet-name>
|
||||
<servlet-class>com.sap.sailing.domain.racelog.tracking.servlet.RecordFixesPostServlet</servlet-class>
|
||||
<servlet-class>com.sap.sailing.domain.racelogtracking.servlet.RecordFixesPostServlet</servlet-class>
|
||||
</servlet>
|
||||
<servlet-mapping>
|
||||
<servlet-name>RecordFixesPostServlet</servlet-name>
|
||||
|
||||
+3
-1
@@ -1,7 +1,9 @@
|
||||
package com.sap.sailing.domain.racelog.tracking;
|
||||
package com.sap.sailing.domain.racelogtracking;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
import com.sap.sailing.domain.racelog.tracking.DeviceIdentifier;
|
||||
|
||||
/**
|
||||
* A device identifier used to identify a non-existent, virtual device, which is used only once as an
|
||||
* identifier to add a single fix to a track (i.e. pinging the location of that track's item).
|
||||
+9
-2
@@ -1,10 +1,9 @@
|
||||
package com.sap.sailing.domain.racelog.tracking.impl;
|
||||
package com.sap.sailing.domain.racelogtracking;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
import com.sap.sailing.domain.base.IsManagedBySharedDomainFactory;
|
||||
import com.sap.sailing.domain.base.SharedDomainFactory;
|
||||
import com.sap.sailing.domain.racelog.tracking.PingDeviceIdentifier;
|
||||
|
||||
public class PingDeviceIdentifierImpl implements PingDeviceIdentifier {
|
||||
private static final long serialVersionUID = -4049961972156611640L;
|
||||
@@ -41,4 +40,12 @@ public class PingDeviceIdentifierImpl implements PingDeviceIdentifier {
|
||||
public String getStringRepresentation() {
|
||||
return id.toString();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object obj) {
|
||||
if (obj instanceof PingDeviceIdentifier) {
|
||||
return id.equals(((PingDeviceIdentifier) obj).getId());
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
+3
-2
@@ -1,4 +1,4 @@
|
||||
package com.sap.sailing.domain.racelog.tracking;
|
||||
package com.sap.sailing.domain.racelogtracking;
|
||||
|
||||
import java.io.FileNotFoundException;
|
||||
import java.net.MalformedURLException;
|
||||
@@ -14,7 +14,8 @@ import com.sap.sailing.domain.common.racelog.tracking.RaceLogTrackingState;
|
||||
import com.sap.sailing.domain.leaderboard.Leaderboard;
|
||||
import com.sap.sailing.domain.leaderboard.RegattaLeaderboard;
|
||||
import com.sap.sailing.domain.racelog.RaceLog;
|
||||
import com.sap.sailing.domain.racelog.tracking.impl.RaceLogRaceTracker;
|
||||
import com.sap.sailing.domain.racelog.tracking.DenoteForTrackingEvent;
|
||||
import com.sap.sailing.domain.racelogtracking.impl.RaceLogRaceTracker;
|
||||
import com.sap.sailing.domain.tracking.RacesHandle;
|
||||
import com.sap.sailing.domain.tracking.TrackedRace;
|
||||
import com.sap.sailing.server.RacingEventService;
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package com.sap.sailing.domain.racelog.tracking;
|
||||
package com.sap.sailing.domain.racelogtracking;
|
||||
|
||||
import com.sap.sailing.domain.base.DomainFactory;
|
||||
|
||||
+3
-2
@@ -1,4 +1,4 @@
|
||||
package com.sap.sailing.domain.racelog.tracking.impl;
|
||||
package com.sap.sailing.domain.racelogtracking.impl;
|
||||
|
||||
import java.util.Dictionary;
|
||||
import java.util.HashSet;
|
||||
@@ -13,8 +13,9 @@ import org.osgi.framework.ServiceRegistration;
|
||||
|
||||
import com.sap.sailing.domain.common.racelog.tracking.TypeBasedServiceFinder;
|
||||
import com.sap.sailing.domain.persistence.racelog.tracking.DeviceIdentifierMongoHandler;
|
||||
import com.sap.sailing.domain.racelog.tracking.RaceLogTrackingAdapterFactory;
|
||||
import com.sap.sailing.domain.racelog.tracking.SmartphoneImeiIdentifier;
|
||||
import com.sap.sailing.domain.racelogtracking.PingDeviceIdentifierImpl;
|
||||
import com.sap.sailing.domain.racelogtracking.RaceLogTrackingAdapterFactory;
|
||||
import com.sap.sailing.domain.tracking.GPSFix;
|
||||
import com.sap.sailing.server.gateway.deserialization.JsonDeserializer;
|
||||
import com.sap.sailing.server.gateway.deserialization.impl.GPSFixJsonDeserializer;
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package com.sap.sailing.domain.racelog.tracking.impl;
|
||||
package com.sap.sailing.domain.racelogtracking.impl;
|
||||
|
||||
import org.json.simple.JSONObject;
|
||||
|
||||
+3
-2
@@ -1,11 +1,12 @@
|
||||
package com.sap.sailing.domain.racelog.tracking.impl;
|
||||
package com.sap.sailing.domain.racelogtracking.impl;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
import com.sap.sailing.domain.common.racelog.tracking.TransformationException;
|
||||
import com.sap.sailing.domain.persistence.racelog.tracking.DeviceIdentifierMongoHandler;
|
||||
import com.sap.sailing.domain.racelog.tracking.DeviceIdentifier;
|
||||
import com.sap.sailing.domain.racelog.tracking.PingDeviceIdentifier;
|
||||
import com.sap.sailing.domain.racelogtracking.PingDeviceIdentifier;
|
||||
import com.sap.sailing.domain.racelogtracking.PingDeviceIdentifierImpl;
|
||||
|
||||
public class PingDeviceMongoHandlerImpl implements DeviceIdentifierMongoHandler {
|
||||
private PingDeviceIdentifier castIdentifier(DeviceIdentifier identifier) throws TransformationException {
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package com.sap.sailing.domain.racelog.tracking.impl;
|
||||
package com.sap.sailing.domain.racelogtracking.impl;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
+6
-4
@@ -1,4 +1,4 @@
|
||||
package com.sap.sailing.domain.racelog.tracking.impl;
|
||||
package com.sap.sailing.domain.racelogtracking.impl;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
@@ -242,9 +242,11 @@ public class RaceLogRaceTracker extends BaseRaceLogEventVisitor implements RaceT
|
||||
DynamicGPSFixTrack<Mark, GPSFix> track = trackedRace.getOrCreateTrack(mark);
|
||||
List<DeviceMapping<Mark>> oldMappings = markMappings.get(mark);
|
||||
|
||||
for (DeviceMapping<Mark> newMapping : newMappings.get(mark)) {
|
||||
if (!hasMappingAlreadyBeenLoaded(newMapping, oldMappings)) {
|
||||
gpsFixStore.loadMarkTrack(track, newMapping);
|
||||
if (oldMappings != null) {
|
||||
for (DeviceMapping<Mark> newMapping : newMappings.get(mark)) {
|
||||
if (!hasMappingAlreadyBeenLoaded(newMapping, oldMappings)) {
|
||||
gpsFixStore.loadMarkTrack(track, newMapping);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package com.sap.sailing.domain.racelog.tracking.impl;
|
||||
package com.sap.sailing.domain.racelogtracking.impl;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.Set;
|
||||
+3
-3
@@ -1,8 +1,8 @@
|
||||
package com.sap.sailing.domain.racelog.tracking.impl;
|
||||
package com.sap.sailing.domain.racelogtracking.impl;
|
||||
|
||||
import com.sap.sailing.domain.base.DomainFactory;
|
||||
import com.sap.sailing.domain.racelog.tracking.RaceLogTrackingAdapter;
|
||||
import com.sap.sailing.domain.racelog.tracking.RaceLogTrackingAdapterFactory;
|
||||
import com.sap.sailing.domain.racelogtracking.RaceLogTrackingAdapter;
|
||||
import com.sap.sailing.domain.racelogtracking.RaceLogTrackingAdapterFactory;
|
||||
|
||||
public enum RaceLogTrackingAdapterFactoryImpl implements RaceLogTrackingAdapterFactory {
|
||||
INSTANCE;
|
||||
+2
-2
@@ -1,4 +1,4 @@
|
||||
package com.sap.sailing.domain.racelog.tracking.impl;
|
||||
package com.sap.sailing.domain.racelogtracking.impl;
|
||||
|
||||
import java.io.FileNotFoundException;
|
||||
import java.net.MalformedURLException;
|
||||
@@ -32,8 +32,8 @@ import com.sap.sailing.domain.racelog.RaceLog;
|
||||
import com.sap.sailing.domain.racelog.RaceLogEvent;
|
||||
import com.sap.sailing.domain.racelog.RaceLogEventFactory;
|
||||
import com.sap.sailing.domain.racelog.RaceLogIdentifier;
|
||||
import com.sap.sailing.domain.racelog.tracking.RaceLogTrackingAdapter;
|
||||
import com.sap.sailing.domain.racelog.tracking.analyzing.impl.RaceLogTrackingStateAnalyzer;
|
||||
import com.sap.sailing.domain.racelogtracking.RaceLogTrackingAdapter;
|
||||
import com.sap.sailing.domain.tracking.RacesHandle;
|
||||
import com.sap.sailing.domain.tracking.TrackedRace;
|
||||
import com.sap.sailing.server.RacingEventService;
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package com.sap.sailing.domain.racelog.tracking.impl;
|
||||
package com.sap.sailing.domain.racelogtracking.impl;
|
||||
|
||||
import com.sap.sailing.domain.common.racelog.tracking.TransformationException;
|
||||
import com.sap.sailing.domain.persistence.racelog.tracking.DeviceIdentifierMongoHandler;
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package com.sap.sailing.domain.racelog.tracking.servlet;
|
||||
package com.sap.sailing.domain.racelogtracking.servlet;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.List;
|
||||
+32
@@ -0,0 +1,32 @@
|
||||
package com.sap.sailing.domain.racelog.tracking.analyzing.impl;
|
||||
|
||||
import com.sap.sailing.domain.common.WithID;
|
||||
import com.sap.sailing.domain.racelog.RaceLog;
|
||||
import com.sap.sailing.domain.racelog.RaceLogEvent;
|
||||
import com.sap.sailing.domain.racelog.analyzing.impl.RaceLogAnalyzer;
|
||||
import com.sap.sailing.domain.racelog.tracking.DeviceMappingEvent;
|
||||
|
||||
public class LastPingMappingEventFinder<T extends WithID> extends RaceLogAnalyzer<DeviceMappingEvent<T>> {
|
||||
private final WithID item;
|
||||
|
||||
public LastPingMappingEventFinder(RaceLog raceLog, WithID forItem) {
|
||||
super(raceLog);
|
||||
this.item = forItem;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected DeviceMappingEvent<T> performAnalysis() {
|
||||
for (RaceLogEvent e : raceLog.getUnrevokedEventsDescending()) {
|
||||
if (e instanceof DeviceMappingEvent) {
|
||||
DeviceMappingEvent<?> mappingEvent = (DeviceMappingEvent<?>) e;
|
||||
if (item.equals(mappingEvent.getMappedTo()) && mappingEvent.getFrom().equals(mappingEvent.getTo())) {
|
||||
@SuppressWarnings("unchecked")
|
||||
DeviceMappingEvent<T> cast = (DeviceMappingEvent<T>) mappingEvent;
|
||||
return cast;
|
||||
}
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
+6
@@ -3,8 +3,10 @@ package com.sap.sailing.domain.racelog.tracking.impl;
|
||||
import com.sap.sailing.domain.common.TimePoint;
|
||||
import com.sap.sailing.domain.common.TimeRange;
|
||||
import com.sap.sailing.domain.common.WithID;
|
||||
import com.sap.sailing.domain.common.impl.TimeRangeImpl;
|
||||
import com.sap.sailing.domain.racelog.tracking.DeviceIdentifier;
|
||||
import com.sap.sailing.domain.racelog.tracking.DeviceMapping;
|
||||
import com.sap.sailing.domain.racelog.tracking.DeviceMappingEvent;
|
||||
|
||||
public class DeviceMappingImpl<ItemType extends WithID> implements DeviceMapping<ItemType> {
|
||||
private static final long serialVersionUID = -4602948402371623654L;
|
||||
@@ -38,4 +40,8 @@ public class DeviceMappingImpl<ItemType extends WithID> implements DeviceMapping
|
||||
public TimePoint getTimePoint() {
|
||||
return timeRange.from();
|
||||
}
|
||||
|
||||
public static <T extends WithID> DeviceMapping<T> convertToDeviceMapping(DeviceMappingEvent<T> event) {
|
||||
return new DeviceMappingImpl<T>(event.getMappedTo(), event.getDevice(), new TimeRangeImpl(event.getFrom(), event.getTo()));
|
||||
}
|
||||
}
|
||||
@@ -10,9 +10,13 @@ Require-Bundle: com.sap.sailing.server,
|
||||
org.hamcrest.core;bundle-version="1.1.0",
|
||||
com.sap.sailing.expeditionconnector,
|
||||
org.mockito.mockito-core;bundle-version="1.9.5",
|
||||
org.objenesis;bundle-version="1.3.0"
|
||||
org.objenesis;bundle-version="1.3.0",
|
||||
com.sap.sailing.domain.igtimiadapter.persistence;bundle-version="1.0.0",
|
||||
com.sap.sailing.domain.racelogtrackingadapter.testsupport;bundle-version="1.0.0"
|
||||
Bundle-ClassPath: .
|
||||
Import-Package: javax.jms;version="1.1.0",
|
||||
Import-Package: com.sap.sailing.domain.igtimiadapter.impl,
|
||||
com.sap.sailing.domain.racelogtracking.impl,
|
||||
javax.jms;version="1.1.0",
|
||||
javax.servlet;version="2.6.0",
|
||||
javax.servlet.http;version="2.6.0",
|
||||
junit.framework;version="4.8.1",
|
||||
|
||||
+46
@@ -0,0 +1,46 @@
|
||||
package com.sap.sailing.gwt.ui.test;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.UUID;
|
||||
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
|
||||
import com.sap.sailing.domain.base.Fleet;
|
||||
import com.sap.sailing.domain.base.Regatta;
|
||||
import com.sap.sailing.domain.base.Series;
|
||||
import com.sap.sailing.domain.base.impl.FleetImpl;
|
||||
import com.sap.sailing.domain.base.impl.SeriesImpl;
|
||||
import com.sap.sailing.domain.common.dto.PositionDTO;
|
||||
import com.sap.sailing.domain.leaderboard.RegattaLeaderboard;
|
||||
import com.sap.sailing.domain.leaderboard.impl.HighPoint;
|
||||
import com.sap.sailing.gwt.ui.shared.MarkDTO;
|
||||
import com.sap.sailing.server.RacingEventService;
|
||||
|
||||
public class PingMarkViaRaceLogTest {
|
||||
private SailingServiceImplMock sailingService;
|
||||
private RacingEventService service;
|
||||
private final String columnName = "column";
|
||||
private final Fleet fleet = new FleetImpl("fleet");
|
||||
|
||||
@Before
|
||||
public void prepare() {
|
||||
sailingService = new SailingServiceImplMock();
|
||||
service = sailingService.getRacingEventService();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testPinging() {
|
||||
service.getMongoObjectFactory().getDatabase().dropDatabase();
|
||||
Series series = new SeriesImpl("series", false, Collections.singletonList(fleet),
|
||||
Collections.singletonList(columnName), service);
|
||||
Regatta regatta = service.createRegatta("regatta", "Laser", UUID.randomUUID(), Collections.<Series>singletonList(series),
|
||||
false, new HighPoint(), UUID.randomUUID());
|
||||
RegattaLeaderboard leaderboard = service.addRegattaLeaderboard(regatta.getRegattaIdentifier(), "RegattaLeaderboard", new int[] {});
|
||||
|
||||
MarkDTO mark = new MarkDTO("mark", "mark");
|
||||
PositionDTO position = new PositionDTO(30, 40);
|
||||
|
||||
sailingService.pingMarkViaRaceLogTracking(leaderboard.getName(), columnName, fleet.getName(), mark, position);
|
||||
}
|
||||
}
|
||||
+18
-1
@@ -16,6 +16,9 @@ import com.sap.sailing.domain.base.DomainFactory;
|
||||
import com.sap.sailing.domain.common.RegattaIdentifier;
|
||||
import com.sap.sailing.domain.common.ScoreCorrectionProvider;
|
||||
import com.sap.sailing.domain.racelog.RaceLogStore;
|
||||
import com.sap.sailing.domain.racelog.tracking.test.mock.MockServiceFinderFactory;
|
||||
import com.sap.sailing.domain.racelogtracking.RaceLogTrackingAdapterFactory;
|
||||
import com.sap.sailing.domain.racelogtracking.impl.RaceLogTrackingAdapterFactoryImpl;
|
||||
import com.sap.sailing.domain.swisstimingadapter.RaceSpecificMessageLoader;
|
||||
import com.sap.sailing.domain.swisstimingadapter.SwissTimingAdapter;
|
||||
import com.sap.sailing.domain.swisstimingadapter.SwissTimingAdapterFactory;
|
||||
@@ -38,7 +41,7 @@ public class SailingServiceImplMock extends SailingServiceImpl {
|
||||
|
||||
public SailingServiceImplMock() {
|
||||
super();
|
||||
service = new RacingEventServiceImpl();
|
||||
service = new RacingEventServiceImpl(true, new MockServiceFinderFactory());
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -155,6 +158,16 @@ public class SailingServiceImplMock extends SailingServiceImpl {
|
||||
when(result.getService()).thenReturn(swissTimingReplayService);
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected ServiceTracker<RaceLogTrackingAdapterFactory, RaceLogTrackingAdapterFactory> createAndOpenRaceLogTrackingAdapterTracker(
|
||||
BundleContext context) {
|
||||
@SuppressWarnings("unchecked")
|
||||
ServiceTracker<RaceLogTrackingAdapterFactory, RaceLogTrackingAdapterFactory> result = mock(ServiceTracker.class);
|
||||
RaceLogTrackingAdapterFactory factory = RaceLogTrackingAdapterFactoryImpl.INSTANCE;
|
||||
when(result.getService()).thenReturn(factory);
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected RacingEventService getService() {
|
||||
@@ -163,4 +176,8 @@ public class SailingServiceImplMock extends SailingServiceImpl {
|
||||
}
|
||||
return service;
|
||||
}
|
||||
|
||||
public RacingEventService getRacingEventService() {
|
||||
return getService();
|
||||
}
|
||||
}
|
||||
+3
@@ -79,4 +79,7 @@ interface AdminConsoleResources extends ClientBundle {
|
||||
|
||||
@Source("com/sap/sailing/gwt/ui/client/images/map_devices.png")
|
||||
ImageResource mapDevices();
|
||||
|
||||
@Source("com/sap/sailing/gwt/ui/client/images/ping.png")
|
||||
ImageResource ping();
|
||||
}
|
||||
+64
@@ -0,0 +1,64 @@
|
||||
package com.sap.sailing.gwt.ui.adminconsole;
|
||||
|
||||
import com.google.gwt.user.client.ui.DoubleBox;
|
||||
import com.google.gwt.user.client.ui.Grid;
|
||||
import com.google.gwt.user.client.ui.Label;
|
||||
import com.google.gwt.user.client.ui.Widget;
|
||||
import com.sap.sailing.domain.common.dto.PositionDTO;
|
||||
import com.sap.sailing.gwt.ui.client.StringMessages;
|
||||
import com.sap.sse.gwt.ui.DataEntryDialog;
|
||||
|
||||
public class PositionEntryDialog extends DataEntryDialog<PositionDTO> {
|
||||
private final DoubleBox lat;
|
||||
private final DoubleBox lng;
|
||||
private final StringMessages stringMessages;
|
||||
|
||||
private static final double ERROR_VAL = Double.MIN_VALUE;
|
||||
|
||||
public PositionEntryDialog(String title, final StringMessages stringMessages, DialogCallback<PositionDTO> callback) {
|
||||
super(title, title, stringMessages.save(), stringMessages.cancel(),
|
||||
new Validator<PositionDTO>() {
|
||||
@Override
|
||||
public String getErrorMessage(PositionDTO valueToValidate) {
|
||||
if (valueToValidate.latDeg == ERROR_VAL) {
|
||||
return stringMessages.pleaseEnterA(stringMessages.latitude());
|
||||
}
|
||||
if (valueToValidate.latDeg > 90 || valueToValidate.latDeg < -90) {
|
||||
return stringMessages.pleaseEnterAValidValueFor(stringMessages.latitude(), "-90.0 - 90.0");
|
||||
}
|
||||
if (valueToValidate.lngDeg == ERROR_VAL) {
|
||||
return stringMessages.pleaseEnterA(stringMessages.longitude());
|
||||
}
|
||||
if (valueToValidate.lngDeg > 180 || valueToValidate.lngDeg < -180) {
|
||||
return stringMessages.pleaseEnterAValidValueFor(stringMessages.latitude(), "-180.0 - 180.0");
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}, true, callback);
|
||||
|
||||
this.stringMessages = stringMessages;
|
||||
|
||||
lat = createDoubleBox(10);
|
||||
lng = createDoubleBox(10);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected PositionDTO getResult() {
|
||||
Double latDeg = lat.getValue();
|
||||
Double lngDeg = lng.getValue();
|
||||
return new PositionDTO(latDeg == null ? ERROR_VAL : latDeg, lngDeg == null ? ERROR_VAL : lngDeg);
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Widget getAdditionalWidget() {
|
||||
Grid grid = new Grid(2, 2);
|
||||
grid.setWidget(0, 0, new Label(stringMessages.latitude() + " (" + stringMessages.degreesShort() + ")"));
|
||||
grid.setWidget(0, 1, lat);
|
||||
grid.setWidget(1, 0, new Label(stringMessages.longitude() + " (" + stringMessages.degreesShort() + ")"));
|
||||
grid.setWidget(1, 1, lng);
|
||||
|
||||
return grid;
|
||||
}
|
||||
|
||||
}
|
||||
+1
-3
@@ -17,13 +17,11 @@ import com.sap.sailing.gwt.ui.client.StringMessages;
|
||||
public class RaceLogTrackingCompetitorRegistrationsDialog extends RaceLogTrackingDialog {
|
||||
private CompetitorTableWrapper competitorTable;
|
||||
private final boolean filterByLeaderBoardInitially = false;
|
||||
private final boolean editable;
|
||||
|
||||
public RaceLogTrackingCompetitorRegistrationsDialog(final SailingServiceAsync sailingService, final StringMessages stringMessages,
|
||||
final ErrorReporter errorReporter, final String leaderboardName,
|
||||
final String raceColumnName, final String fleetName, boolean editable) {
|
||||
super(sailingService, stringMessages, errorReporter, leaderboardName, raceColumnName, fleetName);
|
||||
this.editable = editable;
|
||||
super(sailingService, stringMessages, errorReporter, leaderboardName, raceColumnName, fleetName, editable);
|
||||
|
||||
competitorTable.refreshCompetitorList(filterByLeaderBoardInitially ? leaderboardName : null,
|
||||
true, new Callback<Iterable<CompetitorDTO>, Throwable>() {
|
||||
|
||||
+37
@@ -3,12 +3,14 @@ package com.sap.sailing.gwt.ui.adminconsole;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
import com.google.gwt.cell.client.FieldUpdater;
|
||||
import com.google.gwt.event.dom.client.ClickEvent;
|
||||
import com.google.gwt.event.dom.client.ClickHandler;
|
||||
import com.google.gwt.user.client.rpc.AsyncCallback;
|
||||
import com.google.gwt.user.client.ui.Button;
|
||||
import com.google.gwt.user.client.ui.Panel;
|
||||
import com.sap.sailing.domain.common.PassingInstruction;
|
||||
import com.sap.sailing.domain.common.dto.PositionDTO;
|
||||
import com.sap.sailing.domain.common.impl.Util.Pair;
|
||||
import com.sap.sailing.gwt.ui.client.ErrorReporter;
|
||||
import com.sap.sailing.gwt.ui.client.SailingServiceAsync;
|
||||
@@ -59,6 +61,41 @@ public class RaceLogTrackingCourseDefinitionDialog extends RaceLogTrackingDialog
|
||||
}
|
||||
});
|
||||
courseActionsPanel.insert(cancel, courseActionsPanel.getWidgetIndex(RaceLogCourseManagementWidget.this.saveButton));
|
||||
|
||||
ImagesBarColumn<MarkDTO, RaceLogTrackingCourseDefinitionDialogMarksImagesBarCell> actionColumn =
|
||||
new ImagesBarColumn<MarkDTO, RaceLogTrackingCourseDefinitionDialogMarksImagesBarCell>(
|
||||
new RaceLogTrackingCourseDefinitionDialogMarksImagesBarCell(stringMessages));
|
||||
actionColumn.setFieldUpdater(new FieldUpdater<MarkDTO, String>() {
|
||||
@Override
|
||||
public void update(int index, final MarkDTO markDTO, String value) {
|
||||
if (RaceLogTrackingCourseDefinitionDialogMarksImagesBarCell.ACTION_PING.equals(value)) {
|
||||
new PositionEntryDialog(stringMessages.pingPosition(stringMessages.mark()),
|
||||
stringMessages, new DialogCallback<PositionDTO>() {
|
||||
|
||||
@Override
|
||||
public void ok(PositionDTO position) {
|
||||
sailingService.pingMarkViaRaceLogTracking(leaderboardName, raceColumnName, fleetName,
|
||||
markDTO, position, new AsyncCallback<Void>() {
|
||||
|
||||
@Override
|
||||
public void onSuccess(Void result) {
|
||||
refresh();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFailure(Throwable caught) {
|
||||
errorReporter.reportError("Could not ping mark: " + caught.getMessage());
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void cancel() {}
|
||||
}).show();
|
||||
}
|
||||
}
|
||||
});
|
||||
marksTable.addColumn(actionColumn);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
+26
@@ -0,0 +1,26 @@
|
||||
package com.sap.sailing.gwt.ui.adminconsole;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
import com.google.gwt.core.client.GWT;
|
||||
import com.sap.sailing.gwt.ui.client.StringMessages;
|
||||
import com.sap.sailing.gwt.ui.client.shared.components.ImagesBarCell;
|
||||
|
||||
public class RaceLogTrackingCourseDefinitionDialogMarksImagesBarCell extends ImagesBarCell {
|
||||
public static final String ACTION_PING = "ACTION_PING";
|
||||
private static AdminConsoleResources resources = GWT.create(AdminConsoleResources.class);
|
||||
private final StringMessages stringMessages;
|
||||
|
||||
public RaceLogTrackingCourseDefinitionDialogMarksImagesBarCell(StringMessages stringMessages) {
|
||||
super();
|
||||
this.stringMessages = stringMessages;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Iterable<ImageSpec> getImageSpecs() {
|
||||
ArrayList<ImageSpec> result = new ArrayList<ImageSpec>();
|
||||
result.add(new ImageSpec(ACTION_PING, stringMessages.pingPosition(stringMessages.mark()), makeImagePrototype(resources.ping())));
|
||||
|
||||
return result;
|
||||
}
|
||||
}
|
||||
+8
-1
@@ -19,15 +19,22 @@ public abstract class RaceLogTrackingDialog extends DialogBox {
|
||||
protected final String raceColumnName;
|
||||
protected final String fleetName;
|
||||
protected Button saveButton;
|
||||
|
||||
protected final boolean editable;
|
||||
|
||||
public RaceLogTrackingDialog(SailingServiceAsync sailingService, StringMessages stringMessages,
|
||||
ErrorReporter errorReporter, String leaderboardName, String raceColumnName, String fleetName) {
|
||||
this(sailingService, stringMessages, errorReporter, leaderboardName, raceColumnName, fleetName, true);
|
||||
}
|
||||
|
||||
public RaceLogTrackingDialog(SailingServiceAsync sailingService, StringMessages stringMessages,
|
||||
ErrorReporter errorReporter, String leaderboardName, String raceColumnName, String fleetName, boolean editable) {
|
||||
this.sailingService = sailingService;
|
||||
this.stringMessages = stringMessages;
|
||||
this.errorReporter = errorReporter;
|
||||
this.leaderboardName = leaderboardName;
|
||||
this.raceColumnName = raceColumnName;
|
||||
this.fleetName = fleetName;
|
||||
this.editable = editable;
|
||||
|
||||
VerticalPanel mainPanel = new VerticalPanel();
|
||||
setWidget(mainPanel);
|
||||
|
||||
+7
@@ -29,6 +29,7 @@ import com.sap.sailing.domain.common.configuration.DeviceConfigurationMatcherTyp
|
||||
import com.sap.sailing.domain.common.dto.CompetitorDTO;
|
||||
import com.sap.sailing.domain.common.dto.FleetDTO;
|
||||
import com.sap.sailing.domain.common.dto.IncrementalOrFullLeaderboardDTO;
|
||||
import com.sap.sailing.domain.common.dto.PositionDTO;
|
||||
import com.sap.sailing.domain.common.dto.RaceColumnDTO;
|
||||
import com.sap.sailing.domain.common.dto.RaceColumnInSeriesDTO;
|
||||
import com.sap.sailing.domain.common.dto.RaceDTO;
|
||||
@@ -37,6 +38,7 @@ import com.sap.sailing.domain.common.impl.Util.Pair;
|
||||
import com.sap.sailing.domain.common.impl.Util.Triple;
|
||||
import com.sap.sailing.domain.common.racelog.tracking.RaceNotCreatedException;
|
||||
import com.sap.sailing.domain.racelog.RaceLog;
|
||||
import com.sap.sailing.domain.racelog.tracking.GPSFixStore;
|
||||
import com.sap.sailing.gwt.ui.shared.BulkScoreCorrectionDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.CompactRaceMapDataDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.CompetitorsRaceDataDTO;
|
||||
@@ -413,4 +415,9 @@ public interface SailingService extends RemoteService {
|
||||
void addCourseDefinitionToRaceLog(String leaderboardName, String raceColumnName, String fleetName, List<Pair<ControlPointDTO, PassingInstruction>> course);
|
||||
|
||||
RaceCourseDTO getLastCourseDefinitionInRaceLog(String leaderboardName, String raceColumnName, String fleetName);
|
||||
|
||||
/**
|
||||
* Adds a fix to the {@link GPSFixStore}, and creates a mapping with a virtual device for exactly the current timepoint.
|
||||
*/
|
||||
void pingMarkViaRaceLogTracking(String leaderboardName, String raceColumnName, String fleetName, MarkDTO mark, PositionDTO position);
|
||||
}
|
||||
+4
@@ -28,6 +28,7 @@ import com.sap.sailing.domain.common.configuration.DeviceConfigurationMatcherTyp
|
||||
import com.sap.sailing.domain.common.dto.CompetitorDTO;
|
||||
import com.sap.sailing.domain.common.dto.FleetDTO;
|
||||
import com.sap.sailing.domain.common.dto.IncrementalOrFullLeaderboardDTO;
|
||||
import com.sap.sailing.domain.common.dto.PositionDTO;
|
||||
import com.sap.sailing.domain.common.dto.RaceColumnDTO;
|
||||
import com.sap.sailing.domain.common.dto.RaceColumnInSeriesDTO;
|
||||
import com.sap.sailing.domain.common.dto.RaceDTO;
|
||||
@@ -548,5 +549,8 @@ public interface SailingServiceAsync {
|
||||
|
||||
void getLastCourseDefinitionInRaceLog(String leaderboardName, String raceColumnName, String fleetName,
|
||||
AsyncCallback<RaceCourseDTO> callback);
|
||||
|
||||
void pingMarkViaRaceLogTracking(String leaderboardName, String raceColumnName, String fleetName, MarkDTO mark,
|
||||
PositionDTO position, AsyncCallback<Void> callback);
|
||||
}
|
||||
|
||||
+2
@@ -978,4 +978,6 @@ public interface StringMessages extends Messages {
|
||||
@Key("remove_what")
|
||||
String remove(String what);
|
||||
String pleaseEnterA(String what);
|
||||
String pingPosition(String whose);
|
||||
String pleaseEnterAValidValueFor(String what, String validTemplate);
|
||||
}
|
||||
+3
-1
@@ -963,4 +963,6 @@ mapDevices=Map Devices to Competitors and Marks
|
||||
edit_what=Edit {0}
|
||||
add_what=Add {0}
|
||||
remove_what=Remove {0}
|
||||
pleaseEnterA=Please enter a {0}
|
||||
pleaseEnterA=Please enter a {0}
|
||||
pingPosition=Ping {0} position
|
||||
pleaseEnterAValidValueFor=Please enter a valid value for {0} ({1})
|
||||
+3
-1
@@ -959,4 +959,6 @@ mapDevices=Gerätezuordnung zu Teams und Tonnen
|
||||
edit_what={0} bearbeiten
|
||||
add_what={0} hinzufügen
|
||||
remove_what={0} entfernen
|
||||
pleaseEnterA=Bitte {0} eingeben.
|
||||
pleaseEnterA=Bitte {0} eingeben.
|
||||
pingPosition={0}-Position pingen
|
||||
pleaseEnterAValidValueFor=Bitte geben Sie für {0} einen gültigen Wert ein ({1})
|
||||
+55
-17
@@ -188,12 +188,17 @@ import com.sap.sailing.domain.racelog.state.impl.ReadonlyRaceStateImpl;
|
||||
import com.sap.sailing.domain.racelog.state.racingprocedure.FlagPoleState;
|
||||
import com.sap.sailing.domain.racelog.state.racingprocedure.gate.ReadonlyGateStartRacingProcedure;
|
||||
import com.sap.sailing.domain.racelog.state.racingprocedure.rrs26.ReadonlyRRS26RacingProcedure;
|
||||
import com.sap.sailing.domain.racelog.tracking.RaceLogTrackingAdapter;
|
||||
import com.sap.sailing.domain.racelog.tracking.RaceLogTrackingAdapterFactory;
|
||||
import com.sap.sailing.domain.racelog.tracking.DeviceIdentifier;
|
||||
import com.sap.sailing.domain.racelog.tracking.DeviceMappingEvent;
|
||||
import com.sap.sailing.domain.racelog.tracking.RegisterCompetitorEvent;
|
||||
import com.sap.sailing.domain.racelog.tracking.analyzing.impl.DefinedMarkFinder;
|
||||
import com.sap.sailing.domain.racelog.tracking.analyzing.impl.LastPingMappingEventFinder;
|
||||
import com.sap.sailing.domain.racelog.tracking.analyzing.impl.RaceLogTrackingStateAnalyzer;
|
||||
import com.sap.sailing.domain.racelog.tracking.analyzing.impl.RegisteredCompetitorsAnalyzer;
|
||||
import com.sap.sailing.domain.racelog.tracking.impl.DeviceMappingImpl;
|
||||
import com.sap.sailing.domain.racelogtracking.PingDeviceIdentifierImpl;
|
||||
import com.sap.sailing.domain.racelogtracking.RaceLogTrackingAdapter;
|
||||
import com.sap.sailing.domain.racelogtracking.RaceLogTrackingAdapterFactory;
|
||||
import com.sap.sailing.domain.swisstimingadapter.SwissTimingAdapter;
|
||||
import com.sap.sailing.domain.swisstimingadapter.SwissTimingAdapterFactory;
|
||||
import com.sap.sailing.domain.swisstimingadapter.SwissTimingArchiveConfiguration;
|
||||
@@ -220,6 +225,8 @@ import com.sap.sailing.domain.tracking.TrackedRace;
|
||||
import com.sap.sailing.domain.tracking.Wind;
|
||||
import com.sap.sailing.domain.tracking.WindTrack;
|
||||
import com.sap.sailing.domain.tracking.WindWithConfidence;
|
||||
import com.sap.sailing.domain.tracking.impl.DynamicGPSFixTrackImpl;
|
||||
import com.sap.sailing.domain.tracking.impl.GPSFixImpl;
|
||||
import com.sap.sailing.domain.tracking.impl.GPSFixMovingImpl;
|
||||
import com.sap.sailing.domain.tracking.impl.WindImpl;
|
||||
import com.sap.sailing.domain.tractracadapter.RaceRecord;
|
||||
@@ -3961,34 +3968,39 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Generates new id, does not resolve against domain factory.
|
||||
*/
|
||||
private Mark convertToMark(MarkDTO dto) {
|
||||
// Mark existing = baseDomainFactory.getExistingMarkByIdAsString(dto.getIdAsString());
|
||||
// if (existing != null) {
|
||||
// return existing;
|
||||
// }
|
||||
private Mark convertToMark(MarkDTO dto, boolean resolve) {
|
||||
if (resolve) {
|
||||
Mark existing = baseDomainFactory.getExistingMarkByIdAsString(dto.getIdAsString());
|
||||
if (existing != null) {
|
||||
return existing;
|
||||
}
|
||||
}
|
||||
|
||||
// Serializable id = dto.getIdAsString();
|
||||
// if (id == null) {
|
||||
Serializable id = UUID.randomUUID();
|
||||
// }
|
||||
|
||||
return baseDomainFactory.getOrCreateMark(id, dto.getName(), dto.type, dto.color, dto.shape, dto.pattern);
|
||||
}
|
||||
|
||||
private Collection<MarkDTO> convertToMarkDTOs(Iterable<Mark> marks) {
|
||||
/**
|
||||
* Also finds the last position of the marks, if set by pinging them
|
||||
*/
|
||||
private Collection<MarkDTO> convertToMarkDTOs(RaceLog raceLog, Iterable<Mark> marks) {
|
||||
List<MarkDTO> dtos = new ArrayList<MarkDTO>();
|
||||
for (Mark mark : marks) {
|
||||
dtos.add(convertToMarkDTO(mark, null));
|
||||
DynamicGPSFixTrackImpl<Mark> track = new DynamicGPSFixTrackImpl<Mark>(mark, 0);
|
||||
DeviceMappingEvent<Mark> lastPingMappingEvent = new LastPingMappingEventFinder<Mark>(raceLog, mark).analyze();
|
||||
if (lastPingMappingEvent != null) {
|
||||
getService().getGPSFixStore().loadMarkTrack(track, DeviceMappingImpl.convertToDeviceMapping(lastPingMappingEvent));
|
||||
}
|
||||
Position lastPos = track.getLastRawFix() == null ? null : track.getLastRawFix().getPosition();
|
||||
dtos.add(convertToMarkDTO(mark, lastPos));
|
||||
}
|
||||
return dtos;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addMarkToRaceLog(String leaderboardName, String raceColumnName, String fleetName, MarkDTO markDTO) {
|
||||
Mark mark = convertToMark(markDTO);
|
||||
Mark mark = convertToMark(markDTO, false);
|
||||
RaceLog raceLog = getRaceLog(leaderboardName, raceColumnName, fleetName);
|
||||
RaceLogEvent event = RaceLogEventFactory.INSTANCE.createDefineMarkEvent(MillisecondsTimePoint.now(),
|
||||
getService().getServerAuthor(), raceLog.getCurrentPassId(), mark);
|
||||
@@ -3999,7 +4011,7 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S
|
||||
public Collection<MarkDTO> getMarksInRaceLog(String leaderboardName, String raceColumnName, String fleetName) {
|
||||
RaceLog raceLog = getRaceLog(leaderboardName, raceColumnName, fleetName);
|
||||
Collection<Mark> marks = new DefinedMarkFinder(raceLog).analyze();
|
||||
return convertToMarkDTOs(marks);
|
||||
return convertToMarkDTOs(raceLog, marks);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -4055,4 +4067,30 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S
|
||||
|
||||
return convertToRaceCourseDTO(lastPublishedCourse);
|
||||
}
|
||||
|
||||
private Position convertToPosition(PositionDTO dto) {
|
||||
return new DegreePosition(dto.latDeg, dto.lngDeg);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void pingMarkViaRaceLogTracking(String leaderboardName, String raceColumnName, String fleetName,
|
||||
MarkDTO markDTO, PositionDTO positionDTO) {
|
||||
RaceLog raceLog = getRaceLog(leaderboardName, raceColumnName, fleetName);
|
||||
|
||||
Mark mark = convertToMark(markDTO, true);
|
||||
|
||||
TimePoint time = MillisecondsTimePoint.now();
|
||||
|
||||
Position position = convertToPosition(positionDTO);
|
||||
GPSFix fix = new GPSFixImpl(position, time);
|
||||
|
||||
DeviceIdentifier device = new PingDeviceIdentifierImpl();
|
||||
|
||||
RaceLogEvent mapping = RaceLogEventFactory.INSTANCE.createDeviceMarkMappingEvent(time,
|
||||
getService().getServerAuthor(), device, mark, raceLog.getCurrentPassId(), time, time);
|
||||
|
||||
raceLog.add(mapping);
|
||||
|
||||
getService().getGPSFixStore().storeFix(device, fix);
|
||||
}
|
||||
}
|
||||
BIN
Binary file not shown.
|
After Width: | Height: | Size: 690 B |
@@ -1,15 +1,26 @@
|
||||
package com.sap.sailing.server.impl;
|
||||
|
||||
import java.nio.charset.Charset;
|
||||
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.base.RaceDefinition;
|
||||
import com.sap.sailing.domain.base.Regatta;
|
||||
import com.sap.sailing.domain.common.impl.Util.Triple;
|
||||
import com.sap.sailing.domain.common.racelog.tracking.TypeBasedServiceFinder;
|
||||
import com.sap.sailing.domain.persistence.racelog.tracking.GPSFixMongoHandler;
|
||||
import com.sap.sailing.domain.persistence.racelog.tracking.impl.GPSFixMongoHandlerImpl;
|
||||
import com.sap.sailing.domain.persistence.racelog.tracking.impl.GPSFixMovingMongoHandlerImpl;
|
||||
import com.sap.sailing.domain.tracking.impl.GPSFixImpl;
|
||||
import com.sap.sailing.domain.tracking.impl.GPSFixMovingImpl;
|
||||
import com.sap.sailing.server.RacingEventService;
|
||||
import com.sap.sailing.server.racelog.tracking.CachedOsgiTypeBasedServiceFinderFactory;
|
||||
|
||||
@@ -25,6 +36,8 @@ public class Activator implements BundleActivator {
|
||||
private RacingEventServiceImpl racingEventService;
|
||||
|
||||
private final boolean clearPersistentCompetitors;
|
||||
|
||||
private Set<ServiceRegistration<?>> registrations = new HashSet<>();
|
||||
|
||||
public Activator() {
|
||||
clearPersistentCompetitors = Boolean.valueOf(System.getProperty(CLEAR_PERSISTENT_COMPETITORS_PROPERTY_NAME, ""+true));
|
||||
@@ -47,6 +60,16 @@ public class Activator implements BundleActivator {
|
||||
// register the racing service in the OSGi registry
|
||||
racingEventService.setBundleContext(context);
|
||||
context.registerService(RacingEventService.class.getName(), racingEventService, null);
|
||||
|
||||
Dictionary<String, String> properties = new Hashtable<String, String>();
|
||||
properties.put(TypeBasedServiceFinder.TYPE, GPSFixImpl.class.getName());
|
||||
registrations.add(context.registerService(GPSFixMongoHandler.class,
|
||||
new GPSFixMongoHandlerImpl(racingEventService.getMongoObjectFactory(),
|
||||
racingEventService.getDomainObjectFactory()), properties));
|
||||
properties.put(TypeBasedServiceFinder.TYPE, GPSFixMovingImpl.class.getName());
|
||||
registrations.add(context.registerService(GPSFixMongoHandler.class,
|
||||
new GPSFixMovingMongoHandlerImpl(racingEventService.getMongoObjectFactory(),
|
||||
racingEventService.getDomainObjectFactory()), properties));
|
||||
|
||||
logger.log(Level.INFO, "Started "+context.getBundle().getSymbolicName()+". Character encoding: "+
|
||||
Charset.defaultCharset());
|
||||
@@ -66,5 +89,9 @@ public class Activator implements BundleActivator {
|
||||
for (Regatta regatta : racingEventService.getAllRegattas()) {
|
||||
racingEventService.stopTracking(regatta);
|
||||
}
|
||||
for (ServiceRegistration<?> reg : registrations) {
|
||||
reg.unregister();
|
||||
}
|
||||
registrations.clear();
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user