From 85286fd2bf4251d7fa10347e2f209a6cd81f438a Mon Sep 17 00:00:00 2001 From: Vladislav Chumak Date: Tue, 8 Nov 2016 17:06:39 +0100 Subject: [PATCH] bug3529 Moved UserSettingsStorageManager to gwt.ui. Replaced userService mockup with real UserService access --- .../client/place/player/PlayerActivity.java | 4 +- ...LeaderboardWithHeaderComponentContext.java | 7 +- .../client}/UserSettingsStorageManager.java | 217 +++++++++--------- .../raceboard/RaceBoardComponentContext.java | 7 +- .../gwt/ui/raceboard/RaceBoardEntryPoint.java | 2 +- .../sse/security/ui/client/UserService.java | 30 +-- 6 files changed, 127 insertions(+), 140 deletions(-) rename java/{com.sap.sse.gwt/src/com/sap/sse/gwt/client/shared/perspective => com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/common/client}/UserSettingsStorageManager.java (67%) diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/autoplay/client/place/player/PlayerActivity.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/autoplay/client/place/player/PlayerActivity.java index 8b8a7bcff6a..4de9fa11b86 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/autoplay/client/place/player/PlayerActivity.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/autoplay/client/place/player/PlayerActivity.java @@ -63,8 +63,8 @@ public class PlayerActivity extends AbstractActivity { LeaderboardWithHeaderPerspectiveLifecycle leaderboardPerspectiveLifecycle = new LeaderboardWithHeaderPerspectiveLifecycle(leaderBoardDTO, StringMessages.INSTANCE); RaceBoardPerspectiveLifecycle raceboardPerspectiveLifecycle = new RaceBoardPerspectiveLifecycle(leaderBoardDTO, StringMessages.INSTANCE); - final RaceBoardComponentContext raceBoardContext = new RaceBoardComponentContext("AutoPlay", raceboardPerspectiveLifecycle, null, null, playerPlace.getConfiguration().getLeaderboardName(), null, eventUUID); - final LeaderboardWithHeaderComponentContext leaderboardWithHeaderContext = new LeaderboardWithHeaderComponentContext("AutoPlay", leaderboardPerspectiveLifecycle); + final RaceBoardComponentContext raceBoardContext = new RaceBoardComponentContext(clientFactory.getUserService(), "AutoPlay", raceboardPerspectiveLifecycle, null, null, playerPlace.getConfiguration().getLeaderboardName(), null, eventUUID); + final LeaderboardWithHeaderComponentContext leaderboardWithHeaderContext = new LeaderboardWithHeaderComponentContext(clientFactory.getUserService(), "AutoPlay", leaderboardPerspectiveLifecycle); diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/autoplay/client/shared/leaderboard/LeaderboardWithHeaderComponentContext.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/autoplay/client/shared/leaderboard/LeaderboardWithHeaderComponentContext.java index 6c178e1b876..3abfae91543 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/autoplay/client/shared/leaderboard/LeaderboardWithHeaderComponentContext.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/autoplay/client/shared/leaderboard/LeaderboardWithHeaderComponentContext.java @@ -1,13 +1,14 @@ package com.sap.sailing.gwt.autoplay.client.shared.leaderboard; +import com.sap.sailing.gwt.common.client.UserSettingsStorageManager; import com.sap.sse.gwt.client.shared.perspective.AbstractComponentContextWithSettingsStorage; import com.sap.sse.gwt.client.shared.perspective.PerspectiveCompositeSettings; -import com.sap.sse.gwt.client.shared.perspective.UserSettingsStorageManager; +import com.sap.sse.security.ui.client.UserService; public class LeaderboardWithHeaderComponentContext extends AbstractComponentContextWithSettingsStorage { - public LeaderboardWithHeaderComponentContext(String entryPointId, LeaderboardWithHeaderPerspectiveLifecycle rootPerspectiveLifecycle) { - super(rootPerspectiveLifecycle, new UserSettingsStorageManager(entryPointId)); + public LeaderboardWithHeaderComponentContext(UserService userService, String entryPointId, LeaderboardWithHeaderPerspectiveLifecycle rootPerspectiveLifecycle) { + super(rootPerspectiveLifecycle, new UserSettingsStorageManager(userService, entryPointId)); } @Override diff --git a/java/com.sap.sse.gwt/src/com/sap/sse/gwt/client/shared/perspective/UserSettingsStorageManager.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/common/client/UserSettingsStorageManager.java similarity index 67% rename from java/com.sap.sse.gwt/src/com/sap/sse/gwt/client/shared/perspective/UserSettingsStorageManager.java rename to java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/common/client/UserSettingsStorageManager.java index a97e28f3a92..18726183ee7 100644 --- a/java/com.sap.sse.gwt/src/com/sap/sse/gwt/client/shared/perspective/UserSettingsStorageManager.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/common/client/UserSettingsStorageManager.java @@ -1,12 +1,15 @@ -package com.sap.sse.gwt.client.shared.perspective; +package com.sap.sailing.gwt.common.client; import com.google.gwt.storage.client.Storage; import com.google.gwt.user.client.rpc.AsyncCallback; import com.sap.sse.common.settings.Settings; -import com.sap.sse.common.settings.generic.AbstractGenericSerializableSettings; -import com.sap.sse.common.settings.generic.GenericSerializableSettings; +import com.sap.sse.gwt.client.shared.perspective.CallbacksJoinerHelper; +import com.sap.sse.gwt.client.shared.perspective.DefaultSettingsLoadedCallback; +import com.sap.sse.gwt.client.shared.perspective.PerspectiveCompositeSettings; +import com.sap.sse.gwt.client.shared.perspective.SettingsStorageManager; import com.sap.sse.gwt.settings.SettingsToJsonSerializerGWT; import com.sap.sse.gwt.settings.SettingsToUrlSerializer; +import com.sap.sse.security.ui.client.UserService; /** * @@ -20,25 +23,21 @@ public class UserSettingsStorageManager implements Settings private final String storageGlobalKey; private final String storageContextSpecificKey; private Throwable lastError = null; - - //TODO replace userService with real implementation - private WithAuthenticationManager clientFactory = mockWithAuthenticationManager(); - - //TODO replace userService with real implementation - private UserService userService = mockUserService(); + private UserService userService; private final SettingsToJsonSerializerGWT jsonSerializer = new SettingsToJsonSerializerGWT(); private final SettingsToUrlSerializer urlSerializer = new SettingsToUrlSerializer(); - public UserSettingsStorageManager(String globalDefinitionId, String... contextDefinitionParameters) { + public UserSettingsStorageManager(UserService userService, String globalDefinitionId, String... contextDefinitionParameters) { + this.userService = userService; this.storageGlobalKey = globalDefinitionId; this.storageContextSpecificKey = this.storageGlobalKey + "#" + buildContextDefinitionId(contextDefinitionParameters); } public void storeGlobalSettings(PerspectiveCompositeSettings globalSettings) { String serializedSettings = jsonSerializer.serializeToString(globalSettings); - if(clientFactory.getAuthenticationManager().getAuthenticationContext().isLoggedIn()) { + if(userService.getCurrentUser() != null) { storeGlobalSettingsOnServer(serializedSettings); } storeGlobalSettingsOnLocalStorage(serializedSettings); @@ -46,7 +45,7 @@ public class UserSettingsStorageManager implements Settings public void storeContextSpecificSettings(PerspectiveCompositeSettings contextSpecificSettings) { String serializedSettings = jsonSerializer.serializeToString(contextSpecificSettings); - if(clientFactory.getAuthenticationManager().getAuthenticationContext().isLoggedIn()) { + if(userService.getCurrentUser() != null) { storeContextSpecificSettingsOnServer(serializedSettings); } storeContextSpecificSettingsOnLocalStorage(serializedSettings); @@ -82,7 +81,7 @@ public class UserSettingsStorageManager implements Settings defaultSettings = retrieveDefaultSettingsFromUrl(defaultSettings); final SettingsJsonRetrievement settingsJsonRetrievement = new SettingsJsonRetrievement(defaultSettings); - if(clientFactory.getAuthenticationManager().getAuthenticationContext().isLoggedIn()) { + if(userService.getCurrentUser() != null) { AsyncCallback globalSettingsAsyncCallback = new AsyncCallback() { @Override public void onFailure(Throwable caught) { @@ -217,102 +216,102 @@ public class UserSettingsStorageManager implements Settings return str.toString(); } - //TODO replace mockups with real implementation - private interface UserService { - /** - * Loads the {@link #getCurrentUser() current user}'s preference with the given {@link String key} from server. - * - * @param key - * key of the preference to load - * @param callback - * {@link AsyncCallback} for GWT RPC call - * - * @see GenericSerializableSettings - * @see AbstractGenericSerializableSettings - */ - public void getPreference(String key, - final AsyncCallback callback); - - /** - * Sets the {@link #getCurrentUser() current user}'s preference with the given {@link String key} on server. - * Because preferences are persisted as JSON, the provided {@link GenericSerializableSettings} instance - * will be serialized before it is sent to the server. - * - * @param key - * key of the preference to set - * @param instance - * {@link GenericSerializableSettings} instance containing the preference value - * - * @see GenericSerializableSettings - * @see AbstractGenericSerializableSettings - */ - public void setPreference(String key, String serializedSettings); - } +// //TODO replace mockups with real implementation +// private interface UserService { +// /** +// * Loads the {@link #getCurrentUser() current user}'s preference with the given {@link String key} from server. +// * +// * @param key +// * key of the preference to load +// * @param callback +// * {@link AsyncCallback} for GWT RPC call +// * +// * @see GenericSerializableSettings +// * @see AbstractGenericSerializableSettings +// */ +// public void getPreference(String key, +// final AsyncCallback callback); +// +// /** +// * Sets the {@link #getCurrentUser() current user}'s preference with the given {@link String key} on server. +// * Because preferences are persisted as JSON, the provided {@link GenericSerializableSettings} instance +// * will be serialized before it is sent to the server. +// * +// * @param key +// * key of the preference to set +// * @param instance +// * {@link GenericSerializableSettings} instance containing the preference value +// * +// * @see GenericSerializableSettings +// * @see AbstractGenericSerializableSettings +// */ +// public void setPreference(String key, String serializedSettings); +// } +// +// private interface WithAuthenticationManager { +// +// /** +// * @return the {@link AuthenticationManager} +// */ +// AuthenticationManager getAuthenticationManager(); +// } +// +// private interface AuthenticationManager { +// /** +// * Provide the {@link AuthenticationContext} for the current user +// * +// * @return an {@link AuthenticationContext} instance +// */ +// AuthenticationContext getAuthenticationContext(); +// } +// +// private interface AuthenticationContext { +// +// /** +// * Determines if there is a logged in user. +// * +// * @return true if a user is logged in, false otherwise +// */ +// boolean isLoggedIn(); +// } +// +// private static WithAuthenticationManager mockWithAuthenticationManager() { +// return new WithAuthenticationManager() { +// +// @Override +// public AuthenticationManager getAuthenticationManager() { +// return new AuthenticationManager() { +// +// @Override +// public AuthenticationContext getAuthenticationContext() { +// return new AuthenticationContext() { +// @Override +// public boolean isLoggedIn() { +// return false; +// } +// }; +// } +// }; +// } +// }; +// } - private interface WithAuthenticationManager { - - /** - * @return the {@link AuthenticationManager} - */ - AuthenticationManager getAuthenticationManager(); - } - - private interface AuthenticationManager { - /** - * Provide the {@link AuthenticationContext} for the current user - * - * @return an {@link AuthenticationContext} instance - */ - AuthenticationContext getAuthenticationContext(); - } - - private interface AuthenticationContext { - - /** - * Determines if there is a logged in user. - * - * @return true if a user is logged in, false otherwise - */ - boolean isLoggedIn(); - } - - private static WithAuthenticationManager mockWithAuthenticationManager() { - return new WithAuthenticationManager() { - - @Override - public AuthenticationManager getAuthenticationManager() { - return new AuthenticationManager() { - - @Override - public AuthenticationContext getAuthenticationContext() { - return new AuthenticationContext() { - @Override - public boolean isLoggedIn() { - return false; - } - }; - } - }; - } - }; - } - - private static UserService mockUserService() { - return new UserService() { - - @Override - public void setPreference(String key, String serializedSettings) { - // TODO Auto-generated method stub - - } - - @Override - public void getPreference(String key, - final AsyncCallback callback) { - // TODO Auto-generated method stub - - } - }; - } +// private static UserService mockUserService() { +// return new UserService() { +// +// @Override +// public void setPreference(String key, String serializedSettings) { +// // TODO Auto-generated method stub +// +// } +// +// @Override +// public void getPreference(String key, +// final AsyncCallback callback) { +// // TODO Auto-generated method stub +// +// } +// }; +// } } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/raceboard/RaceBoardComponentContext.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/raceboard/RaceBoardComponentContext.java index a0ccba25fc4..0ffb9e848c5 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/raceboard/RaceBoardComponentContext.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/raceboard/RaceBoardComponentContext.java @@ -2,17 +2,18 @@ package com.sap.sailing.gwt.ui.raceboard; import java.util.UUID; +import com.sap.sailing.gwt.common.client.UserSettingsStorageManager; import com.sap.sailing.gwt.ui.leaderboard.LeaderboardSettings; import com.sap.sse.gwt.client.shared.perspective.AbstractComponentContextWithSettingsStorage; import com.sap.sse.gwt.client.shared.perspective.PerspectiveCompositeSettings; -import com.sap.sse.gwt.client.shared.perspective.UserSettingsStorageManager; +import com.sap.sse.security.ui.client.UserService; public class RaceBoardComponentContext extends AbstractComponentContextWithSettingsStorage { - public RaceBoardComponentContext(String entryPointId, RaceBoardPerspectiveLifecycle raceBoardPerspectiveLifecycle, + public RaceBoardComponentContext(UserService userService, String entryPointId, RaceBoardPerspectiveLifecycle raceBoardPerspectiveLifecycle, String regattaName, String raceName, String leaderboardName, String leaderboardGroupName, UUID eventId) { - super(raceBoardPerspectiveLifecycle, new UserSettingsStorageManager(entryPointId + "." + raceBoardPerspectiveLifecycle.getComponentId(), regattaName, raceName, leaderboardName, leaderboardGroupName, + super(raceBoardPerspectiveLifecycle, new UserSettingsStorageManager(userService, entryPointId + "." + raceBoardPerspectiveLifecycle.getComponentId(), regattaName, raceName, leaderboardName, leaderboardGroupName, eventId == null ? null : eventId.toString())); } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/raceboard/RaceBoardEntryPoint.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/raceboard/RaceBoardEntryPoint.java index 4ce112f3a6d..9aad1242390 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/raceboard/RaceBoardEntryPoint.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/raceboard/RaceBoardEntryPoint.java @@ -96,7 +96,7 @@ public class RaceBoardEntryPoint extends AbstractSailingEntryPoint { final boolean showChartMarkEditMediaButtonsAndVideo = !DeviceDetector.isMobile(); - final RaceBoardComponentContext context = new RaceBoardComponentContext("RaceBoardEntryPoint", new RaceBoardPerspectiveLifecycle(null, StringMessages.INSTANCE), regattaName, raceName, leaderboardName, leaderboardGroupName, eventId); + final RaceBoardComponentContext context = new RaceBoardComponentContext(getUserService(), "RaceBoardEntryPoint", new RaceBoardPerspectiveLifecycle(null, StringMessages.INSTANCE), regattaName, raceName, leaderboardName, leaderboardGroupName, eventId); AsyncCallbackWithSettingsRetrievementJoiner asyncCallbackJoiner = context.createSettingsRetrievementWithAsyncCallbackJoiner(new AsyncCallback() { @Override diff --git a/java/com.sap.sse.security.ui/src/main/java/com/sap/sse/security/ui/client/UserService.java b/java/com.sap.sse.security.ui/src/main/java/com/sap/sse/security/ui/client/UserService.java index cd660b0a46e..28a32aa8632 100755 --- a/java/com.sap.sse.security.ui/src/main/java/com/sap/sse/security/ui/client/UserService.java +++ b/java/com.sap.sse.security.ui/src/main/java/com/sap/sse/security/ui/client/UserService.java @@ -14,7 +14,6 @@ import com.sap.sse.gwt.client.Storage; import com.sap.sse.gwt.client.StorageEvent; import com.sap.sse.gwt.client.StorageEvent.Handler; import com.sap.sse.gwt.client.async.MarkedAsyncCallback; -import com.sap.sse.gwt.settings.SettingsToJsonSerializerGWT; import com.sap.sse.security.ui.client.i18n.StringMessages; import com.sap.sse.security.ui.oauth.client.util.ClientUtils; import com.sap.sse.security.ui.shared.SuccessInfo; @@ -48,8 +47,6 @@ public class UserService { */ private static final String LOCAL_STORAGE_UPDATE_KEY = "current-user-has-changed"; - private final SettingsToJsonSerializerGWT serializer = new SettingsToJsonSerializerGWT(); - private final UserManagementServiceAsync userManagementService; private final Set handlers; @@ -213,21 +210,16 @@ public class UserService { /** * Loads the {@link #getCurrentUser() current user}'s preference with the given {@link String key} from server. - * Because the preference is persisted as JSON on server, the loaded data will be deserialized into the provided - * {@link GenericSerializableSettings} instance. + * The preferences are passed to the {@link AsyncCallback} as serialized in {@link String}. * * @param key * key of the preference to load - * @param emptyInstance - * an empty {@link GenericSerializableSettings} instance, where the loaded data is deserialized to * @param callback * {@link AsyncCallback} for GWT RPC call * - * @see GenericSerializableSettings - * @see AbstractGenericSerializableSettings */ - public void getPreference(String key, final T emptyInstance, - final AsyncCallback callback) { + public void getPreference(String key, + final AsyncCallback callback) { String username = getCurrentUser().getName(); // TODO: Can username be determined via session on server-side getUserManagementService().getPreference(username, key, new AsyncCallback() { @Override @@ -237,28 +229,22 @@ public class UserService { @Override public void onSuccess(String result) { - callback.onSuccess(serializer.deserialize(emptyInstance, result)); + callback.onSuccess(result); } }); } /** * Sets the {@link #getCurrentUser() current user}'s preference with the given {@link String key} on server. - * Because preferences are persisted as JSON, the provided {@link GenericSerializableSettings} instance - * will be serialized before it is sent to the server. * * @param key * key of the preference to set - * @param instance - * {@link GenericSerializableSettings} instance containing the preference value - * - * @see GenericSerializableSettings - * @see AbstractGenericSerializableSettings + * @param serializedSettings + * Serialized settings as {@link String} containing the preferences */ - public void setPreference(String key, GenericSerializableSettings instance) { + public void setPreference(String key, String serializedSettings) { String username = getCurrentUser().getName(); // TODO: Can username be determined via session on server-side - String json = serializer.serializeToString(instance); - getUserManagementService().setPreference(username, key, json, new AsyncCallback() { + getUserManagementService().setPreference(username, key, serializedSettings, new AsyncCallback() { @Override public void onFailure(Throwable caught) { // TODO What to do in case of failure?