# revamped the configuration system to support remote configuration of racing procedures

This commit is contained in:
Lukas Niemeier committed 2013-11-25 00:01:25 +01:00
1 parent d65519922c
commit 773670d608
52 files changed
+1316 -385

No files matched your search

@@ -1,5 +1,8 @@
package com.sap.sailing.domain.common.racelog;
import java.util.ArrayList;
import java.util.List;
public enum Flags {
NONE,
ALPHA,
@@ -20,5 +23,15 @@ public enum Flags {
AP,
ESSONE,
ESSTWO,
ESSTHREE
ESSTHREE;
public static Flags[] validValues() {
List<Flags> validValues = new ArrayList<Flags>();
for (Flags flag : values()) {
if (flag != NONE) {
validValues.add(flag);
}
}
return validValues.toArray(new Flags[validValues.size()]);
}
}
@@ -10,7 +10,10 @@ import com.sap.sailing.domain.racelog.state.racingprocedure.RacingProcedure;
/**
* Aggregate interface holding configuration options for all {@link RacingProcedure}s.
*/
public interface RacingProceduresConfiguration extends RRS26Configuration, GateStartConfiguration, ESSConfiguration,
Serializable {
public interface RacingProceduresConfiguration extends Serializable {
RRS26Configuration getRRS26Configuration();
GateStartConfiguration getGateStartConfiguration();
ESSConfiguration getESSConfiguration();
}
@@ -0,0 +1,14 @@
package com.sap.sailing.domain.base.configuration.impl;
import com.sap.sailing.domain.base.configuration.procedures.ESSConfiguration;
public class ESSConfigurationImpl extends RacingProcedureConfigurationImpl implements ESSConfiguration {
private static final long serialVersionUID = 5406098147408723197L;
protected ESSConfiguration copy() {
ESSConfigurationImpl copy = (ESSConfigurationImpl) super.copy(new ESSConfigurationImpl());
return copy;
}
}
@@ -0,0 +1,14 @@
package com.sap.sailing.domain.base.configuration.impl;
import com.sap.sailing.domain.base.configuration.procedures.GateStartConfiguration;
public class GateStartConfigurationImpl extends RacingProcedureConfigurationImpl implements GateStartConfiguration {
private static final long serialVersionUID = 1862408542829215027L;
protected GateStartConfiguration copy() {
GateStartConfigurationImpl copy = (GateStartConfigurationImpl) super.copy(new GateStartConfigurationImpl());
return copy;
}
}
@@ -0,0 +1,30 @@
package com.sap.sailing.domain.base.configuration.impl;
import java.util.List;
import com.sap.sailing.domain.base.configuration.procedures.RRS26Configuration;
import com.sap.sailing.domain.common.racelog.Flags;
public class RRS26ConfigurationImpl extends RacingProcedureConfigurationImpl implements
RRS26Configuration {
private static final long serialVersionUID = 260941807346644026L;
private List<Flags> startModeFlags;
@Override
public List<Flags> getStartModeFlags() {
return startModeFlags;
}
public void setStartModeFlags(List<Flags> flags) {
this.startModeFlags = flags;
}
protected RRS26Configuration copy() {
RRS26ConfigurationImpl copy = (RRS26ConfigurationImpl) super.copy(new RRS26ConfigurationImpl());
copy.setStartModeFlags(startModeFlags);
return copy;
}
}
@@ -0,0 +1,40 @@
package com.sap.sailing.domain.base.configuration.impl;
import com.sap.sailing.domain.base.configuration.RacingProcedureConfiguration;
import com.sap.sailing.domain.common.racelog.Flags;
public class RacingProcedureConfigurationImpl implements RacingProcedureConfiguration {
private static final long serialVersionUID = 8501755084811977792L;
private Flags classFlag;
private Boolean hasInidividualRecall;@Override
public Flags getClassFlag() {
return classFlag;
}
public void setClassFlag(Flags classFlag) {
this.classFlag = classFlag;
}
@Override
public Boolean hasInidividualRecall() {
return hasInidividualRecall;
}
public void setHasInidividualRecall(Boolean hasInidividualRecall) {
this.hasInidividualRecall = hasInidividualRecall;
}
protected RacingProcedureConfiguration copy() {
return copy(new RacingProcedureConfigurationImpl());
}
protected RacingProcedureConfiguration copy(RacingProcedureConfigurationImpl target) {
target.setClassFlag(this.getClassFlag());
target.setHasInidividualRecall(this.hasInidividualRecall());
return target;
}
}
@@ -1,55 +1,50 @@
package com.sap.sailing.domain.base.configuration.impl;
import java.util.List;
import com.sap.sailing.domain.base.configuration.RacingProceduresConfiguration;
import com.sap.sailing.domain.common.racelog.Flags;
import com.sap.sailing.domain.base.configuration.procedures.ESSConfiguration;
import com.sap.sailing.domain.base.configuration.procedures.GateStartConfiguration;
import com.sap.sailing.domain.base.configuration.procedures.RRS26Configuration;
public class RacingProceduresConfigurationImpl implements RacingProceduresConfiguration {
private static final long serialVersionUID = 8501755084811977792L;
private Flags classFlag;
private Boolean hasInidividualRecall;
private List<Flags> startModeFlags;
// GENERAL
private RRS26Configuration rrs26Configuration;
private GateStartConfiguration gateStartConfiguration;
private ESSConfiguration essConfiguration;
@Override
public Flags getClassFlag() {
return classFlag;
public RRS26Configuration getRRS26Configuration() {
return rrs26Configuration;
}
public void setClassFlag(Flags classFlag) {
this.classFlag = classFlag;
public void setRRS26Configuration(RRS26Configuration rrs26Configuration) {
this.rrs26Configuration = rrs26Configuration;
}
@Override
public Boolean hasInidividualRecall() {
return hasInidividualRecall;
public GateStartConfiguration getGateStartConfiguration() {
return gateStartConfiguration;
}
public void setHasInidividualRecall(Boolean hasInidividualRecall) {
this.hasInidividualRecall = hasInidividualRecall;
public void setGateStartConfiguration(GateStartConfiguration gateStartConfiguration) {
this.gateStartConfiguration = gateStartConfiguration;
}
// RRS26
@Override
public List<Flags> getStartModeFlags() {
return startModeFlags;
}
public void setStartModeFlags(List<Flags> flags) {
this.startModeFlags = flags;
public ESSConfiguration getESSConfiguration() {
return essConfiguration;
}
public void setESSConfiguration(ESSConfiguration essConfiguration) {
this.essConfiguration = essConfiguration;
}
protected RacingProceduresConfiguration copy() {
RacingProceduresConfigurationImpl copy = new RacingProceduresConfigurationImpl();
copy.setClassFlag(classFlag);
copy.setHasInidividualRecall(hasInidividualRecall);
copy.setStartModeFlags(startModeFlags);
copy.setRRS26Configuration(rrs26Configuration);
copy.setGateStartConfiguration(gateStartConfiguration);
copy.setESSConfiguration(essConfiguration);
return copy;
}
@@ -3,9 +3,11 @@ package com.sap.sailing.domain.base.racegroup;
import com.sap.sailing.domain.base.BoatClass;
import com.sap.sailing.domain.base.CourseArea;
import com.sap.sailing.domain.base.Fleet;
import com.sap.sailing.domain.base.configuration.RacingProceduresConfiguration;
import com.sap.sailing.domain.common.CourseDesignerMode;
import com.sap.sailing.domain.common.Named;
import com.sap.sailing.domain.common.racelog.RacingProcedureType;
import com.sap.sailing.domain.racelog.state.racingprocedure.RacingProcedure;
/**
* A {@link RaceGroup} is an abstract representation of a set of races managed in fleets and series.
@@ -44,12 +46,17 @@ public interface RaceGroup extends Named {
public Iterable<SeriesWithRows> getSeries();
/**
* Gets the default {@link RacingProcedureType} of this RaceGroup's races.
* Gets the default {@link RacingProcedureType} of this {@link RaceGroup}'s races.
*/
public RacingProcedureType getDefaultRacingProcedureType();
/**
* Gets the default {@link CourseDesignerMode} of this RaceGroup's races.
* Gets the default {@link CourseDesignerMode} of this {@link RaceGroup}'s races.
*/
public CourseDesignerMode getDefaultCourseDesignerMode();
/**
* Gets configuration objects for {@link RacingProcedure}s of this {@link RaceGroup}'s races.
*/
public RacingProceduresConfiguration getRacingProceduresConfiguration();
}
@@ -2,6 +2,7 @@ package com.sap.sailing.domain.base.racegroup.impl;
import com.sap.sailing.domain.base.BoatClass;
import com.sap.sailing.domain.base.CourseArea;
import com.sap.sailing.domain.base.configuration.RacingProceduresConfiguration;
import com.sap.sailing.domain.base.racegroup.RaceGroup;
import com.sap.sailing.domain.base.racegroup.SeriesWithRows;
import com.sap.sailing.domain.common.CourseDesignerMode;
@@ -17,15 +18,18 @@ public class RaceGroupImpl extends NamedImpl implements RaceGroup {
private final Iterable<SeriesWithRows> series;
private final RacingProcedureType defaultRacingProcedureType;
private final CourseDesignerMode defaultCourseDesignerMode;
private final RacingProceduresConfiguration proceduresConfiguration;
public RaceGroupImpl(String name, BoatClass boatClass, CourseArea courseArea, Iterable<SeriesWithRows> series,
RacingProcedureType defaultRacingProcedureType, CourseDesignerMode defaultCourseDesignerMode) {
RacingProcedureType defaultRacingProcedureType, CourseDesignerMode defaultCourseDesignerMode,
RacingProceduresConfiguration proceduresConfiguration) {
super(name);
this.boatClass = boatClass;
this.courseArea = courseArea;
this.series = series;
this.defaultRacingProcedureType = defaultRacingProcedureType;
this.defaultCourseDesignerMode = defaultCourseDesignerMode;
this.proceduresConfiguration = proceduresConfiguration;
}
public CourseArea getDefaultCourseArea() {
@@ -50,4 +54,9 @@ public class RaceGroupImpl extends NamedImpl implements RaceGroup {
return defaultCourseDesignerMode;
}
@Override
public RacingProceduresConfiguration getRacingProceduresConfiguration() {
return proceduresConfiguration;
}
}
@@ -27,11 +27,11 @@ public class ReadonlyRacingProcedureFactory implements RacingProcedureFactory {
RacingProceduresConfiguration loadedConfiguration = configuration.load();
switch (type) {
case ESS:
return new ESSRacingProcedureImpl(raceLog, author, factory, loadedConfiguration);
return new ESSRacingProcedureImpl(raceLog, author, factory, loadedConfiguration.getESSConfiguration());
case GateStart:
return new GateStartRacingProcedureImpl(raceLog, author, factory, loadedConfiguration);
return new GateStartRacingProcedureImpl(raceLog, author, factory, loadedConfiguration.getGateStartConfiguration());
case RRS26:
return new RRS26RacingProcedureImpl(raceLog, author, factory, loadedConfiguration);
return new RRS26RacingProcedureImpl(raceLog, author, factory, loadedConfiguration.getRRS26Configuration());
default:
throw new UnsupportedOperationException("Unknown racing procedure " + type.toString());
}
@@ -27,7 +27,6 @@ import com.google.gwt.user.cellview.client.Column;
import com.google.gwt.user.cellview.client.ColumnSortEvent;
import com.google.gwt.user.cellview.client.ColumnSortEvent.ListHandler;
import com.google.gwt.user.cellview.client.TextColumn;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.Anchor;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.DialogBox;
@@ -417,26 +416,14 @@ public class RegattaRaceStatesComponent extends SimplePanel implements Component
raceCourseColumn.setFieldUpdater(new FieldUpdater<RegattaOverviewEntryDTO, SafeHtml>() {
@Override
public void update(int index, RegattaOverviewEntryDTO object, SafeHtml value) {
/*RaceCourseDTO courseDTO = object.raceInfo.lastCourseDesign;
RaceCourseDTO courseDTO = object.raceInfo.lastCourseDesign;
if (courseDTO != null && courseDTO.waypoints.size() > 0) {
DialogBox courseViewDialogBox = createCourseViewDialogBox(object.raceInfo);
courseViewDialogBox.center();
courseViewDialogBox.setGlassEnabled(true);
courseViewDialogBox.setAnimationEnabled(true);
courseViewDialogBox.show();
} */
sailingService.fakeNewStartTime(object, new Date(), new AsyncCallback<Void>() {
@Override
public void onSuccess(Void result) {
}
@Override
public void onFailure(Throwable caught) {
}
});
}
}
});
raceCourseColumn.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_CENTER);
@@ -16,32 +16,33 @@ import com.sap.sailing.server.gateway.deserialization.JsonDeserializer;
import com.sap.sailing.server.gateway.serialization.impl.DeviceConfigurationJsonSerializer;
public class DeviceConfigurationJsonDeserializer implements JsonDeserializer<DeviceConfiguration> {
public static DeviceConfigurationJsonDeserializer create() {
return new DeviceConfigurationJsonDeserializer(new RacingProceduresConfigurationJsonDeserializer());
return new DeviceConfigurationJsonDeserializer(RacingProceduresConfigurationJsonDeserializer.create());
}
private final JsonDeserializer<? extends RacingProceduresConfiguration> proceduresDeserializer;
public DeviceConfigurationJsonDeserializer(JsonDeserializer<? extends RacingProceduresConfiguration> proceduresDeserializer) {
private final JsonDeserializer<RacingProceduresConfiguration> proceduresDeserializer;
public DeviceConfigurationJsonDeserializer(JsonDeserializer<RacingProceduresConfiguration> proceduresDeserializer) {
this.proceduresDeserializer = proceduresDeserializer;
}
@Override
public DeviceConfiguration deserialize(JSONObject object) throws JsonDeserializationException {
RacingProceduresConfiguration proceduresConfiguration = null;
if (object.containsKey(DeviceConfigurationJsonSerializer.FIELD_PROCEDURES_CONFIGURATION)) {
JSONObject proceduresObject =
Helpers.getNestedObjectSafe(object, DeviceConfigurationJsonSerializer.FIELD_PROCEDURES_CONFIGURATION);
JSONObject proceduresObject = Helpers.getNestedObjectSafe(object,
DeviceConfigurationJsonSerializer.FIELD_PROCEDURES_CONFIGURATION);
proceduresConfiguration = proceduresDeserializer.deserialize(proceduresObject);
}
DeviceConfigurationImpl configuration = createConfiguration(proceduresConfiguration);
if (object.containsKey(DeviceConfigurationJsonSerializer.FIELD_COURSE_AREA_NAMES)) {
JSONArray courseAreaNames = Helpers.getNestedArraySafe(object, DeviceConfigurationJsonSerializer.FIELD_COURSE_AREA_NAMES);
JSONArray courseAreaNames = Helpers.getNestedArraySafe(object,
DeviceConfigurationJsonSerializer.FIELD_COURSE_AREA_NAMES);
List<String> allowedCourseAreaNames = new ArrayList<String>();
for (Object name : courseAreaNames) {
allowedCourseAreaNames.add(name.toString());
@@ -53,23 +54,23 @@ public class DeviceConfigurationJsonDeserializer implements JsonDeserializer<Dev
String resultsRecipient = (String) object.get(DeviceConfigurationJsonSerializer.FIELD_RESULTS_RECIPIENT);
configuration.setResultsMailRecipient(resultsRecipient);
}
if (object.containsKey(DeviceConfigurationJsonSerializer.FIELD_DEFAULT_RACING_PROCEDURE_TYPE)) {
RacingProcedureType type = RacingProcedureType.valueOf(
object.get(DeviceConfigurationJsonSerializer.FIELD_DEFAULT_RACING_PROCEDURE_TYPE).toString());
RacingProcedureType type = RacingProcedureType.valueOf(object.get(
DeviceConfigurationJsonSerializer.FIELD_DEFAULT_RACING_PROCEDURE_TYPE).toString());
configuration.setDefaultRacingProcedureType(type);
}
if (object.containsKey(DeviceConfigurationJsonSerializer.FIELD_DEFAULT_COURSE_DESIGNER_MODE)) {
CourseDesignerMode mode = CourseDesignerMode.valueOf(
object.get(DeviceConfigurationJsonSerializer.FIELD_DEFAULT_COURSE_DESIGNER_MODE).toString());
CourseDesignerMode mode = CourseDesignerMode.valueOf(object.get(
DeviceConfigurationJsonSerializer.FIELD_DEFAULT_COURSE_DESIGNER_MODE).toString());
configuration.setDefaultCourseDesignerMode(mode);
}
if (object.containsKey(DeviceConfigurationJsonSerializer.FIELD_BY_VALUE_COURSE_DESIGNER_COURSE_NAMES)) {
JSONArray namesArray = Helpers.getNestedArraySafe(object,
JSONArray namesArray = Helpers.getNestedArraySafe(object,
DeviceConfigurationJsonSerializer.FIELD_BY_VALUE_COURSE_DESIGNER_COURSE_NAMES);
List<String> names = new ArrayList<String>();
for (Object name : namesArray) {
names.add(name.toString());
@@ -79,7 +80,7 @@ public class DeviceConfigurationJsonDeserializer implements JsonDeserializer<Dev
return configuration;
}
protected DeviceConfigurationImpl createConfiguration(RacingProceduresConfiguration proceduresConfiguration) {
return new DeviceConfigurationImpl(proceduresConfiguration);
}
@@ -0,0 +1,36 @@
package com.sap.sailing.server.gateway.deserialization.impl;
import org.json.simple.JSONObject;
import com.sap.sailing.domain.base.configuration.RacingProcedureConfiguration;
import com.sap.sailing.domain.base.configuration.impl.ESSConfigurationImpl;
import com.sap.sailing.domain.base.configuration.procedures.ESSConfiguration;
import com.sap.sailing.domain.common.racelog.Flags;
import com.sap.sailing.server.gateway.deserialization.JsonDeserializationException;
import com.sap.sailing.server.gateway.deserialization.JsonDeserializer;
public class ESSConfigurationJsonDeserializer extends RacingProcedureConfigurationJsonDeserializer implements
JsonDeserializer<RacingProcedureConfiguration> {
public static ESSConfigurationJsonDeserializer create() {
return new ESSConfigurationJsonDeserializer();
}
public ESSConfigurationJsonDeserializer() {
super();
}
@Override
public ESSConfiguration deserialize(JSONObject object) throws JsonDeserializationException {
return (ESSConfiguration) super.deserialize(object);
}
protected ESSConfiguration createResult(JSONObject object, Flags classFlag, Boolean inidividualRecall)
throws JsonDeserializationException {
ESSConfigurationImpl result = new ESSConfigurationImpl();
result.setClassFlag(classFlag);
result.setHasInidividualRecall(inidividualRecall);
return result;
}
}
@@ -0,0 +1,36 @@
package com.sap.sailing.server.gateway.deserialization.impl;
import org.json.simple.JSONObject;
import com.sap.sailing.domain.base.configuration.RacingProcedureConfiguration;
import com.sap.sailing.domain.base.configuration.impl.GateStartConfigurationImpl;
import com.sap.sailing.domain.base.configuration.procedures.GateStartConfiguration;
import com.sap.sailing.domain.common.racelog.Flags;
import com.sap.sailing.server.gateway.deserialization.JsonDeserializationException;
import com.sap.sailing.server.gateway.deserialization.JsonDeserializer;
public class GateStartConfigurationJsonDeserializer extends RacingProcedureConfigurationJsonDeserializer implements JsonDeserializer<RacingProcedureConfiguration> {
public static GateStartConfigurationJsonDeserializer create() {
return new GateStartConfigurationJsonDeserializer();
}
public GateStartConfigurationJsonDeserializer() {
super();
}
@Override
public GateStartConfiguration deserialize(JSONObject object) throws JsonDeserializationException {
return (GateStartConfiguration) super.deserialize(object);
}
protected GateStartConfiguration createResult(JSONObject object, Flags classFlag, Boolean inidividualRecall) throws JsonDeserializationException {
GateStartConfigurationImpl result = new GateStartConfigurationImpl();
result.setClassFlag(classFlag);
result.setHasInidividualRecall(inidividualRecall);
return result;
}
}
@@ -0,0 +1,53 @@
package com.sap.sailing.server.gateway.deserialization.impl;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import java.util.ArrayList;
import java.util.List;
import com.sap.sailing.domain.base.configuration.impl.RRS26ConfigurationImpl;
import com.sap.sailing.domain.base.configuration.procedures.RRS26Configuration;
import com.sap.sailing.domain.base.configuration.RacingProcedureConfiguration;
import com.sap.sailing.domain.common.racelog.Flags;
import com.sap.sailing.server.gateway.deserialization.JsonDeserializer;
import com.sap.sailing.server.gateway.deserialization.JsonDeserializationException;
import com.sap.sailing.server.gateway.serialization.impl.RRS26ConfigurationJsonSerializer;
public class RRS26ConfigurationJsonDeserializer extends RacingProcedureConfigurationJsonDeserializer implements
JsonDeserializer<RacingProcedureConfiguration> {
public static RRS26ConfigurationJsonDeserializer create() {
return new RRS26ConfigurationJsonDeserializer();
}
public RRS26ConfigurationJsonDeserializer() {
super();
}
@Override
public RRS26Configuration deserialize(JSONObject object) throws JsonDeserializationException {
return (RRS26Configuration) super.deserialize(object);
}
protected RRS26Configuration createResult(JSONObject object, Flags classFlag, Boolean inidividualRecall)
throws JsonDeserializationException {
List<Flags> startModeFlags = null;
if (object.containsKey(RRS26ConfigurationJsonSerializer.FIELD_START_MODE_FLAGS)) {
startModeFlags = new ArrayList<Flags>();
JSONArray objects = Helpers.getNestedArraySafe(object,
RRS26ConfigurationJsonSerializer.FIELD_START_MODE_FLAGS);
for (Object value : objects) {
startModeFlags.add(Flags.valueOf(value.toString()));
}
}
RRS26ConfigurationImpl result = new RRS26ConfigurationImpl();
result.setClassFlag(classFlag);
result.setHasInidividualRecall(inidividualRecall);
result.setStartModeFlags(startModeFlags);
return result;
}
}
@@ -0,0 +1,47 @@
package com.sap.sailing.server.gateway.deserialization.impl;
import org.json.simple.JSONObject;
import com.sap.sailing.domain.base.configuration.RacingProcedureConfiguration;
import com.sap.sailing.domain.base.configuration.impl.RacingProcedureConfigurationImpl;
import com.sap.sailing.domain.common.racelog.Flags;
import com.sap.sailing.server.gateway.deserialization.JsonDeserializationException;
import com.sap.sailing.server.gateway.deserialization.JsonDeserializer;
import com.sap.sailing.server.gateway.serialization.impl.RacingProcedureConfigurationJsonSerializer;
public class RacingProcedureConfigurationJsonDeserializer implements JsonDeserializer<RacingProcedureConfiguration> {
public static RacingProcedureConfigurationJsonDeserializer create() {
return new RacingProcedureConfigurationJsonDeserializer();
}
public RacingProcedureConfigurationJsonDeserializer() {
}
@Override
public RacingProcedureConfiguration deserialize(JSONObject object) throws JsonDeserializationException {
Boolean inidividualRecall = null;
if (object.containsKey(RacingProcedureConfigurationJsonSerializer.FIELD_INIDIVIDUAL_RECALL)) {
inidividualRecall = ((Boolean) object
.get(RacingProcedureConfigurationJsonSerializer.FIELD_INIDIVIDUAL_RECALL));
}
Flags classFlag = null;
if (object.containsKey(RacingProcedureConfigurationJsonSerializer.FIELD_CLASS_FLAG)) {
classFlag = Flags.valueOf(object.get(RacingProcedureConfigurationJsonSerializer.FIELD_CLASS_FLAG)
.toString());
}
return createResult(object, inidividualRecall, classFlag);
}
protected RacingProcedureConfiguration createResult(JSONObject object, Boolean inidividualRecall, Flags classFlag)
throws JsonDeserializationException{
RacingProcedureConfigurationImpl result = new RacingProcedureConfigurationImpl();
result.setHasInidividualRecall(inidividualRecall);
result.setClassFlag(classFlag);
return result;
}
}
@@ -1,42 +1,55 @@
package com.sap.sailing.server.gateway.deserialization.impl;
import java.util.ArrayList;
import java.util.List;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import com.sap.sailing.domain.base.configuration.RacingProceduresConfiguration;
import com.sap.sailing.domain.base.configuration.impl.RacingProceduresConfigurationImpl;
import com.sap.sailing.domain.common.racelog.Flags;
import com.sap.sailing.domain.base.configuration.procedures.ESSConfiguration;
import com.sap.sailing.domain.base.configuration.procedures.GateStartConfiguration;
import com.sap.sailing.domain.base.configuration.procedures.RRS26Configuration;
import com.sap.sailing.server.gateway.deserialization.JsonDeserializationException;
import com.sap.sailing.server.gateway.deserialization.JsonDeserializer;
import com.sap.sailing.server.gateway.serialization.impl.RacingProceduresConfigurationJsonSerializer;
public class RacingProceduresConfigurationJsonDeserializer implements JsonDeserializer<RacingProceduresConfiguration> {
private RRS26ConfigurationJsonDeserializer rrs26Deserializer;
private GateStartConfigurationJsonDeserializer gateStartDeserializer;
private ESSConfigurationJsonDeserializer essDeserializer;
public static RacingProceduresConfigurationJsonDeserializer create() {
return new RacingProceduresConfigurationJsonDeserializer(RRS26ConfigurationJsonDeserializer.create(),
GateStartConfigurationJsonDeserializer.create(), ESSConfigurationJsonDeserializer.create());
}
public RacingProceduresConfigurationJsonDeserializer(RRS26ConfigurationJsonDeserializer rrs26,
GateStartConfigurationJsonDeserializer gateStart, ESSConfigurationJsonDeserializer ess) {
this.rrs26Deserializer = rrs26;
this.gateStartDeserializer = gateStart;
this.essDeserializer = ess;
}
@Override
public RacingProceduresConfiguration deserialize(JSONObject object) throws JsonDeserializationException {
RacingProceduresConfigurationImpl configuration = createConfiguration();
if (object.containsKey(RacingProceduresConfigurationJsonSerializer.FIELD_HAS_XRAY)) {
Boolean hasIndividualRecall = (Boolean) object.get(RacingProceduresConfigurationJsonSerializer.FIELD_HAS_XRAY);
configuration.setHasInidividualRecall(hasIndividualRecall);
if (object.containsKey(RacingProceduresConfigurationJsonSerializer.FIELD_RRS26)) {
RRS26Configuration rrs26Configuration = rrs26Deserializer.deserialize(
Helpers.getNestedObjectSafe(object, RacingProceduresConfigurationJsonSerializer.FIELD_RRS26));
configuration.setRRS26Configuration(rrs26Configuration);
}
if (object.containsKey(RacingProceduresConfigurationJsonSerializer.FIELD_CLASS_FLAG)) {
Flags classFlag = Flags.valueOf(object.get(RacingProceduresConfigurationJsonSerializer.FIELD_CLASS_FLAG).toString());
configuration.setClassFlag(classFlag);
if (object.containsKey(RacingProceduresConfigurationJsonSerializer.FIELD_GATE_START)) {
GateStartConfiguration gateStartConfiguration =
gateStartDeserializer.deserialize(
Helpers.getNestedObjectSafe(object, RacingProceduresConfigurationJsonSerializer.FIELD_GATE_START));
configuration.setGateStartConfiguration(gateStartConfiguration);
}
if (object.containsKey(RacingProceduresConfigurationJsonSerializer.FIELD_START_MODE_FLAGS)) {
List<Flags> result = new ArrayList<Flags>();
JSONArray startModeFlags = Helpers.getNestedArraySafe(object,
RacingProceduresConfigurationJsonSerializer.FIELD_START_MODE_FLAGS);
for (Object startModeFlag : startModeFlags) {
result.add(Flags.valueOf(startModeFlag.toString()));
}
configuration.setStartModeFlags(result);
if (object.containsKey(RacingProceduresConfigurationJsonSerializer.FIELD_ESS)) {
ESSConfiguration essConfiguration = essDeserializer.deserialize(
Helpers.getNestedObjectSafe(object, RacingProceduresConfigurationJsonSerializer.FIELD_ESS));
configuration.setESSConfiguration(essConfiguration);
}
return configuration;
@@ -7,6 +7,8 @@ import org.json.simple.JSONObject;
import com.sap.sailing.domain.base.BoatClass;
import com.sap.sailing.domain.base.CourseArea;
import com.sap.sailing.domain.base.SharedDomainFactory;
import com.sap.sailing.domain.base.configuration.RacingProceduresConfiguration;
import com.sap.sailing.domain.base.racegroup.RaceGroup;
import com.sap.sailing.domain.base.racegroup.SeriesWithRows;
import com.sap.sailing.domain.base.racegroup.impl.RaceGroupImpl;
@@ -14,19 +16,35 @@ import com.sap.sailing.domain.common.CourseDesignerMode;
import com.sap.sailing.domain.common.racelog.RacingProcedureType;
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.Helpers;
import com.sap.sailing.server.gateway.deserialization.racelog.impl.RaceLogDeserializer;
import com.sap.sailing.server.gateway.deserialization.racelog.impl.RaceLogEventDeserializer;
import com.sap.sailing.server.gateway.serialization.racegroup.impl.RaceGroupJsonSerializer;
import com.sap.sailing.server.gateway.serialization.racegroup.impl.SeriesWithRowsOfRaceGroupSerializer;
public class RaceGroupDeserializer implements JsonDeserializer<RaceGroup> {
private JsonDeserializer<BoatClass> boatClassDeserializer;
private JsonDeserializer<SeriesWithRows> seriesDeserializer;
private final JsonDeserializer<BoatClass> boatClassDeserializer;
private final JsonDeserializer<SeriesWithRows> seriesDeserializer;
private final JsonDeserializer<RacingProceduresConfiguration> proceduresDeserializer;
public static RaceGroupDeserializer create(SharedDomainFactory domainFactory,
JsonDeserializer<RacingProceduresConfiguration> proceduresDeserializer) {
return new RaceGroupDeserializer(new BoatClassJsonDeserializer(domainFactory), new SeriesWithRowsDeserializer(
new RaceRowDeserializer(new FleetDeserializer(new ColorDeserializer()), new RaceCellDeserializer(
new RaceLogDeserializer(RaceLogEventDeserializer.create(domainFactory))))),
proceduresDeserializer);
}
public RaceGroupDeserializer(JsonDeserializer<BoatClass> boatClassDeserializer,
JsonDeserializer<SeriesWithRows> seriesDeserializer) {
JsonDeserializer<SeriesWithRows> seriesDeserializer,
JsonDeserializer<RacingProceduresConfiguration> proceduresDeserializer) {
this.boatClassDeserializer = boatClassDeserializer;
this.seriesDeserializer = seriesDeserializer;
this.proceduresDeserializer = proceduresDeserializer;
}
public RaceGroup deserialize(JSONObject object) throws JsonDeserializationException {
@@ -35,32 +53,39 @@ public class RaceGroupDeserializer implements JsonDeserializer<RaceGroup> {
CourseArea courseArea = null;
RacingProcedureType procedure = RacingProcedureType.UNKNOWN;
CourseDesignerMode designer = CourseDesignerMode.UNKNOWN;
RacingProceduresConfiguration proceduresConfiguration = null;
if (object.containsKey(RaceGroupJsonSerializer.FIELD_COURSE_AREA)) {
// TODO: deserialize CourseArea ...
// WHY should I?
}
if (object.containsKey(RaceGroupJsonSerializer.FIELD_BOAT_CLASS)) {
boatClass = boatClassDeserializer.deserialize(Helpers.getNestedObjectSafe(object,
RaceGroupJsonSerializer.FIELD_BOAT_CLASS));
}
if (object.containsKey(RaceGroupJsonSerializer.FIELD_DEFAULT_RACING_PROCEDURE)) {
procedure = RacingProcedureType.valueOf(
object.get(RaceGroupJsonSerializer.FIELD_DEFAULT_RACING_PROCEDURE).toString());
}
if (object.containsKey(RaceGroupJsonSerializer.FIELD_DEFAULT_COURSE_DESIGNER)) {
designer = CourseDesignerMode.valueOf(
object.get(RaceGroupJsonSerializer.FIELD_DEFAULT_COURSE_DESIGNER).toString());
}
Collection<SeriesWithRows> series = new ArrayList<SeriesWithRows>();
for (Object seriesObject : Helpers.getNestedArraySafe(object, SeriesWithRowsOfRaceGroupSerializer.FIELD_SERIES)) {
JSONObject seriesJson = Helpers.toJSONObjectSafe(seriesObject);
series.add(seriesDeserializer.deserialize(seriesJson));
}
return new RaceGroupImpl(name, boatClass, courseArea, series, procedure, designer);
if (object.containsKey(RaceGroupJsonSerializer.FIELD_DEFAULT_RACING_PROCEDURE)) {
procedure = RacingProcedureType.valueOf(object.get(RaceGroupJsonSerializer.FIELD_DEFAULT_RACING_PROCEDURE)
.toString());
}
if (object.containsKey(RaceGroupJsonSerializer.FIELD_DEFAULT_COURSE_DESIGNER)) {
designer = CourseDesignerMode.valueOf(object.get(RaceGroupJsonSerializer.FIELD_DEFAULT_COURSE_DESIGNER)
.toString());
}
if (object.containsKey(RaceGroupJsonSerializer.FIELD_RACING_PROCEDURES_CONFIGURATION)) {
JSONObject value = Helpers.getNestedObjectSafe(object, RaceGroupJsonSerializer.FIELD_RACING_PROCEDURES_CONFIGURATION);
proceduresConfiguration = proceduresDeserializer.deserialize(value);
}
return new RaceGroupImpl(name, boatClass, courseArea, series, procedure, designer, proceduresConfiguration);
}
}
@@ -17,7 +17,7 @@ public class DeviceConfigurationJsonSerializer implements JsonSerializer<DeviceC
public static final String FIELD_PROCEDURES_CONFIGURATION = "procedures";
public static DeviceConfigurationJsonSerializer create() {
return new DeviceConfigurationJsonSerializer(new RacingProceduresConfigurationJsonSerializer());
return new DeviceConfigurationJsonSerializer(RacingProceduresConfigurationJsonSerializer.create());
}
private final JsonSerializer<RacingProceduresConfiguration> proceduresSerializer;
@@ -0,0 +1,29 @@
package com.sap.sailing.server.gateway.serialization.impl;
import org.json.simple.JSONObject;
import com.sap.sailing.domain.base.configuration.RacingProcedureConfiguration;
import com.sap.sailing.domain.base.configuration.procedures.ESSConfiguration;
import com.sap.sailing.server.gateway.serialization.JsonSerializer;
public class ESSConfigurationJsonSerializer extends RacingProcedureConfigurationJsonSerializer implements
JsonSerializer<RacingProcedureConfiguration> {
public static ESSConfigurationJsonSerializer create() {
return new ESSConfigurationJsonSerializer();
}
public ESSConfigurationJsonSerializer() {
super();
}
@Override
public JSONObject serialize(RacingProcedureConfiguration baseObject) {
JSONObject result = super.serialize(baseObject);
@SuppressWarnings("unused")
ESSConfiguration object = (ESSConfiguration) baseObject;
return result;
}
}
@@ -0,0 +1,29 @@
package com.sap.sailing.server.gateway.serialization.impl;
import org.json.simple.JSONObject;
import com.sap.sailing.domain.base.configuration.RacingProcedureConfiguration;
import com.sap.sailing.domain.base.configuration.procedures.GateStartConfiguration;
import com.sap.sailing.server.gateway.serialization.JsonSerializer;
public class GateStartConfigurationJsonSerializer extends RacingProcedureConfigurationJsonSerializer implements
JsonSerializer<RacingProcedureConfiguration> {
public static GateStartConfigurationJsonSerializer create() {
return new GateStartConfigurationJsonSerializer();
}
public GateStartConfigurationJsonSerializer() {
super();
}
@Override
public JSONObject serialize(RacingProcedureConfiguration baseObject) {
JSONObject result = super.serialize(baseObject);
@SuppressWarnings("unused")
GateStartConfiguration object = (GateStartConfiguration) baseObject;
return result;
}
}
@@ -0,0 +1,40 @@
package com.sap.sailing.server.gateway.serialization.impl;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import com.sap.sailing.domain.base.configuration.RacingProcedureConfiguration;
import com.sap.sailing.domain.base.configuration.procedures.RRS26Configuration;
import com.sap.sailing.domain.common.racelog.Flags;
import com.sap.sailing.server.gateway.serialization.JsonSerializer;
public class RRS26ConfigurationJsonSerializer extends RacingProcedureConfigurationJsonSerializer implements
JsonSerializer<RacingProcedureConfiguration> {
public static RRS26ConfigurationJsonSerializer create() {
return new RRS26ConfigurationJsonSerializer();
}
public static final String FIELD_START_MODE_FLAGS = "startModeFlags";
public RRS26ConfigurationJsonSerializer() {
super();
}
@Override
public JSONObject serialize(RacingProcedureConfiguration baseObject) {
JSONObject result = super.serialize(baseObject);
RRS26Configuration object = (RRS26Configuration) baseObject;
if (object.getStartModeFlags() != null) {
JSONArray startModeFlags = new JSONArray();
for (Flags item : object.getStartModeFlags()) {
startModeFlags.add(item);
}
result.put(FIELD_START_MODE_FLAGS, startModeFlags);
}
return result;
}
}
@@ -0,0 +1,35 @@
package com.sap.sailing.server.gateway.serialization.impl;
import org.json.simple.JSONObject;
import com.sap.sailing.domain.base.configuration.RacingProcedureConfiguration;
import com.sap.sailing.server.gateway.serialization.JsonSerializer;
public class RacingProcedureConfigurationJsonSerializer implements JsonSerializer<RacingProcedureConfiguration> {
public static RacingProcedureConfigurationJsonSerializer create() {
return new RacingProcedureConfigurationJsonSerializer();
}
public static final String FIELD_INIDIVIDUAL_RECALL = "inidividualRecall";
public static final String FIELD_CLASS_FLAG = "classFlag";
public RacingProcedureConfigurationJsonSerializer() {
}
@Override
public JSONObject serialize(RacingProcedureConfiguration object) {
JSONObject result = new JSONObject();
if (object.hasInidividualRecall() != null) {
result.put(FIELD_INIDIVIDUAL_RECALL, object.hasInidividualRecall());
}
if (object.getClassFlag() != null) {
result.put(FIELD_CLASS_FLAG, object.getClassFlag().name());
}
return result;
}
}
@@ -1,34 +1,45 @@
package com.sap.sailing.server.gateway.serialization.impl;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import com.sap.sailing.domain.base.configuration.RacingProcedureConfiguration;
import com.sap.sailing.domain.base.configuration.RacingProceduresConfiguration;
import com.sap.sailing.domain.common.racelog.Flags;
import com.sap.sailing.server.gateway.serialization.JsonSerializer;
public class RacingProceduresConfigurationJsonSerializer implements JsonSerializer<RacingProceduresConfiguration> {
public static final String FIELD_CLASS_FLAG = "classFlag";
public static final String FIELD_START_MODE_FLAGS = "startModeFlags";
public static final String FIELD_HAS_XRAY = "hasIndividualRecall";
private JsonSerializer<RacingProcedureConfiguration> rrs26Serializer;
private JsonSerializer<RacingProcedureConfiguration> gateStartSerializer;
private JsonSerializer<RacingProcedureConfiguration> essSerializer;
public static RacingProceduresConfigurationJsonSerializer create() {
return new RacingProceduresConfigurationJsonSerializer(RRS26ConfigurationJsonSerializer.create(),
GateStartConfigurationJsonSerializer.create(), ESSConfigurationJsonSerializer.create());
}
public RacingProceduresConfigurationJsonSerializer(JsonSerializer<RacingProcedureConfiguration> rrs26,
JsonSerializer<RacingProcedureConfiguration> gateStart, JsonSerializer<RacingProcedureConfiguration> ess) {
this.rrs26Serializer = rrs26;
this.gateStartSerializer = gateStart;
this.essSerializer = ess;
}
public static final String FIELD_RRS26 = "rrs26";
public static final String FIELD_GATE_START = "gateStart";
public static final String FIELD_ESS = "ess";
@Override
public JSONObject serialize(RacingProceduresConfiguration object) {
JSONObject result = new JSONObject();
if (object.hasInidividualRecall() != null) {
result.put(FIELD_HAS_XRAY, object.hasInidividualRecall());
if (object.getRRS26Configuration() != null) {
result.put(FIELD_RRS26, rrs26Serializer.serialize(object.getRRS26Configuration()));
}
if (object.getClassFlag() != null) {
result.put(FIELD_CLASS_FLAG, object.getClassFlag().name());
if (object.getGateStartConfiguration() != null) {
result.put(FIELD_GATE_START, gateStartSerializer.serialize(object.getGateStartConfiguration()));
}
if (object.getStartModeFlags() != null) {
JSONArray startModeFlags = new JSONArray();
for (Flags startModeFlag : object.getStartModeFlags()) {
startModeFlags.add(startModeFlag);
}
result.put(FIELD_START_MODE_FLAGS, startModeFlags);
if (object.getESSConfiguration() != null) {
result.put(FIELD_ESS, essSerializer.serialize(object.getESSConfiguration()));
}
return result;
}
@@ -15,6 +15,7 @@ public class RaceGroupJsonSerializer extends ExtendableJsonSerializer<RaceGroup>
public static final String FIELD_BOAT_CLASS = "boatClass";
public static final String FIELD_DEFAULT_RACING_PROCEDURE = "defaultProcedure";
public static final String FIELD_DEFAULT_COURSE_DESIGNER = "defaultCourseDesigner";
public static final String FIELD_RACING_PROCEDURES_CONFIGURATION = "proceduresConfiguration";
private JsonSerializer<BoatClass> boatClassSerializer;
private JsonSerializer<CourseArea> courseAreaSerializer;
@@ -49,6 +50,10 @@ public class RaceGroupJsonSerializer extends ExtendableJsonSerializer<RaceGroup>
if (object.getDefaultCourseDesignerMode() != null) {
result.put(FIELD_DEFAULT_COURSE_DESIGNER, object.getDefaultCourseDesignerMode().name());
}
if (object.getRacingProceduresConfiguration() != null) {
result.put(FIELD_RACING_PROCEDURES_CONFIGURATION, object.getRacingProceduresConfiguration());
}
return result;
}
@@ -29,8 +29,8 @@ public class RaceLogFlagEventSerializer extends BaseRaceLogEventSerializer {
RaceLogFlagEvent flagEvent = (RaceLogFlagEvent) object;
JSONObject result = super.serialize(flagEvent);
result.put(FIELD_UPPER_FLAG, flagEvent.getUpperFlag().toString());
result.put(FIELD_LOWER_FLAG, flagEvent.getLowerFlag().toString());
result.put(FIELD_UPPER_FLAG, flagEvent.getUpperFlag().name());
result.put(FIELD_LOWER_FLAG, flagEvent.getLowerFlag().name());
result.put(FIELD_DISPLAYED, flagEvent.isDisplayed());
return result;
@@ -14,6 +14,7 @@ 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.RacingProceduresConfiguration;
import com.sap.sailing.domain.base.impl.SeriesImpl;
import com.sap.sailing.domain.base.racegroup.RaceCell;
import com.sap.sailing.domain.base.racegroup.RaceGroup;
@@ -46,18 +47,20 @@ public class RaceGroupFactory {
BoatClass boatClass = null;
RacingProcedureType defaultProcedureType = RacingProcedureType.UNKNOWN;
CourseDesignerMode defaultCourseDesignerMode = CourseDesignerMode.UNKNOWN;
RacingProceduresConfiguration procedureConfiguration = null;
if (leaderboard instanceof RegattaLeaderboard) {
Regatta regatta = ((RegattaLeaderboard) leaderboard).getRegatta();
boatClass = regatta.getBoatClass();
defaultProcedureType = regatta.getDefaultRacingProcedureType();
defaultCourseDesignerMode = regatta.getDefaultCourseDesignerMode();
//procedureConfiguration = regatta.getRacingProceduresConfiguration();
}
Iterable<SeriesWithRows> series = getSeries(leaderboard);
return new RaceGroupImpl(name, boatClass, courseArea, series,
defaultProcedureType, defaultCourseDesignerMode);
defaultProcedureType, defaultCourseDesignerMode, procedureConfiguration);
}
public Iterable<SeriesWithRows> getSeries(Leaderboard leaderboard) {
@@ -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.declination@default:default,com.sap.sailing.domain.common@default:default,com.sap.sailing.domain.igtimiadapter*1.0.0.qualifier@default:default,com.sap.sailing.domain.igtimiadapter.persistence@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@4: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.xcelsiusadapter@4:true,com.sap.sailing.xrr.resultimport@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@4: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.xcelsiusadapter@4:true,com.sap.sailing.xrr.resultimport@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>