diff --git a/java/com.sap.sailing.server.gateway/WEB-INF/web.xml b/java/com.sap.sailing.server.gateway/WEB-INF/web.xml
index 73e0a3f4fc0..da021315194 100644
--- a/java/com.sap.sailing.server.gateway/WEB-INF/web.xml
+++ b/java/com.sap.sailing.server.gateway/WEB-INF/web.xml
@@ -35,12 +35,12 @@
- RCEventTrack
- com.sap.sailing.server.gateway.impl.rc.EventTrackJsonExportServlet
+ RCRaceLogs
+ com.sap.sailing.server.gateway.impl.rc.RaceLogsJsonExportServlet
- RCEventTrack
- /rc/eventTrack
+ RCRaceLogs
+ /rc/racelogs
diff --git a/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/impl/rc/EventTrackJsonExportServlet.java b/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/impl/rc/RaceLogsJsonExportServlet.java
similarity index 83%
rename from java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/impl/rc/EventTrackJsonExportServlet.java
rename to java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/impl/rc/RaceLogsJsonExportServlet.java
index 6756fd852e0..8469b2baf32 100644
--- a/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/impl/rc/EventTrackJsonExportServlet.java
+++ b/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/impl/rc/RaceLogsJsonExportServlet.java
@@ -7,16 +7,18 @@ import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.json.simple.JSONArray;
+import org.json.simple.JSONValue;
+import org.json.simple.parser.ParseException;
import com.sap.sailing.domain.base.Competitor;
import com.sap.sailing.domain.base.RaceDefinition;
import com.sap.sailing.domain.base.Regatta;
import com.sap.sailing.domain.common.RegattaNameAndRaceName;
-import com.sap.sailing.domain.racelog.RaceLog;
import com.sap.sailing.domain.racelog.RaceLogEvent;
import com.sap.sailing.domain.tracking.DynamicTrackedRace;
import com.sap.sailing.domain.tracking.DynamicTrackedRegatta;
-import com.sap.sailing.domain.tracking.TrackedRace;
+import com.sap.sailing.server.gateway.deserialization.JsonDeserializationException;
+import com.sap.sailing.server.gateway.deserialization.impl.Helpers;
import com.sap.sailing.server.gateway.impl.JsonExportServlet;
import com.sap.sailing.server.gateway.serialization.JsonSerializer;
import com.sap.sailing.server.gateway.serialization.impl.CompetitorIdJsonSerializer;
@@ -26,10 +28,58 @@ import com.sap.sailing.server.gateway.serialization.impl.racelog.RaceLogFlagEven
import com.sap.sailing.server.gateway.serialization.impl.racelog.RaceLogStartTimeEventSerializer;
-public class EventTrackJsonExportServlet extends JsonExportServlet {
+public class RaceLogsJsonExportServlet extends JsonExportServlet {
private static final long serialVersionUID = 2197006949440887925L;
-
+
+
@Override
+ protected void doPost(HttpServletRequest request, HttpServletResponse response)
+ throws ServletException, IOException {
+ try {
+ Object requestBody = JSONValue.parseWithException(request.getReader());
+ JSONArray requestedIds = Helpers.toJSONArraySafe(requestBody);
+
+ for (Object element : requestedIds) {
+ System.out.println(element);
+ }
+
+ } catch (ParseException e) {
+ throw new JsonDeserializationException("Invalid JSON in request body.", e);
+ }
+
+ }
+
+
+ private DynamicTrackedRace getDynamicTrackedRace(String regattaName, String raceName) {
+ RegattaNameAndRaceName raceAndRegattaIdentifier = new RegattaNameAndRaceName(regattaName, raceName);
+
+ RaceDefinition raceDefinition = getService().getRace(raceAndRegattaIdentifier);
+ Regatta regatta = getService().getRegatta(raceAndRegattaIdentifier);
+
+ DynamicTrackedRegatta trackedRegatta = getService().getTrackedRegatta(regatta);
+ DynamicTrackedRace trackedRace = trackedRegatta.getExistingTrackedRace(raceDefinition);
+
+ return trackedRace;
+ }
+
+ private boolean validateParameter(HttpServletResponse response, String... parameters) throws IOException {
+ for (String parameter : parameters) {
+ if (parameter == null) {
+ response.sendError(HttpServletResponse.SC_BAD_REQUEST);
+ return false;
+ }
+ }
+ return true;
+ }
+
+ private static JsonSerializer createSerializer() {
+ JsonSerializer competitorSerializer = new CompetitorIdJsonSerializer();
+ return new RaceLogEventSerializer(
+ new RaceLogFlagEventSerializer(competitorSerializer),
+ new RaceLogStartTimeEventSerializer(competitorSerializer),
+ new RaceLogCourseAreaChangedEventSerializer(competitorSerializer));
+ }
+ /*@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
@@ -77,36 +127,6 @@ public class EventTrackJsonExportServlet extends JsonExportServlet {
// trackedRace.recordRaceCommitteeEvent(null);
response.sendError(HttpServletResponse.SC_NO_CONTENT);
- }
-
- private DynamicTrackedRace getDynamicTrackedRace(String regattaName, String raceName) {
- RegattaNameAndRaceName raceAndRegattaIdentifier = new RegattaNameAndRaceName(regattaName, raceName);
-
- RaceDefinition raceDefinition = getService().getRace(raceAndRegattaIdentifier);
- Regatta regatta = getService().getRegatta(raceAndRegattaIdentifier);
-
- DynamicTrackedRegatta trackedRegatta = getService().getTrackedRegatta(regatta);
- DynamicTrackedRace trackedRace = trackedRegatta.getExistingTrackedRace(raceDefinition);
-
- return trackedRace;
- }
-
- private boolean validateParameter(HttpServletResponse response, String... parameters) throws IOException {
- for (String parameter : parameters) {
- if (parameter == null) {
- response.sendError(HttpServletResponse.SC_BAD_REQUEST);
- return false;
- }
- }
- return true;
- }
-
- private static JsonSerializer createSerializer() {
- JsonSerializer competitorSerializer = new CompetitorIdJsonSerializer();
- return new RaceLogEventSerializer(
- new RaceLogFlagEventSerializer(competitorSerializer),
- new RaceLogStartTimeEventSerializer(competitorSerializer),
- new RaceLogCourseAreaChangedEventSerializer(competitorSerializer));
- }
+ }*/
}
diff --git a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/AppConstants.java b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/AppConstants.java
index f7e4a358996..496cc1763d7 100644
--- a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/AppConstants.java
+++ b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/AppConstants.java
@@ -17,7 +17,7 @@ public class AppConstants {
// Intent extra fields
public final static String COURSE_AREA_UUID_KEY = "courseUuid";
- public final static String RACE_UUID_KEY = "raceUuid";
+ public final static String RACE_ID_KEY = "raceUuid";
public final static String SERVICE_UNIQUE_ID = "serviceUID";
public final static String RACING_EVENT_TIME = "racingEventTime";
public final static String EXTRAS_JSON_KEY = "json";
diff --git a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/data/DataLoadingException.java b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/data/DataLoadingException.java
new file mode 100644
index 00000000000..12b89697874
--- /dev/null
+++ b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/data/DataLoadingException.java
@@ -0,0 +1,21 @@
+package com.sap.sailing.racecommittee.app.data;
+
+public class DataLoadingException extends Exception {
+ private static final long serialVersionUID = 4787160523984332591L;
+
+ public DataLoadingException() {
+ }
+
+ public DataLoadingException(String detailMessage) {
+ super(detailMessage);
+ }
+
+ public DataLoadingException(Throwable throwable) {
+ super(throwable);
+ }
+
+ public DataLoadingException(String detailMessage, Throwable throwable) {
+ super(detailMessage, throwable);
+ }
+
+}
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 faa0b8a7b9b..6e6664054bc 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
@@ -1,17 +1,24 @@
package com.sap.sailing.racecommittee.app.data;
import java.io.Serializable;
+import java.io.UnsupportedEncodingException;
import java.net.URI;
+import java.util.ArrayList;
import java.util.Collection;
+import java.util.Map;
+
+import org.json.simple.JSONValue;
import android.content.Context;
import com.sap.sailing.domain.base.CourseArea;
import com.sap.sailing.domain.base.Event;
+import com.sap.sailing.domain.racelog.RaceLogEvent;
import com.sap.sailing.racecommittee.app.data.clients.LoadClient;
import com.sap.sailing.racecommittee.app.data.handlers.DataHandler;
import com.sap.sailing.racecommittee.app.data.handlers.EventsDataHandler;
import com.sap.sailing.racecommittee.app.data.handlers.ManagedRacesDataHandler;
+import com.sap.sailing.racecommittee.app.data.http.HttpJsonPostRequest;
import com.sap.sailing.racecommittee.app.data.loaders.DataLoader;
import com.sap.sailing.racecommittee.app.data.parsers.DataParser;
import com.sap.sailing.racecommittee.app.data.parsers.EventsDataParser;
@@ -25,11 +32,13 @@ import com.sap.sailing.racecommittee.app.domain.deserialization.impl.FleetWithRa
import com.sap.sailing.racecommittee.app.domain.deserialization.impl.RaceGroupDeserializer;
import com.sap.sailing.racecommittee.app.domain.deserialization.impl.SeriesDataDeserializer;
import com.sap.sailing.racecommittee.app.domain.deserialization.impl.VenueJsonDeserializer;
+import com.sap.sailing.racecommittee.app.logging.ExLog;
/**
* Enables accessing of data.
*/
public class DataManager implements ReadonlyDataManager {
+ private static final String TAG = DataManager.class.getName();
public static ReadonlyDataManager create(Context context) {
return new DataManager(context, InMemoryDataStore.INSTANCE);
@@ -74,22 +83,37 @@ public class DataManager implements ReadonlyDataManager {
DataLoader> loader = new DataLoader>(
context,
- URI.create("http://192.168.178.22:8888/sailingserver/rc/events"),
+ URI.create(TargetHost + "/sailingserver/rc/events"),
parser,
handler);
loader.forceLoad();
}
- public void loadCourseAreas(Serializable parentEventId,
- LoadClient> client) {
+ public void loadCourseAreas(
+ final Serializable parentEventId,
+ final LoadClient> client) {
if (dataStore.hasEvent(parentEventId)) {
Event event = dataStore.getEvent(parentEventId);
client.onLoadSucceded(dataStore.getCourseAreas(event));
} else {
- client.onLoadFailed(new IllegalStateException("Unknown event id..."));
+ reloadEvents(new LoadClient>() {
+ public void onLoadSucceded(Collection data) {
+ if (dataStore.hasEvent(parentEventId)) {
+ Event event = dataStore.getEvent(parentEventId);
+ client.onLoadSucceded(dataStore.getCourseAreas(event));
+ } else {
+ client.onLoadFailed(new DataLoadingException(
+ String.format("There was no event object found for id %s.", parentEventId)));
+ }
+ }
+
+ public void onLoadFailed(Exception reason) {
+ client.onLoadFailed(new DataLoadingException(
+ String.format("There was no event object found for id %s. While reloading the events an error occured: %s", parentEventId, reason), reason));
+ }
+ });
}
-
}
public void addRaces(Collection data) {
@@ -101,7 +125,7 @@ public class DataManager implements ReadonlyDataManager {
public void loadRaces(Serializable courseAreaId, LoadClient> client) {
if (!dataStore.hasCourseArea(courseAreaId)) {
- client.onLoadFailed(new IllegalStateException("No course area found with given id"));
+ client.onLoadFailed(new DataLoadingException(String.format("No course area found with id %s", courseAreaId)));
return;
}
@@ -116,12 +140,44 @@ public class DataManager implements ReadonlyDataManager {
DataLoader> loader = new DataLoader>(
context,
- URI.create("http://192.168.178.22:8888/sailingserver/rc/leaderboards?courseArea=" + courseAreaId.toString()),
+ URI.create(TargetHost + "/sailingserver/rc/leaderboards?courseArea=" + courseAreaId.toString()),
parser,
handler);
loader.forceLoad();
}
+
+ public void loadRaceLogs(
+ Collection data,
+ LoadClient