mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-09-24 14:38:45 +00:00
Merge branch 'master' into bug5232
# Conflicts: # java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/places/whatsnew/resources/SailingAnalyticsNotes.html # java/com.sap.sailing.www/release_notes_admin.html
This commit is contained in:
+34
-10
@@ -487,6 +487,19 @@ public class IncrementalLeaderboardDTO extends LeaderboardDTO implements Increme
|
||||
}
|
||||
}
|
||||
}
|
||||
// replace null values of Regatta specific competitor handicap values with the respective competitor's
|
||||
// default values
|
||||
for (LeaderboardRowDTO row : rows.values()) {
|
||||
if(row != null) {
|
||||
if (row.effectiveTimeOnDistanceAllowancePerNauticalMile == null) {
|
||||
row.effectiveTimeOnDistanceAllowancePerNauticalMile = row.competitor
|
||||
.getTimeOnDistanceAllowancePerNauticalMile();
|
||||
}
|
||||
if (row.effectiveTimeOnTimeFactor == null) {
|
||||
row.effectiveTimeOnTimeFactor = row.competitor.getTimeOnTimeFactor();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -598,16 +611,27 @@ public class IncrementalLeaderboardDTO extends LeaderboardDTO implements Increme
|
||||
// now clone the rows map to enable stripping the LeaderboardEntryDTOs inside
|
||||
HashMap<CompetitorDTO, LeaderboardRowDTO> newRows = new HashMap<>();
|
||||
for (Map.Entry<CompetitorDTO, LeaderboardRowDTO> competitorAndRow : rows.entrySet()) {
|
||||
LeaderboardRowDTO previousRowDTO = previousVersion.rows.get(competitorAndRow.getKey());
|
||||
final CompetitorDTO competitorDTO = competitorAndRow.getKey();
|
||||
final LeaderboardRowDTO previousRowDTO = previousVersion.rows.get(competitorDTO);
|
||||
if (Util.equalsWithNull(competitorAndRow.getValue(), previousRowDTO)
|
||||
// can only compress for competitors that existed in the previous version
|
||||
&& previousVersion.competitors.contains(competitorAndRow.getKey())) {
|
||||
entireRowUnchanged(previousVersion, competitorAndRow.getKey());
|
||||
// And don't enter into newRows. Mark all entries and all leg details in this row as unchanged for compaction of those structures:
|
||||
// And don't enter into newRows. Mark all entries and all leg details in this row as unchanged for
|
||||
// compaction of those structures:
|
||||
} else {
|
||||
LeaderboardRowDTO newRowDTO = new LeaderboardRowDTO();
|
||||
cloner.clone(competitorAndRow.getValue(), newRowDTO);
|
||||
CompetitorDTO compactCompetitor = compactCompetitorMap.get(competitorAndRow.getKey());
|
||||
// if the Regatta specific competitor handicap values are equal to the competitor's default values they
|
||||
// do not need to be transfered reduntantly
|
||||
if (newRowDTO.effectiveTimeOnDistanceAllowancePerNauticalMile != null && newRowDTO.effectiveTimeOnDistanceAllowancePerNauticalMile
|
||||
.equals(competitorDTO.getTimeOnDistanceAllowancePerNauticalMile())) {
|
||||
newRowDTO.effectiveTimeOnDistanceAllowancePerNauticalMile = null;
|
||||
}
|
||||
if (newRowDTO.effectiveTimeOnTimeFactor != null && newRowDTO.effectiveTimeOnTimeFactor.equals(competitorDTO.getTimeOnTimeFactor())) {
|
||||
newRowDTO.effectiveTimeOnTimeFactor = null;
|
||||
}
|
||||
CompetitorDTO compactCompetitor = compactCompetitorMap.get(competitorDTO);
|
||||
newRowDTO.competitor = compactCompetitor;
|
||||
newRows.put(compactCompetitor, newRowDTO);
|
||||
HashMap<String, LeaderboardEntryDTO> newFieldsByRaceColumnName = new HashMap<String, LeaderboardEntryDTO>();
|
||||
@@ -619,12 +643,12 @@ public class IncrementalLeaderboardDTO extends LeaderboardDTO implements Increme
|
||||
if (previousEntryDTO != null
|
||||
&& Util.equalsWithNull(raceColumnNameAndLeaderboardEntry.getValue(), previousEntryDTO)
|
||||
// can only compress for competitors that existed in the previous version
|
||||
&& previousVersion.competitors.contains(competitorAndRow.getKey())) {
|
||||
getUnchangedLeaderboardEntries(previousVersion).unchanged(competitorAndRow.getKey(),
|
||||
&& previousVersion.competitors.contains(competitorDTO)) {
|
||||
getUnchangedLeaderboardEntries(previousVersion).unchanged(competitorDTO,
|
||||
raceColumnNameAndLeaderboardEntry.getKey());
|
||||
// also mark all leg details for the competitor for this column as unchanged; this will ensure
|
||||
// that column compression can work for leg details
|
||||
getLegDetailsUnchanged(previousVersion).unchanged(competitorAndRow.getKey(),
|
||||
getLegDetailsUnchanged(previousVersion).unchanged(competitorDTO,
|
||||
new com.sap.sse.common.Util.Pair<String, Integer>(raceColumnNameAndLeaderboardEntry.getKey(), null));
|
||||
} else {
|
||||
LeaderboardEntryDTO newLeaderboardEntryDTO = new LeaderboardEntryDTO();
|
||||
@@ -643,9 +667,9 @@ public class IncrementalLeaderboardDTO extends LeaderboardDTO implements Increme
|
||||
&& Util.equalsWithNull(legDetails,
|
||||
previousEntryDTO.legDetails.get(legDetailsIndex))
|
||||
// can only compress for competitors that existed in the previous version
|
||||
&& previousVersion.competitors.contains(competitorAndRow.getKey())) {
|
||||
&& previousVersion.competitors.contains(competitorDTO)) {
|
||||
getLegDetailsUnchanged(previousVersion).unchanged(
|
||||
competitorAndRow.getKey(),
|
||||
competitorDTO,
|
||||
new com.sap.sse.common.Util.Pair<String, Integer>(raceColumnNameAndLeaderboardEntry.getKey(),
|
||||
legDetailsIndex));
|
||||
newLeaderboardEntryDTO.legDetails.set(legDetailsIndex, null);
|
||||
@@ -654,12 +678,12 @@ public class IncrementalLeaderboardDTO extends LeaderboardDTO implements Increme
|
||||
} else {
|
||||
if ((previousEntryDTO == null || previousEntryDTO.legDetails == null)
|
||||
// can only compress for competitors that existed in the previous version
|
||||
&& previousVersion.competitors.contains(competitorAndRow.getKey())) {
|
||||
&& previousVersion.competitors.contains(competitorDTO)) {
|
||||
// old and new entry are null; no need to set the legDetails in the new version to null
|
||||
// as it already consumes no space;
|
||||
// however, mark the legDetails as unchanged in legDetailsUnchanged so as to allow for
|
||||
// all-column compression
|
||||
getLegDetailsUnchanged(previousVersion).unchanged(competitorAndRow.getKey(),
|
||||
getLegDetailsUnchanged(previousVersion).unchanged(competitorDTO,
|
||||
new com.sap.sse.common.Util.Pair<String, Integer>(raceColumnNameAndLeaderboardEntry.getKey(), null));
|
||||
}
|
||||
}
|
||||
|
||||
+41
-23
@@ -30,24 +30,29 @@ public class LeaderboardRowDTO implements Serializable {
|
||||
public Double totalDurationFoiledInSeconds;
|
||||
public Double totalDistanceFoiledInMeters;
|
||||
public Integer totalScoredRaces;
|
||||
public Double effectiveTimeOnTimeFactor;
|
||||
public Duration effectiveTimeOnDistanceAllowancePerNauticalMile;
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
final int prime = 31;
|
||||
int result = 1;
|
||||
result = prime * result + ((boat == null) ? 0 : boat.hashCode());
|
||||
result = prime * result + ((carriedPoints == null) ? 0 : carriedPoints.hashCode());
|
||||
result = prime * result + ((competitor == null) ? 0 : competitor.hashCode());
|
||||
result = prime * result + ((boat == null) ? 0 : boat.hashCode());
|
||||
result = prime * result + ((fieldsByRaceColumnName == null) ? 0 : fieldsByRaceColumnName.hashCode());
|
||||
result = prime * result
|
||||
+ ((maximumSpeedOverGroundInKnots == null) ? 0 : maximumSpeedOverGroundInKnots.hashCode());
|
||||
result = prime * result + ((netPoints == null) ? 0 : netPoints.hashCode());
|
||||
result = prime * result + ((effectiveTimeOnDistanceAllowancePerNauticalMile == null) ? 0
|
||||
: effectiveTimeOnDistanceAllowancePerNauticalMile.hashCode());
|
||||
result = prime * result + ((effectiveTimeOnTimeFactor == null) ? 0 : effectiveTimeOnTimeFactor.hashCode());
|
||||
result = prime * result + ((totalDistanceFoiledInMeters == null) ? 0 : totalDistanceFoiledInMeters.hashCode());
|
||||
result = prime * result
|
||||
+ ((totalDistanceTraveledInMeters == null) ? 0 : totalDistanceTraveledInMeters.hashCode());
|
||||
result = prime * result
|
||||
+ ((totalDurationFoiledInSeconds == null) ? 0 : totalDurationFoiledInSeconds.hashCode());
|
||||
result = prime * result
|
||||
+ ((totalDistanceFoiledInMeters == null) ? 0 : totalDistanceFoiledInMeters.hashCode());
|
||||
result = prime * result + ((netPoints == null) ? 0 : netPoints.hashCode());
|
||||
result = prime * result + ((totalScoredRaces == null) ? 0 : totalScoredRaces.hashCode());
|
||||
result = prime * result
|
||||
+ ((totalTimeSailedDownwindInSeconds == null) ? 0 : totalTimeSailedDownwindInSeconds.hashCode());
|
||||
result = prime * result + ((totalTimeSailedInSeconds == null) ? 0 : totalTimeSailedInSeconds.hashCode());
|
||||
@@ -55,13 +60,11 @@ public class LeaderboardRowDTO implements Serializable {
|
||||
+ ((totalTimeSailedReachingInSeconds == null) ? 0 : totalTimeSailedReachingInSeconds.hashCode());
|
||||
result = prime * result
|
||||
+ ((totalTimeSailedUpwindInSeconds == null) ? 0 : totalTimeSailedUpwindInSeconds.hashCode());
|
||||
result = prime
|
||||
* result
|
||||
+ ((whenMaximumSpeedOverGroundWasAchieved == null) ? 0 : whenMaximumSpeedOverGroundWasAchieved
|
||||
.hashCode());
|
||||
result = prime * result + ((whenMaximumSpeedOverGroundWasAchieved == null) ? 0
|
||||
: whenMaximumSpeedOverGroundWasAchieved.hashCode());
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public boolean equals(Object obj) {
|
||||
if (this == obj)
|
||||
@@ -71,6 +74,11 @@ public class LeaderboardRowDTO implements Serializable {
|
||||
if (getClass() != obj.getClass())
|
||||
return false;
|
||||
LeaderboardRowDTO other = (LeaderboardRowDTO) obj;
|
||||
if (boat == null) {
|
||||
if (other.boat != null)
|
||||
return false;
|
||||
} else if (!boat.equals(other.boat))
|
||||
return false;
|
||||
if (carriedPoints == null) {
|
||||
if (other.carriedPoints != null)
|
||||
return false;
|
||||
@@ -81,11 +89,6 @@ public class LeaderboardRowDTO implements Serializable {
|
||||
return false;
|
||||
} else if (!competitor.equals(other.competitor))
|
||||
return false;
|
||||
if (boat == null) {
|
||||
if (other.boat != null)
|
||||
return false;
|
||||
} else if (!boat.equals(other.boat))
|
||||
return false;
|
||||
if (fieldsByRaceColumnName == null) {
|
||||
if (other.fieldsByRaceColumnName != null)
|
||||
return false;
|
||||
@@ -96,6 +99,26 @@ public class LeaderboardRowDTO implements Serializable {
|
||||
return false;
|
||||
} else if (!maximumSpeedOverGroundInKnots.equals(other.maximumSpeedOverGroundInKnots))
|
||||
return false;
|
||||
if (netPoints == null) {
|
||||
if (other.netPoints != null)
|
||||
return false;
|
||||
} else if (!netPoints.equals(other.netPoints))
|
||||
return false;
|
||||
if (effectiveTimeOnDistanceAllowancePerNauticalMile == null) {
|
||||
if (other.effectiveTimeOnDistanceAllowancePerNauticalMile != null)
|
||||
return false;
|
||||
} else if (!effectiveTimeOnDistanceAllowancePerNauticalMile.equals(other.effectiveTimeOnDistanceAllowancePerNauticalMile))
|
||||
return false;
|
||||
if (effectiveTimeOnTimeFactor == null) {
|
||||
if (other.effectiveTimeOnTimeFactor != null)
|
||||
return false;
|
||||
} else if (!effectiveTimeOnTimeFactor.equals(other.effectiveTimeOnTimeFactor))
|
||||
return false;
|
||||
if (totalDistanceFoiledInMeters == null) {
|
||||
if (other.totalDistanceFoiledInMeters != null)
|
||||
return false;
|
||||
} else if (!totalDistanceFoiledInMeters.equals(other.totalDistanceFoiledInMeters))
|
||||
return false;
|
||||
if (totalDistanceTraveledInMeters == null) {
|
||||
if (other.totalDistanceTraveledInMeters != null)
|
||||
return false;
|
||||
@@ -106,15 +129,10 @@ public class LeaderboardRowDTO implements Serializable {
|
||||
return false;
|
||||
} else if (!totalDurationFoiledInSeconds.equals(other.totalDurationFoiledInSeconds))
|
||||
return false;
|
||||
if (totalDistanceFoiledInMeters == null) {
|
||||
if (other.totalDistanceFoiledInMeters != null)
|
||||
if (totalScoredRaces == null) {
|
||||
if (other.totalScoredRaces != null)
|
||||
return false;
|
||||
} else if (!totalDistanceFoiledInMeters.equals(other.totalDistanceFoiledInMeters))
|
||||
return false;
|
||||
if (netPoints == null) {
|
||||
if (other.netPoints != null)
|
||||
return false;
|
||||
} else if (!netPoints.equals(other.netPoints))
|
||||
} else if (!totalScoredRaces.equals(other.totalScoredRaces))
|
||||
return false;
|
||||
if (totalTimeSailedDownwindInSeconds == null) {
|
||||
if (other.totalTimeSailedDownwindInSeconds != null)
|
||||
@@ -143,7 +161,7 @@ public class LeaderboardRowDTO implements Serializable {
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
public Distance getDistanceTraveled(String raceColumnName) {
|
||||
final Distance result;
|
||||
LeaderboardEntryDTO fieldsForRace = fieldsByRaceColumnName.get(raceColumnName);
|
||||
|
||||
+3
-1
@@ -50,7 +50,9 @@ public class ORCPerformanceCurveCourseImpl implements ORCPerformanceCurveCourse
|
||||
}
|
||||
resultLegs.add(potentiallyReplacedLeg);
|
||||
}
|
||||
resultLegs.add(lastFinishedLeg.scale(shareOfCurrentLeg));
|
||||
if (shareOfCurrentLeg > 0) {
|
||||
resultLegs.add(lastFinishedLeg.scale(shareOfCurrentLeg));
|
||||
}
|
||||
return new ORCPerformanceCurveCourseImpl(resultLegs);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user