Cache marks per race group

This commit is contained in:
Robert Benedikt committed 2019-05-10 11:08:56 +02:00
1 parent eaeab1229c
commit 50acdbbc5a
5 files changed
+47 -29

No files matched your search

@@ -58,13 +58,13 @@ public interface DataStore {
void registerRaces(Collection<ManagedRace> races);
Collection<Mark> getMarks();
Collection<Mark> getMarks(RaceGroup raceGroup);
Mark getMark(Serializable id);
Mark getMark(RaceGroup raceGroup, Serializable id);
boolean hasMark(Serializable id);
boolean hasMark(RaceGroup raceGroup, Serializable id);
void addMark(Mark mark);
void addMark(RaceGroup raceGroup, Mark mark);
CourseBase getLastPublishedCourseDesign(RaceGroup raceGroup);
@@ -36,7 +36,7 @@ public enum InMemoryDataStore implements DataStore {
private Context mContext;
private LinkedHashMap<Serializable, EventBase> eventsById;
private LinkedHashMap<SimpleRaceLogIdentifier, ManagedRace> managedRaceById;
private LinkedHashMap<Serializable, Mark> marksById;
private LinkedHashMap<RaceGroup, LinkedHashMap<Serializable, Mark>> marksData;
private LinkedHashMap<RaceGroup, CourseBase> courseData;
private SharedDomainFactory domainFactory;
@@ -63,7 +63,7 @@ public enum InMemoryDataStore implements DataStore {
public void reset() {
eventsById = new LinkedHashMap<>();
managedRaceById = new LinkedHashMap<>();
marksById = new LinkedHashMap<>();
marksData = new LinkedHashMap<>();
courseData = new LinkedHashMap<>();
domainFactory = new SharedDomainFactoryImpl(new AndroidRaceLogResolver());
@@ -255,24 +255,37 @@ public enum InMemoryDataStore implements DataStore {
* * * * * * MARKS * * * * * *
*/
@Override
public Collection<Mark> getMarks() {
return marksById.values();
private LinkedHashMap<Serializable, Mark> getMarksByRaceGroup(RaceGroup raceGroup) {
LinkedHashMap<Serializable, Mark> marks = marksData.get(raceGroup);
if (marks == null) {
marks = new LinkedHashMap<>();
marksData.put(raceGroup, marks);
}
return marks;
}
private void setMarksByRaceGroup(RaceGroup raceGroup, LinkedHashMap<Serializable, Mark> marks) {
marksData.put(raceGroup, marks);
}
@Override
public Mark getMark(Serializable id) {
return marksById.get(id);
public Collection<Mark> getMarks(RaceGroup raceGroup) {
return getMarksByRaceGroup(raceGroup).values();
}
@Override
public boolean hasMark(Serializable id) {
return marksById.containsKey(id);
public Mark getMark(RaceGroup raceGroup, Serializable id) {
return getMarksByRaceGroup(raceGroup).get(id);
}
@Override
public void addMark(Mark mark) {
marksById.put(mark.getId(), mark);
public boolean hasMark(RaceGroup raceGroup, Serializable id) {
return getMarksByRaceGroup(raceGroup).containsKey(id);
}
@Override
public void addMark(RaceGroup raceGroup, Mark mark) {
getMarksByRaceGroup(raceGroup).put(mark.getId(), mark);
}
@Override
@@ -164,9 +164,9 @@ public class OfflineDataManager extends DataManager {
Mark m2 = new MarkImpl("Green");
Mark m3 = new MarkImpl("White");
dataStore.addMark(m1);
dataStore.addMark(m2);
dataStore.addMark(m3);
dataStore.addMark(raceGroup, m1);
dataStore.addMark(raceGroup, m2);
dataStore.addMark(raceGroup, m3);
}
@Override
@@ -224,7 +224,7 @@ public class OfflineDataManager extends DataManager {
return new ImmediateDataLoaderCallbacks<Collection<Mark>>(context, callback, new Callable<Collection<Mark>>() {
@Override
public Collection<Mark> call() throws Exception {
return dataStore.getMarks();
return dataStore.getMarks(managedRace.getRaceGroup());
}
});
}
@@ -25,6 +25,7 @@ import com.sap.sailing.domain.base.configuration.ConfigurationLoader;
import com.sap.sailing.domain.base.configuration.DeviceConfiguration;
import com.sap.sailing.domain.base.configuration.RegattaConfiguration;
import com.sap.sailing.domain.base.impl.RaceColumnFactorImpl;
import com.sap.sailing.domain.base.racegroup.RaceGroup;
import com.sap.sailing.domain.common.racelog.RaceLogServletConstants;
import com.sap.sailing.racecommittee.app.AppConstants;
import com.sap.sailing.racecommittee.app.AppPreferences;
@@ -110,9 +111,9 @@ public class OnlineDataManager extends DataManager {
}
}
public void addMarks(Collection<Mark> marks) {
public void addMarks(RaceGroup raceGroup, Collection<Mark> marks) {
for (Mark mark : marks) {
dataStore.addMark(mark);
dataStore.addMark(raceGroup, mark);
}
}
@@ -204,7 +205,7 @@ public class OnlineDataManager extends DataManager {
ExLog.i(context, TAG, "Creating marks-OnlineDataLoader " + id);
JsonDeserializer<Mark> markDeserializer = new MarkDeserializer(domainFactory);
DataParser<Collection<Mark>> parser = new MarksDataParser(markDeserializer);
DataHandler<Collection<Mark>> handler = new MarksDataHandler(OnlineDataManager.this);
DataHandler<Collection<Mark>> handler = new MarksDataHandler(OnlineDataManager.this, managedRace.getRaceGroup());
ManagedRaceIdentifier identifier = managedRace.getIdentifier();
// no parameter encoding required here; the UrlHelper.generateUrl call uses Url.Builder which handles
@@ -1,29 +1,33 @@
package com.sap.sailing.racecommittee.app.data.handlers;
import com.sap.sailing.domain.base.Mark;
import com.sap.sailing.domain.base.racegroup.RaceGroup;
import com.sap.sailing.racecommittee.app.data.OnlineDataManager;
import java.util.Collection;
import com.sap.sailing.domain.base.Mark;
import com.sap.sailing.racecommittee.app.data.OnlineDataManager;
public class MarksDataHandler extends DataHandler<Collection<Mark>> {
public MarksDataHandler(OnlineDataManager manager) {
private final RaceGroup raceGroup;
public MarksDataHandler(OnlineDataManager manager, RaceGroup raceGroup) {
super(manager);
this.raceGroup = raceGroup;
}
@Override
public boolean hasCachedResults() {
return !manager.getDataStore().getMarks().isEmpty();
return !manager.getDataStore().getMarks(raceGroup).isEmpty();
}
@Override
public Collection<Mark> getCachedResults() {
return manager.getDataStore().getMarks();
return manager.getDataStore().getMarks(raceGroup);
}
@Override
public void onResult(Collection<Mark> data, boolean isCached) {
manager.addMarks(data);
manager.addMarks(raceGroup, data);
}
}