mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-10-30 15:57:11 +00:00
Extended Data Management in app to handle mark loading
This commit is contained in:
1 parent
027cd64a08
commit
aaf73deea5
8 files changed
+372
-166
No files matched your search
+33
-27
@@ -1,27 +1,33 @@
|
||||
package com.sap.sailing.racecommittee.app.data;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Collection;
|
||||
|
||||
import com.sap.sailing.domain.base.CourseArea;
|
||||
import com.sap.sailing.domain.base.EventData;
|
||||
import com.sap.sailing.racecommittee.app.domain.ManagedRace;
|
||||
|
||||
public interface DataStore {
|
||||
|
||||
public Collection<EventData> getEvents();
|
||||
public EventData getEvent(Serializable id);
|
||||
public boolean hasEvent(Serializable id);
|
||||
public void addEvent(EventData event);
|
||||
|
||||
public Collection<CourseArea> getCourseAreas(EventData event);
|
||||
public CourseArea getCourseArea(Serializable id);
|
||||
public boolean hasCourseArea(Serializable id);
|
||||
public void addCourseArea(EventData event, CourseArea courseArea);
|
||||
|
||||
public Collection<ManagedRace> getRaces();
|
||||
public void addRace(ManagedRace race);
|
||||
public ManagedRace getRace(Serializable id);
|
||||
public boolean hasRace(Serializable id);
|
||||
|
||||
}
|
||||
package com.sap.sailing.racecommittee.app.data;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Collection;
|
||||
|
||||
import com.sap.sailing.domain.base.CourseArea;
|
||||
import com.sap.sailing.domain.base.EventData;
|
||||
import com.sap.sailing.domain.base.Mark;
|
||||
import com.sap.sailing.racecommittee.app.domain.ManagedRace;
|
||||
|
||||
public interface DataStore {
|
||||
|
||||
public Collection<EventData> getEvents();
|
||||
public EventData getEvent(Serializable id);
|
||||
public boolean hasEvent(Serializable id);
|
||||
public void addEvent(EventData event);
|
||||
|
||||
public Collection<CourseArea> getCourseAreas(EventData event);
|
||||
public CourseArea getCourseArea(Serializable id);
|
||||
public boolean hasCourseArea(Serializable id);
|
||||
public void addCourseArea(EventData event, CourseArea courseArea);
|
||||
|
||||
public Collection<ManagedRace> getRaces();
|
||||
public void addRace(ManagedRace race);
|
||||
public ManagedRace getRace(Serializable id);
|
||||
public boolean hasRace(Serializable id);
|
||||
|
||||
public Collection<Mark> getMarks();
|
||||
public Mark getMark(Serializable id);
|
||||
public boolean hasMark(Serializable id);
|
||||
public void addMark(Mark mark);
|
||||
|
||||
}
|
||||
+146
-117
@@ -1,117 +1,146 @@
|
||||
package com.sap.sailing.racecommittee.app.data;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Collection;
|
||||
import java.util.HashMap;
|
||||
|
||||
import com.sap.sailing.domain.base.CourseArea;
|
||||
import com.sap.sailing.domain.base.EventData;
|
||||
import com.sap.sailing.racecommittee.app.domain.ManagedRace;
|
||||
import com.sap.sailing.racecommittee.app.utils.CollectionUtils;
|
||||
|
||||
public enum InMemoryDataStore implements DataStore {
|
||||
INSTANCE;
|
||||
|
||||
private HashMap<Serializable, EventData> eventsById;
|
||||
private HashMap<Serializable, ManagedRace> managedRaceById;
|
||||
|
||||
private InMemoryDataStore() {
|
||||
this.eventsById = new HashMap<Serializable, EventData>();
|
||||
this.managedRaceById = new HashMap<Serializable, ManagedRace>();
|
||||
}
|
||||
|
||||
/*
|
||||
* * * * * *
|
||||
* EVENTS *
|
||||
* * * * * *
|
||||
*/
|
||||
|
||||
public Collection<EventData> getEvents() {
|
||||
return eventsById.values();
|
||||
}
|
||||
|
||||
public EventData getEvent(Serializable id) {
|
||||
return eventsById.get(id);
|
||||
}
|
||||
|
||||
public boolean hasEvent(Serializable id) {
|
||||
return eventsById.containsKey(id);
|
||||
}
|
||||
|
||||
public void addEvent(EventData event) {
|
||||
eventsById.put(event.getId(), event);
|
||||
}
|
||||
|
||||
/*
|
||||
* * * * * * * *
|
||||
* COURSE AREA *
|
||||
* * * * * * * *
|
||||
*/
|
||||
|
||||
public Collection<CourseArea> getCourseAreas(EventData event) {
|
||||
if (event.getVenue() != null) {
|
||||
return CollectionUtils.newArrayList(event.getVenue().getCourseAreas());
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public CourseArea getCourseArea(EventData event, String name) {
|
||||
Collection<CourseArea> courseAreas = getCourseAreas(event);
|
||||
if (courseAreas != null) {
|
||||
for (CourseArea courseArea : courseAreas) {
|
||||
if (courseArea.getName().equals(name)) {
|
||||
return courseArea;
|
||||
}
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public CourseArea getCourseArea(Serializable id) {
|
||||
for (EventData event : eventsById.values()) {
|
||||
for (CourseArea courseArea : getCourseAreas(event)) {
|
||||
if (courseArea.getId().equals(id))
|
||||
return courseArea;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public boolean hasCourseArea(Serializable id) {
|
||||
for (EventData event : eventsById.values()) {
|
||||
for (CourseArea courseArea : getCourseAreas(event)) {
|
||||
if (courseArea.getId().equals(id))
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public void addCourseArea(EventData event, CourseArea courseArea) {
|
||||
if (event.getVenue() != null) {
|
||||
event.getVenue().addCourseArea(courseArea);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* * * * * * * *
|
||||
* MANAGED RACE *
|
||||
* * * * * * * *
|
||||
*/
|
||||
|
||||
public Collection<ManagedRace> getRaces() {
|
||||
return managedRaceById.values();
|
||||
}
|
||||
|
||||
public void addRace(ManagedRace race) {
|
||||
managedRaceById.put(race.getId(), race);
|
||||
}
|
||||
|
||||
public ManagedRace getRace(Serializable id) {
|
||||
return managedRaceById.get(id);
|
||||
}
|
||||
|
||||
public boolean hasRace(Serializable id) {
|
||||
return managedRaceById.containsKey(id);
|
||||
}
|
||||
}
|
||||
package com.sap.sailing.racecommittee.app.data;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Collection;
|
||||
import java.util.HashMap;
|
||||
|
||||
import com.sap.sailing.domain.base.CourseArea;
|
||||
import com.sap.sailing.domain.base.EventData;
|
||||
import com.sap.sailing.domain.base.Mark;
|
||||
import com.sap.sailing.racecommittee.app.domain.ManagedRace;
|
||||
import com.sap.sailing.racecommittee.app.utils.CollectionUtils;
|
||||
|
||||
public enum InMemoryDataStore implements DataStore {
|
||||
INSTANCE;
|
||||
|
||||
private HashMap<Serializable, EventData> eventsById;
|
||||
private HashMap<Serializable, ManagedRace> managedRaceById;
|
||||
private HashMap<Serializable, Mark> marksById;
|
||||
|
||||
private InMemoryDataStore() {
|
||||
this.eventsById = new HashMap<Serializable, EventData>();
|
||||
this.managedRaceById = new HashMap<Serializable, ManagedRace>();
|
||||
this.marksById = new HashMap<Serializable, Mark>();
|
||||
}
|
||||
|
||||
/*
|
||||
* * * * * *
|
||||
* EVENTS *
|
||||
* * * * * *
|
||||
*/
|
||||
|
||||
public Collection<EventData> getEvents() {
|
||||
return eventsById.values();
|
||||
}
|
||||
|
||||
public EventData getEvent(Serializable id) {
|
||||
return eventsById.get(id);
|
||||
}
|
||||
|
||||
public boolean hasEvent(Serializable id) {
|
||||
return eventsById.containsKey(id);
|
||||
}
|
||||
|
||||
public void addEvent(EventData event) {
|
||||
eventsById.put(event.getId(), event);
|
||||
}
|
||||
|
||||
/*
|
||||
* * * * * * * *
|
||||
* COURSE AREA *
|
||||
* * * * * * * *
|
||||
*/
|
||||
|
||||
public Collection<CourseArea> getCourseAreas(EventData event) {
|
||||
if (event.getVenue() != null) {
|
||||
return CollectionUtils.newArrayList(event.getVenue().getCourseAreas());
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public CourseArea getCourseArea(EventData event, String name) {
|
||||
Collection<CourseArea> courseAreas = getCourseAreas(event);
|
||||
if (courseAreas != null) {
|
||||
for (CourseArea courseArea : courseAreas) {
|
||||
if (courseArea.getName().equals(name)) {
|
||||
return courseArea;
|
||||
}
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public CourseArea getCourseArea(Serializable id) {
|
||||
for (EventData event : eventsById.values()) {
|
||||
for (CourseArea courseArea : getCourseAreas(event)) {
|
||||
if (courseArea.getId().equals(id))
|
||||
return courseArea;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public boolean hasCourseArea(Serializable id) {
|
||||
for (EventData event : eventsById.values()) {
|
||||
for (CourseArea courseArea : getCourseAreas(event)) {
|
||||
if (courseArea.getId().equals(id))
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public void addCourseArea(EventData event, CourseArea courseArea) {
|
||||
if (event.getVenue() != null) {
|
||||
event.getVenue().addCourseArea(courseArea);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* * * * * * * *
|
||||
* MANAGED RACE *
|
||||
* * * * * * * *
|
||||
*/
|
||||
|
||||
public Collection<ManagedRace> getRaces() {
|
||||
return managedRaceById.values();
|
||||
}
|
||||
|
||||
public void addRace(ManagedRace race) {
|
||||
managedRaceById.put(race.getId(), race);
|
||||
}
|
||||
|
||||
public ManagedRace getRace(Serializable id) {
|
||||
return managedRaceById.get(id);
|
||||
}
|
||||
|
||||
public boolean hasRace(Serializable id) {
|
||||
return managedRaceById.containsKey(id);
|
||||
}
|
||||
|
||||
/*
|
||||
* * * * * *
|
||||
* MARKS *
|
||||
* * * * * *
|
||||
*/
|
||||
|
||||
@Override
|
||||
public Collection<Mark> getMarks() {
|
||||
return marksById.values();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Mark getMark(Serializable id) {
|
||||
return marksById.get(id);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasMark(Serializable id) {
|
||||
return marksById.containsKey(id);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addMark(Mark mark) {
|
||||
marksById.put(mark.getId(), mark);
|
||||
}
|
||||
}
|
||||
+31
-1
@@ -11,16 +11,19 @@ import android.content.Context;
|
||||
import com.sap.sailing.domain.base.BoatClass;
|
||||
import com.sap.sailing.domain.base.CourseArea;
|
||||
import com.sap.sailing.domain.base.EventData;
|
||||
import com.sap.sailing.domain.base.Mark;
|
||||
import com.sap.sailing.domain.base.SharedDomainFactory;
|
||||
import com.sap.sailing.racecommittee.app.AppConstants;
|
||||
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.MarksDataHandler;
|
||||
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.MarksDataParser;
|
||||
import com.sap.sailing.racecommittee.app.deserialization.impl.BoatClassJsonDeserializer;
|
||||
import com.sap.sailing.racecommittee.app.deserialization.impl.ColorDeserializer;
|
||||
import com.sap.sailing.racecommittee.app.deserialization.impl.CourseAreaJsonDeserializer;
|
||||
@@ -33,8 +36,10 @@ import com.sap.sailing.racecommittee.app.deserialization.impl.RaceRowDeserialize
|
||||
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.ManagedRaceIdentifier;
|
||||
import com.sap.sailing.racecommittee.app.domain.impl.DomainFactoryImpl;
|
||||
import com.sap.sailing.server.gateway.deserialization.JsonDeserializer;
|
||||
import com.sap.sailing.server.gateway.deserialization.impl.MarkDeserializer;
|
||||
import com.sap.sailing.server.gateway.deserialization.impl.RaceLogEventDeserializer;
|
||||
|
||||
/**
|
||||
@@ -140,6 +145,31 @@ public class OnlineDataManager extends DataManager {
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public void addMarks(Collection<Mark> marks) {
|
||||
for (Mark mark : marks) {
|
||||
dataStore.addMark(mark);
|
||||
}
|
||||
}
|
||||
|
||||
public void loadMarks(ManagedRace managedRace, LoadClient<Collection<Mark>> client) {
|
||||
SharedDomainFactory domainFactory = DomainFactoryImpl.INSTANCE;
|
||||
JsonDeserializer<Mark> markDeserializer = new MarkDeserializer(domainFactory);
|
||||
DataParser<Collection<Mark>> parser = new MarksDataParser(markDeserializer);
|
||||
DataHandler<Collection<Mark>> handler = new MarksDataHandler(this, client);
|
||||
|
||||
ManagedRaceIdentifier identifier = managedRace.getIdentifier();
|
||||
|
||||
try {
|
||||
new DataLoader<Collection<Mark>>(context, URI.create(AppConstants.getServerBaseURL(context)
|
||||
+ "/sailingserver/rc/marks?leaderboard=" + identifier.getRaceGroup().getName() + "&raceColumn=" + identifier.getRaceName()
|
||||
+ "&fleet=" + identifier.getFleet().getName()), parser, handler)
|
||||
.forceLoad();
|
||||
} catch (MalformedURLException e) {
|
||||
e.printStackTrace();
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
+21
-21
@@ -1,21 +1,21 @@
|
||||
package com.sap.sailing.racecommittee.app.data.handlers;
|
||||
|
||||
import java.util.Collection;
|
||||
|
||||
import com.sap.sailing.racecommittee.app.data.OnlineDataManager;
|
||||
import com.sap.sailing.racecommittee.app.data.clients.LoadClient;
|
||||
import com.sap.sailing.racecommittee.app.domain.ManagedRace;
|
||||
|
||||
public class ManagedRacesDataHandler extends DataHandler<Collection<ManagedRace>> {
|
||||
|
||||
public ManagedRacesDataHandler(OnlineDataManager manager, LoadClient<Collection<ManagedRace>> client) {
|
||||
super(manager, client);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onLoaded(Collection<ManagedRace> data) {
|
||||
super.onLoaded(data);
|
||||
manager.addRaces(data);
|
||||
}
|
||||
|
||||
}
|
||||
package com.sap.sailing.racecommittee.app.data.handlers;
|
||||
|
||||
import java.util.Collection;
|
||||
|
||||
import com.sap.sailing.racecommittee.app.data.OnlineDataManager;
|
||||
import com.sap.sailing.racecommittee.app.data.clients.LoadClient;
|
||||
import com.sap.sailing.racecommittee.app.domain.ManagedRace;
|
||||
|
||||
public class ManagedRacesDataHandler extends DataHandler<Collection<ManagedRace>> {
|
||||
|
||||
public ManagedRacesDataHandler(OnlineDataManager manager, LoadClient<Collection<ManagedRace>> client) {
|
||||
super(manager, client);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onLoaded(Collection<ManagedRace> data) {
|
||||
super.onLoaded(data);
|
||||
manager.addRaces(data);
|
||||
}
|
||||
|
||||
}
|
||||
+21
@@ -0,0 +1,21 @@
|
||||
package com.sap.sailing.racecommittee.app.data.handlers;
|
||||
|
||||
import java.util.Collection;
|
||||
|
||||
import com.sap.sailing.domain.base.Mark;
|
||||
import com.sap.sailing.racecommittee.app.data.OnlineDataManager;
|
||||
import com.sap.sailing.racecommittee.app.data.clients.LoadClient;
|
||||
|
||||
public class MarksDataHandler extends DataHandler<Collection<Mark>> {
|
||||
|
||||
public MarksDataHandler(OnlineDataManager manager, LoadClient<Collection<Mark>> client) {
|
||||
super(manager, client);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onLoaded(Collection<Mark> data) {
|
||||
super.onLoaded(data);
|
||||
manager.addMarks(data);
|
||||
}
|
||||
|
||||
}
|
||||
+36
@@ -0,0 +1,36 @@
|
||||
package com.sap.sailing.racecommittee.app.data.parsers;
|
||||
|
||||
import java.io.Reader;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
|
||||
import org.json.simple.JSONArray;
|
||||
import org.json.simple.JSONObject;
|
||||
import org.json.simple.JSONValue;
|
||||
|
||||
import com.sap.sailing.domain.base.Mark;
|
||||
import com.sap.sailing.server.gateway.deserialization.JsonDeserializer;
|
||||
import com.sap.sailing.server.gateway.deserialization.impl.Helpers;
|
||||
|
||||
public class MarksDataParser implements DataParser<Collection<Mark>> {
|
||||
|
||||
private JsonDeserializer<Mark> deserializer;
|
||||
|
||||
public MarksDataParser(JsonDeserializer<Mark> deserializer) {
|
||||
this.deserializer = deserializer;
|
||||
}
|
||||
|
||||
public Collection<Mark> parse(Reader reader) throws Exception {
|
||||
Object parsedResult = JSONValue.parseWithException(reader);
|
||||
JSONArray jsonArray = Helpers.toJSONArraySafe(parsedResult);
|
||||
Collection<Mark> marks = new ArrayList<Mark>();
|
||||
|
||||
for (Object element : jsonArray) {
|
||||
JSONObject json = Helpers.toJSONObjectSafe(element);
|
||||
marks.add(deserializer.deserialize(json));
|
||||
}
|
||||
|
||||
return marks;
|
||||
}
|
||||
|
||||
}
|
||||
Reference in new issue
Block a user