From 50acdbbc5ab85402aff2642e4a89b85113160b4f Mon Sep 17 00:00:00 2001 From: Robert Benedikt Date: Fri, 10 May 2019 10:19:36 +0200 Subject: [PATCH] Cache marks per race group --- .../racecommittee/app/data/DataStore.java | 8 ++--- .../app/data/InMemoryDataStore.java | 35 +++++++++++++------ .../app/data/OfflineDataManager.java | 8 ++--- .../app/data/OnlineDataManager.java | 7 ++-- .../app/data/handlers/MarksDataHandler.java | 18 ++++++---- 5 files changed, 47 insertions(+), 29 deletions(-) diff --git a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/data/DataStore.java b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/data/DataStore.java index fabcbb3cf25..c7763694a1b 100644 --- a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/data/DataStore.java +++ b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/data/DataStore.java @@ -58,13 +58,13 @@ public interface DataStore { void registerRaces(Collection races); - Collection getMarks(); + Collection 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); diff --git a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/data/InMemoryDataStore.java b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/data/InMemoryDataStore.java index 709868b0a72..73263c481b0 100644 --- a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/data/InMemoryDataStore.java +++ b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/data/InMemoryDataStore.java @@ -36,7 +36,7 @@ public enum InMemoryDataStore implements DataStore { private Context mContext; private LinkedHashMap eventsById; private LinkedHashMap managedRaceById; - private LinkedHashMap marksById; + private LinkedHashMap> marksData; private LinkedHashMap 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 getMarks() { - return marksById.values(); + private LinkedHashMap getMarksByRaceGroup(RaceGroup raceGroup) { + LinkedHashMap marks = marksData.get(raceGroup); + if (marks == null) { + marks = new LinkedHashMap<>(); + marksData.put(raceGroup, marks); + } + return marks; + } + + private void setMarksByRaceGroup(RaceGroup raceGroup, LinkedHashMap marks) { + marksData.put(raceGroup, marks); } @Override - public Mark getMark(Serializable id) { - return marksById.get(id); + public Collection 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 diff --git a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/data/OfflineDataManager.java b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/data/OfflineDataManager.java index 2086b6719f7..b2542d3f007 100755 --- a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/data/OfflineDataManager.java +++ b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/data/OfflineDataManager.java @@ -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>(context, callback, new Callable>() { @Override public Collection call() throws Exception { - return dataStore.getMarks(); + return dataStore.getMarks(managedRace.getRaceGroup()); } }); } diff --git a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/data/OnlineDataManager.java b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/data/OnlineDataManager.java index 8484138d974..773dd8eff46 100755 --- a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/data/OnlineDataManager.java +++ b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/data/OnlineDataManager.java @@ -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 marks) { + public void addMarks(RaceGroup raceGroup, Collection 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 markDeserializer = new MarkDeserializer(domainFactory); DataParser> parser = new MarksDataParser(markDeserializer); - DataHandler> handler = new MarksDataHandler(OnlineDataManager.this); + DataHandler> 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 diff --git a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/data/handlers/MarksDataHandler.java b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/data/handlers/MarksDataHandler.java index 49d5ad05882..6a6e31727a5 100644 --- a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/data/handlers/MarksDataHandler.java +++ b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/data/handlers/MarksDataHandler.java @@ -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> { - 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 getCachedResults() { - return manager.getDataStore().getMarks(); + return manager.getDataStore().getMarks(raceGroup); } @Override public void onResult(Collection data, boolean isCached) { - manager.addMarks(data); + manager.addMarks(raceGroup, data); } }