From 9cffd20913a7f0016c84c5631d296ea664e53780 Mon Sep 17 00:00:00 2001 From: Fredrik Teschke Date: Fri, 7 Mar 2014 22:42:14 +0100 Subject: [PATCH] added ping mark functionality to adminConsole --- .../META-INF/MANIFEST.MF | 1 + .../META-INF/MANIFEST.MF | 6 +- .../domain/persistence/impl/Activator.java | 30 ++------ .../impl/DomainObjectFactoryImpl.java | 6 +- .../impl/MongoObjectFactoryImpl.java | 6 +- .../tracking/impl/GPSFixMongoHandlerImpl.java | 8 +- .../impl/GPSFixMovingMongoHandlerImpl.java | 8 +- .../test/AbstractGPSFixStoreTest.java | 2 +- .../test/AbstractJsonOverHttpTest.java | 2 +- .../impl/CreateAndTrackWithRaceLogTest.java | 6 +- .../test/impl/RecordFixesTest.java | 6 +- .../test/impl/TrackedRaceLoadsFixesTest.java | 4 +- .../test/manual/PostFixes.java | 4 +- .../.classpath | 2 +- .../.settings/org.eclipse.jdt.core.prefs | 6 +- .../META-INF/MANIFEST.MF | 2 +- .../test/mock/MockServiceFinderFactory.java | 2 +- .../MockSmartphoneImeiMongoServiceFinder.java | 2 +- .../META-INF/MANIFEST.MF | 8 +- .../WEB-INF/web.xml | 2 +- .../PingDeviceIdentifier.java | 4 +- .../PingDeviceIdentifierImpl.java | 11 ++- .../RaceLogTrackingAdapter.java | 5 +- .../RaceLogTrackingAdapterFactory.java | 2 +- .../impl/Activator.java | 5 +- .../impl/GPSFixJsonHandlerImpl.java | 2 +- .../impl/PingDeviceMongoHandlerImpl.java | 5 +- .../impl/RaceLogConnectivityParams.java | 2 +- .../impl/RaceLogRaceTracker.java | 10 ++- .../impl/RaceLogRacesHandle.java | 2 +- .../RaceLogTrackingAdapterFactoryImpl.java | 6 +- .../impl/RaceLogTrackingAdapterImpl.java | 4 +- .../impl/SmartphoneImeiMongoHandlerImpl.java | 2 +- .../servlet/RecordFixesPostServlet.java | 2 +- .../impl/LastPingMappingEventFinder.java | 32 ++++++++ .../tracking/impl/DeviceMappingImpl.java | 6 ++ .../META-INF/MANIFEST.MF | 8 +- .../gwt/ui/test/PingMarkViaRaceLogTest.java | 46 +++++++++++ .../gwt/ui/test/SailingServiceImplMock.java | 19 ++++- .../adminconsole/AdminConsoleResources.java | 3 + .../ui/adminconsole/PositionEntryDialog.java | 64 ++++++++++++++++ ...TrackingCompetitorRegistrationsDialog.java | 4 +- ...RaceLogTrackingCourseDefinitionDialog.java | 37 +++++++++ ...rseDefinitionDialogMarksImagesBarCell.java | 26 +++++++ .../adminconsole/RaceLogTrackingDialog.java | 9 ++- .../sailing/gwt/ui/client/SailingService.java | 7 ++ .../gwt/ui/client/SailingServiceAsync.java | 4 + .../sailing/gwt/ui/client/StringMessages.java | 2 + .../gwt/ui/client/StringMessages.properties | 4 +- .../ui/client/StringMessages_de.properties | 4 +- .../gwt/ui/server/SailingServiceImpl.java | 72 +++++++++++++----- .../sap/sailing/gwt/ui/client/images/ping.png | Bin 0 -> 690 bytes .../sap/sailing/server/impl/Activator.java | 27 +++++++ 53 files changed, 440 insertions(+), 109 deletions(-) rename java/com.sap.sailing.domain.racelogtrackingadapter.test/src/com/sap/sailing/domain/{racelog/tracking => racelogtracking}/test/AbstractGPSFixStoreTest.java (98%) rename java/com.sap.sailing.domain.racelogtrackingadapter.test/src/com/sap/sailing/domain/{racelog/tracking => racelogtracking}/test/AbstractJsonOverHttpTest.java (97%) rename java/com.sap.sailing.domain.racelogtrackingadapter.test/src/com/sap/sailing/domain/{racelog/tracking => racelogtracking}/test/impl/CreateAndTrackWithRaceLogTest.java (97%) rename java/com.sap.sailing.domain.racelogtrackingadapter.test/src/com/sap/sailing/domain/{racelog/tracking => racelogtracking}/test/impl/RecordFixesTest.java (90%) rename java/com.sap.sailing.domain.racelogtrackingadapter.test/src/com/sap/sailing/domain/{racelog/tracking => racelogtracking}/test/impl/TrackedRaceLoadsFixesTest.java (96%) rename java/com.sap.sailing.domain.racelogtrackingadapter.test/src/com/sap/sailing/domain/{racelog/tracking => racelogtracking}/test/manual/PostFixes.java (97%) rename java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/{racelog/tracking => racelogtracking}/PingDeviceIdentifier.java (75%) rename java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/{racelog/tracking/impl => racelogtracking}/PingDeviceIdentifierImpl.java (78%) rename java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/{racelog/tracking => racelogtracking}/RaceLogTrackingAdapter.java (94%) rename java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/{racelog/tracking => racelogtracking}/RaceLogTrackingAdapterFactory.java (78%) rename java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/{racelog/tracking => racelogtracking}/impl/Activator.java (93%) rename java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/{racelog/tracking => racelogtracking}/impl/GPSFixJsonHandlerImpl.java (92%) rename java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/{racelog/tracking => racelogtracking}/impl/PingDeviceMongoHandlerImpl.java (84%) rename java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/{racelog/tracking => racelogtracking}/impl/RaceLogConnectivityParams.java (98%) rename java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/{racelog/tracking => racelogtracking}/impl/RaceLogRaceTracker.java (97%) rename java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/{racelog/tracking => racelogtracking}/impl/RaceLogRacesHandle.java (97%) rename java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/{racelog/tracking => racelogtracking}/impl/RaceLogTrackingAdapterFactoryImpl.java (68%) rename java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/{racelog/tracking => racelogtracking}/impl/RaceLogTrackingAdapterImpl.java (98%) rename java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/{racelog/tracking => racelogtracking}/impl/SmartphoneImeiMongoHandlerImpl.java (93%) rename java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/{racelog/tracking => racelogtracking}/servlet/RecordFixesPostServlet.java (97%) create mode 100644 java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/racelog/tracking/analyzing/impl/LastPingMappingEventFinder.java create mode 100644 java/com.sap.sailing.gwt.ui.test/src/com/sap/sailing/gwt/ui/test/PingMarkViaRaceLogTest.java create mode 100644 java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/PositionEntryDialog.java create mode 100644 java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/RaceLogTrackingCourseDefinitionDialogMarksImagesBarCell.java create mode 100644 java/com.sap.sailing.gwt.ui/src/main/resources/com/sap/sailing/gwt/ui/client/images/ping.png diff --git a/java/com.sap.sailing.domain.igtimiadapter/META-INF/MANIFEST.MF b/java/com.sap.sailing.domain.igtimiadapter/META-INF/MANIFEST.MF index 8852c2829b7..2b33ee0172c 100755 --- a/java/com.sap.sailing.domain.igtimiadapter/META-INF/MANIFEST.MF +++ b/java/com.sap.sailing.domain.igtimiadapter/META-INF/MANIFEST.MF @@ -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 diff --git a/java/com.sap.sailing.domain.persistence/META-INF/MANIFEST.MF b/java/com.sap.sailing.domain.persistence/META-INF/MANIFEST.MF index 04302a97157..815202fbdea 100755 --- a/java/com.sap.sailing.domain.persistence/META-INF/MANIFEST.MF +++ b/java/com.sap.sailing.domain.persistence/META-INF/MANIFEST.MF @@ -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, diff --git a/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/Activator.java b/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/Activator.java index 2b0639f13b9..d125959b64a 100644 --- a/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/Activator.java +++ b/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/Activator.java @@ -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> 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 properties = new Hashtable(); - 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(); } } diff --git a/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/DomainObjectFactoryImpl.java b/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/DomainObjectFactoryImpl.java index 72a1ce3c289..e3c48adfd32 100755 --- a/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/DomainObjectFactoryImpl.java +++ b/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/DomainObjectFactoryImpl.java @@ -156,6 +156,7 @@ public class DomainObjectFactoryImpl implements DomainObjectFactory { private RaceLogEventRestoreFactory raceLogEventFactory; private final DomainFactory baseDomainFactory; private final TypeBasedServiceFinder deviceIdentifierServiceFinder; + private final TypeBasedServiceFinderFactory serviceFinderFactory; /** * Uses null 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 = 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 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); } diff --git a/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/MongoObjectFactoryImpl.java b/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/MongoObjectFactoryImpl.java index d990938fe52..5c8ba69c7a8 100755 --- a/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/MongoObjectFactoryImpl.java +++ b/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/MongoObjectFactoryImpl.java @@ -1143,8 +1143,10 @@ public class MongoObjectFactoryImpl implements MongoObjectFactory { public static DBObject storeDeviceId( TypeBasedServiceFinder 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(); diff --git a/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/racelog/tracking/impl/GPSFixMongoHandlerImpl.java b/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/racelog/tracking/impl/GPSFixMongoHandlerImpl.java index f06b2cf680d..4c9ad620d68 100644 --- a/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/racelog/tracking/impl/GPSFixMongoHandlerImpl.java +++ b/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/racelog/tracking/impl/GPSFixMongoHandlerImpl.java @@ -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 diff --git a/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/racelog/tracking/impl/GPSFixMovingMongoHandlerImpl.java b/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/racelog/tracking/impl/GPSFixMovingMongoHandlerImpl.java index 5a3fdc87c7d..ef86c120edc 100644 --- a/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/racelog/tracking/impl/GPSFixMovingMongoHandlerImpl.java +++ b/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/racelog/tracking/impl/GPSFixMovingMongoHandlerImpl.java @@ -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 diff --git a/java/com.sap.sailing.domain.racelogtrackingadapter.test/src/com/sap/sailing/domain/racelog/tracking/test/AbstractGPSFixStoreTest.java b/java/com.sap.sailing.domain.racelogtrackingadapter.test/src/com/sap/sailing/domain/racelogtracking/test/AbstractGPSFixStoreTest.java similarity index 98% rename from java/com.sap.sailing.domain.racelogtrackingadapter.test/src/com/sap/sailing/domain/racelog/tracking/test/AbstractGPSFixStoreTest.java rename to java/com.sap.sailing.domain.racelogtrackingadapter.test/src/com/sap/sailing/domain/racelogtracking/test/AbstractGPSFixStoreTest.java index 1e7bf62a2ea..47b9c35e736 100644 --- a/java/com.sap.sailing.domain.racelogtrackingadapter.test/src/com/sap/sailing/domain/racelog/tracking/test/AbstractGPSFixStoreTest.java +++ b/java/com.sap.sailing.domain.racelogtrackingadapter.test/src/com/sap/sailing/domain/racelogtracking/test/AbstractGPSFixStoreTest.java @@ -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; diff --git a/java/com.sap.sailing.domain.racelogtrackingadapter.test/src/com/sap/sailing/domain/racelog/tracking/test/AbstractJsonOverHttpTest.java b/java/com.sap.sailing.domain.racelogtrackingadapter.test/src/com/sap/sailing/domain/racelogtracking/test/AbstractJsonOverHttpTest.java similarity index 97% rename from java/com.sap.sailing.domain.racelogtrackingadapter.test/src/com/sap/sailing/domain/racelog/tracking/test/AbstractJsonOverHttpTest.java rename to java/com.sap.sailing.domain.racelogtrackingadapter.test/src/com/sap/sailing/domain/racelogtracking/test/AbstractJsonOverHttpTest.java index 496a9b7442d..0014db454a9 100644 --- a/java/com.sap.sailing.domain.racelogtrackingadapter.test/src/com/sap/sailing/domain/racelog/tracking/test/AbstractJsonOverHttpTest.java +++ b/java/com.sap.sailing.domain.racelogtrackingadapter.test/src/com/sap/sailing/domain/racelogtracking/test/AbstractJsonOverHttpTest.java @@ -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; diff --git a/java/com.sap.sailing.domain.racelogtrackingadapter.test/src/com/sap/sailing/domain/racelog/tracking/test/impl/CreateAndTrackWithRaceLogTest.java b/java/com.sap.sailing.domain.racelogtrackingadapter.test/src/com/sap/sailing/domain/racelogtracking/test/impl/CreateAndTrackWithRaceLogTest.java similarity index 97% rename from java/com.sap.sailing.domain.racelogtrackingadapter.test/src/com/sap/sailing/domain/racelog/tracking/test/impl/CreateAndTrackWithRaceLogTest.java rename to java/com.sap.sailing.domain.racelogtrackingadapter.test/src/com/sap/sailing/domain/racelogtracking/test/impl/CreateAndTrackWithRaceLogTest.java index dc28c791f35..f95087183cb 100644 --- a/java/com.sap.sailing.domain.racelogtrackingadapter.test/src/com/sap/sailing/domain/racelog/tracking/test/impl/CreateAndTrackWithRaceLogTest.java +++ b/java/com.sap.sailing.domain.racelogtrackingadapter.test/src/com/sap/sailing/domain/racelogtracking/test/impl/CreateAndTrackWithRaceLogTest.java @@ -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; diff --git a/java/com.sap.sailing.domain.racelogtrackingadapter.test/src/com/sap/sailing/domain/racelog/tracking/test/impl/RecordFixesTest.java b/java/com.sap.sailing.domain.racelogtrackingadapter.test/src/com/sap/sailing/domain/racelogtracking/test/impl/RecordFixesTest.java similarity index 90% rename from java/com.sap.sailing.domain.racelogtrackingadapter.test/src/com/sap/sailing/domain/racelog/tracking/test/impl/RecordFixesTest.java rename to java/com.sap.sailing.domain.racelogtrackingadapter.test/src/com/sap/sailing/domain/racelogtracking/test/impl/RecordFixesTest.java index 1bbbcdfe5f1..1cd66e8416e 100644 --- a/java/com.sap.sailing.domain.racelogtrackingadapter.test/src/com/sap/sailing/domain/racelog/tracking/test/impl/RecordFixesTest.java +++ b/java/com.sap.sailing.domain.racelogtrackingadapter.test/src/com/sap/sailing/domain/racelogtracking/test/impl/RecordFixesTest.java @@ -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; diff --git a/java/com.sap.sailing.domain.racelogtrackingadapter.test/src/com/sap/sailing/domain/racelog/tracking/test/impl/TrackedRaceLoadsFixesTest.java b/java/com.sap.sailing.domain.racelogtrackingadapter.test/src/com/sap/sailing/domain/racelogtracking/test/impl/TrackedRaceLoadsFixesTest.java similarity index 96% rename from java/com.sap.sailing.domain.racelogtrackingadapter.test/src/com/sap/sailing/domain/racelog/tracking/test/impl/TrackedRaceLoadsFixesTest.java rename to java/com.sap.sailing.domain.racelogtrackingadapter.test/src/com/sap/sailing/domain/racelogtracking/test/impl/TrackedRaceLoadsFixesTest.java index 0b0c53c9256..03e02d1e2a0 100644 --- a/java/com.sap.sailing.domain.racelogtrackingadapter.test/src/com/sap/sailing/domain/racelog/tracking/test/impl/TrackedRaceLoadsFixesTest.java +++ b/java/com.sap.sailing.domain.racelogtrackingadapter.test/src/com/sap/sailing/domain/racelogtracking/test/impl/TrackedRaceLoadsFixesTest.java @@ -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; diff --git a/java/com.sap.sailing.domain.racelogtrackingadapter.test/src/com/sap/sailing/domain/racelog/tracking/test/manual/PostFixes.java b/java/com.sap.sailing.domain.racelogtrackingadapter.test/src/com/sap/sailing/domain/racelogtracking/test/manual/PostFixes.java similarity index 97% rename from java/com.sap.sailing.domain.racelogtrackingadapter.test/src/com/sap/sailing/domain/racelog/tracking/test/manual/PostFixes.java rename to java/com.sap.sailing.domain.racelogtrackingadapter.test/src/com/sap/sailing/domain/racelogtracking/test/manual/PostFixes.java index b53fb783007..9735954234a 100644 --- a/java/com.sap.sailing.domain.racelogtrackingadapter.test/src/com/sap/sailing/domain/racelog/tracking/test/manual/PostFixes.java +++ b/java/com.sap.sailing.domain.racelogtrackingadapter.test/src/com/sap/sailing/domain/racelogtracking/test/manual/PostFixes.java @@ -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; diff --git a/java/com.sap.sailing.domain.racelogtrackingadapter.testsupport/.classpath b/java/com.sap.sailing.domain.racelogtrackingadapter.testsupport/.classpath index 098194ca4b7..4c62a8048e6 100644 --- a/java/com.sap.sailing.domain.racelogtrackingadapter.testsupport/.classpath +++ b/java/com.sap.sailing.domain.racelogtrackingadapter.testsupport/.classpath @@ -1,7 +1,7 @@ - + diff --git a/java/com.sap.sailing.domain.racelogtrackingadapter.testsupport/.settings/org.eclipse.jdt.core.prefs b/java/com.sap.sailing.domain.racelogtrackingadapter.testsupport/.settings/org.eclipse.jdt.core.prefs index f42de363afa..c537b63063c 100644 --- a/java/com.sap.sailing.domain.racelogtrackingadapter.testsupport/.settings/org.eclipse.jdt.core.prefs +++ b/java/com.sap.sailing.domain.racelogtrackingadapter.testsupport/.settings/org.eclipse.jdt.core.prefs @@ -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 diff --git a/java/com.sap.sailing.domain.racelogtrackingadapter.testsupport/META-INF/MANIFEST.MF b/java/com.sap.sailing.domain.racelogtrackingadapter.testsupport/META-INF/MANIFEST.MF index f94a7574794..8fdb50d5cc4 100644 --- a/java/com.sap.sailing.domain.racelogtrackingadapter.testsupport/META-INF/MANIFEST.MF +++ b/java/com.sap.sailing.domain.racelogtrackingadapter.testsupport/META-INF/MANIFEST.MF @@ -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, diff --git a/java/com.sap.sailing.domain.racelogtrackingadapter.testsupport/src/com/sap/sailing/domain/racelog/tracking/test/mock/MockServiceFinderFactory.java b/java/com.sap.sailing.domain.racelogtrackingadapter.testsupport/src/com/sap/sailing/domain/racelog/tracking/test/mock/MockServiceFinderFactory.java index a8b17715f3e..66350c8dc91 100644 --- a/java/com.sap.sailing.domain.racelogtrackingadapter.testsupport/src/com/sap/sailing/domain/racelog/tracking/test/mock/MockServiceFinderFactory.java +++ b/java/com.sap.sailing.domain.racelogtrackingadapter.testsupport/src/com/sap/sailing/domain/racelog/tracking/test/mock/MockServiceFinderFactory.java @@ -20,7 +20,7 @@ import com.sap.sailing.server.gateway.serialization.racelog.tracking.GPSFixJsonH * */ public class MockServiceFinderFactory implements TypeBasedServiceFinderFactory { - Map, TypeBasedServiceFinder> serviceFinders = new HashMap<>(); + Map, TypeBasedServiceFinder> serviceFinders = new HashMap, TypeBasedServiceFinder>(); public MockServiceFinderFactory() { serviceFinders.put(DeviceIdentifierMongoHandler.class, new MockSmartphoneImeiMongoServiceFinder()); diff --git a/java/com.sap.sailing.domain.racelogtrackingadapter.testsupport/src/com/sap/sailing/domain/racelog/tracking/test/mock/MockSmartphoneImeiMongoServiceFinder.java b/java/com.sap.sailing.domain.racelogtrackingadapter.testsupport/src/com/sap/sailing/domain/racelog/tracking/test/mock/MockSmartphoneImeiMongoServiceFinder.java index 1b4507dbde6..3e46c49d76e 100644 --- a/java/com.sap.sailing.domain.racelogtrackingadapter.testsupport/src/com/sap/sailing/domain/racelog/tracking/test/mock/MockSmartphoneImeiMongoServiceFinder.java +++ b/java/com.sap.sailing.domain.racelogtrackingadapter.testsupport/src/com/sap/sailing/domain/racelog/tracking/test/mock/MockSmartphoneImeiMongoServiceFinder.java @@ -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 diff --git a/java/com.sap.sailing.domain.racelogtrackingadapter/META-INF/MANIFEST.MF b/java/com.sap.sailing.domain.racelogtrackingadapter/META-INF/MANIFEST.MF index 05b692851c7..879450f051f 100644 --- a/java/com.sap.sailing.domain.racelogtrackingadapter/META-INF/MANIFEST.MF +++ b/java/com.sap.sailing.domain.racelogtrackingadapter/META-INF/MANIFEST.MF @@ -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 diff --git a/java/com.sap.sailing.domain.racelogtrackingadapter/WEB-INF/web.xml b/java/com.sap.sailing.domain.racelogtrackingadapter/WEB-INF/web.xml index 0f5473fbfea..7f11b027765 100644 --- a/java/com.sap.sailing.domain.racelogtrackingadapter/WEB-INF/web.xml +++ b/java/com.sap.sailing.domain.racelogtrackingadapter/WEB-INF/web.xml @@ -7,7 +7,7 @@ RecordFixesPostServlet - com.sap.sailing.domain.racelog.tracking.servlet.RecordFixesPostServlet + com.sap.sailing.domain.racelogtracking.servlet.RecordFixesPostServlet RecordFixesPostServlet diff --git a/java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/racelog/tracking/PingDeviceIdentifier.java b/java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/racelogtracking/PingDeviceIdentifier.java similarity index 75% rename from java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/racelog/tracking/PingDeviceIdentifier.java rename to java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/racelogtracking/PingDeviceIdentifier.java index 2b1949dfc48..92b30a3b20e 100644 --- a/java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/racelog/tracking/PingDeviceIdentifier.java +++ b/java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/racelogtracking/PingDeviceIdentifier.java @@ -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). diff --git a/java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/racelog/tracking/impl/PingDeviceIdentifierImpl.java b/java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/racelogtracking/PingDeviceIdentifierImpl.java similarity index 78% rename from java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/racelog/tracking/impl/PingDeviceIdentifierImpl.java rename to java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/racelogtracking/PingDeviceIdentifierImpl.java index ec7ec08fa0b..e4a2fbf0e46 100644 --- a/java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/racelog/tracking/impl/PingDeviceIdentifierImpl.java +++ b/java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/racelogtracking/PingDeviceIdentifierImpl.java @@ -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; + } } diff --git a/java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/racelog/tracking/RaceLogTrackingAdapter.java b/java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/racelogtracking/RaceLogTrackingAdapter.java similarity index 94% rename from java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/racelog/tracking/RaceLogTrackingAdapter.java rename to java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/racelogtracking/RaceLogTrackingAdapter.java index 8398c4be9fd..555a6735fcb 100644 --- a/java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/racelog/tracking/RaceLogTrackingAdapter.java +++ b/java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/racelogtracking/RaceLogTrackingAdapter.java @@ -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; diff --git a/java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/racelog/tracking/RaceLogTrackingAdapterFactory.java b/java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/racelogtracking/RaceLogTrackingAdapterFactory.java similarity index 78% rename from java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/racelog/tracking/RaceLogTrackingAdapterFactory.java rename to java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/racelogtracking/RaceLogTrackingAdapterFactory.java index 2fa1082d5c1..34b223fc676 100644 --- a/java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/racelog/tracking/RaceLogTrackingAdapterFactory.java +++ b/java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/racelogtracking/RaceLogTrackingAdapterFactory.java @@ -1,4 +1,4 @@ -package com.sap.sailing.domain.racelog.tracking; +package com.sap.sailing.domain.racelogtracking; import com.sap.sailing.domain.base.DomainFactory; diff --git a/java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/racelog/tracking/impl/Activator.java b/java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/racelogtracking/impl/Activator.java similarity index 93% rename from java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/racelog/tracking/impl/Activator.java rename to java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/racelogtracking/impl/Activator.java index 2e7dfd5b4be..7ae0d9da138 100644 --- a/java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/racelog/tracking/impl/Activator.java +++ b/java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/racelogtracking/impl/Activator.java @@ -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; diff --git a/java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/racelog/tracking/impl/GPSFixJsonHandlerImpl.java b/java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/racelogtracking/impl/GPSFixJsonHandlerImpl.java similarity index 92% rename from java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/racelog/tracking/impl/GPSFixJsonHandlerImpl.java rename to java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/racelogtracking/impl/GPSFixJsonHandlerImpl.java index 5c5b0dd5be7..9ad10e6d3da 100644 --- a/java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/racelog/tracking/impl/GPSFixJsonHandlerImpl.java +++ b/java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/racelogtracking/impl/GPSFixJsonHandlerImpl.java @@ -1,4 +1,4 @@ -package com.sap.sailing.domain.racelog.tracking.impl; +package com.sap.sailing.domain.racelogtracking.impl; import org.json.simple.JSONObject; diff --git a/java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/racelog/tracking/impl/PingDeviceMongoHandlerImpl.java b/java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/racelogtracking/impl/PingDeviceMongoHandlerImpl.java similarity index 84% rename from java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/racelog/tracking/impl/PingDeviceMongoHandlerImpl.java rename to java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/racelogtracking/impl/PingDeviceMongoHandlerImpl.java index 7e0d82f2dd3..504bbf4c559 100644 --- a/java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/racelog/tracking/impl/PingDeviceMongoHandlerImpl.java +++ b/java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/racelogtracking/impl/PingDeviceMongoHandlerImpl.java @@ -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 { diff --git a/java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/racelog/tracking/impl/RaceLogConnectivityParams.java b/java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/racelogtracking/impl/RaceLogConnectivityParams.java similarity index 98% rename from java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/racelog/tracking/impl/RaceLogConnectivityParams.java rename to java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/racelogtracking/impl/RaceLogConnectivityParams.java index c116c2c093c..565705c9bdb 100644 --- a/java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/racelog/tracking/impl/RaceLogConnectivityParams.java +++ b/java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/racelogtracking/impl/RaceLogConnectivityParams.java @@ -1,4 +1,4 @@ -package com.sap.sailing.domain.racelog.tracking.impl; +package com.sap.sailing.domain.racelogtracking.impl; import java.util.UUID; diff --git a/java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/racelog/tracking/impl/RaceLogRaceTracker.java b/java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/racelogtracking/impl/RaceLogRaceTracker.java similarity index 97% rename from java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/racelog/tracking/impl/RaceLogRaceTracker.java rename to java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/racelogtracking/impl/RaceLogRaceTracker.java index 011da3abeb1..4c9c0e7b1cc 100644 --- a/java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/racelog/tracking/impl/RaceLogRaceTracker.java +++ b/java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/racelogtracking/impl/RaceLogRaceTracker.java @@ -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 track = trackedRace.getOrCreateTrack(mark); List> oldMappings = markMappings.get(mark); - for (DeviceMapping newMapping : newMappings.get(mark)) { - if (!hasMappingAlreadyBeenLoaded(newMapping, oldMappings)) { - gpsFixStore.loadMarkTrack(track, newMapping); + if (oldMappings != null) { + for (DeviceMapping newMapping : newMappings.get(mark)) { + if (!hasMappingAlreadyBeenLoaded(newMapping, oldMappings)) { + gpsFixStore.loadMarkTrack(track, newMapping); + } } } } diff --git a/java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/racelog/tracking/impl/RaceLogRacesHandle.java b/java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/racelogtracking/impl/RaceLogRacesHandle.java similarity index 97% rename from java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/racelog/tracking/impl/RaceLogRacesHandle.java rename to java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/racelogtracking/impl/RaceLogRacesHandle.java index 7160d56a319..c3d20496915 100644 --- a/java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/racelog/tracking/impl/RaceLogRacesHandle.java +++ b/java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/racelogtracking/impl/RaceLogRacesHandle.java @@ -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; diff --git a/java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/racelog/tracking/impl/RaceLogTrackingAdapterFactoryImpl.java b/java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/racelogtracking/impl/RaceLogTrackingAdapterFactoryImpl.java similarity index 68% rename from java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/racelog/tracking/impl/RaceLogTrackingAdapterFactoryImpl.java rename to java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/racelogtracking/impl/RaceLogTrackingAdapterFactoryImpl.java index f1712eb4007..fbd1048b99a 100644 --- a/java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/racelog/tracking/impl/RaceLogTrackingAdapterFactoryImpl.java +++ b/java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/racelogtracking/impl/RaceLogTrackingAdapterFactoryImpl.java @@ -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; diff --git a/java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/racelog/tracking/impl/RaceLogTrackingAdapterImpl.java b/java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/racelogtracking/impl/RaceLogTrackingAdapterImpl.java similarity index 98% rename from java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/racelog/tracking/impl/RaceLogTrackingAdapterImpl.java rename to java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/racelogtracking/impl/RaceLogTrackingAdapterImpl.java index 8d47d375c70..59e2cc4b249 100644 --- a/java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/racelog/tracking/impl/RaceLogTrackingAdapterImpl.java +++ b/java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/racelogtracking/impl/RaceLogTrackingAdapterImpl.java @@ -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; diff --git a/java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/racelog/tracking/impl/SmartphoneImeiMongoHandlerImpl.java b/java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/racelogtracking/impl/SmartphoneImeiMongoHandlerImpl.java similarity index 93% rename from java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/racelog/tracking/impl/SmartphoneImeiMongoHandlerImpl.java rename to java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/racelogtracking/impl/SmartphoneImeiMongoHandlerImpl.java index a2c696ab3b4..acdc6cf5db0 100644 --- a/java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/racelog/tracking/impl/SmartphoneImeiMongoHandlerImpl.java +++ b/java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/racelogtracking/impl/SmartphoneImeiMongoHandlerImpl.java @@ -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; diff --git a/java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/racelog/tracking/servlet/RecordFixesPostServlet.java b/java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/racelogtracking/servlet/RecordFixesPostServlet.java similarity index 97% rename from java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/racelog/tracking/servlet/RecordFixesPostServlet.java rename to java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/racelogtracking/servlet/RecordFixesPostServlet.java index 0b7d8fcb3cf..b5418dee1dc 100644 --- a/java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/racelog/tracking/servlet/RecordFixesPostServlet.java +++ b/java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/racelogtracking/servlet/RecordFixesPostServlet.java @@ -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; diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/racelog/tracking/analyzing/impl/LastPingMappingEventFinder.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/racelog/tracking/analyzing/impl/LastPingMappingEventFinder.java new file mode 100644 index 00000000000..f1d53eefc77 --- /dev/null +++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/racelog/tracking/analyzing/impl/LastPingMappingEventFinder.java @@ -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 extends RaceLogAnalyzer> { + private final WithID item; + + public LastPingMappingEventFinder(RaceLog raceLog, WithID forItem) { + super(raceLog); + this.item = forItem; + } + + @Override + protected DeviceMappingEvent 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 cast = (DeviceMappingEvent) mappingEvent; + return cast; + } + } + } + return null; + } + +} diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/racelog/tracking/impl/DeviceMappingImpl.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/racelog/tracking/impl/DeviceMappingImpl.java index a9edcc1e5c6..5a558c6d6c6 100644 --- a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/racelog/tracking/impl/DeviceMappingImpl.java +++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/racelog/tracking/impl/DeviceMappingImpl.java @@ -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 implements DeviceMapping { private static final long serialVersionUID = -4602948402371623654L; @@ -38,4 +40,8 @@ public class DeviceMappingImpl implements DeviceMapping public TimePoint getTimePoint() { return timeRange.from(); } + + public static DeviceMapping convertToDeviceMapping(DeviceMappingEvent event) { + return new DeviceMappingImpl(event.getMappedTo(), event.getDevice(), new TimeRangeImpl(event.getFrom(), event.getTo())); + } } diff --git a/java/com.sap.sailing.gwt.ui.test/META-INF/MANIFEST.MF b/java/com.sap.sailing.gwt.ui.test/META-INF/MANIFEST.MF index cc2929cfa54..acf91d5ff98 100755 --- a/java/com.sap.sailing.gwt.ui.test/META-INF/MANIFEST.MF +++ b/java/com.sap.sailing.gwt.ui.test/META-INF/MANIFEST.MF @@ -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", diff --git a/java/com.sap.sailing.gwt.ui.test/src/com/sap/sailing/gwt/ui/test/PingMarkViaRaceLogTest.java b/java/com.sap.sailing.gwt.ui.test/src/com/sap/sailing/gwt/ui/test/PingMarkViaRaceLogTest.java new file mode 100644 index 00000000000..0cd398f06cf --- /dev/null +++ b/java/com.sap.sailing.gwt.ui.test/src/com/sap/sailing/gwt/ui/test/PingMarkViaRaceLogTest.java @@ -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.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); + } +} diff --git a/java/com.sap.sailing.gwt.ui.test/src/com/sap/sailing/gwt/ui/test/SailingServiceImplMock.java b/java/com.sap.sailing.gwt.ui.test/src/com/sap/sailing/gwt/ui/test/SailingServiceImplMock.java index 58146114a09..1de7422861b 100755 --- a/java/com.sap.sailing.gwt.ui.test/src/com/sap/sailing/gwt/ui/test/SailingServiceImplMock.java +++ b/java/com.sap.sailing.gwt.ui.test/src/com/sap/sailing/gwt/ui/test/SailingServiceImplMock.java @@ -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 createAndOpenRaceLogTrackingAdapterTracker( + BundleContext context) { + @SuppressWarnings("unchecked") + ServiceTracker 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(); + } } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/AdminConsoleResources.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/AdminConsoleResources.java index cbe7192f037..4fbef832286 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/AdminConsoleResources.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/AdminConsoleResources.java @@ -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(); } \ No newline at end of file diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/PositionEntryDialog.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/PositionEntryDialog.java new file mode 100644 index 00000000000..02a2d51da2e --- /dev/null +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/PositionEntryDialog.java @@ -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 { + 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 callback) { + super(title, title, stringMessages.save(), stringMessages.cancel(), + new Validator() { + @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; + } + +} diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/RaceLogTrackingCompetitorRegistrationsDialog.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/RaceLogTrackingCompetitorRegistrationsDialog.java index ae4637ddbc7..6bb3073da90 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/RaceLogTrackingCompetitorRegistrationsDialog.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/RaceLogTrackingCompetitorRegistrationsDialog.java @@ -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, Throwable>() { diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/RaceLogTrackingCourseDefinitionDialog.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/RaceLogTrackingCourseDefinitionDialog.java index 693f6b874fa..d2fb11137c7 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/RaceLogTrackingCourseDefinitionDialog.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/RaceLogTrackingCourseDefinitionDialog.java @@ -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 actionColumn = + new ImagesBarColumn( + new RaceLogTrackingCourseDefinitionDialogMarksImagesBarCell(stringMessages)); + actionColumn.setFieldUpdater(new FieldUpdater() { + @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() { + + @Override + public void ok(PositionDTO position) { + sailingService.pingMarkViaRaceLogTracking(leaderboardName, raceColumnName, fleetName, + markDTO, position, new AsyncCallback() { + + @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 diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/RaceLogTrackingCourseDefinitionDialogMarksImagesBarCell.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/RaceLogTrackingCourseDefinitionDialogMarksImagesBarCell.java new file mode 100644 index 00000000000..a33ffe1c9f9 --- /dev/null +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/RaceLogTrackingCourseDefinitionDialogMarksImagesBarCell.java @@ -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 getImageSpecs() { + ArrayList result = new ArrayList(); + result.add(new ImageSpec(ACTION_PING, stringMessages.pingPosition(stringMessages.mark()), makeImagePrototype(resources.ping()))); + + return result; + } +} \ No newline at end of file diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/RaceLogTrackingDialog.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/RaceLogTrackingDialog.java index 888986c404e..74ea665c0c3 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/RaceLogTrackingDialog.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/RaceLogTrackingDialog.java @@ -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); diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/SailingService.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/SailingService.java index 901073e6b66..b10d919f11f 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/SailingService.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/SailingService.java @@ -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> 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); } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/SailingServiceAsync.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/SailingServiceAsync.java index 6c00268b5c1..4ec348bf61e 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/SailingServiceAsync.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/SailingServiceAsync.java @@ -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 callback); + + void pingMarkViaRaceLogTracking(String leaderboardName, String raceColumnName, String fleetName, MarkDTO mark, + PositionDTO position, AsyncCallback callback); } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages.java index ad9ddef661b..dc5f1c49964 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages.java @@ -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); } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages.properties b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages.properties index 25bfe066370..b6be11482e4 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages.properties +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages.properties @@ -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} \ No newline at end of file +pleaseEnterA=Please enter a {0} +pingPosition=Ping {0} position +pleaseEnterAValidValueFor=Please enter a valid value for {0} ({1}) \ No newline at end of file diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages_de.properties b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages_de.properties index a5d45c3ce31..fabf95a4268 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages_de.properties +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages_de.properties @@ -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. \ No newline at end of file +pleaseEnterA=Bitte {0} eingeben. +pingPosition={0}-Position pingen +pleaseEnterAValidValueFor=Bitte geben Sie für {0} einen gültigen Wert ein ({1}) \ No newline at end of file diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/SailingServiceImpl.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/SailingServiceImpl.java index 465abdcaba2..858623aacb0 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/SailingServiceImpl.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/SailingServiceImpl.java @@ -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 convertToMarkDTOs(Iterable marks) { + /** + * Also finds the last position of the marks, if set by pinging them + */ + private Collection convertToMarkDTOs(RaceLog raceLog, Iterable marks) { List dtos = new ArrayList(); for (Mark mark : marks) { - dtos.add(convertToMarkDTO(mark, null)); + DynamicGPSFixTrackImpl track = new DynamicGPSFixTrackImpl(mark, 0); + DeviceMappingEvent lastPingMappingEvent = new LastPingMappingEventFinder(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 getMarksInRaceLog(String leaderboardName, String raceColumnName, String fleetName) { RaceLog raceLog = getRaceLog(leaderboardName, raceColumnName, fleetName); Collection 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); + } } \ No newline at end of file diff --git a/java/com.sap.sailing.gwt.ui/src/main/resources/com/sap/sailing/gwt/ui/client/images/ping.png b/java/com.sap.sailing.gwt.ui/src/main/resources/com/sap/sailing/gwt/ui/client/images/ping.png new file mode 100644 index 0000000000000000000000000000000000000000..e8860cdc014bf85c2aaaa8d6fd95349bf6fc6c1f GIT binary patch literal 690 zcmV;j0!{siP)IRmDUK^%|htIlm>NECTl@jVysIy5y6dd7lmTgXc0xhXlWLT+D!%#eB?oc z7NO%p;$xH45@;w%8e3c>!?>AAXH0rF_i^s|?>YZ}j*A^kQ4|UI3hV>=RaI^EdMC28 z8Nep+$K3Zcm$iBH_yM(g4S;;MkN{+0zv*rO+UVFw6hM+BE?>Ih%%HK+um{TKwPvm| zAm_6M*$(6YFbo4*um)(U)O-|RVq($(ynFc?cg_mV5)?&A01-fo#jXbJbyllYyk0Ny z`1Onl@-#kmEShMrwHS?6h+Aa2Z42f zRBAq0EEWMMuax+`y2{9KfTh_0k$a0wM&cRZ0MG)qg#Q)Mb)CK=eKa?lwA(sU=P$4{ z8z6iuPwC@amy7~%(oD+$#AQ+tj{qt1x}@2D!{)#xCP&&ztD`wWAnrpIt_6 zaQJxe!}1!LR}Z^d+0i)fn&UEVr$T_%YPE5TM)xeF)9ENcC={}OblC%w$z)WLBxdg? z_*?zqY^0gn)9AWxbtL(0K?Jg> 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 properties = new Hashtable(); + 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(); } }