From f8f2ada89c866cea0600822f3adcd5d1769a2a70 Mon Sep 17 00:00:00 2001 From: Frederik Petersen Date: Thu, 23 Apr 2015 10:58:54 +0200 Subject: [PATCH] PolarDataService now uses OSGi service registry preparation for being able to use polar data service in domain classes --- .../data/HasLeaderboardContext.java | 2 +- .../data/HasLeaderboardGroupContext.java | 2 +- .../LeaderboardGroupRetrievalProcessor.java | 2 +- .../data/LeaderboardGroupWithContext.java | 2 +- .../impl/data/LeaderboardWithContext.java | 2 +- .../RaceResultOfCompetitorWithContext.java | 2 +- .../META-INF/MANIFEST.MF | 4 ++- .../polars/NoPolarDataAvailableException.java | 2 +- .../NotEnoughDataHasBeenAddedException.java | 2 +- .../domain}/polars/PolarDataService.java | 4 +-- .../domain/tracking/impl/TrackedRaceImpl.java | 2 ++ java/com.sap.sailing.feature/feature.xml | 7 ++++ .../META-INF/MANIFEST.MF | 5 +-- .../gwt/ui/server/SailingServiceImpl.java | 4 +-- .../META-INF/MANIFEST.MF | 3 +- .../mining/test/PolarDataMinerTest.java | 2 +- .../test/IncrementalLeastSquaresTest.java | 2 +- ...crementalLinearRegressionOrderOneTest.java | 2 +- ...EstimationFromManeuversOnAFew505Races.java | 7 ++-- .../META-INF/MANIFEST.MF | 6 ++-- .../factory/PolarDataServiceFactory.java | 17 --------- .../impl/PolarDataServiceImplFactory.java | 16 --------- .../sap/sailing/polars/impl/Activator.java | 34 ++++++++++++++++++ .../polars/impl/PolarDataServiceImpl.java | 6 ++-- .../mining/AngleAndSpeedRegression.java | 2 +- .../CubicRegressionPerCourseProcessor.java | 2 +- .../polars/mining/MovingAverageProcessor.java | 2 +- .../mining/MovingAverageProcessorImpl.java | 2 +- .../sailing/polars/mining/PolarDataMiner.java | 2 +- ...eedRegressionPerAngleClusterProcessor.java | 2 +- .../regression/IncrementalLeastSquares.java | 2 ++ .../MovingAverageBoatSpeedEstimator.java | 1 + .../IncrementalAnyOrderLeastSquaresImpl.java | 2 +- .../ManeuverBasedWindEstimationTrackImpl.java | 4 +-- ...onToHasConfidenceAndIsScalableAdapter.java | 2 +- .../META-INF/MANIFEST.MF | 8 ++--- .../gateway/jaxrs/api/PolarResource.java | 4 +-- .../META-INF/MANIFEST.MF | 5 +-- .../sailing/server/RacingEventService.java | 2 +- .../sap/sailing/server/impl/Activator.java | 36 +++++++++++++++++++ .../server/impl/RacingEventServiceImpl.java | 33 +++++++++-------- .../simulator/impl/PolarDiagramGPS.java | 4 +-- .../simulator/impl/PolarDiagramGPSDirect.java | 4 +-- 43 files changed, 150 insertions(+), 106 deletions(-) rename java/{com.sap.sailing.polars/src/com/sap/sailing => com.sap.sailing.domain/src/com/sap/sailing/domain}/polars/NoPolarDataAvailableException.java (96%) rename java/{com.sap.sailing.polars/src/com/sap/sailing/polars/regression => com.sap.sailing.domain/src/com/sap/sailing/domain/polars}/NotEnoughDataHasBeenAddedException.java (92%) rename java/{com.sap.sailing.polars/src/com/sap/sailing => com.sap.sailing.domain/src/com/sap/sailing/domain}/polars/PolarDataService.java (98%) mode change 100755 => 100644 delete mode 100644 java/com.sap.sailing.polars/src/com/sap/sailing/polars/factory/PolarDataServiceFactory.java delete mode 100644 java/com.sap.sailing.polars/src/com/sap/sailing/polars/factory/impl/PolarDataServiceImplFactory.java create mode 100644 java/com.sap.sailing.polars/src/com/sap/sailing/polars/impl/Activator.java diff --git a/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/data/HasLeaderboardContext.java b/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/data/HasLeaderboardContext.java index 20c90e1e87e..bed837c4156 100644 --- a/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/data/HasLeaderboardContext.java +++ b/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/data/HasLeaderboardContext.java @@ -1,7 +1,7 @@ package com.sap.sailing.datamining.data; import com.sap.sailing.domain.leaderboard.Leaderboard; -import com.sap.sailing.polars.PolarDataService; +import com.sap.sailing.domain.polars.PolarDataService; public interface HasLeaderboardContext { diff --git a/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/data/HasLeaderboardGroupContext.java b/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/data/HasLeaderboardGroupContext.java index eeed74ce12a..e8fff6c3914 100644 --- a/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/data/HasLeaderboardGroupContext.java +++ b/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/data/HasLeaderboardGroupContext.java @@ -1,7 +1,7 @@ package com.sap.sailing.datamining.data; import com.sap.sailing.domain.leaderboard.LeaderboardGroup; -import com.sap.sailing.polars.PolarDataService; +import com.sap.sailing.domain.polars.PolarDataService; public interface HasLeaderboardGroupContext { diff --git a/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/impl/components/LeaderboardGroupRetrievalProcessor.java b/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/impl/components/LeaderboardGroupRetrievalProcessor.java index deb4030e573..68041de5664 100644 --- a/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/impl/components/LeaderboardGroupRetrievalProcessor.java +++ b/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/impl/components/LeaderboardGroupRetrievalProcessor.java @@ -5,7 +5,7 @@ import java.util.concurrent.ExecutorService; import java.util.stream.Collectors; import com.sap.sailing.datamining.impl.data.LeaderboardGroupWithContext; -import com.sap.sailing.polars.PolarDataService; +import com.sap.sailing.domain.polars.PolarDataService; import com.sap.sailing.server.RacingEventService; import com.sap.sse.datamining.components.Processor; import com.sap.sse.datamining.impl.components.AbstractSimpleRetrievalProcessor; diff --git a/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/impl/data/LeaderboardGroupWithContext.java b/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/impl/data/LeaderboardGroupWithContext.java index 38bfe4c5e42..621aba4f6e4 100644 --- a/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/impl/data/LeaderboardGroupWithContext.java +++ b/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/impl/data/LeaderboardGroupWithContext.java @@ -2,7 +2,7 @@ package com.sap.sailing.datamining.impl.data; import com.sap.sailing.datamining.data.HasLeaderboardGroupContext; import com.sap.sailing.domain.leaderboard.LeaderboardGroup; -import com.sap.sailing.polars.PolarDataService; +import com.sap.sailing.domain.polars.PolarDataService; public class LeaderboardGroupWithContext implements HasLeaderboardGroupContext { diff --git a/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/impl/data/LeaderboardWithContext.java b/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/impl/data/LeaderboardWithContext.java index 6e13878cecb..9f2ced4e8af 100644 --- a/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/impl/data/LeaderboardWithContext.java +++ b/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/impl/data/LeaderboardWithContext.java @@ -2,7 +2,7 @@ package com.sap.sailing.datamining.impl.data; import com.sap.sailing.datamining.data.HasLeaderboardContext; import com.sap.sailing.domain.leaderboard.Leaderboard; -import com.sap.sailing.polars.PolarDataService; +import com.sap.sailing.domain.polars.PolarDataService; public class LeaderboardWithContext implements HasLeaderboardContext { diff --git a/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/impl/data/RaceResultOfCompetitorWithContext.java b/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/impl/data/RaceResultOfCompetitorWithContext.java index d9909e53939..135d227f00d 100644 --- a/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/impl/data/RaceResultOfCompetitorWithContext.java +++ b/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/impl/data/RaceResultOfCompetitorWithContext.java @@ -19,12 +19,12 @@ import com.sap.sailing.domain.common.SpeedWithBearing; import com.sap.sailing.domain.common.Tack; import com.sap.sailing.domain.common.scalablevalue.impl.ScalableSpeed; import com.sap.sailing.domain.leaderboard.Leaderboard; +import com.sap.sailing.domain.polars.PolarDataService; import com.sap.sailing.domain.tracking.GPSFixMoving; import com.sap.sailing.domain.tracking.GPSFixTrack; import com.sap.sailing.domain.tracking.TrackedLegOfCompetitor; import com.sap.sailing.domain.tracking.TrackedRace; import com.sap.sailing.domain.tracking.WindWithConfidence; -import com.sap.sailing.polars.PolarDataService; import com.sap.sse.common.Duration; import com.sap.sse.common.TimePoint; import com.sap.sse.common.Util; diff --git a/java/com.sap.sailing.domain/META-INF/MANIFEST.MF b/java/com.sap.sailing.domain/META-INF/MANIFEST.MF index abcdb4207e4..a3c31e2a903 100755 --- a/java/com.sap.sailing.domain/META-INF/MANIFEST.MF +++ b/java/com.sap.sailing.domain/META-INF/MANIFEST.MF @@ -17,6 +17,7 @@ Export-Package: com.sap.sailing.domain.base, com.sap.sailing.domain.markpassingcalculation.impl, com.sap.sailing.domain.markpassingcalculation.splining, com.sap.sailing.domain.masterdataimport, + com.sap.sailing.domain.polars, com.sap.sailing.domain.racelog, com.sap.sailing.domain.racelog.impl, com.sap.sailing.domain.racelog.tracking, @@ -38,4 +39,5 @@ Require-Bundle: com.googlecode.java-diff-utils;bundle-version="1.3.0", com.sap.sse.datamining.shared, com.sap.sse.common, com.sap.sse, - com.sap.sse.shared.android + com.sap.sse.shared.android, + org.apache.commons.math diff --git a/java/com.sap.sailing.polars/src/com/sap/sailing/polars/NoPolarDataAvailableException.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/polars/NoPolarDataAvailableException.java similarity index 96% rename from java/com.sap.sailing.polars/src/com/sap/sailing/polars/NoPolarDataAvailableException.java rename to java/com.sap.sailing.domain/src/com/sap/sailing/domain/polars/NoPolarDataAvailableException.java index dcefa34b9af..f8787e8abe0 100644 --- a/java/com.sap.sailing.polars/src/com/sap/sailing/polars/NoPolarDataAvailableException.java +++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/polars/NoPolarDataAvailableException.java @@ -1,4 +1,4 @@ -package com.sap.sailing.polars; +package com.sap.sailing.domain.polars; import com.sap.sailing.domain.base.BoatClass; import com.sap.sailing.domain.common.Bearing; diff --git a/java/com.sap.sailing.polars/src/com/sap/sailing/polars/regression/NotEnoughDataHasBeenAddedException.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/polars/NotEnoughDataHasBeenAddedException.java similarity index 92% rename from java/com.sap.sailing.polars/src/com/sap/sailing/polars/regression/NotEnoughDataHasBeenAddedException.java rename to java/com.sap.sailing.domain/src/com/sap/sailing/domain/polars/NotEnoughDataHasBeenAddedException.java index 6b8c54683b8..9376fc53d80 100644 --- a/java/com.sap.sailing.polars/src/com/sap/sailing/polars/regression/NotEnoughDataHasBeenAddedException.java +++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/polars/NotEnoughDataHasBeenAddedException.java @@ -1,4 +1,4 @@ -package com.sap.sailing.polars.regression; +package com.sap.sailing.domain.polars; public class NotEnoughDataHasBeenAddedException extends Exception { diff --git a/java/com.sap.sailing.polars/src/com/sap/sailing/polars/PolarDataService.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/polars/PolarDataService.java old mode 100755 new mode 100644 similarity index 98% rename from java/com.sap.sailing.polars/src/com/sap/sailing/polars/PolarDataService.java rename to java/com.sap.sailing.domain/src/com/sap/sailing/domain/polars/PolarDataService.java index fa7025e945d..32918deb813 --- a/java/com.sap.sailing.polars/src/com/sap/sailing/polars/PolarDataService.java +++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/polars/PolarDataService.java @@ -1,4 +1,4 @@ -package com.sap.sailing.polars; +package com.sap.sailing.domain.polars; import java.util.Set; import java.util.concurrent.ExecutionException; @@ -20,8 +20,6 @@ import com.sap.sailing.domain.common.Tack; import com.sap.sailing.domain.common.confidence.BearingWithConfidence; import com.sap.sailing.domain.tracking.GPSFixMoving; import com.sap.sailing.domain.tracking.TrackedRace; -import com.sap.sailing.polars.mining.MovingAverageProcessor; -import com.sap.sailing.polars.regression.NotEnoughDataHasBeenAddedException; import com.sap.sse.common.Util.Pair; /** diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/TrackedRaceImpl.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/TrackedRaceImpl.java index cf95c0b9ca2..36b276c8ce3 100755 --- a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/TrackedRaceImpl.java +++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/TrackedRaceImpl.java @@ -2711,10 +2711,12 @@ public abstract class TrackedRaceImpl extends TrackedRaceWithWindEssentials impl * Fetches the boat class-specific parameter */ private double getManeuverDegreeAngleThreshold() { + //FIXME use polar service return getRace().getBoatClass().getManeuverDegreeAngleThreshold(); } private double getMinimumAngleBetweenDifferentTacksDownwind() { + //FIXME use polar service return getRace().getBoatClass().getMinimumAngleBetweenDifferentTacksDownwind(); } diff --git a/java/com.sap.sailing.feature/feature.xml b/java/com.sap.sailing.feature/feature.xml index 2aad440fdba..18033f4cc45 100755 --- a/java/com.sap.sailing.feature/feature.xml +++ b/java/com.sap.sailing.feature/feature.xml @@ -444,4 +444,11 @@ Computes leaderboard information for sailing races and offers RESTful APIs to al version="0.0.0" unpack="false"/> + + diff --git a/java/com.sap.sailing.gwt.ui/META-INF/MANIFEST.MF b/java/com.sap.sailing.gwt.ui/META-INF/MANIFEST.MF index 26eb1466b06..f69f8a0c7d1 100644 --- a/java/com.sap.sailing.gwt.ui/META-INF/MANIFEST.MF +++ b/java/com.sap.sailing.gwt.ui/META-INF/MANIFEST.MF @@ -49,10 +49,7 @@ Require-Bundle: com.sap.sailing.domain, org.apache.shiro.core;bundle-version="1.2.2" Bundle-Activator: com.sap.sailing.gwt.ui.server.Activator Bundle-ActivationPolicy: lazy -Import-Package: com.sap.sailing.polars, - com.sap.sailing.polars.factory, - com.sap.sailing.polars.regression, - javax.jms;version="1.1.0", +Import-Package: javax.jms;version="1.1.0", javax.servlet;version="3.1.0", javax.servlet.descriptor;version="3.1.0", javax.servlet.http;version="3.1.0", 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 ab78ba29b86..5f9bd354bdc 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 @@ -216,6 +216,8 @@ import com.sap.sailing.domain.persistence.DomainObjectFactory; import com.sap.sailing.domain.persistence.MongoObjectFactory; import com.sap.sailing.domain.persistence.MongoRaceLogStoreFactory; import com.sap.sailing.domain.persistence.MongoRegattaLogStoreFactory; +import com.sap.sailing.domain.polars.NotEnoughDataHasBeenAddedException; +import com.sap.sailing.domain.polars.PolarDataService; import com.sap.sailing.domain.racelog.RaceLogStore; import com.sap.sailing.domain.racelog.RaceStateOfSameDayHelper; import com.sap.sailing.domain.racelogtracking.DeviceIdentifier; @@ -341,8 +343,6 @@ import com.sap.sailing.manage2sail.EventResultDescriptor; import com.sap.sailing.manage2sail.Manage2SailEventResultsParserImpl; import com.sap.sailing.manage2sail.RaceResultDescriptor; import com.sap.sailing.manage2sail.RegattaResultDescriptor; -import com.sap.sailing.polars.PolarDataService; -import com.sap.sailing.polars.regression.NotEnoughDataHasBeenAddedException; import com.sap.sailing.resultimport.ResultUrlProvider; import com.sap.sailing.resultimport.ResultUrlRegistry; import com.sap.sailing.server.RacingEventService; diff --git a/java/com.sap.sailing.polars.test/META-INF/MANIFEST.MF b/java/com.sap.sailing.polars.test/META-INF/MANIFEST.MF index d997f50d628..1f6101ef376 100644 --- a/java/com.sap.sailing.polars.test/META-INF/MANIFEST.MF +++ b/java/com.sap.sailing.polars.test/META-INF/MANIFEST.MF @@ -13,4 +13,5 @@ Require-Bundle: org.hamcrest;bundle-version="1.1.0", com.sap.sailing.domain.test, com.sap.sse.common, com.sap.sailing.domain.tractracadapter, - com.tractrac.clientmodule;bundle-version="3.0.7" + com.tractrac.clientmodule;bundle-version="3.0.7", + com.sap.sailing.domain diff --git a/java/com.sap.sailing.polars.test/src/com/sap/sailing/polars/mining/test/PolarDataMinerTest.java b/java/com.sap.sailing.polars.test/src/com/sap/sailing/polars/mining/test/PolarDataMinerTest.java index c8acd31d067..552358dbfcf 100644 --- a/java/com.sap.sailing.polars.test/src/com/sap/sailing/polars/mining/test/PolarDataMinerTest.java +++ b/java/com.sap.sailing.polars.test/src/com/sap/sailing/polars/mining/test/PolarDataMinerTest.java @@ -39,6 +39,7 @@ import com.sap.sailing.domain.common.impl.KnotSpeedImpl; import com.sap.sailing.domain.common.impl.KnotSpeedWithBearingImpl; import com.sap.sailing.domain.common.impl.PolarSheetGenerationSettingsImpl; import com.sap.sailing.domain.common.impl.WindSpeedSteppingWithMaxDistance; +import com.sap.sailing.domain.polars.NotEnoughDataHasBeenAddedException; import com.sap.sailing.domain.tracking.DynamicGPSFixTrack; import com.sap.sailing.domain.tracking.GPSFixMoving; import com.sap.sailing.domain.tracking.MarkPassing; @@ -49,7 +50,6 @@ import com.sap.sailing.domain.tracking.impl.DynamicGPSFixMovingTrackImpl; import com.sap.sailing.domain.tracking.impl.WindImpl; import com.sap.sailing.domain.tracking.impl.WindWithConfidenceImpl; import com.sap.sailing.polars.mining.PolarDataMiner; -import com.sap.sailing.polars.regression.NotEnoughDataHasBeenAddedException; import com.sap.sse.common.TimePoint; import com.sap.sse.common.Util.Pair; import com.sap.sse.common.impl.MillisecondsTimePoint; diff --git a/java/com.sap.sailing.polars.test/src/com/sap/sailing/polars/regression/test/IncrementalLeastSquaresTest.java b/java/com.sap.sailing.polars.test/src/com/sap/sailing/polars/regression/test/IncrementalLeastSquaresTest.java index 55e87027925..642d5b39169 100644 --- a/java/com.sap.sailing.polars.test/src/com/sap/sailing/polars/regression/test/IncrementalLeastSquaresTest.java +++ b/java/com.sap.sailing.polars.test/src/com/sap/sailing/polars/regression/test/IncrementalLeastSquaresTest.java @@ -12,8 +12,8 @@ import java.util.Random; import org.junit.Test; +import com.sap.sailing.domain.polars.NotEnoughDataHasBeenAddedException; import com.sap.sailing.polars.regression.IncrementalLeastSquares; -import com.sap.sailing.polars.regression.NotEnoughDataHasBeenAddedException; import com.sap.sailing.polars.regression.impl.IncrementalAnyOrderLeastSquaresImpl; public class IncrementalLeastSquaresTest { diff --git a/java/com.sap.sailing.polars.test/src/com/sap/sailing/polars/regression/test/IncrementalLinearRegressionOrderOneTest.java b/java/com.sap.sailing.polars.test/src/com/sap/sailing/polars/regression/test/IncrementalLinearRegressionOrderOneTest.java index b8bf40b0297..68d54cd72d4 100644 --- a/java/com.sap.sailing.polars.test/src/com/sap/sailing/polars/regression/test/IncrementalLinearRegressionOrderOneTest.java +++ b/java/com.sap.sailing.polars.test/src/com/sap/sailing/polars/regression/test/IncrementalLinearRegressionOrderOneTest.java @@ -7,8 +7,8 @@ import static org.junit.Assert.assertTrue; import org.hamcrest.number.IsCloseTo; import org.junit.Test; +import com.sap.sailing.domain.polars.NotEnoughDataHasBeenAddedException; import com.sap.sailing.polars.regression.IncrementalLeastSquares; -import com.sap.sailing.polars.regression.NotEnoughDataHasBeenAddedException; import com.sap.sailing.polars.regression.impl.IncrementalAnyOrderLeastSquaresImpl; public class IncrementalLinearRegressionOrderOneTest { diff --git a/java/com.sap.sailing.polars.test/src/com/sap/sailing/polars/windestimation/TestWindEstimationFromManeuversOnAFew505Races.java b/java/com.sap.sailing.polars.test/src/com/sap/sailing/polars/windestimation/TestWindEstimationFromManeuversOnAFew505Races.java index c6f98ebc045..e45d838ba02 100755 --- a/java/com.sap.sailing.polars.test/src/com/sap/sailing/polars/windestimation/TestWindEstimationFromManeuversOnAFew505Races.java +++ b/java/com.sap.sailing.polars.test/src/com/sap/sailing/polars/windestimation/TestWindEstimationFromManeuversOnAFew505Races.java @@ -12,7 +12,6 @@ import java.text.ParseException; import java.util.List; import java.util.Map; import java.util.Set; -import java.util.concurrent.Executors; import java.util.stream.Collectors; import java.util.stream.IntStream; import java.util.stream.Stream; @@ -25,13 +24,13 @@ import com.sap.sailing.domain.common.ManeuverType; import com.sap.sailing.domain.common.confidence.impl.ScalableDouble; import com.sap.sailing.domain.common.impl.DegreeBearingImpl; import com.sap.sailing.domain.common.scalablevalue.impl.ScalableBearing; +import com.sap.sailing.domain.polars.NotEnoughDataHasBeenAddedException; import com.sap.sailing.domain.test.OnlineTracTracBasedTest; import com.sap.sailing.domain.tracking.Maneuver; import com.sap.sailing.domain.tracking.Wind; import com.sap.sailing.domain.tracking.impl.ScalableWind; import com.sap.sailing.domain.tractracadapter.ReceiverType; import com.sap.sailing.polars.impl.PolarDataServiceImpl; -import com.sap.sailing.polars.regression.NotEnoughDataHasBeenAddedException; import com.sap.sailing.polars.windestimation.ManeuverBasedWindEstimationTrackImpl.ManeuverClassification; import com.sap.sse.common.Util.Pair; import com.sap.sse.util.kmeans.Cluster; @@ -117,7 +116,7 @@ public class TestWindEstimationFromManeuversOnAFew505Races extends OnlineTracTra IOException, InterruptedException, URISyntaxException, ParseException, SubscriberInitializationException, CreateModelException { setUp("event_20110609_KielerWoch-505_Race_3"); - ManeuverBasedWindEstimationTrackImpl windTrack = new ManeuverBasedWindEstimationTrackImpl(new PolarDataServiceImpl(Executors.newFixedThreadPool(4)), + ManeuverBasedWindEstimationTrackImpl windTrack = new ManeuverBasedWindEstimationTrackImpl(new PolarDataServiceImpl(), getTrackedRace(), /* millisecondsOverWhichToAverage */ 30000, /* waitForLatest */ true); final Map maneuvers = windTrack.getAllManeuvers(/* waitForLatest */ true); final int numberOfClusters = 16; @@ -153,7 +152,7 @@ public class TestWindEstimationFromManeuversOnAFew505Races extends OnlineTracTra } private Wind getManeuverBasedAverageWind() throws NotEnoughDataHasBeenAddedException { - ManeuverBasedWindEstimationTrackImpl windTrack = new ManeuverBasedWindEstimationTrackImpl(new PolarDataServiceImpl(Executors.newFixedThreadPool(4)), + ManeuverBasedWindEstimationTrackImpl windTrack = new ManeuverBasedWindEstimationTrackImpl(new PolarDataServiceImpl(), getTrackedRace(), /* millisecondsOverWhichToAverage */ 30000, /* waitForLatest */ true); ScalableWind windSum = null; int count = 0; diff --git a/java/com.sap.sailing.polars/META-INF/MANIFEST.MF b/java/com.sap.sailing.polars/META-INF/MANIFEST.MF index 74883dc9799..91c279f8ec5 100644 --- a/java/com.sap.sailing.polars/META-INF/MANIFEST.MF +++ b/java/com.sap.sailing.polars/META-INF/MANIFEST.MF @@ -7,9 +7,7 @@ Bundle-Vendor: SAP Bundle-RequiredExecutionEnvironment: JavaSE-1.8 Bundle-ClassPath: . Export-Package: - com.sap.sailing.polars, com.sap.sailing.polars.data, - com.sap.sailing.polars.factory, com.sap.sailing.polars.regression, com.sap.sailing.polars.windestimation Bundle-ActivationPolicy: lazy @@ -21,7 +19,9 @@ Require-Bundle: com.sap.sse.common, com.sap.sse, com.sap.sse.shared.android, - org.apache.commons.math;bundle-version="2.1.0" + org.apache.commons.math;bundle-version="2.1.0", + org.eclipse.osgi Import-Package: com.sap.sailing.util, com.sap.sse.common +Bundle-Activator: com.sap.sailing.polars.impl.Activator diff --git a/java/com.sap.sailing.polars/src/com/sap/sailing/polars/factory/PolarDataServiceFactory.java b/java/com.sap.sailing.polars/src/com/sap/sailing/polars/factory/PolarDataServiceFactory.java deleted file mode 100644 index 9729c48587b..00000000000 --- a/java/com.sap.sailing.polars/src/com/sap/sailing/polars/factory/PolarDataServiceFactory.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.sap.sailing.polars.factory; - -import java.util.concurrent.Executor; - -import com.sap.sailing.polars.PolarDataService; -import com.sap.sailing.polars.factory.impl.PolarDataServiceImplFactory; - -public abstract class PolarDataServiceFactory { - - public static PolarDataService createStandardPolarDataService(Executor executor) { - PolarDataServiceFactory factory = new PolarDataServiceImplFactory(); - return factory.createPolarDataService(executor); - } - - protected abstract PolarDataService createPolarDataService(Executor executor); - -} diff --git a/java/com.sap.sailing.polars/src/com/sap/sailing/polars/factory/impl/PolarDataServiceImplFactory.java b/java/com.sap.sailing.polars/src/com/sap/sailing/polars/factory/impl/PolarDataServiceImplFactory.java deleted file mode 100644 index 37af01d8343..00000000000 --- a/java/com.sap.sailing.polars/src/com/sap/sailing/polars/factory/impl/PolarDataServiceImplFactory.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.sap.sailing.polars.factory.impl; - -import java.util.concurrent.Executor; - -import com.sap.sailing.polars.PolarDataService; -import com.sap.sailing.polars.factory.PolarDataServiceFactory; -import com.sap.sailing.polars.impl.PolarDataServiceImpl; - -public class PolarDataServiceImplFactory extends PolarDataServiceFactory { - - @Override - public PolarDataService createPolarDataService(Executor executor) { - return new PolarDataServiceImpl(executor); - } - -} diff --git a/java/com.sap.sailing.polars/src/com/sap/sailing/polars/impl/Activator.java b/java/com.sap.sailing.polars/src/com/sap/sailing/polars/impl/Activator.java new file mode 100644 index 00000000000..888e7d0844d --- /dev/null +++ b/java/com.sap.sailing.polars/src/com/sap/sailing/polars/impl/Activator.java @@ -0,0 +1,34 @@ +package com.sap.sailing.polars.impl; + +import java.util.HashSet; +import java.util.Set; +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.polars.PolarDataService; + +public class Activator implements BundleActivator { + + private static final Logger logger = Logger.getLogger(Activator.class.getName()); + + private final Set> registrations = new HashSet<>(); + + @Override + public void start(BundleContext context) throws Exception { + logger.info("Registering PolarDataService"); + registrations.add(context.registerService(PolarDataService.class, new PolarDataServiceImpl(), null)); + } + + @Override + public void stop(BundleContext context) throws Exception { + logger.info("Unregistering PolarDataService"); + for (ServiceRegistration reg : registrations) { + reg.unregister(); + } + registrations.clear(); + } + +} diff --git a/java/com.sap.sailing.polars/src/com/sap/sailing/polars/impl/PolarDataServiceImpl.java b/java/com.sap.sailing.polars/src/com/sap/sailing/polars/impl/PolarDataServiceImpl.java index 08115416ea5..79a68610ab8 100755 --- a/java/com.sap.sailing.polars/src/com/sap/sailing/polars/impl/PolarDataServiceImpl.java +++ b/java/com.sap.sailing.polars/src/com/sap/sailing/polars/impl/PolarDataServiceImpl.java @@ -20,15 +20,15 @@ import com.sap.sailing.domain.common.Tack; import com.sap.sailing.domain.common.confidence.BearingWithConfidence; import com.sap.sailing.domain.common.confidence.impl.BearingWithConfidenceImpl; import com.sap.sailing.domain.common.impl.DegreeBearingImpl; +import com.sap.sailing.domain.polars.NotEnoughDataHasBeenAddedException; +import com.sap.sailing.domain.polars.PolarDataService; import com.sap.sailing.domain.tracking.GPSFixMoving; import com.sap.sailing.domain.tracking.TrackedRace; -import com.sap.sailing.polars.PolarDataService; import com.sap.sailing.polars.aggregation.PolarFixAggregator; import com.sap.sailing.polars.aggregation.SimplePolarFixRaceInterval; import com.sap.sailing.polars.data.PolarFix; import com.sap.sailing.polars.generation.PolarSheetGenerator; import com.sap.sailing.polars.mining.PolarDataMiner; -import com.sap.sailing.polars.regression.NotEnoughDataHasBeenAddedException; import com.sap.sse.common.Util.Pair; import com.sap.sse.util.SmartFutureCache; @@ -44,7 +44,7 @@ public class PolarDataServiceImpl implements PolarDataService { private final PolarDataMiner polarDataMiner; - public PolarDataServiceImpl(Executor executor) { + public PolarDataServiceImpl() { this.polarDataMiner = new PolarDataMiner(); } diff --git a/java/com.sap.sailing.polars/src/com/sap/sailing/polars/mining/AngleAndSpeedRegression.java b/java/com.sap.sailing.polars/src/com/sap/sailing/polars/mining/AngleAndSpeedRegression.java index d894bb15da1..9c271caa707 100644 --- a/java/com.sap.sailing.polars/src/com/sap/sailing/polars/mining/AngleAndSpeedRegression.java +++ b/java/com.sap.sailing.polars/src/com/sap/sailing/polars/mining/AngleAndSpeedRegression.java @@ -14,10 +14,10 @@ import com.sap.sailing.domain.common.SpeedWithBearing; import com.sap.sailing.domain.common.confidence.BearingWithConfidence; import com.sap.sailing.domain.common.impl.DegreeBearingImpl; import com.sap.sailing.domain.common.impl.KnotSpeedWithBearingImpl; +import com.sap.sailing.domain.polars.NotEnoughDataHasBeenAddedException; import com.sap.sailing.domain.tracking.WindWithConfidence; import com.sap.sailing.polars.impl.CubicEquation; import com.sap.sailing.polars.regression.IncrementalLeastSquares; -import com.sap.sailing.polars.regression.NotEnoughDataHasBeenAddedException; import com.sap.sailing.polars.regression.impl.IncrementalAnyOrderLeastSquaresImpl; import com.sap.sse.common.TimePoint; import com.sap.sse.common.Util.Pair; diff --git a/java/com.sap.sailing.polars/src/com/sap/sailing/polars/mining/CubicRegressionPerCourseProcessor.java b/java/com.sap.sailing.polars/src/com/sap/sailing/polars/mining/CubicRegressionPerCourseProcessor.java index 42dfb171d4b..0f2f21f2b0f 100644 --- a/java/com.sap.sailing.polars/src/com/sap/sailing/polars/mining/CubicRegressionPerCourseProcessor.java +++ b/java/com.sap.sailing.polars/src/com/sap/sailing/polars/mining/CubicRegressionPerCourseProcessor.java @@ -13,7 +13,7 @@ import com.sap.sailing.domain.base.SpeedWithBearingWithConfidence; import com.sap.sailing.domain.common.LegType; import com.sap.sailing.domain.common.Speed; import com.sap.sailing.domain.common.Tack; -import com.sap.sailing.polars.regression.NotEnoughDataHasBeenAddedException; +import com.sap.sailing.domain.polars.NotEnoughDataHasBeenAddedException; import com.sap.sse.datamining.AdditionalResultDataBuilder; import com.sap.sse.datamining.components.Processor; import com.sap.sse.datamining.factories.GroupKeyFactory; diff --git a/java/com.sap.sailing.polars/src/com/sap/sailing/polars/mining/MovingAverageProcessor.java b/java/com.sap.sailing.polars/src/com/sap/sailing/polars/mining/MovingAverageProcessor.java index c4f704620fc..529f749f480 100755 --- a/java/com.sap.sailing.polars/src/com/sap/sailing/polars/mining/MovingAverageProcessor.java +++ b/java/com.sap.sailing.polars/src/com/sap/sailing/polars/mining/MovingAverageProcessor.java @@ -7,7 +7,7 @@ import com.sap.sailing.domain.base.SpeedWithBearingWithConfidence; import com.sap.sailing.domain.common.LegType; import com.sap.sailing.domain.common.Speed; import com.sap.sailing.domain.common.Tack; -import com.sap.sailing.polars.regression.NotEnoughDataHasBeenAddedException; +import com.sap.sailing.domain.polars.NotEnoughDataHasBeenAddedException; import com.sap.sse.datamining.components.Processor; import com.sap.sse.datamining.impl.components.GroupedDataEntry; diff --git a/java/com.sap.sailing.polars/src/com/sap/sailing/polars/mining/MovingAverageProcessorImpl.java b/java/com.sap.sailing.polars/src/com/sap/sailing/polars/mining/MovingAverageProcessorImpl.java index 61d24338d84..ecffe74a7f7 100755 --- a/java/com.sap.sailing.polars/src/com/sap/sailing/polars/mining/MovingAverageProcessorImpl.java +++ b/java/com.sap.sailing.polars/src/com/sap/sailing/polars/mining/MovingAverageProcessorImpl.java @@ -20,9 +20,9 @@ import com.sap.sailing.domain.common.Tack; import com.sap.sailing.domain.common.confidence.BearingWithConfidence; import com.sap.sailing.domain.common.impl.DegreeBearingImpl; import com.sap.sailing.domain.common.impl.KnotSpeedWithBearingImpl; +import com.sap.sailing.domain.polars.NotEnoughDataHasBeenAddedException; import com.sap.sailing.domain.tracking.WindWithConfidence; import com.sap.sailing.polars.regression.MovingAverageBoatSpeedEstimator; -import com.sap.sailing.polars.regression.NotEnoughDataHasBeenAddedException; import com.sap.sse.common.TimePoint; import com.sap.sse.common.Util.Pair; import com.sap.sse.datamining.AdditionalResultDataBuilder; diff --git a/java/com.sap.sailing.polars/src/com/sap/sailing/polars/mining/PolarDataMiner.java b/java/com.sap.sailing.polars/src/com/sap/sailing/polars/mining/PolarDataMiner.java index 1f08623e61d..843b6f63ba0 100755 --- a/java/com.sap.sailing.polars/src/com/sap/sailing/polars/mining/PolarDataMiner.java +++ b/java/com.sap.sailing.polars/src/com/sap/sailing/polars/mining/PolarDataMiner.java @@ -38,10 +38,10 @@ import com.sap.sailing.domain.common.impl.PolarSheetGenerationSettingsImpl; import com.sap.sailing.domain.common.impl.PolarSheetsDataImpl; import com.sap.sailing.domain.common.impl.PolarSheetsHistogramDataImpl; import com.sap.sailing.domain.common.impl.WindSpeedSteppingWithMaxDistance; +import com.sap.sailing.domain.polars.NotEnoughDataHasBeenAddedException; import com.sap.sailing.domain.tracking.GPSFixMoving; import com.sap.sailing.domain.tracking.TrackedRace; import com.sap.sailing.polars.impl.CubicEquation; -import com.sap.sailing.polars.regression.NotEnoughDataHasBeenAddedException; import com.sap.sse.common.Util.Pair; import com.sap.sse.datamining.components.FilterCriterion; import com.sap.sse.datamining.components.Processor; diff --git a/java/com.sap.sailing.polars/src/com/sap/sailing/polars/mining/SpeedRegressionPerAngleClusterProcessor.java b/java/com.sap.sailing.polars/src/com/sap/sailing/polars/mining/SpeedRegressionPerAngleClusterProcessor.java index 7c82f7bb282..3c1c95f5b09 100644 --- a/java/com.sap.sailing.polars/src/com/sap/sailing/polars/mining/SpeedRegressionPerAngleClusterProcessor.java +++ b/java/com.sap.sailing.polars/src/com/sap/sailing/polars/mining/SpeedRegressionPerAngleClusterProcessor.java @@ -13,8 +13,8 @@ import com.sap.sailing.domain.common.Bearing; import com.sap.sailing.domain.common.Speed; import com.sap.sailing.domain.common.impl.DegreeBearingImpl; import com.sap.sailing.domain.common.impl.KnotSpeedImpl; +import com.sap.sailing.domain.polars.NotEnoughDataHasBeenAddedException; import com.sap.sailing.polars.regression.IncrementalLeastSquares; -import com.sap.sailing.polars.regression.NotEnoughDataHasBeenAddedException; import com.sap.sailing.polars.regression.impl.IncrementalAnyOrderLeastSquaresImpl; import com.sap.sse.datamining.AdditionalResultDataBuilder; import com.sap.sse.datamining.components.Processor; diff --git a/java/com.sap.sailing.polars/src/com/sap/sailing/polars/regression/IncrementalLeastSquares.java b/java/com.sap.sailing.polars/src/com/sap/sailing/polars/regression/IncrementalLeastSquares.java index 57e3e4aca88..31262080ea1 100644 --- a/java/com.sap.sailing.polars/src/com/sap/sailing/polars/regression/IncrementalLeastSquares.java +++ b/java/com.sap.sailing.polars/src/com/sap/sailing/polars/regression/IncrementalLeastSquares.java @@ -2,6 +2,8 @@ package com.sap.sailing.polars.regression; import org.apache.commons.math.analysis.polynomials.PolynomialFunction; +import com.sap.sailing.domain.polars.NotEnoughDataHasBeenAddedException; + /** * Support incremental regression linear in one variable but potentially of higher order. * diff --git a/java/com.sap.sailing.polars/src/com/sap/sailing/polars/regression/MovingAverageBoatSpeedEstimator.java b/java/com.sap.sailing.polars/src/com/sap/sailing/polars/regression/MovingAverageBoatSpeedEstimator.java index e9dc394912e..e80d9982355 100644 --- a/java/com.sap.sailing.polars/src/com/sap/sailing/polars/regression/MovingAverageBoatSpeedEstimator.java +++ b/java/com.sap.sailing.polars/src/com/sap/sailing/polars/regression/MovingAverageBoatSpeedEstimator.java @@ -5,6 +5,7 @@ import java.io.Serializable; import com.sap.sailing.domain.common.Speed; import com.sap.sailing.domain.common.impl.KnotSpeedImpl; +import com.sap.sailing.domain.polars.NotEnoughDataHasBeenAddedException; import com.sap.sailing.polars.mining.MovingAverageProcessorImpl; import com.sap.sse.concurrent.LockUtil; import com.sap.sse.concurrent.NamedReentrantReadWriteLock; diff --git a/java/com.sap.sailing.polars/src/com/sap/sailing/polars/regression/impl/IncrementalAnyOrderLeastSquaresImpl.java b/java/com.sap.sailing.polars/src/com/sap/sailing/polars/regression/impl/IncrementalAnyOrderLeastSquaresImpl.java index 6bf8e1b1e5f..8df9a813a4c 100644 --- a/java/com.sap.sailing.polars/src/com/sap/sailing/polars/regression/impl/IncrementalAnyOrderLeastSquaresImpl.java +++ b/java/com.sap.sailing.polars/src/com/sap/sailing/polars/regression/impl/IncrementalAnyOrderLeastSquaresImpl.java @@ -12,8 +12,8 @@ import org.apache.commons.math.linear.RealMatrixPreservingVisitor; import org.apache.commons.math.linear.RealVector; import org.apache.commons.math.linear.SingularMatrixException; +import com.sap.sailing.domain.polars.NotEnoughDataHasBeenAddedException; import com.sap.sailing.polars.regression.IncrementalLeastSquares; -import com.sap.sailing.polars.regression.NotEnoughDataHasBeenAddedException; import com.sap.sse.concurrent.LockUtil; import com.sap.sse.concurrent.NamedReentrantReadWriteLock; diff --git a/java/com.sap.sailing.polars/src/com/sap/sailing/polars/windestimation/ManeuverBasedWindEstimationTrackImpl.java b/java/com.sap.sailing.polars/src/com/sap/sailing/polars/windestimation/ManeuverBasedWindEstimationTrackImpl.java index b59b86372dc..9b0a8d36c49 100755 --- a/java/com.sap.sailing.polars/src/com/sap/sailing/polars/windestimation/ManeuverBasedWindEstimationTrackImpl.java +++ b/java/com.sap.sailing.polars/src/com/sap/sailing/polars/windestimation/ManeuverBasedWindEstimationTrackImpl.java @@ -33,13 +33,13 @@ import com.sap.sailing.domain.common.impl.DegreeBearingImpl; import com.sap.sailing.domain.common.impl.KnotSpeedWithBearingImpl; import com.sap.sailing.domain.common.scalablevalue.impl.ScalableBearing; import com.sap.sailing.domain.common.scalablevalue.impl.ScalableSpeed; +import com.sap.sailing.domain.polars.NotEnoughDataHasBeenAddedException; +import com.sap.sailing.domain.polars.PolarDataService; import com.sap.sailing.domain.tracking.Maneuver; import com.sap.sailing.domain.tracking.TrackedRace; import com.sap.sailing.domain.tracking.Wind; import com.sap.sailing.domain.tracking.impl.WindImpl; import com.sap.sailing.domain.tracking.impl.WindTrackImpl; -import com.sap.sailing.polars.PolarDataService; -import com.sap.sailing.polars.regression.NotEnoughDataHasBeenAddedException; import com.sap.sse.common.TimePoint; import com.sap.sse.common.Util; import com.sap.sse.common.Util.Pair; diff --git a/java/com.sap.sailing.polars/src/com/sap/sailing/polars/windestimation/ManeuverClassificationToHasConfidenceAndIsScalableAdapter.java b/java/com.sap.sailing.polars/src/com/sap/sailing/polars/windestimation/ManeuverClassificationToHasConfidenceAndIsScalableAdapter.java index dd77bcdac4c..5aac1389ce2 100755 --- a/java/com.sap.sailing.polars/src/com/sap/sailing/polars/windestimation/ManeuverClassificationToHasConfidenceAndIsScalableAdapter.java +++ b/java/com.sap.sailing.polars/src/com/sap/sailing/polars/windestimation/ManeuverClassificationToHasConfidenceAndIsScalableAdapter.java @@ -5,7 +5,7 @@ import java.util.function.Function; import com.sap.sailing.domain.common.ManeuverType; import com.sap.sailing.domain.common.confidence.ConfidenceBasedAverager; import com.sap.sailing.domain.common.confidence.HasConfidenceAndIsScalable; -import com.sap.sailing.polars.PolarDataService; +import com.sap.sailing.domain.polars.PolarDataService; import com.sap.sailing.polars.windestimation.ManeuverBasedWindEstimationTrackImpl.ManeuverClassification; import com.sap.sse.common.scalablevalue.ScalableValue; diff --git a/java/com.sap.sailing.server.gateway/META-INF/MANIFEST.MF b/java/com.sap.sailing.server.gateway/META-INF/MANIFEST.MF index c82d63ebfd0..d1cc478fa01 100644 --- a/java/com.sap.sailing.server.gateway/META-INF/MANIFEST.MF +++ b/java/com.sap.sailing.server.gateway/META-INF/MANIFEST.MF @@ -5,10 +5,7 @@ Bundle-SymbolicName: com.sap.sailing.server.gateway Bundle-Version: 1.0.0.qualifier Bundle-Vendor: SAP Bundle-RequiredExecutionEnvironment: JavaSE-1.8 -Import-Package: com.sap.sailing.polars, - com.sap.sailing.polars.regression, - com.sap.sailing.polars.windestimation, - com.sap.sailing.server, +Import-Package: com.sap.sailing.server, com.sap.sailing.server.operationaltransformation, javax.ws.rs;version="1.1.1", javax.ws.rs.core;version="1.1.1", @@ -55,7 +52,8 @@ Require-Bundle: com.sap.sailing.domain, org.apache.shiro.core;bundle-version="1.2.2", org.apache.shiro.web;bundle-version="1.2.2", org.apache.shiro.ehcache;bundle-version="1.2.3", - org.jvnet.mimepull;bundle-version="1.9.4" + org.jvnet.mimepull;bundle-version="1.9.4", + com.sap.sailing.polars Bundle-ClassPath: . Web-ContextPath: /sailingserver Export-Package: com.sap.sailing.server.gateway, diff --git a/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/api/PolarResource.java b/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/api/PolarResource.java index 8eea3d21304..d31c351aae5 100644 --- a/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/api/PolarResource.java +++ b/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/api/PolarResource.java @@ -30,10 +30,10 @@ import com.sap.sailing.domain.common.confidence.impl.ScalableDouble; import com.sap.sailing.domain.common.impl.DegreeBearingImpl; import com.sap.sailing.domain.common.impl.KnotSpeedImpl; import com.sap.sailing.domain.common.scalablevalue.impl.ScalableBearing; +import com.sap.sailing.domain.polars.NotEnoughDataHasBeenAddedException; +import com.sap.sailing.domain.polars.PolarDataService; import com.sap.sailing.domain.tracking.TrackedRace; import com.sap.sailing.domain.tracking.Wind; -import com.sap.sailing.polars.PolarDataService; -import com.sap.sailing.polars.regression.NotEnoughDataHasBeenAddedException; import com.sap.sailing.polars.windestimation.ManeuverBasedWindEstimationTrackImpl; import com.sap.sailing.polars.windestimation.ManeuverBasedWindEstimationTrackImpl.ManeuverClassification; import com.sap.sailing.polars.windestimation.ScalableBearingAndScalableDouble; diff --git a/java/com.sap.sailing.server/META-INF/MANIFEST.MF b/java/com.sap.sailing.server/META-INF/MANIFEST.MF index 592e424d212..efb3e4f15cb 100644 --- a/java/com.sap.sailing.server/META-INF/MANIFEST.MF +++ b/java/com.sap.sailing.server/META-INF/MANIFEST.MF @@ -6,9 +6,7 @@ Bundle-Version: 1.0.0.qualifier Bundle-Activator: com.sap.sailing.server.impl.Activator Bundle-Vendor: SAP Bundle-RequiredExecutionEnvironment: JavaSE-1.8 -Import-Package: com.sap.sailing.polars, - com.sap.sailing.polars.factory, - com.sap.sailing.server.gateway.deserialization, +Import-Package: com.sap.sailing.server.gateway.deserialization, org.json.simple, org.json.simple.parser, org.osgi.framework;version="1.3.0", @@ -24,7 +22,6 @@ Require-Bundle: com.sap.sailing.domain, com.sap.sailing.udpconnector, com.sap.sailing.domain.shared.android, com.sap.sailing.server.gateway.serialization, - com.sap.sailing.polars, com.sap.sse.common, com.sap.sse.operationaltransformation, com.sap.sse.replication, diff --git a/java/com.sap.sailing.server/src/com/sap/sailing/server/RacingEventService.java b/java/com.sap.sailing.server/src/com/sap/sailing/server/RacingEventService.java index 6f2954ac987..29d9e35ed0f 100755 --- a/java/com.sap.sailing.server/src/com/sap/sailing/server/RacingEventService.java +++ b/java/com.sap.sailing.server/src/com/sap/sailing/server/RacingEventService.java @@ -55,6 +55,7 @@ import com.sap.sailing.domain.leaderboard.RegattaLeaderboard; import com.sap.sailing.domain.leaderboard.ScoringScheme; import com.sap.sailing.domain.persistence.DomainObjectFactory; import com.sap.sailing.domain.persistence.MongoObjectFactory; +import com.sap.sailing.domain.polars.PolarDataService; import com.sap.sailing.domain.racelog.tracking.GPSFixStore; import com.sap.sailing.domain.regattalike.LeaderboardThatHasRegattaLike; import com.sap.sailing.domain.tracking.DynamicTrackedRace; @@ -65,7 +66,6 @@ import com.sap.sailing.domain.tracking.TrackedRegatta; import com.sap.sailing.domain.tracking.TrackedRegattaRegistry; import com.sap.sailing.domain.tracking.TrackerManager; import com.sap.sailing.domain.tracking.WindStore; -import com.sap.sailing.polars.PolarDataService; import com.sap.sailing.server.masterdata.DataImportLockWithProgress; import com.sap.sse.common.TimePoint; import com.sap.sse.common.TypeBasedServiceFinderFactory; diff --git a/java/com.sap.sailing.server/src/com/sap/sailing/server/impl/Activator.java b/java/com.sap.sailing.server/src/com/sap/sailing/server/impl/Activator.java index 5d18db744de..a999d866a64 100755 --- a/java/com.sap.sailing.server/src/com/sap/sailing/server/impl/Activator.java +++ b/java/com.sap.sailing.server/src/com/sap/sailing/server/impl/Activator.java @@ -24,6 +24,7 @@ import com.sap.sailing.domain.base.Regatta; 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.polars.PolarDataService; import com.sap.sailing.domain.tracking.impl.GPSFixImpl; import com.sap.sailing.domain.tracking.impl.GPSFixMovingImpl; import com.sap.sailing.server.MasterDataImportClassLoaderService; @@ -55,6 +56,8 @@ public class Activator implements BundleActivator { private ServiceTracker masterDataImportClassLoaderServiceTracker; + private ServiceTracker polarDataServiceTracker; + public Activator() { clearPersistentCompetitors = Boolean.valueOf(System.getProperty(CLEAR_PERSISTENT_COMPETITORS_PROPERTY_NAME, ""+false)); logger.log(Level.INFO, "setting "+CLEAR_PERSISTENT_COMPETITORS_PROPERTY_NAME+" to "+clearPersistentCompetitors); @@ -77,6 +80,10 @@ public class Activator implements BundleActivator { context, MasterDataImportClassLoaderService.class, new MasterDataImportClassLoaderServiceTrackerCustomizer(context, racingEventService)); masterDataImportClassLoaderServiceTracker.open(); + + polarDataServiceTracker = new ServiceTracker(context, + PolarDataService.class, new PolarDataServiceTrackerCustomizer(context, racingEventService)); + polarDataServiceTracker.open(); // register the racing service in the OSGi registry racingEventService.setBundleContext(context); @@ -156,5 +163,34 @@ public class Activator implements BundleActivator { } } + + private class PolarDataServiceTrackerCustomizer implements + ServiceTrackerCustomizer { + + private final BundleContext context; + private RacingEventServiceImpl racingEventService; + + public PolarDataServiceTrackerCustomizer(BundleContext context, RacingEventServiceImpl racingEventService) { + this.context = context; + this.racingEventService = racingEventService; + } + + @Override + public PolarDataService addingService(ServiceReference reference) { + PolarDataService service = context.getService(reference); + racingEventService.setPolarDataService(service); + return service; + } + + @Override + public void modifiedService(ServiceReference reference, PolarDataService service) { + } + + @Override + public void removedService(ServiceReference reference, PolarDataService service) { + racingEventService.unsetPolarDataService(service); + } + + } } diff --git a/java/com.sap.sailing.server/src/com/sap/sailing/server/impl/RacingEventServiceImpl.java b/java/com.sap.sailing.server/src/com/sap/sailing/server/impl/RacingEventServiceImpl.java index 62fe3ba7222..643d093e5d1 100755 --- a/java/com.sap.sailing.server/src/com/sap/sailing/server/impl/RacingEventServiceImpl.java +++ b/java/com.sap.sailing.server/src/com/sap/sailing/server/impl/RacingEventServiceImpl.java @@ -27,12 +27,9 @@ import java.util.Map.Entry; import java.util.Set; import java.util.UUID; import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.Executor; import java.util.concurrent.Executors; -import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.ScheduledFuture; -import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit; import java.util.logging.Level; import java.util.logging.Logger; @@ -124,6 +121,7 @@ import com.sap.sailing.domain.persistence.PersistenceFactory; import com.sap.sailing.domain.persistence.media.MediaDB; import com.sap.sailing.domain.persistence.media.MediaDBFactory; import com.sap.sailing.domain.persistence.racelog.tracking.MongoGPSFixStoreFactory; +import com.sap.sailing.domain.polars.PolarDataService; import com.sap.sailing.domain.racelog.RaceLogIdentifier; import com.sap.sailing.domain.racelog.RaceLogStore; import com.sap.sailing.domain.racelog.tracking.GPSFixStore; @@ -153,8 +151,6 @@ import com.sap.sailing.domain.tracking.impl.AbstractRaceChangeListener; import com.sap.sailing.domain.tracking.impl.DynamicGPSFixTrackImpl; import com.sap.sailing.domain.tracking.impl.DynamicTrackedRegattaImpl; import com.sap.sailing.expeditionconnector.ExpeditionWindTrackerFactory; -import com.sap.sailing.polars.PolarDataService; -import com.sap.sailing.polars.factory.PolarDataServiceFactory; import com.sap.sailing.server.RacingEventService; import com.sap.sailing.server.Replicator; import com.sap.sailing.server.gateway.deserialization.impl.CourseAreaJsonDeserializer; @@ -351,7 +347,7 @@ public class RacingEventServiceImpl implements RacingEventService, ClearStateTes private final AbstractLogEventAuthor raceLogEventAuthorForServer = new LogEventAuthorImpl( RacingEventService.class.getName(), 0); - private final PolarDataService polarDataService; + private PolarDataService polarDataService; /** * Allow only one master data import at a time to avoid situation where multiple Imports override each other in @@ -504,13 +500,6 @@ public class RacingEventServiceImpl implements RacingEventService, ClearStateTes operationExecutionListeners = new ConcurrentHashMap<>(); courseListeners = new ConcurrentHashMap<>(); persistentRegattasForRaceIDs = new ConcurrentHashMap<>(); - final int THREAD_POOL_SIZE = Math.max(Runtime.getRuntime().availableProcessors(), 3); - // TODO find out how many executors we have on server side and how to manage them - Executor polarExecutor = new ThreadPoolExecutor(/* corePoolSize */THREAD_POOL_SIZE, - /* maximumPoolSize */THREAD_POOL_SIZE, - /* keepAliveTime */60, TimeUnit.SECONDS, - /* workQueue */new LinkedBlockingQueue()); - polarDataService = PolarDataServiceFactory.createStandardPolarDataService(polarExecutor); this.raceLogReplicator = new RaceLogReplicator(this); this.regattaLogReplicator = new RegattaLogReplicator(this); this.raceLogScoringReplicator = new RaceLogScoringReplicator(this); @@ -1539,14 +1528,18 @@ public class RacingEventServiceImpl implements RacingEventService, ClearStateTes @Override public void competitorPositionChanged(GPSFixMoving fix, Competitor item) { - polarDataService.competitorPositionChanged(fix, item, race); + if (polarDataService != null) { + polarDataService.competitorPositionChanged(fix, item, race); + } } @Override public void statusChanged(TrackedRaceStatus newStatus, TrackedRaceStatus oldStatus) { if (oldStatus.getStatus() == TrackedRaceStatusEnum.LOADING && newStatus.getStatus() != TrackedRaceStatusEnum.LOADING) { - polarDataService.raceFinishedLoading(race); + if (polarDataService != null) { + polarDataService.raceFinishedLoading(race); + } } } @@ -3113,4 +3106,14 @@ public class RacingEventServiceImpl implements RacingEventService, ClearStateTes JoinedClassLoader joinedClassLoader = new JoinedClassLoader(masterDataClassLoaders); return joinedClassLoader; } + + public void setPolarDataService(PolarDataService service) { + polarDataService = service; + } + + public void unsetPolarDataService(PolarDataService service) { + if (this.polarDataService.equals(service)) { + polarDataService = null; + } + } } diff --git a/java/com.sap.sailing.simulator/src/com/sap/sailing/simulator/impl/PolarDiagramGPS.java b/java/com.sap.sailing.simulator/src/com/sap/sailing/simulator/impl/PolarDiagramGPS.java index 371bbee939e..860010595d0 100644 --- a/java/com.sap.sailing.simulator/src/com/sap/sailing/simulator/impl/PolarDiagramGPS.java +++ b/java/com.sap.sailing.simulator/src/com/sap/sailing/simulator/impl/PolarDiagramGPS.java @@ -16,8 +16,8 @@ import com.sap.sailing.domain.common.SpeedWithBearing; import com.sap.sailing.domain.common.Tack; import com.sap.sailing.domain.common.impl.DegreeBearingImpl; import com.sap.sailing.domain.common.impl.KnotSpeedImpl; -import com.sap.sailing.polars.PolarDataService; -import com.sap.sailing.polars.regression.NotEnoughDataHasBeenAddedException; +import com.sap.sailing.domain.polars.NotEnoughDataHasBeenAddedException; +import com.sap.sailing.domain.polars.PolarDataService; public class PolarDiagramGPS extends PolarDiagramBase { diff --git a/java/com.sap.sailing.simulator/src/com/sap/sailing/simulator/impl/PolarDiagramGPSDirect.java b/java/com.sap.sailing.simulator/src/com/sap/sailing/simulator/impl/PolarDiagramGPSDirect.java index 37ee5c33e23..f2d1e5a0cf1 100644 --- a/java/com.sap.sailing.simulator/src/com/sap/sailing/simulator/impl/PolarDiagramGPSDirect.java +++ b/java/com.sap.sailing.simulator/src/com/sap/sailing/simulator/impl/PolarDiagramGPSDirect.java @@ -11,8 +11,8 @@ import com.sap.sailing.domain.common.Speed; import com.sap.sailing.domain.common.SpeedWithBearing; import com.sap.sailing.domain.common.Tack; import com.sap.sailing.domain.common.impl.KnotSpeedWithBearingImpl; -import com.sap.sailing.polars.PolarDataService; -import com.sap.sailing.polars.regression.NotEnoughDataHasBeenAddedException; +import com.sap.sailing.domain.polars.NotEnoughDataHasBeenAddedException; +import com.sap.sailing.domain.polars.PolarDataService; import com.sap.sailing.simulator.PolarDiagram; public class PolarDiagramGPSDirect implements PolarDiagram, Serializable {