stripped leaderboard group (ID, name, description) is now JSON-serialized with Event

This commit is contained in:
Axel Uhl committed 2014-06-02 15:32:24 +02:00
1 parent 8e23b60837
commit 6ecc711ea6
20 files changed
+279 -102

No files matched your search

@@ -10,44 +10,55 @@ import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import com.sap.sailing.domain.base.EventBase;
import com.sap.sailing.domain.base.LeaderboardGroupBase;
import com.sap.sailing.domain.base.Venue;
import com.sap.sailing.domain.base.impl.EventBaseImpl;
import com.sap.sailing.domain.base.impl.StrippedEventImpl;
import com.sap.sailing.domain.common.impl.MillisecondsTimePoint;
import com.sap.sailing.server.gateway.deserialization.JsonDeserializationException;
import com.sap.sailing.server.gateway.deserialization.JsonDeserializer;
import com.sap.sailing.server.gateway.serialization.impl.EventJsonSerializer;
import com.sap.sailing.server.gateway.serialization.impl.EventBaseJsonSerializer;
public class EventBaseJsonDeserializer implements JsonDeserializer<EventBase> {
private JsonDeserializer<Venue> venueDeserializer;
private final JsonDeserializer<Venue> venueDeserializer;
private final JsonDeserializer<LeaderboardGroupBase> leaderboardGroupDeserializer;
public EventBaseJsonDeserializer(JsonDeserializer<Venue> venueDeserializer) {
public EventBaseJsonDeserializer(JsonDeserializer<Venue> venueDeserializer, JsonDeserializer<LeaderboardGroupBase> leaderboardGroupDeserializer) {
this.venueDeserializer = venueDeserializer;
this.leaderboardGroupDeserializer = leaderboardGroupDeserializer;
}
public EventBase deserialize(JSONObject object) throws JsonDeserializationException {
UUID id = UUID.fromString((String) object.get(EventJsonSerializer.FIELD_ID));
String name = object.get(EventJsonSerializer.FIELD_NAME).toString();
Number startDate = (Number) object.get(EventJsonSerializer.FIELD_START_DATE);
Number endDate = (Number) object.get(EventJsonSerializer.FIELD_END_DATE);
UUID id = UUID.fromString((String) object.get(EventBaseJsonSerializer.FIELD_ID));
String name = object.get(EventBaseJsonSerializer.FIELD_NAME).toString();
Number startDate = (Number) object.get(EventBaseJsonSerializer.FIELD_START_DATE);
Number endDate = (Number) object.get(EventBaseJsonSerializer.FIELD_END_DATE);
final Venue venue;
if (object.get(EventJsonSerializer.FIELD_VENUE) != null) {
JSONObject venueObject = Helpers.getNestedObjectSafe(object, EventJsonSerializer.FIELD_VENUE);
if (object.get(EventBaseJsonSerializer.FIELD_VENUE) != null) {
JSONObject venueObject = Helpers.getNestedObjectSafe(object, EventBaseJsonSerializer.FIELD_VENUE);
venue = venueDeserializer.deserialize(venueObject);
} else {
venue = null;
}
EventBaseImpl result = new EventBaseImpl(name, startDate == null ? null : new MillisecondsTimePoint(startDate.longValue()),
endDate == null ? null : new MillisecondsTimePoint(endDate.longValue()), venue, true, id);
if (object.get(EventJsonSerializer.FIELD_IMAGE_URLS) != null) {
JSONArray leaderboardGroupsJson = (JSONArray) object.get(EventBaseJsonSerializer.FIELDS_LEADERBOARD_GROUPS);
List<LeaderboardGroupBase> leaderboardGroups = new ArrayList<LeaderboardGroupBase>();
if (leaderboardGroupsJson != null) {
for (Object lgJson : leaderboardGroupsJson) {
leaderboardGroups.add(leaderboardGroupDeserializer.deserialize((JSONObject) lgJson));
}
}
EventBaseImpl result = new StrippedEventImpl(name, startDate == null ? null : new MillisecondsTimePoint(startDate.longValue()),
endDate == null ? null : new MillisecondsTimePoint(endDate.longValue()), venue, /* is public */ true, id, leaderboardGroups);
if (object.get(EventBaseJsonSerializer.FIELD_IMAGE_URLS) != null) {
try {
result.setImageURLs(getURLsFromStrings(Helpers.getNestedArraySafe(object, EventJsonSerializer.FIELD_IMAGE_URLS)));
result.setImageURLs(getURLsFromStrings(Helpers.getNestedArraySafe(object, EventBaseJsonSerializer.FIELD_IMAGE_URLS)));
} catch (MalformedURLException e) {
throw new JsonDeserializationException("Error deserializing image URLs for event "+name, e);
}
}
if (object.get(EventJsonSerializer.FIELD_VIDEO_URLS) != null) {
if (object.get(EventBaseJsonSerializer.FIELD_VIDEO_URLS) != null) {
try {
result.setVideoURLs(getURLsFromStrings(Helpers.getNestedArraySafe(object, EventJsonSerializer.FIELD_VIDEO_URLS)));
result.setVideoURLs(getURLsFromStrings(Helpers.getNestedArraySafe(object, EventBaseJsonSerializer.FIELD_VIDEO_URLS)));
} catch (MalformedURLException e) {
throw new JsonDeserializationException("Error deserializing video URLs for event "+name, e);
}
@@ -0,0 +1,27 @@
package com.sap.sailing.server.gateway.deserialization.impl;
import java.util.UUID;
import org.json.simple.JSONObject;
import com.sap.sailing.domain.base.LeaderboardGroupBase;
import com.sap.sailing.domain.base.impl.StrippedLeaderboardGroupImpl;
import com.sap.sailing.server.gateway.deserialization.JsonDeserializationException;
import com.sap.sailing.server.gateway.deserialization.JsonDeserializer;
import com.sap.sailing.server.gateway.serialization.impl.EventBaseJsonSerializer;
import com.sap.sailing.server.gateway.serialization.impl.LeaderboardGroupBaseJsonSerializer;
public class LeaderboardGroupBaseJsonDeserializer implements JsonDeserializer<LeaderboardGroupBase> {
public LeaderboardGroupBaseJsonDeserializer() {
}
public LeaderboardGroupBase deserialize(JSONObject object) throws JsonDeserializationException {
UUID id = UUID.fromString((String) object.get(EventBaseJsonSerializer.FIELD_ID));
String name = object.get(LeaderboardGroupBaseJsonSerializer.FIELD_NAME).toString();
String description = object.get(LeaderboardGroupBaseJsonSerializer.FIELD_DESCRIPTION).toString();
String hasOverallLeaderboard = object.get(LeaderboardGroupBaseJsonSerializer.FIELD_HAS_OVERALL_LEADERBOARD).toString();
LeaderboardGroupBase result = new StrippedLeaderboardGroupImpl(id, name, description, hasOverallLeaderboard == null ? false : Boolean.valueOf(hasOverallLeaderboard));
return result;
}
}
@@ -6,10 +6,11 @@ import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import com.sap.sailing.domain.base.EventBase;
import com.sap.sailing.domain.base.LeaderboardGroupBase;
import com.sap.sailing.domain.base.Venue;
import com.sap.sailing.server.gateway.serialization.JsonSerializer;
public class EventJsonSerializer implements JsonSerializer<EventBase> {
public class EventBaseJsonSerializer implements JsonSerializer<EventBase> {
public static final String FIELD_ID = "id";
public static final String FIELD_NAME = "name";
public static final String FIELD_START_DATE = "startDate";
@@ -17,11 +18,13 @@ public class EventJsonSerializer implements JsonSerializer<EventBase> {
public static final String FIELD_VENUE = "venue";
public static final String FIELD_IMAGE_URLS = "imageURLs";
public static final String FIELD_VIDEO_URLS = "videoURLs";
public static final String FIELDS_LEADERBOARD_GROUPS = "leaderboardGroups";
private final JsonSerializer<Venue> venueSerializer;
private final JsonSerializer<? super LeaderboardGroupBase> leaderboardGroupSerializer;
public EventJsonSerializer(JsonSerializer<Venue> venueSerializer)
{
public EventBaseJsonSerializer(JsonSerializer<Venue> venueSerializer, JsonSerializer<? super LeaderboardGroupBase> leaderboardGroupSerializer) {
this.leaderboardGroupSerializer = leaderboardGroupSerializer;
this.venueSerializer = venueSerializer;
}
@@ -34,6 +37,11 @@ public class EventJsonSerializer implements JsonSerializer<EventBase> {
result.put(FIELD_VENUE, venueSerializer.serialize(event.getVenue()));
result.put(FIELD_IMAGE_URLS, getURLsAsStringArray(event.getImageURLs()));
result.put(FIELD_VIDEO_URLS, getURLsAsStringArray(event.getVideoURLs()));
JSONArray leaderboardGroups = new JSONArray();
result.put(FIELDS_LEADERBOARD_GROUPS, leaderboardGroups);
for (LeaderboardGroupBase lg : event.getLeaderboardGroups()) {
leaderboardGroups.add(leaderboardGroupSerializer.serialize(lg));
}
return result;
}
@@ -0,0 +1,25 @@
package com.sap.sailing.server.gateway.serialization.impl;
import org.json.simple.JSONObject;
import com.sap.sailing.domain.base.LeaderboardGroupBase;
import com.sap.sailing.server.gateway.serialization.JsonSerializer;
public class LeaderboardGroupBaseJsonSerializer implements JsonSerializer<LeaderboardGroupBase> {
public static final String FIELD_ID = "id";
public static final String FIELD_NAME = "name";
public static final String FIELD_DESCRIPTION = "description";
public static final String FIELD_HAS_OVERALL_LEADERBOARD = "hasOverallLeaderboard";
public LeaderboardGroupBaseJsonSerializer() {
}
public JSONObject serialize(LeaderboardGroupBase leaderboardGroup) {
JSONObject result = new JSONObject();
result.put(FIELD_ID, leaderboardGroup.getId().toString());
result.put(FIELD_NAME, leaderboardGroup.getName());
result.put(FIELD_DESCRIPTION, leaderboardGroup.getDescription());
result.put(FIELD_HAS_OVERALL_LEADERBOARD, leaderboardGroup.hasOverallLeaderboard());
return result;
}
}