Integrated the clusters in a simple way

This commit is contained in:
Lennart Hensler committed 2014-12-09 17:47:16 +01:00
1 parent cb8bde291a
commit 13ada0dd8f
8 files changed
+163 -14

No files matched your search

@@ -1,19 +1,110 @@
package com.sap.sailing.datamining;
import com.sap.sailing.domain.tracking.Wind;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Comparator;
import com.sap.sailing.domain.common.Speed;
import com.sap.sailing.domain.common.impl.KnotSpeedImpl;
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.ClusterWithSingleBoundary;
import com.sap.sse.datamining.impl.data.ComparableComparator;
import com.sap.sse.datamining.impl.data.ComparatorClusterBoundary;
import com.sap.sse.datamining.impl.data.ComparisonStrategy;
import com.sap.sse.datamining.impl.data.FixClusterGroup;
public class SailingClusterGroups {
private final ClusterGroup<Wind> windStrengthCluster;
private final ClusterGroup<Speed> windStrengthInBeaufortCluster;
public SailingClusterGroups() {
//TODO
windStrengthCluster = null;
Collection<Cluster<Speed>> clusters = new ArrayList<>();
Comparator<Speed> comparableComparator = new ComparableComparator<Speed>();
Speed lowerBoundWindSpeed = new KnotSpeedImpl(0.0);
ClusterBoundary<Speed> lowerBound = new ComparatorClusterBoundary<Speed>(comparableComparator, lowerBoundWindSpeed, ComparisonStrategy.GREATER_EQUALS_THAN);
Speed upperBoundWindSpeed = new KnotSpeedImpl(1.0);
ClusterBoundary<Speed> upperBound = new ComparatorClusterBoundary<Speed>(comparableComparator, upperBoundWindSpeed, ComparisonStrategy.LOWER_THAN);
clusters.add(new ClusterWithLowerAndUpperBoundaries<Speed>("Calm", lowerBound, upperBound));
lowerBoundWindSpeed = new KnotSpeedImpl(1.0);
lowerBound = new ComparatorClusterBoundary<Speed>(comparableComparator, lowerBoundWindSpeed, ComparisonStrategy.GREATER_EQUALS_THAN);
upperBoundWindSpeed = new KnotSpeedImpl(4.0);
upperBound = new ComparatorClusterBoundary<Speed>(comparableComparator, upperBoundWindSpeed, ComparisonStrategy.LOWER_THAN);
clusters.add(new ClusterWithLowerAndUpperBoundaries<Speed>("Light air", lowerBound, upperBound));
lowerBoundWindSpeed = new KnotSpeedImpl(4.0);
lowerBound = new ComparatorClusterBoundary<Speed>(comparableComparator, lowerBoundWindSpeed, ComparisonStrategy.GREATER_EQUALS_THAN);
upperBoundWindSpeed = new KnotSpeedImpl(7.0);
upperBound = new ComparatorClusterBoundary<Speed>(comparableComparator, upperBoundWindSpeed, ComparisonStrategy.LOWER_THAN);
clusters.add(new ClusterWithLowerAndUpperBoundaries<Speed>("Light breeze", lowerBound, upperBound));
lowerBoundWindSpeed = new KnotSpeedImpl(7.0);
lowerBound = new ComparatorClusterBoundary<Speed>(comparableComparator, lowerBoundWindSpeed, ComparisonStrategy.GREATER_EQUALS_THAN);
upperBoundWindSpeed = new KnotSpeedImpl(11.0);
upperBound = new ComparatorClusterBoundary<Speed>(comparableComparator, upperBoundWindSpeed, ComparisonStrategy.LOWER_THAN);
clusters.add(new ClusterWithLowerAndUpperBoundaries<Speed>("Gentle breeze", lowerBound, upperBound));
lowerBoundWindSpeed = new KnotSpeedImpl(11.0);
lowerBound = new ComparatorClusterBoundary<Speed>(comparableComparator, lowerBoundWindSpeed, ComparisonStrategy.GREATER_EQUALS_THAN);
upperBoundWindSpeed = new KnotSpeedImpl(16.0);
upperBound = new ComparatorClusterBoundary<Speed>(comparableComparator, upperBoundWindSpeed, ComparisonStrategy.LOWER_THAN);
clusters.add(new ClusterWithLowerAndUpperBoundaries<Speed>("Moderate breeze", lowerBound, upperBound));
lowerBoundWindSpeed = new KnotSpeedImpl(16.0);
lowerBound = new ComparatorClusterBoundary<Speed>(comparableComparator, lowerBoundWindSpeed, ComparisonStrategy.GREATER_EQUALS_THAN);
upperBoundWindSpeed = new KnotSpeedImpl(22.0);
upperBound = new ComparatorClusterBoundary<Speed>(comparableComparator, upperBoundWindSpeed, ComparisonStrategy.LOWER_THAN);
clusters.add(new ClusterWithLowerAndUpperBoundaries<Speed>("Fresh breeze", lowerBound, upperBound));
lowerBoundWindSpeed = new KnotSpeedImpl(22.0);
lowerBound = new ComparatorClusterBoundary<Speed>(comparableComparator, lowerBoundWindSpeed, ComparisonStrategy.GREATER_EQUALS_THAN);
upperBoundWindSpeed = new KnotSpeedImpl(28.0);
upperBound = new ComparatorClusterBoundary<Speed>(comparableComparator, upperBoundWindSpeed, ComparisonStrategy.LOWER_THAN);
clusters.add(new ClusterWithLowerAndUpperBoundaries<Speed>("Strong breeze", lowerBound, upperBound));
lowerBoundWindSpeed = new KnotSpeedImpl(28.0);
lowerBound = new ComparatorClusterBoundary<Speed>(comparableComparator, lowerBoundWindSpeed, ComparisonStrategy.GREATER_EQUALS_THAN);
upperBoundWindSpeed = new KnotSpeedImpl(34.0);
upperBound = new ComparatorClusterBoundary<Speed>(comparableComparator, upperBoundWindSpeed, ComparisonStrategy.LOWER_THAN);
clusters.add(new ClusterWithLowerAndUpperBoundaries<Speed>("High wind", lowerBound, upperBound));
lowerBoundWindSpeed = new KnotSpeedImpl(34.0);
lowerBound = new ComparatorClusterBoundary<Speed>(comparableComparator, lowerBoundWindSpeed, ComparisonStrategy.GREATER_EQUALS_THAN);
upperBoundWindSpeed = new KnotSpeedImpl(41.0);
upperBound = new ComparatorClusterBoundary<Speed>(comparableComparator, upperBoundWindSpeed, ComparisonStrategy.LOWER_THAN);
clusters.add(new ClusterWithLowerAndUpperBoundaries<Speed>("Gale", lowerBound, upperBound));
lowerBoundWindSpeed = new KnotSpeedImpl(41.0);
lowerBound = new ComparatorClusterBoundary<Speed>(comparableComparator, lowerBoundWindSpeed, ComparisonStrategy.GREATER_EQUALS_THAN);
upperBoundWindSpeed = new KnotSpeedImpl(48.0);
upperBound = new ComparatorClusterBoundary<Speed>(comparableComparator, upperBoundWindSpeed, ComparisonStrategy.LOWER_THAN);
clusters.add(new ClusterWithLowerAndUpperBoundaries<Speed>("Strong gale", lowerBound, upperBound));
lowerBoundWindSpeed = new KnotSpeedImpl(48.0);
lowerBound = new ComparatorClusterBoundary<Speed>(comparableComparator, lowerBoundWindSpeed, ComparisonStrategy.GREATER_EQUALS_THAN);
upperBoundWindSpeed = new KnotSpeedImpl(56.0);
upperBound = new ComparatorClusterBoundary<Speed>(comparableComparator, upperBoundWindSpeed, ComparisonStrategy.LOWER_THAN);
clusters.add(new ClusterWithLowerAndUpperBoundaries<Speed>("Storm", lowerBound, upperBound));
lowerBoundWindSpeed = new KnotSpeedImpl(56.0);
lowerBound = new ComparatorClusterBoundary<Speed>(comparableComparator, lowerBoundWindSpeed, ComparisonStrategy.GREATER_EQUALS_THAN);
upperBoundWindSpeed = new KnotSpeedImpl(64.0);
upperBound = new ComparatorClusterBoundary<Speed>(comparableComparator, upperBoundWindSpeed, ComparisonStrategy.LOWER_THAN);
clusters.add(new ClusterWithLowerAndUpperBoundaries<Speed>("Violent Storm", lowerBound, upperBound));
lowerBoundWindSpeed = new KnotSpeedImpl(64.0);
lowerBound = new ComparatorClusterBoundary<Speed>(comparableComparator, lowerBoundWindSpeed, ComparisonStrategy.GREATER_EQUALS_THAN);
clusters.add(new ClusterWithSingleBoundary<Speed>("Hurricane", lowerBound));
windStrengthInBeaufortCluster = new FixClusterGroup<Speed>("Wind Strength", clusters);
}
public ClusterGroup<Wind> getWindStrengthCluster() {
return windStrengthCluster;
public ClusterGroup<Speed> getWindStrengthInBeaufortCluster() {
return windStrengthInBeaufortCluster;
}
}
@@ -1,10 +1,9 @@
package com.sap.sailing.datamining.data;
import com.sap.sailing.domain.tracking.GPSFixMoving;
import com.sap.sailing.domain.tracking.Wind;
import com.sap.sse.datamining.data.Cluster;
import com.sap.sse.datamining.shared.annotations.Connector;
import com.sap.sse.datamining.shared.annotations.Dimension;
import com.sap.sse.datamining.shared.impl.dto.ClusterDTO;
public interface HasGPSFixContext {
@@ -15,6 +14,6 @@ public interface HasGPSFixContext {
public GPSFixMoving getGPSFix();
@Dimension(messageKey="WindStrength", ordinal=10)
public Cluster<Wind> getWindStrength();
public ClusterDTO getWindStrength();
}
@@ -6,6 +6,7 @@ import com.sap.sailing.datamining.data.HasTrackedLegOfCompetitorContext;
import com.sap.sailing.domain.tracking.GPSFixMoving;
import com.sap.sailing.domain.tracking.Wind;
import com.sap.sse.datamining.data.Cluster;
import com.sap.sse.datamining.shared.impl.dto.ClusterDTO;
public class GPSFixWithContext implements HasGPSFixContext {
@@ -30,9 +31,10 @@ public class GPSFixWithContext implements HasGPSFixContext {
}
@Override
public Cluster<Wind> getWindStrength() {
public ClusterDTO getWindStrength() {
Wind wind = getWind();
return Activator.getDefault().getClusterGroups().getWindStrengthCluster().getClusterFor(wind);
Cluster<?> cluster = Activator.getDefault().getClusterGroups().getWindStrengthInBeaufortCluster().getClusterFor(wind);
return new ClusterDTO(cluster.toString());
}
private Wind getWind() {
@@ -3,12 +3,14 @@ package com.sap.sse.datamining.shared;
import java.io.Serializable;
import com.sap.sse.datamining.shared.impl.GenericGroupKey;
import com.sap.sse.datamining.shared.impl.dto.ClusterDTO;
@SuppressWarnings("unused")
public final class SSEDataMiningSerializationDummy implements Serializable {
private static final long serialVersionUID = 1L;
private GenericGroupKey<String> groupKey;
private ClusterDTO cluster;
private SSEDataMiningSerializationDummy() { }
@@ -0,0 +1,54 @@
package com.sap.sse.datamining.shared.impl.dto;
import java.io.Serializable;
public class ClusterDTO implements Serializable {
private static final long serialVersionUID = -2962035066215989018L;
private String signifier;
/**
* <b>Constructor for the GWT-Serialization. Don't use this!</b>
*/
@Deprecated
ClusterDTO() { }
public ClusterDTO(String signifier) {
this.signifier = signifier;
}
public String getSignifier() {
return signifier;
}
@Override
public String toString() {
return getSignifier();
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((signifier == null) ? 0 : signifier.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
ClusterDTO other = (ClusterDTO) obj;
if (signifier == null) {
if (other.signifier != null)
return false;
} else if (!signifier.equals(other.signifier))
return false;
return true;
}
}
@@ -1,5 +1,6 @@
package com.sap.sse.datamining.data;
public interface ClusterGroup<ElementType> {
public String getName();
@@ -5,8 +5,8 @@ import java.util.Collection;
import java.util.HashMap;
import java.util.Locale;
import java.util.Map;
import java.util.Set;
import java.util.Map.Entry;
import java.util.Set;
import java.util.concurrent.ExecutorService;
import com.sap.sse.datamining.DataRetrieverChainBuilder;
@@ -6,11 +6,11 @@ import com.sap.sse.datamining.data.ClusterBoundary;
public class ComparatorClusterBoundary<ElementType> implements ClusterBoundary<ElementType> {
private final Comparator<ElementType> comparator;
private final Comparator<? super ElementType> comparator;
private final ElementType boundaryValue;
private final ComparisonStrategy strategy;
public ComparatorClusterBoundary(Comparator<ElementType> comparator, ElementType boundaryValue,
public ComparatorClusterBoundary(Comparator<? super ElementType> comparator, ElementType boundaryValue,
ComparisonStrategy strategy) {
this.comparator = comparator;
this.boundaryValue = boundaryValue;