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 9de1d2c14d6..d7d6569d082 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 @@ -50,5 +50,4 @@ public interface DataStore { UUID getCourseUUID(); void setCourseUUID(UUID uuid); - String getMapUrl(String baseUrl, ManagedRace race, String eventId, boolean showWindCharts, boolean showStreamlets, boolean showSimulation, boolean showMapControls); } 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 a01dbbc2243..4060f25ce62 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 @@ -264,20 +264,4 @@ public enum InMemoryDataStore implements DataStore { courseUUID = uuid; } - @Override - public String getMapUrl(String baseUrl, ManagedRace race, String eventId, boolean showWindCharts, boolean showStreamlets, boolean showSimulation, boolean showMapControls) { - String url = ""; - // get simple race log identifier - Util.Triple triple = FleetIdentifierImpl.unescape(race.getId()); - SimpleRaceLogIdentifier identifier = new SimpleRaceLogIdentifierImpl(triple.getA(), triple.getB(), triple.getC()); - Object [] params = {"regattaLikeName", "raceColumnName", "fleetName", "eventId", "viewShowWindChart", "viewShowStreamlets", "viewShowSimulation", "viewShowMapControls"}; - Object [] values = {identifier.getRegattaLikeParentName(), identifier.getRaceColumnName(), identifier.getFleetName(), eventId, showWindCharts, showStreamlets, showSimulation, showMapControls}; - try { - url = UrlHelper.generateUrl(baseUrl, AppConstants.GWT_MAP_AND_WIND_CHART_HTML, params, values).toString(); - } catch (MalformedURLException e) { - Log.e(TAG, "An error occured while generating the map url: " + e.getMessage()); - } - return url; - } - } 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 1d4701e43c6..0990cacc4de 100644 --- 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 @@ -242,6 +242,12 @@ public class OfflineDataManager extends DataManager { }); } + @Override + public String getMapUrl(String baseUrl, ManagedRace race, String eventId, boolean showWindCharts, boolean showStreamlets, boolean showSimulation, + boolean showMapControls) { + throw new IllegalStateException("No wind map in offline mode."); + } + @Override public LoaderCallbacks>> createPositionLoader( PositionListFragment positionListFragment) { 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 b9a81e4017a..04a391761f3 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 @@ -1,9 +1,12 @@ package com.sap.sailing.racecommittee.app.data; import java.io.Serializable; +import java.net.MalformedURLException; import java.net.URL; import java.net.URLEncoder; +import java.util.ArrayList; import java.util.Collection; +import java.util.List; import java.util.concurrent.Callable; import android.app.LoaderManager.LoaderCallbacks; @@ -11,8 +14,11 @@ import android.content.Context; import android.content.Loader; import android.os.Bundle; +import android.util.Log; import com.sap.sailing.android.shared.logging.ExLog; import com.sap.sailing.android.shared.services.sending.MessageSendingService; +import com.sap.sailing.domain.abstractlog.race.SimpleRaceLogIdentifier; +import com.sap.sailing.domain.abstractlog.race.impl.SimpleRaceLogIdentifierImpl; import com.sap.sailing.domain.base.Competitor; import com.sap.sailing.domain.base.CourseArea; import com.sap.sailing.domain.base.CourseBase; @@ -24,6 +30,8 @@ import com.sap.sailing.domain.base.configuration.DeviceConfiguration; import com.sap.sailing.domain.base.configuration.DeviceConfigurationIdentifier; import com.sap.sailing.domain.base.configuration.RegattaConfiguration; import com.sap.sailing.domain.common.racelog.RaceLogServletConstants; +import com.sap.sailing.racecommittee.app.AppConstants; +import com.sap.sailing.racecommittee.app.AppPreferences; import com.sap.sailing.racecommittee.app.data.clients.LoadClient; import com.sap.sailing.racecommittee.app.data.handlers.CompetitorsDataHandler; import com.sap.sailing.racecommittee.app.data.handlers.CourseBaseHandler; @@ -48,6 +56,7 @@ import com.sap.sailing.racecommittee.app.domain.CoursePosition; import com.sap.sailing.racecommittee.app.domain.ManagedRace; import com.sap.sailing.racecommittee.app.domain.ManagedRaceIdentifier; import com.sap.sailing.racecommittee.app.domain.configuration.impl.PreferencesRegattaConfigurationLoader; +import com.sap.sailing.racecommittee.app.domain.impl.FleetIdentifierImpl; import com.sap.sailing.racecommittee.app.ui.fragments.lists.PositionListFragment; import com.sap.sailing.racecommittee.app.utils.UrlHelper; import com.sap.sailing.server.gateway.deserialization.JsonDeserializer; @@ -69,6 +78,7 @@ import com.sap.sailing.server.gateway.deserialization.impl.RegattaConfigurationJ import com.sap.sailing.server.gateway.deserialization.impl.TeamJsonDeserializer; import com.sap.sailing.server.gateway.deserialization.impl.VenueJsonDeserializer; import com.sap.sailing.server.gateway.deserialization.racegroup.impl.RaceGroupDeserializer; +import com.sap.sse.common.Util; /** * Enables accessing of data. @@ -112,7 +122,7 @@ public class OnlineDataManager extends DataManager { // ExLog.i(context, TAG, "getEventsLoader created new loader..."); - URL url = UrlHelper.generateUrl(preferences.getServerBaseURL(), "/sailingserver/events", new String[0], new Object[0]); + URL url = UrlHelper.generateUrl(preferences.getServerBaseURL(), "/sailingserver/events", new ArrayList()); return new OnlineDataLoader>(context, url, parser, handler); } @@ -168,10 +178,10 @@ public class OnlineDataManager extends DataManager { globalConfiguration, RaceGroupDeserializer.create(domainFactory, RegattaConfigurationJsonDeserializer.create())); DataHandler> handler = new ManagedRacesDataHandler(OnlineDataManager.this); - - Object[] params = {RaceLogServletConstants.PARAM_COURSE_AREA_FILTER, RaceLogServletConstants.PARAMS_CLIENT_UUID}; - Object[] values = {courseAreaId.toString(), MessageSendingService.uuid}; - URL url = UrlHelper.generateUrl(preferences.getServerBaseURL(), "/sailingserver/rc/racegroups",params, values); + List params = new ArrayList<>(); + params.add(new Util.Pair(RaceLogServletConstants.PARAM_COURSE_AREA_FILTER, courseAreaId.toString())); + params.add(new Util.Pair(RaceLogServletConstants.PARAMS_CLIENT_UUID, MessageSendingService.uuid)); + URL url = UrlHelper.generateUrl(preferences.getServerBaseURL(), "/sailingserver/rc/racegroups",params); return new OnlineDataLoader>(context, url, parser, handler); } }, getContext()); @@ -194,11 +204,11 @@ public class OnlineDataManager extends DataManager { String raceColumnName = URLEncoder.encode(identifier.getRaceName(), MessageSendingService.charsetName); String fleetName = URLEncoder.encode(identifier.getFleet().getName(), MessageSendingService.charsetName); - Object[] params = {RaceLogServletConstants.PARAMS_LEADERBOARD_NAME, - RaceLogServletConstants.PARAMS_RACE_COLUMN_NAME, - RaceLogServletConstants.PARAMS_RACE_FLEET_NAME}; - Object[] values = {raceGroupName, raceColumnName, fleetName}; - URL url = UrlHelper.generateUrl(preferences.getServerBaseURL(), "/sailingserver/rc/marks", params, values); + List params = new ArrayList<>(); + params.add(new Util.Pair(RaceLogServletConstants.PARAMS_LEADERBOARD_NAME, raceGroupName)); + params.add(new Util.Pair(RaceLogServletConstants.PARAMS_RACE_COLUMN_NAME, raceColumnName)); + params.add(new Util.Pair(RaceLogServletConstants.PARAMS_RACE_FLEET_NAME, fleetName)); + URL url = UrlHelper.generateUrl(preferences.getServerBaseURL(), "/sailingserver/rc/marks", params); return new OnlineDataLoader>(context, url, parser, handler); } }, getContext()); @@ -223,11 +233,11 @@ public class OnlineDataManager extends DataManager { String raceColumnName = URLEncoder.encode(identifier.getRaceName(), MessageSendingService.charsetName); String fleetName = URLEncoder.encode(identifier.getFleet().getName(), MessageSendingService.charsetName); - Object[] params = {RaceLogServletConstants.PARAMS_LEADERBOARD_NAME, - RaceLogServletConstants.PARAMS_RACE_COLUMN_NAME, - RaceLogServletConstants.PARAMS_RACE_FLEET_NAME}; - Object[] values = {raceGroupName, raceColumnName, fleetName}; - URL url = UrlHelper.generateUrl(preferences.getServerBaseURL(), "/sailingserver/rc/currentcourse", params, values); + List params = new ArrayList<>(); + params.add(new Util.Pair(RaceLogServletConstants.PARAMS_LEADERBOARD_NAME, raceGroupName)); + params.add(new Util.Pair(RaceLogServletConstants.PARAMS_RACE_COLUMN_NAME, raceColumnName)); + params.add(new Util.Pair(RaceLogServletConstants.PARAMS_RACE_FLEET_NAME, fleetName)); + URL url = UrlHelper.generateUrl(preferences.getServerBaseURL(), "/sailingserver/rc/currentcourse", params); return new OnlineDataLoader(context, url, parser, handler); } @@ -255,11 +265,11 @@ public class OnlineDataManager extends DataManager { String raceColumnName = URLEncoder.encode(identifier.getRaceName(), MessageSendingService.charsetName); String fleetName = URLEncoder.encode(identifier.getFleet().getName(), MessageSendingService.charsetName); - Object[] params = {RaceLogServletConstants.PARAMS_LEADERBOARD_NAME, - RaceLogServletConstants.PARAMS_RACE_COLUMN_NAME, - RaceLogServletConstants.PARAMS_RACE_FLEET_NAME}; - Object[] values = {raceGroupName, raceColumnName, fleetName}; - URL url = UrlHelper.generateUrl(preferences.getServerBaseURL(), "/sailingserver/rc/competitors", params, values); + List params = new ArrayList<>(); + params.add(new Util.Pair(RaceLogServletConstants.PARAMS_LEADERBOARD_NAME, raceGroupName)); + params.add(new Util.Pair(RaceLogServletConstants.PARAMS_RACE_COLUMN_NAME, raceColumnName)); + params.add(new Util.Pair(RaceLogServletConstants.PARAMS_RACE_FLEET_NAME, fleetName)); + URL url = UrlHelper.generateUrl(preferences.getServerBaseURL(), "/sailingserver/rc/competitors", params); return new OnlineDataLoader>(context, url, parser, handler); } }, getContext()); @@ -280,9 +290,9 @@ public class OnlineDataManager extends DataManager { String encodedIdentifier = URLEncoder.encode(identifier.getClientIdentifier(), MessageSendingService.charsetName); encodedIdentifier = encodedIdentifier.replace("+", "%20"); - Object[] params = {"client"}; - Object[] values = {encodedIdentifier}; - URL url = UrlHelper.generateUrl(preferences.getServerBaseURL(), "/sailingserver/rc/configuration", params, values); + List params = new ArrayList<>(); + params.add(new Util.Pair("client", encodedIdentifier)); + URL url = UrlHelper.generateUrl(preferences.getServerBaseURL(), "/sailingserver/rc/configuration", params); return new OnlineDataLoader(context, url, parser, handler); } @@ -295,4 +305,30 @@ public class OnlineDataManager extends DataManager { // TODO Auto-generated method stub return null; } + + @Override + public String getMapUrl(String baseUrl, ManagedRace race, String eventId, boolean showWindCharts, boolean showStreamlets, boolean showSimulation, boolean showMapControls) { + String url = ""; + // get simple race log identifier + Util.Triple triple = FleetIdentifierImpl.unescape(race.getId()); + SimpleRaceLogIdentifier identifier = new SimpleRaceLogIdentifierImpl(triple.getA(), triple.getB(), triple.getC()); + List params = new ArrayList<>(); + params.add(new Util.Pair("regattaLikeName", identifier.getRegattaLikeParentName())); + params.add(new Util.Pair("raceColumnName", identifier.getRaceColumnName())); + params.add(new Util.Pair("fleetName", identifier.getFleetName())); + params.add(new Util.Pair("eventId", eventId)); + params.add(new Util.Pair("viewShowWindChart", showWindCharts)); + params.add(new Util.Pair("viewShowStreamlets", showStreamlets)); + params.add(new Util.Pair("viewShowSimulation", showSimulation)); + params.add(new Util.Pair("viewShowMapControls", showMapControls)); + + try { + url = UrlHelper.generateUrl(AppPreferences.on(context).getServerBaseURL(), AppConstants.GWT_MAP_AND_WIND_CHART_HTML, params).toString(); + } catch (MalformedURLException e) { + Log.e(TAG, "An error occured while generating the map url: " + e.getMessage()); + } + return url; + } + + } diff --git a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/data/ReadonlyDataManager.java b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/data/ReadonlyDataManager.java index da5f612fb1a..ea356c3090d 100644 --- a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/data/ReadonlyDataManager.java +++ b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/data/ReadonlyDataManager.java @@ -149,4 +149,6 @@ public interface ReadonlyDataManager { */ public LoaderCallbacks> createConfigurationLoader(DeviceConfigurationIdentifier identifier, LoadClient callback); + + public String getMapUrl(String baseUrl, ManagedRace race, String eventId, boolean showWindCharts, boolean showStreamlets, boolean showSimulation, boolean showMapControls); } diff --git a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/utils/UrlHelper.java b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/utils/UrlHelper.java index 26898a5f917..3fbab1d4029 100644 --- a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/utils/UrlHelper.java +++ b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/utils/UrlHelper.java @@ -1,16 +1,18 @@ package com.sap.sailing.racecommittee.app.utils; import android.net.Uri; +import com.sap.sse.common.Util; import java.net.MalformedURLException; import java.net.URL; +import java.util.List; public class UrlHelper { - public static URL generateUrl(String baseURL, String path, Object[] params, Object[] values) throws MalformedURLException { + public static URL generateUrl(String baseURL, String path, List params) throws MalformedURLException { Uri.Builder builder = Uri.parse(baseURL).buildUpon(); builder.path(path); - for (int index = 0; index < params.length; index++){ - builder.appendQueryParameter("" + params[index], "" + values[index]); + for (Util.Pair param : params){ + builder.appendQueryParameter("" + param.getA(), "" + param.getB()); } return new URL(builder.build().toString()); } diff --git a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/utils/WindHelper.java b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/utils/WindHelper.java index 171368ae255..1c734dc31e9 100644 --- a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/utils/WindHelper.java +++ b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/utils/WindHelper.java @@ -11,6 +11,7 @@ import com.sap.sailing.racecommittee.app.AppPreferences; import com.sap.sailing.racecommittee.app.data.DataManager; import com.sap.sailing.racecommittee.app.data.DataStore; import com.sap.sailing.racecommittee.app.data.OnlineDataManager; +import com.sap.sailing.racecommittee.app.data.ReadonlyDataManager; import com.sap.sailing.racecommittee.app.domain.ManagedRace; import com.sap.sailing.racecommittee.app.domain.impl.FleetIdentifierImpl; import com.sap.sse.common.Util; @@ -20,6 +21,8 @@ import org.json.JSONObject; import java.net.MalformedURLException; import java.net.URL; +import java.util.ArrayList; +import java.util.List; public class WindHelper { private static String TAG = WindHelper.class.getName(); @@ -28,7 +31,9 @@ public class WindHelper { try { Util.Triple triple = FleetIdentifierImpl.unescape(race.getId()); String path = "/sailingserver/api/v1/events/"+ getEventId(context) + "/racestates"; - URL serverUrl = UrlHelper.generateUrl(getBaseUrl(context), path, new Object[]{"filterByLeaderboard"}, new Object[]{triple.getA()}); + List params = new ArrayList<>(); + params.add(new Util.Pair("filterByLeaderboard", triple.getA())); + URL serverUrl = UrlHelper.generateUrl(getBaseUrl(context), path, params); HttpGetRequest request = new HttpGetRequest(serverUrl, context); NetworkHelper.getInstance(context).executeHttpJsonRequestAsnchronously(request, new NetworkHelper.NetworkHelperSuccessListener() { @@ -89,7 +94,7 @@ public class WindHelper { } public static String generateMapURL(Context context, ManagedRace race ,boolean showWindCharts, boolean showStreamlets, boolean showSimulation, boolean showMapControls){ - DataStore dataStore = OnlineDataManager.create(context).getDataStore(); - return dataStore.getMapUrl(AppPreferences.on(context).getServerBaseURL(), race, getEventId(context), showWindCharts, showStreamlets, showSimulation, showMapControls); + ReadonlyDataManager dataManager = OnlineDataManager.create(context); + return dataManager.getMapUrl(AppPreferences.on(context).getServerBaseURL(), race, getEventId(context), showWindCharts, showStreamlets, showSimulation, showMapControls); } }