fromUnifiedDisplayAndAlternativeNamesToBoatClassMasterdata;
+
private BoatClassMasterdata(String displayName, boolean typicallyStartsUpwind, double hullLengthInMeter,
double hullBeamInMeter, BoatHullType hullType, boolean hasAdditionalDownwindSail, String... alternativeNames) {
this.displayName = displayName;
@@ -102,6 +105,17 @@ public enum BoatClassMasterdata {
this.hullType = hullType;
this.hasAdditionalDownwindSail = hasAdditionalDownwindSail;
this.alternativeNames = alternativeNames;
+ addToCache(this);
+ }
+
+ private void addToCache(BoatClassMasterdata boatClassMasterdata) {
+ if (fromUnifiedDisplayAndAlternativeNamesToBoatClassMasterdata == null) {
+ fromUnifiedDisplayAndAlternativeNamesToBoatClassMasterdata = new HashMap<>();
+ }
+ fromUnifiedDisplayAndAlternativeNamesToBoatClassMasterdata.put(unifyBoatClassName(getDisplayName()), this);
+ for (final String alternativeName : getAlternativeNames()) {
+ fromUnifiedDisplayAndAlternativeNamesToBoatClassMasterdata.put(unifyBoatClassName(alternativeName), this);
+ }
}
private BoatClassMasterdata(String displayName, boolean typicallyStartsUpwind, double hullLengthInMeter,
@@ -113,28 +127,45 @@ public enum BoatClassMasterdata {
this.hullType = hullType;
this.hasAdditionalDownwindSail = hasAdditionalDownwindSail;
this.alternativeNames = null;
+ addToCache(this);
}
public static BoatClassMasterdata resolveBoatClass(String boatClassName) {
- String boatClassNameToResolve = unifyBoatClassName(boatClassName);
- for (BoatClassMasterdata boatClass : values()) {
- if (unifyBoatClassName(boatClass.displayName).equals(boatClassNameToResolve)) {
- return boatClass;
- } else if (boatClass.alternativeNames != null) {
- for (String name : boatClass.alternativeNames) {
- if (unifyBoatClassName(name).equals(boatClassNameToResolve)) {
- return boatClass;
- }
- }
- }
- }
- return null;
+ return fromUnifiedDisplayAndAlternativeNamesToBoatClassMasterdata.get(unifyBoatClassName(boatClassName));
}
+ /**
+ * Maps the boatClassName string by removing all whitespace and converting to all upper case.
+ * Example: "Laser Int." becomes "LASERINT."
+ *
+ * Note that the mapping is not related to the set of {@link BoatClassMasterdata} objects known and works the same
+ * regardless of whether boatClassName matches any of the existing {@link BoatClassMasterdata} literals,
+ * display names or alternative names.
+ */
public static String unifyBoatClassName(String boatClassName) {
return boatClassName == null ? null : boatClassName.toUpperCase().replaceAll("\\s+","");
}
+ /**
+ * If any of the existing {@link BoatClassMasterdata} objects has a matching {@link #unifyBoatClassName(String)
+ * unified} display or alternative name, the unified display name of that object is returned. Otherwise, the
+ * {@link #unifyBoatClassName(String) unified} boatClassName value is returned. Example: "LASER" and
+ * "Laser" and "LSR" and "lsr" and "Laser Int." and "LASER INT ." and "LASERINT." will all be mapped to "LASERINT."
+ * based on the boat class masterdata object whose display name is "Laser Int.". In turn, "xyz" and "x y z" will be
+ * mapped to "XYZ" without any matching {@link BoatClassMasterdata} object existing, simply based on the string
+ * mapping described for {@link #unifyBoatClassName(String)}.
+ */
+ public static String unifyBoatClassNameBasedOnExistingMasterdata(String boatClassName) {
+ BoatClassMasterdata bcm = resolveBoatClass(boatClassName);
+ final String result;
+ if (bcm != null) {
+ result = unifyBoatClassName(bcm.getDisplayName());
+ } else {
+ result = unifyBoatClassName(boatClassName);
+ }
+ return result;
+ }
+
public Distance getHullLength() {
return new MeterDistance(hullLengthInMeter);
}
diff --git a/java/com.sap.sailing.domain.common/src/com/sap/sailing/domain/common/ScoringSchemeType.java b/java/com.sap.sailing.domain.common/src/com/sap/sailing/domain/common/ScoringSchemeType.java
index 0309c084ccc..fc5368b9ebb 100755
--- a/java/com.sap.sailing.domain.common/src/com/sap/sailing/domain/common/ScoringSchemeType.java
+++ b/java/com.sap.sailing.domain.common/src/com/sap/sailing/domain/common/ScoringSchemeType.java
@@ -3,5 +3,6 @@ package com.sap.sailing.domain.common;
public enum ScoringSchemeType {
LOW_POINT, HIGH_POINT, HIGH_POINT_ESS_OVERALL, HIGH_POINT_LAST_BREAKS_TIE, HIGH_POINT_FIRST_GETS_TEN,
HIGH_POINT_FIRST_GETS_ONE, LOW_POINT_WINNER_GETS_ZERO, HIGH_POINT_WINNER_GETS_SIX, HIGH_POINT_WINNER_GETS_FIVE, HIGH_POINT_WINNER_GETS_EIGHT,
- HIGH_POINT_WINNER_GETS_EIGHT_AND_INTERPOLATION, HIGH_POINT_FIRST_GETS_TEN_OR_EIGHT, LOW_POINT_WITH_ELIMINATIONS_AND_ROUNDS_WINNER_GETS_07
+ HIGH_POINT_WINNER_GETS_EIGHT_AND_INTERPOLATION, HIGH_POINT_FIRST_GETS_TEN_OR_EIGHT, LOW_POINT_WITH_ELIMINATIONS_AND_ROUNDS_WINNER_GETS_07,
+ LOW_POINT_LEAGUE_OVERALL
}
diff --git a/java/com.sap.sailing.domain.common/src/com/sap/sailing/domain/common/dto/AbstractLeaderboardDTO.java b/java/com.sap.sailing.domain.common/src/com/sap/sailing/domain/common/dto/AbstractLeaderboardDTO.java
index 7658519367d..8a9fa9017a9 100755
--- a/java/com.sap.sailing.domain.common/src/com/sap/sailing/domain/common/dto/AbstractLeaderboardDTO.java
+++ b/java/com.sap.sailing.domain.common/src/com/sap/sailing/domain/common/dto/AbstractLeaderboardDTO.java
@@ -26,6 +26,10 @@ public abstract class AbstractLeaderboardDTO implements Serializable {
public Map rows;
public boolean hasCarriedPoints;
public int[] discardThresholds;
+
+ /**
+ * Set to the non-null regatta name if this DTO represents a RegattaLeaderboard.
+ */
public String regattaName;
public String displayName;
public UUID defaultCourseAreaId;
diff --git a/java/com.sap.sailing.domain.common/src/com/sap/sailing/domain/common/dto/BoatDTO.java b/java/com.sap.sailing.domain.common/src/com/sap/sailing/domain/common/dto/BoatDTO.java
new file mode 100644
index 00000000000..09a4e29ebf2
--- /dev/null
+++ b/java/com.sap.sailing.domain.common/src/com/sap/sailing/domain/common/dto/BoatDTO.java
@@ -0,0 +1,64 @@
+package com.sap.sailing.domain.common.dto;
+
+import java.io.Serializable;
+
+import com.sap.sse.common.Color;
+
+public class BoatDTO extends NamedDTO implements Serializable {
+ private static final long serialVersionUID = -4076992788294272162L;
+
+ private String sailId;
+ private Color color;
+
+ // for GWT
+ BoatDTO() {}
+
+ public BoatDTO(String name, String sailId) {
+ this(name, sailId, null);
+ }
+
+ public BoatDTO(String name, String sailId, Color color) {
+ super(name);
+ this.sailId = sailId;
+ this.color = color;
+ }
+
+ public Color getColor() {
+ return color;
+ }
+
+ public String getSailId() {
+ return sailId;
+ }
+
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = super.hashCode();
+ result = prime * result + ((color == null) ? 0 : color.hashCode());
+ result = prime * result + ((sailId == null) ? 0 : sailId.hashCode());
+ return result;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj)
+ return true;
+ if (!super.equals(obj))
+ return false;
+ if (getClass() != obj.getClass())
+ return false;
+ BoatDTO other = (BoatDTO) obj;
+ if (color == null) {
+ if (other.color != null)
+ return false;
+ } else if (!color.equals(other.color))
+ return false;
+ if (sailId == null) {
+ if (other.sailId != null)
+ return false;
+ } else if (!sailId.equals(other.sailId))
+ return false;
+ return true;
+ }
+}
diff --git a/java/com.sap.sailing.domain.common/src/com/sap/sailing/domain/common/dto/CompetitorDTO.java b/java/com.sap.sailing.domain.common/src/com/sap/sailing/domain/common/dto/CompetitorDTO.java
index a4ba1b6d676..7a60ac393cc 100755
--- a/java/com.sap.sailing.domain.common/src/com/sap/sailing/domain/common/dto/CompetitorDTO.java
+++ b/java/com.sap.sailing.domain.common/src/com/sap/sailing/domain/common/dto/CompetitorDTO.java
@@ -14,10 +14,12 @@ public interface CompetitorDTO extends Serializable, MappableToDevice {
String getCountryName();
- String getSailID();
-
String getIdAsString();
+ String getSailID();
+
+ BoatDTO getBoat();
+
BoatClassDTO getBoatClass();
String getName();
diff --git a/java/com.sap.sailing.domain.common/src/com/sap/sailing/domain/common/dto/CompetitorDTOImpl.java b/java/com.sap.sailing.domain.common/src/com/sap/sailing/domain/common/dto/CompetitorDTOImpl.java
index 4b02ed850ce..ca059c63cc6 100755
--- a/java/com.sap.sailing.domain.common/src/com/sap/sailing/domain/common/dto/CompetitorDTOImpl.java
+++ b/java/com.sap.sailing.domain.common/src/com/sap/sailing/domain/common/dto/CompetitorDTOImpl.java
@@ -21,9 +21,9 @@ public class CompetitorDTOImpl extends NamedDTO implements CompetitorDTO, Serial
private String threeLetterIocCountryCode;
private Color color;
private String email;
- private String sailID;
private String idAsString;
private BoatClassDTO boatClass;
+ private BoatDTO boat;
private String imageURL;
private String flagImageURL;
private Double timeOnTimeFactor;
@@ -32,17 +32,18 @@ public class CompetitorDTOImpl extends NamedDTO implements CompetitorDTO, Serial
public CompetitorDTOImpl() {}
public CompetitorDTOImpl(String name, Color color, String email, String twoLetterIsoCountryCode, String threeLetterIocCountryCode,
- String countryName, String sailID, String idAsString, String imageURL, String flagImageURL, BoatClassDTO boatClass, Double timeOnTimeFactor, Duration timeOnDistanceAllowancePerNauticalMile) {
+ String countryName, String idAsString, String imageURL, String flagImageURL,
+ BoatDTO boat, BoatClassDTO boatClass, Double timeOnTimeFactor, Duration timeOnDistanceAllowancePerNauticalMile) {
super(name);
this.color = color;
this.email = email;
this.twoLetterIsoCountryCode = twoLetterIsoCountryCode;
this.threeLetterIocCountryCode = threeLetterIocCountryCode;
this.countryName = countryName;
- this.sailID = sailID;
this.idAsString = idAsString;
this.imageURL = imageURL;
this.flagImageURL = flagImageURL;
+ this.boat = boat;
this.boatClass = boatClass;
this.timeOnTimeFactor = timeOnTimeFactor;
this.timeOnDistanceAllowancePerNauticalMile = timeOnDistanceAllowancePerNauticalMile;
@@ -53,8 +54,8 @@ public class CompetitorDTOImpl extends NamedDTO implements CompetitorDTO, Serial
final int prime = 31;
int result = super.hashCode();
result = prime * result + ((boatClass == null) ? 0 : boatClass.hashCode());
+ result = prime * result + ((boat == null) ? 0 : boat.hashCode());
result = prime * result + ((idAsString == null) ? 0 : idAsString.hashCode());
- result = prime * result + ((sailID == null) ? 0 : sailID.hashCode());
result = prime * result + ((color == null) ? 0 : color.hashCode());
result = prime * result + ((email == null) ? 0 : email.hashCode());
result = prime * result + ((threeLetterIocCountryCode == null) ? 0 : threeLetterIocCountryCode.hashCode());
@@ -79,16 +80,16 @@ public class CompetitorDTOImpl extends NamedDTO implements CompetitorDTO, Serial
return false;
} else if (!boatClass.equals(other.boatClass))
return false;
+ if (boat == null) {
+ if (other.boat != null)
+ return false;
+ } else if (!boat.equals(other.boat))
+ return false;
if (idAsString == null) {
if (other.idAsString != null)
return false;
} else if (!idAsString.equals(other.idAsString))
return false;
- if (sailID == null) {
- if (other.sailID != null)
- return false;
- } else if (!sailID.equals(other.sailID))
- return false;
if (threeLetterIocCountryCode == null) {
if (other.threeLetterIocCountryCode != null)
return false;
@@ -144,7 +145,7 @@ public class CompetitorDTOImpl extends NamedDTO implements CompetitorDTO, Serial
@Override
public String getSailID() {
- return sailID;
+ return boat==null?null:boat.getSailId();
}
@Override
@@ -198,4 +199,9 @@ public class CompetitorDTOImpl extends NamedDTO implements CompetitorDTO, Serial
public Duration getTimeOnDistanceAllowancePerNauticalMile() {
return timeOnDistanceAllowancePerNauticalMile;
}
+
+ @Override
+ public BoatDTO getBoat() {
+ return boat;
+ }
}
diff --git a/java/com.sap.sailing.domain.common/src/com/sap/sailing/domain/common/dto/IncrementalLeaderboardDTO.java b/java/com.sap.sailing.domain.common/src/com/sap/sailing/domain/common/dto/IncrementalLeaderboardDTO.java
index 4a98fa6d73e..935b3f52ef8 100755
--- a/java/com.sap.sailing.domain.common/src/com/sap/sailing/domain/common/dto/IncrementalLeaderboardDTO.java
+++ b/java/com.sap.sailing.domain.common/src/com/sap/sailing/domain/common/dto/IncrementalLeaderboardDTO.java
@@ -9,10 +9,12 @@ import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
+import java.util.Map.Entry;
import java.util.Set;
import com.sap.sse.common.Cloner;
import com.sap.sse.common.Util;
+import com.sap.sse.common.Util.Pair;
/**
* Reduces the transmission size of a {@link LeaderboardDTO} by comparing this object to a previous version of
@@ -174,16 +176,20 @@ public class IncrementalLeaderboardDTO extends LeaderboardDTO implements Increme
}
/**
- * @param previousVersion needed because after serialization/deserialization, the transient {@link #previousLeaderboard} will be null
+ * @param previousVersion
+ * needed because after serialization/deserialization, the transient {@link #previousLeaderboard}
+ * will be null.
+ * @return a map whose keys are the {@link CompetitorDTO#getIdAsString()} of the competitors for which the value
+ * tells the set of keys that are unchanged
*/
- public Set> getAllUnchangedCompetitorsAndKeys(LeaderboardDTO previousVersion) {
- Set> result = new HashSet>();
+ public Map> getAllUnchangedCompetitorIdsAsStringAndKeys(LeaderboardDTO previousVersion) {
+ Map> result = new HashMap<>();
for (Map.Entry raceColumnNameAndBitSet : unchanged.entrySet()) {
final long[] bitset = raceColumnNameAndBitSet.getValue();
if (bitset == null) {
// this means that all entries for the column are unchanged for all competitors
for (CompetitorDTO competitor : previousVersion.competitors) {
- result.add(new com.sap.sse.common.Util.Pair(competitor, raceColumnNameAndBitSet.getKey()));
+ Util.add(result, competitor.getIdAsString(), raceColumnNameAndBitSet.getKey());
}
} else {
int competitorNumber = 0;
@@ -191,7 +197,7 @@ public class IncrementalLeaderboardDTO extends LeaderboardDTO implements Increme
long bitValue = 1;
for (int bit=0; bit(previousVersion.competitors.get(competitorNumber), raceColumnNameAndBitSet.getKey()));
+ Util.add(result, previousVersion.competitors.get(competitorNumber).getIdAsString(), raceColumnNameAndBitSet.getKey());
}
bitValue <<= 1;
competitorNumber++;
@@ -321,6 +327,14 @@ public class IncrementalLeaderboardDTO extends LeaderboardDTO implements Increme
}
private void applyThisToPreviousVersionByUpdatingThis(LeaderboardDTO previousVersion) {
+ // As a performance improvement for the GWT-compiled version of this class, try to avoid key types
+ // other than strings when there is a map or set to be implemented that has a lot of strain on the
+ // put / add / contains methods. For this, we use the competitor's getIdAsString() result that
+ // identifies them reasonably well.
+ final Map competitorsOfPreviousVersionByIdAsString = new HashMap<>();
+ for (final CompetitorDTO c : previousVersion.competitors) {
+ competitorsOfPreviousVersionByIdAsString.put(c.getIdAsString(), c);
+ }
if (this.updatedFromPreviousVersionWithId != null) {
if (!this.updatedFromPreviousVersionWithId.equals(previousVersion.getId())) {
throw new IllegalStateException("This incremental leaderboard DTO was already applied to a different previous version. It cannot be applied multiple times.");
@@ -410,62 +424,66 @@ public class IncrementalLeaderboardDTO extends LeaderboardDTO implements Increme
row.competitor = expandedCompetitor;
rows.put(expandedCompetitor, row);
}
- final Set rowsUnchangedForCompetitors = new HashSet();
+ final Set rowsUnchangedForCompetitorsWithIdAsString = new HashSet<>();
if (rowsUnchanged != null) {
- for (com.sap.sse.common.Util.Pair rowUnchanged : rowsUnchanged.getAllUnchangedCompetitorsAndKeys(previousVersion)) {
- rowsUnchangedForCompetitors.add(rowUnchanged.getA());
- rows.put(rowUnchanged.getA(), previousVersion.rows.get(rowUnchanged.getA()));
+ for (Entry> rowUnchanged : rowsUnchanged.getAllUnchangedCompetitorIdsAsStringAndKeys(previousVersion).entrySet()) {
+ rowsUnchangedForCompetitorsWithIdAsString.add(rowUnchanged.getKey());
+ final CompetitorDTO previousCompetitor = competitorsOfPreviousVersionByIdAsString.get(rowUnchanged.getKey());
+ rows.put(previousCompetitor, previousVersion.rows.get(previousCompetitor));
}
}
- final Set> allUnchangedLeaderboardEntriesAsCompetitorsAndColumnNames =
- unchangedLeaderboardEntries == null ? new HashSet>() :
- unchangedLeaderboardEntries.getAllUnchangedCompetitorsAndKeys(previousVersion);
+ final Map> allUnchangedLeaderboardEntriesAsCompetitorIdsAsStringAndColumnNames =
+ unchangedLeaderboardEntries == null ? new HashMap>() :
+ unchangedLeaderboardEntries.getAllUnchangedCompetitorIdsAsStringAndKeys(previousVersion);
if (unchangedLeaderboardEntries != null) {
- for (com.sap.sse.common.Util.Pair competitorAndColumnName : allUnchangedLeaderboardEntriesAsCompetitorsAndColumnNames) {
- CompetitorDTO previousCompetitor = competitorAndColumnName.getA();
- if (!rowsUnchangedForCompetitors.contains(previousCompetitor)) { // only care if not the entire row was marked unchanged
- LeaderboardEntryDTO previousEntry = previousVersion.rows.get(previousCompetitor).fieldsByRaceColumnName.get(
- competitorAndColumnName.getB());
- final LeaderboardRowDTO row = rows.get(previousCompetitor);
- if (row != null) { // may be null if the competitor disappeared, e.g., because of suppression
- row.fieldsByRaceColumnName.put(competitorAndColumnName.getB(), previousEntry);
+ for (Entry> competitorAndColumnNames : allUnchangedLeaderboardEntriesAsCompetitorIdsAsStringAndColumnNames.entrySet()) {
+ CompetitorDTO previousCompetitor = competitorsOfPreviousVersionByIdAsString.get(competitorAndColumnNames.getKey());
+ for (final String columnName : competitorAndColumnNames.getValue()) {
+ if (!rowsUnchangedForCompetitorsWithIdAsString.contains(competitorAndColumnNames.getKey())) { // only care if not the entire row was marked unchanged
+ LeaderboardEntryDTO previousEntry = previousVersion.rows.get(previousCompetitor).fieldsByRaceColumnName.get(columnName);
+ final LeaderboardRowDTO row = rows.get(previousCompetitor);
+ if (row != null) { // may be null if the competitor disappeared, e.g., because of suppression
+ row.fieldsByRaceColumnName.put(columnName, previousEntry);
+ }
}
}
}
}
if (legDetailsUnchanged != null) {
- for (com.sap.sse.common.Util.Pair> competitorInPreviosAndColumnNameAndLegDetailsIndex : legDetailsUnchanged
- .getAllUnchangedCompetitorsAndKeys(previousVersion)) {
- CompetitorDTO previousCompetitor = competitorInPreviosAndColumnNameAndLegDetailsIndex.getA();
- final String raceColumnName = competitorInPreviosAndColumnNameAndLegDetailsIndex.getB().getA();
- // if it's already clear that the entire LeaderboardEntryDTO was unchanged, the entry in legDetailsUnchanged was
- // merely a hint for column compression within legDetailsUnchanged and doesn't need to be handled here
- if (!allUnchangedLeaderboardEntriesAsCompetitorsAndColumnNames
- .contains(new com.sap.sse.common.Util.Pair(previousCompetitor, raceColumnName))) {
- final LeaderboardRowDTO leaderboardRowDTO = rows.get(previousCompetitor);
- LeaderboardEntryDTO leaderboardEntry = leaderboardRowDTO == null ? null
- : leaderboardRowDTO.fieldsByRaceColumnName.get(raceColumnName);
- if (leaderboardEntry != null) {
- final LeaderboardRowDTO previousLeaderboardRowDTO = previousVersion.rows
- .get(previousCompetitor);
- final LeaderboardEntryDTO previousLeaderboardEntryDTO = previousLeaderboardRowDTO == null ? null
- : previousLeaderboardRowDTO.fieldsByRaceColumnName.get(raceColumnName);
- final List previousLegDetails = previousLeaderboardEntryDTO == null ? null
- : previousLeaderboardEntryDTO.legDetails;
- if (previousLegDetails == null) {
- // the leg index can only be null if the previous leg details are null
- leaderboardEntry.legDetails = null;
- } else {
- // here, the leg index cannot be null
- if (leaderboardEntry.legDetails == null) {
- leaderboardEntry.legDetails = new ArrayList();
+ for (Entry>> competitorInPreviosAndColumnNameAndLegDetailsIndex :
+ legDetailsUnchanged.getAllUnchangedCompetitorIdsAsStringAndKeys(previousVersion).entrySet()) {
+ CompetitorDTO previousCompetitor = competitorsOfPreviousVersionByIdAsString.get(competitorInPreviosAndColumnNameAndLegDetailsIndex.getKey());
+ for (final Pair columnNameAndLegDetailsIndex : competitorInPreviosAndColumnNameAndLegDetailsIndex.getValue()) {
+ final String raceColumnName = columnNameAndLegDetailsIndex.getA();
+ // if it's already clear that the entire LeaderboardEntryDTO was unchanged, the entry in legDetailsUnchanged was
+ // merely a hint for column compression within legDetailsUnchanged and doesn't need to be handled here
+ final Set unchangedRaceColumnNamesForCompetitor;
+ if ((unchangedRaceColumnNamesForCompetitor=allUnchangedLeaderboardEntriesAsCompetitorIdsAsStringAndColumnNames.get(competitorInPreviosAndColumnNameAndLegDetailsIndex.getKey())) == null
+ || !unchangedRaceColumnNamesForCompetitor.contains(raceColumnName)) {
+ final LeaderboardRowDTO leaderboardRowDTO = rows.get(previousCompetitor);
+ LeaderboardEntryDTO leaderboardEntry = leaderboardRowDTO == null ? null
+ : leaderboardRowDTO.fieldsByRaceColumnName.get(raceColumnName);
+ if (leaderboardEntry != null) {
+ final LeaderboardRowDTO previousLeaderboardRowDTO = previousVersion.rows.get(previousCompetitor);
+ final LeaderboardEntryDTO previousLeaderboardEntryDTO = previousLeaderboardRowDTO == null ? null
+ : previousLeaderboardRowDTO.fieldsByRaceColumnName.get(raceColumnName);
+ final List previousLegDetails = previousLeaderboardEntryDTO == null ? null
+ : previousLeaderboardEntryDTO.legDetails;
+ if (previousLegDetails == null) {
+ // the leg index can only be null if the previous leg details are null
+ leaderboardEntry.legDetails = null;
+ } else {
+ // here, the leg index cannot be null
+ if (leaderboardEntry.legDetails == null) {
+ leaderboardEntry.legDetails = new ArrayList();
+ }
+ final Integer pos = columnNameAndLegDetailsIndex.getB();
+ ensureSize(leaderboardEntry.legDetails, pos + 1);
+ leaderboardEntry.legDetails.set(pos, previousLegDetails.get(pos));
}
- final Integer pos = competitorInPreviosAndColumnNameAndLegDetailsIndex.getB().getB();
- ensureSize(leaderboardEntry.legDetails, pos + 1);
- leaderboardEntry.legDetails.set(pos, previousLegDetails.get(pos));
}
}
- }
+ }
}
}
}
diff --git a/java/com.sap.sailing.domain.common/src/com/sap/sailing/domain/common/dto/PreviousCompetitorDTOImpl.java b/java/com.sap.sailing.domain.common/src/com/sap/sailing/domain/common/dto/PreviousCompetitorDTOImpl.java
index e77f2fb7677..4016116068c 100755
--- a/java/com.sap.sailing.domain.common/src/com/sap/sailing/domain/common/dto/PreviousCompetitorDTOImpl.java
+++ b/java/com.sap.sailing.domain.common/src/com/sap/sailing/domain/common/dto/PreviousCompetitorDTOImpl.java
@@ -70,6 +70,12 @@ public class PreviousCompetitorDTOImpl implements CompetitorDTO {
" need to be replaced by an object of "+CompetitorDTOImpl.class.getName()+" after deserialization");
}
+ @Override
+ public BoatDTO getBoat() {
+ throw new RuntimeException("Internal error. Objects of type "+PreviousCompetitorDTOImpl.class.getName()+
+ " need to be replaced by an object of "+CompetitorDTOImpl.class.getName()+" after deserialization");
+ }
+
@Override
public Color getColor() {
throw new RuntimeException("Internal error. Objects of type "+PreviousCompetitorDTOImpl.class.getName()+
diff --git a/java/com.sap.sailing.domain.common/src/com/sap/sailing/domain/common/dto/RaceColumnDTO.java b/java/com.sap.sailing.domain.common/src/com/sap/sailing/domain/common/dto/RaceColumnDTO.java
index 8adda83ea37..771e95856e8 100755
--- a/java/com.sap.sailing.domain.common/src/com/sap/sailing/domain/common/dto/RaceColumnDTO.java
+++ b/java/com.sap.sailing.domain.common/src/com/sap/sailing/domain/common/dto/RaceColumnDTO.java
@@ -157,7 +157,7 @@ public class RaceColumnDTO extends NamedDTO implements Serializable {
public boolean isLive(FleetDTO fleet, long serverTimePointAsMillis) {
boolean result = false;
final RaceDTO raceDTO = racesPerFleet.get(fleet);
- if(raceDTO != null) {
+ if (raceDTO != null) {
result = raceDTO.isLive(serverTimePointAsMillis);
}
return result;
@@ -169,7 +169,7 @@ public class RaceColumnDTO extends NamedDTO implements Serializable {
public boolean hasLiveRaces(long serverTimePointAsMillis) {
boolean result = false;
- for(FleetDTO fleet: fleets) {
+ for (FleetDTO fleet: fleets) {
result |= isLive(fleet, serverTimePointAsMillis);
}
return result;
diff --git a/java/com.sap.sailing.domain.persistence/META-INF/MANIFEST.MF b/java/com.sap.sailing.domain.persistence/META-INF/MANIFEST.MF
index c169680edd6..6b35a388318 100644
--- a/java/com.sap.sailing.domain.persistence/META-INF/MANIFEST.MF
+++ b/java/com.sap.sailing.domain.persistence/META-INF/MANIFEST.MF
@@ -14,7 +14,8 @@ Require-Bundle: com.sap.sse.mongodb,
com.sap.sailing.server.gateway.serialization,
com.sap.sse.common,
com.sap.sse,
- com.sap.sailing.server.gateway.serialization.shared.android
+ com.sap.sailing.server.gateway.serialization.shared.android,
+ com.sap.sse.shared.android
Export-Package: com.sap.sailing.domain.persistence,
com.sap.sailing.domain.persistence.impl;
x-friends:="com.sap.sailing.domain.persistence.test,
diff --git a/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/DomainObjectFactoryImpl.java b/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/DomainObjectFactoryImpl.java
index d132dd645c7..d83d3620927 100644
--- a/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/DomainObjectFactoryImpl.java
+++ b/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/DomainObjectFactoryImpl.java
@@ -41,7 +41,6 @@ import com.sap.sailing.domain.abstractlog.race.RaceLogCourseDesignChangedEvent;
import com.sap.sailing.domain.abstractlog.race.RaceLogDependentStartTimeEvent;
import com.sap.sailing.domain.abstractlog.race.RaceLogEndOfTrackingEvent;
import com.sap.sailing.domain.abstractlog.race.RaceLogEvent;
-import com.sap.sailing.domain.abstractlog.race.RaceLogEventRestoreFactory;
import com.sap.sailing.domain.abstractlog.race.RaceLogFinishPositioningConfirmedEvent;
import com.sap.sailing.domain.abstractlog.race.RaceLogFinishPositioningListChangedEvent;
import com.sap.sailing.domain.abstractlog.race.RaceLogFixedMarkPassingEvent;
@@ -59,10 +58,30 @@ import com.sap.sailing.domain.abstractlog.race.RaceLogSuppressedMarkPassingsEven
import com.sap.sailing.domain.abstractlog.race.RaceLogWindFixEvent;
import com.sap.sailing.domain.abstractlog.race.SimpleRaceLogIdentifier;
import com.sap.sailing.domain.abstractlog.race.impl.CompetitorResultsImpl;
+import com.sap.sailing.domain.abstractlog.race.impl.RaceLogCourseAreaChangeEventImpl;
+import com.sap.sailing.domain.abstractlog.race.impl.RaceLogCourseDesignChangedEventImpl;
+import com.sap.sailing.domain.abstractlog.race.impl.RaceLogDependentStartTimeEventImpl;
+import com.sap.sailing.domain.abstractlog.race.impl.RaceLogEndOfTrackingEventImpl;
+import com.sap.sailing.domain.abstractlog.race.impl.RaceLogFinishPositioningConfirmedEventImpl;
+import com.sap.sailing.domain.abstractlog.race.impl.RaceLogFinishPositioningListChangedEventImpl;
+import com.sap.sailing.domain.abstractlog.race.impl.RaceLogFixedMarkPassingEventImpl;
+import com.sap.sailing.domain.abstractlog.race.impl.RaceLogFlagEventImpl;
+import com.sap.sailing.domain.abstractlog.race.impl.RaceLogGateLineOpeningTimeEventImpl;
import com.sap.sailing.domain.abstractlog.race.impl.RaceLogImpl;
+import com.sap.sailing.domain.abstractlog.race.impl.RaceLogPassChangeEventImpl;
+import com.sap.sailing.domain.abstractlog.race.impl.RaceLogPathfinderEventImpl;
+import com.sap.sailing.domain.abstractlog.race.impl.RaceLogProtestStartTimeEventImpl;
+import com.sap.sailing.domain.abstractlog.race.impl.RaceLogRaceStatusEventImpl;
+import com.sap.sailing.domain.abstractlog.race.impl.RaceLogRevokeEventImpl;
+import com.sap.sailing.domain.abstractlog.race.impl.RaceLogStartOfTrackingEventImpl;
+import com.sap.sailing.domain.abstractlog.race.impl.RaceLogStartProcedureChangedEventImpl;
+import com.sap.sailing.domain.abstractlog.race.impl.RaceLogStartTimeEventImpl;
+import com.sap.sailing.domain.abstractlog.race.impl.RaceLogSuppressedMarkPassingsEventImpl;
+import com.sap.sailing.domain.abstractlog.race.impl.RaceLogWindFixEventImpl;
import com.sap.sailing.domain.abstractlog.race.impl.SimpleRaceLogIdentifierImpl;
import com.sap.sailing.domain.abstractlog.race.scoring.AdditionalScoringInformationType;
import com.sap.sailing.domain.abstractlog.race.scoring.RaceLogAdditionalScoringInformationEvent;
+import com.sap.sailing.domain.abstractlog.race.scoring.impl.RaceLogAdditionalScoringInformationEventImpl;
import com.sap.sailing.domain.abstractlog.race.tracking.RaceLogCloseOpenEndedDeviceMappingEvent;
import com.sap.sailing.domain.abstractlog.race.tracking.RaceLogDefineMarkEvent;
import com.sap.sailing.domain.abstractlog.race.tracking.RaceLogDenoteForTrackingEvent;
@@ -70,6 +89,13 @@ import com.sap.sailing.domain.abstractlog.race.tracking.RaceLogDeviceCompetitorM
import com.sap.sailing.domain.abstractlog.race.tracking.RaceLogDeviceMarkMappingEvent;
import com.sap.sailing.domain.abstractlog.race.tracking.RaceLogRegisterCompetitorEvent;
import com.sap.sailing.domain.abstractlog.race.tracking.RaceLogStartTrackingEvent;
+import com.sap.sailing.domain.abstractlog.race.tracking.impl.RaceLogCloseOpenEndedDeviceMappingEventImpl;
+import com.sap.sailing.domain.abstractlog.race.tracking.impl.RaceLogDefineMarkEventImpl;
+import com.sap.sailing.domain.abstractlog.race.tracking.impl.RaceLogDenoteForTrackingEventImpl;
+import com.sap.sailing.domain.abstractlog.race.tracking.impl.RaceLogDeviceCompetitorMappingEventImpl;
+import com.sap.sailing.domain.abstractlog.race.tracking.impl.RaceLogDeviceMarkMappingEventImpl;
+import com.sap.sailing.domain.abstractlog.race.tracking.impl.RaceLogRegisterCompetitorEventImpl;
+import com.sap.sailing.domain.abstractlog.race.tracking.impl.RaceLogStartTrackingEventImpl;
import com.sap.sailing.domain.abstractlog.regatta.RegattaLog;
import com.sap.sailing.domain.abstractlog.regatta.RegattaLogEvent;
import com.sap.sailing.domain.abstractlog.regatta.events.RegattaLogCloseOpenEndedDeviceMappingEvent;
@@ -198,19 +224,18 @@ import com.sap.sse.common.impl.MillisecondsDurationImpl;
import com.sap.sse.common.impl.MillisecondsTimePoint;
import com.sap.sse.common.impl.RGBColor;
import com.sap.sse.common.impl.TimeRangeImpl;
-import com.sap.sse.common.media.ImageDescriptor;
-import com.sap.sse.common.media.ImageDescriptorImpl;
import com.sap.sse.common.media.MimeType;
-import com.sap.sse.common.media.VideoDescriptor;
-import com.sap.sse.common.media.VideoDescriptorImpl;
+import com.sap.sse.shared.media.ImageDescriptor;
+import com.sap.sse.shared.media.VideoDescriptor;
+import com.sap.sse.shared.media.impl.ImageDescriptorImpl;
+import com.sap.sse.shared.media.impl.VideoDescriptorImpl;
public class DomainObjectFactoryImpl implements DomainObjectFactory {
private static final Logger logger = Logger.getLogger(DomainObjectFactoryImpl.class.getName());
private final CompetitorJsonDeserializer competitorDeserializer;
private final DB database;
-
- private RaceLogEventRestoreFactory raceLogEventFactory;
+
private final DomainFactory baseDomainFactory;
private final TypeBasedServiceFinder deviceIdentifierServiceFinder;
private final TypeBasedServiceFinderFactory serviceFinderFactory;
@@ -235,7 +260,6 @@ public class DomainObjectFactoryImpl implements DomainObjectFactory {
this.baseDomainFactory = baseDomainFactory;
this.competitorDeserializer = CompetitorJsonDeserializer.create(baseDomainFactory);
this.database = db;
- this.raceLogEventFactory = RaceLogEventRestoreFactory.INSTANCE;
}
@Override
@@ -614,11 +638,18 @@ public class DomainObjectFactoryImpl implements DomainObjectFactory {
// deprecated style: a DBObject whose keys are the escaped competitor names
// new style: a BasicDBList whose entries are DBObjects with COMPETITOR_ID and COMPETITOR_DISPLAY_NAME fields
if (competitorDisplayNames != null) {
- for (Object o : (BasicDBList) competitorDisplayNames) {
- DBObject competitorDisplayName = (DBObject) o;
- final Serializable competitorId = (Serializable) competitorDisplayName.get(FieldNames.COMPETITOR_ID.name());
- final String displayName = (String) competitorDisplayName.get(FieldNames.COMPETITOR_DISPLAY_NAME.name());
- correctionsToUpdate.setDisplayNameByID(competitorId, displayName);
+ if (competitorDisplayNames instanceof BasicDBList) {
+ for (Object o : (BasicDBList) competitorDisplayNames) {
+ DBObject competitorDisplayName = (DBObject) o;
+ final Serializable competitorId = (Serializable) competitorDisplayName.get(FieldNames.COMPETITOR_ID.name());
+ final String displayName = (String) competitorDisplayName.get(FieldNames.COMPETITOR_DISPLAY_NAME.name());
+ correctionsToUpdate.setDisplayNameByID(competitorId, displayName);
+ }
+ } else {
+ logger.severe("Deprecated, now unreadable format of the "+FieldNames.LEADERBOARD_COMPETITOR_DISPLAY_NAMES.name()
+ +" field for leaderboard "+dbLeaderboard.get(FieldNames.LEADERBOARD_NAME.name())+
+ ". You will have to update the competitor display names manually: "+
+ competitorDisplayNames);
}
}
}
@@ -1363,7 +1394,7 @@ public class DomainObjectFactoryImpl implements DomainObjectFactory {
Serializable id, Integer passId, List competitors, DBObject dbObject) {
Wind wind = loadWind((DBObject) dbObject.get(FieldNames.WIND.name()));
Boolean isMagnetic = (Boolean) dbObject.get(FieldNames.IS_MAGNETIC.name());
- return raceLogEventFactory.createWindFixEvent(createdAt, author, logicalTimePoint, id, competitors, passId, wind, isMagnetic == null ? true : isMagnetic);
+ return new RaceLogWindFixEventImpl(createdAt, logicalTimePoint, author, id, passId, wind, isMagnetic == null ? true : isMagnetic);
}
private RaceLogEvent loadRaceLogDeviceCompetitorMappingEvent(TimePoint createdAt, AbstractLogEventAuthor author, TimePoint logicalTimePoint,
@@ -1380,7 +1411,7 @@ public class DomainObjectFactoryImpl implements DomainObjectFactory {
(Serializable) dbObject.get(FieldNames.COMPETITOR_ID.name()));
TimePoint from = loadTimePoint(dbObject, FieldNames.RACE_LOG_FROM);
TimePoint to = loadTimePoint(dbObject, FieldNames.RACE_LOG_TO);
- return raceLogEventFactory.createDeviceCompetitorMappingEvent(createdAt, author, logicalTimePoint, id, device, mappedTo, passId, from, to);
+ return new RaceLogDeviceCompetitorMappingEventImpl(createdAt, logicalTimePoint, author, id, passId, mappedTo, device, from, to);
}
private RaceLogEvent loadRaceLogDeviceMarkMappingEvent(TimePoint createdAt, AbstractLogEventAuthor author, TimePoint logicalTimePoint,
@@ -1397,7 +1428,7 @@ public class DomainObjectFactoryImpl implements DomainObjectFactory {
Mark mappedTo = loadMark((DBObject) dbObject.get(FieldNames.MARK.name()));
TimePoint from = loadTimePoint(dbObject, FieldNames.RACE_LOG_FROM);
TimePoint to = loadTimePoint(dbObject, FieldNames.RACE_LOG_TO);
- return raceLogEventFactory.createDeviceMarkMappingEvent(createdAt, author, logicalTimePoint, id, device, mappedTo, passId, from, to);
+ return new RaceLogDeviceMarkMappingEventImpl(createdAt, logicalTimePoint, author, id, passId, mappedTo, device, from, to);
}
private RaceLogEvent loadRaceLogDenoteForTrackingEvent(TimePoint createdAt, AbstractLogEventAuthor author, TimePoint logicalTimePoint,
@@ -1405,12 +1436,12 @@ public class DomainObjectFactoryImpl implements DomainObjectFactory {
String raceName = (String) dbObject.get(FieldNames.RACE_NAME.name());
BoatClass boatClass = baseDomainFactory.getOrCreateBoatClass((String) dbObject.get(FieldNames.BOAT_CLASS_NAME.name()));
Serializable raceId = (Serializable) dbObject.get(FieldNames.RACE_ID.name());
- return raceLogEventFactory.createDenoteForTrackingEvent(createdAt, author, logicalTimePoint, id, passId, raceName, boatClass, raceId);
+ return new RaceLogDenoteForTrackingEventImpl(createdAt, logicalTimePoint, author, id, passId, raceName, boatClass, raceId);
}
private RaceLogEvent loadRaceLogStartTrackingEvent(TimePoint createdAt, AbstractLogEventAuthor author, TimePoint logicalTimePoint,
Serializable id, Integer passId, List competitors, DBObject dbObject) {
- return raceLogEventFactory.createStartTrackingEvent(createdAt, author, logicalTimePoint, id, passId);
+ return new RaceLogStartTrackingEventImpl(createdAt, logicalTimePoint, author, id, passId);
}
private RaceLogEvent loadRaceLogRevokeEvent(TimePoint createdAt, AbstractLogEventAuthor author, TimePoint logicalTimePoint,
@@ -1420,7 +1451,7 @@ public class DomainObjectFactoryImpl implements DomainObjectFactory {
String revokedEventType = (String) dbObject.get(FieldNames.RACE_LOG_REVOKED_EVENT_TYPE.name());
String revokedEventShortInfo = (String) dbObject.get(FieldNames.RACE_LOG_REVOKED_EVENT_SHORT_INFO.name());
String reason = (String) dbObject.get(FieldNames.RACE_LOG_REVOKED_REASON.name());
- return raceLogEventFactory.createRevokeEvent(createdAt, author, logicalTimePoint, id, passId,
+ return new RaceLogRevokeEventImpl(createdAt, logicalTimePoint, author, id, passId,
revokedEventId, revokedEventType, revokedEventShortInfo, reason);
}
@@ -1428,20 +1459,20 @@ public class DomainObjectFactoryImpl implements DomainObjectFactory {
Serializable id, Integer passId, List competitors, DBObject dbObject) {
Serializable competitorId = (Serializable) dbObject.get(FieldNames.RACE_LOG_COMPETITOR_ID.name());
Competitor comp = baseDomainFactory.getCompetitorStore().getExistingCompetitorById(competitorId);
- return raceLogEventFactory.createRegisterCompetitorEvent(createdAt, author, logicalTimePoint, id, passId, comp);
+ return new RaceLogRegisterCompetitorEventImpl(createdAt, logicalTimePoint, author, id, passId, comp);
}
private RaceLogEvent loadRaceLogDefineMarkEvent(TimePoint createdAt, AbstractLogEventAuthor author, TimePoint logicalTimePoint,
Serializable id, Integer passId, List competitors, DBObject dbObject) {
Mark mark = loadMark((DBObject) dbObject.get(FieldNames.RACE_LOG_MARK.name()));
- return raceLogEventFactory.createDefineMarkEvent(createdAt, author, logicalTimePoint, id, passId, mark);
+ return new RaceLogDefineMarkEventImpl(createdAt, logicalTimePoint, author, id, passId, mark);
}
private RaceLogEvent loadRaceLogCloseOpenEndedDeviceMappingEvent(TimePoint createdAt, AbstractLogEventAuthor author, TimePoint logicalTimePoint,
Serializable id, Integer passId, List competitors, DBObject dbObject) {
Serializable deviceMappingEventId = Helpers.tryUuidConversion((Serializable) dbObject.get(FieldNames.RACE_LOG_DEVICE_MAPPING_EVENT_ID.name()));
TimePoint closingTimePoint = loadTimePoint(dbObject, FieldNames.RACE_LOG_CLOSING_TIMEPOINT);
- return raceLogEventFactory.createCloseOpenEndedDeviceMappingEvent(createdAt, author, logicalTimePoint, id, passId,
+ return new RaceLogCloseOpenEndedDeviceMappingEventImpl(createdAt, logicalTimePoint, author, id, passId,
deviceMappingEventId, closingTimePoint);
}
@@ -1454,19 +1485,19 @@ public class DomainObjectFactoryImpl implements DomainObjectFactory {
} else {
logger.warning("Could not find additional scoring information attached to db log for " + dbObject.toString());
}
- return raceLogEventFactory.createAdditionalScoringInformationEvent(createdAt, author, logicalTimePoint, id, competitors, passId, informationType);
+ return new RaceLogAdditionalScoringInformationEventImpl(createdAt, logicalTimePoint, author, id, passId, informationType);
}
private RaceLogEvent loadRaceLogProtestStartTimeEvent(TimePoint createdAt, AbstractLogEventAuthor author,
TimePoint logicalTimePoint, Serializable id, Integer passId, List competitors, DBObject dbObject) {
TimePoint protestStartTime = loadTimePoint(dbObject, FieldNames.RACE_LOG_PROTEST_START_TIME);
- return raceLogEventFactory.createProtestStartTimeEvent(createdAt, author, logicalTimePoint, id, competitors, passId, protestStartTime);
+ return new RaceLogProtestStartTimeEventImpl(createdAt, logicalTimePoint, author, id, passId, protestStartTime);
}
private RaceLogEvent loadRaceLogStartProcedureChangedEvent(TimePoint createdAt, AbstractLogEventAuthor author,
TimePoint logicalTimePoint, Serializable id, Integer passId, List competitors, DBObject dbObject) {
RacingProcedureType type = RacingProcedureType.valueOf(dbObject.get(FieldNames.RACE_LOG_START_PROCEDURE_TYPE.name()).toString());
- return raceLogEventFactory.createStartProcedureChangedEvent(createdAt, author, logicalTimePoint, id, competitors, passId, type);
+ return new RaceLogStartProcedureChangedEventImpl(createdAt, logicalTimePoint, author, id, passId, type);
}
private RaceLogEvent loadRaceLogGateLineOpeningTimeEvent(TimePoint createdAt, AbstractLogEventAuthor author, TimePoint logicalTimePoint,
@@ -1476,14 +1507,14 @@ public class DomainObjectFactoryImpl implements DomainObjectFactory {
if (dbObject.containsField(FieldNames.RACE_LOG_GOLF_DOWN_TIME.name())) {
golfDownTime = (Number) dbObject.get(FieldNames.RACE_LOG_GOLF_DOWN_TIME.name());
}
- return raceLogEventFactory.createGateLineOpeningTimeEvent(createdAt, author, logicalTimePoint, id, competitors,
+ return new RaceLogGateLineOpeningTimeEventImpl(createdAt, logicalTimePoint, author, id,
passId, gateLaunchStopTime == null ? null : gateLaunchStopTime.longValue(), golfDownTime.longValue());
}
private RaceLogEvent loadRaceLogPathfinderEvent(TimePoint createdAt, AbstractLogEventAuthor author, TimePoint logicalTimePoint,
Serializable id, Integer passId, List competitors, DBObject dbObject) {
String pathfinderId = dbObject.get(FieldNames.RACE_LOG_PATHFINDER_ID.name()).toString();
- return raceLogEventFactory.createPathfinderEvent(createdAt, author, logicalTimePoint, id, competitors, passId, pathfinderId);
+ return new RaceLogPathfinderEventImpl(createdAt, logicalTimePoint, author, id, passId, pathfinderId);
}
private RaceLogEvent loadRaceLogFinishPositioningConfirmedEvent(TimePoint createdAt, AbstractLogEventAuthor author,
@@ -1496,7 +1527,7 @@ public class DomainObjectFactoryImpl implements DomainObjectFactory {
positionedCompetitors = loadPositionedCompetitors(dbPositionedCompetitorList);
}
- return raceLogEventFactory.createFinishPositioningConfirmedEvent(createdAt, author, logicalTimePoint, id, competitors, passId, positionedCompetitors);
+ return new RaceLogFinishPositioningConfirmedEventImpl(createdAt, logicalTimePoint, author, id, passId, positionedCompetitors);
}
private RaceLogEvent loadRaceLogFinishPositioningListChangedEvent(TimePoint createdAt, AbstractLogEventAuthor author,
@@ -1504,36 +1535,36 @@ public class DomainObjectFactoryImpl implements DomainObjectFactory {
BasicDBList dbPositionedCompetitorList = (BasicDBList) dbObject.get(FieldNames.RACE_LOG_POSITIONED_COMPETITORS.name());
CompetitorResults positionedCompetitors = loadPositionedCompetitors(dbPositionedCompetitorList);
- return raceLogEventFactory.createFinishPositioningListChangedEvent(createdAt, author, logicalTimePoint, id, competitors, passId, positionedCompetitors);
+ return new RaceLogFinishPositioningListChangedEventImpl(createdAt, logicalTimePoint, author, id, passId, positionedCompetitors);
}
private RaceLogEvent loadRaceLogPassChangeEvent(TimePoint createdAt, AbstractLogEventAuthor author, TimePoint logicalTimePoint,
Serializable id, Integer passId, List competitors) {
- return raceLogEventFactory.createPassChangeEvent(createdAt, author, logicalTimePoint, id, competitors, passId);
+ return new RaceLogPassChangeEventImpl(createdAt, logicalTimePoint, author, id, passId);
}
private RaceLogCourseDesignChangedEvent loadRaceLogCourseDesignChangedEvent(TimePoint createdAt, AbstractLogEventAuthor author, TimePoint logicalTimePoint, Serializable id, Integer passId, List competitors, DBObject dbObject) {
String courseName = (String) dbObject.get(FieldNames.RACE_LOG_COURSE_DESIGN_NAME.name());
CourseBase courseData = loadCourseData((BasicDBList) dbObject.get(FieldNames.RACE_LOG_COURSE_DESIGN.name()), courseName);
- return raceLogEventFactory.createCourseDesignChangedEvent(createdAt, author, logicalTimePoint, id, competitors, passId, courseData);
+ return new RaceLogCourseDesignChangedEventImpl(createdAt, logicalTimePoint, author, id, passId, courseData);
}
private RaceLogCourseAreaChangedEvent loadRaceLogCourseAreaChangedEvent(TimePoint createdAt, AbstractLogEventAuthor author, TimePoint logicalTimePoint, Serializable id, Integer passId, List competitors, DBObject dbObject) {
Serializable courseAreaId = (Serializable) dbObject.get(FieldNames.COURSE_AREA_ID.name());
- return raceLogEventFactory.createCourseAreaChangedEvent(createdAt, author, logicalTimePoint, id, competitors, passId, courseAreaId);
+ return new RaceLogCourseAreaChangeEventImpl(createdAt, logicalTimePoint, author, id, passId, courseAreaId);
}
private RaceLogEvent loadRaceLogFixedMarkPassingEvent(TimePoint createdAt, AbstractLogEventAuthor author, TimePoint logicalTimePoint,
Serializable id, Integer passId, List competitors, DBObject dbObject) {
TimePoint ofFixedPassing = loadTimePoint(dbObject, FieldNames.TIMEPOINT_OF_FIXED_MARKPASSING);
Integer zeroBasedIndexOfWaypoint = (Integer) dbObject.get(FieldNames.INDEX_OF_PASSED_WAYPOINT.name());
- return raceLogEventFactory.createFixedMarkPassingEvent(logicalTimePoint, author, id, competitors, passId, ofFixedPassing, zeroBasedIndexOfWaypoint);
+ return new RaceLogFixedMarkPassingEventImpl(createdAt, logicalTimePoint, author, id, competitors, passId, ofFixedPassing, zeroBasedIndexOfWaypoint);
}
private RaceLogEvent loadRaceLogSuppressedMarkPassingsEvent(TimePoint createdAt, AbstractLogEventAuthor author, TimePoint logicalTimePoint,
Serializable id, Integer passId, List competitors, DBObject dbObject) {
Integer zeroBasedIndexOfFirstSuppressedWaypoint = (Integer) dbObject.get(FieldNames.INDEX_OF_FIRST_SUPPRESSED_WAYPOINT.name());
- return raceLogEventFactory.createSuppressedMarkPassingsEvent(logicalTimePoint, author, id, competitors, passId, zeroBasedIndexOfFirstSuppressedWaypoint);
+ return new RaceLogSuppressedMarkPassingsEventImpl(createdAt, logicalTimePoint, author, id, competitors, passId, zeroBasedIndexOfFirstSuppressedWaypoint);
}
private CompetitorResults loadPositionedCompetitors(BasicDBList dbPositionedCompetitorList) {
@@ -1581,22 +1612,21 @@ public class DomainObjectFactoryImpl implements DomainObjectFactory {
return null;
}
- return raceLogEventFactory.createFlagEvent(createdAt, author, logicalTimePoint, id, competitors, passId, upperFlag, lowerFlag, displayed);
+ return new RaceLogFlagEventImpl(createdAt, logicalTimePoint, author, id, passId, upperFlag, lowerFlag, displayed);
}
private RaceLogStartTimeEvent loadRaceLogStartTimeEvent(TimePoint createdAt, AbstractLogEventAuthor author, TimePoint logicalTimePoint, Serializable id, Integer passId, List competitors, DBObject dbObject) {
TimePoint startTime = loadTimePoint(dbObject, FieldNames.RACE_LOG_EVENT_START_TIME);
- final String nextStatusName = (String) dbObject.get(FieldNames.RACE_LOG_EVENT_NEXT_STATUS.name());
- final RaceLogRaceStatus nextStatus = nextStatusName==null?null:RaceLogRaceStatus.valueOf(nextStatusName);
- return raceLogEventFactory.createStartTimeEvent(createdAt, author, logicalTimePoint, id, competitors, passId, startTime, nextStatus);
+ RaceLogRaceStatus nextStatus = RaceLogRaceStatus.valueOf((String) dbObject.get(FieldNames.RACE_LOG_EVENT_NEXT_STATUS.name()));
+ return new RaceLogStartTimeEventImpl(createdAt, logicalTimePoint, author, id, passId, startTime, nextStatus);
}
private RaceLogStartOfTrackingEvent loadRaceLogStartOfTrackingEvent(TimePoint createdAt, AbstractLogEventAuthor author, TimePoint logicalTimePoint, Serializable id, Integer passId, List competitors, DBObject dbObject) {
- return raceLogEventFactory.createStartOfTrackingEvent(logicalTimePoint, author, id, competitors, passId);
+ return new RaceLogStartOfTrackingEventImpl(createdAt, logicalTimePoint, author, id, passId);
}
private RaceLogEndOfTrackingEvent loadRaceLogEndOfTrackingEvent(TimePoint createdAt, AbstractLogEventAuthor author, TimePoint logicalTimePoint, Serializable id, Integer passId, List competitors, DBObject dbObject) {
- return raceLogEventFactory.createEndOfTrackingEvent(logicalTimePoint, author, id, competitors, passId);
+ return new RaceLogEndOfTrackingEventImpl(createdAt, logicalTimePoint, author, id, passId);
}
private RaceLogDependentStartTimeEvent loadRaceLogDependentStartTimeEvent(TimePoint createdAt, AbstractLogEventAuthor author, TimePoint logicalTimePoint, Serializable id, Integer passId, List competitors, DBObject dbObject) {
@@ -1611,13 +1641,13 @@ public class DomainObjectFactoryImpl implements DomainObjectFactory {
final Duration startTimeDifference = startTimeDifferenceObject == null ? null :
new MillisecondsDurationImpl(((Number) startTimeDifferenceObject).longValue());
RaceLogRaceStatus nextStatus = RaceLogRaceStatus.valueOf((String) dbObject.get(FieldNames.RACE_LOG_EVENT_NEXT_STATUS.name()));
- return raceLogEventFactory.createDependentStartTimeEvent(createdAt, author, logicalTimePoint, id, competitors,
+ return new RaceLogDependentStartTimeEventImpl(createdAt, logicalTimePoint, author, id,
passId, dependentRaceLog, startTimeDifference, nextStatus);
}
private RaceLogRaceStatusEvent loadRaceLogRaceStatusEvent(TimePoint createdAt, AbstractLogEventAuthor author, TimePoint logicalTimePoint, Serializable id, Integer passId, List competitors, DBObject dbObject) {
RaceLogRaceStatus nextStatus = RaceLogRaceStatus.valueOf((String) dbObject.get(FieldNames.RACE_LOG_EVENT_NEXT_STATUS.name()));
- return raceLogEventFactory.createRaceStatusEvent(createdAt, author, logicalTimePoint, id, competitors, passId, nextStatus);
+ return new RaceLogRaceStatusEventImpl(createdAt, logicalTimePoint, author, id, passId, nextStatus);
}
@Override
@@ -1689,7 +1719,7 @@ public class DomainObjectFactoryImpl implements DomainObjectFactory {
AbstractLogEventAuthor author, TimePoint logicalTimePoint, Serializable id, DBObject dbObject) {
final Competitor comp = getCompetitorByID(dbObject);
final Double timeOnTimeFactor = (Double) dbObject.get(FieldNames.REGATTA_LOG_TIME_ON_TIME_FACTOR.name());
- return new RegattaLogSetCompetitorTimeOnTimeFactorEventImpl(createdAt, author, logicalTimePoint, id, comp, timeOnTimeFactor);
+ return new RegattaLogSetCompetitorTimeOnTimeFactorEventImpl(createdAt, logicalTimePoint, author, id, comp, timeOnTimeFactor);
}
private RegattaLogEvent loadRegattaLogSetCompetitorTimeOnTimeFactorEvent(TimePoint createdAt,
@@ -1698,7 +1728,7 @@ public class DomainObjectFactoryImpl implements DomainObjectFactory {
final Double timeOnDistanceSecondsAllowancePerNauticalMile = (Double) dbObject.get(FieldNames.REGATTA_LOG_TIME_ON_DISTANCE_SECONDS_ALLOWANCE_PER_NAUTICAL_MILE.name());
final Duration timeOnDistanceAllowancePerNauticalMile = timeOnDistanceSecondsAllowancePerNauticalMile == null ? null :
new MillisecondsDurationImpl((long) (timeOnDistanceSecondsAllowancePerNauticalMile*1000));
- return new RegattaLogSetCompetitorTimeOnDistanceAllowancePerNauticalMileEventImpl(createdAt, author, logicalTimePoint, id, comp, timeOnDistanceAllowancePerNauticalMile);
+ return new RegattaLogSetCompetitorTimeOnDistanceAllowancePerNauticalMileEventImpl(createdAt, logicalTimePoint, author, id, comp, timeOnDistanceAllowancePerNauticalMile);
}
private RegattaLogRevokeEvent loadRegattaLogRevokeEvent(TimePoint createdAt, AbstractLogEventAuthor author,
@@ -1708,14 +1738,14 @@ public class DomainObjectFactoryImpl implements DomainObjectFactory {
String revokedEventType = (String) dbObject.get(FieldNames.REGATTA_LOG_REVOKED_EVENT_TYPE.name());
String revokedEventShortInfo = (String) dbObject.get(FieldNames.REGATTA_LOG_REVOKED_EVENT_SHORT_INFO.name());
String reason = (String) dbObject.get(FieldNames.REGATTA_LOG_REVOKED_REASON.name());
- return new RegattaLogRevokeEventImpl(createdAt, author, logicalTimePoint, id,
+ return new RegattaLogRevokeEventImpl(createdAt, logicalTimePoint, author, id,
revokedEventId, revokedEventType, revokedEventShortInfo, reason);
}
private RegattaLogRegisterCompetitorEvent loadRegattaLogRegisterCompetitorEvent(TimePoint createdAt, AbstractLogEventAuthor author,
TimePoint logicalTimePoint, Serializable id, DBObject dbObject) {
Competitor comp = getCompetitorByID(dbObject);
- return new RegattaLogRegisterCompetitorEventImpl(createdAt, author, logicalTimePoint, id, comp);
+ return new RegattaLogRegisterCompetitorEventImpl(createdAt, logicalTimePoint, author, id, comp);
}
private RegattaLogCloseOpenEndedDeviceMappingEvent loadRegattaLogCloseOpenEndedDeviceMappingEvent(TimePoint createdAt,
@@ -1742,7 +1772,7 @@ public class DomainObjectFactoryImpl implements DomainObjectFactory {
Triple times = loadFromToTimePoint(dbObject, FieldNames.REGATTA_LOG_FROM, FieldNames.RACE_LOG_FROM, FieldNames.REGATTA_LOG_TO, FieldNames.RACE_LOG_TO);
final TimePoint from = times.getA();
final TimePoint to = times.getB();
- final RegattaLogDeviceMarkMappingEventImpl result = new RegattaLogDeviceMarkMappingEventImpl(createdAt, author, logicalTimePoint, id, mappedTo, device, from, to);
+ final RegattaLogDeviceMarkMappingEventImpl result = new RegattaLogDeviceMarkMappingEventImpl(createdAt, logicalTimePoint, author, id, mappedTo, device, from, to);
final boolean needsMigration = times.getC();
if (needsMigration) {
// remove old version of mapping event
@@ -1804,7 +1834,7 @@ public class DomainObjectFactoryImpl implements DomainObjectFactory {
final TimePoint from = times.getA();
final TimePoint to = times.getB();
final boolean needsMigration = times.getC();
- final RegattaLogDeviceCompetitorMappingEventImpl result = new RegattaLogDeviceCompetitorMappingEventImpl(createdAt, author, logicalTimePoint, id, mappedTo, device, from, to);
+ final RegattaLogDeviceCompetitorMappingEventImpl result = new RegattaLogDeviceCompetitorMappingEventImpl(createdAt, logicalTimePoint, author, id, mappedTo, device, from, to);
if (needsMigration) {
// remove old version of mapping event
WriteResult removeResult = database.getCollection(CollectionNames.REGATTA_LOGS.name()).remove(outerDBObject);
diff --git a/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/MongoObjectFactoryImpl.java b/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/MongoObjectFactoryImpl.java
index a0c0ae078f3..0bbc0721096 100644
--- a/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/MongoObjectFactoryImpl.java
+++ b/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/MongoObjectFactoryImpl.java
@@ -1,1533 +1,1533 @@
-package com.sap.sailing.domain.persistence.impl;
-
-import java.io.Serializable;
-import java.net.URL;
-import java.util.List;
-import java.util.Map.Entry;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-import org.bson.types.ObjectId;
-import org.json.simple.JSONObject;
-
-import com.mongodb.BasicDBList;
-import com.mongodb.BasicDBObject;
-import com.mongodb.BasicDBObjectBuilder;
-import com.mongodb.DB;
-import com.mongodb.DBCollection;
-import com.mongodb.DBObject;
-import com.mongodb.WriteConcern;
-import com.mongodb.util.JSON;
-import com.sap.sailing.domain.abstractlog.AbstractLogEventAuthor;
-import com.sap.sailing.domain.abstractlog.race.RaceLogCourseAreaChangedEvent;
-import com.sap.sailing.domain.abstractlog.race.RaceLogCourseDesignChangedEvent;
-import com.sap.sailing.domain.abstractlog.race.RaceLogDependentStartTimeEvent;
-import com.sap.sailing.domain.abstractlog.race.RaceLogEndOfTrackingEvent;
-import com.sap.sailing.domain.abstractlog.race.RaceLogEvent;
-import com.sap.sailing.domain.abstractlog.race.RaceLogFinishPositioningConfirmedEvent;
-import com.sap.sailing.domain.abstractlog.race.RaceLogFinishPositioningListChangedEvent;
-import com.sap.sailing.domain.abstractlog.race.RaceLogFixedMarkPassingEvent;
-import com.sap.sailing.domain.abstractlog.race.RaceLogFlagEvent;
-import com.sap.sailing.domain.abstractlog.race.RaceLogGateLineOpeningTimeEvent;
-import com.sap.sailing.domain.abstractlog.race.RaceLogPassChangeEvent;
-import com.sap.sailing.domain.abstractlog.race.RaceLogPathfinderEvent;
-import com.sap.sailing.domain.abstractlog.race.RaceLogProtestStartTimeEvent;
-import com.sap.sailing.domain.abstractlog.race.RaceLogRaceStatusEvent;
-import com.sap.sailing.domain.abstractlog.race.RaceLogRevokeEvent;
-import com.sap.sailing.domain.abstractlog.race.RaceLogStartOfTrackingEvent;
-import com.sap.sailing.domain.abstractlog.race.RaceLogStartProcedureChangedEvent;
-import com.sap.sailing.domain.abstractlog.race.RaceLogStartTimeEvent;
-import com.sap.sailing.domain.abstractlog.race.RaceLogSuppressedMarkPassingsEvent;
-import com.sap.sailing.domain.abstractlog.race.RaceLogWindFixEvent;
-import com.sap.sailing.domain.abstractlog.race.scoring.RaceLogAdditionalScoringInformationEvent;
-import com.sap.sailing.domain.abstractlog.race.tracking.RaceLogCloseOpenEndedDeviceMappingEvent;
-import com.sap.sailing.domain.abstractlog.race.tracking.RaceLogDefineMarkEvent;
-import com.sap.sailing.domain.abstractlog.race.tracking.RaceLogDenoteForTrackingEvent;
-import com.sap.sailing.domain.abstractlog.race.tracking.RaceLogDeviceCompetitorMappingEvent;
-import com.sap.sailing.domain.abstractlog.race.tracking.RaceLogDeviceMarkMappingEvent;
-import com.sap.sailing.domain.abstractlog.race.tracking.RaceLogRegisterCompetitorEvent;
-import com.sap.sailing.domain.abstractlog.race.tracking.RaceLogStartTrackingEvent;
-import com.sap.sailing.domain.abstractlog.regatta.RegattaLogEvent;
-import com.sap.sailing.domain.abstractlog.regatta.events.RegattaLogCloseOpenEndedDeviceMappingEvent;
-import com.sap.sailing.domain.abstractlog.regatta.events.RegattaLogDeviceCompetitorMappingEvent;
-import com.sap.sailing.domain.abstractlog.regatta.events.RegattaLogDeviceMarkMappingEvent;
-import com.sap.sailing.domain.abstractlog.regatta.events.RegattaLogRegisterCompetitorEvent;
-import com.sap.sailing.domain.abstractlog.regatta.events.RegattaLogRevokeEvent;
-import com.sap.sailing.domain.abstractlog.regatta.events.RegattaLogSetCompetitorTimeOnDistanceAllowancePerNauticalMileEvent;
-import com.sap.sailing.domain.abstractlog.regatta.events.RegattaLogSetCompetitorTimeOnTimeFactorEvent;
-import com.sap.sailing.domain.abstractlog.shared.events.DeviceMappingEvent;
-import com.sap.sailing.domain.base.Competitor;
-import com.sap.sailing.domain.base.ControlPoint;
-import com.sap.sailing.domain.base.ControlPointWithTwoMarks;
-import com.sap.sailing.domain.base.CourseArea;
-import com.sap.sailing.domain.base.CourseBase;
-import com.sap.sailing.domain.base.Event;
-import com.sap.sailing.domain.base.Fleet;
-import com.sap.sailing.domain.base.Mark;
-import com.sap.sailing.domain.base.RaceColumn;
-import com.sap.sailing.domain.base.RaceDefinition;
-import com.sap.sailing.domain.base.Regatta;
-import com.sap.sailing.domain.base.RemoteSailingServerReference;
-import com.sap.sailing.domain.base.SailingServerConfiguration;
-import com.sap.sailing.domain.base.Series;
-import com.sap.sailing.domain.base.Venue;
-import com.sap.sailing.domain.base.Waypoint;
-import com.sap.sailing.domain.base.configuration.DeviceConfiguration;
-import com.sap.sailing.domain.base.configuration.DeviceConfigurationMatcher;
-import com.sap.sailing.domain.base.configuration.RegattaConfiguration;
-import com.sap.sailing.domain.base.configuration.impl.DeviceConfigurationMatcherMulti;
-import com.sap.sailing.domain.base.configuration.impl.DeviceConfigurationMatcherSingle;
-import com.sap.sailing.domain.base.impl.FleetImpl;
-import com.sap.sailing.domain.common.Bearing;
-import com.sap.sailing.domain.common.MaxPointsReason;
-import com.sap.sailing.domain.common.PassingInstruction;
-import com.sap.sailing.domain.common.Positioned;
-import com.sap.sailing.domain.common.RaceIdentifier;
-import com.sap.sailing.domain.common.Speed;
-import com.sap.sailing.domain.common.SpeedWithBearing;
-import com.sap.sailing.domain.common.Wind;
-import com.sap.sailing.domain.common.WindSource;
-import com.sap.sailing.domain.common.racelog.tracking.TransformationException;
-import com.sap.sailing.domain.leaderboard.FlexibleLeaderboard;
-import com.sap.sailing.domain.leaderboard.Leaderboard;
-import com.sap.sailing.domain.leaderboard.LeaderboardGroup;
-import com.sap.sailing.domain.leaderboard.RegattaLeaderboard;
-import com.sap.sailing.domain.leaderboard.ResultDiscardingRule;
-import com.sap.sailing.domain.leaderboard.SettableScoreCorrection;
-import com.sap.sailing.domain.leaderboard.ThresholdBasedResultDiscardingRule;
-import com.sap.sailing.domain.persistence.MongoObjectFactory;
-import com.sap.sailing.domain.persistence.racelog.tracking.DeviceIdentifierMongoHandler;
-import com.sap.sailing.domain.persistence.racelog.tracking.impl.PlaceHolderDeviceIdentifierMongoHandler;
-import com.sap.sailing.domain.racelog.RaceLogIdentifier;
-import com.sap.sailing.domain.racelogtracking.DeviceIdentifier;
-import com.sap.sailing.domain.regattalike.RegattaLikeIdentifier;
-import com.sap.sailing.domain.tracking.TrackedRace;
-import com.sap.sailing.domain.tracking.TrackedRegatta;
-import com.sap.sailing.domain.tracking.WindTrack;
-import com.sap.sailing.server.gateway.serialization.JsonSerializer;
-import com.sap.sailing.server.gateway.serialization.impl.CompetitorJsonSerializer;
-import com.sap.sailing.server.gateway.serialization.impl.DeviceConfigurationJsonSerializer;
-import com.sap.sailing.server.gateway.serialization.impl.RegattaConfigurationJsonSerializer;
-import com.sap.sse.common.Duration;
-import com.sap.sse.common.NoCorrespondingServiceRegisteredException;
-import com.sap.sse.common.TimePoint;
-import com.sap.sse.common.TimeRange;
-import com.sap.sse.common.Timed;
-import com.sap.sse.common.TypeBasedServiceFinder;
-import com.sap.sse.common.TypeBasedServiceFinderFactory;
-import com.sap.sse.common.Util;
-import com.sap.sse.common.impl.MillisecondsTimePoint;
-import com.sap.sse.common.media.ImageDescriptor;
-import com.sap.sse.common.media.VideoDescriptor;
-
-public class MongoObjectFactoryImpl implements MongoObjectFactory {
- private static Logger logger = Logger.getLogger(MongoObjectFactoryImpl.class.getName());
- private final DB database;
- private final CompetitorJsonSerializer competitorSerializer = CompetitorJsonSerializer.create();
- private final TypeBasedServiceFinder deviceIdentifierServiceFinder;
-
- /**
- * Uses null for the device type service finder and hence will be unable to store device identifiers.
- * Use this constructor only for testing purposes or in cases where there will happen absolutely no access to
- * {@link DeviceIdentifier} objects.
- */
- public MongoObjectFactoryImpl(DB database) {
- this(database, /* deviceTypeServiceFinder */ null);
- }
-
- public MongoObjectFactoryImpl(DB database, TypeBasedServiceFinderFactory serviceFinderFactory) {
- this.database = database;
- if (serviceFinderFactory != null) {
- this.deviceIdentifierServiceFinder = serviceFinderFactory.createServiceFinder(DeviceIdentifierMongoHandler.class);
- this.deviceIdentifierServiceFinder.setFallbackService(new PlaceHolderDeviceIdentifierMongoHandler());
- } else {
- this.deviceIdentifierServiceFinder = null;
- }
- }
-
- @Override
- public DB getDatabase() {
- return database;
- }
-
- public DBObject storeWind(Wind wind) {
- DBObject result = new BasicDBObject();
- storePositioned(wind, result);
- storeTimed(wind, result);
- storeSpeedWithBearing(wind, result);
- return result;
- }
-
- public static void storeTimePoint(TimePoint timePoint, DBObject result, String fieldName) {
- if (timePoint != null) {
- result.put(fieldName, timePoint.asMillis());
- }
- }
-
- public static void storeTimePoint(TimePoint timePoint, DBObject result, FieldNames field) {
- storeTimePoint(timePoint, result, field.name());
- }
-
- public static void storeTimeRange(TimeRange timeRange, DBObject result, FieldNames field) {
- if (timeRange != null) {
- DBObject timeRangeObj = new BasicDBObject();
- storeTimePoint(timeRange.from(), timeRangeObj, FieldNames.FROM_MILLIS);
- storeTimePoint(timeRange.to(), timeRangeObj, FieldNames.TO_MILLIS);
- result.put(field.name(), timeRangeObj);
- }
- }
-
- public void storeTimed(Timed timed, DBObject result) {
- if (timed.getTimePoint() != null) {
- storeTimePoint(timed.getTimePoint(), result, FieldNames.TIME_AS_MILLIS);
- }
- }
-
- public void storeSpeedWithBearing(SpeedWithBearing speedWithBearing, DBObject result) {
- storeSpeed(speedWithBearing, result);
- storeBearing(speedWithBearing.getBearing(), result);
-
- }
-
- public void storeBearing(Bearing bearing, DBObject result) {
- result.put(FieldNames.DEGREE_BEARING.name(), bearing.getDegrees());
- }
-
- public void storeSpeed(Speed speed, DBObject result) {
- result.put(FieldNames.KNOT_SPEED.name(), speed.getKnots());
- }
-
- public void storePositioned(Positioned positioned, DBObject result) {
- if (positioned.getPosition() != null) {
- result.put(FieldNames.LAT_DEG.name(), positioned.getPosition().getLatDeg());
- result.put(FieldNames.LNG_DEG.name(), positioned.getPosition().getLngDeg());
- }
- }
-
- @Override
- public void addWindTrackDumper(TrackedRegatta trackedRegatta, TrackedRace trackedRace, WindSource windSource) {
- WindTrack windTrack = trackedRace.getOrCreateWindTrack(windSource);
- windTrack.addListener(new MongoWindListener(trackedRace, trackedRegatta.getRegatta().getName(), windSource, this, database));
- }
-
- public DBCollection getWindTrackCollection() {
- DBCollection result = database.getCollection(CollectionNames.WIND_TRACKS.name());
- result.createIndex(new BasicDBObject(FieldNames.REGATTA_NAME.name(), null));
- return result;
- }
-
- public DBCollection getGPSFixCollection() {
- DBCollection gpsFixCollection = database.getCollection(CollectionNames.GPS_FIXES.name());
- DBObject index = new BasicDBObject();
- index.put(FieldNames.DEVICE_ID.name(), null);
- index.put(FieldNames.TIME_AS_MILLIS.name(), null);
- gpsFixCollection.createIndex(index);
- return gpsFixCollection;
- }
-
- public DBCollection getGPSFixMetadataCollection() {
- DBCollection collection = database.getCollection(CollectionNames.GPS_FIXES_METADATA.name());
- DBObject index = new BasicDBObject();
- index.put(FieldNames.DEVICE_ID.name(), null);
- collection.createIndex(index);
- return collection;
- }
-
- /**
- * @param regattaName
- * the regatta name is stored only for human readability purposes because a time stamp may be a bit unhandy for
- * identifying where the wind fix was collected
- */
- public DBObject storeWindTrackEntry(RaceDefinition race, String regattaName, WindSource windSource, Wind wind) {
- BasicDBObject result = new BasicDBObject();
- result.put(FieldNames.RACE_ID.name(), race.getId());
- result.put(FieldNames.REGATTA_NAME.name(), regattaName);
- result.put(FieldNames.WIND_SOURCE_NAME.name(), windSource.name());
- if (windSource.getId() != null) {
- result.put(FieldNames.WIND_SOURCE_ID.name(), windSource.getId());
- }
- result.put(FieldNames.WIND.name(), storeWind(wind));
- return result;
- }
-
- private void storeRaceIdentifiers(RaceColumn raceColumn, DBObject dbObject) {
- BasicDBObject raceIdentifiersPerFleet = new BasicDBObject();
- for (Fleet fleet : raceColumn.getFleets()) {
- RaceIdentifier raceIdentifier = raceColumn.getRaceIdentifier(fleet);
- if (raceIdentifier != null) {
- DBObject raceIdentifierForFleet = new BasicDBObject();
- storeRaceIdentifier(raceIdentifierForFleet, raceIdentifier);
- raceIdentifiersPerFleet.put(MongoUtils.escapeDollarAndDot(fleet.getName()), raceIdentifierForFleet);
- }
- }
- dbObject.put(FieldNames.RACE_IDENTIFIERS.name(), raceIdentifiersPerFleet);
- }
-
- private void storeRaceIdentifier(DBObject dbObject, RaceIdentifier raceIdentifier) {
- if (raceIdentifier != null) {
- dbObject.put(FieldNames.EVENT_NAME.name(), raceIdentifier.getRegattaName());
- dbObject.put(FieldNames.RACE_NAME.name(), raceIdentifier.getRaceName());
- }
- }
-
- @Override
- public void storeLeaderboard(Leaderboard leaderboard) {
- DBCollection leaderboardCollection = database.getCollection(CollectionNames.LEADERBOARDS.name());
- try {
- leaderboardCollection.createIndex(new BasicDBObject(FieldNames.LEADERBOARD_NAME.name(), 1));
- } catch (NullPointerException npe) {
- // sometimes, for reasons yet to be clarified, ensuring an index on the name field causes an NPE
- logger.log(Level.SEVERE, "storeLeaderboard", npe);
- }
- BasicDBObject query = new BasicDBObject(FieldNames.LEADERBOARD_NAME.name(), leaderboard.getName());
- BasicDBObject dbLeaderboard = new BasicDBObject();
- dbLeaderboard.put(FieldNames.LEADERBOARD_NAME.name(), leaderboard.getName());
- if (leaderboard.getDisplayName() != null) {
- dbLeaderboard.put(FieldNames.LEADERBOARD_DISPLAY_NAME.name(), leaderboard.getDisplayName());
- }
- BasicDBList dbSuppressedCompetitorIds = new BasicDBList();
- for (Competitor suppressedCompetitor : leaderboard.getSuppressedCompetitors()) {
- dbSuppressedCompetitorIds.add(suppressedCompetitor.getId());
- }
- dbLeaderboard.put(FieldNames.LEADERBOARD_SUPPRESSED_COMPETITOR_IDS.name(), dbSuppressedCompetitorIds);
- if (leaderboard instanceof FlexibleLeaderboard) {
- storeFlexibleLeaderboard((FlexibleLeaderboard) leaderboard, dbLeaderboard);
- } else if (leaderboard instanceof RegattaLeaderboard) {
- storeRegattaLeaderboard((RegattaLeaderboard) leaderboard, dbLeaderboard);
- } else {
- // at least store the scoring scheme
- dbLeaderboard.put(FieldNames.SCORING_SCHEME_TYPE.name(), leaderboard.getScoringScheme().getType().name());
- }
- if (leaderboard.getDefaultCourseArea() != null) {
- dbLeaderboard.put(FieldNames.COURSE_AREA_ID.name(), leaderboard.getDefaultCourseArea().getId().toString());
- } else {
- dbLeaderboard.put(FieldNames.COURSE_AREA_ID.name(), null);
- }
- storeColumnFactors(leaderboard, dbLeaderboard);
- storeLeaderboardCorrectionsAndDiscards(leaderboard, dbLeaderboard);
- leaderboardCollection.update(query, dbLeaderboard, /* upsrt */ true, /* multi */ false, WriteConcern.SAFE);
- }
-
- private void storeColumnFactors(Leaderboard leaderboard, BasicDBObject dbLeaderboard) {
- DBObject raceColumnFactors = new BasicDBObject();
- for (RaceColumn raceColumn : leaderboard.getRaceColumns()) {
- Double explicitFactor = raceColumn.getExplicitFactor();
- if (explicitFactor != null) {
- raceColumnFactors.put(MongoUtils.escapeDollarAndDot(raceColumn.getName()), explicitFactor);
- }
- }
- dbLeaderboard.put(FieldNames.LEADERBOARD_COLUMN_FACTORS.name(), raceColumnFactors);
- }
-
- private void storeRegattaLeaderboard(RegattaLeaderboard leaderboard, DBObject dbLeaderboard) {
- dbLeaderboard.put(FieldNames.REGATTA_NAME.name(), leaderboard.getRegatta().getName());
- }
-
- private void storeFlexibleLeaderboard(FlexibleLeaderboard leaderboard, BasicDBObject dbLeaderboard) {
- BasicDBList dbRaceColumns = new BasicDBList();
- dbLeaderboard.put(FieldNames.SCORING_SCHEME_TYPE.name(), leaderboard.getScoringScheme().getType().name());
- dbLeaderboard.put(FieldNames.LEADERBOARD_COLUMNS.name(), dbRaceColumns);
- for (RaceColumn raceColumn : leaderboard.getRaceColumns()) {
- BasicDBObject dbRaceColumn = storeRaceColumn(raceColumn);
- dbRaceColumns.add(dbRaceColumn);
- }
- }
-
- private void storeLeaderboardCorrectionsAndDiscards(Leaderboard leaderboard, BasicDBObject dbLeaderboard) {
- if (leaderboard.hasCarriedPoints()) {
- BasicDBList dbCarriedPoints = new BasicDBList();
- dbLeaderboard.put(FieldNames.LEADERBOARD_CARRIED_POINTS_BY_ID.name(), dbCarriedPoints);
- for (Entry competitorWithCarriedPoints : leaderboard
- .getCompetitorsForWhichThereAreCarriedPoints().entrySet()) {
- double carriedPoints = competitorWithCarriedPoints.getValue();
- Competitor competitor = competitorWithCarriedPoints.getKey();
- DBObject dbCarriedPointsForCompetitor = new BasicDBObject();
- dbCarriedPointsForCompetitor.put(FieldNames.COMPETITOR_ID.name(), competitor.getId());
- dbCarriedPointsForCompetitor.put(FieldNames.LEADERBOARD_CARRIED_POINTS.name(), carriedPoints);
- dbCarriedPoints.add(dbCarriedPointsForCompetitor);
- }
- }
- BasicDBObject dbScoreCorrections = new BasicDBObject();
- storeScoreCorrections(leaderboard, dbScoreCorrections);
- dbLeaderboard.put(FieldNames.LEADERBOARD_SCORE_CORRECTIONS.name(), dbScoreCorrections);
- final ResultDiscardingRule resultDiscardingRule = leaderboard.getResultDiscardingRule();
- storeResultDiscardingRule(dbLeaderboard, resultDiscardingRule, FieldNames.LEADERBOARD_DISCARDING_THRESHOLDS);
- BasicDBList competitorDisplayNames = new BasicDBList();
- for (Competitor competitor : leaderboard.getCompetitors()) {
- String displayNameForCompetitor = leaderboard.getDisplayName(competitor);
- if (displayNameForCompetitor != null) {
- DBObject dbDisplayName = new BasicDBObject();
- dbDisplayName.put(FieldNames.COMPETITOR_ID.name(), competitor.getId());
- dbDisplayName.put(FieldNames.COMPETITOR_DISPLAY_NAME.name(), displayNameForCompetitor);
- competitorDisplayNames.add(dbDisplayName);
- }
- }
- dbLeaderboard.put(FieldNames.LEADERBOARD_COMPETITOR_DISPLAY_NAMES.name(), competitorDisplayNames);
- }
-
- /**
- * Stores the result discarding rule to dbObject's field identified by field if the result discarding
- * rule is not null and is of type {@link ThresholdBasedResultDiscardingRule}. Otherwise, it is assumed that the
- * result discarding rule is otherwise implicitly obtained, e.g., from a definition of a regatta with its series, stored elsewhere.
- */
- private void storeResultDiscardingRule(DBObject dbObject,
- final ResultDiscardingRule resultDiscardingRule, FieldNames field) {
- if (resultDiscardingRule != null && resultDiscardingRule instanceof ThresholdBasedResultDiscardingRule) {
- BasicDBList dbResultDiscardingThresholds = new BasicDBList();
- for (int threshold : ((ThresholdBasedResultDiscardingRule) resultDiscardingRule).getDiscardIndexResultsStartingWithHowManyRaces()) {
- dbResultDiscardingThresholds.add(threshold);
- }
- dbObject.put(field.name(), dbResultDiscardingThresholds);
- }
- }
-
- private BasicDBObject storeRaceColumn(RaceColumn raceColumn) {
- BasicDBObject dbRaceColumn = new BasicDBObject();
- dbRaceColumn.put(FieldNames.LEADERBOARD_COLUMN_NAME.name(), raceColumn.getName());
- dbRaceColumn.put(FieldNames.LEADERBOARD_IS_MEDAL_RACE_COLUMN.name(), raceColumn.isMedalRace());
- storeRaceIdentifiers(raceColumn, dbRaceColumn);
- return dbRaceColumn;
- }
-
- private void storeScoreCorrections(Leaderboard leaderboard, BasicDBObject dbScoreCorrections) {
- TimePoint now = MillisecondsTimePoint.now();
- SettableScoreCorrection scoreCorrection = leaderboard.getScoreCorrection();
- for (RaceColumn raceColumn : scoreCorrection.getRaceColumnsThatHaveCorrections()) {
- BasicDBList dbCorrectionForRace = new BasicDBList();
- for (Competitor competitor : scoreCorrection.getCompetitorsThatHaveCorrectionsIn(raceColumn)) {
- // TODO bug 655: make score corrections time dependent
- if (scoreCorrection.isScoreCorrected(competitor, raceColumn, now)) {
- BasicDBObject dbCorrectionForCompetitor = new BasicDBObject();
- dbCorrectionForCompetitor.put(FieldNames.COMPETITOR_ID.name(), competitor.getId());
- MaxPointsReason maxPointsReason = scoreCorrection.getMaxPointsReason(competitor, raceColumn, now);
- if (maxPointsReason != MaxPointsReason.NONE) {
- dbCorrectionForCompetitor.put(FieldNames.LEADERBOARD_SCORE_CORRECTION_MAX_POINTS_REASON.name(),
- maxPointsReason.name());
- }
- Double explicitScoreCorrection = scoreCorrection
- .getExplicitScoreCorrection(competitor, raceColumn);
- if (explicitScoreCorrection != null) {
- dbCorrectionForCompetitor.put(FieldNames.LEADERBOARD_CORRECTED_SCORE.name(),
- explicitScoreCorrection);
- }
- dbCorrectionForRace.add(dbCorrectionForCompetitor);
- }
- }
- if (!dbCorrectionForRace.isEmpty()) {
- // using the column name as the key for the score corrections requires re-writing the score corrections
- // of a meta-leaderboard if the name of one of its leaderboards changes
- dbScoreCorrections.put(MongoUtils.escapeDollarAndDot(raceColumn.getName()), dbCorrectionForRace);
- }
- }
- final TimePoint timePointOfLastCorrectionsValidity = scoreCorrection.getTimePointOfLastCorrectionsValidity();
- if (timePointOfLastCorrectionsValidity != null) {
- dbScoreCorrections.put(FieldNames.LEADERBOARD_SCORE_CORRECTION_TIMESTAMP.name(), timePointOfLastCorrectionsValidity.asMillis());
- }
- if (scoreCorrection.getComment() != null) {
- dbScoreCorrections.put(FieldNames.LEADERBOARD_SCORE_CORRECTION_COMMENT.name(), scoreCorrection.getComment());
- }
- }
-
- @Override
- public void removeLeaderboard(String leaderboardName) {
- DBCollection leaderboardCollection = database.getCollection(CollectionNames.LEADERBOARDS.name());
- BasicDBObject query = new BasicDBObject(FieldNames.LEADERBOARD_NAME.name(), leaderboardName);
- leaderboardCollection.remove(query);
- }
-
- @Override
- public void renameLeaderboard(String oldName, String newName) {
- DBCollection leaderboardCollection = database.getCollection(CollectionNames.LEADERBOARDS.name());
- BasicDBObject query = new BasicDBObject(FieldNames.LEADERBOARD_NAME.name(), oldName);
- BasicDBObject renameUpdate = new BasicDBObject("$set", new BasicDBObject(FieldNames.LEADERBOARD_NAME.name(), newName));
- leaderboardCollection.update(query, renameUpdate, /* upsert */ true, /* multi */ false, WriteConcern.SAFE);
- }
-
- @Override
- public void storeLeaderboardGroup(LeaderboardGroup leaderboardGroup) {
- DBCollection leaderboardGroupCollection = database.getCollection(CollectionNames.LEADERBOARD_GROUPS.name());
- DBCollection leaderboardCollection = database.getCollection(CollectionNames.LEADERBOARDS.name());
-
- try {
- leaderboardGroupCollection.createIndex(new BasicDBObject(FieldNames.LEADERBOARD_GROUP_NAME.name(), 1));
- } catch (NullPointerException npe) {
- // sometimes, for reasons yet to be clarified, ensuring an index on the name field causes an NPE
- logger.log(Level.SEVERE, "storeLeaderboardGroup", npe);
- }
- BasicDBObject query = new BasicDBObject(FieldNames.LEADERBOARD_GROUP_NAME.name(), leaderboardGroup.getName());
- BasicDBObject dbLeaderboardGroup = new BasicDBObject();
- dbLeaderboardGroup.put(FieldNames.LEADERBOARD_GROUP_UUID.name(), leaderboardGroup.getId());
- dbLeaderboardGroup.put(FieldNames.LEADERBOARD_GROUP_NAME.name(), leaderboardGroup.getName());
- dbLeaderboardGroup.put(FieldNames.LEADERBOARD_GROUP_DESCRIPTION.name(), leaderboardGroup.getDescription());
- dbLeaderboardGroup.put(FieldNames.LEADERBOARD_GROUP_DISPLAY_NAME.name(), leaderboardGroup.getDisplayName());
- dbLeaderboardGroup.put(FieldNames.LEADERBOARD_GROUP_DISPLAY_IN_REVERSE_ORDER.name(), leaderboardGroup.isDisplayGroupsInReverseOrder());
- final Leaderboard overallLeaderboard = leaderboardGroup.getOverallLeaderboard();
- if (overallLeaderboard != null) {
- BasicDBObject overallLeaderboardQuery = new BasicDBObject(FieldNames.LEADERBOARD_NAME.name(), overallLeaderboard.getName());
- DBObject dbOverallLeaderboard = leaderboardCollection.findOne(overallLeaderboardQuery);
- if (dbOverallLeaderboard == null) {
- storeLeaderboard(overallLeaderboard);
- dbOverallLeaderboard = leaderboardCollection.findOne(overallLeaderboardQuery);
- }
- ObjectId dbOverallLeaderboardId = (ObjectId) dbOverallLeaderboard.get("_id");
- dbLeaderboardGroup.put(FieldNames.LEADERBOARD_GROUP_OVERALL_LEADERBOARD.name(), dbOverallLeaderboardId);
- }
- BasicDBList dbLeaderboardIds = new BasicDBList();
- for (Leaderboard leaderboard : leaderboardGroup.getLeaderboards()) {
- BasicDBObject leaderboardQuery = new BasicDBObject(FieldNames.LEADERBOARD_NAME.name(), leaderboard.getName());
- DBObject dbLeaderboard = leaderboardCollection.findOne(leaderboardQuery);
- if (dbLeaderboard == null) {
- storeLeaderboard(leaderboard);
- dbLeaderboard = leaderboardCollection.findOne(leaderboardQuery);
- }
- ObjectId dbLeaderboardId = (ObjectId) dbLeaderboard.get("_id");
- dbLeaderboardIds.add(dbLeaderboardId);
- }
- dbLeaderboardGroup.put(FieldNames.LEADERBOARD_GROUP_LEADERBOARDS.name(), dbLeaderboardIds);
- leaderboardGroupCollection.update(query, dbLeaderboardGroup, true, false, WriteConcern.SAFE);
- }
-
- @Override
- public void removeLeaderboardGroup(String groupName) {
- DBCollection leaderboardGroupCollection = database.getCollection(CollectionNames.LEADERBOARD_GROUPS.name());
- BasicDBObject query = new BasicDBObject(FieldNames.LEADERBOARD_GROUP_NAME.name(), groupName);
- leaderboardGroupCollection.remove(query);
- }
-
- @Override
- public void renameLeaderboardGroup(String oldName, String newName) {
- DBCollection leaderboardGroupCollection = database.getCollection(CollectionNames.LEADERBOARD_GROUPS.name());
- BasicDBObject query = new BasicDBObject(FieldNames.LEADERBOARD_GROUP_NAME.name(), oldName);
- BasicDBObject update = new BasicDBObject("$set", new BasicDBObject(FieldNames.LEADERBOARD_GROUP_NAME.name(), newName));
- leaderboardGroupCollection.update(query, update, /* upsert */ true, /* multi */ false, WriteConcern.SAFE);
- }
-
- @Override
- public void storeServerConfiguration(SailingServerConfiguration serverConfiguration) {
- DBCollection serverCollection = database.getCollection(CollectionNames.SERVER_CONFIGURATION.name());
- DBObject newServerConfig = new BasicDBObject();
- newServerConfig.put(FieldNames.SERVER_IS_STANDALONE.name(), serverConfiguration.isStandaloneServer());
- DBObject currentServerConfig = serverCollection.findOne();
- if(currentServerConfig != null) {
- serverCollection.update(currentServerConfig, newServerConfig, /* upsrt */ true, /* multi */ false, WriteConcern.SAFE);
- } else {
- serverCollection.save(newServerConfig);
- }
- }
-
- @Override
- public void storeSailingServer(RemoteSailingServerReference server) {
- DBCollection serverCollection = database.getCollection(CollectionNames.SAILING_SERVERS.name());
- serverCollection.createIndex(new BasicDBObject(FieldNames.SERVER_NAME.name(), 1));
- DBObject query = new BasicDBObject();
- query.put(FieldNames.SERVER_NAME.name(), server.getName());
- DBObject serverDBObject = new BasicDBObject();
- serverDBObject.put(FieldNames.SERVER_NAME.name(), server.getName());
- serverDBObject.put(FieldNames.SERVER_URL.name(), server.getURL().toExternalForm());
- serverCollection.update(query, serverDBObject, /* upsrt */ true, /* multi */ false, WriteConcern.SAFE);
- }
-
- @Override
- public void removeSailingServer(String name) {
- DBCollection serverCollection = database.getCollection(CollectionNames.SAILING_SERVERS.name());
- BasicDBObject query = new BasicDBObject(FieldNames.SERVER_NAME.name(), name);
- serverCollection.remove(query);
- }
-
- /**
- * StoreEvent() uses some deprecated methods of event to keep backward compatibility.
- */
- @SuppressWarnings("deprecation")
- @Override
- public void storeEvent(Event event) {
- DBCollection eventCollection = database.getCollection(CollectionNames.EVENTS.name());
- eventCollection.createIndex(new BasicDBObject(FieldNames.EVENT_ID.name(), 1));
- DBObject query = new BasicDBObject();
- query.put(FieldNames.EVENT_ID.name(), event.getId());
- DBObject eventDBObject = new BasicDBObject();
- eventDBObject.put(FieldNames.EVENT_NAME.name(), event.getName());
- eventDBObject.put(FieldNames.EVENT_DESCRIPTION.name(), event.getDescription());
- eventDBObject.put(FieldNames.EVENT_ID.name(), event.getId());
- eventDBObject.put(FieldNames.EVENT_LOGO_IMAGE_URL.name(), event.getLogoImageURL() != null ? event.getLogoImageURL().toString() : null);
- eventDBObject.put(FieldNames.EVENT_OFFICIAL_WEBSITE_URL.name(), event.getOfficialWebsiteURL() != null ? event.getOfficialWebsiteURL().toString() : null);
- eventDBObject.put(FieldNames.EVENT_SAILORS_INFO_WEBSITE_URL.name(), event.getSailorsInfoWebsiteURL() != null ? event.getSailorsInfoWebsiteURL().toString() : null);
- storeTimePoint(event.getStartDate(), eventDBObject, FieldNames.EVENT_START_DATE);
- storeTimePoint(event.getEndDate(), eventDBObject, FieldNames.EVENT_END_DATE);
- eventDBObject.put(FieldNames.EVENT_IS_PUBLIC.name(), event.isPublic());
- DBObject venueDBObject = getVenueAsDBObject(event.getVenue());
- eventDBObject.put(FieldNames.VENUE.name(), venueDBObject);
- BasicDBList imageURLs = new BasicDBList();
- for (URL imageURL : event.getImageURLs()) {
- imageURLs.add(imageURL.toString());
- }
- eventDBObject.put(FieldNames.EVENT_IMAGE_URLS.name(), imageURLs);
- BasicDBList videoURLs = new BasicDBList();
- for (URL videoURL : event.getVideoURLs()) {
- videoURLs.add(videoURL.toString());
- }
- eventDBObject.put(FieldNames.EVENT_VIDEO_URLS.name(), videoURLs);
- BasicDBList sponsorImageURLs = new BasicDBList();
- for (URL sponsorImageURL : event.getSponsorImageURLs()) {
- sponsorImageURLs.add(sponsorImageURL.toString());
- }
- eventDBObject.put(FieldNames.EVENT_SPONSOR_IMAGE_URLS.name(), sponsorImageURLs);
- BasicDBList images = new BasicDBList();
- for (ImageDescriptor image : event.getImages()) {
- DBObject imageObject = createImageObject(image);
- images.add(imageObject);
- }
- eventDBObject.put(FieldNames.EVENT_IMAGES.name(), images);
- BasicDBList videos = new BasicDBList();
- for (VideoDescriptor video: event.getVideos()) {
- DBObject videoObject = createVideoObject(video);
- videos.add(videoObject);
- }
- eventDBObject.put(FieldNames.EVENT_VIDEOS.name(), videos);
- eventCollection.update(query, eventDBObject, /* upsrt */ true, /* multi */ false, WriteConcern.SAFE);
- // now store the links to the leaderboard groups
- DBCollection linksCollection = database.getCollection(CollectionNames.LEADERBOARD_GROUP_LINKS_FOR_EVENTS.name());
- linksCollection.createIndex(new BasicDBObject(FieldNames.EVENT_ID.name(), 1));
- BasicDBList lgUUIDs = new BasicDBList();
- for (LeaderboardGroup lg : event.getLeaderboardGroups()) {
- lgUUIDs.add(lg.getId());
- }
- DBObject dbLinks = new BasicDBObject();
- dbLinks.put(FieldNames.EVENT_ID.name(), event.getId());
- dbLinks.put(FieldNames.LEADERBOARD_GROUP_UUID.name(), lgUUIDs);
- linksCollection.update(query, dbLinks, /* upsrt */ true, /* multi */ false, WriteConcern.SAFE);
- }
-
- @Override
- public void renameEvent(Serializable id, String newName) {
- DBCollection eventCollection = database.getCollection(CollectionNames.EVENTS.name());
- BasicDBObject query = new BasicDBObject(FieldNames.EVENT_ID.name(), id);
- BasicDBObject renameUpdate = new BasicDBObject("$set", new BasicDBObject(FieldNames.EVENT_NAME.name(), newName));
- eventCollection.update(query, renameUpdate, /* upsert */ true, /* multi */ false, WriteConcern.SAFE);
- }
-
- @Override
- public void removeEvent(Serializable id) {
- DBCollection eventsCollection = database.getCollection(CollectionNames.EVENTS.name());
- BasicDBObject query = new BasicDBObject(FieldNames.EVENT_ID.name(), id);
- eventsCollection.remove(query);
- }
-
- private DBObject getVenueAsDBObject(Venue venue) {
- DBObject result = new BasicDBObject();
- result.put(FieldNames.VENUE_NAME.name(), venue.getName());
- BasicDBList courseAreaList = new BasicDBList();
- result.put(FieldNames.COURSE_AREAS.name(), courseAreaList);
- for (CourseArea courseArea : venue.getCourseAreas()) {
- DBObject dbCourseArea = new BasicDBObject();
- courseAreaList.add(dbCourseArea);
- dbCourseArea.put(FieldNames.COURSE_AREA_NAME.name(), courseArea.getName());
- dbCourseArea.put(FieldNames.COURSE_AREA_ID.name(), courseArea.getId());
- }
- return result;
- }
-
- @Override
- public void storeRegatta(Regatta regatta) {
- DBCollection regattasCollection = database.getCollection(CollectionNames.REGATTAS.name());
- regattasCollection.createIndex(new BasicDBObject(FieldNames.REGATTA_NAME.name(), 1));
- regattasCollection.createIndex(new BasicDBObject(FieldNames.REGATTA_ID.name(), 1));
- DBObject dbRegatta = new BasicDBObject();
- DBObject query = new BasicDBObject(FieldNames.REGATTA_NAME.name(), regatta.getName());
- dbRegatta.put(FieldNames.REGATTA_NAME.name(), regatta.getName());
- dbRegatta.put(FieldNames.REGATTA_ID.name(), regatta.getId());
- storeTimePoint(regatta.getStartDate(), dbRegatta, FieldNames.REGATTA_START_DATE);
- storeTimePoint(regatta.getEndDate(), dbRegatta, FieldNames.REGATTA_END_DATE);
- dbRegatta.put(FieldNames.SCORING_SCHEME_TYPE.name(), regatta.getScoringScheme().getType().name());
- if (regatta.getBoatClass() != null) {
- dbRegatta.put(FieldNames.BOAT_CLASS_NAME.name(), regatta.getBoatClass().getName());
- dbRegatta.put(FieldNames.BOAT_CLASS_TYPICALLY_STARTS_UPWIND.name(), regatta.getBoatClass().typicallyStartsUpwind());
- }
- dbRegatta.put(FieldNames.REGATTA_SERIES.name(), storeSeries(regatta.getSeries()));
-
- if (regatta.getDefaultCourseArea() != null) {
- dbRegatta.put(FieldNames.COURSE_AREA_ID.name(), regatta.getDefaultCourseArea().getId().toString());
- } else {
- dbRegatta.put(FieldNames.COURSE_AREA_ID.name(), null);
- }
- if (regatta.getRegattaConfiguration() != null) {
- JsonSerializer serializer = RegattaConfigurationJsonSerializer.create();
- JSONObject json = serializer.serialize(regatta.getRegattaConfiguration());
- DBObject configurationObject = (DBObject) JSON.parse(json.toString());
- dbRegatta.put(FieldNames.REGATTA_REGATTA_CONFIGURATION.name(), configurationObject);
- }
- dbRegatta.put(FieldNames.REGATTA_USE_START_TIME_INFERENCE.name(), regatta.useStartTimeInference());
- dbRegatta.put(FieldNames.REGATTA_RANKING_METRIC.name(), storeRankingMetric(regatta));
- regattasCollection.update(query, dbRegatta, /* upsrt */ true, /* multi */ false, WriteConcern.SAFE);
- }
-
- private DBObject storeRankingMetric(Regatta regatta) {
- DBObject rankingMetricJson = new BasicDBObject();
- final String rankingMetricTypeName = regatta.getRankingMetricType().name();
- rankingMetricJson.put(FieldNames.REGATTA_RANKING_METRIC_TYPE.name(), rankingMetricTypeName);
- return rankingMetricJson;
- }
-
- @Override
- public void removeRegatta(Regatta regatta) {
- DBCollection regattasCollection = database.getCollection(CollectionNames.REGATTAS.name());
- DBObject query = new BasicDBObject(FieldNames.REGATTA_NAME.name(), regatta.getName());
- regattasCollection.remove(query);
- }
-
- private BasicDBList storeSeries(Iterable extends Series> series) {
- BasicDBList dbSeries = new BasicDBList();
- for (Series s : series) {
- dbSeries.add(storeSeries(s));
- }
- return dbSeries;
- }
-
- private DBObject storeSeries(Series s) {
- DBObject dbSeries = new BasicDBObject();
- dbSeries.put(FieldNames.SERIES_NAME.name(), s.getName());
- dbSeries.put(FieldNames.SERIES_IS_MEDAL.name(), s.isMedal());
- dbSeries.put(FieldNames.SERIES_HAS_SPLIT_FLEET_CONTIGUOUS_SCORING.name(), s.hasSplitFleetContiguousScoring());
- dbSeries.put(FieldNames.SERIES_STARTS_WITH_ZERO_SCORE.name(), s.isStartsWithZeroScore());
- dbSeries.put(FieldNames.SERIES_STARTS_WITH_NON_DISCARDABLE_CARRY_FORWARD.name(), s.isFirstColumnIsNonDiscardableCarryForward());
- BasicDBList dbFleets = new BasicDBList();
- for (Fleet fleet : s.getFleets()) {
- dbFleets.add(storeFleet(fleet));
- }
- dbSeries.put(FieldNames.SERIES_FLEETS.name(), dbFleets);
- BasicDBList dbRaceColumns = new BasicDBList();
- for (RaceColumn raceColumn : s.getRaceColumns()) {
- dbRaceColumns.add(storeRaceColumn(raceColumn));
- }
- dbSeries.put(FieldNames.SERIES_RACE_COLUMNS.name(), dbRaceColumns);
- if (s.getResultDiscardingRule() != null) {
- storeResultDiscardingRule(dbSeries, s.getResultDiscardingRule(), FieldNames.SERIES_DISCARDING_THRESHOLDS);
- }
- return dbSeries;
- }
-
- private DBObject storeFleet(Fleet fleet) {
- DBObject dbFleet = new BasicDBObject(FieldNames.FLEET_NAME.name(), fleet.getName());
- if (fleet instanceof FleetImpl) {
- dbFleet.put(FieldNames.FLEET_ORDERING.name(), ((FleetImpl) fleet).getOrdering());
- if(fleet.getColor() != null) {
- com.sap.sse.common.Util.Triple colorAsRGB = fleet.getColor().getAsRGB();
- // we save the color as a integer value representing the RGB values
- int colorAsInt = (256 * 256 * colorAsRGB.getC()) + colorAsRGB.getB() * 256 + colorAsRGB.getA();
- dbFleet.put(FieldNames.FLEET_COLOR.name(), colorAsInt);
- } else {
- dbFleet.put(FieldNames.FLEET_COLOR.name(), null);
- }
- }
- return dbFleet;
- }
-
- @Override
- public void storeRegattaForRaceID(String raceIDAsString, Regatta regatta) {
- DBCollection regattaForRaceIDCollection = database.getCollection(CollectionNames.REGATTA_FOR_RACE_ID.name());
- DBObject query = new BasicDBObject(FieldNames.RACE_ID_AS_STRING.name(), raceIDAsString);
- DBObject entry = new BasicDBObject(FieldNames.RACE_ID_AS_STRING.name(), raceIDAsString);
- entry.put(FieldNames.REGATTA_NAME.name(), regatta.getName());
- regattaForRaceIDCollection.update(query, entry, /* upsrt */ true, /* multi */ false, WriteConcern.SAFE);
- }
-
- @Override
- public void removeRegattaForRaceID(String raceIDAsString, Regatta regatta) {
- DBCollection regattaForRaceIDCollection = database.getCollection(CollectionNames.REGATTA_FOR_RACE_ID.name());
- DBObject query = new BasicDBObject(FieldNames.RACE_ID_AS_STRING.name(), raceIDAsString);
- regattaForRaceIDCollection.remove(query);
- }
-
- public DBCollection getRaceLogCollection() {
- DBCollection result = database.getCollection(CollectionNames.RACE_LOGS.name());
- result.createIndex(new BasicDBObject(FieldNames.RACE_LOG_IDENTIFIER.name(), null));
- return result;
- }
-
- private void storeRaceLogEventAuthor(DBObject dbObject, AbstractLogEventAuthor author) {
- if (author != null) {
- dbObject.put(FieldNames.RACE_LOG_EVENT_AUTHOR_NAME.name(), author.getName());
- dbObject.put(FieldNames.RACE_LOG_EVENT_AUTHOR_PRIORITY.name(), author.getPriority());
- }
- }
-
- public DBObject storeRaceLogEntry(RaceLogIdentifier raceLogIdentifier, RaceLogFlagEvent flagEvent) {
- BasicDBObject result = new BasicDBObject();
- storeRaceLogIdentifier(raceLogIdentifier, result);
- result.put(FieldNames.RACE_LOG_EVENT.name(), storeRaceLogFlagEvent(flagEvent));
- return result;
- }
-
- private void storeRaceLogIdentifier(RaceLogIdentifier raceLogIdentifier, DBObject result) {
- result.put(FieldNames.RACE_LOG_IDENTIFIER.name(), TripleSerializer.serialize(raceLogIdentifier.getIdentifier()));
- }
-
- public DBObject storeRaceLogEntry(RaceLogIdentifier raceLogIdentifier, RaceLogStartTimeEvent startTimeEvent) {
- BasicDBObject result = new BasicDBObject();
- storeRaceLogIdentifier(raceLogIdentifier, result);
- result.put(FieldNames.RACE_LOG_EVENT.name(), storeRaceLogStartTimeEvent(startTimeEvent));
- return result;
- }
-
- public DBObject storeRaceLogEntry(RaceLogIdentifier raceLogIdentifier, RaceLogPassChangeEvent passChangeEvent) {
- BasicDBObject result = new BasicDBObject();
- storeRaceLogIdentifier(raceLogIdentifier, result);
- result.put(FieldNames.RACE_LOG_EVENT.name(), storeRaceLogPassChangeEvent(passChangeEvent));
- return result;
- }
-
- public DBObject storeRaceLogEntry(RaceLogIdentifier raceLogIdentifier, RaceLogRaceStatusEvent raceStatusEvent) {
- BasicDBObject result = new BasicDBObject();
- storeRaceLogIdentifier(raceLogIdentifier, result);
- result.put(FieldNames.RACE_LOG_EVENT.name(), storeRaceLogRaceStatusEvent(raceStatusEvent));
- return result;
- }
-
- public DBObject storeRaceLogEntry(RaceLogIdentifier raceLogIdentifier, RaceLogCourseAreaChangedEvent courseAreaChangedEvent) {
- BasicDBObject result = new BasicDBObject();
- storeRaceLogIdentifier(raceLogIdentifier, result);
- result.put(FieldNames.RACE_LOG_EVENT.name(), storeRaceLogCourseAreaChangedEvent(courseAreaChangedEvent));
- return result;
- }
-
- public DBObject storeRaceLogEntry(RaceLogIdentifier raceLogIdentifier, RaceLogCourseDesignChangedEvent courseDesignChangedEvent) {
- BasicDBObject result = new BasicDBObject();
- storeRaceLogIdentifier(raceLogIdentifier, result);
- result.put(FieldNames.RACE_LOG_EVENT.name(), storeRaceLogCourseDesignChangedEvent(courseDesignChangedEvent));
- return result;
- }
-
- public DBObject storeRaceLogEntry(RaceLogIdentifier raceLogIdentifier, RaceLogFinishPositioningListChangedEvent finishPositioningListChangedEvent) {
- BasicDBObject result = new BasicDBObject();
- storeRaceLogIdentifier(raceLogIdentifier, result);
- result.put(FieldNames.RACE_LOG_EVENT.name(), storeRaceLogFinishPositioningListChangedEvent(finishPositioningListChangedEvent));
- return result;
- }
-
- public DBObject storeRaceLogEntry(RaceLogIdentifier raceLogIdentifier, RaceLogFinishPositioningConfirmedEvent finishPositioningConfirmedEvent) {
- BasicDBObject result = new BasicDBObject();
- storeRaceLogIdentifier(raceLogIdentifier, result);
- result.put(FieldNames.RACE_LOG_EVENT.name(), storeRaceLogFinishPositioningConfirmedEvent(finishPositioningConfirmedEvent));
- return result;
- }
-
- public DBObject storeRaceLogEntry(RaceLogIdentifier raceLogIdentifier, RaceLogPathfinderEvent pathfinderEvent) {
- BasicDBObject result = new BasicDBObject();
- storeRaceLogIdentifier(raceLogIdentifier, result);
- result.put(FieldNames.RACE_LOG_EVENT.name(), storeRaceLogPathfinderEvent(pathfinderEvent));
- return result;
- }
-
- public DBObject storeRaceLogEntry(RaceLogIdentifier raceLogIdentifier, RaceLogGateLineOpeningTimeEvent gateLineOpeningTimeEvent) {
- BasicDBObject result = new BasicDBObject();
- storeRaceLogIdentifier(raceLogIdentifier, result);
- result.put(FieldNames.RACE_LOG_EVENT.name(), storeRaceLogGateLineOpeningTimeEvent(gateLineOpeningTimeEvent));
- return result;
- }
-
- public DBObject storeRaceLogEntry(RaceLogIdentifier raceLogIdentifier, RaceLogStartProcedureChangedEvent event) {
- DBObject result = new BasicDBObject();
- storeRaceLogIdentifier(raceLogIdentifier, result);
- result.put(FieldNames.RACE_LOG_EVENT.name(), storeRaceLogStartProcedureChangedEvent(event));
- return result;
- }
-
- public DBObject storeRaceLogEntry(RaceLogIdentifier raceLogIdentifier, RaceLogProtestStartTimeEvent event) {
- DBObject result = new BasicDBObject();
- storeRaceLogIdentifier(raceLogIdentifier, result);
- result.put(FieldNames.RACE_LOG_EVENT.name(), storeRaceLogProtestStartTimeEvent(event));
- return result;
- }
-
- public DBObject storeRaceLogEntry(RaceLogIdentifier raceLogIdentifier, RaceLogWindFixEvent event) {
- DBObject result = new BasicDBObject();
- storeRaceLogIdentifier(raceLogIdentifier, result);
- result.put(FieldNames.RACE_LOG_EVENT.name(), storeRaceLogWindFix(event));
- return result;
- }
-
- public DBObject storeRaceLogEntry(RaceLogIdentifier raceLogIdentifier, RaceLogDeviceCompetitorMappingEvent event) {
- BasicDBObject result = new BasicDBObject();
- storeRaceLogIdentifier(raceLogIdentifier, result);
- result.put(FieldNames.RACE_LOG_EVENT.name(), storeRaceLogDeviceCompetitorMappingEvent(event));
- return result;
- }
-
- public DBObject storeRaceLogEntry(RaceLogIdentifier raceLogIdentifier, RaceLogDeviceMarkMappingEvent event) {
- BasicDBObject result = new BasicDBObject();
- storeRaceLogIdentifier(raceLogIdentifier, result);
- result.put(FieldNames.RACE_LOG_EVENT.name(), storeRaceLogDeviceMarkMappingEvent(event));
- return result;
- }
-
- public DBObject storeRaceLogEntry(RaceLogIdentifier raceLogIdentifier, RaceLogDenoteForTrackingEvent event) {
- BasicDBObject result = new BasicDBObject();
- storeRaceLogIdentifier(raceLogIdentifier, result);
- result.put(FieldNames.RACE_LOG_EVENT.name(), storeRaceLogDenoteForTrackingEvent(event));
- return result;
- }
-
- public DBObject storeRaceLogEntry(RaceLogIdentifier raceLogIdentifier, RaceLogStartTrackingEvent event) {
- BasicDBObject result = new BasicDBObject();
- storeRaceLogIdentifier(raceLogIdentifier, result);
- result.put(FieldNames.RACE_LOG_EVENT.name(), storeRaceLogStartTrackingEvent(event));
- return result;
- }
-
- public DBObject storeRaceLogEntry(RaceLogIdentifier raceLogIdentifier, RaceLogRevokeEvent event) {
- BasicDBObject result = new BasicDBObject();
- storeRaceLogIdentifier(raceLogIdentifier, result);
- result.put(FieldNames.RACE_LOG_EVENT.name(), storeRaceLogRevokeEvent(event));
- return result;
- }
-
- public DBObject storeRaceLogEntry(RaceLogIdentifier raceLogIdentifier, RaceLogRegisterCompetitorEvent event) {
- BasicDBObject result = new BasicDBObject();
- storeRaceLogIdentifier(raceLogIdentifier, result);
- result.put(FieldNames.RACE_LOG_EVENT.name(), storeRaceLogRegisterCompetitorEvent(event));
- return result;
- }
-
- public DBObject storeRaceLogEntry(RaceLogIdentifier raceLogIdentifier, RaceLogDefineMarkEvent event) {
- BasicDBObject result = new BasicDBObject();
- storeRaceLogIdentifier(raceLogIdentifier, result);
- result.put(FieldNames.RACE_LOG_EVENT.name(), storeRaceLogDefineMarkEvent(event));
- return result;
- }
-
- public DBObject storeRaceLogEntry(RaceLogIdentifier raceLogIdentifier, RaceLogCloseOpenEndedDeviceMappingEvent event) {
- BasicDBObject result = new BasicDBObject();
- storeRaceLogIdentifier(raceLogIdentifier, result);
- result.put(FieldNames.RACE_LOG_EVENT.name(), storeRaceLogCloseOpenEndedDeviceMappingEvent(event));
- return result;
- }
-
- public DBObject storeRaceLogEntry(RaceLogIdentifier raceLogIdentifier, RaceLogEndOfTrackingEvent event) {
- BasicDBObject result = new BasicDBObject();
- storeRaceLogIdentifier(raceLogIdentifier, result);
- result.put(FieldNames.RACE_LOG_EVENT.name(), storeRaceLogEndOfTrackingEvent(event));
- return result;
- }
-
- public DBObject storeRaceLogEntry(RaceLogIdentifier raceLogIdentifier, RaceLogStartOfTrackingEvent event) {
- BasicDBObject result = new BasicDBObject();
- storeRaceLogIdentifier(raceLogIdentifier, result);
- result.put(FieldNames.RACE_LOG_EVENT.name(), storeRaceLogStartOfTrackingEvent(event));
- return result;
- }
-
- public DBObject storeRaceLogEntry(RaceLogIdentifier raceLogIdentifier, RaceLogAdditionalScoringInformationEvent event) {
- BasicDBObject result = new BasicDBObject();
- storeRaceLogIdentifier(raceLogIdentifier, result);
- result.put(FieldNames.RACE_LOG_EVENT.name(), storeAdditionalScoringInformation(event));
- return result;
- }
-
- private Object storeAdditionalScoringInformation(RaceLogAdditionalScoringInformationEvent event) {
- DBObject result = new BasicDBObject();
- storeRaceLogEventProperties(event, result);
- result.put(FieldNames.RACE_LOG_EVENT_CLASS.name(), RaceLogAdditionalScoringInformationEvent.class.getSimpleName());
- result.put(FieldNames.RACE_LOG_ADDITIONAL_SCORING_INFORMATION_TYPE.name(), event.getType().name());
- return result;
- }
-
- public DBObject storeRaceLogEntry(RaceLogIdentifier raceLogIdentifier, RaceLogFixedMarkPassingEvent event) {
- BasicDBObject result = new BasicDBObject();
- storeRaceLogIdentifier(raceLogIdentifier, result);
- result.put(FieldNames.RACE_LOG_EVENT.name(), storeRaceLogFixedMarkPassingEvent(event));
- return result;
- }
-
- public DBObject storeRaceLogEntry(RaceLogIdentifier raceLogIdentifier, RaceLogSuppressedMarkPassingsEvent event) {
- BasicDBObject result = new BasicDBObject();
- storeRaceLogIdentifier(raceLogIdentifier, result);
- result.put(FieldNames.RACE_LOG_EVENT.name(), storeRaceLogSuppressedMarkPassingsEvent(event));
- return result;
- }
-
- private Object storeRaceLogWindFix(RaceLogWindFixEvent event) {
- DBObject result = new BasicDBObject();
- storeRaceLogEventProperties(event, result);
- result.put(FieldNames.RACE_LOG_EVENT_CLASS.name(), RaceLogWindFixEvent.class.getSimpleName());
- result.put(FieldNames.WIND.name(), storeWind(event.getWindFix()));
- result.put(FieldNames.IS_MAGNETIC.name(), event.isMagnetic());
- return result;
- }
-
- private Object storeRaceLogProtestStartTimeEvent(RaceLogProtestStartTimeEvent event) {
- DBObject result = new BasicDBObject();
- storeRaceLogEventProperties(event, result);
- result.put(FieldNames.RACE_LOG_EVENT_CLASS.name(), RaceLogProtestStartTimeEvent.class.getSimpleName());
- storeTimePoint(event.getProtestStartTime(), result, FieldNames.RACE_LOG_PROTEST_START_TIME);
- return result;
- }
-
- private Object storeRaceLogEndOfTrackingEvent(RaceLogEndOfTrackingEvent event) {
- DBObject result = new BasicDBObject();
- storeRaceLogEventProperties(event, result);
- result.put(FieldNames.RACE_LOG_EVENT_CLASS.name(), RaceLogEndOfTrackingEvent.class.getSimpleName());
- return result;
- }
-
- private Object storeRaceLogStartOfTrackingEvent(RaceLogStartOfTrackingEvent event) {
- DBObject result = new BasicDBObject();
- storeRaceLogEventProperties(event, result);
- result.put(FieldNames.RACE_LOG_EVENT_CLASS.name(), RaceLogStartOfTrackingEvent.class.getSimpleName());
- return result;
- }
-
- private Object storeRaceLogStartProcedureChangedEvent(RaceLogStartProcedureChangedEvent event) {
- DBObject result = new BasicDBObject();
- storeRaceLogEventProperties(event, result);
- result.put(FieldNames.RACE_LOG_EVENT_CLASS.name(), RaceLogStartProcedureChangedEvent.class.getSimpleName());
- result.put(FieldNames.RACE_LOG_START_PROCEDURE_TYPE.name(), event.getStartProcedureType().name());
- return result;
- }
-
- private Object storeRaceLogPathfinderEvent(RaceLogPathfinderEvent pathfinderEvent) {
- DBObject result = new BasicDBObject();
- storeRaceLogEventProperties(pathfinderEvent, result);
- result.put(FieldNames.RACE_LOG_EVENT_CLASS.name(), RaceLogPathfinderEvent.class.getSimpleName());
- result.put(FieldNames.RACE_LOG_PATHFINDER_ID.name(), pathfinderEvent.getPathfinderId());
- return result;
- }
-
- private void storeDeviceMappingEvent(DeviceMappingEvent, ?> event, DBObject result, FieldNames fromField, FieldNames toField) {
- try {
- result.put(FieldNames.DEVICE_ID.name(), storeDeviceId(deviceIdentifierServiceFinder, event.getDevice()));
- } catch (TransformationException | NoCorrespondingServiceRegisteredException e) {
- logger.log(Level.WARNING, "Could not store device identifier for mappng event", e);
- }
- if (event.getFrom() != null) {
- storeTimePoint(event.getFrom(), result, fromField);
- }
- if (event.getTo() != null) {
- storeTimePoint(event.getTo(), result, toField);
- }
- }
-
- private Object storeRaceLogDeviceCompetitorMappingEvent(RaceLogDeviceCompetitorMappingEvent event) {
- DBObject result = new BasicDBObject();
- storeRaceLogEventProperties(event, result);
- result.put(FieldNames.RACE_LOG_EVENT_CLASS.name(), RaceLogDeviceCompetitorMappingEvent.class.getSimpleName());
- storeDeviceMappingEvent(event, result, FieldNames.RACE_LOG_FROM, FieldNames.RACE_LOG_TO);
- result.put(FieldNames.COMPETITOR_ID.name(), event.getMappedTo().getId());
- return result;
- }
-
- private Object storeRaceLogDeviceMarkMappingEvent(RaceLogDeviceMarkMappingEvent event) {
- DBObject result = new BasicDBObject();
- storeRaceLogEventProperties(event, result);
- result.put(FieldNames.RACE_LOG_EVENT_CLASS.name(), RaceLogDeviceMarkMappingEvent.class.getSimpleName());
- storeDeviceMappingEvent(event, result, FieldNames.RACE_LOG_FROM, FieldNames.RACE_LOG_TO);
- result.put(FieldNames.MARK.name(), storeMark(event.getMappedTo()));
- return result;
- }
-
- private Object storeRaceLogDenoteForTrackingEvent(RaceLogDenoteForTrackingEvent event) {
- DBObject result = new BasicDBObject();
- storeRaceLogEventProperties(event, result);
- result.put(FieldNames.RACE_LOG_EVENT_CLASS.name(), RaceLogDenoteForTrackingEvent.class.getSimpleName());
- result.put(FieldNames.RACE_NAME.name(), event.getRaceName());
- result.put(FieldNames.BOAT_CLASS_NAME.name(), event.getBoatClass().getName());
- result.put(FieldNames.RACE_ID.name(), event.getRaceId());
- return result;
- }
-
- private Object storeRaceLogStartTrackingEvent(RaceLogStartTrackingEvent event) {
- DBObject result = new BasicDBObject();
- storeRaceLogEventProperties(event, result);
- result.put(FieldNames.RACE_LOG_EVENT_CLASS.name(), RaceLogStartTrackingEvent.class.getSimpleName());
- return result;
- }
-
- private Object storeRaceLogRevokeEvent(RaceLogRevokeEvent event) {
- DBObject result = new BasicDBObject();
- storeRaceLogEventProperties(event, result);
- result.put(FieldNames.RACE_LOG_EVENT_CLASS.name(), RaceLogRevokeEvent.class.getSimpleName());
- result.put(FieldNames.RACE_LOG_REVOKED_EVENT_ID.name(), event.getRevokedEventId());
- result.put(FieldNames.RACE_LOG_REVOKED_EVENT_TYPE.name(), event.getRevokedEventType());
- result.put(FieldNames.RACE_LOG_REVOKED_EVENT_SHORT_INFO.name(), event.getRevokedEventShortInfo());
- result.put(FieldNames.RACE_LOG_REVOKED_REASON.name(), event.getReason());
- return result;
- }
-
- private Object storeRaceLogRegisterCompetitorEvent(RaceLogRegisterCompetitorEvent event) {
- DBObject result = new BasicDBObject();
- storeRaceLogEventProperties(event, result);
- result.put(FieldNames.RACE_LOG_EVENT_CLASS.name(), RaceLogRegisterCompetitorEvent.class.getSimpleName());
- result.put(FieldNames.RACE_LOG_COMPETITOR_ID.name(), event.getCompetitor().getId());
- return result;
- }
-
- private Object storeRaceLogDefineMarkEvent(RaceLogDefineMarkEvent event) {
- DBObject result = new BasicDBObject();
- storeRaceLogEventProperties(event, result);
- result.put(FieldNames.RACE_LOG_EVENT_CLASS.name(), RaceLogDefineMarkEvent.class.getSimpleName());
- result.put(FieldNames.RACE_LOG_MARK.name(), storeMark(event.getMark()));
- return result;
- }
-
- private Object storeRaceLogCloseOpenEndedDeviceMappingEvent(RaceLogCloseOpenEndedDeviceMappingEvent event) {
- DBObject result = new BasicDBObject();
- storeRaceLogEventProperties(event, result);
- result.put(FieldNames.RACE_LOG_EVENT_CLASS.name(), RaceLogCloseOpenEndedDeviceMappingEvent.class.getSimpleName());
- result.put(FieldNames.RACE_LOG_DEVICE_MAPPING_EVENT_ID.name(), event.getDeviceMappingEventId());
- storeTimePoint(event.getClosingTimePoint(), result, FieldNames.RACE_LOG_CLOSING_TIMEPOINT);
- return result;
- }
-
- private Object storeRaceLogFixedMarkPassingEvent(RaceLogFixedMarkPassingEvent event) {
- DBObject result = new BasicDBObject();
- storeRaceLogEventProperties(event, result);
- result.put(FieldNames.RACE_LOG_EVENT_CLASS.name(), RaceLogFixedMarkPassingEvent.class.getSimpleName());
- result.put(FieldNames.INDEX_OF_PASSED_WAYPOINT.name(), event.getZeroBasedIndexOfPassedWaypoint());
- result.put(FieldNames.TIMEPOINT_OF_FIXED_MARKPASSING.name(), event.getTimePointOfFixedPassing().asMillis());
- return result;
- }
-
- private Object storeRaceLogSuppressedMarkPassingsEvent(RaceLogSuppressedMarkPassingsEvent event) {
- DBObject result = new BasicDBObject();
- storeRaceLogEventProperties(event, result);
- result.put(FieldNames.RACE_LOG_EVENT_CLASS.name(), RaceLogSuppressedMarkPassingsEvent.class.getSimpleName());
- result.put(FieldNames.INDEX_OF_FIRST_SUPPRESSED_WAYPOINT.name(), event.getZeroBasedIndexOfFirstSuppressedWaypoint());
- return result;
- }
-
- public DBObject storeRaceLogFlagEvent(RaceLogFlagEvent flagEvent) {
- DBObject result = new BasicDBObject();
- storeRaceLogEventProperties(flagEvent, result);
- result.put(FieldNames.RACE_LOG_EVENT_CLASS.name(), RaceLogFlagEvent.class.getSimpleName());
- result.put(FieldNames.RACE_LOG_EVENT_FLAG_UPPER.name(), flagEvent.getUpperFlag().name());
- result.put(FieldNames.RACE_LOG_EVENT_FLAG_LOWER.name(), flagEvent.getLowerFlag().name());
- result.put(FieldNames.RACE_LOG_EVENT_FLAG_DISPLAYED.name(), String.valueOf(flagEvent.isDisplayed()));
- return result;
- }
-
- private DBObject storeRaceLogStartTimeEvent(RaceLogStartTimeEvent startTimeEvent) {
- DBObject result = new BasicDBObject();
- storeRaceLogEventProperties(startTimeEvent, result);
- result.put(FieldNames.RACE_LOG_EVENT_CLASS.name(), RaceLogStartTimeEvent.class.getSimpleName());
- storeTimePoint(startTimeEvent.getStartTime(), result, FieldNames.RACE_LOG_EVENT_START_TIME);
- result.put(FieldNames.RACE_LOG_EVENT_NEXT_STATUS.name(), startTimeEvent.getNextStatus().name());
- return result;
- }
-
- private void storeRaceLogEventProperties(RaceLogEvent event, DBObject result) {
- // for compatibility reasons we reuse the field name of Timed
- storeTimePoint(event.getLogicalTimePoint(), result, FieldNames.TIME_AS_MILLIS);
- storeTimePoint(event.getCreatedAt(), result, FieldNames.RACE_LOG_EVENT_CREATED_AT);
- result.put(FieldNames.RACE_LOG_EVENT_ID.name(), event.getId());
- result.put(FieldNames.RACE_LOG_EVENT_PASS_ID.name(), event.getPassId());
- result.put(FieldNames.RACE_LOG_EVENT_INVOLVED_BOATS.name(), storeInvolvedBoatsForRaceLogEvent(event.getInvolvedBoats()));
- storeRaceLogEventAuthor(result, event.getAuthor());
- }
-
-
- private BasicDBList storeInvolvedBoatsForRaceLogEvent(List competitors) {
- BasicDBList dbInvolvedCompetitorIds = new BasicDBList();
- for (Competitor competitor : competitors) {
- dbInvolvedCompetitorIds.add(competitor.getId());
- }
- return dbInvolvedCompetitorIds;
- }
-
- private DBObject storeRaceLogPassChangeEvent(RaceLogPassChangeEvent passChangeEvent) {
- DBObject result = new BasicDBObject();
- storeRaceLogEventProperties(passChangeEvent, result);
- result.put(FieldNames.RACE_LOG_EVENT_CLASS.name(), RaceLogPassChangeEvent.class.getSimpleName());
- return result;
- }
-
- private DBObject storeRaceLogDependentStartTimeEvent(RaceLogDependentStartTimeEvent dependentStartTimeEvent) {
- DBObject result = new BasicDBObject();
- storeRaceLogEventProperties(dependentStartTimeEvent, result);
- result.put(FieldNames.RACE_LOG_EVENT_CLASS.name(), RaceLogDependentStartTimeEvent.class.getSimpleName());
- result.put(FieldNames.RACE_LOG_DEPDENDENT_ON_REGATTALIKE.name(), dependentStartTimeEvent.getDependentOnRaceIdentifier().getRegattaLikeParentName());
- result.put(FieldNames.RACE_LOG_DEPDENDENT_ON_RACECOLUMN.name(), dependentStartTimeEvent.getDependentOnRaceIdentifier().getRaceColumnName());
- result.put(FieldNames.RACE_LOG_DEPDENDENT_ON_FLEET.name(), dependentStartTimeEvent.getDependentOnRaceIdentifier().getFleetName());
- storeDuration(dependentStartTimeEvent.getStartTimeDifference(), result, FieldNames.RACE_LOG_START_TIME_DIFFERENCE_IN_MS);
- result.put(FieldNames.RACE_LOG_EVENT_NEXT_STATUS.name(), dependentStartTimeEvent.getNextStatus().name());
- return result;
- }
-
- private void storeDuration(Duration duration, DBObject result, FieldNames fieldName) {
- if (duration != null) {
- result.put(fieldName.name(), duration.asMillis());
- }
- }
-
- private DBObject storeRaceLogRaceStatusEvent(RaceLogRaceStatusEvent raceStatusEvent) {
- DBObject result = new BasicDBObject();
- storeRaceLogEventProperties(raceStatusEvent, result);
- result.put(FieldNames.RACE_LOG_EVENT_CLASS.name(), RaceLogRaceStatusEvent.class.getSimpleName());
- result.put(FieldNames.RACE_LOG_EVENT_NEXT_STATUS.name(), raceStatusEvent.getNextStatus().name());
- return result;
- }
-
- private DBObject storeRaceLogCourseAreaChangedEvent(RaceLogCourseAreaChangedEvent courseAreaChangedEvent) {
- DBObject result = new BasicDBObject();
- storeRaceLogEventProperties(courseAreaChangedEvent, result);
- result.put(FieldNames.RACE_LOG_EVENT_CLASS.name(), RaceLogCourseAreaChangedEvent.class.getSimpleName());
- result.put(FieldNames.COURSE_AREA_ID.name(), courseAreaChangedEvent.getCourseAreaId());
- return result;
- }
-
- private DBObject storeRaceLogCourseDesignChangedEvent(RaceLogCourseDesignChangedEvent courseDesignChangedEvent) {
- DBObject result = new BasicDBObject();
- storeRaceLogEventProperties(courseDesignChangedEvent, result);
- result.put(FieldNames.RACE_LOG_EVENT_CLASS.name(), RaceLogCourseDesignChangedEvent.class.getSimpleName());
- result.put(FieldNames.RACE_LOG_COURSE_DESIGN_NAME.name(), courseDesignChangedEvent.getCourseDesign().getName());
- result.put(FieldNames.RACE_LOG_COURSE_DESIGN.name(), storeCourseBase(courseDesignChangedEvent.getCourseDesign()));
- return result;
- }
-
- private Object storeRaceLogFinishPositioningListChangedEvent(RaceLogFinishPositioningListChangedEvent finishPositioningListChangedEvent) {
- DBObject result = new BasicDBObject();
- storeRaceLogEventProperties(finishPositioningListChangedEvent, result);
- result.put(FieldNames.RACE_LOG_EVENT_CLASS.name(), RaceLogFinishPositioningListChangedEvent.class.getSimpleName());
- result.put(FieldNames.RACE_LOG_POSITIONED_COMPETITORS.name(), storePositionedCompetitors(finishPositioningListChangedEvent.getPositionedCompetitorsIDsNamesMaxPointsReasons()));
-
- return result;
- }
-
- private Object storeRaceLogFinishPositioningConfirmedEvent(RaceLogFinishPositioningConfirmedEvent finishPositioningConfirmedEvent) {
- DBObject result = new BasicDBObject();
- storeRaceLogEventProperties(finishPositioningConfirmedEvent, result);
- result.put(FieldNames.RACE_LOG_EVENT_CLASS.name(), RaceLogFinishPositioningConfirmedEvent.class.getSimpleName());
- result.put(FieldNames.RACE_LOG_POSITIONED_COMPETITORS.name(), storePositionedCompetitors(finishPositioningConfirmedEvent.getPositionedCompetitorsIDsNamesMaxPointsReasons()));
-
- return result;
- }
-
- private Object storeRaceLogGateLineOpeningTimeEvent(RaceLogGateLineOpeningTimeEvent gateLineOpeningTimeEvent){
- DBObject result = new BasicDBObject();
- storeRaceLogEventProperties(gateLineOpeningTimeEvent, result);
- result.put(FieldNames.RACE_LOG_EVENT_CLASS.name(), RaceLogGateLineOpeningTimeEvent.class.getSimpleName());
- result.put(FieldNames.RACE_LOG_GATE_LINE_OPENING_TIME.name(), gateLineOpeningTimeEvent.getGateLineOpeningTimes().getGateLaunchStopTime());
- result.put(FieldNames.RACE_LOG_GOLF_DOWN_TIME.name(), gateLineOpeningTimeEvent.getGateLineOpeningTimes().getGolfDownTime());
- return result;
- }
-
- private BasicDBList storePositionedCompetitors(List> positionedCompetitors) {
- BasicDBList dbList = new BasicDBList();
- if (positionedCompetitors != null) {
- for (com.sap.sse.common.Util.Triple competitorPair : positionedCompetitors) {
- dbList.add(storePositionedCompetitor(competitorPair));
- }
- }
- return dbList;
- }
-
- private DBObject storePositionedCompetitor(com.sap.sse.common.Util.Triple competitorTriple) {
- DBObject result = new BasicDBObject();
- result.put(FieldNames.COMPETITOR_ID.name(), competitorTriple.getA());
- result.put(FieldNames.COMPETITOR_DISPLAY_NAME.name(), competitorTriple.getB());
- result.put(FieldNames.LEADERBOARD_SCORE_CORRECTION_MAX_POINTS_REASON.name(), competitorTriple.getC().name());
-
- return result;
- }
-
- private BasicDBList storeCourseBase(CourseBase courseData) {
- BasicDBList dbList = new BasicDBList();
-
- for (Waypoint waypoint : courseData.getWaypoints()) {
- dbList.add(storeWaypoint(waypoint));
- }
- return dbList;
- }
-
- private DBObject storeWaypoint(Waypoint waypoint) {
- DBObject result = new BasicDBObject();
- result.put(FieldNames.WAYPOINT_PASSINGINSTRUCTIONS.name(), getPassingInstructions(waypoint.getPassingInstructions()));
- result.put(FieldNames.CONTROLPOINT.name(), storeControlPoint(waypoint.getControlPoint()));
- return result;
- }
-
- private DBObject storeControlPoint(ControlPoint controlPoint) {
- DBObject result = new BasicDBObject();
- if (controlPoint instanceof Mark) {
- result.put(FieldNames.CONTROLPOINT_CLASS.name(), Mark.class.getSimpleName());
- result.put(FieldNames.CONTROLPOINT_VALUE.name(), storeMark((Mark) controlPoint));
- } else if (controlPoint instanceof ControlPointWithTwoMarks) {
- result.put(FieldNames.CONTROLPOINT_CLASS.name(), ControlPointWithTwoMarks.class.getSimpleName());
- result.put(FieldNames.CONTROLPOINT_VALUE.name(), storeControlPointWithTwoMarks((ControlPointWithTwoMarks) controlPoint));
- }
- return result;
- }
-
- private DBObject storeControlPointWithTwoMarks(ControlPointWithTwoMarks cpwtm) {
- DBObject result = new BasicDBObject();
- result.put(FieldNames.CONTROLPOINTWITHTWOMARKS_ID.name(), cpwtm.getId());
- result.put(FieldNames.CONTROLPOINTWITHTWOMARKS_NAME.name(), cpwtm.getName());
- result.put(FieldNames.CONTROLPOINTWITHTWOMARKS_LEFT.name(), storeMark(cpwtm.getLeft()));
- result.put(FieldNames.CONTROLPOINTWITHTWOMARKS_RIGHT.name(), storeMark(cpwtm.getRight()));
- return result;
- }
-
- private DBObject storeMark(Mark mark) {
- DBObject result = new BasicDBObject();
- result.put(FieldNames.MARK_ID.name(), mark.getId());
- result.put(FieldNames.MARK_COLOR.name(), mark.getColor());
- result.put(FieldNames.MARK_NAME.name(), mark.getName());
- result.put(FieldNames.MARK_PATTERN.name(), mark.getPattern());
- result.put(FieldNames.MARK_SHAPE.name(), mark.getShape());
- result.put(FieldNames.MARK_TYPE.name(), mark.getType() == null ? null : mark.getType().name());
- return result;
- }
-
- private String getPassingInstructions(PassingInstruction passingInstructions) {
- final String passing;
- if (passingInstructions != null) {
- passing = passingInstructions.name();
- } else {
- passing = null;
- }
- return passing;
- }
- @Override
- public void storeCompetitor(Competitor competitor) {
- DBCollection collection = database.getCollection(CollectionNames.COMPETITORS.name());
- JSONObject json = competitorSerializer.serialize(competitor);
- DBObject query = (DBObject) JSON.parse(CompetitorJsonSerializer.getCompetitorIdQuery(competitor).toString());
- DBObject entry = (DBObject) JSON.parse(json.toString());
- collection.update(query, entry, /* upsrt */true, /* multi */false, WriteConcern.SAFE);
- }
-
- @Override
- public void removeAllCompetitors() {
- logger.info("Removing all persistent competitor info");
- DBCollection collection = database.getCollection(CollectionNames.COMPETITORS.name());
- collection.drop();
- }
-
- @Override
- public void removeCompetitor(Competitor competitor) {
- logger.info("Removing persistent competitor info for competitor "+competitor.getName()+" with ID "+competitor.getId());
- DBCollection collection = database.getCollection(CollectionNames.COMPETITORS.name());
- DBObject query = (DBObject) JSON.parse(CompetitorJsonSerializer.getCompetitorIdQuery(competitor).toString());
- collection.remove(query, WriteConcern.SAFE);
- }
-
- @Override
- public void storeDeviceConfiguration(DeviceConfigurationMatcher matcher, DeviceConfiguration configuration) {
- DBCollection configurationsCollections = database.getCollection(CollectionNames.CONFIGURATIONS.name());
-
- DBObject query = new BasicDBObject();
- query.put(FieldNames.CONFIGURATION_MATCHER_ID.name(), matcher.getMatcherIdentifier());
-
- DBObject entryObject = new BasicDBObject();
- entryObject.put(FieldNames.CONFIGURATION_MATCHER_ID.name(), matcher.getMatcherIdentifier());
- entryObject.put(FieldNames.CONFIGURATION_MATCHER.name(), createDeviceConfigurationMatcherObject(matcher));
- entryObject.put(FieldNames.CONFIGURATION_CONFIG.name(), createDeviceConfigurationObject(configuration));
-
- configurationsCollections.update(query, entryObject, /* upsrt */ true, /* multi */ false, WriteConcern.SAFE);
- }
-
- private DBObject createDeviceConfigurationMatcherObject(DeviceConfigurationMatcher matcher) {
- DBObject matcherObject = new BasicDBObject();
- matcherObject.put(FieldNames.CONFIGURATION_MATCHER_TYPE.name(), matcher.getMatcherType().name());
- if (matcher instanceof DeviceConfigurationMatcherSingle) {
- BasicDBList client = new BasicDBList();
- client.add(((DeviceConfigurationMatcherSingle)matcher).getClientIdentifier());
- matcherObject.put(FieldNames.CONFIGURATION_MATCHER_CLIENTS.name(), client);
- } else if (matcher instanceof DeviceConfigurationMatcherMulti) {
- BasicDBList clients = new BasicDBList();
- Util.addAll(((DeviceConfigurationMatcherMulti)matcher).getClientIdentifiers(), clients);
- matcherObject.put(FieldNames.CONFIGURATION_MATCHER_CLIENTS.name(), clients);
- }
- return matcherObject;
- }
-
- private DBObject createDeviceConfigurationObject(DeviceConfiguration configuration) {
- JsonSerializer serializer = DeviceConfigurationJsonSerializer.create();
- JSONObject json = serializer.serialize(configuration);
- DBObject entry = (DBObject) JSON.parse(json.toString());
- return entry;
- }
-
- @Override
- public void removeDeviceConfiguration(DeviceConfigurationMatcher matcher) {
- DBCollection configurationsCollections = database.getCollection(CollectionNames.CONFIGURATIONS.name());
- DBObject query = new BasicDBObject();
- query.put(FieldNames.CONFIGURATION_MATCHER_ID.name(), matcher.getMatcherIdentifier());
- configurationsCollections.remove(query);
- }
-
- public static DBObject storeDeviceId(
- TypeBasedServiceFinder deviceIdentifierServiceFinder, DeviceIdentifier device)
- throws TransformationException, NoCorrespondingServiceRegisteredException {
- String type = device.getIdentifierType();
- DeviceIdentifierMongoHandler handler = deviceIdentifierServiceFinder.findService(type);
- com.sap.sse.common.Util.Pair pair = handler.serialize(device);
- type = pair.getA();
- Object deviceTypeSpecificId = pair.getB();
- return new BasicDBObjectBuilder()
- .add(FieldNames.DEVICE_TYPE.name(), type)
- .add(FieldNames.DEVICE_TYPE_SPECIFIC_ID.name(), deviceTypeSpecificId)
- .add(FieldNames.DEVICE_STRING_REPRESENTATION.name(), device.getStringRepresentation()).get();
- }
-
- void storeRaceLogEventEvent(DBObject eventEntry) {
- getRaceLogCollection().insert(eventEntry);
- }
-
- @Override
- public void removeRaceLog(RaceLogIdentifier identifier) {
- DBObject query = new BasicDBObject();
- storeRaceLogIdentifier(identifier, query);
- getRaceLogCollection().remove(query);
- }
-
- @Override
- public void removeRegattaLog(RegattaLikeIdentifier identifier) {
- DBObject query = new BasicDBObject();
- addRegattaLikeIdentifier(identifier, query);
- getRegattaLogCollection().remove(query);
- }
-
- @Override
- public void storeResultUrl(String resultProviderName, URL url) {
- DBCollection resultUrlsCollection = database.getCollection(CollectionNames.RESULT_URLS.name());
- DBObject query = new BasicDBObject(FieldNames.RESULT_PROVIDERNAME.name(), resultProviderName);
- DBObject entry = new BasicDBObject(FieldNames.RESULT_PROVIDERNAME.name(), resultProviderName);
- entry.put(FieldNames.RESULT_URL.name(), url.toString());
- resultUrlsCollection.update(query, entry, /* upsrt */true, /* multi */false, WriteConcern.SAFE);
- }
-
- @Override
- public void removeResultUrl(String resultProviderName, URL url) {
- DBCollection resultUrlsCollection = database.getCollection(CollectionNames.RESULT_URLS.name());
- DBObject query = new BasicDBObjectBuilder().add(FieldNames.RESULT_PROVIDERNAME.name(), resultProviderName)
- .add(FieldNames.RESULT_URL.name(), url.toString()).get();
- resultUrlsCollection.remove(query);
- }
-
- public DBCollection getRegattaLogCollection() {
- DBCollection result = database.getCollection(CollectionNames.REGATTA_LOGS.name());
- DBObject index = new BasicDBObject(FieldNames.REGATTA_LOG_IDENTIFIER_TYPE.name(), null);
- index.put(FieldNames.REGATTA_LOG_IDENTIFIER_NAME.name(), null);
- result.createIndex(index);
- return result;
- }
-
- private DBObject createBasicRegattaLogEventDBObject(RegattaLogEvent event) {
- DBObject result = new BasicDBObject();
- storeTimed(event, result);
- storeTimePoint(event.getCreatedAt(), result, FieldNames.REGATTA_LOG_EVENT_CREATED_AT);
- result.put(FieldNames.REGATTA_LOG_EVENT_ID.name(), event.getId());
- result.put(FieldNames.REGATTA_LOG_EVENT_AUTHOR_NAME.name(), event.getAuthor().getName());
- result.put(FieldNames.REGATTA_LOG_EVENT_AUTHOR_PRIORITY.name(), event.getAuthor().getPriority());
- return result;
- }
-
- private void addRegattaLikeIdentifier(RegattaLikeIdentifier regattaLikeId, DBObject toObject) {
- toObject.put(FieldNames.REGATTA_LOG_IDENTIFIER_TYPE.name(), regattaLikeId.getIdentifierType());
- toObject.put(FieldNames.REGATTA_LOG_IDENTIFIER_NAME.name(), regattaLikeId.getName());
- }
-
- private void storeRegattaLogEvent(RegattaLikeIdentifier regattaLikeId, DBObject innerObject) {
- DBObject result = new BasicDBObject(FieldNames.REGATTA_LOG_EVENT.name(), innerObject);
- addRegattaLikeIdentifier(regattaLikeId, result);
- getRegattaLogCollection().insert(result);
- }
-
- public void storeRegattaLogEvent(RegattaLikeIdentifier regattaLikeId, RegattaLogDeviceCompetitorMappingEvent event) {
- DBObject result = createBasicRegattaLogEventDBObject(event);
- result.put(FieldNames.REGATTA_LOG_EVENT_CLASS.name(), RegattaLogDeviceCompetitorMappingEvent.class.getSimpleName());
- storeDeviceMappingEvent(event, result, FieldNames.REGATTA_LOG_FROM, FieldNames.REGATTA_LOG_TO);
- result.put(FieldNames.COMPETITOR_ID.name(), event.getMappedTo().getId());
- storeRegattaLogEvent(regattaLikeId, result);
- }
-
- public void storeRegattaLogEvent(RegattaLikeIdentifier regattaLikeId, RegattaLogDeviceMarkMappingEvent event) {
- DBObject result = createBasicRegattaLogEventDBObject(event);
- result.put(FieldNames.REGATTA_LOG_EVENT_CLASS.name(), RegattaLogDeviceMarkMappingEvent.class.getSimpleName());
- storeDeviceMappingEvent(event, result, FieldNames.REGATTA_LOG_FROM, FieldNames.REGATTA_LOG_TO);
- result.put(FieldNames.MARK.name(), storeMark(event.getMappedTo()));
- storeRegattaLogEvent(regattaLikeId, result);
- }
-
- public void storeRegattaLogEvent(RegattaLikeIdentifier regattaLikeId, RegattaLogRevokeEvent event) {
- DBObject result = createBasicRegattaLogEventDBObject(event);
- result.put(FieldNames.REGATTA_LOG_EVENT_CLASS.name(), RegattaLogRevokeEvent.class.getSimpleName());
- result.put(FieldNames.REGATTA_LOG_REVOKED_EVENT_ID.name(), event.getRevokedEventId());
- result.put(FieldNames.REGATTA_LOG_REVOKED_EVENT_TYPE.name(), event.getRevokedEventType());
- result.put(FieldNames.REGATTA_LOG_REVOKED_EVENT_SHORT_INFO.name(), event.getRevokedEventShortInfo());
- result.put(FieldNames.REGATTA_LOG_REVOKED_REASON.name(), event.getReason());
- storeRegattaLogEvent(regattaLikeId, result);
- }
-
- public void storeRegattaLogEvent(RegattaLikeIdentifier regattaLikeId, RegattaLogRegisterCompetitorEvent event) {
- DBObject result = createBasicRegattaLogEventDBObject(event);
- result.put(FieldNames.REGATTA_LOG_EVENT_CLASS.name(), RegattaLogRegisterCompetitorEvent.class.getSimpleName());
- result.put(FieldNames.REGATTA_LOG_COMPETITOR_ID.name(), event.getCompetitor().getId());
- storeRegattaLogEvent(regattaLikeId, result);
- }
-
- public void storeRegattaLogEvent(RegattaLikeIdentifier regattaLikeId, RegattaLogCloseOpenEndedDeviceMappingEvent event) {
- DBObject result = createBasicRegattaLogEventDBObject(event);
- result.put(FieldNames.REGATTA_LOG_EVENT_CLASS.name(), RegattaLogCloseOpenEndedDeviceMappingEvent.class.getSimpleName());
- result.put(FieldNames.REGATTA_LOG_DEVICE_MAPPING_EVENT_ID.name(), event.getDeviceMappingEventId());
- storeTimePoint(event.getClosingTimePoint(), result, FieldNames.REGATTA_LOG_CLOSING_TIMEPOINT);
- storeRegattaLogEvent(regattaLikeId, result);
- }
-
- public void storeRegattaLogEvent(RegattaLikeIdentifier regattaLikeId, RegattaLogSetCompetitorTimeOnTimeFactorEvent event) {
- DBObject result = createBasicRegattaLogEventDBObject(event);
- result.put(FieldNames.REGATTA_LOG_EVENT_CLASS.name(), RegattaLogCloseOpenEndedDeviceMappingEvent.class.getSimpleName());
- result.put(FieldNames.REGATTA_LOG_COMPETITOR_ID.name(), event.getCompetitor().getId());
- result.put(FieldNames.REGATTA_LOG_TIME_ON_TIME_FACTOR.name(), event.getTimeOnTimeFactor());
- }
-
- public DBObject storeRaceLogEntry(RaceLogIdentifier raceLogIdentifier, RaceLogDependentStartTimeEvent event) {
- BasicDBObject result = new BasicDBObject();
- storeRaceLogIdentifier(raceLogIdentifier, result);
- result.put(FieldNames.RACE_LOG_EVENT.name(), storeRaceLogDependentStartTimeEvent(event));
- return result;
- }
-
- public void storeRegattaLogEvent(RegattaLikeIdentifier regattaLikeId, RegattaLogSetCompetitorTimeOnDistanceAllowancePerNauticalMileEvent event) {
- DBObject result = createBasicRegattaLogEventDBObject(event);
- result.put(FieldNames.REGATTA_LOG_EVENT_CLASS.name(), RegattaLogCloseOpenEndedDeviceMappingEvent.class.getSimpleName());
- result.put(FieldNames.REGATTA_LOG_COMPETITOR_ID.name(), event.getCompetitor().getId());
- result.put(FieldNames.REGATTA_LOG_TIME_ON_DISTANCE_SECONDS_ALLOWANCE_PER_NAUTICAL_MILE.name(), event.getTimeOnDistanceAllowancePerNauticalMile().asSeconds());
- storeRegattaLogEvent(regattaLikeId, result);
- }
-
- private DBObject createImageObject(ImageDescriptor image) {
- DBObject result = new BasicDBObject();
- result.put(FieldNames.IMAGE_URL.name(), image.getURL().toString());
- result.put(FieldNames.IMAGE_LOCALE.name(), image.getLocale() != null ? image.getLocale().toLanguageTag() : null);
- result.put(FieldNames.IMAGE_TITLE.name(), image.getTitle());
- result.put(FieldNames.IMAGE_SUBTITLE.name(), image.getSubtitle());
- result.put(FieldNames.IMAGE_COPYRIGHT.name(), image.getCopyright());
- result.put(FieldNames.IMAGE_WIDTH_IN_PX.name(), image.getWidthInPx());
- result.put(FieldNames.IMAGE_HEIGHT_IN_PX.name(), image.getHeightInPx());
- storeTimePoint(image.getCreatedAtDate(), result, FieldNames.IMAGE_CREATEDATDATE);
- BasicDBList tags = new BasicDBList();
- for (String tag : image.getTags()) {
- tags.add(tag);
- }
- result.put(FieldNames.IMAGE_TAGS.name(), tags);
- return result;
- }
-
- private DBObject createVideoObject(VideoDescriptor video) {
- DBObject result = new BasicDBObject();
- result.put(FieldNames.VIDEO_URL.name(), video.getURL().toString());
- result.put(FieldNames.VIDEO_LOCALE.name(), video.getLocale() != null ? video.getLocale().toLanguageTag() : null);
- result.put(FieldNames.VIDEO_THUMBNAIL_URL.name(), video.getThumbnailURL() != null ? video.getThumbnailURL().toString() : null);
- result.put(FieldNames.VIDEO_TITLE.name(), video.getTitle());
- result.put(FieldNames.VIDEO_SUBTITLE.name(), video.getSubtitle());
- result.put(FieldNames.VIDEO_MIMETYPE.name(), video.getMimeType() != null ? video.getMimeType().name() : null);
- result.put(FieldNames.VIDEO_COPYRIGHT.name(), video.getCopyright());
- result.put(FieldNames.VIDEO_LENGTH_IN_SECONDS.name(), video.getLengthInSeconds());
- storeTimePoint(video.getCreatedAtDate(), result, FieldNames.VIDEO_CREATEDATDATE);
- BasicDBList tags = new BasicDBList();
- for (String tag : video.getTags()) {
- tags.add(tag);
- }
- result.put(FieldNames.VIDEO_TAGS.name(), tags);
- return result;
- }
-}
+package com.sap.sailing.domain.persistence.impl;
+
+import java.io.Serializable;
+import java.net.URL;
+import java.util.List;
+import java.util.Map.Entry;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import org.bson.types.ObjectId;
+import org.json.simple.JSONObject;
+
+import com.mongodb.BasicDBList;
+import com.mongodb.BasicDBObject;
+import com.mongodb.BasicDBObjectBuilder;
+import com.mongodb.DB;
+import com.mongodb.DBCollection;
+import com.mongodb.DBObject;
+import com.mongodb.WriteConcern;
+import com.mongodb.util.JSON;
+import com.sap.sailing.domain.abstractlog.AbstractLogEventAuthor;
+import com.sap.sailing.domain.abstractlog.race.RaceLogCourseAreaChangedEvent;
+import com.sap.sailing.domain.abstractlog.race.RaceLogCourseDesignChangedEvent;
+import com.sap.sailing.domain.abstractlog.race.RaceLogDependentStartTimeEvent;
+import com.sap.sailing.domain.abstractlog.race.RaceLogEndOfTrackingEvent;
+import com.sap.sailing.domain.abstractlog.race.RaceLogEvent;
+import com.sap.sailing.domain.abstractlog.race.RaceLogFinishPositioningConfirmedEvent;
+import com.sap.sailing.domain.abstractlog.race.RaceLogFinishPositioningListChangedEvent;
+import com.sap.sailing.domain.abstractlog.race.RaceLogFixedMarkPassingEvent;
+import com.sap.sailing.domain.abstractlog.race.RaceLogFlagEvent;
+import com.sap.sailing.domain.abstractlog.race.RaceLogGateLineOpeningTimeEvent;
+import com.sap.sailing.domain.abstractlog.race.RaceLogPassChangeEvent;
+import com.sap.sailing.domain.abstractlog.race.RaceLogPathfinderEvent;
+import com.sap.sailing.domain.abstractlog.race.RaceLogProtestStartTimeEvent;
+import com.sap.sailing.domain.abstractlog.race.RaceLogRaceStatusEvent;
+import com.sap.sailing.domain.abstractlog.race.RaceLogRevokeEvent;
+import com.sap.sailing.domain.abstractlog.race.RaceLogStartOfTrackingEvent;
+import com.sap.sailing.domain.abstractlog.race.RaceLogStartProcedureChangedEvent;
+import com.sap.sailing.domain.abstractlog.race.RaceLogStartTimeEvent;
+import com.sap.sailing.domain.abstractlog.race.RaceLogSuppressedMarkPassingsEvent;
+import com.sap.sailing.domain.abstractlog.race.RaceLogWindFixEvent;
+import com.sap.sailing.domain.abstractlog.race.scoring.RaceLogAdditionalScoringInformationEvent;
+import com.sap.sailing.domain.abstractlog.race.tracking.RaceLogCloseOpenEndedDeviceMappingEvent;
+import com.sap.sailing.domain.abstractlog.race.tracking.RaceLogDefineMarkEvent;
+import com.sap.sailing.domain.abstractlog.race.tracking.RaceLogDenoteForTrackingEvent;
+import com.sap.sailing.domain.abstractlog.race.tracking.RaceLogDeviceCompetitorMappingEvent;
+import com.sap.sailing.domain.abstractlog.race.tracking.RaceLogDeviceMarkMappingEvent;
+import com.sap.sailing.domain.abstractlog.race.tracking.RaceLogRegisterCompetitorEvent;
+import com.sap.sailing.domain.abstractlog.race.tracking.RaceLogStartTrackingEvent;
+import com.sap.sailing.domain.abstractlog.regatta.RegattaLogEvent;
+import com.sap.sailing.domain.abstractlog.regatta.events.RegattaLogCloseOpenEndedDeviceMappingEvent;
+import com.sap.sailing.domain.abstractlog.regatta.events.RegattaLogDeviceCompetitorMappingEvent;
+import com.sap.sailing.domain.abstractlog.regatta.events.RegattaLogDeviceMarkMappingEvent;
+import com.sap.sailing.domain.abstractlog.regatta.events.RegattaLogRegisterCompetitorEvent;
+import com.sap.sailing.domain.abstractlog.regatta.events.RegattaLogRevokeEvent;
+import com.sap.sailing.domain.abstractlog.regatta.events.RegattaLogSetCompetitorTimeOnDistanceAllowancePerNauticalMileEvent;
+import com.sap.sailing.domain.abstractlog.regatta.events.RegattaLogSetCompetitorTimeOnTimeFactorEvent;
+import com.sap.sailing.domain.abstractlog.shared.events.DeviceMappingEvent;
+import com.sap.sailing.domain.base.Competitor;
+import com.sap.sailing.domain.base.ControlPoint;
+import com.sap.sailing.domain.base.ControlPointWithTwoMarks;
+import com.sap.sailing.domain.base.CourseArea;
+import com.sap.sailing.domain.base.CourseBase;
+import com.sap.sailing.domain.base.Event;
+import com.sap.sailing.domain.base.Fleet;
+import com.sap.sailing.domain.base.Mark;
+import com.sap.sailing.domain.base.RaceColumn;
+import com.sap.sailing.domain.base.RaceDefinition;
+import com.sap.sailing.domain.base.Regatta;
+import com.sap.sailing.domain.base.RemoteSailingServerReference;
+import com.sap.sailing.domain.base.SailingServerConfiguration;
+import com.sap.sailing.domain.base.Series;
+import com.sap.sailing.domain.base.Venue;
+import com.sap.sailing.domain.base.Waypoint;
+import com.sap.sailing.domain.base.configuration.DeviceConfiguration;
+import com.sap.sailing.domain.base.configuration.DeviceConfigurationMatcher;
+import com.sap.sailing.domain.base.configuration.RegattaConfiguration;
+import com.sap.sailing.domain.base.configuration.impl.DeviceConfigurationMatcherMulti;
+import com.sap.sailing.domain.base.configuration.impl.DeviceConfigurationMatcherSingle;
+import com.sap.sailing.domain.base.impl.FleetImpl;
+import com.sap.sailing.domain.common.Bearing;
+import com.sap.sailing.domain.common.MaxPointsReason;
+import com.sap.sailing.domain.common.PassingInstruction;
+import com.sap.sailing.domain.common.Positioned;
+import com.sap.sailing.domain.common.RaceIdentifier;
+import com.sap.sailing.domain.common.Speed;
+import com.sap.sailing.domain.common.SpeedWithBearing;
+import com.sap.sailing.domain.common.Wind;
+import com.sap.sailing.domain.common.WindSource;
+import com.sap.sailing.domain.common.racelog.tracking.TransformationException;
+import com.sap.sailing.domain.leaderboard.FlexibleLeaderboard;
+import com.sap.sailing.domain.leaderboard.Leaderboard;
+import com.sap.sailing.domain.leaderboard.LeaderboardGroup;
+import com.sap.sailing.domain.leaderboard.RegattaLeaderboard;
+import com.sap.sailing.domain.leaderboard.ResultDiscardingRule;
+import com.sap.sailing.domain.leaderboard.SettableScoreCorrection;
+import com.sap.sailing.domain.leaderboard.ThresholdBasedResultDiscardingRule;
+import com.sap.sailing.domain.persistence.MongoObjectFactory;
+import com.sap.sailing.domain.persistence.racelog.tracking.DeviceIdentifierMongoHandler;
+import com.sap.sailing.domain.persistence.racelog.tracking.impl.PlaceHolderDeviceIdentifierMongoHandler;
+import com.sap.sailing.domain.racelog.RaceLogIdentifier;
+import com.sap.sailing.domain.racelogtracking.DeviceIdentifier;
+import com.sap.sailing.domain.regattalike.RegattaLikeIdentifier;
+import com.sap.sailing.domain.tracking.TrackedRace;
+import com.sap.sailing.domain.tracking.TrackedRegatta;
+import com.sap.sailing.domain.tracking.WindTrack;
+import com.sap.sailing.server.gateway.serialization.JsonSerializer;
+import com.sap.sailing.server.gateway.serialization.impl.CompetitorJsonSerializer;
+import com.sap.sailing.server.gateway.serialization.impl.DeviceConfigurationJsonSerializer;
+import com.sap.sailing.server.gateway.serialization.impl.RegattaConfigurationJsonSerializer;
+import com.sap.sse.common.Duration;
+import com.sap.sse.common.NoCorrespondingServiceRegisteredException;
+import com.sap.sse.common.TimePoint;
+import com.sap.sse.common.TimeRange;
+import com.sap.sse.common.Timed;
+import com.sap.sse.common.TypeBasedServiceFinder;
+import com.sap.sse.common.TypeBasedServiceFinderFactory;
+import com.sap.sse.common.Util;
+import com.sap.sse.common.impl.MillisecondsTimePoint;
+import com.sap.sse.shared.media.ImageDescriptor;
+import com.sap.sse.shared.media.VideoDescriptor;
+
+public class MongoObjectFactoryImpl implements MongoObjectFactory {
+ private static Logger logger = Logger.getLogger(MongoObjectFactoryImpl.class.getName());
+ private final DB database;
+ private final CompetitorJsonSerializer competitorSerializer = CompetitorJsonSerializer.create();
+ private final TypeBasedServiceFinder deviceIdentifierServiceFinder;
+
+ /**
+ * Uses null for the device type service finder and hence will be unable to store device identifiers.
+ * Use this constructor only for testing purposes or in cases where there will happen absolutely no access to
+ * {@link DeviceIdentifier} objects.
+ */
+ public MongoObjectFactoryImpl(DB database) {
+ this(database, /* deviceTypeServiceFinder */ null);
+ }
+
+ public MongoObjectFactoryImpl(DB database, TypeBasedServiceFinderFactory serviceFinderFactory) {
+ this.database = database;
+ if (serviceFinderFactory != null) {
+ this.deviceIdentifierServiceFinder = serviceFinderFactory.createServiceFinder(DeviceIdentifierMongoHandler.class);
+ this.deviceIdentifierServiceFinder.setFallbackService(new PlaceHolderDeviceIdentifierMongoHandler());
+ } else {
+ this.deviceIdentifierServiceFinder = null;
+ }
+ }
+
+ @Override
+ public DB getDatabase() {
+ return database;
+ }
+
+ public DBObject storeWind(Wind wind) {
+ DBObject result = new BasicDBObject();
+ storePositioned(wind, result);
+ storeTimed(wind, result);
+ storeSpeedWithBearing(wind, result);
+ return result;
+ }
+
+ public static void storeTimePoint(TimePoint timePoint, DBObject result, String fieldName) {
+ if (timePoint != null) {
+ result.put(fieldName, timePoint.asMillis());
+ }
+ }
+
+ public static void storeTimePoint(TimePoint timePoint, DBObject result, FieldNames field) {
+ storeTimePoint(timePoint, result, field.name());
+ }
+
+ public static void storeTimeRange(TimeRange timeRange, DBObject result, FieldNames field) {
+ if (timeRange != null) {
+ DBObject timeRangeObj = new BasicDBObject();
+ storeTimePoint(timeRange.from(), timeRangeObj, FieldNames.FROM_MILLIS);
+ storeTimePoint(timeRange.to(), timeRangeObj, FieldNames.TO_MILLIS);
+ result.put(field.name(), timeRangeObj);
+ }
+ }
+
+ public void storeTimed(Timed timed, DBObject result) {
+ if (timed.getTimePoint() != null) {
+ storeTimePoint(timed.getTimePoint(), result, FieldNames.TIME_AS_MILLIS);
+ }
+ }
+
+ public void storeSpeedWithBearing(SpeedWithBearing speedWithBearing, DBObject result) {
+ storeSpeed(speedWithBearing, result);
+ storeBearing(speedWithBearing.getBearing(), result);
+
+ }
+
+ public void storeBearing(Bearing bearing, DBObject result) {
+ result.put(FieldNames.DEGREE_BEARING.name(), bearing.getDegrees());
+ }
+
+ public void storeSpeed(Speed speed, DBObject result) {
+ result.put(FieldNames.KNOT_SPEED.name(), speed.getKnots());
+ }
+
+ public void storePositioned(Positioned positioned, DBObject result) {
+ if (positioned.getPosition() != null) {
+ result.put(FieldNames.LAT_DEG.name(), positioned.getPosition().getLatDeg());
+ result.put(FieldNames.LNG_DEG.name(), positioned.getPosition().getLngDeg());
+ }
+ }
+
+ @Override
+ public void addWindTrackDumper(TrackedRegatta trackedRegatta, TrackedRace trackedRace, WindSource windSource) {
+ WindTrack windTrack = trackedRace.getOrCreateWindTrack(windSource);
+ windTrack.addListener(new MongoWindListener(trackedRace, trackedRegatta.getRegatta().getName(), windSource, this, database));
+ }
+
+ public DBCollection getWindTrackCollection() {
+ DBCollection result = database.getCollection(CollectionNames.WIND_TRACKS.name());
+ result.createIndex(new BasicDBObject(FieldNames.REGATTA_NAME.name(), null));
+ return result;
+ }
+
+ public DBCollection getGPSFixCollection() {
+ DBCollection gpsFixCollection = database.getCollection(CollectionNames.GPS_FIXES.name());
+ DBObject index = new BasicDBObject();
+ index.put(FieldNames.DEVICE_ID.name(), null);
+ index.put(FieldNames.TIME_AS_MILLIS.name(), null);
+ gpsFixCollection.createIndex(index);
+ return gpsFixCollection;
+ }
+
+ public DBCollection getGPSFixMetadataCollection() {
+ DBCollection collection = database.getCollection(CollectionNames.GPS_FIXES_METADATA.name());
+ DBObject index = new BasicDBObject();
+ index.put(FieldNames.DEVICE_ID.name(), null);
+ collection.createIndex(index);
+ return collection;
+ }
+
+ /**
+ * @param regattaName
+ * the regatta name is stored only for human readability purposes because a time stamp may be a bit unhandy for
+ * identifying where the wind fix was collected
+ */
+ public DBObject storeWindTrackEntry(RaceDefinition race, String regattaName, WindSource windSource, Wind wind) {
+ BasicDBObject result = new BasicDBObject();
+ result.put(FieldNames.RACE_ID.name(), race.getId());
+ result.put(FieldNames.REGATTA_NAME.name(), regattaName);
+ result.put(FieldNames.WIND_SOURCE_NAME.name(), windSource.name());
+ if (windSource.getId() != null) {
+ result.put(FieldNames.WIND_SOURCE_ID.name(), windSource.getId());
+ }
+ result.put(FieldNames.WIND.name(), storeWind(wind));
+ return result;
+ }
+
+ private void storeRaceIdentifiers(RaceColumn raceColumn, DBObject dbObject) {
+ BasicDBObject raceIdentifiersPerFleet = new BasicDBObject();
+ for (Fleet fleet : raceColumn.getFleets()) {
+ RaceIdentifier raceIdentifier = raceColumn.getRaceIdentifier(fleet);
+ if (raceIdentifier != null) {
+ DBObject raceIdentifierForFleet = new BasicDBObject();
+ storeRaceIdentifier(raceIdentifierForFleet, raceIdentifier);
+ raceIdentifiersPerFleet.put(MongoUtils.escapeDollarAndDot(fleet.getName()), raceIdentifierForFleet);
+ }
+ }
+ dbObject.put(FieldNames.RACE_IDENTIFIERS.name(), raceIdentifiersPerFleet);
+ }
+
+ private void storeRaceIdentifier(DBObject dbObject, RaceIdentifier raceIdentifier) {
+ if (raceIdentifier != null) {
+ dbObject.put(FieldNames.EVENT_NAME.name(), raceIdentifier.getRegattaName());
+ dbObject.put(FieldNames.RACE_NAME.name(), raceIdentifier.getRaceName());
+ }
+ }
+
+ @Override
+ public void storeLeaderboard(Leaderboard leaderboard) {
+ DBCollection leaderboardCollection = database.getCollection(CollectionNames.LEADERBOARDS.name());
+ try {
+ leaderboardCollection.createIndex(new BasicDBObject(FieldNames.LEADERBOARD_NAME.name(), 1));
+ } catch (NullPointerException npe) {
+ // sometimes, for reasons yet to be clarified, ensuring an index on the name field causes an NPE
+ logger.log(Level.SEVERE, "storeLeaderboard", npe);
+ }
+ BasicDBObject query = new BasicDBObject(FieldNames.LEADERBOARD_NAME.name(), leaderboard.getName());
+ BasicDBObject dbLeaderboard = new BasicDBObject();
+ dbLeaderboard.put(FieldNames.LEADERBOARD_NAME.name(), leaderboard.getName());
+ if (leaderboard.getDisplayName() != null) {
+ dbLeaderboard.put(FieldNames.LEADERBOARD_DISPLAY_NAME.name(), leaderboard.getDisplayName());
+ }
+ BasicDBList dbSuppressedCompetitorIds = new BasicDBList();
+ for (Competitor suppressedCompetitor : leaderboard.getSuppressedCompetitors()) {
+ dbSuppressedCompetitorIds.add(suppressedCompetitor.getId());
+ }
+ dbLeaderboard.put(FieldNames.LEADERBOARD_SUPPRESSED_COMPETITOR_IDS.name(), dbSuppressedCompetitorIds);
+ if (leaderboard instanceof FlexibleLeaderboard) {
+ storeFlexibleLeaderboard((FlexibleLeaderboard) leaderboard, dbLeaderboard);
+ } else if (leaderboard instanceof RegattaLeaderboard) {
+ storeRegattaLeaderboard((RegattaLeaderboard) leaderboard, dbLeaderboard);
+ } else {
+ // at least store the scoring scheme
+ dbLeaderboard.put(FieldNames.SCORING_SCHEME_TYPE.name(), leaderboard.getScoringScheme().getType().name());
+ }
+ if (leaderboard.getDefaultCourseArea() != null) {
+ dbLeaderboard.put(FieldNames.COURSE_AREA_ID.name(), leaderboard.getDefaultCourseArea().getId().toString());
+ } else {
+ dbLeaderboard.put(FieldNames.COURSE_AREA_ID.name(), null);
+ }
+ storeColumnFactors(leaderboard, dbLeaderboard);
+ storeLeaderboardCorrectionsAndDiscards(leaderboard, dbLeaderboard);
+ leaderboardCollection.update(query, dbLeaderboard, /* upsrt */ true, /* multi */ false, WriteConcern.SAFE);
+ }
+
+ private void storeColumnFactors(Leaderboard leaderboard, BasicDBObject dbLeaderboard) {
+ DBObject raceColumnFactors = new BasicDBObject();
+ for (RaceColumn raceColumn : leaderboard.getRaceColumns()) {
+ Double explicitFactor = raceColumn.getExplicitFactor();
+ if (explicitFactor != null) {
+ raceColumnFactors.put(MongoUtils.escapeDollarAndDot(raceColumn.getName()), explicitFactor);
+ }
+ }
+ dbLeaderboard.put(FieldNames.LEADERBOARD_COLUMN_FACTORS.name(), raceColumnFactors);
+ }
+
+ private void storeRegattaLeaderboard(RegattaLeaderboard leaderboard, DBObject dbLeaderboard) {
+ dbLeaderboard.put(FieldNames.REGATTA_NAME.name(), leaderboard.getRegatta().getName());
+ }
+
+ private void storeFlexibleLeaderboard(FlexibleLeaderboard leaderboard, BasicDBObject dbLeaderboard) {
+ BasicDBList dbRaceColumns = new BasicDBList();
+ dbLeaderboard.put(FieldNames.SCORING_SCHEME_TYPE.name(), leaderboard.getScoringScheme().getType().name());
+ dbLeaderboard.put(FieldNames.LEADERBOARD_COLUMNS.name(), dbRaceColumns);
+ for (RaceColumn raceColumn : leaderboard.getRaceColumns()) {
+ BasicDBObject dbRaceColumn = storeRaceColumn(raceColumn);
+ dbRaceColumns.add(dbRaceColumn);
+ }
+ }
+
+ private void storeLeaderboardCorrectionsAndDiscards(Leaderboard leaderboard, BasicDBObject dbLeaderboard) {
+ if (leaderboard.hasCarriedPoints()) {
+ BasicDBList dbCarriedPoints = new BasicDBList();
+ dbLeaderboard.put(FieldNames.LEADERBOARD_CARRIED_POINTS_BY_ID.name(), dbCarriedPoints);
+ for (Entry competitorWithCarriedPoints : leaderboard
+ .getCompetitorsForWhichThereAreCarriedPoints().entrySet()) {
+ double carriedPoints = competitorWithCarriedPoints.getValue();
+ Competitor competitor = competitorWithCarriedPoints.getKey();
+ DBObject dbCarriedPointsForCompetitor = new BasicDBObject();
+ dbCarriedPointsForCompetitor.put(FieldNames.COMPETITOR_ID.name(), competitor.getId());
+ dbCarriedPointsForCompetitor.put(FieldNames.LEADERBOARD_CARRIED_POINTS.name(), carriedPoints);
+ dbCarriedPoints.add(dbCarriedPointsForCompetitor);
+ }
+ }
+ BasicDBObject dbScoreCorrections = new BasicDBObject();
+ storeScoreCorrections(leaderboard, dbScoreCorrections);
+ dbLeaderboard.put(FieldNames.LEADERBOARD_SCORE_CORRECTIONS.name(), dbScoreCorrections);
+ final ResultDiscardingRule resultDiscardingRule = leaderboard.getResultDiscardingRule();
+ storeResultDiscardingRule(dbLeaderboard, resultDiscardingRule, FieldNames.LEADERBOARD_DISCARDING_THRESHOLDS);
+ BasicDBList competitorDisplayNames = new BasicDBList();
+ for (Competitor competitor : leaderboard.getCompetitors()) {
+ String displayNameForCompetitor = leaderboard.getDisplayName(competitor);
+ if (displayNameForCompetitor != null) {
+ DBObject dbDisplayName = new BasicDBObject();
+ dbDisplayName.put(FieldNames.COMPETITOR_ID.name(), competitor.getId());
+ dbDisplayName.put(FieldNames.COMPETITOR_DISPLAY_NAME.name(), displayNameForCompetitor);
+ competitorDisplayNames.add(dbDisplayName);
+ }
+ }
+ dbLeaderboard.put(FieldNames.LEADERBOARD_COMPETITOR_DISPLAY_NAMES.name(), competitorDisplayNames);
+ }
+
+ /**
+ * Stores the result discarding rule to dbObject's field identified by field if the result discarding
+ * rule is not null and is of type {@link ThresholdBasedResultDiscardingRule}. Otherwise, it is assumed that the
+ * result discarding rule is otherwise implicitly obtained, e.g., from a definition of a regatta with its series, stored elsewhere.
+ */
+ private void storeResultDiscardingRule(DBObject dbObject,
+ final ResultDiscardingRule resultDiscardingRule, FieldNames field) {
+ if (resultDiscardingRule != null && resultDiscardingRule instanceof ThresholdBasedResultDiscardingRule) {
+ BasicDBList dbResultDiscardingThresholds = new BasicDBList();
+ for (int threshold : ((ThresholdBasedResultDiscardingRule) resultDiscardingRule).getDiscardIndexResultsStartingWithHowManyRaces()) {
+ dbResultDiscardingThresholds.add(threshold);
+ }
+ dbObject.put(field.name(), dbResultDiscardingThresholds);
+ }
+ }
+
+ private BasicDBObject storeRaceColumn(RaceColumn raceColumn) {
+ BasicDBObject dbRaceColumn = new BasicDBObject();
+ dbRaceColumn.put(FieldNames.LEADERBOARD_COLUMN_NAME.name(), raceColumn.getName());
+ dbRaceColumn.put(FieldNames.LEADERBOARD_IS_MEDAL_RACE_COLUMN.name(), raceColumn.isMedalRace());
+ storeRaceIdentifiers(raceColumn, dbRaceColumn);
+ return dbRaceColumn;
+ }
+
+ private void storeScoreCorrections(Leaderboard leaderboard, BasicDBObject dbScoreCorrections) {
+ TimePoint now = MillisecondsTimePoint.now();
+ SettableScoreCorrection scoreCorrection = leaderboard.getScoreCorrection();
+ for (RaceColumn raceColumn : scoreCorrection.getRaceColumnsThatHaveCorrections()) {
+ BasicDBList dbCorrectionForRace = new BasicDBList();
+ for (Competitor competitor : scoreCorrection.getCompetitorsThatHaveCorrectionsIn(raceColumn)) {
+ // TODO bug 655: make score corrections time dependent
+ if (scoreCorrection.isScoreCorrected(competitor, raceColumn, now)) {
+ BasicDBObject dbCorrectionForCompetitor = new BasicDBObject();
+ dbCorrectionForCompetitor.put(FieldNames.COMPETITOR_ID.name(), competitor.getId());
+ MaxPointsReason maxPointsReason = scoreCorrection.getMaxPointsReason(competitor, raceColumn, now);
+ if (maxPointsReason != MaxPointsReason.NONE) {
+ dbCorrectionForCompetitor.put(FieldNames.LEADERBOARD_SCORE_CORRECTION_MAX_POINTS_REASON.name(),
+ maxPointsReason.name());
+ }
+ Double explicitScoreCorrection = scoreCorrection
+ .getExplicitScoreCorrection(competitor, raceColumn);
+ if (explicitScoreCorrection != null) {
+ dbCorrectionForCompetitor.put(FieldNames.LEADERBOARD_CORRECTED_SCORE.name(),
+ explicitScoreCorrection);
+ }
+ dbCorrectionForRace.add(dbCorrectionForCompetitor);
+ }
+ }
+ if (!dbCorrectionForRace.isEmpty()) {
+ // using the column name as the key for the score corrections requires re-writing the score corrections
+ // of a meta-leaderboard if the name of one of its leaderboards changes
+ dbScoreCorrections.put(MongoUtils.escapeDollarAndDot(raceColumn.getName()), dbCorrectionForRace);
+ }
+ }
+ final TimePoint timePointOfLastCorrectionsValidity = scoreCorrection.getTimePointOfLastCorrectionsValidity();
+ if (timePointOfLastCorrectionsValidity != null) {
+ dbScoreCorrections.put(FieldNames.LEADERBOARD_SCORE_CORRECTION_TIMESTAMP.name(), timePointOfLastCorrectionsValidity.asMillis());
+ }
+ if (scoreCorrection.getComment() != null) {
+ dbScoreCorrections.put(FieldNames.LEADERBOARD_SCORE_CORRECTION_COMMENT.name(), scoreCorrection.getComment());
+ }
+ }
+
+ @Override
+ public void removeLeaderboard(String leaderboardName) {
+ DBCollection leaderboardCollection = database.getCollection(CollectionNames.LEADERBOARDS.name());
+ BasicDBObject query = new BasicDBObject(FieldNames.LEADERBOARD_NAME.name(), leaderboardName);
+ leaderboardCollection.remove(query);
+ }
+
+ @Override
+ public void renameLeaderboard(String oldName, String newName) {
+ DBCollection leaderboardCollection = database.getCollection(CollectionNames.LEADERBOARDS.name());
+ BasicDBObject query = new BasicDBObject(FieldNames.LEADERBOARD_NAME.name(), oldName);
+ BasicDBObject renameUpdate = new BasicDBObject("$set", new BasicDBObject(FieldNames.LEADERBOARD_NAME.name(), newName));
+ leaderboardCollection.update(query, renameUpdate, /* upsert */ true, /* multi */ false, WriteConcern.SAFE);
+ }
+
+ @Override
+ public void storeLeaderboardGroup(LeaderboardGroup leaderboardGroup) {
+ DBCollection leaderboardGroupCollection = database.getCollection(CollectionNames.LEADERBOARD_GROUPS.name());
+ DBCollection leaderboardCollection = database.getCollection(CollectionNames.LEADERBOARDS.name());
+
+ try {
+ leaderboardGroupCollection.createIndex(new BasicDBObject(FieldNames.LEADERBOARD_GROUP_NAME.name(), 1));
+ } catch (NullPointerException npe) {
+ // sometimes, for reasons yet to be clarified, ensuring an index on the name field causes an NPE
+ logger.log(Level.SEVERE, "storeLeaderboardGroup", npe);
+ }
+ BasicDBObject query = new BasicDBObject(FieldNames.LEADERBOARD_GROUP_NAME.name(), leaderboardGroup.getName());
+ BasicDBObject dbLeaderboardGroup = new BasicDBObject();
+ dbLeaderboardGroup.put(FieldNames.LEADERBOARD_GROUP_UUID.name(), leaderboardGroup.getId());
+ dbLeaderboardGroup.put(FieldNames.LEADERBOARD_GROUP_NAME.name(), leaderboardGroup.getName());
+ dbLeaderboardGroup.put(FieldNames.LEADERBOARD_GROUP_DESCRIPTION.name(), leaderboardGroup.getDescription());
+ dbLeaderboardGroup.put(FieldNames.LEADERBOARD_GROUP_DISPLAY_NAME.name(), leaderboardGroup.getDisplayName());
+ dbLeaderboardGroup.put(FieldNames.LEADERBOARD_GROUP_DISPLAY_IN_REVERSE_ORDER.name(), leaderboardGroup.isDisplayGroupsInReverseOrder());
+ final Leaderboard overallLeaderboard = leaderboardGroup.getOverallLeaderboard();
+ if (overallLeaderboard != null) {
+ BasicDBObject overallLeaderboardQuery = new BasicDBObject(FieldNames.LEADERBOARD_NAME.name(), overallLeaderboard.getName());
+ DBObject dbOverallLeaderboard = leaderboardCollection.findOne(overallLeaderboardQuery);
+ if (dbOverallLeaderboard == null) {
+ storeLeaderboard(overallLeaderboard);
+ dbOverallLeaderboard = leaderboardCollection.findOne(overallLeaderboardQuery);
+ }
+ ObjectId dbOverallLeaderboardId = (ObjectId) dbOverallLeaderboard.get("_id");
+ dbLeaderboardGroup.put(FieldNames.LEADERBOARD_GROUP_OVERALL_LEADERBOARD.name(), dbOverallLeaderboardId);
+ }
+ BasicDBList dbLeaderboardIds = new BasicDBList();
+ for (Leaderboard leaderboard : leaderboardGroup.getLeaderboards()) {
+ BasicDBObject leaderboardQuery = new BasicDBObject(FieldNames.LEADERBOARD_NAME.name(), leaderboard.getName());
+ DBObject dbLeaderboard = leaderboardCollection.findOne(leaderboardQuery);
+ if (dbLeaderboard == null) {
+ storeLeaderboard(leaderboard);
+ dbLeaderboard = leaderboardCollection.findOne(leaderboardQuery);
+ }
+ ObjectId dbLeaderboardId = (ObjectId) dbLeaderboard.get("_id");
+ dbLeaderboardIds.add(dbLeaderboardId);
+ }
+ dbLeaderboardGroup.put(FieldNames.LEADERBOARD_GROUP_LEADERBOARDS.name(), dbLeaderboardIds);
+ leaderboardGroupCollection.update(query, dbLeaderboardGroup, true, false, WriteConcern.SAFE);
+ }
+
+ @Override
+ public void removeLeaderboardGroup(String groupName) {
+ DBCollection leaderboardGroupCollection = database.getCollection(CollectionNames.LEADERBOARD_GROUPS.name());
+ BasicDBObject query = new BasicDBObject(FieldNames.LEADERBOARD_GROUP_NAME.name(), groupName);
+ leaderboardGroupCollection.remove(query);
+ }
+
+ @Override
+ public void renameLeaderboardGroup(String oldName, String newName) {
+ DBCollection leaderboardGroupCollection = database.getCollection(CollectionNames.LEADERBOARD_GROUPS.name());
+ BasicDBObject query = new BasicDBObject(FieldNames.LEADERBOARD_GROUP_NAME.name(), oldName);
+ BasicDBObject update = new BasicDBObject("$set", new BasicDBObject(FieldNames.LEADERBOARD_GROUP_NAME.name(), newName));
+ leaderboardGroupCollection.update(query, update, /* upsert */ true, /* multi */ false, WriteConcern.SAFE);
+ }
+
+ @Override
+ public void storeServerConfiguration(SailingServerConfiguration serverConfiguration) {
+ DBCollection serverCollection = database.getCollection(CollectionNames.SERVER_CONFIGURATION.name());
+ DBObject newServerConfig = new BasicDBObject();
+ newServerConfig.put(FieldNames.SERVER_IS_STANDALONE.name(), serverConfiguration.isStandaloneServer());
+ DBObject currentServerConfig = serverCollection.findOne();
+ if(currentServerConfig != null) {
+ serverCollection.update(currentServerConfig, newServerConfig, /* upsrt */ true, /* multi */ false, WriteConcern.SAFE);
+ } else {
+ serverCollection.save(newServerConfig);
+ }
+ }
+
+ @Override
+ public void storeSailingServer(RemoteSailingServerReference server) {
+ DBCollection serverCollection = database.getCollection(CollectionNames.SAILING_SERVERS.name());
+ serverCollection.createIndex(new BasicDBObject(FieldNames.SERVER_NAME.name(), 1));
+ DBObject query = new BasicDBObject();
+ query.put(FieldNames.SERVER_NAME.name(), server.getName());
+ DBObject serverDBObject = new BasicDBObject();
+ serverDBObject.put(FieldNames.SERVER_NAME.name(), server.getName());
+ serverDBObject.put(FieldNames.SERVER_URL.name(), server.getURL().toExternalForm());
+ serverCollection.update(query, serverDBObject, /* upsrt */ true, /* multi */ false, WriteConcern.SAFE);
+ }
+
+ @Override
+ public void removeSailingServer(String name) {
+ DBCollection serverCollection = database.getCollection(CollectionNames.SAILING_SERVERS.name());
+ BasicDBObject query = new BasicDBObject(FieldNames.SERVER_NAME.name(), name);
+ serverCollection.remove(query);
+ }
+
+ /**
+ * StoreEvent() uses some deprecated methods of event to keep backward compatibility.
+ */
+ @SuppressWarnings("deprecation")
+ @Override
+ public void storeEvent(Event event) {
+ DBCollection eventCollection = database.getCollection(CollectionNames.EVENTS.name());
+ eventCollection.createIndex(new BasicDBObject(FieldNames.EVENT_ID.name(), 1));
+ DBObject query = new BasicDBObject();
+ query.put(FieldNames.EVENT_ID.name(), event.getId());
+ DBObject eventDBObject = new BasicDBObject();
+ eventDBObject.put(FieldNames.EVENT_NAME.name(), event.getName());
+ eventDBObject.put(FieldNames.EVENT_DESCRIPTION.name(), event.getDescription());
+ eventDBObject.put(FieldNames.EVENT_ID.name(), event.getId());
+ eventDBObject.put(FieldNames.EVENT_LOGO_IMAGE_URL.name(), event.getLogoImageURL() != null ? event.getLogoImageURL().toString() : null);
+ eventDBObject.put(FieldNames.EVENT_OFFICIAL_WEBSITE_URL.name(), event.getOfficialWebsiteURL() != null ? event.getOfficialWebsiteURL().toString() : null);
+ eventDBObject.put(FieldNames.EVENT_SAILORS_INFO_WEBSITE_URL.name(), event.getSailorsInfoWebsiteURL() != null ? event.getSailorsInfoWebsiteURL().toString() : null);
+ storeTimePoint(event.getStartDate(), eventDBObject, FieldNames.EVENT_START_DATE);
+ storeTimePoint(event.getEndDate(), eventDBObject, FieldNames.EVENT_END_DATE);
+ eventDBObject.put(FieldNames.EVENT_IS_PUBLIC.name(), event.isPublic());
+ DBObject venueDBObject = getVenueAsDBObject(event.getVenue());
+ eventDBObject.put(FieldNames.VENUE.name(), venueDBObject);
+ BasicDBList imageURLs = new BasicDBList();
+ for (URL imageURL : event.getImageURLs()) {
+ imageURLs.add(imageURL.toString());
+ }
+ eventDBObject.put(FieldNames.EVENT_IMAGE_URLS.name(), imageURLs);
+ BasicDBList videoURLs = new BasicDBList();
+ for (URL videoURL : event.getVideoURLs()) {
+ videoURLs.add(videoURL.toString());
+ }
+ eventDBObject.put(FieldNames.EVENT_VIDEO_URLS.name(), videoURLs);
+ BasicDBList sponsorImageURLs = new BasicDBList();
+ for (URL sponsorImageURL : event.getSponsorImageURLs()) {
+ sponsorImageURLs.add(sponsorImageURL.toString());
+ }
+ eventDBObject.put(FieldNames.EVENT_SPONSOR_IMAGE_URLS.name(), sponsorImageURLs);
+ BasicDBList images = new BasicDBList();
+ for (ImageDescriptor image : event.getImages()) {
+ DBObject imageObject = createImageObject(image);
+ images.add(imageObject);
+ }
+ eventDBObject.put(FieldNames.EVENT_IMAGES.name(), images);
+ BasicDBList videos = new BasicDBList();
+ for (VideoDescriptor video: event.getVideos()) {
+ DBObject videoObject = createVideoObject(video);
+ videos.add(videoObject);
+ }
+ eventDBObject.put(FieldNames.EVENT_VIDEOS.name(), videos);
+ eventCollection.update(query, eventDBObject, /* upsrt */ true, /* multi */ false, WriteConcern.SAFE);
+ // now store the links to the leaderboard groups
+ DBCollection linksCollection = database.getCollection(CollectionNames.LEADERBOARD_GROUP_LINKS_FOR_EVENTS.name());
+ linksCollection.createIndex(new BasicDBObject(FieldNames.EVENT_ID.name(), 1));
+ BasicDBList lgUUIDs = new BasicDBList();
+ for (LeaderboardGroup lg : event.getLeaderboardGroups()) {
+ lgUUIDs.add(lg.getId());
+ }
+ DBObject dbLinks = new BasicDBObject();
+ dbLinks.put(FieldNames.EVENT_ID.name(), event.getId());
+ dbLinks.put(FieldNames.LEADERBOARD_GROUP_UUID.name(), lgUUIDs);
+ linksCollection.update(query, dbLinks, /* upsrt */ true, /* multi */ false, WriteConcern.SAFE);
+ }
+
+ @Override
+ public void renameEvent(Serializable id, String newName) {
+ DBCollection eventCollection = database.getCollection(CollectionNames.EVENTS.name());
+ BasicDBObject query = new BasicDBObject(FieldNames.EVENT_ID.name(), id);
+ BasicDBObject renameUpdate = new BasicDBObject("$set", new BasicDBObject(FieldNames.EVENT_NAME.name(), newName));
+ eventCollection.update(query, renameUpdate, /* upsert */ true, /* multi */ false, WriteConcern.SAFE);
+ }
+
+ @Override
+ public void removeEvent(Serializable id) {
+ DBCollection eventsCollection = database.getCollection(CollectionNames.EVENTS.name());
+ BasicDBObject query = new BasicDBObject(FieldNames.EVENT_ID.name(), id);
+ eventsCollection.remove(query);
+ }
+
+ private DBObject getVenueAsDBObject(Venue venue) {
+ DBObject result = new BasicDBObject();
+ result.put(FieldNames.VENUE_NAME.name(), venue.getName());
+ BasicDBList courseAreaList = new BasicDBList();
+ result.put(FieldNames.COURSE_AREAS.name(), courseAreaList);
+ for (CourseArea courseArea : venue.getCourseAreas()) {
+ DBObject dbCourseArea = new BasicDBObject();
+ courseAreaList.add(dbCourseArea);
+ dbCourseArea.put(FieldNames.COURSE_AREA_NAME.name(), courseArea.getName());
+ dbCourseArea.put(FieldNames.COURSE_AREA_ID.name(), courseArea.getId());
+ }
+ return result;
+ }
+
+ @Override
+ public void storeRegatta(Regatta regatta) {
+ DBCollection regattasCollection = database.getCollection(CollectionNames.REGATTAS.name());
+ regattasCollection.createIndex(new BasicDBObject(FieldNames.REGATTA_NAME.name(), 1));
+ regattasCollection.createIndex(new BasicDBObject(FieldNames.REGATTA_ID.name(), 1));
+ DBObject dbRegatta = new BasicDBObject();
+ DBObject query = new BasicDBObject(FieldNames.REGATTA_NAME.name(), regatta.getName());
+ dbRegatta.put(FieldNames.REGATTA_NAME.name(), regatta.getName());
+ dbRegatta.put(FieldNames.REGATTA_ID.name(), regatta.getId());
+ storeTimePoint(regatta.getStartDate(), dbRegatta, FieldNames.REGATTA_START_DATE);
+ storeTimePoint(regatta.getEndDate(), dbRegatta, FieldNames.REGATTA_END_DATE);
+ dbRegatta.put(FieldNames.SCORING_SCHEME_TYPE.name(), regatta.getScoringScheme().getType().name());
+ if (regatta.getBoatClass() != null) {
+ dbRegatta.put(FieldNames.BOAT_CLASS_NAME.name(), regatta.getBoatClass().getName());
+ dbRegatta.put(FieldNames.BOAT_CLASS_TYPICALLY_STARTS_UPWIND.name(), regatta.getBoatClass().typicallyStartsUpwind());
+ }
+ dbRegatta.put(FieldNames.REGATTA_SERIES.name(), storeSeries(regatta.getSeries()));
+
+ if (regatta.getDefaultCourseArea() != null) {
+ dbRegatta.put(FieldNames.COURSE_AREA_ID.name(), regatta.getDefaultCourseArea().getId().toString());
+ } else {
+ dbRegatta.put(FieldNames.COURSE_AREA_ID.name(), null);
+ }
+ if (regatta.getRegattaConfiguration() != null) {
+ JsonSerializer serializer = RegattaConfigurationJsonSerializer.create();
+ JSONObject json = serializer.serialize(regatta.getRegattaConfiguration());
+ DBObject configurationObject = (DBObject) JSON.parse(json.toString());
+ dbRegatta.put(FieldNames.REGATTA_REGATTA_CONFIGURATION.name(), configurationObject);
+ }
+ dbRegatta.put(FieldNames.REGATTA_USE_START_TIME_INFERENCE.name(), regatta.useStartTimeInference());
+ dbRegatta.put(FieldNames.REGATTA_RANKING_METRIC.name(), storeRankingMetric(regatta));
+ regattasCollection.update(query, dbRegatta, /* upsrt */ true, /* multi */ false, WriteConcern.SAFE);
+ }
+
+ private DBObject storeRankingMetric(Regatta regatta) {
+ DBObject rankingMetricJson = new BasicDBObject();
+ final String rankingMetricTypeName = regatta.getRankingMetricType().name();
+ rankingMetricJson.put(FieldNames.REGATTA_RANKING_METRIC_TYPE.name(), rankingMetricTypeName);
+ return rankingMetricJson;
+ }
+
+ @Override
+ public void removeRegatta(Regatta regatta) {
+ DBCollection regattasCollection = database.getCollection(CollectionNames.REGATTAS.name());
+ DBObject query = new BasicDBObject(FieldNames.REGATTA_NAME.name(), regatta.getName());
+ regattasCollection.remove(query);
+ }
+
+ private BasicDBList storeSeries(Iterable extends Series> series) {
+ BasicDBList dbSeries = new BasicDBList();
+ for (Series s : series) {
+ dbSeries.add(storeSeries(s));
+ }
+ return dbSeries;
+ }
+
+ private DBObject storeSeries(Series s) {
+ DBObject dbSeries = new BasicDBObject();
+ dbSeries.put(FieldNames.SERIES_NAME.name(), s.getName());
+ dbSeries.put(FieldNames.SERIES_IS_MEDAL.name(), s.isMedal());
+ dbSeries.put(FieldNames.SERIES_HAS_SPLIT_FLEET_CONTIGUOUS_SCORING.name(), s.hasSplitFleetContiguousScoring());
+ dbSeries.put(FieldNames.SERIES_STARTS_WITH_ZERO_SCORE.name(), s.isStartsWithZeroScore());
+ dbSeries.put(FieldNames.SERIES_STARTS_WITH_NON_DISCARDABLE_CARRY_FORWARD.name(), s.isFirstColumnIsNonDiscardableCarryForward());
+ BasicDBList dbFleets = new BasicDBList();
+ for (Fleet fleet : s.getFleets()) {
+ dbFleets.add(storeFleet(fleet));
+ }
+ dbSeries.put(FieldNames.SERIES_FLEETS.name(), dbFleets);
+ BasicDBList dbRaceColumns = new BasicDBList();
+ for (RaceColumn raceColumn : s.getRaceColumns()) {
+ dbRaceColumns.add(storeRaceColumn(raceColumn));
+ }
+ dbSeries.put(FieldNames.SERIES_RACE_COLUMNS.name(), dbRaceColumns);
+ if (s.getResultDiscardingRule() != null) {
+ storeResultDiscardingRule(dbSeries, s.getResultDiscardingRule(), FieldNames.SERIES_DISCARDING_THRESHOLDS);
+ }
+ return dbSeries;
+ }
+
+ private DBObject storeFleet(Fleet fleet) {
+ DBObject dbFleet = new BasicDBObject(FieldNames.FLEET_NAME.name(), fleet.getName());
+ if (fleet instanceof FleetImpl) {
+ dbFleet.put(FieldNames.FLEET_ORDERING.name(), ((FleetImpl) fleet).getOrdering());
+ if(fleet.getColor() != null) {
+ com.sap.sse.common.Util.Triple colorAsRGB = fleet.getColor().getAsRGB();
+ // we save the color as a integer value representing the RGB values
+ int colorAsInt = (256 * 256 * colorAsRGB.getC()) + colorAsRGB.getB() * 256 + colorAsRGB.getA();
+ dbFleet.put(FieldNames.FLEET_COLOR.name(), colorAsInt);
+ } else {
+ dbFleet.put(FieldNames.FLEET_COLOR.name(), null);
+ }
+ }
+ return dbFleet;
+ }
+
+ @Override
+ public void storeRegattaForRaceID(String raceIDAsString, Regatta regatta) {
+ DBCollection regattaForRaceIDCollection = database.getCollection(CollectionNames.REGATTA_FOR_RACE_ID.name());
+ DBObject query = new BasicDBObject(FieldNames.RACE_ID_AS_STRING.name(), raceIDAsString);
+ DBObject entry = new BasicDBObject(FieldNames.RACE_ID_AS_STRING.name(), raceIDAsString);
+ entry.put(FieldNames.REGATTA_NAME.name(), regatta.getName());
+ regattaForRaceIDCollection.update(query, entry, /* upsrt */ true, /* multi */ false, WriteConcern.SAFE);
+ }
+
+ @Override
+ public void removeRegattaForRaceID(String raceIDAsString, Regatta regatta) {
+ DBCollection regattaForRaceIDCollection = database.getCollection(CollectionNames.REGATTA_FOR_RACE_ID.name());
+ DBObject query = new BasicDBObject(FieldNames.RACE_ID_AS_STRING.name(), raceIDAsString);
+ regattaForRaceIDCollection.remove(query);
+ }
+
+ public DBCollection getRaceLogCollection() {
+ DBCollection result = database.getCollection(CollectionNames.RACE_LOGS.name());
+ result.createIndex(new BasicDBObject(FieldNames.RACE_LOG_IDENTIFIER.name(), null));
+ return result;
+ }
+
+ private void storeRaceLogEventAuthor(DBObject dbObject, AbstractLogEventAuthor author) {
+ if (author != null) {
+ dbObject.put(FieldNames.RACE_LOG_EVENT_AUTHOR_NAME.name(), author.getName());
+ dbObject.put(FieldNames.RACE_LOG_EVENT_AUTHOR_PRIORITY.name(), author.getPriority());
+ }
+ }
+
+ public DBObject storeRaceLogEntry(RaceLogIdentifier raceLogIdentifier, RaceLogFlagEvent flagEvent) {
+ BasicDBObject result = new BasicDBObject();
+ storeRaceLogIdentifier(raceLogIdentifier, result);
+ result.put(FieldNames.RACE_LOG_EVENT.name(), storeRaceLogFlagEvent(flagEvent));
+ return result;
+ }
+
+ private void storeRaceLogIdentifier(RaceLogIdentifier raceLogIdentifier, DBObject result) {
+ result.put(FieldNames.RACE_LOG_IDENTIFIER.name(), TripleSerializer.serialize(raceLogIdentifier.getIdentifier()));
+ }
+
+ public DBObject storeRaceLogEntry(RaceLogIdentifier raceLogIdentifier, RaceLogStartTimeEvent startTimeEvent) {
+ BasicDBObject result = new BasicDBObject();
+ storeRaceLogIdentifier(raceLogIdentifier, result);
+ result.put(FieldNames.RACE_LOG_EVENT.name(), storeRaceLogStartTimeEvent(startTimeEvent));
+ return result;
+ }
+
+ public DBObject storeRaceLogEntry(RaceLogIdentifier raceLogIdentifier, RaceLogPassChangeEvent passChangeEvent) {
+ BasicDBObject result = new BasicDBObject();
+ storeRaceLogIdentifier(raceLogIdentifier, result);
+ result.put(FieldNames.RACE_LOG_EVENT.name(), storeRaceLogPassChangeEvent(passChangeEvent));
+ return result;
+ }
+
+ public DBObject storeRaceLogEntry(RaceLogIdentifier raceLogIdentifier, RaceLogRaceStatusEvent raceStatusEvent) {
+ BasicDBObject result = new BasicDBObject();
+ storeRaceLogIdentifier(raceLogIdentifier, result);
+ result.put(FieldNames.RACE_LOG_EVENT.name(), storeRaceLogRaceStatusEvent(raceStatusEvent));
+ return result;
+ }
+
+ public DBObject storeRaceLogEntry(RaceLogIdentifier raceLogIdentifier, RaceLogCourseAreaChangedEvent courseAreaChangedEvent) {
+ BasicDBObject result = new BasicDBObject();
+ storeRaceLogIdentifier(raceLogIdentifier, result);
+ result.put(FieldNames.RACE_LOG_EVENT.name(), storeRaceLogCourseAreaChangedEvent(courseAreaChangedEvent));
+ return result;
+ }
+
+ public DBObject storeRaceLogEntry(RaceLogIdentifier raceLogIdentifier, RaceLogCourseDesignChangedEvent courseDesignChangedEvent) {
+ BasicDBObject result = new BasicDBObject();
+ storeRaceLogIdentifier(raceLogIdentifier, result);
+ result.put(FieldNames.RACE_LOG_EVENT.name(), storeRaceLogCourseDesignChangedEvent(courseDesignChangedEvent));
+ return result;
+ }
+
+ public DBObject storeRaceLogEntry(RaceLogIdentifier raceLogIdentifier, RaceLogFinishPositioningListChangedEvent finishPositioningListChangedEvent) {
+ BasicDBObject result = new BasicDBObject();
+ storeRaceLogIdentifier(raceLogIdentifier, result);
+ result.put(FieldNames.RACE_LOG_EVENT.name(), storeRaceLogFinishPositioningListChangedEvent(finishPositioningListChangedEvent));
+ return result;
+ }
+
+ public DBObject storeRaceLogEntry(RaceLogIdentifier raceLogIdentifier, RaceLogFinishPositioningConfirmedEvent finishPositioningConfirmedEvent) {
+ BasicDBObject result = new BasicDBObject();
+ storeRaceLogIdentifier(raceLogIdentifier, result);
+ result.put(FieldNames.RACE_LOG_EVENT.name(), storeRaceLogFinishPositioningConfirmedEvent(finishPositioningConfirmedEvent));
+ return result;
+ }
+
+ public DBObject storeRaceLogEntry(RaceLogIdentifier raceLogIdentifier, RaceLogPathfinderEvent pathfinderEvent) {
+ BasicDBObject result = new BasicDBObject();
+ storeRaceLogIdentifier(raceLogIdentifier, result);
+ result.put(FieldNames.RACE_LOG_EVENT.name(), storeRaceLogPathfinderEvent(pathfinderEvent));
+ return result;
+ }
+
+ public DBObject storeRaceLogEntry(RaceLogIdentifier raceLogIdentifier, RaceLogGateLineOpeningTimeEvent gateLineOpeningTimeEvent) {
+ BasicDBObject result = new BasicDBObject();
+ storeRaceLogIdentifier(raceLogIdentifier, result);
+ result.put(FieldNames.RACE_LOG_EVENT.name(), storeRaceLogGateLineOpeningTimeEvent(gateLineOpeningTimeEvent));
+ return result;
+ }
+
+ public DBObject storeRaceLogEntry(RaceLogIdentifier raceLogIdentifier, RaceLogStartProcedureChangedEvent event) {
+ DBObject result = new BasicDBObject();
+ storeRaceLogIdentifier(raceLogIdentifier, result);
+ result.put(FieldNames.RACE_LOG_EVENT.name(), storeRaceLogStartProcedureChangedEvent(event));
+ return result;
+ }
+
+ public DBObject storeRaceLogEntry(RaceLogIdentifier raceLogIdentifier, RaceLogProtestStartTimeEvent event) {
+ DBObject result = new BasicDBObject();
+ storeRaceLogIdentifier(raceLogIdentifier, result);
+ result.put(FieldNames.RACE_LOG_EVENT.name(), storeRaceLogProtestStartTimeEvent(event));
+ return result;
+ }
+
+ public DBObject storeRaceLogEntry(RaceLogIdentifier raceLogIdentifier, RaceLogWindFixEvent event) {
+ DBObject result = new BasicDBObject();
+ storeRaceLogIdentifier(raceLogIdentifier, result);
+ result.put(FieldNames.RACE_LOG_EVENT.name(), storeRaceLogWindFix(event));
+ return result;
+ }
+
+ public DBObject storeRaceLogEntry(RaceLogIdentifier raceLogIdentifier, RaceLogDeviceCompetitorMappingEvent event) {
+ BasicDBObject result = new BasicDBObject();
+ storeRaceLogIdentifier(raceLogIdentifier, result);
+ result.put(FieldNames.RACE_LOG_EVENT.name(), storeRaceLogDeviceCompetitorMappingEvent(event));
+ return result;
+ }
+
+ public DBObject storeRaceLogEntry(RaceLogIdentifier raceLogIdentifier, RaceLogDeviceMarkMappingEvent event) {
+ BasicDBObject result = new BasicDBObject();
+ storeRaceLogIdentifier(raceLogIdentifier, result);
+ result.put(FieldNames.RACE_LOG_EVENT.name(), storeRaceLogDeviceMarkMappingEvent(event));
+ return result;
+ }
+
+ public DBObject storeRaceLogEntry(RaceLogIdentifier raceLogIdentifier, RaceLogDenoteForTrackingEvent event) {
+ BasicDBObject result = new BasicDBObject();
+ storeRaceLogIdentifier(raceLogIdentifier, result);
+ result.put(FieldNames.RACE_LOG_EVENT.name(), storeRaceLogDenoteForTrackingEvent(event));
+ return result;
+ }
+
+ public DBObject storeRaceLogEntry(RaceLogIdentifier raceLogIdentifier, RaceLogStartTrackingEvent event) {
+ BasicDBObject result = new BasicDBObject();
+ storeRaceLogIdentifier(raceLogIdentifier, result);
+ result.put(FieldNames.RACE_LOG_EVENT.name(), storeRaceLogStartTrackingEvent(event));
+ return result;
+ }
+
+ public DBObject storeRaceLogEntry(RaceLogIdentifier raceLogIdentifier, RaceLogRevokeEvent event) {
+ BasicDBObject result = new BasicDBObject();
+ storeRaceLogIdentifier(raceLogIdentifier, result);
+ result.put(FieldNames.RACE_LOG_EVENT.name(), storeRaceLogRevokeEvent(event));
+ return result;
+ }
+
+ public DBObject storeRaceLogEntry(RaceLogIdentifier raceLogIdentifier, RaceLogRegisterCompetitorEvent event) {
+ BasicDBObject result = new BasicDBObject();
+ storeRaceLogIdentifier(raceLogIdentifier, result);
+ result.put(FieldNames.RACE_LOG_EVENT.name(), storeRaceLogRegisterCompetitorEvent(event));
+ return result;
+ }
+
+ public DBObject storeRaceLogEntry(RaceLogIdentifier raceLogIdentifier, RaceLogDefineMarkEvent event) {
+ BasicDBObject result = new BasicDBObject();
+ storeRaceLogIdentifier(raceLogIdentifier, result);
+ result.put(FieldNames.RACE_LOG_EVENT.name(), storeRaceLogDefineMarkEvent(event));
+ return result;
+ }
+
+ public DBObject storeRaceLogEntry(RaceLogIdentifier raceLogIdentifier, RaceLogCloseOpenEndedDeviceMappingEvent event) {
+ BasicDBObject result = new BasicDBObject();
+ storeRaceLogIdentifier(raceLogIdentifier, result);
+ result.put(FieldNames.RACE_LOG_EVENT.name(), storeRaceLogCloseOpenEndedDeviceMappingEvent(event));
+ return result;
+ }
+
+ public DBObject storeRaceLogEntry(RaceLogIdentifier raceLogIdentifier, RaceLogEndOfTrackingEvent event) {
+ BasicDBObject result = new BasicDBObject();
+ storeRaceLogIdentifier(raceLogIdentifier, result);
+ result.put(FieldNames.RACE_LOG_EVENT.name(), storeRaceLogEndOfTrackingEvent(event));
+ return result;
+ }
+
+ public DBObject storeRaceLogEntry(RaceLogIdentifier raceLogIdentifier, RaceLogStartOfTrackingEvent event) {
+ BasicDBObject result = new BasicDBObject();
+ storeRaceLogIdentifier(raceLogIdentifier, result);
+ result.put(FieldNames.RACE_LOG_EVENT.name(), storeRaceLogStartOfTrackingEvent(event));
+ return result;
+ }
+
+ public DBObject storeRaceLogEntry(RaceLogIdentifier raceLogIdentifier, RaceLogAdditionalScoringInformationEvent event) {
+ BasicDBObject result = new BasicDBObject();
+ storeRaceLogIdentifier(raceLogIdentifier, result);
+ result.put(FieldNames.RACE_LOG_EVENT.name(), storeAdditionalScoringInformation(event));
+ return result;
+ }
+
+ private Object storeAdditionalScoringInformation(RaceLogAdditionalScoringInformationEvent event) {
+ DBObject result = new BasicDBObject();
+ storeRaceLogEventProperties(event, result);
+ result.put(FieldNames.RACE_LOG_EVENT_CLASS.name(), RaceLogAdditionalScoringInformationEvent.class.getSimpleName());
+ result.put(FieldNames.RACE_LOG_ADDITIONAL_SCORING_INFORMATION_TYPE.name(), event.getType().name());
+ return result;
+ }
+
+ public DBObject storeRaceLogEntry(RaceLogIdentifier raceLogIdentifier, RaceLogFixedMarkPassingEvent event) {
+ BasicDBObject result = new BasicDBObject();
+ storeRaceLogIdentifier(raceLogIdentifier, result);
+ result.put(FieldNames.RACE_LOG_EVENT.name(), storeRaceLogFixedMarkPassingEvent(event));
+ return result;
+ }
+
+ public DBObject storeRaceLogEntry(RaceLogIdentifier raceLogIdentifier, RaceLogSuppressedMarkPassingsEvent event) {
+ BasicDBObject result = new BasicDBObject();
+ storeRaceLogIdentifier(raceLogIdentifier, result);
+ result.put(FieldNames.RACE_LOG_EVENT.name(), storeRaceLogSuppressedMarkPassingsEvent(event));
+ return result;
+ }
+
+ private Object storeRaceLogWindFix(RaceLogWindFixEvent event) {
+ DBObject result = new BasicDBObject();
+ storeRaceLogEventProperties(event, result);
+ result.put(FieldNames.RACE_LOG_EVENT_CLASS.name(), RaceLogWindFixEvent.class.getSimpleName());
+ result.put(FieldNames.WIND.name(), storeWind(event.getWindFix()));
+ result.put(FieldNames.IS_MAGNETIC.name(), event.isMagnetic());
+ return result;
+ }
+
+ private Object storeRaceLogProtestStartTimeEvent(RaceLogProtestStartTimeEvent event) {
+ DBObject result = new BasicDBObject();
+ storeRaceLogEventProperties(event, result);
+ result.put(FieldNames.RACE_LOG_EVENT_CLASS.name(), RaceLogProtestStartTimeEvent.class.getSimpleName());
+ storeTimePoint(event.getProtestStartTime(), result, FieldNames.RACE_LOG_PROTEST_START_TIME);
+ return result;
+ }
+
+ private Object storeRaceLogEndOfTrackingEvent(RaceLogEndOfTrackingEvent event) {
+ DBObject result = new BasicDBObject();
+ storeRaceLogEventProperties(event, result);
+ result.put(FieldNames.RACE_LOG_EVENT_CLASS.name(), RaceLogEndOfTrackingEvent.class.getSimpleName());
+ return result;
+ }
+
+ private Object storeRaceLogStartOfTrackingEvent(RaceLogStartOfTrackingEvent event) {
+ DBObject result = new BasicDBObject();
+ storeRaceLogEventProperties(event, result);
+ result.put(FieldNames.RACE_LOG_EVENT_CLASS.name(), RaceLogStartOfTrackingEvent.class.getSimpleName());
+ return result;
+ }
+
+ private Object storeRaceLogStartProcedureChangedEvent(RaceLogStartProcedureChangedEvent event) {
+ DBObject result = new BasicDBObject();
+ storeRaceLogEventProperties(event, result);
+ result.put(FieldNames.RACE_LOG_EVENT_CLASS.name(), RaceLogStartProcedureChangedEvent.class.getSimpleName());
+ result.put(FieldNames.RACE_LOG_START_PROCEDURE_TYPE.name(), event.getStartProcedureType().name());
+ return result;
+ }
+
+ private Object storeRaceLogPathfinderEvent(RaceLogPathfinderEvent pathfinderEvent) {
+ DBObject result = new BasicDBObject();
+ storeRaceLogEventProperties(pathfinderEvent, result);
+ result.put(FieldNames.RACE_LOG_EVENT_CLASS.name(), RaceLogPathfinderEvent.class.getSimpleName());
+ result.put(FieldNames.RACE_LOG_PATHFINDER_ID.name(), pathfinderEvent.getPathfinderId());
+ return result;
+ }
+
+ private void storeDeviceMappingEvent(DeviceMappingEvent, ?> event, DBObject result, FieldNames fromField, FieldNames toField) {
+ try {
+ result.put(FieldNames.DEVICE_ID.name(), storeDeviceId(deviceIdentifierServiceFinder, event.getDevice()));
+ } catch (TransformationException | NoCorrespondingServiceRegisteredException e) {
+ logger.log(Level.WARNING, "Could not store device identifier for mappng event", e);
+ }
+ if (event.getFrom() != null) {
+ storeTimePoint(event.getFrom(), result, fromField);
+ }
+ if (event.getTo() != null) {
+ storeTimePoint(event.getTo(), result, toField);
+ }
+ }
+
+ private Object storeRaceLogDeviceCompetitorMappingEvent(RaceLogDeviceCompetitorMappingEvent event) {
+ DBObject result = new BasicDBObject();
+ storeRaceLogEventProperties(event, result);
+ result.put(FieldNames.RACE_LOG_EVENT_CLASS.name(), RaceLogDeviceCompetitorMappingEvent.class.getSimpleName());
+ storeDeviceMappingEvent(event, result, FieldNames.RACE_LOG_FROM, FieldNames.RACE_LOG_TO);
+ result.put(FieldNames.COMPETITOR_ID.name(), event.getMappedTo().getId());
+ return result;
+ }
+
+ private Object storeRaceLogDeviceMarkMappingEvent(RaceLogDeviceMarkMappingEvent event) {
+ DBObject result = new BasicDBObject();
+ storeRaceLogEventProperties(event, result);
+ result.put(FieldNames.RACE_LOG_EVENT_CLASS.name(), RaceLogDeviceMarkMappingEvent.class.getSimpleName());
+ storeDeviceMappingEvent(event, result, FieldNames.RACE_LOG_FROM, FieldNames.RACE_LOG_TO);
+ result.put(FieldNames.MARK.name(), storeMark(event.getMappedTo()));
+ return result;
+ }
+
+ private Object storeRaceLogDenoteForTrackingEvent(RaceLogDenoteForTrackingEvent event) {
+ DBObject result = new BasicDBObject();
+ storeRaceLogEventProperties(event, result);
+ result.put(FieldNames.RACE_LOG_EVENT_CLASS.name(), RaceLogDenoteForTrackingEvent.class.getSimpleName());
+ result.put(FieldNames.RACE_NAME.name(), event.getRaceName());
+ result.put(FieldNames.BOAT_CLASS_NAME.name(), event.getBoatClass().getName());
+ result.put(FieldNames.RACE_ID.name(), event.getRaceId());
+ return result;
+ }
+
+ private Object storeRaceLogStartTrackingEvent(RaceLogStartTrackingEvent event) {
+ DBObject result = new BasicDBObject();
+ storeRaceLogEventProperties(event, result);
+ result.put(FieldNames.RACE_LOG_EVENT_CLASS.name(), RaceLogStartTrackingEvent.class.getSimpleName());
+ return result;
+ }
+
+ private Object storeRaceLogRevokeEvent(RaceLogRevokeEvent event) {
+ DBObject result = new BasicDBObject();
+ storeRaceLogEventProperties(event, result);
+ result.put(FieldNames.RACE_LOG_EVENT_CLASS.name(), RaceLogRevokeEvent.class.getSimpleName());
+ result.put(FieldNames.RACE_LOG_REVOKED_EVENT_ID.name(), event.getRevokedEventId());
+ result.put(FieldNames.RACE_LOG_REVOKED_EVENT_TYPE.name(), event.getRevokedEventType());
+ result.put(FieldNames.RACE_LOG_REVOKED_EVENT_SHORT_INFO.name(), event.getRevokedEventShortInfo());
+ result.put(FieldNames.RACE_LOG_REVOKED_REASON.name(), event.getReason());
+ return result;
+ }
+
+ private Object storeRaceLogRegisterCompetitorEvent(RaceLogRegisterCompetitorEvent event) {
+ DBObject result = new BasicDBObject();
+ storeRaceLogEventProperties(event, result);
+ result.put(FieldNames.RACE_LOG_EVENT_CLASS.name(), RaceLogRegisterCompetitorEvent.class.getSimpleName());
+ result.put(FieldNames.RACE_LOG_COMPETITOR_ID.name(), event.getCompetitor().getId());
+ return result;
+ }
+
+ private Object storeRaceLogDefineMarkEvent(RaceLogDefineMarkEvent event) {
+ DBObject result = new BasicDBObject();
+ storeRaceLogEventProperties(event, result);
+ result.put(FieldNames.RACE_LOG_EVENT_CLASS.name(), RaceLogDefineMarkEvent.class.getSimpleName());
+ result.put(FieldNames.RACE_LOG_MARK.name(), storeMark(event.getMark()));
+ return result;
+ }
+
+ private Object storeRaceLogCloseOpenEndedDeviceMappingEvent(RaceLogCloseOpenEndedDeviceMappingEvent event) {
+ DBObject result = new BasicDBObject();
+ storeRaceLogEventProperties(event, result);
+ result.put(FieldNames.RACE_LOG_EVENT_CLASS.name(), RaceLogCloseOpenEndedDeviceMappingEvent.class.getSimpleName());
+ result.put(FieldNames.RACE_LOG_DEVICE_MAPPING_EVENT_ID.name(), event.getDeviceMappingEventId());
+ storeTimePoint(event.getClosingTimePoint(), result, FieldNames.RACE_LOG_CLOSING_TIMEPOINT);
+ return result;
+ }
+
+ private Object storeRaceLogFixedMarkPassingEvent(RaceLogFixedMarkPassingEvent event) {
+ DBObject result = new BasicDBObject();
+ storeRaceLogEventProperties(event, result);
+ result.put(FieldNames.RACE_LOG_EVENT_CLASS.name(), RaceLogFixedMarkPassingEvent.class.getSimpleName());
+ result.put(FieldNames.INDEX_OF_PASSED_WAYPOINT.name(), event.getZeroBasedIndexOfPassedWaypoint());
+ result.put(FieldNames.TIMEPOINT_OF_FIXED_MARKPASSING.name(), event.getTimePointOfFixedPassing().asMillis());
+ return result;
+ }
+
+ private Object storeRaceLogSuppressedMarkPassingsEvent(RaceLogSuppressedMarkPassingsEvent event) {
+ DBObject result = new BasicDBObject();
+ storeRaceLogEventProperties(event, result);
+ result.put(FieldNames.RACE_LOG_EVENT_CLASS.name(), RaceLogSuppressedMarkPassingsEvent.class.getSimpleName());
+ result.put(FieldNames.INDEX_OF_FIRST_SUPPRESSED_WAYPOINT.name(), event.getZeroBasedIndexOfFirstSuppressedWaypoint());
+ return result;
+ }
+
+ public DBObject storeRaceLogFlagEvent(RaceLogFlagEvent flagEvent) {
+ DBObject result = new BasicDBObject();
+ storeRaceLogEventProperties(flagEvent, result);
+ result.put(FieldNames.RACE_LOG_EVENT_CLASS.name(), RaceLogFlagEvent.class.getSimpleName());
+ result.put(FieldNames.RACE_LOG_EVENT_FLAG_UPPER.name(), flagEvent.getUpperFlag().name());
+ result.put(FieldNames.RACE_LOG_EVENT_FLAG_LOWER.name(), flagEvent.getLowerFlag().name());
+ result.put(FieldNames.RACE_LOG_EVENT_FLAG_DISPLAYED.name(), String.valueOf(flagEvent.isDisplayed()));
+ return result;
+ }
+
+ private DBObject storeRaceLogStartTimeEvent(RaceLogStartTimeEvent startTimeEvent) {
+ DBObject result = new BasicDBObject();
+ storeRaceLogEventProperties(startTimeEvent, result);
+ result.put(FieldNames.RACE_LOG_EVENT_CLASS.name(), RaceLogStartTimeEvent.class.getSimpleName());
+ storeTimePoint(startTimeEvent.getStartTime(), result, FieldNames.RACE_LOG_EVENT_START_TIME);
+ result.put(FieldNames.RACE_LOG_EVENT_NEXT_STATUS.name(), startTimeEvent.getNextStatus().name());
+ return result;
+ }
+
+ private void storeRaceLogEventProperties(RaceLogEvent event, DBObject result) {
+ // for compatibility reasons we reuse the field name of Timed
+ storeTimePoint(event.getLogicalTimePoint(), result, FieldNames.TIME_AS_MILLIS);
+ storeTimePoint(event.getCreatedAt(), result, FieldNames.RACE_LOG_EVENT_CREATED_AT);
+ result.put(FieldNames.RACE_LOG_EVENT_ID.name(), event.getId());
+ result.put(FieldNames.RACE_LOG_EVENT_PASS_ID.name(), event.getPassId());
+ result.put(FieldNames.RACE_LOG_EVENT_INVOLVED_BOATS.name(), storeInvolvedBoatsForRaceLogEvent(event.getInvolvedBoats()));
+ storeRaceLogEventAuthor(result, event.getAuthor());
+ }
+
+
+ private BasicDBList storeInvolvedBoatsForRaceLogEvent(List competitors) {
+ BasicDBList dbInvolvedCompetitorIds = new BasicDBList();
+ for (Competitor competitor : competitors) {
+ dbInvolvedCompetitorIds.add(competitor.getId());
+ }
+ return dbInvolvedCompetitorIds;
+ }
+
+ private DBObject storeRaceLogPassChangeEvent(RaceLogPassChangeEvent passChangeEvent) {
+ DBObject result = new BasicDBObject();
+ storeRaceLogEventProperties(passChangeEvent, result);
+ result.put(FieldNames.RACE_LOG_EVENT_CLASS.name(), RaceLogPassChangeEvent.class.getSimpleName());
+ return result;
+ }
+
+ private DBObject storeRaceLogDependentStartTimeEvent(RaceLogDependentStartTimeEvent dependentStartTimeEvent) {
+ DBObject result = new BasicDBObject();
+ storeRaceLogEventProperties(dependentStartTimeEvent, result);
+ result.put(FieldNames.RACE_LOG_EVENT_CLASS.name(), RaceLogDependentStartTimeEvent.class.getSimpleName());
+ result.put(FieldNames.RACE_LOG_DEPDENDENT_ON_REGATTALIKE.name(), dependentStartTimeEvent.getDependentOnRaceIdentifier().getRegattaLikeParentName());
+ result.put(FieldNames.RACE_LOG_DEPDENDENT_ON_RACECOLUMN.name(), dependentStartTimeEvent.getDependentOnRaceIdentifier().getRaceColumnName());
+ result.put(FieldNames.RACE_LOG_DEPDENDENT_ON_FLEET.name(), dependentStartTimeEvent.getDependentOnRaceIdentifier().getFleetName());
+ storeDuration(dependentStartTimeEvent.getStartTimeDifference(), result, FieldNames.RACE_LOG_START_TIME_DIFFERENCE_IN_MS);
+ result.put(FieldNames.RACE_LOG_EVENT_NEXT_STATUS.name(), dependentStartTimeEvent.getNextStatus().name());
+ return result;
+ }
+
+ private void storeDuration(Duration duration, DBObject result, FieldNames fieldName) {
+ if (duration != null) {
+ result.put(fieldName.name(), duration.asMillis());
+ }
+ }
+
+ private DBObject storeRaceLogRaceStatusEvent(RaceLogRaceStatusEvent raceStatusEvent) {
+ DBObject result = new BasicDBObject();
+ storeRaceLogEventProperties(raceStatusEvent, result);
+ result.put(FieldNames.RACE_LOG_EVENT_CLASS.name(), RaceLogRaceStatusEvent.class.getSimpleName());
+ result.put(FieldNames.RACE_LOG_EVENT_NEXT_STATUS.name(), raceStatusEvent.getNextStatus().name());
+ return result;
+ }
+
+ private DBObject storeRaceLogCourseAreaChangedEvent(RaceLogCourseAreaChangedEvent courseAreaChangedEvent) {
+ DBObject result = new BasicDBObject();
+ storeRaceLogEventProperties(courseAreaChangedEvent, result);
+ result.put(FieldNames.RACE_LOG_EVENT_CLASS.name(), RaceLogCourseAreaChangedEvent.class.getSimpleName());
+ result.put(FieldNames.COURSE_AREA_ID.name(), courseAreaChangedEvent.getCourseAreaId());
+ return result;
+ }
+
+ private DBObject storeRaceLogCourseDesignChangedEvent(RaceLogCourseDesignChangedEvent courseDesignChangedEvent) {
+ DBObject result = new BasicDBObject();
+ storeRaceLogEventProperties(courseDesignChangedEvent, result);
+ result.put(FieldNames.RACE_LOG_EVENT_CLASS.name(), RaceLogCourseDesignChangedEvent.class.getSimpleName());
+ result.put(FieldNames.RACE_LOG_COURSE_DESIGN_NAME.name(), courseDesignChangedEvent.getCourseDesign().getName());
+ result.put(FieldNames.RACE_LOG_COURSE_DESIGN.name(), storeCourseBase(courseDesignChangedEvent.getCourseDesign()));
+ return result;
+ }
+
+ private Object storeRaceLogFinishPositioningListChangedEvent(RaceLogFinishPositioningListChangedEvent finishPositioningListChangedEvent) {
+ DBObject result = new BasicDBObject();
+ storeRaceLogEventProperties(finishPositioningListChangedEvent, result);
+ result.put(FieldNames.RACE_LOG_EVENT_CLASS.name(), RaceLogFinishPositioningListChangedEvent.class.getSimpleName());
+ result.put(FieldNames.RACE_LOG_POSITIONED_COMPETITORS.name(), storePositionedCompetitors(finishPositioningListChangedEvent.getPositionedCompetitorsIDsNamesMaxPointsReasons()));
+
+ return result;
+ }
+
+ private Object storeRaceLogFinishPositioningConfirmedEvent(RaceLogFinishPositioningConfirmedEvent finishPositioningConfirmedEvent) {
+ DBObject result = new BasicDBObject();
+ storeRaceLogEventProperties(finishPositioningConfirmedEvent, result);
+ result.put(FieldNames.RACE_LOG_EVENT_CLASS.name(), RaceLogFinishPositioningConfirmedEvent.class.getSimpleName());
+ result.put(FieldNames.RACE_LOG_POSITIONED_COMPETITORS.name(), storePositionedCompetitors(finishPositioningConfirmedEvent.getPositionedCompetitorsIDsNamesMaxPointsReasons()));
+
+ return result;
+ }
+
+ private Object storeRaceLogGateLineOpeningTimeEvent(RaceLogGateLineOpeningTimeEvent gateLineOpeningTimeEvent){
+ DBObject result = new BasicDBObject();
+ storeRaceLogEventProperties(gateLineOpeningTimeEvent, result);
+ result.put(FieldNames.RACE_LOG_EVENT_CLASS.name(), RaceLogGateLineOpeningTimeEvent.class.getSimpleName());
+ result.put(FieldNames.RACE_LOG_GATE_LINE_OPENING_TIME.name(), gateLineOpeningTimeEvent.getGateLineOpeningTimes().getGateLaunchStopTime());
+ result.put(FieldNames.RACE_LOG_GOLF_DOWN_TIME.name(), gateLineOpeningTimeEvent.getGateLineOpeningTimes().getGolfDownTime());
+ return result;
+ }
+
+ private BasicDBList storePositionedCompetitors(List> positionedCompetitors) {
+ BasicDBList dbList = new BasicDBList();
+ if (positionedCompetitors != null) {
+ for (com.sap.sse.common.Util.Triple competitorPair : positionedCompetitors) {
+ dbList.add(storePositionedCompetitor(competitorPair));
+ }
+ }
+ return dbList;
+ }
+
+ private DBObject storePositionedCompetitor(com.sap.sse.common.Util.Triple competitorTriple) {
+ DBObject result = new BasicDBObject();
+ result.put(FieldNames.COMPETITOR_ID.name(), competitorTriple.getA());
+ result.put(FieldNames.COMPETITOR_DISPLAY_NAME.name(), competitorTriple.getB());
+ result.put(FieldNames.LEADERBOARD_SCORE_CORRECTION_MAX_POINTS_REASON.name(), competitorTriple.getC().name());
+
+ return result;
+ }
+
+ private BasicDBList storeCourseBase(CourseBase courseData) {
+ BasicDBList dbList = new BasicDBList();
+
+ for (Waypoint waypoint : courseData.getWaypoints()) {
+ dbList.add(storeWaypoint(waypoint));
+ }
+ return dbList;
+ }
+
+ private DBObject storeWaypoint(Waypoint waypoint) {
+ DBObject result = new BasicDBObject();
+ result.put(FieldNames.WAYPOINT_PASSINGINSTRUCTIONS.name(), getPassingInstructions(waypoint.getPassingInstructions()));
+ result.put(FieldNames.CONTROLPOINT.name(), storeControlPoint(waypoint.getControlPoint()));
+ return result;
+ }
+
+ private DBObject storeControlPoint(ControlPoint controlPoint) {
+ DBObject result = new BasicDBObject();
+ if (controlPoint instanceof Mark) {
+ result.put(FieldNames.CONTROLPOINT_CLASS.name(), Mark.class.getSimpleName());
+ result.put(FieldNames.CONTROLPOINT_VALUE.name(), storeMark((Mark) controlPoint));
+ } else if (controlPoint instanceof ControlPointWithTwoMarks) {
+ result.put(FieldNames.CONTROLPOINT_CLASS.name(), ControlPointWithTwoMarks.class.getSimpleName());
+ result.put(FieldNames.CONTROLPOINT_VALUE.name(), storeControlPointWithTwoMarks((ControlPointWithTwoMarks) controlPoint));
+ }
+ return result;
+ }
+
+ private DBObject storeControlPointWithTwoMarks(ControlPointWithTwoMarks cpwtm) {
+ DBObject result = new BasicDBObject();
+ result.put(FieldNames.CONTROLPOINTWITHTWOMARKS_ID.name(), cpwtm.getId());
+ result.put(FieldNames.CONTROLPOINTWITHTWOMARKS_NAME.name(), cpwtm.getName());
+ result.put(FieldNames.CONTROLPOINTWITHTWOMARKS_LEFT.name(), storeMark(cpwtm.getLeft()));
+ result.put(FieldNames.CONTROLPOINTWITHTWOMARKS_RIGHT.name(), storeMark(cpwtm.getRight()));
+ return result;
+ }
+
+ private DBObject storeMark(Mark mark) {
+ DBObject result = new BasicDBObject();
+ result.put(FieldNames.MARK_ID.name(), mark.getId());
+ result.put(FieldNames.MARK_COLOR.name(), mark.getColor());
+ result.put(FieldNames.MARK_NAME.name(), mark.getName());
+ result.put(FieldNames.MARK_PATTERN.name(), mark.getPattern());
+ result.put(FieldNames.MARK_SHAPE.name(), mark.getShape());
+ result.put(FieldNames.MARK_TYPE.name(), mark.getType() == null ? null : mark.getType().name());
+ return result;
+ }
+
+ private String getPassingInstructions(PassingInstruction passingInstructions) {
+ final String passing;
+ if (passingInstructions != null) {
+ passing = passingInstructions.name();
+ } else {
+ passing = null;
+ }
+ return passing;
+ }
+ @Override
+ public void storeCompetitor(Competitor competitor) {
+ DBCollection collection = database.getCollection(CollectionNames.COMPETITORS.name());
+ JSONObject json = competitorSerializer.serialize(competitor);
+ DBObject query = (DBObject) JSON.parse(CompetitorJsonSerializer.getCompetitorIdQuery(competitor).toString());
+ DBObject entry = (DBObject) JSON.parse(json.toString());
+ collection.update(query, entry, /* upsrt */true, /* multi */false, WriteConcern.SAFE);
+ }
+
+ @Override
+ public void removeAllCompetitors() {
+ logger.info("Removing all persistent competitor info");
+ DBCollection collection = database.getCollection(CollectionNames.COMPETITORS.name());
+ collection.drop();
+ }
+
+ @Override
+ public void removeCompetitor(Competitor competitor) {
+ logger.info("Removing persistent competitor info for competitor "+competitor.getName()+" with ID "+competitor.getId());
+ DBCollection collection = database.getCollection(CollectionNames.COMPETITORS.name());
+ DBObject query = (DBObject) JSON.parse(CompetitorJsonSerializer.getCompetitorIdQuery(competitor).toString());
+ collection.remove(query, WriteConcern.SAFE);
+ }
+
+ @Override
+ public void storeDeviceConfiguration(DeviceConfigurationMatcher matcher, DeviceConfiguration configuration) {
+ DBCollection configurationsCollections = database.getCollection(CollectionNames.CONFIGURATIONS.name());
+
+ DBObject query = new BasicDBObject();
+ query.put(FieldNames.CONFIGURATION_MATCHER_ID.name(), matcher.getMatcherIdentifier());
+
+ DBObject entryObject = new BasicDBObject();
+ entryObject.put(FieldNames.CONFIGURATION_MATCHER_ID.name(), matcher.getMatcherIdentifier());
+ entryObject.put(FieldNames.CONFIGURATION_MATCHER.name(), createDeviceConfigurationMatcherObject(matcher));
+ entryObject.put(FieldNames.CONFIGURATION_CONFIG.name(), createDeviceConfigurationObject(configuration));
+
+ configurationsCollections.update(query, entryObject, /* upsrt */ true, /* multi */ false, WriteConcern.SAFE);
+ }
+
+ private DBObject createDeviceConfigurationMatcherObject(DeviceConfigurationMatcher matcher) {
+ DBObject matcherObject = new BasicDBObject();
+ matcherObject.put(FieldNames.CONFIGURATION_MATCHER_TYPE.name(), matcher.getMatcherType().name());
+ if (matcher instanceof DeviceConfigurationMatcherSingle) {
+ BasicDBList client = new BasicDBList();
+ client.add(((DeviceConfigurationMatcherSingle)matcher).getClientIdentifier());
+ matcherObject.put(FieldNames.CONFIGURATION_MATCHER_CLIENTS.name(), client);
+ } else if (matcher instanceof DeviceConfigurationMatcherMulti) {
+ BasicDBList clients = new BasicDBList();
+ Util.addAll(((DeviceConfigurationMatcherMulti)matcher).getClientIdentifiers(), clients);
+ matcherObject.put(FieldNames.CONFIGURATION_MATCHER_CLIENTS.name(), clients);
+ }
+ return matcherObject;
+ }
+
+ private DBObject createDeviceConfigurationObject(DeviceConfiguration configuration) {
+ JsonSerializer serializer = DeviceConfigurationJsonSerializer.create();
+ JSONObject json = serializer.serialize(configuration);
+ DBObject entry = (DBObject) JSON.parse(json.toString());
+ return entry;
+ }
+
+ @Override
+ public void removeDeviceConfiguration(DeviceConfigurationMatcher matcher) {
+ DBCollection configurationsCollections = database.getCollection(CollectionNames.CONFIGURATIONS.name());
+ DBObject query = new BasicDBObject();
+ query.put(FieldNames.CONFIGURATION_MATCHER_ID.name(), matcher.getMatcherIdentifier());
+ configurationsCollections.remove(query);
+ }
+
+ public static DBObject storeDeviceId(
+ TypeBasedServiceFinder deviceIdentifierServiceFinder, DeviceIdentifier device)
+ throws TransformationException, NoCorrespondingServiceRegisteredException {
+ String type = device.getIdentifierType();
+ DeviceIdentifierMongoHandler handler = deviceIdentifierServiceFinder.findService(type);
+ com.sap.sse.common.Util.Pair pair = handler.serialize(device);
+ type = pair.getA();
+ Object deviceTypeSpecificId = pair.getB();
+ return new BasicDBObjectBuilder()
+ .add(FieldNames.DEVICE_TYPE.name(), type)
+ .add(FieldNames.DEVICE_TYPE_SPECIFIC_ID.name(), deviceTypeSpecificId)
+ .add(FieldNames.DEVICE_STRING_REPRESENTATION.name(), device.getStringRepresentation()).get();
+ }
+
+ void storeRaceLogEventEvent(DBObject eventEntry) {
+ getRaceLogCollection().insert(eventEntry);
+ }
+
+ @Override
+ public void removeRaceLog(RaceLogIdentifier identifier) {
+ DBObject query = new BasicDBObject();
+ storeRaceLogIdentifier(identifier, query);
+ getRaceLogCollection().remove(query);
+ }
+
+ @Override
+ public void removeRegattaLog(RegattaLikeIdentifier identifier) {
+ DBObject query = new BasicDBObject();
+ addRegattaLikeIdentifier(identifier, query);
+ getRegattaLogCollection().remove(query);
+ }
+
+ @Override
+ public void storeResultUrl(String resultProviderName, URL url) {
+ DBCollection resultUrlsCollection = database.getCollection(CollectionNames.RESULT_URLS.name());
+ DBObject query = new BasicDBObject(FieldNames.RESULT_PROVIDERNAME.name(), resultProviderName);
+ DBObject entry = new BasicDBObject(FieldNames.RESULT_PROVIDERNAME.name(), resultProviderName);
+ entry.put(FieldNames.RESULT_URL.name(), url.toString());
+ resultUrlsCollection.update(query, entry, /* upsrt */true, /* multi */false, WriteConcern.SAFE);
+ }
+
+ @Override
+ public void removeResultUrl(String resultProviderName, URL url) {
+ DBCollection resultUrlsCollection = database.getCollection(CollectionNames.RESULT_URLS.name());
+ DBObject query = new BasicDBObjectBuilder().add(FieldNames.RESULT_PROVIDERNAME.name(), resultProviderName)
+ .add(FieldNames.RESULT_URL.name(), url.toString()).get();
+ resultUrlsCollection.remove(query);
+ }
+
+ public DBCollection getRegattaLogCollection() {
+ DBCollection result = database.getCollection(CollectionNames.REGATTA_LOGS.name());
+ DBObject index = new BasicDBObject(FieldNames.REGATTA_LOG_IDENTIFIER_TYPE.name(), null);
+ index.put(FieldNames.REGATTA_LOG_IDENTIFIER_NAME.name(), null);
+ result.createIndex(index);
+ return result;
+ }
+
+ private DBObject createBasicRegattaLogEventDBObject(RegattaLogEvent event) {
+ DBObject result = new BasicDBObject();
+ storeTimed(event, result);
+ storeTimePoint(event.getCreatedAt(), result, FieldNames.REGATTA_LOG_EVENT_CREATED_AT);
+ result.put(FieldNames.REGATTA_LOG_EVENT_ID.name(), event.getId());
+ result.put(FieldNames.REGATTA_LOG_EVENT_AUTHOR_NAME.name(), event.getAuthor().getName());
+ result.put(FieldNames.REGATTA_LOG_EVENT_AUTHOR_PRIORITY.name(), event.getAuthor().getPriority());
+ return result;
+ }
+
+ private void addRegattaLikeIdentifier(RegattaLikeIdentifier regattaLikeId, DBObject toObject) {
+ toObject.put(FieldNames.REGATTA_LOG_IDENTIFIER_TYPE.name(), regattaLikeId.getIdentifierType());
+ toObject.put(FieldNames.REGATTA_LOG_IDENTIFIER_NAME.name(), regattaLikeId.getName());
+ }
+
+ private void storeRegattaLogEvent(RegattaLikeIdentifier regattaLikeId, DBObject innerObject) {
+ DBObject result = new BasicDBObject(FieldNames.REGATTA_LOG_EVENT.name(), innerObject);
+ addRegattaLikeIdentifier(regattaLikeId, result);
+ getRegattaLogCollection().insert(result);
+ }
+
+ public void storeRegattaLogEvent(RegattaLikeIdentifier regattaLikeId, RegattaLogDeviceCompetitorMappingEvent event) {
+ DBObject result = createBasicRegattaLogEventDBObject(event);
+ result.put(FieldNames.REGATTA_LOG_EVENT_CLASS.name(), RegattaLogDeviceCompetitorMappingEvent.class.getSimpleName());
+ storeDeviceMappingEvent(event, result, FieldNames.REGATTA_LOG_FROM, FieldNames.REGATTA_LOG_TO);
+ result.put(FieldNames.COMPETITOR_ID.name(), event.getMappedTo().getId());
+ storeRegattaLogEvent(regattaLikeId, result);
+ }
+
+ public void storeRegattaLogEvent(RegattaLikeIdentifier regattaLikeId, RegattaLogDeviceMarkMappingEvent event) {
+ DBObject result = createBasicRegattaLogEventDBObject(event);
+ result.put(FieldNames.REGATTA_LOG_EVENT_CLASS.name(), RegattaLogDeviceMarkMappingEvent.class.getSimpleName());
+ storeDeviceMappingEvent(event, result, FieldNames.REGATTA_LOG_FROM, FieldNames.REGATTA_LOG_TO);
+ result.put(FieldNames.MARK.name(), storeMark(event.getMappedTo()));
+ storeRegattaLogEvent(regattaLikeId, result);
+ }
+
+ public void storeRegattaLogEvent(RegattaLikeIdentifier regattaLikeId, RegattaLogRevokeEvent event) {
+ DBObject result = createBasicRegattaLogEventDBObject(event);
+ result.put(FieldNames.REGATTA_LOG_EVENT_CLASS.name(), RegattaLogRevokeEvent.class.getSimpleName());
+ result.put(FieldNames.REGATTA_LOG_REVOKED_EVENT_ID.name(), event.getRevokedEventId());
+ result.put(FieldNames.REGATTA_LOG_REVOKED_EVENT_TYPE.name(), event.getRevokedEventType());
+ result.put(FieldNames.REGATTA_LOG_REVOKED_EVENT_SHORT_INFO.name(), event.getRevokedEventShortInfo());
+ result.put(FieldNames.REGATTA_LOG_REVOKED_REASON.name(), event.getReason());
+ storeRegattaLogEvent(regattaLikeId, result);
+ }
+
+ public void storeRegattaLogEvent(RegattaLikeIdentifier regattaLikeId, RegattaLogRegisterCompetitorEvent event) {
+ DBObject result = createBasicRegattaLogEventDBObject(event);
+ result.put(FieldNames.REGATTA_LOG_EVENT_CLASS.name(), RegattaLogRegisterCompetitorEvent.class.getSimpleName());
+ result.put(FieldNames.REGATTA_LOG_COMPETITOR_ID.name(), event.getCompetitor().getId());
+ storeRegattaLogEvent(regattaLikeId, result);
+ }
+
+ public void storeRegattaLogEvent(RegattaLikeIdentifier regattaLikeId, RegattaLogCloseOpenEndedDeviceMappingEvent event) {
+ DBObject result = createBasicRegattaLogEventDBObject(event);
+ result.put(FieldNames.REGATTA_LOG_EVENT_CLASS.name(), RegattaLogCloseOpenEndedDeviceMappingEvent.class.getSimpleName());
+ result.put(FieldNames.REGATTA_LOG_DEVICE_MAPPING_EVENT_ID.name(), event.getDeviceMappingEventId());
+ storeTimePoint(event.getClosingTimePoint(), result, FieldNames.REGATTA_LOG_CLOSING_TIMEPOINT);
+ storeRegattaLogEvent(regattaLikeId, result);
+ }
+
+ public void storeRegattaLogEvent(RegattaLikeIdentifier regattaLikeId, RegattaLogSetCompetitorTimeOnTimeFactorEvent event) {
+ DBObject result = createBasicRegattaLogEventDBObject(event);
+ result.put(FieldNames.REGATTA_LOG_EVENT_CLASS.name(), RegattaLogCloseOpenEndedDeviceMappingEvent.class.getSimpleName());
+ result.put(FieldNames.REGATTA_LOG_COMPETITOR_ID.name(), event.getCompetitor().getId());
+ result.put(FieldNames.REGATTA_LOG_TIME_ON_TIME_FACTOR.name(), event.getTimeOnTimeFactor());
+ }
+
+ public DBObject storeRaceLogEntry(RaceLogIdentifier raceLogIdentifier, RaceLogDependentStartTimeEvent event) {
+ BasicDBObject result = new BasicDBObject();
+ storeRaceLogIdentifier(raceLogIdentifier, result);
+ result.put(FieldNames.RACE_LOG_EVENT.name(), storeRaceLogDependentStartTimeEvent(event));
+ return result;
+ }
+
+ public void storeRegattaLogEvent(RegattaLikeIdentifier regattaLikeId, RegattaLogSetCompetitorTimeOnDistanceAllowancePerNauticalMileEvent event) {
+ DBObject result = createBasicRegattaLogEventDBObject(event);
+ result.put(FieldNames.REGATTA_LOG_EVENT_CLASS.name(), RegattaLogCloseOpenEndedDeviceMappingEvent.class.getSimpleName());
+ result.put(FieldNames.REGATTA_LOG_COMPETITOR_ID.name(), event.getCompetitor().getId());
+ result.put(FieldNames.REGATTA_LOG_TIME_ON_DISTANCE_SECONDS_ALLOWANCE_PER_NAUTICAL_MILE.name(), event.getTimeOnDistanceAllowancePerNauticalMile().asSeconds());
+ storeRegattaLogEvent(regattaLikeId, result);
+ }
+
+ private DBObject createImageObject(ImageDescriptor image) {
+ DBObject result = new BasicDBObject();
+ result.put(FieldNames.IMAGE_URL.name(), image.getURL().toString());
+ result.put(FieldNames.IMAGE_LOCALE.name(), image.getLocale() != null ? image.getLocale().toLanguageTag() : null);
+ result.put(FieldNames.IMAGE_TITLE.name(), image.getTitle());
+ result.put(FieldNames.IMAGE_SUBTITLE.name(), image.getSubtitle());
+ result.put(FieldNames.IMAGE_COPYRIGHT.name(), image.getCopyright());
+ result.put(FieldNames.IMAGE_WIDTH_IN_PX.name(), image.getWidthInPx());
+ result.put(FieldNames.IMAGE_HEIGHT_IN_PX.name(), image.getHeightInPx());
+ storeTimePoint(image.getCreatedAtDate(), result, FieldNames.IMAGE_CREATEDATDATE);
+ BasicDBList tags = new BasicDBList();
+ for (String tag : image.getTags()) {
+ tags.add(tag);
+ }
+ result.put(FieldNames.IMAGE_TAGS.name(), tags);
+ return result;
+ }
+
+ private DBObject createVideoObject(VideoDescriptor video) {
+ DBObject result = new BasicDBObject();
+ result.put(FieldNames.VIDEO_URL.name(), video.getURL().toString());
+ result.put(FieldNames.VIDEO_LOCALE.name(), video.getLocale() != null ? video.getLocale().toLanguageTag() : null);
+ result.put(FieldNames.VIDEO_THUMBNAIL_URL.name(), video.getThumbnailURL() != null ? video.getThumbnailURL().toString() : null);
+ result.put(FieldNames.VIDEO_TITLE.name(), video.getTitle());
+ result.put(FieldNames.VIDEO_SUBTITLE.name(), video.getSubtitle());
+ result.put(FieldNames.VIDEO_MIMETYPE.name(), video.getMimeType() != null ? video.getMimeType().name() : null);
+ result.put(FieldNames.VIDEO_COPYRIGHT.name(), video.getCopyright());
+ result.put(FieldNames.VIDEO_LENGTH_IN_SECONDS.name(), video.getLengthInSeconds());
+ storeTimePoint(video.getCreatedAtDate(), result, FieldNames.VIDEO_CREATEDATDATE);
+ BasicDBList tags = new BasicDBList();
+ for (String tag : video.getTags()) {
+ tags.add(tag);
+ }
+ result.put(FieldNames.VIDEO_TAGS.name(), tags);
+ return result;
+ }
+}
diff --git a/java/com.sap.sailing.domain.racelogtrackingadapter.test/src/com/sap/sailing/domain/racelogtracking/test/AbstractGPSFixStoreTest.java b/java/com.sap.sailing.domain.racelogtrackingadapter.test/src/com/sap/sailing/domain/racelogtracking/test/AbstractGPSFixStoreTest.java
index 679b6b97455..f48a27959ec 100644
--- a/java/com.sap.sailing.domain.racelogtrackingadapter.test/src/com/sap/sailing/domain/racelogtracking/test/AbstractGPSFixStoreTest.java
+++ b/java/com.sap.sailing.domain.racelogtrackingadapter.test/src/com/sap/sailing/domain/racelogtracking/test/AbstractGPSFixStoreTest.java
@@ -9,8 +9,9 @@ import org.junit.Before;
import com.sap.sailing.domain.abstractlog.AbstractLogEventAuthor;
import com.sap.sailing.domain.abstractlog.impl.LogEventAuthorImpl;
import com.sap.sailing.domain.abstractlog.race.RaceLog;
-import com.sap.sailing.domain.abstractlog.race.RaceLogEventFactory;
import com.sap.sailing.domain.abstractlog.race.impl.RaceLogImpl;
+import com.sap.sailing.domain.abstractlog.race.tracking.impl.RaceLogDeviceCompetitorMappingEventImpl;
+import com.sap.sailing.domain.abstractlog.race.tracking.impl.RaceLogDeviceMarkMappingEventImpl;
import com.sap.sailing.domain.base.Competitor;
import com.sap.sailing.domain.base.DomainFactory;
import com.sap.sailing.domain.base.Mark;
@@ -66,8 +67,8 @@ public class AbstractGPSFixStoreTest {
}
protected void map(RaceLog raceLog, Competitor comp, DeviceIdentifier device, long from, long to) {
- raceLog.add(RaceLogEventFactory.INSTANCE.createDeviceCompetitorMappingEvent(MillisecondsTimePoint.now(), author, device,
- comp, 0, new MillisecondsTimePoint(from), new MillisecondsTimePoint(to)));
+ raceLog.add(new RaceLogDeviceCompetitorMappingEventImpl(MillisecondsTimePoint.now(), author, 0,
+ comp, device, new MillisecondsTimePoint(from), new MillisecondsTimePoint(to)));
}
protected void map(Competitor comp, DeviceIdentifier device, long from, long to) {
@@ -75,8 +76,8 @@ public class AbstractGPSFixStoreTest {
}
protected void map(Mark mark, DeviceIdentifier device, long from, long to) {
- raceLog.add(RaceLogEventFactory.INSTANCE.createDeviceMarkMappingEvent(MillisecondsTimePoint.now(), author, device,
- mark, 0, new MillisecondsTimePoint(from), new MillisecondsTimePoint(to)));
+ raceLog.add(new RaceLogDeviceMarkMappingEventImpl(MillisecondsTimePoint.now(), author, 0,
+ mark, device, new MillisecondsTimePoint(from), new MillisecondsTimePoint(to)));
}
protected void testNumberOfRawFixes(Track> track, long expected) {
diff --git a/java/com.sap.sailing.domain.racelogtrackingadapter.test/src/com/sap/sailing/domain/racelogtracking/test/impl/CreateAndTrackWithRaceLogTest.java b/java/com.sap.sailing.domain.racelogtrackingadapter.test/src/com/sap/sailing/domain/racelogtracking/test/impl/CreateAndTrackWithRaceLogTest.java
index f43277c8b1d..17302ae2345 100644
--- a/java/com.sap.sailing.domain.racelogtrackingadapter.test/src/com/sap/sailing/domain/racelogtracking/test/impl/CreateAndTrackWithRaceLogTest.java
+++ b/java/com.sap.sailing.domain.racelogtrackingadapter.test/src/com/sap/sailing/domain/racelogtracking/test/impl/CreateAndTrackWithRaceLogTest.java
@@ -19,7 +19,8 @@ import org.junit.rules.ExpectedException;
import com.sap.sailing.domain.abstractlog.AbstractLogEventAuthor;
import com.sap.sailing.domain.abstractlog.race.RaceLog;
-import com.sap.sailing.domain.abstractlog.race.RaceLogEventFactory;
+import com.sap.sailing.domain.abstractlog.race.tracking.impl.RaceLogDeviceCompetitorMappingEventImpl;
+import com.sap.sailing.domain.abstractlog.race.tracking.impl.RaceLogRegisterCompetitorEventImpl;
import com.sap.sailing.domain.abstractlog.regatta.RegattaLog;
import com.sap.sailing.domain.abstractlog.regatta.events.impl.RegattaLogDeviceCompetitorMappingEventImpl;
import com.sap.sailing.domain.abstractlog.regatta.events.impl.RegattaLogRegisterCompetitorEventImpl;
@@ -68,8 +69,6 @@ public class CreateAndTrackWithRaceLogTest {
private long time = 0;
- private static final RaceLogEventFactory factory = RaceLogEventFactory.INSTANCE;
-
@Before
public void setup() {
service = new RacingEventServiceImpl(true, new MockSmartphoneImeiServiceFinderFactory());
@@ -172,9 +171,9 @@ public class CreateAndTrackWithRaceLogTest {
Competitor comp1 = DomainFactory.INSTANCE.getOrCreateCompetitor("comp1", "comp1", null, null, null, null, null,
/* timeOnTimeFactor */ null, /* timeOnDistanceAllowancePerNauticalMile */ null);
DeviceIdentifier dev1 = new SmartphoneImeiIdentifier("dev1");
- raceLog.add(factory.createDeviceCompetitorMappingEvent(t(), author, dev1, comp1, 0, t(0), t(10)));
+ raceLog.add(new RaceLogDeviceCompetitorMappingEventImpl(t(), author, 0, comp1, dev1, t(0), t(10)));
addFixes0(dev1);
- raceLog.add(factory.createRegisterCompetitorEvent(t(), author, 0, comp1));
+ raceLog.add(new RaceLogRegisterCompetitorEventImpl(t(), author, 0, comp1));
// start tracking
adapter.startTracking(service, leaderboard, column, fleet);
@@ -185,7 +184,7 @@ public class CreateAndTrackWithRaceLogTest {
race.waitForLoadingFromGPSFixStoreToFinishRunning(raceLog);
addFixes1(race, comp1, dev1);
- raceLog.add(factory.createDeviceCompetitorMappingEvent(t(), author, dev1, comp1, 0, t(11), t(20)));
+ raceLog.add(new RaceLogDeviceCompetitorMappingEventImpl(t(), author, 0, comp1, dev1, t(11), t(20)));
// add another mapping on the fly, other old fixes should be loaded
addFixes2(race, comp1, dev1);
@@ -207,10 +206,10 @@ public class CreateAndTrackWithRaceLogTest {
Competitor comp1 = DomainFactory.INSTANCE.getOrCreateCompetitor("comp1", "comp1", null, null, null, null, null,
/* timeOnTimeFactor */ null, /* timeOnDistanceAllowancePerNauticalMile */ null);
DeviceIdentifier dev1 = new SmartphoneImeiIdentifier("dev1");
- regattaLog.add(new RegattaLogDeviceCompetitorMappingEventImpl(t(), author, t(), UUID.randomUUID(), comp1, dev1,
+ regattaLog.add(new RegattaLogDeviceCompetitorMappingEventImpl(t(), t(), author, UUID.randomUUID(), comp1, dev1,
t(0), t(10)));
addFixes0(dev1);
- regattaLog.add(new RegattaLogRegisterCompetitorEventImpl(t(), author, t(), UUID.randomUUID(), comp1));
+ regattaLog.add(new RegattaLogRegisterCompetitorEventImpl(t(), t(), author, UUID.randomUUID(), comp1));
// start tracking
adapter.startTracking(service, leaderboard, column, fleet);
@@ -223,7 +222,7 @@ public class CreateAndTrackWithRaceLogTest {
addFixes1(race, comp1, dev1);
// add another mapping on the fly, other old fixes should be loaded
- regattaLog.add(new RegattaLogDeviceCompetitorMappingEventImpl(t(), author, t(), UUID.randomUUID(), comp1, dev1,
+ regattaLog.add(new RegattaLogDeviceCompetitorMappingEventImpl(t(), t(), author, UUID.randomUUID(), comp1, dev1,
t(11), t(20)));
addFixes2(race, comp1, dev1);
diff --git a/java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/racelogtracking/impl/RaceLogTrackingAdapterImpl.java b/java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/racelogtracking/impl/RaceLogTrackingAdapterImpl.java
index 309f42ec296..60b93d28a46 100755
--- a/java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/racelogtracking/impl/RaceLogTrackingAdapterImpl.java
+++ b/java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/racelogtracking/impl/RaceLogTrackingAdapterImpl.java
@@ -29,14 +29,22 @@ import com.sap.sailing.domain.abstractlog.impl.AllEventsOfTypeFinder;
import com.sap.sailing.domain.abstractlog.impl.LastEventOfTypeFinder;
import com.sap.sailing.domain.abstractlog.race.RaceLog;
import com.sap.sailing.domain.abstractlog.race.RaceLogEvent;
-import com.sap.sailing.domain.abstractlog.race.RaceLogEventFactory;
+import com.sap.sailing.domain.abstractlog.race.RaceLogEventVisitor;
import com.sap.sailing.domain.abstractlog.race.analyzing.impl.LastPublishedCourseDesignFinder;
+import com.sap.sailing.domain.abstractlog.race.impl.RaceLogCourseDesignChangedEventImpl;
import com.sap.sailing.domain.abstractlog.race.tracking.RaceLogDefineMarkEvent;
import com.sap.sailing.domain.abstractlog.race.tracking.RaceLogDenoteForTrackingEvent;
import com.sap.sailing.domain.abstractlog.race.tracking.RaceLogDeviceMarkMappingEvent;
import com.sap.sailing.domain.abstractlog.race.tracking.RaceLogStartTrackingEvent;
import com.sap.sailing.domain.abstractlog.race.tracking.analyzing.impl.RaceLogTrackingStateAnalyzer;
+import com.sap.sailing.domain.abstractlog.race.tracking.impl.RaceLogDefineMarkEventImpl;
+import com.sap.sailing.domain.abstractlog.race.tracking.impl.RaceLogDenoteForTrackingEventImpl;
+import com.sap.sailing.domain.abstractlog.race.tracking.impl.RaceLogDeviceMarkMappingEventImpl;
+import com.sap.sailing.domain.abstractlog.race.tracking.impl.RaceLogRegisterCompetitorEventImpl;
+import com.sap.sailing.domain.abstractlog.race.tracking.impl.RaceLogStartTrackingEventImpl;
import com.sap.sailing.domain.abstractlog.regatta.RegattaLog;
+import com.sap.sailing.domain.abstractlog.regatta.RegattaLogEvent;
+import com.sap.sailing.domain.abstractlog.regatta.RegattaLogEventVisitor;
import com.sap.sailing.domain.abstractlog.regatta.events.impl.RegattaLogDeviceMarkMappingEventImpl;
import com.sap.sailing.domain.abstractlog.regatta.events.impl.RegattaLogRegisterCompetitorEventImpl;
import com.sap.sailing.domain.abstractlog.shared.analyzing.RegisteredCompetitorsAnalyzer;
@@ -101,7 +109,7 @@ public class RaceLogTrackingAdapterImpl implements RaceLogTrackingAdapter {
}
RegattaIdentifier regatta = ((RegattaLeaderboard) leaderboard).getRegatta().getRegattaIdentifier();
if (raceLogTrackingState != RaceLogTrackingState.TRACKING) {
- RaceLogEvent event = RaceLogEventFactory.INSTANCE.createStartTrackingEvent(MillisecondsTimePoint.now(),
+ RaceLogEvent event = new RaceLogStartTrackingEventImpl(MillisecondsTimePoint.now(),
service.getServerAuthor(), raceLog.getCurrentPassId());
raceLog.add(event);
}
@@ -157,7 +165,7 @@ public class RaceLogTrackingAdapterImpl implements RaceLogTrackingAdapter {
throw new NotDenotableForRaceLogTrackingException("Already denoted for tracking");
}
- RaceLogEvent event = RaceLogEventFactory.INSTANCE.createDenoteForTrackingEvent(MillisecondsTimePoint.now(),
+ RaceLogEvent event = new RaceLogDenoteForTrackingEventImpl(MillisecondsTimePoint.now(),
service.getServerAuthor(), raceLog.getCurrentPassId(), raceName, boatClass, UUID.randomUUID());
raceLog.add(event);
}
@@ -225,15 +233,15 @@ public class RaceLogTrackingAdapterImpl implements RaceLogTrackingAdapter {
newCourse.addWaypoint(i++, oldWaypoint);
}
for (Mark mark : marks) {
- RaceLogEvent event = RaceLogEventFactory.INSTANCE.createDefineMarkEvent(now,
- service.getServerAuthor(), toRaceLog.getCurrentPassId(), mark);
+ RaceLogEvent event = new RaceLogDefineMarkEventImpl(now, service.getServerAuthor(),
+ toRaceLog.getCurrentPassId(), mark);
toRaceLog.add(event);
}
for (RaceLogEvent raceLogDeviceMarkMappingEvent : raceLogDeviceMarkMappingEvents) {
toRaceLog.add(raceLogDeviceMarkMappingEvent);
}
int passId = toRaceLog.getCurrentPassId();
- RaceLogEvent newCourseEvent = RaceLogEventFactory.INSTANCE.createCourseDesignChangedEvent(now,
+ RaceLogEvent newCourseEvent = new RaceLogCourseDesignChangedEventImpl(now,
service.getServerAuthor(), passId, newCourse);
toRaceLog.add(newCourseEvent);
}
@@ -243,8 +251,7 @@ public class RaceLogTrackingAdapterImpl implements RaceLogTrackingAdapter {
}
@Override
- public void copyCompetitors(RaceLog fromRaceLog, Set toRaceLogs,
- RacingEventService service) {
+ public void copyCompetitors(RaceLog fromRaceLog, Set toRaceLogs, RacingEventService service) {
final Set competitors = new RegisteredCompetitorsAnalyzer<>(fromRaceLog).analyze();
for (RaceLog toRaceLog : toRaceLogs) {
registerCompetitors(service, toRaceLog, competitors);
@@ -271,17 +278,25 @@ public class RaceLogTrackingAdapterImpl implements RaceLogTrackingAdapter {
@Override
public void pingMark(RaceLog raceLog, Mark mark, GPSFix gpsFix, RacingEventService service) {
- pingMark(raceLog, mark, gpsFix, service,
- (DeviceIdentifier dev, TimePoint timePoint) -> RaceLogEventFactory.INSTANCE
- .createDeviceMarkMappingEvent(timePoint, service.getServerAuthor(), dev, mark,
- raceLog.getCurrentPassId(), timePoint, timePoint), new PingDeviceIdentifierImpl());
+ DeviceMarkMappingEventFactory raceLogEventFactory =
+ (DeviceIdentifier dev, TimePoint timePoint) -> new RaceLogDeviceMarkMappingEventImpl(timePoint, service
+ .getServerAuthor(), raceLog.getCurrentPassId(), mark, dev, timePoint, timePoint);
+ pingMark(
+ raceLog,
+ mark,
+ gpsFix,
+ service,
+ raceLogEventFactory,
+ new PingDeviceIdentifierImpl());
}
@Override
public void pingMark(RegattaLog regattaLog, Mark mark, GPSFix gpsFix, RacingEventService service) {
- pingMark(regattaLog, mark, gpsFix, service,
+ DeviceMarkMappingEventFactory regattaLogEventFactory =
(DeviceIdentifier dev, TimePoint timePoint) -> new RegattaLogDeviceMarkMappingEventImpl(timePoint,
- service.getServerAuthor(), timePoint, UUID.randomUUID(), mark, dev, timePoint, timePoint),
+ timePoint, service.getServerAuthor(), UUID.randomUUID(), mark, dev, timePoint, timePoint);
+ pingMark(regattaLog, mark, gpsFix, service,
+ regattaLogEventFactory,
new PingDeviceIdentifierImpl());
}
@@ -337,19 +352,16 @@ public class RaceLogTrackingAdapterImpl implements RaceLogTrackingAdapter {
@Override
public void registerCompetitors(RacingEventService service, RaceLog raceLog, Set competitors) {
- registerCompetitors(
- service.getServerAuthor(),
- raceLog,
- competitors,
- c -> RaceLogEventFactory.INSTANCE.createRegisterCompetitorEvent(MillisecondsTimePoint.now(),
- service.getServerAuthor(), raceLog.getCurrentPassId(), c));
+ registerCompetitors(service.getServerAuthor(), raceLog, competitors,
+ c -> new RaceLogRegisterCompetitorEventImpl(MillisecondsTimePoint.now(), service.getServerAuthor(),
+ raceLog.getCurrentPassId(), c));
}
@Override
public void registerCompetitors(RacingEventService service, RegattaLog regattaLog, Set competitors) {
registerCompetitors(service.getServerAuthor(), regattaLog, competitors,
- c -> new RegattaLogRegisterCompetitorEventImpl(MillisecondsTimePoint.now(), service.getServerAuthor(),
- MillisecondsTimePoint.now(), UUID.randomUUID(), c));
+ c -> new RegattaLogRegisterCompetitorEventImpl(MillisecondsTimePoint.now(),
+ MillisecondsTimePoint.now(), service.getServerAuthor(), UUID.randomUUID(), c));
}
private MailService getMailService() {
diff --git a/java/com.sap.sailing.domain.shared.android.test/src/com/sap/sailing/domain/racelog/analyzing/test/DependentStartTimeFinderTest.java b/java/com.sap.sailing.domain.shared.android.test/src/com/sap/sailing/domain/racelog/analyzing/test/DependentStartTimeFinderTest.java
index a9653af5044..bb89960120a 100644
--- a/java/com.sap.sailing.domain.shared.android.test/src/com/sap/sailing/domain/racelog/analyzing/test/DependentStartTimeFinderTest.java
+++ b/java/com.sap.sailing.domain.shared.android.test/src/com/sap/sailing/domain/racelog/analyzing/test/DependentStartTimeFinderTest.java
@@ -21,6 +21,7 @@ import com.sap.sailing.domain.abstractlog.race.impl.RaceLogDependentStartTimeEve
import com.sap.sailing.domain.abstractlog.race.impl.RaceLogImpl;
import com.sap.sailing.domain.abstractlog.race.impl.RaceLogStartTimeEventImpl;
import com.sap.sailing.domain.abstractlog.race.impl.SimpleRaceLogIdentifierImpl;
+import com.sap.sailing.domain.common.racelog.RaceLogRaceStatus;
import com.sap.sse.common.TimePoint;
import com.sap.sse.common.impl.MillisecondsDurationImpl;
import com.sap.sse.common.impl.MillisecondsTimePoint;
@@ -64,16 +65,16 @@ public class DependentStartTimeFinderTest {
@Test
public void testDependentStartTimeUpdate() {
final MillisecondsDurationImpl cAfterB = new MillisecondsDurationImpl(5000);
- raceLogC.add(new RaceLogDependentStartTimeEventImpl(nowMock, author, nowMock, "12", null, 12,
- new SimpleRaceLogIdentifierImpl("B", "", ""), cAfterB));
+ raceLogC.add(new RaceLogDependentStartTimeEventImpl(nowMock, nowMock, author, "12", 12,
+ new SimpleRaceLogIdentifierImpl("B", "", ""), cAfterB, RaceLogRaceStatus.SCHEDULED));
StartTimeFinder finder = new StartTimeFinder(raceLogResolver, raceLogC);
// Tests for correct behaviour, when race depending on has no start time set
assertNull(finder.analyze().getStartTime());
final MillisecondsDurationImpl bAfterA = new MillisecondsDurationImpl(6000);
- raceLogB.add(new RaceLogDependentStartTimeEventImpl(nowMock, author, nowMock, "12", null, 12,
- new SimpleRaceLogIdentifierImpl("A", "", ""), bAfterA));
+ raceLogB.add(new RaceLogDependentStartTimeEventImpl(nowMock, nowMock, author, "12", 12,
+ new SimpleRaceLogIdentifierImpl("A", "", ""), bAfterA, RaceLogRaceStatus.SCHEDULED));
finder = new StartTimeFinder(raceLogResolver, raceLogB);
StartTimeFinderResult result = finder.analyze();
@@ -98,7 +99,8 @@ public class DependentStartTimeFinderTest {
assertEquals(expectedDependingOnRaces, result.getRacesDependingOn());
TimePoint now = MillisecondsTimePoint.now();
- raceLogA.add(new RaceLogStartTimeEventImpl(now, author, now, "12", null, 12, new MillisecondsTimePoint(5000)));
+ raceLogA.add(new RaceLogStartTimeEventImpl(now, now, author, "12", 12, new MillisecondsTimePoint(5000),
+ RaceLogRaceStatus.SCHEDULED));
finder = new StartTimeFinder(raceLogResolver, raceLogB);
result = finder.analyze();
@@ -111,7 +113,8 @@ public class DependentStartTimeFinderTest {
assertEquals(5000, result.getStartTimeDiff().asMillis());
// Test correct behaviour, when middle element changes
- raceLogB.add(new RaceLogStartTimeEventImpl(now, author, now, "12", null, 12, new MillisecondsTimePoint(15000)));
+ raceLogB.add(new RaceLogStartTimeEventImpl(now, now, author, "12", 12, new MillisecondsTimePoint(15000),
+ RaceLogRaceStatus.SCHEDULED));
finder = new StartTimeFinder(raceLogResolver, raceLogA);
result = finder.analyze();
assertEquals(5000, result.getStartTime().asMillis());
@@ -131,16 +134,16 @@ public class DependentStartTimeFinderTest {
@Test
public void testDependentStartTimeCycle() {
final MillisecondsDurationImpl cAfterB = new MillisecondsDurationImpl(6000);
- raceLogC.add(new RaceLogDependentStartTimeEventImpl(nowMock, author, nowMock, "12", null, 12,
- new SimpleRaceLogIdentifierImpl("B", "", ""), cAfterB));
+ raceLogC.add(new RaceLogDependentStartTimeEventImpl(nowMock, nowMock, author, "12", 12,
+ new SimpleRaceLogIdentifierImpl("B", "", ""), cAfterB, RaceLogRaceStatus.SCHEDULED));
final MillisecondsDurationImpl bAfterA = new MillisecondsDurationImpl(7000);
- raceLogB.add(new RaceLogDependentStartTimeEventImpl(nowMock, author, nowMock, "12", null, 12,
- new SimpleRaceLogIdentifierImpl("A", "", ""), bAfterA));
+ raceLogB.add(new RaceLogDependentStartTimeEventImpl(nowMock, nowMock, author, "12", 12,
+ new SimpleRaceLogIdentifierImpl("A", "", ""), bAfterA, RaceLogRaceStatus.SCHEDULED));
final MillisecondsDurationImpl aAfterC = new MillisecondsDurationImpl(8000);
- raceLogA.add(new RaceLogDependentStartTimeEventImpl(nowMock, author, nowMock, "12", null, 12,
- new SimpleRaceLogIdentifierImpl("C", "", ""), aAfterC));
+ raceLogA.add(new RaceLogDependentStartTimeEventImpl(nowMock, nowMock, author, "12", 12,
+ new SimpleRaceLogIdentifierImpl("C", "", ""), aAfterC, RaceLogRaceStatus.SCHEDULED));
// Check that all resolve to null in case of a cycle
StartTimeFinder finder = new StartTimeFinder(raceLogResolver, raceLogC);
@@ -157,7 +160,8 @@ public class DependentStartTimeFinderTest {
// Check that all resolve correctly after changing some element in cycle
TimePoint now = MillisecondsTimePoint.now();
- raceLogB.add(new RaceLogStartTimeEventImpl(now, author, now, "12", null, 12, new MillisecondsTimePoint(5000)));
+ raceLogB.add(new RaceLogStartTimeEventImpl(now, now, author, "12", 12, new MillisecondsTimePoint(5000),
+ RaceLogRaceStatus.SCHEDULED));
// now A -> C -> B
finder = new StartTimeFinder(raceLogResolver, raceLogA);
diff --git a/java/com.sap.sailing.domain.shared.android.test/src/com/sap/sailing/domain/racelog/analyzing/test/MultiLogAnalyzerTest.java b/java/com.sap.sailing.domain.shared.android.test/src/com/sap/sailing/domain/racelog/analyzing/test/MultiLogAnalyzerTest.java
index 02ceb503d7e..d7734f9bd2a 100644
--- a/java/com.sap.sailing.domain.shared.android.test/src/com/sap/sailing/domain/racelog/analyzing/test/MultiLogAnalyzerTest.java
+++ b/java/com.sap.sailing.domain.shared.android.test/src/com/sap/sailing/domain/racelog/analyzing/test/MultiLogAnalyzerTest.java
@@ -72,11 +72,11 @@ public class MultiLogAnalyzerTest {
Competitor c2 = createCompetitor(2);
Competitor c3 = createCompetitor(3);
- raceLog.add(new RaceLogRegisterCompetitorEventImpl(now(), author, now(), uuid(), 0, c1));
- regattaLog.add(new RegattaLogRegisterCompetitorEventImpl(now(), author, now(), uuid(), c2));
+ raceLog.add(new RaceLogRegisterCompetitorEventImpl(now(), now(), author, uuid(), 0, c1));
+ regattaLog.add(new RegattaLogRegisterCompetitorEventImpl(now(), now(), author, uuid(), c2));
- raceLog.add(new RaceLogRegisterCompetitorEventImpl(now(), author, now(), uuid(), 0, c3));
- regattaLog.add(new RegattaLogRegisterCompetitorEventImpl(now(), author, now(), uuid(), c3));
+ raceLog.add(new RaceLogRegisterCompetitorEventImpl(now(), now(), author, uuid(), 0, c3));
+ regattaLog.add(new RegattaLogRegisterCompetitorEventImpl(now(), now(), author, uuid(), c3));
Set result = new MultiLogAnalyzer<>(
RegisteredCompetitorsAnalyzer.Factory.INSTANCE, new MultiLogAnalyzer.SetReducer(), raceLog,
@@ -96,12 +96,12 @@ public class MultiLogAnalyzerTest {
DeviceIdentifier d1 = createDevice();
DeviceIdentifier d2 = createDevice();
- raceLog.add(new RaceLogDeviceCompetitorMappingEventImpl(now(), author, now(), 0, 0, c1, d1, t(0), t(10)));
- raceLog.add(new RaceLogDeviceCompetitorMappingEventImpl(now(), author, now(), 1, 0, c1, d2, t(30), t(40)));
- regattaLog.add(new RegattaLogDeviceCompetitorMappingEventImpl(now(), author, now(), 2, c2, d2, t(10), t(20)));
+ raceLog.add(new RaceLogDeviceCompetitorMappingEventImpl(now(), now(), author, 0, 0, c1, d1, t(0), t(10)));
+ raceLog.add(new RaceLogDeviceCompetitorMappingEventImpl(now(), now(), author, 1, 0, c1, d2, t(30), t(40)));
+ regattaLog.add(new RegattaLogDeviceCompetitorMappingEventImpl(now(), now(), author, 2, c2, d2, t(10), t(20)));
// and one for same item (competitor) in other log
- regattaLog.add(new RegattaLogDeviceCompetitorMappingEventImpl(now(), author, now(), 3, c1, d1, t(10),
+ regattaLog.add(new RegattaLogDeviceCompetitorMappingEventImpl(now(), now(), author, 3, c1, d1, t(10),
t(20)));
Map>> result = new MultiLogAnalyzer<>(
diff --git a/java/com.sap.sailing.domain.shared.android.test/src/com/sap/sailing/domain/racelog/state/test/DependentRaceStateTest.java b/java/com.sap.sailing.domain.shared.android.test/src/com/sap/sailing/domain/racelog/state/test/DependentRaceStateTest.java
index 534c6fcfbb5..29472750181 100644
--- a/java/com.sap.sailing.domain.shared.android.test/src/com/sap/sailing/domain/racelog/state/test/DependentRaceStateTest.java
+++ b/java/com.sap.sailing.domain.shared.android.test/src/com/sap/sailing/domain/racelog/state/test/DependentRaceStateTest.java
@@ -11,7 +11,6 @@ import org.junit.Test;
import com.sap.sailing.domain.abstractlog.AbstractLogEventAuthor;
import com.sap.sailing.domain.abstractlog.impl.LogEventAuthorImpl;
import com.sap.sailing.domain.abstractlog.race.RaceLog;
-import com.sap.sailing.domain.abstractlog.race.RaceLogEventFactory;
import com.sap.sailing.domain.abstractlog.race.SimpleRaceLogIdentifier;
import com.sap.sailing.domain.abstractlog.race.analyzing.impl.RaceLogResolver;
import com.sap.sailing.domain.abstractlog.race.impl.RaceLogDependentStartTimeEventImpl;
@@ -27,6 +26,7 @@ import com.sap.sailing.domain.abstractlog.race.state.racingprocedure.impl.Racing
import com.sap.sailing.domain.base.configuration.ConfigurationLoader;
import com.sap.sailing.domain.base.configuration.RegattaConfiguration;
import com.sap.sailing.domain.base.configuration.impl.EmptyRegattaConfiguration;
+import com.sap.sailing.domain.common.racelog.RaceLogRaceStatus;
import com.sap.sse.common.TimePoint;
import com.sap.sse.common.impl.MillisecondsDurationImpl;
import com.sap.sse.common.impl.MillisecondsTimePoint;
@@ -46,17 +46,15 @@ public class DependentRaceStateTest {
private RaceStateChangedListener listenerC;
private AbstractLogEventAuthor author;
- private RaceLogEventFactory factory;
private ConfigurationLoader configuration;
private TimePoint nowMock;
-
+
private RaceLogResolver raceLogResolver;
@Before
public void setUp() {
author = new LogEventAuthorImpl("Test", 1);
- factory = RaceLogEventFactory.INSTANCE;
configuration = new EmptyRegattaConfiguration();
raceLogA = new RaceLogImpl("raceLogA");
@@ -82,12 +80,12 @@ public class DependentRaceStateTest {
}
};
- stateA = new RaceStateImpl(raceLogResolver, raceLogA, author, factory, new RacingProcedureFactoryImpl(author,
- factory, configuration));
- stateB = new RaceStateImpl(raceLogResolver, raceLogB, author, factory, new RacingProcedureFactoryImpl(author,
- factory, configuration));
- stateC = new RaceStateImpl(raceLogResolver, raceLogC, author, factory, new RacingProcedureFactoryImpl(author,
- factory, configuration));
+ stateA = new RaceStateImpl(raceLogResolver, raceLogA, author, new RacingProcedureFactoryImpl(author,
+ configuration));
+ stateB = new RaceStateImpl(raceLogResolver, raceLogB, author, new RacingProcedureFactoryImpl(author,
+ configuration));
+ stateC = new RaceStateImpl(raceLogResolver, raceLogC, author, new RacingProcedureFactoryImpl(author,
+ configuration));
stateA.addChangedListener(listenerA);
stateB.addChangedListener(listenerB);
@@ -96,27 +94,27 @@ public class DependentRaceStateTest {
@Test
public void testCorrectAmountOfStartTimeChanges() {
- raceLogC.add(new RaceLogDependentStartTimeEventImpl(nowMock, author, nowMock, "12", null, 12,
- new SimpleRaceLogIdentifierImpl("B", "", ""), new MillisecondsDurationImpl(5000)));
+ raceLogC.add(new RaceLogDependentStartTimeEventImpl(nowMock, nowMock, author, "12", 12,
+ new SimpleRaceLogIdentifierImpl("B", "", ""), new MillisecondsDurationImpl(5000), RaceLogRaceStatus.SCHEDULED));
- raceLogB.add(new RaceLogDependentStartTimeEventImpl(nowMock, author, nowMock, "12", null, 12,
- new SimpleRaceLogIdentifierImpl("A", "", ""), new MillisecondsDurationImpl(5000)));
-
- TimePoint now = MillisecondsTimePoint.now();
- raceLogA.add(new RaceLogStartTimeEventImpl(now, author, now, "12", null, 12, new MillisecondsTimePoint(5000)));
-
- verify(listenerC, times(3)).onStartTimeChanged(stateC);
- verify(listenerB, times(2)).onStartTimeChanged(stateB);
- verify(listenerA, times(1)).onStartTimeChanged(stateA);
+ raceLogB.add(new RaceLogDependentStartTimeEventImpl(nowMock, nowMock, author, "12", 12,
+ new SimpleRaceLogIdentifierImpl("A", "", ""), new MillisecondsDurationImpl(5000), RaceLogRaceStatus.SCHEDULED));
+
+ TimePoint now = MillisecondsTimePoint.now();
+ raceLogA.add(new RaceLogStartTimeEventImpl(now, now, author, "12", 12, new MillisecondsTimePoint(5000), RaceLogRaceStatus.SCHEDULED));
+
+ verify(listenerC, times(3)).onStartTimeChanged(stateC);
+ verify(listenerB, times(2)).onStartTimeChanged(stateB);
+ verify(listenerA, times(1)).onStartTimeChanged(stateA);
}
@Test
public void testInitialRegistrationOfRaceState() {
final MillisecondsDurationImpl delta = new MillisecondsDurationImpl(5000);
- raceLogB.add(new RaceLogDependentStartTimeEventImpl(nowMock, author, nowMock, "12", null, 12,
+ raceLogB.add(new RaceLogDependentStartTimeEventImpl(nowMock, author, 12,
new SimpleRaceLogIdentifierImpl("A", "", ""), delta));
- final RaceState stateB2 = new RaceStateImpl(raceLogResolver, raceLogB, author, factory,
- new RacingProcedureFactoryImpl(author, factory, configuration));
+ final RaceState stateB2 = new RaceStateImpl(raceLogResolver, raceLogB, author, new RacingProcedureFactoryImpl(
+ author, configuration));
final TimePoint[] bTime = new TimePoint[1];
stateB2.addChangedListener(new BaseRaceStateChangedListener() {
@Override
@@ -125,25 +123,25 @@ public class DependentRaceStateTest {
}
});
TimePoint now = MillisecondsTimePoint.now();
- raceLogA.add(new RaceLogStartTimeEventImpl(now, author, now, "12", null, 12, now));
+ raceLogA.add(new RaceLogStartTimeEventImpl(now, author, 12, now));
assertEquals(now.plus(delta), bTime[0]);
- }
+ }
@Test
public void testCorrectAmountOfStartTimeChanges2() {
- raceLogC.add(new RaceLogDependentStartTimeEventImpl(nowMock, author, nowMock, "12", null, 12,
- new SimpleRaceLogIdentifierImpl("B", "", ""), new MillisecondsDurationImpl(5000)));
+ raceLogC.add(new RaceLogDependentStartTimeEventImpl(nowMock, nowMock, author, "12", 12,
+ new SimpleRaceLogIdentifierImpl("B", "", ""), new MillisecondsDurationImpl(5000), RaceLogRaceStatus.SCHEDULED));
- raceLogB.add(new RaceLogDependentStartTimeEventImpl(nowMock, author, nowMock, "12", null, 12,
- new SimpleRaceLogIdentifierImpl("A", "", ""), new MillisecondsDurationImpl(5000)));
-
- TimePoint now = MillisecondsTimePoint.now();
- raceLogA.add(new RaceLogStartTimeEventImpl(now, author, now, "12", null, 12, new MillisecondsTimePoint(5000)));
-
- raceLogB.add(new RaceLogStartTimeEventImpl(now, author, now, "12", null, 12, new MillisecondsTimePoint(20000)));
-
- verify(listenerA, times(1)).onStartTimeChanged(stateA);
- verify(listenerB, times(3)).onStartTimeChanged(stateB);
- verify(listenerC, times(4)).onStartTimeChanged(stateC);
+ raceLogB.add(new RaceLogDependentStartTimeEventImpl(nowMock, nowMock, author, "12", 12,
+ new SimpleRaceLogIdentifierImpl("A", "", ""), new MillisecondsDurationImpl(5000), RaceLogRaceStatus.SCHEDULED));
+
+ TimePoint now = MillisecondsTimePoint.now();
+ raceLogA.add(new RaceLogStartTimeEventImpl(now, now, author, "12", 12, new MillisecondsTimePoint(5000), RaceLogRaceStatus.SCHEDULED));
+
+ raceLogB.add(new RaceLogStartTimeEventImpl(now, now, author, "12", 12, new MillisecondsTimePoint(20000), RaceLogRaceStatus.SCHEDULED));
+
+ verify(listenerA, times(1)).onStartTimeChanged(stateA);
+ verify(listenerB, times(3)).onStartTimeChanged(stateB);
+ verify(listenerC, times(4)).onStartTimeChanged(stateC);
}
}
diff --git a/java/com.sap.sailing.domain.shared.android.test/src/com/sap/sailing/domain/racelog/state/test/RaceStateTest.java b/java/com.sap.sailing.domain.shared.android.test/src/com/sap/sailing/domain/racelog/state/test/RaceStateTest.java
index 99937e4f81a..6d53331d754 100644
--- a/java/com.sap.sailing.domain.shared.android.test/src/com/sap/sailing/domain/racelog/state/test/RaceStateTest.java
+++ b/java/com.sap.sailing.domain.shared.android.test/src/com/sap/sailing/domain/racelog/state/test/RaceStateTest.java
@@ -19,7 +19,6 @@ import org.junit.Test;
import com.sap.sailing.domain.abstractlog.AbstractLogEventAuthor;
import com.sap.sailing.domain.abstractlog.impl.LogEventAuthorImpl;
import com.sap.sailing.domain.abstractlog.race.RaceLog;
-import com.sap.sailing.domain.abstractlog.race.RaceLogEventFactory;
import com.sap.sailing.domain.abstractlog.race.analyzing.impl.RaceLogResolver;
import com.sap.sailing.domain.abstractlog.race.impl.RaceLogFlagEventImpl;
import com.sap.sailing.domain.abstractlog.race.impl.RaceLogImpl;
@@ -48,7 +47,6 @@ public class RaceStateTest {
private RaceLog raceLog;
private AbstractLogEventAuthor author;
- private RaceLogEventFactory factory;
private RacingProcedureType defaultRacingProcedureType;
private ConfigurationLoader configuration;
private RaceStateChangedListener listener;
@@ -60,13 +58,12 @@ public class RaceStateTest {
public void setUp() {
raceLog = new RaceLogImpl("test-log");
author = new LogEventAuthorImpl("Test", 1);
- factory = RaceLogEventFactory.INSTANCE;
defaultRacingProcedureType = RacingProcedureType.RRS26;
configuration = new EmptyRegattaConfiguration();
listener = mock(RaceStateChangedListener.class);
nowMock = mock(TimePoint.class);
- state = new RaceStateImpl(mock(RaceLogResolver.class), raceLog, author, factory, new RacingProcedureFactoryImpl(author, factory, configuration));
+ state = new RaceStateImpl(mock(RaceLogResolver.class), raceLog, author, new RacingProcedureFactoryImpl(author, configuration));
}
@Test
@@ -96,7 +93,7 @@ public class RaceStateTest {
config.setBasicConfiguration(mock(RacingProcedureConfiguration.class));
configuration = mock(ConfigurationLoader.class);
when(configuration.load()).thenReturn(config);
- state = new RaceStateImpl(mock(RaceLogResolver.class), raceLog, author, factory, new RacingProcedureFactoryImpl(author, factory, configuration));
+ state = new RaceStateImpl(mock(RaceLogResolver.class), raceLog, author, new RacingProcedureFactoryImpl(author, configuration));
assertEquals(RacingProcedureType.BASIC, state.getRacingProcedure().getType());
}
@@ -110,8 +107,8 @@ public class RaceStateTest {
config.setESSConfiguration(mock(ESSConfiguration.class));
configuration = mock(ConfigurationLoader.class);
when(configuration.load()).thenReturn(config);
- raceLog.add(new RaceLogStartProcedureChangedEventImpl(nowMock, author, nowMock, "12", null, 0, RacingProcedureType.ESS));
- state = new RaceStateImpl(mock(RaceLogResolver.class), raceLog, author, factory, new RacingProcedureFactoryImpl(author, factory, configuration));
+ raceLog.add(new RaceLogStartProcedureChangedEventImpl(nowMock, nowMock, author, "12", 0, RacingProcedureType.ESS));
+ state = new RaceStateImpl(mock(RaceLogResolver.class), raceLog, author, new RacingProcedureFactoryImpl(author, configuration));
assertEquals(RacingProcedureType.ESS, state.getRacingProcedure().getType());
}
@@ -136,8 +133,8 @@ public class RaceStateTest {
@Test
public void testSetIndividualRecall() {
assertFalse(state.getRacingProcedure().isIndividualRecallDisplayed());
- raceLog.add(new RaceLogFlagEventImpl(MillisecondsTimePoint.now(), author, MillisecondsTimePoint.now(), UUID
- .randomUUID(), null, /* pass */0, Flags.XRAY, Flags.NONE, /* pIsDisplayed */true));
+ raceLog.add(new RaceLogFlagEventImpl(MillisecondsTimePoint.now(), MillisecondsTimePoint.now(), author, UUID
+ .randomUUID(), /* pass */0, Flags.XRAY, Flags.NONE, /* pIsDisplayed */true));
assertTrue(state.getRacingProcedure().isIndividualRecallDisplayed());
}
diff --git a/java/com.sap.sailing.domain.shared.android.test/src/com/sap/sailing/domain/racelog/test/RaceLogEventImplTest.java b/java/com.sap.sailing.domain.shared.android.test/src/com/sap/sailing/domain/racelog/test/RaceLogEventImplTest.java
index 91b10656b99..ecb4cf09cb5 100644
--- a/java/com.sap.sailing.domain.shared.android.test/src/com/sap/sailing/domain/racelog/test/RaceLogEventImplTest.java
+++ b/java/com.sap.sailing.domain.shared.android.test/src/com/sap/sailing/domain/racelog/test/RaceLogEventImplTest.java
@@ -30,7 +30,7 @@ public class RaceLogEventImplTest {
public TestRaceLogEvent(TimePoint createdAt, AbstractLogEventAuthor author, TimePoint logicalTimePoint,
Serializable pId, List pInvolvedBoats, int pPassId) {
- super(createdAt, author, logicalTimePoint, pId, pInvolvedBoats, pPassId);
+ super(createdAt, logicalTimePoint, author, pId, pInvolvedBoats, pPassId);
}
@Override
diff --git a/java/com.sap.sailing.domain.shared.android.test/src/com/sap/sailing/domain/racelog/test/RaceLogRevocationTest.java b/java/com.sap.sailing.domain.shared.android.test/src/com/sap/sailing/domain/racelog/test/RaceLogRevocationTest.java
index 895ab6a854c..b6a6612727b 100644
--- a/java/com.sap.sailing.domain.shared.android.test/src/com/sap/sailing/domain/racelog/test/RaceLogRevocationTest.java
+++ b/java/com.sap.sailing.domain.shared.android.test/src/com/sap/sailing/domain/racelog/test/RaceLogRevocationTest.java
@@ -14,10 +14,10 @@ import com.sap.sailing.domain.abstractlog.impl.LogEventAuthorImpl;
import com.sap.sailing.domain.abstractlog.race.RaceLog;
import com.sap.sailing.domain.abstractlog.race.RaceLogChangedListener;
import com.sap.sailing.domain.abstractlog.race.RaceLogEvent;
-import com.sap.sailing.domain.abstractlog.race.RaceLogEventFactory;
import com.sap.sailing.domain.abstractlog.race.impl.RaceLogChangedVisitor;
import com.sap.sailing.domain.abstractlog.race.impl.RaceLogImpl;
import com.sap.sailing.domain.abstractlog.race.tracking.RaceLogDenoteForTrackingEvent;
+import com.sap.sailing.domain.abstractlog.race.tracking.impl.RaceLogDenoteForTrackingEventImpl;
import com.sap.sailing.domain.common.abstractlog.NotRevokableException;
import com.sap.sse.common.TimePoint;
import com.sap.sse.common.Util;
@@ -107,7 +107,7 @@ public class RaceLogRevocationTest {
@Test
public void sameEventRevokedByTwoClientsBeforeSync() throws NotRevokableException {
- RaceLogDenoteForTrackingEvent event = RaceLogEventFactory.INSTANCE.createDenoteForTrackingEvent(
+ RaceLogDenoteForTrackingEvent event = new RaceLogDenoteForTrackingEventImpl(
now(), serverAuthor, 0, "race", null, null);
serverRaceLog.add(event);
diff --git a/java/com.sap.sailing.domain.shared.android.test/src/com/sap/sailing/domain/racelog/test/RaceLogTest.java b/java/com.sap.sailing.domain.shared.android.test/src/com/sap/sailing/domain/racelog/test/RaceLogTest.java
index 361816d7068..6d0b270353a 100644
--- a/java/com.sap.sailing.domain.shared.android.test/src/com/sap/sailing/domain/racelog/test/RaceLogTest.java
+++ b/java/com.sap.sailing.domain.shared.android.test/src/com/sap/sailing/domain/racelog/test/RaceLogTest.java
@@ -23,12 +23,12 @@ import com.sap.sailing.domain.abstractlog.AbstractLogEventAuthor;
import com.sap.sailing.domain.abstractlog.impl.LogEventAuthorImpl;
import com.sap.sailing.domain.abstractlog.race.RaceLog;
import com.sap.sailing.domain.abstractlog.race.RaceLogEvent;
-import com.sap.sailing.domain.abstractlog.race.RaceLogEventFactory;
import com.sap.sailing.domain.abstractlog.race.RaceLogEventVisitor;
import com.sap.sailing.domain.abstractlog.race.RaceLogFlagEvent;
import com.sap.sailing.domain.abstractlog.race.RaceLogStartTimeEvent;
import com.sap.sailing.domain.abstractlog.race.impl.RaceLogEventImpl;
import com.sap.sailing.domain.abstractlog.race.impl.RaceLogImpl;
+import com.sap.sailing.domain.abstractlog.race.impl.RaceLogStartTimeEventImpl;
import com.sap.sse.common.TimePoint;
import com.sap.sse.common.Util;
import com.sap.sse.common.impl.MillisecondsTimePoint;
@@ -40,8 +40,8 @@ public class RaceLogTest {
private static class MockRaceLogEventForSorting extends RaceLogEventImpl {
public MockRaceLogEventForSorting(long createdAtMillis) {
super(new MillisecondsTimePoint(createdAtMillis),
- /* author */ new LogEventAuthorImpl("Dummy Author", /* priority */ 0),
- MillisecondsTimePoint.now(), /* ID */ UUID.randomUUID(), /* pInvolvedBoats */ null, /* pass ID */ 1);
+ MillisecondsTimePoint.now(),
+ /* author */ new LogEventAuthorImpl("Dummy Author", /* priority */ 0), /* ID */ UUID.randomUUID(), /* pInvolvedBoats */ null, /* pass ID */ 1);
}
private static final long serialVersionUID = 4928452859543831451L;
@@ -433,14 +433,14 @@ public class RaceLogTest {
UUID client1Id = UUID.randomUUID();
UUID client2Id = UUID.randomUUID();
final TimePoint now = MillisecondsTimePoint.now();
- RaceLogStartTimeEvent startTimeEvent1 = RaceLogEventFactory.INSTANCE.createStartTimeEvent(now, author, 1, now.plus(1));
+ RaceLogStartTimeEvent startTimeEvent1 = new RaceLogStartTimeEventImpl(now, author, 1, now.plus(1));
Iterable empty = raceLog.add(startTimeEvent1, client1Id);
assertTrue(Util.isEmpty(empty));
- RaceLogStartTimeEvent startTimeEvent2 = RaceLogEventFactory.INSTANCE.createStartTimeEvent(now.plus(2), author, 1, now.plus(3));
+ RaceLogStartTimeEvent startTimeEvent2 = new RaceLogStartTimeEventImpl(now.plus(2), author, 1, now.plus(3));
Iterable nonEmpty = raceLog.add(startTimeEvent2, client2Id);
assertEquals(1, Util.size(nonEmpty));
assertSame(startTimeEvent1, nonEmpty.iterator().next());
- RaceLogStartTimeEvent startTimeEvent3 = RaceLogEventFactory.INSTANCE.createStartTimeEvent(now.plus(4), author, 1, now.plus(5));
+ RaceLogStartTimeEvent startTimeEvent3 = new RaceLogStartTimeEventImpl(now.plus(4), author, 1, now.plus(5));
Iterable nonEmpty2 = raceLog.add(startTimeEvent3, client1Id);
assertEquals(1, Util.size(nonEmpty2));
assertSame(startTimeEvent2, nonEmpty2.iterator().next());
diff --git a/java/com.sap.sailing.domain.shared.android.test/src/com/sap/sailing/domain/racelog/test/SerializeRaceLogEventsTest.java b/java/com.sap.sailing.domain.shared.android.test/src/com/sap/sailing/domain/racelog/test/SerializeRaceLogEventsTest.java
index 035e393f9c7..b2bc042d036 100755
--- a/java/com.sap.sailing.domain.shared.android.test/src/com/sap/sailing/domain/racelog/test/SerializeRaceLogEventsTest.java
+++ b/java/com.sap.sailing.domain.shared.android.test/src/com/sap/sailing/domain/racelog/test/SerializeRaceLogEventsTest.java
@@ -13,10 +13,11 @@ import org.junit.Test;
import com.sap.sailing.domain.abstractlog.impl.LogEventAuthorImpl;
import com.sap.sailing.domain.abstractlog.race.RaceLog;
-import com.sap.sailing.domain.abstractlog.race.RaceLogEventFactory;
import com.sap.sailing.domain.abstractlog.race.RaceLogStartTimeEvent;
import com.sap.sailing.domain.abstractlog.race.impl.RaceLogImpl;
+import com.sap.sailing.domain.abstractlog.race.impl.RaceLogStartTimeEventImpl;
import com.sap.sailing.domain.abstractlog.race.tracking.RaceLogDeviceCompetitorMappingEvent;
+import com.sap.sailing.domain.abstractlog.race.tracking.impl.RaceLogDeviceCompetitorMappingEventImpl;
import com.sap.sailing.domain.racelog.tracking.test.mock.SmartphoneImeiIdentifier;
import com.sap.sailing.domain.test.AbstractLeaderboardTest;
import com.sap.sse.common.Util;
@@ -32,14 +33,12 @@ public class SerializeRaceLogEventsTest {
private ObjectOutputStream oos;
private ByteArrayOutputStream bos;
private RaceLog raceLog;
- private RaceLogEventFactory eventFactory;
@Before
public void setUp() throws IOException {
bos = new ByteArrayOutputStream();
oos = new ObjectOutputStream(bos);
raceLog = new RaceLogImpl("Test Race Log");
- eventFactory = RaceLogEventFactory.INSTANCE;
}
@Test
@@ -59,7 +58,7 @@ public class SerializeRaceLogEventsTest {
@Test
public void testRaceLogSerializationWithSingleEvent() throws IOException, ClassNotFoundException {
- RaceLogStartTimeEvent startTimeEvent = eventFactory.createStartTimeEvent(MillisecondsTimePoint.now(),
+ RaceLogStartTimeEvent startTimeEvent = new RaceLogStartTimeEventImpl(MillisecondsTimePoint.now(),
new LogEventAuthorImpl("Author Name", /* priority */0), /* passId */1, /* startTime */
MillisecondsTimePoint.now());
raceLog.add(startTimeEvent);
@@ -79,9 +78,9 @@ public class SerializeRaceLogEventsTest {
@Test
public void testRaceLogSerializationWithEventContainingDeviceIdentifier() throws IOException, ClassNotFoundException {
- RaceLogDeviceCompetitorMappingEvent mappingEvent = eventFactory.createDeviceCompetitorMappingEvent(
- MillisecondsTimePoint.now(), new LogEventAuthorImpl("Author Name", /* priority */0), new SmartphoneImeiIdentifier("1948364938463903"),
- AbstractLeaderboardTest.createCompetitor("Test Competitor"), 0, new MillisecondsTimePoint(0), new MillisecondsTimePoint(10));
+ RaceLogDeviceCompetitorMappingEvent mappingEvent = new RaceLogDeviceCompetitorMappingEventImpl(
+ MillisecondsTimePoint.now(), new LogEventAuthorImpl("Author Name", /* priority */0), 0,
+ AbstractLeaderboardTest.createCompetitor("Test Competitor"), new SmartphoneImeiIdentifier("1948364938463903"), new MillisecondsTimePoint(0), new MillisecondsTimePoint(10));
raceLog.add(mappingEvent);
oos.writeObject(raceLog);
ObjectInputStream ois = getObjectInputStream();
diff --git a/java/com.sap.sailing.domain.shared.android.test/src/com/sap/sailing/domain/racelog/tracking/analyzing/test/AbstractRaceLogTrackingTest.java b/java/com.sap.sailing.domain.shared.android.test/src/com/sap/sailing/domain/racelog/tracking/analyzing/test/AbstractRaceLogTrackingTest.java
index 251fa779f10..2235f824acd 100644
--- a/java/com.sap.sailing.domain.shared.android.test/src/com/sap/sailing/domain/racelog/tracking/analyzing/test/AbstractRaceLogTrackingTest.java
+++ b/java/com.sap.sailing.domain.shared.android.test/src/com/sap/sailing/domain/racelog/tracking/analyzing/test/AbstractRaceLogTrackingTest.java
@@ -5,7 +5,6 @@ import org.junit.Before;
import com.sap.sailing.domain.abstractlog.AbstractLogEventAuthor;
import com.sap.sailing.domain.abstractlog.impl.LogEventAuthorImpl;
import com.sap.sailing.domain.abstractlog.race.RaceLog;
-import com.sap.sailing.domain.abstractlog.race.RaceLogEventRestoreFactory;
import com.sap.sailing.domain.abstractlog.race.impl.RaceLogImpl;
import com.sap.sse.common.TimePoint;
import com.sap.sse.common.impl.MillisecondsTimePoint;
@@ -17,7 +16,6 @@ public abstract class AbstractRaceLogTrackingTest {
protected final AbstractLogEventAuthor author1 = new LogEventAuthorImpl("author1", 1);
protected final TimePoint now = MillisecondsTimePoint.now();
- protected final RaceLogEventRestoreFactory factory = RaceLogEventRestoreFactory.INSTANCE;
public AbstractRaceLogTrackingTest() {
super();
diff --git a/java/com.sap.sailing.domain.shared.android.test/src/com/sap/sailing/domain/racelog/tracking/analyzing/test/DeviceMappingFinderTest.java b/java/com.sap.sailing.domain.shared.android.test/src/com/sap/sailing/domain/racelog/tracking/analyzing/test/DeviceMappingFinderTest.java
index bef31f43e99..212503f37c7 100644
--- a/java/com.sap.sailing.domain.shared.android.test/src/com/sap/sailing/domain/racelog/tracking/analyzing/test/DeviceMappingFinderTest.java
+++ b/java/com.sap.sailing.domain.shared.android.test/src/com/sap/sailing/domain/racelog/tracking/analyzing/test/DeviceMappingFinderTest.java
@@ -12,6 +12,8 @@ import org.junit.Test;
import com.sap.sailing.domain.abstractlog.AbstractLogEventAuthor;
import com.sap.sailing.domain.abstractlog.race.RaceLogEvent;
+import com.sap.sailing.domain.abstractlog.race.tracking.impl.RaceLogCloseOpenEndedDeviceMappingEventImpl;
+import com.sap.sailing.domain.abstractlog.race.tracking.impl.RaceLogDeviceCompetitorMappingEventImpl;
import com.sap.sailing.domain.abstractlog.shared.analyzing.DeviceCompetitorMappingFinder;
import com.sap.sailing.domain.base.Competitor;
import com.sap.sailing.domain.base.impl.CompetitorImpl;
@@ -41,14 +43,14 @@ public class DeviceMappingFinderTest extends AbstractRaceLogTrackingTest {
}
private Serializable addMapping(AbstractLogEventAuthor author, DeviceIdentifier device, Long from, Long to, Competitor item) {
- RaceLogEvent mapping = factory.createDeviceCompetitorMappingEvent(t(), author, t(), UUID.randomUUID(), device, item, 0,
+ RaceLogEvent mapping = new RaceLogDeviceCompetitorMappingEventImpl(t(), t(), author, UUID.randomUUID(), 0, item, device,
t(from), t(to));
log.add(mapping);
return mapping.getId();
}
private void closeMapping(AbstractLogEventAuthor author, DeviceIdentifier device, Serializable mappingId, long millis) {
- RaceLogEvent mapping = factory.createCloseOpenEndedDeviceMappingEvent(t(), author, t(), UUID.randomUUID(), 0, mappingId,
+ RaceLogEvent mapping = new RaceLogCloseOpenEndedDeviceMappingEventImpl(t(), t(), author, UUID.randomUUID(), 0, mappingId,
new MillisecondsTimePoint(millis));
log.add(mapping);
}
diff --git a/java/com.sap.sailing.domain.shared.android.test/src/com/sap/sailing/domain/racelog/tracking/analyzing/test/RevokeEventTest.java b/java/com.sap.sailing.domain.shared.android.test/src/com/sap/sailing/domain/racelog/tracking/analyzing/test/RevokeEventTest.java
index 6344333f059..c3d00398143 100644
--- a/java/com.sap.sailing.domain.shared.android.test/src/com/sap/sailing/domain/racelog/tracking/analyzing/test/RevokeEventTest.java
+++ b/java/com.sap.sailing.domain.shared.android.test/src/com/sap/sailing/domain/racelog/tracking/analyzing/test/RevokeEventTest.java
@@ -8,13 +8,15 @@ import org.junit.Test;
import com.sap.sailing.domain.abstractlog.race.RaceLogEvent;
import com.sap.sailing.domain.abstractlog.race.RaceLogRevokeEvent;
+import com.sap.sailing.domain.abstractlog.race.impl.RaceLogRevokeEventImpl;
+import com.sap.sailing.domain.abstractlog.race.tracking.impl.RaceLogDeviceCompetitorMappingEventImpl;
import com.sap.sse.common.Util;
public class RevokeEventTest extends AbstractRaceLogTrackingTest {
@Test
public void revokedEventIsExcluded() {
- RaceLogEvent event = factory.createDeviceCompetitorMappingEvent(now, author, now, UUID.randomUUID(), null, null, 0, null, null);
- RaceLogRevokeEvent revokeEvent = factory.createRevokeEvent(now.plus(1), author, now.plus(1), UUID.randomUUID(), 0, event.getId(),
+ RaceLogEvent event = new RaceLogDeviceCompetitorMappingEventImpl(now, now, author, UUID.randomUUID(), 0, null, null, null, null);
+ RaceLogRevokeEvent revokeEvent = new RaceLogRevokeEventImpl(now.plus(1), now.plus(1), author, UUID.randomUUID(), 0, event.getId(),
null, null, null);
log.add(event);
@@ -27,8 +29,8 @@ public class RevokeEventTest extends AbstractRaceLogTrackingTest {
@Test
public void eventRevokedByAuthorWithLowerPrioIsNotExcluded() {
- RaceLogEvent event = factory.createDeviceCompetitorMappingEvent(now, author, now, UUID.randomUUID(), null, null, 0, null, null);
- RaceLogRevokeEvent revokeEvent = factory.createRevokeEvent(now.plus(1), author1, now.plus(1), UUID.randomUUID(), 0, event.getId(),
+ RaceLogEvent event = new RaceLogDeviceCompetitorMappingEventImpl(now, now, author, UUID.randomUUID(), 0, null, null, null, null);
+ RaceLogRevokeEvent revokeEvent = new RaceLogRevokeEventImpl(now.plus(1), now.plus(1), author1, UUID.randomUUID(), 0, event.getId(),
null, null, null);
log.add(event);
@@ -41,10 +43,10 @@ public class RevokeEventTest extends AbstractRaceLogTrackingTest {
@Test
public void revokingRevokeEventIsNotHarmful() {
- RaceLogEvent event = factory.createDeviceCompetitorMappingEvent(now, author, now, UUID.randomUUID(), null, null, 0, null, null);
- RaceLogRevokeEvent revokeEvent = factory.createRevokeEvent(now.plus(1), author, now.plus(1), UUID.randomUUID(), 0, event.getId(),
+ RaceLogEvent event = new RaceLogDeviceCompetitorMappingEventImpl(now, now, author, UUID.randomUUID(), 0, null, null, null, null);
+ RaceLogRevokeEvent revokeEvent = new RaceLogRevokeEventImpl(now.plus(1), now.plus(1), author, UUID.randomUUID(), 0, event.getId(),
null, null, null);
- RaceLogRevokeEvent revokeEvent2 = factory.createRevokeEvent(now.plus(2), author, now.plus(2), UUID.randomUUID(), 2, revokeEvent.getId(),
+ RaceLogRevokeEvent revokeEvent2 = new RaceLogRevokeEventImpl(now.plus(2), now.plus(2), author, UUID.randomUUID(), 2, revokeEvent.getId(),
null, null, null);
log.add(event);
diff --git a/java/com.sap.sailing.domain.shared.android.test/src/com/sap/sailinig/domain/based/impl/BoatClassCacheTest.java b/java/com.sap.sailing.domain.shared.android.test/src/com/sap/sailinig/domain/based/impl/BoatClassCacheTest.java
new file mode 100644
index 00000000000..c54e6d663ad
--- /dev/null
+++ b/java/com.sap.sailing.domain.shared.android.test/src/com/sap/sailinig/domain/based/impl/BoatClassCacheTest.java
@@ -0,0 +1,75 @@
+package com.sap.sailinig.domain.based.impl;
+
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertSame;
+
+import org.junit.Before;
+import org.junit.Test;
+
+import com.sap.sailing.domain.base.BoatClass;
+import com.sap.sailing.domain.base.SharedDomainFactory;
+import com.sap.sailing.domain.base.impl.SharedDomainFactoryImpl;
+import com.sap.sailing.domain.common.BoatClassMasterdata;
+
+/**
+ * Tests creation and caching of boat classes. See also bug 3347
+ * (http://bugzilla.sapsailing.com/bugzilla/show_bug.cgi?id=3347).
+ *
+ * @author Axel Uhl (d043530)
+ *
+ */
+public class BoatClassCacheTest {
+ private SharedDomainFactory sharedDomainFactory;
+
+ @Before
+ public void setUp() {
+ sharedDomainFactory = new SharedDomainFactoryImpl(/* raceLogResolver */ null);
+ }
+
+ @Test
+ public void testQueryingBoatClassByDisplayNameFirstThenCanonicalizedAlternativeName() {
+ final BoatClassMasterdata laserMasterData = BoatClassMasterdata.LASER_INT;
+ final String laserAlternativeName = laserMasterData.getAlternativeNames()[0];
+ final String unifiedAlternativeName = BoatClassMasterdata.unifyBoatClassName(laserAlternativeName);
+ final BoatClass laserByDisplayName = sharedDomainFactory.getOrCreateBoatClass(laserMasterData.getDisplayName());
+ final BoatClass laserByUnifiedAlternativeName = sharedDomainFactory.getOrCreateBoatClass(unifiedAlternativeName);
+ assertSame(laserByDisplayName, laserByUnifiedAlternativeName);
+ }
+
+ @Test
+ public void testQueryingBoatClassByAlternativeNameFirstThenCanonicalizedDisplayName() {
+ final BoatClassMasterdata laserMasterData = BoatClassMasterdata.LASER_INT;
+ final String laserAlternativeName = laserMasterData.getAlternativeNames()[0];
+ final BoatClass laserByAlternativeName = sharedDomainFactory.getOrCreateBoatClass(laserAlternativeName);
+ final String unifiedDisplayName = BoatClassMasterdata.unifyBoatClassName(laserMasterData.getDisplayName());
+ final BoatClass laserByUnifiedDisplayName = sharedDomainFactory.getOrCreateBoatClass(unifiedDisplayName);
+ assertSame(laserByAlternativeName, laserByUnifiedDisplayName);
+ }
+
+ @Test
+ public void testQueryingBoatClassByDisplayNameFirstThenCanonicalizedDisplayName() {
+ final BoatClassMasterdata laserMasterData = BoatClassMasterdata.LASER_INT;
+ final BoatClass laserByDisplayName = sharedDomainFactory.getOrCreateBoatClass(laserMasterData.getDisplayName());
+ final String unifiedDisplayName = BoatClassMasterdata.unifyBoatClassName(laserMasterData.getDisplayName());
+ final BoatClass laserByUnifiedDisplayName = sharedDomainFactory.getOrCreateBoatClass(unifiedDisplayName);
+ assertSame(laserByDisplayName, laserByUnifiedDisplayName);
+ }
+
+ @Test
+ public void testQueryingBoatClassByAlternativeNameFirstThenCanonicalizedAlternativeName() {
+ final BoatClassMasterdata laserMasterData = BoatClassMasterdata.LASER_INT;
+ final String laserAlternativeName = laserMasterData.getAlternativeNames()[0];
+ final BoatClass laserByAlternativeName = sharedDomainFactory.getOrCreateBoatClass(laserAlternativeName);
+ final String unifiedAlternativeName = BoatClassMasterdata.unifyBoatClassName(laserAlternativeName);
+ final BoatClass laserByUnifiedAlternativeName = sharedDomainFactory.getOrCreateBoatClass(unifiedAlternativeName);
+ assertSame(laserByAlternativeName, laserByUnifiedAlternativeName);
+ }
+
+ @Test
+ public void testEssMayHaveNonUpwindStart() {
+ for (final String boatClassName : new String[] { "extreme40", "ess", "ess40" }) {
+ final BoatClass ess40 = sharedDomainFactory.getOrCreateBoatClass(boatClassName);
+ assertFalse("Boat class "+boatClassName+" expected to allow for non-upwind starts", ess40.typicallyStartsUpwind());
+ }
+ }
+}
diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/impl/AbstractLogEventImpl.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/impl/AbstractLogEventImpl.java
index d6e50866d1c..7c6595e1eb5 100644
--- a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/impl/AbstractLogEventImpl.java
+++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/impl/AbstractLogEventImpl.java
@@ -1,10 +1,12 @@
package com.sap.sailing.domain.abstractlog.impl;
import java.io.Serializable;
+import java.util.UUID;
import com.sap.sailing.domain.abstractlog.AbstractLogEvent;
import com.sap.sailing.domain.abstractlog.AbstractLogEventAuthor;
import com.sap.sse.common.TimePoint;
+import com.sap.sse.common.impl.MillisecondsTimePoint;
public abstract class AbstractLogEventImpl implements AbstractLogEvent {
@@ -15,13 +17,27 @@ public abstract class AbstractLogEventImpl implements AbstractLogEvent
private final Serializable id;
private final AbstractLogEventAuthor author;
- public AbstractLogEventImpl(TimePoint createdAt, AbstractLogEventAuthor author, TimePoint logicalTimePoint,
+ public AbstractLogEventImpl(TimePoint createdAt, TimePoint logicalTimePoint, AbstractLogEventAuthor author,
Serializable pId) {
this.createdAt = createdAt;
this.author = author;
this.logicalTimePoint = logicalTimePoint;
this.id = pId;
}
+
+ /**
+ * To be used by constructors creating new events as the value for {@link #createdAt}.
+ */
+ protected static final TimePoint now() {
+ return MillisecondsTimePoint.now();
+ }
+
+ /**
+ * To be used by constructors creating new events as the value for {@link #id}.
+ */
+ protected static final Serializable randId() {
+ return UUID.randomUUID();
+ }
@Override
public TimePoint getCreatedAt() {
diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/impl/RevokeEventImpl.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/impl/RevokeEventImpl.java
index 57aa58e9890..8bc9a637983 100644
--- a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/impl/RevokeEventImpl.java
+++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/impl/RevokeEventImpl.java
@@ -18,14 +18,14 @@ public abstract class RevokeEventImpl extends AbstractLogEventImpl toRevoke, String reason) {
- this(MillisecondsTimePoint.now(), author, MillisecondsTimePoint.now(), UUID.randomUUID(),
+ this(MillisecondsTimePoint.now(), MillisecondsTimePoint.now(), author, UUID.randomUUID(),
toRevoke.getId(), toRevoke.getClass().getName(), toRevoke.getShortInfo(), reason);
}
- public RevokeEventImpl(TimePoint createdAt, AbstractLogEventAuthor author, TimePoint logicalTimePoint,
+ public RevokeEventImpl(TimePoint createdAt, TimePoint logicalTimePoint, AbstractLogEventAuthor author,
Serializable pId, Serializable revokedEventId, String revokedEventType,
String revokedEventShortInfo, String reason) {
- super(createdAt, author, logicalTimePoint, pId);
+ super(createdAt, logicalTimePoint, author, pId);
this.revokedEventId = revokedEventId;
this.reason = reason;
this.revokedEventType = revokedEventType;
diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/RaceLogEventFactory.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/RaceLogEventFactory.java
deleted file mode 100644
index dd6c9169caf..00000000000
--- a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/RaceLogEventFactory.java
+++ /dev/null
@@ -1,148 +0,0 @@
-package com.sap.sailing.domain.abstractlog.race;
-
-import java.io.Serializable;
-import java.util.List;
-
-import com.sap.sailing.domain.abstractlog.AbstractLogEventAuthor;
-import com.sap.sailing.domain.abstractlog.race.impl.RaceLogEventFactoryImpl;
-import com.sap.sailing.domain.abstractlog.race.scoring.AdditionalScoringInformationType;
-import com.sap.sailing.domain.abstractlog.race.scoring.RaceLogAdditionalScoringInformationEvent;
-import com.sap.sailing.domain.abstractlog.race.tracking.RaceLogCloseOpenEndedDeviceMappingEvent;
-import com.sap.sailing.domain.abstractlog.race.tracking.RaceLogDefineMarkEvent;
-import com.sap.sailing.domain.abstractlog.race.tracking.RaceLogDenoteForTrackingEvent;
-import com.sap.sailing.domain.abstractlog.race.tracking.RaceLogDeviceCompetitorMappingEvent;
-import com.sap.sailing.domain.abstractlog.race.tracking.RaceLogDeviceMarkMappingEvent;
-import com.sap.sailing.domain.abstractlog.race.tracking.RaceLogRegisterCompetitorEvent;
-import com.sap.sailing.domain.abstractlog.race.tracking.RaceLogStartTrackingEvent;
-import com.sap.sailing.domain.base.BoatClass;
-import com.sap.sailing.domain.base.Competitor;
-import com.sap.sailing.domain.base.CourseBase;
-import com.sap.sailing.domain.base.Mark;
-import com.sap.sailing.domain.common.Wind;
-import com.sap.sailing.domain.common.racelog.Flags;
-import com.sap.sailing.domain.common.racelog.RaceLogRaceStatus;
-import com.sap.sailing.domain.common.racelog.RacingProcedureType;
-import com.sap.sailing.domain.racelogtracking.DeviceIdentifier;
-import com.sap.sse.common.Duration;
-import com.sap.sse.common.TimePoint;
-
-public interface RaceLogEventFactory {
- RaceLogEventFactory INSTANCE = new RaceLogEventFactoryImpl();
-
- RaceLogFlagEvent createFlagEvent(TimePoint logicalTimePoint, AbstractLogEventAuthor author, Serializable id, List involvedBoats,
- int passId, Flags upperFlag, Flags lowerFlag, boolean isDisplayed);
-
- RaceLogFlagEvent createFlagEvent(TimePoint logicalTimePoint, AbstractLogEventAuthor author, int passId, Flags upperFlag,
- Flags lowerFlag, boolean isDisplayed);
-
- RaceLogStartTimeEvent createStartTimeEvent(TimePoint logicalTimePoint, AbstractLogEventAuthor author, Serializable id,
- List involvedBoats, int passId, TimePoint startTime);
-
- RaceLogStartTimeEvent createStartTimeEvent(TimePoint logicalTimePoint, AbstractLogEventAuthor author, int passId, TimePoint startTime);
-
- RaceLogRaceStatusEvent createRaceStatusEvent(TimePoint logicalTimePoint, AbstractLogEventAuthor author, Serializable id,
- List competitors, int passId, RaceLogRaceStatus nextStatus);
-
- RaceLogRaceStatusEvent createRaceStatusEvent(TimePoint logicalTimePoint, AbstractLogEventAuthor author, int passId, RaceLogRaceStatus nextStatus);
-
- RaceLogPassChangeEvent createPassChangeEvent(TimePoint logicalTimePoint, AbstractLogEventAuthor author, Serializable id,
- List competitors, int passId);
-
- RaceLogPassChangeEvent createPassChangeEvent(TimePoint logicalTimePoint, AbstractLogEventAuthor author, int passId);
-
- RaceLogCourseAreaChangedEvent createCourseAreaChangedEvent(TimePoint logicalTimePoint, AbstractLogEventAuthor author,
- Serializable id, List competitors, int passId, Serializable courseAreaId);
-
- RaceLogCourseAreaChangedEvent createCourseAreaChangedEvent(TimePoint logicalTimePoint, AbstractLogEventAuthor author,
- int passId, Serializable courseAreaId);
-
- RaceLogCourseDesignChangedEvent createCourseDesignChangedEvent(TimePoint logicalTimePoint, AbstractLogEventAuthor author,
- Serializable id, List competitors, int passId, CourseBase courseData);
-
- RaceLogCourseDesignChangedEvent createCourseDesignChangedEvent(TimePoint logicalTimePoint, AbstractLogEventAuthor author,
- int passId, CourseBase courseData);
-
- RaceLogFinishPositioningListChangedEvent createFinishPositioningListChangedEvent(TimePoint logicalTimePoint,
- AbstractLogEventAuthor author, Serializable id, List competitors,
- int passId, CompetitorResults positionedCompetitors);
-
- RaceLogFinishPositioningListChangedEvent createFinishPositioningListChangedEvent(TimePoint logicalTimePoint, AbstractLogEventAuthor author,
- int passId, CompetitorResults positionedCompetitors);
-
- RaceLogFinishPositioningConfirmedEvent createFinishPositioningConfirmedEvent(TimePoint logicalTimePoint, AbstractLogEventAuthor author,
- Serializable id, List competitors, int passId, CompetitorResults positionedCompetitors);
-
- RaceLogFinishPositioningConfirmedEvent createFinishPositioningConfirmedEvent(TimePoint logicalTimePoint, AbstractLogEventAuthor author,
- int passId, CompetitorResults positionedCompetitors);
-
- RaceLogPathfinderEvent createPathfinderEvent(TimePoint logicalTimePoint, AbstractLogEventAuthor author, Serializable id,
- List competitors, int passId, String pathfinderId);
-
- RaceLogPathfinderEvent createPathfinderEvent(TimePoint logicalTimePoint, AbstractLogEventAuthor author, int passId, String pathfinderId);
-
- RaceLogGateLineOpeningTimeEvent createGateLineOpeningTimeEvent(TimePoint logicalTimePoint, AbstractLogEventAuthor author,
- Serializable id, List competitors, int passId, Long gateLaunchStopTime, Long golfDownTime);
-
- RaceLogGateLineOpeningTimeEvent createGateLineOpeningTimeEvent(TimePoint logicalTimePoint, AbstractLogEventAuthor author,
- int passId, Long gateLaunchStopTime, Long golfDownTime);
-
- RaceLogStartProcedureChangedEvent createStartProcedureChangedEvent(TimePoint logicalTimePoint, AbstractLogEventAuthor author,
- Serializable id, List competitors, int passId, RacingProcedureType type);
-
- RaceLogStartProcedureChangedEvent createStartProcedureChangedEvent(TimePoint logicalTimePoint, AbstractLogEventAuthor author,
- int passId, RacingProcedureType type);
-
- RaceLogProtestStartTimeEvent createProtestStartTimeEvent(TimePoint logicalTimePoint, AbstractLogEventAuthor author,
- Serializable id, List competitors, int passId, TimePoint protestStartTime);
-
- RaceLogProtestStartTimeEvent createProtestStartTimeEvent(TimePoint logicalTimePoint, AbstractLogEventAuthor author, int passId, TimePoint protestStartTime);
-
- RaceLogWindFixEvent createWindFixEvent(TimePoint eventTime, AbstractLogEventAuthor author, int currentPassId, Wind wind, boolean isMagnetic);
-
- RaceLogWindFixEvent createWindFixEvent(TimePoint logicalTimePoint, AbstractLogEventAuthor author,
- Serializable id, List competitors, int passId, Wind wind, boolean isMagnetic);
-
- RaceLogDeviceCompetitorMappingEvent createDeviceCompetitorMappingEvent(TimePoint logicalTimePoint, AbstractLogEventAuthor author,
- DeviceIdentifier device, Competitor mappedTo, int passId, TimePoint from, TimePoint to);
-
- RaceLogDeviceMarkMappingEvent createDeviceMarkMappingEvent(TimePoint logicalTimePoint, AbstractLogEventAuthor author,
- DeviceIdentifier device, Mark mappedTo, int passId, TimePoint from, TimePoint to);
-
- RaceLogDenoteForTrackingEvent createDenoteForTrackingEvent(TimePoint logicalTimePoint, AbstractLogEventAuthor author, int passId,
- String raceName, BoatClass boatClass, Serializable raceId);
-
- RaceLogStartTrackingEvent createStartTrackingEvent(TimePoint logicalTimePoint, AbstractLogEventAuthor author, int passId);
-
- RaceLogRevokeEvent createRevokeEvent(AbstractLogEventAuthor author, int passId, RaceLogEvent toRevoke, String reason);
-
- RaceLogRegisterCompetitorEvent createRegisterCompetitorEvent(TimePoint logicalTimePoint, AbstractLogEventAuthor author, int passId, Competitor competitor);
-
- RaceLogDefineMarkEvent createDefineMarkEvent(TimePoint logicalTimePoint, AbstractLogEventAuthor author, int passId, Mark mark);
-
- RaceLogCloseOpenEndedDeviceMappingEvent createCloseOpenEndedDeviceMappingEvent(TimePoint logicalTimePoint, AbstractLogEventAuthor author, int passId,
- Serializable deviceMappingEventId, TimePoint closingTimePoint);
-
- RaceLogFixedMarkPassingEvent createFixedMarkPassingEvent(TimePoint logicalTimePoint, AbstractLogEventAuthor author, Serializable id,
- List competitors, Integer passId, TimePoint ofFixedPassing, Integer zeroBasedIndexOfWaypoint);
-
- RaceLogAdditionalScoringInformationEvent createAdditionalScoringInformationEvent(TimePoint timePoint, Serializable id, AbstractLogEventAuthor author, int currentPassId,
- AdditionalScoringInformationType informationType);
-
- RaceLogSuppressedMarkPassingsEvent createSuppressedMarkPassingsEvent(TimePoint logicalTimePoint, AbstractLogEventAuthor author, Serializable id,
- List competitors, Integer passId, Integer zeroBasedIndexOfFirstSuppressedWaypoint);
-
- RaceLogDependentStartTimeEvent createDependentStartTimeEvent(TimePoint logicalTimePoint,
- AbstractLogEventAuthor author, Serializable id, List involvedBoats, int passId, SimpleRaceLogIdentifier dependentOnRace,
- Duration startTimeDifference);
-
- RaceLogDependentStartTimeEvent createDependentStartTimeEvent(TimePoint logicalTimePoint,
- AbstractLogEventAuthor author, int passId, SimpleRaceLogIdentifier dependentOnRace, Duration startTimeDifference);
-
- RaceLogStartOfTrackingEvent createStartOfTrackingEvent(TimePoint startOfTracking, AbstractLogEventAuthor author,
- Serializable id, List competitors, Integer passId);
-
- RaceLogEndOfTrackingEvent createEndOfTrackingEvent(TimePoint endOfTracking, AbstractLogEventAuthor author,
- Serializable id, List competitors, Integer passId);
-
-
-}
diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/RaceLogEventRestoreFactory.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/RaceLogEventRestoreFactory.java
deleted file mode 100644
index 1219911d501..00000000000
--- a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/RaceLogEventRestoreFactory.java
+++ /dev/null
@@ -1,106 +0,0 @@
-package com.sap.sailing.domain.abstractlog.race;
-
-import java.io.Serializable;
-import java.util.List;
-
-import com.sap.sailing.domain.abstractlog.AbstractLogEventAuthor;
-import com.sap.sailing.domain.abstractlog.race.impl.RaceLogEventRestoreFactoryImpl;
-import com.sap.sailing.domain.abstractlog.race.scoring.AdditionalScoringInformationType;
-import com.sap.sailing.domain.abstractlog.race.scoring.RaceLogAdditionalScoringInformationEvent;
-import com.sap.sailing.domain.abstractlog.race.tracking.RaceLogCloseOpenEndedDeviceMappingEvent;
-import com.sap.sailing.domain.abstractlog.race.tracking.RaceLogDefineMarkEvent;
-import com.sap.sailing.domain.abstractlog.race.tracking.RaceLogDenoteForTrackingEvent;
-import com.sap.sailing.domain.abstractlog.race.tracking.RaceLogDeviceCompetitorMappingEvent;
-import com.sap.sailing.domain.abstractlog.race.tracking.RaceLogDeviceMarkMappingEvent;
-import com.sap.sailing.domain.abstractlog.race.tracking.RaceLogRegisterCompetitorEvent;
-import com.sap.sailing.domain.abstractlog.race.tracking.RaceLogStartTrackingEvent;
-import com.sap.sailing.domain.base.BoatClass;
-import com.sap.sailing.domain.base.Competitor;
-import com.sap.sailing.domain.base.CourseBase;
-import com.sap.sailing.domain.base.Mark;
-import com.sap.sailing.domain.common.Wind;
-import com.sap.sailing.domain.common.racelog.Flags;
-import com.sap.sailing.domain.common.racelog.RaceLogRaceStatus;
-import com.sap.sailing.domain.common.racelog.RacingProcedureType;
-import com.sap.sailing.domain.racelogtracking.DeviceIdentifier;
-import com.sap.sse.common.Duration;
-import com.sap.sse.common.TimePoint;
-
-public interface RaceLogEventRestoreFactory extends RaceLogEventFactory {
- RaceLogEventRestoreFactory INSTANCE = new RaceLogEventRestoreFactoryImpl();
-
- RaceLogFlagEvent createFlagEvent(TimePoint createdAt, AbstractLogEventAuthor author, TimePoint logicalTimePoint,
- Serializable id, List involvedBoats, int passId, Flags upperFlag, Flags lowerFlag, boolean isDisplayed);
-
- RaceLogStartTimeEvent createStartTimeEvent(TimePoint createdAt, AbstractLogEventAuthor author, TimePoint logicalTimePoint,
- Serializable id, List involvedBoats, int passId, TimePoint startTime, RaceLogRaceStatus nextStatue);
-
- RaceLogRaceStatusEvent createRaceStatusEvent(TimePoint createdAt, AbstractLogEventAuthor author, TimePoint logicalTimePoint,
- Serializable id, List competitors, int passId, RaceLogRaceStatus nextStatus);
-
- RaceLogPassChangeEvent createPassChangeEvent(TimePoint createdAt, AbstractLogEventAuthor author, TimePoint logicalTimePoint,
- Serializable id, List competitors, int passId);
-
- RaceLogCourseAreaChangedEvent createCourseAreaChangedEvent(TimePoint createdAt, AbstractLogEventAuthor author,
- TimePoint logicalTimePoint, Serializable id, List competitors, int passId, Serializable courseAreaId);
-
- RaceLogCourseDesignChangedEvent createCourseDesignChangedEvent(TimePoint createdAt, AbstractLogEventAuthor author,
- TimePoint logicalTimePoint, Serializable id, List competitors, int passId, CourseBase courseData);
-
- RaceLogFinishPositioningListChangedEvent createFinishPositioningListChangedEvent(TimePoint createdAt,
- AbstractLogEventAuthor author, TimePoint logicalTimePoint, Serializable id, List competitors,
- int passId, CompetitorResults positionedCompetitors);
-
- RaceLogFinishPositioningConfirmedEvent createFinishPositioningConfirmedEvent(TimePoint createdAt,
- AbstractLogEventAuthor author, TimePoint logicalTimePoint, Serializable id, List competitors,
- int passId, CompetitorResults positionedCompetitors);
-
- RaceLogPathfinderEvent createPathfinderEvent(TimePoint createdAt, AbstractLogEventAuthor author, TimePoint logicalTimePoint,
- Serializable id, List competitors, int passId, String pathfinderId);
-
- RaceLogGateLineOpeningTimeEvent createGateLineOpeningTimeEvent(TimePoint createdAt, AbstractLogEventAuthor author,
- TimePoint logicalTimePoint, Serializable id, List competitors, int passId, Long gateLaunchStopTime,
- Long golfDownTime);
-
- RaceLogStartProcedureChangedEvent createStartProcedureChangedEvent(TimePoint createdAt, AbstractLogEventAuthor author,
- TimePoint logicalTimePoint, Serializable id, List competitors, int passId, RacingProcedureType type);
-
- RaceLogProtestStartTimeEvent createProtestStartTimeEvent(TimePoint createdAt, AbstractLogEventAuthor author,
- TimePoint logicalTimePoint, Serializable id, List competitors, int passId, TimePoint protestStartTime);
-
- RaceLogWindFixEvent createWindFixEvent(TimePoint createdAt, AbstractLogEventAuthor author, TimePoint logicalTimePoint,
- Serializable id, List competitors, Integer passId, Wind wind, boolean isMagnetic);
-
- RaceLogDeviceCompetitorMappingEvent createDeviceCompetitorMappingEvent(TimePoint createdAt, AbstractLogEventAuthor author,
- TimePoint logicalTimePoint, Serializable pId, DeviceIdentifier device, Competitor mappedTo, int passId, TimePoint from, TimePoint to);
-
- RaceLogDeviceMarkMappingEvent createDeviceMarkMappingEvent(TimePoint createdAt, AbstractLogEventAuthor author,
- TimePoint logicalTimePoint, Serializable pId, DeviceIdentifier device, Mark mappedTo, int passId, TimePoint from, TimePoint to);
-
- RaceLogDenoteForTrackingEvent createDenoteForTrackingEvent(TimePoint createdAt, AbstractLogEventAuthor author,
- TimePoint logicalTimePoint, Serializable pId, int passId, String raceName, BoatClass boatClass, Serializable raceId);
-
- RaceLogStartTrackingEvent createStartTrackingEvent(TimePoint createdAt, AbstractLogEventAuthor author,
- TimePoint logicalTimePoint, Serializable pId, int passId);
-
- RaceLogRevokeEvent createRevokeEvent(TimePoint createdAt, AbstractLogEventAuthor author,
- TimePoint logicalTimePoint, Serializable pId, int passId, Serializable revokedEventId,
- String revokedEventType, String revokedEventShortInfo, String reason);
-
- RaceLogRegisterCompetitorEvent createRegisterCompetitorEvent(TimePoint createdAt, AbstractLogEventAuthor author,
- TimePoint logicalTimePoint, Serializable pId, int passId, Competitor competitor);
-
- RaceLogDefineMarkEvent createDefineMarkEvent(TimePoint createdAt, AbstractLogEventAuthor author,
- TimePoint logicalTimePoint, Serializable pId, int passId, Mark mark);
-
- RaceLogCloseOpenEndedDeviceMappingEvent createCloseOpenEndedDeviceMappingEvent(TimePoint createdAt, AbstractLogEventAuthor author,
- TimePoint logicalTimePoint, Serializable pId, int passId, Serializable deviceMappingEventId, TimePoint closingTimePoint);
-
- RaceLogAdditionalScoringInformationEvent createAdditionalScoringInformationEvent(TimePoint createdAt, AbstractLogEventAuthor author,
- TimePoint logicalTimePoint, Serializable pId, List competitors, int passId,
- AdditionalScoringInformationType informationType);
-
- RaceLogDependentStartTimeEvent createDependentStartTimeEvent(TimePoint createdAt, AbstractLogEventAuthor author,
- TimePoint logicalTimePoint, Serializable id, List involvedBoats, int passId,
- SimpleRaceLogIdentifier dependentOnRace, Duration startTimeDifference, RaceLogRaceStatus nextStatus);
-}
diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/analyzing/impl/MarkPassingDataFinder.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/analyzing/impl/MarkPassingDataFinder.java
index edfc7a1d45a..e5ead97f468 100644
--- a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/analyzing/impl/MarkPassingDataFinder.java
+++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/analyzing/impl/MarkPassingDataFinder.java
@@ -3,9 +3,9 @@ package com.sap.sailing.domain.abstractlog.race.analyzing.impl;
import java.util.HashSet;
import java.util.Set;
-import com.sap.sailing.domain.abstractlog.race.RaceLogFixedMarkPassingEvent;
import com.sap.sailing.domain.abstractlog.race.RaceLog;
import com.sap.sailing.domain.abstractlog.race.RaceLogEvent;
+import com.sap.sailing.domain.abstractlog.race.RaceLogFixedMarkPassingEvent;
import com.sap.sailing.domain.abstractlog.race.RaceLogSuppressedMarkPassingsEvent;
import com.sap.sailing.domain.base.Competitor;
import com.sap.sse.common.TimePoint;
diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/impl/BaseRaceLogEventVisitor.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/impl/BaseRaceLogEventVisitor.java
index f0aed5f9999..1c9038da9a5 100644
--- a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/impl/BaseRaceLogEventVisitor.java
+++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/impl/BaseRaceLogEventVisitor.java
@@ -1,13 +1,13 @@
package com.sap.sailing.domain.abstractlog.race.impl;
-import com.sap.sailing.domain.abstractlog.race.RaceLogEndOfTrackingEvent;
-import com.sap.sailing.domain.abstractlog.race.RaceLogFixedMarkPassingEvent;
import com.sap.sailing.domain.abstractlog.race.RaceLogCourseAreaChangedEvent;
import com.sap.sailing.domain.abstractlog.race.RaceLogCourseDesignChangedEvent;
import com.sap.sailing.domain.abstractlog.race.RaceLogDependentStartTimeEvent;
+import com.sap.sailing.domain.abstractlog.race.RaceLogEndOfTrackingEvent;
import com.sap.sailing.domain.abstractlog.race.RaceLogEventVisitor;
import com.sap.sailing.domain.abstractlog.race.RaceLogFinishPositioningConfirmedEvent;
import com.sap.sailing.domain.abstractlog.race.RaceLogFinishPositioningListChangedEvent;
+import com.sap.sailing.domain.abstractlog.race.RaceLogFixedMarkPassingEvent;
import com.sap.sailing.domain.abstractlog.race.RaceLogFlagEvent;
import com.sap.sailing.domain.abstractlog.race.RaceLogGateLineOpeningTimeEvent;
import com.sap.sailing.domain.abstractlog.race.RaceLogPassChangeEvent;
@@ -18,8 +18,8 @@ import com.sap.sailing.domain.abstractlog.race.RaceLogRevokeEvent;
import com.sap.sailing.domain.abstractlog.race.RaceLogStartOfTrackingEvent;
import com.sap.sailing.domain.abstractlog.race.RaceLogStartProcedureChangedEvent;
import com.sap.sailing.domain.abstractlog.race.RaceLogStartTimeEvent;
-import com.sap.sailing.domain.abstractlog.race.RaceLogWindFixEvent;
import com.sap.sailing.domain.abstractlog.race.RaceLogSuppressedMarkPassingsEvent;
+import com.sap.sailing.domain.abstractlog.race.RaceLogWindFixEvent;
import com.sap.sailing.domain.abstractlog.race.scoring.RaceLogAdditionalScoringInformationEvent;
import com.sap.sailing.domain.abstractlog.race.tracking.RaceLogCloseOpenEndedDeviceMappingEvent;
import com.sap.sailing.domain.abstractlog.race.tracking.RaceLogDefineMarkEvent;
diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/impl/RaceLogCourseAreaChangeEventImpl.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/impl/RaceLogCourseAreaChangeEventImpl.java
index c56772b5540..3f0074c24cd 100644
--- a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/impl/RaceLogCourseAreaChangeEventImpl.java
+++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/impl/RaceLogCourseAreaChangeEventImpl.java
@@ -1,26 +1,28 @@
package com.sap.sailing.domain.abstractlog.race.impl;
import java.io.Serializable;
-import java.util.List;
import com.sap.sailing.domain.abstractlog.AbstractLogEventAuthor;
import com.sap.sailing.domain.abstractlog.race.RaceLogCourseAreaChangedEvent;
import com.sap.sailing.domain.abstractlog.race.RaceLogEventVisitor;
-import com.sap.sailing.domain.base.Competitor;
import com.sap.sse.common.TimePoint;
-public class RaceLogCourseAreaChangeEventImpl extends RaceLogEventImpl implements
-RaceLogCourseAreaChangedEvent {
+public class RaceLogCourseAreaChangeEventImpl extends RaceLogEventImpl implements RaceLogCourseAreaChangedEvent {
private static final long serialVersionUID = -3943108136024977860L;
private final Serializable courseAreaId;
- public RaceLogCourseAreaChangeEventImpl(TimePoint createdAt,
- AbstractLogEventAuthor author, TimePoint pTimePoint, Serializable pId, List pInvolvedBoats, int pPassId, Serializable courseAreaId) {
- super(createdAt, author, pTimePoint, pId, pInvolvedBoats, pPassId);
+ public RaceLogCourseAreaChangeEventImpl(TimePoint createdAt, TimePoint pTimePoint, AbstractLogEventAuthor author,
+ Serializable pId, int pPassId, Serializable courseAreaId) {
+ super(createdAt, pTimePoint, author, pId, pPassId);
this.courseAreaId = courseAreaId;
}
+ public RaceLogCourseAreaChangeEventImpl(TimePoint logicalTimePoint, AbstractLogEventAuthor author, int pPassId,
+ Serializable courseAreaId) {
+ this(now(), logicalTimePoint, author, randId(), pPassId, courseAreaId);
+ }
+
@Override
public Serializable getCourseAreaId() {
return courseAreaId;
diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/impl/RaceLogCourseDesignChangedEventImpl.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/impl/RaceLogCourseDesignChangedEventImpl.java
index 5fd11a31252..c295cf8d891 100644
--- a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/impl/RaceLogCourseDesignChangedEventImpl.java
+++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/impl/RaceLogCourseDesignChangedEventImpl.java
@@ -1,26 +1,30 @@
package com.sap.sailing.domain.abstractlog.race.impl;
import java.io.Serializable;
-import java.util.List;
import com.sap.sailing.domain.abstractlog.AbstractLogEventAuthor;
import com.sap.sailing.domain.abstractlog.race.RaceLogCourseDesignChangedEvent;
import com.sap.sailing.domain.abstractlog.race.RaceLogEventVisitor;
-import com.sap.sailing.domain.base.Competitor;
import com.sap.sailing.domain.base.CourseBase;
import com.sap.sse.common.TimePoint;
public class RaceLogCourseDesignChangedEventImpl extends RaceLogEventImpl implements RaceLogCourseDesignChangedEvent {
private static final long serialVersionUID = 1565936170747420547L;
-
+
private final CourseBase courseDesign;
- public RaceLogCourseDesignChangedEventImpl(TimePoint createdAt,
- AbstractLogEventAuthor author, TimePoint pTimePoint, Serializable pId, List pInvolvedBoats, int pPassId, CourseBase courseDesign) {
- super(createdAt, author, pTimePoint, pId, pInvolvedBoats, pPassId);
+ public RaceLogCourseDesignChangedEventImpl(TimePoint createdAt, TimePoint pTimePoint,
+ AbstractLogEventAuthor author, Serializable pId, int pPassId,
+ CourseBase courseDesign) {
+ super(createdAt, pTimePoint, author, pId, pPassId);
this.courseDesign = courseDesign;
}
+ public RaceLogCourseDesignChangedEventImpl(TimePoint logicalTimePoint, AbstractLogEventAuthor author, int pPassId,
+ CourseBase courseDesign) {
+ this(now(), logicalTimePoint, author, randId(), pPassId, courseDesign);
+ }
+
@Override
public void accept(RaceLogEventVisitor visitor) {
visitor.visit(this);
diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/impl/RaceLogDependentStartTimeEventImpl.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/impl/RaceLogDependentStartTimeEventImpl.java
index 8b082d54dce..a2038c91ffb 100644
--- a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/impl/RaceLogDependentStartTimeEventImpl.java
+++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/impl/RaceLogDependentStartTimeEventImpl.java
@@ -1,32 +1,36 @@
package com.sap.sailing.domain.abstractlog.race.impl;
import java.io.Serializable;
-import java.util.List;
import com.sap.sailing.domain.abstractlog.AbstractLogEventAuthor;
import com.sap.sailing.domain.abstractlog.Revokable;
import com.sap.sailing.domain.abstractlog.race.RaceLogDependentStartTimeEvent;
import com.sap.sailing.domain.abstractlog.race.RaceLogEventVisitor;
import com.sap.sailing.domain.abstractlog.race.SimpleRaceLogIdentifier;
-import com.sap.sailing.domain.base.Competitor;
import com.sap.sailing.domain.common.racelog.RaceLogRaceStatus;
import com.sap.sse.common.Duration;
import com.sap.sse.common.TimePoint;
-public class RaceLogDependentStartTimeEventImpl extends RaceLogRaceStatusEventImpl implements RaceLogDependentStartTimeEvent, Revokable {
+public class RaceLogDependentStartTimeEventImpl extends RaceLogRaceStatusEventImpl implements
+ RaceLogDependentStartTimeEvent, Revokable {
private static final long serialVersionUID = -2555082771473210123L;
private final Duration startTimeDifference;
private SimpleRaceLogIdentifier dependentOnRace;
- public RaceLogDependentStartTimeEventImpl(TimePoint createdAt, AbstractLogEventAuthor author, TimePoint pTimePoint,
- Serializable pId, List pInvolvedBoats, int pPassId, SimpleRaceLogIdentifier dependentOnRace,
- Duration startTimeDifference) {
- super(createdAt, author, pTimePoint, pId, pInvolvedBoats, pPassId, RaceLogRaceStatus.SCHEDULED);
+ public RaceLogDependentStartTimeEventImpl(TimePoint createdAt, TimePoint pTimePoint, AbstractLogEventAuthor author,
+ Serializable pId, int pPassId, SimpleRaceLogIdentifier dependentOnRace,
+ Duration startTimeDifference, RaceLogRaceStatus nextStatus) {
+ super(createdAt, pTimePoint, author, pId, pPassId, nextStatus);
this.dependentOnRace = dependentOnRace;
this.startTimeDifference = startTimeDifference;
}
+ public RaceLogDependentStartTimeEventImpl(TimePoint logicalTimePoint, AbstractLogEventAuthor author, int pPassId,
+ SimpleRaceLogIdentifier dependentOnRace, Duration startTimeDifference) {
+ this(now(), logicalTimePoint, author, randId(), pPassId, dependentOnRace, startTimeDifference, RaceLogRaceStatus.SCHEDULED);
+ }
+
@Override
public Duration getStartTimeDifference() {
return startTimeDifference;
diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/impl/RaceLogEndOfTrackingEventImpl.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/impl/RaceLogEndOfTrackingEventImpl.java
index 054933cba7b..29eb91d36c1 100755
--- a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/impl/RaceLogEndOfTrackingEventImpl.java
+++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/impl/RaceLogEndOfTrackingEventImpl.java
@@ -1,31 +1,32 @@
package com.sap.sailing.domain.abstractlog.race.impl;
import java.io.Serializable;
-import java.util.List;
import com.sap.sailing.domain.abstractlog.AbstractLogEventAuthor;
import com.sap.sailing.domain.abstractlog.race.RaceLogEndOfTrackingEvent;
import com.sap.sailing.domain.abstractlog.race.RaceLogEventVisitor;
-import com.sap.sailing.domain.base.Competitor;
import com.sap.sse.common.TimePoint;
public class RaceLogEndOfTrackingEventImpl extends RaceLogEventImpl implements RaceLogEndOfTrackingEvent {
private static final long serialVersionUID = 3130293807404190473L;
- public RaceLogEndOfTrackingEventImpl(TimePoint createdAt, AbstractLogEventAuthor author,
- TimePoint endOfTracking, Serializable pId, List pInvolvedBoats, int pPassId) {
- super(createdAt, author, endOfTracking, pId, pInvolvedBoats, pPassId);
+ public RaceLogEndOfTrackingEventImpl(TimePoint createdAt, TimePoint endOfTracking, AbstractLogEventAuthor author,
+ Serializable pId, int pPassId) {
+ super(createdAt, endOfTracking, author, pId, pPassId);
+ }
+ public RaceLogEndOfTrackingEventImpl(TimePoint endOfTracking, AbstractLogEventAuthor author, int pPassId) {
+ super(endOfTracking, author, pPassId);
}
@Override
public void accept(RaceLogEventVisitor visitor) {
visitor.visit(this);
}
-
+
@Override
public String getShortInfo() {
return "endOfTrackingTime=" + getLogicalTimePoint();
}
-
+
}
diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/impl/RaceLogEventFactoryImpl.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/impl/RaceLogEventFactoryImpl.java
deleted file mode 100644
index ff3b35d6a20..00000000000
--- a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/impl/RaceLogEventFactoryImpl.java
+++ /dev/null
@@ -1,329 +0,0 @@
-package com.sap.sailing.domain.abstractlog.race.impl;
-
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-import java.util.UUID;
-
-import com.sap.sailing.domain.abstractlog.AbstractLogEventAuthor;
-import com.sap.sailing.domain.abstractlog.race.CompetitorResults;
-import com.sap.sailing.domain.abstractlog.race.RaceLogCourseAreaChangedEvent;
-import com.sap.sailing.domain.abstractlog.race.RaceLogCourseDesignChangedEvent;
-import com.sap.sailing.domain.abstractlog.race.RaceLogDependentStartTimeEvent;
-import com.sap.sailing.domain.abstractlog.race.RaceLogEndOfTrackingEvent;
-import com.sap.sailing.domain.abstractlog.race.RaceLogEvent;
-import com.sap.sailing.domain.abstractlog.race.RaceLogEventFactory;
-import com.sap.sailing.domain.abstractlog.race.RaceLogFinishPositioningConfirmedEvent;
-import com.sap.sailing.domain.abstractlog.race.RaceLogFixedMarkPassingEvent;
-import com.sap.sailing.domain.abstractlog.race.RaceLogFlagEvent;
-import com.sap.sailing.domain.abstractlog.race.RaceLogGateLineOpeningTimeEvent;
-import com.sap.sailing.domain.abstractlog.race.RaceLogPassChangeEvent;
-import com.sap.sailing.domain.abstractlog.race.RaceLogPathfinderEvent;
-import com.sap.sailing.domain.abstractlog.race.RaceLogProtestStartTimeEvent;
-import com.sap.sailing.domain.abstractlog.race.RaceLogRaceStatusEvent;
-import com.sap.sailing.domain.abstractlog.race.RaceLogRevokeEvent;
-import com.sap.sailing.domain.abstractlog.race.RaceLogStartOfTrackingEvent;
-import com.sap.sailing.domain.abstractlog.race.RaceLogStartProcedureChangedEvent;
-import com.sap.sailing.domain.abstractlog.race.RaceLogStartTimeEvent;
-import com.sap.sailing.domain.abstractlog.race.RaceLogSuppressedMarkPassingsEvent;
-import com.sap.sailing.domain.abstractlog.race.RaceLogWindFixEvent;
-import com.sap.sailing.domain.abstractlog.race.SimpleRaceLogIdentifier;
-import com.sap.sailing.domain.abstractlog.race.scoring.AdditionalScoringInformationType;
-import com.sap.sailing.domain.abstractlog.race.scoring.RaceLogAdditionalScoringInformationEvent;
-import com.sap.sailing.domain.abstractlog.race.scoring.impl.RaceLogAdditionalScoringInformationEventImpl;
-import com.sap.sailing.domain.abstractlog.race.tracking.RaceLogCloseOpenEndedDeviceMappingEvent;
-import com.sap.sailing.domain.abstractlog.race.tracking.RaceLogDefineMarkEvent;
-import com.sap.sailing.domain.abstractlog.race.tracking.RaceLogDenoteForTrackingEvent;
-import com.sap.sailing.domain.abstractlog.race.tracking.RaceLogDeviceCompetitorMappingEvent;
-import com.sap.sailing.domain.abstractlog.race.tracking.RaceLogDeviceMarkMappingEvent;
-import com.sap.sailing.domain.abstractlog.race.tracking.RaceLogRegisterCompetitorEvent;
-import com.sap.sailing.domain.abstractlog.race.tracking.RaceLogStartTrackingEvent;
-import com.sap.sailing.domain.abstractlog.race.tracking.impl.RaceLogCloseOpenEndedDeviceMappingEventImpl;
-import com.sap.sailing.domain.abstractlog.race.tracking.impl.RaceLogDefineMarkEventImpl;
-import com.sap.sailing.domain.abstractlog.race.tracking.impl.RaceLogDenoteForTrackingEventImpl;
-import com.sap.sailing.domain.abstractlog.race.tracking.impl.RaceLogDeviceCompetitorMappingEventImpl;
-import com.sap.sailing.domain.abstractlog.race.tracking.impl.RaceLogDeviceMarkMappingEventImpl;
-import com.sap.sailing.domain.abstractlog.race.tracking.impl.RaceLogRegisterCompetitorEventImpl;
-import com.sap.sailing.domain.abstractlog.race.tracking.impl.RaceLogStartTrackingEventImpl;
-import com.sap.sailing.domain.base.BoatClass;
-import com.sap.sailing.domain.base.Competitor;
-import com.sap.sailing.domain.base.CourseBase;
-import com.sap.sailing.domain.base.Mark;
-import com.sap.sailing.domain.common.Wind;
-import com.sap.sailing.domain.common.racelog.Flags;
-import com.sap.sailing.domain.common.racelog.RaceLogRaceStatus;
-import com.sap.sailing.domain.common.racelog.RacingProcedureType;
-import com.sap.sailing.domain.racelogtracking.DeviceIdentifier;
-import com.sap.sse.common.Duration;
-import com.sap.sse.common.TimePoint;
-import com.sap.sse.common.impl.MillisecondsTimePoint;
-
-public class RaceLogEventFactoryImpl implements RaceLogEventFactory {
-
- @Override
- public RaceLogFlagEvent createFlagEvent(TimePoint logicalTimePoint, AbstractLogEventAuthor author, Serializable id,
- List involvedBoats, int passId, Flags upperFlag, Flags lowerFlag, boolean isDisplayed) {
- return new RaceLogFlagEventImpl(MillisecondsTimePoint.now(), author, logicalTimePoint, id, involvedBoats, passId,
- upperFlag, lowerFlag, isDisplayed);
- }
-
- @Override
- public RaceLogFlagEvent createFlagEvent(TimePoint logicalTimePoint, AbstractLogEventAuthor author, int passId, Flags upperFlag,
- Flags lowerFlag, boolean isDisplayed) {
- return createFlagEvent(logicalTimePoint, author, UUID.randomUUID(), new ArrayList(), passId, upperFlag,
- lowerFlag, isDisplayed);
- }
-
- @Override
- public RaceLogStartTimeEvent createStartTimeEvent(TimePoint logicalTimePoint, AbstractLogEventAuthor author,
- Serializable id, List involvedBoats, int passId, TimePoint startTime) {
- return new RaceLogStartTimeEventImpl(MillisecondsTimePoint.now(), author, logicalTimePoint, id, involvedBoats,
- passId, startTime);
- }
-
- @Override
- public RaceLogStartTimeEvent createStartTimeEvent(TimePoint logicalTimePoint, AbstractLogEventAuthor author, int passId, TimePoint startTime) {
- return createStartTimeEvent(logicalTimePoint, author, UUID.randomUUID(), new ArrayList(), passId, startTime);
- }
-
- @Override
- public RaceLogDependentStartTimeEvent createDependentStartTimeEvent(TimePoint logicalTimePoint, AbstractLogEventAuthor author,
- Serializable id, List involvedBoats, int passId, SimpleRaceLogIdentifier dependentOnRace, Duration startTimeDifference) {
- return new RaceLogDependentStartTimeEventImpl(MillisecondsTimePoint.now(), author, logicalTimePoint, id, involvedBoats,
- passId, dependentOnRace, startTimeDifference);
- }
-
- @Override
- public RaceLogDependentStartTimeEvent createDependentStartTimeEvent(TimePoint logicalTimePoint,
- AbstractLogEventAuthor author, int passId, SimpleRaceLogIdentifier dependentOnRace, Duration startTimeDifference) {
- return createDependentStartTimeEvent(logicalTimePoint, author, UUID.randomUUID(), new ArrayList(), passId,
- dependentOnRace, startTimeDifference);
- }
-
- @Override
- public RaceLogRaceStatusEvent createRaceStatusEvent(TimePoint logicalTimePoint, AbstractLogEventAuthor author,
- Serializable id, List competitors, int passId, RaceLogRaceStatus nextStatus) {
- return new RaceLogRaceStatusEventImpl(MillisecondsTimePoint.now(), author, logicalTimePoint, id, competitors,
- passId, nextStatus);
- }
-
- @Override
- public RaceLogRaceStatusEvent createRaceStatusEvent(TimePoint logicalTimePoint, AbstractLogEventAuthor author, int passId, RaceLogRaceStatus nextStatus) {
- return createRaceStatusEvent(logicalTimePoint, author, UUID.randomUUID(), new ArrayList(), passId, nextStatus);
- }
-
- @Override
- public RaceLogPassChangeEvent createPassChangeEvent(TimePoint logicalTimePoint, AbstractLogEventAuthor author,
- Serializable id, List competitors, int passId) {
- return new RaceLogPassChangeEventImpl(MillisecondsTimePoint.now(), author, logicalTimePoint, id, competitors, passId);
- }
-
- @Override
- public RaceLogPassChangeEvent createPassChangeEvent(TimePoint logicalTimePoint, AbstractLogEventAuthor author, int passId) {
- return createPassChangeEvent(logicalTimePoint, author, UUID.randomUUID(), new ArrayList(), passId);
- }
-
- @Override
- public RaceLogCourseAreaChangedEvent createCourseAreaChangedEvent(TimePoint logicalTimePoint, AbstractLogEventAuthor author,
- Serializable id, List competitors, int passId, Serializable courseAreaId) {
- return new RaceLogCourseAreaChangeEventImpl(MillisecondsTimePoint.now(), author, logicalTimePoint, id, competitors,
- passId, courseAreaId);
- }
-
- @Override
- public RaceLogCourseAreaChangedEvent createCourseAreaChangedEvent(TimePoint logicalTimePoint, AbstractLogEventAuthor author,
- int passId, Serializable courseAreaId) {
- return createCourseAreaChangedEvent(logicalTimePoint, author, UUID.randomUUID(), new ArrayList(),
- passId, courseAreaId);
- }
-
- @Override
- public RaceLogCourseDesignChangedEvent createCourseDesignChangedEvent(TimePoint logicalTimePoint, AbstractLogEventAuthor author,
- Serializable id, List competitors, int passId, CourseBase courseData) {
- return new RaceLogCourseDesignChangedEventImpl(MillisecondsTimePoint.now(), author, logicalTimePoint, id, competitors,
- passId, courseData);
- }
-
- @Override
- public RaceLogCourseDesignChangedEvent createCourseDesignChangedEvent(TimePoint logicalTimePoint, AbstractLogEventAuthor author,
- int passId, CourseBase courseData) {
- return createCourseDesignChangedEvent(logicalTimePoint, author, UUID.randomUUID(), new ArrayList(),
- passId, courseData);
- }
-
- @Override
- public RaceLogFinishPositioningListChangedEventImpl createFinishPositioningListChangedEvent(TimePoint logicalTimePoint,
- AbstractLogEventAuthor author, Serializable id, List competitors,
- int passId, CompetitorResults positionedCompetitors) {
- return new RaceLogFinishPositioningListChangedEventImpl(MillisecondsTimePoint.now(), author, logicalTimePoint,
- id, competitors, passId, positionedCompetitors);
- }
-
- @Override
- public RaceLogFinishPositioningListChangedEventImpl createFinishPositioningListChangedEvent(TimePoint logicalTimePoint,
- AbstractLogEventAuthor author, int passId, CompetitorResults positionedCompetitors) {
- return createFinishPositioningListChangedEvent(logicalTimePoint, author, UUID.randomUUID(),
- new ArrayList(), passId, positionedCompetitors);
- }
-
- @Override
- public RaceLogFinishPositioningConfirmedEvent createFinishPositioningConfirmedEvent(TimePoint logicalTimePoint,
- AbstractLogEventAuthor author, Serializable id, List competitors, int passId, CompetitorResults positionedCompetitors) {
- return new RaceLogFinishPositioningConfirmedEventImpl(MillisecondsTimePoint.now(), author, logicalTimePoint, id,
- competitors, passId, positionedCompetitors);
- }
-
- @Override
- public RaceLogFinishPositioningConfirmedEvent createFinishPositioningConfirmedEvent(TimePoint logicalTimePoint, AbstractLogEventAuthor author,
- int passId, CompetitorResults positionedCompetitors) {
- return createFinishPositioningConfirmedEvent(logicalTimePoint, author, UUID.randomUUID(), new ArrayList(), passId, positionedCompetitors);
- }
-
- @Override
- public RaceLogPathfinderEvent createPathfinderEvent(TimePoint logicalTimePoint, AbstractLogEventAuthor author,
- Serializable id, List competitors, int passId, String pathfinderId) {
- return new RaceLogPathfinderEventImpl(MillisecondsTimePoint.now(), author, logicalTimePoint, id, competitors,
- passId, pathfinderId);
- }
-
- @Override
- public RaceLogPathfinderEvent createPathfinderEvent(TimePoint logicalTimePoint, AbstractLogEventAuthor author, int passId, String pathfinderId) {
- return createPathfinderEvent(logicalTimePoint, author, UUID.randomUUID(), new ArrayList(), passId, pathfinderId);
- }
-
- @Override
- public RaceLogGateLineOpeningTimeEvent createGateLineOpeningTimeEvent(TimePoint logicalTimePoint, AbstractLogEventAuthor author,
- Serializable id, List competitors, int passId, Long gateLaunchStopTime, Long golfDownTime) {
- return new RaceLogGateLineOpeningTimeEventImpl(MillisecondsTimePoint.now(), author, logicalTimePoint, id, competitors,
- passId, gateLaunchStopTime, golfDownTime);
- }
-
- @Override
- public RaceLogGateLineOpeningTimeEvent createGateLineOpeningTimeEvent(TimePoint logicalTimePoint, AbstractLogEventAuthor author,
- int passId, Long gateLaunchStopTime, Long golfDownTime) {
- return createGateLineOpeningTimeEvent(logicalTimePoint, author, UUID.randomUUID(), new ArrayList(),
- passId, gateLaunchStopTime, golfDownTime);
- }
-
- @Override
- public RaceLogStartProcedureChangedEvent createStartProcedureChangedEvent(TimePoint logicalTimePoint, AbstractLogEventAuthor author,
- Serializable id, List competitors, int passId, RacingProcedureType type) {
- return new RaceLogStartProcedureChangedEventImpl(MillisecondsTimePoint.now(), author, logicalTimePoint, id,
- competitors, passId, type);
- }
-
- @Override
- public RaceLogStartProcedureChangedEvent createStartProcedureChangedEvent(TimePoint logicalTimePoint, AbstractLogEventAuthor author,
- int passId, RacingProcedureType type) {
- return createStartProcedureChangedEvent(logicalTimePoint, author, UUID.randomUUID(), new ArrayList(), passId, type);
- }
-
- @Override
- public RaceLogProtestStartTimeEvent createProtestStartTimeEvent(TimePoint logicalTimePoint, AbstractLogEventAuthor author,
- Serializable id, List competitors, int passId, TimePoint protestStartTime) {
- return new RaceLogProtestStartTimeEventImpl(MillisecondsTimePoint.now(), author, logicalTimePoint, id,
- competitors, passId, protestStartTime);
- }
-
- @Override
- public RaceLogProtestStartTimeEvent createProtestStartTimeEvent(TimePoint logicalTimePoint, AbstractLogEventAuthor author,
- int passId, TimePoint protestStartTime) {
- return createProtestStartTimeEvent(logicalTimePoint, author, UUID.randomUUID(), new ArrayList(),
- passId, protestStartTime);
- }
-
- @Override
- public RaceLogWindFixEvent createWindFixEvent(TimePoint logicalTimePoint, AbstractLogEventAuthor author, int passId, Wind wind, boolean isMagnetic) {
- return createWindFixEvent(logicalTimePoint, author, UUID.randomUUID(), new ArrayList(), passId, wind, isMagnetic);
- }
-
- @Override
- public RaceLogWindFixEvent createWindFixEvent(TimePoint logicalTimePoint, AbstractLogEventAuthor author, Serializable id,
- List competitors, int passId, Wind wind, boolean isMagnetic) {
- return new RaceLogWindFixEventImpl(MillisecondsTimePoint.now(), author, logicalTimePoint, id, competitors, passId, wind, isMagnetic);
- }
-
- @Override
- public RaceLogDeviceCompetitorMappingEvent createDeviceCompetitorMappingEvent(TimePoint logicalTimePoint, AbstractLogEventAuthor author,
- DeviceIdentifier device, Competitor mappedTo, int passId, TimePoint from, TimePoint to) {
- return new RaceLogDeviceCompetitorMappingEventImpl(MillisecondsTimePoint.now(), author, logicalTimePoint, UUID.randomUUID(),
- passId, mappedTo, device, from, to);
- }
-
- @Override
- public RaceLogDeviceMarkMappingEvent createDeviceMarkMappingEvent(TimePoint logicalTimePoint, AbstractLogEventAuthor author,
- DeviceIdentifier device, Mark mappedTo, int passId, TimePoint from, TimePoint to) {
- return new RaceLogDeviceMarkMappingEventImpl(MillisecondsTimePoint.now(), author, logicalTimePoint, UUID.randomUUID(),
- passId, mappedTo, device, from, to);
- }
-
- @Override
- public RaceLogDenoteForTrackingEvent createDenoteForTrackingEvent(TimePoint logicalTimePoint, AbstractLogEventAuthor author, int passId,
- String raceName, BoatClass boatClass, Serializable raceId) {
- return new RaceLogDenoteForTrackingEventImpl(MillisecondsTimePoint.now(), author, logicalTimePoint, UUID.randomUUID(), passId, raceName,
- boatClass, raceId);
- }
-
- @Override
- public RaceLogStartTrackingEvent createStartTrackingEvent(TimePoint logicalTimePoint, AbstractLogEventAuthor author, int passId) {
- return new RaceLogStartTrackingEventImpl(MillisecondsTimePoint.now(), author, logicalTimePoint, UUID.randomUUID(), passId);
- }
-
- @Override
- public RaceLogRevokeEvent createRevokeEvent(AbstractLogEventAuthor author, int passId, RaceLogEvent toRevoke, String reason) {
- return new RaceLogRevokeEventImpl(author, passId, toRevoke, reason);
- }
-
- @Override
- public RaceLogRegisterCompetitorEvent createRegisterCompetitorEvent(TimePoint logicalTimePoint, AbstractLogEventAuthor author,
- int passId, Competitor competitor) {
- return new RaceLogRegisterCompetitorEventImpl(MillisecondsTimePoint.now(), author, logicalTimePoint, UUID.randomUUID(), passId, competitor);
- }
-
- @Override
- public RaceLogDefineMarkEvent createDefineMarkEvent(TimePoint logicalTimePoint, AbstractLogEventAuthor author,
- int passId, Mark mark) {
- return new RaceLogDefineMarkEventImpl(MillisecondsTimePoint.now(), author, logicalTimePoint, UUID.randomUUID(), passId, mark);
- }
-
- @Override
- public RaceLogCloseOpenEndedDeviceMappingEvent createCloseOpenEndedDeviceMappingEvent(TimePoint logicalTimePoint,
- AbstractLogEventAuthor author, int passId, Serializable deviceMappingEventId, TimePoint closingTimePoint) {
- return new RaceLogCloseOpenEndedDeviceMappingEventImpl(MillisecondsTimePoint.now(), author, logicalTimePoint,
- UUID.randomUUID(), passId, deviceMappingEventId, closingTimePoint);
- }
-
- @Override
- public RaceLogAdditionalScoringInformationEvent createAdditionalScoringInformationEvent(TimePoint timePoint, Serializable id,
- AbstractLogEventAuthor author, int currentPassId, AdditionalScoringInformationType informationType) {
- return new RaceLogAdditionalScoringInformationEventImpl(MillisecondsTimePoint.now(), author, timePoint, id,
- Collections. emptyList(), currentPassId, informationType);
- }
-
- @Override
- public RaceLogFixedMarkPassingEvent createFixedMarkPassingEvent(TimePoint logicalTimePoint, AbstractLogEventAuthor author,
- Serializable id, List competitors, Integer passId, TimePoint ofFixedPassing, Integer zeroBasedIndexOfWaypoint) {
- return new RaceLogFixedMarkPassingEventImpl(MillisecondsTimePoint.now(), author, logicalTimePoint, id, competitors, passId, ofFixedPassing,
- zeroBasedIndexOfWaypoint);
- }
-
- @Override
- public RaceLogSuppressedMarkPassingsEvent createSuppressedMarkPassingsEvent(TimePoint logicalTimePoint, AbstractLogEventAuthor author, Serializable id,
- List competitors, Integer passId, Integer zeroBasedIndexOfFirstSuppressedWaypoint) {
- return new RaceLogSuppressedMarkPassingsEventImpl(MillisecondsTimePoint.now(), author, logicalTimePoint, id, competitors, passId,
- zeroBasedIndexOfFirstSuppressedWaypoint);
- }
-
- @Override
- public RaceLogStartOfTrackingEvent createStartOfTrackingEvent(TimePoint startOfTracking, AbstractLogEventAuthor author, Serializable id,
- List competitors, Integer passId) {
- return new RaceLogStartOfTrackingEventImpl(MillisecondsTimePoint.now(), author, startOfTracking, id, competitors, passId);
- }
-
- @Override
- public RaceLogEndOfTrackingEvent createEndOfTrackingEvent(TimePoint endOfTracking, AbstractLogEventAuthor author, Serializable id,
- List competitors, Integer passId) {
- return new RaceLogEndOfTrackingEventImpl(MillisecondsTimePoint.now(), author, endOfTracking, id, competitors, passId);
- }
-}
diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/impl/RaceLogEventImpl.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/impl/RaceLogEventImpl.java
index d3d5ad55d8c..41da8329cb0 100644
--- a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/impl/RaceLogEventImpl.java
+++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/impl/RaceLogEventImpl.java
@@ -1,6 +1,7 @@
package com.sap.sailing.domain.abstractlog.race.impl;
import java.io.Serializable;
+import java.util.Collections;
import java.util.List;
import com.sap.sailing.domain.abstractlog.AbstractLogEventAuthor;
@@ -15,11 +16,24 @@ public abstract class RaceLogEventImpl extends AbstractLogEventImpl pInvolvedBoats, int pPassId) {
- super(createdAt, author, logicalTimePoint, pId);
+ super(createdAt, logicalTimePoint, author, pId);
this.raceLogEventData = new RaceLogEventDataImpl(pInvolvedBoats, pPassId);
}
+
+ public RaceLogEventImpl(TimePoint createdAt, TimePoint logicalTimePoint, AbstractLogEventAuthor author,
+ Serializable pId, int pPassId) {
+ this(createdAt, logicalTimePoint, author, pId, Collections.emptyList(), pPassId);
+ }
+
+ public RaceLogEventImpl(TimePoint logicalTimePoint, AbstractLogEventAuthor author, Competitor competitor, int pPassId) {
+ this(now(), logicalTimePoint, author, randId(), Collections.singletonList(competitor), pPassId);
+ }
+
+ public RaceLogEventImpl(TimePoint logicalTimePoint, AbstractLogEventAuthor author, int pPassId) {
+ this(now(), logicalTimePoint, author, randId(), Collections.emptyList(), pPassId);
+ }
@Override
public List getInvolvedBoats() {
diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/impl/RaceLogEventRestoreFactoryImpl.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/impl/RaceLogEventRestoreFactoryImpl.java
deleted file mode 100644
index 36588de8091..00000000000
--- a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/impl/RaceLogEventRestoreFactoryImpl.java
+++ /dev/null
@@ -1,201 +0,0 @@
-package com.sap.sailing.domain.abstractlog.race.impl;
-
-import java.io.Serializable;
-import java.util.List;
-
-import com.sap.sailing.domain.abstractlog.AbstractLogEventAuthor;
-import com.sap.sailing.domain.abstractlog.race.CompetitorResults;
-import com.sap.sailing.domain.abstractlog.race.RaceLogCourseAreaChangedEvent;
-import com.sap.sailing.domain.abstractlog.race.RaceLogCourseDesignChangedEvent;
-import com.sap.sailing.domain.abstractlog.race.RaceLogDependentStartTimeEvent;
-import com.sap.sailing.domain.abstractlog.race.RaceLogEventRestoreFactory;
-import com.sap.sailing.domain.abstractlog.race.RaceLogFinishPositioningConfirmedEvent;
-import com.sap.sailing.domain.abstractlog.race.RaceLogFinishPositioningListChangedEvent;
-import com.sap.sailing.domain.abstractlog.race.RaceLogFlagEvent;
-import com.sap.sailing.domain.abstractlog.race.RaceLogGateLineOpeningTimeEvent;
-import com.sap.sailing.domain.abstractlog.race.RaceLogPassChangeEvent;
-import com.sap.sailing.domain.abstractlog.race.RaceLogPathfinderEvent;
-import com.sap.sailing.domain.abstractlog.race.RaceLogProtestStartTimeEvent;
-import com.sap.sailing.domain.abstractlog.race.RaceLogRaceStatusEvent;
-import com.sap.sailing.domain.abstractlog.race.RaceLogRevokeEvent;
-import com.sap.sailing.domain.abstractlog.race.RaceLogStartProcedureChangedEvent;
-import com.sap.sailing.domain.abstractlog.race.RaceLogStartTimeEvent;
-import com.sap.sailing.domain.abstractlog.race.RaceLogWindFixEvent;
-import com.sap.sailing.domain.abstractlog.race.SimpleRaceLogIdentifier;
-import com.sap.sailing.domain.abstractlog.race.scoring.AdditionalScoringInformationType;
-import com.sap.sailing.domain.abstractlog.race.scoring.RaceLogAdditionalScoringInformationEvent;
-import com.sap.sailing.domain.abstractlog.race.scoring.impl.RaceLogAdditionalScoringInformationEventImpl;
-import com.sap.sailing.domain.abstractlog.race.tracking.RaceLogCloseOpenEndedDeviceMappingEvent;
-import com.sap.sailing.domain.abstractlog.race.tracking.RaceLogDefineMarkEvent;
-import com.sap.sailing.domain.abstractlog.race.tracking.RaceLogDenoteForTrackingEvent;
-import com.sap.sailing.domain.abstractlog.race.tracking.RaceLogDeviceCompetitorMappingEvent;
-import com.sap.sailing.domain.abstractlog.race.tracking.RaceLogDeviceMarkMappingEvent;
-import com.sap.sailing.domain.abstractlog.race.tracking.RaceLogRegisterCompetitorEvent;
-import com.sap.sailing.domain.abstractlog.race.tracking.RaceLogStartTrackingEvent;
-import com.sap.sailing.domain.abstractlog.race.tracking.impl.RaceLogCloseOpenEndedDeviceMappingEventImpl;
-import com.sap.sailing.domain.abstractlog.race.tracking.impl.RaceLogDefineMarkEventImpl;
-import com.sap.sailing.domain.abstractlog.race.tracking.impl.RaceLogDenoteForTrackingEventImpl;
-import com.sap.sailing.domain.abstractlog.race.tracking.impl.RaceLogDeviceCompetitorMappingEventImpl;
-import com.sap.sailing.domain.abstractlog.race.tracking.impl.RaceLogDeviceMarkMappingEventImpl;
-import com.sap.sailing.domain.abstractlog.race.tracking.impl.RaceLogRegisterCompetitorEventImpl;
-import com.sap.sailing.domain.abstractlog.race.tracking.impl.RaceLogStartTrackingEventImpl;
-import com.sap.sailing.domain.base.BoatClass;
-import com.sap.sailing.domain.base.Competitor;
-import com.sap.sailing.domain.base.CourseBase;
-import com.sap.sailing.domain.base.Mark;
-import com.sap.sailing.domain.common.Wind;
-import com.sap.sailing.domain.common.racelog.Flags;
-import com.sap.sailing.domain.common.racelog.RaceLogRaceStatus;
-import com.sap.sailing.domain.common.racelog.RacingProcedureType;
-import com.sap.sailing.domain.racelogtracking.DeviceIdentifier;
-import com.sap.sse.common.Duration;
-import com.sap.sse.common.TimePoint;
-
-public class RaceLogEventRestoreFactoryImpl extends RaceLogEventFactoryImpl implements RaceLogEventRestoreFactory {
-
- @Override
- public RaceLogFlagEvent createFlagEvent(TimePoint createdAt, AbstractLogEventAuthor author, TimePoint logicalTimePoint,
- Serializable id, List involvedBoats, int passId, Flags upperFlag, Flags lowerFlag, boolean isDisplayed) {
- return new RaceLogFlagEventImpl(createdAt, author, logicalTimePoint, id, involvedBoats, passId, upperFlag, lowerFlag, isDisplayed);
- }
-
- @Override
- public RaceLogStartTimeEvent createStartTimeEvent(TimePoint createdAt, AbstractLogEventAuthor author, TimePoint logicalTimePoint,
- Serializable id, List involvedBoats, int passId, TimePoint startTime, RaceLogRaceStatus nextStatue) {
- return new RaceLogStartTimeEventImpl(createdAt, author, logicalTimePoint, id, involvedBoats, passId, startTime);
- }
-
- @Override
- public RaceLogRaceStatusEvent createRaceStatusEvent(TimePoint createdAt, AbstractLogEventAuthor author,
- TimePoint logicalTimePoint, Serializable id, List competitors, int passId, RaceLogRaceStatus nextStatus) {
- return new RaceLogRaceStatusEventImpl(createdAt, author, logicalTimePoint, id, competitors, passId, nextStatus);
- }
-
- @Override
- public RaceLogPassChangeEvent createPassChangeEvent(TimePoint createdAt, AbstractLogEventAuthor author,
- TimePoint logicalTimePoint, Serializable id, List competitors, int passId) {
- return new RaceLogPassChangeEventImpl(createdAt, author, logicalTimePoint, id, competitors, passId);
- }
-
- @Override
- public RaceLogCourseAreaChangedEvent createCourseAreaChangedEvent(TimePoint createdAt, AbstractLogEventAuthor author,
- TimePoint logicalTimePoint, Serializable id, List competitors, int passId, Serializable courseAreaId) {
- return new RaceLogCourseAreaChangeEventImpl(createdAt, author, logicalTimePoint, id, competitors, passId, courseAreaId);
- }
-
- @Override
- public RaceLogCourseDesignChangedEvent createCourseDesignChangedEvent(TimePoint createdAt,
- AbstractLogEventAuthor author, TimePoint logicalTimePoint, Serializable id, List competitors, int passId, CourseBase courseData) {
- return new RaceLogCourseDesignChangedEventImpl(createdAt, author, logicalTimePoint, id, competitors, passId, courseData);
- }
-
- @Override
- public RaceLogFinishPositioningListChangedEvent createFinishPositioningListChangedEvent(TimePoint createdAt,
- AbstractLogEventAuthor author, TimePoint logicalTimePoint, Serializable id, List competitors, int passId, CompetitorResults positionedCompetitors) {
- return new RaceLogFinishPositioningListChangedEventImpl(createdAt, author, logicalTimePoint, id, competitors, passId, positionedCompetitors);
- }
-
- @Override
- public RaceLogFinishPositioningConfirmedEvent createFinishPositioningConfirmedEvent(TimePoint createdAt,
- AbstractLogEventAuthor author, TimePoint logicalTimePoint, Serializable id, List competitors, int passId, CompetitorResults positionedCompetitors) {
- return new RaceLogFinishPositioningConfirmedEventImpl(createdAt, author, logicalTimePoint, id, competitors, passId, positionedCompetitors);
- }
-
- @Override
- public RaceLogPathfinderEvent createPathfinderEvent(TimePoint createdAt, AbstractLogEventAuthor author,
- TimePoint logicalTimePoint, Serializable id, List competitors, int passId, String pathfinderId) {
- return new RaceLogPathfinderEventImpl(createdAt, author, logicalTimePoint, id, competitors, passId, pathfinderId);
- }
-
- @Override
- public RaceLogGateLineOpeningTimeEvent createGateLineOpeningTimeEvent(TimePoint createdAt, AbstractLogEventAuthor author,
- TimePoint logicalTimePoint, Serializable id, List competitors, int passId, Long gateLaunchStopTime,
- Long golfDownTime) {
- return new RaceLogGateLineOpeningTimeEventImpl(createdAt, author, logicalTimePoint, id, competitors, passId, gateLaunchStopTime,
- golfDownTime);
- }
-
- @Override
- public RaceLogStartProcedureChangedEvent createStartProcedureChangedEvent(TimePoint createdAt, AbstractLogEventAuthor author,
- TimePoint logicalTimePoint, Serializable id, List competitors, int passId, RacingProcedureType type) {
- return new RaceLogStartProcedureChangedEventImpl(createdAt, author, logicalTimePoint, id, competitors, passId, type);
- }
-
- @Override
- public RaceLogProtestStartTimeEvent createProtestStartTimeEvent(TimePoint createdAt, AbstractLogEventAuthor author,
- TimePoint logicalTimePoint, Serializable id, List competitors, int passId, TimePoint protestStartTime) {
- return new RaceLogProtestStartTimeEventImpl(createdAt, author, logicalTimePoint, id, competitors, passId, protestStartTime);
- }
-
- @Override
- public RaceLogWindFixEvent createWindFixEvent(TimePoint createdAt, AbstractLogEventAuthor author, TimePoint logicalTimePoint,
- Serializable id, List competitors, Integer passId, Wind wind, boolean isMagnetic) {
- return new RaceLogWindFixEventImpl(createdAt, author, logicalTimePoint, id, competitors, passId, wind, isMagnetic);
- }
-
- @Override
- public RaceLogDeviceCompetitorMappingEvent createDeviceCompetitorMappingEvent(TimePoint createdAt, AbstractLogEventAuthor author,
- TimePoint logicalTimePoint, Serializable pId, DeviceIdentifier device, Competitor mappedTo, int passId, TimePoint from, TimePoint to) {
- return new RaceLogDeviceCompetitorMappingEventImpl(createdAt, author, logicalTimePoint, pId, passId, mappedTo, device, from, to);
- }
-
- @Override
- public RaceLogDeviceMarkMappingEvent createDeviceMarkMappingEvent(TimePoint createdAt, AbstractLogEventAuthor author,
- TimePoint logicalTimePoint, Serializable pId, DeviceIdentifier device, Mark mappedTo, int passId, TimePoint from,
- TimePoint to) {
- return new RaceLogDeviceMarkMappingEventImpl(createdAt, author, logicalTimePoint, pId, passId, mappedTo, device, from, to);
- }
-
- @Override
- public RaceLogDenoteForTrackingEvent createDenoteForTrackingEvent(TimePoint createdAt, AbstractLogEventAuthor author,
- TimePoint logicalTimePoint, Serializable pId, int passId, String raceName, BoatClass boatClass, Serializable raceId) {
- return new RaceLogDenoteForTrackingEventImpl(createdAt, author, logicalTimePoint, pId, passId, raceName, boatClass, raceId);
- }
-
- @Override
- public RaceLogStartTrackingEvent createStartTrackingEvent(TimePoint createdAt, AbstractLogEventAuthor author, TimePoint logicalTimePoint,
- Serializable pId, int passId) {
- return new RaceLogStartTrackingEventImpl(createdAt, author, logicalTimePoint, pId, passId);
- }
-
- @Override
- public RaceLogRevokeEvent createRevokeEvent(TimePoint createdAt, AbstractLogEventAuthor author, TimePoint logicalTimePoint,
- Serializable pId, int passId, Serializable revokedEventId, String revokedEventType, String revokedEventShortInfo, String reason) {
- return new RaceLogRevokeEventImpl(createdAt, author, logicalTimePoint, pId, passId, revokedEventId, revokedEventType, revokedEventShortInfo, reason);
- }
-
- @Override
- public RaceLogRegisterCompetitorEvent createRegisterCompetitorEvent(TimePoint createdAt, AbstractLogEventAuthor author, TimePoint logicalTimePoint,
- Serializable pId, int passId, Competitor competitor) {
- return new RaceLogRegisterCompetitorEventImpl(createdAt, author, logicalTimePoint, pId, passId, competitor);
- }
-
- @Override
- public RaceLogDefineMarkEvent createDefineMarkEvent(TimePoint createdAt, AbstractLogEventAuthor author, TimePoint logicalTimePoint,
- Serializable pId, int passId, Mark mark) {
- return new RaceLogDefineMarkEventImpl(createdAt, author, logicalTimePoint, pId, passId, mark);
- }
-
- @Override
- public RaceLogCloseOpenEndedDeviceMappingEvent createCloseOpenEndedDeviceMappingEvent(TimePoint createdAt,
- AbstractLogEventAuthor author, TimePoint logicalTimePoint, Serializable pId, int passId,
- Serializable deviceMappingEventId, TimePoint closingTimePoint) {
- return new RaceLogCloseOpenEndedDeviceMappingEventImpl(createdAt, author, logicalTimePoint, pId, passId,
- deviceMappingEventId, closingTimePoint);
- }
-
- @Override
- public RaceLogAdditionalScoringInformationEvent createAdditionalScoringInformationEvent(TimePoint createdAt,
- AbstractLogEventAuthor author, TimePoint logicalTimePoint, Serializable pId, List competitors, int passId,
- AdditionalScoringInformationType informationType) {
- return new RaceLogAdditionalScoringInformationEventImpl(createdAt, author, logicalTimePoint, pId, competitors, passId, informationType);
- }
-
- @Override
- public RaceLogDependentStartTimeEvent createDependentStartTimeEvent(TimePoint createdAt,
- AbstractLogEventAuthor author, TimePoint logicalTimePoint, Serializable id, List involvedBoats,
- int passId, SimpleRaceLogIdentifier dependentOnRace, Duration startTimeDifference, RaceLogRaceStatus nextStatus) {
- return new RaceLogDependentStartTimeEventImpl(createdAt, author, logicalTimePoint, id, involvedBoats, passId,
- dependentOnRace, startTimeDifference);
- }
-}
diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/impl/RaceLogFinishPositioningConfirmedEventImpl.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/impl/RaceLogFinishPositioningConfirmedEventImpl.java
index 7ce91ea3d68..d99930ece66 100644
--- a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/impl/RaceLogFinishPositioningConfirmedEventImpl.java
+++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/impl/RaceLogFinishPositioningConfirmedEventImpl.java
@@ -1,22 +1,27 @@
package com.sap.sailing.domain.abstractlog.race.impl;
import java.io.Serializable;
-import java.util.List;
import com.sap.sailing.domain.abstractlog.AbstractLogEventAuthor;
import com.sap.sailing.domain.abstractlog.race.CompetitorResults;
import com.sap.sailing.domain.abstractlog.race.RaceLogEventVisitor;
import com.sap.sailing.domain.abstractlog.race.RaceLogFinishPositioningConfirmedEvent;
-import com.sap.sailing.domain.base.Competitor;
import com.sap.sse.common.TimePoint;
-public class RaceLogFinishPositioningConfirmedEventImpl extends RaceLogFinishPositioningEventImpl implements RaceLogFinishPositioningConfirmedEvent {
-
+public class RaceLogFinishPositioningConfirmedEventImpl extends RaceLogFinishPositioningEventImpl implements
+ RaceLogFinishPositioningConfirmedEvent {
+
private static final long serialVersionUID = 5028181339200048499L;
-
- public RaceLogFinishPositioningConfirmedEventImpl(TimePoint createdAt,
- AbstractLogEventAuthor author, TimePoint pTimePoint, Serializable pId, List pCompetitors, int pPassId, CompetitorResults positionedCompetitors) {
- super(createdAt, author, pTimePoint, pId, pCompetitors, pPassId, positionedCompetitors);
+
+ public RaceLogFinishPositioningConfirmedEventImpl(TimePoint createdAt, TimePoint pTimePoint,
+ AbstractLogEventAuthor author, Serializable pId, int pPassId,
+ CompetitorResults positionedCompetitors) {
+ super(createdAt, pTimePoint, author, pId, pPassId, positionedCompetitors);
+ }
+
+ public RaceLogFinishPositioningConfirmedEventImpl(TimePoint pTimePoint, AbstractLogEventAuthor author, int pPassId,
+ CompetitorResults positionedCompetitors) {
+ super(pTimePoint, author, pPassId, positionedCompetitors);
}
@Override
diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/impl/RaceLogFinishPositioningEventImpl.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/impl/RaceLogFinishPositioningEventImpl.java
index 6d8b84c3734..11114eb24f9 100644
--- a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/impl/RaceLogFinishPositioningEventImpl.java
+++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/impl/RaceLogFinishPositioningEventImpl.java
@@ -1,26 +1,30 @@
package com.sap.sailing.domain.abstractlog.race.impl;
import java.io.Serializable;
-import java.util.List;
import com.sap.sailing.domain.abstractlog.AbstractLogEventAuthor;
import com.sap.sailing.domain.abstractlog.race.CompetitorResults;
import com.sap.sailing.domain.abstractlog.race.RaceLogFinishPositioningEvent;
-import com.sap.sailing.domain.base.Competitor;
import com.sap.sse.common.TimePoint;
-public abstract class RaceLogFinishPositioningEventImpl extends RaceLogEventImpl implements RaceLogFinishPositioningEvent {
+public abstract class RaceLogFinishPositioningEventImpl extends RaceLogEventImpl implements
+ RaceLogFinishPositioningEvent {
private static final long serialVersionUID = -8168584588697908309L;
-
+
private final CompetitorResults positionedCompetitors;
- public RaceLogFinishPositioningEventImpl(TimePoint createdAt, AbstractLogEventAuthor author, TimePoint pTimePoint,
- Serializable pId, List pInvolvedBoats, int pPassId, CompetitorResults positionedCompetitors) {
- super(createdAt, author, pTimePoint, pId, pInvolvedBoats, pPassId);
+ public RaceLogFinishPositioningEventImpl(TimePoint createdAt, TimePoint pTimePoint, AbstractLogEventAuthor author,
+ Serializable pId, int pPassId, CompetitorResults positionedCompetitors) {
+ super(createdAt, pTimePoint, author, pId, pPassId);
this.positionedCompetitors = positionedCompetitors;
}
-
+
+ public RaceLogFinishPositioningEventImpl(TimePoint logicalTimePoint, AbstractLogEventAuthor author, int pPassId,
+ CompetitorResults positionedCompetitors) {
+ this(now(), logicalTimePoint, author, randId(), pPassId, positionedCompetitors);
+ }
+
@Override
public CompetitorResults getPositionedCompetitorsIDsNamesMaxPointsReasons() {
return positionedCompetitors;
diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/impl/RaceLogFinishPositioningListChangedEventImpl.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/impl/RaceLogFinishPositioningListChangedEventImpl.java
index 0a744893e8b..57999894412 100644
--- a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/impl/RaceLogFinishPositioningListChangedEventImpl.java
+++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/impl/RaceLogFinishPositioningListChangedEventImpl.java
@@ -1,22 +1,27 @@
package com.sap.sailing.domain.abstractlog.race.impl;
import java.io.Serializable;
-import java.util.List;
import com.sap.sailing.domain.abstractlog.AbstractLogEventAuthor;
import com.sap.sailing.domain.abstractlog.race.CompetitorResults;
import com.sap.sailing.domain.abstractlog.race.RaceLogEventVisitor;
import com.sap.sailing.domain.abstractlog.race.RaceLogFinishPositioningListChangedEvent;
-import com.sap.sailing.domain.base.Competitor;
import com.sap.sse.common.TimePoint;
-public class RaceLogFinishPositioningListChangedEventImpl extends RaceLogFinishPositioningEventImpl implements RaceLogFinishPositioningListChangedEvent {
-
+public class RaceLogFinishPositioningListChangedEventImpl extends RaceLogFinishPositioningEventImpl implements
+ RaceLogFinishPositioningListChangedEvent {
+
private static final long serialVersionUID = -8167472925561954739L;
-
- public RaceLogFinishPositioningListChangedEventImpl(TimePoint createdAt,
- AbstractLogEventAuthor author, TimePoint pTimePoint, Serializable pId, List competitors, int pPassId, CompetitorResults positionedCompetitors) {
- super(createdAt, author, pTimePoint, pId, competitors, pPassId, positionedCompetitors);
+
+ public RaceLogFinishPositioningListChangedEventImpl(TimePoint createdAt, TimePoint pTimePoint,
+ AbstractLogEventAuthor author, Serializable pId, int pPassId,
+ CompetitorResults positionedCompetitors) {
+ super(createdAt, pTimePoint, author, pId, pPassId, positionedCompetitors);
+ }
+
+ public RaceLogFinishPositioningListChangedEventImpl(TimePoint pTimePoint, AbstractLogEventAuthor author,
+ int pPassId, CompetitorResults positionedCompetitors) {
+ super(pTimePoint, author, pPassId, positionedCompetitors);
}
@Override
diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/impl/RaceLogFixedMarkPassingEventImpl.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/impl/RaceLogFixedMarkPassingEventImpl.java
index 71b6978ac43..b2c5b0b23b3 100644
--- a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/impl/RaceLogFixedMarkPassingEventImpl.java
+++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/impl/RaceLogFixedMarkPassingEventImpl.java
@@ -1,28 +1,35 @@
package com.sap.sailing.domain.abstractlog.race.impl;
import java.io.Serializable;
+import java.util.Collections;
import java.util.List;
import com.sap.sailing.domain.abstractlog.AbstractLogEventAuthor;
-import com.sap.sailing.domain.abstractlog.race.RaceLogFixedMarkPassingEvent;
import com.sap.sailing.domain.abstractlog.race.RaceLogEventVisitor;
+import com.sap.sailing.domain.abstractlog.race.RaceLogFixedMarkPassingEvent;
import com.sap.sailing.domain.base.Competitor;
import com.sap.sse.common.TimePoint;
-
public class RaceLogFixedMarkPassingEventImpl extends RaceLogEventImpl implements RaceLogFixedMarkPassingEvent {
private final Integer zeroBasedIndexOfWaypointOfPassing;
-
+
private final TimePoint timePointOfPassing;
- public RaceLogFixedMarkPassingEventImpl(TimePoint createdAt, AbstractLogEventAuthor author, TimePoint logicalTimePoint,
- Serializable pId, List pInvolvedBoats, int pPassId, TimePoint timePoint, Integer zeroBasedIndexOfWaypointOfPassing) {
- super(createdAt, author, logicalTimePoint, pId, pInvolvedBoats, pPassId);
+ public RaceLogFixedMarkPassingEventImpl(TimePoint createdAt, TimePoint logicalTimePoint,
+ AbstractLogEventAuthor author, Serializable pId, List pInvolvedBoats, int pPassId,
+ TimePoint timePoint, Integer zeroBasedIndexOfWaypointOfPassing) {
+ super(createdAt, logicalTimePoint, author, pId, pInvolvedBoats, pPassId);
this.timePointOfPassing = timePoint;
this.zeroBasedIndexOfWaypointOfPassing = zeroBasedIndexOfWaypointOfPassing;
}
+ public RaceLogFixedMarkPassingEventImpl(TimePoint logicalTimePoint, AbstractLogEventAuthor author,
+ Competitor competitor, int pPassId, TimePoint timePoint, Integer zeroBasedIndexOfWaypointOfPassing) {
+ this(now(), logicalTimePoint, author, randId(), Collections.singletonList(competitor), pPassId, timePoint,
+ zeroBasedIndexOfWaypointOfPassing);
+ }
+
private static final long serialVersionUID = -1796278009919318553L;
@Override
@@ -42,6 +49,7 @@ public class RaceLogFixedMarkPassingEventImpl extends RaceLogEventImpl implement
@Override
public String getShortInfo() {
- return getInvolvedBoats().get(0).getName()+" at mark "+getZeroBasedIndexOfPassedWaypoint()+" at "+getTimePointOfFixedPassing();
+ return getInvolvedBoats().get(0).getName() + " at mark " + getZeroBasedIndexOfPassedWaypoint() + " at "
+ + getTimePointOfFixedPassing();
}
}
diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/impl/RaceLogFlagEventImpl.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/impl/RaceLogFlagEventImpl.java
index 2ce2aba9444..9af4b2119fb 100644
--- a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/impl/RaceLogFlagEventImpl.java
+++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/impl/RaceLogFlagEventImpl.java
@@ -1,12 +1,10 @@
package com.sap.sailing.domain.abstractlog.race.impl;
import java.io.Serializable;
-import java.util.List;
import com.sap.sailing.domain.abstractlog.AbstractLogEventAuthor;
import com.sap.sailing.domain.abstractlog.race.RaceLogEventVisitor;
import com.sap.sailing.domain.abstractlog.race.RaceLogFlagEvent;
-import com.sap.sailing.domain.base.Competitor;
import com.sap.sailing.domain.common.racelog.Flags;
import com.sap.sse.common.TimePoint;
@@ -17,13 +15,20 @@ public class RaceLogFlagEventImpl extends RaceLogEventImpl implements RaceLogFla
private final Flags lowerFlag;
private final boolean isDisplayed;
- public RaceLogFlagEventImpl(TimePoint createdAt, AbstractLogEventAuthor author, TimePoint pTimePoint, Serializable pId, List pInvolvedBoats, int pPassId, Flags pUpperFlag, Flags pLowerFlag, boolean pIsDisplayed) {
- super(createdAt, author, pTimePoint, pId, pInvolvedBoats, pPassId);
+ public RaceLogFlagEventImpl(TimePoint createdAt, TimePoint pTimePoint, AbstractLogEventAuthor author,
+ Serializable pId, int pPassId, Flags pUpperFlag, Flags pLowerFlag,
+ boolean pIsDisplayed) {
+ super(createdAt, pTimePoint, author, pId, pPassId);
this.upperFlag = pUpperFlag;
this.lowerFlag = pLowerFlag;
this.isDisplayed = pIsDisplayed;
}
+ public RaceLogFlagEventImpl(TimePoint logicalTimePoint, AbstractLogEventAuthor author, int pPassId, Flags pUpperFlag,
+ Flags pLowerFlag, boolean pIsDisplayed) {
+ this(now(), logicalTimePoint, author, randId(), pPassId, pUpperFlag, pLowerFlag, pIsDisplayed);
+ }
+
@Override
public Flags getUpperFlag() {
return upperFlag;
@@ -49,4 +54,4 @@ public class RaceLogFlagEventImpl extends RaceLogEventImpl implements RaceLogFla
return "upperFlag=" + upperFlag + ", lowerFlag=" + lowerFlag + ", isDisplayed=" + isDisplayed;
}
- }
+}
diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/impl/RaceLogGateLineOpeningTimeEventImpl.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/impl/RaceLogGateLineOpeningTimeEventImpl.java
index 77c6a3a72b3..fe90c350dd7 100644
--- a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/impl/RaceLogGateLineOpeningTimeEventImpl.java
+++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/impl/RaceLogGateLineOpeningTimeEventImpl.java
@@ -1,26 +1,29 @@
package com.sap.sailing.domain.abstractlog.race.impl;
import java.io.Serializable;
-import java.util.List;
import com.sap.sailing.domain.abstractlog.AbstractLogEventAuthor;
import com.sap.sailing.domain.abstractlog.race.RaceLogEventVisitor;
import com.sap.sailing.domain.abstractlog.race.RaceLogGateLineOpeningTimeEvent;
-import com.sap.sailing.domain.base.Competitor;
import com.sap.sse.common.TimePoint;
public class RaceLogGateLineOpeningTimeEventImpl extends RaceLogEventImpl implements RaceLogGateLineOpeningTimeEvent {
-
+
private static final long serialVersionUID = 793529890804809490L;
private final GateLineOpeningTimes gateLineOpeningTimes;
- public RaceLogGateLineOpeningTimeEventImpl(TimePoint createdAt,
- AbstractLogEventAuthor author, TimePoint pTimePoint, Serializable pId, List pCompetitors, int pPassId,
+ public RaceLogGateLineOpeningTimeEventImpl(TimePoint createdAt, TimePoint pTimePoint,
+ AbstractLogEventAuthor author, Serializable pId, int pPassId,
long gateLaunchStopTime, long golfDownTime) {
- super(createdAt, author, pTimePoint, pId, pCompetitors, pPassId);
+ super(createdAt, pTimePoint, author, pId, pPassId);
this.gateLineOpeningTimes = new GateLineOpeningTimes(gateLaunchStopTime, golfDownTime);
}
+ public RaceLogGateLineOpeningTimeEventImpl(TimePoint logicalTimePoint, AbstractLogEventAuthor author, int pPassId,
+ long gateLaunchStopTime, long golfDownTime) {
+ this(now(), logicalTimePoint, author, randId(), pPassId, gateLaunchStopTime, golfDownTime);
+ }
+
@Override
public void accept(RaceLogEventVisitor visitor) {
visitor.visit(this);
diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/impl/RaceLogImpl.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/impl/RaceLogImpl.java
index 408ca29df46..290bbea15e9 100644
--- a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/impl/RaceLogImpl.java
+++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/impl/RaceLogImpl.java
@@ -7,7 +7,6 @@ import com.sap.sailing.domain.abstractlog.AbstractLogEventAuthor;
import com.sap.sailing.domain.abstractlog.impl.AbstractLogImpl;
import com.sap.sailing.domain.abstractlog.race.RaceLog;
import com.sap.sailing.domain.abstractlog.race.RaceLogEvent;
-import com.sap.sailing.domain.abstractlog.race.RaceLogEventFactory;
import com.sap.sailing.domain.abstractlog.race.RaceLogEventVisitor;
import com.sap.sailing.domain.tracking.Track;
import com.sap.sailing.domain.tracking.impl.PartialNavigableSetView;
@@ -55,7 +54,7 @@ public class RaceLogImpl extends AbstractLogImpl pInvolvedBoats, int pPassId) {
- super(createdAt, author, pTimePoint, pId, pInvolvedBoats, pPassId);
+ public RaceLogPassChangeEventImpl(TimePoint createdAt, TimePoint pTimePoint, AbstractLogEventAuthor author,
+ Serializable pId, int pPassId) {
+ super(createdAt, pTimePoint, author, pId, pPassId);
+ }
+
+ public RaceLogPassChangeEventImpl(TimePoint pTimePoint, AbstractLogEventAuthor author, int pPassId) {
+ super(pTimePoint, author, pPassId);
}
@Override
diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/impl/RaceLogPathfinderEventImpl.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/impl/RaceLogPathfinderEventImpl.java
index 821ec6d6ec3..481d48d284b 100644
--- a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/impl/RaceLogPathfinderEventImpl.java
+++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/impl/RaceLogPathfinderEventImpl.java
@@ -1,25 +1,28 @@
package com.sap.sailing.domain.abstractlog.race.impl;
import java.io.Serializable;
-import java.util.List;
import com.sap.sailing.domain.abstractlog.AbstractLogEventAuthor;
import com.sap.sailing.domain.abstractlog.race.RaceLogEventVisitor;
import com.sap.sailing.domain.abstractlog.race.RaceLogPathfinderEvent;
-import com.sap.sailing.domain.base.Competitor;
import com.sap.sse.common.TimePoint;
public class RaceLogPathfinderEventImpl extends RaceLogEventImpl implements RaceLogPathfinderEvent {
-
+
private static final long serialVersionUID = -1654474931330970804L;
private final String pathfinderId;
- public RaceLogPathfinderEventImpl(TimePoint createdAt,
- AbstractLogEventAuthor author, TimePoint pTimePoint, Serializable pId, List pCompetitors, int pPassId, String pathfinderId) {
- super(createdAt, author, pTimePoint, pId, pCompetitors, pPassId);
+ public RaceLogPathfinderEventImpl(TimePoint createdAt, TimePoint pTimePoint, AbstractLogEventAuthor author,
+ Serializable pId, int pPassId, String pathfinderId) {
+ super(createdAt, pTimePoint, author, pId, pPassId);
this.pathfinderId = pathfinderId;
}
+ public RaceLogPathfinderEventImpl(TimePoint logicalTimePoint, AbstractLogEventAuthor author, int pPassId,
+ String pathfinderId) {
+ this(now(), logicalTimePoint, author, randId(), pPassId, pathfinderId);
+ }
+
@Override
public void accept(RaceLogEventVisitor visitor) {
visitor.visit(this);
diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/impl/RaceLogProtestStartTimeEventImpl.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/impl/RaceLogProtestStartTimeEventImpl.java
index 0fe7db6e07f..270d276792c 100644
--- a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/impl/RaceLogProtestStartTimeEventImpl.java
+++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/impl/RaceLogProtestStartTimeEventImpl.java
@@ -1,25 +1,28 @@
package com.sap.sailing.domain.abstractlog.race.impl;
import java.io.Serializable;
-import java.util.List;
import com.sap.sailing.domain.abstractlog.AbstractLogEventAuthor;
import com.sap.sailing.domain.abstractlog.race.RaceLogEventVisitor;
import com.sap.sailing.domain.abstractlog.race.RaceLogProtestStartTimeEvent;
-import com.sap.sailing.domain.base.Competitor;
import com.sap.sse.common.TimePoint;
public class RaceLogProtestStartTimeEventImpl extends RaceLogEventImpl implements RaceLogProtestStartTimeEvent {
private static final long serialVersionUID = -1800827552916395996L;
-
+
private final TimePoint protestStartTime;
-
- public RaceLogProtestStartTimeEventImpl(TimePoint createdAt, AbstractLogEventAuthor author, TimePoint pTimePoint,
- Serializable pId, List pInvolvedBoats, int pPassId, TimePoint protestStartTime) {
- super(createdAt, author, pTimePoint, pId, pInvolvedBoats, pPassId);
+
+ public RaceLogProtestStartTimeEventImpl(TimePoint createdAt, TimePoint pTimePoint, AbstractLogEventAuthor author,
+ Serializable pId, int pPassId, TimePoint protestStartTime) {
+ super(createdAt, pTimePoint, author, pId, pPassId);
this.protestStartTime = protestStartTime;
}
+ public RaceLogProtestStartTimeEventImpl(TimePoint logicalTimePoint, AbstractLogEventAuthor author, int pPassId,
+ TimePoint protestStartTime) {
+ this(now(), logicalTimePoint, author, randId(), pPassId, protestStartTime);
+ }
+
@Override
public void accept(RaceLogEventVisitor visitor) {
visitor.visit(this);
diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/impl/RaceLogRaceStatusEventImpl.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/impl/RaceLogRaceStatusEventImpl.java
index 69a92a9b13a..560f743c050 100644
--- a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/impl/RaceLogRaceStatusEventImpl.java
+++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/impl/RaceLogRaceStatusEventImpl.java
@@ -1,12 +1,10 @@
package com.sap.sailing.domain.abstractlog.race.impl;
import java.io.Serializable;
-import java.util.List;
import com.sap.sailing.domain.abstractlog.AbstractLogEventAuthor;
import com.sap.sailing.domain.abstractlog.race.RaceLogEventVisitor;
import com.sap.sailing.domain.abstractlog.race.RaceLogRaceStatusEvent;
-import com.sap.sailing.domain.base.Competitor;
import com.sap.sailing.domain.common.racelog.RaceLogRaceStatus;
import com.sap.sse.common.TimePoint;
@@ -15,12 +13,17 @@ public class RaceLogRaceStatusEventImpl extends RaceLogEventImpl implements Race
private final RaceLogRaceStatus nextStatus;
- public RaceLogRaceStatusEventImpl(TimePoint createdAt, AbstractLogEventAuthor author, TimePoint pTimePoint,
- Serializable pId, List pInvolvedBoats, int pPassId, RaceLogRaceStatus nextStatus) {
- super(createdAt, author, pTimePoint, pId, pInvolvedBoats, pPassId);
+ public RaceLogRaceStatusEventImpl(TimePoint createdAt, TimePoint pTimePoint, AbstractLogEventAuthor author,
+ Serializable pId, int pPassId, RaceLogRaceStatus nextStatus) {
+ super(createdAt, pTimePoint, author, pId, pPassId);
this.nextStatus = nextStatus;
}
+ public RaceLogRaceStatusEventImpl(TimePoint logicalTimePoint, AbstractLogEventAuthor author, int pPassId,
+ RaceLogRaceStatus nextStatus) {
+ this(now(), logicalTimePoint, author, randId(), pPassId, nextStatus);
+ }
+
@Override
public RaceLogRaceStatus getNextStatus() {
return nextStatus;
diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/impl/RaceLogRevokeEventImpl.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/impl/RaceLogRevokeEventImpl.java
index faaadf7faf7..8f5d7560275 100644
--- a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/impl/RaceLogRevokeEventImpl.java
+++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/impl/RaceLogRevokeEventImpl.java
@@ -21,10 +21,10 @@ public class RaceLogRevokeEventImpl extends RevokeEventImpl
this.raceLogEventData = new RaceLogEventDataImpl(null, passId);
}
- public RaceLogRevokeEventImpl(TimePoint createdAt, AbstractLogEventAuthor author, TimePoint logicalTimePoint,
+ public RaceLogRevokeEventImpl(TimePoint createdAt, TimePoint logicalTimePoint, AbstractLogEventAuthor author,
Serializable pId, int passId, Serializable revokedEventId, String revokedEventType, String revokedEventShortInfo,
String reason) {
- super(createdAt, author, logicalTimePoint, pId, revokedEventId, revokedEventType, revokedEventShortInfo, reason);
+ super(createdAt, logicalTimePoint, author, pId, revokedEventId, revokedEventType, revokedEventShortInfo, reason);
this.raceLogEventData = new RaceLogEventDataImpl(null, passId);
}
diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/impl/RaceLogStartOfTrackingEventImpl.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/impl/RaceLogStartOfTrackingEventImpl.java
index 58005300c6a..5878b3fd7f8 100755
--- a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/impl/RaceLogStartOfTrackingEventImpl.java
+++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/impl/RaceLogStartOfTrackingEventImpl.java
@@ -1,27 +1,29 @@
package com.sap.sailing.domain.abstractlog.race.impl;
import java.io.Serializable;
-import java.util.List;
import com.sap.sailing.domain.abstractlog.AbstractLogEventAuthor;
import com.sap.sailing.domain.abstractlog.race.RaceLogEventVisitor;
import com.sap.sailing.domain.abstractlog.race.RaceLogStartOfTrackingEvent;
-import com.sap.sailing.domain.base.Competitor;
import com.sap.sse.common.TimePoint;
public class RaceLogStartOfTrackingEventImpl extends RaceLogEventImpl implements RaceLogStartOfTrackingEvent {
private static final long serialVersionUID = -4134608549471817247L;
- public RaceLogStartOfTrackingEventImpl(TimePoint createdAt, AbstractLogEventAuthor author,
- TimePoint startOfTracking, Serializable pId, List pInvolvedBoats, int pPassId) {
- super(createdAt, author, startOfTracking, pId, pInvolvedBoats, pPassId);
+ public RaceLogStartOfTrackingEventImpl(TimePoint createdAt, TimePoint startOfTracking,
+ AbstractLogEventAuthor author, Serializable pId, int pPassId) {
+ super(createdAt, startOfTracking, author, pId, pPassId);
+ }
+
+ public RaceLogStartOfTrackingEventImpl(TimePoint startOfTracking, AbstractLogEventAuthor author, int pPassId) {
+ super(startOfTracking, author, pPassId);
}
@Override
public void accept(RaceLogEventVisitor visitor) {
visitor.visit(this);
}
-
+
@Override
public String getShortInfo() {
return "startOfTrackingTime=" + getLogicalTimePoint();
diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/impl/RaceLogStartProcedureChangedEventImpl.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/impl/RaceLogStartProcedureChangedEventImpl.java
index 896b6c723af..10929f871d7 100644
--- a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/impl/RaceLogStartProcedureChangedEventImpl.java
+++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/impl/RaceLogStartProcedureChangedEventImpl.java
@@ -1,12 +1,10 @@
package com.sap.sailing.domain.abstractlog.race.impl;
import java.io.Serializable;
-import java.util.List;
import com.sap.sailing.domain.abstractlog.AbstractLogEventAuthor;
import com.sap.sailing.domain.abstractlog.race.RaceLogEventVisitor;
import com.sap.sailing.domain.abstractlog.race.RaceLogStartProcedureChangedEvent;
-import com.sap.sailing.domain.base.Competitor;
import com.sap.sailing.domain.common.racelog.RacingProcedureType;
import com.sap.sse.common.TimePoint;
@@ -17,13 +15,17 @@ public class RaceLogStartProcedureChangedEventImpl extends RaceLogEventImpl impl
private final RacingProcedureType startProcedureType;
- public RaceLogStartProcedureChangedEventImpl(TimePoint createdAt, AbstractLogEventAuthor author,
- TimePoint pTimePoint, Serializable pId, List pInvolvedBoats, int pPassId, RacingProcedureType startProcedureType) {
- super(createdAt, author, pTimePoint, pId, pInvolvedBoats, pPassId);
-
+ public RaceLogStartProcedureChangedEventImpl(TimePoint createdAt, TimePoint pTimePoint,
+ AbstractLogEventAuthor author, Serializable pId, int pPassId, RacingProcedureType startProcedureType) {
+ super(createdAt, pTimePoint, author, pId, pPassId);
this.startProcedureType = startProcedureType;
}
+ public RaceLogStartProcedureChangedEventImpl(TimePoint logicalTimePoint,
+ AbstractLogEventAuthor author, int pPassId, RacingProcedureType startProcedureType) {
+ this(now(), logicalTimePoint, author, randId(), pPassId, startProcedureType);
+ }
+
@Override
public RacingProcedureType getStartProcedureType() {
return startProcedureType;
diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/impl/RaceLogStartTimeEventImpl.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/impl/RaceLogStartTimeEventImpl.java
index 3d926a02016..3dcf95a655d 100644
--- a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/impl/RaceLogStartTimeEventImpl.java
+++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/impl/RaceLogStartTimeEventImpl.java
@@ -1,12 +1,10 @@
package com.sap.sailing.domain.abstractlog.race.impl;
import java.io.Serializable;
-import java.util.List;
import com.sap.sailing.domain.abstractlog.AbstractLogEventAuthor;
import com.sap.sailing.domain.abstractlog.race.RaceLogEventVisitor;
import com.sap.sailing.domain.abstractlog.race.RaceLogStartTimeEvent;
-import com.sap.sailing.domain.base.Competitor;
import com.sap.sailing.domain.common.racelog.RaceLogRaceStatus;
import com.sap.sse.common.TimePoint;
@@ -15,12 +13,17 @@ public class RaceLogStartTimeEventImpl extends RaceLogRaceStatusEventImpl implem
private static final long serialVersionUID = 8185811395997196162L;
private final TimePoint startTime;
- public RaceLogStartTimeEventImpl(TimePoint createdAt, AbstractLogEventAuthor author, TimePoint pTimePoint,
- Serializable pId, List pInvolvedBoats, int pPassId, TimePoint pStartTime) {
- super(createdAt, author, pTimePoint, pId, pInvolvedBoats, pPassId, RaceLogRaceStatus.SCHEDULED);
+ public RaceLogStartTimeEventImpl(TimePoint createdAt, TimePoint pTimePoint, AbstractLogEventAuthor author,
+ Serializable pId, int pPassId, TimePoint pStartTime, RaceLogRaceStatus nextStatus) {
+ super(createdAt, pTimePoint, author, pId, pPassId, nextStatus);
this.startTime = pStartTime;
}
+ public RaceLogStartTimeEventImpl(TimePoint logicalTimePoint, AbstractLogEventAuthor author, int pPassId,
+ TimePoint pStartTime) {
+ this(now(), logicalTimePoint, author, randId(), pPassId, pStartTime, RaceLogRaceStatus.SCHEDULED);
+ }
+
@Override
public TimePoint getStartTime() {
return startTime;
diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/impl/RaceLogSuppressedMarkPassingsEventImpl.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/impl/RaceLogSuppressedMarkPassingsEventImpl.java
index 87c45b3e975..2e1028af18b 100644
--- a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/impl/RaceLogSuppressedMarkPassingsEventImpl.java
+++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/impl/RaceLogSuppressedMarkPassingsEventImpl.java
@@ -1,6 +1,7 @@
package com.sap.sailing.domain.abstractlog.race.impl;
import java.io.Serializable;
+import java.util.Collections;
import java.util.List;
import com.sap.sailing.domain.abstractlog.AbstractLogEventAuthor;
@@ -9,17 +10,24 @@ import com.sap.sailing.domain.abstractlog.race.RaceLogSuppressedMarkPassingsEven
import com.sap.sailing.domain.base.Competitor;
import com.sap.sse.common.TimePoint;
-public class RaceLogSuppressedMarkPassingsEventImpl extends RaceLogEventImpl implements RaceLogSuppressedMarkPassingsEvent {
+public class RaceLogSuppressedMarkPassingsEventImpl extends RaceLogEventImpl implements
+ RaceLogSuppressedMarkPassingsEvent {
private static final long serialVersionUID = 3665678555023150888L;
private final Integer indexOfFirstSuppressedWaypoint;
- public RaceLogSuppressedMarkPassingsEventImpl(TimePoint createdAt, AbstractLogEventAuthor author, TimePoint logicalTimePoint, Serializable pId,
- List pInvolvedBoats, int pPassId, Integer indexOfFirstSuppressedWaypoint) {
- super(createdAt, author, logicalTimePoint, pId, pInvolvedBoats, pPassId);
+ public RaceLogSuppressedMarkPassingsEventImpl(TimePoint createdAt, TimePoint logicalTimePoint,
+ AbstractLogEventAuthor author, Serializable pId, List pInvolvedBoats, int pPassId,
+ Integer indexOfFirstSuppressedWaypoint) {
+ super(createdAt, logicalTimePoint, author, pId, pInvolvedBoats, pPassId);
this.indexOfFirstSuppressedWaypoint = indexOfFirstSuppressedWaypoint;
+ }
+ public RaceLogSuppressedMarkPassingsEventImpl(TimePoint logicalTimePoint, AbstractLogEventAuthor author,
+ Competitor competitor, int pPassId, Integer indexOfFirstSuppressedWaypoint) {
+ this(now(), logicalTimePoint, author, randId(), Collections.singletonList(competitor), pPassId,
+ indexOfFirstSuppressedWaypoint);
}
@Override
@@ -34,6 +42,6 @@ public class RaceLogSuppressedMarkPassingsEventImpl extends RaceLogEventImpl imp
@Override
public String getShortInfo() {
- return getInvolvedBoats().get(0).getName()+" at mark "+getZeroBasedIndexOfFirstSuppressedWaypoint();
+ return getInvolvedBoats().get(0).getName() + " at mark " + getZeroBasedIndexOfFirstSuppressedWaypoint();
}
}
diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/impl/RaceLogWindFixEventImpl.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/impl/RaceLogWindFixEventImpl.java
index e12b27465a9..d8291210efa 100644
--- a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/impl/RaceLogWindFixEventImpl.java
+++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/impl/RaceLogWindFixEventImpl.java
@@ -1,12 +1,10 @@
package com.sap.sailing.domain.abstractlog.race.impl;
import java.io.Serializable;
-import java.util.List;
import com.sap.sailing.domain.abstractlog.AbstractLogEventAuthor;
import com.sap.sailing.domain.abstractlog.race.RaceLogEventVisitor;
import com.sap.sailing.domain.abstractlog.race.RaceLogWindFixEvent;
-import com.sap.sailing.domain.base.Competitor;
import com.sap.sailing.domain.common.Wind;
import com.sap.sse.common.TimePoint;
@@ -16,12 +14,17 @@ public class RaceLogWindFixEventImpl extends RaceLogEventImpl implements RaceLog
private final Wind windFix;
private final boolean isMagnetic;
- public RaceLogWindFixEventImpl(TimePoint createdAt, AbstractLogEventAuthor author, TimePoint pTimePoint,
- Serializable pId, List pInvolvedBoats, int pPassId, Wind windFix, boolean isMagnetic) {
- super(createdAt, author, pTimePoint, pId, pInvolvedBoats, pPassId);
+ public RaceLogWindFixEventImpl(TimePoint createdAt, TimePoint pTimePoint, AbstractLogEventAuthor author,
+ Serializable pId, int pPassId, Wind windFix, boolean isMagnetic) {
+ super(createdAt, pTimePoint, author, pId, pPassId);
this.windFix = windFix;
this.isMagnetic = isMagnetic;
}
+
+ public RaceLogWindFixEventImpl(TimePoint logicalTimePoint, AbstractLogEventAuthor author,
+ int pPassId, Wind windFix, boolean isMagnetic) {
+ this(now(), logicalTimePoint, author, randId(), pPassId, windFix, isMagnetic);
+ }
@Override
public void accept(RaceLogEventVisitor visitor) {
diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/scoring/impl/RaceLogAdditionalScoringInformationEventImpl.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/scoring/impl/RaceLogAdditionalScoringInformationEventImpl.java
index f6c54428bc5..54cf87b8eb9 100644
--- a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/scoring/impl/RaceLogAdditionalScoringInformationEventImpl.java
+++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/scoring/impl/RaceLogAdditionalScoringInformationEventImpl.java
@@ -1,14 +1,12 @@
package com.sap.sailing.domain.abstractlog.race.scoring.impl;
import java.io.Serializable;
-import java.util.List;
import com.sap.sailing.domain.abstractlog.AbstractLogEventAuthor;
import com.sap.sailing.domain.abstractlog.race.RaceLogEventVisitor;
import com.sap.sailing.domain.abstractlog.race.impl.RaceLogEventImpl;
import com.sap.sailing.domain.abstractlog.race.scoring.AdditionalScoringInformationType;
import com.sap.sailing.domain.abstractlog.race.scoring.RaceLogAdditionalScoringInformationEvent;
-import com.sap.sailing.domain.base.Competitor;
import com.sap.sse.common.TimePoint;
public class RaceLogAdditionalScoringInformationEventImpl extends RaceLogEventImpl implements RaceLogAdditionalScoringInformationEvent {
@@ -16,11 +14,16 @@ public class RaceLogAdditionalScoringInformationEventImpl extends RaceLogEventIm
private final AdditionalScoringInformationType informationType;
- public RaceLogAdditionalScoringInformationEventImpl(TimePoint createdAt, AbstractLogEventAuthor author, TimePoint logicalTimePoint,
- Serializable pId, List competitors, int pPassId, AdditionalScoringInformationType informationType) {
- super(createdAt, author, logicalTimePoint, pId, competitors, pPassId);
+ public RaceLogAdditionalScoringInformationEventImpl(TimePoint createdAt, TimePoint logicalTimePoint, AbstractLogEventAuthor author,
+ Serializable pId, int pPassId, AdditionalScoringInformationType informationType) {
+ super(createdAt, logicalTimePoint, author, pId, pPassId);
this.informationType = informationType;
}
+
+ public RaceLogAdditionalScoringInformationEventImpl(TimePoint logicalTimePoint, AbstractLogEventAuthor author,
+ int pPassId, AdditionalScoringInformationType informationType) {
+ this(now(), logicalTimePoint, author, randId(), pPassId, informationType);
+ }
@Override
public void accept(RaceLogEventVisitor visitor) {
diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/state/impl/RaceStateImpl.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/state/impl/RaceStateImpl.java
index 5ce1d637e05..96ec8bb31cb 100644
--- a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/state/impl/RaceStateImpl.java
+++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/state/impl/RaceStateImpl.java
@@ -1,7 +1,6 @@
package com.sap.sailing.domain.abstractlog.race.state.impl;
import java.util.Collections;
-import java.util.UUID;
import java.util.logging.Level;
import java.util.logging.Logger;
@@ -9,14 +8,25 @@ import com.sap.sailing.domain.abstractlog.AbstractLogEventAuthor;
import com.sap.sailing.domain.abstractlog.race.CompetitorResults;
import com.sap.sailing.domain.abstractlog.race.RaceLog;
import com.sap.sailing.domain.abstractlog.race.RaceLogDependentStartTimeEvent;
-import com.sap.sailing.domain.abstractlog.race.RaceLogEventFactory;
import com.sap.sailing.domain.abstractlog.race.SimpleRaceLogIdentifier;
import com.sap.sailing.domain.abstractlog.race.analyzing.impl.AdditionalScoringInformationFinder;
import com.sap.sailing.domain.abstractlog.race.analyzing.impl.DependentStartTimeResolver;
import com.sap.sailing.domain.abstractlog.race.analyzing.impl.RaceLogResolver;
import com.sap.sailing.domain.abstractlog.race.analyzing.impl.RaceStatusAnalyzer;
+import com.sap.sailing.domain.abstractlog.race.impl.RaceLogCourseDesignChangedEventImpl;
+import com.sap.sailing.domain.abstractlog.race.impl.RaceLogDependentStartTimeEventImpl;
+import com.sap.sailing.domain.abstractlog.race.impl.RaceLogFinishPositioningConfirmedEventImpl;
+import com.sap.sailing.domain.abstractlog.race.impl.RaceLogFinishPositioningListChangedEventImpl;
+import com.sap.sailing.domain.abstractlog.race.impl.RaceLogFlagEventImpl;
+import com.sap.sailing.domain.abstractlog.race.impl.RaceLogPassChangeEventImpl;
+import com.sap.sailing.domain.abstractlog.race.impl.RaceLogProtestStartTimeEventImpl;
+import com.sap.sailing.domain.abstractlog.race.impl.RaceLogRaceStatusEventImpl;
+import com.sap.sailing.domain.abstractlog.race.impl.RaceLogStartProcedureChangedEventImpl;
+import com.sap.sailing.domain.abstractlog.race.impl.RaceLogStartTimeEventImpl;
+import com.sap.sailing.domain.abstractlog.race.impl.RaceLogWindFixEventImpl;
import com.sap.sailing.domain.abstractlog.race.scoring.AdditionalScoringInformationType;
import com.sap.sailing.domain.abstractlog.race.scoring.RaceLogAdditionalScoringInformationEvent;
+import com.sap.sailing.domain.abstractlog.race.scoring.impl.RaceLogAdditionalScoringInformationEventImpl;
import com.sap.sailing.domain.abstractlog.race.state.RaceState;
import com.sap.sailing.domain.abstractlog.race.state.ReadonlyRaceState;
import com.sap.sailing.domain.abstractlog.race.state.racingprocedure.RacingProcedure;
@@ -42,7 +52,6 @@ public class RaceStateImpl extends ReadonlyRaceStateImpl implements RaceState {
private static final Logger logger = Logger.getLogger(RaceStateImpl.class.getName());
private final AbstractLogEventAuthor author;
- private final RaceLogEventFactory factory;
public static ReadonlyRaceState create(RaceLogResolver raceLogResolver, RaceLog raceLog) {
return create(raceLogResolver, raceLog, /* forRaceLogIdentifier */ null, Collections.emptyMap());
@@ -60,22 +69,19 @@ public class RaceStateImpl extends ReadonlyRaceStateImpl implements RaceState {
*/
public static RaceState create(RaceLogResolver raceLogResolver, RaceLog raceLog, AbstractLogEventAuthor author, ConfigurationLoader configuration) {
return new RaceStateImpl(raceLogResolver, raceLog, author,
- RaceLogEventFactory.INSTANCE,
- new RacingProcedureFactoryImpl(author, RaceLogEventFactory.INSTANCE, configuration));
+ new RacingProcedureFactoryImpl(author, configuration));
}
- public RaceStateImpl(RaceLogResolver raceLogResolver, RaceLog raceLog, AbstractLogEventAuthor author, RaceLogEventFactory eventFactory,
+ public RaceStateImpl(RaceLogResolver raceLogResolver, RaceLog raceLog, AbstractLogEventAuthor author,
RacingProcedureFactory procedureFactory) {
- this(raceLogResolver, raceLog, author, eventFactory, new RaceStatusAnalyzer.StandardClock(), procedureFactory);
+ this(raceLogResolver, raceLog, author, new RaceStatusAnalyzer.StandardClock(), procedureFactory);
}
- private RaceStateImpl(RaceLogResolver raceLogResolver, RaceLog raceLog, AbstractLogEventAuthor author,
- RaceLogEventFactory eventFactory, RaceStatusAnalyzer.Clock analyzersClock,
+ private RaceStateImpl(RaceLogResolver raceLogResolver, RaceLog raceLog, AbstractLogEventAuthor author, RaceStatusAnalyzer.Clock analyzersClock,
RacingProcedureFactory procedureFactory) {
super(raceLogResolver, raceLog, /* forRaceLogIdentifier */ null, analyzersClock, procedureFactory,
Collections.emptyMap(), /* update */ true);
this.author = author;
- this.factory = eventFactory;
}
@Override
@@ -107,7 +113,7 @@ public class RaceStateImpl extends ReadonlyRaceStateImpl implements RaceState {
@Override
public void setRacingProcedure(TimePoint timePoint, RacingProcedureType newType) {
- raceLog.add(factory.createStartProcedureChangedEvent(timePoint, author, raceLog.getCurrentPassId(), newType));
+ raceLog.add(new RaceLogStartProcedureChangedEventImpl(timePoint, author, raceLog.getCurrentPassId(), newType));
}
@Override
@@ -115,7 +121,7 @@ public class RaceStateImpl extends ReadonlyRaceStateImpl implements RaceState {
RacingProcedurePrerequisite.FulfillmentFunction function = new RacingProcedurePrerequisite.FulfillmentFunction() {
@Override
public void execute() {
- raceLog.add(factory.createStartTimeEvent(now, author, raceLog.getCurrentPassId(), startTime));
+ raceLog.add(new RaceLogStartTimeEventImpl(now, author, raceLog.getCurrentPassId(), startTime));
}
};
@@ -124,12 +130,12 @@ public class RaceStateImpl extends ReadonlyRaceStateImpl implements RaceState {
@Override
public void forceNewStartTime(TimePoint now, TimePoint startTime) {
- raceLog.add(factory.createStartTimeEvent(now, author, raceLog.getCurrentPassId(), startTime));
+ raceLog.add(new RaceLogStartTimeEventImpl(now, author, raceLog.getCurrentPassId(), startTime));
}
@Override
public void requestNewDependentStartTime(final TimePoint now, final Duration startTimeDifference, final SimpleRaceLogIdentifier dependentRace, RaceLogResolver raceLogResolver, RacingProcedurePrerequisite.Resolver resolver) {
- final RaceLogDependentStartTimeEvent dependentStartTimeEvent = factory.createDependentStartTimeEvent(now, author, raceLog.getCurrentPassId(), dependentRace, startTimeDifference);
+ final RaceLogDependentStartTimeEvent dependentStartTimeEvent = new RaceLogDependentStartTimeEventImpl(now, author, raceLog.getCurrentPassId(), dependentRace, startTimeDifference);
RacingProcedurePrerequisite.FulfillmentFunction function = new RacingProcedurePrerequisite.FulfillmentFunction() {
@Override
@@ -148,60 +154,60 @@ public class RaceStateImpl extends ReadonlyRaceStateImpl implements RaceState {
@Override
public void forceNewDependentStartTime(TimePoint now, final Duration startTimeDifference, final SimpleRaceLogIdentifier dependentOnRace) {
- raceLog.add(factory.createDependentStartTimeEvent(now, author, raceLog.getCurrentPassId(), dependentOnRace, startTimeDifference));
+ raceLog.add(new RaceLogDependentStartTimeEventImpl(now, author, raceLog.getCurrentPassId(), dependentOnRace, startTimeDifference));
}
@Override
public void setFinishingTime(TimePoint timePoint) {
- raceLog.add(factory.createRaceStatusEvent(timePoint, author, raceLog.getCurrentPassId(), RaceLogRaceStatus.FINISHING));
+ raceLog.add(new RaceLogRaceStatusEventImpl(timePoint, author, raceLog.getCurrentPassId(), RaceLogRaceStatus.FINISHING));
}
@Override
public void setFinishedTime(TimePoint timePoint) {
- raceLog.add(factory.createRaceStatusEvent(timePoint, author, raceLog.getCurrentPassId(), RaceLogRaceStatus.FINISHED));
+ raceLog.add(new RaceLogRaceStatusEventImpl(timePoint, author, raceLog.getCurrentPassId(), RaceLogRaceStatus.FINISHED));
}
@Override
public void setProtestTime(TimePoint now, TimePoint timePoint) {
- raceLog.add(factory.createProtestStartTimeEvent(now, author, raceLog.getCurrentPassId(), timePoint));
+ raceLog.add(new RaceLogProtestStartTimeEventImpl(now, author, raceLog.getCurrentPassId(), timePoint));
}
@Override
public void setAdvancePass(TimePoint timePoint) {
- raceLog.add(factory.createPassChangeEvent(timePoint, author, raceLog.getCurrentPassId() + 1));
+ raceLog.add(new RaceLogPassChangeEventImpl(timePoint, author, raceLog.getCurrentPassId() + 1));
}
@Override
public void setAborted(TimePoint timePoint, boolean isPostponed, Flags reasonFlag) {
Flags markerFlag = isPostponed ? Flags.AP : Flags.NOVEMBER;
- raceLog.add(factory.createFlagEvent(timePoint, author, raceLog.getCurrentPassId(), markerFlag, reasonFlag, true));
+ raceLog.add(new RaceLogFlagEventImpl(timePoint, author, raceLog.getCurrentPassId(), markerFlag, reasonFlag, true));
}
@Override
public void setGeneralRecall(TimePoint timePoint) {
- raceLog.add(factory.createFlagEvent(timePoint, author, raceLog.getCurrentPassId(), Flags.FIRSTSUBSTITUTE, Flags.NONE, true));
+ raceLog.add(new RaceLogFlagEventImpl(timePoint, author, raceLog.getCurrentPassId(), Flags.FIRSTSUBSTITUTE, Flags.NONE, true));
}
@Override
public void setFinishPositioningListChanged(TimePoint timePoint, CompetitorResults positionedCompetitors) {
- raceLog.add(factory.createFinishPositioningListChangedEvent(
+ raceLog.add(new RaceLogFinishPositioningListChangedEventImpl(
timePoint, author, raceLog.getCurrentPassId(), positionedCompetitors));
}
@Override
public void setFinishPositioningConfirmed(TimePoint timePoint) {
- raceLog.add(factory.createFinishPositioningConfirmedEvent(
+ raceLog.add(new RaceLogFinishPositioningConfirmedEventImpl(
timePoint, author, raceLog.getCurrentPassId(), getFinishPositioningList()));
}
@Override
public void setCourseDesign(TimePoint timePoint, CourseBase courseDesign) {
- raceLog.add(factory.createCourseDesignChangedEvent(timePoint, author, raceLog.getCurrentPassId(), courseDesign));
+ raceLog.add(new RaceLogCourseDesignChangedEventImpl(timePoint, author, raceLog.getCurrentPassId(), courseDesign));
}
@Override
public void setWindFix(TimePoint timePoint, Wind wind, boolean isMagnetic) {
- raceLog.add(factory.createWindFixEvent(timePoint, author, raceLog.getCurrentPassId(), wind, isMagnetic));
+ raceLog.add(new RaceLogWindFixEventImpl(timePoint, author, raceLog.getCurrentPassId(), wind, isMagnetic));
}
@Override
@@ -209,7 +215,7 @@ public class RaceStateImpl extends ReadonlyRaceStateImpl implements RaceState {
final RaceLogAdditionalScoringInformationEvent event = new AdditionalScoringInformationFinder(raceLog).analyze(/*filterBy*/informationType);
if (enable) {
if (event == null) {
- raceLog.add(factory.createAdditionalScoringInformationEvent(timePoint, UUID.randomUUID(), author, raceLog.getCurrentPassId(), informationType));
+ raceLog.add(new RaceLogAdditionalScoringInformationEventImpl(timePoint, author, raceLog.getCurrentPassId(), informationType));
}
} else {
if (event != null) {
diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/state/racingprocedure/basic/impl/BasicRacingProcedureImpl.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/state/racingprocedure/basic/impl/BasicRacingProcedureImpl.java
index 909c4f138f7..88c96b8b79b 100644
--- a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/state/racingprocedure/basic/impl/BasicRacingProcedureImpl.java
+++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/state/racingprocedure/basic/impl/BasicRacingProcedureImpl.java
@@ -6,7 +6,6 @@ import java.util.Collections;
import com.sap.sailing.domain.abstractlog.AbstractLogEventAuthor;
import com.sap.sailing.domain.abstractlog.race.RaceLog;
-import com.sap.sailing.domain.abstractlog.race.RaceLogEventFactory;
import com.sap.sailing.domain.abstractlog.race.analyzing.impl.RaceLogResolver;
import com.sap.sailing.domain.abstractlog.race.state.RaceStateEvent;
import com.sap.sailing.domain.abstractlog.race.state.impl.RaceStateEventImpl;
@@ -25,9 +24,9 @@ import com.sap.sse.common.TimePoint;
public class BasicRacingProcedureImpl extends BaseRacingProcedure {
- public BasicRacingProcedureImpl(RaceLog raceLog, AbstractLogEventAuthor author, RaceLogEventFactory factory,
+ public BasicRacingProcedureImpl(RaceLog raceLog, AbstractLogEventAuthor author,
RacingProcedureConfiguration configuration, RaceLogResolver raceLogResolver) {
- super(raceLog, author, factory, configuration, raceLogResolver);
+ super(raceLog, author, configuration, raceLogResolver);
}
@Override
diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/state/racingprocedure/ess/impl/ESSRacingProcedureImpl.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/state/racingprocedure/ess/impl/ESSRacingProcedureImpl.java
index 08cff9f9fdd..e1a4fc5a1f6 100644
--- a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/state/racingprocedure/ess/impl/ESSRacingProcedureImpl.java
+++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/state/racingprocedure/ess/impl/ESSRacingProcedureImpl.java
@@ -6,7 +6,6 @@ import java.util.Collections;
import com.sap.sailing.domain.abstractlog.AbstractLogEventAuthor;
import com.sap.sailing.domain.abstractlog.race.RaceLog;
-import com.sap.sailing.domain.abstractlog.race.RaceLogEventFactory;
import com.sap.sailing.domain.abstractlog.race.analyzing.impl.FinishingTimeFinder;
import com.sap.sailing.domain.abstractlog.race.analyzing.impl.RaceLogResolver;
import com.sap.sailing.domain.abstractlog.race.state.RaceStateEvent;
@@ -33,13 +32,13 @@ public class ESSRacingProcedureImpl extends BaseRacingProcedure implements ESSRa
private final static long startPhaseESSThreeUpInterval = 3 * 60 * 1000; // minutes * seconds * milliseconds
private final static long startPhaseESSTwoUpInterval = 2 * 60 * 1000; // minutes * seconds * milliseconds
private final static long startPhaseESSOneUpInterval = 1 * 60 * 1000; // minutes * seconds * milliseconds
-
+
@SuppressWarnings("unused")
private final ESSConfiguration configuration;
-
- public ESSRacingProcedureImpl(RaceLog raceLog, AbstractLogEventAuthor author,
- RaceLogEventFactory factory, ESSConfiguration configuration, RaceLogResolver raceLogResolver) {
- super(raceLog, author, factory, configuration, raceLogResolver);
+
+ public ESSRacingProcedureImpl(RaceLog raceLog, AbstractLogEventAuthor author, ESSConfiguration configuration,
+ RaceLogResolver raceLogResolver) {
+ super(raceLog, author, configuration, raceLogResolver);
this.configuration = configuration;
update();
}
@@ -48,7 +47,7 @@ public class ESSRacingProcedureImpl extends BaseRacingProcedure implements ESSRa
public RacingProcedureType getType() {
return RacingProcedureType.ESS;
}
-
+
@Override
public RacingProcedurePrerequisite checkPrerequisitesForStart(TimePoint now, TimePoint startTime,
FulfillmentFunction function) {
@@ -66,12 +65,11 @@ public class ESSRacingProcedureImpl extends BaseRacingProcedure implements ESSRa
@Override
protected Collection createStartStateEvents(TimePoint startTime) {
- return Arrays. asList(
- new RaceStateEventImpl(startTime.minus(startPhaseAPDownInterval), RaceStateEvents.ESS_AP_DOWN),
- new RaceStateEventImpl(startTime.minus(startPhaseESSThreeUpInterval), RaceStateEvents.ESS_THREE_UP),
- new RaceStateEventImpl(startTime.minus(startPhaseESSTwoUpInterval), RaceStateEvents.ESS_TWO_UP),
- new RaceStateEventImpl(startTime.minus(startPhaseESSOneUpInterval), RaceStateEvents.ESS_ONE_UP),
- new RaceStateEventImpl(startTime, RaceStateEvents.START));
+ return Arrays. asList(new RaceStateEventImpl(startTime.minus(startPhaseAPDownInterval),
+ RaceStateEvents.ESS_AP_DOWN), new RaceStateEventImpl(startTime.minus(startPhaseESSThreeUpInterval),
+ RaceStateEvents.ESS_THREE_UP), new RaceStateEventImpl(startTime.minus(startPhaseESSTwoUpInterval),
+ RaceStateEvents.ESS_TWO_UP), new RaceStateEventImpl(startTime.minus(startPhaseESSOneUpInterval),
+ RaceStateEvents.ESS_ONE_UP), new RaceStateEventImpl(startTime, RaceStateEvents.START));
}
@Override
@@ -91,62 +89,51 @@ public class ESSRacingProcedureImpl extends BaseRacingProcedure implements ESSRa
@Override
public FlagPoleState getActiveFlags(TimePoint startTime, TimePoint now) {
if (now.before(startTime.minus(startPhaseAPDownInterval))) {
- return new FlagPoleState(
- Arrays.asList(new FlagPole(Flags.AP, true), new FlagPole(Flags.ESSTHREE, false)), null,
- Arrays.asList(new FlagPole(Flags.AP, false), new FlagPole(Flags.ESSTHREE, false)),
+ return new FlagPoleState(Arrays.asList(new FlagPole(Flags.AP, true), new FlagPole(Flags.ESSTHREE, false)),
+ null, Arrays.asList(new FlagPole(Flags.AP, false), new FlagPole(Flags.ESSTHREE, false)),
startTime.minus(startPhaseAPDownInterval));
} else if (now.before(startTime.minus(startPhaseESSThreeUpInterval))) {
- return new FlagPoleState(
- Arrays.asList(new FlagPole(Flags.AP, false), new FlagPole(Flags.ESSTHREE, false)),
- startTime.minus(startPhaseAPDownInterval),
- Arrays.asList(new FlagPole(Flags.ESSTHREE, true), new FlagPole(Flags.ESSTWO, false)),
- startTime.minus(startPhaseESSThreeUpInterval));
+ return new FlagPoleState(Arrays.asList(new FlagPole(Flags.AP, false), new FlagPole(Flags.ESSTHREE, false)),
+ startTime.minus(startPhaseAPDownInterval), Arrays.asList(new FlagPole(Flags.ESSTHREE, true),
+ new FlagPole(Flags.ESSTWO, false)), startTime.minus(startPhaseESSThreeUpInterval));
} else if (now.before(startTime.minus(startPhaseESSTwoUpInterval))) {
- return new FlagPoleState(
- Arrays.asList(new FlagPole(Flags.ESSTHREE, true), new FlagPole(Flags.ESSTWO, false)),
- startTime.minus(startPhaseESSThreeUpInterval),
- Arrays.asList(new FlagPole(Flags.ESSTWO, true), new FlagPole(Flags.ESSONE, false)),
+ return new FlagPoleState(Arrays.asList(new FlagPole(Flags.ESSTHREE, true),
+ new FlagPole(Flags.ESSTWO, false)), startTime.minus(startPhaseESSThreeUpInterval), Arrays.asList(
+ new FlagPole(Flags.ESSTWO, true), new FlagPole(Flags.ESSONE, false)),
startTime.minus(startPhaseESSTwoUpInterval));
} else if (now.before(startTime.minus(startPhaseESSOneUpInterval))) {
return new FlagPoleState(
Arrays.asList(new FlagPole(Flags.ESSTWO, true), new FlagPole(Flags.ESSONE, false)),
- startTime.minus(startPhaseESSTwoUpInterval),
- Arrays.asList(new FlagPole(Flags.ESSONE, true)),
+ startTime.minus(startPhaseESSTwoUpInterval), Arrays.asList(new FlagPole(Flags.ESSONE, true)),
startTime.minus(startPhaseESSOneUpInterval));
- } if (now.before(startTime)) {
- return new FlagPoleState(
- Arrays.asList(new FlagPole(Flags.ESSONE, true)),
- startTime.minus(startPhaseESSOneUpInterval),
- Arrays.asList(new FlagPole(Flags.ESSONE, false)),
+ }
+ if (now.before(startTime)) {
+ return new FlagPoleState(Arrays.asList(new FlagPole(Flags.ESSONE, true)),
+ startTime.minus(startPhaseESSOneUpInterval), Arrays.asList(new FlagPole(Flags.ESSONE, false)),
startTime);
} else {
if (isIndividualRecallDisplayed(now)) {
- return new FlagPoleState(
- Arrays.asList(new FlagPole(Flags.XRAY, true)),
- getIndividualRecallDisplayedTime(),
- Arrays.asList(new FlagPole(Flags.XRAY, false)),
+ return new FlagPoleState(Arrays.asList(new FlagPole(Flags.XRAY, true)),
+ getIndividualRecallDisplayedTime(), Arrays.asList(new FlagPole(Flags.XRAY, false)),
getIndividualRecallRemovalTime());
} else if (isFinished(now)) {
- return new FlagPoleState(
- Arrays.asList(new FlagPole(Flags.BLUE, false)), getFinishedTime());
+ return new FlagPoleState(Arrays.asList(new FlagPole(Flags.BLUE, false)), getFinishedTime());
} else if (isInFinishingPhase(now)) {
- return new FlagPoleState(
- Arrays.asList(new FlagPole(Flags.BLUE, true)),
- getFinishingTime(),
- Arrays.asList(new FlagPole(Flags.BLUE, false)),
- null);
+ return new FlagPoleState(Arrays.asList(new FlagPole(Flags.BLUE, true)), getFinishingTime(),
+ Arrays.asList(new FlagPole(Flags.BLUE, false)), null);
} else {
TimePoint recallRemoved = getIndividualRecallRemovalTime();
- return new FlagPoleState(Collections.emptyList(), recallRemoved == null ? startTime : recallRemoved);
+ return new FlagPoleState(Collections. emptyList(), recallRemoved == null ? startTime
+ : recallRemoved);
}
}
}
-
+
@Override
protected RacingProcedureChangedListeners extends RacingProcedureChangedListener> createChangedListenerContainer() {
return new ESSChangedListeners();
}
-
+
@Override
protected ESSChangedListeners getChangedListeners() {
return (ESSChangedListeners) super.getChangedListeners();
@@ -156,7 +143,7 @@ public class ESSRacingProcedureImpl extends BaseRacingProcedure implements ESSRa
public void addChangedListener(ESSChangedListener listener) {
getChangedListeners().add(listener);
}
-
+
@Override
public TimePoint getTimeLimit(TimePoint startTime) {
TimePoint firstBoatTime = new FinishingTimeFinder(raceLog).analyze();
@@ -165,12 +152,12 @@ public class ESSRacingProcedureImpl extends BaseRacingProcedure implements ESSRa
}
return null;
}
-
+
@Override
protected boolean hasIndividualRecallByDefault() {
return true;
}
-
+
@Override
public ESSConfiguration getConfiguration() {
return (ESSConfiguration) super.getConfiguration();
diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/state/racingprocedure/gate/impl/GateStartRacingProcedureImpl.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/state/racingprocedure/gate/impl/GateStartRacingProcedureImpl.java
index 2bcafb0f08a..276e7d0ee42 100644
--- a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/state/racingprocedure/gate/impl/GateStartRacingProcedureImpl.java
+++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/state/racingprocedure/gate/impl/GateStartRacingProcedureImpl.java
@@ -5,11 +5,12 @@ import java.util.Collection;
import com.sap.sailing.domain.abstractlog.AbstractLogEventAuthor;
import com.sap.sailing.domain.abstractlog.race.RaceLog;
-import com.sap.sailing.domain.abstractlog.race.RaceLogEventFactory;
import com.sap.sailing.domain.abstractlog.race.RaceLogGateLineOpeningTimeEvent.GateLineOpeningTimes;
import com.sap.sailing.domain.abstractlog.race.analyzing.impl.GateLineOpeningTimeFinder;
import com.sap.sailing.domain.abstractlog.race.analyzing.impl.PathfinderFinder;
import com.sap.sailing.domain.abstractlog.race.analyzing.impl.RaceLogResolver;
+import com.sap.sailing.domain.abstractlog.race.impl.RaceLogGateLineOpeningTimeEventImpl;
+import com.sap.sailing.domain.abstractlog.race.impl.RaceLogPathfinderEventImpl;
import com.sap.sailing.domain.abstractlog.race.state.RaceStateEvent;
import com.sap.sailing.domain.abstractlog.race.state.ReadonlyRaceState;
import com.sap.sailing.domain.abstractlog.race.state.impl.RaceStateEventImpl;
@@ -43,14 +44,15 @@ public class GateStartRacingProcedureImpl extends BaseRacingProcedure implements
private boolean gateLineOpeningTimesHasBeenSet;
private String cachedPathfinder;
- public GateStartRacingProcedureImpl(RaceLog raceLog, AbstractLogEventAuthor author, RaceLogEventFactory factory,
+ public GateStartRacingProcedureImpl(RaceLog raceLog, AbstractLogEventAuthor author,
GateStartConfiguration configuration, RaceLogResolver raceLogResolver) {
- super(raceLog, author, factory, configuration, raceLogResolver);
+ super(raceLog, author, configuration, raceLogResolver);
this.gateLineOpeningTimeAnalyzer = new GateLineOpeningTimeFinder(raceLog);
this.pathfinderAnalyzer = new PathfinderFinder(raceLog);
long defaultGolfDownTime = getDefaultGolfDownTime();
- this.cachedGateLineOpeningTimes = new GateLineOpeningTimes(GateStartRacingProcedure.DefaultGateLaunchStopTime, defaultGolfDownTime);
+ this.cachedGateLineOpeningTimes = new GateLineOpeningTimes(GateStartRacingProcedure.DefaultGateLaunchStopTime,
+ defaultGolfDownTime);
this.gateLineOpeningTimesHasBeenSet = false;
update();
@@ -78,7 +80,8 @@ public class GateStartRacingProcedureImpl extends BaseRacingProcedure implements
public RacingProcedurePrerequisite checkPrerequisitesForStart(TimePoint now, TimePoint startTime,
FulfillmentFunction function) {
if (startTime.before(now)) {
- if (getConfiguration().hasPathfinder() != null && getConfiguration().hasPathfinder() && getPathfinder() == null) {
+ if (getConfiguration().hasPathfinder() != null && getConfiguration().hasPathfinder()
+ && getPathfinder() == null) {
return new PathfinderPrerequisite(function, this, now, startTime);
} else if (!gateLineOpeningTimesHasBeenSet) {
return new GateLaunchTimePrerequisite(function, this, now, startTime, getDefaultGolfDownTime());
@@ -125,8 +128,8 @@ public class GateStartRacingProcedureImpl extends BaseRacingProcedure implements
switch (event.getEventName()) {
case START:
if (!gateLineOpeningTimesHasBeenSet) {
- setGateLineOpeningTimes(event.getTimePoint(),
- cachedGateLineOpeningTimes.getGateLaunchStopTime(), cachedGateLineOpeningTimes.getGolfDownTime());
+ setGateLineOpeningTimes(event.getTimePoint(), cachedGateLineOpeningTimes.getGateLaunchStopTime(),
+ cachedGateLineOpeningTimes.getGolfDownTime());
}
rescheduleGateShutdownTime(event.getTimePoint());
return true;
@@ -147,35 +150,29 @@ public class GateStartRacingProcedureImpl extends BaseRacingProcedure implements
TimePoint gateShutdownTime = getGateShutdownTimePoint(startTime);
if (now.before(startTime.minus(startPhaseClassOverGolfUpIntervall))) {
return new FlagPoleState(Arrays.asList(new FlagPole(classFlag, Flags.GOLF, false), new FlagPole(Flags.PAPA,
- false)), null, Arrays.asList(new FlagPole(classFlag, Flags.GOLF, true), new FlagPole(Flags.PAPA, false)),
- startTime.minus(startPhaseClassOverGolfUpIntervall));
+ false)), null, Arrays.asList(new FlagPole(classFlag, Flags.GOLF, true), new FlagPole(Flags.PAPA,
+ false)), startTime.minus(startPhaseClassOverGolfUpIntervall));
} else if (now.before(startTime.minus(startPhasePapaUpInterval))) {
return new FlagPoleState(Arrays.asList(new FlagPole(classFlag, Flags.GOLF, true), new FlagPole(Flags.PAPA,
- false)), startTime.minus(startPhaseClassOverGolfUpIntervall),
- Arrays.asList(new FlagPole(classFlag, Flags.GOLF, true), new FlagPole(Flags.PAPA, true)),
- startTime.minus(startPhasePapaUpInterval));
+ false)), startTime.minus(startPhaseClassOverGolfUpIntervall), Arrays.asList(new FlagPole(classFlag,
+ Flags.GOLF, true), new FlagPole(Flags.PAPA, true)), startTime.minus(startPhasePapaUpInterval));
} else if (now.before(startTime.minus(startPhasePapaDownInterval))) {
return new FlagPoleState(Arrays.asList(new FlagPole(classFlag, Flags.GOLF, true), new FlagPole(Flags.PAPA,
- true)), startTime.minus(startPhasePapaUpInterval),
- Arrays.asList(new FlagPole(classFlag, Flags.GOLF, true), new FlagPole(Flags.PAPA, false)),
- startTime.minus(startPhasePapaDownInterval));
+ true)), startTime.minus(startPhasePapaUpInterval), Arrays.asList(new FlagPole(classFlag,
+ Flags.GOLF, true), new FlagPole(Flags.PAPA, false)), startTime.minus(startPhasePapaDownInterval));
} else if (now.before(startTime)) {
return new FlagPoleState(Arrays.asList(new FlagPole(classFlag, Flags.GOLF, true), new FlagPole(Flags.PAPA,
- false)), startTime.minus(startPhasePapaDownInterval),
- Arrays.asList(new FlagPole(classFlag, false), new FlagPole(Flags.GOLF, true)), startTime);
+ false)), startTime.minus(startPhasePapaDownInterval), Arrays.asList(new FlagPole(classFlag, false),
+ new FlagPole(Flags.GOLF, true)), startTime);
} else if (now.before(gateShutdownTime)) {
return new FlagPoleState(Arrays.asList(new FlagPole(Flags.GOLF, true)), startTime,
Arrays.asList(new FlagPole(Flags.GOLF, false)), gateShutdownTime);
} else {
if (isFinished(now)) {
- return new FlagPoleState(
- Arrays.asList(new FlagPole(Flags.BLUE, false)), getFinishedTime());
+ return new FlagPoleState(Arrays.asList(new FlagPole(Flags.BLUE, false)), getFinishedTime());
} else if (isInFinishingPhase(now)) {
- return new FlagPoleState(
- Arrays.asList(new FlagPole(Flags.BLUE, true)),
- getFinishingTime(),
- Arrays.asList(new FlagPole(Flags.BLUE, false)),
- null);
+ return new FlagPoleState(Arrays.asList(new FlagPole(Flags.BLUE, true)), getFinishingTime(),
+ Arrays.asList(new FlagPole(Flags.BLUE, false)), null);
} else {
return new FlagPoleState(Arrays.asList(new FlagPole(Flags.GOLF, false)), gateShutdownTime);
}
@@ -204,7 +201,8 @@ public class GateStartRacingProcedureImpl extends BaseRacingProcedure implements
@Override
public void setGateLineOpeningTimes(TimePoint now, long gateLaunchStopTime, long golfDownTime) {
- raceLog.add(factory.createGateLineOpeningTimeEvent(now, author, raceLog.getCurrentPassId(), gateLaunchStopTime, golfDownTime));
+ raceLog.add(new RaceLogGateLineOpeningTimeEventImpl(now, author, raceLog.getCurrentPassId(), gateLaunchStopTime,
+ golfDownTime));
}
@Override
@@ -214,7 +212,7 @@ public class GateStartRacingProcedureImpl extends BaseRacingProcedure implements
@Override
public void setPathfinder(TimePoint timePoint, String sailingId) {
- raceLog.add(factory.createPathfinderEvent(timePoint, author, raceLog.getCurrentPassId(), sailingId));
+ raceLog.add(new RaceLogPathfinderEventImpl(timePoint, author, raceLog.getCurrentPassId(), sailingId));
}
@Override
diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/state/racingprocedure/impl/BaseRacingProcedure.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/state/racingprocedure/impl/BaseRacingProcedure.java
index bfef08ff52a..7e848baba4f 100644
--- a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/state/racingprocedure/impl/BaseRacingProcedure.java
+++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/state/racingprocedure/impl/BaseRacingProcedure.java
@@ -8,7 +8,6 @@ import com.sap.sailing.domain.abstractlog.AbstractLogEventAuthor;
import com.sap.sailing.domain.abstractlog.race.RaceLog;
import com.sap.sailing.domain.abstractlog.race.RaceLogChangedListener;
import com.sap.sailing.domain.abstractlog.race.RaceLogEvent;
-import com.sap.sailing.domain.abstractlog.race.RaceLogEventFactory;
import com.sap.sailing.domain.abstractlog.race.RaceLogEventVisitor;
import com.sap.sailing.domain.abstractlog.race.analyzing.impl.FinishedTimeFinder;
import com.sap.sailing.domain.abstractlog.race.analyzing.impl.FinishingTimeFinder;
@@ -19,6 +18,7 @@ import com.sap.sailing.domain.abstractlog.race.analyzing.impl.IsInFinishingPhase
import com.sap.sailing.domain.abstractlog.race.analyzing.impl.IsIndividualRecallDisplayedAnalyzer;
import com.sap.sailing.domain.abstractlog.race.analyzing.impl.RaceLogResolver;
import com.sap.sailing.domain.abstractlog.race.analyzing.impl.StartTimeFinder;
+import com.sap.sailing.domain.abstractlog.race.impl.RaceLogFlagEventImpl;
import com.sap.sailing.domain.abstractlog.race.impl.WeakRaceLogChangedVisitor;
import com.sap.sailing.domain.abstractlog.race.state.RaceStateEvent;
import com.sap.sailing.domain.abstractlog.race.state.RaceStateEventScheduler;
@@ -52,7 +52,6 @@ public abstract class BaseRacingProcedure extends BaseRaceStateChangedListener i
protected final RaceLog raceLog;
protected final AbstractLogEventAuthor author;
- protected final RaceLogEventFactory factory;
private final RacingProcedureConfiguration configuration;
private final RacingProcedureChangedListeners extends RacingProcedureChangedListener> changedListeners;
@@ -66,7 +65,6 @@ public abstract class BaseRacingProcedure extends BaseRaceStateChangedListener i
private boolean cachedIsIndividualRecallDisplayed;
-
/**
* When calling me, call {@link BaseRacingProcedure#update()} afterwards!
*
@@ -74,14 +72,13 @@ public abstract class BaseRacingProcedure extends BaseRaceStateChangedListener i
* is required for a {@link StartTimeFinder} in order to make individual recall timeouts depend on start
* time rather than the time the individual recall was issued
*/
- public BaseRacingProcedure(RaceLog raceLog, AbstractLogEventAuthor author, RaceLogEventFactory factory,
+ public BaseRacingProcedure(RaceLog raceLog, AbstractLogEventAuthor author,
RacingProcedureConfiguration configuration, RaceLogResolver raceLogResolver) {
if (configuration == null) {
throw new IllegalArgumentException("configuration must not be null");
}
this.raceLog = raceLog;
this.author = author;
- this.factory = factory;
this.configuration = configuration;
this.changedListeners = createChangedListenerContainer();
this.isRecallDisplayedAnalyzer = new IsIndividualRecallDisplayedAnalyzer(raceLog);
@@ -94,18 +91,18 @@ public abstract class BaseRacingProcedure extends BaseRaceStateChangedListener i
this.raceLog.addListener(this.raceLogListener);
this.cachedIsIndividualRecallDisplayed = false;
}
-
+
@Override
public void detach() {
raceLog.removeListener(raceLogListener);
changedListeners.removeAll();
}
-
+
@Override
public void addChangedListener(RacingProcedureChangedListener listener) {
changedListeners.addBaseListener(listener);
}
-
+
public void removeChangedListener(RacingProcedureChangedListener listener) {
changedListeners.remove(listener);
};
@@ -155,7 +152,7 @@ public abstract class BaseRacingProcedure extends BaseRaceStateChangedListener i
}
return false;
}
-
+
@Override
public TimePoint getIndividualRecallDisplayedTime() {
if (hasIndividualRecall()) {
@@ -163,7 +160,7 @@ public abstract class BaseRacingProcedure extends BaseRaceStateChangedListener i
}
return null;
}
-
+
@Override
public TimePoint getIndividualRecallRemovalTime() {
TimePoint displayed = getIndividualRecallDisplayedTime();
@@ -179,8 +176,11 @@ public abstract class BaseRacingProcedure extends BaseRaceStateChangedListener i
if (raceStartTime != null) {
referenceTimePoint = raceStartTime;
} else {
- logger.warning("An individual recall was set but we don't have a start time set for the race; using individual recall set time "+
- displayed+" + timeout ("+individualRecallRemovalTimeout+") for implicit termination of individual recall");
+ logger.warning("An individual recall was set but we don't have a start time set for the race; using individual recall set time "
+ + displayed
+ + " + timeout ("
+ + individualRecallRemovalTimeout
+ + ") for implicit termination of individual recall");
referenceTimePoint = displayed;
}
return referenceTimePoint.plus(individualRecallRemovalTimeout);
@@ -190,12 +190,14 @@ public abstract class BaseRacingProcedure extends BaseRaceStateChangedListener i
@Override
public void displayIndividualRecall(TimePoint displayTime) {
- raceLog.add(factory.createFlagEvent(displayTime, author, raceLog.getCurrentPassId(), Flags.XRAY, Flags.NONE, true));
+ raceLog.add(new RaceLogFlagEventImpl(displayTime, author, raceLog.getCurrentPassId(), Flags.XRAY, Flags.NONE,
+ true));
}
@Override
public void removeIndividualRecall(TimePoint timePoint) {
- raceLog.add(factory.createFlagEvent(timePoint, author, raceLog.getCurrentPassId(), Flags.XRAY, Flags.NONE, false));
+ raceLog.add(new RaceLogFlagEventImpl(timePoint, author, raceLog.getCurrentPassId(), Flags.XRAY, Flags.NONE,
+ false));
}
@Override
@@ -208,11 +210,11 @@ public abstract class BaseRacingProcedure extends BaseRaceStateChangedListener i
return false;
}
}
-
+
@Override
public boolean hasIndividualRecall() {
- return configuration.hasInidividualRecall() == null ?
- hasIndividualRecallByDefault() : configuration.hasInidividualRecall();
+ return configuration.hasInidividualRecall() == null ? hasIndividualRecallByDefault() : configuration
+ .hasInidividualRecall();
}
protected abstract boolean hasIndividualRecallByDefault();
@@ -244,23 +246,23 @@ public abstract class BaseRacingProcedure extends BaseRaceStateChangedListener i
unscheduleStateEvent(RaceStateEvents.INDIVIDUAL_RECALL_TIMEOUT);
scheduleStateEvents(new RaceStateEventImpl(removalTime, RaceStateEvents.INDIVIDUAL_RECALL_TIMEOUT));
}
-
+
protected void scheduleStateEvents(RaceStateEvent stateEvent) {
scheduleStateEvents(Arrays.asList(stateEvent));
}
-
+
protected void scheduleStateEvents(Collection stateEvents) {
if (scheduler != null) {
scheduler.scheduleStateEvents(stateEvents);
}
}
-
+
protected void unscheduleStateEvent(RaceStateEvents raceStateEventName) {
if (scheduler != null) {
scheduler.unscheduleStateEvent(raceStateEventName);
}
}
-
+
@Override
public RacingProcedureConfiguration getConfiguration() {
return configuration;
@@ -276,7 +278,7 @@ public abstract class BaseRacingProcedure extends BaseRaceStateChangedListener i
scheduler.scheduleStateEvents(createStartStateEvents(state.getStartTime()));
}
}
-
+
@Override
public void onAdvancePass(ReadonlyRaceState state) {
unscheduleAllEvents();
@@ -288,21 +290,21 @@ public abstract class BaseRacingProcedure extends BaseRaceStateChangedListener i
scheduler.unscheduleAllEvents();
}
}
-
+
protected boolean isFinished(TimePoint at) {
IsFinishedAnalyzer analyzer = new IsFinishedAnalyzer(raceLog, finishedTimeFinder, at);
return analyzer.analyze();
}
-
+
protected boolean isInFinishingPhase(TimePoint at) {
IsInFinishingPhaseAnalyzer analyzer = new IsInFinishingPhaseAnalyzer(raceLog, finishingTimeFinder, at);
return analyzer.analyze();
}
-
+
protected TimePoint getFinishingTime() {
return finishingTimeFinder.analyze();
}
-
+
protected TimePoint getFinishedTime() {
return finishedTimeFinder.analyze();
}
diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/state/racingprocedure/impl/RacingProcedureFactoryImpl.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/state/racingprocedure/impl/RacingProcedureFactoryImpl.java
index 06617dd1902..b5960f24561 100644
--- a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/state/racingprocedure/impl/RacingProcedureFactoryImpl.java
+++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/state/racingprocedure/impl/RacingProcedureFactoryImpl.java
@@ -2,7 +2,6 @@ package com.sap.sailing.domain.abstractlog.race.state.racingprocedure.impl;
import com.sap.sailing.domain.abstractlog.AbstractLogEventAuthor;
import com.sap.sailing.domain.abstractlog.race.RaceLog;
-import com.sap.sailing.domain.abstractlog.race.RaceLogEventFactory;
import com.sap.sailing.domain.abstractlog.race.analyzing.impl.RaceLogResolver;
import com.sap.sailing.domain.abstractlog.race.state.racingprocedure.RacingProcedureFactory;
import com.sap.sailing.domain.abstractlog.race.state.racingprocedure.ReadonlyRacingProcedure;
@@ -13,17 +12,15 @@ import com.sap.sailing.domain.common.racelog.RacingProcedureType;
public class RacingProcedureFactoryImpl extends ReadonlyRacingProcedureFactory implements RacingProcedureFactory {
private final AbstractLogEventAuthor author;
- private final RaceLogEventFactory factory;
- public RacingProcedureFactoryImpl(AbstractLogEventAuthor author, RaceLogEventFactory factory,
+ public RacingProcedureFactoryImpl(AbstractLogEventAuthor author,
ConfigurationLoader configuration) {
super(configuration);
this.author = author;
- this.factory = factory;
}
@Override
public ReadonlyRacingProcedure createRacingProcedure(RacingProcedureType type, RaceLog raceLog, RaceLogResolver raceLogResolver) {
- return createProcedure(type, raceLog, author, factory, raceLogResolver);
+ return createProcedure(type, raceLog, author, raceLogResolver);
}
}
diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/state/racingprocedure/impl/ReadonlyRacingProcedureFactory.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/state/racingprocedure/impl/ReadonlyRacingProcedureFactory.java
index 971ac0caaa2..422effda297 100644
--- a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/state/racingprocedure/impl/ReadonlyRacingProcedureFactory.java
+++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/state/racingprocedure/impl/ReadonlyRacingProcedureFactory.java
@@ -3,7 +3,6 @@ package com.sap.sailing.domain.abstractlog.race.state.racingprocedure.impl;
import com.sap.sailing.domain.abstractlog.AbstractLogEventAuthor;
import com.sap.sailing.domain.abstractlog.impl.LogEventAuthorImpl;
import com.sap.sailing.domain.abstractlog.race.RaceLog;
-import com.sap.sailing.domain.abstractlog.race.RaceLogEventFactory;
import com.sap.sailing.domain.abstractlog.race.analyzing.impl.RaceLogResolver;
import com.sap.sailing.domain.abstractlog.race.impl.NoAddingRaceLogWrapper;
import com.sap.sailing.domain.abstractlog.race.state.racingprocedure.RacingProcedure;
@@ -38,20 +37,20 @@ public class ReadonlyRacingProcedureFactory implements RacingProcedureFactory {
}
protected ReadonlyRacingProcedure createProcedure(RacingProcedureType type, RaceLog raceLog,
- AbstractLogEventAuthor author, RaceLogEventFactory factory, RaceLogResolver raceLogResolver) {
+ AbstractLogEventAuthor author, RaceLogResolver raceLogResolver) {
RegattaConfiguration loadedConfiguration = configuration.load();
switch (type) {
case ESS:
- return new ESSRacingProcedureImpl(raceLog, author, factory, loadedConfiguration.getESSConfiguration(), raceLogResolver);
+ return new ESSRacingProcedureImpl(raceLog, author, loadedConfiguration.getESSConfiguration(), raceLogResolver);
case GateStart:
- return new GateStartRacingProcedureImpl(raceLog, author, factory,
+ return new GateStartRacingProcedureImpl(raceLog, author,
loadedConfiguration.getGateStartConfiguration(), raceLogResolver);
case RRS26:
- return new RRS26RacingProcedureImpl(raceLog, author, factory, loadedConfiguration.getRRS26Configuration(), raceLogResolver);
+ return new RRS26RacingProcedureImpl(raceLog, author, loadedConfiguration.getRRS26Configuration(), raceLogResolver);
case BASIC:
- return new BasicRacingProcedureImpl(raceLog, author, factory, loadedConfiguration.getBasicConfiguration(), raceLogResolver);
+ return new BasicRacingProcedureImpl(raceLog, author, loadedConfiguration.getBasicConfiguration(), raceLogResolver);
case LEAGUE:
- return new LeagueRacingProcedureImpl(raceLog, author, factory, loadedConfiguration.getLeagueConfiguration(), raceLogResolver);
+ return new LeagueRacingProcedureImpl(raceLog, author, loadedConfiguration.getLeagueConfiguration(), raceLogResolver);
default:
throw new UnsupportedOperationException("Unknown racing procedure " + type.toString());
}
@@ -63,7 +62,7 @@ public class ReadonlyRacingProcedureFactory implements RacingProcedureFactory {
AbstractLogEventAuthor author = new LogEventAuthorImpl("Illegal Author", 128);
// Wrap the racelog to disable adding...
RaceLog wrappedRaceLog = new NoAddingRaceLogWrapper(raceLog);
- return createProcedure(type, wrappedRaceLog, author, RaceLogEventFactory.INSTANCE, raceLogResolver);
+ return createProcedure(type, wrappedRaceLog, author, raceLogResolver);
}
}
diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/state/racingprocedure/league/impl/LeagueRacingProcedureImpl.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/state/racingprocedure/league/impl/LeagueRacingProcedureImpl.java
index f3e5f2508df..4e78ca10eb1 100755
--- a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/state/racingprocedure/league/impl/LeagueRacingProcedureImpl.java
+++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/state/racingprocedure/league/impl/LeagueRacingProcedureImpl.java
@@ -6,7 +6,6 @@ import java.util.Collections;
import com.sap.sailing.domain.abstractlog.AbstractLogEventAuthor;
import com.sap.sailing.domain.abstractlog.race.RaceLog;
-import com.sap.sailing.domain.abstractlog.race.RaceLogEventFactory;
import com.sap.sailing.domain.abstractlog.race.analyzing.impl.RaceLogResolver;
import com.sap.sailing.domain.abstractlog.race.state.RaceStateEvent;
import com.sap.sailing.domain.abstractlog.race.state.impl.RaceStateEventImpl;
@@ -34,8 +33,8 @@ public class LeagueRacingProcedureImpl extends BaseRacingProcedure implements Le
private final static Flags startmodeFlag = Flags.PAPA;
public LeagueRacingProcedureImpl(RaceLog raceLog, AbstractLogEventAuthor author,
- RaceLogEventFactory factory, LeagueConfiguration configuration, RaceLogResolver raceLogResolver) {
- super(raceLog, author, factory, configuration, raceLogResolver);
+ LeagueConfiguration configuration, RaceLogResolver raceLogResolver) {
+ super(raceLog, author, configuration, raceLogResolver);
update();
}
diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/state/racingprocedure/rrs26/impl/RRS26RacingProcedureImpl.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/state/racingprocedure/rrs26/impl/RRS26RacingProcedureImpl.java
index a89cc6b95d5..11ec1eb18a9 100644
--- a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/state/racingprocedure/rrs26/impl/RRS26RacingProcedureImpl.java
+++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/state/racingprocedure/rrs26/impl/RRS26RacingProcedureImpl.java
@@ -6,10 +6,10 @@ import java.util.Collections;
import com.sap.sailing.domain.abstractlog.AbstractLogEventAuthor;
import com.sap.sailing.domain.abstractlog.race.RaceLog;
-import com.sap.sailing.domain.abstractlog.race.RaceLogEventFactory;
import com.sap.sailing.domain.abstractlog.race.analyzing.impl.RRS26StartModeFlagFinder;
import com.sap.sailing.domain.abstractlog.race.analyzing.impl.RaceLogResolver;
import com.sap.sailing.domain.abstractlog.race.analyzing.impl.RacingProcedureTypeAnalyzer;
+import com.sap.sailing.domain.abstractlog.race.impl.RaceLogFlagEventImpl;
import com.sap.sailing.domain.abstractlog.race.state.RaceStateEvent;
import com.sap.sailing.domain.abstractlog.race.state.impl.RaceStateEventImpl;
import com.sap.sailing.domain.abstractlog.race.state.impl.RaceStateEvents;
@@ -40,8 +40,8 @@ public class RRS26RacingProcedureImpl extends BaseRacingProcedure implements RRS
private boolean startmodeFlagHasBeenSet;
public RRS26RacingProcedureImpl(RaceLog raceLog, AbstractLogEventAuthor author,
- RaceLogEventFactory factory, RRS26Configuration configuration, RaceLogResolver raceLogResolver) {
- super(raceLog, author, factory, configuration, raceLogResolver);
+ RRS26Configuration configuration, RaceLogResolver raceLogResolver) {
+ super(raceLog, author, configuration, raceLogResolver);
RacingProcedureTypeAnalyzer procedureAnalyzer = new RacingProcedureTypeAnalyzer(raceLog);
if (configuration.getStartModeFlags() != null) {
@@ -189,7 +189,7 @@ public class RRS26RacingProcedureImpl extends BaseRacingProcedure implements RRS
@Override
public void setStartModeFlag(TimePoint timePoint, Flags startMode) {
- raceLog.add(factory.createFlagEvent(timePoint, author, raceLog.getCurrentPassId(), startMode, Flags.NONE, true));
+ raceLog.add(new RaceLogFlagEventImpl(timePoint, author, raceLog.getCurrentPassId(), startMode, Flags.NONE, true));
}
@Override
diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/tracking/analyzing/impl/RaceLogOpenEndedDeviceMappingCloser.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/tracking/analyzing/impl/RaceLogOpenEndedDeviceMappingCloser.java
index f7183da288f..20e355f91ad 100644
--- a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/tracking/analyzing/impl/RaceLogOpenEndedDeviceMappingCloser.java
+++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/tracking/analyzing/impl/RaceLogOpenEndedDeviceMappingCloser.java
@@ -5,9 +5,9 @@ import java.io.Serializable;
import com.sap.sailing.domain.abstractlog.AbstractLogEventAuthor;
import com.sap.sailing.domain.abstractlog.race.RaceLog;
import com.sap.sailing.domain.abstractlog.race.RaceLogEvent;
-import com.sap.sailing.domain.abstractlog.race.RaceLogEventFactory;
import com.sap.sailing.domain.abstractlog.race.RaceLogEventVisitor;
import com.sap.sailing.domain.abstractlog.race.tracking.RaceLogCloseOpenEndedDeviceMappingEvent;
+import com.sap.sailing.domain.abstractlog.race.tracking.impl.RaceLogCloseOpenEndedDeviceMappingEventImpl;
import com.sap.sailing.domain.abstractlog.shared.analyzing.OpenEndedDeviceMappingCloser;
import com.sap.sailing.domain.racelogtracking.DeviceMapping;
import com.sap.sse.common.TimePoint;
@@ -23,7 +23,7 @@ public class RaceLogOpenEndedDeviceMappingCloser extends
@Override
protected RaceLogCloseOpenEndedDeviceMappingEvent createCloseEvent(TimePoint logicalTimePoint,
Serializable eventToCloseId) {
- return RaceLogEventFactory.INSTANCE.createCloseOpenEndedDeviceMappingEvent(
+ return new RaceLogCloseOpenEndedDeviceMappingEventImpl(
logicalTimePoint, author, getLog().getCurrentPassId(), eventToCloseId, closingTimePoint);
}
diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/tracking/impl/AbstractRaceLogDeviceMappingEventImpl.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/tracking/impl/AbstractRaceLogDeviceMappingEventImpl.java
index 54b6e405c36..5729089b331 100644
--- a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/tracking/impl/AbstractRaceLogDeviceMappingEventImpl.java
+++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/tracking/impl/AbstractRaceLogDeviceMappingEventImpl.java
@@ -19,13 +19,19 @@ extends AbstractDeviceMappingEventImpl implements Ra
private static final long serialVersionUID = -5114645637316367845L;
private final RaceLogEventData raceLogEventData;
- public AbstractRaceLogDeviceMappingEventImpl(TimePoint createdAt, AbstractLogEventAuthor author,
- TimePoint logicalTimePoint, Serializable id, int passId, ItemT mappedTo, DeviceIdentifier device,
+ public AbstractRaceLogDeviceMappingEventImpl(TimePoint createdAt, TimePoint logicalTimePoint,
+ AbstractLogEventAuthor author, Serializable id, int passId, ItemT mappedTo, DeviceIdentifier device,
TimePoint from, TimePoint to) {
- super(createdAt, author, logicalTimePoint, id, mappedTo, device, from, to);
+ super(createdAt, logicalTimePoint, author, id, mappedTo, device, from, to);
this.raceLogEventData = new RaceLogEventDataImpl(null, passId);
}
+ public AbstractRaceLogDeviceMappingEventImpl(TimePoint logicalTimePoint,
+ AbstractLogEventAuthor author, int passId, ItemT mappedTo, DeviceIdentifier device,
+ TimePoint from, TimePoint to) {
+ this(now(), logicalTimePoint, author, randId(), passId, mappedTo, device, from, to);
+ }
+
@Override
public int getPassId() {
return raceLogEventData.getPassId();
diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/tracking/impl/RaceLogCloseOpenEndedDeviceMappingEventImpl.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/tracking/impl/RaceLogCloseOpenEndedDeviceMappingEventImpl.java
index fbd1631f9d6..bd20d1e61eb 100644
--- a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/tracking/impl/RaceLogCloseOpenEndedDeviceMappingEventImpl.java
+++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/tracking/impl/RaceLogCloseOpenEndedDeviceMappingEventImpl.java
@@ -12,18 +12,24 @@ import com.sap.sailing.domain.abstractlog.shared.events.impl.BaseCloseOpenEndedD
import com.sap.sailing.domain.base.Competitor;
import com.sap.sse.common.TimePoint;
-public class RaceLogCloseOpenEndedDeviceMappingEventImpl extends BaseCloseOpenEndedDeviceMappingEventImpl
-implements RaceLogCloseOpenEndedDeviceMappingEvent {
+public class RaceLogCloseOpenEndedDeviceMappingEventImpl extends
+ BaseCloseOpenEndedDeviceMappingEventImpl implements
+ RaceLogCloseOpenEndedDeviceMappingEvent {
private static final long serialVersionUID = -5114645637316367845L;
private final RaceLogEventData raceLogEventData;
-
- public RaceLogCloseOpenEndedDeviceMappingEventImpl(TimePoint createdAt, AbstractLogEventAuthor author,
- TimePoint logicalTimePoint, Serializable id, int passId, Serializable deviceMappingEventId,
+
+ public RaceLogCloseOpenEndedDeviceMappingEventImpl(TimePoint createdAt, TimePoint logicalTimePoint,
+ AbstractLogEventAuthor author, Serializable id, int passId, Serializable deviceMappingEventId,
TimePoint closingTimePoint) {
- super(createdAt, author, logicalTimePoint, id, deviceMappingEventId, closingTimePoint);
+ super(createdAt, logicalTimePoint, author, id, deviceMappingEventId, closingTimePoint);
this.raceLogEventData = new RaceLogEventDataImpl(null, passId);
}
-
+
+ public RaceLogCloseOpenEndedDeviceMappingEventImpl(TimePoint logicalTimePoint, AbstractLogEventAuthor author,
+ int passId, Serializable deviceMappingEventId, TimePoint closingTimePoint) {
+ this(now(), logicalTimePoint, author, randId(), passId, deviceMappingEventId, closingTimePoint);
+ }
+
@Override
public int getPassId() {
return raceLogEventData.getPassId();
diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/tracking/impl/RaceLogDefineMarkEventImpl.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/tracking/impl/RaceLogDefineMarkEventImpl.java
index b60ce4535c5..b4f919ffc5d 100644
--- a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/tracking/impl/RaceLogDefineMarkEventImpl.java
+++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/tracking/impl/RaceLogDefineMarkEventImpl.java
@@ -1,13 +1,11 @@
package com.sap.sailing.domain.abstractlog.race.tracking.impl;
import java.io.Serializable;
-import java.util.Collections;
import com.sap.sailing.domain.abstractlog.AbstractLogEventAuthor;
import com.sap.sailing.domain.abstractlog.race.RaceLogEventVisitor;
import com.sap.sailing.domain.abstractlog.race.impl.RaceLogEventImpl;
import com.sap.sailing.domain.abstractlog.race.tracking.RaceLogDefineMarkEvent;
-import com.sap.sailing.domain.base.Competitor;
import com.sap.sailing.domain.base.Mark;
import com.sap.sse.common.TimePoint;
@@ -16,11 +14,16 @@ public class RaceLogDefineMarkEventImpl extends RaceLogEventImpl implements Race
private final Mark mark;
- public RaceLogDefineMarkEventImpl(TimePoint createdAt, AbstractLogEventAuthor author, TimePoint logicalTimePoint,
+ public RaceLogDefineMarkEventImpl(TimePoint createdAt, TimePoint logicalTimePoint, AbstractLogEventAuthor author,
Serializable pId, int pPassId, Mark mark) {
- super(createdAt, author, logicalTimePoint, pId, Collections.emptyList(), pPassId);
+ super(createdAt, logicalTimePoint, author, pId, pPassId);
this.mark = mark;
}
+
+ public RaceLogDefineMarkEventImpl(TimePoint logicalTimePoint, AbstractLogEventAuthor author,
+ int pPassId, Mark mark) {
+ this(now(), logicalTimePoint, author, randId(), pPassId, mark);
+ }
@Override
public void accept(RaceLogEventVisitor visitor) {
diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/tracking/impl/RaceLogDenoteForTrackingEventImpl.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/tracking/impl/RaceLogDenoteForTrackingEventImpl.java
index 21d6d7ea445..66b81a2f3c4 100644
--- a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/tracking/impl/RaceLogDenoteForTrackingEventImpl.java
+++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/tracking/impl/RaceLogDenoteForTrackingEventImpl.java
@@ -1,34 +1,35 @@
package com.sap.sailing.domain.abstractlog.race.tracking.impl;
import java.io.Serializable;
-import java.util.Collections;
import com.sap.sailing.domain.abstractlog.AbstractLogEventAuthor;
import com.sap.sailing.domain.abstractlog.race.RaceLogEventVisitor;
import com.sap.sailing.domain.abstractlog.race.impl.RaceLogEventImpl;
import com.sap.sailing.domain.abstractlog.race.tracking.RaceLogDenoteForTrackingEvent;
import com.sap.sailing.domain.base.BoatClass;
-import com.sap.sailing.domain.base.Competitor;
import com.sap.sse.common.TimePoint;
-public class RaceLogDenoteForTrackingEventImpl extends RaceLogEventImpl implements
-RaceLogDenoteForTrackingEvent {
+public class RaceLogDenoteForTrackingEventImpl extends RaceLogEventImpl implements RaceLogDenoteForTrackingEvent {
private static final long serialVersionUID = 6937741283401976385L;
private final String raceName;
private final BoatClass boatClass;
private final Serializable raceId;
- public RaceLogDenoteForTrackingEventImpl(TimePoint createdAt,
- AbstractLogEventAuthor author, TimePoint logicalTimePoint,
- Serializable pId, int pPassId,
- String raceName, BoatClass boatClass, Serializable raceId) {
- super(createdAt, author, logicalTimePoint, pId, Collections.emptyList(), pPassId);
+ public RaceLogDenoteForTrackingEventImpl(TimePoint createdAt, TimePoint logicalTimePoint,
+ AbstractLogEventAuthor author, Serializable pId, int pPassId, String raceName,
+ BoatClass boatClass, Serializable raceId) {
+ super(createdAt, logicalTimePoint, author, pId, pPassId);
this.raceName = raceName;
this.boatClass = boatClass;
this.raceId = raceId;
}
+ public RaceLogDenoteForTrackingEventImpl(TimePoint logicalTimePoint, AbstractLogEventAuthor author, int pPassId,
+ String raceName, BoatClass boatClass, Serializable raceId) {
+ this(now(), logicalTimePoint, author, randId(), pPassId, raceName, boatClass, raceId);
+ }
+
@Override
public void accept(RaceLogEventVisitor visitor) {
visitor.visit(this);
@@ -43,7 +44,7 @@ RaceLogDenoteForTrackingEvent {
public BoatClass getBoatClass() {
return boatClass;
}
-
+
@Override
public Serializable getRaceId() {
return raceId;
diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/tracking/impl/RaceLogDeviceCompetitorMappingEventImpl.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/tracking/impl/RaceLogDeviceCompetitorMappingEventImpl.java
index 41ef893339c..070972b396f 100644
--- a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/tracking/impl/RaceLogDeviceCompetitorMappingEventImpl.java
+++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/tracking/impl/RaceLogDeviceCompetitorMappingEventImpl.java
@@ -10,10 +10,16 @@ import com.sap.sailing.domain.racelogtracking.DeviceIdentifier;
import com.sap.sse.common.TimePoint;
public class RaceLogDeviceCompetitorMappingEventImpl extends AbstractRaceLogDeviceMappingEventImpl
-implements RaceLogDeviceCompetitorMappingEvent {
- public RaceLogDeviceCompetitorMappingEventImpl(TimePoint createdAt, AbstractLogEventAuthor author, TimePoint logicalTimePoint,
- Serializable pId, int pPassId, Competitor mappedTo, DeviceIdentifier device, TimePoint from, TimePoint to) {
- super(createdAt, author, logicalTimePoint, pId, pPassId, mappedTo, device, from, to);
+ implements RaceLogDeviceCompetitorMappingEvent {
+ public RaceLogDeviceCompetitorMappingEventImpl(TimePoint createdAt, TimePoint logicalTimePoint,
+ AbstractLogEventAuthor author, Serializable pId, int pPassId, Competitor mappedTo, DeviceIdentifier device,
+ TimePoint from, TimePoint to) {
+ super(createdAt, logicalTimePoint, author, pId, pPassId, mappedTo, device, from, to);
+ }
+
+ public RaceLogDeviceCompetitorMappingEventImpl(TimePoint logicalTimePoint, AbstractLogEventAuthor author,
+ int pPassId, Competitor mappedTo, DeviceIdentifier device, TimePoint from, TimePoint to) {
+ super(logicalTimePoint, author, pPassId, mappedTo, device, from, to);
}
private static final long serialVersionUID = -1494030544804758753L;
diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/tracking/impl/RaceLogDeviceMarkMappingEventImpl.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/tracking/impl/RaceLogDeviceMarkMappingEventImpl.java
index 4ad9650c8c4..abcdf21bfd9 100644
--- a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/tracking/impl/RaceLogDeviceMarkMappingEventImpl.java
+++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/tracking/impl/RaceLogDeviceMarkMappingEventImpl.java
@@ -9,13 +9,19 @@ import com.sap.sailing.domain.base.Mark;
import com.sap.sailing.domain.racelogtracking.DeviceIdentifier;
import com.sap.sse.common.TimePoint;
-public class RaceLogDeviceMarkMappingEventImpl extends AbstractRaceLogDeviceMappingEventImpl
-implements RaceLogDeviceMarkMappingEvent {
+public class RaceLogDeviceMarkMappingEventImpl extends AbstractRaceLogDeviceMappingEventImpl implements
+ RaceLogDeviceMarkMappingEvent {
private static final long serialVersionUID = -7223543830755457196L;
- public RaceLogDeviceMarkMappingEventImpl(TimePoint createdAt, AbstractLogEventAuthor author, TimePoint logicalTimePoint,
- Serializable pId, int pPassId, Mark mappedTo, DeviceIdentifier device, TimePoint from, TimePoint to) {
- super(createdAt, author, logicalTimePoint, pId, pPassId, mappedTo, device, from, to);
+ public RaceLogDeviceMarkMappingEventImpl(TimePoint createdAt, TimePoint logicalTimePoint,
+ AbstractLogEventAuthor author, Serializable pId, int pPassId, Mark mappedTo, DeviceIdentifier device,
+ TimePoint from, TimePoint to) {
+ super(createdAt, logicalTimePoint, author, pId, pPassId, mappedTo, device, from, to);
+ }
+
+ public RaceLogDeviceMarkMappingEventImpl(TimePoint logicalTimePoint, AbstractLogEventAuthor author, int pPassId,
+ Mark mappedTo, DeviceIdentifier device, TimePoint from, TimePoint to) {
+ super(logicalTimePoint, author, pPassId, mappedTo, device, from, to);
}
@Override
diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/tracking/impl/RaceLogRegisterCompetitorEventImpl.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/tracking/impl/RaceLogRegisterCompetitorEventImpl.java
index eb20dd7f79a..1c84b6b429b 100644
--- a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/tracking/impl/RaceLogRegisterCompetitorEventImpl.java
+++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/tracking/impl/RaceLogRegisterCompetitorEventImpl.java
@@ -22,13 +22,23 @@ public class RaceLogRegisterCompetitorEventImpl extends BaseRegisterCompetitorEv
* @throws IllegalArgumentException
* if {@code competitor} is null
*/
- public RaceLogRegisterCompetitorEventImpl(TimePoint createdAt, AbstractLogEventAuthor author,
- TimePoint logicalTimePoint, Serializable id, int passId, Competitor competitor)
+ public RaceLogRegisterCompetitorEventImpl(TimePoint createdAt, TimePoint logicalTimePoint,
+ AbstractLogEventAuthor author, Serializable id, int passId, Competitor competitor)
throws IllegalArgumentException {
- super(createdAt, author, logicalTimePoint, id, competitor);
+ super(createdAt, logicalTimePoint, author, id, competitor);
this.raceLogEventData = new RaceLogEventDataImpl(null, passId);
}
+ /**
+ * @throws IllegalArgumentException
+ * if {@code competitor} is null
+ */
+ public RaceLogRegisterCompetitorEventImpl(TimePoint logicalTimePoint,
+ AbstractLogEventAuthor author, int passId, Competitor competitor)
+ throws IllegalArgumentException {
+ this(now(), logicalTimePoint, author, randId(), passId, competitor);
+ }
+
@Override
public int getPassId() {
return raceLogEventData.getPassId();
diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/tracking/impl/RaceLogStartTrackingEventImpl.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/tracking/impl/RaceLogStartTrackingEventImpl.java
index 33a0fdca17b..ed62bc86a5f 100644
--- a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/tracking/impl/RaceLogStartTrackingEventImpl.java
+++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/tracking/impl/RaceLogStartTrackingEventImpl.java
@@ -1,22 +1,25 @@
package com.sap.sailing.domain.abstractlog.race.tracking.impl;
import java.io.Serializable;
-import java.util.Collections;
import com.sap.sailing.domain.abstractlog.AbstractLogEventAuthor;
import com.sap.sailing.domain.abstractlog.race.RaceLogEventVisitor;
import com.sap.sailing.domain.abstractlog.race.impl.RaceLogEventImpl;
import com.sap.sailing.domain.abstractlog.race.tracking.RaceLogStartTrackingEvent;
-import com.sap.sailing.domain.base.Competitor;
import com.sap.sse.common.TimePoint;
public class RaceLogStartTrackingEventImpl extends RaceLogEventImpl implements
RaceLogStartTrackingEvent {
private static final long serialVersionUID = 6017954368580125221L;
- public RaceLogStartTrackingEventImpl(TimePoint createdAt, AbstractLogEventAuthor author,
- TimePoint logicalTimePoint, Serializable pId, int pPassId) {
- super(createdAt, author, logicalTimePoint, pId, Collections.emptyList(), pPassId);
+ public RaceLogStartTrackingEventImpl(TimePoint createdAt, TimePoint logicalTimePoint,
+ AbstractLogEventAuthor author, Serializable pId, int pPassId) {
+ super(createdAt, logicalTimePoint, author, pId, pPassId);
+ }
+
+ public RaceLogStartTrackingEventImpl(TimePoint logicalTimePoint,
+ AbstractLogEventAuthor author, int pPassId) {
+ super(logicalTimePoint, author, pPassId);
}
diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/regatta/events/impl/RegattaLogCloseOpenEndedDeviceMappingEventImpl.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/regatta/events/impl/RegattaLogCloseOpenEndedDeviceMappingEventImpl.java
index ae0c3541e87..834b6a08bbe 100644
--- a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/regatta/events/impl/RegattaLogCloseOpenEndedDeviceMappingEventImpl.java
+++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/regatta/events/impl/RegattaLogCloseOpenEndedDeviceMappingEventImpl.java
@@ -15,7 +15,13 @@ implements RegattaLogCloseOpenEndedDeviceMappingEvent {
public RegattaLogCloseOpenEndedDeviceMappingEventImpl(TimePoint createdAt, AbstractLogEventAuthor author,
TimePoint logicalTimePoint, Serializable id, Serializable deviceMappingEventId,
TimePoint closingTimePoint) {
- super(createdAt, author, logicalTimePoint, id, deviceMappingEventId, closingTimePoint);
+ super(createdAt, logicalTimePoint, author, id, deviceMappingEventId, closingTimePoint);
+ }
+
+ public RegattaLogCloseOpenEndedDeviceMappingEventImpl(AbstractLogEventAuthor author,
+ TimePoint logicalTimePoint, Serializable deviceMappingEventId,
+ TimePoint closingTimePoint) {
+ super(logicalTimePoint, author, deviceMappingEventId, closingTimePoint);
}
@Override
diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/regatta/events/impl/RegattaLogDeviceCompetitorMappingEventImpl.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/regatta/events/impl/RegattaLogDeviceCompetitorMappingEventImpl.java
index 38398c2008c..aaf28ee10f2 100644
--- a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/regatta/events/impl/RegattaLogDeviceCompetitorMappingEventImpl.java
+++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/regatta/events/impl/RegattaLogDeviceCompetitorMappingEventImpl.java
@@ -10,11 +10,19 @@ import com.sap.sailing.domain.base.Competitor;
import com.sap.sailing.domain.racelogtracking.DeviceIdentifier;
import com.sap.sse.common.TimePoint;
-public class RegattaLogDeviceCompetitorMappingEventImpl extends AbstractDeviceMappingEventImpl
-implements RegattaLogDeviceCompetitorMappingEvent {
- public RegattaLogDeviceCompetitorMappingEventImpl(TimePoint createdAt, AbstractLogEventAuthor author, TimePoint logicalTimePoint,
- Serializable pId, Competitor mappedTo, DeviceIdentifier device, TimePoint from, TimePoint to) {
- super(createdAt, author, logicalTimePoint, pId, mappedTo, device, from, to);
+public class RegattaLogDeviceCompetitorMappingEventImpl extends
+ AbstractDeviceMappingEventImpl implements
+ RegattaLogDeviceCompetitorMappingEvent {
+ public RegattaLogDeviceCompetitorMappingEventImpl(TimePoint createdAt, TimePoint logicalTimePoint,
+ AbstractLogEventAuthor author, Serializable pId, Competitor mappedTo, DeviceIdentifier device,
+ TimePoint from, TimePoint to) {
+ super(createdAt, logicalTimePoint, author, pId, mappedTo, device, from, to);
+ }
+
+ public RegattaLogDeviceCompetitorMappingEventImpl(TimePoint logicalTimePoint,
+ AbstractLogEventAuthor author, Competitor mappedTo, DeviceIdentifier device,
+ TimePoint from, TimePoint to) {
+ super(logicalTimePoint, author, mappedTo, device, from, to);
}
private static final long serialVersionUID = -1494030544804758753L;
diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/regatta/events/impl/RegattaLogDeviceMarkMappingEventImpl.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/regatta/events/impl/RegattaLogDeviceMarkMappingEventImpl.java
index b30558fb509..f00b34d389d 100644
--- a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/regatta/events/impl/RegattaLogDeviceMarkMappingEventImpl.java
+++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/regatta/events/impl/RegattaLogDeviceMarkMappingEventImpl.java
@@ -14,9 +14,14 @@ public class RegattaLogDeviceMarkMappingEventImpl extends AbstractDeviceMappingE
implements RegattaLogDeviceMarkMappingEvent {
private static final long serialVersionUID = -7223543830755457196L;
- public RegattaLogDeviceMarkMappingEventImpl(TimePoint createdAt, AbstractLogEventAuthor author, TimePoint logicalTimePoint,
+ public RegattaLogDeviceMarkMappingEventImpl(TimePoint createdAt, TimePoint logicalTimePoint, AbstractLogEventAuthor author,
Serializable pId, Mark mappedTo, DeviceIdentifier device, TimePoint from, TimePoint to) {
- super(createdAt, author, logicalTimePoint, pId, mappedTo, device, from, to);
+ super(createdAt, logicalTimePoint, author, pId, mappedTo, device, from, to);
+ }
+
+ public RegattaLogDeviceMarkMappingEventImpl(TimePoint logicalTimePoint, AbstractLogEventAuthor author,
+ Mark mappedTo, DeviceIdentifier device, TimePoint from, TimePoint to) {
+ super(logicalTimePoint, author, mappedTo, device, from, to);
}
@Override
diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/regatta/events/impl/RegattaLogRegisterCompetitorEventImpl.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/regatta/events/impl/RegattaLogRegisterCompetitorEventImpl.java
index 7e61d369e59..d1f19322fa3 100644
--- a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/regatta/events/impl/RegattaLogRegisterCompetitorEventImpl.java
+++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/regatta/events/impl/RegattaLogRegisterCompetitorEventImpl.java
@@ -17,9 +17,18 @@ public class RegattaLogRegisterCompetitorEventImpl extends BaseRegisterCompetito
* @throws IllegalArgumentException
* if {@code competitor} is null
*/
- public RegattaLogRegisterCompetitorEventImpl(TimePoint createdAt, AbstractLogEventAuthor author,
- TimePoint logicalTimePoint, Serializable id, Competitor competitor) throws IllegalArgumentException {
- super(createdAt, author, logicalTimePoint, id, competitor);
+ public RegattaLogRegisterCompetitorEventImpl(TimePoint createdAt, TimePoint logicalTimePoint,
+ AbstractLogEventAuthor author, Serializable id, Competitor competitor) throws IllegalArgumentException {
+ super(createdAt, logicalTimePoint, author, id, competitor);
+ }
+
+ /**
+ * @throws IllegalArgumentException
+ * if {@code competitor} is null
+ */
+ public RegattaLogRegisterCompetitorEventImpl(TimePoint logicalTimePoint,
+ AbstractLogEventAuthor author, Competitor competitor) throws IllegalArgumentException {
+ super(logicalTimePoint, author, competitor);
}
@Override
diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/regatta/events/impl/RegattaLogRevokeEventImpl.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/regatta/events/impl/RegattaLogRevokeEventImpl.java
index be0808779f6..c486fb7ff23 100644
--- a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/regatta/events/impl/RegattaLogRevokeEventImpl.java
+++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/regatta/events/impl/RegattaLogRevokeEventImpl.java
@@ -12,10 +12,10 @@ import com.sap.sse.common.TimePoint;
public class RegattaLogRevokeEventImpl extends RevokeEventImpl implements RegattaLogRevokeEvent {
private static final long serialVersionUID = -3470191515219206588L;
- public RegattaLogRevokeEventImpl(TimePoint createdAt, AbstractLogEventAuthor author, TimePoint logicalTimePoint,
+ public RegattaLogRevokeEventImpl(TimePoint createdAt, TimePoint logicalTimePoint, AbstractLogEventAuthor author,
Serializable pId, Serializable revokedEventId, String revokedEventType, String revokedEventShortInfo,
String reason) {
- super(createdAt, author, logicalTimePoint, pId, revokedEventId, revokedEventType, revokedEventShortInfo, reason);
+ super(createdAt, logicalTimePoint, author, pId, revokedEventId, revokedEventType, revokedEventShortInfo, reason);
}
public RegattaLogRevokeEventImpl(AbstractLogEventAuthor author, RegattaLogEvent toRevoke, String reason) {
diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/regatta/events/impl/RegattaLogSetCompetitorHandicapInfoEventImpl.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/regatta/events/impl/RegattaLogSetCompetitorHandicapInfoEventImpl.java
index 89564c13581..271011daa27 100755
--- a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/regatta/events/impl/RegattaLogSetCompetitorHandicapInfoEventImpl.java
+++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/regatta/events/impl/RegattaLogSetCompetitorHandicapInfoEventImpl.java
@@ -15,9 +15,9 @@ public abstract class RegattaLogSetCompetitorHandicapInfoEventImpl extends Abstr
private final Competitor competitor;
- protected RegattaLogSetCompetitorHandicapInfoEventImpl(TimePoint createdAt, AbstractLogEventAuthor author,
- TimePoint logicalTimePoint, Serializable pId, Competitor competitor) {
- super(createdAt, author, logicalTimePoint, pId);
+ protected RegattaLogSetCompetitorHandicapInfoEventImpl(TimePoint createdAt, TimePoint logicalTimePoint,
+ AbstractLogEventAuthor author, Serializable pId, Competitor competitor) {
+ super(createdAt, logicalTimePoint, author, pId);
this.competitor = competitor;
}
diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/regatta/events/impl/RegattaLogSetCompetitorTimeOnDistanceAllowancePerNauticalMileEventImpl.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/regatta/events/impl/RegattaLogSetCompetitorTimeOnDistanceAllowancePerNauticalMileEventImpl.java
index ce918739b21..1583b740755 100755
--- a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/regatta/events/impl/RegattaLogSetCompetitorTimeOnDistanceAllowancePerNauticalMileEventImpl.java
+++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/regatta/events/impl/RegattaLogSetCompetitorTimeOnDistanceAllowancePerNauticalMileEventImpl.java
@@ -16,9 +16,9 @@ public class RegattaLogSetCompetitorTimeOnDistanceAllowancePerNauticalMileEventI
private final Duration timeOnDistanceAllowancePerNauticalMile;
public RegattaLogSetCompetitorTimeOnDistanceAllowancePerNauticalMileEventImpl(TimePoint createdAt,
- AbstractLogEventAuthor author, TimePoint logicalTimePoint, Serializable pId, Competitor competitor,
+ TimePoint logicalTimePoint, AbstractLogEventAuthor author, Serializable pId, Competitor competitor,
Duration timeOnDistanceAllowancePerNauticalMile) {
- super(createdAt, author, logicalTimePoint, pId, competitor);
+ super(createdAt, logicalTimePoint, author, pId, competitor);
this.timeOnDistanceAllowancePerNauticalMile = timeOnDistanceAllowancePerNauticalMile;
}
diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/regatta/events/impl/RegattaLogSetCompetitorTimeOnTimeFactorEventImpl.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/regatta/events/impl/RegattaLogSetCompetitorTimeOnTimeFactorEventImpl.java
index 5000db41223..8b60641f119 100755
--- a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/regatta/events/impl/RegattaLogSetCompetitorTimeOnTimeFactorEventImpl.java
+++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/regatta/events/impl/RegattaLogSetCompetitorTimeOnTimeFactorEventImpl.java
@@ -12,9 +12,9 @@ public class RegattaLogSetCompetitorTimeOnTimeFactorEventImpl extends RegattaLog
private static final long serialVersionUID = -7891407213804859604L;
private final Double timeOnTimeFactor;
- public RegattaLogSetCompetitorTimeOnTimeFactorEventImpl(TimePoint createdAt, AbstractLogEventAuthor author,
- TimePoint logicalTimePoint, Serializable pId, Competitor competitor, Double timeOnTimeFactor) {
- super(createdAt, author, logicalTimePoint, pId, competitor);
+ public RegattaLogSetCompetitorTimeOnTimeFactorEventImpl(TimePoint createdAt, TimePoint logicalTimePoint,
+ AbstractLogEventAuthor author, Serializable pId, Competitor competitor, Double timeOnTimeFactor) {
+ super(createdAt, logicalTimePoint, author, pId, competitor);
this.timeOnTimeFactor = timeOnTimeFactor;
}
diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/regatta/tracking/analyzing/impl/RegattaLogOpenEndedDeviceMappingCloser.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/regatta/tracking/analyzing/impl/RegattaLogOpenEndedDeviceMappingCloser.java
index 03e9945894f..783d3872c1c 100644
--- a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/regatta/tracking/analyzing/impl/RegattaLogOpenEndedDeviceMappingCloser.java
+++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/regatta/tracking/analyzing/impl/RegattaLogOpenEndedDeviceMappingCloser.java
@@ -1,7 +1,6 @@
package com.sap.sailing.domain.abstractlog.regatta.tracking.analyzing.impl;
import java.io.Serializable;
-import java.util.UUID;
import com.sap.sailing.domain.abstractlog.AbstractLogEventAuthor;
import com.sap.sailing.domain.abstractlog.regatta.RegattaLog;
@@ -12,7 +11,6 @@ import com.sap.sailing.domain.abstractlog.regatta.events.impl.RegattaLogCloseOpe
import com.sap.sailing.domain.abstractlog.shared.analyzing.OpenEndedDeviceMappingCloser;
import com.sap.sailing.domain.racelogtracking.DeviceMapping;
import com.sap.sse.common.TimePoint;
-import com.sap.sse.common.impl.MillisecondsTimePoint;
public class RegattaLogOpenEndedDeviceMappingCloser extends
OpenEndedDeviceMappingCloser {
@@ -25,7 +23,7 @@ public class RegattaLogOpenEndedDeviceMappingCloser extends
@Override
protected RegattaLogCloseOpenEndedDeviceMappingEvent createCloseEvent(TimePoint logicalTimePoint,
Serializable eventToCloseId) {
- return new RegattaLogCloseOpenEndedDeviceMappingEventImpl(MillisecondsTimePoint.now(), author,
- logicalTimePoint, UUID.randomUUID(), eventToCloseId, closingTimePoint);
+ return new RegattaLogCloseOpenEndedDeviceMappingEventImpl(author,
+ logicalTimePoint, eventToCloseId, closingTimePoint);
}
}
diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/shared/events/impl/AbstractDeviceMappingEventImpl.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/shared/events/impl/AbstractDeviceMappingEventImpl.java
index edcfc7a5748..65a4d94129f 100644
--- a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/shared/events/impl/AbstractDeviceMappingEventImpl.java
+++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/shared/events/impl/AbstractDeviceMappingEventImpl.java
@@ -18,16 +18,22 @@ DeviceMappingEvent {
private final TimePoint from;
private final TimePoint to;
- public AbstractDeviceMappingEventImpl(TimePoint createdAt, AbstractLogEventAuthor author,
- TimePoint logicalTimePoint, Serializable id, ItemType mappedTo,
+ public AbstractDeviceMappingEventImpl(TimePoint createdAt, TimePoint logicalTimePoint,
+ AbstractLogEventAuthor author, Serializable id, ItemType mappedTo,
DeviceIdentifier device, TimePoint from, TimePoint to) {
- super(createdAt, author, logicalTimePoint, id);
+ super(createdAt, logicalTimePoint, author, id);
this.mappedTo = mappedTo;
this.device = device;
this.from = from;
this.to = to;
}
+ public AbstractDeviceMappingEventImpl(TimePoint logicalTimePoint,
+ AbstractLogEventAuthor author, ItemType mappedTo,
+ DeviceIdentifier device, TimePoint from, TimePoint to) {
+ this(now(), logicalTimePoint, author, randId(), mappedTo, device, from, to);
+ }
+
public ItemType getMappedTo() {
return mappedTo;
}
diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/shared/events/impl/BaseCloseOpenEndedDeviceMappingEventImpl.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/shared/events/impl/BaseCloseOpenEndedDeviceMappingEventImpl.java
index 7ad9ec08cd1..82f1b490017 100644
--- a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/shared/events/impl/BaseCloseOpenEndedDeviceMappingEventImpl.java
+++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/shared/events/impl/BaseCloseOpenEndedDeviceMappingEventImpl.java
@@ -8,20 +8,24 @@ import com.sap.sailing.domain.abstractlog.shared.events.CloseOpenEndedDeviceMapp
import com.sap.sse.common.TimePoint;
public abstract class BaseCloseOpenEndedDeviceMappingEventImpl extends AbstractLogEventImpl
-implements CloseOpenEndedDeviceMappingEvent {
+ implements CloseOpenEndedDeviceMappingEvent {
private static final long serialVersionUID = -2401732623610224918L;
-
+
private final Serializable deviceMappingEventId;
private final TimePoint closingTimePoint;
- public BaseCloseOpenEndedDeviceMappingEventImpl(TimePoint createdAt, AbstractLogEventAuthor author,
- TimePoint logicalTimePoint, Serializable pId, Serializable deviceMappingEventId,
- TimePoint closingTimePoint) {
- super(createdAt, author, logicalTimePoint, pId);
+ public BaseCloseOpenEndedDeviceMappingEventImpl(TimePoint createdAt, TimePoint logicalTimePoint,
+ AbstractLogEventAuthor author, Serializable pId, Serializable deviceMappingEventId, TimePoint closingTimePoint) {
+ super(createdAt, logicalTimePoint, author, pId);
this.deviceMappingEventId = deviceMappingEventId;
this.closingTimePoint = closingTimePoint;
}
+ public BaseCloseOpenEndedDeviceMappingEventImpl(TimePoint logicalTimePoint, AbstractLogEventAuthor author,
+ Serializable deviceMappingEventId, TimePoint closingTimePoint) {
+ this(now(), logicalTimePoint, author, randId(), deviceMappingEventId, closingTimePoint);
+ }
+
@Override
public Serializable getDeviceMappingEventId() {
return deviceMappingEventId;
diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/shared/events/impl/BaseRegisterCompetitorEventImpl.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/shared/events/impl/BaseRegisterCompetitorEventImpl.java
index 71768eea58e..ac71017500e 100644
--- a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/shared/events/impl/BaseRegisterCompetitorEventImpl.java
+++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/shared/events/impl/BaseRegisterCompetitorEventImpl.java
@@ -17,13 +17,26 @@ public abstract class BaseRegisterCompetitorEventImpl extends Abstract
* @throws IllegalArgumentException
* if {@code competitor} is null
*/
- public BaseRegisterCompetitorEventImpl(TimePoint createdAt, AbstractLogEventAuthor author,
- TimePoint logicalTimePoint, Serializable pId, Competitor competitor) throws IllegalArgumentException {
- super(createdAt, author, logicalTimePoint, pId);
+ public BaseRegisterCompetitorEventImpl(TimePoint createdAt, TimePoint logicalTimePoint,
+ AbstractLogEventAuthor author, Serializable pId, Competitor competitor) throws IllegalArgumentException {
+ super(createdAt, logicalTimePoint, author, pId);
+ checkCompetitor(competitor);
+ this.competitor = competitor;
+ }
+
+ /**
+ * @throws IllegalArgumentException
+ * if {@code competitor} is null
+ */
+ public BaseRegisterCompetitorEventImpl(TimePoint logicalTimePoint, AbstractLogEventAuthor author,
+ Competitor competitor) throws IllegalArgumentException {
+ this(now(), logicalTimePoint, author, randId(), competitor);
+ }
+
+ private static void checkCompetitor(Competitor competitor) throws IllegalArgumentException {
if (competitor == null) {
throw new IllegalArgumentException("Competitor may not be null");
}
- this.competitor = competitor;
}
@Override
diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/base/Boat.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/base/Boat.java
index 413775ce470..0746e5e74da 100644
--- a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/base/Boat.java
+++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/base/Boat.java
@@ -1,5 +1,6 @@
package com.sap.sailing.domain.base;
+import com.sap.sse.common.Color;
import com.sap.sse.common.Named;
import com.sap.sse.datamining.annotations.Dimension;
@@ -8,4 +9,6 @@ public interface Boat extends Named {
@Dimension(messageKey="SailID")
String getSailID();
+
+ Color getColor();
}
diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/base/EventBase.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/base/EventBase.java
index f642b939199..1a6a72c7650 100644
--- a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/base/EventBase.java
+++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/base/EventBase.java
@@ -1,98 +1,98 @@
-package com.sap.sailing.domain.base;
-
-import java.net.URL;
-import java.util.Map;
-
-import com.sap.sailing.domain.common.Renamable;
-import com.sap.sse.common.Named;
-import com.sap.sse.common.TimePoint;
-import com.sap.sse.common.WithID;
-import com.sap.sse.common.media.ImageSize;
-import com.sap.sse.common.media.WithMedia;
-
-/**
- * Base interface for an Event consisting of all static information, which might be shared
- * by the server and an Android application.
- */
-public interface EventBase extends Named, WithDescription, Renamable, WithID, WithMedia {
-
- void setDescription(String description);
-
- /**
- * @return a non-null venue for this event
- */
- Venue getVenue();
-
- /**
- * @return the start date of the event
- */
- TimePoint getStartDate();
-
- void setStartDate(TimePoint startDate);
-
- /**
- * @return the end date of the event
- */
- TimePoint getEndDate();
-
- void setEndDate(TimePoint startDate);
-
- boolean isPublic();
-
- void setPublic(boolean isPublic);
-
- /**
- * @deprecated
- * Returns a non-null live but unmodifiable collection of URLs pointing to image resources that can be
- * used to represent the event, e.g., on a web page.
- *
- * @return a non-null value which may be empty
- */
- Iterable getImageURLs();
-
- /**
- * @deprecated
- * An event may have zero or more sponsors, each of which usually want to see their logo on the web page.
- *
- * @return the sponsors' logos; always non-null but possibly empty
- */
- Iterable getSponsorImageURLs();
-
- /**
- * @deprecated
- * An optional logo image; may return null.
- */
- URL getLogoImageURL();
-
- /**
- * @deprecated
- * Returns a non-null live but unmodifiable collection of URLs pointing to video resources that can be
- * used to represent the event, e.g., on a web page.
- *
- * @return a non-null value which may be empty
- */
- Iterable getVideoURLs();
-
- /**
- * @return the URL of the event's official web site, or null if such a site does not exist or its URL
- * is not known
- */
- URL getOfficialWebsiteURL();
-
- void setOfficialWebsiteURL(URL officialWebsiteURL);
-
- /**
- * @return the URL of an external web site containing sailor related information like protests, official results, etc.
- * or null if such a site does not exist or its URL is not known.
- */
- URL getSailorsInfoWebsiteURL();
-
- void setSailorsInfoWebsiteURL(URL sailorsInfoWebsiteURL);
-
- Iterable extends LeaderboardGroupBase> getLeaderboardGroups();
-
- /**
- * Sets and converts all event images and videos from the old URL based format to the new richer format
- * */
- boolean setMediaURLs(Iterable imageURLs, Iterable sponsorImageURLs, Iterable videoURLs, URL logoImageURL, Map imageSizes);
-}
+package com.sap.sailing.domain.base;
+
+import java.net.URL;
+import java.util.Map;
+
+import com.sap.sailing.domain.common.Renamable;
+import com.sap.sse.common.Named;
+import com.sap.sse.common.TimePoint;
+import com.sap.sse.common.WithID;
+import com.sap.sse.common.media.ImageSize;
+import com.sap.sse.shared.media.WithMedia;
+
+/**
+ * Base interface for an Event consisting of all static information, which might be shared
+ * by the server and an Android application.
+ */
+public interface EventBase extends Named, WithDescription, Renamable, WithID, WithMedia {
+
+ void setDescription(String description);
+
+ /**
+ * @return a non-null venue for this event
+ */
+ Venue getVenue();
+
+ /**
+ * @return the start date of the event
+ */
+ TimePoint getStartDate();
+
+ void setStartDate(TimePoint startDate);
+
+ /**
+ * @return the end date of the event
+ */
+ TimePoint getEndDate();
+
+ void setEndDate(TimePoint startDate);
+
+ boolean isPublic();
+
+ void setPublic(boolean isPublic);
+
+ /**
+ * @deprecated
+ * Returns a non-null live but unmodifiable collection of URLs pointing to image resources that can be
+ * used to represent the event, e.g., on a web page.
+ *
+ * @return a non-null value which may be empty
+ */
+ Iterable getImageURLs();
+
+ /**
+ * @deprecated
+ * An event may have zero or more sponsors, each of which usually want to see their logo on the web page.
+ *
+ * @return the sponsors' logos; always non-null but possibly empty
+ */
+ Iterable getSponsorImageURLs();
+
+ /**
+ * @deprecated
+ * An optional logo image; may return null.
+ */
+ URL getLogoImageURL();
+
+ /**
+ * @deprecated
+ * Returns a non-null live but unmodifiable collection of URLs pointing to video resources that can be
+ * used to represent the event, e.g., on a web page.
+ *
+ * @return a non-null value which may be empty
+ */
+ Iterable getVideoURLs();
+
+ /**
+ * @return the URL of the event's official web site, or null if such a site does not exist or its URL
+ * is not known
+ */
+ URL getOfficialWebsiteURL();
+
+ void setOfficialWebsiteURL(URL officialWebsiteURL);
+
+ /**
+ * @return the URL of an external web site containing sailor related information like protests, official results, etc.
+ * or null if such a site does not exist or its URL is not known.
+ */
+ URL getSailorsInfoWebsiteURL();
+
+ void setSailorsInfoWebsiteURL(URL sailorsInfoWebsiteURL);
+
+ Iterable extends LeaderboardGroupBase> getLeaderboardGroups();
+
+ /**
+ * Sets and converts all event images and videos from the old URL based format to the new richer format
+ * */
+ boolean setMediaURLs(Iterable imageURLs, Iterable sponsorImageURLs, Iterable videoURLs, URL logoImageURL, Map imageSizes);
+}
diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/base/LeaderboardSearchResultBase.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/base/LeaderboardSearchResultBase.java
index 1ab3365fc2e..176dd2a67d2 100755
--- a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/base/LeaderboardSearchResultBase.java
+++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/base/LeaderboardSearchResultBase.java
@@ -34,5 +34,5 @@ public interface LeaderboardSearchResultBase extends Hit {
* that is referenced by the leaderboard as its {@link Leaderboard#getDefaultCourseArea() default course area}, the
* event is returned;