From 3e903e2a2787d352e09d79b6d2eae725ecdc3833 Mon Sep 17 00:00:00 2001 From: Lukas Niemeier Date: Wed, 31 Jul 2013 00:41:10 +0200 Subject: [PATCH] renamed CourseDataDeserializer to CourseBaseDeserializer --- ...ourseDesignChangedEventSerializerTest.java | 4 +- ...lizer.java => CourseBaseDeserializer.java} | 92 +++++++-------- ...gCourseDesignChangedEventDeserializer.java | 6 +- .../impl/RaceLogEventDeserializer.java | 4 +- .../app/data/OnlineDataManager.java | 8 +- .../app/data/handlers/MarksDataHandler.java | 10 ++ ...eDataParser.java => CourseBaseParser.java} | 4 +- .../app/ui/activities/RacingActivity.java | 111 +++++++++--------- 8 files changed, 126 insertions(+), 113 deletions(-) rename java/com.sap.sailing.server.gateway.serialization/src/com/sap/sailing/server/gateway/deserialization/coursedata/impl/{CourseDataDeserializer.java => CourseBaseDeserializer.java} (90%) rename mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/data/parsers/{CourseDataParser.java => CourseBaseParser.java} (86%) diff --git a/java/com.sap.sailing.server.gateway.serialization.test/src/com/sap/sailing/server/gateway/serialization/test/racelog/RaceLogCourseDesignChangedEventSerializerTest.java b/java/com.sap.sailing.server.gateway.serialization.test/src/com/sap/sailing/server/gateway/serialization/test/racelog/RaceLogCourseDesignChangedEventSerializerTest.java index 6f89ef59867..e8ad1921d4c 100644 --- a/java/com.sap.sailing.server.gateway.serialization.test/src/com/sap/sailing/server/gateway/serialization/test/racelog/RaceLogCourseDesignChangedEventSerializerTest.java +++ b/java/com.sap.sailing.server.gateway.serialization.test/src/com/sap/sailing/server/gateway/serialization/test/racelog/RaceLogCourseDesignChangedEventSerializerTest.java @@ -28,7 +28,7 @@ import com.sap.sailing.domain.racelog.RaceLogCourseDesignChangedEvent; import com.sap.sailing.domain.racelog.RaceLogEventFactory; import com.sap.sailing.server.gateway.deserialization.JsonDeserializationException; import com.sap.sailing.server.gateway.deserialization.coursedata.impl.ControlPointDeserializer; -import com.sap.sailing.server.gateway.deserialization.coursedata.impl.CourseDataDeserializer; +import com.sap.sailing.server.gateway.deserialization.coursedata.impl.CourseBaseDeserializer; import com.sap.sailing.server.gateway.deserialization.coursedata.impl.GateDeserializer; import com.sap.sailing.server.gateway.deserialization.coursedata.impl.MarkDeserializer; import com.sap.sailing.server.gateway.deserialization.coursedata.impl.WaypointDeserializer; @@ -61,7 +61,7 @@ public class RaceLogCourseDesignChangedEventSerializerTest { new CourseBaseJsonSerializer(new WaypointJsonSerializer(new ControlPointJsonSerializer( new MarkJsonSerializer(), new GateJsonSerializer(new MarkJsonSerializer()))))); deserializer = new RaceLogCourseDesignChangedEventDeserializer(new CompetitorDeserializer(factory), - new CourseDataDeserializer(new WaypointDeserializer(new ControlPointDeserializer(new MarkDeserializer( + new CourseBaseDeserializer(new WaypointDeserializer(new ControlPointDeserializer(new MarkDeserializer( factory), new GateDeserializer(factory, new MarkDeserializer(factory)))))); now = MillisecondsTimePoint.now(); diff --git a/java/com.sap.sailing.server.gateway.serialization/src/com/sap/sailing/server/gateway/deserialization/coursedata/impl/CourseDataDeserializer.java b/java/com.sap.sailing.server.gateway.serialization/src/com/sap/sailing/server/gateway/deserialization/coursedata/impl/CourseBaseDeserializer.java similarity index 90% rename from java/com.sap.sailing.server.gateway.serialization/src/com/sap/sailing/server/gateway/deserialization/coursedata/impl/CourseDataDeserializer.java rename to java/com.sap.sailing.server.gateway.serialization/src/com/sap/sailing/server/gateway/deserialization/coursedata/impl/CourseBaseDeserializer.java index b8d25056913..00f2ccb6991 100644 --- a/java/com.sap.sailing.server.gateway.serialization/src/com/sap/sailing/server/gateway/deserialization/coursedata/impl/CourseDataDeserializer.java +++ b/java/com.sap.sailing.server.gateway.serialization/src/com/sap/sailing/server/gateway/deserialization/coursedata/impl/CourseBaseDeserializer.java @@ -1,47 +1,47 @@ -package com.sap.sailing.server.gateway.deserialization.coursedata.impl; - -import java.util.ArrayList; -import java.util.List; - -import org.json.simple.JSONArray; -import org.json.simple.JSONObject; - -import com.sap.sailing.domain.base.CourseBase; -import com.sap.sailing.domain.base.Waypoint; -import com.sap.sailing.domain.base.impl.CourseDataImpl; -import com.sap.sailing.server.gateway.deserialization.JsonDeserializationException; -import com.sap.sailing.server.gateway.deserialization.JsonDeserializer; -import com.sap.sailing.server.gateway.serialization.coursedata.impl.CourseBaseJsonSerializer; - -/** - * Deserializer for CourseData. - */ -public class CourseDataDeserializer implements JsonDeserializer { - - private final WaypointDeserializer waypointDeserializer; - - public CourseDataDeserializer(WaypointDeserializer waypointDeserializer) { - this.waypointDeserializer = waypointDeserializer; - } - - @Override - public CourseBase deserialize(JSONObject object) throws JsonDeserializationException { - String courseName = (String) object.get(CourseBaseJsonSerializer.FIELD_NAME); - JSONArray jsonWaypoints = (JSONArray) object.get(CourseBaseJsonSerializer.FIELD_WAYPOINTS); - List waypoints = new ArrayList(); - - for (Object waypointObject : jsonWaypoints) { - JSONObject jsonWaypoint = (JSONObject) waypointObject; - Waypoint waypoint = waypointDeserializer.deserialize(jsonWaypoint); - waypoints.add(waypoint); - } - - CourseBase courseBase = new CourseDataImpl(courseName); - for (int i = 0; i < waypoints.size(); i++) { - courseBase.addWaypoint(i, waypoints.get(i)); - } - - return courseBase; - } - +package com.sap.sailing.server.gateway.deserialization.coursedata.impl; + +import java.util.ArrayList; +import java.util.List; + +import org.json.simple.JSONArray; +import org.json.simple.JSONObject; + +import com.sap.sailing.domain.base.CourseBase; +import com.sap.sailing.domain.base.Waypoint; +import com.sap.sailing.domain.base.impl.CourseDataImpl; +import com.sap.sailing.server.gateway.deserialization.JsonDeserializationException; +import com.sap.sailing.server.gateway.deserialization.JsonDeserializer; +import com.sap.sailing.server.gateway.serialization.coursedata.impl.CourseBaseJsonSerializer; + +/** + * Deserializer for CourseData. + */ +public class CourseBaseDeserializer implements JsonDeserializer { + + private final WaypointDeserializer waypointDeserializer; + + public CourseBaseDeserializer(WaypointDeserializer waypointDeserializer) { + this.waypointDeserializer = waypointDeserializer; + } + + @Override + public CourseBase deserialize(JSONObject object) throws JsonDeserializationException { + String courseName = (String) object.get(CourseBaseJsonSerializer.FIELD_NAME); + JSONArray jsonWaypoints = (JSONArray) object.get(CourseBaseJsonSerializer.FIELD_WAYPOINTS); + List waypoints = new ArrayList(); + + for (Object waypointObject : jsonWaypoints) { + JSONObject jsonWaypoint = (JSONObject) waypointObject; + Waypoint waypoint = waypointDeserializer.deserialize(jsonWaypoint); + waypoints.add(waypoint); + } + + CourseBase courseBase = new CourseDataImpl(courseName); + for (int i = 0; i < waypoints.size(); i++) { + courseBase.addWaypoint(i, waypoints.get(i)); + } + + return courseBase; + } + } \ No newline at end of file diff --git a/java/com.sap.sailing.server.gateway.serialization/src/com/sap/sailing/server/gateway/deserialization/racelog/impl/RaceLogCourseDesignChangedEventDeserializer.java b/java/com.sap.sailing.server.gateway.serialization/src/com/sap/sailing/server/gateway/deserialization/racelog/impl/RaceLogCourseDesignChangedEventDeserializer.java index 3a4e5dacd6d..bea7e0d2c9b 100644 --- a/java/com.sap.sailing.server.gateway.serialization/src/com/sap/sailing/server/gateway/deserialization/racelog/impl/RaceLogCourseDesignChangedEventDeserializer.java +++ b/java/com.sap.sailing.server.gateway.serialization/src/com/sap/sailing/server/gateway/deserialization/racelog/impl/RaceLogCourseDesignChangedEventDeserializer.java @@ -11,14 +11,14 @@ import com.sap.sailing.domain.common.TimePoint; import com.sap.sailing.domain.racelog.RaceLogEvent; import com.sap.sailing.server.gateway.deserialization.JsonDeserializationException; import com.sap.sailing.server.gateway.deserialization.JsonDeserializer; -import com.sap.sailing.server.gateway.deserialization.coursedata.impl.CourseDataDeserializer; +import com.sap.sailing.server.gateway.deserialization.coursedata.impl.CourseBaseDeserializer; import com.sap.sailing.server.gateway.serialization.racelog.impl.RaceLogCourseDesignChangedEventSerializer; public class RaceLogCourseDesignChangedEventDeserializer extends BaseRaceLogEventDeserializer { - private final CourseDataDeserializer courseDataDeserializer; + private final CourseBaseDeserializer courseDataDeserializer; - public RaceLogCourseDesignChangedEventDeserializer(JsonDeserializer competitorDeserializer, CourseDataDeserializer courseDataDeserializer) { + public RaceLogCourseDesignChangedEventDeserializer(JsonDeserializer competitorDeserializer, CourseBaseDeserializer courseDataDeserializer) { super(competitorDeserializer); this.courseDataDeserializer = courseDataDeserializer; } diff --git a/java/com.sap.sailing.server.gateway.serialization/src/com/sap/sailing/server/gateway/deserialization/racelog/impl/RaceLogEventDeserializer.java b/java/com.sap.sailing.server.gateway.serialization/src/com/sap/sailing/server/gateway/deserialization/racelog/impl/RaceLogEventDeserializer.java index 155e392b036..0114c34a976 100644 --- a/java/com.sap.sailing.server.gateway.serialization/src/com/sap/sailing/server/gateway/deserialization/racelog/impl/RaceLogEventDeserializer.java +++ b/java/com.sap.sailing.server.gateway.serialization/src/com/sap/sailing/server/gateway/deserialization/racelog/impl/RaceLogEventDeserializer.java @@ -8,7 +8,7 @@ import com.sap.sailing.domain.racelog.RaceLogEvent; import com.sap.sailing.server.gateway.deserialization.JsonDeserializationException; import com.sap.sailing.server.gateway.deserialization.JsonDeserializer; import com.sap.sailing.server.gateway.deserialization.coursedata.impl.ControlPointDeserializer; -import com.sap.sailing.server.gateway.deserialization.coursedata.impl.CourseDataDeserializer; +import com.sap.sailing.server.gateway.deserialization.coursedata.impl.CourseBaseDeserializer; import com.sap.sailing.server.gateway.deserialization.coursedata.impl.GateDeserializer; import com.sap.sailing.server.gateway.deserialization.coursedata.impl.MarkDeserializer; import com.sap.sailing.server.gateway.deserialization.coursedata.impl.WaypointDeserializer; @@ -40,7 +40,7 @@ public class RaceLogEventDeserializer implements JsonDeserializer new RaceLogRaceStatusEventDeserializer(competitorDeserializer), new RaceLogCourseAreaChangedEventDeserializer(competitorDeserializer), new RaceLogCourseDesignChangedEventDeserializer(competitorDeserializer, - new CourseDataDeserializer( + new CourseBaseDeserializer( new WaypointDeserializer( new ControlPointDeserializer( new MarkDeserializer(domainFactory), new GateDeserializer(domainFactory, new MarkDeserializer(domainFactory)))))), 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 31878bd1180..f276aab0755 100644 --- 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 @@ -32,7 +32,7 @@ import com.sap.sailing.racecommittee.app.data.loaders.DataLoaderResult; import com.sap.sailing.racecommittee.app.data.loaders.ImmediateDataLoaderCallbacks; import com.sap.sailing.racecommittee.app.data.loaders.OnlineDataLoader; import com.sap.sailing.racecommittee.app.data.parsers.CompetitorsDataParser; -import com.sap.sailing.racecommittee.app.data.parsers.CourseDataParser; +import com.sap.sailing.racecommittee.app.data.parsers.CourseBaseParser; 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; @@ -43,7 +43,7 @@ import com.sap.sailing.racecommittee.app.domain.impl.DomainFactoryImpl; import com.sap.sailing.racecommittee.app.logging.ExLog; import com.sap.sailing.server.gateway.deserialization.JsonDeserializer; import com.sap.sailing.server.gateway.deserialization.coursedata.impl.ControlPointDeserializer; -import com.sap.sailing.server.gateway.deserialization.coursedata.impl.CourseDataDeserializer; +import com.sap.sailing.server.gateway.deserialization.coursedata.impl.CourseBaseDeserializer; import com.sap.sailing.server.gateway.deserialization.coursedata.impl.GateDeserializer; import com.sap.sailing.server.gateway.deserialization.coursedata.impl.MarkDeserializer; import com.sap.sailing.server.gateway.deserialization.coursedata.impl.WaypointDeserializer; @@ -182,10 +182,10 @@ public class OnlineDataManager extends DataManager { @Override public Loader> create(int id, Bundle args) throws Exception { SharedDomainFactory domainFactory = DomainFactoryImpl.INSTANCE; - JsonDeserializer courseBaseDeserializer = new CourseDataDeserializer( + JsonDeserializer courseBaseDeserializer = new CourseBaseDeserializer( new WaypointDeserializer(new ControlPointDeserializer(new MarkDeserializer(domainFactory), new GateDeserializer(domainFactory, new MarkDeserializer(domainFactory))))); - DataParser parser = new CourseDataParser(courseBaseDeserializer); + DataParser parser = new CourseBaseParser(courseBaseDeserializer); DataHandler handler = new CourseDataHandler(OnlineDataManager.this, managedRace); ManagedRaceIdentifier identifier = managedRace.getIdentifier(); 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 e3daa435df5..4e2f0af96e6 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 @@ -10,6 +10,16 @@ public class MarksDataHandler extends DataHandler> { public MarksDataHandler(OnlineDataManager manager) { super(manager); } + + @Override + public boolean hasCachedResults() { + return !manager.getDataStore().getMarks().isEmpty(); + } + + @Override + public Collection getCachedResults() { + return manager.getDataStore().getMarks(); + } @Override public void onResult(Collection data) { diff --git a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/data/parsers/CourseDataParser.java b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/data/parsers/CourseBaseParser.java similarity index 86% rename from mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/data/parsers/CourseDataParser.java rename to mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/data/parsers/CourseBaseParser.java index 5f2ab06bbf1..3740cb1b9ac 100644 --- a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/data/parsers/CourseDataParser.java +++ b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/data/parsers/CourseBaseParser.java @@ -9,11 +9,11 @@ import com.sap.sailing.domain.base.CourseBase; import com.sap.sailing.server.gateway.deserialization.JsonDeserializer; import com.sap.sailing.server.gateway.deserialization.impl.Helpers; -public class CourseDataParser implements DataParser { +public class CourseBaseParser implements DataParser { private JsonDeserializer deserializer; - public CourseDataParser(JsonDeserializer deserializer) { + public CourseBaseParser(JsonDeserializer deserializer) { this.deserializer = deserializer; } diff --git a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/activities/RacingActivity.java b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/activities/RacingActivity.java index abad18efee2..1d825da45b1 100644 --- a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/activities/RacingActivity.java +++ b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/activities/RacingActivity.java @@ -39,6 +39,8 @@ public class RacingActivity extends SessionActivity implements RaceInfoListener private static final String TAG = RacingActivity.class.getName(); + private static final int RacesLoaderId = 0; + private class FilterModeSelectionBinder implements OnNavigationListener { private ManagedRaceListFragment targetList; @@ -69,6 +71,59 @@ public class RacingActivity extends SessionActivity implements RaceInfoListener } } + private class RaceLoadClient implements LoadClient> { + + private Collection lastSeenRaces = null; + private CourseArea courseArea; + + public RaceLoadClient(CourseArea courseArea) { + this.courseArea = courseArea; + } + + @Override + public void onLoadSucceded(Collection data) { + setProgressBarIndeterminateVisibility(false); + + // Let's do the setup stuff only when the data is changed (or its the first time) + if (lastSeenRaces != null && CollectionUtils.isEqualCollection(data, lastSeenRaces)) { + ExLog.i(TAG, "Same races are already loaded..."); + } else { + lastSeenRaces = data; + + registerOnService(data); + raceListFragment.setupOn(data); + + Toast.makeText(RacingActivity.this, + String.format(getString(R.string.racing_load_success), data.size()), Toast.LENGTH_SHORT).show(); + } + } + + @Override + public void onLoadFailed(Exception reason) { + setProgressBarIndeterminateVisibility(false); + + AlertDialog.Builder builder = new AlertDialog.Builder(RacingActivity.this); + builder.setMessage(String.format(getString(R.string.generic_load_failure), reason.getMessage())) + .setTitle(getString(R.string.loading_failure)).setIcon(R.drawable.ic_dialog_alert_holo_light) + .setCancelable(true) + .setPositiveButton(getString(R.string.retry), new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int id) { + setProgressBarIndeterminateVisibility(true); + + ExLog.i(TAG, "Issuing a reload of managed races"); + getLoaderManager().restartLoader(RacesLoaderId, null, + dataManager.getRacesLoader(courseArea.getId(), RaceLoadClient.this)); + dialog.cancel(); + } + }).setNegativeButton(getString(R.string.cancel), new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int id) { + dialog.cancel(); + } + }); + builder.create().show(); + } + }; + /** * Selection list of all races */ @@ -160,40 +215,8 @@ public class RacingActivity extends SessionActivity implements RaceInfoListener setProgressBarIndeterminateVisibility(true); ExLog.i(TAG, "Issuing loading of managed races from data manager"); - getLoaderManager().initLoader(0, null, - dataManager.getRacesLoader(courseArea.getId(), new LoadClient>() { - public void onLoadSucceded(Collection data) { - onLoadRacesSucceded(courseArea, data); - } - - public void onLoadFailed(Exception reason) { - onLoadRacesFailed(courseArea, reason); - } - })); - } - - Collection lastSeenRaces = null; - - private void onLoadRacesSucceded(CourseArea courseArea, Collection data) { - setProgressBarIndeterminateVisibility(false); - - // Let's do the setup stuff only when the data is changed (or its the first time) - if (lastSeenRaces != null && CollectionUtils.isEqualCollection(data, lastSeenRaces)) { - ExLog.i(TAG, "Same races are already loaded..."); - return; - } - lastSeenRaces = data; - - registerOnService(data); - raceListFragment.setupOn(data); - - Toast.makeText(RacingActivity.this, String.format(getString(R.string.racing_load_success), data.size()), - Toast.LENGTH_SHORT).show(); - } - - private void onLoadRacesFailed(final CourseArea courseArea, Exception reason) { - setProgressBarIndeterminateVisibility(false); - showLoadFailedDialog(courseArea, reason.getMessage()); + getLoaderManager().initLoader(RacesLoaderId, null, + dataManager.getRacesLoader(courseArea.getId(), new RaceLoadClient(courseArea))); } private void registerOnService(Collection races) { @@ -207,26 +230,6 @@ public class RacingActivity extends SessionActivity implements RaceInfoListener } } - private void showLoadFailedDialog(final CourseArea courseArea, String message) { - AlertDialog.Builder builder = new AlertDialog.Builder(this); - builder.setMessage(String.format(getString(R.string.generic_load_failure), message)) - .setTitle(getString(R.string.loading_failure)).setIcon(R.drawable.ic_dialog_alert_holo_light) - .setCancelable(true) - .setPositiveButton(getString(R.string.retry), new DialogInterface.OnClickListener() { - public void onClick(DialogInterface dialog, int id) { - loadRaces(courseArea); - } - }).setNegativeButton(getString(R.string.cancel), new DialogInterface.OnClickListener() { - public void onClick(DialogInterface dialog, int id) { - dialog.cancel(); - } - }); - if (!isFinishing()) { - AlertDialog alert = builder.create(); - alert.show(); - } - } - public void onRaceItemClicked(ManagedRace managedRace) { infoFragment = new RaceInfoFragment(); infoFragment.setArguments(RaceFragment.createArguments(managedRace));