From 7f02f0cc590a159e07d46882eed98fbb1aa7287e Mon Sep 17 00:00:00 2001 From: brinn <brinn> Date: Fri, 10 Aug 2012 09:51:27 +0000 Subject: [PATCH] [BIS-149/SP-237] Add Methods getCustomDisplaySettings() and setCustomDisplaySettings() to IGeneralInformationService for custom web apps. SVN: 26326 --- .../web/server/AbstractClientService.java | 2 + .../generic/server/AbstractServer.java | 17 +++--- .../api/v1/GeneralInformationService.java | 27 +++++++++- .../v1/GeneralInformationServiceLogger.java | 14 +++++ .../shared/basic/dto/DisplaySettings.java | 53 +++++++++++++++++++ .../api/v1/IGeneralInformationService.java | 21 ++++++++ 6 files changed, 127 insertions(+), 7 deletions(-) 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 5a70b641070..02aba3e588b 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 @@ -302,12 +302,14 @@ public abstract class AbstractClientService implements IClientService, } } + @SuppressWarnings("deprecation") private final SessionContext createSessionContext(final SessionContextDTO session) { final SessionContext sessionContext = new SessionContext(); sessionContext.setSessionID(session.getSessionToken()); DisplaySettings displaySettings = session.getDisplaySettings(); + displaySettings.clearCustomWebAppSettings(); sessionContext.setDisplaySettings(displaySettings); final User user = new User(); 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 b3a51840e19..05879a2f0cc 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 @@ -660,6 +660,7 @@ public abstract class AbstractServer<T> extends AbstractServiceWithLogger<T> imp return false; } + @SuppressWarnings("deprecation") @Override public void saveDisplaySettings(String sessionToken, DisplaySettings displaySettings, int maxEntityVisits) @@ -672,15 +673,19 @@ public abstract class AbstractServer<T> extends AbstractServiceWithLogger<T> imp { if (displaySettings != null) { - @SuppressWarnings("deprecation") - List<EntityVisit> visits = displaySettings.getVisits(); - sortAndRemoveMultipleVisits(visits); - for (int i = visits.size() - 1; i >= maxEntityVisits; i--) + if (maxEntityVisits >= 0) { - visits.remove(i); + List<EntityVisit> visits = displaySettings.getVisits(); + sortAndRemoveMultipleVisits(visits); + for (int i = visits.size() - 1; i >= maxEntityVisits; i--) + { + visits.remove(i); + } } + final DisplaySettings oldDisplaySettings = person.getDisplaySettings(); + displaySettings.overwriteCustomWebAppSettings(oldDisplaySettings); + person.setDisplaySettings(displaySettings); } - person.setDisplaySettings(displaySettings); getDAOFactory().getPersonDAO().updatePerson(person); } } catch (InvalidSessionException e) diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/api/v1/GeneralInformationService.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/api/v1/GeneralInformationService.java index 3407acd66d5..20006e69508 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/api/v1/GeneralInformationService.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/api/v1/GeneralInformationService.java @@ -86,6 +86,7 @@ import ch.systemsx.cisd.openbis.generic.shared.authorization.validator.SimpleSpa import ch.systemsx.cisd.openbis.generic.shared.basic.TechId; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataSetRelatedEntities; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DetailedSearchCriteria; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DisplaySettings; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.EntityType; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ExperimentType; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ExternalData; @@ -217,7 +218,7 @@ public class GeneralInformationService extends AbstractServer<IGeneralInformatio @Override public int getMinorVersion() { - return 18; + return 19; } private Map<String, List<RoleAssignmentPE>> getRoleAssignmentsPerSpace() @@ -972,4 +973,28 @@ public class GeneralInformationService extends AbstractServer<IGeneralInformatio commonServer.searchForMaterials(sessionToken, detailedSearchCriteria); return Translator.translateMaterials(materials); } + + @Override + @Transactional(readOnly = true) + @RolesAllowed(RoleWithHierarchy.SPACE_OBSERVER) + @SuppressWarnings("deprecation") + public Map<String, String> getCustomDisplaySettings(String sessionToken, String webAppId) + { + final Session session = getSession(sessionToken); + return session.getPerson().getDisplaySettings().getCustomWebAppSettings(webAppId); + } + + @Override + @Transactional(readOnly = false) + @RolesAllowed(RoleWithHierarchy.SPACE_OBSERVER) + @SuppressWarnings("deprecation") + public void setCustomDisplaySettings(String sessionToken, String webAppId, + Map<String, String> customDisplaySettings) + { + final Session session = getSession(sessionToken); + final DisplaySettings displaySettings = session.getPerson().getDisplaySettings(); + displaySettings.setCustomWebAppSettings(webAppId, customDisplaySettings); + saveDisplaySettings(session.getSessionToken(), null, -1); + } + } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/api/v1/GeneralInformationServiceLogger.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/api/v1/GeneralInformationServiceLogger.java index 0752cad68e9..bd65f943caf 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/api/v1/GeneralInformationServiceLogger.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/api/v1/GeneralInformationServiceLogger.java @@ -353,4 +353,18 @@ class GeneralInformationServiceLogger extends AbstractServerLogger implements return null; } + @Override + public Map<String, String> getCustomDisplaySettings(String sessionToken, String webAppId) + { + logAccess(sessionToken, "get-custom-display-settings", "WEB_APP_ID(%s)", webAppId); + return null; + } + + @Override + public void setCustomDisplaySettings(String sessionToken, String webAppId, + Map<String, String> customDisplaySettings) + { + logAccess(sessionToken, "set-custom-display-settings", "WEB_APP_ID(%s)", webAppId); + } + } 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 d856f42792e..b2fcbe0fd96 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 @@ -72,6 +72,8 @@ public class DisplaySettings implements Serializable private Map<String, PortletConfiguration> portletConfigurations; + private Map<String, Map<String, String>> customWebAppDisplaySettings; + /** @deprecated Should be used only by DisplaySettingsManager. */ @Deprecated public Map<String, Serializable> getTechnologySpecificSettings() @@ -304,4 +306,55 @@ public class DisplaySettings implements Serializable { configurations.put(portletConfiguration.getName(), portletConfiguration); } + + /** + * @deprecated Don't use in generic web client - will be overwritten. + */ + @Deprecated + public synchronized Map<String, String> getCustomWebAppSettings(String webAppId) + { + if (customWebAppDisplaySettings == null) + { + customWebAppDisplaySettings = new HashMap<String, Map<String, String>>(); + } + Map<String, String> settings = customWebAppDisplaySettings.get(webAppId); + if (settings == null) + { + settings = new HashMap<String, String>(); + customWebAppDisplaySettings.put(webAppId, settings); + } + return settings; + } + + /** + * @deprecated Don't use in generic web client - will be overwritten. + */ + @Deprecated + public synchronized void setCustomWebAppSettings(String webAppId, + Map<String, String> customDisplaySettings) + { + if (customWebAppDisplaySettings == null) + { + customWebAppDisplaySettings = new HashMap<String, Map<String, String>>(); + } + customWebAppDisplaySettings.put(webAppId, customDisplaySettings); + } + + /** + * @deprecated Don't use in generic web client - will be overwritten. + */ + @Deprecated + public synchronized void overwriteCustomWebAppSettings(DisplaySettings customDisplaySettings) + { + synchronized (customDisplaySettings) + { + this.customWebAppDisplaySettings = customDisplaySettings.customWebAppDisplaySettings; + } + } + + @Deprecated + public synchronized void clearCustomWebAppSettings() + { + customWebAppDisplaySettings = null; + } } diff --git a/openbis_api/source/java/ch/systemsx/cisd/openbis/generic/shared/api/v1/IGeneralInformationService.java b/openbis_api/source/java/ch/systemsx/cisd/openbis/generic/shared/api/v1/IGeneralInformationService.java index 43aae7dde5f..1f3471d2519 100644 --- a/openbis_api/source/java/ch/systemsx/cisd/openbis/generic/shared/api/v1/IGeneralInformationService.java +++ b/openbis_api/source/java/ch/systemsx/cisd/openbis/generic/shared/api/v1/IGeneralInformationService.java @@ -453,4 +453,25 @@ public interface IGeneralInformationService extends IRpcService * Returns all material fulfilling specified search criteria. */ public List<Material> searchForMaterials(String sessionToken, SearchCriteria searchCriteria); + + /** + * Returns the custom display settings for a given custom web app. + * + * @param webAppId The id of the custom web app to get the display settings for. + * + * @since 1.19 + */ + public Map<String, String> getCustomDisplaySettings(String sessionToken, String webAppId); + + /** + * Sets the custom display settings for a given custom web app. + * + * @param webAppId The id of the custom web app to set the display settings for. + * @param customDisplaySettings The new display settings + * + * @since 1.19 + */ + public void setCustomDisplaySettings(String sessionToken, String webAppId, + Map<String, String> customDisplaySettings); + } -- GitLab