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 25bac186c03e89bb1584e15cf58e1e04b9a8a465..b7688a0b7a6ea9fc89462a785aa708f8a961a10e 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 bddcf7519d52371c971ac564a3eb24b74fe000d7..758a230bebb0cb9f5b0b04cb730650b53d871c97 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 f567564f47ed57e268ed6007604c4a76571de73d..452e3c551aefa970e123b8afd2caa668e33cb286 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 f15629a685522e78faad7878516492d299d24780..607684508b9352f0fafea6f25baab1bb87b15497 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 3ec7bb11cea9dc72a74921d3ee1c6c38fad63549..4b82e87f14da43c09898aa938cb5f5d4a0dd55e3 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 d141d3a6b1de086b622f020e01138b843a4f60c9..b460408a72dfefd670ae707ca13c601300e792b0 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 83e3432008bf6ae1dbe70ca2066ef27234379185..64df17fdcf026723faf621be68cce474928821f5 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 1d0c414bcbfd0fb4c551219197bb962302777731..b8ff35b341d00c2630cc0aa7f4dbc892d21cd8af 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 b4e999484d25ad68f060535899b6a267230af3cc..3d93c154f3553c0be1d8750e294c592f99acb344 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 3d5290cfc3785cc84613f245da786d2a26af3226..c2e958aebfb592c624eb22f3ef585b2d6d10a8e4 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