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