mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-10-17 01:31:01 +00:00
# revamped the configuration system to support remote configuration of racing procedures
This commit is contained in:
1 parent
d65519922c
commit
773670d608
52 files changed
+1289
-358
No files matched your search
+14
-1
@@ -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()]);
|
||||
}
|
||||
}
|
||||
+5
-2
@@ -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();
|
||||
|
||||
}
|
||||
+14
@@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
+14
@@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
+30
@@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
+40
@@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
+21
-26
@@ -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 ESSConfiguration getESSConfiguration() {
|
||||
return essConfiguration;
|
||||
}
|
||||
|
||||
public void setStartModeFlags(List<Flags> flags) {
|
||||
this.startModeFlags = flags;
|
||||
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;
|
||||
}
|
||||
|
||||
|
||||
+9
-2
@@ -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();
|
||||
}
|
||||
+10
-1
@@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
+3
-3
@@ -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());
|
||||
}
|
||||
|
||||
+1
-14
@@ -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);
|
||||
|
||||
+11
-10
@@ -18,12 +18,12 @@ import com.sap.sailing.server.gateway.serialization.impl.DeviceConfigurationJson
|
||||
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;
|
||||
private final JsonDeserializer<RacingProceduresConfiguration> proceduresDeserializer;
|
||||
|
||||
public DeviceConfigurationJsonDeserializer(JsonDeserializer<? extends RacingProceduresConfiguration> proceduresDeserializer) {
|
||||
public DeviceConfigurationJsonDeserializer(JsonDeserializer<RacingProceduresConfiguration> proceduresDeserializer) {
|
||||
this.proceduresDeserializer = proceduresDeserializer;
|
||||
}
|
||||
|
||||
@@ -33,15 +33,16 @@ public class DeviceConfigurationJsonDeserializer implements JsonDeserializer<Dev
|
||||
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());
|
||||
@@ -55,14 +56,14 @@ public class DeviceConfigurationJsonDeserializer implements JsonDeserializer<Dev
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
|
||||
+36
@@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
+36
@@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
+53
@@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
+47
@@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
+32
-19
@@ -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;
|
||||
|
||||
+39
-14
@@ -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,6 +53,7 @@ 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 ...
|
||||
@@ -46,21 +65,27 @@ public class RaceGroupDeserializer implements JsonDeserializer<RaceGroup> {
|
||||
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);
|
||||
}
|
||||
}
|
||||
+1
-1
@@ -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;
|
||||
|
||||
+29
@@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
+29
@@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
+40
@@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
+35
@@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
+26
-15
@@ -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;
|
||||
}
|
||||
|
||||
+5
@@ -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;
|
||||
@@ -50,6 +51,10 @@ public class RaceGroupJsonSerializer extends ExtendableJsonSerializer<RaceGroup>
|
||||
result.put(FIELD_DEFAULT_COURSE_DESIGNER, object.getDefaultCourseDesignerMode().name());
|
||||
}
|
||||
|
||||
if (object.getRacingProceduresConfiguration() != null) {
|
||||
result.put(FIELD_RACING_PROCEDURES_CONFIGURATION, object.getRacingProceduresConfiguration());
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
+2
-2
@@ -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;
|
||||
|
||||
+4
-1
@@ -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>
|
||||
@@ -1,8 +1,8 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
package="com.sap.sailing.racecommittee.app"
|
||||
android:versionCode="2"
|
||||
android:versionName="2.1 - Kulig" >
|
||||
android:versionCode="3"
|
||||
android:versionName="3.0a - Lasogga" >
|
||||
|
||||
<uses-sdk
|
||||
android:maxSdkVersion="17"
|
||||
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 1.5 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 1.2 KiB |
@@ -0,0 +1,22 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:orientation="horizontal" >
|
||||
|
||||
<include
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_weight="1"
|
||||
layout="@android:layout/simple_list_item_1" />
|
||||
|
||||
<ImageButton
|
||||
android:id="@+id/array_remove_adapter_remove"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="0"
|
||||
android:layout_gravity="center"
|
||||
android:src="@drawable/ic_menu_delete_dark"
|
||||
android:contentDescription="@string/remove" />
|
||||
|
||||
</LinearLayout>
|
||||
@@ -0,0 +1,45 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:orientation="vertical"
|
||||
android:padding="12dp" >
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="horizontal" >
|
||||
|
||||
<AutoCompleteTextView
|
||||
android:id="@+id/edit_set_preference_input"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:completionThreshold="1"
|
||||
android:hint="@string/enter_new_item"
|
||||
android:inputType="textNoSuggestions|textVisiblePassword" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/edit_set_preference_add"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="0"
|
||||
android:text="@string/add" />
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<ListView
|
||||
android:id="@+id/edit_set_preference_list"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/edit_set_preference_list_empty"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_gravity="center"
|
||||
android:layout_margin="6dp"
|
||||
android:gravity="center"
|
||||
android:text="@string/there_are_no_items_yet_" />
|
||||
|
||||
</LinearLayout>
|
||||
@@ -1,23 +1,67 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
|
||||
<string name="preference_language_key">languagePref</string>
|
||||
<string name="preference_server_url_key">webserviceUrlPref</string>
|
||||
<string name="preference_server_url_default">http://192.168.56.1:8880</string>
|
||||
<string name="preference_course_areas_key">courseAreasPref</string>
|
||||
<string name="preference_course_areas_default">Alpha,Bravo</string>
|
||||
<string-array name="preference_course_areas_default">
|
||||
<item>Alpha</item>
|
||||
</string-array>
|
||||
<string-array name="preference_course_areas_example">
|
||||
<item>Alpha</item>
|
||||
<item>Bravo</item>
|
||||
<item>Charly</item>
|
||||
<item>Stadion</item>
|
||||
<item>Offshore</item>
|
||||
</string-array>
|
||||
|
||||
<string name="preference_mail_key">mailRecipientPreference</string>
|
||||
<string name="preference_mail_default">lukas.niemeier@sap.com</string>
|
||||
|
||||
<string name="preference_racing_procedure_is_overridden_key">overrideDefaultRacingProcedureType</string>
|
||||
|
||||
<bool name="preference_racing_procedure_is_overridden_default">false</bool>
|
||||
|
||||
<string name="preference_racing_procedure_override_key">defaultRacingProcedureType</string>
|
||||
<string name="preference_racing_procedure_override_default">RRS26</string>
|
||||
|
||||
<string name="preference_course_designer_is_overridden_key">overrideDefaultCourseDesignerType</string>
|
||||
|
||||
<bool name="preference_course_designer_is_overridden_default">false</bool>
|
||||
|
||||
<string name="preference_course_designer_override_key">defaultCourseDesignerType</string>
|
||||
<string name="preference_course_designer_override_default">BY_NAME</string>
|
||||
|
||||
<string name="preference_course_designer_by_name_course_names_key">courseDesignerByNameCourseNames</string>
|
||||
<string name="preference_course_designer_by_name_course_names_default">O2,I2,O3</string>
|
||||
<string-array name="preference_course_designer_by_name_course_names_default">
|
||||
<item>O2</item>
|
||||
<item>I2</item>
|
||||
<item>O3</item>
|
||||
</string-array>
|
||||
<string-array name="preference_course_designer_by_name_course_names_example">
|
||||
<item>O1</item>
|
||||
<item>O2</item>
|
||||
<item>O3</item>
|
||||
<item>I1</item>
|
||||
<item>I2</item>
|
||||
<item>I3</item>
|
||||
</string-array>
|
||||
|
||||
<string name="preference_racing_procedure_rrs26_classflag_key">rrs26ClassFlag</string>
|
||||
<string name="preference_racing_procedure_classflag_default">CLASS</string>
|
||||
<string name="preference_racing_procedure_rrs26_hasxray_key">rrs26IndividualRecall</string>
|
||||
<bool name="preference_racing_procedure_rrs26_hasxray_default">true</bool>
|
||||
<string name="preference_racing_procedure_rrs26_startmode_flags_key">rrs26StartmodeFlags</string>
|
||||
<string-array name="preference_racing_procedure_rrs26_startmode_flags_default">
|
||||
<item>PAPA</item>
|
||||
<item>INDIA</item>
|
||||
<item>BLACK</item>
|
||||
<item>ZULU</item>
|
||||
</string-array>
|
||||
<string name="preference_racing_procedure_gatestart_classflag_key">gateStartClassFlag</string>
|
||||
<string name="preference_racing_procedure_gatestart_hasxray_key">gateStartIndividualRecall</string>
|
||||
<bool name="preference_racing_procedure_gatestart_hasxray_default">false</bool>
|
||||
<string name="preference_racing_procedure_ess_classflag_key">gateStartClassFlag</string>
|
||||
<string name="preference_racing_procedure_ess_hasxray_key">gateStartIndividualRecall</string>
|
||||
<bool name="preference_racing_procedure_ess_hasxray_default">true</bool>
|
||||
</resources>
|
||||
@@ -1,5 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string-array name="empty_array"/>
|
||||
|
||||
<string name="hello">Hello World, RaceCommitteeActivity!</string>
|
||||
<string name="running_on_course">(on course %s)</string>
|
||||
@@ -276,4 +277,14 @@
|
||||
<string name="override_default_course_designer_type_description">Use configured Course Designer instead of race\'s.</string>
|
||||
<string name="override_default_course_designer_type_select_header">Course Designer type</string>
|
||||
|
||||
<string name="settings_course_designer_by_name_course_names_header">Course Names</string>
|
||||
<string name="enter_new_item">Enter new item</string>
|
||||
<string name="add">Add</string>
|
||||
<string name="there_are_no_items_yet_">There are no items yet.</string>
|
||||
|
||||
<string name="preference_racing_procedure_rrs26_startmode_flags_header">Startmode Flags</string>
|
||||
<string name="preference_racing_procedure_classflag_header">Class Flag</string>
|
||||
<string name="preference_racing_procedure_hasxray_header">Activate Individual Recall</string>
|
||||
|
||||
|
||||
</resources>
|
||||
@@ -19,10 +19,10 @@
|
||||
|
||||
<PreferenceCategory android:title="By-Name Course Designer" >
|
||||
|
||||
<EditTextPreference
|
||||
<com.sap.sailing.racecommittee.app.ui.views.EditSetPreference
|
||||
android:key="@string/preference_course_designer_by_name_course_names_key"
|
||||
android:defaultValue="@string/preference_course_designer_by_name_course_names_default"
|
||||
android:title="Course Names"
|
||||
android:defaultValue="@array/preference_course_designer_by_name_course_names_default"
|
||||
android:title="@string/settings_course_designer_by_name_course_names_header"
|
||||
android:summary="@string/empty" />
|
||||
|
||||
</PreferenceCategory>
|
||||
|
||||
@@ -12,15 +12,9 @@
|
||||
android:title="@string/settings_advanced_service_header"
|
||||
android:summary="@string/empty" />
|
||||
|
||||
<EditTextPreference
|
||||
<com.sap.sailing.racecommittee.app.ui.views.EditSetPreference
|
||||
android:key="@string/preference_course_areas_key"
|
||||
android:defaultValue="@string/preference_course_areas_default"
|
||||
android:title="@string/settings_general_manageareas_header"
|
||||
android:summary="@string/empty" />
|
||||
|
||||
<com.sap.sailing.racecommittee.app.ui.fragments.preference.EditListPreference
|
||||
android:key="what_a_key"
|
||||
android:defaultValue="a,b,c"
|
||||
android:defaultValue="@array/preference_course_areas_default"
|
||||
android:title="@string/settings_general_manageareas_header"
|
||||
android:summary="@string/empty" />
|
||||
|
||||
|
||||
@@ -4,47 +4,71 @@
|
||||
<PreferenceCategory android:title="@string/settings_category_general" >
|
||||
|
||||
<CheckBoxPreference
|
||||
android:defaultValue="@bool/preference_racing_procedure_is_overridden_default"
|
||||
android:key="@string/preference_racing_procedure_is_overridden_key"
|
||||
android:defaultValue="@bool/preference_racing_procedure_is_overridden_default"
|
||||
android:summary="@string/override_default_start_procedure_type_description"
|
||||
android:title="@string/override_default_start_procedure_type_header" />
|
||||
|
||||
<ListPreference
|
||||
android:defaultValue="@string/preference_racing_procedure_override_default"
|
||||
android:key="@string/preference_racing_procedure_override_key"
|
||||
android:defaultValue="@string/preference_racing_procedure_override_default"
|
||||
android:summary="@string/override_default_start_procedure_type_select_description"
|
||||
android:title="@string/override_default_start_procedure_type_select_header" />
|
||||
|
||||
</PreferenceCategory>
|
||||
|
||||
<!-- <PreferenceCategory android:title="RRS26" >
|
||||
<PreferenceCategory android:title="RRS26" >
|
||||
|
||||
<ListPreference
|
||||
android:key="@string/preference_racing_procedure_rrs26_classflag_key"
|
||||
android:defaultValue="@string/preference_racing_procedure_classflag_default"
|
||||
android:title="@string/preference_racing_procedure_classflag_header"
|
||||
android:summary="@string/empty" />
|
||||
|
||||
<CheckBoxPreference
|
||||
android:defaultValue="false"
|
||||
android:key="noOperationPreference"
|
||||
android:summary="@string/empty"
|
||||
android:title="@string/empty" />
|
||||
android:key="@string/preference_racing_procedure_rrs26_hasxray_key"
|
||||
android:defaultValue="@bool/preference_racing_procedure_rrs26_hasxray_default"
|
||||
android:title="@string/preference_racing_procedure_hasxray_header"
|
||||
android:summary="@string/empty" />
|
||||
|
||||
<com.sap.sailing.racecommittee.app.ui.views.FixedMultiSelectListPreference
|
||||
android:key="@string/preference_racing_procedure_rrs26_startmode_flags_key"
|
||||
android:defaultValue="@array/preference_racing_procedure_rrs26_startmode_flags_default"
|
||||
android:title="@string/preference_racing_procedure_rrs26_startmode_flags_header"
|
||||
android:summary="@string/empty" />
|
||||
|
||||
</PreferenceCategory>
|
||||
|
||||
<PreferenceCategory android:title="Gate Start" >
|
||||
|
||||
<ListPreference
|
||||
android:key="@string/preference_racing_procedure_gatestart_classflag_key"
|
||||
android:defaultValue="@string/preference_racing_procedure_classflag_default"
|
||||
android:title="@string/preference_racing_procedure_classflag_header"
|
||||
android:summary="@string/empty" />
|
||||
|
||||
<CheckBoxPreference
|
||||
android:defaultValue="false"
|
||||
android:key="noOperationPreference"
|
||||
android:summary="@string/empty"
|
||||
android:title="@string/empty" />
|
||||
android:key="@string/preference_racing_procedure_gatestart_hasxray_key"
|
||||
android:defaultValue="@bool/preference_racing_procedure_gatestart_hasxray_default"
|
||||
android:title="@string/preference_racing_procedure_hasxray_header"
|
||||
android:summary="@string/empty" />
|
||||
|
||||
</PreferenceCategory>
|
||||
|
||||
<PreferenceCategory android:title="ESS Start" >
|
||||
|
||||
<CheckBoxPreference
|
||||
android:defaultValue="false"
|
||||
android:key="noOperationPreference"
|
||||
android:summary="@string/empty"
|
||||
android:title="@string/empty" />
|
||||
<ListPreference
|
||||
android:key="@string/preference_racing_procedure_ess_classflag_key"
|
||||
android:defaultValue="@string/preference_racing_procedure_classflag_default"
|
||||
android:title="@string/preference_racing_procedure_classflag_header"
|
||||
android:summary="@string/empty" />
|
||||
|
||||
</PreferenceCategory> -->
|
||||
<CheckBoxPreference
|
||||
android:key="@string/preference_racing_procedure_ess_hasxray_key"
|
||||
android:defaultValue="@bool/preference_racing_procedure_ess_hasxray_default"
|
||||
android:title="@string/preference_racing_procedure_hasxray_header"
|
||||
android:summary="@string/empty" />
|
||||
|
||||
</PreferenceCategory>
|
||||
|
||||
</PreferenceScreen>
|
||||
+123
-64
@@ -1,7 +1,9 @@
|
||||
package com.sap.sailing.racecommittee.app;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.SharedPreferences;
|
||||
@@ -9,6 +11,7 @@ import android.preference.PreferenceManager;
|
||||
import android.provider.Settings.Secure;
|
||||
|
||||
import com.sap.sailing.domain.common.CourseDesignerMode;
|
||||
import com.sap.sailing.domain.common.racelog.Flags;
|
||||
import com.sap.sailing.domain.common.racelog.RacingProcedureType;
|
||||
import com.sap.sailing.domain.racelog.RaceLogEventAuthor;
|
||||
import com.sap.sailing.domain.racelog.impl.RaceLogEventAuthorImpl;
|
||||
@@ -18,27 +21,28 @@ import com.sap.sailing.racecommittee.app.domain.coursedesign.NumberOfRounds;
|
||||
import com.sap.sailing.racecommittee.app.domain.coursedesign.TrapezoidCourseLayouts;
|
||||
import com.sap.sailing.racecommittee.app.domain.coursedesign.WindWardLeeWardCourseLayouts;
|
||||
|
||||
/**
|
||||
* Wrapper for {@link SharedPreferences} for all hidden and non-hidden preferences and state variables.
|
||||
*/
|
||||
public class AppPreferences {
|
||||
|
||||
//private static String TAG = AppPreferences.class.getSimpleName();
|
||||
|
||||
public static AppPreferences on(Context context) {
|
||||
return new AppPreferences(context);
|
||||
}
|
||||
|
||||
private final static String PREFERENCE_SENDING_ACTIVE = "sendingActivePref";
|
||||
private final static String HIDDEN_PREFERENCE_SENDING_ACTIVE = "sendingActivePref";
|
||||
|
||||
private final static String PREFERENCE_AUTHOR_NAME = "authorName";
|
||||
private final static String PREFERENCE_AUTHOR_PRIORITY = "authorPriority";
|
||||
private final static String HIDDEN_PREFERENCE_AUTHOR_NAME = "authorName";
|
||||
private final static String HIDDEN_PREFERENCE_AUTHOR_PRIORITY = "authorPriority";
|
||||
|
||||
private final static String PREFERENCE_WIND_BEARING = "windBearingPref";
|
||||
private final static String PREFERENCE_WIND_SPEED = "windSpeedPref";
|
||||
private final static String HIDDEN_PREFERENCE_WIND_BEARING = "windBearingPref";
|
||||
private final static String HIDDEN_PREFERENCE_WIND_SPEED = "windSpeedPref";
|
||||
|
||||
private final static String PREFERENCE_BOAT_CLASS = "boatClassPref";
|
||||
private final static String PREFERENCE_COURSE_LAYOUT = "courseLayoutPref";
|
||||
private final static String PREFERENCE_NUMBER_OF_ROUNDS = "numberOfRoundsPref";
|
||||
private final static String HIDDEN_PREFERENCE_BOAT_CLASS = "boatClassPref";
|
||||
private final static String HIDDEN_PREFERENCE_COURSE_LAYOUT = "courseLayoutPref";
|
||||
private final static String HIDDEN_PREFERENCE_NUMBER_OF_ROUNDS = "numberOfRoundsPref";
|
||||
|
||||
private final static String PREFERENCE_PROCEDURE_CONFIG_OVERWRITE = "procedureConfigOverwriteAllowed";
|
||||
private final static String HIDDEN_PREFERENCE_PROCEDURE_CONFIG_OVERWRITE = "procedureConfigOverwriteAllowed";
|
||||
|
||||
private final SharedPreferences preferences;
|
||||
private final Context context;
|
||||
@@ -48,27 +52,35 @@ public class AppPreferences {
|
||||
this.preferences = PreferenceManager.getDefaultSharedPreferences(context);
|
||||
}
|
||||
|
||||
private String key(int keyId) {
|
||||
return context.getString(keyId);
|
||||
}
|
||||
|
||||
public String getAndroidIdentifier() {
|
||||
return Secure.getString(context.getContentResolver(), Secure.ANDROID_ID);
|
||||
}
|
||||
|
||||
public boolean isSendingActive() {
|
||||
return preferences.getBoolean(PREFERENCE_SENDING_ACTIVE, false);
|
||||
return preferences.getBoolean(HIDDEN_PREFERENCE_SENDING_ACTIVE, false);
|
||||
}
|
||||
|
||||
public void setSendingActive(boolean activate) {
|
||||
preferences.edit().putBoolean(PREFERENCE_SENDING_ACTIVE, activate).commit();
|
||||
preferences.edit().putBoolean(HIDDEN_PREFERENCE_SENDING_ACTIVE, activate).commit();
|
||||
}
|
||||
|
||||
public void setAuthor(RaceLogEventAuthor author) {
|
||||
preferences.edit().putString(PREFERENCE_AUTHOR_NAME, author.getName()).commit();
|
||||
preferences.edit().putInt(PREFERENCE_AUTHOR_PRIORITY, author.getPriority()).commit();
|
||||
preferences.edit().putString(HIDDEN_PREFERENCE_AUTHOR_NAME, author.getName()).commit();
|
||||
preferences.edit().putInt(HIDDEN_PREFERENCE_AUTHOR_PRIORITY, author.getPriority()).commit();
|
||||
}
|
||||
|
||||
public RaceLogEventAuthor getAuthor() {
|
||||
String authorName = preferences.getString(PREFERENCE_AUTHOR_NAME, "<anonymous>");
|
||||
int authorPriority = preferences.getInt(PREFERENCE_AUTHOR_PRIORITY, 0);
|
||||
String authorName = preferences.getString(HIDDEN_PREFERENCE_AUTHOR_NAME, "<anonymous>");
|
||||
int authorPriority = preferences.getInt(HIDDEN_PREFERENCE_AUTHOR_PRIORITY, 0);
|
||||
return new RaceLogEventAuthorImpl(authorName, authorPriority);
|
||||
}
|
||||
|
||||
public BoatClassType getBoatClass() {
|
||||
String boatClass = preferences.getString(PREFERENCE_BOAT_CLASS, null);
|
||||
String boatClass = preferences.getString(HIDDEN_PREFERENCE_BOAT_CLASS, null);
|
||||
if (boatClass == null) {
|
||||
return null;
|
||||
}
|
||||
@@ -77,11 +89,11 @@ public class AppPreferences {
|
||||
|
||||
public void setBoatClass(BoatClassType boatClass) {
|
||||
String boatClassString = boatClass.name();
|
||||
preferences.edit().putString(PREFERENCE_BOAT_CLASS, boatClassString).commit();
|
||||
preferences.edit().putString(HIDDEN_PREFERENCE_BOAT_CLASS, boatClassString).commit();
|
||||
}
|
||||
|
||||
public CourseLayouts getCourseLayout() {
|
||||
String courseLayout = preferences.getString(PREFERENCE_COURSE_LAYOUT, null);
|
||||
String courseLayout = preferences.getString(HIDDEN_PREFERENCE_COURSE_LAYOUT, null);
|
||||
if (courseLayout == null)
|
||||
return null;
|
||||
CourseLayouts storedCourseLayout;
|
||||
@@ -97,11 +109,11 @@ public class AppPreferences {
|
||||
|
||||
public void setCourseLayout(CourseLayouts courseLayout) {
|
||||
String courseLayoutString = courseLayout.name();
|
||||
preferences.edit().putString(PREFERENCE_COURSE_LAYOUT, courseLayoutString).commit();
|
||||
preferences.edit().putString(HIDDEN_PREFERENCE_COURSE_LAYOUT, courseLayoutString).commit();
|
||||
}
|
||||
|
||||
public NumberOfRounds getNumberOfRounds() {
|
||||
String numberOfRounds = preferences.getString(PREFERENCE_NUMBER_OF_ROUNDS, null);
|
||||
String numberOfRounds = preferences.getString(HIDDEN_PREFERENCE_NUMBER_OF_ROUNDS, null);
|
||||
if (numberOfRounds == null)
|
||||
return null;
|
||||
return NumberOfRounds.valueOf(numberOfRounds);
|
||||
@@ -109,48 +121,39 @@ public class AppPreferences {
|
||||
|
||||
public void setNumberOfRounds(NumberOfRounds numberOfRounds) {
|
||||
String numberOfRoundsString = numberOfRounds.name();
|
||||
preferences.edit().putString(PREFERENCE_NUMBER_OF_ROUNDS, numberOfRoundsString).commit();
|
||||
preferences.edit().putString(HIDDEN_PREFERENCE_NUMBER_OF_ROUNDS, numberOfRoundsString).commit();
|
||||
}
|
||||
|
||||
public double getWindBearingFromDirection() {
|
||||
long windBearingAsLong = preferences.getLong(PREFERENCE_WIND_BEARING, 0);
|
||||
long windBearingAsLong = preferences.getLong(HIDDEN_PREFERENCE_WIND_BEARING, 0);
|
||||
return Double.longBitsToDouble(windBearingAsLong);
|
||||
}
|
||||
|
||||
public void setWindBearingFromDirection(double enteredWindBearing) {
|
||||
long windBearingAsLong = Double.doubleToLongBits(enteredWindBearing);
|
||||
preferences.edit().putLong(PREFERENCE_WIND_BEARING, windBearingAsLong).commit();
|
||||
preferences.edit().putLong(HIDDEN_PREFERENCE_WIND_BEARING, windBearingAsLong).commit();
|
||||
}
|
||||
|
||||
public double getWindSpeed() {
|
||||
long windSpeedAsLong = preferences.getLong(PREFERENCE_WIND_SPEED, 0);
|
||||
long windSpeedAsLong = preferences.getLong(HIDDEN_PREFERENCE_WIND_SPEED, 0);
|
||||
return Double.longBitsToDouble(windSpeedAsLong);
|
||||
}
|
||||
|
||||
public void setWindSpeed(double enteredWindSpeed) {
|
||||
long windSpeedAsLong = Double.doubleToLongBits(enteredWindSpeed);
|
||||
preferences.edit().putLong(PREFERENCE_WIND_SPEED, windSpeedAsLong).commit();
|
||||
preferences.edit().putLong(HIDDEN_PREFERENCE_WIND_SPEED, windSpeedAsLong).commit();
|
||||
}
|
||||
|
||||
public List<String> getManagedCourseAreaNames() {
|
||||
String value = preferences.getString(key(R.string.preference_course_areas_key), "");
|
||||
String[] managedCourseAreas = value.split(",");
|
||||
for (int i = 0; i < managedCourseAreas.length; i++) {
|
||||
managedCourseAreas[i] = managedCourseAreas[i].trim();
|
||||
}
|
||||
return Arrays.asList(managedCourseAreas);
|
||||
Set<String> values = preferences.getStringSet(key(R.string.preference_course_areas_key), new HashSet<String>());
|
||||
return new ArrayList<String>(values);
|
||||
}
|
||||
|
||||
public void setManagedCourseAreaNames(List<String> courseAreaNames) {
|
||||
StringBuilder builder = new StringBuilder();
|
||||
for (String name : courseAreaNames) {
|
||||
builder.append(name);
|
||||
builder.append(",");
|
||||
}
|
||||
preferences
|
||||
.edit()
|
||||
.putString(key(R.string.preference_course_areas_key),
|
||||
builder.substring(0, builder.length() - 1)).commit();
|
||||
.putStringSet(key(R.string.preference_course_areas_key),
|
||||
new HashSet<String>(courseAreaNames)).commit();
|
||||
}
|
||||
|
||||
public String getServerBaseURL() {
|
||||
@@ -204,40 +207,96 @@ public class AppPreferences {
|
||||
}
|
||||
|
||||
public List<String> getByNameCourseDesignerCourseNames() {
|
||||
String value = preferences.getString(key(R.string.preference_course_designer_by_name_course_names_key), "");
|
||||
String[] courseNames = value.split(",");
|
||||
for (int i = 0; i < courseNames.length; i++) {
|
||||
courseNames[i] = courseNames[i].trim();
|
||||
}
|
||||
return Arrays.asList(courseNames);
|
||||
Set<String> values = preferences.getStringSet(key(R.string.preference_course_designer_by_name_course_names_key), new HashSet<String>());
|
||||
return new ArrayList<String>(values);
|
||||
}
|
||||
|
||||
public void setByNameCourseDesignerCourseNames(List<String> courseNames) {
|
||||
StringBuilder builder = new StringBuilder();
|
||||
for (String name : courseNames) {
|
||||
builder.append(name);
|
||||
builder.append(",");
|
||||
}
|
||||
preferences
|
||||
.edit()
|
||||
.putString(key(R.string.preference_course_designer_by_name_course_names_key),
|
||||
builder.substring(0, builder.length() - 1)).commit();
|
||||
}
|
||||
|
||||
private String key(int keyId) {
|
||||
return context.getString(keyId);
|
||||
}
|
||||
|
||||
public String getAndroidIdentifier() {
|
||||
return Secure.getString(context.getContentResolver(), Secure.ANDROID_ID);
|
||||
.putStringSet(key(R.string.preference_course_designer_by_name_course_names_key),
|
||||
new HashSet<String>(courseNames)).commit();
|
||||
}
|
||||
|
||||
public boolean isRacingProcedureConfigurationOverwriteAllowed() {
|
||||
return preferences.getBoolean(PREFERENCE_PROCEDURE_CONFIG_OVERWRITE, true);
|
||||
return preferences.getBoolean(HIDDEN_PREFERENCE_PROCEDURE_CONFIG_OVERWRITE, true);
|
||||
}
|
||||
|
||||
public void setRacingProcedureConfigurationOverwriteAllowed(boolean allowed) {
|
||||
preferences.edit().putBoolean(PREFERENCE_PROCEDURE_CONFIG_OVERWRITE, allowed).commit();
|
||||
preferences.edit().putBoolean(HIDDEN_PREFERENCE_PROCEDURE_CONFIG_OVERWRITE, allowed).commit();
|
||||
}
|
||||
|
||||
public void setRacingProcedureClassFlag(RacingProcedureType type, Flags flag) {
|
||||
String key = getRacingProcedureClassFlagKey(type);
|
||||
preferences.edit().putString(key, flag.name()).commit();
|
||||
}
|
||||
|
||||
public Flags getRacingProcedureClassFlag(RacingProcedureType type) {
|
||||
String key = getRacingProcedureClassFlagKey(type);
|
||||
return Flags.valueOf(preferences.getString(key, null));
|
||||
}
|
||||
|
||||
public void setRacingProcedureHasIndividualRecall(RacingProcedureType type, Boolean hasRecall) {
|
||||
String key = getRacingProcedureHasIndividualRecallKey(type);
|
||||
preferences.edit().putBoolean(key, hasRecall).commit();
|
||||
}
|
||||
|
||||
public boolean getRacingProcedureHasIndividualRecall(RacingProcedureType type) {
|
||||
String key = getRacingProcedureHasIndividualRecallKey(type);
|
||||
return preferences.getBoolean(key, false);
|
||||
}
|
||||
|
||||
public void setRRS26StartmodeFlags(Set<Flags> flags) {
|
||||
Set<String> flagNames = new HashSet<String>();
|
||||
for (Flags flag : flags) {
|
||||
flagNames.add(flag.name());
|
||||
}
|
||||
preferences.edit().putStringSet(key(R.string.preference_racing_procedure_rrs26_startmode_flags_key), flagNames);
|
||||
}
|
||||
|
||||
public Set<Flags> getRRS26StartmodeFlags() {
|
||||
Set<String> flagNames = preferences.getStringSet(key(R.string.preference_racing_procedure_rrs26_startmode_flags_key), null);
|
||||
if (flagNames != null) {
|
||||
Set<Flags> flags = new HashSet<Flags>();
|
||||
for (String flagName : flagNames) {
|
||||
flags.add(Flags.valueOf(flagName));
|
||||
}
|
||||
return flags;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
private String getRacingProcedureClassFlagKey(RacingProcedureType type) {
|
||||
String key;
|
||||
switch (type) {
|
||||
case RRS26:
|
||||
key = key(R.string.preference_racing_procedure_rrs26_classflag_key);
|
||||
break;
|
||||
case GateStart:
|
||||
key = key(R.string.preference_racing_procedure_gatestart_classflag_key);
|
||||
break;
|
||||
case ESS:
|
||||
key = key(R.string.preference_racing_procedure_ess_classflag_key);
|
||||
default:
|
||||
throw new IllegalArgumentException("Unknown racing procedure type.");
|
||||
}
|
||||
return key;
|
||||
}
|
||||
|
||||
private String getRacingProcedureHasIndividualRecallKey(RacingProcedureType type) {
|
||||
String key;
|
||||
switch (type) {
|
||||
case RRS26:
|
||||
key = key(R.string.preference_racing_procedure_rrs26_hasxray_key);
|
||||
break;
|
||||
case GateStart:
|
||||
key = key(R.string.preference_racing_procedure_gatestart_hasxray_key);
|
||||
break;
|
||||
case ESS:
|
||||
key = key(R.string.preference_racing_procedure_ess_hasxray_key);
|
||||
default:
|
||||
throw new IllegalArgumentException("Unknown racing procedure type.");
|
||||
}
|
||||
return key;
|
||||
}
|
||||
}
|
||||
+2
-1
@@ -22,6 +22,7 @@ import com.sap.sailing.domain.base.configuration.DeviceConfiguration;
|
||||
import com.sap.sailing.domain.base.configuration.DeviceConfigurationIdentifier;
|
||||
import com.sap.sailing.domain.base.configuration.RacingProceduresConfiguration;
|
||||
import com.sap.sailing.domain.base.configuration.ConfigurationLoader;
|
||||
import com.sap.sailing.domain.base.configuration.impl.EmptyRacingProceduresConfiguration;
|
||||
import com.sap.sailing.domain.base.impl.BoatClassImpl;
|
||||
import com.sap.sailing.domain.base.impl.CompetitorImpl;
|
||||
import com.sap.sailing.domain.base.impl.CourseAreaImpl;
|
||||
@@ -77,7 +78,7 @@ public class OfflineDataManager extends DataManager {
|
||||
SeriesWithRows qualifying = new SeriesWithRowsImpl("Qualifying", false, null);
|
||||
SeriesWithRows medal = new SeriesWithRowsImpl("Medal", true, null);
|
||||
RaceGroup raceGroup = new RaceGroupImpl("ESS", new BoatClassImpl("X40", false), null, Arrays.asList(qualifying,
|
||||
medal), RacingProcedureType.RRS26, CourseDesignerMode.BY_NAME);
|
||||
medal), RacingProcedureType.RRS26, CourseDesignerMode.BY_NAME, new EmptyRacingProceduresConfiguration());
|
||||
|
||||
List<Competitor> competitors = new ArrayList<Competitor>();
|
||||
competitors.add(new CompetitorImpl(UUID.randomUUID(), "SAP Extreme Sailing Team", null, null));
|
||||
|
||||
+5
-16
@@ -11,20 +11,20 @@ import android.content.Context;
|
||||
import android.content.Loader;
|
||||
import android.os.Bundle;
|
||||
|
||||
import com.sap.sailing.domain.base.BoatClass;
|
||||
import com.sap.sailing.domain.base.Competitor;
|
||||
import com.sap.sailing.domain.base.CourseArea;
|
||||
import com.sap.sailing.domain.base.CourseBase;
|
||||
import com.sap.sailing.domain.base.EventBase;
|
||||
import com.sap.sailing.domain.base.Mark;
|
||||
import com.sap.sailing.domain.base.SharedDomainFactory;
|
||||
import com.sap.sailing.domain.base.configuration.ConfigurationLoader;
|
||||
import com.sap.sailing.domain.base.configuration.DeviceConfiguration;
|
||||
import com.sap.sailing.domain.base.configuration.DeviceConfigurationIdentifier;
|
||||
import com.sap.sailing.domain.base.configuration.RacingProceduresConfiguration;
|
||||
import com.sap.sailing.domain.base.configuration.ConfigurationLoader;
|
||||
import com.sap.sailing.domain.racelog.RaceLogServletConstants;
|
||||
import com.sap.sailing.racecommittee.app.data.clients.LoadClient;
|
||||
import com.sap.sailing.racecommittee.app.data.deserialization.impl.PreferencesBasedDeviceConfigurationJsonDeserializer;
|
||||
import com.sap.sailing.racecommittee.app.data.deserialization.impl.PreferencesBasedRacingProceduresConfigurationJsonDeserializer;
|
||||
import com.sap.sailing.racecommittee.app.data.handlers.CompetitorsDataHandler;
|
||||
import com.sap.sailing.racecommittee.app.data.handlers.CourseBaseHandler;
|
||||
import com.sap.sailing.racecommittee.app.data.handlers.DataHandler;
|
||||
@@ -55,19 +55,11 @@ import com.sap.sailing.server.gateway.deserialization.coursedata.impl.CourseBase
|
||||
import com.sap.sailing.server.gateway.deserialization.coursedata.impl.GateDeserializer;
|
||||
import com.sap.sailing.server.gateway.deserialization.coursedata.impl.MarkDeserializer;
|
||||
import com.sap.sailing.server.gateway.deserialization.coursedata.impl.WaypointDeserializer;
|
||||
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.CompetitorJsonDeserializer;
|
||||
import com.sap.sailing.server.gateway.deserialization.impl.CourseAreaJsonDeserializer;
|
||||
import com.sap.sailing.server.gateway.deserialization.impl.EventBaseJsonDeserializer;
|
||||
import com.sap.sailing.server.gateway.deserialization.impl.FleetDeserializer;
|
||||
import com.sap.sailing.server.gateway.deserialization.impl.VenueJsonDeserializer;
|
||||
import com.sap.sailing.server.gateway.deserialization.racegroup.impl.RaceCellDeserializer;
|
||||
import com.sap.sailing.server.gateway.deserialization.racegroup.impl.RaceGroupDeserializer;
|
||||
import com.sap.sailing.server.gateway.deserialization.racegroup.impl.RaceRowDeserializer;
|
||||
import com.sap.sailing.server.gateway.deserialization.racegroup.impl.SeriesWithRowsDeserializer;
|
||||
import com.sap.sailing.server.gateway.deserialization.racelog.impl.RaceLogDeserializer;
|
||||
import com.sap.sailing.server.gateway.deserialization.racelog.impl.RaceLogEventDeserializer;
|
||||
|
||||
/**
|
||||
* Enables accessing of data.
|
||||
@@ -142,13 +134,10 @@ public class OnlineDataManager extends DataManager {
|
||||
ConfigurationLoader<RacingProceduresConfiguration> configuration =
|
||||
new PreferencesBasedRacingProceduresConfiguration(preferences);
|
||||
|
||||
JsonDeserializer<BoatClass> boatClassDeserializer = new BoatClassJsonDeserializer(domainFactory);
|
||||
JsonDeserializer<RacingProceduresConfiguration> proceduresDeserializer =
|
||||
PreferencesBasedRacingProceduresConfigurationJsonDeserializer.create(preferences);
|
||||
DataParser<Collection<ManagedRace>> parser = new ManagedRacesDataParser(preferences.getAuthor(),
|
||||
configuration,
|
||||
new RaceGroupDeserializer(boatClassDeserializer, new SeriesWithRowsDeserializer(
|
||||
new RaceRowDeserializer(new FleetDeserializer(new ColorDeserializer()),
|
||||
new RaceCellDeserializer(new RaceLogDeserializer(
|
||||
RaceLogEventDeserializer.create(domainFactory)))))));
|
||||
configuration, RaceGroupDeserializer.create(domainFactory, proceduresDeserializer));
|
||||
DataHandler<Collection<ManagedRace>> handler = new ManagedRacesDataHandler(OnlineDataManager.this);
|
||||
return new OnlineDataLoader<Collection<ManagedRace>>(context, new URL(preferences.getServerBaseURL()
|
||||
+ "/sailingserver/rc/racegroups?"+
|
||||
|
||||
+3
-2
@@ -14,7 +14,7 @@ public class PreferencesBasedDeviceConfigurationJsonDeserializer extends DeviceC
|
||||
|
||||
public static PreferencesBasedDeviceConfigurationJsonDeserializer create(final AppPreferences preferences) {
|
||||
return new PreferencesBasedDeviceConfigurationJsonDeserializer(preferences,
|
||||
new PreferencesBasedRacingProceduresConfigurationJsonDeserializer(preferences));
|
||||
PreferencesBasedRacingProceduresConfigurationJsonDeserializer.create(preferences));
|
||||
}
|
||||
|
||||
private final AppPreferences preferences;
|
||||
@@ -31,7 +31,8 @@ public class PreferencesBasedDeviceConfigurationJsonDeserializer extends DeviceC
|
||||
(PreferencesBasedRacingProceduresConfiguration) proceduresConfiguration);
|
||||
}
|
||||
|
||||
public PreferencesBasedDeviceConfiguration deserializeAsStored(JSONObject object) throws JsonDeserializationException {
|
||||
public PreferencesBasedDeviceConfiguration deserializeAsStored(JSONObject object)
|
||||
throws JsonDeserializationException {
|
||||
return (PreferencesBasedDeviceConfiguration) deserialize(object);
|
||||
}
|
||||
|
||||
|
||||
+12
-1
@@ -6,13 +6,24 @@ import com.sap.sailing.domain.base.configuration.impl.RacingProceduresConfigurat
|
||||
import com.sap.sailing.racecommittee.app.AppPreferences;
|
||||
import com.sap.sailing.racecommittee.app.domain.configuration.impl.PreferencesBasedRacingProceduresConfiguration;
|
||||
import com.sap.sailing.server.gateway.deserialization.JsonDeserializationException;
|
||||
import com.sap.sailing.server.gateway.deserialization.impl.ESSConfigurationJsonDeserializer;
|
||||
import com.sap.sailing.server.gateway.deserialization.impl.GateStartConfigurationJsonDeserializer;
|
||||
import com.sap.sailing.server.gateway.deserialization.impl.RRS26ConfigurationJsonDeserializer;
|
||||
import com.sap.sailing.server.gateway.deserialization.impl.RacingProceduresConfigurationJsonDeserializer;
|
||||
|
||||
public class PreferencesBasedRacingProceduresConfigurationJsonDeserializer extends RacingProceduresConfigurationJsonDeserializer {
|
||||
|
||||
private final AppPreferences preferences;
|
||||
|
||||
public PreferencesBasedRacingProceduresConfigurationJsonDeserializer(AppPreferences preferences) {
|
||||
public static PreferencesBasedRacingProceduresConfigurationJsonDeserializer create(AppPreferences preferences) {
|
||||
return new PreferencesBasedRacingProceduresConfigurationJsonDeserializer(preferences, RRS26ConfigurationJsonDeserializer.create(),
|
||||
GateStartConfigurationJsonDeserializer.create(), ESSConfigurationJsonDeserializer.create());
|
||||
}
|
||||
|
||||
public PreferencesBasedRacingProceduresConfigurationJsonDeserializer(AppPreferences preferences,
|
||||
RRS26ConfigurationJsonDeserializer rrs26, GateStartConfigurationJsonDeserializer gateStart,
|
||||
ESSConfigurationJsonDeserializer ess) {
|
||||
super(rrs26, gateStart, ess);
|
||||
this.preferences = preferences;
|
||||
}
|
||||
|
||||
|
||||
+12
-4
@@ -24,14 +24,16 @@ import com.sap.sailing.domain.racelog.state.impl.RaceStateImpl;
|
||||
import com.sap.sailing.racecommittee.app.domain.FleetIdentifier;
|
||||
import com.sap.sailing.racecommittee.app.domain.ManagedRace;
|
||||
import com.sap.sailing.racecommittee.app.domain.ManagedRaceIdentifier;
|
||||
import com.sap.sailing.racecommittee.app.domain.configuration.impl.PreferencesBasedRacingProceduresConfiguration;
|
||||
import com.sap.sailing.racecommittee.app.domain.impl.FleetIdentifierImpl;
|
||||
import com.sap.sailing.racecommittee.app.domain.impl.ManagedRaceIdentifierImpl;
|
||||
import com.sap.sailing.racecommittee.app.domain.impl.ManagedRaceImpl;
|
||||
import com.sap.sailing.racecommittee.app.logging.ExLog;
|
||||
import com.sap.sailing.server.gateway.deserialization.JsonDeserializer;
|
||||
import com.sap.sailing.server.gateway.deserialization.impl.Helpers;
|
||||
|
||||
public class ManagedRacesDataParser implements DataParser<Collection<ManagedRace>> {
|
||||
// private static final String TAG = ManagedRacesDataParser.class.getName();
|
||||
private static final String TAG = ManagedRacesDataParser.class.getName();
|
||||
|
||||
private final JsonDeserializer<RaceGroup> deserializer;
|
||||
private final ConfigurationLoader<RacingProceduresConfiguration> globalConfiguration;
|
||||
@@ -53,15 +55,21 @@ public class ManagedRacesDataParser implements DataParser<Collection<ManagedRace
|
||||
JSONObject json = Helpers.toJSONObjectSafe(element);
|
||||
|
||||
RaceGroup group = deserializer.deserialize(json);
|
||||
// TODO: store configuration of RaceGroup!
|
||||
globalConfiguration.store();
|
||||
|
||||
storeRaceGroupLocalConfiguration(group);
|
||||
addManagedRaces(managedRaces, group);
|
||||
}
|
||||
|
||||
return managedRaces;
|
||||
}
|
||||
|
||||
private void storeRaceGroupLocalConfiguration(RaceGroup group) {
|
||||
RacingProceduresConfiguration groupConfiguration = group.getRacingProceduresConfiguration();
|
||||
if (groupConfiguration != null && groupConfiguration instanceof PreferencesBasedRacingProceduresConfiguration) {
|
||||
ExLog.i(TAG, "Trying to store the RaceGroup's local procedures configuration.");
|
||||
((PreferencesBasedRacingProceduresConfiguration)groupConfiguration).store();
|
||||
}
|
||||
}
|
||||
|
||||
private void addManagedRaces(Collection<ManagedRace> target, RaceGroup raceGroup) {
|
||||
for (SeriesWithRows series : raceGroup.getSeries()) {
|
||||
for (RaceRow raceRow : series.getRaceRows()) {
|
||||
|
||||
+53
-14
@@ -1,8 +1,19 @@
|
||||
package com.sap.sailing.racecommittee.app.domain.configuration.impl;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashSet;
|
||||
|
||||
import com.sap.sailing.domain.base.configuration.RacingProceduresConfiguration;
|
||||
import com.sap.sailing.domain.base.configuration.ConfigurationLoader;
|
||||
import com.sap.sailing.domain.base.configuration.impl.ESSConfigurationImpl;
|
||||
import com.sap.sailing.domain.base.configuration.impl.GateStartConfigurationImpl;
|
||||
import com.sap.sailing.domain.base.configuration.impl.RRS26ConfigurationImpl;
|
||||
import com.sap.sailing.domain.base.configuration.impl.RacingProceduresConfigurationImpl;
|
||||
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.domain.common.racelog.Flags;
|
||||
import com.sap.sailing.domain.common.racelog.RacingProcedureType;
|
||||
import com.sap.sailing.racecommittee.app.AppPreferences;
|
||||
import com.sap.sailing.racecommittee.app.logging.ExLog;
|
||||
|
||||
@@ -20,11 +31,22 @@ public class PreferencesBasedRacingProceduresConfiguration extends RacingProcedu
|
||||
|
||||
@Override
|
||||
public RacingProceduresConfiguration load() {
|
||||
// TODO: implement loading of RPC
|
||||
setClassFlag(null);
|
||||
setHasInidividualRecall(null);
|
||||
RRS26ConfigurationImpl rrs26 = new RRS26ConfigurationImpl();
|
||||
rrs26.setClassFlag(preferences.getRacingProcedureClassFlag(RacingProcedureType.RRS26));
|
||||
rrs26.setHasInidividualRecall(preferences.getRacingProcedureHasIndividualRecall(RacingProcedureType.RRS26));
|
||||
rrs26.setStartModeFlags(new ArrayList<Flags>(preferences.getRRS26StartmodeFlags()));
|
||||
setRRS26Configuration(rrs26);
|
||||
|
||||
GateStartConfigurationImpl gateStart = new GateStartConfigurationImpl();
|
||||
gateStart.setClassFlag(preferences.getRacingProcedureClassFlag(RacingProcedureType.GateStart));
|
||||
gateStart.setHasInidividualRecall(preferences.getRacingProcedureHasIndividualRecall(RacingProcedureType.GateStart));
|
||||
setGateStartConfiguration(gateStart);
|
||||
|
||||
ESSConfigurationImpl ess = new ESSConfigurationImpl();
|
||||
ess.setClassFlag(preferences.getRacingProcedureClassFlag(RacingProcedureType.ESS));
|
||||
ess.setHasInidividualRecall(preferences.getRacingProcedureHasIndividualRecall(RacingProcedureType.ESS));
|
||||
setESSConfiguration(ess);
|
||||
|
||||
setStartModeFlags(null);
|
||||
return copy();
|
||||
}
|
||||
|
||||
@@ -36,19 +58,36 @@ public class PreferencesBasedRacingProceduresConfiguration extends RacingProcedu
|
||||
}
|
||||
ExLog.i(TAG, "Storing new racing procedure configuration.");
|
||||
|
||||
// TODO: implement storing of RPC
|
||||
if (getClassFlag() != null) {
|
||||
|
||||
if (getRRS26Configuration() != null) {
|
||||
RRS26Configuration config = getRRS26Configuration();
|
||||
if (config.getClassFlag() != null) {
|
||||
preferences.setRacingProcedureClassFlag(RacingProcedureType.RRS26, config.getClassFlag());
|
||||
}
|
||||
|
||||
if (hasInidividualRecall() != null) {
|
||||
|
||||
if (config.hasInidividualRecall() != null) {
|
||||
preferences.setRacingProcedureHasIndividualRecall(RacingProcedureType.RRS26, config.hasInidividualRecall());
|
||||
}
|
||||
if (config.getStartModeFlags() != null) {
|
||||
preferences.setRRS26StartmodeFlags(new HashSet<Flags>(config.getStartModeFlags()));
|
||||
}
|
||||
}
|
||||
if (getGateStartConfiguration() != null) {
|
||||
GateStartConfiguration config = getGateStartConfiguration();
|
||||
if (config.getClassFlag() != null) {
|
||||
preferences.setRacingProcedureClassFlag(RacingProcedureType.GateStart, config.getClassFlag());
|
||||
}
|
||||
if (config.hasInidividualRecall() != null) {
|
||||
preferences.setRacingProcedureHasIndividualRecall(RacingProcedureType.GateStart, config.hasInidividualRecall());
|
||||
}
|
||||
}
|
||||
if (getESSConfiguration() != null) {
|
||||
ESSConfiguration config = getESSConfiguration();
|
||||
if (config.getClassFlag() != null) {
|
||||
preferences.setRacingProcedureClassFlag(RacingProcedureType.ESS, config.getClassFlag());
|
||||
}
|
||||
if (config.hasInidividualRecall() != null) {
|
||||
preferences.setRacingProcedureHasIndividualRecall(RacingProcedureType.ESS, config.hasInidividualRecall());
|
||||
}
|
||||
|
||||
if (getStartModeFlags() != null) {
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
+28
@@ -1,9 +1,17 @@
|
||||
package com.sap.sailing.racecommittee.app.ui.fragments.preference;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
import com.sap.sailing.racecommittee.app.ui.views.EditSetPreference;
|
||||
import com.sap.sailing.racecommittee.app.utils.MultiplePreferenceChangeListener;
|
||||
|
||||
import android.preference.CheckBoxPreference;
|
||||
import android.preference.ListPreference;
|
||||
import android.preference.MultiSelectListPreference;
|
||||
import android.preference.Preference;
|
||||
import android.preference.Preference.OnPreferenceChangeListener;
|
||||
import android.preference.PreferenceFragment;
|
||||
@@ -14,6 +22,11 @@ import android.preference.PreferenceManager;
|
||||
*/
|
||||
public class BasePreferenceFragment extends PreferenceFragment {
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
protected <T extends Preference> T findPreference(int resourceId) {
|
||||
return (T) findPreference(getString(resourceId));
|
||||
}
|
||||
|
||||
protected static Preference.OnPreferenceChangeListener sBindPreferenceSummaryToValueListener = new Preference.OnPreferenceChangeListener() {
|
||||
@Override
|
||||
public boolean onPreferenceChange(Preference preference, Object value) {
|
||||
@@ -27,6 +40,12 @@ public class BasePreferenceFragment extends PreferenceFragment {
|
||||
? listPreference.getEntries()[index]
|
||||
: null);
|
||||
|
||||
} else if (preference instanceof MultiSelectListPreference || preference instanceof EditSetPreference) {
|
||||
@SuppressWarnings("unchecked")
|
||||
Set<String> setValue = (Set<String>) value;
|
||||
List<String> listValue = new ArrayList<String>(setValue);
|
||||
Collections.sort(listValue);
|
||||
preference.setSummary(listValue.toString());
|
||||
} else {
|
||||
preference.setSummary(stringValue);
|
||||
}
|
||||
@@ -52,6 +71,15 @@ public class BasePreferenceFragment extends PreferenceFragment {
|
||||
.getInt(preference.getKey(), 0));
|
||||
}
|
||||
|
||||
protected static void bindPreferenceSummaryToSet(Preference preference) {
|
||||
addOnPreferenceChangeListener(preference, sBindPreferenceSummaryToValueListener);
|
||||
|
||||
sBindPreferenceSummaryToValueListener.onPreferenceChange(preference,
|
||||
PreferenceManager
|
||||
.getDefaultSharedPreferences(preference.getContext())
|
||||
.getStringSet(preference.getKey(), new HashSet<String>()));
|
||||
}
|
||||
|
||||
protected static void bindPreferenceToCheckbox(CheckBoxPreference checkboxPreference, final Preference target) {
|
||||
target.setEnabled(checkboxPreference.isChecked());
|
||||
addOnPreferenceChangeListener(checkboxPreference, new Preference.OnPreferenceChangeListener() {
|
||||
|
||||
+11
-5
@@ -10,6 +10,7 @@ import android.preference.ListPreference;
|
||||
|
||||
import com.sap.sailing.domain.common.CourseDesignerMode;
|
||||
import com.sap.sailing.racecommittee.app.R;
|
||||
import com.sap.sailing.racecommittee.app.ui.views.EditSetPreference;
|
||||
|
||||
public class CourseDesignerPreferenceFragment extends BasePreferenceFragment {
|
||||
@Override
|
||||
@@ -18,14 +19,19 @@ public class CourseDesignerPreferenceFragment extends BasePreferenceFragment {
|
||||
addPreferencesFromResource(R.xml.preference_course_designer);
|
||||
|
||||
setupCourseDesignerTypePreferences();
|
||||
bindPreferenceSummaryToValue(findPreference(getString(R.string.preference_course_designer_by_name_course_names_key)));
|
||||
setupCourseDesignerByNameCourseNames();
|
||||
|
||||
bindPreferenceSummaryToSet(findPreference(R.string.preference_course_designer_by_name_course_names_key));
|
||||
}
|
||||
|
||||
private void setupCourseDesignerByNameCourseNames() {
|
||||
EditSetPreference preference = findPreference(R.string.preference_course_designer_by_name_course_names_key);
|
||||
preference.setExampleValues(getResources().getStringArray(R.array.preference_course_designer_by_name_course_names_example));
|
||||
}
|
||||
|
||||
private void setupCourseDesignerTypePreferences() {
|
||||
CheckBoxPreference overrideCourseDesignerPreference = (CheckBoxPreference)
|
||||
findPreference(getString(R.string.preference_course_designer_is_overridden_key));
|
||||
final ListPreference courseDesignerPreference = (ListPreference)
|
||||
findPreference(getString(R.string.preference_course_designer_override_key));
|
||||
CheckBoxPreference overrideCourseDesignerPreference = findPreference(R.string.preference_course_designer_is_overridden_key);
|
||||
final ListPreference courseDesignerPreference = findPreference(R.string.preference_course_designer_override_key);
|
||||
|
||||
List<CharSequence> entries = new ArrayList<CharSequence>();
|
||||
List<CharSequence> entryValues = new ArrayList<CharSequence>();
|
||||
|
||||
-97
@@ -1,97 +0,0 @@
|
||||
package com.sap.sailing.racecommittee.app.ui.fragments.preference;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
|
||||
import com.sap.sailing.racecommittee.app.R;
|
||||
import com.sap.sailing.racecommittee.app.logging.ExLog;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.SharedPreferences;
|
||||
import android.content.res.TypedArray;
|
||||
import android.preference.DialogPreference;
|
||||
import android.util.AttributeSet;
|
||||
|
||||
public class EditListPreference extends DialogPreference {
|
||||
|
||||
private static final String TAG = EditListPreference.class.getName();
|
||||
|
||||
private static final Set<String> defaultFallbackValue = new HashSet<String>();
|
||||
private Set<String> currentValue;
|
||||
|
||||
public EditListPreference(Context context, AttributeSet attrs) {
|
||||
super(context, attrs);
|
||||
|
||||
setDialogLayoutResource(R.layout.race_choose_line_opening_time_view);
|
||||
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
@Override
|
||||
protected void onSetInitialValue(boolean restorePersistedValue, Object defaultValue) {
|
||||
if (restorePersistedValue) {
|
||||
// Restore existing state
|
||||
currentValue = getPersistedStringSet(defaultFallbackValue);
|
||||
} else {
|
||||
// Set default state from the XML attribute
|
||||
currentValue = (Set<String>) defaultValue;
|
||||
persistStringSet(currentValue);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Object onGetDefaultValue(TypedArray a, int index) {
|
||||
return toSet(a.getString(index));
|
||||
}
|
||||
|
||||
protected static Set<String> toSet(String csl) {
|
||||
if (csl == null || csl.isEmpty()) {
|
||||
return new HashSet<String>();
|
||||
}
|
||||
|
||||
String[] values = csl.split(",");
|
||||
for (int i = 0; i < values.length; i++) {
|
||||
values[i] = values[i].trim();
|
||||
}
|
||||
|
||||
return new HashSet<String>(Arrays.asList(values));
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onDialogClosed(boolean positiveResult) {
|
||||
if (positiveResult) {
|
||||
ExLog.i(TAG, "Storing result...");
|
||||
persistStringSet(currentValue);
|
||||
}
|
||||
}
|
||||
|
||||
private boolean persistStringSet(Set<String> value) {
|
||||
if (shouldPersist()) {
|
||||
// Shouldn't store null
|
||||
if (value == getPersistedStringSet(null)) {
|
||||
// It's already there, so the same as persisting
|
||||
return true;
|
||||
}
|
||||
|
||||
SharedPreferences.Editor editor = getEditor();
|
||||
editor.putStringSet(getKey(), value);
|
||||
if (shouldCommit()) {
|
||||
editor.commit();
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
protected Set<String> getPersistedStringSet(Set<String> defaultReturnValue) {
|
||||
if (!shouldPersist()) {
|
||||
return defaultReturnValue;
|
||||
}
|
||||
|
||||
return getSharedPreferences().getStringSet(getKey(), defaultReturnValue);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
+13
-3
@@ -8,6 +8,7 @@ import android.preference.Preference.OnPreferenceChangeListener;
|
||||
import android.widget.Toast;
|
||||
|
||||
import com.sap.sailing.racecommittee.app.R;
|
||||
import com.sap.sailing.racecommittee.app.ui.views.EditSetPreference;
|
||||
|
||||
public class GeneralPreferenceFragment extends BasePreferenceFragment {
|
||||
@Override
|
||||
@@ -17,9 +18,18 @@ public class GeneralPreferenceFragment extends BasePreferenceFragment {
|
||||
|
||||
setupLanguageButton();
|
||||
setupServerUrlBox();
|
||||
bindPreferenceSummaryToValue(findPreference(getString(R.string.preference_server_url_key)));
|
||||
bindPreferenceSummaryToValue(findPreference(getString(R.string.preference_course_areas_key)));
|
||||
bindPreferenceSummaryToValue(findPreference(getString(R.string.preference_mail_key)));
|
||||
setupCourseAreasList();
|
||||
|
||||
bindPreferenceSummaryToValue(findPreference(R.string.preference_server_url_key));
|
||||
bindPreferenceSummaryToSet(findPreference(R.string.preference_course_areas_key));
|
||||
bindPreferenceSummaryToValue(findPreference(R.string.preference_mail_key));
|
||||
}
|
||||
|
||||
private void setupCourseAreasList() {
|
||||
EditSetPreference preference = findPreference(R.string.preference_course_areas_key);
|
||||
//ReadonlyDataManager dataManager = DataManager.create(getActivity());
|
||||
|
||||
preference.setExampleValues(getResources().getStringArray(R.array.preference_course_areas_example));
|
||||
}
|
||||
|
||||
private void setupServerUrlBox() {
|
||||
|
||||
+49
-6
@@ -7,7 +7,9 @@ import java.util.List;
|
||||
import android.os.Bundle;
|
||||
import android.preference.CheckBoxPreference;
|
||||
import android.preference.ListPreference;
|
||||
import android.preference.MultiSelectListPreference;
|
||||
|
||||
import com.sap.sailing.domain.common.racelog.Flags;
|
||||
import com.sap.sailing.domain.common.racelog.RacingProcedureType;
|
||||
import com.sap.sailing.racecommittee.app.R;
|
||||
|
||||
@@ -18,13 +20,32 @@ public class RacingProcedurePreferenceFragment extends BasePreferenceFragment {
|
||||
addPreferencesFromResource(R.xml.preference_racing_procedure);
|
||||
|
||||
setupRacingProcedurePreferences();
|
||||
setupRRS26();
|
||||
setupGateStart();
|
||||
setupESS();
|
||||
|
||||
bindPreferenceSummaryToValue(findPreference(R.string.preference_racing_procedure_rrs26_classflag_key));
|
||||
bindPreferenceSummaryToSet(findPreference(R.string.preference_racing_procedure_rrs26_startmode_flags_key));
|
||||
bindPreferenceSummaryToValue(findPreference(R.string.preference_racing_procedure_gatestart_classflag_key));
|
||||
bindPreferenceSummaryToValue(findPreference(R.string.preference_racing_procedure_ess_classflag_key));
|
||||
}
|
||||
|
||||
private void setupRRS26() {
|
||||
setupStartmodeFlagsList();
|
||||
setupClassFlagList(this.<ListPreference>findPreference(R.string.preference_racing_procedure_rrs26_classflag_key));
|
||||
}
|
||||
|
||||
private void setupGateStart() {
|
||||
setupClassFlagList(this.<ListPreference>findPreference(R.string.preference_racing_procedure_gatestart_classflag_key));
|
||||
}
|
||||
|
||||
private void setupESS() {
|
||||
setupClassFlagList(this.<ListPreference>findPreference(R.string.preference_racing_procedure_ess_classflag_key));
|
||||
}
|
||||
|
||||
private void setupRacingProcedurePreferences() {
|
||||
CheckBoxPreference overrideStartProcedurePreference = (CheckBoxPreference)
|
||||
findPreference(getString(R.string.preference_racing_procedure_is_overridden_key));
|
||||
final ListPreference startProcedurePreference = (ListPreference)
|
||||
findPreference(getString(R.string.preference_racing_procedure_override_key));
|
||||
CheckBoxPreference overrideStartProcedurePreference = findPreference(R.string.preference_racing_procedure_is_overridden_key);
|
||||
final ListPreference startProcedurePreference = findPreference(R.string.preference_racing_procedure_override_key);
|
||||
|
||||
List<CharSequence> entries = new ArrayList<CharSequence>();
|
||||
List<CharSequence> entryValues = new ArrayList<CharSequence>();
|
||||
@@ -33,10 +54,32 @@ public class RacingProcedurePreferenceFragment extends BasePreferenceFragment {
|
||||
entryValues.add(type.name());
|
||||
}
|
||||
|
||||
startProcedurePreference.setEntries(entries.toArray(new CharSequence[0]));
|
||||
startProcedurePreference.setEntryValues(entryValues.toArray(new CharSequence[0]));
|
||||
startProcedurePreference.setEntries(entries.toArray(new CharSequence[entries.size()]));
|
||||
startProcedurePreference.setEntryValues(entryValues.toArray(new CharSequence[entryValues.size()]));
|
||||
|
||||
bindPreferenceToCheckbox(overrideStartProcedurePreference, startProcedurePreference);
|
||||
bindPreferenceSummaryToValue(startProcedurePreference);
|
||||
}
|
||||
|
||||
private void setupStartmodeFlagsList() {
|
||||
MultiSelectListPreference listPreference = findPreference(R.string.preference_racing_procedure_rrs26_startmode_flags_key);
|
||||
List<String> flags = new ArrayList<String>();
|
||||
for (Flags flag : Flags.validValues()) {
|
||||
flags.add(flag.name());
|
||||
}
|
||||
listPreference.setEntries(flags.toArray(new String[flags.size()]));
|
||||
listPreference.setEntryValues(flags.toArray(new String[flags.size()]));
|
||||
}
|
||||
|
||||
private void setupClassFlagList(ListPreference preference) {
|
||||
List<CharSequence> entries = new ArrayList<CharSequence>();
|
||||
List<CharSequence> entryValues = new ArrayList<CharSequence>();
|
||||
for (Flags flag: Flags.validValues()) {
|
||||
entries.add(flag.toString());
|
||||
entryValues.add(flag.name());
|
||||
}
|
||||
|
||||
preference.setEntries(entries.toArray(new CharSequence[entries.size()]));
|
||||
preference.setEntryValues(entryValues.toArray(new CharSequence[entryValues.size()]));
|
||||
}
|
||||
}
|
||||
+153
@@ -0,0 +1,153 @@
|
||||
package com.sap.sailing.racecommittee.app.ui.views;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.SharedPreferences;
|
||||
import android.content.res.TypedArray;
|
||||
import android.preference.DialogPreference;
|
||||
import android.text.Editable;
|
||||
import android.text.TextWatcher;
|
||||
import android.util.AttributeSet;
|
||||
import android.view.View;
|
||||
import android.view.View.OnClickListener;
|
||||
import android.widget.ArrayAdapter;
|
||||
import android.widget.AutoCompleteTextView;
|
||||
import android.widget.Button;
|
||||
import android.widget.ListView;
|
||||
|
||||
import com.sap.sailing.racecommittee.app.R;
|
||||
import com.sap.sailing.racecommittee.app.logging.ExLog;
|
||||
import com.sap.sailing.racecommittee.app.utils.ArrayRemoveAdapter;
|
||||
|
||||
public class EditSetPreference extends DialogPreference {
|
||||
|
||||
private static final String TAG = EditSetPreference.class.getName();
|
||||
|
||||
private static final List<String> defaultFallbackValue = new ArrayList<String>();
|
||||
private List<String> currentValue;
|
||||
|
||||
private List<String> exampleValues;
|
||||
|
||||
public EditSetPreference(Context context, AttributeSet attrs) {
|
||||
super(context, attrs);
|
||||
this.exampleValues = new ArrayList<String>();
|
||||
setDialogLayoutResource(R.layout.edit_set_preference);
|
||||
}
|
||||
|
||||
public void setExampleValues(String[] values) {
|
||||
this.exampleValues = Arrays.asList(values);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected View onCreateDialogView() {
|
||||
View view = super.onCreateDialogView();
|
||||
|
||||
final AutoCompleteTextView inputView = (AutoCompleteTextView) view.findViewById(R.id.edit_set_preference_input);
|
||||
final Button addButton = (Button) view.findViewById(R.id.edit_set_preference_add);
|
||||
final ListView listView = (ListView) view.findViewById(R.id.edit_set_preference_list);
|
||||
|
||||
// setup list view
|
||||
final ArrayRemoveAdapter<String> adapter = new ArrayRemoveAdapter<String>(view.getContext(), currentValue);
|
||||
listView.setEmptyView(view.findViewById(R.id.edit_set_preference_list_empty));
|
||||
listView.setAdapter(adapter);
|
||||
|
||||
// setup inputView
|
||||
ArrayAdapter<String> autoCompleteAdapter = new ArrayAdapter<String>(view.getContext(), android.R.layout.simple_dropdown_item_1line, exampleValues);
|
||||
inputView.setAdapter(autoCompleteAdapter);
|
||||
inputView.addTextChangedListener(new TextWatcher() {
|
||||
@Override
|
||||
public void afterTextChanged(Editable s) {
|
||||
boolean invalid = s.length() == 0 || currentValue.contains(s.toString());
|
||||
addButton.setEnabled(!invalid);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTextChanged(CharSequence s, int start, int before, int count) { }
|
||||
|
||||
@Override
|
||||
public void beforeTextChanged(CharSequence s, int start, int count, int after) { }
|
||||
});
|
||||
|
||||
// setup add button
|
||||
addButton.setOnClickListener(new OnClickListener() {
|
||||
|
||||
@Override
|
||||
public void onClick(View arg0) {
|
||||
Editable text = inputView.getText();
|
||||
adapter.add(text.toString());
|
||||
text.clear();
|
||||
}
|
||||
});
|
||||
|
||||
return view;
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
@Override
|
||||
protected void onSetInitialValue(boolean restorePersistedValue, Object defaultValue) {
|
||||
if (restorePersistedValue) {
|
||||
// Restore existing state
|
||||
currentValue = getPersistedStringSet(defaultFallbackValue);
|
||||
} else {
|
||||
// Set default state from the XML attribute
|
||||
currentValue = new ArrayList<String>((Set<String>) defaultValue);
|
||||
persistStringSet(currentValue);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Object onGetDefaultValue(TypedArray a, int index) {
|
||||
Set<String> defaultValue = new HashSet<String>();
|
||||
for (CharSequence chars : a.getTextArray(index)) {
|
||||
defaultValue.add(chars.toString());
|
||||
}
|
||||
return defaultValue;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onDialogClosed(boolean positiveResult) {
|
||||
if (positiveResult) {
|
||||
if (callChangeListener(new HashSet<String>(currentValue))) {
|
||||
ExLog.i(TAG, "Storing result...");
|
||||
persistStringSet(currentValue);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private boolean persistStringSet(List<String> value) {
|
||||
if (shouldPersist()) {
|
||||
// Shouldn't store null
|
||||
if (value == getPersistedStringSet(null)) {
|
||||
// It's already there, so the same as persisting
|
||||
return true;
|
||||
}
|
||||
|
||||
SharedPreferences.Editor editor = getEditor();
|
||||
editor.putStringSet(getKey(), new HashSet<String>(value));
|
||||
if (shouldCommit()) {
|
||||
editor.commit();
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
protected List<String> getPersistedStringSet(List<String> defaultReturnValue) {
|
||||
if (!shouldPersist()) {
|
||||
return defaultReturnValue;
|
||||
}
|
||||
|
||||
Set<String> fallbackDefault = defaultReturnValue == null ? null : new HashSet<String>(defaultReturnValue);
|
||||
Set<String> value = getSharedPreferences().getStringSet(getKey(), fallbackDefault);
|
||||
|
||||
return value == null ? null : new ArrayList<String>(value);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
+65
@@ -0,0 +1,65 @@
|
||||
package com.sap.sailing.racecommittee.app.utils;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import android.content.Context;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.View.OnClickListener;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.ArrayAdapter;
|
||||
import android.widget.ImageButton;
|
||||
import android.widget.TextView;
|
||||
|
||||
import com.sap.sailing.racecommittee.app.R;
|
||||
|
||||
public class ArrayRemoveAdapter<T> extends ArrayAdapter<T> {
|
||||
|
||||
public interface NotifyDataSetChangedListener<T> {
|
||||
void onNotifyDataSetChanged(ArrayRemoveAdapter<T> adapter);
|
||||
}
|
||||
|
||||
private NotifyDataSetChangedListener<T> listener;
|
||||
|
||||
public ArrayRemoveAdapter(Context context, List<T> objects) {
|
||||
super(context, R.layout.array_remove_adapter, objects);
|
||||
}
|
||||
|
||||
@Override
|
||||
public View getView(int position, View convertView, ViewGroup parent) {
|
||||
if (convertView == null) {
|
||||
LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
|
||||
convertView = inflater.inflate(R.layout.array_remove_adapter, parent, false);
|
||||
}
|
||||
|
||||
TextView text = (TextView) convertView.findViewById(android.R.id.text1);
|
||||
ImageButton button = (ImageButton) convertView.findViewById(R.id.array_remove_adapter_remove);
|
||||
|
||||
final T item = getItem(position);
|
||||
text.setText(item.toString());
|
||||
button.setOnClickListener(new OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
remove(item);
|
||||
}
|
||||
});
|
||||
return convertView;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void notifyDataSetChanged() {
|
||||
super.notifyDataSetChanged();
|
||||
if (listener != null) {
|
||||
listener.onNotifyDataSetChanged(this);
|
||||
}
|
||||
}
|
||||
|
||||
public NotifyDataSetChangedListener<T> getDataSetChangedListener() {
|
||||
return listener;
|
||||
}
|
||||
|
||||
public void setDataSetChangedListener(NotifyDataSetChangedListener<T> listener) {
|
||||
this.listener = listener;
|
||||
}
|
||||
|
||||
}
|
||||
Reference in new issue
Block a user