diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/datamining/selection/SimpleDataRetrieverChainDefinitionProvider.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/datamining/selection/SimpleDataRetrieverChainDefinitionProvider.java index abbe350788b..c2a22fe80e3 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/datamining/selection/SimpleDataRetrieverChainDefinitionProvider.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/datamining/selection/SimpleDataRetrieverChainDefinitionProvider.java @@ -221,6 +221,7 @@ public class SimpleDataRetrieverChainDefinitionProvider implements DataRetriever @Override public void updateSettings(SerializableSettings newSettings) { getDataRetrieverChainDefinition().setSettings(newSettings); + notifyListeners(); } } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/datamining/selection/filter/ListRetrieverChainFilterSelectionProvider.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/datamining/selection/filter/ListRetrieverChainFilterSelectionProvider.java index 9f7a4ea2fc0..f08b3e07601 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/datamining/selection/filter/ListRetrieverChainFilterSelectionProvider.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/datamining/selection/filter/ListRetrieverChainFilterSelectionProvider.java @@ -123,6 +123,9 @@ public class ListRetrieverChainFilterSelectionProvider implements FilterSelectio } else if (!isAwaitingReload) { clearContent(); } + } else if (retrieverChain != null && retrieverChain.settingsHaveChanged() && !isAwaitingReload) { + updateRetrievalLevels(); + retrieverChain.resetSettingsChangeFlag(); } } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/DataMiningServiceImpl.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/DataMiningServiceImpl.java index 0bb9ff3d70b..6c41717623c 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/DataMiningServiceImpl.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/DataMiningServiceImpl.java @@ -131,6 +131,9 @@ public class DataMiningServiceImpl extends RemoteServiceServlet implements DataM public HashMap> getReducedDimensionsMappedByLevelFor( DataRetrieverChainDefinitionDTO dataRetrieverChainDefinitionDTO, String localeInfoName) { DataRetrieverChainDefinition dataRetrieverChainDefinition = getDataMiningServer().getDataRetrieverChainDefinition(dataRetrieverChainDefinitionDTO.getId()); + if (dataRetrieverChainDefinitionDTO.hasSettings()) { + dataRetrieverChainDefinition.setSettings(dataRetrieverChainDefinitionDTO.getSettings()); + } Map, Iterable>> reducedDimensions = getDataMiningServer() .getReducedDimensionsMappedByLevelFor(dataRetrieverChainDefinition); return dimensionsMappedByLevelAsDTOs(reducedDimensions, localeInfoName); diff --git a/java/com.sap.sailing.polars.datamining/META-INF/MANIFEST.MF b/java/com.sap.sailing.polars.datamining/META-INF/MANIFEST.MF index a6706cc0692..f5f1b3039fb 100644 --- a/java/com.sap.sailing.polars.datamining/META-INF/MANIFEST.MF +++ b/java/com.sap.sailing.polars.datamining/META-INF/MANIFEST.MF @@ -17,3 +17,4 @@ Require-Bundle: org.eclipse.osgi;bundle-version="3.10.1", com.sap.sailing.domain.common;bundle-version="1.0.0" Bundle-RequiredExecutionEnvironment: JavaSE-1.8 Bundle-ActivationPolicy: lazy +Export-Package: com.sap.sailing.polars.datamining.data.impl diff --git a/java/com.sap.sailing.polars.datamining/resources/stringmessages/Polars_StringMessages_de.properties b/java/com.sap.sailing.polars.datamining/resources/stringmessages/Polars_StringMessages_de.properties index a5e42c3a60d..cab6849b875 100644 --- a/java/com.sap.sailing.polars.datamining/resources/stringmessages/Polars_StringMessages_de.properties +++ b/java/com.sap.sailing.polars.datamining/resources/stringmessages/Polars_StringMessages_de.properties @@ -2,4 +2,6 @@ PolarChain1=Polar Sammler 1 RaceColumn=Rennen LegIndex=Schenkel Index PolarData=Polardaten -Polars=Polare \ No newline at end of file +Polars=Polare +GPSFix=GPS Fix +WindRange=Wind Bereich \ No newline at end of file diff --git a/java/com.sap.sailing.polars.datamining/resources/stringmessages/Polars_StringMessages_en.properties b/java/com.sap.sailing.polars.datamining/resources/stringmessages/Polars_StringMessages_en.properties index f9c436296a4..7e0e7418251 100644 --- a/java/com.sap.sailing.polars.datamining/resources/stringmessages/Polars_StringMessages_en.properties +++ b/java/com.sap.sailing.polars.datamining/resources/stringmessages/Polars_StringMessages_en.properties @@ -2,4 +2,6 @@ PolarChain1=Polar Creator 1 RaceColumn=RaceColumn LegIndex=Leg Index PolarData=Polar Data -Polars=Polars \ No newline at end of file +Polars=Polars +GPSFix=GPS Fix +WindRange=Wind Range \ No newline at end of file diff --git a/java/com.sap.sailing.polars.datamining/src/com/sap/sailing/polars/datamining/Activator.java b/java/com.sap.sailing.polars.datamining/src/com/sap/sailing/polars/datamining/Activator.java index ead6482745b..11300be7fdf 100644 --- a/java/com.sap.sailing.polars.datamining/src/com/sap/sailing/polars/datamining/Activator.java +++ b/java/com.sap.sailing.polars.datamining/src/com/sap/sailing/polars/datamining/Activator.java @@ -10,6 +10,7 @@ import com.sap.sailing.datamining.RacingEventServiceProvider; import com.sap.sailing.polars.datamining.components.aggregators.PolarDataAggregationProcessor; import com.sap.sailing.polars.datamining.data.HasCompetitorPolarContext; import com.sap.sailing.polars.datamining.data.HasFleetPolarContext; +import com.sap.sailing.polars.datamining.data.HasGPSFixPolarContext; import com.sap.sailing.polars.datamining.data.HasLeaderboardGroupPolarContext; import com.sap.sailing.polars.datamining.data.HasLeaderboardPolarContext; import com.sap.sailing.polars.datamining.data.HasLegPolarContext; @@ -74,6 +75,7 @@ public class Activator extends AbstractDataMiningActivator implements DataMining internalClasses.add(HasFleetPolarContext.class); internalClasses.add(HasCompetitorPolarContext.class); internalClasses.add(HasLegPolarContext.class); + internalClasses.add(HasGPSFixPolarContext.class); return internalClasses; } diff --git a/java/com.sap.sailing.polars.datamining/src/com/sap/sailing/polars/datamining/PolarsDataRetrievalChainDefinitions.java b/java/com.sap.sailing.polars.datamining/src/com/sap/sailing/polars/datamining/PolarsDataRetrievalChainDefinitions.java index c2477bcdeba..c0b31fb82dc 100644 --- a/java/com.sap.sailing.polars.datamining/src/com/sap/sailing/polars/datamining/PolarsDataRetrievalChainDefinitions.java +++ b/java/com.sap.sailing.polars.datamining/src/com/sap/sailing/polars/datamining/PolarsDataRetrievalChainDefinitions.java @@ -7,12 +7,14 @@ import com.sap.sailing.domain.common.PolarSheetGenerationSettings; import com.sap.sailing.domain.common.impl.PolarSheetGenerationSettingsImpl; import com.sap.sailing.polars.datamining.components.PolarCompetitorRetrievalProcessor; import com.sap.sailing.polars.datamining.components.PolarFleetRetrievalProcessor; +import com.sap.sailing.polars.datamining.components.PolarGPSFixRetrievalProcessor; import com.sap.sailing.polars.datamining.components.PolarLeaderboardGroupRetrievalProcessor; import com.sap.sailing.polars.datamining.components.PolarLeaderboardRetrievalProcessor; import com.sap.sailing.polars.datamining.components.PolarLegRetrievalProcessor; import com.sap.sailing.polars.datamining.components.PolarRaceColumnRetrievalProcessor; import com.sap.sailing.polars.datamining.data.HasCompetitorPolarContext; import com.sap.sailing.polars.datamining.data.HasFleetPolarContext; +import com.sap.sailing.polars.datamining.data.HasGPSFixPolarContext; import com.sap.sailing.polars.datamining.data.HasLeaderboardGroupPolarContext; import com.sap.sailing.polars.datamining.data.HasLeaderboardPolarContext; import com.sap.sailing.polars.datamining.data.HasLegPolarContext; @@ -27,8 +29,8 @@ public class PolarsDataRetrievalChainDefinitions { public PolarsDataRetrievalChainDefinitions() { dataRetrieverChainDefinitions = new ArrayList<>(); - DataRetrieverChainDefinition definition1 = new DataRetrieverChainDefinitionWithSettings( - RacingEventService.class, HasCompetitorPolarContext.class, "PolarChain1", + DataRetrieverChainDefinition definition1 = new DataRetrieverChainDefinitionWithSettings( + RacingEventService.class, HasGPSFixPolarContext.class, "PolarChain1", PolarSheetGenerationSettingsImpl.createStandardPolarSettings()); definition1.startWith(PolarLeaderboardGroupRetrievalProcessor.class, HasLeaderboardGroupPolarContext.class, "LeaderboardGroup"); @@ -40,8 +42,10 @@ public class PolarsDataRetrievalChainDefinitions { HasFleetPolarContext.class, "Fleet"); definition1.addAfter(PolarFleetRetrievalProcessor.class, PolarLegRetrievalProcessor.class, HasLegPolarContext.class, "Leg"); - definition1.endWith(PolarLegRetrievalProcessor.class, PolarCompetitorRetrievalProcessor.class, + definition1.addAfter(PolarLegRetrievalProcessor.class, PolarCompetitorRetrievalProcessor.class, HasCompetitorPolarContext.class, "Competitor"); + definition1.endWith(PolarCompetitorRetrievalProcessor.class, PolarGPSFixRetrievalProcessor.class, + HasGPSFixPolarContext.class, "GPSFix"); dataRetrieverChainDefinitions.add(definition1); } diff --git a/java/com.sap.sailing.polars.datamining/src/com/sap/sailing/polars/datamining/components/PolarGPSFixRetrievalProcessor.java b/java/com.sap.sailing.polars.datamining/src/com/sap/sailing/polars/datamining/components/PolarGPSFixRetrievalProcessor.java new file mode 100644 index 00000000000..d6ee772060b --- /dev/null +++ b/java/com.sap.sailing.polars.datamining/src/com/sap/sailing/polars/datamining/components/PolarGPSFixRetrievalProcessor.java @@ -0,0 +1,65 @@ +package com.sap.sailing.polars.datamining.components; + +import java.util.Collection; +import java.util.HashSet; +import java.util.Set; +import java.util.concurrent.ExecutorService; + +import com.sap.sailing.domain.base.Competitor; +import com.sap.sailing.domain.base.Leg; +import com.sap.sailing.domain.common.PolarSheetGenerationSettings; +import com.sap.sailing.domain.common.Speed; +import com.sap.sailing.domain.common.impl.WindSpeedSteppingWithMaxDistance; +import com.sap.sailing.domain.common.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.polars.datamining.data.HasCompetitorPolarContext; +import com.sap.sailing.polars.datamining.data.HasGPSFixPolarContext; +import com.sap.sailing.polars.datamining.data.impl.GPSFixWithPolarContext; +import com.sap.sailing.polars.datamining.data.impl.SpeedClusterGroup; +import com.sap.sse.common.TimePoint; +import com.sap.sse.datamining.components.Processor; +import com.sap.sse.datamining.data.ClusterGroup; +import com.sap.sse.datamining.impl.components.AbstractRetrievalProcessor; + +public class PolarGPSFixRetrievalProcessor extends AbstractRetrievalProcessor { + + public PolarGPSFixRetrievalProcessor(ExecutorService executor, + Collection> resultReceivers, int retrievalLevel) { + super(HasCompetitorPolarContext.class, HasGPSFixPolarContext.class, executor, resultReceivers, retrievalLevel); + } + + @Override + protected Iterable retrieveData(HasCompetitorPolarContext element) { + PolarSheetGenerationSettings settings = (PolarSheetGenerationSettings) getSettings(); + ClusterGroup windSpeedRangeGroup = toClusterGroup(settings.getWindSpeedStepping()); + TrackedRace trackedRace = element.getTrackedRace(); + Competitor competitor = element.getCompetitor(); + Leg leg = element.getLeg(); + GPSFixTrack track = trackedRace.getTrack(competitor); + TrackedLegOfCompetitor trackedLeg = trackedRace.getTrackedLeg(competitor, leg); + TimePoint startTime = trackedLeg.getStartTime(); + TimePoint finishTime = trackedLeg.getFinishTime(); + Set result = new HashSet<>(); + if (startTime != null && finishTime != null) { + track.lockForRead(); + + try { + Iterable fixes = track.getFixes(startTime, true, finishTime, false); + + for (GPSFixMoving fix : fixes) { + result.add(new GPSFixWithPolarContext(fix, trackedRace, windSpeedRangeGroup)); + } + } finally { + track.unlockAfterRead(); + } + } + return result; + } + + private ClusterGroup toClusterGroup(WindSpeedSteppingWithMaxDistance windSpeedStepping) { + return SpeedClusterGroup.createSpeedClusterGroupFrom(windSpeedStepping); + } + +} diff --git a/java/com.sap.sailing.polars.datamining/src/com/sap/sailing/polars/datamining/data/HasGPSFixPolarContext.java b/java/com.sap.sailing.polars.datamining/src/com/sap/sailing/polars/datamining/data/HasGPSFixPolarContext.java new file mode 100644 index 00000000000..673701eb29d --- /dev/null +++ b/java/com.sap.sailing.polars.datamining/src/com/sap/sailing/polars/datamining/data/HasGPSFixPolarContext.java @@ -0,0 +1,11 @@ +package com.sap.sailing.polars.datamining.data; + +import com.sap.sse.datamining.shared.annotations.Dimension; +import com.sap.sse.datamining.shared.impl.dto.ClusterDTO; + +public interface HasGPSFixPolarContext { + + @Dimension(messageKey="WindRange") + ClusterDTO getWindSpeedRange(); + +} diff --git a/java/com.sap.sailing.polars.datamining/src/com/sap/sailing/polars/datamining/data/impl/GPSFixWithPolarContext.java b/java/com.sap.sailing.polars.datamining/src/com/sap/sailing/polars/datamining/data/impl/GPSFixWithPolarContext.java new file mode 100644 index 00000000000..4751684c447 --- /dev/null +++ b/java/com.sap.sailing.polars.datamining/src/com/sap/sailing/polars/datamining/data/impl/GPSFixWithPolarContext.java @@ -0,0 +1,30 @@ +package com.sap.sailing.polars.datamining.data.impl; + +import com.sap.sailing.domain.common.Speed; +import com.sap.sailing.domain.common.Wind; +import com.sap.sailing.domain.common.tracking.GPSFixMoving; +import com.sap.sailing.domain.tracking.TrackedRace; +import com.sap.sailing.polars.datamining.data.HasGPSFixPolarContext; +import com.sap.sse.datamining.data.ClusterGroup; +import com.sap.sse.datamining.shared.impl.dto.ClusterDTO; + +public class GPSFixWithPolarContext implements HasGPSFixPolarContext { + + private final GPSFixMoving fix; + private final TrackedRace trackedRace; + private final ClusterGroup windSpeedRangeGroup; + + public GPSFixWithPolarContext(GPSFixMoving fix, TrackedRace trackedRace, ClusterGroup windSpeedRangeGroup) { + this.fix = fix; + this.trackedRace = trackedRace; + this.windSpeedRangeGroup = windSpeedRangeGroup; + } + + @Override + public ClusterDTO getWindSpeedRange() { + //TODO exclude wind sources and stuff + Wind wind = trackedRace.getWind(fix.getPosition(), fix.getTimePoint()); + return new ClusterDTO(windSpeedRangeGroup.getClusterFor(wind).toString()); + } + +} diff --git a/java/com.sap.sailing.polars.datamining/src/com/sap/sailing/polars/datamining/data/impl/LeaderboardGroupWithPolarContext.java b/java/com.sap.sailing.polars.datamining/src/com/sap/sailing/polars/datamining/data/impl/LeaderboardGroupWithPolarContext.java index ddfd4a87a3f..3241bc621ff 100644 --- a/java/com.sap.sailing.polars.datamining/src/com/sap/sailing/polars/datamining/data/impl/LeaderboardGroupWithPolarContext.java +++ b/java/com.sap.sailing.polars.datamining/src/com/sap/sailing/polars/datamining/data/impl/LeaderboardGroupWithPolarContext.java @@ -15,5 +15,4 @@ public class LeaderboardGroupWithPolarContext implements HasLeaderboardGroupPola public LeaderboardGroup getLeaderboardGroup() { return leaderboardGroup; } - } diff --git a/java/com.sap.sailing.polars/src/com/sap/sailing/polars/clusters/SpeedClusterGroup.java b/java/com.sap.sailing.polars.datamining/src/com/sap/sailing/polars/datamining/data/impl/SpeedClusterGroup.java similarity index 85% rename from java/com.sap.sailing.polars/src/com/sap/sailing/polars/clusters/SpeedClusterGroup.java rename to java/com.sap.sailing.polars.datamining/src/com/sap/sailing/polars/datamining/data/impl/SpeedClusterGroup.java index d03f3bee0a8..deae8f549cf 100644 --- a/java/com.sap.sailing.polars/src/com/sap/sailing/polars/clusters/SpeedClusterGroup.java +++ b/java/com.sap.sailing.polars.datamining/src/com/sap/sailing/polars/datamining/data/impl/SpeedClusterGroup.java @@ -1,12 +1,14 @@ -package com.sap.sailing.polars.clusters; +package com.sap.sailing.polars.datamining.data.impl; import java.util.ArrayList; import java.util.Collection; import com.sap.sailing.domain.common.Speed; import com.sap.sailing.domain.common.impl.KnotSpeedImpl; +import com.sap.sailing.domain.common.impl.WindSpeedSteppingWithMaxDistance; import com.sap.sse.datamining.data.Cluster; import com.sap.sse.datamining.data.ClusterBoundary; +import com.sap.sse.datamining.data.ClusterGroup; import com.sap.sse.datamining.impl.data.ClusterWithLowerAndUpperBoundaries; import com.sap.sse.datamining.impl.data.ComparableClusterBoundary; import com.sap.sse.datamining.impl.data.ComparisonStrategy; @@ -81,5 +83,17 @@ public class SpeedClusterGroup extends FixClusterGroup { ComparisonStrategy.GREATER_EQUALS_THAN); return lowerBoundary; } + + public static ClusterGroup createSpeedClusterGroupFrom(WindSpeedSteppingWithMaxDistance windStepping) { + double maxDistance = windStepping.getMaxDistance(); + double[] rawIntegerStepping = windStepping.getRawStepping(); + double[] rawDoubleLevelMids = new double[rawIntegerStepping.length]; + for (int i = 0; i < rawIntegerStepping.length; i++) { + rawDoubleLevelMids[i] = rawIntegerStepping[i]; + } + + return new SpeedClusterGroup("SpeedClusterGroup", rawDoubleLevelMids, maxDistance); + } + } 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 1f6101ef376..6aef689fd45 100644 --- a/java/com.sap.sailing.polars.test/META-INF/MANIFEST.MF +++ b/java/com.sap.sailing.polars.test/META-INF/MANIFEST.MF @@ -14,4 +14,5 @@ Require-Bundle: org.hamcrest;bundle-version="1.1.0", com.sap.sse.common, com.sap.sailing.domain.tractracadapter, com.tractrac.clientmodule;bundle-version="3.0.7", - com.sap.sailing.domain + com.sap.sailing.domain, + com.sap.sailing.polars.datamining diff --git a/java/com.sap.sailing.polars.test/src/com/sap/sailing/polars/clusters/test/SpeedClusterGroupTest.java b/java/com.sap.sailing.polars.test/src/com/sap/sailing/polars/clusters/test/SpeedClusterGroupTest.java index b1e3e35aa02..b73d8822821 100644 --- a/java/com.sap.sailing.polars.test/src/com/sap/sailing/polars/clusters/test/SpeedClusterGroupTest.java +++ b/java/com.sap.sailing.polars.test/src/com/sap/sailing/polars/clusters/test/SpeedClusterGroupTest.java @@ -9,7 +9,7 @@ import org.junit.Test; import com.sap.sailing.domain.common.Speed; import com.sap.sailing.domain.common.impl.KnotSpeedImpl; -import com.sap.sailing.polars.clusters.SpeedClusterGroup; +import com.sap.sailing.polars.datamining.data.impl.SpeedClusterGroup; import com.sap.sse.datamining.data.Cluster; public class SpeedClusterGroupTest { 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 2fe4f5f7985..48bd86956fe 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 @@ -16,8 +16,9 @@ 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.domain.polars.NotEnoughDataHasBeenAddedException; -import com.sap.sse.datamining.components.AdditionalResultDataBuilder; import com.sap.sailing.domain.polars.PolarsChangedListener; +import com.sap.sse.common.settings.SerializableSettings; +import com.sap.sse.datamining.components.AdditionalResultDataBuilder; import com.sap.sse.datamining.components.Processor; import com.sap.sse.datamining.factories.GroupKeyFactory; import com.sap.sse.datamining.impl.components.GroupedDataEntry; @@ -192,4 +193,16 @@ public class CubicRegressionPerCourseProcessor implements return null; } + @Override + public SerializableSettings getSettings() { + // TODO Auto-generated method stub + return null; + } + + @Override + public void setSettings(SerializableSettings settings) { + // TODO Auto-generated method stub + + } + } 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 e48a36ebaaa..c0146140ee0 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 @@ -22,6 +22,7 @@ import com.sap.sailing.domain.tracking.WindWithConfidence; import com.sap.sailing.polars.regression.MovingAverageBoatSpeedEstimator; import com.sap.sse.common.TimePoint; import com.sap.sse.common.Util.Pair; +import com.sap.sse.common.settings.SerializableSettings; import com.sap.sse.datamining.components.AdditionalResultDataBuilder; import com.sap.sse.datamining.data.Cluster; import com.sap.sse.datamining.data.ClusterGroup; @@ -220,4 +221,16 @@ public class MovingAverageProcessorImpl implements MovingAverageProcessor { return speedClusterGroup; } + @Override + public SerializableSettings getSettings() { + // TODO Auto-generated method stub + return null; + } + + @Override + public void setSettings(SerializableSettings settings) { + // TODO Auto-generated method stub + + } + } diff --git a/java/com.sap.sailing.polars/src/com/sap/sailing/polars/mining/SpeedClusterGroupFromWindSteppingCreator.java b/java/com.sap.sailing.polars/src/com/sap/sailing/polars/mining/SpeedClusterGroupFromWindSteppingCreator.java deleted file mode 100644 index 855e72a3301..00000000000 --- a/java/com.sap.sailing.polars/src/com/sap/sailing/polars/mining/SpeedClusterGroupFromWindSteppingCreator.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.sap.sailing.polars.mining; - -import com.sap.sailing.domain.common.Speed; -import com.sap.sailing.domain.common.impl.WindSpeedSteppingWithMaxDistance; -import com.sap.sailing.polars.clusters.SpeedClusterGroup; -import com.sap.sse.datamining.data.ClusterGroup; - -public class SpeedClusterGroupFromWindSteppingCreator { - - public static ClusterGroup createSpeedClusterGroupFrom(WindSpeedSteppingWithMaxDistance windStepping) { - double maxDistance = windStepping.getMaxDistance(); - double[] rawIntegerStepping = windStepping.getRawStepping(); - double[] rawDoubleLevelMids = new double[rawIntegerStepping.length]; - for (int i = 0; i < rawIntegerStepping.length; i++) { - rawDoubleLevelMids[i] = rawIntegerStepping[i]; - } - - return new SpeedClusterGroup("SpeedClusterGroup", rawDoubleLevelMids, maxDistance); - } - -} 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 9bd8d9f4f24..356e0f584d0 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 @@ -21,6 +21,7 @@ import com.sap.sailing.domain.polars.NotEnoughDataHasBeenAddedException; import com.sap.sailing.domain.polars.PolarsChangedListener; import com.sap.sailing.polars.regression.IncrementalLeastSquares; import com.sap.sailing.polars.regression.impl.IncrementalAnyOrderLeastSquaresImpl; +import com.sap.sse.common.settings.SerializableSettings; import com.sap.sse.datamining.components.AdditionalResultDataBuilder; import com.sap.sse.datamining.components.Processor; import com.sap.sse.datamining.data.Cluster; @@ -216,4 +217,16 @@ public class SpeedRegressionPerAngleClusterProcessor implements return angleClusterGroup; } + @Override + public SerializableSettings getSettings() { + // TODO Auto-generated method stub + return null; + } + + @Override + public void setSettings(SerializableSettings settings) { + // TODO Auto-generated method stub + + } + } diff --git a/java/com.sap.sse.datamining.shared/src/com/sap/sse/datamining/shared/impl/dto/DataRetrieverChainDefinitionDTO.java b/java/com.sap.sse.datamining.shared/src/com/sap/sse/datamining/shared/impl/dto/DataRetrieverChainDefinitionDTO.java index 216b0dc08fd..fbe3a615d9f 100644 --- a/java/com.sap.sse.datamining.shared/src/com/sap/sse/datamining/shared/impl/dto/DataRetrieverChainDefinitionDTO.java +++ b/java/com.sap.sse.datamining.shared/src/com/sap/sse/datamining/shared/impl/dto/DataRetrieverChainDefinitionDTO.java @@ -14,6 +14,8 @@ public class DataRetrieverChainDefinitionDTO impl private ArrayList retrieverLevels; + private boolean settingsHaveChanged = false; + /** * Constructor for the GWT-Serialization. Don't use this! */ @@ -126,6 +128,15 @@ public class DataRetrieverChainDefinitionDTO impl public void setSettings(Settings newSettings) { settings = newSettings; + settingsHaveChanged = true; + } + + public boolean settingsHaveChanged() { + return settingsHaveChanged ; + } + + public void resetSettingsChangeFlag() { + settingsHaveChanged = false; } } diff --git a/java/com.sap.sse.datamining/src/com/sap/sse/datamining/components/DataRetrieverChainDefinition.java b/java/com.sap.sse.datamining/src/com/sap/sse/datamining/components/DataRetrieverChainDefinition.java index ccecc696345..1cf99bc5a07 100644 --- a/java/com.sap.sse.datamining/src/com/sap/sse/datamining/components/DataRetrieverChainDefinition.java +++ b/java/com.sap.sse.datamining/src/com/sap/sse/datamining/components/DataRetrieverChainDefinition.java @@ -129,4 +129,6 @@ public interface DataRetrieverChainDefinition { @@ -50,5 +52,9 @@ public interface Processor { * construct the additional data of the executed processor chain. */ public AdditionalResultDataBuilder getAdditionalResultData(AdditionalResultDataBuilder additionalDataBuilder); + + SerializableSettings getSettings(); + + void setSettings(SerializableSettings settings); } diff --git a/java/com.sap.sse.datamining/src/com/sap/sse/datamining/factories/QueryFactory.java b/java/com.sap.sse.datamining/src/com/sap/sse/datamining/factories/QueryFactory.java index 83ea5786251..c9c1dac331d 100644 --- a/java/com.sap.sse.datamining/src/com/sap/sse/datamining/factories/QueryFactory.java +++ b/java/com.sap.sse.datamining/src/com/sap/sse/datamining/factories/QueryFactory.java @@ -142,6 +142,9 @@ public class QueryFactory { } for (Processor groupingExtractor : processorFactory.createGroupingExtractorsForDimensions( chainBuilder.getCurrentRetrievedDataType(), valueCollector, getParameterProvidersFor(dimensions, stringMessages, locale), stringMessages, locale)) { + if (dataRetrieverChainDefinition.hasSettings()) { + groupingExtractor.setSettings(dataRetrieverChainDefinition.getSettings()); + } chainBuilder.addResultReceiver(groupingExtractor); } diff --git a/java/com.sap.sse.datamining/src/com/sap/sse/datamining/impl/ProcessorQuery.java b/java/com.sap.sse.datamining/src/com/sap/sse/datamining/impl/ProcessorQuery.java index 38b098193c2..c18c37604e6 100644 --- a/java/com.sap.sse.datamining/src/com/sap/sse/datamining/impl/ProcessorQuery.java +++ b/java/com.sap.sse.datamining/src/com/sap/sse/datamining/impl/ProcessorQuery.java @@ -14,6 +14,7 @@ import java.util.concurrent.locks.ReentrantLock; import java.util.logging.Level; import java.util.logging.Logger; +import com.sap.sse.common.settings.SerializableSettings; import com.sap.sse.datamining.AdditionalQueryData; import com.sap.sse.datamining.Query; import com.sap.sse.datamining.QueryState; @@ -330,6 +331,18 @@ public abstract class ProcessorQuery implements Quer public Class getResultType() { return Void.class; } + + @Override + public SerializableSettings getSettings() { + // TODO Auto-generated method stub + return null; + } + + @Override + public void setSettings(SerializableSettings settings) { + // TODO Auto-generated method stub + + } } diff --git a/java/com.sap.sse.datamining/src/com/sap/sse/datamining/impl/components/AbstractDataRetrieverChainDefinition.java b/java/com.sap.sse.datamining/src/com/sap/sse/datamining/impl/components/AbstractDataRetrieverChainDefinition.java index 0eed20d5c04..09df5b4592e 100644 --- a/java/com.sap.sse.datamining/src/com/sap/sse/datamining/impl/components/AbstractDataRetrieverChainDefinition.java +++ b/java/com.sap.sse.datamining/src/com/sap/sse/datamining/impl/components/AbstractDataRetrieverChainDefinition.java @@ -143,7 +143,7 @@ public abstract class AbstractDataRetrieverChainDefinition(executor, dataRetrieverTypesWithInformation); + return new SimpleDataRetrieverChainBuilder<>(executor, dataRetrieverTypesWithInformation, hasSettings() ? getSettings() : null); } @Override diff --git a/java/com.sap.sse.datamining/src/com/sap/sse/datamining/impl/components/AbstractProcessor.java b/java/com.sap.sse.datamining/src/com/sap/sse/datamining/impl/components/AbstractProcessor.java index 2b910d0a27a..48f45aac0ec 100644 --- a/java/com.sap.sse.datamining/src/com/sap/sse/datamining/impl/components/AbstractProcessor.java +++ b/java/com.sap.sse.datamining/src/com/sap/sse/datamining/impl/components/AbstractProcessor.java @@ -1,11 +1,14 @@ package com.sap.sse.datamining.impl.components; +import com.sap.sse.common.settings.SerializableSettings; import com.sap.sse.datamining.components.Processor; public abstract class AbstractProcessor implements Processor { private final Class inputType; private final Class resultType; + + private SerializableSettings settings; public AbstractProcessor(Class inputType, Class resultType) { this.inputType = inputType; @@ -21,5 +24,15 @@ public abstract class AbstractProcessor implements Proces public Class getResultType() { return resultType; } + + @Override + public SerializableSettings getSettings() { + return settings; + } + + @Override + public void setSettings(SerializableSettings settings) { + this.settings = settings; + } } diff --git a/java/com.sap.sse.datamining/src/com/sap/sse/datamining/impl/components/DataRetrieverChainDefinitionWithSettings.java b/java/com.sap.sse.datamining/src/com/sap/sse/datamining/impl/components/DataRetrieverChainDefinitionWithSettings.java index af5a0d768c8..9c49f78a505 100644 --- a/java/com.sap.sse.datamining/src/com/sap/sse/datamining/impl/components/DataRetrieverChainDefinitionWithSettings.java +++ b/java/com.sap.sse.datamining/src/com/sap/sse/datamining/impl/components/DataRetrieverChainDefinitionWithSettings.java @@ -6,7 +6,7 @@ import com.sap.sse.datamining.components.DataRetrieverChainDefinition; public class DataRetrieverChainDefinitionWithSettings extends AbstractDataRetrieverChainDefinition { - private final SerializableSettings settings; + private SerializableSettings settings; public DataRetrieverChainDefinitionWithSettings(Class dataSourceType, Class retrievedDataType, String nameMessageKey, Settings settings) { @@ -30,5 +30,10 @@ public class DataRetrieverChainDefinitionWithSettings implements DataRetr private final Map> filters; private final Map>> receivers; private int currentRetrieverTypeIndex; + private final SerializableSettings settings; /** * Creates a data retriever chain builder for the given list of {@link DataRetrieverLevel}.
@@ -42,7 +44,9 @@ public class SimpleDataRetrieverChainBuilder implements DataRetr * @param dataRetrieverTypesWithInformation */ SimpleDataRetrieverChainBuilder(ExecutorService executor, - List> dataRetrieverTypesWithInformation) { + List> dataRetrieverTypesWithInformation, + SerializableSettings settings) { + this.settings = settings; this.executor = executor; this.dataRetrieverTypesWithInformation = new ArrayList<>(dataRetrieverTypesWithInformation); @@ -178,7 +182,11 @@ public class SimpleDataRetrieverChainBuilder implements DataRetr // Preventing IllegalAccessExceptions of public constructors due to weird package behaviour retrieverConstructor.setAccessible(true); } - return retrieverConstructor.newInstance(executor, retrievalResultReceivers, retrieverTypeIndex); + Processor newRetriever = retrieverConstructor.newInstance(executor, retrievalResultReceivers, retrieverTypeIndex); + if (settings != null) { + newRetriever.setSettings(settings); + } + return newRetriever; } catch (InstantiationException | IllegalAccessException | IllegalArgumentException | InvocationTargetException e) { throw new UnsupportedOperationException("Couldn't create a data retriever instance with the constructor " diff --git a/java/com.sap.sse.datamining/src/com/sap/sse/datamining/impl/components/SimpleDataRetrieverChainDefinition.java b/java/com.sap.sse.datamining/src/com/sap/sse/datamining/impl/components/SimpleDataRetrieverChainDefinition.java index 7ba9a01a477..70d7dfd4882 100644 --- a/java/com.sap.sse.datamining/src/com/sap/sse/datamining/impl/components/SimpleDataRetrieverChainDefinition.java +++ b/java/com.sap.sse.datamining/src/com/sap/sse/datamining/impl/components/SimpleDataRetrieverChainDefinition.java @@ -50,4 +50,7 @@ public class SimpleDataRetrieverChainDefinition extend } + @Override + public void setSettings(SerializableSettings settings) {} + }