# moved everything used by Android projects of com.sap.sailing.domain into new bundle com.sap.sailing.domain.shared.android

# updated com.sap.sailing.domain to Java 1.7 again
# split of Event (see EventData) and Course (see CourseData) to minimize shared code with android
# to avoid sharing RaceColumn and Leaderboard (and its dependencies) Android projects work with RaceGroups (consisting of SeriesWithRows -> consisting of RaceRows -> consisting of RaceCells -> consisting of RaceLogs). A RaceGroup is basically a data-only view on transposed RaceColumns. See RaceGroupFactory for conversion from Leaderboard to RaceGroup. Future work: use Regatta instead of Leaderboard to convert to RaceGroup
This commit is contained in:
Lukas Niemeier committed 2013-02-18 13:26:32 +01:00
1 parent 3e9df143c4
commit a229765845
160 files changed
+1236 -1420

No files matched your search

@@ -23,7 +23,8 @@ Require-Bundle: com.sap.sailing.domain,
com.sap.sailing.domain.common,
com.sap.sailing.udpconnector,
com.sap.sailing.server.gateway.serialization;bundle-version="1.0.0",
org.jdom;bundle-version="1.0.0"
org.jdom;bundle-version="1.0.0",
com.sap.sailing.domain.shared.android;bundle-version="1.0.0"
Bundle-ClassPath: .,
lib/rome-1.0.jar
Web-ContextPath: /sailingserver
@@ -18,7 +18,7 @@
<servlet>
<servlet-name>RCLeaderboards</servlet-name>
<servlet-class>com.sap.sailing.server.gateway.impl.rc.LeaderboardJsonExportServlet</servlet-class>
<servlet-class>com.sap.sailing.server.gateway.impl.rc.RaceGroupJsonExportServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>RCLeaderboards</servlet-name>
@@ -27,7 +27,7 @@
<servlet>
<servlet-name>RCEvents</servlet-name>
<servlet-class>com.sap.sailing.server.gateway.impl.rc.EventsJsonExportServlet</servlet-class>
<servlet-class>com.sap.sailing.server.gateway.impl.rc.EventDataJsonExportServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>RCEvents</servlet-name>
@@ -8,30 +8,30 @@ import javax.servlet.http.HttpServletResponse;
import org.json.simple.JSONArray;
import com.sap.sailing.domain.base.Event;
import com.sap.sailing.domain.base.EventData;
import com.sap.sailing.server.gateway.impl.JsonExportServlet;
import com.sap.sailing.server.gateway.serialization.JsonSerializer;
import com.sap.sailing.server.gateway.serialization.impl.CourseAreaJsonSerializer;
import com.sap.sailing.server.gateway.serialization.impl.EventJsonSerializer;
import com.sap.sailing.server.gateway.serialization.impl.EventDataJsonSerializer;
import com.sap.sailing.server.gateway.serialization.impl.VenueJsonSerializer;
public class EventsJsonExportServlet extends JsonExportServlet {
public class EventDataJsonExportServlet extends JsonExportServlet {
private static final long serialVersionUID = 4515246650108245796L;
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
JsonSerializer<Event> eventSerializer = createSerializer();
JsonSerializer<EventData> eventSerializer = createSerializer();
JSONArray result = new JSONArray();
for (Event event : getService().getAllEvents()) {
for (EventData event : getService().getAllEvents()) {
result.add(eventSerializer.serialize(event));
}
result.writeJSONString(response.getWriter());
}
private static JsonSerializer<Event> createSerializer() {
return new EventJsonSerializer(
private static JsonSerializer<EventData> createSerializer() {
return new EventDataJsonSerializer(
new VenueJsonSerializer(
new CourseAreaJsonSerializer()));
}
@@ -0,0 +1,113 @@
package com.sap.sailing.server.gateway.impl.rc;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.sap.sailing.domain.base.BoatClass;
import com.sap.sailing.domain.base.CourseArea;
import com.sap.sailing.domain.base.Fleet;
import com.sap.sailing.domain.base.RaceCell;
import com.sap.sailing.domain.base.RaceColumn;
import com.sap.sailing.domain.base.RaceColumnInSeries;
import com.sap.sailing.domain.base.RaceGroup;
import com.sap.sailing.domain.base.RaceRow;
import com.sap.sailing.domain.base.Series;
import com.sap.sailing.domain.base.SeriesWithRows;
import com.sap.sailing.domain.base.impl.FleetImpl;
import com.sap.sailing.domain.base.impl.RaceCellImpl;
import com.sap.sailing.domain.base.impl.RaceGroupImpl;
import com.sap.sailing.domain.base.impl.RaceRowImpl;
import com.sap.sailing.domain.base.impl.SeriesImpl;
import com.sap.sailing.domain.base.impl.SeriesWithRowsImpl;
import com.sap.sailing.domain.leaderboard.Leaderboard;
import com.sap.sailing.domain.leaderboard.RegattaLeaderboard;
import com.sap.sailing.domain.racelog.RaceLogIdentifier;
import com.sap.sailing.domain.racelog.impl.RaceLogIdentifierImpl;
import com.sap.sailing.server.RacingEventService;
public class RaceGroupFactory {
private RacingEventService service;
public RaceGroupFactory(RacingEventService service) {
this.service = service;
}
public RaceGroup convert(Leaderboard leaderboard) {
String name = leaderboard.getName();
CourseArea courseArea = leaderboard.getDefaultCourseArea();
BoatClass boatClass = null;
if (leaderboard instanceof RegattaLeaderboard) {
boatClass = ((RegattaLeaderboard) leaderboard).getRegatta().getBoatClass();
}
Iterable<SeriesWithRows> series = getSeries(leaderboard);
return new RaceGroupImpl(name, boatClass, courseArea, series);
}
public Iterable<SeriesWithRows> getSeries(Leaderboard leaderboard) {
Map<Series, List<RaceColumn>> seriesToRaceColumns = getSeriesToRaceColumns(leaderboard);
Collection<SeriesWithRows> seriesWithRows = new ArrayList<>();
for (Series series : seriesToRaceColumns.keySet()) {
Collection<RaceRow> rows = new ArrayList<>();
for (Fleet fleet : series.getFleets()) {
Collection<RaceCell> cells = new ArrayList<>();
for (RaceColumn raceColumn : seriesToRaceColumns.get(series)) {
RaceLogIdentifier identifier = new RaceLogIdentifierImpl(leaderboard, raceColumn, fleet);
cells.add(new RaceCellImpl(raceColumn.getName(), service.getRaceLog(identifier)));
}
rows.add(new RaceRowImpl(fleet, cells));
}
seriesWithRows.add(new SeriesWithRowsImpl(series.getName(), rows, series.isMedal()));
}
return seriesWithRows;
}
private Map<Series, List<RaceColumn>> getSeriesToRaceColumns(
Leaderboard leaderboard) {
Map<Series, List<RaceColumn>> seriesToRaceColumns = new HashMap<>();
Series defaultSeries = null;
for (RaceColumn raceColumn : leaderboard.getRaceColumns()) {
if (raceColumn instanceof RaceColumnInSeries) {
Series raceColumnSeries = ((RaceColumnInSeries) raceColumn).getSeries();
insertSeriesIfNew(seriesToRaceColumns, raceColumnSeries).add(raceColumn);
} else {
if (defaultSeries == null) {
defaultSeries = createDefaultSeries();
insertSeriesIfNew(seriesToRaceColumns, defaultSeries);
}
seriesToRaceColumns.get(defaultSeries).add(raceColumn);
}
}
return seriesToRaceColumns;
}
private Series createDefaultSeries() {
Series defaultSeries;
defaultSeries = new SeriesImpl(
"Default Series",
false,
Collections.<Fleet>singleton(new FleetImpl("Default Fleet")),
Collections.<String>emptyList(),
null);
return defaultSeries;
}
private List<RaceColumn> insertSeriesIfNew(Map<Series, List<RaceColumn>> target, Series newSeries) {
if (!target.containsKey(newSeries)) {
target.put(newSeries, new ArrayList<RaceColumn>());
}
return target.get(newSeries);
}
}
@@ -12,6 +12,7 @@ import org.json.simple.JSONObject;
import com.sap.sailing.domain.base.CourseArea;
import com.sap.sailing.domain.base.Event;
import com.sap.sailing.domain.base.RaceGroup;
import com.sap.sailing.domain.leaderboard.Leaderboard;
import com.sap.sailing.domain.racelog.RaceLog;
import com.sap.sailing.server.gateway.impl.JsonExportServlet;
@@ -19,15 +20,15 @@ import com.sap.sailing.server.gateway.serialization.JsonSerializer;
import com.sap.sailing.server.gateway.serialization.impl.BoatClassJsonSerializer;
import com.sap.sailing.server.gateway.serialization.impl.ColorJsonSerializer;
import com.sap.sailing.server.gateway.serialization.impl.CourseAreaJsonSerializer;
import com.sap.sailing.server.gateway.serialization.impl.FleetJsonSerializer;
import com.sap.sailing.server.gateway.serialization.impl.SeriesDataJsonSerializer;
import com.sap.sailing.server.gateway.serialization.impl.leaderboard.LeaderboardJsonSerializer;
import com.sap.sailing.server.gateway.serialization.impl.leaderboard.RaceCellJsonSerializer;
import com.sap.sailing.server.gateway.serialization.impl.leaderboard.RaceRowJsonSerializer;
import com.sap.sailing.server.gateway.serialization.impl.leaderboard.RaceRowsOfSeriesDataExtensionSerializer;
import com.sap.sailing.server.gateway.serialization.impl.leaderboard.SeriesDataOfLeaderboardExtensionSerializer;
import com.sap.sailing.server.gateway.serialization.impl.racegroup.FleetJsonSerializer;
import com.sap.sailing.server.gateway.serialization.impl.racegroup.RaceGroupJsonSerializer;
import com.sap.sailing.server.gateway.serialization.impl.racegroup.RaceCellJsonSerializer;
import com.sap.sailing.server.gateway.serialization.impl.racegroup.RaceRowJsonSerializer;
import com.sap.sailing.server.gateway.serialization.impl.racegroup.RaceRowsOfSeriesWithRowsSerializer;
import com.sap.sailing.server.gateway.serialization.impl.racegroup.SeriesWithRowsJsonSerializer;
import com.sap.sailing.server.gateway.serialization.impl.racegroup.SeriesWithRowsOfRaceGroupSerializer;
public class LeaderboardJsonExportServlet extends JsonExportServlet {
public class RaceGroupJsonExportServlet extends JsonExportServlet {
private static final long serialVersionUID = 4510175441769759252L;
private static final String PARAM_COURSE_AREA_FILTER = "courseArea";
@@ -49,12 +50,14 @@ public class LeaderboardJsonExportServlet extends JsonExportServlet {
CourseArea filterCourseArea = getCourseArea(courseAreaId);
JsonSerializer<Leaderboard> serializer = createSerializer();
JsonSerializer<RaceGroup> serializer = createSerializer();
JSONArray result = new JSONArray();
RaceGroupFactory raceGroupFactory = new RaceGroupFactory(getService());
for (Leaderboard leaderboard : getService().getLeaderboards().values()) {
if (filterCourseArea.equals(leaderboard.getDefaultCourseArea())) {
result.add(serializer.serialize(leaderboard));
RaceGroup raceGroup = raceGroupFactory.convert(leaderboard);
result.add(serializer.serialize(raceGroup));
}
}
@@ -83,13 +86,13 @@ public class LeaderboardJsonExportServlet extends JsonExportServlet {
}
}
private static JsonSerializer<Leaderboard> createSerializer() {
return new LeaderboardJsonSerializer(
private static JsonSerializer<RaceGroup> createSerializer() {
return new RaceGroupJsonSerializer(
new BoatClassJsonSerializer(),
new CourseAreaJsonSerializer(),
new SeriesDataOfLeaderboardExtensionSerializer(
new SeriesDataJsonSerializer(
new RaceRowsOfSeriesDataExtensionSerializer(
new SeriesWithRowsOfRaceGroupSerializer(
new SeriesWithRowsJsonSerializer(
new RaceRowsOfSeriesWithRowsSerializer(
new RaceRowJsonSerializer(
new FleetJsonSerializer(
new ColorJsonSerializer()),