Moved TopLevelMasterData to domain package

removed unused master data json facilities
This commit is contained in:
Frederik Petersen committed 2014-02-09 16:08:59 +01:00
1 parent ea5dae85a2
commit 89385d802f
55 files changed
+15 -2609

No files matched your search

@@ -1,91 +0,0 @@
package com.sap.sailing.domain.base;
import java.io.Serializable;
import java.util.List;
import java.util.Map;
import com.sap.sailing.domain.leaderboard.Leaderboard;
import com.sap.sailing.domain.leaderboard.ThresholdBasedResultDiscardingRule;
import com.sap.sailing.domain.leaderboard.impl.ThresholdBasedResultDiscardingRuleImpl;
import com.sap.sailing.domain.masterdataimport.ScoreCorrectionMasterData;
import com.sap.sailing.domain.racelog.RaceLogEvent;
public abstract class LeaderboardMasterData {
private String name;
private String displayName;
private int[] resultDiscardingRule;
private Map<Serializable, Competitor> competitorsById;
private ScoreCorrectionMasterData scoreCorrection;
private Map<Serializable, Double> carriedPoints;
private List<Serializable> suppressedCompetitors;
private Map<Serializable, String> displayNamesByCompetitorId;
private Map<String, Map<String, List<RaceLogEvent>>> raceLogEvents;
public LeaderboardMasterData(String name, String displayName, int[] resultDiscardingRule,
Map<Serializable, Competitor> competitorsById, ScoreCorrectionMasterData scoreCorrection,
Map<Serializable, Double> carriedPoints, List<Serializable> suppressedCompetitors,
Map<Serializable, String> displayNamesByCompetitorId,
Map<String, Map<String, List<RaceLogEvent>>> raceLogEvents) {
this.name = name;
this.displayName = displayName;
this.resultDiscardingRule = resultDiscardingRule;
this.competitorsById = competitorsById;
this.scoreCorrection = scoreCorrection;
this.carriedPoints = carriedPoints;
this.suppressedCompetitors = suppressedCompetitors;
this.displayNamesByCompetitorId = displayNamesByCompetitorId;
this.raceLogEvents = raceLogEvents;
}
public String getName() {
return name;
}
public String getDisplayName() {
return displayName;
}
public ThresholdBasedResultDiscardingRule getResultDiscardingRule() {
if (resultDiscardingRule == null) {
return null;
}
ThresholdBasedResultDiscardingRule rule = new ThresholdBasedResultDiscardingRuleImpl(resultDiscardingRule);
return rule;
}
public Map<Serializable, Competitor> getCompetitorsById() {
return competitorsById;
}
public ScoreCorrectionMasterData getScoreCorrection() {
return scoreCorrection;
}
public Map<Serializable, Double> getCarriedPoints() {
return carriedPoints;
}
public List<Serializable> getSuppressedCompetitors() {
return suppressedCompetitors;
}
public Map<Serializable, String> getDisplayNamesByCompetitorId() {
return displayNamesByCompetitorId;
}
public Map<String, Map<String, List<RaceLogEvent>>> getRaceLogEvents() {
return raceLogEvents;
}
public abstract Leaderboard getLeaderboard();
}
@@ -1,49 +0,0 @@
package com.sap.sailing.domain.masterdataimport;
import com.sap.sailing.domain.common.impl.Util.Pair;
public class EventMasterData {
private String id;
private String name;
private String venueName;
private String pubUrl;
private Iterable<Pair<String, String>> courseAreas;
private boolean isPublic;
public EventMasterData(String id, String name, String venueName, String pubUrl, Iterable<Pair<String, String>> courseAreas, boolean isPublic) {
this.id = id;
this.name = name;
this.venueName = venueName;
this.pubUrl = pubUrl;
this.courseAreas = courseAreas;
this.isPublic = isPublic;
}
public String getId() {
return id;
}
public String getName() {
return name;
}
public String getVenueName() {
return venueName;
}
public String getPubUrl() {
return pubUrl;
}
public Iterable<Pair<String, String>> getCourseAreas() {
return courseAreas;
}
public boolean isPublic() {
return isPublic;
}
}
@@ -1,60 +0,0 @@
package com.sap.sailing.domain.masterdataimport;
import java.io.Serializable;
import java.util.List;
import java.util.Map;
import com.sap.sailing.domain.base.Competitor;
import com.sap.sailing.domain.base.CourseArea;
import com.sap.sailing.domain.base.LeaderboardMasterData;
import com.sap.sailing.domain.leaderboard.Leaderboard;
import com.sap.sailing.domain.leaderboard.ScoringScheme;
import com.sap.sailing.domain.leaderboard.impl.FlexibleLeaderboardImpl;
import com.sap.sailing.domain.racelog.RaceLogEvent;
public class FlexibleLeaderboardMasterData extends LeaderboardMasterData {
private ScoringScheme scoringScheme;
private String courseAreaId;
private CourseArea courseArea;
private List<RaceColumnMasterData> raceColumns;
public FlexibleLeaderboardMasterData(String name, String displayName, int[] resultDiscardingRule,
Map<Serializable, Competitor> competitorsById, ScoreCorrectionMasterData scoreCorrection,
ScoringScheme scoringScheme, String courseAreaId, List<RaceColumnMasterData> raceColumns,
Map<Serializable, Double> carriedPoints, List<Serializable> suppressedCompetitors,
Map<Serializable, String> displayNamesByCompetitorId,
Map<String, Map<String, List<RaceLogEvent>>> raceLogEvents) {
super(name, displayName, resultDiscardingRule, competitorsById, scoreCorrection, carriedPoints,
suppressedCompetitors, displayNamesByCompetitorId, raceLogEvents);
this.scoringScheme = scoringScheme;
this.courseAreaId = courseAreaId;
this.raceColumns = raceColumns;
}
public ScoringScheme getScoringScheme() {
return scoringScheme;
}
public String getCourseAreaId() {
return courseAreaId;
}
public void setCourseArea(CourseArea courseArea) {
this.courseArea = courseArea;
}
@Override
public Leaderboard getLeaderboard() {
return new FlexibleLeaderboardImpl(getName(), getResultDiscardingRule(), scoringScheme,
courseArea);
}
public List<RaceColumnMasterData> getRaceColumns() {
return raceColumns;
}
}
@@ -1,97 +0,0 @@
package com.sap.sailing.domain.masterdataimport;
import java.io.Serializable;
import java.util.List;
import java.util.Map;
import java.util.Set;
import com.sap.sailing.domain.base.LeaderboardMasterData;
import com.sap.sailing.domain.leaderboard.ScoringScheme;
import com.sap.sailing.domain.leaderboard.ThresholdBasedResultDiscardingRule;
import com.sap.sailing.domain.leaderboard.impl.ThresholdBasedResultDiscardingRuleImpl;
/**
* Holds leaderboard group object AND its leaderboards, etc
*
* @author d054528 Frederik Petersen
*
*/
public class LeaderboardGroupMasterData {
private final String name;
private final String description;
private final boolean hasOverallLeaderboard;
private final ScoringScheme overallLeaderboardScoringScheme;
private final int[] overallLeaderboardDiscardingRule;
private final Iterable<LeaderboardMasterData> leaderboards;
private final boolean displayGroupsRevese;
private final Set<EventMasterData> events;
private final Set<RegattaMasterData> regattas;
private final Map<String, Double> metaColumnsWithFactors;
private final List<Serializable> overallLeaderboardSuppressedCompetitorIds;
public LeaderboardGroupMasterData(String name, String description, boolean displayGroupsRevese,
boolean hasOverallLeaderboard, ScoringScheme overallLeaderboardScoringScheme,
int[] overallLeaderboardDiscardingRule, List<Serializable> overallLeaderboardAuppressedCompetitorIds,
Map<String, Double> metaColumnsWithFactors, Iterable<LeaderboardMasterData> leaderboards, Set<EventMasterData> events, Set<RegattaMasterData> regattas) {
super();
this.name = name;
this.description = description;
this.hasOverallLeaderboard = hasOverallLeaderboard;
this.overallLeaderboardScoringScheme = overallLeaderboardScoringScheme;
this.overallLeaderboardSuppressedCompetitorIds = overallLeaderboardAuppressedCompetitorIds;
this.overallLeaderboardDiscardingRule = overallLeaderboardDiscardingRule;
this.metaColumnsWithFactors = metaColumnsWithFactors;
this.leaderboards = leaderboards;
this.displayGroupsRevese = displayGroupsRevese;
this.events = events;
this.regattas = regattas;
}
public String getName() {
return name;
}
public String getDescription() {
return description;
}
public boolean hasOverallLeaderboard() {
return hasOverallLeaderboard;
}
public ScoringScheme getOverallLeaderboardScoringScheme() {
return overallLeaderboardScoringScheme;
}
public List<Serializable> getOverallLeaderboardSuppressedCompetitorIds() {
return overallLeaderboardSuppressedCompetitorIds;
}
public ThresholdBasedResultDiscardingRule getOverallLeaderboardDiscardingRule() {
return overallLeaderboardDiscardingRule == null ? new ThresholdBasedResultDiscardingRuleImpl(new int[0]) :
new ThresholdBasedResultDiscardingRuleImpl(overallLeaderboardDiscardingRule);
}
public Iterable<LeaderboardMasterData> getLeaderboards() {
return leaderboards;
}
public boolean isDisplayGroupsRevese() {
return displayGroupsRevese;
}
public Set<EventMasterData> getEvents() {
return events;
}
public Set<RegattaMasterData> getRegattas() {
return regattas;
}
public Map<String, Double> getMetaColumnsWithFactors() {
return metaColumnsWithFactors;
}
}
@@ -1,45 +0,0 @@
package com.sap.sailing.domain.masterdataimport;
import java.util.Map;
import java.util.Set;
import com.sap.sailing.domain.common.RaceIdentifier;
public class RaceColumnMasterData {
private final String name;
private final boolean medal;
private final Map<String, RaceIdentifier> raceIdentifiersByFleetName;
private Double factor;
private Set<WindTrackMasterData> windTracks;
public RaceColumnMasterData(String name, boolean medal, Map<String, RaceIdentifier> raceIdentifiersByFleetName,
Double factor, Set<WindTrackMasterData> windTracks) {
super();
this.name = name;
this.medal = medal;
this.raceIdentifiersByFleetName = raceIdentifiersByFleetName;
this.factor = factor;
this.windTracks = windTracks;
}
public String getName() {
return name;
}
public boolean isMedal() {
return medal;
}
public Map<String, RaceIdentifier> getRaceIdentifiersByFleetName() {
return raceIdentifiersByFleetName;
}
public Double getFactor() {
return factor;
}
public Set<WindTrackMasterData> getWindTrackMasterData() {
return windTracks;
}
}
@@ -1,47 +0,0 @@
package com.sap.sailing.domain.masterdataimport;
import java.io.Serializable;
import java.util.List;
import java.util.Map;
import com.sap.sailing.domain.base.Competitor;
import com.sap.sailing.domain.base.LeaderboardMasterData;
import com.sap.sailing.domain.base.Regatta;
import com.sap.sailing.domain.common.RegattaIdentifier;
import com.sap.sailing.domain.common.RegattaName;
import com.sap.sailing.domain.leaderboard.Leaderboard;
import com.sap.sailing.domain.leaderboard.impl.RegattaLeaderboardImpl;
import com.sap.sailing.domain.racelog.RaceLogEvent;
public class RegattaLeaderboardMasterData extends LeaderboardMasterData {
private String regattaName;
private Regatta regatta;
public RegattaLeaderboardMasterData(String name, String displayName, int[] resultDiscardingRule,
Map<Serializable, Competitor> competitorsById, ScoreCorrectionMasterData scoreCorrection,
String regattaName, Map<Serializable, Double> carriedPoints, List<Serializable> suppressedCompetitors,
Map<Serializable, String> displayNamesByCompetitorId,
Map<String, Map<String, List<RaceLogEvent>>> raceLogEvents) {
super(name, displayName, resultDiscardingRule, competitorsById, scoreCorrection, carriedPoints,
suppressedCompetitors, displayNamesByCompetitorId, raceLogEvents);
this.regattaName = regattaName;
}
public RegattaIdentifier getRegattaName() {
return new RegattaName(regattaName);
}
public void setRegatta(Regatta regatta) {
this.regatta = regatta;
}
@Override
public Leaderboard getLeaderboard() {
if (regatta == null) {
return null;
}
return new RegattaLeaderboardImpl(regatta, getResultDiscardingRule());
}
}
@@ -1,74 +0,0 @@
package com.sap.sailing.domain.masterdataimport;
import java.io.Serializable;
import com.sap.sailing.domain.base.configuration.RegattaConfiguration;
public class RegattaMasterData {
private Serializable id;
private String baseName;
private String defaultCourseAreaId;
private String boatClassName;
private String scoringSchemeType;
private Iterable<SeriesMasterData> series;
private final RegattaConfiguration configuration;
private boolean isPersistent;
private String regattaName;
private Iterable<String> raceIdsAsStrings;
public RegattaMasterData(Serializable id, String baseName, String defaultCourseAreaId, String boatClassName,
String scoringSchemeType, Iterable<SeriesMasterData> series, boolean isPersistent, String regattaName,
Iterable<String> raceIdsAsStrings,
RegattaConfiguration configuration) {
this.id = id;
this.baseName = baseName;
this.defaultCourseAreaId = defaultCourseAreaId;
this.boatClassName = boatClassName;
this.scoringSchemeType = scoringSchemeType;
this.series = series;
this.isPersistent = isPersistent;
this.regattaName = regattaName;
this.raceIdsAsStrings = raceIdsAsStrings;
this.configuration = configuration;
}
public Iterable<String> getRaceIdsAsStrings() {
return raceIdsAsStrings;
}
public Serializable getId() {
return id;
}
public String getBaseName() {
return baseName;
}
public String getDefaultCourseAreaId() {
return defaultCourseAreaId;
}
public RegattaConfiguration getRegattaConfiguration() {
return configuration;
}
public String getBoatClassName() {
return boatClassName;
}
public String getScoringSchemeType() {
return scoringSchemeType;
}
public Iterable<SeriesMasterData> getSeries() {
return series;
}
public boolean isPersistent() {
return isPersistent;
}
public String getRegattaName() {
return regattaName;
}
}
@@ -1,29 +0,0 @@
package com.sap.sailing.domain.masterdataimport;
import java.util.Map;
public class ScoreCorrectionMasterData {
private String comment;
private Long timepointMillis;
private Map<String, Iterable<SingleScoreCorrectionMasterData>> correctionForRaceColumns;
public ScoreCorrectionMasterData(String comment, Long timepointMillis,
Map<String, Iterable<SingleScoreCorrectionMasterData>> correctionForRaceColumns) {
this.comment = comment;
this.timepointMillis = timepointMillis;
this.correctionForRaceColumns = correctionForRaceColumns;
}
public String getComment() {
return comment;
}
public Long getTimepointMillis() {
return timepointMillis;
}
public Map<String, Iterable<SingleScoreCorrectionMasterData>> getCorrectionForRaceColumns() {
return correctionForRaceColumns;
}
}
@@ -1,42 +0,0 @@
package com.sap.sailing.domain.masterdataimport;
import com.sap.sailing.domain.base.Fleet;
public class SeriesMasterData {
private String name;
private boolean isMedal;
private Iterable<Fleet> fleets;
private Iterable<RaceColumnMasterData> raceColumns;
private int[] discardingRule;
public SeriesMasterData(String name, boolean isMedal, Iterable<Fleet> fleets, Iterable<RaceColumnMasterData> raceColumns, int[] discardingRule) {
this.name = name;
this.isMedal = isMedal;
this.fleets = fleets;
this.raceColumns = raceColumns;
this.discardingRule = discardingRule;
}
public String getName() {
return name;
}
public boolean isMedal() {
return isMedal;
}
public Iterable<Fleet> getFleets() {
return fleets;
}
public Iterable<RaceColumnMasterData> getRaceColumnNames() {
return raceColumns;
}
public int[] getDiscardingRule() {
return discardingRule;
}
}
@@ -1,30 +0,0 @@
package com.sap.sailing.domain.masterdataimport;
import java.io.Serializable;
public class SingleScoreCorrectionMasterData {
private Serializable competitorId;
private Double explicitScoreCorrection;
private String maxPointsReason;
public SingleScoreCorrectionMasterData(Serializable competitorId, Double explicitScoreCorrection,
String maxPointsReason) {
this.competitorId = competitorId;
this.explicitScoreCorrection = explicitScoreCorrection;
this.maxPointsReason = maxPointsReason;
}
public Serializable getCompetitorId() {
return competitorId;
}
public Double getExplicitScoreCorrection() {
return explicitScoreCorrection;
}
public String getMaxPointsReason() {
return maxPointsReason;
}
}
@@ -1,4 +1,4 @@
package com.sap.sailing.server.gateway.masterdata;
package com.sap.sailing.domain.masterdataimport;
import java.io.Serializable;
import java.util.Collection;
@@ -18,7 +18,6 @@ import com.sap.sailing.domain.common.media.MediaTrack;
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.masterdataimport.WindTrackMasterData;
import com.sap.sailing.domain.tracking.TrackedRace;
import com.sap.sailing.domain.tracking.WindTrack;
@@ -32,8 +32,7 @@ Require-Bundle: com.sap.sailing.domain,
com.sap.sse.gwt;bundle-version="1.0.0"
Bundle-Activator: com.sap.sailing.gwt.ui.server.Activator
Bundle-ActivationPolicy: lazy
Import-Package: com.sap.sailing.server.gateway.masterdata,
javax.jms;version="1.1.0",
Import-Package: javax.jms;version="1.1.0",
javax.servlet;version="2.6.0",
javax.servlet.descriptor;version="2.6.0",
javax.servlet.http;version="2.6.0",
@@ -162,6 +162,7 @@ import com.sap.sailing.domain.leaderboard.MetaLeaderboard;
import com.sap.sailing.domain.leaderboard.RegattaLeaderboard;
import com.sap.sailing.domain.leaderboard.ThresholdBasedResultDiscardingRule;
import com.sap.sailing.domain.leaderboard.caching.LiveLeaderboardUpdater;
import com.sap.sailing.domain.masterdataimport.TopLevelMasterData;
import com.sap.sailing.domain.persistence.DomainObjectFactory;
import com.sap.sailing.domain.persistence.MongoObjectFactory;
import com.sap.sailing.domain.persistence.MongoRaceLogStoreFactory;
@@ -269,7 +270,6 @@ import com.sap.sailing.resultimport.ResultUrlProvider;
import com.sap.sailing.resultimport.ResultUrlRegistry;
import com.sap.sailing.server.RacingEventService;
import com.sap.sailing.server.RacingEventServiceOperation;
import com.sap.sailing.server.gateway.masterdata.TopLevelMasterData;
import com.sap.sailing.server.masterdata.MasterDataImporter;
import com.sap.sailing.server.operationaltransformation.AddColumnToLeaderboard;
import com.sap.sailing.server.operationaltransformation.AddColumnToSeries;
@@ -1,7 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
<classpathentry kind="src" path="src"/>
<classpathentry kind="output" path="bin"/>
</classpath>
@@ -1 +0,0 @@
bin/
@@ -1,28 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>com.sap.sailing.server.gateway.masterdata</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.jdt.core.javabuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.pde.ManifestBuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.pde.SchemaBuilder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.pde.PluginNature</nature>
<nature>org.eclipse.jdt.core.javanature</nature>
</natures>
</projectDescription>
@@ -1,7 +0,0 @@
eclipse.preferences.version=1
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7
org.eclipse.jdt.core.compiler.compliance=1.7
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
org.eclipse.jdt.core.compiler.source=1.7
@@ -1,3 +0,0 @@
eclipse.preferences.version=1
pluginProject.extensions=false
resolve.requirebundle=false
@@ -1,11 +0,0 @@
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: Sailing Server Gateway Master-Data
Bundle-SymbolicName: com.sap.sailing.server.gateway.masterdata
Bundle-Version: 1.0.0.qualifier
Bundle-Vendor: SAP
Bundle-RequiredExecutionEnvironment: JavaSE-1.7
Require-Bundle: com.sap.sailing.domain,
com.sap.sailing.domain.common
Bundle-ClassPath: .
Export-Package: com.sap.sailing.server.gateway.masterdata
@@ -1,4 +0,0 @@
source.. = src/
output.. = bin/
bin.includes = META-INF/,\
.
@@ -1,12 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<parent>
<artifactId>root</artifactId>
<groupId>com.sap.sailing</groupId>
<version>1.0.0-SNAPSHOT</version>
</parent>
<artifactId>com.sap.sailing.server.gateway.masterdata</artifactId>
<packaging>eclipse-plugin</packaging>
</project>
@@ -12,11 +12,9 @@ Require-Bundle: com.sap.sailing.domain.common;bundle-version="1.0.0",
Export-Package: com.sap.sailing.server.gateway.deserialization,
com.sap.sailing.server.gateway.deserialization.coursedata.impl,
com.sap.sailing.server.gateway.deserialization.impl,
com.sap.sailing.server.gateway.deserialization.masterdata.impl,
com.sap.sailing.server.gateway.deserialization.racelog.impl,
com.sap.sailing.server.gateway.serialization,
com.sap.sailing.server.gateway.serialization.coursedata.impl,
com.sap.sailing.server.gateway.serialization.impl,
com.sap.sailing.server.gateway.serialization.masterdata.impl,
com.sap.sailing.server.gateway.serialization.racegroup.impl,
com.sap.sailing.server.gateway.serialization.racelog.impl
@@ -1,84 +0,0 @@
package com.sap.sailing.server.gateway.deserialization.masterdata.impl;
import java.io.Serializable;
import java.lang.reflect.Constructor;
import java.util.UUID;
import org.json.simple.JSONObject;
import com.sap.sailing.domain.base.BoatClass;
import com.sap.sailing.domain.base.Competitor;
import com.sap.sailing.domain.base.SharedDomainFactory;
import com.sap.sailing.domain.base.impl.BoatImpl;
import com.sap.sailing.domain.base.impl.DynamicBoat;
import com.sap.sailing.domain.base.impl.DynamicTeam;
import com.sap.sailing.domain.common.Color;
import com.sap.sailing.domain.common.impl.RGBColor;
import com.sap.sailing.server.gateway.deserialization.JsonDeserializationException;
import com.sap.sailing.server.gateway.deserialization.JsonDeserializer;
import com.sap.sailing.server.gateway.deserialization.impl.Helpers;
import com.sap.sailing.server.gateway.serialization.masterdata.impl.CompetitorMasterDataJsonSerializer;
public class CompetitorMasterDataDeserializer implements JsonDeserializer<Competitor> {
private final JsonDeserializer<BoatClass> boatClassDeserializer;
private final JsonDeserializer<DynamicTeam> teamDeserializer;
private final SharedDomainFactory domainFactory;
public CompetitorMasterDataDeserializer(JsonDeserializer<BoatClass> boatClassDeserializer,
JsonDeserializer<DynamicTeam> teamDeserializer, SharedDomainFactory domainFactory) {
this.boatClassDeserializer = boatClassDeserializer;
this.teamDeserializer = teamDeserializer;
this.domainFactory = domainFactory;
}
@Override
public Competitor deserialize(JSONObject object) throws JsonDeserializationException {
String name = (String) object.get(CompetitorMasterDataJsonSerializer.FIELD_NAME);
String rgbDisplayColor = (String) object.get(CompetitorMasterDataJsonSerializer.FIELD_DISPLAY_COLOR);
final Color displayColor;
if (rgbDisplayColor == null || rgbDisplayColor.isEmpty()) {
displayColor = null;
} else {
displayColor = new RGBColor(rgbDisplayColor);
}
Object idClassName = object.get(CompetitorMasterDataJsonSerializer.FIELD_ID_TYPE);
Serializable id = (Serializable) object.get(CompetitorMasterDataJsonSerializer.FIELD_ID);
if (idClassName != null) {
try {
Class<?> idClass = Class.forName((String) idClassName);
if (Number.class.isAssignableFrom(idClass)) {
Constructor<?> constructorFromString = idClass.getConstructor(String.class);
id = (Serializable) constructorFromString.newInstance(id.toString());
} else if (UUID.class.isAssignableFrom(idClass)) {
id = Helpers.tryUuidConversion(id);
}
} catch (Exception e) {
throw new RuntimeException(e);
}
} else {
// To ensure some kind of a backward compability.
try {
id = UUID.fromString(id.toString());
} catch (IllegalArgumentException e) {
id = id.toString();
}
}
DynamicBoat boat = createBoatFromJson((JSONObject) object.get(CompetitorMasterDataJsonSerializer.FIELD_BOAT));
DynamicTeam team = teamDeserializer.deserialize((JSONObject) object.get(CompetitorMasterDataJsonSerializer.FIELD_TEAM));
Competitor competitor;
competitor = domainFactory.getOrCreateCompetitor(id, name, displayColor, team, boat);
return competitor;
}
private DynamicBoat createBoatFromJson(JSONObject object) throws JsonDeserializationException {
String name = (String) object.get(CompetitorMasterDataJsonSerializer.FIELD_NAME);
String sailID = (String) object.get(CompetitorMasterDataJsonSerializer.FIELD_SAIL_ID);
BoatClass boatClass = boatClassDeserializer.deserialize((JSONObject) object.get(CompetitorMasterDataJsonSerializer.FIELD_BOAT_CLASS));
return new BoatImpl(name, boatClass, sailID);
}
}
@@ -1,47 +0,0 @@
package com.sap.sailing.server.gateway.deserialization.masterdata.impl;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import com.sap.sailing.domain.common.impl.Util.Pair;
import com.sap.sailing.domain.masterdataimport.EventMasterData;
import com.sap.sailing.server.gateway.deserialization.JsonDeserializationException;
import com.sap.sailing.server.gateway.deserialization.JsonDeserializer;
import com.sap.sailing.server.gateway.serialization.masterdata.impl.EventMasterDataJsonSerializer;
public class EventMasterDataJsonDeserializer implements JsonDeserializer<EventMasterData> {
@Override
public EventMasterData deserialize(JSONObject object) throws JsonDeserializationException {
String id = (String) object.get(EventMasterDataJsonSerializer.FIELD_ID);
String name = (String) object.get(EventMasterDataJsonSerializer.FIELD_NAME);
String venueName = (String) object.get(EventMasterDataJsonSerializer.FIELD_VENUE_NAME);
String pubUrl = (String) object.get(EventMasterDataJsonSerializer.FIELD_PUB_URL);
boolean isPublic = (Boolean) object.get(EventMasterDataJsonSerializer.FIELD_IS_PUBLIC);
Iterable<Pair<String, String>> courseAreas = deserializeCourseAreas((JSONArray) object.get(EventMasterDataJsonSerializer.FIELD_COURSE_AREAS));
return new EventMasterData(id, name, venueName, pubUrl, courseAreas, isPublic);
}
private Iterable<Pair<String, String>> deserializeCourseAreas(JSONArray jsonArray) {
List<Pair<String, String>> courseAreas = new ArrayList<Pair<String,String>>();
for (Object courseObject : jsonArray) {
JSONObject courseJson = (JSONObject) courseObject;
String id = (String) courseJson.get(EventMasterDataJsonSerializer.FIELD_ID);
String name = (String) courseJson.get(EventMasterDataJsonSerializer.FIELD_NAME);
courseAreas.add(new Pair<String, String>(id, name));
}
Collections.sort(courseAreas, new Comparator<Pair<String,String>>() {
@Override
public int compare(Pair<String, String> courseArea1, Pair<String, String> courseArea2) {
return courseArea1.getB().compareTo(courseArea2.getB());
}
});
return courseAreas;
}
}
@@ -1,133 +0,0 @@
package com.sap.sailing.server.gateway.deserialization.masterdata.impl;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import com.sap.sailing.domain.base.BoatClass;
import com.sap.sailing.domain.base.Competitor;
import com.sap.sailing.domain.base.DomainFactory;
import com.sap.sailing.domain.base.Fleet;
import com.sap.sailing.domain.base.LeaderboardMasterData;
import com.sap.sailing.domain.base.Nationality;
import com.sap.sailing.domain.base.configuration.RegattaConfiguration;
import com.sap.sailing.domain.base.impl.DynamicPerson;
import com.sap.sailing.domain.base.impl.DynamicTeam;
import com.sap.sailing.domain.common.Color;
import com.sap.sailing.domain.leaderboard.ScoringScheme;
import com.sap.sailing.domain.masterdataimport.EventMasterData;
import com.sap.sailing.domain.masterdataimport.LeaderboardGroupMasterData;
import com.sap.sailing.domain.masterdataimport.RaceColumnMasterData;
import com.sap.sailing.domain.masterdataimport.RegattaMasterData;
import com.sap.sailing.domain.racelog.RaceLogEvent;
import com.sap.sailing.server.gateway.deserialization.JsonDeserializationException;
import com.sap.sailing.server.gateway.deserialization.JsonDeserializer;
import com.sap.sailing.server.gateway.deserialization.impl.BoatClassJsonDeserializer;
import com.sap.sailing.server.gateway.deserialization.impl.ColorDeserializer;
import com.sap.sailing.server.gateway.deserialization.impl.FleetDeserializer;
import com.sap.sailing.server.gateway.deserialization.impl.NationalityJsonDeserializer;
import com.sap.sailing.server.gateway.deserialization.impl.PersonJsonDeserializer;
import com.sap.sailing.server.gateway.deserialization.impl.RegattaConfigurationJsonDeserializer;
import com.sap.sailing.server.gateway.deserialization.impl.TeamJsonDeserializer;
import com.sap.sailing.server.gateway.deserialization.racelog.impl.RaceLogEventDeserializer;
import com.sap.sailing.server.gateway.serialization.masterdata.impl.LeaderboardGroupMasterDataJsonSerializer;
public class LeaderboardGroupMasterDataJsonDeserializer implements JsonDeserializer<LeaderboardGroupMasterData> {
private final JsonDeserializer<LeaderboardMasterData> leaderboardDeserializer;
private final JsonDeserializer<EventMasterData> eventDeserializer;
private final JsonDeserializer<RegattaMasterData> regattaDeserializer;
private final DomainFactory domainFactory;
public static JsonDeserializer<LeaderboardGroupMasterData> create(DomainFactory domainFactory) {
JsonDeserializer<BoatClass> boatClassDeserializer = new BoatClassJsonDeserializer(domainFactory);
JsonDeserializer<Nationality> nationalityDeserializer = new NationalityJsonDeserializer(domainFactory);
JsonDeserializer<DynamicPerson> personDeserializer = new PersonJsonDeserializer(nationalityDeserializer);
JsonDeserializer<DynamicTeam> teamDeserializer = new TeamJsonDeserializer(personDeserializer);
JsonDeserializer<Competitor> competitorDeserializer = new CompetitorMasterDataDeserializer(
boatClassDeserializer, teamDeserializer, domainFactory);
JsonDeserializer<RaceLogEvent> raceLogEventDeserializer = RaceLogEventDeserializer.create(domainFactory);
JsonDeserializer<LeaderboardMasterData> leaderboardDeserializer = new LeaderboardMasterDataJsonDeserializer(
competitorDeserializer, domainFactory, raceLogEventDeserializer);
JsonDeserializer<EventMasterData> eventDeserializer = new EventMasterDataJsonDeserializer();
JsonDeserializer<Color> colorDeserializer = new ColorDeserializer();
JsonDeserializer<Fleet> fleetDeserializer = new FleetDeserializer(colorDeserializer);
JsonDeserializer<RegattaConfiguration> configurationDeserializer = RegattaConfigurationJsonDeserializer.create();
JsonDeserializer<RaceColumnMasterData> raceColumnDeserializer = new RaceColumnMasterDataJsonDeserializer();
JsonDeserializer<RegattaMasterData> regattaDeserializer = new RegattaMasterDataJsonDeserializer(
fleetDeserializer, raceColumnDeserializer, configurationDeserializer);
JsonDeserializer<LeaderboardGroupMasterData> leaderboardGroupMasterDataDeserializer = new LeaderboardGroupMasterDataJsonDeserializer(
leaderboardDeserializer, eventDeserializer, regattaDeserializer, domainFactory);
return leaderboardGroupMasterDataDeserializer;
}
public LeaderboardGroupMasterDataJsonDeserializer(JsonDeserializer<LeaderboardMasterData> leaderboardDeserializer,
JsonDeserializer<EventMasterData> eventDeserializer, JsonDeserializer<RegattaMasterData> regattaDeserializer, DomainFactory domainFactory) {
this.leaderboardDeserializer = leaderboardDeserializer;
this.eventDeserializer = eventDeserializer;
this.regattaDeserializer = regattaDeserializer;
this.domainFactory = domainFactory;
}
@Override
public LeaderboardGroupMasterData deserialize(JSONObject object) throws JsonDeserializationException {
List<LeaderboardMasterData> leaderboards = new ArrayList<LeaderboardMasterData>();
JSONArray leaderboardsJson = (JSONArray) object.get(LeaderboardGroupMasterDataJsonSerializer.FIELD_LEADERBOARDS);
for (Object leaderboardObject : leaderboardsJson) {
JSONObject leaderboardJson = (JSONObject) leaderboardObject;
leaderboards.add(leaderboardDeserializer.deserialize(leaderboardJson));
}
JSONArray eventsJson = (JSONArray) object.get(LeaderboardGroupMasterDataJsonSerializer.FIELD_EVENTS);
Set<EventMasterData> events = new HashSet<EventMasterData>();
for (Object eventObject : eventsJson) {
JSONObject eventJson = (JSONObject) eventObject;
events.add(eventDeserializer.deserialize(eventJson));
}
JSONArray regattasJson = (JSONArray) object.get(LeaderboardGroupMasterDataJsonSerializer.FIELD_REGATTAS);
Set<RegattaMasterData> regattas = new HashSet<RegattaMasterData>();
for (Object regattaObject : regattasJson) {
JSONObject regattaJson = (JSONObject) regattaObject;
regattas.add(regattaDeserializer.deserialize(regattaJson));
}
String name = (String) object.get(LeaderboardGroupMasterDataJsonSerializer.FIELD_NAME);
String description = (String) object.get(LeaderboardGroupMasterDataJsonSerializer.FIELD_DESCRIPTION);
boolean displayGroupsReverse = (Boolean) object.get(LeaderboardGroupMasterDataJsonSerializer.FIELD_DISPLAY_GROUPS_REVERSE);
Boolean hasOverallLeaderboard = (Boolean) object.get(LeaderboardGroupMasterDataJsonSerializer.FIELD_HAS_OVERALL_LEADERBOARD);
if (hasOverallLeaderboard == null) {
hasOverallLeaderboard = false;
}
ScoringScheme overallLeaderboardScoringScheme = !hasOverallLeaderboard ? null : LeaderboardMasterDataJsonDeserializer.deserializeScoringScheme((JSONObject) object.get(LeaderboardGroupMasterDataJsonSerializer.FIELD_OVERALL_LEADERBOARD_SCORING_SCHEME), domainFactory);
int[] overallLeaderboardResultDiscardingThresholds = !hasOverallLeaderboard ? null : LeaderboardMasterDataJsonDeserializer.deserializeResultDesicardingRule((JSONObject) object.get(LeaderboardGroupMasterDataJsonSerializer.FIELD_OVERALL_LEADERBOARD_DISCARDING_THRESHOLDS));
Map<String, Double> metaColumnsWithFactors = !hasOverallLeaderboard ? null : deserializeMetaColumnsWithFactor((JSONArray) object.get(LeaderboardGroupMasterDataJsonSerializer.FIELD_OVERALL_LEADERBOARD_META_COLUMNS));
List<Serializable> overallLeaderboardSuppressedCompetitorsIds = !hasOverallLeaderboard ? null
: LeaderboardMasterDataJsonDeserializer
.deserializeSuppressedCompetitors((JSONArray) object
.get(LeaderboardGroupMasterDataJsonSerializer.FIELD_OVERALL_LEADERBOARD_SUPPRESSED_COMPETITORS));
return new LeaderboardGroupMasterData(name, description, displayGroupsReverse, hasOverallLeaderboard, overallLeaderboardScoringScheme, overallLeaderboardResultDiscardingThresholds, overallLeaderboardSuppressedCompetitorsIds, metaColumnsWithFactors, leaderboards, events, regattas);
}
private Map<String, Double> deserializeMetaColumnsWithFactor(JSONArray jsonArray) {
Map<String, Double> metaColumnsWithFactors = new HashMap<String, Double>();
if (jsonArray != null) {
for (Object obj : jsonArray) {
JSONObject jsonObj = (JSONObject) obj;
String name = (String) jsonObj.get(LeaderboardGroupMasterDataJsonSerializer.FIELD_NAME);
Double explicitFactor = (Double) jsonObj
.get(LeaderboardGroupMasterDataJsonSerializer.FIELD_EXPLICIT_FACTOR);
metaColumnsWithFactors.put(name, explicitFactor);
}
}
return metaColumnsWithFactors;
}
}
@@ -1,303 +0,0 @@
package com.sap.sailing.server.gateway.deserialization.masterdata.impl;
import java.io.Serializable;
import java.lang.reflect.Constructor;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.UUID;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import com.sap.sailing.domain.base.Competitor;
import com.sap.sailing.domain.base.DomainFactory;
import com.sap.sailing.domain.base.LeaderboardMasterData;
import com.sap.sailing.domain.common.ScoringSchemeType;
import com.sap.sailing.domain.leaderboard.ScoringScheme;
import com.sap.sailing.domain.masterdataimport.FlexibleLeaderboardMasterData;
import com.sap.sailing.domain.masterdataimport.RaceColumnMasterData;
import com.sap.sailing.domain.masterdataimport.RegattaLeaderboardMasterData;
import com.sap.sailing.domain.masterdataimport.ScoreCorrectionMasterData;
import com.sap.sailing.domain.masterdataimport.SingleScoreCorrectionMasterData;
import com.sap.sailing.domain.racelog.RaceLogEvent;
import com.sap.sailing.server.gateway.deserialization.JsonDeserializationException;
import com.sap.sailing.server.gateway.deserialization.JsonDeserializer;
import com.sap.sailing.server.gateway.deserialization.impl.Helpers;
import com.sap.sailing.server.gateway.serialization.masterdata.impl.LeaderboardMasterDataJsonSerializer;
public class LeaderboardMasterDataJsonDeserializer implements JsonDeserializer<LeaderboardMasterData> {
private final JsonDeserializer<Competitor> competitorDeserializer;
private final DomainFactory domainFactory;
private final JsonDeserializer<RaceLogEvent> raceLogEventDeseriaizer;
private final JsonDeserializer<RaceColumnMasterData> raceColumnDeserializer = new RaceColumnMasterDataJsonDeserializer();
public LeaderboardMasterDataJsonDeserializer(JsonDeserializer<Competitor> competitorDeserializer,
DomainFactory domainFactory, JsonDeserializer<RaceLogEvent> raceLogEventDeseriaizer) {
this.competitorDeserializer = competitorDeserializer;
this.domainFactory = domainFactory;
this.raceLogEventDeseriaizer = raceLogEventDeseriaizer;
}
@Override
public LeaderboardMasterData deserialize(JSONObject object) throws JsonDeserializationException {
if (object == null) {
return null;
}
String name = (String) object.get(LeaderboardMasterDataJsonSerializer.FIELD_NAME);
String displayName = (String) object.get(LeaderboardMasterDataJsonSerializer.FIELD_DISPLAY_NAME);
Map<Serializable, String> displayNamesByCompetitorId = deserializeCompetitorDisplayNames((JSONArray) object
.get(LeaderboardMasterDataJsonSerializer.FIELD_COMPETITOR_DISPLAY_NAMES));
ScoreCorrectionMasterData scoreCorrection = deserializeScoreCorrection((JSONObject) object
.get(LeaderboardMasterDataJsonSerializer.FIELD_SCORE_CORRECTION));
Map<Serializable, Double> carriedPoints = deserializeCarriedPoints((JSONArray) object
.get(LeaderboardMasterDataJsonSerializer.FIELD_CARRIED_POINTS));
List<Serializable> suppressedCompetitors = deserializeSuppressedCompetitors((JSONArray) object
.get(LeaderboardMasterDataJsonSerializer.FIELD_SUPPRESSED_COMPETITORS));
Map<String, Map<String, List<RaceLogEvent>>> raceLogEvents = deserializeRaceLogEvents((JSONArray) object
.get(LeaderboardMasterDataJsonSerializer.FIELD_RACE_LOG_EVENTS));
int[] resultDiscardingRule = deserializeResultDesicardingRule((JSONObject) object
.get(LeaderboardMasterDataJsonSerializer.FIELD_RESULT_DISCARDING_RULE));
boolean isRegattaLeaderBoard = (Boolean) object
.get(LeaderboardMasterDataJsonSerializer.FIELD_REGATTA_LEADERBOARD);
Map<Serializable, Competitor> competitorsById = new HashMap<Serializable, Competitor>();
JSONArray competitorsJsonArray = (JSONArray) object.get(LeaderboardMasterDataJsonSerializer.FIELD_COMPETITORS);
for (Object obj : competitorsJsonArray) {
JSONObject competitorJson = (JSONObject) obj;
Competitor deserializedCompetitor = competitorDeserializer.deserialize(competitorJson);
competitorsById.put(deserializedCompetitor, deserializedCompetitor);
}
final LeaderboardMasterData result;
if (isRegattaLeaderBoard) {
String regattaName = (String) object.get(LeaderboardMasterDataJsonSerializer.FIELD_REGATTA_NAME);
result = new RegattaLeaderboardMasterData(name, displayName, resultDiscardingRule, competitorsById,
scoreCorrection, regattaName, carriedPoints, suppressedCompetitors, displayNamesByCompetitorId,
raceLogEvents);
} else {
ScoringScheme scoringScheme = deserializeScoringScheme((JSONObject) object
.get(LeaderboardMasterDataJsonSerializer.FIELD_SCORING_SCHEME), domainFactory);
String courseAreaId = deserializeCourseAreaId((JSONObject) object
.get(LeaderboardMasterDataJsonSerializer.FIELD_COURSE_AREA));
List<RaceColumnMasterData> raceColumns = deserializeRaceColumns((JSONArray) object
.get(LeaderboardMasterDataJsonSerializer.FIELD_RACE_COLUMNS));
result = new FlexibleLeaderboardMasterData(name, displayName, resultDiscardingRule, competitorsById,
scoreCorrection, scoringScheme, courseAreaId, raceColumns, carriedPoints, suppressedCompetitors,
displayNamesByCompetitorId, raceLogEvents);
}
return result;
}
private Map<String, Map<String, List<RaceLogEvent>>> deserializeRaceLogEvents(JSONArray jsonArray) {
Map<String, Map<String, List<RaceLogEvent>>> raceLogEvents = new HashMap<String, Map<String, List<RaceLogEvent>>>();
for (Object obj : jsonArray) {
JSONObject json = (JSONObject) obj;
String raceColumnName = (String) json.get(LeaderboardMasterDataJsonSerializer.FIELD_RACE_COLUMN_NAME);
Map<String, List<RaceLogEvent>> perFleet = deserializeRaceLogEventsForFleets((JSONArray) json
.get(LeaderboardMasterDataJsonSerializer.FIELD_FLEETS));
raceLogEvents.put(raceColumnName, perFleet);
}
return raceLogEvents;
}
private Map<String, List<RaceLogEvent>> deserializeRaceLogEventsForFleets(JSONArray fleets) {
Map<String, List<RaceLogEvent>> perFleet = new HashMap<String, List<RaceLogEvent>>();
for (Object obj : fleets) {
JSONObject json = (JSONObject) obj;
String fleetName = (String) json.get(LeaderboardMasterDataJsonSerializer.FIELD_FLEET_NAME);
List<RaceLogEvent> logEvents = deserializeRaceLogEventArray((JSONArray) json
.get(LeaderboardMasterDataJsonSerializer.FIELD_RACE_LOG_EVENTS));
perFleet.put(fleetName, logEvents);
}
return perFleet;
}
private List<RaceLogEvent> deserializeRaceLogEventArray(JSONArray jsonArray) {
List<RaceLogEvent> logEvents = new ArrayList<RaceLogEvent>();
for (Object obj : jsonArray) {
JSONObject json = (JSONObject) obj;
try {
logEvents.add(raceLogEventDeseriaizer.deserialize(json));
} catch (JsonDeserializationException e) {
// TODO Exception handling
e.printStackTrace();
}
}
return logEvents;
}
private Map<Serializable, String> deserializeCompetitorDisplayNames(JSONArray jsonArray) {
Map<Serializable, String> result = new HashMap<Serializable, String>();
for (Object obj : jsonArray) {
JSONObject json = (JSONObject) obj;
Serializable id;
try {
JSONObject object = (JSONObject) obj;
id = extractId(object);
} catch (Exception e) {
// Backward compability
id = (String) obj;
}
String displayName = (String) json.get(LeaderboardMasterDataJsonSerializer.FIELD_DISPLAY_NAME);
result.put(id, displayName);
}
return result;
}
public static List<Serializable> deserializeSuppressedCompetitors(JSONArray jsonArray) {
List<Serializable> ids = new ArrayList<Serializable>();
if (jsonArray != null) {
for (Object obj : jsonArray) {
Serializable id;
try {
JSONObject object = (JSONObject) obj;
id = extractId(object);
} catch (Exception e) {
// Backward compability
id = (String) obj;
}
ids.add(id);
}
}
return ids;
}
private static Serializable extractId(JSONObject object) {
Serializable id;
Object idClassName = object.get(LeaderboardMasterDataJsonSerializer.FIELD_TYPE);
id = (Serializable) object.get(LeaderboardMasterDataJsonSerializer.FIELD_COMPETITOR_ID);
if (idClassName != null) {
try {
Class<?> idClass = Class.forName((String) idClassName);
if (Number.class.isAssignableFrom(idClass)) {
Constructor<?> constructorFromString = idClass.getConstructor(String.class);
id = (Serializable) constructorFromString.newInstance(id.toString());
} else if (UUID.class.isAssignableFrom(idClass)) {
id = Helpers.tryUuidConversion(id);
}
} catch (Exception e) {
throw new RuntimeException(e);
}
} else {
// To ensure some kind of a backward compability.
try {
id = UUID.fromString(id.toString());
} catch (IllegalArgumentException e) {
id = id.toString();
}
}
return id;
}
private Map<Serializable, Double> deserializeCarriedPoints(JSONArray jsonArray) {
Map<Serializable, Double> carriedPoints = new HashMap<Serializable, Double>();
for (Object obj : jsonArray) {
JSONObject jsonCarriedPoints = (JSONObject) obj;
Serializable id;
try {
id = extractId(jsonCarriedPoints);
} catch (Exception e) {
// Backward compability
id = (String) obj;
}
Double carried = (Double) jsonCarriedPoints.get(LeaderboardMasterDataJsonSerializer.FIELD_CARRIED);
carriedPoints.put(id, carried);
}
return carriedPoints;
}
private ScoreCorrectionMasterData deserializeScoreCorrection(JSONObject jsonObject) {
String comment = (String) jsonObject.get(LeaderboardMasterDataJsonSerializer.FIELD_COMMENT);
Object timeObject = jsonObject.get(LeaderboardMasterDataJsonSerializer.FIELD_TIME_POINT);
Long timepointMillis = null;
if (timeObject != null) {
timepointMillis = (Long) timeObject;
}
JSONArray forRaceColumns = (JSONArray) jsonObject
.get(LeaderboardMasterDataJsonSerializer.FIELD_FOR_RACE_COLUMNS);
Map<String, Iterable<SingleScoreCorrectionMasterData>> correctionForRaceColumns = new HashMap<String, Iterable<SingleScoreCorrectionMasterData>>();
for (Object obj : forRaceColumns) {
JSONObject json = (JSONObject) obj;
String raceColumnName = (String) json.get(LeaderboardMasterDataJsonSerializer.FIELD_RACE_COLUMN_NAME);
Iterable<SingleScoreCorrectionMasterData> correctionsForRaceColumn = deserializeScoreCorrectionForRaceColumn((JSONArray) json
.get(LeaderboardMasterDataJsonSerializer.FIELD_FOR_COMPETITORS));
correctionForRaceColumns.put(raceColumnName, correctionsForRaceColumn);
}
return new ScoreCorrectionMasterData(comment, timepointMillis, correctionForRaceColumns);
}
private Iterable<SingleScoreCorrectionMasterData> deserializeScoreCorrectionForRaceColumn(JSONArray jsonArray) {
Set<SingleScoreCorrectionMasterData> result = new HashSet<SingleScoreCorrectionMasterData>();
for (Object obj : jsonArray) {
JSONObject json = (JSONObject) obj;
result.add(deserializeScoreCorrectionForCompetitor(json));
}
return result;
}
private SingleScoreCorrectionMasterData deserializeScoreCorrectionForCompetitor(JSONObject json) {
Serializable competitorId = extractId(json);
Double explicitScoreCorrection = ((Double) json
.get(LeaderboardMasterDataJsonSerializer.FIELD_EXPLICIT_SCORE_CORRECTION));
String maxPointsReason = (String) json.get(LeaderboardMasterDataJsonSerializer.FIELD_MAX_POINTS_REASON);
return new SingleScoreCorrectionMasterData(competitorId, explicitScoreCorrection, maxPointsReason);
}
private List<RaceColumnMasterData> deserializeRaceColumns(JSONArray array) throws JsonDeserializationException {
List<RaceColumnMasterData> columns = new ArrayList<RaceColumnMasterData>();
for (Object columnObj : array) {
JSONObject columnJson = (JSONObject) columnObj;
columns.add(raceColumnDeserializer.deserialize(columnJson));
}
return columns;
}
private String deserializeCourseAreaId(JSONObject jsonObject) {
if (jsonObject == null) {
return null;
}
String id = (String) jsonObject.get(LeaderboardMasterDataJsonSerializer.FIELD_ID);
return id;
}
public static ScoringScheme deserializeScoringScheme(JSONObject jsonObject, DomainFactory domainFactory) {
final ScoringScheme result;
if (jsonObject == null) {
result = null;
} else {
String type = (String) jsonObject.get(LeaderboardMasterDataJsonSerializer.FIELD_TYPE);
if (type == null) {
result = null;
} else {
result = domainFactory.createScoringScheme(ScoringSchemeType.valueOf(type));
}
}
return result;
}
public static int[] deserializeResultDesicardingRule(JSONObject jsonObject) {
final int[] result;
if (jsonObject == null) {
result = null;
} else {
JSONArray indeces = (JSONArray) jsonObject.get(LeaderboardMasterDataJsonSerializer.FIELD_INDICES);
if (indeces == null) {
result = null;
} else {
result = new int[indeces.size()];
for (int i = 0; i < result.length; i++) {
result[i] = ((Long) indeces.get(i)).intValue();
}
}
}
return result;
}
}
@@ -1,31 +0,0 @@
package com.sap.sailing.server.gateway.deserialization.masterdata.impl;
import java.util.Date;
import org.json.simple.JSONObject;
import com.sap.sailing.domain.common.media.MediaTrack;
import com.sap.sailing.server.gateway.deserialization.JsonDeserializationException;
import com.sap.sailing.server.gateway.deserialization.JsonDeserializer;
import com.sap.sailing.server.gateway.serialization.masterdata.impl.MediaTrackJsonSerializer;
public class MediaTrackJsonDeserializer implements JsonDeserializer<MediaTrack> {
@Override
public MediaTrack deserialize(JSONObject object) throws JsonDeserializationException {
String dbId = (String) object.get(MediaTrackJsonSerializer.FIELD_DB_ID);
int durationInMillis = ((Long) object.get(MediaTrackJsonSerializer.FIELD_DURATION)).intValue();
MediaTrack.MimeType mimeType = MediaTrack.MimeType.valueOf((String) object
.get(MediaTrackJsonSerializer.FIELD_MIME_TYPE));
long startTimeInMillis = (Long) object.get(MediaTrackJsonSerializer.FIELD_START_TIME);
Date startTime = new Date(startTimeInMillis);
MediaTrack.Status status = MediaTrack.Status
.valueOf((String) object.get(MediaTrackJsonSerializer.FIELD_STATUS));
String title = (String) object.get(MediaTrackJsonSerializer.FIELD_TITLE);
String url = (String) object.get(MediaTrackJsonSerializer.FIELD_URL);
MediaTrack mediaTrack = new MediaTrack(dbId, title, url, startTime, durationInMillis, mimeType);
mediaTrack.status = status;
return mediaTrack;
}
}
@@ -1,60 +0,0 @@
package com.sap.sailing.server.gateway.deserialization.masterdata.impl;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import com.sap.sailing.domain.common.RaceIdentifier;
import com.sap.sailing.domain.common.RegattaNameAndRaceName;
import com.sap.sailing.domain.masterdataimport.RaceColumnMasterData;
import com.sap.sailing.domain.masterdataimport.WindTrackMasterData;
import com.sap.sailing.server.gateway.deserialization.JsonDeserializationException;
import com.sap.sailing.server.gateway.deserialization.JsonDeserializer;
import com.sap.sailing.server.gateway.serialization.masterdata.impl.RaceColumnMasterDataJsonSerializer;
public class RaceColumnMasterDataJsonDeserializer implements JsonDeserializer<RaceColumnMasterData> {
private final JsonDeserializer<WindTrackMasterData> windtrackDeserializer;
public RaceColumnMasterDataJsonDeserializer() {
windtrackDeserializer = new WindTrackMasterDataJsonDeserializer();
}
@Override
public RaceColumnMasterData deserialize(JSONObject columnJson) throws JsonDeserializationException {
String columnName = (String) columnJson
.get(RaceColumnMasterDataJsonSerializer.FIELD_NAME);
Boolean medal = (Boolean) columnJson
.get(RaceColumnMasterDataJsonSerializer.FIELD_MEDAL_RACE);
Map<String, RaceIdentifier> raceIdentifiers = new HashMap<String, RaceIdentifier>();
Double factor = (Double) columnJson.get(RaceColumnMasterDataJsonSerializer.FIELD_FACTOR);
JSONArray jsonRaceIdentifiers = (JSONArray) columnJson.get(RaceColumnMasterDataJsonSerializer.FIELD_RACE_IDENTIFIERS);
for (Object raceIdentifierObject : jsonRaceIdentifiers) {
JSONObject jsonRaceIdentifier = (JSONObject) raceIdentifierObject;
String fleetName = (String) jsonRaceIdentifier.get(RaceColumnMasterDataJsonSerializer.FIELD_FLEET_NAME);
String raceName = (String) jsonRaceIdentifier.get(RaceColumnMasterDataJsonSerializer.FIELD_RACE_NAME);
String regattaName = (String) jsonRaceIdentifier.get(RaceColumnMasterDataJsonSerializer.FIELD_REGATTA_NAME);
RaceIdentifier raceIdentifier = new RegattaNameAndRaceName(regattaName, raceName);
raceIdentifiers.put(fleetName, raceIdentifier);
}
JSONArray windJson = (JSONArray) columnJson.get(RaceColumnMasterDataJsonSerializer.FIELD_WIND);
Set<WindTrackMasterData> windTracks = null;
if (windJson != null) {
windTracks = deserializeWindTracks(windJson);
}
return new RaceColumnMasterData(columnName, medal, raceIdentifiers, factor, windTracks);
}
private Set<WindTrackMasterData> deserializeWindTracks(JSONArray windJson) throws JsonDeserializationException {
Set<WindTrackMasterData> tracks = new HashSet<WindTrackMasterData>();
for (Object obj : windJson) {
JSONObject json = (JSONObject) obj;
tracks.add(windtrackDeserializer.deserialize(json));
}
return tracks;
}
}
@@ -1,144 +0,0 @@
package com.sap.sailing.server.gateway.deserialization.masterdata.impl;
import java.io.Serializable;
import java.lang.reflect.Constructor;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.UUID;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import com.sap.sailing.domain.base.Fleet;
import com.sap.sailing.domain.base.configuration.RegattaConfiguration;
import com.sap.sailing.domain.masterdataimport.RaceColumnMasterData;
import com.sap.sailing.domain.masterdataimport.RegattaMasterData;
import com.sap.sailing.domain.masterdataimport.SeriesMasterData;
import com.sap.sailing.server.gateway.deserialization.JsonDeserializationException;
import com.sap.sailing.server.gateway.deserialization.JsonDeserializer;
import com.sap.sailing.server.gateway.deserialization.impl.Helpers;
import com.sap.sailing.server.gateway.serialization.masterdata.impl.LeaderboardMasterDataJsonSerializer;
import com.sap.sailing.server.gateway.serialization.masterdata.impl.RegattaMasterDataJsonSerializer;
public class RegattaMasterDataJsonDeserializer implements JsonDeserializer<RegattaMasterData> {
private final JsonDeserializer<Fleet> fleetDeserializer;
private final JsonDeserializer<RaceColumnMasterData> raceColumnDeserializer;
private final JsonDeserializer<RegattaConfiguration> configurationDeserializer;
public RegattaMasterDataJsonDeserializer(JsonDeserializer<Fleet> fleetDeserializer, JsonDeserializer<RaceColumnMasterData> raceColumnDeserializer,
JsonDeserializer<RegattaConfiguration> configurationDeserializer) {
this.fleetDeserializer = fleetDeserializer;
this.raceColumnDeserializer = raceColumnDeserializer;
this.configurationDeserializer = configurationDeserializer;
}
@Override
public RegattaMasterData deserialize(JSONObject object) throws JsonDeserializationException {
Object idClassName = object.get(RegattaMasterDataJsonSerializer.FIELD_ID_TYPE);
Serializable id = (Serializable) object.get(RegattaMasterDataJsonSerializer.FIELD_ID);
if (idClassName != null) {
try {
Class<?> idClass = Class.forName((String) idClassName);
if (Number.class.isAssignableFrom(idClass)) {
Constructor<?> constructorFromString = idClass.getConstructor(String.class);
id = (Serializable) constructorFromString.newInstance(id.toString());
} else if (UUID.class.isAssignableFrom(idClass)) {
id = Helpers.tryUuidConversion(id);
}
} catch (Exception e) {
throw new RuntimeException(e);
}
} else {
// To ensure some kind of a backward compability.
try {
id = UUID.fromString(id.toString());
} catch (IllegalArgumentException e) {
id = id.toString();
}
}
String regattaName = (String) object.get(RegattaMasterDataJsonSerializer.FIELD_REGATTA_NAME);
String baseName = (String) object.get(RegattaMasterDataJsonSerializer.FIELD_BASE_NAME);
String defaultCourseAreaId = (String) object.get(RegattaMasterDataJsonSerializer.FIELD_DEFAULT_COURSE_AREA_ID);
String boatClassName = (String) object.get(RegattaMasterDataJsonSerializer.FIELD_BOAT_CLASS_NAME);
String scoringSchemeType = (String) object.get(RegattaMasterDataJsonSerializer.FIELD_SCORING_SCHEME_TYPE);
boolean isPersistent = (Boolean) object.get(RegattaMasterDataJsonSerializer.FIELD_IS_PERSISTENT);
Iterable<SeriesMasterData> series = deserializeSeries((JSONArray) object.get(RegattaMasterDataJsonSerializer.FIELD_SERIES));
Iterable<String> raceIdsAsStrings = deserializeRaceIds((JSONArray) object.get(RegattaMasterDataJsonSerializer.FIELD_REGATTA_RACE_IDS));
RegattaConfiguration regattaConfiguration = null;
if (object.containsKey(RegattaMasterDataJsonSerializer.FIELD_REGATTA_CONFIGURATION)) {
regattaConfiguration = configurationDeserializer.deserialize(
Helpers.getNestedObjectSafe(object, RegattaMasterDataJsonSerializer.FIELD_REGATTA_CONFIGURATION));
}
return new RegattaMasterData(id, baseName, defaultCourseAreaId, boatClassName, scoringSchemeType,
series, isPersistent, regattaName, raceIdsAsStrings, regattaConfiguration);
}
private Iterable<String> deserializeRaceIds(JSONArray jsonArray) {
Set<String> raceIdStrings = new HashSet<String>();
for (Object obj : jsonArray) {
String id = (String) obj;
raceIdStrings.add(id);
}
return raceIdStrings;
}
private Iterable<SeriesMasterData> deserializeSeries(JSONArray jsonArray) throws JsonDeserializationException {
List<SeriesMasterData> series = new ArrayList<SeriesMasterData>();
for (Object seriesObject : jsonArray) {
JSONObject seriesJson = (JSONObject) seriesObject;
String name = (String) seriesJson.get(RegattaMasterDataJsonSerializer.FIELD_NAME);
boolean isMedal = (Boolean) seriesJson.get(RegattaMasterDataJsonSerializer.FIELD_IS_MEDAL);
Iterable<Fleet> fleets = deserializeFleets((JSONArray) seriesJson.get(RegattaMasterDataJsonSerializer.FIELD_FLEETS));
Iterable<RaceColumnMasterData> raceColumnNames = deserializeRaceColumnNames((JSONArray) seriesJson.get(RegattaMasterDataJsonSerializer.FIELD_RACE_COLUMNS));
int[] discardingRule = deserializeResultDesicardingRule((JSONObject) seriesJson.get(RegattaMasterDataJsonSerializer.FIELD_RESULT_DISCARDING_RULE));
series.add(new SeriesMasterData(name, isMedal, fleets, raceColumnNames, discardingRule));
}
return series;
}
private Iterable<RaceColumnMasterData> deserializeRaceColumnNames(JSONArray jsonArray) throws JsonDeserializationException {
List<RaceColumnMasterData> raceColumns = new ArrayList<RaceColumnMasterData>();
for (Object raceColumnObject : jsonArray) {
JSONObject jsonRaceColumn = (JSONObject) raceColumnObject;
raceColumns.add(raceColumnDeserializer.deserialize(jsonRaceColumn));
}
return raceColumns;
}
private Iterable<Fleet> deserializeFleets(JSONArray jsonArray) {
List<Fleet> fleets = new ArrayList<Fleet>();
for (Object fleetObject : jsonArray) {
JSONObject fleetJson = (JSONObject) fleetObject;
try {
fleets.add(fleetDeserializer.deserialize(fleetJson));
} catch (JsonDeserializationException e) {
// TODO exception handling
e.printStackTrace();
}
}
return fleets;
}
private int[] deserializeResultDesicardingRule(JSONObject jsonObject) {
if (jsonObject == null) {
return null;
}
JSONArray indeces = (JSONArray) jsonObject.get(LeaderboardMasterDataJsonSerializer.FIELD_INDICES);
if (indeces == null) {
return null;
}
int[] result = new int[indeces.size()];
for (int i = 0; i < result.length; i++) {
result[i] = ((Long) indeces.get(i)).intValue();
}
return result;
}
}
@@ -1,72 +0,0 @@
package com.sap.sailing.server.gateway.deserialization.masterdata.impl;
import java.io.Serializable;
import java.lang.reflect.Constructor;
import java.util.HashSet;
import java.util.Set;
import java.util.UUID;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import com.sap.sailing.domain.common.Position;
import com.sap.sailing.domain.masterdataimport.WindTrackMasterData;
import com.sap.sailing.domain.tracking.Wind;
import com.sap.sailing.server.gateway.deserialization.JsonDeserializationException;
import com.sap.sailing.server.gateway.deserialization.JsonDeserializer;
import com.sap.sailing.server.gateway.deserialization.impl.Helpers;
import com.sap.sailing.server.gateway.deserialization.impl.PositionJsonDeserializer;
import com.sap.sailing.server.gateway.deserialization.impl.WindJsonDeserializer;
import com.sap.sailing.server.gateway.serialization.masterdata.impl.WindTrackMasterDataJsonSerializer;
public class WindTrackMasterDataJsonDeserializer implements JsonDeserializer<WindTrackMasterData> {
private final JsonDeserializer<Wind> windDeserializer;
public WindTrackMasterDataJsonDeserializer() {
JsonDeserializer<Position> positionDeserializer = new PositionJsonDeserializer();
windDeserializer = new WindJsonDeserializer(positionDeserializer);
}
@Override
public WindTrackMasterData deserialize(JSONObject object) throws JsonDeserializationException {
String windSourceTypeName = (String) object.get(WindTrackMasterDataJsonSerializer.FIELD_WIND_SOURCE_TYPE);
Serializable windSourceId = (Serializable) object.get(WindTrackMasterDataJsonSerializer.FIELD_WIND_SOURCE_ID);
JSONArray fixesJson = (JSONArray) object.get(WindTrackMasterDataJsonSerializer.FIELD_FIXES);
String regattaName = (String) object.get(WindTrackMasterDataJsonSerializer.FIELD_REGATTA_NAME);
String raceName = (String) object.get(WindTrackMasterDataJsonSerializer.FIELD_RACE_NAME);
Object idClassName = object.get(WindTrackMasterDataJsonSerializer.FIELD_ID_TYPE);
Serializable id = (Serializable) object.get(WindTrackMasterDataJsonSerializer.FIELD_RACE_ID);
if (id != null) {
if (idClassName != null) {
try {
Class<?> idClass = Class.forName((String) idClassName);
if (Number.class.isAssignableFrom(idClass)) {
Constructor<?> constructorFromString = idClass.getConstructor(String.class);
id = (Serializable) constructorFromString.newInstance(id.toString());
} else if (UUID.class.isAssignableFrom(idClass)) {
id = Helpers.tryUuidConversion(id);
}
} catch (Exception e) {
throw new RuntimeException(e);
}
} else {
// To ensure some kind of a backward compability.
try {
id = UUID.fromString(id.toString());
} catch (IllegalArgumentException e) {
id = id.toString();
}
}
}
Set<Wind> fixes = new HashSet<Wind>();
for (Object obj : fixesJson) {
JSONObject json = (JSONObject) obj;
Wind wind = windDeserializer.deserialize(json);
fixes.add(wind);
}
// return new WindTrackMasterData(windSourceTypeName, windSourceId, fixes, regattaName, raceName, id);
return null;
}
}
@@ -1,67 +0,0 @@
package com.sap.sailing.server.gateway.serialization.masterdata.impl;
import java.io.Serializable;
import java.util.UUID;
import org.json.simple.JSONObject;
import com.sap.sailing.domain.base.Boat;
import com.sap.sailing.domain.base.BoatClass;
import com.sap.sailing.domain.base.Competitor;
import com.sap.sailing.domain.base.Team;
import com.sap.sailing.server.gateway.serialization.JsonSerializer;
public class CompetitorMasterDataJsonSerializer implements JsonSerializer<Competitor> {
public static final String FIELD_BOAT_CLASS = "boatClass";
public static final String FIELD_SAIL_ID = "sailID";
public static final String FIELD_TEAM = "team";
public static final String FIELD_BOAT = "boat";
public static final String FIELD_ID = "id";
public static final String FIELD_NAME = "name";
public static final String FIELD_ID_TYPE = "idType";
public static final String FIELD_DISPLAY_COLOR = "displayColor";
private final JsonSerializer<BoatClass> boatClassSerializer;
private final JsonSerializer<Team> teamSerializer;
public CompetitorMasterDataJsonSerializer(JsonSerializer<BoatClass> boatClassSerializer,
JsonSerializer<Team> teamSerializer) {
this.boatClassSerializer = boatClassSerializer;
this.teamSerializer = teamSerializer;
}
@Override
public JSONObject serialize(Competitor competitor) {
//Check if it is null. This can happen for race log events that specify competitors
// but where the race is not tracked.
if (competitor == null) {
return null;
}
JSONObject jsonCompetitor = new JSONObject();
jsonCompetitor.put(FIELD_NAME, competitor.getName());
jsonCompetitor.put(FIELD_DISPLAY_COLOR, competitor.getColor()==null?null:competitor.getColor().getAsHtml());
// Special treatment for UUIDs. They are represented as String because JSON doesn't have a way to represent them
// otherwise. However, other, e.g., numeric, types used to encode a serializable ID must be preserved according
// to JSON semantics.
// Also see the corresponding case distinction in the deserialized which first tries to parse a string as a UUID
// becore returning the ID as is.
jsonCompetitor.put(FIELD_ID_TYPE, competitor.getId().getClass().getName());
Serializable competitorId = competitor.getId() instanceof UUID ? competitor.getId().toString() : competitor
.getId();
jsonCompetitor.put(FIELD_ID, competitorId);
jsonCompetitor.put(FIELD_BOAT, createJsonForBoat(competitor.getBoat()));
jsonCompetitor.put(FIELD_TEAM, teamSerializer.serialize(competitor.getTeam()));
return jsonCompetitor;
}
private JSONObject createJsonForBoat(Boat boat) {
JSONObject jsonBoat = new JSONObject();
jsonBoat.put(FIELD_NAME, boat.getName());
jsonBoat.put(FIELD_SAIL_ID, boat.getSailID());
jsonBoat.put(FIELD_BOAT_CLASS, boatClassSerializer.serialize(boat.getBoatClass()));
return jsonBoat;
}
}
@@ -1,49 +0,0 @@
package com.sap.sailing.server.gateway.serialization.masterdata.impl;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import com.sap.sailing.domain.base.CourseArea;
import com.sap.sailing.domain.base.Event;
import com.sap.sailing.server.gateway.serialization.JsonSerializer;
public class EventMasterDataJsonSerializer implements JsonSerializer<Event> {
public static final String FIELD_ID = "id";
public static final String FIELD_NAME = "name";
public static final String FIELD_VENUE_NAME = "venueName";
public static final String FIELD_PUB_URL = "publicationUrl";
public static final String FIELD_COURSE_AREAS = "courseAreas";
public static final String FIELD_IS_PUBLIC = "isPublic";
@Override
public JSONObject serialize(Event event) {
JSONObject result = new JSONObject();
result.put(FIELD_ID, event.getId().toString());
result.put(FIELD_NAME, event.getName());
result.put(FIELD_VENUE_NAME, event.getVenue().getName());
result.put(FIELD_PUB_URL, event.getPublicationUrl());
result.put(FIELD_IS_PUBLIC, event.isPublic());
result.put(FIELD_COURSE_AREAS, createJsonArrayForCourseAreas(event.getVenue().getCourseAreas()));
//TODO Sadly event.getRegattas() returns an empty collection
//result.put(FIELD_REGATTAS, createJsonArrayForRegattas(event.getRegattas()));
return result;
}
private JSONArray createJsonArrayForCourseAreas(Iterable<CourseArea> courseAreas) {
JSONArray array = new JSONArray();
for (CourseArea courseArea : courseAreas) {
array.add(createJsonForCourseArea(courseArea));
}
return array;
}
private JSONObject createJsonForCourseArea(CourseArea courseArea) {
JSONObject result = new JSONObject();
result.put(FIELD_ID, courseArea.getId().toString());
result.put(FIELD_NAME, courseArea.getName());
return result;
}
}
@@ -1,164 +0,0 @@
package com.sap.sailing.server.gateway.serialization.masterdata.impl;
import java.util.HashSet;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import com.sap.sailing.domain.base.Competitor;
import com.sap.sailing.domain.base.CourseArea;
import com.sap.sailing.domain.base.Event;
import com.sap.sailing.domain.base.Fleet;
import com.sap.sailing.domain.base.RaceColumn;
import com.sap.sailing.domain.base.Regatta;
import com.sap.sailing.domain.base.configuration.RegattaConfiguration;
import com.sap.sailing.domain.common.Color;
import com.sap.sailing.domain.leaderboard.Leaderboard;
import com.sap.sailing.domain.leaderboard.LeaderboardGroup;
import com.sap.sailing.domain.leaderboard.meta.LeaderboardGroupMetaLeaderboard;
import com.sap.sailing.domain.racelog.RaceLogEvent;
import com.sap.sailing.server.gateway.serialization.JsonSerializer;
import com.sap.sailing.server.gateway.serialization.impl.BoatClassJsonSerializer;
import com.sap.sailing.server.gateway.serialization.impl.ColorJsonSerializer;
import com.sap.sailing.server.gateway.serialization.impl.FleetJsonSerializer;
import com.sap.sailing.server.gateway.serialization.impl.NationalityJsonSerializer;
import com.sap.sailing.server.gateway.serialization.impl.PersonJsonSerializer;
import com.sap.sailing.server.gateway.serialization.impl.RegattaConfigurationJsonSerializer;
import com.sap.sailing.server.gateway.serialization.impl.TeamJsonSerializer;
import com.sap.sailing.server.gateway.serialization.racelog.impl.RaceLogEventSerializer;
public class LeaderboardGroupMasterDataJsonSerializer implements JsonSerializer<LeaderboardGroup> {
public static final String FIELD_LEADERBOARDS = "leaderboards";
public static final String FIELD_HAS_OVERALL_LEADERBOARD = "overallLeaderboard";
public static final String FIELD_OVERALL_LEADERBOARD_SCORING_SCHEME = "overallLeaderboardScoringScheme";
public static final String FIELD_OVERALL_LEADERBOARD_DISCARDING_THRESHOLDS = "overallLeaderboardDiscardingThresholds";
public static final String FIELD_DESCRIPTION = "description";
public static final String FIELD_NAME = "name";
public static final String FIELD_DISPLAY_GROUPS_REVERSE = "displayGroupsReverse";
public static final String FIELD_EVENTS = "events";
public static final String FIELD_REGATTAS = "regattas";
public static final String FIELD_OVERALL_LEADERBOARD_META_COLUMNS = "overallLeaderboardMetaColumns";
public static final String FIELD_OVERALL_LEADERBOARD_SUPPRESSED_COMPETITORS = "overallLeaderboardSuppressedCompetitors";
public static final String FIELD_EXPLICIT_FACTOR = "explicitFactor";
private final LeaderboardMasterDataJsonSerializer leadboardSerializer;
private final Iterable<Event> allEvents;
private final JsonSerializer<Event> eventSerializer;
private final JsonSerializer<Regatta> regattaSerializer;
/**
* If masterdata is imported from a server where exported races are not tracked, data like race log competitor
* data may be lost in the process of serialization
* @param events
* @param regattaForRaceIdString
*/
public LeaderboardGroupMasterDataJsonSerializer(Iterable<Event> events, ConcurrentHashMap<String, Regatta> regattaForRaceIdStrings) {
this.allEvents = events;
NationalityJsonSerializer nationalityJsonSerializer = new NationalityJsonSerializer();
PersonJsonSerializer personSerializer = new PersonJsonSerializer(nationalityJsonSerializer);
TeamJsonSerializer teamSerializer = new TeamJsonSerializer(personSerializer);
BoatClassJsonSerializer boatClassSerializer = new BoatClassJsonSerializer();
CompetitorMasterDataJsonSerializer competitorSerializer = new CompetitorMasterDataJsonSerializer(
boatClassSerializer, teamSerializer);
JsonSerializer<Color> colorSerializer = new ColorJsonSerializer();
JsonSerializer<Fleet> fleetSerializer = new FleetJsonSerializer(colorSerializer);
JsonSerializer<RaceColumn> raceColumnSerializer = new RaceColumnMasterDataJsonSerializer();
JsonSerializer<RegattaConfiguration> configurationSerializer = RegattaConfigurationJsonSerializer.create();
JsonSerializer<RaceLogEvent> raceLogEventSerializer = RaceLogEventSerializer.create(competitorSerializer);
eventSerializer = new EventMasterDataJsonSerializer();
leadboardSerializer = new LeaderboardMasterDataJsonSerializer(competitorSerializer, raceColumnSerializer, raceLogEventSerializer);
regattaSerializer = new RegattaMasterDataJsonSerializer(fleetSerializer, raceColumnSerializer, configurationSerializer, regattaForRaceIdStrings);
}
@Override
public JSONObject serialize(LeaderboardGroup leaderboardGroup) {
JSONObject jsonLeaderboardGroup = new JSONObject();
jsonLeaderboardGroup.put(FIELD_NAME, leaderboardGroup.getName());
jsonLeaderboardGroup.put(FIELD_DESCRIPTION, leaderboardGroup.getDescription());
jsonLeaderboardGroup.put(FIELD_HAS_OVERALL_LEADERBOARD, leaderboardGroup.getOverallLeaderboard() != null);
if (leaderboardGroup.getOverallLeaderboard() != null) {
LeaderboardGroupMetaLeaderboard metaLeader = (LeaderboardGroupMetaLeaderboard) leaderboardGroup
.getOverallLeaderboard();
jsonLeaderboardGroup.put(FIELD_OVERALL_LEADERBOARD_DISCARDING_THRESHOLDS,
LeaderboardMasterDataJsonSerializer.createJsonForResultDiscardingRule(metaLeader
.getResultDiscardingRule()));
jsonLeaderboardGroup.put(FIELD_OVERALL_LEADERBOARD_SCORING_SCHEME,
LeaderboardMasterDataJsonSerializer.createJsonForScoringScheme(metaLeader.getScoringScheme()));
jsonLeaderboardGroup.put(FIELD_OVERALL_LEADERBOARD_META_COLUMNS, createJsonArrayForMetaColumns(metaLeader));
jsonLeaderboardGroup.put(FIELD_OVERALL_LEADERBOARD_SUPPRESSED_COMPETITORS, createJsonArrayForSuppressedCompetitors(metaLeader.getSuppressedCompetitors()));
}
jsonLeaderboardGroup.put(FIELD_LEADERBOARDS, createJsonArrayForLeaderboards(leaderboardGroup.getLeaderboards()));
jsonLeaderboardGroup.put(FIELD_DISPLAY_GROUPS_REVERSE, leaderboardGroup.isDisplayGroupsInReverseOrder());
// Important to call this after serializing leaderboards, as the leaderboard serializer has state
jsonLeaderboardGroup.put(FIELD_EVENTS, createJsonArrayForEvents());
jsonLeaderboardGroup.put(FIELD_REGATTAS, createJsonArrayForRegattas());
return jsonLeaderboardGroup;
}
private JSONArray createJsonArrayForSuppressedCompetitors(Iterable<Competitor> suppressedCompetitors) {
JSONArray array = new JSONArray();
for (Competitor competitor : suppressedCompetitors) {
array.add(competitor.getId().toString());
}
return array;
}
private JSONArray createJsonArrayForMetaColumns(LeaderboardGroupMetaLeaderboard metaLeader) {
JSONArray array = new JSONArray();
for (RaceColumn column : metaLeader.getRaceColumns()) {
JSONObject metaColumn = new JSONObject();
metaColumn.put(FIELD_NAME, column.getName());
metaColumn.put(FIELD_EXPLICIT_FACTOR, column.getExplicitFactor());
array.add(metaColumn);
}
return array;
}
private JSONArray createJsonArrayForRegattas() {
JSONArray array = new JSONArray();
Iterable<Regatta> regattas = leadboardSerializer.getRegattas();
for (Regatta regatta : regattas) {
array.add(regattaSerializer.serialize(regatta));
}
return array;
}
/*
* TODO, this is a hack to find out which events are needed for the exported
* regatta leaderboards. should be replaced by a proper connection from regatta to event
*/
private JSONArray createJsonArrayForEvents() {
Set<String> courseAreaIds = leadboardSerializer.getCourseAreaIds();
Set<Event> eventsThatShouldBeExported = new HashSet<Event>();
for (Event event : allEvents) {
boolean shouldBeExported = false;
for (CourseArea courseArea : event.getVenue().getCourseAreas()) {
if (courseAreaIds.contains(courseArea.getId().toString())) {
shouldBeExported = true;
break;
}
}
if (shouldBeExported) {
eventsThatShouldBeExported.add(event);
}
}
JSONArray array = new JSONArray();
for (Event event : eventsThatShouldBeExported) {
array.add(eventSerializer.serialize(event));
}
return array;
}
private JSONArray createJsonArrayForLeaderboards(Iterable<Leaderboard> leaderboards) {
JSONArray jsonLeaderBoards = new JSONArray();
for (Leaderboard leaderboard : leaderboards) {
JSONObject jsonLeaderboard = leadboardSerializer.serialize(leaderboard);
jsonLeaderBoards.add(jsonLeaderboard);
}
return jsonLeaderBoards;
}
}
@@ -1,339 +0,0 @@
package com.sap.sailing.server.gateway.serialization.masterdata.impl;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import java.util.UUID;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import com.sap.sailing.domain.base.Competitor;
import com.sap.sailing.domain.base.CourseArea;
import com.sap.sailing.domain.base.Fleet;
import com.sap.sailing.domain.base.RaceColumn;
import com.sap.sailing.domain.base.Regatta;
import com.sap.sailing.domain.common.impl.MillisecondsTimePoint;
import com.sap.sailing.domain.leaderboard.FlexibleLeaderboard;
import com.sap.sailing.domain.leaderboard.Leaderboard;
import com.sap.sailing.domain.leaderboard.RegattaLeaderboard;
import com.sap.sailing.domain.leaderboard.ResultDiscardingRule;
import com.sap.sailing.domain.leaderboard.ScoringScheme;
import com.sap.sailing.domain.leaderboard.SettableScoreCorrection;
import com.sap.sailing.domain.leaderboard.ThresholdBasedResultDiscardingRule;
import com.sap.sailing.domain.racelog.RaceLog;
import com.sap.sailing.domain.racelog.RaceLogEvent;
import com.sap.sailing.server.gateway.serialization.JsonSerializer;
public class LeaderboardMasterDataJsonSerializer implements JsonSerializer<Leaderboard> {
public static final String FIELD_FOR_RACE_COLUMNS = "forRaceColumns";
public static final String FIELD_TIME_POINT = "timePoint";
public static final String FIELD_COMMENT = "comment";
public static final String FIELD_MAX_POINTS_REASON = "maxPointsReason";
public static final String FIELD_EXPLICIT_SCORE_CORRECTION = "explicitScoreCorrection";
public static final String FIELD_FOR_COMPETITORS = "forCompetitors";
public static final String FIELD_RACE_COLUMN_NAME = "raceColumnName";
public static final String FIELD_RACE_COLUMNS = "raceColumns";
public static final String FIELD_COMPETITORS = "competitors";
public static final String FIELD_NAME = "name";
public static final String FIELD_SCORE_CORRECTION = "scoreCorrection";
public static final String FIELD_SCORING_SCHEME = "scoringScheme";
public static final String FIELD_TYPE = "type";
public static final String FIELD_REGATTA_LEADERBOARD = "regattaLeaderboard";
public static final String FIELD_META_LEADERBOARD = "metaLeaderboard";
public static final String FIELD_RESULT_DISCARDING_RULE = "resultDiscardingRule";
public static final String FIELD_INDICES = "indices";
public static final String FIELD_COURSE_AREA = "courseArea";
public static final String FIELD_ID = "id";
public static final String FIELD_REGATTA_NAME = "regattaName";
public static final String FIELD_DISPLAY_NAME = "displayName";
public static final String FIELD_COMPETITOR_ID = "competitorId";
public static final String FIELD_CARRIED_POINTS = "carriedPoints";
public static final String FIELD_CARRIED = "carried";
public static final String FIELD_SUPPRESSED_COMPETITORS = "suppressedCompetitors";
public static final String FIELD_COMPETITOR_DISPLAY_NAMES = "competitorDisplayNames";
public static final String FIELD_RACE_LOG_EVENTS = "raceLogEvents";
public static final String FIELD_FLEETS = "fleets";
public static final String FIELD_FLEET_NAME = "fleetName";
private final JsonSerializer<Competitor> competitorSerializer;
private final JsonSerializer<RaceColumn> raceColumnSerializer;
private final JsonSerializer<RaceLogEvent> raceLogEventSerializer;
private final Set<Competitor> competitors = new HashSet<Competitor>();
/*
* TODO This is a hack to "remember" the course areas to allow finding the events which own the course areas. This
* way regatta leaderboard can be completely exported, because all events, their regattas, etc can be exported too.
* Their should be a proper connection between regatta and event soon.
*/
private final Set<String> courseAreaIds = new HashSet<String>();
private final Set<Regatta> regattas = new HashSet<Regatta>();
public LeaderboardMasterDataJsonSerializer(JsonSerializer<Competitor> competitorSerializer,
JsonSerializer<RaceColumn> raceColumnSerializer, JsonSerializer<RaceLogEvent> raceLogEventSerializer) {
this.competitorSerializer = competitorSerializer;
this.raceColumnSerializer = raceColumnSerializer;
this.raceLogEventSerializer = raceLogEventSerializer;
}
@Override
public JSONObject serialize(Leaderboard leaderboard) {
if (leaderboard == null) {
return null;
}
JSONObject jsonLeaderboard = new JSONObject();
jsonLeaderboard.put(FIELD_NAME, leaderboard.getName());
jsonLeaderboard.put(FIELD_SCORE_CORRECTION, createJsonForScoreCorrection(leaderboard));
jsonLeaderboard.put(FIELD_CARRIED_POINTS, createJsonArrayForCarriedPoints(leaderboard));
jsonLeaderboard.put(FIELD_RESULT_DISCARDING_RULE,
createJsonForResultDiscardingRule(leaderboard.getResultDiscardingRule()));
jsonLeaderboard.put(FIELD_DISPLAY_NAME, leaderboard.getDisplayName());
jsonLeaderboard.put(FIELD_RACE_LOG_EVENTS, createJsonArrayForRaceLogEventsPerRaceColumn(leaderboard));
boolean isRegattaLeaderboard = false;
if (leaderboard instanceof FlexibleLeaderboard) {
FlexibleLeaderboard flexibleLeaderboard = (FlexibleLeaderboard) leaderboard;
jsonLeaderboard.put(FIELD_SCORING_SCHEME, createJsonForScoringScheme(leaderboard.getScoringScheme()));
jsonLeaderboard.put(FIELD_COURSE_AREA, createJsonForCourseArea(flexibleLeaderboard.getDefaultCourseArea()));
jsonLeaderboard.put(FIELD_RACE_COLUMNS, createJsonArrayForRaceColumns(leaderboard.getRaceColumns()));
} else if (leaderboard instanceof RegattaLeaderboard) {
RegattaLeaderboard regattaLeaderboard = (RegattaLeaderboard) leaderboard;
jsonLeaderboard.put(FIELD_REGATTA_NAME, regattaLeaderboard.getRegatta().getName());
CourseArea courseArea = regattaLeaderboard.getRegatta().getDefaultCourseArea();
if (courseArea != null) {
courseAreaIds.add(courseArea.getId().toString());
}
regattas.add(regattaLeaderboard.getRegatta());
isRegattaLeaderboard = true;
}
jsonLeaderboard.put(FIELD_REGATTA_LEADERBOARD, isRegattaLeaderboard);
jsonLeaderboard.put(FIELD_SUPPRESSED_COMPETITORS,
createJsonArrayForSuppressedCompetitors(leaderboard.getSuppressedCompetitors()));
competitors.addAll(makeCollection(leaderboard.getAllCompetitors()));
jsonLeaderboard.put(FIELD_COMPETITOR_DISPLAY_NAMES, createJsonArrayForCompetitorDisplayNames(leaderboard));
jsonLeaderboard.put(FIELD_COMPETITORS, createJsonArrayForCompetitors());
return jsonLeaderboard;
}
private JSONArray createJsonArrayForRaceLogEventsPerRaceColumn(Leaderboard leaderboard) {
JSONArray array = new JSONArray();
for (RaceColumn raceColumn : leaderboard.getRaceColumns()) {
JSONObject raceColumnRaceLogJson = new JSONObject();
raceColumnRaceLogJson.put(FIELD_RACE_COLUMN_NAME, raceColumn.getName());
raceColumnRaceLogJson.put(FIELD_FLEETS, createJsonArrayForRaceLogEventsForFleets(raceColumn));
array.add(raceColumnRaceLogJson);
}
return array;
}
private JSONArray createJsonArrayForRaceLogEventsForFleets(RaceColumn raceColumn) {
JSONArray array = new JSONArray();
for (Fleet fleet : raceColumn.getFleets()) {
JSONObject fleetRaceLogJson = new JSONObject();
fleetRaceLogJson.put(FIELD_FLEET_NAME, fleet.getName());
fleetRaceLogJson.put(FIELD_RACE_LOG_EVENTS, createRaceLogEventsForFleet(raceColumn, fleet));
array.add(fleetRaceLogJson);
}
return array;
}
private JSONArray createRaceLogEventsForFleet(RaceColumn raceColumn, Fleet fleet) {
JSONArray array = new JSONArray();
RaceLog raceLog = raceColumn.getRaceLog(fleet);
if (raceLog != null) {
raceLog.lockForRead();
try {
for (RaceLogEvent event : raceLog.getRawFixes()) {
array.add(raceLogEventSerializer.serialize(event));
}
} finally {
raceLog.unlockAfterRead();
}
}
return array;
}
private JSONArray createJsonArrayForCompetitorDisplayNames(Leaderboard leaderboard) {
JSONArray array = new JSONArray();
for (Competitor competitor : competitors) {
String displayName = leaderboard.getDisplayName(competitor);
if (displayName != null) {
JSONObject displayNameJson = new JSONObject();
addCompetitorId(competitor, displayNameJson);
displayNameJson.put(FIELD_DISPLAY_NAME, displayName);
array.add(displayNameJson);
}
}
return array;
}
private JSONArray createJsonArrayForSuppressedCompetitors(Iterable<Competitor> suppressedCompetitors) {
competitors.addAll(makeCollection(suppressedCompetitors));
JSONArray array = new JSONArray();
for (Competitor competitor : suppressedCompetitors) {
JSONObject obj = new JSONObject();
addCompetitorId(competitor, obj);
array.add(obj);
}
return array;
}
private void addCompetitorId(Competitor competitor, JSONObject obj) {
// Special treatment for UUIDs. They are represented as String because JSON doesn't have a way to represent
// them otherwise. However, other, e.g., numeric, types used to encode a serializable ID must be preserved
// according to JSON semantics. Also see the corresponding case distinction in the deserialized which first
// tries to parse a string as a UUID becore returning the ID as is.
obj.put(FIELD_TYPE, competitor.getId().getClass().getName());
Serializable competitorId = competitor.getId() instanceof UUID ? competitor.getId().toString() : competitor
.getId();
obj.put(FIELD_COMPETITOR_ID, competitorId);
}
private JSONArray createJsonArrayForCarriedPoints(Leaderboard leaderboard) {
JSONArray jsonArray = new JSONArray();
Map<Competitor, Double> competitorsWithCarriedPoints = leaderboard
.getCompetitorsForWhichThereAreCarriedPoints();
competitors.addAll(competitorsWithCarriedPoints.keySet());
for (Entry<Competitor, Double> entry : competitorsWithCarriedPoints.entrySet()) {
Double carriedPoints = entry.getValue();
if (carriedPoints != 0) {
jsonArray.add(createJsonForCarriedPoints(entry.getKey(), carriedPoints));
}
}
return jsonArray;
}
private JSONObject createJsonForCarriedPoints(Competitor competitor, double carriedPoints) {
JSONObject jsonObject = new JSONObject();
addCompetitorId(competitor, jsonObject);
jsonObject.put(FIELD_CARRIED, carriedPoints);
return jsonObject;
}
private JSONObject createJsonForCourseArea(CourseArea defaultCourseArea) {
if (defaultCourseArea == null) {
return null;
}
JSONObject result = new JSONObject();
result.put(FIELD_ID, defaultCourseArea.getId());
result.put(FIELD_NAME, defaultCourseArea.getName());
return null;
}
public static JSONObject createJsonForResultDiscardingRule(ResultDiscardingRule resultDiscardingRule) {
JSONObject result = new JSONObject();
if (resultDiscardingRule instanceof ThresholdBasedResultDiscardingRule) {
ThresholdBasedResultDiscardingRule rule = (ThresholdBasedResultDiscardingRule) resultDiscardingRule;
JSONArray indices = new JSONArray();
int[] rawValues = rule.getDiscardIndexResultsStartingWithHowManyRaces();
for (int i = 0; i < rawValues.length; i++) {
indices.add(new Integer(rawValues[i]));
}
result.put(FIELD_INDICES, indices);
}
return result;
}
public static JSONObject createJsonForScoringScheme(ScoringScheme scoringScheme) {
JSONObject result = new JSONObject();
result.put(FIELD_TYPE, scoringScheme.getType().name());
return result;
}
private JSONArray createJsonArrayForRaceColumns(Iterable<RaceColumn> raceColumns) {
JSONArray jsonRaceColumns = new JSONArray();
for (RaceColumn raceColumn : raceColumns) {
JSONObject jsonRaceColumn = raceColumnSerializer.serialize(raceColumn);
jsonRaceColumns.add(jsonRaceColumn);
}
return jsonRaceColumns;
}
private JSONArray createJsonArrayForCompetitors() {
JSONArray jsonCompetitors = new JSONArray();
for (Competitor competitor : competitors) {
JSONObject jsonCompetitor = competitorSerializer.serialize(competitor);
jsonCompetitors.add(jsonCompetitor);
}
return jsonCompetitors;
}
private JSONObject createJsonForScoreCorrection(Leaderboard leaderboard) {
SettableScoreCorrection correction = leaderboard.getScoreCorrection();
JSONObject jsonScoreCorrection = new JSONObject();
jsonScoreCorrection.put(FIELD_COMMENT, correction.getComment());
if (correction.getTimePointOfLastCorrectionsValidity() != null) {
jsonScoreCorrection.put(FIELD_TIME_POINT, correction.getTimePointOfLastCorrectionsValidity().asMillis());
} else {
jsonScoreCorrection.put(FIELD_TIME_POINT, null);
}
jsonScoreCorrection.put(FIELD_FOR_RACE_COLUMNS,
createJSONArrayForScoreCorrectionsForRaceColumns(correction, leaderboard));
return jsonScoreCorrection;
}
private JSONArray createJSONArrayForScoreCorrectionsForRaceColumns(SettableScoreCorrection correction,
Leaderboard leaderboard) {
JSONArray scoreCorrectionsForRaceColumns = new JSONArray();
for (RaceColumn raceColumn : leaderboard.getRaceColumns()) {
if (correction.hasCorrectionFor(raceColumn)) {
JSONObject scoreCorrectionsForRaceColumn = new JSONObject();
scoreCorrectionsForRaceColumn.put(FIELD_RACE_COLUMN_NAME, raceColumn.getName());
scoreCorrectionsForRaceColumn.put(FIELD_FOR_COMPETITORS,
createJsonForScoreCorrectionsForRaceColumnAndCompetitors(correction, raceColumn, leaderboard));
scoreCorrectionsForRaceColumns.add(scoreCorrectionsForRaceColumn);
}
}
return scoreCorrectionsForRaceColumns;
}
private JSONArray createJsonForScoreCorrectionsForRaceColumnAndCompetitors(SettableScoreCorrection correction,
RaceColumn raceColumn, Leaderboard leaderboard) {
JSONArray scoreCorrectionsForCompetitors = new JSONArray();
Iterable<Competitor> competitorsThatHaveCorrectionsIn = correction
.getCompetitorsThatHaveCorrectionsIn(raceColumn);
competitors.addAll(makeCollection(competitorsThatHaveCorrectionsIn));
for (Competitor competitor : competitorsThatHaveCorrectionsIn) {
// TODO bug 655: score corrections shall be time dependent
final MillisecondsTimePoint now = MillisecondsTimePoint.now();
if (correction.isScoreCorrected(competitor, raceColumn, now)) {
JSONObject scoreCorrectionForCompetitor = new JSONObject();
scoreCorrectionForCompetitor.put(FIELD_EXPLICIT_SCORE_CORRECTION,
correction.getExplicitScoreCorrection(competitor, raceColumn));
scoreCorrectionForCompetitor.put(FIELD_MAX_POINTS_REASON,
correction.getMaxPointsReason(competitor, raceColumn, now).toString());
addCompetitorId(competitor, scoreCorrectionForCompetitor);
scoreCorrectionsForCompetitors.add(scoreCorrectionForCompetitor);
}
}
return scoreCorrectionsForCompetitors;
}
public Set<String> getCourseAreaIds() {
return courseAreaIds;
}
public Iterable<Regatta> getRegattas() {
return regattas;
}
public static <E> Collection<E> makeCollection(Iterable<E> iter) {
Collection<E> list = new ArrayList<E>();
for (E item : iter) {
list.add(item);
}
return list;
}
}
@@ -1,31 +0,0 @@
package com.sap.sailing.server.gateway.serialization.masterdata.impl;
import org.json.simple.JSONObject;
import com.sap.sailing.domain.common.media.MediaTrack;
import com.sap.sailing.server.gateway.serialization.JsonSerializer;
public class MediaTrackJsonSerializer implements JsonSerializer<MediaTrack> {
public static final String FIELD_DB_ID = "dbId";
public static final String FIELD_DURATION = "duration";
public static final String FIELD_MIME_TYPE = "mimeType";
public static final String FIELD_START_TIME = "startTime";
public static final String FIELD_STATUS = "status";
public static final String FIELD_TITLE = "title";
public static final String FIELD_URL = "url";
@Override
public JSONObject serialize(MediaTrack mediaTrack) {
JSONObject result = new JSONObject();
result.put(FIELD_DB_ID, mediaTrack.dbId);
result.put(FIELD_DURATION, mediaTrack.durationInMillis);
result.put(FIELD_MIME_TYPE, mediaTrack.mimeType.name());
result.put(FIELD_START_TIME, mediaTrack.startTime.getTime());
result.put(FIELD_STATUS, mediaTrack.status.name());
result.put(FIELD_TITLE, mediaTrack.title);
result.put(FIELD_URL, mediaTrack.url);
return result;
}
}
@@ -1,71 +0,0 @@
package com.sap.sailing.server.gateway.serialization.masterdata.impl;
import java.io.Serializable;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import com.sap.sailing.domain.base.Fleet;
import com.sap.sailing.domain.base.RaceColumn;
import com.sap.sailing.domain.common.RaceIdentifier;
import com.sap.sailing.domain.common.WindSource;
import com.sap.sailing.domain.tracking.TrackedRace;
import com.sap.sailing.domain.tracking.WindTrack;
import com.sap.sailing.server.gateway.serialization.JsonSerializer;
public class RaceColumnMasterDataJsonSerializer implements JsonSerializer<RaceColumn> {
public static final String FIELD_MEDAL_RACE = "medalRace";
public static final String FIELD_NAME = "name";
public static final String FIELD_RACE_IDENTIFIERS = "raceIdentifiers";
public static final String FIELD_FLEET_NAME = "fleetName";
public static final String FIELD_RACE_NAME = "raceName";
public static final String FIELD_REGATTA_NAME = "regattaName";
public static final String FIELD_FACTOR = "factor";
public static final String FIELD_WIND = "wind";
@Override
public JSONObject serialize(RaceColumn raceColumn) {
JSONObject jsonRaceColumn = new JSONObject();
jsonRaceColumn.put(FIELD_NAME, raceColumn.getName());
jsonRaceColumn.put(FIELD_MEDAL_RACE, raceColumn.isMedalRace());
jsonRaceColumn.put(FIELD_FACTOR, raceColumn.getExplicitFactor());
JSONArray raceIdentifiers = new JSONArray();
jsonRaceColumn.put(FIELD_RACE_IDENTIFIERS, raceIdentifiers);
for (Fleet fleet : raceColumn.getFleets()) {
RaceIdentifier raceIdentifierForFleet = raceColumn.getRaceIdentifier(fleet);
if (raceIdentifierForFleet != null) {
JSONObject jsonRaceIdentifierForFleet = new JSONObject();
jsonRaceIdentifierForFleet.put(FIELD_FLEET_NAME, fleet.getName());
jsonRaceIdentifierForFleet.put(FIELD_RACE_NAME, raceIdentifierForFleet.getRaceName());
jsonRaceIdentifierForFleet.put(FIELD_REGATTA_NAME, raceIdentifierForFleet.getRegattaName());
raceIdentifiers.add(jsonRaceIdentifierForFleet);
}
TrackedRace trackedRace = raceColumn.getTrackedRace(fleet);
if (trackedRace != null) {
jsonRaceColumn.put(FIELD_WIND, serializeWindInformation(trackedRace));
}
}
return jsonRaceColumn;
}
private JSONArray serializeWindInformation(TrackedRace trackedRace) {
JSONArray jsonWindInfo = new JSONArray();
Iterable<WindSource> windSources = trackedRace.getWindSources();
String raceName = trackedRace.getRace().getName();
Serializable raceId = trackedRace.getRace().getId();
String regattaName = trackedRace.getTrackedRegatta().getRegatta().getName();
if (windSources != null) {
for (WindSource source : windSources) {
if (source.canBeStored()) {
WindTrack track = trackedRace.getOrCreateWindTrack(source);
JsonSerializer<WindTrack> windtrackSerializer = new WindTrackMasterDataJsonSerializer(source,
regattaName, raceName, raceId);
jsonWindInfo.add(windtrackSerializer.serialize(track));
}
}
}
return jsonWindInfo;
}
}
@@ -1,160 +0,0 @@
package com.sap.sailing.server.gateway.serialization.masterdata.impl;
import java.io.Serializable;
import java.util.Map.Entry;
import java.util.UUID;
import java.util.concurrent.ConcurrentHashMap;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import com.sap.sailing.domain.base.CourseArea;
import com.sap.sailing.domain.base.Fleet;
import com.sap.sailing.domain.base.RaceColumn;
import com.sap.sailing.domain.base.RaceColumnInSeries;
import com.sap.sailing.domain.base.Regatta;
import com.sap.sailing.domain.base.Series;
import com.sap.sailing.domain.base.configuration.RegattaConfiguration;
import com.sap.sailing.domain.common.RegattaName;
import com.sap.sailing.domain.leaderboard.ResultDiscardingRule;
import com.sap.sailing.domain.leaderboard.ThresholdBasedResultDiscardingRule;
import com.sap.sailing.server.gateway.serialization.JsonSerializer;
public class RegattaMasterDataJsonSerializer implements JsonSerializer<Regatta> {
public static final String FIELD_ID = "id";
public static final String FIELD_ID_TYPE = "idType";
public static final String FIELD_NAME = "name";
public static final String FIELD_BASE_NAME = "baseName";
public static final String FIELD_REGATTAS = "regattas";
public static final String FIELD_BOAT_CLASS_NAME = "boatClass";
public static final String FIELD_DEFAULT_COURSE_AREA_ID = "defaultCourseAreaId";
public static final String FIELD_REGATTA_CONFIGURATION = "procedures";
public static final String FIELD_SCORING_SCHEME_TYPE = "scoringSchemeType";
public static final String FIELD_SERIES = "series";
public static final String FIELD_RACE_COLUMNS = "raceColumns";
public static final String FIELD_IS_MEDAL = "isMedal";
public static final String FIELD_FLEETS = "fleets";
public static final String FIELD_IS_PERSISTENT = "isPersistent";
public static final String FIELD_REGATTA_NAME = "regattaName";
public static final String FIELD_RESULT_DISCARDING_RULE = "resultDiscardingRule";
public static final String FIELD_INDICES = "indices";
public static final String FIELD_REGATTA_RACE_IDS = "regattaRaceIds";
private final JsonSerializer<Fleet> fleetSerializer;
private final JsonSerializer<RaceColumn> raceColumnSerializer;
private final JsonSerializer<RegattaConfiguration> configurationSerializer;
private final ConcurrentHashMap<String, Regatta> regattaForRaceIdStrings;
public RegattaMasterDataJsonSerializer(JsonSerializer<Fleet> fleetSerializer,
JsonSerializer<RaceColumn> raceColumnSerializer,
JsonSerializer<RegattaConfiguration> configurationSerializer,
ConcurrentHashMap<String, Regatta> regattaForRaceIdStrings) {
this.fleetSerializer = fleetSerializer;
this.raceColumnSerializer = raceColumnSerializer;
this.configurationSerializer = configurationSerializer;
this.regattaForRaceIdStrings = regattaForRaceIdStrings;
}
@Override
public JSONObject serialize(Regatta regatta) {
return createJsonForRegatta(regatta);
}
private JSONObject createJsonForRegatta(Regatta regatta) {
JSONObject result = new JSONObject();
// Special treatment for UUIDs. They are represented as String because JSON doesn't have a way to represent them
// otherwise. However, other, e.g., numeric, types used to encode a serializable ID must be preserved according
// to JSON semantics.
// Also see the corresponding case distinction in the deserialized which first tries to parse a string as a UUID
// becore returning the ID as is.
result.put(FIELD_ID_TYPE, regatta.getId().getClass().getName());
Serializable regattaId = regatta.getId() instanceof UUID ? regatta.getId().toString() : regatta.getId();
result.put(FIELD_ID, regattaId);
result.put(FIELD_BASE_NAME, regatta.getBaseName());
result.put(FIELD_BOAT_CLASS_NAME, regatta.getBoatClass().getName());
CourseArea defaultCourseArea = regatta.getDefaultCourseArea();
if (defaultCourseArea != null) {
result.put(FIELD_DEFAULT_COURSE_AREA_ID, defaultCourseArea.getId().toString());
} else {
result.put(FIELD_DEFAULT_COURSE_AREA_ID, null);
}
if (regatta.getRegattaConfiguration() != null) {
result.put(FIELD_REGATTA_CONFIGURATION,
configurationSerializer.serialize(regatta.getRegattaConfiguration()));
}
result.put(FIELD_SCORING_SCHEME_TYPE, regatta.getScoringScheme().getType().toString());
result.put(FIELD_SERIES, createJsonArrayForSeries(regatta.getSeries()));
result.put(FIELD_IS_PERSISTENT, regatta.isPersistent());
result.put(FIELD_REGATTA_NAME, ((RegattaName) regatta.getRegattaIdentifier()).getRegattaName());
result.put(FIELD_REGATTA_RACE_IDS, createJsonArrayForRaceIdStrings(regatta));
return result;
}
private JSONArray createJsonArrayForRaceIdStrings(Regatta regatta) {
JSONArray result = new JSONArray();
for (Entry<String, Regatta> entry: regattaForRaceIdStrings.entrySet()) {
if (entry.getValue() == regatta) {
result.add(entry.getKey());
}
}
return result;
}
private JSONArray createJsonArrayForSeries(Iterable<? extends Series> series) {
JSONArray array = new JSONArray();
for (Series oneSeries : series) {
array.add(createJsonForSeries(oneSeries));
}
return array;
}
private JSONObject createJsonForSeries(Series series) {
JSONObject result = new JSONObject();
result.put(FIELD_NAME, series.getName());
result.put(FIELD_IS_MEDAL, series.isMedal());
result.put(FIELD_FLEETS, createJsonArrayForFleets(series.getFleets()));
result.put(FIELD_RACE_COLUMNS, createJsonArrayForRaceColumns(series.getRaceColumns()));
result.put(FIELD_RESULT_DISCARDING_RULE, createJsonForResultDiscardingRule(series.getResultDiscardingRule()));
return result;
}
private JSONObject createJsonForResultDiscardingRule(ResultDiscardingRule resultDiscardingRule) {
if (resultDiscardingRule == null) {
return null;
}
JSONObject result = new JSONObject();
if (resultDiscardingRule instanceof ThresholdBasedResultDiscardingRule) {
ThresholdBasedResultDiscardingRule rule = (ThresholdBasedResultDiscardingRule) resultDiscardingRule;
JSONArray indices = new JSONArray();
int[] rawValues = rule.getDiscardIndexResultsStartingWithHowManyRaces();
for (int i = 0; i < rawValues.length; i++) {
indices.add(new Integer(rawValues[i]));
}
result.put(FIELD_INDICES, indices);
}
return result;
}
private JSONArray createJsonArrayForFleets(Iterable<? extends Fleet> fleets) {
JSONArray array = new JSONArray();
for (Fleet fleet : fleets) {
array.add(fleetSerializer.serialize(fleet));
}
return array;
}
private JSONArray createJsonArrayForRaceColumns(Iterable<? extends RaceColumnInSeries> raceColumns) {
JSONArray array = new JSONArray();
for (RaceColumnInSeries raceColumn : raceColumns) {
array.add(createJsonForRaceColumn(raceColumn));
}
return array;
}
private JSONObject createJsonForRaceColumn(RaceColumnInSeries raceColumn) {
return raceColumnSerializer.serialize(raceColumn);
}
}
@@ -1,72 +0,0 @@
package com.sap.sailing.server.gateway.serialization.masterdata.impl;
import java.util.Collection;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import com.sap.sailing.domain.base.Event;
import com.sap.sailing.domain.base.Regatta;
import com.sap.sailing.domain.common.media.MediaTrack;
import com.sap.sailing.domain.leaderboard.LeaderboardGroup;
import com.sap.sailing.server.gateway.serialization.JsonSerializer;
/**
* Will take care of serializing all master data connected to a set of leaderboard groups. They
* are identified in {@link #serialize(Set)}. The serializer must be created with a reference to all
* leaderboard groups and all events, so that all necessary data can be found and serialized.
*
* @author Frederik Petersen (D054528)
*
*/
public class TopLevelMasterDataSerializer {
public static final String FIELD_PER_LG = "perLg";
public static final String FIELD_MEDIA = "media";
private final Map<String, LeaderboardGroup> allLeaderboardGroups;
private final Iterable<Event> allEvents;
private final ConcurrentHashMap<String, Regatta> regattaForRaceIdStrings;
private final Collection<MediaTrack> allMediaTracks;
private final JsonSerializer<MediaTrack> mediaTrackSerializer;
public TopLevelMasterDataSerializer(Map<String, LeaderboardGroup> allLeaderboardGroups, Iterable<Event> allEvents,
ConcurrentHashMap<String, Regatta> regattaForRaceIdString, Collection<MediaTrack> allMediaTracks) {
this.allLeaderboardGroups = allLeaderboardGroups;
this.allEvents = allEvents;
this.regattaForRaceIdStrings = regattaForRaceIdString;
this.allMediaTracks = allMediaTracks;
mediaTrackSerializer = new MediaTrackJsonSerializer();
}
public JSONObject serialize(Set<String> requestedLeaderboardGroupNames) {
JSONObject masterData = new JSONObject();
JSONArray masterDataPerLg = new JSONArray();
for (String name : requestedLeaderboardGroupNames) {
LeaderboardGroup leaderboardGroup = allLeaderboardGroups.get(name);
if (leaderboardGroup == null) {
continue;
}
JsonSerializer<LeaderboardGroup> serializer = new LeaderboardGroupMasterDataJsonSerializer(allEvents, regattaForRaceIdStrings);
masterDataPerLg.add(serializer.serialize(leaderboardGroup));
}
masterData.put(FIELD_PER_LG, masterDataPerLg);
masterData.put(FIELD_MEDIA, createJsonArrayForMediaTracks());
return masterData;
}
private JSONArray createJsonArrayForMediaTracks() {
JSONArray array = new JSONArray();
for (MediaTrack mediaTrack : allMediaTracks) {
array.add(mediaTrackSerializer.serialize(mediaTrack));
}
return array;
}
}
@@ -1,75 +0,0 @@
package com.sap.sailing.server.gateway.serialization.masterdata.impl;
import java.io.Serializable;
import java.util.UUID;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import com.sap.sailing.domain.common.Position;
import com.sap.sailing.domain.common.WindSource;
import com.sap.sailing.domain.tracking.Wind;
import com.sap.sailing.domain.tracking.WindTrack;
import com.sap.sailing.server.gateway.serialization.JsonSerializer;
import com.sap.sailing.server.gateway.serialization.impl.PositionJsonSerializer;
import com.sap.sailing.server.gateway.serialization.impl.WindJsonSerializer;
public class WindTrackMasterDataJsonSerializer implements JsonSerializer<WindTrack>{
public static final String FIELD_WIND_SOURCE_TYPE = "windSourceType";
public static final String FIELD_WIND_SOURCE_ID = "windSourceId";
public static final String FIELD_FIXES = "fixes";
public static final String FIELD_RACE_NAME = "raceName";
public static final String FIELD_RACE_ID = "raceId";
public static final String FIELD_ID_TYPE = "idType";
public static final String FIELD_REGATTA_NAME = "regattaName";
private final WindSource source;
private final JsonSerializer<Wind> windSerializer;
private final String regattaName;
private final String raceName;
private final Serializable raceId;
public WindTrackMasterDataJsonSerializer(WindSource source, String regattaName, String raceName, Serializable raceId) {
this.source = source;
this.regattaName = regattaName;
this.raceName = raceName;
this.raceId = raceId;
JsonSerializer<Position> positionSerializer = new PositionJsonSerializer();
this.windSerializer = new WindJsonSerializer(positionSerializer);
}
@Override
public JSONObject serialize(WindTrack windTrack) {
JSONObject windTrackJson = new JSONObject();
windTrack.lockForRead();
try {
windTrackJson.put(FIELD_WIND_SOURCE_TYPE, source.getType().name());
if (source.getId() != null) {
windTrackJson.put(FIELD_WIND_SOURCE_ID, source.getId().toString());
}
windTrackJson.put(FIELD_RACE_NAME, raceName);
if (raceId != null) {
// Special treatment for UUIDs. They are represented as String because JSON doesn't have a way to
// otherwise. However, other, e.g., numeric, types used to encode a serializable ID must be preserved
// to JSON semantics. Also see the corresponding case distinction in the deserialized which first tries
// to parse a string as a UUID becore returning the ID as is.
windTrackJson.put(FIELD_ID_TYPE, raceId.getClass().getName());
Serializable raceIdAdapted = raceId instanceof UUID ? raceId.toString() : raceId;
windTrackJson.put(FIELD_RACE_ID, raceIdAdapted);
}
windTrackJson.put(FIELD_REGATTA_NAME, regattaName);
JSONArray fixes = new JSONArray();
Iterable<Wind> fixesIterator = windTrack.getFixes();
for (Wind wind : fixesIterator) {
fixes.add(windSerializer.serialize(wind));
}
windTrackJson.put(FIELD_FIXES, fixes);
} finally {
windTrack.unlockAfterRead();
}
return windTrackJson;
}
}
@@ -6,7 +6,6 @@ Bundle-Version: 1.0.0.qualifier
Bundle-Vendor: SAP
Bundle-RequiredExecutionEnvironment: JavaSE-1.7
Import-Package: com.sap.sailing.server,
com.sap.sailing.server.gateway.masterdata,
com.sap.sailing.server.operationaltransformation,
javax.ws.rs;version="1.1.1",
javax.ws.rs.core;version="1.1.1",
@@ -22,8 +22,8 @@ import javax.ws.rs.core.Response.ResponseBuilder;
import javax.ws.rs.core.StreamingOutput;
import com.sap.sailing.domain.leaderboard.LeaderboardGroup;
import com.sap.sailing.domain.masterdataimport.TopLevelMasterData;
import com.sap.sailing.server.gateway.jaxrs.AbstractSailingServerResource;
import com.sap.sailing.server.gateway.masterdata.TopLevelMasterData;
@Path("/v1/masterdata")
public class MasterDataResource extends AbstractSailingServerResource {
@@ -1,46 +0,0 @@
package com.sap.sailing.server.gateway.jaxrs.spi;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import org.json.simple.JSONObject;
import com.sap.sailing.domain.leaderboard.LeaderboardGroup;
import com.sap.sailing.server.gateway.jaxrs.AbstractSailingServerResource;
import com.sap.sailing.server.gateway.serialization.masterdata.impl.TopLevelMasterDataSerializer;
@Path("/v1/leaderboardgroups/structure")
public class LeaderboardGroupsStructureResource extends AbstractSailingServerResource {
@GET
@Produces("application/json;charset=UTF-8")
public Response getStructureOfLeaderboardGroups(@QueryParam("names") List<String> leaderboardGroupNames) {
Map<String, LeaderboardGroup> leaderboardGroups = getService().getLeaderboardGroups();
Set<String> requestedLeaderboardGroupNames = new HashSet<String>();
if (leaderboardGroupNames != null && !leaderboardGroupNames.isEmpty()) {
requestedLeaderboardGroupNames.addAll(leaderboardGroupNames);
} else {
// No range supplied. Export all for now
requestedLeaderboardGroupNames.addAll(leaderboardGroups.keySet());
}
TopLevelMasterDataSerializer masterSerializer = new TopLevelMasterDataSerializer(leaderboardGroups,
getService().getAllEvents(), getService().getPersistentRegattasForRaceIDs(), getService().getAllMediaTracks());
JSONObject masterData = masterSerializer.serialize(requestedLeaderboardGroupNames);
String json = masterData.toJSONString();
return Response.ok(json, MediaType.APPLICATION_JSON).build();
}
}
@@ -9,7 +9,6 @@ import javax.ws.rs.core.Application;
public class RestSpiApplication extends Application {
public Set<Class<?>> getClasses() {
HashSet<Class<?>> classes = new HashSet<>();
classes.add(LeaderboardGroupsStructureResource.class);
return classes;
}
@@ -75,6 +75,7 @@ import com.sap.sailing.domain.leaderboard.ThresholdBasedResultDiscardingRule;
import com.sap.sailing.domain.leaderboard.impl.FlexibleLeaderboardImpl;
import com.sap.sailing.domain.leaderboard.impl.LowPoint;
import com.sap.sailing.domain.leaderboard.meta.LeaderboardGroupMetaLeaderboard;
import com.sap.sailing.domain.masterdataimport.TopLevelMasterData;
import com.sap.sailing.domain.persistence.PersistenceFactory;
import com.sap.sailing.domain.persistence.media.MediaDBFactory;
import com.sap.sailing.domain.racelog.CompetitorResults;
@@ -92,7 +93,6 @@ import com.sap.sailing.domain.tracking.impl.EmptyWindStore;
import com.sap.sailing.domain.tracking.impl.WindImpl;
import com.sap.sailing.mongodb.MongoDBService;
import com.sap.sailing.server.RacingEventService;
import com.sap.sailing.server.gateway.masterdata.TopLevelMasterData;
import com.sap.sailing.server.impl.RacingEventServiceImpl;
import com.sap.sailing.server.masterdata.MasterDataImporter;
import com.sap.sailing.server.operationaltransformation.DummyTrackedRace;
@@ -7,9 +7,6 @@ Bundle-Activator: com.sap.sailing.server.impl.Activator
Bundle-Vendor: SAP
Bundle-RequiredExecutionEnvironment: JavaSE-1.7
Import-Package: com.sap.sailing.server.gateway.deserialization,
com.sap.sailing.server.gateway.deserialization.masterdata.impl,
com.sap.sailing.server.gateway.masterdata,
com.sap.sailing.server.gateway.serialization.masterdata.impl,
org.json.simple,
org.json.simple.parser,
org.osgi.framework;version="1.3.0",
@@ -32,5 +32,5 @@
<booleanAttribute key="tracing" value="false"/>
<booleanAttribute key="useCustomFeatures" value="false"/>
<booleanAttribute key="useDefaultConfigArea" value="false"/>
<stringAttribute key="workspace_bundles" value="com.google.gwt.osgi@default:default,com.googlecode.java-diff-utils@default:default,com.mongodb.driver@default:default,com.sap.sailing.barbados.resultimport@default:default,com.sap.sailing.datamining.shared@default:default,com.sap.sailing.datamining@default:default,com.sap.sailing.declination@default:default,com.sap.sailing.domain.common@default:default,com.sap.sailing.domain.igtimiadapter.persistence@default:default,com.sap.sailing.domain.igtimiadapter@default:default,com.sap.sailing.domain.persistence@default:default,com.sap.sailing.domain.shared.android@default:default,com.sap.sailing.domain.swisstimingadapter.persistence@default:default,com.sap.sailing.domain.swisstimingadapter@4:true,com.sap.sailing.domain.swisstimingreplayadapter@4:true,com.sap.sailing.domain.tractracadapter.persistence@default:default,com.sap.sailing.domain.tractracadapter@4:true,com.sap.sailing.domain@default:default,com.sap.sailing.ess40.resultimport@default:default,com.sap.sailing.expeditionconnector@default:default,com.sap.sailing.freg.resultimport@default:default,com.sap.sailing.geocoding@default:default,com.sap.sailing.gwt.ui@5:true,com.sap.sailing.kiworesultimport@default:default,com.sap.sailing.manage2sail.resultimport@default:default,com.sap.sailing.mongodb@default:default,com.sap.sailing.nmeaconnector@default:default,com.sap.sailing.operationaltransformation@default:default,com.sap.sailing.resultimport@default:default,com.sap.sailing.sailwave.resultimport@default:default,com.sap.sailing.server.gateway.ess40@4:true,com.sap.sailing.server.gateway.masterdata*1.0.0.qualifier@default:default,com.sap.sailing.server.gateway.serialization@default:default,com.sap.sailing.server.gateway@5:true,com.sap.sailing.server.replication@4:true,com.sap.sailing.server.trackfiles@default:default,com.sap.sailing.server@default:default,com.sap.sailing.simulator@default:default,com.sap.sailing.udpconnector@default:default,com.sap.sailing.velum.resultimport@default:default,com.sap.sailing.www.events@4:true,com.sap.sailing.www@4:true,com.sap.sailing.xrr.resultimport@default:default,com.sap.sse.gwt@default:default,com.tractrac.clientmodule@default:default,de.csenk.gwt.ws@default:default,net.sf.marineapi@default:default,org.json.simple@default:default,org.moxieapps.gwt.highcharts@default:default"/>
<stringAttribute key="workspace_bundles" value="com.google.gwt.osgi@default:default,com.googlecode.java-diff-utils@default:default,com.mongodb.driver@default:default,com.sap.sailing.barbados.resultimport@default:default,com.sap.sailing.datamining.shared@default:default,com.sap.sailing.datamining@default:default,com.sap.sailing.declination@default:default,com.sap.sailing.domain.common@default:default,com.sap.sailing.domain.igtimiadapter.persistence@default:default,com.sap.sailing.domain.igtimiadapter@default:default,com.sap.sailing.domain.persistence@default:default,com.sap.sailing.domain.shared.android@default:default,com.sap.sailing.domain.swisstimingadapter.persistence@default:default,com.sap.sailing.domain.swisstimingadapter@4:true,com.sap.sailing.domain.swisstimingreplayadapter@4:true,com.sap.sailing.domain.tractracadapter.persistence@default:default,com.sap.sailing.domain.tractracadapter@4:true,com.sap.sailing.domain@default:default,com.sap.sailing.ess40.resultimport@default:default,com.sap.sailing.expeditionconnector@default:default,com.sap.sailing.freg.resultimport@default:default,com.sap.sailing.geocoding@default:default,com.sap.sailing.gwt.ui@5:true,com.sap.sailing.kiworesultimport@default:default,com.sap.sailing.manage2sail.resultimport@default:default,com.sap.sailing.mongodb@default:default,com.sap.sailing.nmeaconnector@default:default,com.sap.sailing.operationaltransformation@default:default,com.sap.sailing.resultimport@default:default,com.sap.sailing.sailwave.resultimport@default:default,com.sap.sailing.server.gateway.ess40@4:true,com.sap.sailing.server.gateway.serialization@default:default,com.sap.sailing.server.gateway@5:true,com.sap.sailing.server.replication@4:true,com.sap.sailing.server.trackfiles@default:default,com.sap.sailing.server@default:default,com.sap.sailing.simulator@default:default,com.sap.sailing.udpconnector@default:default,com.sap.sailing.velum.resultimport@default:default,com.sap.sailing.www.events@4:true,com.sap.sailing.www@4:true,com.sap.sailing.xrr.resultimport@default:default,com.sap.sse.gwt@default:default,com.tractrac.clientmodule@default:default,de.csenk.gwt.ws@default:default,net.sf.marineapi@default:default,org.json.simple@default:default,org.moxieapps.gwt.highcharts@default:default"/>
</launchConfiguration>
@@ -26,6 +26,6 @@
<booleanAttribute key="tracing" value="false"/>
<booleanAttribute key="useCustomFeatures" value="false"/>
<booleanAttribute key="useDefaultConfigArea" value="false"/>
<stringAttribute key="workspace_bundles" value="com.google.gwt.osgi@default:default,com.googlecode.java-diff-utils.test@default:false,com.googlecode.java-diff-utils@default:default,com.mongodb.driver@default:default,com.sap.sailing.barbados.resultimport@default:default,com.sap.sailing.datamining.shared@default:default,com.sap.sailing.datamining@default:default,com.sap.sailing.declination.test@default:false,com.sap.sailing.declination@default:default,com.sap.sailing.domain.common@default:default,com.sap.sailing.domain.igtimiadapter.persistence@default:default,com.sap.sailing.domain.igtimiadapter@default:default,com.sap.sailing.domain.persistence@default:default,com.sap.sailing.domain.shared.android@default:default,com.sap.sailing.domain.swisstimingadapter.persistence@default:default,com.sap.sailing.domain.swisstimingadapter@5:true,com.sap.sailing.domain.swisstimingreplayadapter@5:true,com.sap.sailing.domain.test@default:default,com.sap.sailing.domain.tractracadapter.persistence@default:default,com.sap.sailing.domain.tractracadapter.test@default:false,com.sap.sailing.domain.tractracadapter@5:true,com.sap.sailing.domain@default:default,com.sap.sailing.ess40.resultimport.test@default:false,com.sap.sailing.ess40.resultimport@default:default,com.sap.sailing.expeditionconnector.test@default:false,com.sap.sailing.expeditionconnector@default:default,com.sap.sailing.freg.resultimport.test@default:false,com.sap.sailing.freg.resultimport@default:default,com.sap.sailing.geocoding.test@default:false,com.sap.sailing.geocoding@default:default,com.sap.sailing.gwt.ui.test@default:false,com.sap.sailing.gwt.ui@default:default,com.sap.sailing.kiworesultimport.test@default:false,com.sap.sailing.kiworesultimport@default:default,com.sap.sailing.manage2sail.resultimport@default:default,com.sap.sailing.mongodb.test@default:false,com.sap.sailing.mongodb@default:default,com.sap.sailing.operationaltransformation.test@default:false,com.sap.sailing.operationaltransformation@default:default,com.sap.sailing.resultimport@default:default,com.sap.sailing.sailwave.resultimport@default:default,com.sap.sailing.server.gateway.ess40@default:default,com.sap.sailing.server.gateway.masterdata*1.0.0.qualifier@default:default,com.sap.sailing.server.gateway.serialization@default:default,com.sap.sailing.server.gateway.test@default:false,com.sap.sailing.server.gateway@default:default,com.sap.sailing.server.replication.test@default:false,com.sap.sailing.server.replication@default:default,com.sap.sailing.server.test@default:false,com.sap.sailing.server.trackfiles@default:default,com.sap.sailing.server@default:default,com.sap.sailing.simulator@default:default,com.sap.sailing.udpconnector@default:default,com.sap.sailing.velum.resultimport@default:default,com.sap.sailing.www.events@default:default,com.sap.sailing.www@default:default,com.sap.sailing.xmlexport@default:default,com.sap.sailing.xrr.resultimport.test@default:false,com.sap.sailing.xrr.resultimport@default:default,com.sap.sse.gwt@default:default,com.tractrac.clientmodule@default:default,de.csenk.gwt.ws@default:default,org.json.simple@default:default,org.moxieapps.gwt.highcharts@default:default"/>
<stringAttribute key="workspace_bundles" value="com.google.gwt.osgi@default:default,com.googlecode.java-diff-utils.test@default:false,com.googlecode.java-diff-utils@default:default,com.mongodb.driver@default:default,com.sap.sailing.barbados.resultimport@default:default,com.sap.sailing.datamining.shared@default:default,com.sap.sailing.datamining@default:default,com.sap.sailing.declination.test@default:false,com.sap.sailing.declination@default:default,com.sap.sailing.domain.common@default:default,com.sap.sailing.domain.igtimiadapter.persistence@default:default,com.sap.sailing.domain.igtimiadapter@default:default,com.sap.sailing.domain.persistence@default:default,com.sap.sailing.domain.shared.android@default:default,com.sap.sailing.domain.swisstimingadapter.persistence@default:default,com.sap.sailing.domain.swisstimingadapter@5:true,com.sap.sailing.domain.swisstimingreplayadapter@5:true,com.sap.sailing.domain.test@default:default,com.sap.sailing.domain.tractracadapter.persistence@default:default,com.sap.sailing.domain.tractracadapter.test@default:false,com.sap.sailing.domain.tractracadapter@5:true,com.sap.sailing.domain@default:default,com.sap.sailing.ess40.resultimport.test@default:false,com.sap.sailing.ess40.resultimport@default:default,com.sap.sailing.expeditionconnector.test@default:false,com.sap.sailing.expeditionconnector@default:default,com.sap.sailing.freg.resultimport.test@default:false,com.sap.sailing.freg.resultimport@default:default,com.sap.sailing.geocoding.test@default:false,com.sap.sailing.geocoding@default:default,com.sap.sailing.gwt.ui.test@default:false,com.sap.sailing.gwt.ui@default:default,com.sap.sailing.kiworesultimport.test@default:false,com.sap.sailing.kiworesultimport@default:default,com.sap.sailing.manage2sail.resultimport@default:default,com.sap.sailing.mongodb.test@default:false,com.sap.sailing.mongodb@default:default,com.sap.sailing.operationaltransformation.test@default:false,com.sap.sailing.operationaltransformation@default:default,com.sap.sailing.resultimport@default:default,com.sap.sailing.sailwave.resultimport@default:default,com.sap.sailing.server.gateway.ess40@default:default,com.sap.sailing.server.gateway.serialization@default:default,com.sap.sailing.server.gateway.test@default:false,com.sap.sailing.server.gateway@default:default,com.sap.sailing.server.replication.test@default:false,com.sap.sailing.server.replication@default:default,com.sap.sailing.server.test@default:false,com.sap.sailing.server.trackfiles@default:default,com.sap.sailing.server@default:default,com.sap.sailing.simulator@default:default,com.sap.sailing.udpconnector@default:default,com.sap.sailing.velum.resultimport@default:default,com.sap.sailing.www.events@default:default,com.sap.sailing.www@default:default,com.sap.sailing.xmlexport@default:default,com.sap.sailing.xrr.resultimport.test@default:false,com.sap.sailing.xrr.resultimport@default:default,com.sap.sse.gwt@default:default,com.tractrac.clientmodule@default:default,de.csenk.gwt.ws@default:default,org.json.simple@default:default,org.moxieapps.gwt.highcharts@default:default"/>
<stringAttribute key="yk-options" value="&#13;&#10;additional-options2=onexit\=snapshot&#13;&#10;"/>
</launchConfiguration>
@@ -26,6 +26,6 @@
<booleanAttribute key="tracing" value="false"/>
<booleanAttribute key="useCustomFeatures" value="false"/>
<booleanAttribute key="useDefaultConfigArea" value="false"/>
<stringAttribute key="workspace_bundles" value="com.google.gwt.osgi@default:default,com.googlecode.java-diff-utils@default:default,com.mongodb.driver@default:default,com.sap.sailing.barbados.resultimport@default:default,com.sap.sailing.datamining.shared@default:default,com.sap.sailing.datamining@default:default,com.sap.sailing.declination@default:default,com.sap.sailing.domain.common@default:default,com.sap.sailing.domain.igtimiadapter.persistence@default:default,com.sap.sailing.domain.igtimiadapter@default:default,com.sap.sailing.domain.persistence@default:default,com.sap.sailing.domain.shared.android@default:default,com.sap.sailing.domain.swisstimingadapter.persistence@default:default,com.sap.sailing.domain.swisstimingadapter@5:true,com.sap.sailing.domain.swisstimingreplayadapter@5:true,com.sap.sailing.domain.tractracadapter.persistence@default:default,com.sap.sailing.domain.tractracadapter@5:true,com.sap.sailing.domain@default:default,com.sap.sailing.ess40.resultimport@default:default,com.sap.sailing.expeditionconnector@default:default,com.sap.sailing.freg.resultimport@default:default,com.sap.sailing.geocoding@default:default,com.sap.sailing.gwt.ui@default:default,com.sap.sailing.kiworesultimport@default:default,com.sap.sailing.manage2sail.resultimport@default:default,com.sap.sailing.mongodb@default:default,com.sap.sailing.monitoring@5:true,com.sap.sailing.operationaltransformation@default:default,com.sap.sailing.resultimport@default:default,com.sap.sailing.sailwave.resultimport@default:default,com.sap.sailing.server.gateway.ess40@default:default,com.sap.sailing.server.gateway.masterdata*1.0.0.qualifier@default:default,com.sap.sailing.server.gateway.serialization@default:default,com.sap.sailing.server.gateway@default:default,com.sap.sailing.server.replication@default:default,com.sap.sailing.server.trackfiles@default:default,com.sap.sailing.server@default:default,com.sap.sailing.simulator@default:default,com.sap.sailing.udpconnector@default:default,com.sap.sailing.velum.resultimport@default:default,com.sap.sailing.www.events@default:default,com.sap.sailing.www@default:default,com.sap.sailing.xrr.resultimport@default:default,com.sap.sse.gwt@default:default,com.tractrac.clientmodule@default:default,de.csenk.gwt.ws@default:default,org.json.simple@default:default,org.moxieapps.gwt.highcharts@default:default"/>
<stringAttribute key="workspace_bundles" value="com.google.gwt.osgi@default:default,com.googlecode.java-diff-utils@default:default,com.mongodb.driver@default:default,com.sap.sailing.barbados.resultimport@default:default,com.sap.sailing.datamining.shared@default:default,com.sap.sailing.datamining@default:default,com.sap.sailing.declination@default:default,com.sap.sailing.domain.common@default:default,com.sap.sailing.domain.igtimiadapter.persistence@default:default,com.sap.sailing.domain.igtimiadapter@default:default,com.sap.sailing.domain.persistence@default:default,com.sap.sailing.domain.shared.android@default:default,com.sap.sailing.domain.swisstimingadapter.persistence@default:default,com.sap.sailing.domain.swisstimingadapter@5:true,com.sap.sailing.domain.swisstimingreplayadapter@5:true,com.sap.sailing.domain.tractracadapter.persistence@default:default,com.sap.sailing.domain.tractracadapter@5:true,com.sap.sailing.domain@default:default,com.sap.sailing.ess40.resultimport@default:default,com.sap.sailing.expeditionconnector@default:default,com.sap.sailing.freg.resultimport@default:default,com.sap.sailing.geocoding@default:default,com.sap.sailing.gwt.ui@default:default,com.sap.sailing.kiworesultimport@default:default,com.sap.sailing.manage2sail.resultimport@default:default,com.sap.sailing.mongodb@default:default,com.sap.sailing.monitoring@5:true,com.sap.sailing.operationaltransformation@default:default,com.sap.sailing.resultimport@default:default,com.sap.sailing.sailwave.resultimport@default:default,com.sap.sailing.server.gateway.ess40@default:default,com.sap.sailing.server.gateway.serialization@default:default,com.sap.sailing.server.gateway@default:default,com.sap.sailing.server.replication@default:default,com.sap.sailing.server.trackfiles@default:default,com.sap.sailing.server@default:default,com.sap.sailing.simulator@default:default,com.sap.sailing.udpconnector@default:default,com.sap.sailing.velum.resultimport@default:default,com.sap.sailing.www.events@default:default,com.sap.sailing.www@default:default,com.sap.sailing.xrr.resultimport@default:default,com.sap.sse.gwt@default:default,com.tractrac.clientmodule@default:default,de.csenk.gwt.ws@default:default,org.json.simple@default:default,org.moxieapps.gwt.highcharts@default:default"/>
<stringAttribute key="yk-options" value="&#13;&#10;additional-options2=onexit\=snapshot&#13;&#10;"/>
</launchConfiguration>
@@ -25,5 +25,5 @@
<booleanAttribute key="tracing" value="false"/>
<booleanAttribute key="useCustomFeatures" value="false"/>
<booleanAttribute key="useDefaultConfigArea" value="false"/>
<stringAttribute key="workspace_bundles" value="com.google.gwt.osgi@default:default,com.googlecode.java-diff-utils@default:default,com.mongodb.driver@default:default,com.sap.sailing.barbados.resultimport@default:default,com.sap.sailing.declination@default:default,com.sap.sailing.domain.common@default:default,com.sap.sailing.domain.igtimiadapter.persistence@default:default,com.sap.sailing.domain.igtimiadapter@default:default,com.sap.sailing.domain.persistence@default:default,com.sap.sailing.domain.shared.android@default:default,com.sap.sailing.domain.swisstimingadapter.persistence@default:default,com.sap.sailing.domain.swisstimingadapter@5:true,com.sap.sailing.domain.swisstimingreplayadapter@5:true,com.sap.sailing.domain.tractracadapter.persistence@default:default,com.sap.sailing.domain.tractracadapter@5:true,com.sap.sailing.domain@default:default,com.sap.sailing.ess40.resultimport@default:default,com.sap.sailing.expeditionconnector@default:default,com.sap.sailing.freg.resultimport@default:default,com.sap.sailing.geocoding@default:default,com.sap.sailing.gwt.ui@default:default,com.sap.sailing.kiworesultimport@default:default,com.sap.sailing.manage2sail.resultimport@default:default,com.sap.sailing.mongodb@default:default,com.sap.sailing.monitoring@default:default,com.sap.sailing.nmeaconnector@default:default,com.sap.sailing.operationaltransformation@default:default,com.sap.sailing.sailwave.resultimport@default:default,com.sap.sailing.server.gateway.ess40@default:default,com.sap.sailing.server.gateway.masterdata*1.0.0.qualifier@default:default,com.sap.sailing.server.gateway.serialization@default:default,com.sap.sailing.server.gateway@default:default,com.sap.sailing.server.replication@default:default,com.sap.sailing.server.trackfiles@default:default,com.sap.sailing.server@default:default,com.sap.sailing.simulator@default:default,com.sap.sailing.udpconnector@default:default,com.sap.sailing.velum.resultimport@default:default,com.sap.sailing.www.events@default:default,com.sap.sailing.www@default:default,com.sap.sailing.xrr.resultimport@default:default,com.sap.sse.gwt@default:default,com.tractrac.clientmodule@default:default,de.csenk.gwt.ws@default:default,net.sf.marineapi@default:default,org.json.simple@default:default,org.moxieapps.gwt.highcharts@default:default"/>
<stringAttribute key="workspace_bundles" value="com.google.gwt.osgi@default:default,com.googlecode.java-diff-utils@default:default,com.mongodb.driver@default:default,com.sap.sailing.barbados.resultimport@default:default,com.sap.sailing.declination@default:default,com.sap.sailing.domain.common@default:default,com.sap.sailing.domain.igtimiadapter.persistence@default:default,com.sap.sailing.domain.igtimiadapter@default:default,com.sap.sailing.domain.persistence@default:default,com.sap.sailing.domain.shared.android@default:default,com.sap.sailing.domain.swisstimingadapter.persistence@default:default,com.sap.sailing.domain.swisstimingadapter@5:true,com.sap.sailing.domain.swisstimingreplayadapter@5:true,com.sap.sailing.domain.tractracadapter.persistence@default:default,com.sap.sailing.domain.tractracadapter@5:true,com.sap.sailing.domain@default:default,com.sap.sailing.ess40.resultimport@default:default,com.sap.sailing.expeditionconnector@default:default,com.sap.sailing.freg.resultimport@default:default,com.sap.sailing.geocoding@default:default,com.sap.sailing.gwt.ui@default:default,com.sap.sailing.kiworesultimport@default:default,com.sap.sailing.manage2sail.resultimport@default:default,com.sap.sailing.mongodb@default:default,com.sap.sailing.monitoring@default:default,com.sap.sailing.nmeaconnector@default:default,com.sap.sailing.operationaltransformation@default:default,com.sap.sailing.sailwave.resultimport@default:default,com.sap.sailing.server.gateway.ess40@default:default,com.sap.sailing.server.gateway.serialization@default:default,com.sap.sailing.server.gateway@default:default,com.sap.sailing.server.replication@default:default,com.sap.sailing.server.trackfiles@default:default,com.sap.sailing.server@default:default,com.sap.sailing.simulator@default:default,com.sap.sailing.udpconnector@default:default,com.sap.sailing.velum.resultimport@default:default,com.sap.sailing.www.events@default:default,com.sap.sailing.www@default:default,com.sap.sailing.xrr.resultimport@default:default,com.sap.sse.gwt@default:default,com.tractrac.clientmodule@default:default,de.csenk.gwt.ws@default:default,net.sf.marineapi@default:default,org.json.simple@default:default,org.moxieapps.gwt.highcharts@default:default"/>
</launchConfiguration>
@@ -26,6 +26,6 @@
<booleanAttribute key="tracing" value="false"/>
<booleanAttribute key="useCustomFeatures" value="false"/>
<booleanAttribute key="useDefaultConfigArea" value="false"/>
<stringAttribute key="workspace_bundles" value="com.google.gwt.osgi@default:default,com.googlecode.java-diff-utils@default:default,com.mongodb.driver@default:default,com.sap.sailing.barbados.resultimport@default:default,com.sap.sailing.datamining.shared@default:default,com.sap.sailing.datamining@default:default,com.sap.sailing.declination@default:default,com.sap.sailing.domain.common@default:default,com.sap.sailing.domain.igtimiadapter.persistence@default:default,com.sap.sailing.domain.igtimiadapter@default:default,com.sap.sailing.domain.persistence@default:default,com.sap.sailing.domain.shared.android@default:default,com.sap.sailing.domain.swisstimingadapter.persistence@default:default,com.sap.sailing.domain.swisstimingadapter@4:true,com.sap.sailing.domain.swisstimingreplayadapter@4:true,com.sap.sailing.domain.tractracadapter.persistence@default:default,com.sap.sailing.domain.tractracadapter@4:true,com.sap.sailing.domain@default:default,com.sap.sailing.ess40.resultimport@default:default,com.sap.sailing.expeditionconnector@default:default,com.sap.sailing.freg.resultimport@default:default,com.sap.sailing.geocoding@default:default,com.sap.sailing.gwt.ui@5:true,com.sap.sailing.kiworesultimport@default:default,com.sap.sailing.manage2sail.resultimport@default:default,com.sap.sailing.mongodb@default:default,com.sap.sailing.nmeaconnector@default:default,com.sap.sailing.operationaltransformation@default:default,com.sap.sailing.resultimport@default:default,com.sap.sailing.sailwave.resultimport@default:default,com.sap.sailing.server.gateway.ess40@4:true,com.sap.sailing.server.gateway.masterdata*1.0.0.qualifier@default:default,com.sap.sailing.server.gateway.serialization@default:default,com.sap.sailing.server.gateway@5:true,com.sap.sailing.server.replication@4:true,com.sap.sailing.server.trackfiles@default:default,com.sap.sailing.server@default:default,com.sap.sailing.simulator@default:default,com.sap.sailing.udpconnector@default:default,com.sap.sailing.velum.resultimport@default:default,com.sap.sailing.www.events@4:true,com.sap.sailing.www@4:true,com.sap.sailing.xrr.resultimport@default:default,com.sap.sse.gwt@default:default,com.tractrac.clientmodule@default:default,de.csenk.gwt.ws@default:default,net.sf.marineapi@default:default,org.json.simple@default:default,org.moxieapps.gwt.highcharts@default:default"/>
<stringAttribute key="workspace_bundles" value="com.google.gwt.osgi@default:default,com.googlecode.java-diff-utils@default:default,com.mongodb.driver@default:default,com.sap.sailing.barbados.resultimport@default:default,com.sap.sailing.datamining.shared@default:default,com.sap.sailing.datamining@default:default,com.sap.sailing.declination@default:default,com.sap.sailing.domain.common@default:default,com.sap.sailing.domain.igtimiadapter.persistence@default:default,com.sap.sailing.domain.igtimiadapter@default:default,com.sap.sailing.domain.persistence@default:default,com.sap.sailing.domain.shared.android@default:default,com.sap.sailing.domain.swisstimingadapter.persistence@default:default,com.sap.sailing.domain.swisstimingadapter@4:true,com.sap.sailing.domain.swisstimingreplayadapter@4:true,com.sap.sailing.domain.tractracadapter.persistence@default:default,com.sap.sailing.domain.tractracadapter@4:true,com.sap.sailing.domain@default:default,com.sap.sailing.ess40.resultimport@default:default,com.sap.sailing.expeditionconnector@default:default,com.sap.sailing.freg.resultimport@default:default,com.sap.sailing.geocoding@default:default,com.sap.sailing.gwt.ui@5:true,com.sap.sailing.kiworesultimport@default:default,com.sap.sailing.manage2sail.resultimport@default:default,com.sap.sailing.mongodb@default:default,com.sap.sailing.nmeaconnector@default:default,com.sap.sailing.operationaltransformation@default:default,com.sap.sailing.resultimport@default:default,com.sap.sailing.sailwave.resultimport@default:default,com.sap.sailing.server.gateway.ess40@4:true,com.sap.sailing.server.gateway.serialization@default:default,com.sap.sailing.server.gateway@5:true,com.sap.sailing.server.replication@4:true,com.sap.sailing.server.trackfiles@default:default,com.sap.sailing.server@default:default,com.sap.sailing.simulator@default:default,com.sap.sailing.udpconnector@default:default,com.sap.sailing.velum.resultimport@default:default,com.sap.sailing.www.events@4:true,com.sap.sailing.www@4:true,com.sap.sailing.xrr.resultimport@default:default,com.sap.sse.gwt@default:default,com.tractrac.clientmodule@default:default,de.csenk.gwt.ws@default:default,net.sf.marineapi@default:default,org.json.simple@default:default,org.moxieapps.gwt.highcharts@default:default"/>
<stringAttribute key="yk-options" value="&#13;&#10;additional-options2=onexit\=snapshot&#13;&#10;"/>
</launchConfiguration>
@@ -26,6 +26,6 @@
<booleanAttribute key="tracing" value="false"/>
<booleanAttribute key="useCustomFeatures" value="false"/>
<booleanAttribute key="useDefaultConfigArea" value="false"/>
<stringAttribute key="workspace_bundles" value="com.google.gwt.osgi@default:default,com.googlecode.java-diff-utils@default:default,com.mongodb.driver@default:default,com.sap.sailing.barbados.resultimport@default:default,com.sap.sailing.declination@default:default,com.sap.sailing.domain.common@default:default,com.sap.sailing.domain.igtimiadapter.persistence@default:default,com.sap.sailing.domain.igtimiadapter@default:default,com.sap.sailing.domain.persistence@default:default,com.sap.sailing.domain.shared.android@default:default,com.sap.sailing.domain.swisstimingadapter.persistence@default:default,com.sap.sailing.domain.swisstimingadapter@5:true,com.sap.sailing.domain.swisstimingreplayadapter@5:true,com.sap.sailing.domain.tractracadapter.persistence@default:default,com.sap.sailing.domain.tractracadapter@5:true,com.sap.sailing.domain@default:default,com.sap.sailing.ess40.resultimport@default:default,com.sap.sailing.expeditionconnector@default:default,com.sap.sailing.freg.resultimport@default:default,com.sap.sailing.geocoding@default:default,com.sap.sailing.gwt.ui@default:default,com.sap.sailing.kiworesultimport@default:default,com.sap.sailing.manage2sail.resultimport@default:default,com.sap.sailing.mongodb@default:default,com.sap.sailing.operationaltransformation@default:default,com.sap.sailing.resultimport@default:default,com.sap.sailing.sailwave.resultimport@default:default,com.sap.sailing.server.gateway.ess40@default:default,com.sap.sailing.server.gateway.masterdata*1.0.0.qualifier@default:default,com.sap.sailing.server.gateway.serialization@default:default,com.sap.sailing.server.gateway@default:default,com.sap.sailing.server.replication@default:default,com.sap.sailing.server.trackfiles@default:default,com.sap.sailing.server@default:default,com.sap.sailing.simulator@default:default,com.sap.sailing.udpconnector@default:default,com.sap.sailing.velum.resultimport@default:default,com.sap.sailing.www.events@default:default,com.sap.sailing.www@default:default,com.sap.sailing.xrr.resultimport@default:default,com.sap.sse.gwt@default:default,com.tractrac.clientmodule@default:default,de.csenk.gwt.ws@default:default,org.json.simple@default:default,org.moxieapps.gwt.highcharts@default:default"/>
<stringAttribute key="workspace_bundles" value="com.google.gwt.osgi@default:default,com.googlecode.java-diff-utils@default:default,com.mongodb.driver@default:default,com.sap.sailing.barbados.resultimport@default:default,com.sap.sailing.declination@default:default,com.sap.sailing.domain.common@default:default,com.sap.sailing.domain.igtimiadapter.persistence@default:default,com.sap.sailing.domain.igtimiadapter@default:default,com.sap.sailing.domain.persistence@default:default,com.sap.sailing.domain.shared.android@default:default,com.sap.sailing.domain.swisstimingadapter.persistence@default:default,com.sap.sailing.domain.swisstimingadapter@5:true,com.sap.sailing.domain.swisstimingreplayadapter@5:true,com.sap.sailing.domain.tractracadapter.persistence@default:default,com.sap.sailing.domain.tractracadapter@5:true,com.sap.sailing.domain@default:default,com.sap.sailing.ess40.resultimport@default:default,com.sap.sailing.expeditionconnector@default:default,com.sap.sailing.freg.resultimport@default:default,com.sap.sailing.geocoding@default:default,com.sap.sailing.gwt.ui@default:default,com.sap.sailing.kiworesultimport@default:default,com.sap.sailing.manage2sail.resultimport@default:default,com.sap.sailing.mongodb@default:default,com.sap.sailing.operationaltransformation@default:default,com.sap.sailing.resultimport@default:default,com.sap.sailing.sailwave.resultimport@default:default,com.sap.sailing.server.gateway.ess40@default:default,com.sap.sailing.server.gateway.serialization@default:default,com.sap.sailing.server.gateway@default:default,com.sap.sailing.server.replication@default:default,com.sap.sailing.server.trackfiles@default:default,com.sap.sailing.server@default:default,com.sap.sailing.simulator@default:default,com.sap.sailing.udpconnector@default:default,com.sap.sailing.velum.resultimport@default:default,com.sap.sailing.www.events@default:default,com.sap.sailing.www@default:default,com.sap.sailing.xrr.resultimport@default:default,com.sap.sse.gwt@default:default,com.tractrac.clientmodule@default:default,de.csenk.gwt.ws@default:default,org.json.simple@default:default,org.moxieapps.gwt.highcharts@default:default"/>
<stringAttribute key="yk-options" value="&#13;&#10;additional-options2=onexit\=snapshot&#13;&#10;"/>
</launchConfiguration>
@@ -26,5 +26,5 @@
<booleanAttribute key="tracing" value="false"/>
<booleanAttribute key="useCustomFeatures" value="false"/>
<booleanAttribute key="useDefaultConfigArea" value="true"/>
<stringAttribute key="workspace_bundles" value="com.google.gwt.osgi@default:default,com.googlecode.java-diff-utils@default:default,com.mongodb.driver@default:default,com.sap.sailing.barbados.resultimport@default:default,com.sap.sailing.declination@default:default,com.sap.sailing.domain.common@default:default,com.sap.sailing.domain.igtimiadapter.persistence@default:default,com.sap.sailing.domain.igtimiadapter@default:default,com.sap.sailing.domain.persistence@default:default,com.sap.sailing.domain.shared.android@default:default,com.sap.sailing.domain.swisstimingadapter.persistence@default:default,com.sap.sailing.domain.swisstimingadapter@5:true,com.sap.sailing.domain.swisstimingreplayadapter@5:true,com.sap.sailing.domain.tractracadapter.persistence@default:default,com.sap.sailing.domain.tractracadapter@5:true,com.sap.sailing.domain@default:default,com.sap.sailing.expeditionconnector@default:default,com.sap.sailing.freg.resultimport@default:default,com.sap.sailing.geocoding@default:default,com.sap.sailing.gwt.ui@default:default,com.sap.sailing.kiworesultimport@default:default,com.sap.sailing.manage2sail.resultimport@default:default,com.sap.sailing.mongodb@default:default,com.sap.sailing.operationaltransformation@default:default,com.sap.sailing.resultimport@default:default,com.sap.sailing.sailwave.resultimport@default:default,com.sap.sailing.server.gateway.ess40@default:default,com.sap.sailing.server.gateway.masterdata*1.0.0.qualifier@default:default,com.sap.sailing.server.gateway@default:default,com.sap.sailing.server.replication@default:default,com.sap.sailing.server.trackfiles@default:default,com.sap.sailing.server@default:default,com.sap.sailing.simulator@default:default,com.sap.sailing.udpconnector@default:default,com.sap.sailing.velum.resultimport@default:default,com.sap.sailing.www.events@default:default,com.sap.sailing.www@default:default,com.sap.sailing.xrr.resultimport@default:default,com.sap.sse.gwt@default:default,com.tractrac.clientmodule@default:default,de.csenk.gwt.ws@default:default,org.json.simple@default:default,org.moxieapps.gwt.highcharts@default:default"/>
<stringAttribute key="workspace_bundles" value="com.google.gwt.osgi@default:default,com.googlecode.java-diff-utils@default:default,com.mongodb.driver@default:default,com.sap.sailing.barbados.resultimport@default:default,com.sap.sailing.declination@default:default,com.sap.sailing.domain.common@default:default,com.sap.sailing.domain.igtimiadapter.persistence@default:default,com.sap.sailing.domain.igtimiadapter@default:default,com.sap.sailing.domain.persistence@default:default,com.sap.sailing.domain.shared.android@default:default,com.sap.sailing.domain.swisstimingadapter.persistence@default:default,com.sap.sailing.domain.swisstimingadapter@5:true,com.sap.sailing.domain.swisstimingreplayadapter@5:true,com.sap.sailing.domain.tractracadapter.persistence@default:default,com.sap.sailing.domain.tractracadapter@5:true,com.sap.sailing.domain@default:default,com.sap.sailing.expeditionconnector@default:default,com.sap.sailing.freg.resultimport@default:default,com.sap.sailing.geocoding@default:default,com.sap.sailing.gwt.ui@default:default,com.sap.sailing.kiworesultimport@default:default,com.sap.sailing.manage2sail.resultimport@default:default,com.sap.sailing.mongodb@default:default,com.sap.sailing.operationaltransformation@default:default,com.sap.sailing.resultimport@default:default,com.sap.sailing.sailwave.resultimport@default:default,com.sap.sailing.server.gateway.ess40@default:default,com.sap.sailing.server.gateway@default:default,com.sap.sailing.server.replication@default:default,com.sap.sailing.server.trackfiles@default:default,com.sap.sailing.server@default:default,com.sap.sailing.simulator@default:default,com.sap.sailing.udpconnector@default:default,com.sap.sailing.velum.resultimport@default:default,com.sap.sailing.www.events@default:default,com.sap.sailing.www@default:default,com.sap.sailing.xrr.resultimport@default:default,com.sap.sse.gwt@default:default,com.tractrac.clientmodule@default:default,de.csenk.gwt.ws@default:default,org.json.simple@default:default,org.moxieapps.gwt.highcharts@default:default"/>
</launchConfiguration>
@@ -25,5 +25,5 @@
<booleanAttribute key="tracing" value="false"/>
<booleanAttribute key="useCustomFeatures" value="false"/>
<booleanAttribute key="useDefaultConfigArea" value="false"/>
<stringAttribute key="workspace_bundles" value="com.google.gwt.osgi@default:default,com.googlecode.java-diff-utils@default:default,com.mongodb.driver@default:default,com.sap.sailing.barbados.resultimport@default:default,com.sap.sailing.declination@default:default,com.sap.sailing.domain.common@default:default,com.sap.sailing.domain.igtimiadapter.persistence@default:default,com.sap.sailing.domain.igtimiadapter@default:default,com.sap.sailing.domain.persistence@default:default,com.sap.sailing.domain.shared.android@default:default,com.sap.sailing.domain.swisstimingadapter.persistence@default:default,com.sap.sailing.domain.swisstimingadapter@5:true,com.sap.sailing.domain.swisstimingreplayadapter@5:true,com.sap.sailing.domain.tractracadapter.persistence@default:default,com.sap.sailing.domain.tractracadapter@5:true,com.sap.sailing.domain@default:default,com.sap.sailing.ess40.resultimport@default:default,com.sap.sailing.expeditionconnector@default:default,com.sap.sailing.freg.resultimport@default:default,com.sap.sailing.geocoding@default:default,com.sap.sailing.gwt.ui@default:default,com.sap.sailing.kiworesultimport@default:default,com.sap.sailing.manage2sail.resultimport@default:default,com.sap.sailing.mongodb@default:default,com.sap.sailing.operationaltransformation@default:default,com.sap.sailing.sailwave.resultimport@default:default,com.sap.sailing.server.gateway.ess40@default:default,com.sap.sailing.server.gateway.masterdata*1.0.0.qualifier@default:default,com.sap.sailing.server.gateway@default:default,com.sap.sailing.server.replication@default:default,com.sap.sailing.server.trackfiles@default:default,com.sap.sailing.server@default:default,com.sap.sailing.simulator@default:default,com.sap.sailing.udpconnector@default:default,com.sap.sailing.velum.resultimport@default:default,com.sap.sailing.www.events@default:default,com.sap.sailing.www@default:default,com.sap.sailing.xrr.resultimport@default:default,com.sap.sse.gwt@default:default,com.tractrac.clientmodule@default:default,de.csenk.gwt.ws@default:default,org.json.simple@default:default,org.moxieapps.gwt.highcharts@default:default"/>
<stringAttribute key="workspace_bundles" value="com.google.gwt.osgi@default:default,com.googlecode.java-diff-utils@default:default,com.mongodb.driver@default:default,com.sap.sailing.barbados.resultimport@default:default,com.sap.sailing.declination@default:default,com.sap.sailing.domain.common@default:default,com.sap.sailing.domain.igtimiadapter.persistence@default:default,com.sap.sailing.domain.igtimiadapter@default:default,com.sap.sailing.domain.persistence@default:default,com.sap.sailing.domain.shared.android@default:default,com.sap.sailing.domain.swisstimingadapter.persistence@default:default,com.sap.sailing.domain.swisstimingadapter@5:true,com.sap.sailing.domain.swisstimingreplayadapter@5:true,com.sap.sailing.domain.tractracadapter.persistence@default:default,com.sap.sailing.domain.tractracadapter@5:true,com.sap.sailing.domain@default:default,com.sap.sailing.ess40.resultimport@default:default,com.sap.sailing.expeditionconnector@default:default,com.sap.sailing.freg.resultimport@default:default,com.sap.sailing.geocoding@default:default,com.sap.sailing.gwt.ui@default:default,com.sap.sailing.kiworesultimport@default:default,com.sap.sailing.manage2sail.resultimport@default:default,com.sap.sailing.mongodb@default:default,com.sap.sailing.operationaltransformation@default:default,com.sap.sailing.sailwave.resultimport@default:default,com.sap.sailing.server.gateway.ess40@default:default,com.sap.sailing.server.gateway@default:default,com.sap.sailing.server.replication@default:default,com.sap.sailing.server.trackfiles@default:default,com.sap.sailing.server@default:default,com.sap.sailing.simulator@default:default,com.sap.sailing.udpconnector@default:default,com.sap.sailing.velum.resultimport@default:default,com.sap.sailing.www.events@default:default,com.sap.sailing.www@default:default,com.sap.sailing.xrr.resultimport@default:default,com.sap.sse.gwt@default:default,com.tractrac.clientmodule@default:default,de.csenk.gwt.ws@default:default,org.json.simple@default:default,org.moxieapps.gwt.highcharts@default:default"/>
</launchConfiguration>
@@ -8,8 +8,8 @@ import com.sap.sailing.domain.base.DomainFactory;
import com.sap.sailing.domain.common.MasterDataImportObjectCreationCount;
import com.sap.sailing.domain.common.impl.MasterDataImportObjectCreationCountImpl;
import com.sap.sailing.domain.common.media.MediaTrack;
import com.sap.sailing.domain.masterdataimport.TopLevelMasterData;
import com.sap.sailing.server.RacingEventService;
import com.sap.sailing.server.gateway.masterdata.TopLevelMasterData;
import com.sap.sailing.server.operationaltransformation.ImportMasterDataOperation;
public class MasterDataImporter {
@@ -30,6 +30,7 @@ import com.sap.sailing.domain.leaderboard.LeaderboardGroup;
import com.sap.sailing.domain.leaderboard.RegattaLeaderboard;
import com.sap.sailing.domain.leaderboard.ThresholdBasedResultDiscardingRule;
import com.sap.sailing.domain.leaderboard.meta.LeaderboardGroupMetaLeaderboard;
import com.sap.sailing.domain.masterdataimport.TopLevelMasterData;
import com.sap.sailing.domain.masterdataimport.WindTrackMasterData;
import com.sap.sailing.domain.racelog.RaceLog;
import com.sap.sailing.domain.racelog.RaceLogEvent;
@@ -40,7 +41,6 @@ import com.sap.sailing.domain.tracking.Wind;
import com.sap.sailing.domain.tracking.WindTrack;
import com.sap.sailing.server.RacingEventService;
import com.sap.sailing.server.RacingEventServiceOperation;
import com.sap.sailing.server.gateway.masterdata.TopLevelMasterData;
public class ImportMasterDataOperation extends
AbstractRacingEventServiceOperation<MasterDataImportObjectCreationCountImpl> {