From ae6cc75b1c066341f5f2c5260cb7d93a192b413a Mon Sep 17 00:00:00 2001 From: Lukas Niemeier Date: Sat, 16 Nov 2013 11:49:47 +0100 Subject: [PATCH] # added configuration options for each racing procedures (DeviceConfiguration) --- .../impl/DomainObjectFactoryImpl.java | 38 ++++++-------- .../domain/persistence/impl/FieldNames.java | 4 +- .../impl/MongoObjectFactoryImpl.java | 32 ++++-------- .../racelog/state/test/RaceStateTest.java | 5 +- .../configuration/DeviceConfiguration.java | 2 + .../RacingProceduresConfiguration.java | 16 ++++++ .../configuration/StoreableConfiguration.java | 21 ++++++++ .../StoredDeviceConfiguration.java | 6 +++ .../StoredRacingProceduresConfiguration.java | 6 +++ .../impl/DeviceConfigurationImpl.java | 16 ++++++ .../RacingProceduresConfigurationImpl.java | 9 ++++ .../procedures/ESSConfiguration.java | 5 ++ .../procedures/GateStartConfiguration.java | 5 ++ .../procedures/RRS26Configuration.java | 5 ++ .../racelog/state/impl/RaceStateImpl.java | 10 +++- .../impl/ESSRacingProcedureImpl.java | 7 ++- .../impl/GateStartRacingProcedureImpl.java | 6 ++- .../impl/RRS26RacingProcedureImpl.java | 6 ++- .../impl/RacingProcedureFactoryImpl.java | 9 ++-- .../DeviceConfigurationJsonDeserializer.java | 22 ++++++-- ...oceduresConfigurationJsonDeserializer.java | 22 ++++++++ .../DeviceConfigurationJsonSerializer.java | 15 ++++++ ...ProceduresConfigurationJsonSerializer.java | 16 ++++++ .../impl/rc/ConfigurationJsonGetServlet.java | 2 +- .../racecommittee/app/data/DataManager.java | 9 ++-- .../racecommittee/app/data/DataStore.java | 6 +-- .../app/data/InMemoryDataStore.java | 8 +-- .../app/data/OfflineDataManager.java | 21 +++++--- .../app/data/OnlineDataManager.java | 51 ++++++++++--------- .../app/data/ReadonlyDataManager.java | 6 +-- ...leDeviceConfigurationJsonDeserializer.java | 29 ----------- ...edDeviceConfigurationJsonDeserializer.java | 40 +++++++++++++++ ...oceduresConfigurationJsonDeserializer.java | 29 +++++++++++ .../DeviceConfigurationDataHandler.java | 8 +-- .../parsers/DeviceConfigurationParser.java | 14 ++--- .../data/parsers/ManagedRacesDataParser.java | 19 +++---- .../ApplyableDeviceConfiguration.java | 9 ---- ...ava => StoredDeviceConfigurationImpl.java} | 35 ++++++++++--- ...oredRacingProceduresConfigurationImpl.java | 30 +++++++++++ .../app/ui/activities/LoginActivity.java | 8 +-- 40 files changed, 434 insertions(+), 173 deletions(-) create mode 100644 java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/base/configuration/RacingProceduresConfiguration.java create mode 100644 java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/base/configuration/StoreableConfiguration.java create mode 100644 java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/base/configuration/StoredDeviceConfiguration.java create mode 100644 java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/base/configuration/StoredRacingProceduresConfiguration.java create mode 100644 java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/base/configuration/impl/RacingProceduresConfigurationImpl.java create mode 100644 java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/base/configuration/procedures/ESSConfiguration.java create mode 100644 java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/base/configuration/procedures/GateStartConfiguration.java create mode 100644 java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/base/configuration/procedures/RRS26Configuration.java create mode 100644 java/com.sap.sailing.server.gateway.serialization/src/com/sap/sailing/server/gateway/deserialization/impl/RacingProceduresConfigurationJsonDeserializer.java create mode 100644 java/com.sap.sailing.server.gateway.serialization/src/com/sap/sailing/server/gateway/serialization/impl/RacingProceduresConfigurationJsonSerializer.java delete mode 100644 mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/data/deserialization/impl/ApplyableDeviceConfigurationJsonDeserializer.java create mode 100644 mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/data/deserialization/impl/StoredDeviceConfigurationJsonDeserializer.java create mode 100644 mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/data/deserialization/impl/StoredRacingProceduresConfigurationJsonDeserializer.java delete mode 100644 mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/domain/configuration/ApplyableDeviceConfiguration.java rename mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/domain/configuration/impl/{ApplyableDeviceConfigurationImpl.java => StoredDeviceConfigurationImpl.java} (53%) create mode 100644 mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/domain/configuration/impl/StoredRacingProceduresConfigurationImpl.java diff --git a/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/DomainObjectFactoryImpl.java b/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/DomainObjectFactoryImpl.java index bd883918cb1..5b8fa0f5504 100755 --- a/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/DomainObjectFactoryImpl.java +++ b/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/DomainObjectFactoryImpl.java @@ -16,6 +16,7 @@ import java.util.logging.Logger; import org.bson.types.ObjectId; import org.json.simple.JSONObject; import org.json.simple.parser.JSONParser; +import org.json.simple.parser.ParseException; import com.mongodb.BasicDBList; import com.mongodb.BasicDBObject; @@ -123,7 +124,10 @@ import com.sap.sailing.domain.tracking.Wind; import com.sap.sailing.domain.tracking.WindTrack; import com.sap.sailing.domain.tracking.impl.WindImpl; import com.sap.sailing.domain.tracking.impl.WindTrackImpl; +import com.sap.sailing.server.gateway.deserialization.JsonDeserializationException; +import com.sap.sailing.server.gateway.deserialization.JsonDeserializer; import com.sap.sailing.server.gateway.deserialization.impl.CompetitorJsonDeserializer; +import com.sap.sailing.server.gateway.deserialization.impl.DeviceConfigurationJsonDeserializer; import com.sap.sailing.server.gateway.deserialization.impl.Helpers; public class DomainObjectFactoryImpl implements DomainObjectFactory { @@ -1326,7 +1330,8 @@ public class DomainObjectFactoryImpl implements DomainObjectFactory { private Pair loadConfigurationEntry(DBObject dbObject) { DBObject matcherObject = (DBObject) dbObject.get(FieldNames.CONFIGURATION_MATCHER.name()); DBObject configObject = (DBObject) dbObject.get(FieldNames.CONFIGURATION_CONFIG.name()); - return new Pair(loadConfigurationMatcher(matcherObject), loadConfiguration(configObject)); + return new Pair(loadConfigurationMatcher(matcherObject), + loadConfiguration(configObject)); } private DeviceConfigurationMatcher loadConfigurationMatcher(DBObject matcherObject) { @@ -1342,29 +1347,16 @@ public class DomainObjectFactoryImpl implements DomainObjectFactory { } private DeviceConfiguration loadConfiguration(DBObject configObject) { - DeviceConfigurationImpl configuration = new DeviceConfigurationImpl(); - - Object allowedCourseAreaObjects = configObject.get(FieldNames.CONFIGURATION_CONFIG_ALLOWED_COURSE_AREA_NAMES.name()); - if (allowedCourseAreaObjects != null) { - List allowedCourseAreas = new ArrayList(); - for (Object allowedCourseAreaObject : (BasicDBList)allowedCourseAreaObjects) { - allowedCourseAreas.add(allowedCourseAreaObject.toString()); - } - configuration.setAllowedCourseAreaNames(allowedCourseAreas); + DeviceConfiguration configuration = null; + try { + JsonDeserializer deserializer = DeviceConfigurationJsonDeserializer.create(); + JSONObject json = Helpers.toJSONObjectSafe(new JSONParser().parse(JSON.serialize(configObject))); + configuration = deserializer.deserialize(json); + } catch (JsonDeserializationException | ParseException e) { + logger.log(Level.SEVERE, "Error parsing configuration object from MongoDB, falling back to empty configuration."); + logger.log(Level.SEVERE, "loadConfiguration", e); + configuration = new DeviceConfigurationImpl(); } - Object minRounds = configObject.get(FieldNames.CONFIGURATION_CONFIG_MIN_ROUNDS.name()); - if (minRounds != null) { - configuration.setMinimumRoundsForCourse(((Number)minRounds).intValue()); - } - Object maxRounds = configObject.get(FieldNames.CONFIGURATION_CONFIG_MAX_ROUNDS.name()); - if (maxRounds != null) { - configuration.setMaximumRoundsForCourse(((Number)maxRounds).intValue()); - } - Object mail = configObject.get(FieldNames.CONFIGURATION_CONFIG_RESULTS_MAIL.name()); - if (mail != null) { - configuration.setResultsMailRecipient(mail.toString()); - } - return configuration; } } diff --git a/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/FieldNames.java b/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/FieldNames.java index d050c35060d..fb5798c1752 100755 --- a/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/FieldNames.java +++ b/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/FieldNames.java @@ -77,5 +77,7 @@ public enum FieldNames { RACE_LOG_START_PROCEDURE_TYPE, RACE_LOG_PROTEST_START_TIME, RACE_LOG_COURSE_DESIGN_NAME, // configurations - CONFIGURATION_MATCHER, CONFIGURATION_CONFIG, CONFIGURATION_MATCHER_ID, CONFIGURATION_MATCHER_TYPE, CONFIGURATION_MATCHER_CLIENTS, CONFIGURATION_CONFIG_ALLOWED_COURSE_AREA_NAMES, CONFIGURATION_CONFIG_MIN_ROUNDS, CONFIGURATION_CONFIG_MAX_ROUNDS, CONFIGURATION_CONFIG_RESULTS_MAIL; + CONFIGURATION_MATCHER, CONFIGURATION_CONFIG, CONFIGURATION_MATCHER_ID, CONFIGURATION_MATCHER_TYPE, CONFIGURATION_MATCHER_CLIENTS, + CONFIGURATION_CONFIG_ALLOWED_COURSE_AREA_NAMES, CONFIGURATION_CONFIG_MIN_ROUNDS, CONFIGURATION_CONFIG_MAX_ROUNDS, CONFIGURATION_CONFIG_RESULTS_MAIL, + CONFIGURATION_CONFIG_PROCEDURES; } diff --git a/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/MongoObjectFactoryImpl.java b/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/MongoObjectFactoryImpl.java index dac302de772..fbc8c69a359 100755 --- a/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/MongoObjectFactoryImpl.java +++ b/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/MongoObjectFactoryImpl.java @@ -42,8 +42,8 @@ import com.sap.sailing.domain.common.Speed; import com.sap.sailing.domain.common.SpeedWithBearing; import com.sap.sailing.domain.common.TimePoint; import com.sap.sailing.domain.common.WindSource; -import com.sap.sailing.domain.common.impl.Util; import com.sap.sailing.domain.common.impl.MillisecondsTimePoint; +import com.sap.sailing.domain.common.impl.Util; import com.sap.sailing.domain.common.impl.Util.Triple; import com.sap.sailing.domain.leaderboard.FlexibleLeaderboard; import com.sap.sailing.domain.leaderboard.Leaderboard; @@ -74,7 +74,9 @@ import com.sap.sailing.domain.tracking.TrackedRace; import com.sap.sailing.domain.tracking.TrackedRegatta; import com.sap.sailing.domain.tracking.Wind; import com.sap.sailing.domain.tracking.WindTrack; +import com.sap.sailing.server.gateway.serialization.JsonSerializer; import com.sap.sailing.server.gateway.serialization.impl.CompetitorJsonSerializer; +import com.sap.sailing.server.gateway.serialization.impl.DeviceConfigurationJsonSerializer; public class MongoObjectFactoryImpl implements MongoObjectFactory { private static Logger logger = Logger.getLogger(MongoObjectFactoryImpl.class.getName()); @@ -913,13 +915,13 @@ public class MongoObjectFactoryImpl implements MongoObjectFactory { DBObject entryObject = new BasicDBObject(); entryObject.put(FieldNames.CONFIGURATION_MATCHER_ID.name(), matcher.getMatcherIdentifier()); - entryObject.put(FieldNames.CONFIGURATION_MATCHER.name(), storeDeviceConfigurationMatcher(matcher)); - entryObject.put(FieldNames.CONFIGURATION_CONFIG.name(), storeDeviceConfigurationObject(configuration)); + entryObject.put(FieldNames.CONFIGURATION_MATCHER.name(), createDeviceConfigurationMatcherObject(matcher)); + entryObject.put(FieldNames.CONFIGURATION_CONFIG.name(), createDeviceConfigurationObject(configuration)); configurationsCollections.update(query, entryObject, /* upsrt */ true, /* multi */ false); } - private DBObject storeDeviceConfigurationMatcher(DeviceConfigurationMatcher matcher) { + private DBObject createDeviceConfigurationMatcherObject(DeviceConfigurationMatcher matcher) { DBObject matcherObject = new BasicDBObject(); matcherObject.put(FieldNames.CONFIGURATION_MATCHER_TYPE.name(), matcher.getMatcherType().name()); if (matcher instanceof DeviceConfigurationMatcherSingle) { @@ -934,23 +936,11 @@ public class MongoObjectFactoryImpl implements MongoObjectFactory { return matcherObject; } - private DBObject storeDeviceConfigurationObject(DeviceConfiguration configuration) { - DBObject configurationObject = new BasicDBObject(); - if (configuration.getAllowedCourseAreaNames() != null) { - BasicDBList clients = new BasicDBList(); - clients.addAll(configuration.getAllowedCourseAreaNames()); - configurationObject.put(FieldNames.CONFIGURATION_CONFIG_ALLOWED_COURSE_AREA_NAMES.name(), clients); - } - if (configuration.getMinimumRoundsForCourse() != null) { - configurationObject.put(FieldNames.CONFIGURATION_CONFIG_MIN_ROUNDS.name(), configuration.getMinimumRoundsForCourse()); - } - if (configuration.getMaximumRoundsForCourse() != null) { - configurationObject.put(FieldNames.CONFIGURATION_CONFIG_MAX_ROUNDS.name(), configuration.getMaximumRoundsForCourse()); - } - if (configuration.getResultsMailRecipient() != null) { - configurationObject.put(FieldNames.CONFIGURATION_CONFIG_RESULTS_MAIL.name(), configuration.getResultsMailRecipient()); - } - return configurationObject; + private DBObject createDeviceConfigurationObject(DeviceConfiguration configuration) { + JsonSerializer serializer = DeviceConfigurationJsonSerializer.create(); + JSONObject json = serializer.serialize(configuration); + DBObject entry = (DBObject) JSON.parse(json.toString()); + return entry; } @Override diff --git a/java/com.sap.sailing.domain.shared.android.test/src/com/sap/sailing/domain/racelog/state/test/RaceStateTest.java b/java/com.sap.sailing.domain.shared.android.test/src/com/sap/sailing/domain/racelog/state/test/RaceStateTest.java index ca7b002777d..5520c4c5606 100644 --- a/java/com.sap.sailing.domain.shared.android.test/src/com/sap/sailing/domain/racelog/state/test/RaceStateTest.java +++ b/java/com.sap.sailing.domain.shared.android.test/src/com/sap/sailing/domain/racelog/state/test/RaceStateTest.java @@ -13,6 +13,7 @@ import org.junit.Before; import org.junit.Test; import com.sap.sailing.domain.base.CourseBase; +import com.sap.sailing.domain.base.configuration.StoredRacingProceduresConfiguration; import com.sap.sailing.domain.common.TimePoint; import com.sap.sailing.domain.common.impl.MillisecondsTimePoint; import com.sap.sailing.domain.common.racelog.Flags; @@ -34,6 +35,7 @@ public class RaceStateTest { private RaceLogEventAuthor author; private RaceLogEventFactory factory; private RacingProcedureType defaultRacingProcedureType; + private StoredRacingProceduresConfiguration configuration; private RaceStateChangedListener listener; private TimePoint nowMock; @@ -45,10 +47,11 @@ public class RaceStateTest { author = new RaceLogEventAuthorImpl("Test", 1); factory = RaceLogEventFactory.INSTANCE; defaultRacingProcedureType = RacingProcedureType.RRS26; + configuration = mock(StoredRacingProceduresConfiguration.class); listener = mock(RaceStateChangedListener.class); nowMock = mock(TimePoint.class); - state = new RaceStateImpl(raceLog, author, factory, defaultRacingProcedureType); + state = new RaceStateImpl(raceLog, author, factory, defaultRacingProcedureType, configuration); } @Test diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/base/configuration/DeviceConfiguration.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/base/configuration/DeviceConfiguration.java index 478d9a0c55e..7731e93cc80 100644 --- a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/base/configuration/DeviceConfiguration.java +++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/base/configuration/DeviceConfiguration.java @@ -11,4 +11,6 @@ public interface DeviceConfiguration extends Serializable { Integer getMinimumRoundsForCourse(); Integer getMaximumRoundsForCourse(); String getResultsMailRecipient(); + + RacingProceduresConfiguration getRacingProceduresConfiguration(); } diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/base/configuration/RacingProceduresConfiguration.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/base/configuration/RacingProceduresConfiguration.java new file mode 100644 index 00000000000..a39fb1b527d --- /dev/null +++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/base/configuration/RacingProceduresConfiguration.java @@ -0,0 +1,16 @@ +package com.sap.sailing.domain.base.configuration; + +import java.io.Serializable; + +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.racelog.state.racingprocedure.RacingProcedure; + +/** + * Aggregate interface holding configuration options for all {@link RacingProcedure}s. + */ +public interface RacingProceduresConfiguration extends RRS26Configuration, GateStartConfiguration, ESSConfiguration, + Serializable { + +} diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/base/configuration/StoreableConfiguration.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/base/configuration/StoreableConfiguration.java new file mode 100644 index 00000000000..fdc3631969b --- /dev/null +++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/base/configuration/StoreableConfiguration.java @@ -0,0 +1,21 @@ +package com.sap.sailing.domain.base.configuration; + + +/** + * A {@link ConfigurationType} which is backed by some database. Provides methods to reload and save. + */ +public interface StoreableConfiguration> { + + /** + * Reloads the configuration. + * @return the same {@link ConfigurationType} after loading. + */ + ConfigurationType load(); + + + /** + * Saves the configuration + * @return the same {@link ConfigurationType} after saving. + */ + ConfigurationType store(); +} diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/base/configuration/StoredDeviceConfiguration.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/base/configuration/StoredDeviceConfiguration.java new file mode 100644 index 00000000000..1228bab00dc --- /dev/null +++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/base/configuration/StoredDeviceConfiguration.java @@ -0,0 +1,6 @@ +package com.sap.sailing.domain.base.configuration; + + +public interface StoredDeviceConfiguration extends DeviceConfiguration, StoreableConfiguration { + StoredRacingProceduresConfiguration getRacingProceduresConfiguration(); +} diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/base/configuration/StoredRacingProceduresConfiguration.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/base/configuration/StoredRacingProceduresConfiguration.java new file mode 100644 index 00000000000..75141d54d11 --- /dev/null +++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/base/configuration/StoredRacingProceduresConfiguration.java @@ -0,0 +1,6 @@ +package com.sap.sailing.domain.base.configuration; + + +public interface StoredRacingProceduresConfiguration extends RacingProceduresConfiguration, StoreableConfiguration { + +} diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/base/configuration/impl/DeviceConfigurationImpl.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/base/configuration/impl/DeviceConfigurationImpl.java index a1c43e0e81b..6cddcfd6bcb 100644 --- a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/base/configuration/impl/DeviceConfigurationImpl.java +++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/base/configuration/impl/DeviceConfigurationImpl.java @@ -2,15 +2,31 @@ package com.sap.sailing.domain.base.configuration.impl; import java.util.List; import com.sap.sailing.domain.base.configuration.DeviceConfiguration; +import com.sap.sailing.domain.base.configuration.RacingProceduresConfiguration; public class DeviceConfigurationImpl implements DeviceConfiguration { private static final long serialVersionUID = 6084215932610324314L; + private final RacingProceduresConfiguration proceduresConfiguration; + private List allowedCourseAreaNames; private Integer minRounds; private Integer maxRounds; private String resultsMailRecipient; + + public DeviceConfigurationImpl() { + this.proceduresConfiguration = null; + } + + public DeviceConfigurationImpl(RacingProceduresConfiguration proceduresConfiguration) { + this.proceduresConfiguration = proceduresConfiguration; + } + + @Override + public RacingProceduresConfiguration getRacingProceduresConfiguration() { + return proceduresConfiguration; + } @Override public List getAllowedCourseAreaNames() { diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/base/configuration/impl/RacingProceduresConfigurationImpl.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/base/configuration/impl/RacingProceduresConfigurationImpl.java new file mode 100644 index 00000000000..d28b5424578 --- /dev/null +++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/base/configuration/impl/RacingProceduresConfigurationImpl.java @@ -0,0 +1,9 @@ +package com.sap.sailing.domain.base.configuration.impl; + +import com.sap.sailing.domain.base.configuration.RacingProceduresConfiguration; + +public class RacingProceduresConfigurationImpl implements RacingProceduresConfiguration { + + private static final long serialVersionUID = 8501755084811977792L; + +} diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/base/configuration/procedures/ESSConfiguration.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/base/configuration/procedures/ESSConfiguration.java new file mode 100644 index 00000000000..3a65ca1bc06 --- /dev/null +++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/base/configuration/procedures/ESSConfiguration.java @@ -0,0 +1,5 @@ +package com.sap.sailing.domain.base.configuration.procedures; + +public interface ESSConfiguration { + +} diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/base/configuration/procedures/GateStartConfiguration.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/base/configuration/procedures/GateStartConfiguration.java new file mode 100644 index 00000000000..f70d48a223b --- /dev/null +++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/base/configuration/procedures/GateStartConfiguration.java @@ -0,0 +1,5 @@ +package com.sap.sailing.domain.base.configuration.procedures; + +public interface GateStartConfiguration { + +} diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/base/configuration/procedures/RRS26Configuration.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/base/configuration/procedures/RRS26Configuration.java new file mode 100644 index 00000000000..69b84eb700e --- /dev/null +++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/base/configuration/procedures/RRS26Configuration.java @@ -0,0 +1,5 @@ +package com.sap.sailing.domain.base.configuration.procedures; + +public interface RRS26Configuration { + +} diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/racelog/state/impl/RaceStateImpl.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/racelog/state/impl/RaceStateImpl.java index fac930be3ac..d5843e321b7 100644 --- a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/racelog/state/impl/RaceStateImpl.java +++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/racelog/state/impl/RaceStateImpl.java @@ -1,6 +1,8 @@ package com.sap.sailing.domain.racelog.state.impl; import com.sap.sailing.domain.base.CourseBase; +import com.sap.sailing.domain.base.configuration.RacingProceduresConfiguration; +import com.sap.sailing.domain.base.configuration.StoredRacingProceduresConfiguration; import com.sap.sailing.domain.common.TimePoint; import com.sap.sailing.domain.common.impl.Util; import com.sap.sailing.domain.common.racelog.Flags; @@ -36,6 +38,7 @@ public class RaceStateImpl implements RaceState, RaceLogChangedListener { private final RaceLog raceLog; private final RaceLogEventAuthor author; private final RaceLogEventFactory factory; + private final StoredRacingProceduresConfiguration configuration; private final RaceState2ChangedListeners changedListeners; @@ -67,10 +70,11 @@ public class RaceStateImpl implements RaceState, RaceLogChangedListener { private CourseBase cachedCourseDesign; public RaceStateImpl(RaceLog raceLog, RaceLogEventAuthor author, RaceLogEventFactory eventFactory, - RacingProcedureType initalRacingProcedureType) { + RacingProcedureType initalRacingProcedureType, StoredRacingProceduresConfiguration configuration) { this.raceLog = raceLog; this.author = author; this.factory = eventFactory; + this.configuration = configuration; this.changedListeners = new RaceState2ChangedListeners(); this.racingProcedureAnalyzer = new RacingProcedureTypeAnalyzer(raceLog); @@ -330,7 +334,9 @@ public class RaceStateImpl implements RaceState, RaceLogChangedListener { removeChangedListener(racingProcedure); racingProcedure.detach(); } - racingProcedure = RacingProcedureFactoryImpl.create(cachedRacingProcedureType, raceLog, author, factory); + RacingProceduresConfiguration loadedConfiguration = configuration.load(); + racingProcedure = RacingProcedureFactoryImpl.create(cachedRacingProcedureType, raceLog, + author, factory, loadedConfiguration); racingProcedure.setStateEventScheduler(scheduler); addChangedListener(racingProcedure); diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/racelog/state/racingprocedure/impl/ESSRacingProcedureImpl.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/racelog/state/racingprocedure/impl/ESSRacingProcedureImpl.java index 174b84b476b..deeb2f74525 100644 --- a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/racelog/state/racingprocedure/impl/ESSRacingProcedureImpl.java +++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/racelog/state/racingprocedure/impl/ESSRacingProcedureImpl.java @@ -4,6 +4,7 @@ import java.util.Arrays; import java.util.Collection; import java.util.Collections; +import com.sap.sailing.domain.base.configuration.procedures.ESSConfiguration; import com.sap.sailing.domain.common.TimePoint; import com.sap.sailing.domain.common.racelog.FlagPole; import com.sap.sailing.domain.common.racelog.Flags; @@ -28,8 +29,12 @@ public class ESSRacingProcedureImpl extends BaseRacingProcedure implements ESSRa private final static long startPhaseESSTwoUpInterval = 2 * 60 * 1000; // minutes * seconds * milliseconds private final static long startPhaseESSOneUpInterval = 1 * 60 * 1000; // minutes * seconds * milliseconds - public ESSRacingProcedureImpl(RaceLog raceLog, RaceLogEventAuthor author, RaceLogEventFactory factory) { + private final ESSConfiguration configuration; + + public ESSRacingProcedureImpl(RaceLog raceLog, RaceLogEventAuthor author, + RaceLogEventFactory factory, ESSConfiguration configuration) { super(raceLog, author, factory); + this.configuration = configuration; update(); } diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/racelog/state/racingprocedure/impl/GateStartRacingProcedureImpl.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/racelog/state/racingprocedure/impl/GateStartRacingProcedureImpl.java index 92eeff1beb1..f9d70a051cf 100644 --- a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/racelog/state/racingprocedure/impl/GateStartRacingProcedureImpl.java +++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/racelog/state/racingprocedure/impl/GateStartRacingProcedureImpl.java @@ -3,6 +3,7 @@ package com.sap.sailing.domain.racelog.state.racingprocedure.impl; import java.util.Arrays; import java.util.Collection; +import com.sap.sailing.domain.base.configuration.procedures.GateStartConfiguration; import com.sap.sailing.domain.common.TimePoint; import com.sap.sailing.domain.common.impl.Util; import com.sap.sailing.domain.common.racelog.FlagPole; @@ -30,14 +31,17 @@ public class GateStartRacingProcedureImpl extends BaseRacingProcedure implements private final static long startPhasePapaDownInterval = 1 * 60 * 1000; // minutes * seconds * milliseconds private final static long startPhaseGolfDownStandardIntervalConstantSummand = 3 * 60 * 1000; // minutes * seconds * milliseconds + private final GateStartConfiguration configuration; private final GateLineOpeningTimeFinder gateLineOpeningTimeAnalyzer; private final PathfinderFinder pathfinderAnalyzer;; private Long cachedGateLineOpeningTime; private String cachedPathfinder; - public GateStartRacingProcedureImpl(RaceLog raceLog, RaceLogEventAuthor author, RaceLogEventFactory factory) { + public GateStartRacingProcedureImpl(RaceLog raceLog, RaceLogEventAuthor author, + RaceLogEventFactory factory, GateStartConfiguration configuration) { super(raceLog, author, factory); + this.configuration = configuration; this.gateLineOpeningTimeAnalyzer = new GateLineOpeningTimeFinder(raceLog); this.pathfinderAnalyzer = new PathfinderFinder(raceLog); diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/racelog/state/racingprocedure/impl/RRS26RacingProcedureImpl.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/racelog/state/racingprocedure/impl/RRS26RacingProcedureImpl.java index b0bdad887cb..f2a258206d1 100644 --- a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/racelog/state/racingprocedure/impl/RRS26RacingProcedureImpl.java +++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/racelog/state/racingprocedure/impl/RRS26RacingProcedureImpl.java @@ -4,6 +4,7 @@ import java.util.Arrays; import java.util.Collection; import java.util.Collections; +import com.sap.sailing.domain.base.configuration.procedures.RRS26Configuration; import com.sap.sailing.domain.common.TimePoint; import com.sap.sailing.domain.common.racelog.FlagPole; import com.sap.sailing.domain.common.racelog.Flags; @@ -28,11 +29,14 @@ public class RRS26RacingProcedureImpl extends BaseRacingProcedure implements RRS private final static long startPhaseStartModeUpInterval = 4 * 60 * 1000; // minutes * seconds * milliseconds private final static long startPhaseStartModeDownInterval = 1 * 60 * 1000; // minutes * seconds * milliseconds + private final RRS26Configuration configuration; private final RRS26StartModeFlagFinder startmodeFlagAnalyzer; private Flags cachedStartmodeFlag; - public RRS26RacingProcedureImpl(RaceLog raceLog, RaceLogEventAuthor author, RaceLogEventFactory factory) { + public RRS26RacingProcedureImpl(RaceLog raceLog, RaceLogEventAuthor author, + RaceLogEventFactory factory, RRS26Configuration configuration) { super(raceLog, author, factory); + this.configuration = configuration; this.startmodeFlagAnalyzer = new RRS26StartModeFlagFinder(new RacingProcedureTypeAnalyzer(raceLog), raceLog); this.cachedStartmodeFlag = RRS26RacingProcedure.DefaultStartMode; diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/racelog/state/racingprocedure/impl/RacingProcedureFactoryImpl.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/racelog/state/racingprocedure/impl/RacingProcedureFactoryImpl.java index 6e48b3031ec..93664d07edb 100644 --- a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/racelog/state/racingprocedure/impl/RacingProcedureFactoryImpl.java +++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/racelog/state/racingprocedure/impl/RacingProcedureFactoryImpl.java @@ -1,5 +1,6 @@ package com.sap.sailing.domain.racelog.state.racingprocedure.impl; +import com.sap.sailing.domain.base.configuration.RacingProceduresConfiguration; import com.sap.sailing.domain.common.racelog.RacingProcedureType; import com.sap.sailing.domain.racelog.RaceLog; import com.sap.sailing.domain.racelog.RaceLogEventAuthor; @@ -9,14 +10,14 @@ import com.sap.sailing.domain.racelog.state.racingprocedure.RacingProcedure; public class RacingProcedureFactoryImpl { public static RacingProcedure create(RacingProcedureType type, RaceLog raceLog, - RaceLogEventAuthor author, RaceLogEventFactory factory) { + RaceLogEventAuthor author, RaceLogEventFactory factory, RacingProceduresConfiguration configuration) { switch (type) { case ESS: - return new ESSRacingProcedureImpl(raceLog, author, factory); + return new ESSRacingProcedureImpl(raceLog, author, factory, configuration); case GateStart: - return new GateStartRacingProcedureImpl(raceLog, author, factory); + return new GateStartRacingProcedureImpl(raceLog, author, factory, configuration); case RRS26: - return new RRS26RacingProcedureImpl(raceLog, author, factory); + return new RRS26RacingProcedureImpl(raceLog, author, factory, configuration); default: throw new UnsupportedOperationException("Unknown racing procedure " + type.toString()); } diff --git a/java/com.sap.sailing.server.gateway.serialization/src/com/sap/sailing/server/gateway/deserialization/impl/DeviceConfigurationJsonDeserializer.java b/java/com.sap.sailing.server.gateway.serialization/src/com/sap/sailing/server/gateway/deserialization/impl/DeviceConfigurationJsonDeserializer.java index 22dde70058e..3181c92dab7 100644 --- a/java/com.sap.sailing.server.gateway.serialization/src/com/sap/sailing/server/gateway/deserialization/impl/DeviceConfigurationJsonDeserializer.java +++ b/java/com.sap.sailing.server.gateway.serialization/src/com/sap/sailing/server/gateway/deserialization/impl/DeviceConfigurationJsonDeserializer.java @@ -7,16 +7,32 @@ import org.json.simple.JSONArray; import org.json.simple.JSONObject; import com.sap.sailing.domain.base.configuration.DeviceConfiguration; +import com.sap.sailing.domain.base.configuration.RacingProceduresConfiguration; import com.sap.sailing.domain.base.configuration.impl.DeviceConfigurationImpl; import com.sap.sailing.server.gateway.deserialization.JsonDeserializationException; import com.sap.sailing.server.gateway.deserialization.JsonDeserializer; import com.sap.sailing.server.gateway.serialization.impl.DeviceConfigurationJsonSerializer; public class DeviceConfigurationJsonDeserializer implements JsonDeserializer { + + public static DeviceConfigurationJsonDeserializer create() { + return new DeviceConfigurationJsonDeserializer(new RacingProceduresConfigurationJsonDeserializer()); + } + private final JsonDeserializer proceduresDeserializer; + + public DeviceConfigurationJsonDeserializer(JsonDeserializer proceduresDeserializer) { + this.proceduresDeserializer = proceduresDeserializer; + } + @Override public DeviceConfiguration deserialize(JSONObject object) throws JsonDeserializationException { - DeviceConfigurationImpl configuration = createDeviceConfiguration(); + + JSONObject proceduresObject = + Helpers.getNestedObjectSafe(object, DeviceConfigurationJsonSerializer.FIELD_PROCEDURES_CONFIGURATION); + RacingProceduresConfiguration 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); @@ -45,8 +61,8 @@ public class DeviceConfigurationJsonDeserializer implements JsonDeserializer { + + @Override + public RacingProceduresConfiguration deserialize(JSONObject object) throws JsonDeserializationException { + RacingProceduresConfigurationImpl configuration = createConfiguration(); + return configuration; + } + + protected RacingProceduresConfigurationImpl createConfiguration() { + return new RacingProceduresConfigurationImpl(); + } + +} diff --git a/java/com.sap.sailing.server.gateway.serialization/src/com/sap/sailing/server/gateway/serialization/impl/DeviceConfigurationJsonSerializer.java b/java/com.sap.sailing.server.gateway.serialization/src/com/sap/sailing/server/gateway/serialization/impl/DeviceConfigurationJsonSerializer.java index f978564be06..1521b895237 100644 --- a/java/com.sap.sailing.server.gateway.serialization/src/com/sap/sailing/server/gateway/serialization/impl/DeviceConfigurationJsonSerializer.java +++ b/java/com.sap.sailing.server.gateway.serialization/src/com/sap/sailing/server/gateway/serialization/impl/DeviceConfigurationJsonSerializer.java @@ -4,6 +4,7 @@ import org.json.simple.JSONArray; import org.json.simple.JSONObject; import com.sap.sailing.domain.base.configuration.DeviceConfiguration; +import com.sap.sailing.domain.base.configuration.RacingProceduresConfiguration; import com.sap.sailing.server.gateway.serialization.JsonSerializer; public class DeviceConfigurationJsonSerializer implements JsonSerializer { @@ -12,10 +13,24 @@ public class DeviceConfigurationJsonSerializer implements JsonSerializer proceduresSerializer; + + public DeviceConfigurationJsonSerializer(JsonSerializer proceduresSerializer) { + this.proceduresSerializer = proceduresSerializer; + } @Override public JSONObject serialize(DeviceConfiguration object) { JSONObject result = new JSONObject(); + + result.put(FIELD_PROCEDURES_CONFIGURATION, + proceduresSerializer.serialize(object.getRacingProceduresConfiguration())); if (object.getAllowedCourseAreaNames() != null) { JSONArray courseAreaNames = new JSONArray(); diff --git a/java/com.sap.sailing.server.gateway.serialization/src/com/sap/sailing/server/gateway/serialization/impl/RacingProceduresConfigurationJsonSerializer.java b/java/com.sap.sailing.server.gateway.serialization/src/com/sap/sailing/server/gateway/serialization/impl/RacingProceduresConfigurationJsonSerializer.java new file mode 100644 index 00000000000..24e60ffcf72 --- /dev/null +++ b/java/com.sap.sailing.server.gateway.serialization/src/com/sap/sailing/server/gateway/serialization/impl/RacingProceduresConfigurationJsonSerializer.java @@ -0,0 +1,16 @@ +package com.sap.sailing.server.gateway.serialization.impl; + +import org.json.simple.JSONObject; + +import com.sap.sailing.domain.base.configuration.RacingProceduresConfiguration; +import com.sap.sailing.server.gateway.serialization.JsonSerializer; + +public class RacingProceduresConfigurationJsonSerializer implements JsonSerializer { + + @Override + public JSONObject serialize(RacingProceduresConfiguration object) { + JSONObject result = new JSONObject(); + return result; + } + +} diff --git a/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/impl/rc/ConfigurationJsonGetServlet.java b/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/impl/rc/ConfigurationJsonGetServlet.java index 3a07b84e60e..7c4a0c9fdd1 100644 --- a/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/impl/rc/ConfigurationJsonGetServlet.java +++ b/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/impl/rc/ConfigurationJsonGetServlet.java @@ -38,7 +38,7 @@ public class ConfigurationJsonGetServlet extends AbstractJsonHttpServlet { DeviceConfiguration configuration = getService().getDeviceConfiguration(identifier); if (configuration != null) { - JsonSerializer serializer = new DeviceConfigurationJsonSerializer(); + JsonSerializer serializer = DeviceConfigurationJsonSerializer.create(); JSONObject json = serializer.serialize(configuration); json.writeJSONString(response.getWriter()); } else { diff --git a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/data/DataManager.java b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/data/DataManager.java index 045743eecd3..fcb4508cea7 100644 --- a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/data/DataManager.java +++ b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/data/DataManager.java @@ -4,6 +4,7 @@ import android.content.Context; import com.sap.sailing.domain.base.SharedDomainFactory; import com.sap.sailing.racecommittee.app.AppConstants; +import com.sap.sailing.racecommittee.app.AppPreferences; /** * Base class for all data managers. Use {@link DataManager#create(Context)} for creating your {@link DataManager}. @@ -18,14 +19,16 @@ public abstract class DataManager implements ReadonlyDataManager { return new OnlineDataManager(context, dataStore, dataStore.getDomainFactory()); } - protected Context context; - protected DataStore dataStore; - protected SharedDomainFactory domainFactory; + protected final AppPreferences preferences; + protected final Context context; + protected final DataStore dataStore; + protected final SharedDomainFactory domainFactory; protected DataManager(Context context, DataStore dataStore, SharedDomainFactory domainFactory) { this.context = context; this.dataStore = dataStore; this.domainFactory = domainFactory; + this.preferences = AppPreferences.on(context); } public DataStore getDataStore() { diff --git a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/data/DataStore.java b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/data/DataStore.java index 37bdc67ca41..8ae180f4e28 100644 --- a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/data/DataStore.java +++ b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/data/DataStore.java @@ -8,8 +8,8 @@ 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.StoredDeviceConfiguration; import com.sap.sailing.racecommittee.app.domain.ManagedRace; -import com.sap.sailing.racecommittee.app.domain.configuration.ApplyableDeviceConfiguration; public interface DataStore { @@ -40,6 +40,6 @@ public interface DataStore { public CourseBase getLastPublishedCourseDesign(); public void setLastPublishedCourseDesign(CourseBase courseData); - public ApplyableDeviceConfiguration getTabletConfiguration(); - public void setTabletConfiguration(ApplyableDeviceConfiguration configuration); + public StoredDeviceConfiguration getTabletConfiguration(); + public void setTabletConfiguration(StoredDeviceConfiguration configuration); } diff --git a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/data/InMemoryDataStore.java b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/data/InMemoryDataStore.java index ac43d95ba65..cc84deef116 100644 --- a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/data/InMemoryDataStore.java +++ b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/data/InMemoryDataStore.java @@ -9,9 +9,9 @@ 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.StoredDeviceConfiguration; import com.sap.sailing.domain.base.impl.SharedDomainFactoryImpl; import com.sap.sailing.racecommittee.app.domain.ManagedRace; -import com.sap.sailing.racecommittee.app.domain.configuration.ApplyableDeviceConfiguration; import com.sap.sailing.racecommittee.app.utils.CollectionUtils; public enum InMemoryDataStore implements DataStore { @@ -21,7 +21,7 @@ public enum InMemoryDataStore implements DataStore { private HashMap managedRaceById; private HashMap marksById; private CourseBase courseData; - private ApplyableDeviceConfiguration configuration; + private StoredDeviceConfiguration configuration; private SharedDomainFactory domainFactory; private InMemoryDataStore() { @@ -178,12 +178,12 @@ public enum InMemoryDataStore implements DataStore { } @Override - public ApplyableDeviceConfiguration getTabletConfiguration() { + public StoredDeviceConfiguration getTabletConfiguration() { return configuration; } @Override - public void setTabletConfiguration(ApplyableDeviceConfiguration configuration) { + public void setTabletConfiguration(StoredDeviceConfiguration configuration) { this.configuration = configuration; } } diff --git a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/data/OfflineDataManager.java b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/data/OfflineDataManager.java index 67c1b73be11..da5bab68cef 100644 --- a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/data/OfflineDataManager.java +++ b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/data/OfflineDataManager.java @@ -19,6 +19,8 @@ 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.DeviceConfigurationIdentifier; +import com.sap.sailing.domain.base.configuration.StoredDeviceConfiguration; +import com.sap.sailing.domain.base.configuration.StoredRacingProceduresConfiguration; import com.sap.sailing.domain.base.impl.BoatClassImpl; import com.sap.sailing.domain.base.impl.CompetitorImpl; import com.sap.sailing.domain.base.impl.CourseAreaImpl; @@ -43,7 +45,7 @@ import com.sap.sailing.racecommittee.app.data.clients.LoadClient; import com.sap.sailing.racecommittee.app.data.loaders.DataLoaderResult; import com.sap.sailing.racecommittee.app.data.loaders.ImmediateDataLoaderCallbacks; import com.sap.sailing.racecommittee.app.domain.ManagedRace; -import com.sap.sailing.racecommittee.app.domain.configuration.ApplyableDeviceConfiguration; +import com.sap.sailing.racecommittee.app.domain.configuration.impl.StoredDeviceConfigurationImpl; import com.sap.sailing.racecommittee.app.domain.impl.ManagedRaceIdentifierImpl; import com.sap.sailing.racecommittee.app.domain.impl.ManagedRaceImpl; @@ -85,6 +87,9 @@ public class OfflineDataManager extends DataManager { RaceLogEventFactory factory = new RaceLogEventFactoryImpl(); RaceLog log = new RaceLogImpl(UUID.randomUUID()); final RaceLogEventAuthor author = AppPreferences.on(context).getAuthor(); + StoredRacingProceduresConfiguration configuration = + new StoredDeviceConfigurationImpl(preferences).load().getRacingProceduresConfiguration(); + log.add(factory.createStartTimeEvent(new MillisecondsTimePoint(new Date().getTime() - 2000), author, 1, new MillisecondsTimePoint(new Date().getTime() - 1000))); @@ -94,7 +99,7 @@ public class OfflineDataManager extends DataManager { ManagedRace q1 = new ManagedRaceImpl( new ManagedRaceIdentifierImpl("A.B", new FleetImpl("A"), qualifying, raceGroup), - new RaceStateImpl(log, AppPreferences.on(context).getAuthor(), RaceLogEventFactory.INSTANCE, RacingProcedureType.ESS)); + new RaceStateImpl(log, AppPreferences.on(context).getAuthor(), RaceLogEventFactory.INSTANCE, RacingProcedureType.ESS, configuration)); log = new RaceLogImpl(UUID.randomUUID()); /* @@ -104,7 +109,7 @@ public class OfflineDataManager extends DataManager { ManagedRace q2 = new ManagedRaceImpl( new ManagedRaceIdentifierImpl("B", new FleetImpl("A.A"), qualifying, raceGroup), - new RaceStateImpl(log, AppPreferences.on(context).getAuthor(), RaceLogEventFactory.INSTANCE, RacingProcedureType.ESS)); + new RaceStateImpl(log, AppPreferences.on(context).getAuthor(), RaceLogEventFactory.INSTANCE, RacingProcedureType.ESS, configuration)); log = new RaceLogImpl(UUID.randomUUID()); /* @@ -113,7 +118,7 @@ public class OfflineDataManager extends DataManager { */ ManagedRace q3 = new ManagedRaceImpl( new ManagedRaceIdentifierImpl("Q3", new FleetImpl("Default"), qualifying, raceGroup), - new RaceStateImpl(log, AppPreferences.on(context).getAuthor(), RaceLogEventFactory.INSTANCE, RacingProcedureType.ESS)); + new RaceStateImpl(log, AppPreferences.on(context).getAuthor(), RaceLogEventFactory.INSTANCE, RacingProcedureType.ESS, configuration)); /* * ManagedRace m1 = new ManagedRaceImpl( new ManagedRaceIdentifierImpl( "M1", new FleetImpl("Default"), medal, * raceGroup), null); @@ -203,11 +208,11 @@ public class OfflineDataManager extends DataManager { } @Override - public LoaderCallbacks> createConfigurationLoader(DeviceConfigurationIdentifier identifier, - LoadClient callback) { - return new ImmediateDataLoaderCallbacks(context, callback, new Callable() { + public LoaderCallbacks> createConfigurationLoader(DeviceConfigurationIdentifier identifier, + LoadClient callback) { + return new ImmediateDataLoaderCallbacks(context, callback, new Callable() { @Override - public ApplyableDeviceConfiguration call() throws Exception { + public StoredDeviceConfiguration call() throws Exception { throw new IllegalStateException("No remote configuration in offline mode."); } }); diff --git a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/data/OnlineDataManager.java b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/data/OnlineDataManager.java index 10004239926..d3c2a540b39 100644 --- a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/data/OnlineDataManager.java +++ b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/data/OnlineDataManager.java @@ -19,10 +19,11 @@ 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.DeviceConfigurationIdentifier; +import com.sap.sailing.domain.base.configuration.StoredDeviceConfiguration; +import com.sap.sailing.domain.base.configuration.StoredRacingProceduresConfiguration; import com.sap.sailing.domain.racelog.RaceLogServletConstants; -import com.sap.sailing.racecommittee.app.AppPreferences; import com.sap.sailing.racecommittee.app.data.clients.LoadClient; -import com.sap.sailing.racecommittee.app.data.deserialization.impl.ApplyableDeviceConfigurationJsonDeserializer; +import com.sap.sailing.racecommittee.app.data.deserialization.impl.StoredDeviceConfigurationJsonDeserializer; 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; @@ -44,7 +45,7 @@ import com.sap.sailing.racecommittee.app.data.parsers.ManagedRacesDataParser; import com.sap.sailing.racecommittee.app.data.parsers.MarksDataParser; import com.sap.sailing.racecommittee.app.domain.ManagedRace; import com.sap.sailing.racecommittee.app.domain.ManagedRaceIdentifier; -import com.sap.sailing.racecommittee.app.domain.configuration.ApplyableDeviceConfiguration; +import com.sap.sailing.racecommittee.app.domain.configuration.impl.StoredDeviceConfigurationImpl; import com.sap.sailing.racecommittee.app.logging.ExLog; import com.sap.sailing.racecommittee.app.services.sending.EventSendingService; import com.sap.sailing.server.gateway.deserialization.JsonDeserializer; @@ -107,8 +108,8 @@ public class OnlineDataManager extends DataManager { ExLog.i(TAG, "getEventsLoader created new loader..."); - return new OnlineDataLoader>(context, new URL(AppPreferences - .on(context).getServerBaseURL() + "/sailingserver/events"), parser, handler); + return new OnlineDataLoader>(context, + new URL(preferences.getServerBaseURL() + "/sailingserver/events"), parser, handler); } }); } @@ -137,15 +138,18 @@ public class OnlineDataManager extends DataManager { return new DataLoaderCallbacks>(callback, new LoaderCreator>() { @Override public Loader>> create(int id, Bundle args) throws Exception { + StoredRacingProceduresConfiguration configuration = + new StoredDeviceConfigurationImpl(preferences).load().getRacingProceduresConfiguration(); + JsonDeserializer boatClassDeserializer = new BoatClassJsonDeserializer(domainFactory); - DataParser> parser = new ManagedRacesDataParser(context, + DataParser> parser = new ManagedRacesDataParser(preferences.getAuthor(), + configuration, new RaceGroupDeserializer(boatClassDeserializer, new SeriesWithRowsDeserializer( new RaceRowDeserializer(new FleetDeserializer(new ColorDeserializer()), new RaceCellDeserializer(new RaceLogDeserializer( RaceLogEventDeserializer.create(domainFactory))))))); DataHandler> handler = new ManagedRacesDataHandler(OnlineDataManager.this); - return new OnlineDataLoader>(context, new URL(AppPreferences - .on(context).getServerBaseURL() + return new OnlineDataLoader>(context, new URL(preferences.getServerBaseURL() + "/sailingserver/rc/racegroups?"+ RaceLogServletConstants.PARAM_COURSE_AREA_FILTER + "=" + courseAreaId.toString()+"&"+ RaceLogServletConstants.PARAMS_CLIENT_UUID + "=" + EventSendingService.uuid), parser, handler); @@ -169,11 +173,10 @@ public class OnlineDataManager extends DataManager { String raceColumnName = URLEncoder.encode(identifier.getRaceName()); String fleetName = URLEncoder.encode(identifier.getFleet().getName()); - return new OnlineDataLoader>(context, new URL(AppPreferences - .on(context).getServerBaseURL() - + "/sailingserver/rc/marks?"+RaceLogServletConstants.PARAMS_LEADERBOARD_NAME + "=" + raceGroupName + - "&"+RaceLogServletConstants.PARAMS_RACE_COLUMN_NAME+"=" + raceColumnName - + "&"+RaceLogServletConstants.PARAMS_RACE_FLEET_NAME+"=" + fleetName), parser, handler); + return new OnlineDataLoader>(context, new URL(preferences.getServerBaseURL() + + "/sailingserver/rc/marks?"+RaceLogServletConstants.PARAMS_LEADERBOARD_NAME + "=" + raceGroupName + + "&"+RaceLogServletConstants.PARAMS_RACE_COLUMN_NAME+"=" + raceColumnName + + "&"+RaceLogServletConstants.PARAMS_RACE_FLEET_NAME+"=" + fleetName), parser, handler); } }); } @@ -196,7 +199,7 @@ public class OnlineDataManager extends DataManager { String raceColumnName = URLEncoder.encode(identifier.getRaceName()); String fleetName = URLEncoder.encode(identifier.getFleet().getName()); - return new OnlineDataLoader(context, new URL(AppPreferences.on(context).getServerBaseURL() + return new OnlineDataLoader(context, new URL(preferences.getServerBaseURL() + "/sailingserver/rc/currentcourse?" + RaceLogServletConstants.PARAMS_LEADERBOARD_NAME + "=" + raceGroupName + "&" + RaceLogServletConstants.PARAMS_RACE_COLUMN_NAME + "=" + raceColumnName + "&"+RaceLogServletConstants.PARAMS_RACE_FLEET_NAME+"=" + fleetName), parser, handler); @@ -223,7 +226,7 @@ public class OnlineDataManager extends DataManager { String fleetName = URLEncoder.encode(identifier.getFleet().getName()); return new OnlineDataLoader>(context, new URL( - AppPreferences.on(context).getServerBaseURL() + "/sailingserver/rc/competitors?" + preferences.getServerBaseURL() + "/sailingserver/rc/competitors?" + RaceLogServletConstants.PARAMS_LEADERBOARD_NAME + "=" + raceGroupName + "&" + RaceLogServletConstants.PARAMS_RACE_COLUMN_NAME + "=" + raceColumnName + "&" + RaceLogServletConstants.PARAMS_RACE_FLEET_NAME + "=" + fleetName), parser, handler); @@ -232,20 +235,20 @@ public class OnlineDataManager extends DataManager { } @Override - public LoaderCallbacks> createConfigurationLoader(final DeviceConfigurationIdentifier identifier, - LoadClient callback) { - return new DataLoaderCallbacks(callback, new LoaderCreator() { + public LoaderCallbacks> createConfigurationLoader(final DeviceConfigurationIdentifier identifier, + LoadClient callback) { + return new DataLoaderCallbacks(callback, new LoaderCreator() { @Override - public Loader> create(int id, Bundle args) throws Exception { + public Loader> create(int id, Bundle args) throws Exception { ExLog.i(TAG, String.format("Creating Configuration-OnlineDataLoader %d", id)); - DataHandler handler = new DeviceConfigurationDataHandler(OnlineDataManager.this); - DataParser parser = new DeviceConfigurationParser( - new ApplyableDeviceConfigurationJsonDeserializer(AppPreferences.on(context))); + DataHandler handler = new DeviceConfigurationDataHandler(OnlineDataManager.this); + DataParser parser = new DeviceConfigurationParser( + StoredDeviceConfigurationJsonDeserializer.create(preferences)); - return new OnlineDataLoader( + return new OnlineDataLoader( context, - new URL(AppPreferences.on(context).getServerBaseURL() + "/sailingserver/rc/configuration?client="+ identifier.getClientIdentifier()), + new URL(preferences.getServerBaseURL() + "/sailingserver/rc/configuration?client="+ identifier.getClientIdentifier()), parser, handler); } }); diff --git a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/data/ReadonlyDataManager.java b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/data/ReadonlyDataManager.java index a0556dba1d8..366dc8b04e9 100644 --- a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/data/ReadonlyDataManager.java +++ b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/data/ReadonlyDataManager.java @@ -12,10 +12,10 @@ 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.configuration.DeviceConfigurationIdentifier; +import com.sap.sailing.domain.base.configuration.StoredDeviceConfiguration; import com.sap.sailing.racecommittee.app.data.clients.LoadClient; import com.sap.sailing.racecommittee.app.data.loaders.DataLoaderResult; import com.sap.sailing.racecommittee.app.domain.ManagedRace; -import com.sap.sailing.racecommittee.app.domain.configuration.ApplyableDeviceConfiguration; /** *

