← Back to team overview

dhis2-devs team mailing list archive

[Branch ~dhis2-devs-core/dhis2/trunk] Rev 22317: Moved code for getting user settings with fallback into own method in service, from controller

 

Merge authors:
  Stian Sandvold (stian-sandvold)
------------------------------------------------------------
revno: 22317 [merge]
committer: Stian Sandvold <stian.sandvold@xxxxxxxxx>
branch nick: dhis2
timestamp: Tue 2016-03-15 11:12:20 +0100
message:
  Moved code for getting user settings with fallback into own method in service, from controller
modified:
  dhis-2/dhis-api/src/main/java/org/hisp/dhis/user/UserSettingService.java
  dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/user/DefaultUserSettingService.java
  dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/webapi/controller/UserSettingController.java


--
lp:dhis2
https://code.launchpad.net/~dhis2-devs-core/dhis2/trunk

Your team DHIS 2 developers is subscribed to branch lp:dhis2.
To unsubscribe from this branch go to https://code.launchpad.net/~dhis2-devs-core/dhis2/trunk/+edit-subscription
=== modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/user/UserSettingService.java'
--- dhis-2/dhis-api/src/main/java/org/hisp/dhis/user/UserSettingService.java	2016-01-04 02:27:49 +0000
+++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/user/UserSettingService.java	2016-03-15 10:04:09 +0000
@@ -30,6 +30,8 @@
 
 import java.io.Serializable;
 import java.util.List;
+import java.util.Map;
+import java.util.Set;
 
 /**
  * The main interface for working with user settings. Implementation need to get
@@ -128,6 +130,14 @@
      * @return all user settings belonging to the current user.
      */
     List<UserSetting> getAllUserSettings();
+
+    /**
+     * Returns all specified user settings. If any user settings have not been set,
+     * system settings will be used as a fallback.
+     * @param names the settings to retrieve
+     * @return a map of setting names and their values
+     */
+    Map<String, Serializable> getUserSettingsWithFallbackByUserAsMap( User user, Set<String> names );
     
     /**
      * Invalidates in-memory caches.

=== modified file 'dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/user/DefaultUserSettingService.java'
--- dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/user/DefaultUserSettingService.java	2016-03-14 18:04:21 +0000
+++ dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/user/DefaultUserSettingService.java	2016-03-15 10:09:43 +0000
@@ -42,12 +42,10 @@
 import org.springframework.transaction.support.TransactionTemplate;
 
 import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-import java.util.Optional;
+import java.util.*;
 import java.util.concurrent.ExecutionException;
 import java.util.concurrent.TimeUnit;
+import java.util.function.Consumer;
 import java.util.stream.Collectors;
 
 /**
@@ -232,6 +230,22 @@
     }
 
     @Override
+    public Map<String, Serializable> getUserSettingsWithFallbackByUserAsMap( User user, Set<String> names )
+    {
+        Map<String, Serializable> result = Sets.newHashSet( getUserSettings(user) ).stream()
+            .collect( Collectors.toMap( UserSetting::getName, UserSetting::getValue ) );
+
+        names.forEach( name -> {
+            if ( !result.containsKey( name ) )
+            {
+                result.put( name, systemSettingManager.getSystemSetting( NAME_SETTING_KEY_MAP.get( name ) ) );
+            }
+        } );
+
+        return result;
+    }
+
+    @Override
     @Transactional
     public List<UserSetting> getUserSettings( User user )
     {
@@ -263,15 +277,15 @@
         try
         {
             String username = user.isPresent() ? user.get().getUsername() : currentUserService.getCurrentUsername();
-            
+
             String cacheKey = getCacheKey( key.getName(), username );
-            
+
             Optional<Serializable> result = SETTING_CACHE.
                 get( cacheKey, () -> getUserSettingOptional( key, username ) );
 
             if ( !result.isPresent() && NAME_SETTING_KEY_MAP.containsKey( key.getName() ) )
             {
-                return Optional.ofNullable( 
+                return Optional.ofNullable(
                     systemSettingManager.getSystemSetting( NAME_SETTING_KEY_MAP.get( key.getName() ) ) );
             }
             else

=== modified file 'dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/webapi/controller/UserSettingController.java'
--- dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/webapi/controller/UserSettingController.java	2016-03-14 14:46:23 +0000
+++ dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/webapi/controller/UserSettingController.java	2016-03-15 10:09:43 +0000
@@ -29,18 +29,9 @@
  */
 
 import com.google.common.collect.Sets;
