Implemented new clusters and their boundaries

This commit is contained in:
Lennart Hensler committed 2014-03-10 13:51:50 +01:00
1 parent f0d29c4555
commit 28769df713
38 files changed
+283 -52

No files matched your search

@@ -1,25 +1,25 @@
package com.sap.sailing.datamining.shared;
import com.sap.sse.datamining.components.ValueType;
import com.sap.sse.datamining.components.ElementType;
import com.sap.sse.datamining.shared.Message;
import com.sap.sse.datamining.shared.Unit;
public enum StatisticType {
Speed(ValueType.Double, Unit.Knots, 2),
Distance(ValueType.Double, Unit.Meters, 2);
Speed(ElementType.Double, Unit.Knots, 2),
Distance(ElementType.Double, Unit.Meters, 2);
private final ValueType valueType;
private final ElementType valueType;
private final Unit unit;
private final int valueDecimals;
private StatisticType(ValueType valueType, Unit unit, int valueDecimals) {
private StatisticType(ElementType valueType, Unit unit, int valueDecimals) {
this.valueType = valueType;
this.unit = unit;
this.valueDecimals = valueDecimals;
}
public ValueType getValueType() {
public ElementType getValueType() {
return valueType;
}
@@ -8,8 +8,8 @@ import static org.junit.Assert.assertTrue;
import org.junit.Test;
import com.sap.sailing.datamining.Clusters;
import com.sap.sse.datamining.data.ClusterOfComparable;
import com.sap.sse.datamining.impl.data.ClusterOfComparableImpl;
import com.sap.sse.datamining.data.deprecated.ClusterOfComparable;
import com.sap.sse.datamining.impl.data.deprecated.ClusterOfComparableImpl;
public class TestClusters {
@@ -1,6 +1,6 @@
package com.sap.sailing.datamining;
import com.sap.sse.datamining.data.ClusterOfComparable;
import com.sap.sse.datamining.data.deprecated.ClusterOfComparable;
public interface WindStrengthCluster extends ClusterOfComparable<Double> {
@@ -1,7 +1,7 @@
package com.sap.sailing.datamining.dimensions;
import com.sap.sailing.datamining.shared.DimensionIdentifier;
import com.sap.sse.datamining.data.Dimension;
import com.sap.sse.datamining.data.deprecated.Dimension;
public interface DimensionManager<DataType> {
@@ -3,8 +3,8 @@ package com.sap.sailing.datamining.dimensions;
import com.sap.sailing.datamining.data.GPSFixWithContext;
import com.sap.sailing.datamining.shared.DimensionIdentifier;
import com.sap.sailing.domain.common.LegType;
import com.sap.sse.datamining.data.Dimension;
import com.sap.sse.datamining.impl.data.AbstractDimension;
import com.sap.sse.datamining.data.deprecated.Dimension;
import com.sap.sse.datamining.impl.data.deprecated.AbstractDimension;
public final class GPSFixDimensionManager implements DimensionManager<GPSFixWithContext> {
@@ -3,8 +3,8 @@ package com.sap.sailing.datamining.dimensions;
import com.sap.sailing.datamining.data.TrackedLegOfCompetitorWithContext;
import com.sap.sailing.datamining.shared.DimensionIdentifier;
import com.sap.sailing.domain.common.LegType;
import com.sap.sse.datamining.data.Dimension;
import com.sap.sse.datamining.impl.data.AbstractDimension;
import com.sap.sse.datamining.data.deprecated.Dimension;
import com.sap.sse.datamining.impl.data.deprecated.AbstractDimension;
public final class TrackedLegOfCompetitorDimensionManager implements DimensionManager<TrackedLegOfCompetitorWithContext> {
@@ -11,7 +11,7 @@ import com.sap.sailing.datamining.shared.DataTypes;
import com.sap.sailing.datamining.shared.DimensionIdentifier;
import com.sap.sse.datamining.components.FilterCriteria;
import com.sap.sse.datamining.components.ParallelFilter;
import com.sap.sse.datamining.data.Dimension;
import com.sap.sse.datamining.data.deprecated.Dimension;
import com.sap.sse.datamining.impl.components.deprecated.NonFilteringFilter;
import com.sap.sse.datamining.impl.components.deprecated.PartitioningParallelFilter;
import com.sap.sse.datamining.impl.criterias.AndCompoundFilterCriteria;
@@ -11,7 +11,7 @@ import com.sap.sailing.datamining.shared.DataTypes;
import com.sap.sailing.datamining.shared.DimensionIdentifier;
import com.sap.sailing.datamining.shared.QueryDefinition;
import com.sap.sse.datamining.components.ParallelGrouper;
import com.sap.sse.datamining.data.Dimension;
import com.sap.sse.datamining.data.deprecated.Dimension;
import com.sap.sse.datamining.impl.components.deprecated.PartitioningParallelGrouper;
import com.sap.sse.datamining.impl.workers.builders.MultiDimensionalGroupingWorkerBuilder;
import com.sap.sse.datamining.workers.GroupingWorker;
@@ -2,7 +2,7 @@ package com.sap.sailing.datamining.impl;
import com.sap.sailing.datamining.WindStrengthCluster;
import com.sap.sse.datamining.impl.data.ClusterOfComparableImpl;
import com.sap.sse.datamining.impl.data.deprecated.ClusterOfComparableImpl;
public class WindStrengthClusterImpl extends ClusterOfComparableImpl<Double> implements WindStrengthCluster {
@@ -1,5 +1,5 @@
package com.sap.sse.datamining.components;
public enum ValueType {
public enum ElementType {
Integer, Double
}
@@ -11,11 +11,11 @@ import java.util.Collection;
import org.junit.Test;
import com.sap.sse.datamining.components.FilterCriteria;
import com.sap.sse.datamining.data.ClusterOfComparable;
import com.sap.sse.datamining.data.deprecated.ClusterOfComparable;
import com.sap.sse.datamining.factories.FunctionFactory;
import com.sap.sse.datamining.functions.Function;
import com.sap.sse.datamining.impl.criterias.deprecated.SimpleRangeFilterCriteria;
import com.sap.sse.datamining.impl.data.ClusterOfComparableImpl;
import com.sap.sse.datamining.impl.data.deprecated.ClusterOfComparableImpl;
import com.sap.sse.datamining.test.function.test_classes.DataTypeWithContext;
import com.sap.sse.datamining.test.function.test_classes.DataTypeWithContextImpl;
import com.sap.sse.datamining.test.util.FunctionTestsUtil;
@@ -0,0 +1,50 @@
package com.sap.sse.datamining.impl.data;
import static org.hamcrest.Matchers.is;
import static org.junit.Assert.*;
import java.util.Comparator;
import org.junit.Test;
import com.sap.sse.datamining.data.Cluster;
import com.sap.sse.datamining.data.ClusterBoundary;
import com.sap.sse.datamining.data.ClusterBoundary.ComparisonStrategy;
public class TestClustersWithBoundaries {
private static final Comparator<Integer> comparator = new ComparableComparator<Integer>();
private static final ClusterBoundary<Integer> lowerBound = new ComparatorClusterBoundary<Integer>(comparator, 0, ComparisonStrategy.GREATER_EQUALS_THAN);
private static final ClusterBoundary<Integer> upperBound = new ComparatorClusterBoundary<Integer>(comparator, 10, ComparisonStrategy.LOWER_THAN);
@Test
public void testClusterWithBoundaries() {
Cluster<Integer> cluster = new ClusterWithBoundaries<>("Test Cluster", lowerBound, upperBound);
assertThat(cluster.isInRange(0), is(true));
assertThat(cluster.isInRange(3), is(true));
assertThat(cluster.isInRange(7), is(true));
assertThat(cluster.isInRange(-1), is(false));
assertThat(cluster.isInRange(10), is(false));
}
@Test
public void testClusterWithSingleBoundary() {
Cluster<Integer> cluster = new ClusterWithSingleBoundary<>("Test Cluster", lowerBound);
assertThat(cluster.isInRange(0), is(true));
assertThat(cluster.isInRange(3), is(true));
assertThat(cluster.isInRange(-1), is(false));
cluster = new ClusterWithSingleBoundary<>("Test Cluster", upperBound);
assertThat(cluster.isInRange(9), is(true));
assertThat(cluster.isInRange(10), is(false));
assertThat(cluster.isInRange(11), is(false));
}
}
@@ -0,0 +1,51 @@
package com.sap.sse.datamining.impl.data;
import static org.hamcrest.Matchers.is;
import static org.junit.Assert.assertThat;
import java.util.Comparator;
import org.junit.Test;
import com.sap.sse.datamining.data.ClusterBoundary;
import com.sap.sse.datamining.data.ClusterBoundary.ComparisonStrategy;
public class TestComparatorClusterBoundary {
public static final Comparator<Integer> comparator = new ComparableComparator<Integer>();
@Test
public void testGreaterEqualsThanStrategy() {
ClusterBoundary<Integer> greaterEqualsThan5Bound = new ComparatorClusterBoundary<Integer>(comparator, 5, ComparisonStrategy.GREATER_EQUALS_THAN);
assertThat(greaterEqualsThan5Bound.contains(6), is(true));
assertThat(greaterEqualsThan5Bound.contains(5), is(true));
assertThat(greaterEqualsThan5Bound.contains(4), is(false));
}
@Test
public void testGreaterThanStrategy() {
ClusterBoundary<Integer> greaterThan5Bound = new ComparatorClusterBoundary<Integer>(comparator, 5, ComparisonStrategy.GREATER_THAN);
assertThat(greaterThan5Bound.contains(6), is(true));
assertThat(greaterThan5Bound.contains(5), is(false));
}
@Test
public void testLowerEqualsThanStrategy() {
ClusterBoundary<Integer> lowerEqualsThan5Bound = new ComparatorClusterBoundary<Integer>(comparator, 5, ComparisonStrategy.LOWER_EQUALS_THAN);
assertThat(lowerEqualsThan5Bound.contains(4), is(true));
assertThat(lowerEqualsThan5Bound.contains(5), is(true));
assertThat(lowerEqualsThan5Bound.contains(6), is(false));
}
@Test
public void testLowerThanStrategy() {
ClusterBoundary<Integer> lowerThan5Bound = new ComparatorClusterBoundary<Integer>(comparator, 5, ComparisonStrategy.LOWER_THAN);
assertThat(lowerThan5Bound.contains(4), is(true));
assertThat(lowerThan5Bound.contains(5), is(false));
}
}
@@ -12,8 +12,8 @@ import java.util.Map.Entry;
import org.junit.Test;
import com.sap.sse.datamining.data.Dimension;
import com.sap.sse.datamining.impl.data.AbstractDimension;
import com.sap.sse.datamining.data.deprecated.Dimension;
import com.sap.sse.datamining.impl.data.deprecated.AbstractDimension;
import com.sap.sse.datamining.shared.GroupKey;
import com.sap.sse.datamining.shared.impl.CompoundGroupKey;
import com.sap.sse.datamining.shared.impl.GenericGroupKey;
@@ -9,9 +9,9 @@ import java.util.List;
import org.junit.Test;
import com.sap.sse.datamining.components.FilterCriteria;
import com.sap.sse.datamining.data.ClusterOfComparable;
import com.sap.sse.datamining.data.deprecated.ClusterOfComparable;
import com.sap.sse.datamining.impl.criterias.deprecated.SimpleRangeFilterCriteria;
import com.sap.sse.datamining.impl.data.ClusterOfComparableImpl;
import com.sap.sse.datamining.impl.data.deprecated.ClusterOfComparableImpl;
import com.sap.sse.datamining.test.util.OpenDataReceiver;
import com.sap.sse.datamining.workers.FiltrationWorker;
@@ -2,7 +2,7 @@ package com.sap.sse.datamining.test.util;
import java.util.Collection;
import com.sap.sse.datamining.data.Dimension;
import com.sap.sse.datamining.data.deprecated.Dimension;
import com.sap.sse.datamining.impl.workers.MultiDimensionalGroupingWorker;
import com.sap.sse.datamining.shared.GroupKey;
import com.sap.sse.datamining.shared.impl.GenericGroupKey;
@@ -8,7 +8,7 @@ Bundle-RequiredExecutionEnvironment: JavaSE-1.7
Import-Package: org.osgi.framework;version="1.7.0"
Export-Package: com.sap.sse.datamining;uses:="com.sap.sse.datamining.functions,com.sap.sse.datamining.shared",
com.sap.sse.datamining.components;uses:="com.sap.sse.datamining.shared",
com.sap.sse.datamining.data,
com.sap.sse.datamining.data.deprecated,
com.sap.sse.datamining.factories;uses:="com.sap.sse.datamining.impl.functions",
com.sap.sse.datamining.functions;uses:="com.sap.sse.datamining.shared.dto,com.sap.sse.datamining.i18n,com.sap.sse.datamining.components",
com.sap.sse.datamining.i18n;uses:="com.sap.sse.datamining.shared",
@@ -23,7 +23,7 @@ Export-Package: com.sap.sse.datamining;uses:="com.sap.sse.datamining.functions,c
com.sap.sse.datamining.impl.components.deprecated,
com.sap.sse.datamining.impl.criterias;uses:="com.sap.sse.datamining.data,com.sap.sse.datamining.functions,com.sap.sse.datamining.components",
com.sap.sse.datamining.impl.criterias.deprecated,
com.sap.sse.datamining.impl.data;uses:="com.sap.sse.datamining.data",
com.sap.sse.datamining.impl.data.deprecated;uses:="com.sap.sse.datamining.data",
com.sap.sse.datamining.impl.deprecated,
com.sap.sse.datamining.impl.i18n;uses:="com.sap.sse.datamining.shared,com.sap.sse.datamining.i18n",
com.sap.sse.datamining.impl.workers,
@@ -1,13 +1,9 @@
package com.sap.sse.datamining.data;
import java.util.Comparator;
public interface Cluster<ValueType> {
public interface Cluster<ElementType> {
public String getName();
public ValueType getUpperRange();
public ValueType getLowerRange();
public boolean isInRange(ValueType value, Comparator<ValueType> comparator);
public boolean isInRange(ElementType value);
}
@@ -0,0 +1,11 @@
package com.sap.sse.datamining.data;
public interface ClusterBoundary<ElementType> {
public enum ComparisonStrategy {
LOWER_THAN, LOWER_EQUALS_THAN, GREATER_THAN, GREATER_EQUALS_THAN
}
public boolean contains(ElementType value);
}
@@ -0,0 +1,13 @@
package com.sap.sse.datamining.data.deprecated;
import java.util.Comparator;
public interface Cluster<ValueType> {
public String getName();
public ValueType getUpperRange();
public ValueType getLowerRange();
public boolean isInRange(ValueType value, Comparator<ValueType> comparator);
}
@@ -1,4 +1,4 @@
package com.sap.sse.datamining.data;
package com.sap.sse.datamining.data.deprecated;
public interface ClusterOfComparable<ValueType extends Comparable<ValueType>> extends Cluster<ValueType> {
@@ -1,4 +1,4 @@
package com.sap.sse.datamining.data;
package com.sap.sse.datamining.data.deprecated;
public interface Dimension<DataType, ValueType> {
@@ -5,7 +5,7 @@ import java.util.concurrent.ThreadPoolExecutor;
import com.sap.sse.datamining.components.AggregatorType;
import com.sap.sse.datamining.components.ParallelAggregator;
import com.sap.sse.datamining.components.ValueType;
import com.sap.sse.datamining.components.ElementType;
import com.sap.sse.datamining.i18n.DataMiningStringMessages;
import com.sap.sse.datamining.impl.components.deprecated.GroupDividingParallelAggregator;
import com.sap.sse.datamining.impl.workers.builders.AggregationWorkerBuilder;
@@ -18,7 +18,7 @@ public final class AggregatorFactory {
public static <ExtractedType, AggregatedType> ParallelAggregator<ExtractedType, AggregatedType> createAggregator(DataMiningStringMessages stringMessages,
Locale locale,
ValueType valueType, AggregatorType aggregatorType, ThreadPoolExecutor executor) {
ElementType valueType, AggregatorType aggregatorType, ThreadPoolExecutor executor) {
WorkerBuilder<AggregationWorker<ExtractedType, AggregatedType>> workerBuilder = new AggregationWorkerBuilder<ExtractedType, AggregatedType>(valueType, aggregatorType);
return new GroupDividingParallelAggregator<ExtractedType, AggregatedType>(stringMessages.get(locale, aggregatorType.getNameMessage()), workerBuilder, executor);
}
@@ -1,6 +1,6 @@
package com.sap.sse.datamining.impl.criterias.deprecated;
import com.sap.sse.datamining.data.Dimension;
import com.sap.sse.datamining.data.deprecated.Dimension;
import com.sap.sse.datamining.impl.criterias.RegexFilterCriteria;
public class DimensionRegexFilterCriteria<DataType> extends RegexFilterCriteria<DataType> {
@@ -4,7 +4,7 @@ import java.util.Collection;
import java.util.HashSet;
import com.sap.sse.datamining.components.FilterCriteria;
import com.sap.sse.datamining.data.Dimension;
import com.sap.sse.datamining.data.deprecated.Dimension;
public class DimensionValuesFilterCriteria<DataType, ValueType> implements FilterCriteria<DataType> {
@@ -1,7 +1,7 @@
package com.sap.sse.datamining.impl.criterias.deprecated;
import com.sap.sse.datamining.components.FilterCriteria;
import com.sap.sse.datamining.data.ClusterOfComparable;
import com.sap.sse.datamining.data.deprecated.ClusterOfComparable;
public abstract class RangeFilterCriteria<DataType, ValueType extends Comparable<ValueType>> implements FilterCriteria<DataType> {
@@ -1,6 +1,6 @@
package com.sap.sse.datamining.impl.criterias.deprecated;
import com.sap.sse.datamining.data.ClusterOfComparable;
import com.sap.sse.datamining.data.deprecated.ClusterOfComparable;
public class SimpleRangeFilterCriteria<DataType extends Comparable<DataType>> extends RangeFilterCriteria<DataType, DataType> {
@@ -0,0 +1,18 @@
package com.sap.sse.datamining.impl.data;
import com.sap.sse.datamining.data.Cluster;
public abstract class AbstractCluster<ElementType> implements Cluster<ElementType> {
protected final String name;
public AbstractCluster(String name) {
this.name = name;
}
@Override
public String getName() {
return name;
}
}
@@ -0,0 +1,22 @@
package com.sap.sse.datamining.impl.data;
import com.sap.sse.datamining.data.ClusterBoundary;
public class ClusterWithBoundaries<ElementType> extends AbstractCluster<ElementType> {
private final ClusterBoundary<ElementType> lowerBound;
private final ClusterBoundary<ElementType> upperBound;
public ClusterWithBoundaries(String name, ClusterBoundary<ElementType> lowerBound,
ClusterBoundary<ElementType> upperBound) {
super(name);
this.lowerBound = lowerBound;
this.upperBound = upperBound;
}
@Override
public boolean isInRange(ElementType value) {
return lowerBound.contains(value) && upperBound.contains(value);
}
}
@@ -0,0 +1,19 @@
package com.sap.sse.datamining.impl.data;
import com.sap.sse.datamining.data.ClusterBoundary;
public class ClusterWithSingleBoundary<ElementType> extends AbstractCluster<ElementType> {
private final ClusterBoundary<ElementType> boundary;
public ClusterWithSingleBoundary(String name, ClusterBoundary<ElementType> boundary) {
super(name);
this.boundary = boundary;
}
@Override
public boolean isInRange(ElementType value) {
return boundary.contains(value);
}
}
@@ -0,0 +1,12 @@
package com.sap.sse.datamining.impl.data;
import java.util.Comparator;
public class ComparableComparator<T extends Comparable<T>> implements Comparator<T> {
@Override
public int compare(T o1, T o2) {
return o1.compareTo(o2);
}
}
@@ -0,0 +1,39 @@
package com.sap.sse.datamining.impl.data;
import java.util.Comparator;
import com.sap.sse.datamining.data.ClusterBoundary;
public class ComparatorClusterBoundary<ElementType> implements ClusterBoundary<ElementType> {
private final Comparator<ElementType> comparator;
private final ElementType boundaryValue;
private final ComparisonStrategy strategy;
public ComparatorClusterBoundary(Comparator<ElementType> comparator, ElementType boundaryValue,
ComparisonStrategy strategy) {
this.comparator = comparator;
this.boundaryValue = boundaryValue;
this.strategy = strategy;
}
@Override
public boolean contains(ElementType value) {
return verifyComparisonResult(comparator.compare(value, boundaryValue));
}
private boolean verifyComparisonResult(int comparisonResult) {
switch (strategy) {
case GREATER_EQUALS_THAN:
return comparisonResult == 0 || comparisonResult >= 1;
case GREATER_THAN:
return comparisonResult >= 1;
case LOWER_EQUALS_THAN:
return comparisonResult == 0 || comparisonResult <= -1;
case LOWER_THAN:
return comparisonResult <= -1;
}
throw new UnsupportedOperationException("No implementation for the strategy " + strategy);
}
}
@@ -1,6 +1,6 @@
package com.sap.sse.datamining.impl.data;
package com.sap.sse.datamining.impl.data.deprecated;
import com.sap.sse.datamining.data.Dimension;
import com.sap.sse.datamining.data.deprecated.Dimension;
public abstract class AbstractDimension<DataType, ValueType> implements Dimension<DataType, ValueType> {
@@ -1,8 +1,8 @@
package com.sap.sse.datamining.impl.data;
package com.sap.sse.datamining.impl.data.deprecated;
import java.util.Comparator;
import com.sap.sse.datamining.data.Cluster;
import com.sap.sse.datamining.data.deprecated.Cluster;
public class ClusterImpl<ValueType> implements Cluster<ValueType> {
@@ -1,6 +1,6 @@
package com.sap.sse.datamining.impl.data;
package com.sap.sse.datamining.impl.data.deprecated;
import com.sap.sse.datamining.data.ClusterOfComparable;
import com.sap.sse.datamining.data.deprecated.ClusterOfComparable;
public class ClusterOfComparableImpl<ValueType extends Comparable<ValueType>> extends ClusterImpl<ValueType> implements
ClusterOfComparable<ValueType> {
@@ -4,7 +4,7 @@ import java.util.Collection;
import java.util.Iterator;
import java.util.LinkedHashSet;
import com.sap.sse.datamining.data.Dimension;
import com.sap.sse.datamining.data.deprecated.Dimension;
import com.sap.sse.datamining.shared.GroupKey;
import com.sap.sse.datamining.shared.impl.CompoundGroupKey;
import com.sap.sse.datamining.shared.impl.GenericGroupKey;
@@ -1,7 +1,7 @@
package com.sap.sse.datamining.impl.workers.builders;
import com.sap.sse.datamining.components.AggregatorType;
import com.sap.sse.datamining.components.ValueType;
import com.sap.sse.datamining.components.ElementType;
import com.sap.sse.datamining.impl.workers.aggregators.SimpleDoubleArithmeticAverageAggregationWorker;
import com.sap.sse.datamining.impl.workers.aggregators.SimpleDoubleMedianAggregationWorker;
import com.sap.sse.datamining.impl.workers.aggregators.SimpleIntegerArithmeticAverageAggregationWorker;
@@ -14,10 +14,10 @@ import com.sap.sse.datamining.workers.WorkerBuilder;
public class AggregationWorkerBuilder<ExtractedType, AggregatedType> implements WorkerBuilder<AggregationWorker<ExtractedType, AggregatedType>> {
private ValueType valueType;
private ElementType valueType;
private AggregatorType aggregatorType;
public AggregationWorkerBuilder(ValueType valueType, AggregatorType aggregatorType) {
public AggregationWorkerBuilder(ElementType valueType, AggregatorType aggregatorType) {
this.valueType = valueType;
this.aggregatorType = aggregatorType;
}
@@ -2,7 +2,7 @@ package com.sap.sse.datamining.impl.workers.builders;
import java.util.Collection;
import com.sap.sse.datamining.data.Dimension;
import com.sap.sse.datamining.data.deprecated.Dimension;
import com.sap.sse.datamining.impl.workers.MultiDimensionalGroupingWorker;
import com.sap.sse.datamining.workers.GroupingWorker;
import com.sap.sse.datamining.workers.WorkerBuilder;