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 d551aabc9bf..fb9ff390f49 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 @@ -42,15 +42,16 @@ import com.sap.sailing.domain.common.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; import com.sap.sse.datamining.data.ClusterGroup; import com.sap.sse.datamining.functions.Function; import com.sap.sse.datamining.functions.ParameterProvider; +import com.sap.sse.datamining.functions.ParameterizedFunction; import com.sap.sse.datamining.impl.components.GroupedDataEntry; import com.sap.sse.datamining.impl.components.ParallelFilteringProcessor; import com.sap.sse.datamining.impl.components.ParallelMultiDimensionsValueNestingGroupingProcessor; +import com.sap.sse.datamining.impl.functions.SimpleParameterizedFunction; public class PolarDataMiner { @@ -125,38 +126,38 @@ public class PolarDataMiner { Collection, ?>> movingAverageGrouperResultReceivers = new ArrayList, ?>>(); movingAverageGrouperResultReceivers.add(movingAverageProcessor); - Collection, ParameterProvider>> dimensionsWithParameterProviders = new ArrayList<>(); + Collection> parameterizedDimensions = new ArrayList<>(); for (Function function : PolarDataDimensionCollectionFactory.getMovingAverageClusterKeyDimensions()) { - dimensionsWithParameterProviders.add(new Pair, ParameterProvider>(function, ParameterProvider.NULL)); + parameterizedDimensions.add(new SimpleParameterizedFunction<>(function, ParameterProvider.NULL)); } Processor> movingAverageGroupingProcessor = new ParallelMultiDimensionsValueNestingGroupingProcessor( - GPSFixMovingWithPolarContext.class, executor, movingAverageGrouperResultReceivers, dimensionsWithParameterProviders); + GPSFixMovingWithPolarContext.class, executor, movingAverageGrouperResultReceivers, parameterizedDimensions); cubicRegressionPerCourseProcessor = new CubicRegressionPerCourseProcessor(); Collection, ?>> regressionPerCourseGrouperResultReceivers = new ArrayList, ?>>(); regressionPerCourseGrouperResultReceivers.add(cubicRegressionPerCourseProcessor); - Collection, ParameterProvider>> dimensionsWithParameterProvidersForCubicRegression = new ArrayList<>(); + Collection> parameterizedDimensionsForCubicRegression = new ArrayList<>(); for (Function function : PolarDataDimensionCollectionFactory.getCubicRegressionPerCourseClusterKeyDimensions()) { - dimensionsWithParameterProvidersForCubicRegression.add(new Pair, ParameterProvider>(function, ParameterProvider.NULL)); + parameterizedDimensionsForCubicRegression.add(new SimpleParameterizedFunction<>(function, ParameterProvider.NULL)); } Processor> cubicRegressionPerCourseGroupingProcessor = new ParallelMultiDimensionsValueNestingGroupingProcessor( - GPSFixMovingWithPolarContext.class, executor, regressionPerCourseGrouperResultReceivers, dimensionsWithParameterProvidersForCubicRegression); + GPSFixMovingWithPolarContext.class, executor, regressionPerCourseGrouperResultReceivers, parameterizedDimensionsForCubicRegression); ClusterGroup angleClusterGroup = createAngleClusterGroup(); speedRegressionPerAngleClusterProcessor = new SpeedRegressionPerAngleClusterProcessor(angleClusterGroup); Collection, ?>> regressionPerAngleClusterGrouperResultReceivers = new ArrayList, ?>>(); regressionPerAngleClusterGrouperResultReceivers.add(speedRegressionPerAngleClusterProcessor); - Collection, ParameterProvider>> dimensionsWithParameterProvidersForRegressionPerAngleCluster = new ArrayList<>(); + Collection> parameterizedDimensionsForRegressionPerAngleCluster = new ArrayList<>(); for (Function function : PolarDataDimensionCollectionFactory.getSpeedRegressionPerAngleClusterClusterKeyDimensions()) { - dimensionsWithParameterProvidersForRegressionPerAngleCluster.add(new Pair, ParameterProvider>(function, ParameterProvider.NULL)); + parameterizedDimensionsForRegressionPerAngleCluster.add(new SimpleParameterizedFunction<>(function, ParameterProvider.NULL)); } Processor> regressionPerAngleClusterGroupingProcessor = new ParallelMultiDimensionsValueNestingGroupingProcessor( - GPSFixMovingWithPolarContext.class, executor, regressionPerAngleClusterGrouperResultReceivers, dimensionsWithParameterProvidersForRegressionPerAngleCluster); + GPSFixMovingWithPolarContext.class, executor, regressionPerAngleClusterGrouperResultReceivers, parameterizedDimensionsForRegressionPerAngleCluster); Collection> filteringResultReceivers = new ArrayList<>(); diff --git a/java/com.sap.sse.datamining.test/src/com/sap/sse/datamining/impl/TestDimensionsValuesQuery.java b/java/com.sap.sse.datamining.test/src/com/sap/sse/datamining/impl/TestDimensionsValuesQuery.java index 92d863c8192..de5eaa64cdb 100644 --- a/java/com.sap.sse.datamining.test/src/com/sap/sse/datamining/impl/TestDimensionsValuesQuery.java +++ b/java/com.sap.sse.datamining.test/src/com/sap/sse/datamining/impl/TestDimensionsValuesQuery.java @@ -14,14 +14,15 @@ import java.util.concurrent.ExecutionException; import org.junit.Before; import org.junit.Test; -import com.sap.sse.common.Util.Pair; import com.sap.sse.datamining.DataRetrieverChainBuilder; import com.sap.sse.datamining.DataRetrieverChainDefinition; import com.sap.sse.datamining.Query; import com.sap.sse.datamining.components.Processor; import com.sap.sse.datamining.functions.Function; import com.sap.sse.datamining.functions.ParameterProvider; +import com.sap.sse.datamining.functions.ParameterizedFunction; import com.sap.sse.datamining.impl.components.GroupedDataEntry; +import com.sap.sse.datamining.impl.functions.SimpleParameterizedFunction; import com.sap.sse.datamining.shared.GroupKey; import com.sap.sse.datamining.shared.QueryResult; import com.sap.sse.datamining.shared.dto.FunctionDTO; @@ -75,16 +76,16 @@ public class TestDimensionsValuesQuery { protected Processor, ?> createFirstProcessor() { Processor, Map>> resultCollector = ComponentTestsUtil.getProcessorFactory().createGroupedDataCollectingAsSetProcessor(this); - Collection, ParameterProvider>> legDimensions = new ArrayList<>(); - legDimensions.add(new Pair<>(dimensionLegNumber, ParameterProvider.NULL)); - legDimensions.add(new Pair<>(dimensionCompetitorName, ParameterProvider.NULL)); - legDimensions.add(new Pair<>(dimensionCompetitorSailID, ParameterProvider.NULL)); + Collection> legDimensions = new ArrayList<>(); + legDimensions.add(new SimpleParameterizedFunction<>(dimensionLegNumber, ParameterProvider.NULL)); + legDimensions.add(new SimpleParameterizedFunction<>(dimensionCompetitorName, ParameterProvider.NULL)); + legDimensions.add(new SimpleParameterizedFunction<>(dimensionCompetitorSailID, ParameterProvider.NULL)); - Collection, ParameterProvider>> raceDimensions = new ArrayList<>(); - raceDimensions.add(new Pair<>(dimensionRegattaName, ParameterProvider.NULL)); - raceDimensions.add(new Pair<>(dimensionRaceName, ParameterProvider.NULL)); - raceDimensions.add(new Pair<>(dimensionBoatClassName, ParameterProvider.NULL)); - raceDimensions.add(new Pair<>(dimensionYear, ParameterProvider.NULL)); + Collection> raceDimensions = new ArrayList<>(); + raceDimensions.add(new SimpleParameterizedFunction<>(dimensionRegattaName, ParameterProvider.NULL)); + raceDimensions.add(new SimpleParameterizedFunction<>(dimensionRaceName, ParameterProvider.NULL)); + raceDimensions.add(new SimpleParameterizedFunction<>(dimensionBoatClassName, ParameterProvider.NULL)); + raceDimensions.add(new SimpleParameterizedFunction<>(dimensionYear, ParameterProvider.NULL)); DataRetrieverChainBuilder> chainBuilder = dataRetrieverChainDefinition.startBuilding(ConcurrencyTestsUtil.getExecutor()); chainBuilder.stepFurther(); //Initialization diff --git a/java/com.sap.sse.datamining.test/src/com/sap/sse/datamining/impl/TestProcessorQuery.java b/java/com.sap.sse.datamining.test/src/com/sap/sse/datamining/impl/TestProcessorQuery.java index a905a94f75a..de304cd59a6 100644 --- a/java/com.sap.sse.datamining.test/src/com/sap/sse/datamining/impl/TestProcessorQuery.java +++ b/java/com.sap.sse.datamining.test/src/com/sap/sse/datamining/impl/TestProcessorQuery.java @@ -21,7 +21,6 @@ import java.util.logging.Logger; import org.junit.Test; -import com.sap.sse.common.Util.Pair; import com.sap.sse.datamining.AdditionalQueryData; import com.sap.sse.datamining.AdditionalResultDataBuilder; import com.sap.sse.datamining.Query; @@ -31,12 +30,14 @@ import com.sap.sse.datamining.components.Processor; import com.sap.sse.datamining.factories.ProcessorFactory; import com.sap.sse.datamining.functions.Function; import com.sap.sse.datamining.functions.ParameterProvider; +import com.sap.sse.datamining.functions.ParameterizedFunction; import com.sap.sse.datamining.impl.components.AbstractProcessorInstruction; import com.sap.sse.datamining.impl.components.AbstractSimpleParallelProcessor; import com.sap.sse.datamining.impl.components.AbstractSimpleRetrievalProcessor; import com.sap.sse.datamining.impl.components.GroupedDataEntry; import com.sap.sse.datamining.impl.components.ParallelFilteringProcessor; import com.sap.sse.datamining.impl.criterias.AbstractFilterCriterion; +import com.sap.sse.datamining.impl.functions.SimpleParameterizedFunction; import com.sap.sse.datamining.shared.GroupKey; import com.sap.sse.datamining.shared.QueryResult; import com.sap.sse.datamining.shared.QueryResultState; @@ -122,9 +123,9 @@ public class TestProcessorQuery { Function getCrossSumFunction = FunctionTestsUtil.getFunctionFactory().createMethodWrappingFunction(getCrossSumMethod); Processor, GroupedDataEntry> crossSumExtractor = processorFactory.createExtractionProcessor(sumAggregator, getCrossSumFunction, ParameterProvider.NULL); - List, ParameterProvider>> dimensions = new ArrayList<>(); + List> dimensions = new ArrayList<>(); Function getLengthFunction = FunctionTestsUtil.getFunctionFactory().createMethodWrappingFunction(FunctionTestsUtil.getMethodFromClass(Number.class, "getLength")); - dimensions.add(new Pair<>(getLengthFunction, ParameterProvider.NULL)); + dimensions.add(new SimpleParameterizedFunction<>(getLengthFunction, ParameterProvider.NULL)); Processor> lengthGrouper = processorFactory.createGroupingProcessor(Number.class, crossSumExtractor, dimensions); Collection> filtrationResultReceivers = new ArrayList<>(); filtrationResultReceivers.add(lengthGrouper); diff --git a/java/com.sap.sse.datamining.test/src/com/sap/sse/datamining/impl/components/TestParallelMultiDimensionalGroupingProcessor.java b/java/com.sap.sse.datamining.test/src/com/sap/sse/datamining/impl/components/TestParallelMultiDimensionalGroupingProcessor.java index 042dcd07834..a5c764453f1 100644 --- a/java/com.sap.sse.datamining.test/src/com/sap/sse/datamining/impl/components/TestParallelMultiDimensionalGroupingProcessor.java +++ b/java/com.sap.sse.datamining.test/src/com/sap/sse/datamining/impl/components/TestParallelMultiDimensionalGroupingProcessor.java @@ -11,12 +11,12 @@ import java.util.List; import org.junit.Before; import org.junit.Test; -import com.sap.sse.common.Util.Pair; import com.sap.sse.datamining.components.Processor; import com.sap.sse.datamining.factories.ProcessorFactory; -import com.sap.sse.datamining.functions.Function; import com.sap.sse.datamining.functions.ParameterProvider; +import com.sap.sse.datamining.functions.ParameterizedFunction; import com.sap.sse.datamining.impl.functions.MethodWrappingFunction; +import com.sap.sse.datamining.impl.functions.SimpleParameterizedFunction; import com.sap.sse.datamining.shared.GroupKey; import com.sap.sse.datamining.shared.impl.GenericGroupKey; import com.sap.sse.datamining.shared.impl.NestingCompoundGroupKey; @@ -48,9 +48,9 @@ public class TestParallelMultiDimensionalGroupingProcessor { receivers = new ArrayList<>(); receivers.add(receiver); - List, ParameterProvider>> dimensions = new ArrayList<>(); - dimensions.add(new Pair<>(new MethodWrappingFunction<>(Number.class.getMethod("getLength", new Class[0]), int.class), ParameterProvider.NULL)); - dimensions.add(new Pair<>(new MethodWrappingFunction<>(Number.class.getMethod("getCrossSum", new Class[0]), int.class), ParameterProvider.NULL)); + List> dimensions = new ArrayList<>(); + dimensions.add(new SimpleParameterizedFunction<>(new MethodWrappingFunction<>(Number.class.getMethod("getLength", new Class[0]), int.class), ParameterProvider.NULL)); + dimensions.add(new SimpleParameterizedFunction<>(new MethodWrappingFunction<>(Number.class.getMethod("getCrossSum", new Class[0]), int.class), ParameterProvider.NULL)); processor = ComponentTestsUtil.getProcessorFactory().createGroupingProcessor(Number.class, receivers, dimensions); } @@ -62,15 +62,15 @@ public class TestParallelMultiDimensionalGroupingProcessor { @Test(expected=IllegalArgumentException.class) public void testConstructionWithEmptyDimensions() { - List, ParameterProvider>> dimensions = new ArrayList<>(); + List> dimensions = new ArrayList<>(); processorFactory.createGroupingProcessor(Number.class, receivers, dimensions); } @Test(expected=IllegalArgumentException.class) public void testConstructionWithFunctionsInsteadOfDimensions() { - List, ParameterProvider>> functions = new ArrayList<>(); + List> functions = new ArrayList<>(); Method method = FunctionTestsUtil.getMethodFromSimpleClassWithMarkedMethod("sideEffectFreeValue"); - functions.add(new Pair<>(FunctionTestsUtil.getFunctionFactory().createMethodWrappingFunction(method), ParameterProvider.NULL)); + functions.add(new SimpleParameterizedFunction<>(FunctionTestsUtil.getFunctionFactory().createMethodWrappingFunction(method), ParameterProvider.NULL)); processorFactory.createGroupingProcessor(Number.class, receivers, functions); } diff --git a/java/com.sap.sse.datamining/src/com/sap/sse/datamining/factories/ProcessorFactory.java b/java/com.sap.sse.datamining/src/com/sap/sse/datamining/factories/ProcessorFactory.java index fa152dfc387..6c9ce986bbd 100644 --- a/java/com.sap.sse.datamining/src/com/sap/sse/datamining/factories/ProcessorFactory.java +++ b/java/com.sap.sse.datamining/src/com/sap/sse/datamining/factories/ProcessorFactory.java @@ -8,18 +8,18 @@ import java.util.Map; import java.util.Set; import java.util.concurrent.ExecutorService; -import com.sap.sse.common.Util.Pair; import com.sap.sse.datamining.components.Processor; import com.sap.sse.datamining.functions.Function; import com.sap.sse.datamining.functions.ParameterProvider; +import com.sap.sse.datamining.functions.ParameterizedFunction; import com.sap.sse.datamining.impl.ProcessorQuery; import com.sap.sse.datamining.impl.components.GroupedDataEntry; import com.sap.sse.datamining.impl.components.ParallelByDimensionGroupingProcessor; import com.sap.sse.datamining.impl.components.ParallelGroupedElementsValueExtractionProcessor; import com.sap.sse.datamining.impl.components.ParallelMultiDimensionsValueNestingGroupingProcessor; import com.sap.sse.datamining.impl.components.aggregators.ParallelGroupedDataCollectingAsSetProcessor; -import com.sap.sse.datamining.impl.components.aggregators.ParallelGroupedDoubleDataAverageAggregationProcessor; import com.sap.sse.datamining.impl.components.aggregators.ParallelGroupedDataCountAggregationProcessor; +import com.sap.sse.datamining.impl.components.aggregators.ParallelGroupedDoubleDataAverageAggregationProcessor; import com.sap.sse.datamining.impl.components.aggregators.ParallelGroupedDoubleDataMaxAggregationProcessor; import com.sap.sse.datamining.impl.components.aggregators.ParallelGroupedDoubleDataMedianAggregationProcessor; import com.sap.sse.datamining.impl.components.aggregators.ParallelGroupedDoubleDataMinAggregationProcessor; @@ -101,18 +101,21 @@ public class ProcessorFactory { /** * Creates a grouping processor with the given extraction processor as result receiver. */ - public Processor> createGroupingProcessor(Class dataType, Processor, ?> extractionProcessor, Iterable, ParameterProvider>> dimensionsToGroupByWithParameterProvider) { + public Processor> createGroupingProcessor(Class dataType, Processor, ?> extractionProcessor, + Iterable> parameterizedDimensions) { Collection, ?>> resultReceivers = new ArrayList<>(); resultReceivers.add(extractionProcessor); - return createGroupingProcessor(dataType, resultReceivers, dimensionsToGroupByWithParameterProvider); + return createGroupingProcessor(dataType, resultReceivers, parameterizedDimensions); } - public Processor> createGroupingProcessor(Class dataType, Collection, ?>> resultReceivers, Iterable, ParameterProvider>> dimensionsToGroupByWithParameterProvider) { - return new ParallelMultiDimensionsValueNestingGroupingProcessor<>(dataType, executor, resultReceivers, dimensionsToGroupByWithParameterProvider); + public Processor> createGroupingProcessor(Class dataType, Collection, ?>> resultReceivers, + Iterable> parameterizedDimensions) { + return new ParallelMultiDimensionsValueNestingGroupingProcessor<>(dataType, executor, resultReceivers, parameterizedDimensions); } - public Processor> createGroupingProcessorWithParameter(Class dataType, Collection, ?>> resultReceivers, List, ParameterProvider>> dimensionsToGroupByWithParameterProvider) { - return new ParallelMultiDimensionsValueNestingGroupingProcessor(dataType, executor, resultReceivers, dimensionsToGroupByWithParameterProvider); + public Processor> createGroupingProcessorWithParameter(Class dataType, Collection, ?>> resultReceivers, + List> parameterizedDimensions) { + return new ParallelMultiDimensionsValueNestingGroupingProcessor(dataType, executor, resultReceivers, parameterizedDimensions); } /** @@ -120,18 +123,18 @@ public class ProcessorFactory { */ @SuppressWarnings("unchecked") public Collection>> createGroupingExtractorsForDimensions(Class dataType, - Processor, ?> valueCollector, Iterable, ParameterProvider>> dimensionsToGroupByWithParameterProvider, + Processor, ?> valueCollector, Iterable> parameterizedDimensions, ResourceBundleStringMessages stringMessages, Locale locale) { Collection, ?>> extractionResultReceivers = new ArrayList<>(); extractionResultReceivers.add(valueCollector); Collection>> groupingExtractors = new ArrayList<>(); - for (Pair, ParameterProvider> dimensionWithParameterProvider : dimensionsToGroupByWithParameterProvider) { - Processor, GroupedDataEntry> dimensionValueExtractor = createExtractionProcessor(extractionResultReceivers, (Function) dimensionWithParameterProvider.getA(), dimensionWithParameterProvider.getB()); + for (ParameterizedFunction parameterizedDimension : parameterizedDimensions) { + Processor, GroupedDataEntry> dimensionValueExtractor = createExtractionProcessor(extractionResultReceivers, (Function) parameterizedDimension.getFunction(), parameterizedDimension.getParameterProvider()); Collection, ?>> groupingResultReceivers = new ArrayList<>(); groupingResultReceivers.add(dimensionValueExtractor); - Processor> byDimensionGrouper = new ParallelByDimensionGroupingProcessor<>(dataType, executor, groupingResultReceivers, dimensionWithParameterProvider.getA(), stringMessages, locale); + Processor> byDimensionGrouper = new ParallelByDimensionGroupingProcessor<>(dataType, executor, groupingResultReceivers, parameterizedDimension, stringMessages, locale); groupingExtractors.add(byDimensionGrouper); } return groupingExtractors; 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 f09da22d822..cc296c0bea4 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 @@ -10,16 +10,16 @@ import java.util.Map.Entry; import java.util.Set; import java.util.concurrent.ExecutorService; -import com.sap.sse.common.Util.Pair; import com.sap.sse.datamining.DataRetrieverChainBuilder; import com.sap.sse.datamining.DataRetrieverChainDefinition; import com.sap.sse.datamining.Query; -import com.sap.sse.datamining.QueryDefinition; import com.sap.sse.datamining.Query.QueryType; +import com.sap.sse.datamining.QueryDefinition; import com.sap.sse.datamining.components.FilterCriterion; import com.sap.sse.datamining.components.Processor; import com.sap.sse.datamining.functions.Function; import com.sap.sse.datamining.functions.ParameterProvider; +import com.sap.sse.datamining.functions.ParameterizedFunction; import com.sap.sse.datamining.impl.ProcessorQuery; import com.sap.sse.datamining.impl.SimpleAdditionalQueryData; import com.sap.sse.datamining.impl.components.GroupedDataEntry; @@ -27,6 +27,7 @@ import com.sap.sse.datamining.impl.criterias.AndCompoundFilterCriterion; import com.sap.sse.datamining.impl.criterias.CompoundFilterCriterion; import com.sap.sse.datamining.impl.criterias.FunctionValuesFilterCriterion; import com.sap.sse.datamining.impl.functions.LocalizationParameterProvider; +import com.sap.sse.datamining.impl.functions.SimpleParameterizedFunction; import com.sap.sse.datamining.shared.GroupKey; import com.sap.sse.i18n.ResourceBundleStringMessages; @@ -64,10 +65,10 @@ public class QueryFactory { }; } - private Iterable, ParameterProvider>> getParameterProvidersFor(Iterable> functions, ResourceBundleStringMessages stringMessages, Locale locale) { - Collection, ParameterProvider>> functionsWithParameterProvider = new ArrayList<>(); + private Iterable> getParameterProvidersFor(Iterable> functions, ResourceBundleStringMessages stringMessages, Locale locale) { + Collection> functionsWithParameterProvider = new ArrayList<>(); for (Function function : functions) { - functionsWithParameterProvider.add(new Pair<>(function, getParameterProviderFor(function, stringMessages, locale))); + functionsWithParameterProvider.add(new SimpleParameterizedFunction<>(function, getParameterProviderFor(function, stringMessages, locale))); } return functionsWithParameterProvider; } diff --git a/java/com.sap.sse.datamining/src/com/sap/sse/datamining/functions/ParameterizedFunction.java b/java/com.sap.sse.datamining/src/com/sap/sse/datamining/functions/ParameterizedFunction.java new file mode 100644 index 00000000000..ae7d067aba8 --- /dev/null +++ b/java/com.sap.sse.datamining/src/com/sap/sse/datamining/functions/ParameterizedFunction.java @@ -0,0 +1,18 @@ +package com.sap.sse.datamining.functions; + +import java.lang.reflect.InvocationTargetException; + +public interface ParameterizedFunction { + + public Function getFunction(); + public ParameterProvider getParameterProvider(); + + /** + * Tries to invoke the function for the given instance with parameters of the {@link ParameterProvider}. + * + * @return The result of the function or null, if an {@link InvocationTargetException}, + * {@link IllegalAccessException} or {@link IllegalArgumentException} was thrown. + */ + public ReturnType tryToInvoke(Object instance); + +} diff --git a/java/com.sap.sse.datamining/src/com/sap/sse/datamining/impl/components/AbstractParallelMultiDimensionalNestingGroupingProcessor.java b/java/com.sap.sse.datamining/src/com/sap/sse/datamining/impl/components/AbstractParallelMultiDimensionalNestingGroupingProcessor.java index 3265d2deb48..ca231eddc7f 100644 --- a/java/com.sap.sse.datamining/src/com/sap/sse/datamining/impl/components/AbstractParallelMultiDimensionalNestingGroupingProcessor.java +++ b/java/com.sap.sse.datamining/src/com/sap/sse/datamining/impl/components/AbstractParallelMultiDimensionalNestingGroupingProcessor.java @@ -4,39 +4,39 @@ import java.util.Collection; import java.util.Iterator; import java.util.concurrent.ExecutorService; -import com.sap.sse.common.Util.Pair; import com.sap.sse.datamining.AdditionalResultDataBuilder; import com.sap.sse.datamining.components.Processor; import com.sap.sse.datamining.functions.Function; import com.sap.sse.datamining.functions.ParameterProvider; +import com.sap.sse.datamining.functions.ParameterizedFunction; import com.sap.sse.datamining.shared.GroupKey; import com.sap.sse.datamining.shared.impl.NestingCompoundGroupKey; public abstract class AbstractParallelMultiDimensionalNestingGroupingProcessor extends AbstractSimpleParallelProcessor> { - private Iterable, ParameterProvider>> dimensionsWithParameterProvider; + private Iterable> parameterizedDimensions; @SuppressWarnings("unchecked") public AbstractParallelMultiDimensionalNestingGroupingProcessor(Class dataType, ExecutorService executor, Collection, ?>> resultReceivers, - Iterable, ParameterProvider>> dimensionsWithParameterProvider) { + Iterable> parameterizedDimensions) { super(dataType, (Class>)(Class) GroupedDataEntry.class, executor, resultReceivers); - verifyThatDimensionsAreDimensions(dimensionsWithParameterProvider); - this.dimensionsWithParameterProvider = dimensionsWithParameterProvider; + verifyThatDimensionsAreDimensions(parameterizedDimensions); + this.parameterizedDimensions = parameterizedDimensions; } - private void verifyThatDimensionsAreDimensions(Iterable, ParameterProvider>> dimensionsWithParameterProvider) { - if (dimensionsWithParameterProvider == null) { + private void verifyThatDimensionsAreDimensions(Iterable> parameterizedDimensions) { + if (parameterizedDimensions == null) { throw new IllegalArgumentException("The given dimensions mustn't be null."); } int size = 0; - for (Pair, ParameterProvider> possibleDimension : dimensionsWithParameterProvider) { + for (ParameterizedFunction possibleParameterizedDimension : parameterizedDimensions) { size++; - if (!possibleDimension.getA().isDimension()) { - throw new IllegalArgumentException("The given function " + possibleDimension.getA().toString() + " is no dimension."); + if (!possibleParameterizedDimension.getFunction().isDimension()) { + throw new IllegalArgumentException("The given function " + possibleParameterizedDimension.getFunction().toString() + " is no dimension."); } } @@ -50,15 +50,14 @@ public abstract class AbstractParallelMultiDimensionalNestingGroupingProcessor>(this, ProcessorInstructionPriority.Grouping) { @Override public GroupedDataEntry computeResult() { - return new GroupedDataEntry(createCompoundKeyFor(element, - dimensionsWithParameterProvider.iterator()), element); + return new GroupedDataEntry(createCompoundKeyFor(element, parameterizedDimensions.iterator()), element); } }; } - private GroupKey createCompoundKeyFor(DataType input, Iterator, ParameterProvider>> dimensionsIterator) { - Pair, ParameterProvider> mainDimension = dimensionsIterator.next(); - GroupKey key = createGroupKeyFor(input, mainDimension.getA(), mainDimension.getB()); + private GroupKey createCompoundKeyFor(DataType input, Iterator> dimensionsIterator) { + ParameterizedFunction mainDimension = dimensionsIterator.next(); + GroupKey key = createGroupKeyFor(input, mainDimension.getFunction(), mainDimension.getParameterProvider()); if (dimensionsIterator.hasNext()) { key = new NestingCompoundGroupKey(key, createCompoundKeyFor(input, dimensionsIterator)); } diff --git a/java/com.sap.sse.datamining/src/com/sap/sse/datamining/impl/components/ParallelByDimensionGroupingProcessor.java b/java/com.sap.sse.datamining/src/com/sap/sse/datamining/impl/components/ParallelByDimensionGroupingProcessor.java index 4e913a35e2c..6016d90399a 100644 --- a/java/com.sap.sse.datamining/src/com/sap/sse/datamining/impl/components/ParallelByDimensionGroupingProcessor.java +++ b/java/com.sap.sse.datamining/src/com/sap/sse/datamining/impl/components/ParallelByDimensionGroupingProcessor.java @@ -5,11 +5,11 @@ import java.util.Collection; import java.util.Locale; import java.util.concurrent.ExecutorService; -import com.sap.sse.common.Util.Pair; import com.sap.sse.datamining.components.Processor; import com.sap.sse.datamining.factories.FunctionDTOFactory; import com.sap.sse.datamining.functions.Function; import com.sap.sse.datamining.functions.ParameterProvider; +import com.sap.sse.datamining.functions.ParameterizedFunction; import com.sap.sse.datamining.shared.GroupKey; import com.sap.sse.datamining.shared.dto.FunctionDTO; import com.sap.sse.datamining.shared.impl.GenericGroupKey; @@ -31,18 +31,18 @@ public class ParallelByDimensionGroupingProcessor extends public ParallelByDimensionGroupingProcessor(Class dataType, ExecutorService executor, Collection, ?>> resultReceivers, - Function dimension, + ParameterizedFunction parameterizedDimension, ResourceBundleStringMessages stringMessages, Locale locale) { - super(dataType, executor, resultReceivers, asIterable(dimension)); + super(dataType, executor, resultReceivers, asIterable(parameterizedDimension)); this.stringMessages = stringMessages; this.locale = locale; functionDTOFactory = new FunctionDTOFactory(); } - private static Iterable, ParameterProvider>> asIterable(Function dimension) { - Collection, ParameterProvider>> collection = new ArrayList<>(); - collection.add(new Pair, ParameterProvider>(dimension, ParameterProvider.NULL)); + private static Iterable> asIterable(ParameterizedFunction parameterizedDimension) { + Collection> collection = new ArrayList<>(); + collection.add(parameterizedDimension); return collection; } diff --git a/java/com.sap.sse.datamining/src/com/sap/sse/datamining/impl/components/ParallelMultiDimensionsValueNestingGroupingProcessor.java b/java/com.sap.sse.datamining/src/com/sap/sse/datamining/impl/components/ParallelMultiDimensionsValueNestingGroupingProcessor.java index f2e0ab0e641..dad4369dcde 100644 --- a/java/com.sap.sse.datamining/src/com/sap/sse/datamining/impl/components/ParallelMultiDimensionsValueNestingGroupingProcessor.java +++ b/java/com.sap.sse.datamining/src/com/sap/sse/datamining/impl/components/ParallelMultiDimensionsValueNestingGroupingProcessor.java @@ -3,10 +3,10 @@ package com.sap.sse.datamining.impl.components; import java.util.Collection; import java.util.concurrent.ExecutorService; -import com.sap.sse.common.Util.Pair; import com.sap.sse.datamining.components.Processor; import com.sap.sse.datamining.functions.Function; import com.sap.sse.datamining.functions.ParameterProvider; +import com.sap.sse.datamining.functions.ParameterizedFunction; import com.sap.sse.datamining.shared.GroupKey; import com.sap.sse.datamining.shared.impl.GenericGroupKey; @@ -25,8 +25,8 @@ public class ParallelMultiDimensionsValueNestingGroupingProcessor public ParallelMultiDimensionsValueNestingGroupingProcessor(Class dataType, ExecutorService executor, Collection, ?>> resultReceivers, - Iterable, ParameterProvider>> dimensionsWithParameterProvider) { - super(dataType, executor, resultReceivers, dimensionsWithParameterProvider); + Iterable> parameterizedDimensions) { + super(dataType, executor, resultReceivers, parameterizedDimensions); } protected GroupKey createGroupKeyFor(DataType input, Function dimension, ParameterProvider parameterProvider) { diff --git a/java/com.sap.sse.datamining/src/com/sap/sse/datamining/impl/functions/SimpleParameterizedFunction.java b/java/com.sap.sse.datamining/src/com/sap/sse/datamining/impl/functions/SimpleParameterizedFunction.java new file mode 100644 index 00000000000..ae90e303511 --- /dev/null +++ b/java/com.sap.sse.datamining/src/com/sap/sse/datamining/impl/functions/SimpleParameterizedFunction.java @@ -0,0 +1,32 @@ +package com.sap.sse.datamining.impl.functions; + +import com.sap.sse.datamining.functions.Function; +import com.sap.sse.datamining.functions.ParameterProvider; +import com.sap.sse.datamining.functions.ParameterizedFunction; + +public class SimpleParameterizedFunction implements ParameterizedFunction { + + private final Function function; + private final ParameterProvider parameterProvider; + + public SimpleParameterizedFunction(Function function, ParameterProvider parameterProvider) { + this.function = function; + this.parameterProvider = parameterProvider; + } + + @Override + public Function getFunction() { + return function; + } + + @Override + public ParameterProvider getParameterProvider() { + return parameterProvider; + } + + @Override + public ReturnType tryToInvoke(Object instance) { + return function.tryToInvoke(instance, parameterProvider); + } + +}