+import org.hisp.dhis.dxf2.webmessage.WebMessageException;
 import org.hisp.dhis.render.RenderService;
-
-import org.hisp.dhis.dxf2.webmessage.WebMessageException;
-import org.hisp.dhis.setting.SettingKey;
-import org.hisp.dhis.setting.SystemSettingManager;
-import org.hisp.dhis.user.CurrentUserService;
-import org.hisp.dhis.user.User;
-import org.hisp.dhis.user.UserCredentials;
-import org.hisp.dhis.user.UserService;
-import org.hisp.dhis.user.UserSetting;
-import org.hisp.dhis.user.UserSettingKey;
-import org.hisp.dhis.user.UserSettingService;
+import org.hisp.dhis.user.*;
 import org.hisp.dhis.util.ObjectUtils;
 import org.hisp.dhis.webapi.service.WebMessageService;
 import org.hisp.dhis.webapi.utils.ContextUtils;
@@ -48,18 +39,15 @@
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.MediaType;
 import org.springframework.stereotype.Controller;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestMethod;
-import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
-
 import java.io.IOException;
 import java.io.Serializable;
-import java.util.*;
+import java.util.Map;
+import java.util.Optional;
+import java.util.Set;
 import java.util.stream.Collectors;
 
 /**
@@ -69,9 +57,6 @@
 @RequestMapping( "/userSettings" )
 public class UserSettingController
 {
-    private static final Map<String, SettingKey> NAME_SETTING_KEY_MAP = Sets.newHashSet(
-        SettingKey.values() ).stream().collect( Collectors.toMap( SettingKey::getName, s -> s ) );
-
     @Autowired
     private UserSettingService userSettingService;
 
@@ -87,8 +72,8 @@
     @Autowired
     private RenderService renderService;
 
-    @Autowired
-    private SystemSettingManager systemSettingManager;
+    private static final Set<String> USER_SETTING_NAMES = Sets.newHashSet(
+        UserSettingKey.values() ).stream().map( UserSettingKey::getName ).collect( Collectors.toSet() );
 
     // -------------------------------------------------------------------------
     // Resources
@@ -205,25 +190,10 @@
             us = currentUserService.getCurrentUser();
         }
 
-        Map<String, Serializable> settings = new HashMap<>();
-
-        // Find fall-back for missing users settings
-        
-        userSettingService.getUserSettings( us ).stream().filter( UserSetting::hasValue )
-            .forEach( userSetting -> settings.put( userSetting.getName(), userSetting.getValue() ) );
-
-        // Add missing user settings
-        
-        for ( UserSettingKey userSettingKey : UserSettingKey.values() )
-        {
-            if ( !settings.containsKey( userSettingKey.getName() ) )
-            {
-                settings.put( userSettingKey.getName(),
-                    systemSettingManager.getSystemSetting( NAME_SETTING_KEY_MAP.get( userSettingKey.getName() ) ) );
-            }
-        }
-
-        renderService.toJson( response.getOutputStream(), settings );
+        Map<String, Serializable> result = userSettingService
+            .getUserSettingsWithFallbackByUserAsMap( us, USER_SETTING_NAMES );
+
+        renderService.toJson( response.getOutputStream(), result );
     }
 
     @RequestMapping( value = "/{key}", method = RequestMethod.DELETE )