mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-10-17 01:31:01 +00:00
Merge branch 'master' into raceboard-simulation
This commit is contained in:
commit
fdaac2e97e
39 files changed
+1048
-298
No files matched your search
+4
-3
@@ -18,6 +18,7 @@ public enum BoatClassMasterdata {
|
||||
DRAGON_INT ("Dragon Int.", true, 8.89, 1.96, BoatHullType.MONOHULL, true, "Drachen", "Dragon"),
|
||||
EXTREME_40 ("Extreme 40", false, 12.2, 6.60, BoatHullType.CATAMARAN, true, "Extreme-40", "Extreme40", "ESS40"),
|
||||
D_35 ("D35", false, 10.81, 6.89, BoatHullType.CATAMARAN, false),
|
||||
ELLIOTT_6M ("Elliott 6m", true, 6.0, 2.35, BoatHullType.MONOHULL, true, "Elliott6m"),
|
||||
EUROPE_INT ("Europe Int.", true, 3.35, 1.35, BoatHullType.MONOHULL, false, "Europe"),
|
||||
F_18 ("Formula 18", true, 6.85, 2.25, BoatHullType.CATAMARAN, true, "F18", "F-18"),
|
||||
FARR_30 ("Farr 30", true, 9.42, 3.08, BoatHullType.MONOHULL, true, "F30", "F-30", "Farr-30"),
|
||||
@@ -45,7 +46,7 @@ public enum BoatClassMasterdata {
|
||||
PLATU_25 ("Platu 25", true, 7.53, 2.62, BoatHullType.MONOHULL, true, "Platu", "Platu-25", "PLA", "B25"),
|
||||
RS_X ("RS:X", true, 2.86, 0.93, BoatHullType.SURFERBOARD, false, "RS-X", "RSX", "RS:X"),
|
||||
SONAR ("Sonar", true, 7.01, 2.39, BoatHullType.MONOHULL, true),
|
||||
STAR ("Star", true, 6.92, 1.74, BoatHullType.MONOHULL, false),
|
||||
STAR ("Star", true, 6.92, 1.74, BoatHullType.MONOHULL, false, "STR"),
|
||||
STREAMLINE ("Streamline", true, 7.15, 2.55, BoatHullType.MONOHULL, true),
|
||||
SWAN_45 ("Swan 45", true, 13.83, 3.91, BoatHullType.MONOHULL, true, "Swan", "Swan-45"),
|
||||
TORNADO ("Tornado Catamaran", true, 6.10, 3.02, BoatHullType.CATAMARAN, true, "Tornado", "Tornado Cat"),
|
||||
@@ -103,8 +104,8 @@ public enum BoatClassMasterdata {
|
||||
return null;
|
||||
}
|
||||
|
||||
private static String unifyBoatClassName(String boatClassName) {
|
||||
return boatClassName.toUpperCase().replaceAll("\\s+","");
|
||||
public static String unifyBoatClassName(String boatClassName) {
|
||||
return boatClassName == null ? null : boatClassName.toUpperCase().replaceAll("\\s+","");
|
||||
}
|
||||
|
||||
public Distance getHullLength() {
|
||||
|
||||
+3
-3
@@ -7,8 +7,8 @@ import com.sap.sse.common.Util.Pair;
|
||||
|
||||
public interface PolarSheetsXYDiagramData extends Serializable {
|
||||
|
||||
List<Pair<Double, Double>> getPointsForUpwindStarboardAverageSpeedMovingAverage();
|
||||
|
||||
List<Pair<Double, Double>> getPointsForUpwindStarboardAverageConfidence();
|
||||
List<Pair<Double, Double>> getPointsForAverageSpeedMovingAverage(Tack tack, LegType legType);
|
||||
|
||||
List<Pair<Double, Double>> getPointsForAverageConfidence(Tack tack, LegType legType);
|
||||
|
||||
}
|
||||
+39
-11
@@ -1,33 +1,61 @@
|
||||
package com.sap.sailing.domain.common.impl;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import com.sap.sailing.domain.common.LegType;
|
||||
import com.sap.sailing.domain.common.PolarSheetsXYDiagramData;
|
||||
import com.sap.sailing.domain.common.Tack;
|
||||
import com.sap.sse.common.Util.Pair;
|
||||
|
||||
public class PolarSheetsXYDiagramDataImpl implements PolarSheetsXYDiagramData {
|
||||
|
||||
|
||||
private static final long serialVersionUID = 778667444303004468L;
|
||||
|
||||
PolarSheetsXYDiagramDataImpl() {}
|
||||
PolarSheetsXYDiagramDataImpl() {
|
||||
}
|
||||
|
||||
private List<Pair<Double, Double>> pointsForUpwindStarboardAverageSpeedMovingAverage;
|
||||
private List<Pair<Double, Double>> pointsForUpwindStarboardAverageConfidence;
|
||||
private Map<Pair<LegType, Tack>, List<Pair<Double, Double>>> pointsForAverageSpeedMovingAverage;
|
||||
|
||||
private Map<Pair<LegType, Tack>, List<Pair<Double, Double>>> pointsForAverageConfidence;
|
||||
|
||||
public PolarSheetsXYDiagramDataImpl(List<Pair<Double, Double>> pointsForUpwindStarboardAverageSpeedMovingAverage,
|
||||
List<Pair<Double, Double>> pointsForUpwindStarboardAverageConfidence) {
|
||||
this.pointsForUpwindStarboardAverageSpeedMovingAverage = pointsForUpwindStarboardAverageSpeedMovingAverage;
|
||||
this.pointsForUpwindStarboardAverageConfidence = pointsForUpwindStarboardAverageConfidence;
|
||||
List<Pair<Double, Double>> pointsForUpwindStarboardAverageConfidence,
|
||||
List<Pair<Double, Double>> pointsForUpwindPortAverageSpeedMovingAverage,
|
||||
List<Pair<Double, Double>> pointsForUpwindPortAverageConfidence,
|
||||
List<Pair<Double, Double>> pointsForDownwindStarboardAverageSpeedMovingAverage,
|
||||
List<Pair<Double, Double>> pointsForDownwindStarboardAverageConfidence,
|
||||
List<Pair<Double, Double>> pointsForDownwindPortAverageSpeedMovingAverage,
|
||||
List<Pair<Double, Double>> pointsForDownwindPortAverageConfidence) {
|
||||
pointsForAverageSpeedMovingAverage = new HashMap<Pair<LegType, Tack>, List<Pair<Double, Double>>>();
|
||||
pointsForAverageConfidence = new HashMap<Pair<LegType, Tack>, List<Pair<Double, Double>>>();
|
||||
pointsForAverageSpeedMovingAverage.put(new Pair<LegType, Tack>(LegType.UPWIND, Tack.STARBOARD),
|
||||
pointsForUpwindStarboardAverageSpeedMovingAverage);
|
||||
pointsForAverageConfidence.put(new Pair<LegType, Tack>(LegType.UPWIND, Tack.STARBOARD),
|
||||
pointsForUpwindStarboardAverageConfidence);
|
||||
pointsForAverageSpeedMovingAverage.put(new Pair<LegType, Tack>(LegType.UPWIND, Tack.PORT),
|
||||
pointsForUpwindPortAverageSpeedMovingAverage);
|
||||
pointsForAverageConfidence.put(new Pair<LegType, Tack>(LegType.UPWIND, Tack.PORT),
|
||||
pointsForUpwindPortAverageConfidence);
|
||||
pointsForAverageSpeedMovingAverage.put(new Pair<LegType, Tack>(LegType.DOWNWIND, Tack.STARBOARD),
|
||||
pointsForDownwindStarboardAverageSpeedMovingAverage);
|
||||
pointsForAverageConfidence.put(new Pair<LegType, Tack>(LegType.DOWNWIND, Tack.STARBOARD),
|
||||
pointsForDownwindStarboardAverageConfidence);
|
||||
pointsForAverageSpeedMovingAverage.put(new Pair<LegType, Tack>(LegType.DOWNWIND, Tack.PORT),
|
||||
pointsForDownwindPortAverageSpeedMovingAverage);
|
||||
pointsForAverageConfidence.put(new Pair<LegType, Tack>(LegType.DOWNWIND, Tack.PORT),
|
||||
pointsForDownwindPortAverageConfidence);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Pair<Double, Double>> getPointsForUpwindStarboardAverageSpeedMovingAverage() {
|
||||
return pointsForUpwindStarboardAverageSpeedMovingAverage;
|
||||
public List<Pair<Double, Double>> getPointsForAverageSpeedMovingAverage(Tack tack, LegType legType) {
|
||||
return pointsForAverageSpeedMovingAverage.get(new Pair<LegType, Tack>(legType, tack));
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Pair<Double, Double>> getPointsForUpwindStarboardAverageConfidence() {
|
||||
return pointsForUpwindStarboardAverageConfidence;
|
||||
public List<Pair<Double, Double>> getPointsForAverageConfidence(Tack tack, LegType legType) {
|
||||
return pointsForAverageConfidence.get(new Pair<LegType, Tack>(legType, tack));
|
||||
}
|
||||
|
||||
}
|
||||
+13
-4
@@ -270,18 +270,27 @@ public class SharedDomainFactoryImpl implements SharedDomainFactory {
|
||||
|
||||
@Override
|
||||
public BoatClass getOrCreateBoatClass(String name, boolean typicallyStartsUpwind) {
|
||||
final String unifiedBoatClassName = BoatClassMasterdata.unifyBoatClassName(name);
|
||||
synchronized (boatClassCache) {
|
||||
BoatClass result = boatClassCache.get(name);
|
||||
if (result == null && name != null) {
|
||||
if (result == null) {
|
||||
result = boatClassCache.get(unifiedBoatClassName);
|
||||
}
|
||||
if (result == null && unifiedBoatClassName != null) {
|
||||
BoatClassMasterdata boatClassMasterdata = BoatClassMasterdata.resolveBoatClass(name);
|
||||
if (boatClassMasterdata != null) {
|
||||
result = new BoatClassImpl(name, boatClassMasterdata);
|
||||
result = new BoatClassImpl(boatClassMasterdata.getDisplayName(), boatClassMasterdata);
|
||||
boatClassCache.put(name, result);
|
||||
boatClassCache.put(unifiedBoatClassName, result);
|
||||
boatClassCache.put(result.getName(), result);
|
||||
for (String alternativeName : boatClassMasterdata.getAlternativeNames()) {
|
||||
boatClassCache.put(alternativeName, result);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (result == null) {
|
||||
result = new BoatClassImpl(name, typicallyStartsUpwind);
|
||||
boatClassCache.put(name, result);
|
||||
result = new BoatClassImpl(unifiedBoatClassName, typicallyStartsUpwind);
|
||||
boatClassCache.put(unifiedBoatClassName, result);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
+1
-1
@@ -102,7 +102,7 @@ public class SimpleDomainFactoryTest {
|
||||
}
|
||||
});
|
||||
assertNotNull(raceDefinition.getBoatClass());
|
||||
assertEquals("Unknown", raceDefinition.getBoatClass().getName());
|
||||
assertEquals("UNKNOWN", raceDefinition.getBoatClass().getName());
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
+1
-1
@@ -97,7 +97,7 @@ public class MultipleClassesInRegattaTest {
|
||||
new DummyTrackedRegattaRegistry());
|
||||
|
||||
assertEquals("STG", kiwotest1.getRegatta().getBoatClass().getName());
|
||||
assertEquals("505", kiwotest2.getRegatta().getBoatClass().getName());
|
||||
assertEquals("5O5", kiwotest2.getRegatta().getBoatClass().getName());
|
||||
assertEquals("49er", kiwotest3.getRegatta().getBoatClass().getName());
|
||||
assertEquals("STG", weym470may112014_2.getRegatta().getBoatClass().getName());
|
||||
assertNotSame(kiwotest1.getRegatta(), kiwotest2.getRegatta());
|
||||
|
||||
@@ -1,60 +1,60 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<launchConfiguration type="com.google.gdt.eclipse.suite.webapp">
|
||||
<booleanAttribute key="com.google.gdt.eclipse.core.RUN_SERVER" value="false"/>
|
||||
<stringAttribute key="com.google.gdt.eclipse.suiteMainTypeProcessor.PREVIOUSLY_SET_MAIN_TYPE_NAME" value="com.google.gwt.dev.GWTShell"/>
|
||||
<booleanAttribute key="com.google.gdt.eclipse.suiteWarArgumentProcessor.IS_WAR_FROM_PROJECT_PROPERTIES" value="true"/>
|
||||
<listAttribute key="com.google.gwt.eclipse.core.ENTRY_POINT_MODULES">
|
||||
<listEntry value="com.sap.sailing.gwt.ui.VideoPopup"/>
|
||||
<listEntry value="com.sap.sailing.gwt.ui.Simulator"/>
|
||||
</listAttribute>
|
||||
<stringAttribute key="com.google.gwt.eclipse.core.URL" value="/gwt/Home.html"/>
|
||||
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
|
||||
<listEntry value="/com.sap.sailing.gwt.ui"/>
|
||||
</listAttribute>
|
||||
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
|
||||
<listEntry value="4"/>
|
||||
</listAttribute>
|
||||
<listAttribute key="org.eclipse.debug.ui.favoriteGroups">
|
||||
<listEntry value="org.eclipse.debug.ui.launchGroup.debug"/>
|
||||
<listEntry value="org.eclipse.debug.ui.launchGroup.run"/>
|
||||
</listAttribute>
|
||||
<listAttribute key="org.eclipse.jdt.launching.CLASSPATH">
|
||||
<listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <runtimeClasspathEntry containerPath="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6" javaProject="com.sap.sailing.gwt.ui" path="1" type="4"/> "/>
|
||||
<listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <runtimeClasspathEntry internalArchive="/com.sap.sailing.gwt.ui/src/main/resources" path="3" type="2"/> "/>
|
||||
<listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <runtimeClasspathEntry internalArchive="/com.sap.sailing.gwt.ui/src/main/java" path="3" type="2"/> "/>
|
||||
<listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <runtimeClasspathEntry internalArchive="/com.sap.sailing.domain/src" path="3" type="2"/> "/>
|
||||
<listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <runtimeClasspathEntry internalArchive="/com.googlecode.java-diff-utils/src" path="3" type="2"/> "/>
|
||||
<listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <runtimeClasspathEntry internalArchive="/com.sap.sailing.domain.common/src" path="3" type="2"/> "/>
|
||||
<listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <runtimeClasspathEntry internalArchive="/org.json.simple/src" path="3" type="2"/> "/>
|
||||
<listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <runtimeClasspathEntry internalArchive="/com.sap.sailing.server/src" path="3" type="2"/> "/>
|
||||
<listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <runtimeClasspathEntry internalArchive="/com.sap.sailing.domain.tractracadapter/src" path="3" type="2"/> "/>
|
||||
<listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <runtimeClasspathEntry internalArchive="/com.sap.sailing.expeditionconnector/src" path="3" type="2"/> "/>
|
||||
<listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <runtimeClasspathEntry internalArchive="/com.sap.sailing.declination/src" path="3" type="2"/> "/>
|
||||
<listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <runtimeClasspathEntry internalArchive="/com.sap.sailing.declination/resources" path="3" type="2"/> "/>
|
||||
<listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <runtimeClasspathEntry internalArchive="/com.sap.sailing.udpconnector/src" path="3" type="2"/> "/>
|
||||
<listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <runtimeClasspathEntry internalArchive="/com.sap.sse.mongodb/src" path="3" type="2"/> "/>
|
||||
<listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <runtimeClasspathEntry internalArchive="/com.sap.sailing.domain.swisstimingadapter/src" path="3" type="2"/> "/>
|
||||
<listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <runtimeClasspathEntry internalArchive="/com.sap.sailing.domain.persistence/src" path="3" type="2"/> "/>
|
||||
<listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <runtimeClasspathEntry internalArchive="/com.sap.sailing.domain.swisstimingadapter.persistence/src" path="3" type="2"/> "/>
|
||||
<listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <runtimeClasspathEntry internalArchive="/com.sap.sailing.domain.tractracadapter.persistence/src" path="3" type="2"/> "/>
|
||||
<listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <runtimeClasspathEntry internalArchive="/org.moxieapps.gwt.highcharts/src" path="3" type="2"/> "/>
|
||||
<listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <runtimeClasspathEntry internalArchive="/com.sap.sailing.geocoding/src" path="3" type="2"/> "/>
|
||||
<listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <runtimeClasspathEntry internalArchive="/com.sap.sailing.datamining.shared/src" path="3" type="2"/> "/>
|
||||
<listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <runtimeClasspathEntry internalArchive="/com.sap.sse.common/src" path="3" type="2"/> "/>
|
||||
<listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <runtimeClasspathEntry internalArchive="/com.sap.sse.datamining.shared/src" path="3" type="2"/> "/>
|
||||
<listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <runtimeClasspathEntry internalArchive="/com.sap.sse.gwt/src" path="3" type="2"/> "/>
|
||||
<listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <runtimeClasspathEntry internalArchive="/com.google.gwt.osgi/lib/gwt-user.jar" path="3" type="2"/> "/>
|
||||
<listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <runtimeClasspathEntry id="org.eclipse.jdt.launching.classpathentry.defaultClasspath"> <memento exportedEntriesOnly="false" project="com.sap.sailing.gwt.ui"/> </runtimeClasspathEntry> "/>
|
||||
<listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <runtimeClasspathEntry internalArchive="/com.sap.sse.gwt.adminconsole/src" path="3" type="2"/> "/>
|
||||
<listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <runtimeClasspathEntry internalArchive="/com.sap.sse.operationaltransformation/src" path="3" type="2"/> "/>
|
||||
<listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <runtimeClasspathEntry internalArchive="/com.sap.sse.replication/src" path="3" type="2"/> "/>
|
||||
<listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <runtimeClasspathEntry internalArchive="/com.sap.sse.security.common/src" path="3" type="2"/> "/>
|
||||
</listAttribute>
|
||||
<stringAttribute key="org.eclipse.jdt.launching.CLASSPATH_PROVIDER" value="com.google.gwt.eclipse.core.moduleClasspathProvider"/>
|
||||
<booleanAttribute key="org.eclipse.jdt.launching.DEFAULT_CLASSPATH" value="false"/>
|
||||
<stringAttribute key="org.eclipse.jdt.launching.JRE_CONTAINER" value="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
|
||||
<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="com.google.gwt.dev.DevMode"/>
|
||||
<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-war "${project_loc:com.sap.sailing.gwt.ui}" -noserver -remoteUI "${gwt_remote_ui_server_port}:${unique_id}" -logLevel INFO -codeServerPort 9997 -startupUrl /gwt/Home.html com.sap.sailing.gwt.ui.Search -startupUrl /gwt/Home.html com.sap.sailing.gwt.Home -startupUrl /gwt/AdminConsole.html com.sap.sailing.gwt.ui.AdminConsole -startupUrl /gwt/LeaderboardEditing.html com.sap.sailing.gwt.ui.LeaderboardEditing -startupUrl /gwt/Leaderboard.html com.sap.sailing.gwt.ui.Leaderboard -startupUrl /gwt/Spectator.html com.sap.sailing.gwt.ui.Spectator -startupUrl /gwt/RaceBoard.html com.sap.sailing.gwt.ui.RaceBoard -startupUrl /gwt/PolarSheets.html com.sap.sailing.gwt.ui.PolarSheets -startupUrl /gwt/RegattaOverview.html com.sap.sailing.gwt.ui.RegattaOverview -startupUrl /gwt/DataMining.html com.sap.sailing.gwt.ui.DataMining -startupUrl /gwt/Simulator.html com.sap.sailing.gwt.ui.Simulator com.sap.sailing.gwt.ui.VideoPopup"/>
|
||||
<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="com.sap.sailing.gwt.ui"/>
|
||||
<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Xmx2048m -XX:MaxPermSize=512m -Xdebug -Xrunjdwp:transport=dt_socket,address=7999,server=y"/>
|
||||
</launchConfiguration>
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<launchConfiguration type="com.google.gdt.eclipse.suite.webapp">
|
||||
<booleanAttribute key="com.google.gdt.eclipse.core.RUN_SERVER" value="false"/>
|
||||
<stringAttribute key="com.google.gdt.eclipse.suiteMainTypeProcessor.PREVIOUSLY_SET_MAIN_TYPE_NAME" value="com.google.gwt.dev.GWTShell"/>
|
||||
<booleanAttribute key="com.google.gdt.eclipse.suiteWarArgumentProcessor.IS_WAR_FROM_PROJECT_PROPERTIES" value="true"/>
|
||||
<listAttribute key="com.google.gwt.eclipse.core.ENTRY_POINT_MODULES">
|
||||
<listEntry value="com.sap.sailing.gwt.ui.VideoPopup"/>
|
||||
<listEntry value="com.sap.sailing.gwt.ui.Simulator"/>
|
||||
</listAttribute>
|
||||
<stringAttribute key="com.google.gwt.eclipse.core.URL" value="/gwt/Home.html"/>
|
||||
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
|
||||
<listEntry value="/com.sap.sailing.gwt.ui"/>
|
||||
</listAttribute>
|
||||
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
|
||||
<listEntry value="4"/>
|
||||
</listAttribute>
|
||||
<listAttribute key="org.eclipse.debug.ui.favoriteGroups">
|
||||
<listEntry value="org.eclipse.debug.ui.launchGroup.debug"/>
|
||||
<listEntry value="org.eclipse.debug.ui.launchGroup.run"/>
|
||||
</listAttribute>
|
||||
<listAttribute key="org.eclipse.jdt.launching.CLASSPATH">
|
||||
<listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <runtimeClasspathEntry containerPath="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6" javaProject="com.sap.sailing.gwt.ui" path="1" type="4"/> "/>
|
||||
<listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <runtimeClasspathEntry internalArchive="/com.sap.sailing.gwt.ui/src/main/resources" path="3" type="2"/> "/>
|
||||
<listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <runtimeClasspathEntry internalArchive="/com.sap.sailing.gwt.ui/src/main/java" path="3" type="2"/> "/>
|
||||
<listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <runtimeClasspathEntry internalArchive="/com.sap.sailing.domain/src" path="3" type="2"/> "/>
|
||||
<listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <runtimeClasspathEntry internalArchive="/com.googlecode.java-diff-utils/src" path="3" type="2"/> "/>
|
||||
<listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <runtimeClasspathEntry internalArchive="/com.sap.sailing.domain.common/src" path="3" type="2"/> "/>
|
||||
<listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <runtimeClasspathEntry internalArchive="/org.json.simple/src" path="3" type="2"/> "/>
|
||||
<listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <runtimeClasspathEntry internalArchive="/com.sap.sailing.server/src" path="3" type="2"/> "/>
|
||||
<listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <runtimeClasspathEntry internalArchive="/com.sap.sailing.domain.tractracadapter/src" path="3" type="2"/> "/>
|
||||
<listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <runtimeClasspathEntry internalArchive="/com.sap.sailing.expeditionconnector/src" path="3" type="2"/> "/>
|
||||
<listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <runtimeClasspathEntry internalArchive="/com.sap.sailing.declination/src" path="3" type="2"/> "/>
|
||||
<listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <runtimeClasspathEntry internalArchive="/com.sap.sailing.declination/resources" path="3" type="2"/> "/>
|
||||
<listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <runtimeClasspathEntry internalArchive="/com.sap.sailing.udpconnector/src" path="3" type="2"/> "/>
|
||||
<listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <runtimeClasspathEntry internalArchive="/com.sap.sse.mongodb/src" path="3" type="2"/> "/>
|
||||
<listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <runtimeClasspathEntry internalArchive="/com.sap.sailing.domain.swisstimingadapter/src" path="3" type="2"/> "/>
|
||||
<listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <runtimeClasspathEntry internalArchive="/com.sap.sailing.domain.persistence/src" path="3" type="2"/> "/>
|
||||
<listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <runtimeClasspathEntry internalArchive="/com.sap.sailing.domain.swisstimingadapter.persistence/src" path="3" type="2"/> "/>
|
||||
<listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <runtimeClasspathEntry internalArchive="/com.sap.sailing.domain.tractracadapter.persistence/src" path="3" type="2"/> "/>
|
||||
<listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <runtimeClasspathEntry internalArchive="/org.moxieapps.gwt.highcharts/src" path="3" type="2"/> "/>
|
||||
<listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <runtimeClasspathEntry internalArchive="/com.sap.sailing.geocoding/src" path="3" type="2"/> "/>
|
||||
<listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <runtimeClasspathEntry internalArchive="/com.sap.sailing.datamining.shared/src" path="3" type="2"/> "/>
|
||||
<listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <runtimeClasspathEntry internalArchive="/com.sap.sse.common/src" path="3" type="2"/> "/>
|
||||
<listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <runtimeClasspathEntry internalArchive="/com.sap.sse.datamining.shared/src" path="3" type="2"/> "/>
|
||||
<listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <runtimeClasspathEntry internalArchive="/com.sap.sse.gwt/src" path="3" type="2"/> "/>
|
||||
<listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <runtimeClasspathEntry internalArchive="/com.google.gwt.osgi/lib/gwt-user.jar" path="3" type="2"/> "/>
|
||||
<listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <runtimeClasspathEntry id="org.eclipse.jdt.launching.classpathentry.defaultClasspath"> <memento exportedEntriesOnly="false" project="com.sap.sailing.gwt.ui"/> </runtimeClasspathEntry> "/>
|
||||
<listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <runtimeClasspathEntry internalArchive="/com.sap.sse.gwt.adminconsole/src" path="3" type="2"/> "/>
|
||||
<listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <runtimeClasspathEntry internalArchive="/com.sap.sse.operationaltransformation/src" path="3" type="2"/> "/>
|
||||
<listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <runtimeClasspathEntry internalArchive="/com.sap.sse.replication/src" path="3" type="2"/> "/>
|
||||
<listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <runtimeClasspathEntry internalArchive="/com.sap.sse.security.common/src" path="3" type="2"/> "/>
|
||||
</listAttribute>
|
||||
<stringAttribute key="org.eclipse.jdt.launching.CLASSPATH_PROVIDER" value="com.google.gwt.eclipse.core.moduleClasspathProvider"/>
|
||||
<booleanAttribute key="org.eclipse.jdt.launching.DEFAULT_CLASSPATH" value="false"/>
|
||||
<stringAttribute key="org.eclipse.jdt.launching.JRE_CONTAINER" value="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
|
||||
<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="com.google.gwt.dev.DevMode"/>
|
||||
<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-war "${project_loc:com.sap.sailing.gwt.ui}" -noserver -remoteUI "${gwt_remote_ui_server_port}:${unique_id}" -logLevel INFO -codeServerPort 9997 -startupUrl /gwt/Home.html com.sap.sailing.gwt.ui.Search -startupUrl /gwt/Home.html com.sap.sailing.gwt.Home -startupUrl /gwt/AdminConsole.html com.sap.sailing.gwt.ui.AdminConsole -startupUrl /gwt/LeaderboardEditing.html com.sap.sailing.gwt.ui.LeaderboardEditing -startupUrl /gwt/Leaderboard.html com.sap.sailing.gwt.ui.Leaderboard -startupUrl /gwt/Spectator.html com.sap.sailing.gwt.ui.Spectator -startupUrl /gwt/RaceBoard.html com.sap.sailing.gwt.ui.RaceBoard -startupUrl /gwt/PolarSheets.html com.sap.sailing.gwt.ui.PolarSheets -startupUrl /gwt/RegattaOverview.html com.sap.sailing.gwt.ui.RegattaOverview -startupUrl /gwt/DataMining.html com.sap.sailing.gwt.ui.DataMining -startupUrl /gwt/Simulator.html com.sap.sailing.gwt.ui.Simulator com.sap.sailing.gwt.ui.VideoPopup"/>
|
||||
<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="com.sap.sailing.gwt.ui"/>
|
||||
<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Xmx2048m -XX:MaxPermSize=512m -Xdebug -Xrunjdwp:transport=dt_socket,address=7999,server=y"/>
|
||||
</launchConfiguration>
|
||||
@@ -1,73 +1,73 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<launchConfiguration type="com.google.gdt.eclipse.suite.webapp">
|
||||
<booleanAttribute key="com.google.gdt.eclipse.core.RUN_SERVER" value="false"/>
|
||||
<stringAttribute key="com.google.gdt.eclipse.suiteMainTypeProcessor.PREVIOUSLY_SET_MAIN_TYPE_NAME" value="com.google.gwt.dev.GWTShell"/>
|
||||
<booleanAttribute key="com.google.gdt.eclipse.suiteWarArgumentProcessor.IS_WAR_FROM_PROJECT_PROPERTIES" value="true"/>
|
||||
<listAttribute key="com.google.gwt.eclipse.core.ENTRY_POINT_MODULES">
|
||||
<listEntry value="com.sap.sailing.gwt.ui.RaceBoard"/>
|
||||
<listEntry value="com.sap.sailing.gwt.Home"/>
|
||||
<listEntry value="com.sap.sailing.gwt.ui.DataMining"/>
|
||||
<listEntry value="com.sap.sailing.gwt.ui.YoutubePopup"/>
|
||||
<listEntry value="com.sap.sailing.gwt.ui.LeaderboardEditing"/>
|
||||
<listEntry value="com.sap.sailing.gwt.ui.AdminConsole"/>
|
||||
<listEntry value="com.sap.sailing.gwt.ui.Spectator"/>
|
||||
<listEntry value="com.sap.sailing.gwt.ui.RegattaOverview"/>
|
||||
<listEntry value="com.sap.sailing.gwt.AutoPlay"/>
|
||||
<listEntry value="com.sap.sailing.gwt.ui.VideoPopup"/>
|
||||
<listEntry value="com.sap.sailing.gwt.ui.PolarSheets"/>
|
||||
<listEntry value="com.sap.sailing.gwt.ui.Leaderboard"/>
|
||||
<listEntry value="com.sap.sailing.gwt.ui.Simulator"/>
|
||||
</listAttribute>
|
||||
<stringAttribute key="com.google.gwt.eclipse.core.URL" value="/gwt/Home.html"/>
|
||||
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
|
||||
<listEntry value="/com.sap.sailing.gwt.ui"/>
|
||||
</listAttribute>
|
||||
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
|
||||
<listEntry value="4"/>
|
||||
</listAttribute>
|
||||
<listAttribute key="org.eclipse.debug.ui.favoriteGroups">
|
||||
<listEntry value="org.eclipse.debug.ui.launchGroup.debug"/>
|
||||
<listEntry value="org.eclipse.debug.ui.launchGroup.run"/>
|
||||
</listAttribute>
|
||||
<listAttribute key="org.eclipse.jdt.launching.CLASSPATH">
|
||||
<listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <runtimeClasspathEntry containerPath="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6" javaProject="com.sap.sailing.gwt.ui" path="1" type="4"/> "/>
|
||||
<listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <runtimeClasspathEntry internalArchive="/com.sap.sailing.gwt.ui/src/main/resources" path="3" type="2"/> "/>
|
||||
<listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <runtimeClasspathEntry internalArchive="/com.sap.sailing.gwt.ui/src/main/java" path="3" type="2"/> "/>
|
||||
<listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <runtimeClasspathEntry internalArchive="/com.sap.sailing.domain/src" path="3" type="2"/> "/>
|
||||
<listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <runtimeClasspathEntry internalArchive="/com.googlecode.java-diff-utils/src" path="3" type="2"/> "/>
|
||||
<listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <runtimeClasspathEntry internalArchive="/com.sap.sailing.domain.common/src" path="3" type="2"/> "/>
|
||||
<listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <runtimeClasspathEntry internalArchive="/org.json.simple/src" path="3" type="2"/> "/>
|
||||
<listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <runtimeClasspathEntry internalArchive="/com.sap.sailing.server/src" path="3" type="2"/> "/>
|
||||
<listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <runtimeClasspathEntry internalArchive="/com.sap.sailing.domain.tractracadapter/src" path="3" type="2"/> "/>
|
||||
<listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <runtimeClasspathEntry internalArchive="/com.sap.sailing.expeditionconnector/src" path="3" type="2"/> "/>
|
||||
<listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <runtimeClasspathEntry internalArchive="/com.sap.sailing.declination/src" path="3" type="2"/> "/>
|
||||
<listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <runtimeClasspathEntry internalArchive="/com.sap.sailing.declination/resources" path="3" type="2"/> "/>
|
||||
<listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <runtimeClasspathEntry internalArchive="/com.sap.sailing.udpconnector/src" path="3" type="2"/> "/>
|
||||
<listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <runtimeClasspathEntry internalArchive="/com.sap.sse.mongodb/src" path="3" type="2"/> "/>
|
||||
<listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <runtimeClasspathEntry internalArchive="/com.sap.sailing.domain.swisstimingadapter/src" path="3" type="2"/> "/>
|
||||
<listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <runtimeClasspathEntry internalArchive="/com.sap.sailing.domain.persistence/src" path="3" type="2"/> "/>
|
||||
<listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <runtimeClasspathEntry internalArchive="/com.sap.sailing.domain.swisstimingadapter.persistence/src" path="3" type="2"/> "/>
|
||||
<listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <runtimeClasspathEntry internalArchive="/com.sap.sse.operationaltransformation/src" path="3" type="2"/> "/>
|
||||
<listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <runtimeClasspathEntry internalArchive="/com.sap.sse.replication/src" path="3" type="2"/> "/>
|
||||
<listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <runtimeClasspathEntry internalArchive="/com.sap.sailing.domain.tractracadapter.persistence/src" path="3" type="2"/> "/>
|
||||
<listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <runtimeClasspathEntry internalArchive="/org.moxieapps.gwt.highcharts/src" path="3" type="2"/> "/>
|
||||
<listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <runtimeClasspathEntry internalArchive="/com.sap.sailing.geocoding/src" path="3" type="2"/> "/>
|
||||
<listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <runtimeClasspathEntry internalArchive="/com.sap.sailing.datamining.shared/src" path="3" type="2"/> "/>
|
||||
<listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <runtimeClasspathEntry internalArchive="/com.sap.sse.common/src" path="3" type="2"/> "/>
|
||||
<listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <runtimeClasspathEntry internalArchive="/com.sap.sse.datamining.shared/src" path="3" type="2"/> "/>
|
||||
<listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <runtimeClasspathEntry internalArchive="/com.sap.sse.gwt/src" path="3" type="2"/> "/>
|
||||
<listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <runtimeClasspathEntry internalArchive="/com.google.gwt.osgi/lib/gwt-user.jar" path="3" type="2"/> "/>
|
||||
<listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <runtimeClasspathEntry id="org.eclipse.jdt.launching.classpathentry.defaultClasspath"> <memento exportedEntriesOnly="false" project="com.sap.sailing.gwt.ui"/> </runtimeClasspathEntry> "/>
|
||||
<listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <runtimeClasspathEntry internalArchive="/com.sap.sse.security/src" path="3" type="2"/> "/>
|
||||
<listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <runtimeClasspathEntry internalArchive="/com.sap.sse.security.ui/src/main/java" path="3" type="2"/> "/>
|
||||
<listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <runtimeClasspathEntry internalArchive="/com.sap.sse.gwt.adminconsole/src" path="3" type="2"/> "/>
|
||||
<listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <runtimeClasspathEntry internalArchive="/com.sap.sse.security.common/src" path="3" type="2"/> "/>
|
||||
</listAttribute>
|
||||
<stringAttribute key="org.eclipse.jdt.launching.CLASSPATH_PROVIDER" value="com.google.gwt.eclipse.core.moduleClasspathProvider"/>
|
||||
<booleanAttribute key="org.eclipse.jdt.launching.DEFAULT_CLASSPATH" value="false"/>
|
||||
<stringAttribute key="org.eclipse.jdt.launching.JRE_CONTAINER" value="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
|
||||
<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="com.google.gwt.dev.DevMode"/>
|
||||
<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-war "${project_loc:com.sap.sailing.gwt.ui}" -noserver -remoteUI "${gwt_remote_ui_server_port}:${unique_id}" -logLevel INFO -codeServerPort 9997 -startupUrl /gwt/Home.html com.sap.sailing.gwt.Home -startupUrl /gwt/AdminConsole.html com.sap.sailing.gwt.ui.AdminConsole -startupUrl /gwt/LeaderboardEditing.html com.sap.sailing.gwt.ui.LeaderboardEditing -startupUrl /gwt/Leaderboard.html com.sap.sailing.gwt.ui.Leaderboard -startupUrl /gwt/Spectator.html com.sap.sailing.gwt.ui.Spectator -startupUrl /gwt/RaceBoard.html com.sap.sailing.gwt.ui.RaceBoard -startupUrl /gwt/PolarSheets.html com.sap.sailing.gwt.ui.PolarSheets -startupUrl /gwt/RegattaOverview.html com.sap.sailing.gwt.ui.RegattaOverview -startupUrl /gwt/DataMining.html com.sap.sailing.gwt.ui.DataMining -startupUrl /gwt/Simulator.html com.sap.sailing.gwt.ui.Simulator -startupUrl /gwt/VideoPopup.html com.sap.sailing.gwt.ui.VideoPopup -startupUrl /security/ui/Login.html com.sap.sse.security.ui.Login -startupUrl /security/ui/EditProfile.html com.sap.sse.security.ui.EditProfile -startupUrl /security/ui/EmailValidation.html com.sap.sse.security.ui.EmailValidation com.sap.sailing.gwt.ui.Simulator com.sap.sailing.gwt.ui.Leaderboard com.sap.sailing.gwt.ui.PolarSheets com.sap.sailing.gwt.ui.VideoPopup com.sap.sailing.gwt.AutoPlay com.sap.sailing.gwt.ui.RegattaOverview com.sap.sailing.gwt.ui.Spectator com.sap.sailing.gwt.ui.AdminConsole com.sap.sailing.gwt.ui.LeaderboardEditing com.sap.sailing.gwt.ui.YoutubePopup com.sap.sailing.gwt.ui.DataMining com.sap.sailing.gwt.Home com.sap.sailing.gwt.ui.RaceBoard"/>
|
||||
<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="com.sap.sailing.gwt.ui"/>
|
||||
<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Xmx2048m"/>
|
||||
</launchConfiguration>
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<launchConfiguration type="com.google.gdt.eclipse.suite.webapp">
|
||||
<booleanAttribute key="com.google.gdt.eclipse.core.RUN_SERVER" value="false"/>
|
||||
<stringAttribute key="com.google.gdt.eclipse.suiteMainTypeProcessor.PREVIOUSLY_SET_MAIN_TYPE_NAME" value="com.google.gwt.dev.GWTShell"/>
|
||||
<booleanAttribute key="com.google.gdt.eclipse.suiteWarArgumentProcessor.IS_WAR_FROM_PROJECT_PROPERTIES" value="true"/>
|
||||
<listAttribute key="com.google.gwt.eclipse.core.ENTRY_POINT_MODULES">
|
||||
<listEntry value="com.sap.sailing.gwt.ui.RaceBoard"/>
|
||||
<listEntry value="com.sap.sailing.gwt.Home"/>
|
||||
<listEntry value="com.sap.sailing.gwt.ui.DataMining"/>
|
||||
<listEntry value="com.sap.sailing.gwt.ui.YoutubePopup"/>
|
||||
<listEntry value="com.sap.sailing.gwt.ui.LeaderboardEditing"/>
|
||||
<listEntry value="com.sap.sailing.gwt.ui.AdminConsole"/>
|
||||
<listEntry value="com.sap.sailing.gwt.ui.Spectator"/>
|
||||
<listEntry value="com.sap.sailing.gwt.ui.RegattaOverview"/>
|
||||
<listEntry value="com.sap.sailing.gwt.AutoPlay"/>
|
||||
<listEntry value="com.sap.sailing.gwt.ui.VideoPopup"/>
|
||||
<listEntry value="com.sap.sailing.gwt.ui.PolarSheets"/>
|
||||
<listEntry value="com.sap.sailing.gwt.ui.Leaderboard"/>
|
||||
<listEntry value="com.sap.sailing.gwt.ui.Simulator"/>
|
||||
</listAttribute>
|
||||
<stringAttribute key="com.google.gwt.eclipse.core.URL" value="/gwt/Home.html"/>
|
||||
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
|
||||
<listEntry value="/com.sap.sailing.gwt.ui"/>
|
||||
</listAttribute>
|
||||
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
|
||||
<listEntry value="4"/>
|
||||
</listAttribute>
|
||||
<listAttribute key="org.eclipse.debug.ui.favoriteGroups">
|
||||
<listEntry value="org.eclipse.debug.ui.launchGroup.debug"/>
|
||||
<listEntry value="org.eclipse.debug.ui.launchGroup.run"/>
|
||||
</listAttribute>
|
||||
<listAttribute key="org.eclipse.jdt.launching.CLASSPATH">
|
||||
<listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <runtimeClasspathEntry containerPath="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6" javaProject="com.sap.sailing.gwt.ui" path="1" type="4"/> "/>
|
||||
<listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <runtimeClasspathEntry internalArchive="/com.sap.sailing.gwt.ui/src/main/resources" path="3" type="2"/> "/>
|
||||
<listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <runtimeClasspathEntry internalArchive="/com.sap.sailing.gwt.ui/src/main/java" path="3" type="2"/> "/>
|
||||
<listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <runtimeClasspathEntry internalArchive="/com.sap.sailing.domain/src" path="3" type="2"/> "/>
|
||||
<listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <runtimeClasspathEntry internalArchive="/com.googlecode.java-diff-utils/src" path="3" type="2"/> "/>
|
||||
<listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <runtimeClasspathEntry internalArchive="/com.sap.sailing.domain.common/src" path="3" type="2"/> "/>
|
||||
<listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <runtimeClasspathEntry internalArchive="/org.json.simple/src" path="3" type="2"/> "/>
|
||||
<listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <runtimeClasspathEntry internalArchive="/com.sap.sailing.server/src" path="3" type="2"/> "/>
|
||||
<listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <runtimeClasspathEntry internalArchive="/com.sap.sailing.domain.tractracadapter/src" path="3" type="2"/> "/>
|
||||
<listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <runtimeClasspathEntry internalArchive="/com.sap.sailing.expeditionconnector/src" path="3" type="2"/> "/>
|
||||
<listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <runtimeClasspathEntry internalArchive="/com.sap.sailing.declination/src" path="3" type="2"/> "/>
|
||||
<listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <runtimeClasspathEntry internalArchive="/com.sap.sailing.declination/resources" path="3" type="2"/> "/>
|
||||
<listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <runtimeClasspathEntry internalArchive="/com.sap.sailing.udpconnector/src" path="3" type="2"/> "/>
|
||||
<listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <runtimeClasspathEntry internalArchive="/com.sap.sse.mongodb/src" path="3" type="2"/> "/>
|
||||
<listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <runtimeClasspathEntry internalArchive="/com.sap.sailing.domain.swisstimingadapter/src" path="3" type="2"/> "/>
|
||||
<listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <runtimeClasspathEntry internalArchive="/com.sap.sailing.domain.persistence/src" path="3" type="2"/> "/>
|
||||
<listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <runtimeClasspathEntry internalArchive="/com.sap.sailing.domain.swisstimingadapter.persistence/src" path="3" type="2"/> "/>
|
||||
<listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <runtimeClasspathEntry internalArchive="/com.sap.sse.operationaltransformation/src" path="3" type="2"/> "/>
|
||||
<listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <runtimeClasspathEntry internalArchive="/com.sap.sse.replication/src" path="3" type="2"/> "/>
|
||||
<listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <runtimeClasspathEntry internalArchive="/com.sap.sailing.domain.tractracadapter.persistence/src" path="3" type="2"/> "/>
|
||||
<listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <runtimeClasspathEntry internalArchive="/org.moxieapps.gwt.highcharts/src" path="3" type="2"/> "/>
|
||||
<listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <runtimeClasspathEntry internalArchive="/com.sap.sailing.geocoding/src" path="3" type="2"/> "/>
|
||||
<listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <runtimeClasspathEntry internalArchive="/com.sap.sailing.datamining.shared/src" path="3" type="2"/> "/>
|
||||
<listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <runtimeClasspathEntry internalArchive="/com.sap.sse.common/src" path="3" type="2"/> "/>
|
||||
<listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <runtimeClasspathEntry internalArchive="/com.sap.sse.datamining.shared/src" path="3" type="2"/> "/>
|
||||
<listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <runtimeClasspathEntry internalArchive="/com.sap.sse.gwt/src" path="3" type="2"/> "/>
|
||||
<listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <runtimeClasspathEntry internalArchive="/com.google.gwt.osgi/lib/gwt-user.jar" path="3" type="2"/> "/>
|
||||
<listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <runtimeClasspathEntry id="org.eclipse.jdt.launching.classpathentry.defaultClasspath"> <memento exportedEntriesOnly="false" project="com.sap.sailing.gwt.ui"/> </runtimeClasspathEntry> "/>
|
||||
<listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <runtimeClasspathEntry internalArchive="/com.sap.sse.security/src" path="3" type="2"/> "/>
|
||||
<listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <runtimeClasspathEntry internalArchive="/com.sap.sse.security.ui/src/main/java" path="3" type="2"/> "/>
|
||||
<listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <runtimeClasspathEntry internalArchive="/com.sap.sse.gwt.adminconsole/src" path="3" type="2"/> "/>
|
||||
<listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <runtimeClasspathEntry internalArchive="/com.sap.sse.security.common/src" path="3" type="2"/> "/>
|
||||
</listAttribute>
|
||||
<stringAttribute key="org.eclipse.jdt.launching.CLASSPATH_PROVIDER" value="com.google.gwt.eclipse.core.moduleClasspathProvider"/>
|
||||
<booleanAttribute key="org.eclipse.jdt.launching.DEFAULT_CLASSPATH" value="false"/>
|
||||
<stringAttribute key="org.eclipse.jdt.launching.JRE_CONTAINER" value="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
|
||||
<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="com.google.gwt.dev.DevMode"/>
|
||||
<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-war "${project_loc:com.sap.sailing.gwt.ui}" -noserver -remoteUI "${gwt_remote_ui_server_port}:${unique_id}" -logLevel INFO -codeServerPort 9997 -startupUrl /gwt/Home.html com.sap.sailing.gwt.Home -startupUrl /gwt/AdminConsole.html com.sap.sailing.gwt.ui.AdminConsole -startupUrl /gwt/LeaderboardEditing.html com.sap.sailing.gwt.ui.LeaderboardEditing -startupUrl /gwt/Leaderboard.html com.sap.sailing.gwt.ui.Leaderboard -startupUrl /gwt/Spectator.html com.sap.sailing.gwt.ui.Spectator -startupUrl /gwt/RaceBoard.html com.sap.sailing.gwt.ui.RaceBoard -startupUrl /gwt/PolarSheets.html com.sap.sailing.gwt.ui.PolarSheets -startupUrl /gwt/RegattaOverview.html com.sap.sailing.gwt.ui.RegattaOverview -startupUrl /gwt/DataMining.html com.sap.sailing.gwt.ui.DataMining -startupUrl /gwt/Simulator.html com.sap.sailing.gwt.ui.Simulator -startupUrl /gwt/VideoPopup.html com.sap.sailing.gwt.ui.VideoPopup -startupUrl /security/ui/Login.html com.sap.sse.security.ui.Login -startupUrl /security/ui/EditProfile.html com.sap.sse.security.ui.EditProfile -startupUrl /security/ui/EmailValidation.html com.sap.sse.security.ui.EmailValidation com.sap.sailing.gwt.ui.Simulator com.sap.sailing.gwt.ui.Leaderboard com.sap.sailing.gwt.ui.PolarSheets com.sap.sailing.gwt.ui.VideoPopup com.sap.sailing.gwt.AutoPlay com.sap.sailing.gwt.ui.RegattaOverview com.sap.sailing.gwt.ui.Spectator com.sap.sailing.gwt.ui.AdminConsole com.sap.sailing.gwt.ui.LeaderboardEditing com.sap.sailing.gwt.ui.YoutubePopup com.sap.sailing.gwt.ui.DataMining com.sap.sailing.gwt.Home com.sap.sailing.gwt.ui.RaceBoard"/>
|
||||
<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="com.sap.sailing.gwt.ui"/>
|
||||
<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Xmx2048m"/>
|
||||
</launchConfiguration>
|
||||
+7
-1
@@ -9,9 +9,11 @@ import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Map.Entry;
|
||||
import java.util.Set;
|
||||
import java.util.HashSet;
|
||||
|
||||
import com.google.gwt.user.client.Window;
|
||||
import com.google.gwt.user.client.ui.ListBox;
|
||||
import com.sap.sailing.domain.common.BoatClassMasterdata;
|
||||
import com.sap.sailing.gwt.ui.client.AbstractRegattaPanel;
|
||||
import com.sap.sailing.gwt.ui.client.RaceSelectionProvider;
|
||||
import com.sap.sailing.gwt.ui.client.RegattaRefresher;
|
||||
@@ -163,7 +165,11 @@ public abstract class AbstractEventManagementPanel extends AbstractRegattaPanel
|
||||
}
|
||||
|
||||
private boolean checkBoatClassMatch(Iterable<String> boatClassNames, RegattaDTO selectedRegatta) {
|
||||
return Util.contains(boatClassNames, selectedRegatta.boatClass.getName());
|
||||
Set<BoatClassMasterdata> boatClassNamesMappedToMasterData = new HashSet<>();
|
||||
for (String boatClassName : boatClassNames) {
|
||||
boatClassNamesMappedToMasterData.add(BoatClassMasterdata.resolveBoatClass(boatClassName));
|
||||
}
|
||||
return boatClassNamesMappedToMasterData.contains(BoatClassMasterdata.resolveBoatClass(selectedRegatta.boatClass.getName()));
|
||||
}
|
||||
|
||||
}
|
||||
+1
-2
@@ -572,8 +572,7 @@ public class TracTracEventManagementPanel extends AbstractEventManagementPanel {
|
||||
tractracPassword, new MarkedAsyncCallback<Void>(new AsyncCallback<Void>() {
|
||||
@Override
|
||||
public void onFailure(Throwable caught) {
|
||||
reportError("Error trying to register races " + selectedRaces + " for tracking: "
|
||||
+ caught.getMessage() + ". Check live/stored URI syntax.");
|
||||
reportError(stringMessages.errorTryingToRegisterRacesForTracking(selectedRaces.toString(), caught.getMessage()));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
+1
@@ -1132,4 +1132,5 @@ public interface StringMessages extends com.sap.sse.gwt.client.StringMessages {
|
||||
String noFleetsDefined();
|
||||
String successfullyCreatedRegattas();
|
||||
String active();
|
||||
String errorTryingToRegisterRacesForTracking(String raceNames, String message);
|
||||
}
|
||||
+2
-1
@@ -1114,4 +1114,5 @@ errorTryingToCreateNewEvent=Error trying to create new event {0}: {1}
|
||||
createNewEvent=Create New Event
|
||||
noFleetsDefined=No fleets defined.
|
||||
successfullyCreatedRegattas=Successfully created regattas
|
||||
active=Active
|
||||
active=Active
|
||||
errorTryingToRegisterRacesForTracking=Error trying to register races {0} for tracking: {1}. Check live/stored URI syntax.
|
||||
+2
-1
@@ -1103,4 +1103,5 @@ errorTryingToCreateNewEvent=Fehler beim Anlegen einer neuen Veranstaltung {0}: {
|
||||
createNewEvent=Neue Veranstaltung anlegen
|
||||
noFleetsDefined=Keine Gruppen definiert.
|
||||
successfullyCreatedRegattas=Regatten erfolgreich angelegt
|
||||
active=Aktiv
|
||||
active=Aktiv
|
||||
errorTryingToRegisterRacesForTracking=Fehler beim Versuch, die Wettfahrten {0} zum Tracking zu registrieren: {1}. Live/stored URI syntax prüfen.
|
||||
+2
-1
@@ -1051,4 +1051,5 @@ errorTryingToCreateNewEvent=Error trying to create new event {0}: {1}
|
||||
createNewEvent=Create New Event
|
||||
noFleetsDefined=No fleets defined.
|
||||
successfullyCreatedRegattas=Successfully created regattas
|
||||
active=Active
|
||||
active=Active
|
||||
errorTryingToRegisterRacesForTracking=Error trying to register races {0} for tracking: {1}. Check live/stored URI syntax.
|
||||
+2
-1
@@ -88,7 +88,8 @@ public class AngleOverDataSizeHistogramPanel extends DockLayoutPanel {
|
||||
List<Number> yValues = new ArrayList<>();
|
||||
for (int i = 0; i < 360; i++) {
|
||||
if (histogramDataPerAngle.get(i) != null) {
|
||||
xValues.add(i);
|
||||
int convertedAngle = i > 180 ? i - 360 : i;
|
||||
xValues.add(convertedAngle);
|
||||
yValues.add(histogramDataPerAngle.get(i).getDataCount());
|
||||
}
|
||||
}
|
||||
|
||||
+6
-12
@@ -99,6 +99,8 @@ public class PolarSheetsChartPanel extends DockLayoutPanel {
|
||||
.setPolar(true).setHeight100().setWidth100();
|
||||
polarSheetChart.setChartTitleText(stringMessages.polarSheetChart());
|
||||
polarSheetChart.getYAxis().setMin(0);
|
||||
polarSheetChart.getXAxis().setMin(-179).setMax(180).setTickInterval(45);
|
||||
polarSheetChart.setOption("/pane/startAngle", 180);
|
||||
return polarSheetChart;
|
||||
}
|
||||
|
||||
@@ -129,21 +131,12 @@ public class PolarSheetsChartPanel extends DockLayoutPanel {
|
||||
*/
|
||||
private void createSeriesForWindspeed(String name, int windSpeedLevel, String seriesName) {
|
||||
Series[] seriesPerWindSpeed = seriesMap.get(name);
|
||||
Number[] forEachDeg = initializeDataForNewSeries();
|
||||
seriesPerWindSpeed[windSpeedLevel] = chart.createSeries().setPoints(forEachDeg);
|
||||
seriesPerWindSpeed[windSpeedLevel] = chart.createSeries();
|
||||
seriesPerWindSpeed[windSpeedLevel].setName(seriesName);
|
||||
nameForSeries.put(seriesPerWindSpeed[windSpeedLevel],seriesName);
|
||||
chart.addSeries(seriesPerWindSpeed[windSpeedLevel]);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return An array of 360 numbers. One for each angle.
|
||||
*/
|
||||
private Number[] initializeDataForNewSeries() {
|
||||
Number[] forEachDeg = new Number[360];
|
||||
return forEachDeg;
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds the actual data to the series for each windspeed index. Series array needs to be initialized before calling
|
||||
* this method.
|
||||
@@ -206,17 +199,18 @@ public class PolarSheetsChartPanel extends DockLayoutPanel {
|
||||
return null;
|
||||
}
|
||||
for (int i = 0; i < 360; i++) {
|
||||
int convertedAngle = i > 180 ? i - 360 : i;
|
||||
if (result.getHistogramDataMap().get(windspeed) == null
|
||||
|| result.getHistogramDataMap().get(windspeed).get(i) == null
|
||||
|| result.getHistogramDataMap().get(windspeed).get(i).getConfidenceMeasure() < settings
|
||||
.getMinimumConfidenceMeasure()
|
||||
|| result.getHistogramDataMap().get(windspeed).get(i).getDataCount() < settings
|
||||
.getMinimumDataCountPerAngle()) {
|
||||
points[i] = new Point(0);
|
||||
points[i] = new Point(convertedAngle, 0);
|
||||
continue;
|
||||
}
|
||||
if (points[i] == null) {
|
||||
points[i] = new Point(result.getAveragedPolarDataByWindSpeed()[windspeed][i]);
|
||||
points[i] = new Point(convertedAngle, result.getAveragedPolarDataByWindSpeed()[windspeed][i]);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+28
-10
@@ -16,7 +16,9 @@ import com.google.gwt.event.dom.client.ClickHandler;
|
||||
import com.google.gwt.user.client.ui.Button;
|
||||
import com.google.gwt.user.client.ui.DialogBox;
|
||||
import com.google.gwt.user.client.ui.VerticalPanel;
|
||||
import com.sap.sailing.domain.common.LegType;
|
||||
import com.sap.sailing.domain.common.PolarSheetsXYDiagramData;
|
||||
import com.sap.sailing.domain.common.Tack;
|
||||
import com.sap.sailing.gwt.ui.client.StringMessages;
|
||||
import com.sap.sse.common.Util.Pair;
|
||||
|
||||
@@ -45,23 +47,39 @@ public class PolarSheetsXYDiagramPopupPanel extends DialogBox {
|
||||
containerPanel.add(closeButton);
|
||||
|
||||
|
||||
Point[] pointsForUpwindStarboardAverageSpeedMovingAverage = toPointArray(result.getPointsForUpwindStarboardAverageSpeedMovingAverage());
|
||||
Series speedSeriesMovingAverage = chart.createSeries();
|
||||
speedSeriesMovingAverage.setName("Upwind Starboard Speed - MovingAverage");
|
||||
speedSeriesMovingAverage.setPoints(pointsForUpwindStarboardAverageSpeedMovingAverage);
|
||||
chart.addSeries(speedSeriesMovingAverage);
|
||||
addSpeedAndConfidenceSeriesForTackAndLegType(result, Tack.STARBOARD, LegType.UPWIND, true);
|
||||
addSpeedAndConfidenceSeriesForTackAndLegType(result, Tack.PORT, LegType.UPWIND, false);
|
||||
addSpeedAndConfidenceSeriesForTackAndLegType(result, Tack.STARBOARD, LegType.DOWNWIND, false);
|
||||
addSpeedAndConfidenceSeriesForTackAndLegType(result, Tack.PORT, LegType.DOWNWIND, false);
|
||||
|
||||
Point[] pointsForUpwindStarboardAverageConfidence = toPointArray(result.getPointsForUpwindStarboardAverageConfidence());
|
||||
Series confidenceSeriesMovingAverage = chart
|
||||
chart.redraw();
|
||||
|
||||
|
||||
}
|
||||
|
||||
private void addSpeedAndConfidenceSeriesForTackAndLegType(PolarSheetsXYDiagramData result, Tack tack, LegType legType, boolean showByDefault) {
|
||||
Point[] pointsForUpwindStarboardAverageSpeedMovingAverage = toPointArray(result.getPointsForAverageSpeedMovingAverage(tack, legType));
|
||||
Series speedSeriesMovingAverage = chart.createSeries();
|
||||
speedSeriesMovingAverage.setName(tack + " " + legType + " Speed - MovingAverage");
|
||||
speedSeriesMovingAverage.setPoints(pointsForUpwindStarboardAverageSpeedMovingAverage);
|
||||
chart.addSeries(speedSeriesMovingAverage, false, false);
|
||||
|
||||
Point[] pointsForUpwindStarboardAverageConfidence = toPointArray(result.getPointsForAverageConfidence(tack, legType));
|
||||
Series confidenceSeries = chart
|
||||
.createSeries()
|
||||
.setYAxis(1)
|
||||
.setType(Series.Type.SPLINE)
|
||||
.setPlotOptions(
|
||||
new SplinePlotOptions().setColor("#AA4643").setMarker(new Marker().setEnabled(false))
|
||||
.setDashStyle(PlotLine.DashStyle.SHORT_DOT));
|
||||
confidenceSeriesMovingAverage.setName("Upwind Starboard Confidence");
|
||||
confidenceSeriesMovingAverage.setPoints(pointsForUpwindStarboardAverageConfidence);
|
||||
chart.addSeries(confidenceSeriesMovingAverage);
|
||||
confidenceSeries.setName(tack + " " + legType + " Confidence");
|
||||
confidenceSeries.setPoints(pointsForUpwindStarboardAverageConfidence);
|
||||
chart.addSeries(confidenceSeries, false, false);
|
||||
|
||||
if (!showByDefault) {
|
||||
speedSeriesMovingAverage.setVisible(false, false);
|
||||
confidenceSeries.setVisible(false, false);
|
||||
}
|
||||
}
|
||||
|
||||
private Point[] toPointArray(List<Pair<Double, Double>> pointsForUpwindStarboardAverageAngle) {
|
||||
|
||||
+2
-2
@@ -28,7 +28,7 @@ public class RaceFilter {
|
||||
|
||||
private boolean compliesToGpsFixFilter(RaceDTO race) {
|
||||
if (withGpsFixes!=null) {
|
||||
if (race.trackedRace.hasGPSData != withGpsFixes) {
|
||||
if (race.trackedRace == null || race.trackedRace.hasGPSData != withGpsFixes) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@@ -37,7 +37,7 @@ public class RaceFilter {
|
||||
|
||||
private boolean compliesToWindDataFilter(RaceDTO race) {
|
||||
if (withGpsFixes!=null) {
|
||||
if (race.trackedRace.hasWindData != withWindData) {
|
||||
if (race.trackedRace == null || race.trackedRace.hasWindData != withWindData) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
+55
-7
@@ -5350,23 +5350,71 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S
|
||||
BoatClass boatClass = getService().getBaseDomainFactory().getOrCreateBoatClass(boatClassName);
|
||||
List<Pair<Double, Double>> pointsForUpwindStarboardAverageSpeedMovingAverage = new ArrayList<Pair<Double, Double>>();
|
||||
List<Pair<Double, Double>> pointsForUpwindStarboardAverageConfidence = new ArrayList<Pair<Double, Double>>();
|
||||
List<Pair<Double, Double>> pointsForUpwindPortAverageSpeedMovingAverage = new ArrayList<Pair<Double, Double>>();
|
||||
List<Pair<Double, Double>> pointsForUpwindPortAverageConfidence = new ArrayList<Pair<Double, Double>>();
|
||||
List<Pair<Double, Double>> pointsForDownwindStarboardAverageSpeedMovingAverage = new ArrayList<Pair<Double, Double>>();
|
||||
List<Pair<Double, Double>> pointsForDownwindStarboardAverageConfidence = new ArrayList<Pair<Double, Double>>();
|
||||
List<Pair<Double, Double>> pointsForDownwindPortAverageSpeedMovingAverage = new ArrayList<Pair<Double, Double>>();
|
||||
List<Pair<Double, Double>> pointsForDownwindPortAverageConfidence = new ArrayList<Pair<Double, Double>>();
|
||||
for (double windInKnots = 0.1; windInKnots < 30; windInKnots = windInKnots + 0.1) {
|
||||
try {
|
||||
|
||||
SpeedWithBearingWithConfidence<Void> averageUpwindStarboardMovingAverage = getService().getPolarDataService()
|
||||
.getAverageSpeedWithBearing(boatClass, new KnotSpeedImpl(windInKnots), LegType.UPWIND,
|
||||
Tack.STARBOARD);
|
||||
SpeedWithBearingWithConfidence<Void> averageUpwindStarboardMovingAverage = getService()
|
||||
.getPolarDataService().getAverageSpeedWithBearing(boatClass, new KnotSpeedImpl(windInKnots),
|
||||
LegType.UPWIND, Tack.STARBOARD);
|
||||
pointsForUpwindStarboardAverageSpeedMovingAverage.add(new Pair<Double, Double>(windInKnots,
|
||||
averageUpwindStarboardMovingAverage.getObject().getKnots()));
|
||||
|
||||
|
||||
pointsForUpwindStarboardAverageConfidence.add(new Pair<Double, Double>(windInKnots,
|
||||
averageUpwindStarboardMovingAverage.getConfidence()));
|
||||
|
||||
} catch (NotEnoughDataHasBeenAddedException e) {
|
||||
// Do not add a point to the result
|
||||
}
|
||||
|
||||
try {
|
||||
SpeedWithBearingWithConfidence<Void> averageUpwindPortMovingAverage = getService()
|
||||
.getPolarDataService().getAverageSpeedWithBearing(boatClass, new KnotSpeedImpl(windInKnots),
|
||||
LegType.UPWIND, Tack.PORT);
|
||||
pointsForUpwindPortAverageSpeedMovingAverage.add(new Pair<Double, Double>(windInKnots,
|
||||
averageUpwindPortMovingAverage.getObject().getKnots()));
|
||||
|
||||
pointsForUpwindPortAverageConfidence.add(new Pair<Double, Double>(windInKnots,
|
||||
averageUpwindPortMovingAverage.getConfidence()));
|
||||
} catch (NotEnoughDataHasBeenAddedException e) {
|
||||
// Do not add a point to the result
|
||||
}
|
||||
|
||||
try {
|
||||
SpeedWithBearingWithConfidence<Void> averageDownwindStarboardMovingAverage = getService()
|
||||
.getPolarDataService().getAverageSpeedWithBearing(boatClass, new KnotSpeedImpl(windInKnots),
|
||||
LegType.DOWNWIND, Tack.STARBOARD);
|
||||
pointsForDownwindStarboardAverageSpeedMovingAverage.add(new Pair<Double, Double>(windInKnots,
|
||||
averageDownwindStarboardMovingAverage.getObject().getKnots()));
|
||||
|
||||
pointsForDownwindStarboardAverageConfidence.add(new Pair<Double, Double>(windInKnots,
|
||||
averageDownwindStarboardMovingAverage.getConfidence()));
|
||||
} catch (NotEnoughDataHasBeenAddedException e) {
|
||||
// Do not add a point to the result
|
||||
}
|
||||
|
||||
try {
|
||||
SpeedWithBearingWithConfidence<Void> averageDownwindPortMovingAverage = getService()
|
||||
.getPolarDataService().getAverageSpeedWithBearing(boatClass, new KnotSpeedImpl(windInKnots),
|
||||
LegType.DOWNWIND, Tack.PORT);
|
||||
pointsForDownwindPortAverageSpeedMovingAverage.add(new Pair<Double, Double>(windInKnots,
|
||||
averageDownwindPortMovingAverage.getObject().getKnots()));
|
||||
|
||||
pointsForDownwindPortAverageConfidence.add(new Pair<Double, Double>(windInKnots,
|
||||
averageDownwindPortMovingAverage.getConfidence()));
|
||||
} catch (NotEnoughDataHasBeenAddedException e) {
|
||||
// Do not add a point to the result
|
||||
}
|
||||
|
||||
}
|
||||
PolarSheetsXYDiagramData data = new PolarSheetsXYDiagramDataImpl(pointsForUpwindStarboardAverageSpeedMovingAverage, pointsForUpwindStarboardAverageConfidence);
|
||||
PolarSheetsXYDiagramData data = new PolarSheetsXYDiagramDataImpl(
|
||||
pointsForUpwindStarboardAverageSpeedMovingAverage, pointsForUpwindStarboardAverageConfidence,
|
||||
pointsForUpwindPortAverageSpeedMovingAverage, pointsForUpwindPortAverageConfidence,
|
||||
pointsForDownwindStarboardAverageSpeedMovingAverage, pointsForDownwindStarboardAverageConfidence,
|
||||
pointsForDownwindPortAverageSpeedMovingAverage, pointsForDownwindPortAverageConfidence);
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
+2
-2
@@ -274,7 +274,7 @@ public class TestStoringAndLoadingEventsAndRegattas extends AbstractMongoDBTest
|
||||
private static final long serialVersionUID = 1234L;
|
||||
@Override
|
||||
public RegattaAndRaceIdentifier getRaceIdentifier() {
|
||||
return new RegattaNameAndRaceName("Kieler Woche (29erXX)", "Yellow Race 2");
|
||||
return new RegattaNameAndRaceName("Kieler Woche (29ERXX)", "Yellow Race 2");
|
||||
}
|
||||
@Override
|
||||
public DynamicTrackedRegatta getTrackedRegatta() {
|
||||
@@ -306,7 +306,7 @@ public class TestStoringAndLoadingEventsAndRegattas extends AbstractMongoDBTest
|
||||
|
||||
// load new RacingEventService including regatta and leaderboard
|
||||
RacingEventService resForLoading = createRacingEventServiceWithOneMockedTrackedRace(q2YellowTrackedRace);
|
||||
Regatta loadedRegatta = resForLoading.getRegattaByName("Kieler Woche (29erXX)");
|
||||
Regatta loadedRegatta = resForLoading.getRegattaByName("Kieler Woche (29ERXX)");
|
||||
assertNotNull(loadedRegatta);
|
||||
assertEquals(regatta.getName(), loadedRegatta.getName());
|
||||
assertEquals(Util.size(regatta.getSeries()), Util.size(loadedRegatta.getSeries()));
|
||||
|
||||
@@ -9,6 +9,7 @@ Fragment-Host: com.sap.sailing.polars
|
||||
Import-Package: com.sap.sailing.domain.test.mock,
|
||||
com.sap.sse.common,
|
||||
com.sap.sse.common.impl
|
||||
Require-Bundle: org.junit4;bundle-version="4.8.2",
|
||||
org.mockito.mockito-core;bundle-version="1.9.5",
|
||||
org.hamcrest;bundle-version="1.1.0"
|
||||
Require-Bundle: org.hamcrest;bundle-version="1.1.0",
|
||||
org.hamcrest.core;bundle-version="1.1.0",
|
||||
org.mockito.mockito-core;bundle-version="1.10.14",
|
||||
org.junit4;bundle-version="4.8.2"
|
||||
+56
@@ -0,0 +1,56 @@
|
||||
package com.sap.sailing.polars.test;
|
||||
|
||||
import static org.hamcrest.Matchers.closeTo;
|
||||
import static org.hamcrest.Matchers.is;
|
||||
import static org.junit.Assert.assertThat;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
|
||||
import org.junit.Test;
|
||||
|
||||
import com.sap.sailing.polars.impl.CubicEquation;
|
||||
|
||||
public class CubicEquationTest {
|
||||
|
||||
|
||||
private static final double ERROR = 0.00001;
|
||||
|
||||
@Test
|
||||
public void testForOneRealRoot() {
|
||||
CubicEquation eq = new CubicEquation(3, -10, 14, 27);
|
||||
double[] result = eq.solve();
|
||||
assertThat(result.length, is(1));
|
||||
|
||||
double x1 = result[0];
|
||||
assertThat(x1, closeTo(-1, ERROR));
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testThreeRealAndEqualRoots() {
|
||||
CubicEquation eq = new CubicEquation(1, 6, 12, 8);
|
||||
double[] result = eq.solve();
|
||||
assertThat(result.length, is(1));
|
||||
|
||||
double x1 = result[0];
|
||||
assertThat(x1, closeTo(-2, ERROR));
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testThreeRealRoots() {
|
||||
CubicEquation eq = new CubicEquation(2, -4, -22, 24);
|
||||
double[] result = eq.solve();
|
||||
assertThat(result.length, is(3));
|
||||
|
||||
double x1 = result[0];
|
||||
assertTrue(Math.abs(x1 - 4) < ERROR || x1 + 3 < ERROR || x1 -1 < ERROR);
|
||||
|
||||
double x2 = result[1];
|
||||
assertTrue(Math.abs(x2 - 4) < ERROR || x2 + 3 < ERROR || x2 -1 < ERROR);
|
||||
|
||||
double x3 = result[2];
|
||||
assertTrue(Math.abs(x3 - 4) < ERROR || x3 + 3 < ERROR || x3 -1 < ERROR);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
+267
@@ -0,0 +1,267 @@
|
||||
package com.sap.sailing.polars.test;
|
||||
|
||||
import static org.hamcrest.Matchers.closeTo;
|
||||
import static org.hamcrest.Matchers.is;
|
||||
import static org.hamcrest.Matchers.nullValue;
|
||||
import static org.junit.Assert.assertThat;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
import org.junit.Test;
|
||||
|
||||
import com.sap.sailing.domain.base.SpeedWithBearingWithConfidence;
|
||||
import com.sap.sailing.domain.base.impl.SpeedWithBearingWithConfidenceImpl;
|
||||
import com.sap.sailing.domain.common.Speed;
|
||||
import com.sap.sailing.domain.common.impl.DegreeBearingImpl;
|
||||
import com.sap.sailing.domain.common.impl.KnotSpeedImpl;
|
||||
import com.sap.sailing.domain.common.impl.KnotSpeedWithBearingImpl;
|
||||
import com.sap.sailing.polars.regression.impl.WindSpeedAndAngleEstimator;
|
||||
import com.sap.sse.common.Util.Pair;
|
||||
|
||||
public class WindSpeedAndAngleEstimatorTest {
|
||||
|
||||
private static final double ERROR = 0.0001;
|
||||
|
||||
@Test
|
||||
public void testAverageTrueWindSpeedAndAngleEstimationForSteadyGrowth() {
|
||||
List<Pair<Speed, SpeedWithBearingWithConfidence<Void>>> averageBoatSpeedAndCourseForWindSpeed = new ArrayList<>();
|
||||
averageBoatSpeedAndCourseForWindSpeed.add(new Pair<Speed, SpeedWithBearingWithConfidence<Void>>(
|
||||
new KnotSpeedImpl(5), new SpeedWithBearingWithConfidenceImpl<Void>(new KnotSpeedWithBearingImpl(3,
|
||||
new DegreeBearingImpl(46)), 0.4, null)));
|
||||
averageBoatSpeedAndCourseForWindSpeed.add(new Pair<Speed, SpeedWithBearingWithConfidence<Void>>(
|
||||
new KnotSpeedImpl(6), new SpeedWithBearingWithConfidenceImpl<Void>(new KnotSpeedWithBearingImpl(4,
|
||||
new DegreeBearingImpl(47)), 0.6, null)));
|
||||
averageBoatSpeedAndCourseForWindSpeed.add(new Pair<Speed, SpeedWithBearingWithConfidence<Void>>(
|
||||
new KnotSpeedImpl(7), new SpeedWithBearingWithConfidenceImpl<Void>(new KnotSpeedWithBearingImpl(4.5,
|
||||
new DegreeBearingImpl(47.5)), 0.5, null)));
|
||||
WindSpeedAndAngleEstimator estimator = new WindSpeedAndAngleEstimator(averageBoatSpeedAndCourseForWindSpeed);
|
||||
|
||||
SpeedWithBearingWithConfidence<Void> result = estimator.getAverageTrueWindSpeedAndAngle(new KnotSpeedImpl(3));
|
||||
assertThat(result.getObject().getKnots(), closeTo(5, ERROR));
|
||||
assertThat(result.getObject().getBearing().getDegrees(), closeTo(46, ERROR));
|
||||
assertThat(result.getConfidence(), closeTo(0.4, ERROR));
|
||||
|
||||
result = estimator.getAverageTrueWindSpeedAndAngle(new KnotSpeedImpl(4));
|
||||
assertThat(result.getObject().getKnots(), closeTo(6, ERROR));
|
||||
assertThat(result.getObject().getBearing().getDegrees(), closeTo(47, ERROR));
|
||||
assertThat(result.getConfidence(), closeTo(0.6, ERROR));
|
||||
|
||||
result = estimator.getAverageTrueWindSpeedAndAngle(new KnotSpeedImpl(4.5));
|
||||
assertThat(result.getObject().getKnots(), closeTo(7, ERROR));
|
||||
assertThat(result.getObject().getBearing().getDegrees(), closeTo(47.5, ERROR));
|
||||
assertThat(result.getConfidence(), closeTo(0.5, ERROR));
|
||||
|
||||
|
||||
result = estimator.getAverageTrueWindSpeedAndAngle(new KnotSpeedImpl(4.25));
|
||||
assertThat(result.getObject().getKnots(), closeTo(6.5, ERROR));
|
||||
assertThat(result.getObject().getBearing().getDegrees(), closeTo(47.25, ERROR));
|
||||
assertThat(result.getConfidence(), closeTo(0.55, ERROR));
|
||||
|
||||
result = estimator.getAverageTrueWindSpeedAndAngle(new KnotSpeedImpl(3.25));
|
||||
assertThat(result.getObject().getKnots(), closeTo(5.25, ERROR));
|
||||
assertThat(result.getObject().getBearing().getDegrees(), closeTo(46.25, ERROR));
|
||||
assertThat(result.getConfidence(), closeTo(0.45, ERROR));
|
||||
|
||||
result = estimator.getAverageTrueWindSpeedAndAngle(new KnotSpeedImpl(2.75));
|
||||
assertThat(result.getObject().getKnots(), closeTo(5, ERROR));
|
||||
assertThat(result.getObject().getBearing().getDegrees(), closeTo(46, ERROR));
|
||||
assertThat(result.getConfidence(), closeTo(0.2, ERROR));
|
||||
|
||||
result = estimator.getAverageTrueWindSpeedAndAngle(new KnotSpeedImpl(4.75));
|
||||
assertThat(result.getObject().getKnots(), closeTo(7, ERROR));
|
||||
assertThat(result.getObject().getBearing().getDegrees(), closeTo(47.5, ERROR));
|
||||
assertThat(result.getConfidence(), closeTo(0.25, ERROR));
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Not a realistic scenario in the sailing world, but testing for the sake of correctness of the algorithm
|
||||
*/
|
||||
@Test
|
||||
public void testAverageTrueWindSpeedAndAngleEstimationForSteadyDeclination() {
|
||||
List<Pair<Speed, SpeedWithBearingWithConfidence<Void>>> averageBoatSpeedAndCourseForWindSpeed = new ArrayList<>();
|
||||
averageBoatSpeedAndCourseForWindSpeed.add(new Pair<Speed, SpeedWithBearingWithConfidence<Void>>(
|
||||
new KnotSpeedImpl(7), new SpeedWithBearingWithConfidenceImpl<Void>(new KnotSpeedWithBearingImpl(3,
|
||||
new DegreeBearingImpl(46)), 0.4, null)));
|
||||
averageBoatSpeedAndCourseForWindSpeed.add(new Pair<Speed, SpeedWithBearingWithConfidence<Void>>(
|
||||
new KnotSpeedImpl(6), new SpeedWithBearingWithConfidenceImpl<Void>(new KnotSpeedWithBearingImpl(4,
|
||||
new DegreeBearingImpl(47)), 0.6, null)));
|
||||
averageBoatSpeedAndCourseForWindSpeed.add(new Pair<Speed, SpeedWithBearingWithConfidence<Void>>(
|
||||
new KnotSpeedImpl(5), new SpeedWithBearingWithConfidenceImpl<Void>(new KnotSpeedWithBearingImpl(4.5,
|
||||
new DegreeBearingImpl(47.5)), 0.5, null)));
|
||||
WindSpeedAndAngleEstimator estimator = new WindSpeedAndAngleEstimator(averageBoatSpeedAndCourseForWindSpeed);
|
||||
|
||||
SpeedWithBearingWithConfidence<Void> result = estimator.getAverageTrueWindSpeedAndAngle(new KnotSpeedImpl(3));
|
||||
assertThat(result.getObject().getKnots(), closeTo(7, ERROR));
|
||||
assertThat(result.getObject().getBearing().getDegrees(), closeTo(46, ERROR));
|
||||
assertThat(result.getConfidence(), closeTo(0.4, ERROR));
|
||||
|
||||
result = estimator.getAverageTrueWindSpeedAndAngle(new KnotSpeedImpl(4));
|
||||
assertThat(result.getObject().getKnots(), closeTo(6, ERROR));
|
||||
assertThat(result.getObject().getBearing().getDegrees(), closeTo(47, ERROR));
|
||||
assertThat(result.getConfidence(), closeTo(0.6, ERROR));
|
||||
|
||||
result = estimator.getAverageTrueWindSpeedAndAngle(new KnotSpeedImpl(4.5));
|
||||
assertThat(result.getObject().getKnots(), closeTo(5, ERROR));
|
||||
assertThat(result.getObject().getBearing().getDegrees(), closeTo(47.5, ERROR));
|
||||
assertThat(result.getConfidence(), closeTo(0.5, ERROR));
|
||||
|
||||
|
||||
result = estimator.getAverageTrueWindSpeedAndAngle(new KnotSpeedImpl(4.25));
|
||||
assertThat(result.getObject().getKnots(), closeTo(5.5, ERROR));
|
||||
assertThat(result.getObject().getBearing().getDegrees(), closeTo(47.25, ERROR));
|
||||
assertThat(result.getConfidence(), closeTo(0.55, ERROR));
|
||||
|
||||
result = estimator.getAverageTrueWindSpeedAndAngle(new KnotSpeedImpl(3.25));
|
||||
assertThat(result.getObject().getKnots(), closeTo(6.75, ERROR));
|
||||
assertThat(result.getObject().getBearing().getDegrees(), closeTo(46.25, ERROR));
|
||||
assertThat(result.getConfidence(), closeTo(0.45, ERROR));
|
||||
|
||||
result = estimator.getAverageTrueWindSpeedAndAngle(new KnotSpeedImpl(2.75));
|
||||
assertThat(result.getObject().getKnots(), closeTo(7, ERROR));
|
||||
assertThat(result.getObject().getBearing().getDegrees(), closeTo(46, ERROR));
|
||||
assertThat(result.getConfidence(), closeTo(0.2, ERROR));
|
||||
|
||||
result = estimator.getAverageTrueWindSpeedAndAngle(new KnotSpeedImpl(4.75));
|
||||
assertThat(result.getObject().getKnots(), closeTo(5, ERROR));
|
||||
assertThat(result.getObject().getBearing().getDegrees(), closeTo(47.5, ERROR));
|
||||
assertThat(result.getConfidence(), closeTo(0.25, ERROR));
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testAverageTrueWindSpeedAndAngleEstimationNegative() {
|
||||
List<Pair<Speed, SpeedWithBearingWithConfidence<Void>>> averageBoatSpeedAndCourseForWindSpeed = new ArrayList<>();
|
||||
averageBoatSpeedAndCourseForWindSpeed.add(new Pair<Speed, SpeedWithBearingWithConfidence<Void>>(
|
||||
new KnotSpeedImpl(5), new SpeedWithBearingWithConfidenceImpl<Void>(new KnotSpeedWithBearingImpl(3,
|
||||
new DegreeBearingImpl(46)), 0.4, null)));
|
||||
averageBoatSpeedAndCourseForWindSpeed.add(new Pair<Speed, SpeedWithBearingWithConfidence<Void>>(
|
||||
new KnotSpeedImpl(6), new SpeedWithBearingWithConfidenceImpl<Void>(new KnotSpeedWithBearingImpl(4,
|
||||
new DegreeBearingImpl(47)), 0.6, null)));
|
||||
averageBoatSpeedAndCourseForWindSpeed.add(new Pair<Speed, SpeedWithBearingWithConfidence<Void>>(
|
||||
new KnotSpeedImpl(7), new SpeedWithBearingWithConfidenceImpl<Void>(new KnotSpeedWithBearingImpl(4.5,
|
||||
new DegreeBearingImpl(47.5)), 0.5, null)));
|
||||
WindSpeedAndAngleEstimator estimator = new WindSpeedAndAngleEstimator(averageBoatSpeedAndCourseForWindSpeed);
|
||||
|
||||
SpeedWithBearingWithConfidence<Void> result = estimator.getAverageTrueWindSpeedAndAngle(new KnotSpeedImpl(2));
|
||||
assertThat(result, nullValue());
|
||||
|
||||
result = estimator.getAverageTrueWindSpeedAndAngle(new KnotSpeedImpl(5.5));
|
||||
assertThat(result, nullValue());
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testAverageTrueWindSpeedAndAngleEstimationForNonReversibleFunction() {
|
||||
List<Pair<Speed, SpeedWithBearingWithConfidence<Void>>> averageBoatSpeedAndCourseForWindSpeed = new ArrayList<>();
|
||||
averageBoatSpeedAndCourseForWindSpeed.add(new Pair<Speed, SpeedWithBearingWithConfidence<Void>>(
|
||||
new KnotSpeedImpl(5), new SpeedWithBearingWithConfidenceImpl<Void>(new KnotSpeedWithBearingImpl(3,
|
||||
new DegreeBearingImpl(46)), 0.4, null)));
|
||||
averageBoatSpeedAndCourseForWindSpeed.add(new Pair<Speed, SpeedWithBearingWithConfidence<Void>>(
|
||||
new KnotSpeedImpl(6), new SpeedWithBearingWithConfidenceImpl<Void>(new KnotSpeedWithBearingImpl(4,
|
||||
new DegreeBearingImpl(47)), 0.6, null)));
|
||||
averageBoatSpeedAndCourseForWindSpeed.add(new Pair<Speed, SpeedWithBearingWithConfidence<Void>>(
|
||||
new KnotSpeedImpl(7), new SpeedWithBearingWithConfidenceImpl<Void>(new KnotSpeedWithBearingImpl(4.5,
|
||||
new DegreeBearingImpl(47.5)), 0.5, null)));
|
||||
averageBoatSpeedAndCourseForWindSpeed.add(new Pair<Speed, SpeedWithBearingWithConfidence<Void>>(
|
||||
new KnotSpeedImpl(8), new SpeedWithBearingWithConfidenceImpl<Void>(new KnotSpeedWithBearingImpl(4.25,
|
||||
new DegreeBearingImpl(47.5)), 0.25, null)));
|
||||
WindSpeedAndAngleEstimator estimator = new WindSpeedAndAngleEstimator(averageBoatSpeedAndCourseForWindSpeed);
|
||||
|
||||
SpeedWithBearingWithConfidence<Void> result = estimator.getAverageTrueWindSpeedAndAngle(new KnotSpeedImpl(4.25));
|
||||
assertThat(result.getObject().getKnots(), closeTo(6.5, ERROR));
|
||||
assertThat(result.getObject().getBearing().getDegrees(), closeTo(47.25, ERROR));
|
||||
assertThat(result.getConfidence(), closeTo(0.55, ERROR));
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testAverageTrueWindSpeedAndAngleEstimationWithAllCandidatesReturned() {
|
||||
List<Pair<Speed, SpeedWithBearingWithConfidence<Void>>> averageBoatSpeedAndCourseForWindSpeed = new ArrayList<>();
|
||||
averageBoatSpeedAndCourseForWindSpeed.add(new Pair<Speed, SpeedWithBearingWithConfidence<Void>>(
|
||||
new KnotSpeedImpl(5), new SpeedWithBearingWithConfidenceImpl<Void>(new KnotSpeedWithBearingImpl(3,
|
||||
new DegreeBearingImpl(46)), 0.4, null)));
|
||||
averageBoatSpeedAndCourseForWindSpeed.add(new Pair<Speed, SpeedWithBearingWithConfidence<Void>>(
|
||||
new KnotSpeedImpl(6), new SpeedWithBearingWithConfidenceImpl<Void>(new KnotSpeedWithBearingImpl(4,
|
||||
new DegreeBearingImpl(47)), 0.6, null)));
|
||||
averageBoatSpeedAndCourseForWindSpeed.add(new Pair<Speed, SpeedWithBearingWithConfidence<Void>>(
|
||||
new KnotSpeedImpl(7), new SpeedWithBearingWithConfidenceImpl<Void>(new KnotSpeedWithBearingImpl(4.5,
|
||||
new DegreeBearingImpl(47.5)), 0.5, null)));
|
||||
averageBoatSpeedAndCourseForWindSpeed.add(new Pair<Speed, SpeedWithBearingWithConfidence<Void>>(
|
||||
new KnotSpeedImpl(8), new SpeedWithBearingWithConfidenceImpl<Void>(new KnotSpeedWithBearingImpl(4.25,
|
||||
new DegreeBearingImpl(47.5)), 0.25, null)));
|
||||
averageBoatSpeedAndCourseForWindSpeed.add(new Pair<Speed, SpeedWithBearingWithConfidence<Void>>(
|
||||
new KnotSpeedImpl(9), new SpeedWithBearingWithConfidenceImpl<Void>(new KnotSpeedWithBearingImpl(3,
|
||||
new DegreeBearingImpl(47.5)), 0.25, null)));
|
||||
WindSpeedAndAngleEstimator estimator = new WindSpeedAndAngleEstimator(averageBoatSpeedAndCourseForWindSpeed);
|
||||
|
||||
Set<SpeedWithBearingWithConfidence<Void>> result = estimator
|
||||
.getAverageTrueWindSpeedAndAngleCandidates(new KnotSpeedImpl(4.3));
|
||||
assertThat(result.size(), is(2));
|
||||
for (SpeedWithBearingWithConfidence<Void> candidate : result) {
|
||||
assertTrue(Math.abs(candidate.getConfidence()-0.2999999)<=ERROR ||
|
||||
Math.abs(candidate.getConfidence()-0.54)<=ERROR);
|
||||
if (Math.abs(candidate.getConfidence() - 0.2999999) < ERROR) {
|
||||
assertThat(candidate.getObject().getKnots(), closeTo(7.8, ERROR));
|
||||
assertThat(candidate.getObject().getBearing().getDegrees(), closeTo(47.5, ERROR));
|
||||
} else {
|
||||
assertThat(candidate.getObject().getKnots(), closeTo(6.6, ERROR));
|
||||
assertThat(candidate.getObject().getBearing().getDegrees(), closeTo(47.3, ERROR));
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
result = estimator.getAverageTrueWindSpeedAndAngleCandidates(new KnotSpeedImpl(2.9));
|
||||
assertThat(result.size(), is(2));
|
||||
for (SpeedWithBearingWithConfidence<Void> candidate : result) {
|
||||
assertTrue(Math.abs(candidate.getConfidence()-0.2) <= ERROR ||
|
||||
Math.abs(candidate.getConfidence()-0.125) <= ERROR);
|
||||
if (Math.abs(candidate.getConfidence() - 0.2) < ERROR) {
|
||||
assertThat(candidate.getObject().getKnots(), closeTo(5, ERROR));
|
||||
assertThat(candidate.getObject().getBearing().getDegrees(), closeTo(46, ERROR));
|
||||
} else {
|
||||
assertThat(candidate.getObject().getKnots(), closeTo(9, ERROR));
|
||||
assertThat(candidate.getObject().getBearing().getDegrees(), closeTo(47.5, ERROR));
|
||||
|
||||
}
|
||||
}
|
||||
result = estimator.getAverageTrueWindSpeedAndAngleCandidates(new KnotSpeedImpl(4.9));
|
||||
assertThat(result.size(), is(1));
|
||||
SpeedWithBearingWithConfidence<Void> candidate = result.iterator().next();
|
||||
assertThat(candidate.getObject().getKnots(), closeTo(7, ERROR));
|
||||
assertThat(candidate.getObject().getBearing().getDegrees(), closeTo(47.5, ERROR));
|
||||
assertThat(candidate.getConfidence(), closeTo(0.25, ERROR));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testAverageTrueWindSpeedAndAngleEstimationForTwoSamplingPointsWithSameBoatSpeed() {
|
||||
List<Pair<Speed, SpeedWithBearingWithConfidence<Void>>> averageBoatSpeedAndCourseForWindSpeed = new ArrayList<>();
|
||||
averageBoatSpeedAndCourseForWindSpeed.add(new Pair<Speed, SpeedWithBearingWithConfidence<Void>>(
|
||||
new KnotSpeedImpl(7), new SpeedWithBearingWithConfidenceImpl<Void>(new KnotSpeedWithBearingImpl(4.5,
|
||||
new DegreeBearingImpl(47.5)), 0.5, null)));
|
||||
averageBoatSpeedAndCourseForWindSpeed.add(new Pair<Speed, SpeedWithBearingWithConfidence<Void>>(
|
||||
new KnotSpeedImpl(8), new SpeedWithBearingWithConfidenceImpl<Void>(new KnotSpeedWithBearingImpl(4.5,
|
||||
new DegreeBearingImpl(47.5)), 0.4, null)));
|
||||
averageBoatSpeedAndCourseForWindSpeed.add(new Pair<Speed, SpeedWithBearingWithConfidence<Void>>(
|
||||
new KnotSpeedImpl(9), new SpeedWithBearingWithConfidenceImpl<Void>(new KnotSpeedWithBearingImpl(5.5,
|
||||
new DegreeBearingImpl(47.5)), 0.4, null)));
|
||||
averageBoatSpeedAndCourseForWindSpeed.add(new Pair<Speed, SpeedWithBearingWithConfidence<Void>>(
|
||||
new KnotSpeedImpl(10), new SpeedWithBearingWithConfidenceImpl<Void>(new KnotSpeedWithBearingImpl(5.5,
|
||||
new DegreeBearingImpl(47.5)), 0.5, null)));
|
||||
WindSpeedAndAngleEstimator estimator = new WindSpeedAndAngleEstimator(averageBoatSpeedAndCourseForWindSpeed);
|
||||
|
||||
SpeedWithBearingWithConfidence<Void> result = estimator.getAverageTrueWindSpeedAndAngle(new KnotSpeedImpl(4.5));
|
||||
assertThat(result.getObject().getKnots(), closeTo(7.44444, ERROR));
|
||||
assertThat(result.getObject().getBearing().getDegrees(), closeTo(47.5, ERROR));
|
||||
assertThat(result.getConfidence(), closeTo(0.455555, ERROR));
|
||||
|
||||
result = estimator.getAverageTrueWindSpeedAndAngle(new KnotSpeedImpl(5.5));
|
||||
assertThat(result.getObject().getKnots(), closeTo(9.555555, ERROR));
|
||||
assertThat(result.getObject().getBearing().getDegrees(), closeTo(47.5, ERROR));
|
||||
assertThat(result.getConfidence(), closeTo(0.455555, ERROR));
|
||||
}
|
||||
|
||||
}
|
||||
@@ -128,9 +128,17 @@ public interface PolarDataService {
|
||||
int[] getDataCountsForWindSpeed(BoatClass boatClass, Speed windSpeed, int startAngleInclusive, int endAngleExclusive);
|
||||
|
||||
/**
|
||||
* From a boat's speed over ground and assuming values for <code>boatClass</code>, the <code>tack</code>
|
||||
* the boat is currently sailing on, and the <code>legType</code>, this method estimates the
|
||||
* true wind speed at which the boat may most likely have been sailing under these conditions.
|
||||
* From a boat's speed over ground and assuming values for <code>boatClass</code>, the <code>tack</code> the boat is
|
||||
* currently sailing on, and the <code>legType</code>, this method estimates the true wind speed candidates at which
|
||||
* the boat may most likely have been sailing under these conditions.
|
||||
*
|
||||
* The confidence of the returned candidates is derived from the average confidence of the underlying fixes,
|
||||
* distance measures and the amount of underlying data.
|
||||
*
|
||||
* Multiple candidates are possible, because we cannot guarantee a reversible function (boatspeed over windspeed).
|
||||
*
|
||||
* @return set of wind candidates with confidence, empty set if no were found (due to insufficient underlying data)
|
||||
*/
|
||||
SpeedWithBearingWithConfidence<Void> getAverageTrueWindSpeedAndAngle(BoatClass boatClass, Speed speedOverGround, LegType legType, Tack tack);
|
||||
Set<SpeedWithBearingWithConfidence<Void>> getAverageTrueWindSpeedAndAngleCandidates(BoatClass boatClass, Speed speedOverGround, LegType legType, Tack tack);
|
||||
|
||||
}
|
||||
@@ -0,0 +1,59 @@
|
||||
package com.sap.sailing.polars.impl;
|
||||
|
||||
public class CubicEquation {
|
||||
|
||||
private double a;
|
||||
private double b;
|
||||
private double c;
|
||||
private double d;
|
||||
|
||||
public CubicEquation(double a, double b, double c, double d) {
|
||||
this.a = a;
|
||||
this.b = b;
|
||||
this.c = c;
|
||||
this.d = d;
|
||||
}
|
||||
|
||||
/**
|
||||
* Following: http://www.1728.org/cubic2.htm
|
||||
* !The complex roots are not returned!
|
||||
*/
|
||||
public double[] solve() {
|
||||
|
||||
double f = ((3 * c) / a - (b * b) / (a * a)) / 3;
|
||||
double g = ((2 * b * b * b) / (a * a * a) - (9 * b * c) / (a * a) + (27 * d) / a) / 27;
|
||||
double h = (g*g) / 4 + (f*f*f) / 27;
|
||||
|
||||
double[] result;
|
||||
|
||||
if (f == 0 && g == 0 && h == 0) {
|
||||
// All roots equal and real
|
||||
result = new double[1];
|
||||
result[0] = - Math.cbrt(d/a);
|
||||
} else if (h > 0) {
|
||||
// Only one root is real
|
||||
double r = -(g/2) + Math.sqrt(h);
|
||||
double s = Math.cbrt(r);
|
||||
double t = -(g/2) - Math.sqrt(h);
|
||||
double u = Math.cbrt(t);
|
||||
result = new double[1];
|
||||
result[0] = (s + u) - (b / (3 * a));
|
||||
//!!The complex roots are not returned
|
||||
} else {
|
||||
// All three roots are real and not equal
|
||||
double i = Math.sqrt((g * g) / 4 - h);
|
||||
double j = Math.cbrt(i);
|
||||
double k = Math.acos(-(g/(2*i)));
|
||||
double l = -1 * j;
|
||||
double m = Math.cos(k / 3);
|
||||
double n = Math.sqrt(3) * Math.sin(k/3);
|
||||
double p = - (b/(3*a));
|
||||
result = new double[3];
|
||||
result[0] = 2 * j * Math.cos(k / 3) - b / (3 * a);
|
||||
result[1] = l * (m + n) + p;
|
||||
result[2] = l * (m - n) + p;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
}
|
||||
+41
-2
@@ -1,5 +1,6 @@
|
||||
package com.sap.sailing.polars.impl;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
import java.util.concurrent.ExecutionException;
|
||||
import java.util.concurrent.Executor;
|
||||
@@ -8,12 +9,15 @@ import com.sap.sailing.domain.base.BoatClass;
|
||||
import com.sap.sailing.domain.base.Competitor;
|
||||
import com.sap.sailing.domain.base.SpeedWithBearingWithConfidence;
|
||||
import com.sap.sailing.domain.base.SpeedWithConfidence;
|
||||
import com.sap.sailing.domain.base.impl.SpeedWithBearingWithConfidenceImpl;
|
||||
import com.sap.sailing.domain.common.Bearing;
|
||||
import com.sap.sailing.domain.common.LegType;
|
||||
import com.sap.sailing.domain.common.PolarSheetGenerationSettings;
|
||||
import com.sap.sailing.domain.common.PolarSheetsData;
|
||||
import com.sap.sailing.domain.common.Speed;
|
||||
import com.sap.sailing.domain.common.Tack;
|
||||
import com.sap.sailing.domain.common.impl.DegreeBearingImpl;
|
||||
import com.sap.sailing.domain.common.impl.KnotSpeedWithBearingImpl;
|
||||
import com.sap.sailing.domain.tracking.GPSFixMoving;
|
||||
import com.sap.sailing.domain.tracking.TrackedRace;
|
||||
import com.sap.sailing.polars.PolarDataService;
|
||||
@@ -36,6 +40,9 @@ import com.sap.sailing.util.SmartFutureCache;
|
||||
public class PolarDataServiceImpl implements PolarDataService {
|
||||
|
||||
private final PolarDataMiner polarDataMiner;
|
||||
|
||||
|
||||
|
||||
|
||||
public PolarDataServiceImpl(Executor executor) {
|
||||
this.polarDataMiner = new PolarDataMiner();
|
||||
@@ -47,8 +54,40 @@ public class PolarDataServiceImpl implements PolarDataService {
|
||||
}
|
||||
|
||||
@Override
|
||||
public SpeedWithBearingWithConfidence<Void> getAverageTrueWindSpeedAndAngle(BoatClass boatClass, Speed speedOverGround, LegType legType, Tack tack) {
|
||||
return polarDataMiner.estimateTrueWindSpeedAndAngle(boatClass, speedOverGround, legType, tack);
|
||||
public Set<SpeedWithBearingWithConfidence<Void>> getAverageTrueWindSpeedAndAngleCandidates(BoatClass boatClass,
|
||||
Speed speedOverGround, LegType legType, Tack tack) {
|
||||
|
||||
// The following is an estimation function. It only serves as a stub. It's the same for all boatclasses and returns
|
||||
// default maneuver angles. This is NOT final.
|
||||
// The function is able to return boat speed values for windspeed alues between 5kn and 25kn , which are some kind of realistic
|
||||
// for sailing boats. They are taken from the 505 polars we gathered in the races until now.
|
||||
// TODO keep a cache of sampling points over which to fit a function for every boat class and then return the
|
||||
// corresponding angle
|
||||
|
||||
Set<SpeedWithBearingWithConfidence<Void>> resultSet = new HashSet<>();
|
||||
int tackFactor = (tack.equals(Tack.PORT)) ? -1 : 1;
|
||||
if (legType.equals(LegType.UPWIND)) {
|
||||
CubicEquation upWindEquation = new CubicEquation(0.0002, -0.0245, 0.7602, -0.0463-speedOverGround.getKnots());
|
||||
int angle = 49 * tackFactor;
|
||||
solveAndAddResults(resultSet, upWindEquation, angle);
|
||||
|
||||
|
||||
} else if (legType.equals(LegType.DOWNWIND)) {
|
||||
CubicEquation downWindEquation = new CubicEquation(0.0003, -0.0373, 1.5213, -2.1309-speedOverGround.getKnots());
|
||||
int angle = 30 * tackFactor;
|
||||
solveAndAddResults(resultSet, downWindEquation, angle);
|
||||
}
|
||||
return resultSet;
|
||||
//return polarDataMiner.estimateTrueWindSpeedAndAngleCandidates(boatClass, speedOverGround, legType, tack);
|
||||
}
|
||||
|
||||
private void solveAndAddResults(Set<SpeedWithBearingWithConfidence<Void>> result, CubicEquation upWindEquation, int angle) {
|
||||
double[] windSpeedCandidates = upWindEquation.solve();
|
||||
for (int i = 0; i < windSpeedCandidates.length; i++) {
|
||||
double windSpeedCandidateInKnots = windSpeedCandidates[i] > 0 ? windSpeedCandidates[i] : 0;
|
||||
result.add(new SpeedWithBearingWithConfidenceImpl<Void>(new KnotSpeedWithBearingImpl(
|
||||
windSpeedCandidateInKnots, new DegreeBearingImpl(angle)), 0.00001, null));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
-10
@@ -5,7 +5,6 @@ import java.util.Map;
|
||||
|
||||
import com.sap.sailing.domain.base.BoatClass;
|
||||
import com.sap.sailing.domain.common.Speed;
|
||||
import com.sap.sailing.domain.common.SpeedWithBearing;
|
||||
import com.sap.sse.datamining.data.Cluster;
|
||||
import com.sap.sse.datamining.data.ClusterGroup;
|
||||
|
||||
@@ -39,15 +38,6 @@ public class AverageAngleContainer {
|
||||
this.speedClusterGroup = speedClusterGroup;
|
||||
dataCountAndAngleSumMap = new HashMap<>();
|
||||
}
|
||||
|
||||
/**
|
||||
* Looks at all entries in {@link #dataCountAndAngleSumMap} and determines the wind speed and true wind angle at
|
||||
* which the boat has most likely been sailing to achieve the <code>boatSpeed</code> provided.
|
||||
*/
|
||||
SpeedWithBearing getAverageTrueWindSpeedAndAngle(BoatClass boatClass, Speed boatSpeed) {
|
||||
// TODO implement getAverageTrueWindSpeedAndAngle
|
||||
return null;
|
||||
}
|
||||
|
||||
public void addFix(BoatClass boatClass, Speed windSpeed, int roundedAngleDeg) {
|
||||
Cluster<Speed> windCluster = speedClusterGroup.getClusterFor(windSpeed);
|
||||
|
||||
+30
-6
@@ -1,7 +1,9 @@
|
||||
package com.sap.sailing.polars.mining;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.logging.Logger;
|
||||
@@ -19,11 +21,13 @@ import com.sap.sailing.domain.common.SpeedWithBearing;
|
||||
import com.sap.sailing.domain.common.Tack;
|
||||
import com.sap.sailing.domain.common.confidence.BearingWithConfidence;
|
||||
import com.sap.sailing.domain.common.impl.DegreeBearingImpl;
|
||||
import com.sap.sailing.domain.common.impl.KnotSpeedImpl;
|
||||
import com.sap.sailing.domain.common.impl.KnotSpeedWithBearingImpl;
|
||||
import com.sap.sailing.domain.tracking.WindWithConfidence;
|
||||
import com.sap.sailing.polars.analysis.PolarSheetAnalyzer;
|
||||
import com.sap.sailing.polars.regression.BoatSpeedEstimator;
|
||||
import com.sap.sailing.polars.regression.NotEnoughDataHasBeenAddedException;
|
||||
import com.sap.sailing.polars.regression.impl.WindSpeedAndAngleEstimator;
|
||||
import com.sap.sse.common.TimePoint;
|
||||
import com.sap.sse.common.Util.Pair;
|
||||
import com.sap.sse.datamining.AdditionalResultDataBuilder;
|
||||
@@ -176,13 +180,33 @@ public class IncrementalRegressionProcessor implements Processor<GroupedDataEntr
|
||||
double confidence = boatSpeedEstimator.getConfidence();
|
||||
return new SpeedWithConfidenceAndDataCount(new SpeedWithConfidenceImpl<Void>(speedWithoutConfidence, confidence, null), dataCount);
|
||||
}
|
||||
|
||||
SpeedWithBearingWithConfidence<Void> estimateTrueWindSpeedAndAngle(BoatClass boatClass,
|
||||
|
||||
Set<SpeedWithBearingWithConfidence<Void>> estimateTrueWindSpeedAndAngleCandidates(BoatClass boatClass,
|
||||
Speed speedOverGround, LegType legType, Tack tack) {
|
||||
AverageAngleContainer averageAngleContainer = averageAngleContainers.get(new Pair<>(legType, tack));
|
||||
return new SpeedWithBearingWithConfidenceImpl<Void>(
|
||||
averageAngleContainer.getAverageTrueWindSpeedAndAngle(boatClass, speedOverGround),
|
||||
/* confidence */ 0.5, /* relative to */ null); // TODO how to determine a good measure for the confidence?
|
||||
List<Pair<Speed, SpeedWithBearingWithConfidence<Void>>> averageBoatSpeedAndCourseForWindSpeed = obtainPolarSamplingPoints(
|
||||
boatClass, legType, tack);
|
||||
|
||||
WindSpeedAndAngleEstimator windSpeedAndAngleEstimator = new WindSpeedAndAngleEstimator(averageBoatSpeedAndCourseForWindSpeed);
|
||||
return windSpeedAndAngleEstimator.getAverageTrueWindSpeedAndAngleCandidates(speedOverGround);
|
||||
}
|
||||
|
||||
private List<Pair<Speed, SpeedWithBearingWithConfidence<Void>>> obtainPolarSamplingPoints(BoatClass boatClass,
|
||||
LegType legType, Tack tack) {
|
||||
List<Pair<Speed, SpeedWithBearingWithConfidence<Void>>> averageBoatSpeedAndCourseForWindSpeed = new ArrayList<>();
|
||||
for (int i = 0; i < 60; i++) {
|
||||
Speed windSpeed = new KnotSpeedImpl(i * 0.5);
|
||||
SpeedWithBearingWithConfidence<Void> averageSpeedAndCourseOverGround;
|
||||
try {
|
||||
averageSpeedAndCourseOverGround = getAverageSpeedAndCourseOverGround(
|
||||
boatClass, windSpeed, legType, tack);
|
||||
averageBoatSpeedAndCourseForWindSpeed.add(new Pair<Speed, SpeedWithBearingWithConfidence<Void>>(windSpeed,
|
||||
averageSpeedAndCourseOverGround));
|
||||
} catch (NotEnoughDataHasBeenAddedException e) {
|
||||
// ignore this, since there is not enough data for this windspeed.
|
||||
}
|
||||
|
||||
}
|
||||
return averageBoatSpeedAndCourseForWindSpeed;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -42,7 +42,7 @@ import com.sap.sse.datamining.impl.components.ParallelMultiDimensionsValueNestin
|
||||
|
||||
public class PolarDataMiner implements PolarSheetAnalyzer {
|
||||
|
||||
private static final int THREAD_POOL_SIZE = Math.max(Runtime.getRuntime().availableProcessors(), 3);
|
||||
private static final int THREAD_POOL_SIZE = Math.min(Runtime.getRuntime().availableProcessors(), 3);
|
||||
private static final ThreadPoolExecutor executor = createExecutor();
|
||||
private final PolarSheetGenerationSettings backendPolarSheetGenerationSettings;
|
||||
|
||||
@@ -122,10 +122,10 @@ public class PolarDataMiner implements PolarSheetAnalyzer {
|
||||
throws NotEnoughDataHasBeenAddedException {
|
||||
return incrementalRegressionProcessor.estimateBoatSpeed(boatClass, windSpeed, trueWindAngle).getSpeedWithConfidence();
|
||||
}
|
||||
|
||||
public SpeedWithBearingWithConfidence<Void> estimateTrueWindSpeedAndAngle(BoatClass boatClass, Speed speedOverGround,
|
||||
LegType legType, Tack tack) {
|
||||
return incrementalRegressionProcessor.estimateTrueWindSpeedAndAngle(boatClass, speedOverGround, legType, tack);
|
||||
|
||||
public Set<SpeedWithBearingWithConfidence<Void>> estimateTrueWindSpeedAndAngleCandidates(BoatClass boatClass,
|
||||
Speed speedOverGround, LegType legType, Tack tack) {
|
||||
return incrementalRegressionProcessor.estimateTrueWindSpeedAndAngleCandidates(boatClass, speedOverGround, legType, tack);
|
||||
}
|
||||
|
||||
public PolarSheetsData createFullSheetForBoatClass(BoatClass boatClass) {
|
||||
|
||||
+201
@@ -0,0 +1,201 @@
|
||||
package com.sap.sailing.polars.regression.impl;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
import com.sap.sailing.domain.base.SpeedWithBearingWithConfidence;
|
||||
import com.sap.sailing.domain.base.impl.SpeedWithBearingWithConfidenceImpl;
|
||||
import com.sap.sailing.domain.common.Speed;
|
||||
import com.sap.sailing.domain.common.impl.DegreeBearingImpl;
|
||||
import com.sap.sailing.domain.common.impl.KnotSpeedWithBearingImpl;
|
||||
import com.sap.sse.common.Util.Pair;
|
||||
|
||||
public class WindSpeedAndAngleEstimator {
|
||||
|
||||
private static final double DEFAULT_MAX_DISTANCE_TO_SAMPLING_POINT = 0.5;
|
||||
private final List<Pair<Speed, SpeedWithBearingWithConfidence<Void>>> averageBoatSpeedAndCourseForWindSpeed;
|
||||
private final double maxDistanceToSamplingPointFunctionInKnots;
|
||||
|
||||
/**
|
||||
*
|
||||
* @param averageBoatSpeedAndCourseForWindSpeed
|
||||
* List of sampling points. Needs to be sorted by windspeed (A of the Pair object) low to high
|
||||
*/
|
||||
public WindSpeedAndAngleEstimator(
|
||||
List<Pair<Speed, SpeedWithBearingWithConfidence<Void>>> averageBoatSpeedAndCourseForWindSpeed) {
|
||||
this(averageBoatSpeedAndCourseForWindSpeed, DEFAULT_MAX_DISTANCE_TO_SAMPLING_POINT);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* @param averageBoatSpeedAndCourseForWindSpeed
|
||||
* List of sampling points. Needs to be sorted by windspeed (A of the Pair object) low to high
|
||||
* @param maxDistanceToSamplingPointFunctionInKnots
|
||||
* If there is only a sampling point on one side, what's the maximal distance to consider valid when
|
||||
* comparing?
|
||||
*/
|
||||
public WindSpeedAndAngleEstimator(
|
||||
List<Pair<Speed, SpeedWithBearingWithConfidence<Void>>> averageBoatSpeedAndCourseForWindSpeed,
|
||||
double maxDistanceToSamplingPointFunctionInKnots) {
|
||||
this.averageBoatSpeedAndCourseForWindSpeed = averageBoatSpeedAndCourseForWindSpeed;
|
||||
this.maxDistanceToSamplingPointFunctionInKnots = maxDistanceToSamplingPointFunctionInKnots;
|
||||
}
|
||||
|
||||
/**
|
||||
* Looks at all entries in {@link #dataCountAndAngleSumMap} and determines the wind speed and true wind angle at
|
||||
* which the boat has most likely been sailing to achieve the <code>boatSpeed</code> provided.
|
||||
*
|
||||
* BE ADVISED: The result candidate with the highest confidence, which is returned here, is not necessarily the
|
||||
* candidate which is the most likely to be correct. It really depends on the quality and quantity of gathered polar
|
||||
* data.
|
||||
*
|
||||
* Use {@link #getAverageTrueWindSpeedAndAngleCandidates(Speed)} to get all candidates.
|
||||
*
|
||||
* @return null if none was found, otherwise candidate with highest confidence, found in the list returned by
|
||||
* {@link #getAverageTrueWindSpeedAndAngleCandidates(Speed)}
|
||||
*/
|
||||
public SpeedWithBearingWithConfidence<Void> getAverageTrueWindSpeedAndAngle(Speed boatSpeed) {
|
||||
Set<SpeedWithBearingWithConfidence<Void>> resultCandidates = getAverageTrueWindSpeedAndAngleCandidates(boatSpeed);
|
||||
|
||||
SpeedWithBearingWithConfidence<Void> resultCandidateWithHighestConfidence = null;
|
||||
for (SpeedWithBearingWithConfidence<Void> resultCandidate : resultCandidates) {
|
||||
if (resultCandidateWithHighestConfidence == null
|
||||
|| resultCandidate.getConfidence() > resultCandidateWithHighestConfidence.getConfidence()) {
|
||||
resultCandidateWithHighestConfidence = resultCandidate;
|
||||
}
|
||||
}
|
||||
return resultCandidateWithHighestConfidence;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Uses the constructor-supplied sampling points to find wind and course candidates for the supplied boatSpeed.
|
||||
*
|
||||
* @return empty set if the underlying data was not sufficient to estimate wind. Otherwise a set of candidates
|
||||
* with windspeed course of the boat relative to the wind and a confidence which was derived from the
|
||||
* confidences of underlying fixes, the amount of underlying fixes and the distance between the input
|
||||
* boatSpeed and the sampling points supplied by the gathered polar data.
|
||||
*/
|
||||
public Set<SpeedWithBearingWithConfidence<Void>> getAverageTrueWindSpeedAndAngleCandidates(Speed boatSpeed) {
|
||||
double requestedBoatSpeedInKnots = boatSpeed.getKnots();
|
||||
Pair<Speed, SpeedWithBearingWithConfidence<Void>> last = null;
|
||||
Set<SpeedWithBearingWithConfidence<Void>> resultCandidates = new HashSet<>();
|
||||
Set<SpeedWithBearingWithConfidence<Void>> resultCandidatesWithDistance = new HashSet<>();
|
||||
for (Pair<Speed, SpeedWithBearingWithConfidence<Void>> averageSpeedForWindSpeed : averageBoatSpeedAndCourseForWindSpeed) {
|
||||
Speed windSpeed = averageSpeedForWindSpeed.getA();
|
||||
SpeedWithBearingWithConfidence<Void> averageBoatSpeedWithCourse = averageSpeedForWindSpeed.getB();
|
||||
double currentBoatSpeedInKnots = averageBoatSpeedWithCourse.getObject().getKnots();
|
||||
if (last != null) {
|
||||
double lastBoatSpeedInKnots = last.getB().getObject().getKnots();
|
||||
|
||||
if (lastBoatSpeedInKnots <= requestedBoatSpeedInKnots
|
||||
&& currentBoatSpeedInKnots >= requestedBoatSpeedInKnots) {
|
||||
SpeedWithBearingWithConfidenceImpl<Void> resultCandidate = createWeightedResultCandidateForLowerLast(
|
||||
requestedBoatSpeedInKnots, last, windSpeed, averageBoatSpeedWithCourse,
|
||||
lastBoatSpeedInKnots, currentBoatSpeedInKnots);
|
||||
resultCandidates.add(resultCandidate);
|
||||
} else if (lastBoatSpeedInKnots >= requestedBoatSpeedInKnots
|
||||
&& currentBoatSpeedInKnots <= requestedBoatSpeedInKnots) {
|
||||
SpeedWithBearingWithConfidenceImpl<Void> resultCandidate = createWeightedResultCandidateForHigherLast(
|
||||
requestedBoatSpeedInKnots, last, windSpeed, averageBoatSpeedWithCourse,
|
||||
lastBoatSpeedInKnots, currentBoatSpeedInKnots);
|
||||
resultCandidates.add(resultCandidate);
|
||||
}
|
||||
}
|
||||
/*
|
||||
* This will be run when there was no candidate found in between the two sampling points (or we are at the
|
||||
* beginning) and add a Candidate if the requested point was maxDistanceToSamplingPointFunctionInKnots or
|
||||
* less away from the last regarded sampling point. The candidate (if valid) is then added to the
|
||||
* resultCandidatesWithDistance set. Confidences are halved and the set is only used if the standard result
|
||||
* set is empty in the end
|
||||
*/
|
||||
if (resultCandidates.size() == 0 && last != null) {
|
||||
addResultCandidateIfDistanceValid(requestedBoatSpeedInKnots, resultCandidatesWithDistance, last.getA(),
|
||||
last.getB());
|
||||
}
|
||||
last = averageSpeedForWindSpeed;
|
||||
}
|
||||
// check last sampling point for distance match and return withDistance set if standard set is empty
|
||||
if (last != null && resultCandidates.size() == 0) {
|
||||
addResultCandidateIfDistanceValid(requestedBoatSpeedInKnots, resultCandidatesWithDistance, last.getA(),
|
||||
last.getB());
|
||||
resultCandidates = resultCandidatesWithDistance;
|
||||
}
|
||||
return resultCandidates;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Confidence will be halved in situations where there the requested speed does not lie between any sampling points.
|
||||
* The speed and angle values are equal to the sampling point values.
|
||||
*/
|
||||
private void addResultCandidateIfDistanceValid(double requestedBoatSpeedInKnots,
|
||||
Set<SpeedWithBearingWithConfidence<Void>> resultCandidates, Speed windSpeed,
|
||||
SpeedWithBearingWithConfidence<Void> averageBoatSpeedWithCourse) {
|
||||
if (Math.abs(averageBoatSpeedWithCourse.getObject().getKnots() - requestedBoatSpeedInKnots) <= maxDistanceToSamplingPointFunctionInKnots) {
|
||||
SpeedWithBearingWithConfidence<Void> resultCandidate = new SpeedWithBearingWithConfidenceImpl<Void>(
|
||||
new KnotSpeedWithBearingImpl(windSpeed.getKnots(), new DegreeBearingImpl(averageBoatSpeedWithCourse
|
||||
.getObject().getBearing().getDegrees())), averageBoatSpeedWithCourse.getConfidence() * 0.5,
|
||||
null);
|
||||
resultCandidates.add(resultCandidate);
|
||||
}
|
||||
}
|
||||
|
||||
private SpeedWithBearingWithConfidenceImpl<Void> createWeightedResultCandidateForHigherLast(
|
||||
double requestedBoatSpeedInKnots, Pair<Speed, SpeedWithBearingWithConfidence<Void>> last, Speed windSpeed,
|
||||
SpeedWithBearingWithConfidence<Void> averageBoatSpeedWithCourse, double lastBoatSpeedInKnots,
|
||||
double currentBoatSpeedInKnots) {
|
||||
double differenceBetweenBothSpeedsInKnots = lastBoatSpeedInKnots - currentBoatSpeedInKnots;
|
||||
double ratio;
|
||||
if (differenceBetweenBothSpeedsInKnots < 0.00001) {
|
||||
//Both sampling points have the same ratio. Use confidence to determine the ratio
|
||||
ratio = last.getB().getConfidence() / (averageBoatSpeedWithCourse.getConfidence() + last.getB().getConfidence());
|
||||
} else {
|
||||
double differenceBetweenRequestedAndLower = requestedBoatSpeedInKnots - currentBoatSpeedInKnots;
|
||||
ratio = differenceBetweenRequestedAndLower / differenceBetweenBothSpeedsInKnots;
|
||||
}
|
||||
double weightedAverageWindSpeedInKnots = (( 1 - ratio) * windSpeed.getKnots())
|
||||
+ (ratio * last.getA().getKnots());
|
||||
double currentCourseInDeg = averageBoatSpeedWithCourse.getObject().getBearing()
|
||||
.getDegrees();
|
||||
double lastCourseInDeg = last.getB().getObject().getBearing().getDegrees();
|
||||
double weightedAverageAngleInDeg = (( 1 - ratio) * currentCourseInDeg) + (ratio * lastCourseInDeg);
|
||||
double weightedAverageConfidence = (( 1 - ratio) * averageBoatSpeedWithCourse.getConfidence())
|
||||
+ (ratio * last.getB().getConfidence());
|
||||
SpeedWithBearingWithConfidenceImpl<Void> resultCandidate = new SpeedWithBearingWithConfidenceImpl<Void>(
|
||||
new KnotSpeedWithBearingImpl(weightedAverageWindSpeedInKnots, new DegreeBearingImpl(
|
||||
weightedAverageAngleInDeg)), weightedAverageConfidence, null);
|
||||
return resultCandidate;
|
||||
}
|
||||
|
||||
private SpeedWithBearingWithConfidenceImpl<Void> createWeightedResultCandidateForLowerLast(
|
||||
double requestedBoatSpeedInKnots, Pair<Speed, SpeedWithBearingWithConfidence<Void>> last, Speed windSpeed,
|
||||
SpeedWithBearingWithConfidence<Void> averageBoatSpeedWithCourse, double lastBoatSpeedInKnots,
|
||||
double currentBoatSpeedInKnots) {
|
||||
double differenceBetweenBothSpeedsInKnots = currentBoatSpeedInKnots - lastBoatSpeedInKnots;
|
||||
double ratio;
|
||||
if (differenceBetweenBothSpeedsInKnots < 0.00001) {
|
||||
// Both sampling points have the same ratio. Use confidence to determine the ratio
|
||||
ratio = averageBoatSpeedWithCourse.getConfidence()
|
||||
/ (averageBoatSpeedWithCourse.getConfidence() + last.getB().getConfidence());
|
||||
} else {
|
||||
double differenceBetweenRequestedAndLower = requestedBoatSpeedInKnots - lastBoatSpeedInKnots;
|
||||
ratio = differenceBetweenRequestedAndLower / differenceBetweenBothSpeedsInKnots;
|
||||
}
|
||||
double weightedAverageWindSpeedInKnots = (ratio * windSpeed.getKnots())
|
||||
+ ((1 - ratio) * last.getA().getKnots());
|
||||
double currentCourseInDeg = averageBoatSpeedWithCourse.getObject().getBearing()
|
||||
.getDegrees();
|
||||
double lastCourseInDeg = last.getB().getObject().getBearing().getDegrees();
|
||||
double weightedAverageAngleInDeg = (ratio * currentCourseInDeg) + ((1 - ratio) * lastCourseInDeg);
|
||||
double weightedAverageConfidence = (ratio * averageBoatSpeedWithCourse.getConfidence())
|
||||
+ ((1 - ratio) * last.getB().getConfidence());
|
||||
SpeedWithBearingWithConfidenceImpl<Void> resultCandidate = new SpeedWithBearingWithConfidenceImpl<Void>(
|
||||
new KnotSpeedWithBearingImpl(weightedAverageWindSpeedInKnots, new DegreeBearingImpl(
|
||||
weightedAverageAngleInDeg)), weightedAverageConfidence, null);
|
||||
return resultCandidate;
|
||||
}
|
||||
|
||||
}
|
||||
+1
-1
@@ -57,7 +57,7 @@ public class ManeuverBasedWindEstimationTrackImpl extends WindTrackImpl {
|
||||
// TODO continue here, asking the polarService for the wind speed based on boat speed, leg type and tack
|
||||
for (LegType legType : new LegType[] { LegType.UPWIND, LegType.DOWNWIND }) {
|
||||
for (Tack tack : new Tack[] { Tack.PORT, Tack.STARBOARD }) {
|
||||
polarService.getAverageTrueWindSpeedAndAngle(maneuverAndBoatClass.getValue(),
|
||||
polarService.getAverageTrueWindSpeedAndAngleCandidates(maneuverAndBoatClass.getValue(),
|
||||
maneuverAndBoatClass.getKey().getSpeedWithBearingBefore(),
|
||||
legType, tack);
|
||||
}
|
||||
|
||||
-2
@@ -29,9 +29,7 @@ public class RegattaStructureManagementPanelPO extends PageArea {
|
||||
|
||||
public RegattaCreateDialogPO startRegattaCreation() {
|
||||
this.addRegattaButton.click();
|
||||
|
||||
WebElement dialog = findElementBySeleniumId(this.driver, "RegattaCreateDialog"); //$NON-NLS-1$
|
||||
|
||||
return new RegattaCreateDialogPO(this.driver, dialog);
|
||||
}
|
||||
|
||||
|
||||
+15
-14
@@ -13,6 +13,7 @@ import org.openqa.selenium.WebElement;
|
||||
import org.openqa.selenium.support.ui.FluentWait;
|
||||
|
||||
import com.google.common.base.Function;
|
||||
import com.sap.sailing.domain.common.BoatClassMasterdata;
|
||||
import com.sap.sailing.selenium.core.BySeleniumId;
|
||||
import com.sap.sailing.selenium.core.FindBy;
|
||||
import com.sap.sailing.selenium.pages.PageArea;
|
||||
@@ -58,26 +59,25 @@ public class TrackedRacesListPO extends PageArea {
|
||||
|
||||
@Override
|
||||
public boolean equals(Object object) {
|
||||
if (this == object)
|
||||
if (this == object) {
|
||||
return true;
|
||||
|
||||
if (object == null)
|
||||
}
|
||||
if (object == null) {
|
||||
return false;
|
||||
|
||||
if (getClass() != object.getClass())
|
||||
}
|
||||
if (getClass() != object.getClass()) {
|
||||
return false;
|
||||
|
||||
}
|
||||
TrackedRaceDescriptor other = (TrackedRaceDescriptor) object;
|
||||
|
||||
if(!Objects.equals(this.regatta, other.regatta))
|
||||
if (!Objects.equals(this.regatta, other.regatta)) {
|
||||
return false;
|
||||
|
||||
if(!Objects.equals(this.boatClass, other.boatClass))
|
||||
}
|
||||
if (!Objects.equals(BoatClassMasterdata.resolveBoatClass(this.boatClass), BoatClassMasterdata.resolveBoatClass(other.boatClass))) {
|
||||
return false;
|
||||
|
||||
if(!Objects.equals(this.race, other.race))
|
||||
}
|
||||
if (!Objects.equals(this.race, other.race)) {
|
||||
return false;
|
||||
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -223,8 +223,9 @@ public class TrackedRacesListPO extends PageArea {
|
||||
try {
|
||||
refresh();
|
||||
for (Status status : getStatus(races)) {
|
||||
if (status != statusToWaitFor)
|
||||
if (status != statusToWaitFor) {
|
||||
return Boolean.FALSE;
|
||||
}
|
||||
}
|
||||
} catch (TimeoutException exception) {
|
||||
return Boolean.FALSE;
|
||||
|
||||
+13
-13
@@ -14,6 +14,7 @@ import org.openqa.selenium.support.ui.ExpectedCondition;
|
||||
import org.openqa.selenium.support.ui.ExpectedConditions;
|
||||
import org.openqa.selenium.support.ui.Select;
|
||||
|
||||
import com.sap.sailing.domain.common.BoatClassMasterdata;
|
||||
import com.sap.sailing.selenium.core.BySeleniumId;
|
||||
import com.sap.sailing.selenium.core.FindBy;
|
||||
import com.sap.sailing.selenium.pages.PageArea;
|
||||
@@ -50,26 +51,25 @@ public class TracTracEventManagementPanelPO extends PageArea {
|
||||
|
||||
@Override
|
||||
public boolean equals(Object object) {
|
||||
if (this == object)
|
||||
if (this == object) {
|
||||
return true;
|
||||
|
||||
if (object == null)
|
||||
}
|
||||
if (object == null) {
|
||||
return false;
|
||||
|
||||
if (getClass() != object.getClass())
|
||||
}
|
||||
if (getClass() != object.getClass()) {
|
||||
return false;
|
||||
|
||||
}
|
||||
TrackableRaceDescriptor other = (TrackableRaceDescriptor) object;
|
||||
|
||||
if(!Objects.equals(this.boatClass, other.boatClass))
|
||||
if (!Objects.equals(BoatClassMasterdata.resolveBoatClass(this.boatClass), BoatClassMasterdata.resolveBoatClass(other.boatClass))) {
|
||||
return false;
|
||||
|
||||
if(!Objects.equals(this.eventName, other.eventName))
|
||||
}
|
||||
if (!Objects.equals(this.eventName, other.eventName)) {
|
||||
return false;
|
||||
|
||||
if(!Objects.equals(this.raceName, other.raceName))
|
||||
}
|
||||
if (!Objects.equals(this.raceName, other.raceName)) {
|
||||
return false;
|
||||
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -32,7 +32,7 @@ public class TestStartAndStopTrackingForTracTracEvents extends AbstractSeleniumT
|
||||
private static final String IDM_2013_EVENT = "IDM 5O5 2013";
|
||||
|
||||
private static final String BMW_CUP_BOAT_CLASS = "J80";
|
||||
private static final String IDM_2013_BOAT_CLASS = "505";
|
||||
private static final String IDM_2013_BOAT_CLASS = "5O5";
|
||||
|
||||
private static final String DEFAULT_REGATTA = "Default regatta";
|
||||
private static final String BMW_CUP_REGATTA = "BMW Cup (J80)"; //$NON-NLS-1$
|
||||
|
||||
+2
-2
@@ -37,10 +37,10 @@ public class TestLeaderboardConfiguration extends AbstractSeleniumTest {
|
||||
|
||||
private static final String REGATTA = "IDM 2013"; //$NON-NLS-1$
|
||||
|
||||
private static final String LEADERBOARD = "IDM 2013 (505)"; //$NON-NLS-1$
|
||||
private static final String LEADERBOARD = "IDM 2013 (5O5)"; //$NON-NLS-1$
|
||||
|
||||
private static final String EVENT = "IDM 5O5 2013"; //$NON-NLS-1$
|
||||
private static final String BOAT_CLASS = "505"; //$NON-NLS-1$
|
||||
private static final String BOAT_CLASS = "5O5"; //$NON-NLS-1$
|
||||
private static final String RACE = "Race %d"; //$NON-NLS-1$
|
||||
|
||||
private RegattaDescriptor regatta;
|
||||
|
||||
+1
-1
@@ -27,7 +27,7 @@ public class TestLeaderboardEditing extends AbstractSeleniumTest {
|
||||
private static final String BMW_CUP_JSON_URL = "http://kml.skitrac.traclive.dk/events/event_20120803_BMWCup/jsonservice.php"; //$NON-NLS-1$
|
||||
private static final String BMW_CUP_RACE_8 = "BMW Cup Race 8";
|
||||
private static final String BMW_CUP_REGATTA = "BMW Cup";
|
||||
private static final String BMW_CUP_BOAT_CLASS = "J80";
|
||||
private static final String BMW_CUP_BOAT_CLASS = "J/80";
|
||||
|
||||
private static final TrackableRaceDescriptor TRACKABLE_RACE = new TrackableRaceDescriptor(
|
||||
BMW_CUP_REGATTA, BMW_CUP_RACE_8, BMW_CUP_BOAT_CLASS);
|
||||
|
||||
@@ -1,31 +1,31 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<launchConfiguration type="org.eclipse.pde.ui.EquinoxLauncher">
|
||||
<booleanAttribute key="append.args" value="true"/>
|
||||
<booleanAttribute key="automaticAdd" value="false"/>
|
||||
<booleanAttribute key="automaticValidate" value="false"/>
|
||||
<stringAttribute key="bootstrap" value=""/>
|
||||
<stringAttribute key="checked" value="[NONE]"/>
|
||||
<booleanAttribute key="clearConfig" value="false"/>
|
||||
<stringAttribute key="configLocation" value="${workspace_loc}/target"/>
|
||||
<booleanAttribute key="default" value="true"/>
|
||||
<booleanAttribute key="default_auto_start" value="true"/>
|
||||
<intAttribute key="default_start_level" value="4"/>
|
||||
<booleanAttribute key="includeOptional" value="true"/>
|
||||
<listAttribute key="org.eclipse.debug.ui.favoriteGroups">
|
||||
<listEntry value="org.eclipse.debug.ui.launchGroup.debug"/>
|
||||
<listEntry value="org.eclipse.debug.ui.launchGroup.run"/>
|
||||
</listAttribute>
|
||||
<stringAttribute key="org.eclipse.jdt.launching.JRE_CONTAINER" value="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
|
||||
<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-os ${target.os} -ws ${target.ws} -arch ${target.arch} -nl ${target.nl} -consoleLog -console -clean"/>
|
||||
<stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.eclipse.pde.ui.workbenchClasspathProvider"/>
|
||||
<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-ea -Declipse.ignoreApp=true -Dosgi.noShutdown=true -Dfile.encoding=cp1252 -Dexpedition.udp.port=2010 -Xmx6000m -Dhttp.proxyHost=proxy.wdf.sap.corp -Dhttp.proxyPort=8080 -Dhttps.proxyHost=proxy -Dhttps.proxyPort=8080 -Dmongo.dbName=winddbTest -Djetty.home=${project_loc:com.sap.sailing.server}/../target/configuration/jetty -Djava.util.logging.config.file=${project_loc:com.sap.sailing.server}/../target/configuration/logging_debug.properties -Dkiwo.results=${project_loc:com.sap.sailing.kiworesultimport.test}/resources -Dpersistentcompetitors.clear=false -XX:+UseMembar -Digtimi.client.id=7fcdd217e0aa16090edb4ad55b09ec43b2021090e209541fc9b7003c2a2b70c6 -Digtimi.client.secret=aa569cf4909bdc7b0e04b11873f3c4ea20687421e010fcc25b771cca9e6f3f9a -Digtimi.client.redirecturi=http://127.0.0.1:8888/igtimi/oauth/v1/authorizationcallback"/>
|
||||
<stringAttribute key="org.eclipse.jdt.launching.WORKING_DIRECTORY" value="${workspace_loc}"/>
|
||||
<stringAttribute key="pde.version" value="3.3"/>
|
||||
<booleanAttribute key="show_selected_only" value="false"/>
|
||||
<stringAttribute key="target_bundles" value="com.rabbitmq.client@default:default,com.sun.jersey@default:default,com.sun.mail.javax.mail@default:default,javax.servlet@default:default,javax.validation@default:default,javax.ws.rs@default:default,jcl.over.slf4j@default:default,org.apache.commons.beanutils@default:default,org.apache.commons.codec@default:default,org.apache.commons.collections@default:default,org.apache.commons.fileupload@default:default,org.apache.commons.io@default:default,org.apache.commons.lang@default:default,org.apache.commons.logging@default:default,org.apache.felix.gogo.command@default:default,org.apache.felix.gogo.runtime@default:default,org.apache.felix.gogo.shell@default:default,org.apache.geronimo.specs.geronimo-annotation_1.0_spec@default:default,org.apache.geronimo.specs.geronimo-j2ee-management_1.1_spec@default:default,org.apache.geronimo.specs.geronimo-jms_1.1_spec@default:default,org.apache.httpcomponents.httpclient@default:default,org.apache.httpcomponents.httpcore@default:default,org.apache.servicemix.bundles.ehcache@default:default,org.apache.servicemix.bundles.scribe@default:default,org.apache.shiro.core@default:default,org.apache.shiro.ehcache@default:default,org.apache.shiro.web@default:default,org.eclipse.equinox.common@2:true,org.eclipse.equinox.console@default:default,org.eclipse.jetty.continuation@default:default,org.eclipse.jetty.deploy@default:default,org.eclipse.jetty.http@default:default,org.eclipse.jetty.io@default:default,org.eclipse.jetty.jmx@default:default,org.eclipse.jetty.osgi.boot@default:default,org.eclipse.jetty.security@default:default,org.eclipse.jetty.server@default:default,org.eclipse.jetty.servlet@default:default,org.eclipse.jetty.util@default:default,org.eclipse.jetty.webapp@default:default,org.eclipse.jetty.websocket.api@default:default,org.eclipse.jetty.websocket.client@default:default,org.eclipse.jetty.websocket.common@default:default,org.eclipse.jetty.websocket.server@default:default,org.eclipse.jetty.websocket.servlet@default:default,org.eclipse.jetty.xml@default:default,org.eclipse.osgi.services@default:default,org.eclipse.osgi@-1:true,org.jdom@default:default,org.objectweb.asm@default:default,rome@default:default,routeconverter@default:default,slf4j.api@default:default,slf4j.jdk14@default:false"/>
|
||||
<booleanAttribute key="tracing" value="false"/>
|
||||
<booleanAttribute key="useCustomFeatures" value="false"/>
|
||||
<booleanAttribute key="useDefaultConfigArea" value="false"/>
|
||||
<stringAttribute key="workspace_bundles" value="com.google.gwt.osgi@default:default,com.googlecode.java-diff-utils@default:default,com.mongodb.driver@default:default,com.sap.sailing.barbados.resultimport@default:default,com.sap.sailing.datamining.shared@default:default,com.sap.sailing.datamining@default:default,com.sap.sailing.declination@default:default,com.sap.sailing.domain.common@default:default,com.sap.sailing.domain.deckmanadapter@4:true,com.sap.sailing.domain.igtimiadapter.persistence@default:default,com.sap.sailing.domain.igtimiadapter@default:default,com.sap.sailing.domain.persistence@default:default,com.sap.sailing.domain.racelogtrackingadapter@3:true,com.sap.sailing.domain.shared.android@default:default,com.sap.sailing.domain.swisstimingadapter.persistence@default:default,com.sap.sailing.domain.swisstimingadapter@4:true,com.sap.sailing.domain.swisstimingreplayadapter@4:true,com.sap.sailing.domain.tractracadapter.persistence@default:default,com.sap.sailing.domain.tractracadapter@4:true,com.sap.sailing.domain@default:default,com.sap.sailing.ess40.resultimport@default:default,com.sap.sailing.expeditionconnector@default:default,com.sap.sailing.freg.resultimport@default:default,com.sap.sailing.geocoding@default:default,com.sap.sailing.gwt.ui@5:true,com.sap.sailing.kiworesultimport@default:default,com.sap.sailing.manage2sail.resultimport@default:default,com.sap.sailing.manage2sail@default:default,com.sap.sailing.nmeaconnector@default:default,com.sap.sailing.resultimport@default:default,com.sap.sailing.sailwave.resultimport@default:default,com.sap.sailing.server.gateway.ess40@4:true,com.sap.sailing.server.gateway.serialization@default:default,com.sap.sailing.server.gateway.test.support@5:true,com.sap.sailing.polars@default:default,com.sap.sailing.server.gateway@5:true,com.sap.sailing.server.trackfiles@default:default,com.sap.sailing.server@default:default,com.sap.sailing.simulator@default:default,com.sap.sailing.udpconnector@default:default,com.sap.sailing.velum.resultimport@default:default,com.sap.sailing.www.events@4:true,com.sap.sailing.www@4:true,com.sap.sailing.xrr.resultimport@default:default,com.sap.sailing.xrr.schema@default:default,com.sap.sailing.xrr.structureimport@default:default,com.sap.sse.common@default:default,com.sap.sse.datamining.shared@default:default,com.sap.sse.datamining@default:default,com.sap.sse.gateway@default:default,com.sap.sse.gwt.adminconsole@default:default,com.sap.sse.gwt@default:default,com.sap.sse.mongodb@default:default,com.sap.sse.operationaltransformation@default:default,com.sap.sse.replication@4:true,com.sap.sse.security.common@default:default,com.sap.sse.security.ui@6:true,com.sap.sse.security.userstore.mongodb@4:true,com.sap.sse.security@5:true,com.sap.sse@default:default,com.tractrac.clientmodule@default:default,net.sf.marineapi@default:default,org.json.simple@default:default,org.moxieapps.gwt.highcharts@default:default"/>
|
||||
<stringAttribute key="yk-options" value=" additional-options2=onexit\=snapshot "/>
|
||||
</launchConfiguration>
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<launchConfiguration type="org.eclipse.pde.ui.EquinoxLauncher">
|
||||
<booleanAttribute key="append.args" value="true"/>
|
||||
<booleanAttribute key="automaticAdd" value="false"/>
|
||||
<booleanAttribute key="automaticValidate" value="false"/>
|
||||
<stringAttribute key="bootstrap" value=""/>
|
||||
<stringAttribute key="checked" value="[NONE]"/>
|
||||
<booleanAttribute key="clearConfig" value="false"/>
|
||||
<stringAttribute key="configLocation" value="${workspace_loc}/target"/>
|
||||
<booleanAttribute key="default" value="true"/>
|
||||
<booleanAttribute key="default_auto_start" value="true"/>
|
||||
<intAttribute key="default_start_level" value="4"/>
|
||||
<booleanAttribute key="includeOptional" value="true"/>
|
||||
<listAttribute key="org.eclipse.debug.ui.favoriteGroups">
|
||||
<listEntry value="org.eclipse.debug.ui.launchGroup.debug"/>
|
||||
<listEntry value="org.eclipse.debug.ui.launchGroup.run"/>
|
||||
</listAttribute>
|
||||
<stringAttribute key="org.eclipse.jdt.launching.JRE_CONTAINER" value="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
|
||||
<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-os ${target.os} -ws ${target.ws} -arch ${target.arch} -nl ${target.nl} -consoleLog -console -clean"/>
|
||||
<stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.eclipse.pde.ui.workbenchClasspathProvider"/>
|
||||
<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-ea -Declipse.ignoreApp=true -Dosgi.noShutdown=true -Dfile.encoding=cp1252 -Dexpedition.udp.port=2010 -Xmx6000m -Dhttp.proxyHost=proxy.wdf.sap.corp -Dhttp.proxyPort=8080 -Dhttps.proxyHost=proxy -Dhttps.proxyPort=8080 -Dmongo.dbName=winddbTest -Djetty.home=${project_loc:com.sap.sailing.server}/../target/configuration/jetty -Djava.util.logging.config.file=${project_loc:com.sap.sailing.server}/../target/configuration/logging_debug.properties -Dkiwo.results=${project_loc:com.sap.sailing.kiworesultimport.test}/resources -Dpersistentcompetitors.clear=false -XX:+UseMembar -Digtimi.client.id=7fcdd217e0aa16090edb4ad55b09ec43b2021090e209541fc9b7003c2a2b70c6 -Digtimi.client.secret=aa569cf4909bdc7b0e04b11873f3c4ea20687421e010fcc25b771cca9e6f3f9a -Digtimi.client.redirecturi=http://127.0.0.1:8888/igtimi/oauth/v1/authorizationcallback"/>
|
||||
<stringAttribute key="org.eclipse.jdt.launching.WORKING_DIRECTORY" value="${workspace_loc}"/>
|
||||
<stringAttribute key="pde.version" value="3.3"/>
|
||||
<booleanAttribute key="show_selected_only" value="false"/>
|
||||
<stringAttribute key="target_bundles" value="com.rabbitmq.client@default:default,com.sun.jersey@default:default,com.sun.mail.javax.mail@default:default,javax.servlet@default:default,javax.validation@default:default,javax.ws.rs@default:default,jcl.over.slf4j@default:default,org.apache.commons.beanutils@default:default,org.apache.commons.codec@default:default,org.apache.commons.collections@default:default,org.apache.commons.fileupload@default:default,org.apache.commons.io@default:default,org.apache.commons.lang@default:default,org.apache.commons.logging@default:default,org.apache.felix.gogo.command@default:default,org.apache.felix.gogo.runtime@default:default,org.apache.felix.gogo.shell@default:default,org.apache.geronimo.specs.geronimo-annotation_1.0_spec@default:default,org.apache.geronimo.specs.geronimo-j2ee-management_1.1_spec@default:default,org.apache.geronimo.specs.geronimo-jms_1.1_spec@default:default,org.apache.httpcomponents.httpclient@default:default,org.apache.httpcomponents.httpcore@default:default,org.apache.servicemix.bundles.ehcache@default:default,org.apache.servicemix.bundles.scribe@default:default,org.apache.shiro.core@default:default,org.apache.shiro.ehcache@default:default,org.apache.shiro.web@default:default,org.eclipse.equinox.common@2:true,org.eclipse.equinox.console@default:default,org.eclipse.jetty.continuation@default:default,org.eclipse.jetty.deploy@default:default,org.eclipse.jetty.http@default:default,org.eclipse.jetty.io@default:default,org.eclipse.jetty.jmx@default:default,org.eclipse.jetty.osgi.boot@default:default,org.eclipse.jetty.security@default:default,org.eclipse.jetty.server@default:default,org.eclipse.jetty.servlet@default:default,org.eclipse.jetty.util@default:default,org.eclipse.jetty.webapp@default:default,org.eclipse.jetty.websocket.api@default:default,org.eclipse.jetty.websocket.client@default:default,org.eclipse.jetty.websocket.common@default:default,org.eclipse.jetty.websocket.server@default:default,org.eclipse.jetty.websocket.servlet@default:default,org.eclipse.jetty.xml@default:default,org.eclipse.osgi.services@default:default,org.eclipse.osgi@-1:true,org.jdom@default:default,org.objectweb.asm@default:default,rome@default:default,routeconverter@default:default,slf4j.api@default:default,slf4j.jdk14@default:false"/>
|
||||
<booleanAttribute key="tracing" value="false"/>
|
||||
<booleanAttribute key="useCustomFeatures" value="false"/>
|
||||
<booleanAttribute key="useDefaultConfigArea" value="false"/>
|
||||
<stringAttribute key="workspace_bundles" value="com.google.gwt.osgi@default:default,com.googlecode.java-diff-utils@default:default,com.mongodb.driver@default:default,com.sap.sailing.barbados.resultimport@default:default,com.sap.sailing.datamining.shared@default:default,com.sap.sailing.datamining@default:default,com.sap.sailing.declination@default:default,com.sap.sailing.domain.common@default:default,com.sap.sailing.domain.deckmanadapter@4:true,com.sap.sailing.domain.igtimiadapter.persistence@default:default,com.sap.sailing.domain.igtimiadapter@default:default,com.sap.sailing.domain.persistence@default:default,com.sap.sailing.domain.racelogtrackingadapter@3:true,com.sap.sailing.domain.shared.android@default:default,com.sap.sailing.domain.swisstimingadapter.persistence@default:default,com.sap.sailing.domain.swisstimingadapter@4:true,com.sap.sailing.domain.swisstimingreplayadapter@4:true,com.sap.sailing.domain.tractracadapter.persistence@default:default,com.sap.sailing.domain.tractracadapter@4:true,com.sap.sailing.domain@default:default,com.sap.sailing.ess40.resultimport@default:default,com.sap.sailing.expeditionconnector@default:default,com.sap.sailing.freg.resultimport@default:default,com.sap.sailing.geocoding@default:default,com.sap.sailing.gwt.ui@5:true,com.sap.sailing.kiworesultimport@default:default,com.sap.sailing.manage2sail.resultimport@default:default,com.sap.sailing.manage2sail@default:default,com.sap.sailing.nmeaconnector@default:default,com.sap.sailing.polars@default:default,com.sap.sailing.resultimport@default:default,com.sap.sailing.sailwave.resultimport@default:default,com.sap.sailing.server.gateway.ess40@4:true,com.sap.sailing.server.gateway.serialization@default:default,com.sap.sailing.server.gateway.test.support@5:true,com.sap.sailing.server.gateway@5:true,com.sap.sailing.server.trackfiles@default:default,com.sap.sailing.server@default:default,com.sap.sailing.simulator@default:default,com.sap.sailing.udpconnector@default:default,com.sap.sailing.velum.resultimport@default:default,com.sap.sailing.www.events@4:true,com.sap.sailing.www@4:true,com.sap.sailing.xrr.resultimport@default:default,com.sap.sailing.xrr.schema@default:default,com.sap.sailing.xrr.structureimport@default:default,com.sap.sse.common@default:default,com.sap.sse.datamining.shared@default:default,com.sap.sse.datamining@default:default,com.sap.sse.gateway@default:default,com.sap.sse.gwt.adminconsole@default:default,com.sap.sse.gwt@default:default,com.sap.sse.mongodb@default:default,com.sap.sse.operationaltransformation@default:default,com.sap.sse.replication@4:true,com.sap.sse.security.common@default:default,com.sap.sse.security.ui@6:true,com.sap.sse.security.userstore.mongodb@4:true,com.sap.sse.security@5:true,com.sap.sse@default:default,com.tractrac.clientmodule@default:default,net.sf.marineapi@default:default,org.json.simple@default:default,org.moxieapps.gwt.highcharts@default:default"/>
|
||||
<stringAttribute key="yk-options" value=" additional-options2=onexit\=snapshot "/>
|
||||
</launchConfiguration>
|
||||
+5
-7
@@ -20,7 +20,6 @@ import com.sap.sailing.domain.base.BoatClass;
|
||||
import com.sap.sailing.domain.base.DomainFactory;
|
||||
import com.sap.sailing.domain.base.Nationality;
|
||||
import com.sap.sailing.domain.base.Regatta;
|
||||
import com.sap.sailing.domain.base.impl.BoatClassImpl;
|
||||
import com.sap.sailing.domain.base.impl.BoatImpl;
|
||||
import com.sap.sailing.domain.base.impl.DynamicBoat;
|
||||
import com.sap.sailing.domain.base.impl.DynamicPerson;
|
||||
@@ -94,12 +93,11 @@ public class StructureImporter {
|
||||
BuildStructure buildStructure = new BuildStructure(races);
|
||||
final TimePoint startDate = null; // TODO can regatta start time be inferred from XRR document?
|
||||
final TimePoint endDate = null; // TODO can regatta end time be inferred from XRR document?
|
||||
RegattaImpl regatta = new RegattaImpl(
|
||||
RegattaImpl.getDefaultName(event.getTitle(), ((Division) event.getRaceOrDivisionOrRegattaSeriesResult().get(0)).getTitle()),
|
||||
new BoatClassImpl(((Division) event.getRaceOrDivisionOrRegattaSeriesResult().get(0)).getTitle(), true),
|
||||
startDate, endDate,
|
||||
getSeries(buildStructure), false, this.baseDomainFactory.createScoringScheme(ScoringSchemeType.LOW_POINT), event.getEventID(),
|
||||
null);
|
||||
RegattaImpl regatta = new RegattaImpl(RegattaImpl.getDefaultName(event.getTitle(), ((Division) event
|
||||
.getRaceOrDivisionOrRegattaSeriesResult().get(0)).getTitle()),
|
||||
baseDomainFactory.getOrCreateBoatClass(((Division) event.getRaceOrDivisionOrRegattaSeriesResult()
|
||||
.get(0)).getTitle()), startDate, endDate, getSeries(buildStructure), false,
|
||||
this.baseDomainFactory.createScoringScheme(ScoringSchemeType.LOW_POINT), event.getEventID(), null);
|
||||
addSpecificRegattas.add(regatta);
|
||||
}
|
||||
return addSpecificRegattas;
|
||||
|
||||
Reference in new issue
Block a user