@@ -129,6 +129,6 @@ public interface ReadonlyDataManager { * {@link LoaderManager#initLoader(int, android.os.Bundle, LoaderCallbacks)} or * {@link LoaderManager#restartLoader(int, android.os.Bundle, LoaderCallbacks)}. */ - public LoaderCallbacks> createConfigurationLoader(DeviceConfigurationIdentifier identifier, - LoadClient callback); + public LoaderCallbacks> createConfigurationLoader(DeviceConfigurationIdentifier identifier, + LoadClient callback); } diff --git a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/data/deserialization/impl/ApplyableDeviceConfigurationJsonDeserializer.java b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/data/deserialization/impl/ApplyableDeviceConfigurationJsonDeserializer.java deleted file mode 100644 index 146058c3c0a..00000000000 --- a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/data/deserialization/impl/ApplyableDeviceConfigurationJsonDeserializer.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.sap.sailing.racecommittee.app.data.deserialization.impl; - -import org.json.simple.JSONObject; - -import com.sap.sailing.domain.base.configuration.impl.DeviceConfigurationImpl; -import com.sap.sailing.racecommittee.app.AppPreferences; -import com.sap.sailing.racecommittee.app.domain.configuration.ApplyableDeviceConfiguration; -import com.sap.sailing.racecommittee.app.domain.configuration.impl.ApplyableDeviceConfigurationImpl; -import com.sap.sailing.server.gateway.deserialization.JsonDeserializationException; -import com.sap.sailing.server.gateway.deserialization.impl.DeviceConfigurationJsonDeserializer; - -public class ApplyableDeviceConfigurationJsonDeserializer extends DeviceConfigurationJsonDeserializer { - - private final AppPreferences preferences; - - public ApplyableDeviceConfigurationJsonDeserializer(AppPreferences preferences) { - this.preferences = preferences; - } - - @Override - protected DeviceConfigurationImpl createDeviceConfiguration() { - return new ApplyableDeviceConfigurationImpl(preferences); - } - - public ApplyableDeviceConfiguration deserializeAsApplyable(JSONObject jsonObject) throws JsonDeserializationException { - return (ApplyableDeviceConfiguration) deserialize(jsonObject); - } - -} diff --git a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/data/deserialization/impl/StoredDeviceConfigurationJsonDeserializer.java b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/data/deserialization/impl/StoredDeviceConfigurationJsonDeserializer.java new file mode 100644 index 00000000000..64e9cc1f9e7 --- /dev/null +++ b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/data/deserialization/impl/StoredDeviceConfigurationJsonDeserializer.java @@ -0,0 +1,40 @@ +package com.sap.sailing.racecommittee.app.data.deserialization.impl; + +import org.json.simple.JSONObject; + +import com.sap.sailing.domain.base.configuration.RacingProceduresConfiguration; +import com.sap.sailing.domain.base.configuration.StoredDeviceConfiguration; +import com.sap.sailing.domain.base.configuration.StoredRacingProceduresConfiguration; +import com.sap.sailing.domain.base.configuration.impl.DeviceConfigurationImpl; +import com.sap.sailing.racecommittee.app.AppPreferences; +import com.sap.sailing.racecommittee.app.domain.configuration.impl.StoredDeviceConfigurationImpl; +import com.sap.sailing.server.gateway.deserialization.JsonDeserializationException; +import com.sap.sailing.server.gateway.deserialization.impl.DeviceConfigurationJsonDeserializer; + +public class StoredDeviceConfigurationJsonDeserializer extends DeviceConfigurationJsonDeserializer { + + public static StoredDeviceConfigurationJsonDeserializer create(final AppPreferences preferences) { + return new StoredDeviceConfigurationJsonDeserializer(preferences, + new StoredRacingProceduresConfigurationJsonDeserializer(preferences)); + } + + private final AppPreferences preferences; + + public StoredDeviceConfigurationJsonDeserializer(AppPreferences preferences, + StoredRacingProceduresConfigurationJsonDeserializer proceduresDeserializer) { + super(proceduresDeserializer); + this.preferences = preferences; + } + + @Override + protected DeviceConfigurationImpl createConfiguration(RacingProceduresConfiguration proceduresConfiguration) { + return new StoredDeviceConfigurationImpl(preferences, + (StoredRacingProceduresConfiguration) proceduresConfiguration); + } + + @Override + public StoredDeviceConfiguration deserialize(JSONObject object) throws JsonDeserializationException { + return (StoredDeviceConfiguration) super.deserialize(object); + } + +} diff --git a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/data/deserialization/impl/StoredRacingProceduresConfigurationJsonDeserializer.java b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/data/deserialization/impl/StoredRacingProceduresConfigurationJsonDeserializer.java new file mode 100644 index 00000000000..4d8dfa0446e --- /dev/null +++ b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/data/deserialization/impl/StoredRacingProceduresConfigurationJsonDeserializer.java @@ -0,0 +1,29 @@ +package com.sap.sailing.racecommittee.app.data.deserialization.impl; + +import org.json.simple.JSONObject; + +import com.sap.sailing.domain.base.configuration.StoredRacingProceduresConfiguration; +import com.sap.sailing.domain.base.configuration.impl.RacingProceduresConfigurationImpl; +import com.sap.sailing.racecommittee.app.AppPreferences; +import com.sap.sailing.racecommittee.app.domain.configuration.impl.StoredRacingProceduresConfigurationImpl; +import com.sap.sailing.server.gateway.deserialization.JsonDeserializationException; +import com.sap.sailing.server.gateway.deserialization.impl.RacingProceduresConfigurationJsonDeserializer; + +public class StoredRacingProceduresConfigurationJsonDeserializer extends RacingProceduresConfigurationJsonDeserializer { + + private final AppPreferences preferences; + + public StoredRacingProceduresConfigurationJsonDeserializer(AppPreferences preferences) { + this.preferences = preferences; + } + + @Override + protected RacingProceduresConfigurationImpl createConfiguration() { + return new StoredRacingProceduresConfigurationImpl(preferences); + } + + @Override + public StoredRacingProceduresConfiguration deserialize(JSONObject object) throws JsonDeserializationException { + return (StoredRacingProceduresConfiguration) super.deserialize(object); + } +} diff --git a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/data/handlers/DeviceConfigurationDataHandler.java b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/data/handlers/DeviceConfigurationDataHandler.java index 921f9263814..77251fe2472 100644 --- a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/data/handlers/DeviceConfigurationDataHandler.java +++ b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/data/handlers/DeviceConfigurationDataHandler.java @@ -1,9 +1,9 @@ package com.sap.sailing.racecommittee.app.data.handlers; +import com.sap.sailing.domain.base.configuration.StoredDeviceConfiguration; import com.sap.sailing.racecommittee.app.data.OnlineDataManager; -import com.sap.sailing.racecommittee.app.domain.configuration.ApplyableDeviceConfiguration; -public class DeviceConfigurationDataHandler extends DataHandler { +public class DeviceConfigurationDataHandler extends DataHandler { public DeviceConfigurationDataHandler(OnlineDataManager manager) { super(manager); @@ -15,12 +15,12 @@ public class DeviceConfigurationDataHandler extends DataHandler { +public class DeviceConfigurationParser implements DataParser { - private ApplyableDeviceConfigurationJsonDeserializer deserializer; + private StoredDeviceConfigurationJsonDeserializer deserializer; - public DeviceConfigurationParser(ApplyableDeviceConfigurationJsonDeserializer deserializer) { + public DeviceConfigurationParser(StoredDeviceConfigurationJsonDeserializer deserializer) { this.deserializer = deserializer; } @Override - public ApplyableDeviceConfiguration parse(Reader reader) throws Exception { + public StoredDeviceConfiguration parse(Reader reader) throws Exception { Object parsedResult = JSONValue.parseWithException(reader); JSONObject jsonObject = Helpers.toJSONObjectSafe(parsedResult); - return deserializer.deserializeAsApplyable(jsonObject); + return deserializer.deserialize(jsonObject); } } diff --git a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/data/parsers/ManagedRacesDataParser.java b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/data/parsers/ManagedRacesDataParser.java index bb4f9b016da..04babc03807 100755 --- a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/data/parsers/ManagedRacesDataParser.java +++ b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/data/parsers/ManagedRacesDataParser.java @@ -8,20 +8,19 @@ import org.json.simple.JSONArray; import org.json.simple.JSONObject; import org.json.simple.JSONValue; -import android.content.Context; - import com.sap.sailing.domain.base.Fleet; import com.sap.sailing.domain.base.SeriesBase; +import com.sap.sailing.domain.base.configuration.StoredRacingProceduresConfiguration; import com.sap.sailing.domain.base.racegroup.RaceCell; import com.sap.sailing.domain.base.racegroup.RaceGroup; import com.sap.sailing.domain.base.racegroup.RaceRow; import com.sap.sailing.domain.base.racegroup.SeriesWithRows; import com.sap.sailing.domain.common.racelog.RacingProcedureType; import com.sap.sailing.domain.racelog.RaceLog; +import com.sap.sailing.domain.racelog.RaceLogEventAuthor; import com.sap.sailing.domain.racelog.RaceLogEventFactory; import com.sap.sailing.domain.racelog.state.RaceState; import com.sap.sailing.domain.racelog.state.impl.RaceStateImpl; -import com.sap.sailing.racecommittee.app.AppPreferences; import com.sap.sailing.racecommittee.app.domain.FleetIdentifier; import com.sap.sailing.racecommittee.app.domain.ManagedRace; import com.sap.sailing.racecommittee.app.domain.ManagedRaceIdentifier; @@ -34,11 +33,14 @@ import com.sap.sailing.server.gateway.deserialization.impl.Helpers; public class ManagedRacesDataParser implements DataParser> { // private static final String TAG = ManagedRacesDataParser.class.getName(); - private JsonDeserializer deserializer; - private final Context context; + private final JsonDeserializer deserializer; + private final StoredRacingProceduresConfiguration configuration; + private final RaceLogEventAuthor author; - public ManagedRacesDataParser(Context context, JsonDeserializer deserializer) { - this.context = context; + public ManagedRacesDataParser(RaceLogEventAuthor author, StoredRacingProceduresConfiguration configuration, + JsonDeserializer deserializer) { + this.author = author; + this.configuration = configuration; this.deserializer = deserializer; } @@ -74,8 +76,7 @@ public class ManagedRacesDataParser implements DataParser() { + dataManager.createConfigurationLoader(identifier, new LoadClient() { @Override - public void onLoadSucceded(ApplyableDeviceConfiguration configuration, boolean isCached) { + public void onLoadSucceded(StoredDeviceConfiguration configuration, boolean isCached) { setProgressBarIndeterminateVisibility(false); progressDialog.dismiss(); - configuration.apply(getApplicationContext()); + configuration.store(); Toast.makeText(getApplicationContext(), getString(R.string.loading_configuration_succeded), Toast.LENGTH_LONG).show(); showCourseAreaListFragment(eventId); }