Extended Data Management in app to handle mark loading

This commit is contained in:
Armin Zamani committed 2013-03-07 17:13:31 +04:00
1 parent 027cd64a08
commit aaf73deea5
8 files changed
+372 -166

No files matched your search

@@ -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);
}
@@ -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);
}
}
@@ -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();
}
}
}
@@ -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);
}
}
@@ -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);
}
}
@@ -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;
}
}