Merge branch 'master' into android_apps

This commit is contained in:
Peter Siegmund
2015-01-23 10:08:08 +01:00
254 changed files with 1751 additions and 428 deletions
@@ -3,6 +3,6 @@
<classpathentry kind="con" path="com.google.gwt.eclipse.core.GWT_CONTAINER"/>
<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
<classpathentry kind="src" path="src"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
<classpathentry kind="output" path="bin"/>
</classpath>
@@ -1,3 +1,3 @@
eclipse.preferences.version=1
encoding//src/com/sap/sailing/domain/common/AbstractBearing.java=UTF-8
encoding//src/com/sap/sailing/domain/common/impl/CountryCodeFactoryImpl.java=UTF-8
encoding//src/com/sap/sailing/domain/common/impl/AbstractSpeedWithAbstractBearingImpl.java=UTF-8
@@ -1,8 +1,12 @@
#Thu Jan 19 10:01:03 CET 2012
eclipse.preferences.version=1
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
org.eclipse.jdt.core.compiler.compliance=1.6
org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7
org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
org.eclipse.jdt.core.compiler.compliance=1.7
org.eclipse.jdt.core.compiler.debug.lineNumber=generate
org.eclipse.jdt.core.compiler.debug.localVariable=generate
org.eclipse.jdt.core.compiler.debug.sourceFile=generate
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
org.eclipse.jdt.core.compiler.source=1.6
org.eclipse.jdt.core.compiler.source=1.7
@@ -4,9 +4,10 @@ Bundle-Name: SAP Sailing Common
Bundle-SymbolicName: com.sap.sailing.domain.common
Bundle-Version: 1.0.0.qualifier
Bundle-Vendor: SAP
Bundle-RequiredExecutionEnvironment: JavaSE-1.6
Bundle-RequiredExecutionEnvironment: JavaSE-1.7
Bundle-ActivationPolicy: lazy
Export-Package: com.sap.sailing.domain.common,
com.sap.sailing.domain.common.abstractlog,
com.sap.sailing.domain.common.confidence,
com.sap.sailing.domain.common.confidence.impl,
com.sap.sailing.domain.common.configuration,
@@ -18,9 +19,7 @@ Export-Package: com.sap.sailing.domain.common,
com.sap.sailing.domain.common.racelog,
com.sap.sailing.domain.common.racelog.tracking,
com.sap.sailing.domain.common.racelog.utils,
com.sap.sailing.domain.common.scalablevalue,
com.sap.sailing.domain.common.scalablevalue.impl,
com.sap.sailing.domain.common.trackfiles,
com.sap.sailing.domain.common.abstractlog
com.sap.sailing.domain.common.trackfiles
Require-Bundle: com.sap.sse.datamining.shared,
com.sap.sse.common
@@ -1,5 +1,7 @@
package com.sap.sailing.domain.common;
import com.sap.sse.common.Color;
/**
* Manages color assignments to objects.
*
@@ -1,6 +1,7 @@
package com.sap.sailing.domain.common;
import com.sap.sailing.domain.common.impl.RGBColor;
import com.sap.sse.common.Color;
import com.sap.sse.common.impl.RGBColor;
public enum FleetColors {
GOLD (222, 138, 46, 1),
@@ -51,7 +51,7 @@ public class BearingWithConfidenceCluster<RelativeTo> {
* remains empty.
* @return two bearing clusters; both empty if this cluster is empty; only the second one empty if this cluster
* contains only one bearing. Otherwise, the two bearings farthest apart (greatest absolute
* {@link Bearing#getDifferenceTo(Bearing) difference}) are guaranteed not to be in different clusters, and
* {@link Bearing#getDifferenceTo(Bearing) difference}) are guaranteed to be in different clusters, and
* all other bearings contained in this cluster will be contained in the cluster that contains the extreme
* bearing to which it's closer.
*/
@@ -3,8 +3,8 @@ package com.sap.sailing.domain.common.confidence;
import java.io.Serializable;
import com.sap.sailing.domain.common.Distance;
import com.sap.sailing.domain.common.scalablevalue.ScalableValue;
import com.sap.sse.common.TimePoint;
import com.sap.sse.common.scalablevalue.ScalableValue;
/**
* Some values, particularly those obtained from real-world measurements, are not always accurate. Some values are
@@ -1,6 +1,6 @@
package com.sap.sailing.domain.common.confidence;
import com.sap.sailing.domain.common.scalablevalue.IsScalable;
import com.sap.sse.common.scalablevalue.IsScalable;
public interface HasConfidenceAndIsScalable<ValueType, BaseType, RelativeTo> extends IsScalable<ValueType, BaseType>,
HasConfidence<ValueType, BaseType, RelativeTo> {
@@ -3,9 +3,9 @@ package com.sap.sailing.domain.common.confidence.impl;
import com.sap.sailing.domain.common.Bearing;
import com.sap.sailing.domain.common.DoublePair;
import com.sap.sailing.domain.common.confidence.BearingWithConfidence;
import com.sap.sailing.domain.common.scalablevalue.IsScalable;
import com.sap.sailing.domain.common.scalablevalue.ScalableValue;
import com.sap.sailing.domain.common.scalablevalue.impl.ScalableBearing;
import com.sap.sse.common.scalablevalue.IsScalable;
import com.sap.sse.common.scalablevalue.ScalableValue;
public class BearingWithConfidenceImpl<RelativeTo> extends HasConfidenceImpl<DoublePair, Bearing, RelativeTo>
implements BearingWithConfidence<RelativeTo>, IsScalable<DoublePair, Bearing> {
@@ -4,8 +4,8 @@ import com.sap.sailing.domain.common.confidence.ConfidenceBasedAverager;
import com.sap.sailing.domain.common.confidence.HasConfidence;
import com.sap.sailing.domain.common.confidence.HasConfidenceAndIsScalable;
import com.sap.sailing.domain.common.confidence.Weigher;
import com.sap.sailing.domain.common.scalablevalue.ScalableValue;
import com.sap.sse.common.Util;
import com.sap.sse.common.scalablevalue.ScalableValue;
/**
@@ -1,7 +1,7 @@
package com.sap.sailing.domain.common.confidence.impl;
import com.sap.sailing.domain.common.scalablevalue.AbstractScalarValue;
import com.sap.sailing.domain.common.scalablevalue.ScalableValue;
import com.sap.sse.common.scalablevalue.AbstractScalarValue;
import com.sap.sse.common.scalablevalue.ScalableValue;
public class ScalableDouble implements AbstractScalarValue<Double> {
private final double value;
@@ -11,7 +11,7 @@ public class ScalableDouble implements AbstractScalarValue<Double> {
}
@Override
public ScalableValue<Double, Double> multiply(double factor) {
public ScalableDouble multiply(double factor) {
return new ScalableDouble(factor*getValue());
}
@@ -30,4 +30,18 @@ public class ScalableDouble implements AbstractScalarValue<Double> {
return value;
}
@Override
public double getDistance(Double other) {
return Math.abs(value-other);
}
@Override
public String toString() {
return new Double(value).toString();
}
@Override
public int compareTo(Double o) {
return new Double(value).compareTo(o);
}
}
@@ -2,8 +2,8 @@ package com.sap.sailing.domain.common.dto;
import java.io.Serializable;
import com.sap.sailing.domain.common.Color;
import com.sap.sailing.domain.common.racelog.tracking.MappableToDevice;
import com.sap.sse.common.Color;
public interface CompetitorDTO extends Serializable, MappableToDevice {
@@ -2,7 +2,7 @@ package com.sap.sailing.domain.common.dto;
import java.io.Serializable;
import com.sap.sailing.domain.common.Color;
import com.sap.sse.common.Color;
/**
* Equality and hash code are based on the {@link #getIdAsString() ID}, the {@link #getSailID() sail number}, the
@@ -1,6 +1,6 @@
package com.sap.sailing.domain.common.dto;
import com.sap.sailing.domain.common.Color;
import com.sap.sse.common.Color;
public class FleetDTO extends NamedDTO {
private static final long serialVersionUID = 1336494392278190103L;
@@ -11,7 +11,7 @@ import java.util.List;
import java.util.Map;
import java.util.Set;
import com.sap.sailing.domain.common.Cloner;
import com.sap.sse.common.Cloner;
import com.sap.sse.common.Util;
/**
@@ -1,6 +1,6 @@
package com.sap.sailing.domain.common.dto;
import com.sap.sailing.domain.common.Color;
import com.sap.sse.common.Color;
/**
* Equality and hash code are based on the index pointing into a previous leaderboard's competitors list.
@@ -4,9 +4,10 @@ import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import com.sap.sailing.domain.common.Color;
import com.sap.sailing.domain.common.ColorMap;
import com.sap.sse.common.Color;
import com.sap.sse.common.Util;
import com.sap.sse.common.impl.HSVColor;
/**
@@ -1,10 +1,10 @@
package com.sap.sailing.domain.common.impl;
import com.sap.sailing.domain.common.CountryCodeFactory;
import com.sap.sailing.domain.common.Distance;
import com.sap.sailing.domain.common.Placemark;
import com.sap.sailing.domain.common.Position;
import com.sap.sailing.domain.common.SerializablePosition;
import com.sap.sse.common.CountryCodeFactory;
/**
* Used to define a populated place in the world.<br />
@@ -1,5 +1,7 @@
package com.sap.sailing.domain.common.racelog.tracking;
import java.io.Serializable;
/**
* Marker interface that can be applied to DTOs that represent domain objects
* that can be mapped to a device for racelog-tracking (see {@link DeviceMapping}.
@@ -3,9 +3,10 @@ package com.sap.sailing.domain.common.scalablevalue.impl;
import com.sap.sailing.domain.common.Bearing;
import com.sap.sailing.domain.common.DoublePair;
import com.sap.sailing.domain.common.impl.RadianBearingImpl;
import com.sap.sailing.domain.common.scalablevalue.ScalableValue;
import com.sap.sse.common.scalablevalue.ScalableValue;
import com.sap.sse.common.scalablevalue.ScalableValueWithDistance;
public class ScalableBearing implements ScalableValue<DoublePair, Bearing> {
public class ScalableBearing implements ScalableValueWithDistance<DoublePair, Bearing> {
private final double sin;
private final double cos;
@@ -20,13 +21,13 @@ public class ScalableBearing implements ScalableValue<DoublePair, Bearing> {
}
@Override
public ScalableValue<DoublePair, Bearing> multiply(double factor) {
public ScalableBearing multiply(double factor) {
DoublePair pair = getValue();
return new ScalableBearing(factor*pair.getA(), factor*pair.getB());
}
@Override
public ScalableValue<DoublePair, Bearing> add(ScalableValue<DoublePair, Bearing> t) {
public ScalableBearing add(ScalableValue<DoublePair, Bearing> t) {
DoublePair value = getValue();
DoublePair tValue = t.getValue();
return new ScalableBearing(value.getA()+tValue.getA(), value.getB()+tValue.getB());
@@ -57,4 +58,9 @@ public class ScalableBearing implements ScalableValue<DoublePair, Bearing> {
public DoublePair getValue() {
return new DoublePair(sin, cos);
}
@Override
public double getDistance(Bearing other) {
return Math.abs(divide(1).getDifferenceTo(other).getDegrees());
}
}
@@ -2,9 +2,10 @@ package com.sap.sailing.domain.common.scalablevalue.impl;
import com.sap.sailing.domain.common.Position;
import com.sap.sailing.domain.common.impl.RadianPosition;
import com.sap.sailing.domain.common.scalablevalue.ScalableValue;
import com.sap.sse.common.scalablevalue.ScalableValue;
import com.sap.sse.common.scalablevalue.ScalableValueWithDistance;
public class ScalablePosition implements ScalableValue<ScalablePosition, Position> {
public class ScalablePosition implements ScalableValueWithDistance<ScalablePosition, Position> {
private final double x, y, z;
public ScalablePosition(Position position) {
@@ -58,5 +59,9 @@ public class ScalablePosition implements ScalableValue<ScalablePosition, Positio
public ScalablePosition getValue() {
return this;
}
@Override
public double getDistance(Position other) {
return divide(1).getDistance(other).getCentralAngleDeg();
}
}
@@ -2,9 +2,10 @@ package com.sap.sailing.domain.common.scalablevalue.impl;
import com.sap.sailing.domain.common.Speed;
import com.sap.sailing.domain.common.impl.KnotSpeedImpl;
import com.sap.sailing.domain.common.scalablevalue.ScalableValue;
import com.sap.sse.common.scalablevalue.ScalableValue;
import com.sap.sse.common.scalablevalue.ScalableValueWithDistance;
public class ScalableSpeed implements ScalableValue<Double, Speed> {
public class ScalableSpeed implements ScalableValueWithDistance<Double, Speed> {
private final double knots;
public ScalableSpeed(Speed speed) {
@@ -16,12 +17,12 @@ public class ScalableSpeed implements ScalableValue<Double, Speed> {
}
@Override
public ScalableValue<Double, Speed> multiply(double factor) {
public ScalableSpeed multiply(double factor) {
return new ScalableSpeed(factor*knots);
}
@Override
public ScalableValue<Double, Speed> add(ScalableValue<Double, Speed> t) {
public ScalableSpeed add(ScalableValue<Double, Speed> t) {
return new ScalableSpeed(knots+t.getValue());
}
@@ -34,4 +35,10 @@ public class ScalableSpeed implements ScalableValue<Double, Speed> {
public Double getValue() {
return knots;
}
@Override
public double getDistance(Speed other) {
return Math.abs(knots-other.getKnots());
}
}
@@ -6,8 +6,8 @@ import com.sap.sailing.domain.common.SpeedWithBearing;
import com.sap.sailing.domain.common.impl.KnotSpeedImpl;
import com.sap.sailing.domain.common.impl.KnotSpeedWithBearingImpl;
import com.sap.sailing.domain.common.impl.RadianBearingImpl;
import com.sap.sailing.domain.common.scalablevalue.ScalableValue;
import com.sap.sse.common.Util;
import com.sap.sse.common.scalablevalue.ScalableValue;
/**
* Separately scales speed and bearing. Instead of considering speed and bearing a single vector that can be scaled, the
@@ -18,7 +18,6 @@ import com.sap.sailing.domain.common.Position;
import com.sap.sailing.domain.common.Speed;
import com.sap.sailing.domain.common.SpeedWithBearing;
import com.sap.sailing.domain.common.impl.KnotSpeedWithBearingImpl;
import com.sap.sailing.domain.common.scalablevalue.ScalableValue;
import com.sap.sailing.domain.common.scalablevalue.impl.ScalableBearing;
import com.sap.sailing.domain.common.scalablevalue.impl.ScalablePosition;
import com.sap.sailing.domain.common.scalablevalue.impl.ScalableSpeed;
@@ -44,6 +43,7 @@ import com.sap.sailing.domain.tracking.impl.DynamicTrackImpl;
import com.sap.sailing.domain.tracking.impl.WindImpl;
import com.sap.sse.common.TimePoint;
import com.sap.sse.common.Util;
import com.sap.sse.common.scalablevalue.ScalableValue;
/**
* Receives Igtimi {@link Fix}es and tries to generate a {@link Wind} object from each {@link AWS} fix. For this to
@@ -104,7 +104,6 @@ import com.sap.sailing.domain.base.impl.RemoteSailingServerReferenceImpl;
import com.sap.sailing.domain.base.impl.SeriesImpl;
import com.sap.sailing.domain.base.impl.VenueImpl;
import com.sap.sailing.domain.base.impl.WaypointImpl;
import com.sap.sailing.domain.common.Color;
import com.sap.sailing.domain.common.MarkType;
import com.sap.sailing.domain.common.MaxPointsReason;
import com.sap.sailing.domain.common.PassingInstruction;
@@ -120,7 +119,6 @@ import com.sap.sailing.domain.common.configuration.DeviceConfigurationMatcherTyp
import com.sap.sailing.domain.common.impl.DegreeBearingImpl;
import com.sap.sailing.domain.common.impl.DegreePosition;
import com.sap.sailing.domain.common.impl.KnotSpeedWithBearingImpl;
import com.sap.sailing.domain.common.impl.RGBColor;
import com.sap.sailing.domain.common.impl.WindSourceImpl;
import com.sap.sailing.domain.common.impl.WindSourceWithAdditionalID;
import com.sap.sailing.domain.common.racelog.Flags;
@@ -170,10 +168,12 @@ import com.sap.sailing.server.gateway.deserialization.impl.CompetitorJsonDeseria
import com.sap.sailing.server.gateway.deserialization.impl.DeviceConfigurationJsonDeserializer;
import com.sap.sailing.server.gateway.deserialization.impl.Helpers;
import com.sap.sailing.server.gateway.deserialization.impl.RegattaConfigurationJsonDeserializer;
import com.sap.sse.common.Color;
import com.sap.sse.common.TimePoint;
import com.sap.sse.common.TimeRange;
import com.sap.sse.common.Util;
import com.sap.sse.common.impl.MillisecondsTimePoint;
import com.sap.sse.common.impl.RGBColor;
import com.sap.sse.common.impl.TimeRangeImpl;
public class DomainObjectFactoryImpl implements DomainObjectFactory {
@@ -14,4 +14,5 @@ Require-Bundle: com.sap.sailing.domain.common;bundle-version="1.0.0",
com.sap.sailing.domain.test,
com.sap.sailing.domain.racelogtrackingadapter.testsupport;bundle-version="1.0.0",
com.sap.sse.common,
com.sap.sse
com.sap.sse,
com.sap.sse.shared.android
@@ -11,7 +11,7 @@ import java.util.Random;
import org.junit.Before;
import org.junit.Test;
import com.sap.sailing.util.impl.ConcurrentHashBag;
import com.sap.sse.concurrent.ConcurrentHashBag;
/**
* Initiated by bug 2502 (http://bugzilla.sapsailing.com/bugzilla/show_bug.cgi?id=2502), this test tries to reproduce a
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
<classpathentry kind="src" path="src"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
<classpathentry kind="output" path="bin"/>
</classpath>
@@ -1,7 +1,12 @@
eclipse.preferences.version=1
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
org.eclipse.jdt.core.compiler.compliance=1.6
org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7
org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
org.eclipse.jdt.core.compiler.compliance=1.7
org.eclipse.jdt.core.compiler.debug.lineNumber=generate
org.eclipse.jdt.core.compiler.debug.localVariable=generate
org.eclipse.jdt.core.compiler.debug.sourceFile=generate
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
org.eclipse.jdt.core.compiler.source=1.6
org.eclipse.jdt.core.compiler.source=1.7
@@ -4,11 +4,11 @@ Bundle-Name: com.sap.sailing.domain.shared.android
Bundle-SymbolicName: com.sap.sailing.domain.shared.android
Bundle-Version: 1.0.0.qualifier
Bundle-Vendor: SAP
Bundle-RequiredExecutionEnvironment: JavaSE-1.6
Require-Bundle: com.sap.sailing.domain.common;bundle-version="1.0.0",
com.sap.sse.datamining.shared;bundle-version="1.0.0",
Bundle-RequiredExecutionEnvironment: JavaSE-1.7
Require-Bundle: com.sap.sailing.domain.common,
com.sap.sse.datamining.shared,
com.sap.sse.common,
com.sap.sse
com.sap.sse.shared.android
Export-Package: com.sap.sailing.domain.abstractlog,
com.sap.sailing.domain.abstractlog.impl,
com.sap.sailing.domain.abstractlog.race,
@@ -47,5 +47,4 @@ Export-Package: com.sap.sailing.domain.abstractlog,
com.sap.sailing.domain.racelogtracking,
com.sap.sailing.domain.racelogtracking.impl,
com.sap.sailing.domain.tracking,
com.sap.sailing.domain.tracking.impl,
com.sap.sailing.util.impl
com.sap.sailing.domain.tracking.impl
@@ -10,4 +10,6 @@ dependencies {
/* local dependencies */
compile project(":java:com.sap.sailing.domain.common")
compile project(":java:com.sap.sse.common")
compile project(":java:com.sap.sse.datamining.shared")
compile project(":java:com.sap.sse.shared.android")
}
@@ -28,7 +28,7 @@ import com.sap.sailing.domain.common.abstractlog.NotRevokableException;
import com.sap.sailing.domain.tracking.Track;
import com.sap.sailing.domain.tracking.impl.PartialNavigableSetView;
import com.sap.sailing.domain.tracking.impl.TrackImpl;
import com.sap.sailing.util.impl.ArrayListNavigableSet;
import com.sap.sse.common.ArrayListNavigableSet;
/**
* {@link Track} implementation for {@link AbstractLogEvent}s.
@@ -4,8 +4,8 @@ import java.util.ArrayList;
import java.util.List;
import com.sap.sailing.domain.abstractlog.AbstractLog;
import com.sap.sailing.domain.abstractlog.BaseLogAnalyzer;
import com.sap.sailing.domain.abstractlog.AbstractLogEvent;
import com.sap.sailing.domain.abstractlog.BaseLogAnalyzer;
/**
* Finds all events in the log which is an {@code instanceof} {@link #ofType}.
@@ -1,8 +1,8 @@
package com.sap.sailing.domain.abstractlog.impl;
import com.sap.sailing.domain.abstractlog.AbstractLog;
import com.sap.sailing.domain.abstractlog.BaseLogAnalyzer;
import com.sap.sailing.domain.abstractlog.AbstractLogEvent;
import com.sap.sailing.domain.abstractlog.BaseLogAnalyzer;
/**
* Finds the most recent event in the log which is an {@code instanceof} {@link #ofType}.
@@ -5,8 +5,8 @@ import java.util.List;
import com.sap.sailing.domain.abstractlog.race.RaceLog;
import com.sap.sailing.domain.abstractlog.race.RaceLogEvent;
import com.sap.sailing.domain.abstractlog.race.scoring.RaceLogAdditionalScoringInformationEvent;
import com.sap.sailing.domain.abstractlog.race.scoring.AdditionalScoringInformationType;
import com.sap.sailing.domain.abstractlog.race.scoring.RaceLogAdditionalScoringInformationEvent;
/**
* Returns all {@link RaceLogAdditionalScoringInformationEvent}s from the race log
@@ -8,7 +8,7 @@ import com.sap.sailing.domain.abstractlog.race.impl.BaseRaceLogEventVisitor;
import com.sap.sailing.domain.abstractlog.race.impl.RaceLogRaceStatusEventComparator;
import com.sap.sailing.domain.abstractlog.race.state.racingprocedure.ReadonlyRacingProcedure;
import com.sap.sailing.domain.common.racelog.RaceLogRaceStatus;
import com.sap.sailing.util.impl.ArrayListNavigableSet;
import com.sap.sse.common.ArrayListNavigableSet;
import com.sap.sse.common.TimePoint;
import com.sap.sse.common.impl.MillisecondsTimePoint;
@@ -6,8 +6,8 @@ import java.util.List;
import com.sap.sailing.domain.abstractlog.AbstractLogEventAuthor;
import com.sap.sailing.domain.abstractlog.race.RaceLogEventVisitor;
import com.sap.sailing.domain.abstractlog.race.impl.RaceLogEventImpl;
import com.sap.sailing.domain.abstractlog.race.scoring.RaceLogAdditionalScoringInformationEvent;
import com.sap.sailing.domain.abstractlog.race.scoring.AdditionalScoringInformationType;
import com.sap.sailing.domain.abstractlog.race.scoring.RaceLogAdditionalScoringInformationEvent;
import com.sap.sailing.domain.base.Competitor;
import com.sap.sse.common.TimePoint;
@@ -4,8 +4,8 @@ import com.sap.sailing.domain.abstractlog.AbstractLogEventAuthor;
import com.sap.sailing.domain.abstractlog.race.CompetitorResults;
import com.sap.sailing.domain.abstractlog.race.RaceLog;
import com.sap.sailing.domain.abstractlog.race.RaceLogEvent;
import com.sap.sailing.domain.abstractlog.race.scoring.RaceLogAdditionalScoringInformationEvent;
import com.sap.sailing.domain.abstractlog.race.scoring.AdditionalScoringInformationType;
import com.sap.sailing.domain.abstractlog.race.scoring.RaceLogAdditionalScoringInformationEvent;
import com.sap.sailing.domain.abstractlog.race.state.racingprocedure.RacingProcedure;
import com.sap.sailing.domain.abstractlog.race.state.racingprocedure.RacingProcedurePrerequisite;
import com.sap.sailing.domain.abstractlog.race.state.racingprocedure.impl.RacingProcedurePrerequisiteAutoResolver;
@@ -10,8 +10,8 @@ import com.sap.sailing.domain.abstractlog.race.RaceLog;
import com.sap.sailing.domain.abstractlog.race.RaceLogEventFactory;
import com.sap.sailing.domain.abstractlog.race.analyzing.impl.AdditionalScoringInformationFinder;
import com.sap.sailing.domain.abstractlog.race.analyzing.impl.RaceStatusAnalyzer;
import com.sap.sailing.domain.abstractlog.race.scoring.RaceLogAdditionalScoringInformationEvent;
import com.sap.sailing.domain.abstractlog.race.scoring.AdditionalScoringInformationType;
import com.sap.sailing.domain.abstractlog.race.scoring.RaceLogAdditionalScoringInformationEvent;
import com.sap.sailing.domain.abstractlog.race.state.RaceState;
import com.sap.sailing.domain.abstractlog.race.state.racingprocedure.RacingProcedure;
import com.sap.sailing.domain.abstractlog.race.state.racingprocedure.RacingProcedureFactory;
@@ -12,9 +12,9 @@ import com.sap.sailing.domain.abstractlog.race.analyzing.impl.LastPublishedCours
import com.sap.sailing.domain.abstractlog.race.analyzing.impl.LastWindFixFinder;
import com.sap.sailing.domain.abstractlog.race.analyzing.impl.ProtestStartTimeFinder;
import com.sap.sailing.domain.abstractlog.race.analyzing.impl.RaceStatusAnalyzer;
import com.sap.sailing.domain.abstractlog.race.analyzing.impl.RaceStatusAnalyzer.Clock;
import com.sap.sailing.domain.abstractlog.race.analyzing.impl.RacingProcedureTypeAnalyzer;
import com.sap.sailing.domain.abstractlog.race.analyzing.impl.StartTimeFinder;
import com.sap.sailing.domain.abstractlog.race.analyzing.impl.RaceStatusAnalyzer.Clock;
import com.sap.sailing.domain.abstractlog.race.impl.WeakRaceLogChangedVisitor;
import com.sap.sailing.domain.abstractlog.race.state.RaceStateChangedListener;
import com.sap.sailing.domain.abstractlog.race.state.RaceStateEvent;
@@ -1,10 +1,10 @@
package com.sap.sailing.domain.abstractlog.regatta;
import com.sap.sailing.domain.abstractlog.regatta.events.RegattaLogCloseOpenEndedDeviceMappingEvent;
import com.sap.sailing.domain.abstractlog.regatta.events.RegattaLogDeviceCompetitorMappingEvent;
import com.sap.sailing.domain.abstractlog.regatta.events.RegattaLogDeviceMarkMappingEvent;
import com.sap.sailing.domain.abstractlog.regatta.events.RegattaLogRegisterCompetitorEvent;
import com.sap.sailing.domain.abstractlog.regatta.events.RegattaLogRevokeEvent;
import com.sap.sailing.domain.abstractlog.regatta.events.RegattaLogDeviceCompetitorMappingEvent;
public interface RegattaLogEventVisitor {
void visit(RegattaLogRevokeEvent event);
@@ -3,8 +3,8 @@ package com.sap.sailing.domain.abstractlog.regatta.impl;
import java.io.Serializable;
import com.sap.sailing.domain.abstractlog.AbstractLogEventAuthor;
import com.sap.sailing.domain.abstractlog.impl.LogEventComparator;
import com.sap.sailing.domain.abstractlog.impl.AbstractLogImpl;
import com.sap.sailing.domain.abstractlog.impl.LogEventComparator;
import com.sap.sailing.domain.abstractlog.regatta.RegattaLog;
import com.sap.sailing.domain.abstractlog.regatta.RegattaLogEvent;
import com.sap.sailing.domain.abstractlog.regatta.RegattaLogEventVisitor;
@@ -1,8 +1,8 @@
package com.sap.sailing.domain.abstractlog.shared.analyzing;
import com.sap.sailing.domain.abstractlog.AbstractLog;
import com.sap.sailing.domain.abstractlog.BaseLogAnalyzer;
import com.sap.sailing.domain.abstractlog.AbstractLogEvent;
import com.sap.sailing.domain.abstractlog.BaseLogAnalyzer;
import com.sap.sailing.domain.abstractlog.shared.events.DeviceMappingEvent;
import com.sap.sse.common.WithID;
@@ -5,9 +5,9 @@ import java.util.ArrayList;
import java.util.List;
import com.sap.sailing.domain.abstractlog.AbstractLog;
import com.sap.sailing.domain.abstractlog.BaseLogAnalyzer;
import com.sap.sailing.domain.abstractlog.AbstractLogEvent;
import com.sap.sailing.domain.abstractlog.AbstractLogEventAuthor;
import com.sap.sailing.domain.abstractlog.BaseLogAnalyzer;
import com.sap.sailing.domain.abstractlog.shared.events.CloseOpenEndedDeviceMappingEvent;
import com.sap.sailing.domain.abstractlog.shared.events.DeviceMappingEvent;
import com.sap.sailing.domain.racelogtracking.DeviceMapping;
@@ -1,10 +1,10 @@
package com.sap.sailing.domain.base;
import com.sap.sailing.domain.common.Color;
import com.sap.sse.datamining.shared.annotations.Connector;
import com.sap.sse.common.Color;
import com.sap.sse.common.IsManagedByCache;
import com.sap.sse.common.Named;
import com.sap.sse.common.WithID;
import com.sap.sse.datamining.shared.annotations.Connector;
public interface Competitor extends Named, WithID, IsManagedByCache<SharedDomainFactory> {
@Connector(messageKey="Team", ordinal=9)
@@ -1,6 +1,6 @@
package com.sap.sailing.domain.base;
import com.sap.sailing.domain.common.Color;
import com.sap.sse.common.Color;
public interface CompetitorChangeListener extends BoatChangeListener, NationalityChangeListener {
void colorChanged(Color oldColor, Color newColor);
@@ -4,7 +4,7 @@ import java.io.Serializable;
import com.sap.sailing.domain.base.impl.DynamicBoat;
import com.sap.sailing.domain.base.impl.DynamicTeam;
import com.sap.sailing.domain.common.Color;
import com.sap.sse.common.Color;
/**
* Base interface for classes managing a set of {@link Competitor} objects.
@@ -4,8 +4,8 @@ import java.io.Serializable;
import com.sap.sailing.domain.base.impl.DynamicBoat;
import com.sap.sailing.domain.base.impl.DynamicTeam;
import com.sap.sailing.domain.common.Color;
import com.sap.sailing.domain.common.dto.CompetitorDTO;
import com.sap.sse.common.Color;
/**
* Manages a set of {@link Competitor} objects. There may be a transient implementation based on a simple cache,
@@ -37,6 +37,9 @@ public interface CourseBase extends Named {
Waypoint getFirstWaypoint();
/**
* @return the course's last waypoint if not empty, <code>null</code> otherwise. Acquires the course's read lock.
*/
Waypoint getLastWaypoint();
void addWaypoint(int zeroBasedPosition, Waypoint waypointToAdd);
@@ -1,6 +1,6 @@
package com.sap.sailing.domain.base;
import com.sap.sailing.domain.common.Color;
import com.sap.sse.common.Color;
import com.sap.sse.common.Named;
/**
@@ -1,6 +1,6 @@
package com.sap.sailing.domain.base;
import com.sap.sailing.domain.common.CountryCode;
import com.sap.sse.common.CountryCode;
import com.sap.sse.common.IsManagedByCache;
import com.sap.sse.common.Named;
import com.sap.sse.datamining.shared.annotations.Dimension;
@@ -9,7 +9,7 @@ import java.util.Set;
import com.sap.sailing.domain.base.Competitor;
import com.sap.sailing.domain.base.CompetitorChangeListener;
import com.sap.sailing.domain.base.SharedDomainFactory;
import com.sap.sailing.domain.common.Color;
import com.sap.sse.common.Color;
import com.sap.sse.common.Util;
public class CompetitorImpl implements DynamicCompetitor {
@@ -1,8 +1,8 @@
package com.sap.sailing.domain.base.impl;
import com.sap.sailing.domain.base.Competitor;
import com.sap.sailing.domain.common.Color;
import com.sap.sailing.domain.common.Renamable;
import com.sap.sse.common.Color;
public interface DynamicCompetitor extends Competitor, Renamable {
DynamicBoat getBoat();
@@ -1,7 +1,7 @@
package com.sap.sailing.domain.base.impl;
import com.sap.sailing.domain.base.Fleet;
import com.sap.sailing.domain.common.Color;
import com.sap.sse.common.Color;
import com.sap.sse.common.impl.NamedImpl;
/**
@@ -2,8 +2,8 @@ package com.sap.sailing.domain.base.impl;
import com.sap.sailing.domain.base.Nationality;
import com.sap.sailing.domain.base.SharedDomainFactory;
import com.sap.sailing.domain.common.CountryCode;
import com.sap.sailing.domain.common.CountryCodeFactory;
import com.sap.sse.common.CountryCode;
import com.sap.sse.common.CountryCodeFactory;
import com.sap.sse.common.IsManagedByCache;
public class NationalityImpl implements Nationality {
@@ -29,10 +29,10 @@ import com.sap.sailing.domain.base.configuration.DeviceConfigurationMatcher;
import com.sap.sailing.domain.base.configuration.impl.DeviceConfigurationMatcherMulti;
import com.sap.sailing.domain.base.configuration.impl.DeviceConfigurationMatcherSingle;
import com.sap.sailing.domain.common.BoatClassMasterdata;
import com.sap.sailing.domain.common.Color;
import com.sap.sailing.domain.common.MarkType;
import com.sap.sailing.domain.common.PassingInstruction;
import com.sap.sailing.domain.common.configuration.DeviceConfigurationMatcherType;
import com.sap.sse.common.Color;
import com.sap.sse.common.WithID;
public class SharedDomainFactoryImpl implements SharedDomainFactory {
@@ -16,13 +16,13 @@ import java.util.logging.Logger;
import com.sap.sailing.domain.base.Competitor;
import com.sap.sailing.domain.base.CompetitorStore;
import com.sap.sailing.domain.base.Nationality;
import com.sap.sailing.domain.common.Color;
import com.sap.sailing.domain.common.CountryCode;
import com.sap.sailing.domain.common.dto.BoatClassDTO;
import com.sap.sailing.domain.common.dto.CompetitorDTO;
import com.sap.sailing.domain.common.dto.CompetitorDTOImpl;
import com.sap.sailing.util.impl.LockUtil;
import com.sap.sailing.util.impl.NamedReentrantReadWriteLock;
import com.sap.sse.common.Color;
import com.sap.sse.common.CountryCode;
import com.sap.sse.concurrent.LockUtil;
import com.sap.sse.concurrent.NamedReentrantReadWriteLock;
public class TransientCompetitorStoreImpl implements CompetitorStore, Serializable {
private static final Logger logger = Logger.getLogger(TransientCompetitorStoreImpl.class.getName());
@@ -8,8 +8,8 @@ import java.util.List;
import com.sap.sailing.domain.base.CourseArea;
import com.sap.sailing.domain.base.Venue;
import com.sap.sailing.util.impl.LockUtil;
import com.sap.sailing.util.impl.NamedReentrantReadWriteLock;
import com.sap.sse.concurrent.LockUtil;
import com.sap.sse.concurrent.NamedReentrantReadWriteLock;
public class VenueImpl implements Venue {
private static final long serialVersionUID = 6854152040737643290L;
@@ -8,12 +8,12 @@ import java.util.NavigableSet;
import com.sap.sailing.domain.base.Timed;
import com.sap.sailing.domain.tracking.Track;
import com.sap.sailing.util.impl.ArrayListNavigableSet;
import com.sap.sailing.util.impl.LockUtil;
import com.sap.sailing.util.impl.NamedReentrantReadWriteLock;
import com.sap.sailing.util.impl.UnmodifiableNavigableSet;
import com.sap.sse.common.ArrayListNavigableSet;
import com.sap.sse.common.Duration;
import com.sap.sse.common.TimePoint;
import com.sap.sse.concurrent.LockUtil;
import com.sap.sse.concurrent.NamedReentrantReadWriteLock;
import com.sap.sse.util.impl.UnmodifiableNavigableSet;
public class TrackImpl<FixType extends Timed> implements Track<FixType> {
private static final long serialVersionUID = -4075853657857657528L;
@@ -24,7 +24,7 @@ import com.sap.sailing.domain.swisstimingreplayadapter.SwissTimingReplayListener
import com.sap.sailing.domain.swisstimingreplayadapter.SwissTimingReplayRace;
import com.sap.sailing.domain.swisstimingreplayadapter.SwissTimingReplayService;
import com.sap.sailing.domain.tracking.TrackedRegattaRegistry;
import com.sap.sailing.util.ByteArrayOutputStreamWithVisibleBuffer;
import com.sap.sse.util.ByteArrayOutputStreamWithVisibleBuffer;
public class SwissTimingReplayServiceImpl implements SwissTimingReplayService {
@@ -19,6 +19,7 @@ Require-Bundle: com.sap.sailing.domain,
org.json.simple;bundle-version="1.1.0",
com.sap.sse.common,
com.sap.sse.replication,
com.sap.sse
com.sap.sse,
com.sap.sse.shared.android
Export-Package: com.sap.sailing.domain.test,
com.sap.sailing.domain.test.mock
@@ -1,5 +1,8 @@
package com.sap.sailing.domain.common;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import org.junit.Test;
import com.sap.sailing.domain.common.media.MediaTrack;
@@ -8,8 +11,6 @@ import com.sap.sse.common.TimePoint;
import com.sap.sse.common.impl.MillisecondsDurationImpl;
import com.sap.sse.common.impl.MillisecondsTimePoint;
import static org.junit.Assert.*;
public class MediaTrackTest {
private static final Duration ONE_MILLISECOND = new MillisecondsDurationImpl(1);
@@ -1,13 +1,14 @@
package com.sap.sailing.domain.common;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import org.junit.Test;
import com.sap.sailing.domain.common.media.MediaUtil;
import com.sap.sse.common.TimePoint;
import com.sap.sse.common.impl.MillisecondsTimePoint;
import static org.junit.Assert.*;
public class MediaUtilTest {
@Test
@@ -1,7 +1,10 @@
package com.sap.sailing.domain.common.test;
import static org.junit.Assert.*;
import static org.hamcrest.Matchers.*;
import static org.hamcrest.Matchers.is;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue;
import org.junit.Test;
@@ -23,8 +23,6 @@ import java.util.Set;
import org.junit.Before;
import org.junit.Test;
import com.sap.sailing.domain.common.Cloner;
import com.sap.sailing.domain.common.Color;
import com.sap.sailing.domain.common.dto.BoatClassDTO;
import com.sap.sailing.domain.common.dto.CompetitorDTO;
import com.sap.sailing.domain.common.dto.CompetitorDTOImpl;
@@ -37,9 +35,11 @@ import com.sap.sailing.domain.common.dto.LegEntryDTO;
import com.sap.sailing.domain.common.dto.RaceColumnDTO;
import com.sap.sailing.domain.common.dto.RaceDTO;
import com.sap.sailing.domain.test.StoredTrackBasedTest;
import com.sap.sailing.util.ClonerImpl;
import com.sap.sse.common.Cloner;
import com.sap.sse.common.Color;
import com.sap.sse.common.Util;
import com.sap.sse.common.impl.MillisecondsTimePoint;
import com.sap.sse.util.ClonerImpl;
/**
* Tests the compressing / de-compressing functionality of {@link LeaderboardDTO} and {@link IncrementalLeaderboardDTO}.
@@ -4,7 +4,7 @@ import static org.junit.Assert.assertEquals;
import org.junit.Test;
import com.sap.sailing.domain.common.impl.RGBColor;
import com.sap.sse.common.impl.RGBColor;
public class RGBColorTest {
/**
@@ -1,13 +1,15 @@
package com.sap.sailing.domain.common.test;
import static org.hamcrest.Matchers.is;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue;
import org.junit.Test;
import com.sap.sse.common.TimePoint;
import com.sap.sse.common.impl.MillisecondsTimePoint;
import static org.junit.Assert.*;
import static org.hamcrest.Matchers.*;
public class TimePointTest {
@Test
public void compare() {
@@ -11,7 +11,7 @@ import com.sap.sailing.domain.base.impl.CompetitorImpl;
import com.sap.sailing.domain.base.impl.NationalityImpl;
import com.sap.sailing.domain.base.impl.PersonImpl;
import com.sap.sailing.domain.base.impl.TeamImpl;
import com.sap.sailing.domain.common.Color;
import com.sap.sse.common.Color;
public abstract class AbstractLeaderboardTest {
public static CompetitorImpl createCompetitor(String competitorName) {
@@ -112,8 +112,7 @@ public abstract class AbstractTracTracLiveTest extends StoredTrackBasedTest {
e.printStackTrace();
}
}
// TODO Start live and stored data subscribers
// test cases need to start the thread calling startController
// test cases need to start the thread calling addListenersForStoredDataAndStartController
// after adding their listeners
}
@@ -11,7 +11,7 @@ import java.util.Set;
import org.junit.Test;
import com.sap.sailing.util.impl.ArrayListNavigableSet;
import com.sap.sse.common.ArrayListNavigableSet;
public class ArrayListNavigableSetTest {
@Test
@@ -18,8 +18,8 @@ import com.sap.sailing.domain.base.Team;
import com.sap.sailing.domain.base.WithNationality;
import com.sap.sailing.domain.base.impl.DomainFactoryImpl;
import com.sap.sailing.domain.base.impl.DynamicCompetitor;
import com.sap.sailing.domain.common.Color;
import com.sap.sailing.domain.common.impl.RGBColor;
import com.sap.sse.common.Color;
import com.sap.sse.common.impl.RGBColor;
/**
* Tests the {@link CompetitorChangeListener} stuff including the serialization of the transitive listener
@@ -10,8 +10,8 @@ import java.util.concurrent.ConcurrentLinkedQueue;
import org.junit.Test;
import com.sap.sailing.util.impl.ConcurrentHashBag;
import com.sap.sse.common.Util;
import com.sap.sse.concurrent.ConcurrentHashBag;
/**
* Measures the performance of different concurrent collections types and shows their add and remove behavior for
@@ -10,7 +10,7 @@ import java.util.Set;
import org.junit.Test;
import com.sap.sailing.util.impl.ConcurrentWeakHashMap;
import com.sap.sse.concurrent.ConcurrentWeakHashMap;
/**
* Tests the class {@link ConcurrentWeakHashMap}.
@@ -15,10 +15,9 @@ import com.sap.sailing.domain.base.PositionWithConfidence;
import com.sap.sailing.domain.base.impl.PositionWithConfidenceImpl;
import com.sap.sailing.domain.common.Bearing;
import com.sap.sailing.domain.common.Position;
import com.sap.sailing.domain.common.confidence.ConfidenceBasedAverager;
import com.sap.sailing.domain.confidence.ConfidenceFactory;
import com.sap.sailing.domain.common.confidence.BearingWithConfidence;
import com.sap.sailing.domain.common.confidence.BearingWithConfidenceCluster;
import com.sap.sailing.domain.common.confidence.ConfidenceBasedAverager;
import com.sap.sailing.domain.common.confidence.HasConfidence;
import com.sap.sailing.domain.common.confidence.HasConfidenceAndIsScalable;
import com.sap.sailing.domain.common.confidence.Weigher;
@@ -30,9 +29,9 @@ import com.sap.sailing.domain.common.impl.KnotSpeedWithBearingImpl;
import com.sap.sailing.domain.common.impl.MeterDistance;
import com.sap.sailing.domain.common.impl.NauticalMileDistance;
import com.sap.sailing.domain.common.impl.RadianBearingImpl;
import com.sap.sailing.domain.common.scalablevalue.ScalableValue;
import com.sap.sailing.domain.common.scalablevalue.impl.ScalablePosition;
import com.sap.sailing.domain.confidence.ConfidenceBasedWindAverager;
import com.sap.sailing.domain.confidence.ConfidenceFactory;
import com.sap.sailing.domain.tracking.Wind;
import com.sap.sailing.domain.tracking.WindWithConfidence;
import com.sap.sailing.domain.tracking.impl.ScalableWind;
@@ -40,6 +39,7 @@ import com.sap.sailing.domain.tracking.impl.WindImpl;
import com.sap.sailing.domain.tracking.impl.WindWithConfidenceImpl;
import com.sap.sse.common.TimePoint;
import com.sap.sse.common.impl.MillisecondsTimePoint;
import com.sap.sse.common.scalablevalue.ScalableValue;
public class ConfidenceTest {
private static class ScalableBearing implements ScalableValue<ScalableBearing, Bearing> {
@@ -19,8 +19,8 @@ import java.util.regex.Pattern;
import org.junit.Ignore;
import org.junit.Test;
import com.sap.sailing.domain.common.CountryCode;
import com.sap.sailing.domain.common.CountryCodeFactory;
import com.sap.sse.common.CountryCode;
import com.sap.sse.common.CountryCodeFactory;
import com.sap.sse.common.Util;
public class CountryCodeTest {
@@ -0,0 +1,90 @@
package com.sap.sailing.domain.test;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Random;
import java.util.Set;
import org.junit.Test;
import com.sap.sailing.domain.base.ScalableInteger;
import com.sap.sailing.domain.common.confidence.impl.ScalableDouble;
import com.sap.sse.util.kmeans.Cluster;
import com.sap.sse.util.kmeans.KMeansClusterer;
import com.sap.sse.util.kmeans.KMeansClustererWithEquidistantInitialization;
import com.sap.sse.util.kmeans.KMeansMappingClusterer;
public class KMeansTest {
@Test
public void simpleIntegerTestWithEquidistantInitialization() {
KMeansClustererWithEquidistantInitialization<Integer, Integer, ScalableInteger> clusterer = new KMeansClustererWithEquidistantInitialization<>(4,
Arrays.asList(new ScalableInteger(1), new ScalableInteger(1), new ScalableInteger(11), new ScalableInteger(11), new ScalableInteger(21), new ScalableInteger(21), new ScalableInteger(31), new ScalableInteger(31)));
Set<Cluster<ScalableInteger, Integer, Integer, ScalableInteger>> clusters = clusterer.getClusters();
assertEquals(4, clusters.size());
Set<Integer> clusterCentroids = new HashSet<>();
clusters.stream().map((c)->c.getCentroid()).forEach((e)->clusterCentroids.add(e));
assertEquals(new HashSet<Integer>(Arrays.asList(1, 11, 21, 31)), clusterCentroids);
}
@Test
public void doubleTestWithRandomInitialization() {
Random random = new Random(1234);
List<ScalableDouble> elements = new ArrayList<>();
for (int i=0; i<100000; i++) {
elements.add(new ScalableDouble(random.nextDouble()));
}
KMeansClusterer<Double, Double, ScalableDouble> clusterer = new KMeansClusterer<>(4, elements);
Set<Cluster<ScalableDouble, Double, Double, ScalableDouble>> clusters = clusterer.getClusters();
for (Cluster<ScalableDouble, Double, Double, ScalableDouble> cluster : clusters) {
for (ScalableDouble element : cluster) {
final Double elementVal = element.divide(1);
final double actualDistanceFromMean = Math.abs(cluster.getMean() - elementVal);
for (Cluster<ScalableDouble, Double, Double, ScalableDouble> otherCluster : clusters) {
if (otherCluster != cluster) {
Double otherClusterMean = otherCluster.getMean();
final double distanceToOtherClusterMean = Math.abs(otherClusterMean - elementVal);
// assert that all elements are in the cluster where they are closest to the cluster's mean
assertTrue(distanceToOtherClusterMean >= actualDistanceFromMean);
}
}
}
}
}
@Test
public void testMappingClusterer() {
List<String> strings = new ArrayList<>();
Random random = new Random();
StringBuilder sb = new StringBuilder();
for (int i=0; i<100000; i++) {
for (int j=random.nextInt(100); j>=0; j--) {
sb.append((char) ('A'+random.nextInt(26)));
}
strings.add(sb.toString());
sb.delete(0, sb.length());
}
KMeansMappingClusterer<String, Integer, Integer, ScalableInteger> clusterer = new KMeansMappingClusterer<>(5, strings, (s)->new ScalableInteger(s.length()),
Arrays.asList(5, 25, 50, 75, 100).iterator());
Set<Cluster<String, Integer, Integer, ScalableInteger>> clusters = clusterer.getClusters();
assertEquals(5, clusters.size());
for (Cluster<String, Integer, Integer, ScalableInteger> cluster : clusters) {
for (String element : cluster) {
final int elementLength = element.length();
double actualDistanceFromMean = Math.abs(cluster.getMean() - elementLength);
for (Cluster<String, Integer, Integer, ScalableInteger> otherCluster : clusters) {
if (otherCluster != cluster) {
final int otherClusterMean = otherCluster.getMean();
final double distanceToOtherClusterMean = Math.abs(otherClusterMean - elementLength);
// assert that all elements are in the cluster where they are closest to the cluster's mean
assertTrue(distanceToOtherClusterMean >= actualDistanceFromMean);
}
}
}
}
}
}
@@ -38,7 +38,6 @@ import com.sap.sailing.domain.base.impl.MarkImpl;
import com.sap.sailing.domain.base.impl.RegattaImpl;
import com.sap.sailing.domain.base.impl.SeriesImpl;
import com.sap.sailing.domain.base.impl.WaypointImpl;
import com.sap.sailing.domain.common.Color;
import com.sap.sailing.domain.common.NoWindException;
import com.sap.sailing.domain.common.dto.LeaderboardDTO;
import com.sap.sailing.domain.leaderboard.Leaderboard;
@@ -54,6 +53,7 @@ import com.sap.sailing.domain.tracking.TrackedRegatta;
import com.sap.sailing.domain.tracking.TrackedRegattaRegistry;
import com.sap.sailing.domain.tracking.impl.DynamicTrackedRaceImpl;
import com.sap.sailing.domain.tracking.impl.EmptyWindStore;
import com.sap.sse.common.Color;
import com.sap.sse.common.TimePoint;
import com.sap.sse.common.impl.MillisecondsTimePoint;
@@ -72,7 +72,7 @@ import com.sap.sailing.domain.tracking.TrackedRace;
import com.sap.sailing.domain.tracking.TrackedRegattaRegistry;
import com.sap.sailing.domain.tracking.impl.MarkPassingImpl;
import com.sap.sailing.domain.tracking.impl.TimedComparator;
import com.sap.sailing.util.impl.ArrayListNavigableSet;
import com.sap.sse.common.ArrayListNavigableSet;
import com.sap.sse.common.Duration;
import com.sap.sse.common.TimePoint;
import com.sap.sse.common.Util;
@@ -4,9 +4,9 @@ import static org.junit.Assert.assertEquals;
import org.junit.Test;
import com.sap.sailing.util.AutoCloseableReadLock;
import com.sap.sailing.util.AutoCloseableWriteLock;
import com.sap.sailing.util.impl.NamedReentrantReadWriteLock;
import com.sap.sse.concurrent.NamedReentrantReadWriteLock;
import com.sap.sse.util.AutoCloseableReadLock;
import com.sap.sse.util.AutoCloseableWriteLock;
public class LockAsResourceTest {
@Test
@@ -14,9 +14,9 @@ import org.junit.Test;
import com.sap.sailing.domain.test.measurements.Measurement;
import com.sap.sailing.domain.test.measurements.MeasurementCase;
import com.sap.sailing.domain.test.measurements.MeasurementXMLFile;
import com.sap.sailing.util.impl.LockUtil;
import com.sap.sailing.util.impl.NamedReentrantReadWriteLock;
import com.sap.sse.common.Util;
import com.sap.sse.concurrent.LockUtil;
import com.sap.sse.concurrent.NamedReentrantReadWriteLock;
public class LockTraceTest {
private static class LockingThread extends Thread {
@@ -36,7 +36,6 @@ import com.sap.sailing.domain.base.impl.DomainFactoryImpl;
import com.sap.sailing.domain.base.impl.EventImpl;
import com.sap.sailing.domain.base.impl.PersonImpl;
import com.sap.sailing.domain.base.impl.TeamImpl;
import com.sap.sailing.domain.common.Color;
import com.sap.sailing.domain.leaderboard.Leaderboard;
import com.sap.sailing.domain.leaderboard.LeaderboardGroup;
import com.sap.sailing.domain.leaderboard.impl.FlexibleLeaderboardImpl;
@@ -44,6 +43,7 @@ import com.sap.sailing.domain.leaderboard.impl.HighPoint;
import com.sap.sailing.domain.leaderboard.impl.LeaderboardGroupImpl;
import com.sap.sailing.domain.leaderboard.impl.ThresholdBasedResultDiscardingRuleImpl;
import com.sap.sailing.domain.leaderboard.meta.LeaderboardGroupMetaLeaderboard;
import com.sap.sse.common.Color;
import com.sap.sse.common.Duration;
import com.sap.sse.common.Util;
import com.sap.sse.common.impl.MillisecondsTimePoint;
@@ -24,6 +24,7 @@ import com.sap.sailing.domain.base.RaceDefinition;
import com.sap.sailing.domain.base.Regatta;
import com.sap.sailing.domain.base.Waypoint;
import com.sap.sailing.domain.common.Position;
import com.sap.sailing.domain.common.TrackedRaceStatusEnum;
import com.sap.sailing.domain.common.impl.DegreePosition;
import com.sap.sailing.domain.racelog.impl.EmptyRaceLogStore;
import com.sap.sailing.domain.regattalog.impl.EmptyRegattaLogStore;
@@ -35,6 +36,7 @@ import com.sap.sailing.domain.tracking.impl.DynamicTrackedRegattaImpl;
import com.sap.sailing.domain.tracking.impl.EmptyWindStore;
import com.sap.sailing.domain.tracking.impl.GPSFixImpl;
import com.sap.sailing.domain.tracking.impl.TrackedLegImpl;
import com.sap.sailing.domain.tracking.impl.TrackedRaceStatusImpl;
import com.sap.sailing.domain.tractracadapter.Receiver;
import com.sap.sailing.domain.tractracadapter.ReceiverType;
import com.sap.sailing.domain.tractracadapter.TracTracConnectionConstants;
@@ -109,11 +111,7 @@ public abstract class OnlineTracTracBasedTest extends AbstractTracTracLiveTest {
throws InterruptedException {
setStoredDataLoaded(false);
ArrayList<Receiver> receivers = new ArrayList<Receiver>();
for (Receiver r : domainFactory.getUpdateReceivers(trackedRegatta, getTracTracRace(), EmptyWindStore.INSTANCE, /* delayToLiveInMillis */0l, /* simulator */null, new DynamicRaceDefinitionSet() {
@Override
public void addRaceDefinition(RaceDefinition race, DynamicTrackedRace trackedRace) {
}
},
for (Receiver r : domainFactory.getUpdateReceivers(trackedRegatta, getTracTracRace(), EmptyWindStore.INSTANCE, /* delayToLiveInMillis */0l, /* simulator */null, createRaceDefinitionSet(),
/* trackedRegattaRegistry */null,
/* courseDesignUpdateURI */null, /* tracTracUsername */null, null, /* tracTracPassword */
getEventSubscriber(), getRaceSubscriber(), receiverTypes)) {
@@ -125,6 +123,31 @@ public abstract class OnlineTracTracBasedTest extends AbstractTracTracLiveTest {
@Override
public void gotStoredDataEvent(IStoredDataEvent storedDataEvent) {
TrackedRaceStatusImpl lastStatus;
switch (storedDataEvent.getType()) {
case Begin:
logger.info("Stored data begin");
lastStatus = new TrackedRaceStatusImpl(TrackedRaceStatusEnum.LOADING, 0);
if (getTrackedRace() != null) {
getTrackedRace().setStatus(lastStatus);
}
break;
case End:
logger.info("Stored data end");
lastStatus = new TrackedRaceStatusImpl(TrackedRaceStatusEnum.TRACKING, 1);
if (getTrackedRace() != null) {
getTrackedRace().setStatus(lastStatus);
}
break;
case Progress:
lastStatus = new TrackedRaceStatusImpl(TrackedRaceStatusEnum.LOADING, storedDataEvent.getProgress());
if (getTrackedRace() != null) {
getTrackedRace().setStatus(lastStatus);
}
break;
default:
break;
}
if (storedDataEvent.getProgress() == 1.0) {
synchronized (semaphor) {
storedDataLoaded = true;
@@ -164,6 +187,18 @@ public abstract class OnlineTracTracBasedTest extends AbstractTracTracLiveTest {
trackedRace = (DynamicTrackedRaceImpl) getTrackedRegatta().getTrackedRace(race);
}
/**
* Creates a race definition set that receives a call-back when the tracked race has been created. Subclasses may override this
* in order to be informed at the point in time when the race creation happens.
*/
protected DynamicRaceDefinitionSet createRaceDefinitionSet() {
return new DynamicRaceDefinitionSet() {
@Override
public void addRaceDefinition(RaceDefinition race, DynamicTrackedRace trackedRace) {
}
};
}
private void setStoredDataLoaded(boolean storedDataLoaded) {
this.storedDataLoaded = storedDataLoaded;
}
@@ -4,8 +4,8 @@ import java.util.concurrent.locks.ReentrantReadWriteLock;
import org.junit.Test;
import com.sap.sailing.util.impl.LockUtil;
import com.sap.sailing.util.impl.NamedReentrantReadWriteLock;
import com.sap.sse.concurrent.LockUtil;
import com.sap.sse.concurrent.NamedReentrantReadWriteLock;
/**
* {@link ReentrantReadWriteLock} can produce a lock between readers and other readers if the lock
@@ -12,8 +12,8 @@ import org.junit.Test;
import com.sap.sailing.domain.base.Course;
import com.sap.sailing.domain.tractracadapter.DomainFactory;
import com.sap.sailing.domain.tractracadapter.Receiver;
import com.tractrac.model.lib.api.route.IControlRoute;
import com.sap.sse.common.Util;
import com.tractrac.model.lib.api.route.IControlRoute;
import com.tractrac.subscription.lib.api.control.IControlRouteChangeListener;
public class RouteAssemblyTest extends AbstractTracTracLiveTest {
@@ -28,9 +28,9 @@ import com.sap.sailing.domain.tracking.DynamicGPSFixTrack;
import com.sap.sailing.domain.tracking.GPSFixMoving;
import com.sap.sailing.domain.tracking.impl.WindImpl;
import com.sap.sailing.domain.tractracadapter.ReceiverType;
import com.tractrac.model.lib.api.event.CreateModelException;
import com.sap.sse.common.Util;
import com.sap.sse.common.impl.MillisecondsTimePoint;
import com.tractrac.model.lib.api.event.CreateModelException;
import com.tractrac.subscription.lib.api.SubscriberInitializationException;
public class SerializationWithOnlineRaceTest extends OnlineTracTracBasedTest {
@@ -15,11 +15,11 @@ import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import com.sap.sailing.util.SmartFutureCache;
import com.sap.sailing.util.SmartFutureCache.EmptyUpdateInterval;
import com.sap.sailing.util.impl.LockUtil;
import com.sap.sailing.util.impl.NamedReentrantReadWriteLock;
import com.sap.sse.common.Util;
import com.sap.sse.concurrent.LockUtil;
import com.sap.sse.concurrent.NamedReentrantReadWriteLock;
import com.sap.sse.util.SmartFutureCache;
import com.sap.sse.util.SmartFutureCache.EmptyUpdateInterval;
/**
* When the thread reading a value from the cache holds a fair read lock, and another thread is trying to obtain the
@@ -13,9 +13,9 @@ import java.util.concurrent.ConcurrentSkipListSet;
import org.junit.Ignore;
import org.junit.Test;
import com.sap.sailing.util.SmartFutureCache;
import com.sap.sailing.util.SmartFutureCache.EmptyUpdateInterval;
import com.sap.sailing.util.SmartFutureCache.UpdateInterval;
import com.sap.sse.util.SmartFutureCache;
import com.sap.sse.util.SmartFutureCache.EmptyUpdateInterval;
import com.sap.sse.util.SmartFutureCache.UpdateInterval;
public class SmartFutureCacheTest {
@Test
@@ -24,7 +24,6 @@ import com.sap.sailing.domain.base.impl.DynamicPerson;
import com.sap.sailing.domain.base.impl.DynamicTeam;
import com.sap.sailing.domain.base.impl.PersonImpl;
import com.sap.sailing.domain.base.impl.TeamImpl;
import com.sap.sailing.domain.common.Color;
import com.sap.sailing.domain.common.Position;
import com.sap.sailing.domain.common.SpeedWithBearing;
import com.sap.sailing.domain.common.impl.DegreeBearingImpl;
@@ -34,6 +33,7 @@ import com.sap.sailing.domain.tracking.DynamicGPSFixTrack;
import com.sap.sailing.domain.tracking.GPSFixMoving;
import com.sap.sailing.domain.tracking.impl.DynamicGPSFixMovingTrackImpl;
import com.sap.sailing.domain.tracking.impl.GPSFixMovingImpl;
import com.sap.sse.common.Color;
import com.sap.sse.common.TimePoint;
import com.sap.sse.common.impl.MillisecondsTimePoint;
@@ -15,7 +15,6 @@ import com.sap.sailing.domain.base.impl.CompetitorImpl;
import com.sap.sailing.domain.base.impl.NationalityImpl;
import com.sap.sailing.domain.base.impl.PersonImpl;
import com.sap.sailing.domain.base.impl.TeamImpl;
import com.sap.sailing.domain.common.Color;
import com.sap.sailing.domain.common.NoWindException;
import com.sap.sailing.domain.common.Tack;
import com.sap.sailing.domain.common.impl.DegreeBearingImpl;
@@ -25,6 +24,7 @@ import com.sap.sailing.domain.tracking.DynamicGPSFixTrack;
import com.sap.sailing.domain.tracking.GPSFixMoving;
import com.sap.sailing.domain.tracking.Wind;
import com.sap.sailing.domain.tracking.impl.GPSFixMovingImpl;
import com.sap.sse.common.Color;
import com.sap.sse.common.impl.MillisecondsTimePoint;
@@ -27,7 +27,6 @@ import com.sap.sailing.domain.base.impl.RaceDefinitionImpl;
import com.sap.sailing.domain.base.impl.RegattaImpl;
import com.sap.sailing.domain.base.impl.TeamImpl;
import com.sap.sailing.domain.base.impl.WaypointImpl;
import com.sap.sailing.domain.common.Color;
import com.sap.sailing.domain.common.ScoringSchemeType;
import com.sap.sailing.domain.common.WindSourceType;
import com.sap.sailing.domain.common.impl.DegreeBearingImpl;
@@ -45,6 +44,7 @@ import com.sap.sailing.domain.tracking.impl.EmptyWindStore;
import com.sap.sailing.domain.tracking.impl.GPSFixImpl;
import com.sap.sailing.domain.tracking.impl.MarkPassingImpl;
import com.sap.sailing.domain.tracking.impl.WindImpl;
import com.sap.sse.common.Color;
import com.sap.sse.common.TimePoint;
import com.sap.sse.common.impl.MillisecondsTimePoint;
@@ -30,10 +30,10 @@ import com.sap.sailing.domain.tracking.WindTrack;
import com.sap.sailing.domain.tracking.impl.TrackBasedEstimationWindTrackImpl;
import com.sap.sailing.domain.tracking.impl.WindImpl;
import com.sap.sailing.domain.tractracadapter.ReceiverType;
import com.tractrac.model.lib.api.event.CreateModelException;
import com.sap.sse.common.TimePoint;
import com.sap.sse.common.Util;
import com.sap.sse.common.impl.MillisecondsTimePoint;
import com.tractrac.model.lib.api.event.CreateModelException;
import com.tractrac.subscription.lib.api.SubscriberInitializationException;
public class WindEstimationOnKielerWoche505Race2DataTest extends OnlineTracTracBasedTest {
@@ -33,7 +33,6 @@ import com.sap.sailing.domain.base.impl.RaceDefinitionImpl;
import com.sap.sailing.domain.base.impl.RegattaImpl;
import com.sap.sailing.domain.base.impl.TeamImpl;
import com.sap.sailing.domain.common.Bearing;
import com.sap.sailing.domain.common.Color;
import com.sap.sailing.domain.common.Position;
import com.sap.sailing.domain.common.ScoringSchemeType;
import com.sap.sailing.domain.common.confidence.Weigher;
@@ -59,6 +58,7 @@ import com.sap.sailing.domain.tracking.impl.MarkPassingImpl;
import com.sap.sailing.domain.tracking.impl.WindImpl;
import com.sap.sailing.domain.tracking.impl.WindTrackImpl;
import com.sap.sailing.domain.tracking.impl.WindWithConfidenceImpl;
import com.sap.sse.common.Color;
import com.sap.sse.common.TimePoint;
import com.sap.sse.common.Util;
import com.sap.sse.common.Util.Pair;
@@ -37,10 +37,10 @@ import com.sap.sailing.domain.tracking.GPSFixMoving;
import com.sap.sailing.domain.tracking.MarkPassing;
import com.sap.sailing.domain.tracking.impl.WindImpl;
import com.sap.sailing.domain.tractracadapter.ReceiverType;
import com.tractrac.model.lib.api.event.CreateModelException;
import com.sap.sse.common.TimePoint;
import com.sap.sse.common.Util;
import com.sap.sse.common.impl.MillisecondsTimePoint;
import com.tractrac.model.lib.api.event.CreateModelException;
import com.tractrac.subscription.lib.api.SubscriberInitializationException;
public abstract class AbstractMarkPassingTest extends OnlineTracTracBasedTest {
@@ -73,11 +73,11 @@ import com.sap.sailing.domain.tractracadapter.ReceiverType;
import com.sap.sailing.domain.tractracadapter.TracTracConfiguration;
import com.sap.sailing.domain.tractracadapter.TracTracControlPoint;
import com.sap.sailing.domain.tractracadapter.TracTracRaceTracker;
import com.sap.sailing.util.WeakIdentityHashMap;
import com.sap.sse.common.TimePoint;
import com.sap.sse.common.Util;
import com.sap.sse.common.Util.Pair;
import com.sap.sse.common.impl.MillisecondsTimePoint;
import com.sap.sse.util.WeakIdentityHashMap;
import com.tractrac.model.lib.api.data.IPosition;
import com.tractrac.model.lib.api.event.CreateModelException;
import com.tractrac.model.lib.api.event.ICompetitor;
@@ -30,10 +30,11 @@ Export-Package: com.sap.sailing.domain.base,
com.sap.sailing.util.impl;x-friends:="com.sap.sailing.server.replication,com.sap.sailing.domain.test"
Bundle-ActivationPolicy: lazy
Require-Bundle: com.googlecode.java-diff-utils;bundle-version="1.3.0",
com.sap.sailing.domain.shared.android;bundle-version="1.0.0",
com.sap.sailing.domain.shared.android,
com.sap.sailing.domain.common,
org.json.simple;bundle-version="1.1.0",
com.sap.sailing.geocoding,
com.sap.sse.datamining.shared;bundle-version="1.0.0",
com.sap.sse.datamining.shared,
com.sap.sse.common,
com.sap.sse
com.sap.sse,
com.sap.sse.shared.android
@@ -1,7 +1,7 @@
package com.sap.sailing.domain.base;
import com.sap.sailing.domain.common.scalablevalue.AbstractScalarValue;
import com.sap.sailing.domain.common.scalablevalue.ScalableValue;
import com.sap.sse.common.scalablevalue.AbstractScalarValue;
import com.sap.sse.common.scalablevalue.ScalableValue;
public class ScalableInteger implements AbstractScalarValue<Integer> {
@@ -12,12 +12,12 @@ public class ScalableInteger implements AbstractScalarValue<Integer> {
}
@Override
public ScalableValue<Integer, Integer> multiply(double factor) {
public ScalableInteger multiply(double factor) {
return new ScalableInteger((int) (getValue() * factor));
}
@Override
public ScalableValue<Integer, Integer> add(ScalableValue<Integer, Integer> t) {
public ScalableInteger add(ScalableValue<Integer, Integer> t) {
return new ScalableInteger(getValue() + t.getValue());
}
@@ -31,4 +31,18 @@ public class ScalableInteger implements AbstractScalarValue<Integer> {
return value;
}
@Override
public double getDistance(Integer other) {
return Math.abs(value-other);
}
@Override
public String toString() {
return value.toString();
}
@Override
public int compareTo(Integer o) {
return new Integer(value).compareTo(o);
}
}
@@ -23,10 +23,10 @@ import com.sap.sailing.domain.base.Leg;
import com.sap.sailing.domain.base.Waypoint;
import com.sap.sailing.domain.common.PassingInstruction;
import com.sap.sailing.util.CourseAsWaypointList;
import com.sap.sailing.util.impl.LockUtil;
import com.sap.sailing.util.impl.NamedReentrantReadWriteLock;
import com.sap.sse.common.Util;
import com.sap.sse.common.impl.NamedImpl;
import com.sap.sse.concurrent.LockUtil;
import com.sap.sse.concurrent.NamedReentrantReadWriteLock;
import difflib.DiffUtils;
import difflib.Patch;
@@ -3,7 +3,7 @@ package com.sap.sailing.domain.base.impl;
import java.io.Serializable;
import com.sap.sailing.domain.base.CompetitorStore;
import com.sap.sailing.domain.common.Color;
import com.sap.sse.common.Color;
public interface DynamicCompetitorStore extends CompetitorStore {
@Override
@@ -3,8 +3,8 @@ package com.sap.sailing.domain.base.impl;
import com.sap.sailing.domain.base.PositionWithConfidence;
import com.sap.sailing.domain.common.Position;
import com.sap.sailing.domain.common.confidence.impl.HasConfidenceImpl;
import com.sap.sailing.domain.common.scalablevalue.IsScalable;
import com.sap.sailing.domain.common.scalablevalue.impl.ScalablePosition;
import com.sap.sse.common.scalablevalue.IsScalable;
public class PositionWithConfidenceImpl<RelativeTo> extends HasConfidenceImpl<ScalablePosition, Position, RelativeTo> implements
PositionWithConfidence<RelativeTo>, IsScalable<ScalablePosition, Position> {

Some files were not shown because too many files have changed in this diff Show More