# Added a (for now empty) shared domain bundle

# Another round of changes in the communication between app and server
# This time actual "race rows" are transmitted to the application - created by "transposing" the RaceColumns of a Leaderboard
# Each RaceRow contains it Fleet and several RaceCells. A RaceCell consists of a name and a RaceLog
# Removed a bunch of now unused data structures and serialization facilities
This commit is contained in:
Lukas Niemeier committed 2013-02-09 19:02:46 +01:00
1 parent 0f6b592530
commit 1fefd2ea17
55 files changed
+601 -605

No files matched your search

@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
<classpathentry kind="src" path="src"/>
<classpathentry kind="output" path="bin"/>
</classpath>
@@ -0,0 +1,28 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>com.sap.sailing.domain.shared.android</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.jdt.core.javabuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.pde.ManifestBuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.pde.SchemaBuilder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.pde.PluginNature</nature>
<nature>org.eclipse.jdt.core.javanature</nature>
</natures>
</projectDescription>
@@ -0,0 +1,7 @@
eclipse.preferences.version=1
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
org.eclipse.jdt.core.compiler.compliance=1.6
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
org.eclipse.jdt.core.compiler.source=1.6
@@ -0,0 +1,8 @@
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: com.sap.sailing.domain.shared.android
Bundle-SymbolicName: com.sap.sailing.domain.shared.android
Bundle-Version: 1.0.0.qualifier
Bundle-Vendor: SAP
Bundle-RequiredExecutionEnvironment: JavaSE-1.6
Require-Bundle: com.sap.sailing.domain.common;bundle-version="1.0.0"
@@ -0,0 +1,4 @@
source.. = src/
output.. = bin/
bin.includes = META-INF/,\
.
@@ -1,8 +0,0 @@
package com.sap.sailing.domain.base;
public interface FleetWithRaceNames extends Fleet {
public Iterable<String> getRaceNames();
}
@@ -1,8 +0,0 @@
package com.sap.sailing.domain.base;
public interface FleetWithRaces extends Fleet {
public Iterable<RaceDefinition> getRaceDefinitions();
}
@@ -0,0 +1,10 @@
package com.sap.sailing.domain.base;
import com.sap.sailing.domain.common.Named;
import com.sap.sailing.domain.racelog.RaceLog;
public interface RaceCell extends Named {
RaceLog getRaceLog();
}
@@ -1,11 +0,0 @@
package com.sap.sailing.domain.base;
import com.sap.sailing.domain.common.Named;
public interface RaceGroup extends Named {
public CourseArea getDefaultCourseArea();
public Iterable<SeriesData> getSeries();
}
@@ -0,0 +1,9 @@
package com.sap.sailing.domain.base;
public interface RaceRow {
Fleet getFleet();
Iterable<RaceCell> getCells();
}
@@ -1,6 +1,5 @@
package com.sap.sailing.domain.base;
import com.sap.sailing.domain.common.Named;
import com.sap.sailing.domain.tracking.TrackedRace;
import com.sap.sailing.domain.tracking.TrackedRegattaRegistry;
@@ -19,28 +18,10 @@ import com.sap.sailing.domain.tracking.TrackedRegattaRegistry;
* @author Axel Uhl (D043530)
*
*/
public interface Series extends Named {
/**
* Returns the fleets of this series, in ascending order, better fleets first.
*/
Iterable<? extends Fleet> getFleets();
/**
* A series consists of one or more "race columns." Some people would just say "race," but we use the term "race" for
* something that has a single start time and start line; so if each fleet in a series gets their own start for
* something called "R2", those are as many "races" as we have fleets; therefore, we use "race column" instead to
* describe all "races" named, e.g., "R3" in a series.
*/
Iterable<? extends RaceColumnInSeries> getRaceColumns();
public interface Series extends SeriesData {
RaceColumnInSeries getRaceColumnByName(String columnName);
/**
* Tells whether this is the "last" / "medal" race series, usually having only one race. This may have implications
* on the scoring scheme (usually, medal races scores are doubled and cannot be discarded).
*/
boolean isMedal();
void setIsMedal(boolean isMedal);
Fleet getFleetByName(String fleetName);
@@ -4,11 +4,19 @@ import com.sap.sailing.domain.common.Named;
public interface SeriesData extends Named {
/**
/**
* Returns the fleets of this series, in ascending order, better fleets first.
*/
Iterable<? extends Fleet> getFleets();
/**
* A series consists of one or more "race columns." Some people would just say "race," but we use the term "race" for
* something that has a single start time and start line; so if each fleet in a series gets their own start for
* something called "R2", those are as many "races" as we have fleets; therefore, we use "race column" instead to
* describe all "races" named, e.g., "R3" in a series.
*/
Iterable<? extends RaceColumnInSeries> getRaceColumns();
/**
* Tells whether this is the "last" / "medal" race series, usually having only one race. This may have implications
* on the scoring scheme (usually, medal races scores are doubled and cannot be discarded).
@@ -1,45 +0,0 @@
package com.sap.sailing.domain.base.impl;
import com.sap.sailing.domain.base.Fleet;
import com.sap.sailing.domain.base.FleetWithRaceNames;
import com.sap.sailing.domain.common.Color;
public class FleetWithRaceNamesImpl implements FleetWithRaceNames {
private static final long serialVersionUID = -7686050535458112702L;
private Fleet fleet;
private Iterable<String> raceNames;
public FleetWithRaceNamesImpl(
Fleet fleet,
Iterable<String> raceNames) {
this.fleet = fleet;
this.raceNames = raceNames;
}
@Override
public Iterable<String> getRaceNames() {
return raceNames;
}
@Override
public String getName() {
return fleet.getName();
}
@Override
public int compareTo(Fleet otherFleet) {
return fleet.compareTo(otherFleet);
}
@Override
public int getOrdering() {
return fleet.getOrdering();
}
@Override
public Color getColor() {
return fleet.getColor();
}
}
@@ -1,46 +0,0 @@
package com.sap.sailing.domain.base.impl;
import com.sap.sailing.domain.base.Fleet;
import com.sap.sailing.domain.base.FleetWithRaces;
import com.sap.sailing.domain.base.RaceDefinition;
import com.sap.sailing.domain.common.Color;
public class FleetWithRacesImpl implements FleetWithRaces {
private static final long serialVersionUID = -7686050535458112702L;
private Fleet fleet;
private Iterable<RaceDefinition> raceDefinitions;
public FleetWithRacesImpl(
Fleet fleet,
Iterable<RaceDefinition> raceDefinitions) {
this.fleet = fleet;
this.raceDefinitions = raceDefinitions;
}
@Override
public Iterable<RaceDefinition> getRaceDefinitions() {
return raceDefinitions;
}
@Override
public String getName() {
return fleet.getName();
}
@Override
public int compareTo(Fleet otherFleet) {
return fleet.compareTo(otherFleet);
}
@Override
public int getOrdering() {
return fleet.getOrdering();
}
@Override
public Color getColor() {
return fleet.getColor();
}
}
@@ -0,0 +1,22 @@
package com.sap.sailing.domain.base.impl;
import com.sap.sailing.domain.base.RaceCell;
import com.sap.sailing.domain.common.impl.NamedImpl;
import com.sap.sailing.domain.racelog.RaceLog;
public class RaceCellImpl extends NamedImpl implements RaceCell {
private static final long serialVersionUID = 971598420407273594L;
private RaceLog raceLog;
public RaceCellImpl(String name, RaceLog raceLog) {
super(name);
this.raceLog = raceLog;
}
@Override
public RaceLog getRaceLog() {
return raceLog;
}
}
@@ -1,38 +0,0 @@
package com.sap.sailing.domain.base.impl;
import com.sap.sailing.domain.base.CourseArea;
import com.sap.sailing.domain.base.RaceGroup;
import com.sap.sailing.domain.base.SeriesData;
public class RaceGroupImpl implements RaceGroup {
private static final long serialVersionUID = 7760879536339600827L;
private final String name;
private final CourseArea courseArea;
private final Iterable<SeriesData> series;
public RaceGroupImpl(
String name,
CourseArea courseArea,
Iterable<SeriesData> series) {
this.name = name;
this.courseArea = courseArea;
this.series = series;
}
@Override
public String getName() {
return name;
}
@Override
public CourseArea getDefaultCourseArea() {
return courseArea;
}
@Override
public Iterable<SeriesData> getSeries() {
return series;
}
}
@@ -0,0 +1,27 @@
package com.sap.sailing.domain.base.impl;
import com.sap.sailing.domain.base.Fleet;
import com.sap.sailing.domain.base.RaceCell;
import com.sap.sailing.domain.base.RaceRow;
public class RaceRowImpl implements RaceRow {
private Fleet fleet;
private Iterable<RaceCell> races;
public RaceRowImpl(Fleet fleet, Iterable<RaceCell> races) {
this.fleet = fleet;
this.races = races;
}
@Override
public Fleet getFleet() {
return fleet;
}
@Override
public Iterable<RaceCell> getCells() {
return races;
}
}
@@ -1,4 +1,4 @@
package com.sap.sailing.server.gateway.serialization.impl.regatta;
package com.sap.sailing.server.gateway.serialization.impl;
import org.json.simple.JSONObject;
@@ -1,4 +1,4 @@
package com.sap.sailing.server.gateway.serialization.impl.regatta;
package com.sap.sailing.server.gateway.serialization.impl;
import org.json.simple.JSONObject;
@@ -1,21 +1,21 @@
package com.sap.sailing.server.gateway.serialization.impl.regatta;
package com.sap.sailing.server.gateway.serialization.impl;
import org.json.simple.JSONObject;
import com.sap.sailing.domain.base.Series;
import com.sap.sailing.domain.base.SeriesData;
import com.sap.sailing.server.gateway.serialization.ExtendableJsonSerializer;
import com.sap.sailing.server.gateway.serialization.ExtensionJsonSerializer;
public class SeriesJsonSerializer extends ExtendableJsonSerializer<Series> {
public class SeriesDataJsonSerializer extends ExtendableJsonSerializer<SeriesData> {
public static final String FIELD_NAME = "name";
public static final String FIELD_IS_MEDAL = "isMedal";
public SeriesJsonSerializer(ExtensionJsonSerializer<Series, ?> extensionSerializer) {
public SeriesDataJsonSerializer(ExtensionJsonSerializer<SeriesData, ?> extensionSerializer) {
super(extensionSerializer);
}
@Override
protected JSONObject serializeFields(Series object) {
protected JSONObject serializeFields(SeriesData object) {
JSONObject result = new JSONObject();
result.put(FIELD_NAME, object.getName());
@@ -1,33 +0,0 @@
package com.sap.sailing.server.gateway.serialization.impl.leaderboard;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import com.sap.sailing.domain.base.Fleet;
import com.sap.sailing.domain.base.FleetWithRaceNames;
import com.sap.sailing.server.gateway.serialization.JsonSerializer;
public class FleetWithRaceNamesJsonSerializer implements JsonSerializer<FleetWithRaceNames> {
public static final String FIELD_RACES = "races";
private final JsonSerializer<Fleet> fleetSerializer;
public FleetWithRaceNamesJsonSerializer(JsonSerializer<Fleet> fleetSerializer) {
this.fleetSerializer = fleetSerializer;
}
@Override
public JSONObject serialize(FleetWithRaceNames object) {
JSONObject result = fleetSerializer.serialize(object);
JSONArray races = new JSONArray();
for (String raceName : object.getRaceNames()) {
races.add(raceName);
}
result.put(FIELD_RACES, races);
return result;
}
}
@@ -2,20 +2,30 @@ package com.sap.sailing.server.gateway.serialization.impl.leaderboard;
import org.json.simple.JSONObject;
import com.sap.sailing.domain.base.BoatClass;
import com.sap.sailing.domain.base.CourseArea;
import com.sap.sailing.domain.base.Regatta;
import com.sap.sailing.domain.leaderboard.Leaderboard;
import com.sap.sailing.domain.leaderboard.RegattaLeaderboard;
import com.sap.sailing.server.gateway.serialization.ExtendableJsonSerializer;
import com.sap.sailing.server.gateway.serialization.ExtensionJsonSerializer;
import com.sap.sailing.server.gateway.serialization.JsonSerializer;
public class LeaderboardJsonSerializer extends ExtendableJsonSerializer<Leaderboard> {
public static final String FIELD_NAME = "name";
public static final String FIELD_COURSE_AREA = "courseArea";
public static final String FIELD_BOAT_CLASS = "boatClass";
private JsonSerializer<BoatClass> boatClassSerializer;
private JsonSerializer<CourseArea> courseAreaSerializer;
public LeaderboardJsonSerializer(
JsonSerializer<BoatClass> boatClassSerializer,
JsonSerializer<CourseArea> courseAreaSerializer,
ExtensionJsonSerializer<Leaderboard, ?> extensionSerializer) {
super(extensionSerializer);
this.courseAreaSerializer = courseAreaSerializer;
this.boatClassSerializer = boatClassSerializer;
}
@Override
@@ -23,7 +33,17 @@ public class LeaderboardJsonSerializer extends ExtendableJsonSerializer<Leaderbo
JSONObject result = new JSONObject();
result.put(FIELD_NAME, object.getName());
result.put(FIELD_COURSE_AREA, "tdb");
if (object.getDefaultCourseArea() != null) {
result.put(FIELD_COURSE_AREA, courseAreaSerializer.serialize(object.getDefaultCourseArea()));
}
if (object instanceof RegattaLeaderboard) {
Regatta regatta = ((RegattaLeaderboard) object).getRegatta();
if (regatta.getBoatClass() != null) {
result.put(FIELD_BOAT_CLASS, boatClassSerializer.serialize(regatta.getBoatClass()));
}
}
return result;
}
@@ -0,0 +1,29 @@
package com.sap.sailing.server.gateway.serialization.impl.leaderboard;
import org.json.simple.JSONObject;
import com.sap.sailing.domain.base.RaceCell;
import com.sap.sailing.domain.racelog.RaceLog;
import com.sap.sailing.server.gateway.serialization.JsonSerializer;
public class RaceCellJsonSerializer implements JsonSerializer<RaceCell> {
public static final String FIELD_NAME = "name";
public static final String FIELD_RACE_LOG = "raceLog";
private JsonSerializer<RaceLog> logSerializer;
public RaceCellJsonSerializer(JsonSerializer<RaceLog> logSerializer) {
this.logSerializer = logSerializer;
}
@Override
public JSONObject serialize(RaceCell object) {
JSONObject result = new JSONObject();
result.put(FIELD_NAME, object.getName());
result.put(FIELD_RACE_LOG, logSerializer.serialize(object.getRaceLog()));
return result;
}
}
@@ -0,0 +1,39 @@
package com.sap.sailing.server.gateway.serialization.impl.leaderboard;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import com.sap.sailing.domain.base.Fleet;
import com.sap.sailing.domain.base.RaceCell;
import com.sap.sailing.domain.base.RaceRow;
import com.sap.sailing.server.gateway.serialization.JsonSerializer;
public class RaceRowJsonSerializer implements JsonSerializer<RaceRow> {
public static final String FIELD_FLEET = "fleet";
public static final String FIELD_RACE_CELLS = "races";
private JsonSerializer<Fleet> fleetSerializer;
private JsonSerializer<RaceCell> cellSerializer;
public RaceRowJsonSerializer(
JsonSerializer<Fleet> fleetSerializer,
JsonSerializer<RaceCell> cellSerializer) {
this.fleetSerializer = fleetSerializer;
this.cellSerializer = cellSerializer;
}
@Override
public JSONObject serialize(RaceRow object) {
JSONObject result = new JSONObject();
result.put(FIELD_FLEET, fleetSerializer.serialize(object.getFleet()));
JSONArray cells = new JSONArray();
for (RaceCell cell : object.getCells()) {
cells.add(cellSerializer.serialize(cell));
}
result.put(FIELD_RACE_CELLS, cells);
return result;
}
}
@@ -6,18 +6,19 @@ import java.util.Collection;
import org.json.simple.JSONArray;
import com.sap.sailing.domain.base.Fleet;
import com.sap.sailing.domain.base.FleetWithRaceNames;
import com.sap.sailing.domain.base.RaceCell;
import com.sap.sailing.domain.base.RaceColumn;
import com.sap.sailing.domain.base.Series;
import com.sap.sailing.domain.base.impl.FleetWithRaceNamesImpl;
import com.sap.sailing.domain.base.RaceRow;
import com.sap.sailing.domain.base.SeriesData;
import com.sap.sailing.domain.base.impl.RaceCellImpl;
import com.sap.sailing.domain.base.impl.RaceRowImpl;
import com.sap.sailing.server.gateway.serialization.ExtensionJsonSerializer;
import com.sap.sailing.server.gateway.serialization.JsonSerializer;
public class FleetWithRaceNamesOfSeriesExtensionSerializer extends ExtensionJsonSerializer<Series, FleetWithRaceNames> {
public class RaceRowsOfSeriesDataExtensionSerializer extends ExtensionJsonSerializer<SeriesData, RaceRow> {
public static final String FIELD_FLEETS = "fleets";
public FleetWithRaceNamesOfSeriesExtensionSerializer(
JsonSerializer<FleetWithRaceNames> extensionSerializer) {
public RaceRowsOfSeriesDataExtensionSerializer(JsonSerializer<RaceRow> extensionSerializer) {
super(extensionSerializer);
}
@@ -27,15 +28,15 @@ public class FleetWithRaceNamesOfSeriesExtensionSerializer extends ExtensionJson
}
@Override
public Object serializeExtension(Series parent) {
public Object serializeExtension(SeriesData parent) {
JSONArray result = new JSONArray();
for (Fleet fleet : parent.getFleets()) {
Collection<String> raceNames = new ArrayList<String>();
Collection<RaceCell> raceCells = new ArrayList<RaceCell>();
for (RaceColumn column : parent.getRaceColumns()) {
raceNames.add(column.getName());
raceCells.add(new RaceCellImpl(column.getName(), null)); /// TODO: get racelog from column
}
result.add(serialize(new FleetWithRaceNamesImpl(fleet, raceNames)));
result.add(serialize(new RaceRowImpl(fleet, raceCells)));
}
return result;
@@ -12,17 +12,18 @@ import com.sap.sailing.domain.base.Fleet;
import com.sap.sailing.domain.base.RaceColumn;
import com.sap.sailing.domain.base.RaceColumnInSeries;
import com.sap.sailing.domain.base.Series;
import com.sap.sailing.domain.base.SeriesData;
import com.sap.sailing.domain.base.impl.FleetImpl;
import com.sap.sailing.domain.base.impl.SeriesImpl;
import com.sap.sailing.domain.leaderboard.Leaderboard;
import com.sap.sailing.server.gateway.serialization.ExtensionJsonSerializer;
import com.sap.sailing.server.gateway.serialization.JsonSerializer;
public class SeriesOfLeaderboardExtensionSerializer extends ExtensionJsonSerializer<Leaderboard, Series> {
public class SeriesDataOfLeaderboardExtensionSerializer extends ExtensionJsonSerializer<Leaderboard, SeriesData> {
public static final String FIELD_SERIES = "series";
public SeriesOfLeaderboardExtensionSerializer(JsonSerializer<Series> extensionSerializer) {
public SeriesDataOfLeaderboardExtensionSerializer(JsonSerializer<SeriesData> extensionSerializer) {
super(extensionSerializer);
}
@@ -34,22 +35,22 @@ public class SeriesOfLeaderboardExtensionSerializer extends ExtensionJsonSeriali
@Override
public Object serializeExtension(Leaderboard parent) {
Map<Series, List<RaceColumn>> seriesToRaceColumns = new HashMap<Series, List<RaceColumn>>();
Series defaultSeries = new SeriesImpl(
"Default Series",
false,
Collections.<Fleet>singleton(new FleetImpl("Default Fleet")),
Collections.<String>emptyList(),
null);
seriesToRaceColumns.put(defaultSeries, Collections.<RaceColumn>emptyList());
for (RaceColumn raceColumn : parent.getRaceColumns()) {
Series defaultSeries = null;
for (RaceColumn raceColumn : parent.getRaceColumns()) {
if (raceColumn instanceof RaceColumnInSeries) {
RaceColumnInSeries raceColumnInSeries = (RaceColumnInSeries) raceColumn;
if (!seriesToRaceColumns.containsKey(raceColumnInSeries.getSeries())) {
seriesToRaceColumns.put(raceColumnInSeries.getSeries(), new ArrayList<RaceColumn>());
}
seriesToRaceColumns.get(raceColumnInSeries.getSeries()).add(raceColumnInSeries);
insertSeriesIfNew(seriesToRaceColumns, raceColumnInSeries.getSeries()).add(raceColumnInSeries);
} else {
if (defaultSeries == null) {
defaultSeries = new SeriesImpl(
"Default Series",
false,
Collections.<Fleet>singleton(new FleetImpl("Default Fleet")),
Collections.<String>emptyList(),
null);
insertSeriesIfNew(seriesToRaceColumns, defaultSeries);
}
seriesToRaceColumns.get(defaultSeries).add(raceColumn);
}
}
@@ -61,4 +62,11 @@ public class SeriesOfLeaderboardExtensionSerializer extends ExtensionJsonSeriali
return result;
}
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);
}
}
@@ -1,44 +0,0 @@
package com.sap.sailing.server.gateway.serialization.impl.regatta;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import com.sap.sailing.domain.base.Fleet;
import com.sap.sailing.domain.base.FleetWithRaces;
import com.sap.sailing.domain.base.RaceDefinition;
import com.sap.sailing.server.gateway.serialization.JsonSerializer;
import com.sap.sailing.server.gateway.serialization.filter.Filter;
public class FleetWithRacesJsonSerializer implements JsonSerializer<FleetWithRaces> {
public static final String FIELD_RACES = "races";
private final JsonSerializer<Fleet> fleetSerializer;
private final Filter<RaceDefinition> raceDefinitionFilter;
private final JsonSerializer<RaceDefinition> raceDefinitionSerializer;
public FleetWithRacesJsonSerializer(
JsonSerializer<Fleet> fleetSerializer,
Filter<RaceDefinition> raceDefinitionFilter,
JsonSerializer<RaceDefinition> raceDefinitionSerializer) {
this.fleetSerializer = fleetSerializer;
this.raceDefinitionFilter = raceDefinitionFilter;
this.raceDefinitionSerializer = raceDefinitionSerializer;
}
@Override
public JSONObject serialize(FleetWithRaces object) {
JSONObject result = fleetSerializer.serialize(object);
JSONArray races = new JSONArray();
for (RaceDefinition race : object.getRaceDefinitions()) {
if (raceDefinitionFilter.isFiltered(race)) {
races.add(raceDefinitionSerializer.serialize(race));
}
}
result.put(FIELD_RACES, races);
return result;
}
}
@@ -1,50 +0,0 @@
package com.sap.sailing.server.gateway.serialization.impl.regatta;
import java.util.ArrayList;
import java.util.Collection;
import org.json.simple.JSONArray;
import com.sap.sailing.domain.base.Fleet;
import com.sap.sailing.domain.base.FleetWithRaces;
import com.sap.sailing.domain.base.RaceColumnInSeries;
import com.sap.sailing.domain.base.RaceDefinition;
import com.sap.sailing.domain.base.Series;
import com.sap.sailing.domain.base.impl.FleetWithRacesImpl;
import com.sap.sailing.server.gateway.serialization.ExtensionJsonSerializer;
import com.sap.sailing.server.gateway.serialization.JsonSerializer;
public class FleetWithRacesOfSeriesExtensionSerializer extends ExtensionJsonSerializer<Series, FleetWithRaces> {
public static final String FIELD_NAME = "fleets";
public FleetWithRacesOfSeriesExtensionSerializer(JsonSerializer<FleetWithRaces> extensionSerializer) {
super(extensionSerializer);
}
@Override
public String getExtensionFieldName() {
return FIELD_NAME;
}
@Override
public Object serializeExtension(Series object) {
JSONArray result = new JSONArray();
for (Fleet fleet : object.getFleets()) {
Collection<RaceDefinition> races = new ArrayList<RaceDefinition>();
for (RaceColumnInSeries raceColumn : object.getRaceColumns()) {
RaceDefinition race = raceColumn.getRaceDefinition(fleet);
if (race != null) {
System.out.println(race);
races.add(race);
}
}
result.add(serialize(new FleetWithRacesImpl(fleet, races)));
}
return result;
}
}
@@ -8,19 +8,24 @@ import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import com.sap.sailing.domain.base.CourseArea;
import com.sap.sailing.domain.base.Event;
import com.sap.sailing.domain.leaderboard.Leaderboard;
import com.sap.sailing.domain.racelog.RaceLog;
import com.sap.sailing.server.gateway.impl.JsonExportServlet;
import com.sap.sailing.server.gateway.serialization.JsonSerializer;
import com.sap.sailing.server.gateway.serialization.impl.leaderboard.FleetWithRaceNamesJsonSerializer;
import com.sap.sailing.server.gateway.serialization.impl.leaderboard.FleetWithRaceNamesOfSeriesExtensionSerializer;
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.SeriesOfLeaderboardExtensionSerializer;
import com.sap.sailing.server.gateway.serialization.impl.regatta.ColorJsonSerializer;
import com.sap.sailing.server.gateway.serialization.impl.regatta.FleetJsonSerializer;
import com.sap.sailing.server.gateway.serialization.impl.regatta.SeriesJsonSerializer;
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;
public class LeaderboardJsonExportServlet extends JsonExportServlet {
private static final long serialVersionUID = 4510175441769759252L;
@@ -48,7 +53,7 @@ public class LeaderboardJsonExportServlet extends JsonExportServlet {
JSONArray result = new JSONArray();
for (Leaderboard leaderboard : getService().getLeaderboards().values()) {
if (leaderboard.getDefaultCourseArea().equals(filterCourseArea)) {
if (filterCourseArea.equals(leaderboard.getDefaultCourseArea())) {
result.add(serializer.serialize(leaderboard));
}
}
@@ -80,13 +85,26 @@ public class LeaderboardJsonExportServlet extends JsonExportServlet {
private static JsonSerializer<Leaderboard> createSerializer() {
return new LeaderboardJsonSerializer(
new SeriesOfLeaderboardExtensionSerializer(
new SeriesJsonSerializer(
new FleetWithRaceNamesOfSeriesExtensionSerializer(
new FleetWithRaceNamesJsonSerializer(
new FleetJsonSerializer(
new ColorJsonSerializer()))))));
new BoatClassJsonSerializer(),
new CourseAreaJsonSerializer(),
new SeriesDataOfLeaderboardExtensionSerializer(
new SeriesDataJsonSerializer(
new RaceRowsOfSeriesDataExtensionSerializer(
new RaceRowJsonSerializer(
new FleetJsonSerializer(
new ColorJsonSerializer()),
new RaceCellJsonSerializer(createRaceLogSerializer()))))));
}
/// TODO: replace with real racelog serializer
private static JsonSerializer<RaceLog> createRaceLogSerializer() {
return new JsonSerializer<RaceLog>() {
@Override
public JSONObject serialize(RaceLog object) {
return new JSONObject();
}
};
}
}
@@ -1,46 +1,38 @@
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.handlers.RaceLogsDataHandler;
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;
import com.sap.sailing.racecommittee.app.data.parsers.ManagedRacesDataParser;
import com.sap.sailing.racecommittee.app.data.parsers.RaceLogsDataParser;
import com.sap.sailing.racecommittee.app.deserialization.impl.ColorDeserializer;
import com.sap.sailing.racecommittee.app.deserialization.impl.CourseAreaJsonDeserializer;
import com.sap.sailing.racecommittee.app.deserialization.impl.EventJsonDeserializer;
import com.sap.sailing.racecommittee.app.deserialization.impl.FleetDeserializer;
import com.sap.sailing.racecommittee.app.deserialization.impl.RaceCellDeserializer;
import com.sap.sailing.racecommittee.app.deserialization.impl.RaceGroupDeserializer;
import com.sap.sailing.racecommittee.app.deserialization.impl.RaceLogDeserializer;
import com.sap.sailing.racecommittee.app.deserialization.impl.RaceRowDeserializer;
import com.sap.sailing.racecommittee.app.deserialization.impl.SeriesWithRowsDeserializer;
import com.sap.sailing.racecommittee.app.deserialization.impl.VenueJsonDeserializer;
import com.sap.sailing.racecommittee.app.domain.ManagedRace;
import com.sap.sailing.racecommittee.app.domain.deserialization.impl.ColorDeserializer;
import com.sap.sailing.racecommittee.app.domain.deserialization.impl.CourseAreaJsonDeserializer;
import com.sap.sailing.racecommittee.app.domain.deserialization.impl.EventJsonDeserializer;
import com.sap.sailing.racecommittee.app.domain.deserialization.impl.FleetDeserializer;
import com.sap.sailing.racecommittee.app.domain.deserialization.impl.FleetWithRaceNamesDeserializer;
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();
// private static final String TAG = DataManager.class.getName();
public static ReadonlyDataManager create(Context context) {
return new DataManager(context, InMemoryDataStore.INSTANCE);
@@ -134,10 +126,12 @@ public class DataManager implements ReadonlyDataManager {
//JsonDeserializer<BoatClass> boatClassDeserializer = new BoatClassJsonDeserializer();
DataParser<Collection<ManagedRace>> parser = new ManagedRacesDataParser(
new RaceGroupDeserializer(
new SeriesDataDeserializer(
new FleetWithRaceNamesDeserializer(
new SeriesWithRowsDeserializer(
new RaceRowDeserializer(
new FleetDeserializer(
new ColorDeserializer())))));
new ColorDeserializer()),
new RaceCellDeserializer(
new RaceLogDeserializer())))));
DataHandler<Collection<ManagedRace>> handler = new ManagedRacesDataHandler(this, client);
DataLoader<Collection<ManagedRace>> loader = new DataLoader<Collection<ManagedRace>>(
@@ -149,41 +143,6 @@ public class DataManager implements ReadonlyDataManager {
}
public void loadRaceLogs(
Collection<ManagedRace> data,
LoadClient<Map<ManagedRace, Collection<RaceLogEvent>>> client) {
Collection<Serializable> ids = new ArrayList<Serializable>();
for (ManagedRace race : data) {
if (!dataStore.hasRace(race.getId())) {
ExLog.w(TAG, "Tried to load race log for unknown race " + race.getId());
continue;
}
ids.add(race.getId());
}
HttpJsonPostRequest request = null;
try {
String value = JSONValue.toJSONString(ids);
ExLog.e(TAG, value);
request = new HttpJsonPostRequest(URI.create(TargetHost + "sailingserver/rc/racelogs"), value);
} catch (UnsupportedEncodingException e) {
ExLog.e(TAG, "Exception while trying to create POST request. Aborting:\n" + e);
return;
}
DataParser<Map<ManagedRace, Collection<RaceLogEvent>>> parser = new RaceLogsDataParser();
DataHandler<Map<ManagedRace, Collection<RaceLogEvent>>> handler = new RaceLogsDataHandler(this, client);
DataLoader<Map<ManagedRace, Collection<RaceLogEvent>>> loader =
new DataLoader<Map<ManagedRace,Collection<RaceLogEvent>>>(
context,
request,
parser,
handler);
loader.forceLoad();
}
private static final String TargetHost = "http://192.168.178.22:8888";
@@ -2,11 +2,9 @@ package com.sap.sailing.racecommittee.app.data;
import java.io.Serializable;
import java.util.Collection;
import java.util.Map;
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.domain.ManagedRace;
@@ -19,8 +17,4 @@ public interface ReadonlyDataManager {
public void loadRaces(Serializable courseAreaId, LoadClient<Collection<ManagedRace>> client);
public void loadRaceLogs(
Collection<ManagedRace> data,
LoadClient<Map<ManagedRace, Collection<RaceLogEvent>>> client);
}
@@ -9,20 +9,20 @@ import org.json.simple.JSONObject;
import org.json.simple.JSONValue;
import com.sap.sailing.domain.base.Fleet;
import com.sap.sailing.domain.base.FleetWithRaceNames;
import com.sap.sailing.domain.base.RaceGroup;
import com.sap.sailing.domain.base.SeriesData;
import com.sap.sailing.domain.base.RaceCell;
import com.sap.sailing.domain.base.RaceRow;
import com.sap.sailing.domain.racelog.RaceLog;
import com.sap.sailing.racecommittee.app.domain.ManagedRace;
import com.sap.sailing.racecommittee.app.domain.ManagedRaceIdentifier;
import com.sap.sailing.racecommittee.app.domain.impl.RaceIdentifierImpl;
import com.sap.sailing.racecommittee.app.domain.RaceGroup;
import com.sap.sailing.racecommittee.app.domain.SeriesWithRows;
import com.sap.sailing.racecommittee.app.domain.impl.FleetIdentifierImpl;
import com.sap.sailing.racecommittee.app.domain.impl.ManagedRaceIdentifierImpl;
import com.sap.sailing.racecommittee.app.domain.impl.ManagedRaceImpl;
import com.sap.sailing.racecommittee.app.logging.ExLog;
import com.sap.sailing.server.gateway.deserialization.JsonDeserializer;
import com.sap.sailing.server.gateway.deserialization.impl.Helpers;
public class ManagedRacesDataParser implements DataParser<Collection<ManagedRace>> {
private static final String TAG = ManagedRacesDataParser.class.getName();
// private static final String TAG = ManagedRacesDataParser.class.getName();
private JsonDeserializer<RaceGroup> deserializer;
@@ -46,35 +46,24 @@ public class ManagedRacesDataParser implements DataParser<Collection<ManagedRace
}
private void addManagedRaces(Collection<ManagedRace> target, RaceGroup raceGroup) {
for (SeriesData series : raceGroup.getSeries()) {
for (Fleet fleet : series.getFleets()) {
if (fleet instanceof FleetWithRaceNames) {
FleetWithRaceNames fleetWithRaceNames = (FleetWithRaceNames) fleet;
for (String raceName : fleetWithRaceNames.getRaceNames()) {
ManagedRace managedRace = createManagedRace(
raceGroup,
series,
fleetWithRaceNames,
raceName);
target.add(managedRace);
}
} else {
ExLog.w(TAG, String.format("Fleet %s had no race information attached.", fleet));
for (SeriesWithRows series : raceGroup.getSeries()) {
for (RaceRow raceRow : series.getRaceRows()) {
Fleet fleet = raceRow.getFleet();
for (RaceCell cell : raceRow.getCells()) {
ManagedRace race = createManagedRace(raceGroup, series, fleet, cell.getName(), cell.getRaceLog());
target.add(race);
}
}
}
}
private ManagedRace createManagedRace(
RaceGroup raceGroup,
SeriesData series,
FleetWithRaceNames fleetWithRaceNames,
String raceName) {
ManagedRaceIdentifier identifier =
new RaceIdentifierImpl(raceName, fleetWithRaceNames, series, raceGroup);
ManagedRace managedRace = new ManagedRaceImpl(identifier);
return managedRace;
private ManagedRace createManagedRace(RaceGroup raceGroup, SeriesWithRows series,
Fleet fleet, String name, RaceLog raceLog) {
return new ManagedRaceImpl(
new ManagedRaceIdentifierImpl(name,
new FleetIdentifierImpl(fleet, series, raceGroup)),
raceLog);
}
}
@@ -1,4 +1,4 @@
package com.sap.sailing.racecommittee.app.domain.deserialization.impl;
package com.sap.sailing.racecommittee.app.deserialization.impl;
import org.json.simple.JSONObject;
@@ -1,4 +1,4 @@
package com.sap.sailing.racecommittee.app.domain.deserialization.impl;
package com.sap.sailing.racecommittee.app.deserialization.impl;
import org.json.simple.JSONObject;
@@ -1,4 +1,4 @@
package com.sap.sailing.racecommittee.app.domain.deserialization.impl;
package com.sap.sailing.racecommittee.app.deserialization.impl;
import org.json.simple.JSONObject;
@@ -1,4 +1,4 @@
package com.sap.sailing.racecommittee.app.domain.deserialization.impl;
package com.sap.sailing.racecommittee.app.deserialization.impl;
import org.json.simple.JSONObject;
@@ -1,4 +1,4 @@
package com.sap.sailing.racecommittee.app.domain.deserialization.impl;
package com.sap.sailing.racecommittee.app.deserialization.impl;
import org.json.simple.JSONObject;
@@ -8,7 +8,7 @@ import com.sap.sailing.domain.common.Color;
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.regatta.FleetJsonSerializer;
import com.sap.sailing.server.gateway.serialization.impl.FleetJsonSerializer;
public class FleetDeserializer implements JsonDeserializer<Fleet> {
@@ -0,0 +1,31 @@
package com.sap.sailing.racecommittee.app.deserialization.impl;
import org.json.simple.JSONObject;
import com.sap.sailing.domain.base.RaceCell;
import com.sap.sailing.domain.base.impl.RaceCellImpl;
import com.sap.sailing.domain.racelog.RaceLog;
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.leaderboard.RaceCellJsonSerializer;
public class RaceCellDeserializer implements JsonDeserializer<RaceCell> {
private JsonDeserializer<RaceLog> logDeserializer;
public RaceCellDeserializer(JsonDeserializer<RaceLog> logDeserializer) {
this.logDeserializer = logDeserializer;
}
public RaceCell deserialize(JSONObject object)
throws JsonDeserializationException {
String name = object.get(RaceCellJsonSerializer.FIELD_NAME).toString();
JSONObject logJson = Helpers.getNestedObjectSafe(object, RaceCellJsonSerializer.FIELD_RACE_LOG);
RaceLog log = logDeserializer.deserialize(logJson);
return new RaceCellImpl(name, log);
}
}
@@ -1,24 +1,24 @@
package com.sap.sailing.racecommittee.app.domain.deserialization.impl;
package com.sap.sailing.racecommittee.app.deserialization.impl;
import java.util.ArrayList;
import java.util.Collection;
import org.json.simple.JSONObject;
import com.sap.sailing.domain.base.RaceGroup;
import com.sap.sailing.domain.base.SeriesData;
import com.sap.sailing.domain.base.impl.RaceGroupImpl;
import com.sap.sailing.racecommittee.app.domain.RaceGroup;
import com.sap.sailing.racecommittee.app.domain.SeriesWithRows;
import com.sap.sailing.racecommittee.app.domain.impl.RaceGroupImpl;
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.leaderboard.LeaderboardJsonSerializer;
import com.sap.sailing.server.gateway.serialization.impl.leaderboard.SeriesOfLeaderboardExtensionSerializer;
import com.sap.sailing.server.gateway.serialization.impl.leaderboard.SeriesDataOfLeaderboardExtensionSerializer;
public class RaceGroupDeserializer implements JsonDeserializer<RaceGroup> {
private JsonDeserializer<SeriesData> seriesDeserializer;
private JsonDeserializer<SeriesWithRows> seriesDeserializer;
public RaceGroupDeserializer(JsonDeserializer<SeriesData> seriesDeserializer) {
public RaceGroupDeserializer(JsonDeserializer<SeriesWithRows> seriesDeserializer) {
this.seriesDeserializer = seriesDeserializer;
}
@@ -28,10 +28,10 @@ public class RaceGroupDeserializer implements JsonDeserializer<RaceGroup> {
// CourseArea ...
Collection<SeriesData> series = new ArrayList<SeriesData>();
Collection<SeriesWithRows> series = new ArrayList<SeriesWithRows>();
for (Object seriesObject : Helpers.getNestedArraySafe(
object,
SeriesOfLeaderboardExtensionSerializer.FIELD_SERIES)) {
SeriesDataOfLeaderboardExtensionSerializer.FIELD_SERIES)) {
JSONObject seriesJson = Helpers.toJSONObjectSafe(seriesObject);
series.add(seriesDeserializer.deserialize(seriesJson));
}
@@ -0,0 +1,17 @@
package com.sap.sailing.racecommittee.app.deserialization.impl;
import org.json.simple.JSONObject;
import com.sap.sailing.domain.racelog.RaceLog;
import com.sap.sailing.server.gateway.deserialization.JsonDeserializationException;
import com.sap.sailing.server.gateway.deserialization.JsonDeserializer;
public class RaceLogDeserializer implements JsonDeserializer<RaceLog> {
public RaceLog deserialize(JSONObject object)
throws JsonDeserializationException {
// TODO Deserialize race log
return null;
}
}
@@ -0,0 +1,44 @@
package com.sap.sailing.racecommittee.app.deserialization.impl;
import java.util.ArrayList;
import java.util.Collection;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import com.sap.sailing.domain.base.Fleet;
import com.sap.sailing.domain.base.RaceCell;
import com.sap.sailing.domain.base.RaceRow;
import com.sap.sailing.domain.base.impl.RaceRowImpl;
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.leaderboard.RaceRowJsonSerializer;
public class RaceRowDeserializer implements JsonDeserializer<RaceRow> {
private JsonDeserializer<Fleet> fleetDeserializer;
private JsonDeserializer<RaceCell> raceCellDeserializer;
public RaceRowDeserializer(JsonDeserializer<Fleet> fleetDeserializer,
JsonDeserializer<RaceCell> 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<RaceCell> races = new ArrayList<RaceCell>();
Fleet fleet = fleetDeserializer.deserialize(fleetObject);
for (Object cellObject : cellsObject) {
JSONObject cellJson = Helpers.toJSONObjectSafe(cellObject);
races.add(raceCellDeserializer.deserialize(cellJson));
}
return new RaceRowImpl(fleet, races);
}
}
@@ -0,0 +1,40 @@
package com.sap.sailing.racecommittee.app.deserialization.impl;
import java.util.ArrayList;
import java.util.Collection;
import org.json.simple.JSONObject;
import com.sap.sailing.domain.base.RaceRow;
import com.sap.sailing.racecommittee.app.domain.SeriesWithRows;
import com.sap.sailing.racecommittee.app.domain.impl.SeriesWithRowsImpl;
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.leaderboard.RaceRowsOfSeriesDataExtensionSerializer;
public class SeriesWithRowsDeserializer implements JsonDeserializer<SeriesWithRows> {
private JsonDeserializer<RaceRow> raceRowDeserializer;
public SeriesWithRowsDeserializer(JsonDeserializer<RaceRow> raceRowDeserializer) {
this.raceRowDeserializer = raceRowDeserializer;
}
public SeriesWithRows deserialize(JSONObject object)
throws JsonDeserializationException {
String name = object.get("name").toString();
boolean isMedal = (Boolean) object.get("isMedal");
Collection<RaceRow> rows = new ArrayList<RaceRow>();
for (Object fleetObject : Helpers.getNestedArraySafe(
object,
RaceRowsOfSeriesDataExtensionSerializer.FIELD_FLEETS)) {
JSONObject fleetJson = Helpers.toJSONObjectSafe(fleetObject);
rows.add(raceRowDeserializer.deserialize(fleetJson));
}
return new SeriesWithRowsImpl(name, rows, isMedal);
}
}
@@ -1,4 +1,4 @@
package com.sap.sailing.racecommittee.app.domain.deserialization.impl;
package com.sap.sailing.racecommittee.app.deserialization.impl;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
@@ -2,13 +2,12 @@ package com.sap.sailing.racecommittee.app.domain;
import java.io.Serializable;
import com.sap.sailing.domain.base.FleetWithRaceNames;
import com.sap.sailing.domain.base.RaceGroup;
import com.sap.sailing.domain.base.Fleet;
import com.sap.sailing.domain.base.SeriesData;
public interface FleetIdentifier {
public FleetWithRaceNames getFleet();
public Fleet getFleet();
public SeriesData getSeries();
@@ -0,0 +1,12 @@
package com.sap.sailing.racecommittee.app.domain;
import com.sap.sailing.domain.base.CourseArea;
import com.sap.sailing.domain.common.Named;
public interface RaceGroup extends Named {
public CourseArea getDefaultCourseArea();
public Iterable<SeriesWithRows> getSeries();
}
@@ -0,0 +1,10 @@
package com.sap.sailing.racecommittee.app.domain;
import com.sap.sailing.domain.base.RaceRow;
import com.sap.sailing.domain.base.SeriesData;
public interface SeriesWithRows extends SeriesData {
public Iterable<RaceRow> getRaceRows();
}
@@ -1,38 +0,0 @@
package com.sap.sailing.racecommittee.app.domain.deserialization.impl;
import java.util.ArrayList;
import java.util.Collection;
import org.json.simple.JSONObject;
import com.sap.sailing.domain.base.Fleet;
import com.sap.sailing.domain.base.FleetWithRaceNames;
import com.sap.sailing.domain.base.impl.FleetWithRaceNamesImpl;
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.leaderboard.FleetWithRaceNamesJsonSerializer;
public class FleetWithRaceNamesDeserializer implements JsonDeserializer<FleetWithRaceNames> {
private JsonDeserializer<Fleet> fleetDeserializer;
public FleetWithRaceNamesDeserializer(
JsonDeserializer<Fleet> fleetDeserializer) {
this.fleetDeserializer = fleetDeserializer;
}
public FleetWithRaceNames deserialize(JSONObject object)
throws JsonDeserializationException {
Fleet fleet = fleetDeserializer.deserialize(object);
Collection<String> raceNames = new ArrayList<String>();
for (Object raceName : Helpers.getNestedArraySafe(
object,
FleetWithRaceNamesJsonSerializer.FIELD_RACES)) {
raceNames.add(raceName.toString());
}
return new FleetWithRaceNamesImpl(fleet, raceNames);
}
}
@@ -1,40 +0,0 @@
package com.sap.sailing.racecommittee.app.domain.deserialization.impl;
import java.util.ArrayList;
import java.util.Collection;
import org.json.simple.JSONObject;
import com.sap.sailing.domain.base.FleetWithRaceNames;
import com.sap.sailing.domain.base.SeriesData;
import com.sap.sailing.racecommittee.app.domain.impl.SeriesDataImpl;
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.leaderboard.FleetWithRaceNamesOfSeriesExtensionSerializer;
public class SeriesDataDeserializer implements JsonDeserializer<SeriesData> {
private JsonDeserializer<FleetWithRaceNames> fleetDeserializer;
public SeriesDataDeserializer(JsonDeserializer<FleetWithRaceNames> fleetDeserializer) {
this.fleetDeserializer = fleetDeserializer;
}
public SeriesData deserialize(JSONObject object)
throws JsonDeserializationException {
String name = object.get("name").toString();
boolean isMedal = (Boolean) object.get("isMedal");
Collection<FleetWithRaceNames> fleets = new ArrayList<FleetWithRaceNames>();
for (Object fleetObject : Helpers.getNestedArraySafe(
object,
FleetWithRaceNamesOfSeriesExtensionSerializer.FIELD_FLEETS)) {
JSONObject fleetJson = Helpers.toJSONObjectSafe(fleetObject);
fleets.add(fleetDeserializer.deserialize(fleetJson));
}
return new SeriesDataImpl(name, fleets, isMedal);
}
}
@@ -2,28 +2,28 @@ package com.sap.sailing.racecommittee.app.domain.impl;
import java.io.Serializable;
import com.sap.sailing.domain.base.FleetWithRaceNames;
import com.sap.sailing.domain.base.RaceGroup;
import com.sap.sailing.domain.base.Fleet;
import com.sap.sailing.domain.base.SeriesData;
import com.sap.sailing.racecommittee.app.domain.FleetIdentifier;
import com.sap.sailing.racecommittee.app.domain.RaceGroup;
public class FleetIdentifierImpl implements FleetIdentifier {
private FleetWithRaceNames fleetWithRaceNames;
private Fleet fleet;
private SeriesData series;
private RaceGroup raceGroup;
public FleetIdentifierImpl(
FleetWithRaceNames fleetWithRaceNames,
Fleet fleet,
SeriesData series,
RaceGroup raceGroup) {
this.fleetWithRaceNames = fleetWithRaceNames;
this.fleet = fleet;
this.series = series;
this.raceGroup = raceGroup;
}
public FleetWithRaceNames getFleet() {
return fleetWithRaceNames;
public Fleet getFleet() {
return fleet;
}
public SeriesData getSeries() {
@@ -2,26 +2,26 @@ package com.sap.sailing.racecommittee.app.domain.impl;
import java.io.Serializable;
import com.sap.sailing.domain.base.FleetWithRaceNames;
import com.sap.sailing.domain.base.RaceGroup;
import com.sap.sailing.domain.base.Fleet;
import com.sap.sailing.domain.base.SeriesData;
import com.sap.sailing.racecommittee.app.domain.FleetIdentifier;
import com.sap.sailing.racecommittee.app.domain.ManagedRaceIdentifier;
import com.sap.sailing.racecommittee.app.domain.RaceGroup;
public class RaceIdentifierImpl extends FleetIdentifierImpl implements ManagedRaceIdentifier {
public class ManagedRaceIdentifierImpl extends FleetIdentifierImpl implements ManagedRaceIdentifier {
private String raceName;
public RaceIdentifierImpl(
public ManagedRaceIdentifierImpl(
String raceName,
FleetWithRaceNames fleetWithRaceNames,
Fleet fleetWithRaceNames,
SeriesData series,
RaceGroup raceGroup) {
super(fleetWithRaceNames, series, raceGroup);
this.raceName = raceName;
}
public RaceIdentifierImpl(String raceName, FleetIdentifier identifier) {
public ManagedRaceIdentifierImpl(String raceName, FleetIdentifier identifier) {
this(raceName, identifier.getFleet(), identifier.getSeries(), identifier.getRaceGroup());
}
@@ -2,11 +2,12 @@ package com.sap.sailing.racecommittee.app.domain.impl;
import java.io.Serializable;
import com.sap.sailing.domain.base.FleetWithRaceNames;
import com.sap.sailing.domain.base.RaceGroup;
import com.sap.sailing.domain.base.Fleet;
import com.sap.sailing.domain.base.SeriesData;
import com.sap.sailing.domain.racelog.RaceLog;
import com.sap.sailing.racecommittee.app.domain.ManagedRace;
import com.sap.sailing.racecommittee.app.domain.ManagedRaceIdentifier;
import com.sap.sailing.racecommittee.app.domain.RaceGroup;
import com.sap.sailing.racecommittee.app.domain.RaceStatus;
public class ManagedRaceImpl implements ManagedRace {
@@ -16,7 +17,7 @@ public class ManagedRaceImpl implements ManagedRace {
private ManagedRaceIdentifier identifier;
public ManagedRaceImpl(ManagedRaceIdentifier identifier) {
public ManagedRaceImpl(ManagedRaceIdentifier identifier, RaceLog raceLog) {
this.identifier = identifier;
}
@@ -32,7 +33,7 @@ public class ManagedRaceImpl implements ManagedRace {
return getName();
}
public FleetWithRaceNames getFleet() {
public Fleet getFleet() {
return identifier.getFleet();
}
@@ -0,0 +1,32 @@
package com.sap.sailing.racecommittee.app.domain.impl;
import com.sap.sailing.domain.base.CourseArea;
import com.sap.sailing.domain.common.impl.NamedImpl;
import com.sap.sailing.racecommittee.app.domain.RaceGroup;
import com.sap.sailing.racecommittee.app.domain.SeriesWithRows;
public class RaceGroupImpl extends NamedImpl implements RaceGroup {
private static final long serialVersionUID = 7760879536339600827L;
private final CourseArea courseArea;
private final Iterable<SeriesWithRows> series;
public RaceGroupImpl(
String name,
CourseArea courseArea,
Iterable<SeriesWithRows> series) {
super(name);
this.courseArea = courseArea;
this.series = series;
}
public CourseArea getDefaultCourseArea() {
return courseArea;
}
public Iterable<SeriesWithRows> getSeries() {
return series;
}
}
@@ -1,31 +0,0 @@
package com.sap.sailing.racecommittee.app.domain.impl;
import com.sap.sailing.domain.base.Fleet;
import com.sap.sailing.domain.base.SeriesData;
public class SeriesDataImpl implements SeriesData {
private static final long serialVersionUID = 8825402393444809944L;
private String name;
private Iterable<? extends Fleet> fleets;
private boolean isMedal;
public SeriesDataImpl(String name, Iterable<? extends Fleet> fleets, boolean isMedal) {
this.name = name;
this.fleets = fleets;
this.isMedal = isMedal;
}
public String getName() {
return name;
}
public Iterable<? extends Fleet> getFleets() {
return fleets;
}
public boolean isMedal() {
return isMedal;
}
}
@@ -0,0 +1,48 @@
package com.sap.sailing.racecommittee.app.domain.impl;
import java.util.ArrayList;
import java.util.Collection;
import com.sap.sailing.domain.base.Fleet;
import com.sap.sailing.domain.base.RaceColumnInSeries;
import com.sap.sailing.domain.base.RaceRow;
import com.sap.sailing.racecommittee.app.domain.SeriesWithRows;
public class SeriesWithRowsImpl implements SeriesWithRows {
private static final long serialVersionUID = 8825402393444809944L;
private String name;
private Iterable<RaceRow> raceRows;
private boolean isMedal;
public SeriesWithRowsImpl(String name, Iterable<RaceRow> raceRows, boolean isMedal) {
this.name = name;
this.raceRows = raceRows;
this.isMedal = isMedal;
}
public String getName() {
return name;
}
public boolean isMedal() {
return isMedal;
}
public Iterable<RaceRow> getRaceRows() {
return raceRows;
}
public Iterable<? extends Fleet> getFleets() {
Collection<Fleet> fleets = new ArrayList<Fleet>();
for (RaceRow row : raceRows) {
fleets.add(row.getFleet());
}
return fleets;
}
public Iterable<? extends RaceColumnInSeries> getRaceColumns() {
return null;
}
}
@@ -2,7 +2,6 @@ package com.sap.sailing.racecommittee.app.ui.activities;
import java.io.Serializable;
import java.util.Collection;
import java.util.Map;
import android.app.AlertDialog;
import android.app.FragmentTransaction;
@@ -15,14 +14,12 @@ import android.widget.TextView;
import android.widget.Toast;
import com.sap.sailing.domain.base.CourseArea;
import com.sap.sailing.domain.racelog.RaceLogEvent;
import com.sap.sailing.racecommittee.app.AppConstants;
import com.sap.sailing.racecommittee.app.R;
import com.sap.sailing.racecommittee.app.data.DataManager;
import com.sap.sailing.racecommittee.app.data.ReadonlyDataManager;
import com.sap.sailing.racecommittee.app.data.clients.LoadClient;
import com.sap.sailing.racecommittee.app.domain.ManagedRace;
import com.sap.sailing.racecommittee.app.logging.ExLog;
import com.sap.sailing.racecommittee.app.ui.fragments.list.ManagedRaceListFragment;
public class RacingActivity extends TwoPaneActivity /*implements ResetTimeListener,
@@ -122,17 +119,6 @@ StartModeSelectionListener, PathfinderSelectionListener, GateLineOpeningTimeSele
private void onLoadRacesSucceded(Serializable courseAreaId, Collection<ManagedRace> data) {
setProgressBarIndeterminateVisibility(false);
dataManager.loadRaceLogs(data, new LoadClient<Map<ManagedRace,Collection<RaceLogEvent>>>() {
public void onLoadSucceded(Map<ManagedRace, Collection<RaceLogEvent>> data) {
Toast.makeText(RacingActivity.this, "OKOKOKOK", Toast.LENGTH_LONG).show();
}
public void onLoadFailed(Exception reason) {
ExLog.w(TAG, "Loading of race logs failed:\n" + reason.toString());
}
});
registerOnService(data);
listFragment.setupOn(data);