From f5493d2a98b6fdb67032f668691f934a24f3ead5 Mon Sep 17 00:00:00 2001 From: Lukas Niemeier Date: Sun, 3 Mar 2013 23:26:15 +0100 Subject: [PATCH] # app deserializes racelog events on startup --- .../impl/RaceLogEventDeserializer.java | 8 ++++ .../rc/AddToRaceLogJsonExportServlet.java | 8 +--- .../app/data/OnlineDataManager.java | 4 +- .../impl/RaceLogDeserializer.java | 26 +++++++++-- .../impl/RaceRowDeserializer.java | 43 +++++++++---------- 5 files changed, 55 insertions(+), 34 deletions(-) diff --git a/java/com.sap.sailing.server.gateway.serialization/src/com/sap/sailing/server/gateway/deserialization/impl/RaceLogEventDeserializer.java b/java/com.sap.sailing.server.gateway.serialization/src/com/sap/sailing/server/gateway/deserialization/impl/RaceLogEventDeserializer.java index de909adb803..1ea15a39543 100644 --- a/java/com.sap.sailing.server.gateway.serialization/src/com/sap/sailing/server/gateway/deserialization/impl/RaceLogEventDeserializer.java +++ b/java/com.sap.sailing.server.gateway.serialization/src/com/sap/sailing/server/gateway/deserialization/impl/RaceLogEventDeserializer.java @@ -12,6 +12,14 @@ import com.sap.sailing.server.gateway.serialization.impl.racelog.RaceLogRaceStat import com.sap.sailing.server.gateway.serialization.impl.racelog.RaceLogStartTimeEventSerializer; public class RaceLogEventDeserializer implements JsonDeserializer { + + public static RaceLogEventDeserializer create() { + return new RaceLogEventDeserializer( + new RaceLogFlagEventDeserializer(), + new RaceLogStartTimeEventDeserializer(), + new RaceLogRaceStatusEventDeserializer(), + new RaceLogCourseAreaChangedEventDeserializer()); + } protected JsonDeserializer flagEventDeserializer; protected JsonDeserializer startTimeEventDeserializer; diff --git a/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/impl/rc/AddToRaceLogJsonExportServlet.java b/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/impl/rc/AddToRaceLogJsonExportServlet.java index ddab01d0181..27e86c1fbaa 100644 --- a/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/impl/rc/AddToRaceLogJsonExportServlet.java +++ b/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/impl/rc/AddToRaceLogJsonExportServlet.java @@ -18,11 +18,7 @@ import com.sap.sailing.server.RacingEventService; import com.sap.sailing.server.gateway.AbstractJsonHttpServlet; import com.sap.sailing.server.gateway.deserialization.JsonDeserializer; import com.sap.sailing.server.gateway.deserialization.impl.Helpers; -import com.sap.sailing.server.gateway.deserialization.impl.RaceLogCourseAreaChangedEventDeserializer; import com.sap.sailing.server.gateway.deserialization.impl.RaceLogEventDeserializer; -import com.sap.sailing.server.gateway.deserialization.impl.RaceLogFlagEventDeserializer; -import com.sap.sailing.server.gateway.deserialization.impl.RaceLogRaceStatusEventDeserializer; -import com.sap.sailing.server.gateway.deserialization.impl.RaceLogStartTimeEventDeserializer; public class AddToRaceLogJsonExportServlet extends AbstractJsonHttpServlet { private static final long serialVersionUID = 7704668926551060433L; @@ -76,9 +72,7 @@ public class AddToRaceLogJsonExportServlet extends AbstractJsonHttpServlet { return; } - JsonDeserializer deserializer = new RaceLogEventDeserializer(new RaceLogFlagEventDeserializer(), - new RaceLogStartTimeEventDeserializer(), new RaceLogRaceStatusEventDeserializer(), - new RaceLogCourseAreaChangedEventDeserializer()); + JsonDeserializer deserializer = RaceLogEventDeserializer.create(); try { Object requestBody = JSONValue.parseWithException(request.getReader()); 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 f4dc251e450..d4a219d4265 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 @@ -35,6 +35,7 @@ import com.sap.sailing.racecommittee.app.deserialization.impl.VenueJsonDeseriali import com.sap.sailing.racecommittee.app.domain.ManagedRace; import com.sap.sailing.racecommittee.app.domain.impl.DomainFactoryImpl; import com.sap.sailing.server.gateway.deserialization.JsonDeserializer; +import com.sap.sailing.server.gateway.deserialization.impl.RaceLogEventDeserializer; /** * Enables accessing of data. @@ -126,7 +127,8 @@ public class OnlineDataManager extends DataManager { JsonDeserializer boatClassDeserializer = new BoatClassJsonDeserializer(domainFactory); DataParser> parser = new ManagedRacesDataParser(new RaceGroupDeserializer( boatClassDeserializer, new SeriesWithRowsDeserializer(new RaceRowDeserializer(new FleetDeserializer( - new ColorDeserializer()), new RaceCellDeserializer(new RaceLogDeserializer()))))); + new ColorDeserializer()), new RaceCellDeserializer( + new RaceLogDeserializer(RaceLogEventDeserializer.create())))))); DataHandler> handler = new ManagedRacesDataHandler(this, client); try { diff --git a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/deserialization/impl/RaceLogDeserializer.java b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/deserialization/impl/RaceLogDeserializer.java index 19e564ad5be..5dae1b7a65e 100644 --- a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/deserialization/impl/RaceLogDeserializer.java +++ b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/deserialization/impl/RaceLogDeserializer.java @@ -1,17 +1,35 @@ package com.sap.sailing.racecommittee.app.deserialization.impl; +import org.json.simple.JSONArray; import org.json.simple.JSONObject; import com.sap.sailing.domain.racelog.RaceLog; +import com.sap.sailing.domain.racelog.RaceLogEvent; import com.sap.sailing.racecommittee.app.domain.racelog.impl.PassAwareRaceLogImpl; import com.sap.sailing.server.gateway.deserialization.JsonDeserializationException; import com.sap.sailing.server.gateway.deserialization.JsonDeserializer; +import com.sap.sailing.server.gateway.deserialization.impl.Helpers; +import com.sap.sailing.server.gateway.serialization.impl.racelog.RaceLogSerializer; public class RaceLogDeserializer implements JsonDeserializer { - public RaceLog deserialize(JSONObject object) - throws JsonDeserializationException { - return new PassAwareRaceLogImpl(); - } + private final JsonDeserializer elementDeserializer; + + public RaceLogDeserializer(JsonDeserializer raceLogEventDeserializer) { + this.elementDeserializer = raceLogEventDeserializer; + } + + public RaceLog deserialize(JSONObject object) throws JsonDeserializationException { + RaceLog result = new PassAwareRaceLogImpl(); + + JSONArray events = Helpers.getNestedArraySafe(object, RaceLogSerializer.FIELD_EVENTS); + for (Object eventObject : events) { + JSONObject eventJson = Helpers.toJSONObjectSafe(eventObject); + RaceLogEvent event = elementDeserializer.deserialize(eventJson); + result.add(event); + } + + return result; + } } diff --git a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/deserialization/impl/RaceRowDeserializer.java b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/deserialization/impl/RaceRowDeserializer.java index 87553a9b8d8..cfcfe953e2f 100644 --- a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/deserialization/impl/RaceRowDeserializer.java +++ b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/deserialization/impl/RaceRowDeserializer.java @@ -17,28 +17,27 @@ import com.sap.sailing.server.gateway.serialization.impl.racegroup.RaceRowJsonSe public class RaceRowDeserializer implements JsonDeserializer { - private JsonDeserializer fleetDeserializer; - private JsonDeserializer raceCellDeserializer; - - public RaceRowDeserializer(JsonDeserializer fleetDeserializer, - JsonDeserializer raceCellDeserializer) { - this.fleetDeserializer = fleetDeserializer; - this.raceCellDeserializer = raceCellDeserializer; - } + private JsonDeserializer fleetDeserializer; + private JsonDeserializer raceCellDeserializer; - public RaceRow deserialize(JSONObject object) - throws JsonDeserializationException { - JSONObject fleetObject = Helpers.toJSONObjectSafe(object.get(RaceRowJsonSerializer.FIELD_FLEET)); - JSONArray cellsObject = Helpers.getNestedArraySafe(object, RaceRowJsonSerializer.FIELD_RACE_CELLS); - - Collection races = new ArrayList(); - Fleet fleet = fleetDeserializer.deserialize(fleetObject); - for (Object cellObject : cellsObject) { - JSONObject cellJson = Helpers.toJSONObjectSafe(cellObject); - races.add(raceCellDeserializer.deserialize(cellJson)); - } - - return new RaceRowImpl(fleet, races); - } + public RaceRowDeserializer(JsonDeserializer fleetDeserializer, + JsonDeserializer raceCellDeserializer) { + this.fleetDeserializer = fleetDeserializer; + this.raceCellDeserializer = raceCellDeserializer; + } + + public RaceRow deserialize(JSONObject object) throws JsonDeserializationException { + JSONObject fleetObject = Helpers.toJSONObjectSafe(object.get(RaceRowJsonSerializer.FIELD_FLEET)); + JSONArray cellsObject = Helpers.getNestedArraySafe(object, RaceRowJsonSerializer.FIELD_RACE_CELLS); + + Collection races = new ArrayList(); + Fleet fleet = fleetDeserializer.deserialize(fleetObject); + for (Object cellObject : cellsObject) { + JSONObject cellJson = Helpers.toJSONObjectSafe(cellObject); + races.add(raceCellDeserializer.deserialize(cellJson)); + } + + return new RaceRowImpl(fleet, races); + } }