From 1e5bde6ecc5a884d7fd0844f4cda78f89f0c3730 Mon Sep 17 00:00:00 2001 From: buczekp <buczekp> Date: Mon, 11 Jan 2010 09:57:12 +0000 Subject: [PATCH] [LMS-1302] implemented restore of default display settings (without currently opened tab refresh) SVN: 14220 --- .../client/web/client/IClientService.java | 14 +++- .../web/client/IClientServiceAsync.java | 5 +- .../client/application/CommonViewContext.java | 8 ++- .../client/web/client/application/Dict.java | 5 ++ .../ui/user/ChangeUserSettingsDialog.java | 66 +++++++++++++++++++ .../web/server/AbstractClientService.java | 19 ++++++ .../generic/server/AbstractServer.java | 12 ++++ .../generic/server/AbstractServerLogger.java | 6 ++ .../cisd/openbis/generic/shared/IServer.java | 3 + .../cisd/openbis/public/common-dictionary.js | 2 + 10 files changed, 134 insertions(+), 6 deletions(-) diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/IClientService.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/IClientService.java index 25bac186c03..b7688a0b7a6 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/IClientService.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/IClientService.java @@ -51,15 +51,25 @@ public interface IClientService extends RemoteService public SessionContext tryToLogin(String userID, String password) throws UserFailureException; /** - * Sets the base URL that the client uses to connect the web server. + * Sets the base URL that the client uses to connect the web server. */ public void setBaseURL(String baseURL); - + /** * Updates display settings on the server. */ public void updateDisplaySettings(DisplaySettings displaySettings); + /** + * Resets display settings of the logged user to the default settings. + * <p> + * NOTE: this changes user display settings only on the DB level. Old settings are still in the + * session and needs to be updated with the settings returned by this function. + * + * @return default display settings + */ + public DisplaySettings resetDisplaySettings(); + /** * Changes logged user home group on the server. */ diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/IClientServiceAsync.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/IClientServiceAsync.java index bddcf7519d5..758a230bebb 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/IClientServiceAsync.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/IClientServiceAsync.java @@ -40,10 +40,13 @@ public interface IClientServiceAsync /** @see IClientService#setBaseURL(String) */ public void setBaseURL(String baseURL, AsyncCallback<SessionContext> callback); - + /** @see IClientService#updateDisplaySettings(DisplaySettings) */ public void updateDisplaySettings(DisplaySettings displaySettings, AsyncCallback<Void> callback); + /** @see IClientService#resetDisplaySettings() */ + public void resetDisplaySettings(AsyncCallback<DisplaySettings> resetUserSettingsCallback); + /** @see IClientService#changeUserHomeGroup(TechId) */ public void changeUserHomeGroup(TechId groupIdOrNull, AsyncCallback<Void> callback); diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/CommonViewContext.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/CommonViewContext.java index f567564f47e..452e3c551ae 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/CommonViewContext.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/CommonViewContext.java @@ -81,7 +81,9 @@ public final class CommonViewContext implements IViewContext<ICommonClientServic public void initDisplaySettingsManager() { - displaySettingsManager = createDisplaySettingsManager(); + final DisplaySettings loggedUserDisplaySettings = + viewModel.getSessionContext().getDisplaySettings(); + displaySettingsManager = createDisplaySettingsManager(loggedUserDisplaySettings); } public DisplaySettingsManager getDisplaySettingsManager() @@ -90,9 +92,9 @@ public final class CommonViewContext implements IViewContext<ICommonClientServic return displaySettingsManager; } - private DisplaySettingsManager createDisplaySettingsManager() + private DisplaySettingsManager createDisplaySettingsManager( + final DisplaySettings displaySettings) { - final DisplaySettings displaySettings = viewModel.getSessionContext().getDisplaySettings(); IDelegatedAction settingsUpdater = new IDelegatedAction() { public void execute() diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/Dict.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/Dict.java index f15629a6855..607684508b9 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/Dict.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/Dict.java @@ -732,6 +732,11 @@ public abstract class Dict public static final String USE_WILDCARD_SEARCH_MODE_TOOLTIP = "use_wildcard_search_mode_tooltip"; + public static final String RESET_USER_SETTINGS_BUTTON = "reset_user_settings_button"; + + public static final String RESET_USER_SETTINGS_CONFIRMATION_MSG = + "reset_user_settings_confirmation_msg"; + // // Unclassified // diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/user/ChangeUserSettingsDialog.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/user/ChangeUserSettingsDialog.java index 3ec7bb11cea..4b82e87f14d 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/user/ChangeUserSettingsDialog.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/user/ChangeUserSettingsDialog.java @@ -16,9 +16,17 @@ package ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.user; +import com.extjs.gxt.ui.client.event.ButtonEvent; +import com.extjs.gxt.ui.client.event.Listener; +import com.extjs.gxt.ui.client.event.MessageBoxEvent; +import com.extjs.gxt.ui.client.event.SelectionListener; +import com.extjs.gxt.ui.client.widget.Dialog; +import com.extjs.gxt.ui.client.widget.MessageBox; import com.extjs.gxt.ui.client.widget.Window; +import com.extjs.gxt.ui.client.widget.button.Button; import com.google.gwt.user.client.rpc.AsyncCallback; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.AbstractAsyncCallback; import ch.systemsx.cisd.openbis.generic.client.web.client.application.Dict; import ch.systemsx.cisd.openbis.generic.client.web.client.application.GenericConstants; import ch.systemsx.cisd.openbis.generic.client.web.client.application.IViewContext; @@ -28,6 +36,7 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.widget. import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.widget.FieldUtil; import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.IDelegatedAction; import ch.systemsx.cisd.openbis.generic.shared.basic.TechId; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DisplaySettings; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Group; /** @@ -59,8 +68,13 @@ public class ChangeUserSettingsDialog extends AbstractSaveDialog addField(homeGroupField = createHomeGroupField()); addField(useWildcardSearchModeCheckbox = createUseWildcardSearchModeField()); + fbar.insert(createResetButton(), 1); // inserting Reset button in between Save and Cancel } + // + // Change + // + private final GroupSelectionWidget createHomeGroupField() { GroupSelectionWidget field = new GroupSelectionWidget(viewContext, GROUP_FIELD_ID, false); @@ -95,4 +109,56 @@ public class ChangeUserSettingsDialog extends AbstractSaveDialog { return useWildcardSearchModeCheckbox.getValue(); } + + // + // Reset + // + + private Button createResetButton() + { + final String buttonTitle = viewContext.getMessage(Dict.RESET_USER_SETTINGS_BUTTON); + final Button button = new Button(buttonTitle, new SelectionListener<ButtonEvent>() + { + @Override + public final void componentSelected(ButtonEvent ce) + { + final String title = viewContext.getMessage(Dict.CONFIRM_TITLE); + final String msg = + viewContext.getMessage(Dict.RESET_USER_SETTINGS_CONFIRMATION_MSG); + MessageBox.confirm(title, msg, new Listener<MessageBoxEvent>() + { + public void handleEvent(MessageBoxEvent messageEvent) + { + if (messageEvent.getButtonClicked().getItemId().equals(Dialog.YES)) + { + resetUserSettings(); + } + } + }); + } + }); + return button; + } + + private void resetUserSettings() + { + viewContext.getService().resetDisplaySettings(new ResetUserSettingsCallback(viewContext)); + } + + public final class ResetUserSettingsCallback extends AbstractAsyncCallback<DisplaySettings> + { + private ResetUserSettingsCallback(IViewContext<?> viewContext) + { + super(viewContext); + } + + @Override + public final void process(final DisplaySettings defaultDisplaySettings) + { + // reinitialize DisplaySettingsManager with updated SessionContext + viewContext.getModel().getSessionContext().setDisplaySettings(defaultDisplaySettings); + viewContext.initDisplaySettingsManager(); + hide(); + } + } } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/AbstractClientService.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/AbstractClientService.java index d141d3a6b1d..b460408a72d 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/AbstractClientService.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/AbstractClientService.java @@ -399,6 +399,25 @@ public abstract class AbstractClientService implements IClientService, } } + public DisplaySettings resetDisplaySettings() + { + try + { + final String sessionToken = getSessionToken(); + IServer server = getServer(); + final DisplaySettings defaultSettings = server.getDefaultDisplaySettings(sessionToken); + updateDisplaySettings(defaultSettings); + return defaultSettings; + } catch (InvalidSessionException e) + { + // ignored + } catch (final ch.systemsx.cisd.common.exceptions.UserFailureException e) + { + throw UserFailureExceptionTranslator.translate(e); + } + return null; + } + public void changeUserHomeGroup(TechId groupIdOrNull) { try diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/AbstractServer.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/AbstractServer.java index 83e3432008b..64df17fdcf0 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/AbstractServer.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/AbstractServer.java @@ -313,6 +313,18 @@ public abstract class AbstractServer<T extends IServer> extends AbstractServiceW } } + public DisplaySettings getDefaultDisplaySettings(String sessionToken) + { + PersonPE systemUser = + getDAOFactory().getPersonDAO().tryFindPersonByUserId(PersonPE.SYSTEM_USER_ID); + if (systemUser == null) + { + throw new UserFailureException( + "Couldn't find system user with default settings in the DB."); + } + return systemUser.getDisplaySettings(); + } + public void changeUserHomeGroup(String sessionToken, TechId groupIdOrNull) { final Session session = getSessionManager().getSession(sessionToken); diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/AbstractServerLogger.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/AbstractServerLogger.java index 1d0c414bcbf..b8ff35b341d 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/AbstractServerLogger.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/AbstractServerLogger.java @@ -167,6 +167,12 @@ public abstract class AbstractServerLogger implements IServer logTracking(sessionToken, "save_display_settings", ""); } + public DisplaySettings getDefaultDisplaySettings(String sessionToken) + { + logTracking(sessionToken, "get_default_display_settings", ""); + return null; + } + public void changeUserHomeGroup(String sessionToken, TechId groupIdOrNull) { String groupId = groupIdOrNull == null ? "null" : groupIdOrNull.toString(); diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/IServer.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/IServer.java index b4e999484d2..3d93c154f35 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/IServer.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/IServer.java @@ -64,6 +64,9 @@ public interface IServer extends ISessionProvider @Transactional public void setBaseIndexURL(String sessionToken, String baseIndexURL); + @Transactional + public DisplaySettings getDefaultDisplaySettings(String sessionToken); + @Transactional public void saveDisplaySettings(String sessionToken, DisplaySettings displaySettings); diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/public/common-dictionary.js b/openbis/source/java/ch/systemsx/cisd/openbis/public/common-dictionary.js index 3d5290cfc37..c2e958aebfb 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/public/common-dictionary.js +++ b/openbis/source/java/ch/systemsx/cisd/openbis/public/common-dictionary.js @@ -338,6 +338,8 @@ var common = { home_group_label: "Home Group", use_wildcard_search_mode_label: "Search with Wildcards", use_wildcard_search_mode_tooltip: "Check to treat '*' and '?' as wildcards in searched text. Note, that only whole words will match if you don't add '*' at the beginning and at the end of the text.", + reset_user_settings_button: "Restore Default", + reset_user_settings_confirmation_msg: "Are you sure that you want to restore default settings?<br><br>Every setting you changed in this application apart from home group, e.g. hiding/showing certain columns in a browser, will be lost.", // // Role View -- GitLab