mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-09-21 21:25:38 +00:00
Result types other than Number are now possible
This commit is contained in:
+2
@@ -1,5 +1,6 @@
|
||||
package com.sap.sailing.datamining.shared;
|
||||
|
||||
import com.sap.sailing.datamining.shared.dto.DistanceDTO;
|
||||
import com.sap.sailing.domain.common.LegType;
|
||||
import com.sap.sse.datamining.shared.SerializationDummy;
|
||||
|
||||
@@ -8,6 +9,7 @@ public final class SailingDataMiningSerializationDummy implements SerializationD
|
||||
private static final long serialVersionUID = 2L;
|
||||
|
||||
private LegType legType;
|
||||
private DistanceDTO distance;
|
||||
|
||||
private SailingDataMiningSerializationDummy() { }
|
||||
|
||||
|
||||
+5
-2
@@ -1,7 +1,10 @@
|
||||
package com.sap.sailing.datamining.shared.dto;
|
||||
|
||||
public class DistanceDTO {
|
||||
import java.io.Serializable;
|
||||
|
||||
public class DistanceDTO implements Serializable {
|
||||
private static final long serialVersionUID = -4949861628112888523L;
|
||||
|
||||
private double geographicalMiles;
|
||||
private double seaMiles;
|
||||
private double nauticalMiles;
|
||||
@@ -19,7 +22,7 @@ public class DistanceDTO {
|
||||
}
|
||||
|
||||
public DistanceDTO(double geographicalMiles, double seaMiles, double nauticalMiles, double meters,
|
||||
double kilometers, double centralAngleDegree, double centralAngleRadian) {
|
||||
double kilometers, double centralAngleDegree, double centralAngleRadian) {
|
||||
this.geographicalMiles = geographicalMiles;
|
||||
this.seaMiles = seaMiles;
|
||||
this.nauticalMiles = nauticalMiles;
|
||||
|
||||
@@ -14,6 +14,7 @@ import com.sap.sailing.datamining.data.HasTrackedLegContext;
|
||||
import com.sap.sailing.datamining.data.HasTrackedLegOfCompetitorContext;
|
||||
import com.sap.sailing.datamining.data.HasTrackedRaceContext;
|
||||
import com.sap.sailing.datamining.impl.components.aggregators.ParallelBoolSumAggregationProcessor;
|
||||
import com.sap.sailing.datamining.impl.components.aggregators.ParallelDistanceSumAggregationProcessor;
|
||||
import com.sap.sailing.domain.common.Speed;
|
||||
import com.sap.sse.datamining.DataMiningBundleService;
|
||||
import com.sap.sse.datamining.DataSourceProvider;
|
||||
@@ -99,6 +100,7 @@ public class Activator extends AbstractDataMiningActivator implements DataMining
|
||||
public Iterable<AggregationProcessorDefinition<?, ?>> getAggregationProcessorDefinitions() {
|
||||
HashSet<AggregationProcessorDefinition<?, ?>> aggregators = new HashSet<>();
|
||||
aggregators.add(ParallelBoolSumAggregationProcessor.getDefinition());
|
||||
aggregators.add(ParallelDistanceSumAggregationProcessor.getDefinition());
|
||||
return aggregators;
|
||||
}
|
||||
|
||||
|
||||
+3
-2
@@ -1,5 +1,6 @@
|
||||
package com.sap.sailing.datamining.data;
|
||||
|
||||
import com.sap.sailing.datamining.shared.dto.DistanceDTO;
|
||||
import com.sap.sailing.domain.base.Competitor;
|
||||
import com.sap.sailing.domain.common.Speed;
|
||||
import com.sap.sse.datamining.shared.annotations.Connector;
|
||||
@@ -14,8 +15,8 @@ public interface HasRaceOfCompetitorContext {
|
||||
@Connector(messageKey="Competitor")
|
||||
public Competitor getCompetitor();
|
||||
|
||||
@Statistic(messageKey="DistanceAtStart", resultUnit=Unit.Meters, resultDecimals=0, ordinal=0)
|
||||
public double getDistanceToStartLineAtStart();
|
||||
@Statistic(messageKey="DistanceAtStart", resultUnit=Unit.None, resultDecimals=2, ordinal=0)
|
||||
public DistanceDTO getDistanceToStartLineAtStart();
|
||||
|
||||
@Statistic(messageKey="DistanceToStarboardSideAtStart", resultDecimals=2, ordinal=1)
|
||||
public Double getNormalizedDistanceToStarboardSideAtStart();
|
||||
|
||||
+59
@@ -0,0 +1,59 @@
|
||||
package com.sap.sailing.datamining.impl.components.aggregators;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.ExecutorService;
|
||||
|
||||
import com.sap.sailing.datamining.shared.dto.DistanceDTO;
|
||||
import com.sap.sse.datamining.components.AggregationProcessorDefinition;
|
||||
import com.sap.sse.datamining.components.Processor;
|
||||
import com.sap.sse.datamining.impl.components.GroupedDataEntry;
|
||||
import com.sap.sse.datamining.impl.components.SimpleAggregationProcessorDefinition;
|
||||
import com.sap.sse.datamining.impl.components.aggregators.AbstractParallelGroupedDataAggregationProcessor;
|
||||
import com.sap.sse.datamining.shared.GroupKey;
|
||||
|
||||
public class ParallelDistanceSumAggregationProcessor extends
|
||||
AbstractParallelGroupedDataAggregationProcessor<DistanceDTO, DistanceDTO> {
|
||||
|
||||
private static final AggregationProcessorDefinition<DistanceDTO, DistanceDTO> DEFINITION =
|
||||
new SimpleAggregationProcessorDefinition<>(DistanceDTO.class, DistanceDTO.class, "Sum", ParallelDistanceSumAggregationProcessor.class);
|
||||
|
||||
public static AggregationProcessorDefinition<DistanceDTO, DistanceDTO> getDefinition() {
|
||||
return DEFINITION;
|
||||
}
|
||||
|
||||
private final Map<GroupKey, DistanceDTO> results;
|
||||
|
||||
public ParallelDistanceSumAggregationProcessor(ExecutorService executor, Collection<Processor<Map<GroupKey, DistanceDTO>, ?>> resultReceivers) {
|
||||
super(executor, resultReceivers, "Sum");
|
||||
results = new HashMap<>();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void handleElement(GroupedDataEntry<DistanceDTO> element) {
|
||||
GroupKey key = element.getKey();
|
||||
if (!results.containsKey(key)) {
|
||||
results.put(key, element.getDataEntry());
|
||||
} else {
|
||||
results.put(key, add(results.get(key), element.getDataEntry()));
|
||||
}
|
||||
}
|
||||
|
||||
private DistanceDTO add(DistanceDTO distance1, DistanceDTO distance2) {
|
||||
double geographicalMiles = distance1.getGeographicalMiles() + distance2.getGeographicalMiles();
|
||||
double seaMiles = distance1.getSeaMiles() + distance2.getSeaMiles();
|
||||
double nauticalMiles = distance1.getNauticalMiles() + distance2.getNauticalMiles();
|
||||
double meters = distance1.getMeters() + distance2.getMeters();
|
||||
double kilometers = distance1.getKilometers() + distance2.getKilometers();
|
||||
double centralAngleDegree = distance1.getCentralAngleDegree() + distance2.getCentralAngleDegree();
|
||||
double centralAngleRadian = distance1.getCentralAngleRadian() + distance2.getCentralAngleRadian();
|
||||
return new DistanceDTO(geographicalMiles, seaMiles, nauticalMiles, meters, kilometers, centralAngleDegree, centralAngleRadian);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Map<GroupKey, DistanceDTO> getResult() {
|
||||
return results;
|
||||
}
|
||||
|
||||
}
|
||||
+8
-2
@@ -4,9 +4,11 @@ import java.util.concurrent.TimeUnit;
|
||||
|
||||
import com.sap.sailing.datamining.data.HasRaceOfCompetitorContext;
|
||||
import com.sap.sailing.datamining.data.HasTrackedRaceContext;
|
||||
import com.sap.sailing.datamining.shared.dto.DistanceDTO;
|
||||
import com.sap.sailing.domain.base.Competitor;
|
||||
import com.sap.sailing.domain.base.Course;
|
||||
import com.sap.sailing.domain.base.Waypoint;
|
||||
import com.sap.sailing.domain.common.Distance;
|
||||
import com.sap.sailing.domain.common.ManeuverType;
|
||||
import com.sap.sailing.domain.common.Speed;
|
||||
import com.sap.sailing.domain.tracking.Maneuver;
|
||||
@@ -39,8 +41,12 @@ public class RaceOfCompetitorWithContext implements HasRaceOfCompetitorContext {
|
||||
}
|
||||
|
||||
@Override
|
||||
public double getDistanceToStartLineAtStart() {
|
||||
return getTrackedRace().getDistanceToStartLine(getCompetitor(), 0).getMeters();
|
||||
public DistanceDTO getDistanceToStartLineAtStart() {
|
||||
Distance distance = getTrackedRace().getDistanceToStartLine(getCompetitor(), 0);
|
||||
return new DistanceDTO(distance.getGeographicalMiles(), distance.getSeaMiles(),
|
||||
distance.getNauticalMiles(), distance.getMeters(),
|
||||
distance.getKilometers(), distance.getCentralAngleDeg(),
|
||||
distance.getCentralAngleRad());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
-6
@@ -44,7 +44,6 @@ public class AggregationProcessorDefinitionDTO implements Serializable, Comparab
|
||||
final int prime = 31;
|
||||
int result = 1;
|
||||
result = prime * result + ((aggregatedTypeName == null) ? 0 : aggregatedTypeName.hashCode());
|
||||
result = prime * result + ((displayName == null) ? 0 : displayName.hashCode());
|
||||
result = prime * result + ((extractedTypeName == null) ? 0 : extractedTypeName.hashCode());
|
||||
return result;
|
||||
}
|
||||
@@ -63,11 +62,6 @@ public class AggregationProcessorDefinitionDTO implements Serializable, Comparab
|
||||
return false;
|
||||
} else if (!aggregatedTypeName.equals(other.aggregatedTypeName))
|
||||
return false;
|
||||
if (displayName == null) {
|
||||
if (other.displayName != null)
|
||||
return false;
|
||||
} else if (!displayName.equals(other.displayName))
|
||||
return false;
|
||||
if (extractedTypeName == null) {
|
||||
if (other.extractedTypeName != null)
|
||||
return false;
|
||||
|
||||
Reference in New Issue
Block a user