mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-11-03 01:29:33 +00:00
bug5932: implemented TackTypeSegment data mining settings
This commit is contained in:
1 parent
3b374b06c5
commit
fda1547486
7 files changed
+140
-11
No files matched your search
+5
@@ -2444,4 +2444,9 @@ public interface StringMessages extends com.sap.sse.gwt.client.StringMessages,
|
||||
String tackTypeUnit();
|
||||
String tackTypeTooltip();
|
||||
String tackType();
|
||||
String tackTypeSegments();
|
||||
String errorMinimumDurationBetweenAdjacentTackTypeSegmentsMustNotBeNegative();
|
||||
String errorMinimumTackTypeSegmentDurationMustNotBeNegative();
|
||||
String minimumDurationBetweenAdjacentTackTypeSegmentsInSeconds();
|
||||
String minimumTackTypeSegmentsDurationInSeconds();
|
||||
}
|
||||
+6
-1
@@ -2480,4 +2480,9 @@ incrementalScoreCorrectionInPoints=Incremental score correction (points)
|
||||
errorObtainingCourseAreasForLeaderboard=Error obtaining course areas for leaderboard {0}: {1}
|
||||
tackType=Long / short tack
|
||||
tackTypeTooltip=For upwind: If the difference between COG and next waypoint direction is smaller than the one between COG and wind direction it is long tack (1.0); if it is smaller short tack (-1.0). For downwind: Similar to upwind but instead of "wind direction", one use the opposite direction. So where the wind is blowing to. For reaching: Similar to upwind but instead of comparing to "COG and wind direction", one use 10°.
|
||||
tackTypeUnit=L=1.0, S=-1.0, Unknown=0.0
|
||||
tackTypeUnit=L=1.0, S=-1.0, Unknown=0.0
|
||||
tackTypeSegments=Tack type segments
|
||||
errorMinimumDurationBetweenAdjacentTackTypeSegmentsMustNotBeNegative=Minimum duration between adjacent tack type segments must not be negative
|
||||
errorMinimumTackTypeSegmentDurationMustNotBeNegative=Minimum duration of a tack type segment must not be negative
|
||||
minimumDurationBetweenAdjacentTackTypeSegmentsInSeconds=Minimum duration between adjacent tack type segments (s)
|
||||
minimumTackTypeSegmentsDurationInSeconds=Minimum duration of tack type segments (s)
|
||||
+6
-1
@@ -2476,4 +2476,9 @@ incrementalScoreCorrectionInPoints=Inkrementelle Punktestrafe
|
||||
errorObtainingCourseAreasForLeaderboard=Fehler beim Abfragen der Bahnkreise zur Veranstaltung der Rangliste {0}: {1}
|
||||
tackType=Streck-/Holebug
|
||||
tackTypeTooltip=Für Amwind: Wenn der Unterschied zwischen KüG und Peilung zur nächsten Bahnmarke kleiner ist als KüG und Windrichtung, handelt es sich um Streckbug (1.0); wenn es kleiner ist Holebug (-1.0). Für Vorwind: Ähnlich wie zum Amwind, aber statt "Windrichtung" nutzt man die gegenteilige Richtung. Also die, wo der Wind hin weht. Für Halbwind: Ähnlich wie zur Kreuz, aber statt "KüG und Windrichtung" nutzt man 10°.
|
||||
tackTypeUnit=S=1.0, H=-1.0, Unbekannt=0.0
|
||||
tackTypeUnit=S=1.0, H=-1.0, Unbekannt=0.0
|
||||
tackTypeSegments=Streck-/Holebug-Segmente
|
||||
errorMinimumDurationBetweenAdjacentTackTypeSegmentsMustNotBeNegative=Minimale Dauer zwischen zwei Streck-/Holebug-Segmenten darf nicht negativ sein
|
||||
errorMinimumTackTypeSegmentDurationMustNotBeNegative=Minimale Dauer eines Streck-/Holebug-Segments darf nicht negativ sein
|
||||
minimumDurationBetweenAdjacentTackTypeSegmentsInSeconds=Minimaler zeitlicher Abstand zwischen benachbarten Streck-/Holebug-Segmenten (s)
|
||||
minimumTackTypeSegmentsDurationInSeconds=Mindestdauer eines Streck-/Holebug-Segments (s)
|
||||
+24
-4
@@ -8,9 +8,11 @@ import com.sap.sailing.datamining.shared.ManeuverSettings;
|
||||
import com.sap.sailing.datamining.shared.ManeuverSettingsImpl;
|
||||
import com.sap.sailing.datamining.shared.ManeuverSpeedDetailsSettings;
|
||||
import com.sap.sailing.datamining.shared.ManeuverSpeedDetailsSettingsImpl;
|
||||
import com.sap.sailing.datamining.shared.TackTypeSegmentsDataMiningSettings;
|
||||
import com.sap.sailing.gwt.ui.client.StringMessages;
|
||||
import com.sap.sailing.gwt.ui.datamining.presentation.ManeuverSettingsDialogComponent;
|
||||
import com.sap.sailing.gwt.ui.datamining.presentation.ManeuverSpeedDetailsSettingsDialogComponent;
|
||||
import com.sap.sailing.gwt.ui.datamining.presentation.TackTypeSegmentsDataMiningSettingsDialogComponent;
|
||||
import com.sap.sailing.gwt.ui.polarmining.FoilingSegmentsDataMiningSettingsDialogComponent;
|
||||
import com.sap.sailing.gwt.ui.polarmining.PolarDataMiningSettingsDialogComponent;
|
||||
import com.sap.sailing.polars.datamining.shared.PolarDataMiningSettings;
|
||||
@@ -28,23 +30,21 @@ public class DataMiningSettingsInfoManagerImpl implements DataMiningSettingsInfo
|
||||
public DataMiningSettingsInfoManagerImpl(StringMessages stringMessages) {
|
||||
this.stringMessages = stringMessages;
|
||||
infosMappedBySettingsType = new HashMap<>();
|
||||
|
||||
// GWT doesn't support Class.isAssignableFrom and Class.getInterfaces.
|
||||
// Adding every implementation of the desired type is necessary.
|
||||
PolarDataMiningSettingsInfo polarDataMiningSettingsInfo = new PolarDataMiningSettingsInfo();
|
||||
infosMappedBySettingsType.put(PolarDataMiningSettings.class, polarDataMiningSettingsInfo);
|
||||
infosMappedBySettingsType.put(PolarDataMiningSettingsImpl.class, polarDataMiningSettingsInfo);
|
||||
|
||||
ManeuverSpeedDetailsSettingsInfo maneuverSpeedDetailsSettingsInfo = new ManeuverSpeedDetailsSettingsInfo();
|
||||
infosMappedBySettingsType.put(ManeuverSpeedDetailsSettings.class, maneuverSpeedDetailsSettingsInfo);
|
||||
infosMappedBySettingsType.put(ManeuverSpeedDetailsSettingsImpl.class, maneuverSpeedDetailsSettingsInfo);
|
||||
|
||||
ManeuverSettingsInfo maneuverSettingsInfo = new ManeuverSettingsInfo();
|
||||
infosMappedBySettingsType.put(ManeuverSettings.class, maneuverSettingsInfo);
|
||||
infosMappedBySettingsType.put(ManeuverSettingsImpl.class, maneuverSettingsInfo);
|
||||
|
||||
FoilingSegmentsDataMiningSettingsInfo foilingDataMiningSettingsInfo = new FoilingSegmentsDataMiningSettingsInfo();
|
||||
infosMappedBySettingsType.put(FoilingSegmentsDataMiningSettings.class, foilingDataMiningSettingsInfo);
|
||||
TackTypeSegmentsDataMiningSettingsInfo tackTypeDataMiningSettingsInfo = new TackTypeSegmentsDataMiningSettingsInfo();
|
||||
infosMappedBySettingsType.put(TackTypeSegmentsDataMiningSettings.class, tackTypeDataMiningSettingsInfo);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -141,4 +141,24 @@ public class DataMiningSettingsInfoManagerImpl implements DataMiningSettingsInfo
|
||||
return "FoilingSegmentsDataMiningSettingsInfo";
|
||||
}
|
||||
}
|
||||
|
||||
private class TackTypeSegmentsDataMiningSettingsInfo implements DataMiningSettingsInfo {
|
||||
@SuppressWarnings("unchecked")
|
||||
@Override
|
||||
public <SettingsType extends SerializableSettings> SettingsDialogComponent<SettingsType> createSettingsDialogComponent(
|
||||
SettingsType settings) {
|
||||
return (SettingsDialogComponent<SettingsType>) new TackTypeSegmentsDataMiningSettingsDialogComponent(
|
||||
(TackTypeSegmentsDataMiningSettings) settings);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getLocalizedName() {
|
||||
return stringMessages.tackTypeSegments();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getId() {
|
||||
return "TackTypeSegmentsDataMiningSettingsInfo";
|
||||
}
|
||||
}
|
||||
}
|
||||
+95
@@ -0,0 +1,95 @@
|
||||
package com.sap.sailing.gwt.ui.datamining.presentation;
|
||||
|
||||
import com.google.gwt.user.client.ui.FocusWidget;
|
||||
import com.google.gwt.user.client.ui.Grid;
|
||||
import com.google.gwt.user.client.ui.Label;
|
||||
import com.google.gwt.user.client.ui.VerticalPanel;
|
||||
import com.google.gwt.user.client.ui.Widget;
|
||||
import com.sap.sailing.datamining.shared.TackTypeSegmentsDataMiningSettings;
|
||||
import com.sap.sailing.gwt.ui.client.StringMessages;
|
||||
import com.sap.sse.common.Duration;
|
||||
import com.sap.sse.common.impl.MillisecondsDurationImpl;
|
||||
import com.sap.sse.gwt.client.dialog.DataEntryDialog;
|
||||
import com.sap.sse.gwt.client.dialog.DataEntryDialog.Validator;
|
||||
import com.sap.sse.gwt.client.dialog.DoubleBox;
|
||||
import com.sap.sse.gwt.client.shared.components.SettingsDialogComponent;
|
||||
|
||||
/**
|
||||
* Settings dialog for maneuver settings.
|
||||
*
|
||||
* @author Vladislav Chumak (D069712)
|
||||
*
|
||||
*/
|
||||
public class TackTypeSegmentsDataMiningSettingsDialogComponent implements SettingsDialogComponent<TackTypeSegmentsDataMiningSettings> {
|
||||
|
||||
private TackTypeSegmentsDataMiningSettings settings;
|
||||
private StringMessages stringMessages;
|
||||
private DoubleBox minimumDurationBetweenAdjacentTackTypeSegmentsInSecondsBox;
|
||||
private DoubleBox minimumTackTypeSegmentDurationInSecondsBox;
|
||||
|
||||
public TackTypeSegmentsDataMiningSettingsDialogComponent(TackTypeSegmentsDataMiningSettings settings) {
|
||||
this.settings = settings;
|
||||
this.stringMessages = StringMessages.INSTANCE;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Widget getAdditionalWidget(DataEntryDialog<?> dialog) {
|
||||
VerticalPanel vp = new VerticalPanel();
|
||||
Grid grid = new Grid(2, 2);
|
||||
grid.setCellPadding(5);
|
||||
vp.add(grid);
|
||||
setupGrid(grid, dialog);
|
||||
return vp;
|
||||
}
|
||||
|
||||
private void setupGrid(Grid grid, DataEntryDialog<?> dialog) {
|
||||
final Label minDurationBetweenTackTypeSegmentsLabel = dialog.createLabel(stringMessages.minimumDurationBetweenAdjacentTackTypeSegmentsInSeconds());
|
||||
grid.setWidget(0, 0, minDurationBetweenTackTypeSegmentsLabel);
|
||||
minimumDurationBetweenAdjacentTackTypeSegmentsInSecondsBox = dialog.createDoubleBox(
|
||||
settings.getMinimumTackTypeSegmentDuration() == null ? null : settings.getMinimumDurationBetweenAdjacentTackTypeSegments().asSeconds(), 10);
|
||||
grid.setWidget(0, 1, minimumDurationBetweenAdjacentTackTypeSegmentsInSecondsBox);
|
||||
|
||||
final Label minTackTypeSegmentsDurationLabel = dialog.createLabel(stringMessages.minimumTackTypeSegmentsDurationInSeconds());
|
||||
grid.setWidget(1, 0, minTackTypeSegmentsDurationLabel);
|
||||
minimumTackTypeSegmentDurationInSecondsBox = dialog.createDoubleBox(
|
||||
settings.getMinimumTackTypeSegmentDuration() == null ? null : settings.getMinimumTackTypeSegmentDuration().asSeconds(), 10);
|
||||
grid.setWidget(1, 1, minimumTackTypeSegmentDurationInSecondsBox);
|
||||
}
|
||||
|
||||
@Override
|
||||
public TackTypeSegmentsDataMiningSettings getResult() {
|
||||
return new TackTypeSegmentsDataMiningSettings(
|
||||
getDurationFromSeconds(minimumDurationBetweenAdjacentTackTypeSegmentsInSecondsBox.getValue()),
|
||||
getDurationFromSeconds(minimumTackTypeSegmentDurationInSecondsBox.getValue()));
|
||||
}
|
||||
|
||||
private Duration getDurationFromSeconds(Double seconds) {
|
||||
return seconds == null ? null : new MillisecondsDurationImpl((long) (seconds * 1000));
|
||||
}
|
||||
|
||||
@Override
|
||||
public FocusWidget getFocusWidget() {
|
||||
return minimumDurationBetweenAdjacentTackTypeSegmentsInSecondsBox;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Validator<TackTypeSegmentsDataMiningSettings> getValidator() {
|
||||
return new Validator<TackTypeSegmentsDataMiningSettings>() {
|
||||
@Override
|
||||
public String getErrorMessage(TackTypeSegmentsDataMiningSettings valueToValidate) {
|
||||
final String result;
|
||||
if (valueToValidate.getMinimumDurationBetweenAdjacentTackTypeSegments() != null &&
|
||||
valueToValidate.getMinimumDurationBetweenAdjacentTackTypeSegments().compareTo(Duration.NULL) < 0) {
|
||||
result = stringMessages.errorMinimumDurationBetweenAdjacentTackTypeSegmentsMustNotBeNegative();
|
||||
} else if (valueToValidate.getMinimumTackTypeSegmentDuration() != null &&
|
||||
valueToValidate.getMinimumTackTypeSegmentDuration().compareTo(Duration.NULL) < 0) {
|
||||
result = stringMessages.errorMinimumTackTypeSegmentDurationMustNotBeNegative();
|
||||
} else {
|
||||
result = null;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
}
|
||||
+3
-4
@@ -388,12 +388,11 @@ public class SuggestBoxStatisticProvider extends AbstractDataMiningComponent<Com
|
||||
}
|
||||
|
||||
private List<Component<?>> createSettingsComponentsFor(final DataRetrieverChainDefinitionDTO retrieverChain) {
|
||||
List<Component<?>> settingsComponents = new ArrayList<>();
|
||||
for (Entry<DataRetrieverLevelDTO, SerializableSettings> retrieverLevelSettings : settingsMap.get(retrieverChain)
|
||||
.entrySet()) {
|
||||
final List<Component<?>> settingsComponents = new ArrayList<>();
|
||||
for (final Entry<DataRetrieverLevelDTO, SerializableSettings> retrieverLevelSettings : settingsMap.get(retrieverChain).entrySet()) {
|
||||
final DataRetrieverLevelDTO retrieverLevel = retrieverLevelSettings.getKey();
|
||||
final Class<?> settingsType = retrieverLevelSettings.getValue().getClass();
|
||||
DataMiningSettingsInfo settingsInfo = settingsManager.getSettingsInfo(settingsType);
|
||||
final DataMiningSettingsInfo settingsInfo = settingsManager.getSettingsInfo(settingsType);
|
||||
settingsComponents.add(new RetrieverLevelSettingsComponent(this, getComponentContext(), retrieverLevel,
|
||||
settingsInfo.getId(), settingsInfo.getLocalizedName()) {
|
||||
@Override
|
||||
|
||||
+1
-1
@@ -23,7 +23,7 @@ public class NullDataMiningQueryManager implements DataMiningQueryManager {
|
||||
|
||||
@Override
|
||||
public <ResultType> QueryResult<ResultType> runNewAndAbortPrevious(DataMiningSession session, Query<ResultType> query) {
|
||||
logger.info("This query manager, doesn't manage anything. Just running the query " + query);
|
||||
logger.info("This query manager doesn't manage anything. Just running the query " + query);
|
||||
queries.add(query);
|
||||
final QueryResult<ResultType> result = query.run();
|
||||
queries.remove(query);
|
||||
|
||||
Reference in new issue
Block a user