From 36b10ce48e70cdf21df0313858c8ced4fd10fd94 Mon Sep 17 00:00:00 2001 From: pkupczyk <pkupczyk> Date: Tue, 21 Aug 2012 11:29:44 +0000 Subject: [PATCH] SP-241 / BIS-122 : Embedded grids need to persist display settings SVN: 26414 --- .../client/web/client/IClientService.java | 7 ++- .../web/client/IClientServiceAsync.java | 6 +- .../client/application/CommonViewContext.java | 7 +++ .../framework/DisplaySettingsManager.java | 37 +++++++++--- .../web/server/AbstractClientService.java | 24 ++++++-- .../generic/server/AbstractServer.java | 4 +- .../server/DisplaySettingsProvider.java | 1 + .../generic/shared/AbstractServerLogger.java | 2 +- .../cisd/openbis/generic/shared/IServer.java | 2 +- .../shared/basic/dto/DisplaySettings.java | 12 ++++ .../AllDisplaySettingsUpdate.java | 58 ------------------- .../ColumnDisplaySettingsUpdate.java | 2 + .../IDisplaySettingsUpdate.java | 5 ++ .../web/server/CommonClientServiceTest.java | 9 ++- 14 files changed, 94 insertions(+), 82 deletions(-) delete mode 100644 openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/displaysettings/AllDisplaySettingsUpdate.java 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 abd23d8ad84..98a659de34e 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 @@ -68,10 +68,15 @@ public interface IClientService extends RemoteService */ public void setBaseURL(String baseURL); + /** + * Saves display settings on the server. + */ + public void saveDisplaySettings(DisplaySettings displaySettings); + /** * Updates display settings on the server. */ - public void updateDisplaySettings(IDisplaySettingsUpdate update); + public void updateDisplaySettings(IDisplaySettingsUpdate displaySettingsUpdate); /** * Resets display settings of the logged user to the default settings. 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 6ff0dc4c7ab..6bf3120743a 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 @@ -52,8 +52,12 @@ public interface IClientServiceAsync /** @see IClientService#setBaseURL(String) */ public void setBaseURL(String baseURL, AsyncCallback<SessionContext> callback); + /** @see IClientService#saveDisplaySettings(DisplaySettings) */ + public void saveDisplaySettings(DisplaySettings displaySettings, AsyncCallback<Void> callback); + /** @see IClientService#updateDisplaySettings(IDisplaySettingsUpdate) */ - public void updateDisplaySettings(IDisplaySettingsUpdate update, AsyncCallback<Void> callback); + public void updateDisplaySettings(IDisplaySettingsUpdate displaySettingsUpdate, + AsyncCallback<Void> callback); /** @see IClientService#resetDisplaySettings() */ public void resetDisplaySettings(AsyncCallback<DisplaySettings> resetUserSettingsCallback); 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 e54c00d67e1..7514d6474ba 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 @@ -171,6 +171,13 @@ public final class CommonViewContext implements IViewContext<ICommonClientServic { IDisplaySettingsUpdater settingsUpdater = new IDisplaySettingsUpdater() { + @Override + public void execute() + { + service.saveDisplaySettings(displaySettings, new VoidAsyncCallback<Void>( + CommonViewContext.this)); + } + @Override public void execute(IDisplaySettingsUpdate update) { diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/framework/DisplaySettingsManager.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/framework/DisplaySettingsManager.java index bb96dfeca57..b2ed8f1ef38 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/framework/DisplaySettingsManager.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/framework/DisplaySettingsManager.java @@ -42,7 +42,6 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.RealNumberFormatingPara import ch.systemsx.cisd.openbis.generic.shared.basic.dto.SortInfo; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.SortInfo.SortDir; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.WebClientConfiguration; -import ch.systemsx.cisd.openbis.generic.shared.basic.dto.displaysettings.AllDisplaySettingsUpdate; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.displaysettings.ColumnDisplaySettingsUpdate; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.displaysettings.IDisplaySettingsUpdate; @@ -66,6 +65,8 @@ public class DisplaySettingsManager public interface IDisplaySettingsUpdater { + void execute(); + void execute(IDisplaySettingsUpdate update); } @@ -76,8 +77,9 @@ public class DisplaySettingsManager public interface IDisplaySettingsDelayedUpdater { /** Cancels any running timers and starts a new one. */ - void executeDelayed(IDisplaySettingsUpdate update, int delayMs); + void executeDelayed(int delayMs); + void executeDelayed(IDisplaySettingsUpdate update, int delayMs); } public DisplaySettingsManager(DisplaySettings displaySettings, @@ -94,17 +96,36 @@ public class DisplaySettingsManager { return new IDisplaySettingsDelayedUpdater() { + // in simple view mode or anonymous login settings are temporary - don't + // save them at all + + @Override + public void executeDelayed(int delayMs) + { + } + @Override public void executeDelayed(IDisplaySettingsUpdate update, int delayMs) { - // in simple view mode or anonymous login settings are temporary - don't - // save them at all } }; } else { return new IDisplaySettingsDelayedUpdater() { + @Override + public void executeDelayed(int delayMs) + { + new DelayedTask(new Listener<BaseEvent>() + { + @Override + public void handleEvent(BaseEvent event) + { + settingsUpdater.execute(); + } + }).delay(delayMs); + } + @Override public void executeDelayed(final IDisplaySettingsUpdate update, final int delayMs) @@ -424,8 +445,7 @@ public class DisplaySettingsManager Object modifier) { updateActiveTabSettings(tabGroupDisplayID, selectedTabDisplayID, modifier); - updater.executeDelayed(new AllDisplaySettingsUpdate(displaySettings), - QUITE_TIME_BEFORE_SETTINGS_SAVED_MS); + updater.executeDelayed(QUITE_TIME_BEFORE_SETTINGS_SAVED_MS); } private <C> void storeSettings(String displayTypeID, ColumnModel columnModel, @@ -441,13 +461,12 @@ public class DisplaySettingsManager public void storeDropDownSettings(String dropDownSettingsID, String newValue) { updateDropDownSettings(dropDownSettingsID, newValue); - updater.executeDelayed(new AllDisplaySettingsUpdate(displaySettings), - QUITE_TIME_BEFORE_SETTINGS_SAVED_MS); + updater.executeDelayed(QUITE_TIME_BEFORE_SETTINGS_SAVED_MS); } public void storeSettings() { - updater.executeDelayed(new AllDisplaySettingsUpdate(displaySettings), 1); // 0 not allowed + updater.executeDelayed(1); // 0 not allowed } private static List<ColumnSetting> createColumnsSettings(ColumnModel columnModel, 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 4b8708d2f2d..604a30df49f 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 @@ -85,7 +85,6 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.TableModelColumnHeader; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.TableModelRowWithObject; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.WebApp; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.WebClientConfiguration; -import ch.systemsx.cisd.openbis.generic.shared.basic.dto.displaysettings.AllDisplaySettingsUpdate; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.displaysettings.IDisplaySettingsUpdate; import ch.systemsx.cisd.openbis.generic.shared.dto.SessionContextDTO; import ch.systemsx.cisd.openbis.generic.shared.util.ServerUtils; @@ -638,14 +637,31 @@ public abstract class AbstractClientService implements IClientService, } @Override - public void updateDisplaySettings(IDisplaySettingsUpdate displaySettingsUpdate) + public void saveDisplaySettings(DisplaySettings displaySettings) { try { final String sessionToken = getSessionToken(); IServer server = getServer(); int maxEntityVisits = getWebClientConfiguration().getMaxEntityVisits(); - server.updateDisplaySettings(sessionToken, displaySettingsUpdate, maxEntityVisits); + server.saveDisplaySettings(sessionToken, displaySettings, maxEntityVisits); + } catch (InvalidSessionException e) + { + // ignored + } catch (final ch.systemsx.cisd.common.exceptions.UserFailureException e) + { + throw UserFailureExceptionTranslator.translate(e); + } + } + + @Override + public void updateDisplaySettings(IDisplaySettingsUpdate displaySettingsUpdate) + { + try + { + final String sessionToken = getSessionToken(); + IServer server = getServer(); + server.updateDisplaySettings(sessionToken, displaySettingsUpdate); } catch (InvalidSessionException e) { // ignored @@ -663,7 +679,7 @@ public abstract class AbstractClientService implements IClientService, final String sessionToken = getSessionToken(); IServer server = getServer(); final DisplaySettings defaultSettings = server.getDefaultDisplaySettings(sessionToken); - updateDisplaySettings(new AllDisplaySettingsUpdate(defaultSettings)); + saveDisplaySettings(defaultSettings); return defaultSettings; } catch (InvalidSessionException e) { 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 77a91d3173e..5518f68ebb9 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 @@ -708,7 +708,7 @@ public abstract class AbstractServer<T> extends AbstractServiceWithLogger<T> imp @Override public void updateDisplaySettings(String sessionToken, - IDisplaySettingsUpdate displaySettingsUpdate, int maxEntityVisits) + IDisplaySettingsUpdate displaySettingsUpdate) { if (displaySettingsUpdate == null) { @@ -727,7 +727,7 @@ public abstract class AbstractServer<T> extends AbstractServiceWithLogger<T> imp displaySettingsProvider.getCurrentDisplaySettings(person); DisplaySettings newDisplaySettings = displaySettingsUpdate.update(currentDisplaySettings); - saveDisplaySettings(sessionToken, newDisplaySettings, maxEntityVisits); + saveDisplaySettings(sessionToken, newDisplaySettings, -1); } } } catch (InvalidSessionException e) diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/DisplaySettingsProvider.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/DisplaySettingsProvider.java index e940319feb4..628b6d12daf 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/DisplaySettingsProvider.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/DisplaySettingsProvider.java @@ -78,6 +78,7 @@ public class DisplaySettingsProvider if (oldSettings != null) { settings.overwriteCustomWebAppSettings(oldSettings); + settings.overwriteColumnSettings(oldSettings); } displaySettingsMap.put(person.getUserId(), settings); person.setDisplaySettings(settings); diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/AbstractServerLogger.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/AbstractServerLogger.java index 32c6a49b3b2..94b0febfc2c 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/AbstractServerLogger.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/AbstractServerLogger.java @@ -282,7 +282,7 @@ public abstract class AbstractServerLogger implements IServer @Override public void updateDisplaySettings(String sessionToken, - IDisplaySettingsUpdate displaySettingsUpdate, int maxEntityVisits) + IDisplaySettingsUpdate displaySettingsUpdate) { logTracking(sessionToken, "update_display_settings", "UPDATE (%s)", displaySettingsUpdate); } 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 96074055510..79151668f80 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 @@ -98,7 +98,7 @@ public interface IServer extends ISessionProvider @Transactional public void updateDisplaySettings(String sessionToken, - IDisplaySettingsUpdate displaySettingsUpdate, int maxEntityVisits); + IDisplaySettingsUpdate displaySettingsUpdate); /** * Lists grid custom columns for a given grid id. diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/DisplaySettings.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/DisplaySettings.java index b8dd1a569f7..00bec6eef4a 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/DisplaySettings.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/DisplaySettings.java @@ -380,6 +380,18 @@ public class DisplaySettings implements Serializable } } + /** + * @deprecated Don't use in generic web client - will be overwritten. + */ + @Deprecated + public void overwriteColumnSettings(DisplaySettings customDisplaySettings) + { + synchronized (customDisplaySettings) + { + this.columnSettings = customDisplaySettings.columnSettings; + } + } + @Deprecated public void clearCustomWebAppSettings() { diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/displaysettings/AllDisplaySettingsUpdate.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/displaysettings/AllDisplaySettingsUpdate.java deleted file mode 100644 index bdf2db02a28..00000000000 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/displaysettings/AllDisplaySettingsUpdate.java +++ /dev/null @@ -1,58 +0,0 @@ -/* - * Copyright 2012 ETH Zuerich, CISD - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package ch.systemsx.cisd.openbis.generic.shared.basic.dto.displaysettings; - -import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DisplaySettings; - -/** - * @author pkupczyk - */ -public class AllDisplaySettingsUpdate implements IDisplaySettingsUpdate -{ - - private static final long serialVersionUID = 1L; - - private DisplaySettings newDisplaySettings; - - // GWT - @SuppressWarnings("unused") - private AllDisplaySettingsUpdate() - { - } - - public AllDisplaySettingsUpdate(DisplaySettings newDisplaySettings) - { - if (newDisplaySettings == null) - { - throw new IllegalArgumentException("New display settings cannot be null"); - } - this.newDisplaySettings = newDisplaySettings; - } - - @Override - public DisplaySettings update(DisplaySettings displaySettings) - { - return newDisplaySettings; - } - - @Override - public String toString() - { - return "update of all display settings"; - } - -} diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/displaysettings/ColumnDisplaySettingsUpdate.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/displaysettings/ColumnDisplaySettingsUpdate.java index a75b7d55518..ac20abf314c 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/displaysettings/ColumnDisplaySettingsUpdate.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/displaysettings/ColumnDisplaySettingsUpdate.java @@ -22,6 +22,8 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ColumnSetting; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DisplaySettings; /** + * A command that updates column settings for a one specified grid. + * * @author pkupczyk */ public class ColumnDisplaySettingsUpdate implements IDisplaySettingsUpdate diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/displaysettings/IDisplaySettingsUpdate.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/displaysettings/IDisplaySettingsUpdate.java index 2ed5cea0ce4..c91a571a2fa 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/displaysettings/IDisplaySettingsUpdate.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/displaysettings/IDisplaySettingsUpdate.java @@ -21,11 +21,16 @@ import java.io.Serializable; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DisplaySettings; /** + * A command that updates or creates a new display settings object. + * * @author pkupczyk */ public interface IDisplaySettingsUpdate extends Serializable { + /** + * Returns an updated or a new display settings object. + */ public DisplaySettings update(DisplaySettings displaySettings); } diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/server/CommonClientServiceTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/server/CommonClientServiceTest.java index e65afa15f67..14bc17fb7b9 100644 --- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/server/CommonClientServiceTest.java +++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/server/CommonClientServiceTest.java @@ -51,6 +51,7 @@ import ch.systemsx.cisd.openbis.generic.server.business.ManagerTestTool; import ch.systemsx.cisd.openbis.generic.shared.CommonTestUtils; import ch.systemsx.cisd.openbis.generic.shared.ICommonServer; import ch.systemsx.cisd.openbis.generic.shared.basic.TechId; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ColumnSetting; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataSet; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataSetArchivingStatus; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataStore; @@ -73,7 +74,7 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.SampleType; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.TableModelRowWithObject; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Vocabulary; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.builders.DataSetBuilder; -import ch.systemsx.cisd.openbis.generic.shared.basic.dto.displaysettings.AllDisplaySettingsUpdate; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.displaysettings.ColumnDisplaySettingsUpdate; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.displaysettings.IDisplaySettingsUpdate; import ch.systemsx.cisd.openbis.generic.shared.dto.DataSetTypePE; import ch.systemsx.cisd.openbis.generic.shared.dto.DataStorePE; @@ -545,17 +546,15 @@ public final class CommonClientServiceTest extends AbstractClientServiceTest @Test public void testUpdateDisplaySettings() { - final DisplaySettings displaySettings = new DisplaySettings(); final IDisplaySettingsUpdate displaySettingsUpdate = - new AllDisplaySettingsUpdate(displaySettings); + new ColumnDisplaySettingsUpdate("my-type-id", new ArrayList<ColumnSetting>()); context.checking(new Expectations() { { prepareGetSessionToken(this); - one(commonServer).updateDisplaySettings(SESSION_TOKEN, displaySettingsUpdate, - 20); + one(commonServer).updateDisplaySettings(SESSION_TOKEN, displaySettingsUpdate); } }); -- GitLab