mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-11-15 06:49:56 +00:00
# reworked serialization to use Leaderboards rather than Regatta.getRaces...
# deserialization of all relevant types on app side
This commit is contained in:
1 parent
0d67d37adc
commit
339f930a83
42 files changed
+851
-236
No files matched your search
@@ -0,0 +1,8 @@
|
||||
package com.sap.sailing.domain.base;
|
||||
|
||||
|
||||
public interface FleetWithRaceNames extends Fleet {
|
||||
|
||||
public Iterable<String> getRaceNames();
|
||||
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
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();
|
||||
|
||||
}
|
||||
+1
-4
@@ -1,6 +1,5 @@
|
||||
package com.sap.sailing.racecommittee.app.domain;
|
||||
package com.sap.sailing.domain.base;
|
||||
|
||||
import com.sap.sailing.domain.base.Fleet;
|
||||
import com.sap.sailing.domain.common.Named;
|
||||
|
||||
public interface SeriesData extends Named {
|
||||
@@ -15,6 +14,4 @@ public interface SeriesData extends Named {
|
||||
* on the scoring scheme (usually, medal races scores are doubled and cannot be discarded).
|
||||
*/
|
||||
boolean isMedal();
|
||||
|
||||
Integer getOrderNumber();
|
||||
}
|
||||
+45
@@ -0,0 +1,45 @@
|
||||
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();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,38 @@
|
||||
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;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -13,6 +13,7 @@ Export-Package: com.sap.sailing.server.gateway.deserialization,
|
||||
com.sap.sailing.server.gateway.serialization,
|
||||
com.sap.sailing.server.gateway.serialization.filter,
|
||||
com.sap.sailing.server.gateway.serialization.impl,
|
||||
com.sap.sailing.server.gateway.serialization.impl.leaderboard,
|
||||
com.sap.sailing.server.gateway.serialization.impl.race,
|
||||
com.sap.sailing.server.gateway.serialization.impl.racelog,
|
||||
com.sap.sailing.server.gateway.serialization.impl.regatta
|
||||
+18
@@ -0,0 +1,18 @@
|
||||
package com.sap.sailing.server.gateway.deserialization.impl;
|
||||
|
||||
import org.json.simple.JSONObject;
|
||||
|
||||
import com.sap.sailing.domain.base.Competitor;
|
||||
import com.sap.sailing.server.gateway.deserialization.JsonDeserializationException;
|
||||
import com.sap.sailing.server.gateway.deserialization.JsonDeserializer;
|
||||
|
||||
public class CompetitorDeserializer implements JsonDeserializer<Competitor> {
|
||||
|
||||
@Override
|
||||
public Competitor deserialize(JSONObject object)
|
||||
throws JsonDeserializationException {
|
||||
// TODO Auto-generated method stub
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
+33
@@ -0,0 +1,33 @@
|
||||
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;
|
||||
}
|
||||
|
||||
}
|
||||
+43
@@ -0,0 +1,43 @@
|
||||
package com.sap.sailing.server.gateway.serialization.impl.leaderboard;
|
||||
|
||||
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.FleetWithRaceNames;
|
||||
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.server.gateway.serialization.ExtensionJsonSerializer;
|
||||
import com.sap.sailing.server.gateway.serialization.JsonSerializer;
|
||||
|
||||
public class FleetWithRaceNamesOfSeriesExtensionSerializer extends ExtensionJsonSerializer<Series, FleetWithRaceNames> {
|
||||
|
||||
public FleetWithRaceNamesOfSeriesExtensionSerializer(
|
||||
JsonSerializer<FleetWithRaceNames> extensionSerializer) {
|
||||
super(extensionSerializer);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getExtensionFieldName() {
|
||||
return "fleets";
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object serializeExtension(Series parent) {
|
||||
JSONArray result = new JSONArray();
|
||||
|
||||
for (Fleet fleet : parent.getFleets()) {
|
||||
Collection<String> raceNames = new ArrayList<String>();
|
||||
for (RaceColumn column : parent.getRaceColumns()) {
|
||||
raceNames.add(column.getName());
|
||||
}
|
||||
result.add(serialize(new FleetWithRaceNamesImpl(fleet, raceNames)));
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
}
|
||||
+29
@@ -0,0 +1,29 @@
|
||||
package com.sap.sailing.server.gateway.serialization.impl.leaderboard;
|
||||
|
||||
import org.json.simple.JSONObject;
|
||||
|
||||
import com.sap.sailing.domain.leaderboard.Leaderboard;
|
||||
import com.sap.sailing.server.gateway.serialization.ExtendableJsonSerializer;
|
||||
import com.sap.sailing.server.gateway.serialization.ExtensionJsonSerializer;
|
||||
|
||||
|
||||
|
||||
public class LeaderboardJsonSerializer extends ExtendableJsonSerializer<Leaderboard> {
|
||||
|
||||
public LeaderboardJsonSerializer(
|
||||
ExtensionJsonSerializer<Leaderboard, ?> extensionSerializer) {
|
||||
super(extensionSerializer);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected JSONObject serializeFields(Leaderboard object) {
|
||||
JSONObject result = new JSONObject();
|
||||
|
||||
result.put("name", object.getName());
|
||||
result.put("courseArea", "tdb");
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
+62
@@ -0,0 +1,62 @@
|
||||
package com.sap.sailing.server.gateway.serialization.impl.leaderboard;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import org.json.simple.JSONArray;
|
||||
|
||||
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.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 SeriesOfLeaderboardExtensionSerializer(JsonSerializer<Series> extensionSerializer) {
|
||||
super(extensionSerializer);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getExtensionFieldName() {
|
||||
return "series";
|
||||
}
|
||||
|
||||
@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()) {
|
||||
|
||||
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);
|
||||
} else {
|
||||
seriesToRaceColumns.get(defaultSeries).add(raceColumn);
|
||||
}
|
||||
}
|
||||
|
||||
JSONArray result = new JSONArray();
|
||||
for (Series series : seriesToRaceColumns.keySet()) {
|
||||
result.add(serialize(series));
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
}
|
||||
@@ -16,6 +16,15 @@
|
||||
|
||||
<!-- RACE COMMITTEE START -->
|
||||
|
||||
<servlet>
|
||||
<servlet-name>RCLeaderboards</servlet-name>
|
||||
<servlet-class>com.sap.sailing.server.gateway.impl.rc.LeaderboardJsonExportServlet</servlet-class>
|
||||
</servlet>
|
||||
<servlet-mapping>
|
||||
<servlet-name>RCLeaderboards</servlet-name>
|
||||
<url-pattern>/rc/leaderboards</url-pattern>
|
||||
</servlet-mapping>
|
||||
|
||||
<servlet>
|
||||
<servlet-name>RCRegattas</servlet-name>
|
||||
<servlet-class>com.sap.sailing.server.gateway.impl.rc.RegattasJsonExportServlet</servlet-class>
|
||||
|
||||
+58
@@ -0,0 +1,58 @@
|
||||
package com.sap.sailing.server.gateway.impl.rc;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
import javax.servlet.ServletException;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
|
||||
import org.json.simple.JSONArray;
|
||||
|
||||
import com.sap.sailing.domain.leaderboard.Leaderboard;
|
||||
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.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;
|
||||
|
||||
public class LeaderboardJsonExportServlet extends JsonExportServlet {
|
||||
private static final long serialVersionUID = 4510175441769759252L;
|
||||
|
||||
private static final String PARAM_COURSE_AREA_FILTER = "courseArea";
|
||||
|
||||
@Override
|
||||
protected void doGet(HttpServletRequest request, HttpServletResponse response)
|
||||
throws ServletException, IOException {
|
||||
|
||||
String courseAreaFilter = request.getParameter(PARAM_COURSE_AREA_FILTER);
|
||||
if (courseAreaFilter != null) {
|
||||
System.out.println("Filter by course area: " + courseAreaFilter);
|
||||
}
|
||||
/// TODO: implement course are filtering
|
||||
|
||||
JsonSerializer<Leaderboard> serializer = createSerializer();
|
||||
JSONArray result = new JSONArray();
|
||||
for (Leaderboard leaderboard : getService().getLeaderboards().values()) {
|
||||
|
||||
result.add(serializer.serialize(leaderboard));
|
||||
}
|
||||
|
||||
result.writeJSONString(response.getWriter());
|
||||
}
|
||||
|
||||
private static JsonSerializer<Leaderboard> createSerializer() {
|
||||
return new LeaderboardJsonSerializer(
|
||||
new SeriesOfLeaderboardExtensionSerializer(
|
||||
new SeriesJsonSerializer(
|
||||
new FleetWithRaceNamesOfSeriesExtensionSerializer(
|
||||
new FleetWithRaceNamesJsonSerializer(
|
||||
new FleetJsonSerializer(
|
||||
new ColorJsonSerializer()))))));
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
-1
@@ -92,7 +92,6 @@ public class RegattasJsonExportServlet extends JsonExportServlet {
|
||||
}
|
||||
|
||||
private Filter<RaceDefinition> createFilter(final String courseAreaId) {
|
||||
|
||||
return new Filter<RaceDefinition>() {
|
||||
@Override
|
||||
public boolean isFiltered(RaceDefinition race) {
|
||||
|
||||
+16
-15
@@ -6,7 +6,6 @@ import java.util.Collection;
|
||||
|
||||
import android.content.Context;
|
||||
|
||||
import com.sap.sailing.domain.base.BoatClass;
|
||||
import com.sap.sailing.domain.base.CourseArea;
|
||||
import com.sap.sailing.domain.base.Event;
|
||||
import com.sap.sailing.racecommittee.app.data.clients.LoadClient;
|
||||
@@ -17,14 +16,15 @@ 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.domain.deserialization.RaceDefinitionJsonDeserializer;
|
||||
import com.sap.sailing.racecommittee.app.domain.deserialization.RegattaJsonDeserializer;
|
||||
import com.sap.sailing.racecommittee.app.domain.ManagedRace;
|
||||
import com.sap.sailing.server.gateway.deserialization.JsonDeserializer;
|
||||
import com.sap.sailing.server.gateway.deserialization.impl.BoatClassJsonDeserializer;
|
||||
import com.sap.sailing.server.gateway.deserialization.impl.CourseAreaJsonDeserializer;
|
||||
import com.sap.sailing.server.gateway.deserialization.impl.EventJsonDeserializer;
|
||||
import com.sap.sailing.server.gateway.deserialization.impl.VenueJsonDeserializer;
|
||||
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;
|
||||
|
||||
/**
|
||||
* Enables accessing of data.
|
||||
@@ -105,17 +105,18 @@ public class DataManager implements ReadonlyDataManager {
|
||||
return;
|
||||
}
|
||||
|
||||
JsonDeserializer<BoatClass> boatClassDeserializer = new BoatClassJsonDeserializer();
|
||||
DataParser<Collection<ManagedRace>> parser = new ManagedRacesDataParser(
|
||||
new RegattaJsonDeserializer(
|
||||
boatClassDeserializer,
|
||||
new RaceDefinitionJsonDeserializer(
|
||||
boatClassDeserializer)));
|
||||
//JsonDeserializer<BoatClass> boatClassDeserializer = new BoatClassJsonDeserializer();
|
||||
DataParser<Collection<ManagedRace>> parser = new ManagedRacesDataParser(
|
||||
new RaceGroupDeserializer(
|
||||
new SeriesDataDeserializer(
|
||||
new FleetWithRaceNamesDeserializer(
|
||||
new FleetDeserializer(
|
||||
new ColorDeserializer())))));
|
||||
DataHandler<Collection<ManagedRace>> handler = new ManagedRacesDataHandler(this, client);
|
||||
|
||||
DataLoader<Collection<ManagedRace>> loader = new DataLoader<Collection<ManagedRace>>(
|
||||
context,
|
||||
URI.create("http://192.168.178.22:8888/sailingserver/rc/regattas?courseArea=" + courseAreaId.toString()),
|
||||
URI.create("http://192.168.178.22:8888/sailingserver/rc/leaderboards?courseArea=" + courseAreaId.toString()),
|
||||
parser,
|
||||
handler);
|
||||
loader.forceLoad();
|
||||
|
||||
+7
@@ -1,8 +1,11 @@
|
||||
package com.sap.sailing.racecommittee.app.data.handlers;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.UUID;
|
||||
|
||||
import com.sap.sailing.domain.base.Event;
|
||||
import com.sap.sailing.domain.base.impl.CourseAreaImpl;
|
||||
import com.sap.sailing.domain.base.impl.EventImpl;
|
||||
import com.sap.sailing.racecommittee.app.data.DataManager;
|
||||
import com.sap.sailing.racecommittee.app.data.clients.LoadClient;
|
||||
|
||||
@@ -14,6 +17,10 @@ public class EventsDataHandler extends DataHandler<Collection<Event>> {
|
||||
|
||||
@Override
|
||||
public void onLoaded(Collection<Event> data) {
|
||||
Event testEvet = new EventImpl("Test Event", "Berlin", "http://example.com", true, UUID.randomUUID());
|
||||
testEvet.getVenue().addCourseArea(new CourseAreaImpl("Test Area", UUID.randomUUID()));
|
||||
data.add(testEvet);
|
||||
|
||||
super.onLoaded(data);
|
||||
manager.addEvents(data);
|
||||
}
|
||||
|
||||
+43
-24
@@ -3,29 +3,31 @@ package com.sap.sailing.racecommittee.app.data.parsers;
|
||||
import java.io.Reader;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
|
||||
import org.json.simple.JSONArray;
|
||||
import org.json.simple.JSONObject;
|
||||
import org.json.simple.JSONValue;
|
||||
|
||||
import com.sap.sailing.domain.base.Fleet;
|
||||
import com.sap.sailing.domain.base.RaceDefinition;
|
||||
import com.sap.sailing.domain.base.Regatta;
|
||||
import com.sap.sailing.domain.base.impl.FleetImpl;
|
||||
import com.sap.sailing.domain.common.impl.Util;
|
||||
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.racecommittee.app.domain.ManagedRace;
|
||||
import com.sap.sailing.racecommittee.app.domain.ManagedRaceIdentifier;
|
||||
import com.sap.sailing.racecommittee.app.domain.impl.ManagedRaceIdentifierImpl;
|
||||
import com.sap.sailing.racecommittee.app.domain.impl.ManagedRaceImpl;
|
||||
import com.sap.sailing.racecommittee.app.domain.impl.SeriesDataImpl;
|
||||
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 JsonDeserializer<Regatta> regattaDeserializer;
|
||||
private static final String TAG = ManagedRacesDataParser.class.getName();
|
||||
|
||||
public ManagedRacesDataParser(JsonDeserializer<Regatta> regattaDeserializer) {
|
||||
this.regattaDeserializer = regattaDeserializer;
|
||||
|
||||
private JsonDeserializer<RaceGroup> deserializer;
|
||||
|
||||
public ManagedRacesDataParser(JsonDeserializer<RaceGroup> deserializer) {
|
||||
this.deserializer = deserializer;
|
||||
}
|
||||
|
||||
public Collection<ManagedRace> parse(Reader reader) throws Exception {
|
||||
@@ -33,29 +35,46 @@ public class ManagedRacesDataParser implements DataParser<Collection<ManagedRace
|
||||
JSONArray jsonArray = Helpers.toJSONArraySafe(parsedResult);
|
||||
|
||||
Collection<ManagedRace> managedRaces = new ArrayList<ManagedRace>();
|
||||
|
||||
for (Object element : jsonArray) {
|
||||
JSONObject json = Helpers.toJSONObjectSafe(element);
|
||||
Regatta regatta = regattaDeserializer.deserialize(json);
|
||||
|
||||
if (!Util.isEmpty(regatta.getAllRaces())) {
|
||||
addManagedRaces(managedRaces, regatta);
|
||||
}
|
||||
RaceGroup group = deserializer.deserialize(json);
|
||||
addManagedRaces(managedRaces, group);
|
||||
}
|
||||
|
||||
return managedRaces;
|
||||
}
|
||||
|
||||
private void addManagedRaces(Collection<ManagedRace> target, Regatta regatta) {
|
||||
/// TODO: parse Series and Fleet information
|
||||
for (RaceDefinition raceDefinition : regatta.getAllRaces()) {
|
||||
target.add(new ManagedRaceImpl(
|
||||
raceDefinition,
|
||||
regatta,
|
||||
raceDefinition.getBoatClass(),
|
||||
new SeriesDataImpl("Unknown", Collections.<Fleet>emptyList(), false),
|
||||
new FleetImpl("Unknown")));
|
||||
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));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private ManagedRace createManagedRace(
|
||||
RaceGroup raceGroup,
|
||||
SeriesData series,
|
||||
FleetWithRaceNames fleetWithRaceNames,
|
||||
String raceName) {
|
||||
ManagedRaceIdentifier identifier =
|
||||
new ManagedRaceIdentifierImpl(raceName, fleetWithRaceNames, series, raceGroup);
|
||||
ManagedRace managedRace = new ManagedRaceImpl(identifier);
|
||||
return managedRace;
|
||||
}
|
||||
|
||||
}
|
||||
+3
-15
@@ -1,24 +1,12 @@
|
||||
package com.sap.sailing.racecommittee.app.domain;
|
||||
|
||||
import com.sap.sailing.domain.base.BoatClass;
|
||||
import com.sap.sailing.domain.base.Fleet;
|
||||
import com.sap.sailing.domain.base.RaceDefinition;
|
||||
import com.sap.sailing.domain.base.Regatta;
|
||||
import com.sap.sailing.domain.common.Named;
|
||||
import com.sap.sailing.domain.common.WithID;
|
||||
|
||||
public interface ManagedRace extends Named, WithID {
|
||||
public interface ManagedRace extends ManagedRaceIdentifier, Named, WithID {
|
||||
|
||||
public ManagedRaceIdentifier getIdentifier();
|
||||
|
||||
public RaceStatus getStatus();
|
||||
|
||||
public Regatta getRegatta();
|
||||
|
||||
public RaceDefinition getRaceDefinition();
|
||||
|
||||
public BoatClass getBoatClass();
|
||||
|
||||
public SeriesData getSeriesData();
|
||||
|
||||
public Fleet getFleet();
|
||||
|
||||
}
|
||||
+21
@@ -0,0 +1,21 @@
|
||||
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.SeriesData;
|
||||
|
||||
public interface ManagedRaceIdentifier {
|
||||
|
||||
public String getRaceName();
|
||||
|
||||
public FleetWithRaceNames getFleet();
|
||||
|
||||
public SeriesData getSeries();
|
||||
|
||||
public RaceGroup getRaceGroup();
|
||||
|
||||
public Serializable getId();
|
||||
|
||||
}
|
||||
-39
@@ -1,39 +0,0 @@
|
||||
package com.sap.sailing.racecommittee.app.domain.deserialization;
|
||||
|
||||
import java.util.Collections;
|
||||
|
||||
import org.json.simple.JSONObject;
|
||||
|
||||
import com.sap.sailing.domain.base.BoatClass;
|
||||
import com.sap.sailing.domain.base.Competitor;
|
||||
import com.sap.sailing.domain.base.RaceDefinition;
|
||||
import com.sap.sailing.domain.base.impl.RaceDefinitionImpl;
|
||||
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.race.RaceDefinitionJsonSerializer;
|
||||
|
||||
public class RaceDefinitionJsonDeserializer implements JsonDeserializer<RaceDefinition> {
|
||||
|
||||
private JsonDeserializer<BoatClass> boatClassDeserializer;
|
||||
|
||||
public RaceDefinitionJsonDeserializer(JsonDeserializer<BoatClass> boatClassDeserializer) {
|
||||
this.boatClassDeserializer = boatClassDeserializer;
|
||||
}
|
||||
|
||||
public RaceDefinition deserialize(JSONObject object) throws JsonDeserializationException {
|
||||
String id = object.get(RaceDefinitionJsonSerializer.FIELD_ID).toString();
|
||||
String name = object.get(RaceDefinitionJsonSerializer.FIELD_NAME).toString();
|
||||
|
||||
BoatClass boatClass = boatClassDeserializer.deserialize(
|
||||
Helpers.getNestedObjectSafe(object, RaceDefinitionJsonSerializer.FIELD_BOAT_CLASS));
|
||||
|
||||
return new RaceDefinitionImpl(
|
||||
name,
|
||||
null,
|
||||
boatClass,
|
||||
Collections.<Competitor>emptyList(),
|
||||
Helpers.tryUuidConversion(id));
|
||||
}
|
||||
|
||||
}
|
||||
-46
@@ -1,46 +0,0 @@
|
||||
package com.sap.sailing.racecommittee.app.domain.deserialization;
|
||||
|
||||
import org.json.simple.JSONObject;
|
||||
|
||||
import com.sap.sailing.domain.base.BoatClass;
|
||||
import com.sap.sailing.domain.base.RaceDefinition;
|
||||
import com.sap.sailing.domain.base.Regatta;
|
||||
import com.sap.sailing.racecommittee.app.domain.impl.SimpleRegattaImpl;
|
||||
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.RegattaJsonSerializer;
|
||||
|
||||
public class RegattaJsonDeserializer implements JsonDeserializer<Regatta> {
|
||||
|
||||
private JsonDeserializer<BoatClass> boatClassDeserializer;
|
||||
private JsonDeserializer<RaceDefinition> raceDefinitionDeserializer;
|
||||
|
||||
public RegattaJsonDeserializer(
|
||||
JsonDeserializer<BoatClass> boatClassDeserializer,
|
||||
JsonDeserializer<RaceDefinition> raceDefinitionDeserializer) {
|
||||
this.raceDefinitionDeserializer = raceDefinitionDeserializer;
|
||||
this.boatClassDeserializer = boatClassDeserializer;
|
||||
}
|
||||
|
||||
public Regatta deserialize(JSONObject object) throws JsonDeserializationException {
|
||||
String id = object.get(RegattaJsonSerializer.FIELD_ID).toString();
|
||||
//String name = object.get(RegattaJsonSerializer.FIELD_NAME).toString();
|
||||
String baseName = object.get(RegattaJsonSerializer.FIELD_BASE_NAME).toString();
|
||||
BoatClass boatClass = boatClassDeserializer.deserialize(
|
||||
Helpers.getNestedObjectSafe(object, RegattaJsonSerializer.FIELD_BOAT_CLASS));
|
||||
|
||||
Regatta regatta = new SimpleRegattaImpl(Helpers.tryUuidConversion(id), baseName, boatClass);
|
||||
|
||||
/*JSONArray races = Helpers.getNestedArraySafe(
|
||||
object,
|
||||
RegattaJsonSerializer.FIELD_RACES);
|
||||
for (Object element : races) {
|
||||
JSONObject race = Helpers.toJSONObjectSafe(element);
|
||||
regatta.addRace(raceDefinitionDeserializer.deserialize(race));
|
||||
}*/
|
||||
|
||||
return regatta;
|
||||
}
|
||||
|
||||
}
|
||||
+1
-2
@@ -1,4 +1,4 @@
|
||||
package com.sap.sailing.server.gateway.deserialization.impl;
|
||||
package com.sap.sailing.racecommittee.app.domain.deserialization.impl;
|
||||
|
||||
import org.json.simple.JSONObject;
|
||||
|
||||
@@ -10,7 +10,6 @@ import com.sap.sailing.server.gateway.serialization.impl.BoatClassJsonSerializer
|
||||
|
||||
public class BoatClassJsonDeserializer implements JsonDeserializer<BoatClass> {
|
||||
|
||||
@Override
|
||||
public BoatClass deserialize(JSONObject object)
|
||||
throws JsonDeserializationException {
|
||||
String name = object.get(BoatClassJsonSerializer.FIELD_NAME).toString();
|
||||
+20
@@ -0,0 +1,20 @@
|
||||
package com.sap.sailing.racecommittee.app.domain.deserialization.impl;
|
||||
|
||||
import org.json.simple.JSONObject;
|
||||
|
||||
import com.sap.sailing.domain.common.Color;
|
||||
import com.sap.sailing.domain.common.impl.RGBColor;
|
||||
import com.sap.sailing.server.gateway.deserialization.JsonDeserializationException;
|
||||
import com.sap.sailing.server.gateway.deserialization.JsonDeserializer;
|
||||
|
||||
public class ColorDeserializer implements JsonDeserializer<Color> {
|
||||
|
||||
public Color deserialize(JSONObject object)
|
||||
throws JsonDeserializationException {
|
||||
Number red = (Number) object.get("r");
|
||||
Number green = (Number) object.get("g");
|
||||
Number blue = (Number) object.get("b");
|
||||
return new RGBColor(red.intValue(), green.intValue(), blue.intValue());
|
||||
}
|
||||
|
||||
}
|
||||
+22
-22
@@ -1,22 +1,22 @@
|
||||
package com.sap.sailing.server.gateway.deserialization.impl;
|
||||
|
||||
import org.json.simple.JSONObject;
|
||||
|
||||
import com.sap.sailing.domain.base.CourseArea;
|
||||
import com.sap.sailing.domain.base.impl.CourseAreaImpl;
|
||||
import com.sap.sailing.server.gateway.deserialization.JsonDeserializationException;
|
||||
import com.sap.sailing.server.gateway.deserialization.JsonDeserializer;
|
||||
import com.sap.sailing.server.gateway.serialization.impl.CourseAreaJsonSerializer;
|
||||
|
||||
public class CourseAreaJsonDeserializer implements JsonDeserializer<CourseArea> {
|
||||
|
||||
@Override
|
||||
public CourseArea deserialize(JSONObject object)
|
||||
throws JsonDeserializationException {
|
||||
String name = object.get(CourseAreaJsonSerializer.FIELD_NAME).toString();
|
||||
String id = object.get(CourseAreaJsonSerializer.FIELD_ID).toString();
|
||||
|
||||
return new CourseAreaImpl(name, Helpers.tryUuidConversion(id));
|
||||
}
|
||||
|
||||
}
|
||||
package com.sap.sailing.racecommittee.app.domain.deserialization.impl;
|
||||
|
||||
import org.json.simple.JSONObject;
|
||||
|
||||
import com.sap.sailing.domain.base.CourseArea;
|
||||
import com.sap.sailing.domain.base.impl.CourseAreaImpl;
|
||||
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.CourseAreaJsonSerializer;
|
||||
|
||||
public class CourseAreaJsonDeserializer implements JsonDeserializer<CourseArea> {
|
||||
|
||||
public CourseArea deserialize(JSONObject object)
|
||||
throws JsonDeserializationException {
|
||||
String name = object.get(CourseAreaJsonSerializer.FIELD_NAME).toString();
|
||||
String id = object.get(CourseAreaJsonSerializer.FIELD_ID).toString();
|
||||
|
||||
return new CourseAreaImpl(name, Helpers.tryUuidConversion(id));
|
||||
}
|
||||
|
||||
}
|
||||
+2
-1
@@ -1,4 +1,4 @@
|
||||
package com.sap.sailing.server.gateway.deserialization.impl;
|
||||
package com.sap.sailing.racecommittee.app.domain.deserialization.impl;
|
||||
|
||||
import org.json.simple.JSONObject;
|
||||
|
||||
@@ -7,6 +7,7 @@ import com.sap.sailing.domain.base.Venue;
|
||||
import com.sap.sailing.domain.base.impl.EventImpl;
|
||||
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.EventJsonSerializer;
|
||||
|
||||
public class EventJsonDeserializer implements JsonDeserializer<Event> {
|
||||
+32
@@ -0,0 +1,32 @@
|
||||
package com.sap.sailing.racecommittee.app.domain.deserialization.impl;
|
||||
|
||||
import org.json.simple.JSONObject;
|
||||
|
||||
import com.sap.sailing.domain.base.Fleet;
|
||||
import com.sap.sailing.domain.base.impl.FleetImpl;
|
||||
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;
|
||||
|
||||
public class FleetDeserializer implements JsonDeserializer<Fleet> {
|
||||
|
||||
private JsonDeserializer<Color> colorDeserializer;
|
||||
|
||||
public FleetDeserializer(JsonDeserializer<Color> colorDeserializer) {
|
||||
this.colorDeserializer = colorDeserializer;
|
||||
}
|
||||
|
||||
public Fleet deserialize(JSONObject object)
|
||||
throws JsonDeserializationException {
|
||||
Color color = null;
|
||||
if (object.containsKey("color")) {
|
||||
color = colorDeserializer.deserialize(Helpers.getNestedObjectSafe(object, "color"));
|
||||
}
|
||||
String name = object.get("name").toString();
|
||||
Number ordering = (Number) object.get("ordering");
|
||||
|
||||
return new FleetImpl(name, ordering.intValue(), color);
|
||||
}
|
||||
|
||||
}
|
||||
+35
@@ -0,0 +1,35 @@
|
||||
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;
|
||||
|
||||
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, "races")) {
|
||||
raceNames.add(raceName.toString());
|
||||
}
|
||||
|
||||
return new FleetWithRaceNamesImpl(fleet, raceNames);
|
||||
}
|
||||
|
||||
}
|
||||
+33
@@ -0,0 +1,33 @@
|
||||
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.RaceGroup;
|
||||
import com.sap.sailing.domain.base.SeriesData;
|
||||
import com.sap.sailing.domain.base.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;
|
||||
|
||||
public class RaceGroupDeserializer implements JsonDeserializer<RaceGroup> {
|
||||
|
||||
private JsonDeserializer<SeriesData> seriesDeserializer;
|
||||
|
||||
public RaceGroupDeserializer(JsonDeserializer<SeriesData> seriesDeserializer) {
|
||||
this.seriesDeserializer = seriesDeserializer;
|
||||
}
|
||||
|
||||
public RaceGroup deserialize(JSONObject object)
|
||||
throws JsonDeserializationException {
|
||||
String name = object.get("name").toString();
|
||||
Collection<SeriesData> series = new ArrayList<SeriesData>();
|
||||
for (Object seriesObject : Helpers.getNestedArraySafe(object, "series")) {
|
||||
JSONObject seriesJson = Helpers.toJSONObjectSafe(seriesObject);
|
||||
series.add(seriesDeserializer.deserialize(seriesJson));
|
||||
}
|
||||
return new RaceGroupImpl(name, null, series);
|
||||
}
|
||||
}
|
||||
+37
@@ -0,0 +1,37 @@
|
||||
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;
|
||||
|
||||
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, "fleets")) {
|
||||
JSONObject fleetJson = Helpers.toJSONObjectSafe(fleetObject);
|
||||
fleets.add(fleetDeserializer.deserialize(fleetJson));
|
||||
}
|
||||
|
||||
return new SeriesDataImpl(name, fleets, isMedal);
|
||||
}
|
||||
|
||||
}
|
||||
+2
-2
@@ -1,4 +1,4 @@
|
||||
package com.sap.sailing.server.gateway.deserialization.impl;
|
||||
package com.sap.sailing.racecommittee.app.domain.deserialization.impl;
|
||||
|
||||
import org.json.simple.JSONArray;
|
||||
import org.json.simple.JSONObject;
|
||||
@@ -8,6 +8,7 @@ import com.sap.sailing.domain.base.Venue;
|
||||
import com.sap.sailing.domain.base.impl.VenueImpl;
|
||||
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.VenueJsonSerializer;
|
||||
|
||||
public class VenueJsonDeserializer implements JsonDeserializer<Venue> {
|
||||
@@ -17,7 +18,6 @@ public class VenueJsonDeserializer implements JsonDeserializer<Venue> {
|
||||
this.courseAreaDeserializer = courseAreaDeserializer;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Venue deserialize(JSONObject object)
|
||||
throws JsonDeserializationException {
|
||||
|
||||
+50
@@ -0,0 +1,50 @@
|
||||
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.SeriesData;
|
||||
import com.sap.sailing.racecommittee.app.domain.ManagedRaceIdentifier;
|
||||
|
||||
public class ManagedRaceIdentifierImpl implements ManagedRaceIdentifier {
|
||||
|
||||
private String raceName;
|
||||
private FleetWithRaceNames fleetWithRaceNames;
|
||||
private SeriesData series;
|
||||
private RaceGroup raceGroup;
|
||||
|
||||
public ManagedRaceIdentifierImpl(String raceName,
|
||||
FleetWithRaceNames fleetWithRaceNames, SeriesData series,
|
||||
RaceGroup raceGroup) {
|
||||
this.raceName = raceName;
|
||||
this.fleetWithRaceNames = fleetWithRaceNames;
|
||||
this.series = series;
|
||||
this.raceGroup = raceGroup;
|
||||
}
|
||||
|
||||
public String getRaceName() {
|
||||
return raceName;
|
||||
}
|
||||
|
||||
public FleetWithRaceNames getFleet() {
|
||||
return fleetWithRaceNames;
|
||||
}
|
||||
|
||||
public SeriesData getSeries() {
|
||||
return series;
|
||||
}
|
||||
|
||||
public RaceGroup getRaceGroup() {
|
||||
return raceGroup;
|
||||
}
|
||||
|
||||
public Serializable getId() {
|
||||
return String.format("%s.%s.%s.%s",
|
||||
getRaceGroup().getName(),
|
||||
getSeries().getName(),
|
||||
getFleet().getName(),
|
||||
getRaceName());
|
||||
}
|
||||
|
||||
}
|
||||
+27
-41
@@ -2,68 +2,54 @@ package com.sap.sailing.racecommittee.app.domain.impl;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
import com.sap.sailing.domain.base.BoatClass;
|
||||
import com.sap.sailing.domain.base.Fleet;
|
||||
import com.sap.sailing.domain.base.RaceDefinition;
|
||||
import com.sap.sailing.domain.base.Regatta;
|
||||
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.racecommittee.app.domain.ManagedRace;
|
||||
import com.sap.sailing.racecommittee.app.domain.ManagedRaceIdentifier;
|
||||
import com.sap.sailing.racecommittee.app.domain.RaceStatus;
|
||||
import com.sap.sailing.racecommittee.app.domain.SeriesData;
|
||||
|
||||
public class ManagedRaceImpl implements ManagedRace {
|
||||
private static final long serialVersionUID = -4936566684992524001L;
|
||||
|
||||
//private static final String TAG = ManagedRace.class.getName();
|
||||
|
||||
private ManagedRaceIdentifier identifier;
|
||||
|
||||
private RaceDefinition raceDefinition;
|
||||
private Regatta regatta;
|
||||
private BoatClass boatClass;
|
||||
private SeriesData seriesData;
|
||||
private Fleet fleet;
|
||||
|
||||
public ManagedRaceImpl(
|
||||
RaceDefinition raceDefinition,
|
||||
Regatta regatta,
|
||||
BoatClass boatClass,
|
||||
SeriesData seriesData,
|
||||
Fleet fleet) {
|
||||
this.raceDefinition = raceDefinition;
|
||||
this.regatta = regatta;
|
||||
this.boatClass = boatClass;
|
||||
this.seriesData = seriesData;
|
||||
this.fleet = fleet;
|
||||
public ManagedRaceImpl(ManagedRaceIdentifier identifier) {
|
||||
this.identifier = identifier;
|
||||
}
|
||||
|
||||
public Serializable getId() {
|
||||
return raceDefinition.getId();
|
||||
return identifier.getId();
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return raceDefinition.getName();
|
||||
return identifier.getRaceName();
|
||||
}
|
||||
|
||||
public Regatta getRegatta() {
|
||||
return regatta;
|
||||
public String getRaceName() {
|
||||
return getName();
|
||||
}
|
||||
|
||||
public RaceDefinition getRaceDefinition() {
|
||||
return raceDefinition;
|
||||
|
||||
public FleetWithRaceNames getFleet() {
|
||||
return identifier.getFleet();
|
||||
}
|
||||
|
||||
public SeriesData getSeries() {
|
||||
return identifier.getSeries();
|
||||
}
|
||||
|
||||
public RaceGroup getRaceGroup() {
|
||||
return identifier.getRaceGroup();
|
||||
}
|
||||
|
||||
public ManagedRaceIdentifier getIdentifier() {
|
||||
return identifier;
|
||||
}
|
||||
|
||||
public RaceStatus getStatus() {
|
||||
return RaceStatus.UNKNOWN;
|
||||
}
|
||||
|
||||
public BoatClass getBoatClass() {
|
||||
return boatClass;
|
||||
}
|
||||
|
||||
public SeriesData getSeriesData() {
|
||||
return seriesData;
|
||||
}
|
||||
|
||||
public Fleet getFleet() {
|
||||
return fleet;
|
||||
}
|
||||
|
||||
}
|
||||
+1
-6
@@ -1,7 +1,7 @@
|
||||
package com.sap.sailing.racecommittee.app.domain.impl;
|
||||
|
||||
import com.sap.sailing.domain.base.Fleet;
|
||||
import com.sap.sailing.racecommittee.app.domain.SeriesData;
|
||||
import com.sap.sailing.domain.base.SeriesData;
|
||||
|
||||
public class SeriesDataImpl implements SeriesData {
|
||||
private static final long serialVersionUID = 8825402393444809944L;
|
||||
@@ -28,9 +28,4 @@ public class SeriesDataImpl implements SeriesData {
|
||||
return isMedal;
|
||||
}
|
||||
|
||||
public Integer getOrderNumber() {
|
||||
/// TODO: implement order number on seriesdata
|
||||
return 0;
|
||||
}
|
||||
|
||||
}
|
||||
+1
-1
@@ -2,7 +2,7 @@ package com.sap.sailing.racecommittee.app.ui.adapters.racelist;
|
||||
|
||||
import com.sap.sailing.domain.base.BoatClass;
|
||||
import com.sap.sailing.domain.base.Fleet;
|
||||
import com.sap.sailing.racecommittee.app.domain.SeriesData;
|
||||
import com.sap.sailing.domain.base.SeriesData;
|
||||
|
||||
public class BoatClassSeriesDataFleet {
|
||||
|
||||
|
||||
+1
-1
@@ -2,7 +2,7 @@ package com.sap.sailing.racecommittee.app.ui.adapters.racelist;
|
||||
|
||||
import com.sap.sailing.domain.base.BoatClass;
|
||||
import com.sap.sailing.domain.base.Fleet;
|
||||
import com.sap.sailing.racecommittee.app.domain.SeriesData;
|
||||
import com.sap.sailing.domain.base.SeriesData;
|
||||
|
||||
public class RaceListDataTypeTitle extends RaceListDataType {
|
||||
|
||||
|
||||
+1
@@ -7,6 +7,7 @@ import com.sap.sailing.domain.common.Named;
|
||||
public class NamedRaceComparator extends RaceNameComparator implements Comparator<Named> {
|
||||
|
||||
public int compare(Named lhs, Named rhs) {
|
||||
|
||||
String left = lhs.getName();
|
||||
String right = rhs.getName();
|
||||
|
||||
|
||||
+1
-1
@@ -5,7 +5,7 @@ import java.util.Comparator;
|
||||
import com.sap.sailing.racecommittee.app.ui.adapters.racelist.RaceListDataTypeElement;
|
||||
|
||||
public class RaceListDataTypeElementComparator extends RaceNameComparator implements Comparator<RaceListDataTypeElement> {
|
||||
|
||||
|
||||
public int compare(RaceListDataTypeElement lhs, RaceListDataTypeElement rhs) {
|
||||
String leftRaceName = lhs.getRaceName();
|
||||
String rightRaceName = rhs.getRaceName();
|
||||
|
||||
+2
-2
@@ -19,9 +19,9 @@ public class RaceListDataTypeTitleComparator implements Comparator<RaceListDataT
|
||||
if (left.getSeries().getName() == null || right.getSeries().getName() == null)
|
||||
return 0;
|
||||
|
||||
int seriesResult = left.getSeries().getOrderNumber().compareTo(right.getSeries().getOrderNumber());
|
||||
/*int seriesResult = left.getSeries().getOrderNumber().compareTo(right.getSeries().getOrderNumber());
|
||||
if (seriesResult != 0)
|
||||
return seriesResult;
|
||||
return seriesResult;*/
|
||||
|
||||
if (left.getFleet().getName() == null || right.getFleet().getName() == null)
|
||||
return 0;
|
||||
|
||||
+8
-8
@@ -1,9 +1,15 @@
|
||||
package com.sap.sailing.racecommittee.app.ui.comparators;
|
||||
|
||||
import java.util.Comparator;
|
||||
|
||||
import com.sap.sailing.racecommittee.app.utils.AlphanumComparator;
|
||||
|
||||
public abstract class RaceNameComparator {
|
||||
|
||||
private Comparator<String> comparator;
|
||||
|
||||
public RaceNameComparator() {
|
||||
super();
|
||||
this.comparator = new AlphanumComparator();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -13,13 +19,7 @@ public abstract class RaceNameComparator {
|
||||
* @return the comparison result (see String.compareTo)
|
||||
*/
|
||||
protected int compareRaceNames(String leftRaceName, String rightRaceName) {
|
||||
leftRaceName = leftRaceName.replace("Race ", "");
|
||||
rightRaceName = rightRaceName.replace("Race ", "");
|
||||
|
||||
Integer leftRaceNumber = Integer.valueOf(leftRaceName);
|
||||
Integer rightRaceNumber = Integer.valueOf(rightRaceName);
|
||||
|
||||
return leftRaceNumber.compareTo(rightRaceNumber);
|
||||
return comparator.compare(leftRaceName, rightRaceName);
|
||||
}
|
||||
|
||||
}
|
||||
+4
-4
@@ -7,11 +7,11 @@ import com.sap.sailing.racecommittee.app.ui.adapters.racelist.BoatClassSeriesDat
|
||||
public class SeriesComparator implements Comparator<BoatClassSeriesDataFleet> {
|
||||
|
||||
public int compare(BoatClassSeriesDataFleet lhs, BoatClassSeriesDataFleet rhs) {
|
||||
int result = lhs.getSeries().getOrderNumber().compareTo(rhs.getSeries().getOrderNumber());
|
||||
if (result == 0) {
|
||||
//int result = lhs.getSeries().getOrderNumber().compareTo(rhs.getSeries().getOrderNumber());
|
||||
//if (result == 0) {
|
||||
return lhs.getFleetName().compareTo(rhs.getFleetName());
|
||||
}
|
||||
return result;
|
||||
//}
|
||||
//return result;
|
||||
}
|
||||
|
||||
}
|
||||
+2
-1
@@ -14,6 +14,7 @@ import android.os.Bundle;
|
||||
import android.view.View;
|
||||
import android.widget.ListView;
|
||||
|
||||
import com.sap.sailing.domain.base.impl.BoatClassImpl;
|
||||
import com.sap.sailing.racecommittee.app.R;
|
||||
import com.sap.sailing.racecommittee.app.domain.ManagedRace;
|
||||
import com.sap.sailing.racecommittee.app.domain.RaceStatus;
|
||||
@@ -106,7 +107,7 @@ public class ManagedRaceListFragment extends ListFragment implements JuryFlagCli
|
||||
// Group Managed Races by boat class and group
|
||||
for (ManagedRace m : managedRacesById.values()) {
|
||||
BoatClassSeriesDataFleet ser =
|
||||
new BoatClassSeriesDataFleet(m.getBoatClass(), m.getSeriesData(), m.getFleet());
|
||||
new BoatClassSeriesDataFleet(new BoatClassImpl("A", false), m.getSeries(), m.getFleet());
|
||||
|
||||
if (raceListHashMap.containsKey(ser)) {
|
||||
raceListHashMap.get(ser).add(m);
|
||||
|
||||
+123
@@ -0,0 +1,123 @@
|
||||
package com.sap.sailing.racecommittee.app.utils;
|
||||
/*
|
||||
* The Alphanum Algorithm is an improved sorting algorithm for strings
|
||||
* containing numbers. Instead of sorting numbers in ASCII order like
|
||||
* a standard sort, this algorithm sorts numbers in numeric order.
|
||||
*
|
||||
* The Alphanum Algorithm is discussed at http://www.DaveKoelle.com
|
||||
*
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*
|
||||
*/
|
||||
|
||||
import java.util.Comparator;
|
||||
|
||||
/**
|
||||
* This is an updated version with enhancements made by Daniel Migowski,
|
||||
* Andre Bogus, and David Koelle
|
||||
*
|
||||
* To convert to use Templates (Java 1.5+):
|
||||
* - Change "implements Comparator" to "implements Comparator<String>"
|
||||
* - Change "compare(Object o1, Object o2)" to "compare(String s1, String s2)"
|
||||
* - Remove the type checking and casting in compare().
|
||||
*
|
||||
* To use this class:
|
||||
* Use the static "sort" method from the java.util.Collections class:
|
||||
* Collections.sort(your list, new AlphanumComparator());
|
||||
*/
|
||||
public class AlphanumComparator implements Comparator<String>
|
||||
{
|
||||
private final boolean isDigit(char ch)
|
||||
{
|
||||
return ch >= 48 && ch <= 57;
|
||||
}
|
||||
|
||||
/** Length of string is passed in for improved efficiency (only need to calculate it once) **/
|
||||
private final String getChunk(String s, int slength, int marker)
|
||||
{
|
||||
StringBuilder chunk = new StringBuilder();
|
||||
char c = s.charAt(marker);
|
||||
chunk.append(c);
|
||||
marker++;
|
||||
if (isDigit(c))
|
||||
{
|
||||
while (marker < slength)
|
||||
{
|
||||
c = s.charAt(marker);
|
||||
if (!isDigit(c))
|
||||
break;
|
||||
chunk.append(c);
|
||||
marker++;
|
||||
}
|
||||
} else
|
||||
{
|
||||
while (marker < slength)
|
||||
{
|
||||
c = s.charAt(marker);
|
||||
if (isDigit(c))
|
||||
break;
|
||||
chunk.append(c);
|
||||
marker++;
|
||||
}
|
||||
}
|
||||
return chunk.toString();
|
||||
}
|
||||
|
||||
public int compare(String s1, String s2) {
|
||||
int thisMarker = 0;
|
||||
int thatMarker = 0;
|
||||
int s1Length = s1.length();
|
||||
int s2Length = s2.length();
|
||||
|
||||
while (thisMarker < s1Length && thatMarker < s2Length)
|
||||
{
|
||||
String thisChunk = getChunk(s1, s1Length, thisMarker);
|
||||
thisMarker += thisChunk.length();
|
||||
|
||||
String thatChunk = getChunk(s2, s2Length, thatMarker);
|
||||
thatMarker += thatChunk.length();
|
||||
|
||||
// If both chunks contain numeric characters, sort them numerically
|
||||
int result = 0;
|
||||
if (isDigit(thisChunk.charAt(0)) && isDigit(thatChunk.charAt(0)))
|
||||
{
|
||||
// Simple chunk comparison by length.
|
||||
int thisChunkLength = thisChunk.length();
|
||||
result = thisChunkLength - thatChunk.length();
|
||||
// If equal, the first different number counts
|
||||
if (result == 0)
|
||||
{
|
||||
for (int i = 0; i < thisChunkLength; i++)
|
||||
{
|
||||
result = thisChunk.charAt(i) - thatChunk.charAt(i);
|
||||
if (result != 0)
|
||||
{
|
||||
return result;
|
||||
}
|
||||
}
|
||||
}
|
||||
} else
|
||||
{
|
||||
result = thisChunk.compareTo(thatChunk);
|
||||
}
|
||||
|
||||
if (result != 0)
|
||||
return result;
|
||||
}
|
||||
|
||||
return s1Length - s2Length;
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user