mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-10-10 14:20:55 +00:00
Serialization code for basic events
Integration in servlets
This commit is contained in:
1 parent
cfff8bfee4
commit
bfb062128c
7 files changed
+403
No files matched your search
+18
@@ -0,0 +1,18 @@
|
||||
package com.sap.sailing.server.gateway.serialization;
|
||||
|
||||
import org.json.simple.JSONObject;
|
||||
|
||||
import com.sap.sailing.domain.racecommittee.RaceCommitteeEvent;
|
||||
|
||||
public class RaceCommitteeEventSerializer implements JsonSerializer<RaceCommitteeEvent> {
|
||||
|
||||
@Override
|
||||
public JSONObject serialize(RaceCommitteeEvent object) {
|
||||
JSONObject result = new JSONObject();
|
||||
result.put("id", object.getId().toString());
|
||||
result.put("timestamp", object.getTimePoint().asMillis());
|
||||
result.put("passId", object.getPassId());
|
||||
return result;
|
||||
}
|
||||
|
||||
}
|
||||
+28
@@ -0,0 +1,28 @@
|
||||
package com.sap.sailing.server.gateway.serialization;
|
||||
|
||||
import com.sap.sailing.domain.racecommittee.RaceCommitteeEvent;
|
||||
import com.sap.sailing.domain.racecommittee.RaceCommitteeFlagEvent;
|
||||
import com.sap.sailing.domain.racecommittee.RaceCommitteeStartTimeEvent;
|
||||
|
||||
public class RaceCommitteeEventSerializerFactory {
|
||||
|
||||
private JsonSerializer<RaceCommitteeEvent> baseEventSerializer;
|
||||
|
||||
public RaceCommitteeEventSerializerFactory() {
|
||||
this.baseEventSerializer = new RaceCommitteeEventSerializer();
|
||||
}
|
||||
|
||||
public JsonSerializer<RaceCommitteeEvent> getSerializer(RaceCommitteeEvent event) {
|
||||
if (event instanceof RaceCommitteeFlagEvent) {
|
||||
return new RaceCommitteeFlagEventSerializer(baseEventSerializer);
|
||||
}
|
||||
if (event instanceof RaceCommitteeStartTimeEvent) {
|
||||
return new RaceCommitteeStartTimeEventSerializer(baseEventSerializer);
|
||||
}
|
||||
throw new UnsupportedOperationException(
|
||||
String.format(
|
||||
"There is no serializer defined for event type %s",
|
||||
event.getClass().getName()));
|
||||
}
|
||||
|
||||
}
|
||||
+32
@@ -0,0 +1,32 @@
|
||||
package com.sap.sailing.server.gateway.serialization;
|
||||
|
||||
import org.json.simple.JSONObject;
|
||||
|
||||
import com.sap.sailing.domain.racecommittee.RaceCommitteeEvent;
|
||||
import com.sap.sailing.domain.racecommittee.RaceCommitteeFlagEvent;
|
||||
|
||||
/**
|
||||
* Implements JsonSerializer<RaceCommitteeEvent> to enable a consistent interface when used
|
||||
* with {@link RaceCommitteeEventSerializerFactory}, see type-safeness of generics.
|
||||
*/
|
||||
public class RaceCommitteeFlagEventSerializer implements JsonSerializer<RaceCommitteeEvent> {
|
||||
|
||||
private JsonSerializer<RaceCommitteeEvent> baseSerializer;
|
||||
|
||||
public RaceCommitteeFlagEventSerializer(JsonSerializer<RaceCommitteeEvent> baseSerializer) {
|
||||
this.baseSerializer = baseSerializer;
|
||||
}
|
||||
|
||||
@Override
|
||||
public JSONObject serialize(RaceCommitteeEvent object) {
|
||||
// We have to cast here, see class comment
|
||||
RaceCommitteeFlagEvent flagEvent = (RaceCommitteeFlagEvent) object;
|
||||
|
||||
JSONObject result = baseSerializer.serialize(flagEvent);
|
||||
result.put("upperFlag", flagEvent.getUpperFlag());
|
||||
result.put("lowerFlag", flagEvent.getLowerFlag());
|
||||
result.put("displayed", flagEvent.isDisplayed());
|
||||
return result;
|
||||
}
|
||||
|
||||
}
|
||||
+29
@@ -0,0 +1,29 @@
|
||||
package com.sap.sailing.server.gateway.serialization;
|
||||
|
||||
import org.json.simple.JSONObject;
|
||||
import com.sap.sailing.domain.racecommittee.RaceCommitteeEvent;
|
||||
import com.sap.sailing.domain.racecommittee.RaceCommitteeStartTimeEvent;
|
||||
|
||||
/**
|
||||
* Implements JsonSerializer<RaceCommitteeEvent> to enable a consistent interface when used
|
||||
* with {@link RaceCommitteeEventSerializerFactory}, see type-safeness of generics.
|
||||
*/
|
||||
public class RaceCommitteeStartTimeEventSerializer implements JsonSerializer<RaceCommitteeEvent> {
|
||||
|
||||
private JsonSerializer<RaceCommitteeEvent> baseSerializer;
|
||||
|
||||
public RaceCommitteeStartTimeEventSerializer(JsonSerializer<RaceCommitteeEvent> baseSerializer) {
|
||||
this.baseSerializer = baseSerializer;
|
||||
}
|
||||
|
||||
@Override
|
||||
public JSONObject serialize(RaceCommitteeEvent object) {
|
||||
// We have to cast here, see class comment
|
||||
RaceCommitteeStartTimeEvent startTimeEvent = (RaceCommitteeStartTimeEvent) object;
|
||||
|
||||
JSONObject result = baseSerializer.serialize(startTimeEvent);
|
||||
result.put("startTime", startTimeEvent.getStartTime().asMillis());
|
||||
return result;
|
||||
}
|
||||
|
||||
}
|
||||
+142
@@ -0,0 +1,142 @@
|
||||
package com.sap.sailing.server.gateway.impl;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.Collections;
|
||||
import java.util.Date;
|
||||
import java.util.UUID;
|
||||
|
||||
import javax.servlet.ServletException;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
|
||||
import org.json.simple.JSONArray;
|
||||
|
||||
import com.sap.sailing.domain.base.Competitor;
|
||||
import com.sap.sailing.domain.base.Waypoint;
|
||||
import com.sap.sailing.domain.base.impl.BoatClassImpl;
|
||||
import com.sap.sailing.domain.base.impl.CourseImpl;
|
||||
import com.sap.sailing.domain.base.impl.MillisecondsTimePoint;
|
||||
import com.sap.sailing.domain.base.impl.RaceDefinitionImpl;
|
||||
import com.sap.sailing.domain.common.RegattaNameAndRaceName;
|
||||
import com.sap.sailing.domain.racecommittee.Flags;
|
||||
import com.sap.sailing.domain.racecommittee.RaceCommitteeEvent;
|
||||
import com.sap.sailing.domain.racecommittee.RaceCommitteeEventTrack;
|
||||
import com.sap.sailing.domain.racecommittee.RaceCommitteeFlagEvent;
|
||||
import com.sap.sailing.domain.racecommittee.RaceCommitteeStore;
|
||||
import com.sap.sailing.domain.racecommittee.impl.EmptyRaceCommitteeStore;
|
||||
import com.sap.sailing.domain.racecommittee.impl.RaceCommitteeEventTrackImpl;
|
||||
import com.sap.sailing.domain.racecommittee.impl.RaceCommitteeFlagEventImpl;
|
||||
import com.sap.sailing.domain.racecommittee.impl.RaceCommitteeStartTimeEventImpl;
|
||||
import com.sap.sailing.domain.tracking.DynamicTrackedRace;
|
||||
import com.sap.sailing.domain.tracking.TrackedRace;
|
||||
import com.sap.sailing.domain.tracking.TrackedRegatta;
|
||||
import com.sap.sailing.domain.tracking.impl.DynamicTrackedRaceImpl;
|
||||
import com.sap.sailing.domain.tracking.impl.EmptyWindStore;
|
||||
import com.sap.sailing.server.gateway.serialization.JsonSerializer;
|
||||
import com.sap.sailing.server.gateway.serialization.RaceCommitteeEventSerializer;
|
||||
import com.sap.sailing.server.gateway.serialization.RaceCommitteeEventSerializerFactory;
|
||||
|
||||
|
||||
public class EventTrackRaceCommitteeServlet extends JsonExportServlet {
|
||||
private static final long serialVersionUID = 2197006949440887925L;
|
||||
|
||||
@Override
|
||||
protected void doGet(HttpServletRequest request, HttpServletResponse response)
|
||||
throws ServletException, IOException {
|
||||
|
||||
TrackedRace trackedRace = getTrackedRace(request);
|
||||
if (trackedRace == null)
|
||||
{
|
||||
response.sendError(HttpServletResponse.SC_NOT_FOUND);
|
||||
return;
|
||||
}
|
||||
|
||||
JSONArray result = serizalizeTrack(trackedRace);
|
||||
result.writeJSONString(response.getWriter());
|
||||
}
|
||||
|
||||
private JSONArray serizalizeTrack(TrackedRace trackedRace) {
|
||||
JSONArray result = new JSONArray();
|
||||
|
||||
RaceCommitteeEventSerializerFactory serializerFactory = new RaceCommitteeEventSerializerFactory();
|
||||
RaceCommitteeEventTrack track = trackedRace.getOrCreateRaceCommitteeEventTrack();
|
||||
|
||||
track.lockForRead();
|
||||
for (RaceCommitteeEvent event : track.getFixes()) {
|
||||
result.add(serializerFactory.getSerializer(event).serialize(event));
|
||||
}
|
||||
track.unlockAfterRead();
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void doPost(HttpServletRequest request, HttpServletResponse response)
|
||||
throws ServletException, IOException {
|
||||
|
||||
String regattaName = request.getParameter(PARAM_NAME_REGATTANAME);
|
||||
String raceName = request.getParameter(PARAM_NAME_RACENAME);
|
||||
if (!validateParameter(response, regattaName, raceName)) return;
|
||||
|
||||
DynamicTrackedRace trackedRace = getDynamicTrackedRace(regattaName, raceName);
|
||||
if (trackedRace == null)
|
||||
{
|
||||
response.sendError(HttpServletResponse.SC_NOT_FOUND);
|
||||
return;
|
||||
}
|
||||
|
||||
// TODO: add event to trackedRace...
|
||||
// trackedRace.recordRaceCommitteeEvent(null);
|
||||
response.sendError(HttpServletResponse.SC_ACCEPTED);
|
||||
|
||||
}
|
||||
|
||||
private DynamicTrackedRace getDynamicTrackedRace(String regattaName,
|
||||
String raceName) {
|
||||
RegattaNameAndRaceName nameIdentifier = new RegattaNameAndRaceName(regattaName, raceName);
|
||||
DynamicTrackedRace trackedRace =
|
||||
getService().getOrCreateTrackedRegatta(
|
||||
getService().getRegattaByName(regattaName)).
|
||||
getExistingTrackedRace(getService().getRace(nameIdentifier));
|
||||
return trackedRace;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected TrackedRace getTrackedRace(HttpServletRequest request) {
|
||||
RaceCommitteeStore store = new FakeStore();
|
||||
TrackedRace trackedRace = new DynamicTrackedRaceImpl(
|
||||
null,
|
||||
new RaceDefinitionImpl("Race One",
|
||||
new CourseImpl("Course IA", Collections.<Waypoint>emptyList()),
|
||||
new BoatClassImpl("MyBoats", false),
|
||||
Collections.<Competitor>emptyList()),
|
||||
EmptyWindStore.INSTANCE,
|
||||
1, 1, 1,
|
||||
store);
|
||||
return trackedRace;
|
||||
}
|
||||
|
||||
class FakeStore extends EmptyRaceCommitteeStore implements RaceCommitteeStore {
|
||||
@Override
|
||||
public RaceCommitteeEventTrack getRaceCommitteeEventTrack(
|
||||
TrackedRegatta trackedRegatta, TrackedRace trackedRace) {
|
||||
|
||||
RaceCommitteeEventTrack track = new RaceCommitteeEventTrackImpl("karlos");
|
||||
track.add(
|
||||
new RaceCommitteeFlagEventImpl(new MillisecondsTimePoint(new Date()), UUID.randomUUID(), null,
|
||||
0, Flags.ALPHA, Flags.NOVEMBER, true));
|
||||
return track;
|
||||
}
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
}
|
||||
+83
@@ -0,0 +1,83 @@
|
||||
package com.sap.sailing.server.gateway.impl;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.Collections;
|
||||
import java.util.UUID;
|
||||
|
||||
import javax.servlet.ServletException;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
|
||||
import org.json.simple.JSONArray;
|
||||
|
||||
import com.sap.sailing.domain.base.Competitor;
|
||||
import com.sap.sailing.domain.base.CourseArea;
|
||||
import com.sap.sailing.domain.base.Event;
|
||||
import com.sap.sailing.domain.base.RaceDefinition;
|
||||
import com.sap.sailing.domain.base.Regatta;
|
||||
import com.sap.sailing.domain.base.Venue;
|
||||
import com.sap.sailing.domain.base.Waypoint;
|
||||
import com.sap.sailing.domain.base.impl.CourseAreaImpl;
|
||||
import com.sap.sailing.domain.base.impl.CourseImpl;
|
||||
import com.sap.sailing.domain.base.impl.RaceDefinitionImpl;
|
||||
import com.sap.sailing.server.gateway.serialization.CourseAreaJsonSerializer;
|
||||
import com.sap.sailing.server.gateway.serialization.EventJsonSerializer;
|
||||
import com.sap.sailing.server.gateway.serialization.VenueJsonSerializer;
|
||||
|
||||
public class EventsRaceCommitteeServlet extends JsonExportServlet {
|
||||
private static final long serialVersionUID = 4515246650108245796L;
|
||||
|
||||
@Override
|
||||
protected void doGet(HttpServletRequest request, HttpServletResponse response)
|
||||
throws ServletException, IOException {
|
||||
|
||||
EventJsonSerializer serializer =
|
||||
new EventJsonSerializer(
|
||||
new VenueJsonSerializer(
|
||||
new CourseAreaJsonSerializer()));
|
||||
|
||||
JSONArray result = new JSONArray();
|
||||
for (Event event : getService().getAllEvents())
|
||||
{
|
||||
result.add(serializer.serialize(event));
|
||||
}
|
||||
result.writeJSONString(response.getWriter());
|
||||
}
|
||||
|
||||
private Iterable<Event> exampleEvents()
|
||||
{
|
||||
Event kielerWocheEvent = getService().addEvent(
|
||||
"Kieler Woche 2012 - Where Sailing meets people",
|
||||
"Schilksee",
|
||||
"http://www.youtube.com",
|
||||
true, Collections.<String>emptyList());
|
||||
|
||||
Venue schilksee = kielerWocheEvent.getVenue();
|
||||
|
||||
CourseArea alpha = new CourseAreaImpl("Alpha");
|
||||
schilksee.addCourseArea(alpha);
|
||||
|
||||
//Fleet allBoats = new FleetImpl("Blue");
|
||||
//Series series = null;//new SeriesData("Qualification", false, Arrays.asList(allBoats));
|
||||
|
||||
Regatta regatta = getService().getOrCreateRegatta(
|
||||
"470er Men",
|
||||
"470er",
|
||||
UUID.fromString("b2775b10-5b3f-11e2-bcfd-0800200c9a66"));
|
||||
kielerWocheEvent.addRegatta(regatta);
|
||||
|
||||
RaceDefinition myRace = new RaceDefinitionImpl(
|
||||
"Race One",
|
||||
new CourseImpl("Downwind", Collections.<Waypoint>emptyList()),
|
||||
regatta.getBoatClass(),
|
||||
Collections.<Competitor>emptyList(),
|
||||
UUID.fromString("c2775b10-5b3f-11e2-bcfd-0800200c9a66"));
|
||||
regatta.addRace(myRace);
|
||||
|
||||
alpha.addRace(myRace);
|
||||
|
||||
|
||||
return Collections.<Event>singleton(kielerWocheEvent);
|
||||
}
|
||||
|
||||
}
|
||||
+71
@@ -0,0 +1,71 @@
|
||||
package com.sap.sailing.server.gateway.impl;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.Serializable;
|
||||
import java.util.UUID;
|
||||
|
||||
import javax.servlet.ServletException;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
|
||||
import org.json.simple.JSONArray;
|
||||
|
||||
import com.sap.sailing.domain.base.Event;
|
||||
import com.sap.sailing.domain.base.Regatta;
|
||||
import com.sap.sailing.server.gateway.serialization.BoatClassJsonSerializer;
|
||||
import com.sap.sailing.server.gateway.serialization.RaceDefinitionJsonSerializer;
|
||||
import com.sap.sailing.server.gateway.serialization.RegattaJsonSerializer;
|
||||
|
||||
|
||||
public class RegattasRaceCommitteeServlet extends JsonExportServlet {
|
||||
|
||||
private static final long serialVersionUID = -5661776042560467182L;
|
||||
|
||||
@Override
|
||||
protected void doGet(HttpServletRequest request, HttpServletResponse response)
|
||||
throws ServletException, IOException {
|
||||
Event event = getEvent(request);
|
||||
if (event == null)
|
||||
{
|
||||
response.sendError(HttpServletResponse.SC_NOT_FOUND);
|
||||
return;
|
||||
}
|
||||
|
||||
RegattaJsonSerializer serializer = new RegattaJsonSerializer(
|
||||
new BoatClassJsonSerializer(),
|
||||
new RaceDefinitionJsonSerializer());
|
||||
JSONArray result = new JSONArray();
|
||||
for (Regatta regatta : event.getRegattas())
|
||||
{
|
||||
result.add(serializer.serialize(regatta));
|
||||
}
|
||||
result.writeJSONString(response.getWriter());
|
||||
}
|
||||
|
||||
private Event getEvent(HttpServletRequest request) {
|
||||
// PathInfo is prefixed by forward slash
|
||||
String pathInfo = request.getPathInfo();
|
||||
if (pathInfo.length() < 2)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
// Strip leading slash...
|
||||
pathInfo = pathInfo.substring(1);
|
||||
|
||||
try {
|
||||
// ... and get event!
|
||||
Serializable id = getEventId(pathInfo);
|
||||
return getService().getEvent(id);
|
||||
}
|
||||
catch (IllegalArgumentException iae)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
private Serializable getEventId(String idValue) {
|
||||
return UUID.fromString(idValue);
|
||||
}
|
||||
|
||||
}
|
||||
Reference in new issue
Block a user