← Back to team overview

dhis2-devs team mailing list archive

[Branch ~dhis2-devs-core/dhis2/trunk] Rev 17773: User settings, cleanup. Moved all methods related to user settings from UserService to UserSettin...

 

------------------------------------------------------------
revno: 17773
committer: Lars Helge Overland <larshelge@xxxxxxxxx>
branch nick: dhis2
timestamp: Mon 2014-12-22 12:16:13 +0100
message:
  User settings, cleanup. Moved all methods related to user settings from UserService to UserSettingService.
modified:
  dhis-2/dhis-api/src/main/java/org/hisp/dhis/user/UserService.java
  dhis-2/dhis-api/src/main/java/org/hisp/dhis/user/UserSettingService.java
  dhis-2/dhis-api/src/main/java/org/hisp/dhis/user/UserSettingStore.java
  dhis-2/dhis-api/src/main/java/org/hisp/dhis/user/UserStore.java
  dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/message/EmailMessageSender.java
  dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/schema/AbstractPropertyIntrospectorService.java
  dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/security/DefaultSecurityService.java
  dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/sms/SmsMessageSender.java
  dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/user/DefaultUserService.java
  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/UserSettingDeletionHandler.java
  dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/user/hibernate/HibernateUserSettingStore.java
  dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/user/hibernate/HibernateUserStore.java
  dhis-2/dhis-services/dhis-service-core/src/main/resources/META-INF/dhis/beans.xml
  dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-user/src/main/java/org/hisp/dhis/user/action/AddUserAction.java
  dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-user/src/main/java/org/hisp/dhis/user/action/DeleteCurrentUserAction.java
  dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-user/src/main/java/org/hisp/dhis/user/action/SetupTreeAction.java
  dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-user/src/main/java/org/hisp/dhis/user/action/UpdateUserAction.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/UserService.java'
--- dhis-2/dhis-api/src/main/java/org/hisp/dhis/user/UserService.java	2014-12-19 15:42:38 +0000
+++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/user/UserService.java	2014-12-22 11:16:13 +0000
@@ -1,17 +1,5 @@
 package org.hisp.dhis.user;
 
-import org.hisp.dhis.dataelement.CategoryOptionGroup;
-import org.hisp.dhis.dataelement.DataElementCategoryOption;
-import org.hisp.dhis.dataset.DataSet;
-import org.hisp.dhis.organisationunit.OrganisationUnit;
-
-import java.io.Serializable;
-import java.util.Collection;
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
 /*
  * Copyright (c) 2004-2014, University of Oslo
  * All rights reserved.
@@ -40,6 +28,16 @@
  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
+import java.util.Collection;
+import java.util.Date;
+import java.util.List;
+import java.util.Set;
+
+import org.hisp.dhis.dataelement.CategoryOptionGroup;
+import org.hisp.dhis.dataelement.DataElementCategoryOption;
+import org.hisp.dhis.dataset.DataSet;
+import org.hisp.dhis.organisationunit.OrganisationUnit;
+
 /**
  * @author Chau Thu Tran
  * @version $Id$
@@ -404,88 +402,6 @@
      */
     void canIssueFilter( Collection<UserAuthorityGroup> userRoles );
     
-    // -------------------------------------------------------------------------
-    // UserSettings
-    // -------------------------------------------------------------------------
-
-    /**
-     * Adds a UserSetting.
-     *
-     * @param userSetting the UserSetting to add.
-     */
-    void addUserSetting( UserSetting userSetting );
-
-    /**
-     * If a matching UserSetting exists, based on its user and name, it will be
-     * updated, if not, the given UserSetting will be added.
-     *
-     * @param userSetting the UserSetting.
-     */
-    void addOrUpdateUserSetting( UserSetting userSetting );
-
-    /**
-     * Updates a UserSetting.
-     *
-     * @param userSetting the UserSetting to update.
-     */
-    void updateUserSetting( UserSetting userSetting );
-
-    /**
-     * Retrieves the UserSetting associated with the given User for the given
-     * UserSetting name.
-     *
-     * @param user the User.
-     * @param name the name of the UserSetting.
-     * @return the UserSetting.
-     */
-    UserSetting getUserSetting( User user, String name );
-
-    /**
-     * Retrieves a user setting value for the given user and setting name. Returns
-     * the given default value if the setting does not exist or the setting value
-     * is null.
-     *
-     * @param user         the user.
-     * @param name         the setting name.
-     * @param defaultValue the default value.
-     * @return a setting value.
-     */
-    Serializable getUserSettingValue( User user, String name, Serializable defaultValue );
-
-    /**
-     * Retrieves all UserSettings for the given User.
-     *
-     * @param user the User.
-     * @return a Collection of UserSettings.
-     */
-    Collection<UserSetting> getAllUserSettings( User user );
-
-    Collection<UserSetting> getUserSettings( String name );
-
-    /**
-     * Deletes a UserSetting.
-     *
-     * @param userSetting the UserSetting to delete.
-     */
-    void deleteUserSetting( UserSetting userSetting );
-
-    /**
-     * Returns a Map with an entry for all UserSettings with the given name where
-     * the key is the user and the value is the value of the user setting.
-     *
-     * @param name         the name of the UserSetting.
-     * @param defaultValue the value to return if the UserSetting value is null.
-     * @return a Map.
-     */
-    Map<User, Serializable> getUserSettings( String name, Serializable defaultValue );
-
-    /**
-     * Removes all user settings associated with the given user.
-     *
-     * @param user the user.
-     */
-    void removeUserSettings( User user );
-
     Collection<User> getUsersByName( String name );
 
     Collection<String> getUsernames( String query, Integer max );

=== 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	2014-05-15 16:58:37 +0000
+++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/user/UserSettingService.java	2014-12-22 11:16:13 +0000
@@ -32,6 +32,7 @@
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.List;
+import java.util.Map;
 
 /**
  * The main interface for working with user settings. Implementation need to get
@@ -60,6 +61,94 @@
     
     final List<Integer> DASHBOARD_CHARTS_TO_DISPLAY = Arrays.asList( 4, 6, 8 );
 
+    // -------------------------------------------------------------------------
+    // UserSettings
+    // -------------------------------------------------------------------------
+
+    /**
+     * Adds a UserSetting.
+     *
+     * @param userSetting the UserSetting to add.
+     */
+    void addUserSetting( UserSetting userSetting );
+
+    /**
+     * If a matching UserSetting exists, based on its user and name, it will be
+     * updated, if not, the given UserSetting will be added.
+     *
+     * @param userSetting the UserSetting.
+     */
+    void addOrUpdateUserSetting( UserSetting userSetting );
+
+    /**
+     * Updates a UserSetting.
+     *
+     * @param userSetting the UserSetting to update.
+     */
+    void updateUserSetting( UserSetting userSetting );
+
+    /**
+     * Retrieves the UserSetting associated with the given User for the given
+     * UserSetting name.
+     *
+     * @param user the User.
+     * @param name the name of the UserSetting.
+     * @return the UserSetting.
+     */
+    UserSetting getUserSetting( User user, String name );
+
+    /**
+     * Retrieves a user setting value for the given user and setting name. Returns
+     * the given default value if the setting does not exist or the setting value
+     * is null.
+     *
+     * @param user         the user.
+     * @param name         the setting name.
+     * @param defaultValue the default value.
+     * @return a setting value.
+     */
+    Serializable getUserSettingValue( User user, String name, Serializable defaultValue );
+
+    /**
+     * Retrieves all UserSettings for the given User.
+     *
+     * @param user the User.
+     * @return a Collection of UserSettings.
+     */
+    Collection<UserSetting> getAllUserSettings( User user );
+
+    /**
+     * Retrieves all UserSettings with the given name.
+     * 
+     * @param name the name.
+     * @return a Collection of UserSettings.
+     */
+    Collection<UserSetting> getUserSettings( String name );
+
+    /**
+     * Deletes a UserSetting.
+     *
+     * @param userSetting the UserSetting to delete.
+     */
+    void deleteUserSetting( UserSetting userSetting );
+
+    /**
+     * Returns a Map with an entry for all UserSettings with the given name where
+     * the key is the user and the value is the value of the user setting.
+     *
+     * @param name         the name of the UserSetting.
+     * @param defaultValue the value to return if the UserSetting value is null.
+     * @return a Map.
+     */
+    Map<User, Serializable> getUserSettings( String name, Serializable defaultValue );
+
+    /**
+     * Removes all user settings associated with the given user.
+     *
+     * @param user the user.
+     */
+    void removeUserSettings( User user );
+
     /**
      * Saves the name/value pair as a user setting connected to the currently
      * logged in user.
@@ -107,7 +196,7 @@
      * 
      * @param name the name of the user setting.
      * @param defaultValue the value to return if there is no current user or no
-     *        user setting correspoinding to the given name.
+     *        user setting corresponding to the given name.
      * @return the value corresponding to the names user setting, or the default
      *         value if there is no current user or matching user setting.
      */

=== modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/user/UserSettingStore.java'
--- dhis-2/dhis-api/src/main/java/org/hisp/dhis/user/UserSettingStore.java	2014-10-01 10:19:12 +0000
+++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/user/UserSettingStore.java	2014-12-22 11:16:13 +0000
@@ -50,4 +50,11 @@
      * @return a Collection of UserSettings.
      */
     Collection<UserSetting> getUserSettings( String name );
+
+    /**
+     * Removes all user settings associated with the given user.
+     * 
+     * @param user the user.
+     */
+    void removeUserSettings( User user );
 }

=== modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/user/UserStore.java'
--- dhis-2/dhis-api/src/main/java/org/hisp/dhis/user/UserStore.java	2014-03-18 08:10:10 +0000
+++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/user/UserStore.java	2014-12-22 11:16:13 +0000
@@ -68,12 +68,11 @@
     Collection<User> getUsersByPhoneNumber( String phoneNumber );
 
     /**
-     * Removes all user settings associated with the given user.
+     * Returns all users with the given name. Matches on the first name and
+     * surname properties of the user.
      * 
-     * @param user the user.
+     * @param name the name.
+     * @return a Collection of Users.
      */
-    void removeUserSettings( User user );
-
     Collection<User> getUsersByName( String name );
-
 }

=== modified file 'dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/message/EmailMessageSender.java'
--- dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/message/EmailMessageSender.java	2014-11-18 12:55:20 +0000
+++ dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/message/EmailMessageSender.java	2014-12-22 11:16:13 +0000
@@ -44,7 +44,7 @@
 import org.hisp.dhis.setting.SystemSettingManager;
 import org.hisp.dhis.system.util.DebugUtils;
 import org.hisp.dhis.user.User;
-import org.hisp.dhis.user.UserService;
+import org.hisp.dhis.user.UserSettingService;
 import org.springframework.scheduling.annotation.Async;
 
 /**
@@ -78,11 +78,11 @@
         this.configurationService = configurationService;
     }
     
-    private UserService userService;
+    private UserSettingService userSettingService;
 
-    public void setUserService( UserService userService )
+    public void setUserSettingService( UserSettingService userSettingService )
     {
-        this.userService = userService;
+        this.userSettingService = userSettingService;
     }
 
     // -------------------------------------------------------------------------
@@ -124,7 +124,7 @@
             
             for ( User user : users )
             {
-                boolean doSend = forceSend || (Boolean) userService.getUserSettingValue( user, KEY_MESSAGE_EMAIL_NOTIFICATION, false );
+                boolean doSend = forceSend || (Boolean) userSettingService.getUserSettingValue( user, KEY_MESSAGE_EMAIL_NOTIFICATION, false );
                 
                 if ( doSend && user.getEmail() != null && !user.getEmail().trim().isEmpty() )
                 {

=== modified file 'dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/schema/AbstractPropertyIntrospectorService.java'
--- dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/schema/AbstractPropertyIntrospectorService.java	2014-12-19 13:27:39 +0000
+++ dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/schema/AbstractPropertyIntrospectorService.java	2014-12-22 11:16:13 +0000
@@ -28,9 +28,11 @@
  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE
  */
 
-import com.google.common.collect.ImmutableMap;
-import com.google.common.collect.Lists;
-import com.google.common.collect.Maps;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
 import org.hibernate.SessionFactory;
 import org.hibernate.mapping.Collection;
 import org.hibernate.mapping.Column;
@@ -53,10 +55,9 @@
 import org.springframework.context.ApplicationContext;
 import org.springframework.orm.hibernate4.LocalSessionFactoryBean;
 
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
 
 /**
  * @author Morten Olav Hansen <mortenoh@xxxxxxxxx>
@@ -139,7 +140,7 @@
         LocalSessionFactoryBean sessionFactoryBean = getLocalSessionFactoryBean();
         PersistentClass persistentClass = sessionFactoryBean.getConfiguration().getClassMapping( klass.getName() );
 
-        Iterator propertyIterator = persistentClass.getPropertyClosureIterator();
+        Iterator<?> propertyIterator = persistentClass.getPropertyClosureIterator();
 
         Map<String, Property> properties = new HashMap<>();
 

=== modified file 'dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/security/DefaultSecurityService.java'
--- dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/security/DefaultSecurityService.java	2014-12-19 15:42:38 +0000
+++ dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/security/DefaultSecurityService.java	2014-12-22 11:16:13 +0000
@@ -117,6 +117,9 @@
 
     @Autowired
     private CurrentUserService currentUserService;
+    
+    @Autowired
+    private UserSettingService userSettingService;
 
     @Autowired
     private AclService aclService;
@@ -231,7 +234,7 @@
         vars.put( "username", credentials.getUsername() );
 
         User user = credentials.getUser();
-        Locale locale = (Locale) userService.getUserSettingValue( user, UserSettingService.KEY_UI_LOCALE, LocaleManager.DHIS_STANDARD_LOCALE );
+        Locale locale = (Locale) userSettingService.getUserSettingValue( user, UserSettingService.KEY_UI_LOCALE, LocaleManager.DHIS_STANDARD_LOCALE );
 
         I18n i18n = i18nManager.getI18n( locale );
         vars.put( "i18n" , i18n );

=== modified file 'dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/sms/SmsMessageSender.java'
--- dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/sms/SmsMessageSender.java	2014-09-10 04:36:51 +0000
+++ dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/sms/SmsMessageSender.java	2014-12-22 11:16:13 +0000
@@ -43,7 +43,6 @@
 import org.hisp.dhis.sms.outbound.OutboundSmsTransportService;
 import org.hisp.dhis.user.CurrentUserService;
 import org.hisp.dhis.user.User;
-import org.hisp.dhis.user.UserService;
 import org.hisp.dhis.user.UserSetting;
 import org.hisp.dhis.user.UserSettingService;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -64,26 +63,15 @@
     // Dependencies
     // -------------------------------------------------------------------------
 
+    @Autowired
     private CurrentUserService currentUserService;
 
-    public void setCurrentUserService( CurrentUserService currentUserService )
-    {
-        this.currentUserService = currentUserService;
-    }
-
-    private UserService userService;
-
-    public void setUserService( UserService userService )
-    {
-        this.userService = userService;
-    }
+    @Autowired
+    private UserSettingService userSettingService;
 
     @Autowired
     private OutboundSmsTransportService outboundSmsTransportService;
 
-    /**
-     * Note this methods is invoked asynchronously.
-     */
     // @Async
     @Override
     public String sendMessage( String subject, String text, User sender, Set<User> users, boolean forceSend )
@@ -187,8 +175,7 @@
         else
         // Receiver is user
         {
-            UserSetting userSetting = userService
-                .getUserSetting( user, UserSettingService.KEY_MESSAGE_SMS_NOTIFICATION );
+            UserSetting userSetting = userSettingService.getUserSetting( user, UserSettingService.KEY_MESSAGE_SMS_NOTIFICATION );
 
             return (userSetting != null && userSetting.getValue() != null) ? (Boolean) userSetting.getValue() : false;
         }

=== modified file 'dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/user/DefaultUserService.java'
--- dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/user/DefaultUserService.java	2014-12-19 15:56:06 +0000
+++ dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/user/DefaultUserService.java	2014-12-22 11:16:13 +0000
@@ -30,15 +30,12 @@
 
 import static org.hisp.dhis.setting.SystemSettingManager.KEY_CAN_GRANT_OWN_USER_AUTHORITY_GROUPS;
 
-import java.io.Serializable;
 import java.util.ArrayList;
 import java.util.Calendar;
 import java.util.Collection;
 import java.util.Date;
-import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
-import java.util.Map;
 import java.util.Set;
 
 import org.apache.commons.lang.StringUtils;
@@ -95,13 +92,6 @@
         this.userAuthorityGroupStore = userAuthorityGroupStore;
     }
     
-    private UserSettingStore userSettingStore;
-
-    public void setUserSettingStore( UserSettingStore userSettingStore )
-    {
-        this.userSettingStore = userSettingStore;
-    }
-
     private CurrentUserService currentUserService;
 
     public void setCurrentUserService( CurrentUserService currentUserService )
@@ -714,91 +704,12 @@
     // -------------------------------------------------------------------------
 
     @Override
-    public void addUserSetting( UserSetting userSetting )
-    {
-        userSettingStore.addUserSetting( userSetting );
-    }
-
-    @Override
-    public void addOrUpdateUserSetting( UserSetting userSetting )
-    {
-        UserSetting setting = getUserSetting( userSetting.getUser(), userSetting.getName() );
-
-        if ( setting != null )
-        {
-            setting.mergeWith( userSetting );
-            updateUserSetting( setting );
-        }
-        else
-        {
-            addUserSetting( userSetting );
-        }
-    }
-
-    @Override
-    public void updateUserSetting( UserSetting userSetting )
-    {
-        userSettingStore.updateUserSetting( userSetting );
-    }
-
-    @Override
-    public void deleteUserSetting( UserSetting userSetting )
-    {
-        userSettingStore.deleteUserSetting( userSetting );
-    }
-
-    @Override
-    public Collection<UserSetting> getAllUserSettings( User user )
-    {
-        return userSettingStore.getAllUserSettings( user );
-    }
-
-    @Override
-    public Collection<UserSetting> getUserSettings( String name )
-    {
-        return userSettingStore.getUserSettings( name );
-    }
-
-    @Override
-    public UserSetting getUserSetting( User user, String name )
-    {
-        return userSettingStore.getUserSetting( user, name );
-    }
-
-    @Override
-    public Serializable getUserSettingValue( User user, String name, Serializable defaultValue )
-    {
-        UserSetting setting = getUserSetting( user, name );
-
-        return setting != null && setting.getValue() != null ? setting.getValue() : defaultValue;
-    }
-
-    @Override
-    public Map<User, Serializable> getUserSettings( String name, Serializable defaultValue )
-    {
-        Map<User, Serializable> map = new HashMap<>();
-
-        for ( UserSetting setting : userSettingStore.getUserSettings( name ) )
-        {
-            map.put( setting.getUser(), setting.getValue() != null ? setting.getValue() : defaultValue );
-        }
-
-        return map;
-    }
-
-    @Override
     public Collection<User> getUsersByOrganisationUnits( Collection<OrganisationUnit> units )
     {
         return userStore.getUsersByOrganisationUnits( units );
     }
 
     @Override
-    public void removeUserSettings( User user )
-    {
-        userStore.removeUserSettings( user );
-    }
-
-    @Override
     public Collection<String> getUsernames( String query, Integer max )
     {
         return userCredentialsStore.getUsernames( query, max );

=== 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	2014-10-16 06:17:19 +0000
+++ dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/user/DefaultUserSettingService.java	2014-12-22 11:16:13 +0000
@@ -33,6 +33,8 @@
 import java.io.Serializable;
 import java.util.Collection;
 import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
 
 /**
  * @author Torgeir Lorange Ostby
@@ -53,6 +55,13 @@
         this.currentUserService = currentUserService;
     }
 
+    private UserSettingStore userSettingStore;
+
+    public void setUserSettingStore( UserSettingStore userSettingStore )
+    {
+        this.userSettingStore = userSettingStore;
+    }
+
     private UserService userService;
 
     public void setUserService( UserService userService )
@@ -65,6 +74,89 @@
     // -------------------------------------------------------------------------
 
     @Override
+    public void addUserSetting( UserSetting userSetting )
+    {
+        userSettingStore.addUserSetting( userSetting );
+    }
+
+    @Override
+    public void addOrUpdateUserSetting( UserSetting userSetting )
+    {
+        UserSetting setting = getUserSetting( userSetting.getUser(), userSetting.getName() );
+
+        if ( setting != null )
+        {
+            setting.mergeWith( userSetting );
+            updateUserSetting( setting );
+        }
+        else
+        {
+            addUserSetting( userSetting );
+        }
+    }
+
+    @Override
+    public void updateUserSetting( UserSetting userSetting )
+    {
+        userSettingStore.updateUserSetting( userSetting );
+    }
+
+    @Override
+    public void deleteUserSetting( UserSetting userSetting )
+    {
+        userSettingStore.deleteUserSetting( userSetting );
+    }
+
+    @Override
+    public Collection<UserSetting> getAllUserSettings( User user )
+    {
+        return userSettingStore.getAllUserSettings( user );
+    }
+
+    @Override
+    public Collection<UserSetting> getUserSettings( String name )
+    {
+        return userSettingStore.getUserSettings( name );
+    }
+
+    @Override
+    public UserSetting getUserSetting( User user, String name )
+    {
+        return userSettingStore.getUserSetting( user, name );
+    }
+
+    @Override
+    public Serializable getUserSettingValue( User user, String name, Serializable defaultValue )
+    {
+        UserSetting setting = getUserSetting( user, name );
+
+        return setting != null && setting.getValue() != null ? setting.getValue() : defaultValue;
+    }
+
+    @Override
+    public Map<User, Serializable> getUserSettings( String name, Serializable defaultValue )
+    {
+        Map<User, Serializable> map = new HashMap<>();
+
+        for ( UserSetting setting : userSettingStore.getUserSettings( name ) )
+        {
+            map.put( setting.getUser(), setting.getValue() != null ? setting.getValue() : defaultValue );
+        }
+
+        return map;
+    }
+
+    @Override
+    public void removeUserSettings( User user )
+    {
+        userSettingStore.removeUserSettings( user );
+    }
+
+    // -------------------------------------------------------------------------
+    // UserSettingService implementation
+    // -------------------------------------------------------------------------
+
+    @Override
     public void saveUserSetting( String name, Serializable value )
     {
         User currentUser = currentUserService.getCurrentUser();
@@ -90,7 +182,7 @@
             return;
         }
 
-        UserSetting userSetting = userService.getUserSetting( user, name );
+        UserSetting userSetting = getUserSetting( user, name );
 
         if ( userSetting == null )
         {
@@ -99,13 +191,13 @@
             userSetting.setName( name );
             userSetting.setValue( value );
 
-            userService.addUserSetting( userSetting );
+            addUserSetting( userSetting );
         }
         else
         {
             userSetting.setValue( value );
 
-            userService.updateUserSetting( userSetting );
+            updateUserSetting( userSetting );
         }
     }
 
@@ -132,7 +224,7 @@
             return null;
         }
 
-        UserSetting userSetting = userService.getUserSetting( currentUser, name );
+        UserSetting userSetting = getUserSetting( currentUser, name );
 
         if ( userSetting != null )
         {
@@ -152,7 +244,7 @@
             return defaultValue;
         }
 
-        UserSetting userSetting = userService.getUserSetting( currentUser, name );
+        UserSetting userSetting = getUserSetting( currentUser, name );
 
         if ( userSetting != null )
         {
@@ -172,7 +264,7 @@
             return Collections.emptySet();
         }
 
-        return userService.getAllUserSettings( currentUser );
+        return getAllUserSettings( currentUser );
     }
 
     @Override
@@ -182,7 +274,7 @@
 
         if ( currentUser != null )
         {
-            userService.deleteUserSetting( userService.getUserSetting( currentUser, name ) );
+            deleteUserSetting( getUserSetting( currentUser, name ) );
         }
     }
 }

=== modified file 'dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/user/UserSettingDeletionHandler.java'
--- dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/user/UserSettingDeletionHandler.java	2014-10-15 04:17:05 +0000
+++ dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/user/UserSettingDeletionHandler.java	2014-12-22 11:16:13 +0000
@@ -33,7 +33,6 @@
 
 /**
  * @author Lars Helge Overland
- * @version $Id$
  */
 public class UserSettingDeletionHandler
     extends DeletionHandler
@@ -43,7 +42,7 @@
     // -------------------------------------------------------------------------
 
     @Autowired
-    private UserService userService;
+    private UserSettingService userSettingService;
     
     // -------------------------------------------------------------------------
     // DeletionHandler implementation
@@ -58,9 +57,9 @@
     @Override
     public void deleteUser( User user )
     {
-        for ( UserSetting setting : userService.getAllUserSettings( user ) )
+        for ( UserSetting setting : userSettingService.getAllUserSettings( user ) )
         {
-            userService.deleteUserSetting( setting );
+            userSettingService.deleteUserSetting( setting );
         }
     }
 }

=== modified file 'dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/user/hibernate/HibernateUserSettingStore.java'
--- dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/user/hibernate/HibernateUserSettingStore.java	2014-10-16 06:17:19 +0000
+++ dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/user/hibernate/HibernateUserSettingStore.java	2014-12-22 11:16:13 +0000
@@ -117,4 +117,14 @@
 
         session.delete( userSetting );
     }
+
+    @Override
+    public void removeUserSettings( User user )
+    {
+        Session session = sessionFactory.getCurrentSession();
+        
+        String hql = "delete from UserSetting us where us.user = :user";
+
+        session.createQuery( hql ).setEntity( "user", user ).executeUpdate();
+    }
 }

=== modified file 'dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/user/hibernate/HibernateUserStore.java'
--- dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/user/hibernate/HibernateUserStore.java	2014-10-16 06:17:19 +0000
+++ dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/user/hibernate/HibernateUserStore.java	2014-12-22 11:16:13 +0000
@@ -116,14 +116,6 @@
     }
 
     @Override
-    public void removeUserSettings( User user )
-    {
-        String hql = "delete from UserSetting us where us.user = :user";
-
-        getQuery( hql ).setEntity( "user", user ).executeUpdate();
-    }
-
-    @Override
     @SuppressWarnings("unchecked")
     public List<User> getUsersByName( String name )
     {

=== modified file 'dhis-2/dhis-services/dhis-service-core/src/main/resources/META-INF/dhis/beans.xml'
--- dhis-2/dhis-services/dhis-service-core/src/main/resources/META-INF/dhis/beans.xml	2014-12-22 10:31:50 +0000
+++ dhis-2/dhis-services/dhis-service-core/src/main/resources/META-INF/dhis/beans.xml	2014-12-22 11:16:13 +0000
@@ -585,6 +585,7 @@
 
   <bean id="org.hisp.dhis.user.UserSettingService" class="org.hisp.dhis.user.DefaultUserSettingService">
     <property name="currentUserService" ref="org.hisp.dhis.user.CurrentUserService" />
+    <property name="userSettingStore" ref="org.hisp.dhis.user.UserSettingStore" />
     <property name="userService" ref="org.hisp.dhis.user.UserService" />
   </bean>
 
@@ -592,7 +593,6 @@
     <property name="userStore" ref="org.hisp.dhis.user.UserStore" />
     <property name="userCredentialsStore" ref="org.hisp.dhis.user.UserCredentialsStore" />
     <property name="userAuthorityGroupStore" ref="org.hisp.dhis.user.UserAuthorityGroupStore" />
-    <property name="userSettingStore" ref="org.hisp.dhis.user.UserSettingStore" />
     <property name="currentUserService" ref="org.hisp.dhis.user.CurrentUserService" />
     <property name="categoryService" ref="org.hisp.dhis.dataelement.DataElementCategoryService" />
     <property name="systemSettingManager" ref="org.hisp.dhis.setting.SystemSettingManager" />
@@ -637,7 +637,7 @@
   <bean id="emailMessageSender" class="org.hisp.dhis.message.EmailMessageSender">
     <property name="systemSettingManager" ref="org.hisp.dhis.setting.SystemSettingManager" />
     <property name="configurationService" ref="org.hisp.dhis.configuration.ConfigurationService" />
-    <property name="userService" ref="org.hisp.dhis.user.UserService" />
+    <property name="userSettingService" ref="org.hisp.dhis.user.UserSettingService" />
   </bean>
 
   <bean id="org.hisp.dhis.email.EmailService" class="org.hisp.dhis.email.DefaultEmailService">
@@ -888,7 +888,6 @@
     <property name="smsCommandService" ref="smsCommandService" />
     <property name="messageService" ref="org.hisp.dhis.message.MessageService" />
     <property name="smsMessageSender" ref="org.hisp.dhis.sms.SmsMessageSender" />
-    <property name="userService" ref="org.hisp.dhis.user.UserService" />
     <property name="incomingSmsService" ref="org.hisp.dhis.sms.incoming.IncomingSmsService" />
   </bean>
 
@@ -900,10 +899,7 @@
     <property name="incomingSmsService" ref="org.hisp.dhis.sms.incoming.IncomingSmsService" />
   </bean>
 
-  <bean id="org.hisp.dhis.sms.SmsMessageSender" class="org.hisp.dhis.sms.SmsMessageSender">
-    <property name="currentUserService" ref="org.hisp.dhis.user.CurrentUserService" />
-    <property name="userService" ref="org.hisp.dhis.user.UserService" />
-  </bean>
+  <bean id="org.hisp.dhis.sms.SmsMessageSender" class="org.hisp.dhis.sms.SmsMessageSender"/>
 
   <bean id="org.hisp.dhis.sms.task.SendSmsTask" class="org.hisp.dhis.sms.task.SendSmsTask" />
 

=== modified file 'dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-user/src/main/java/org/hisp/dhis/user/action/AddUserAction.java'
--- dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-user/src/main/java/org/hisp/dhis/user/action/AddUserAction.java	2014-12-21 18:12:49 +0000
+++ dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-user/src/main/java/org/hisp/dhis/user/action/AddUserAction.java	2014-12-22 11:16:13 +0000
@@ -115,6 +115,9 @@
 
     @Autowired
     private CurrentUserService currentUserService;
+    
+    @Autowired
+    private UserSettingService userSettingService;
 
     @Autowired
     private UserGroupService userGroupService;
@@ -391,8 +394,8 @@
         // User settings
         // ---------------------------------------------------------------------
 
-        userService.addUserSetting( new UserSetting( user, UserSettingService.KEY_UI_LOCALE, LocaleUtils.getLocale( localeUi ) ) );
-        userService.addUserSetting( new UserSetting( user, UserSettingService.KEY_DB_LOCALE, LocaleUtils.getLocale( localeDb ) ) );
+        userSettingService.addUserSetting( new UserSetting( user, UserSettingService.KEY_UI_LOCALE, LocaleUtils.getLocale( localeUi ) ) );
+        userSettingService.addUserSetting( new UserSetting( user, UserSettingService.KEY_DB_LOCALE, LocaleUtils.getLocale( localeDb ) ) );
 
         if ( ACCOUNT_ACTION_INVITE.equals( accountAction ) )
         {

=== modified file 'dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-user/src/main/java/org/hisp/dhis/user/action/DeleteCurrentUserAction.java'
--- dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-user/src/main/java/org/hisp/dhis/user/action/DeleteCurrentUserAction.java	2014-11-24 14:15:14 +0000
+++ dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-user/src/main/java/org/hisp/dhis/user/action/DeleteCurrentUserAction.java	2014-12-22 11:16:13 +0000
@@ -29,7 +29,9 @@
  */
 
 import com.opensymphony.xwork2.Action;
+
 import java.util.Collection;
+
 import org.hisp.dhis.i18n.I18n;
 import org.hisp.dhis.security.migration.MigrationPasswordManager;
 import org.hisp.dhis.user.CurrentUserService;
@@ -37,6 +39,8 @@
 import org.hisp.dhis.user.UserCredentials;
 import org.hisp.dhis.user.UserService;
 import org.hisp.dhis.user.UserSetting;
+import org.hisp.dhis.user.UserSettingService;
+import org.springframework.beans.factory.annotation.Autowired;
 
 public class DeleteCurrentUserAction 
     implements Action
@@ -62,6 +66,13 @@
         this.userService = userService;
     }
 
+    @Autowired
+    private UserSettingService userSettingService;
+
+    // -------------------------------------------------------------------------
+    // Input & Output
+    // -------------------------------------------------------------------------
+
     private I18n i18n;
 
     public void setI18n( I18n i18n )
@@ -100,10 +111,14 @@
         this.oldPassword = oldPassword;
     }
 
+    // -------------------------------------------------------------------------
+    // Action implementation
+    // -------------------------------------------------------------------------
+
     @Override
     public String execute() throws Exception
     {
-        message = " ";
+        message = "";
         User user = userService.getUser( currentUserService.getCurrentUser().getId() );
 
         UserCredentials userCredentials = userService.getUserCredentials( user );
@@ -130,11 +145,11 @@
         }
         else
         {
-            Collection<UserSetting> userSettings = userService.getAllUserSettings( user );
+            Collection<UserSetting> userSettings = userSettingService.getAllUserSettings( user );
 
             for ( UserSetting userSetting : userSettings )
             {
-                userService.deleteUserSetting( userSetting );
+                userSettingService.deleteUserSetting( userSetting );
             }
 
             if ( userService.isLastSuperUser( userCredentials ) )

=== modified file 'dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-user/src/main/java/org/hisp/dhis/user/action/SetupTreeAction.java'
--- dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-user/src/main/java/org/hisp/dhis/user/action/SetupTreeAction.java	2014-10-16 06:17:19 +0000
+++ dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-user/src/main/java/org/hisp/dhis/user/action/SetupTreeAction.java	2014-12-22 11:16:13 +0000
@@ -52,6 +52,8 @@
 import org.hisp.dhis.user.UserAuthorityGroup;
 import org.hisp.dhis.user.UserCredentials;
 import org.hisp.dhis.user.UserService;
+import org.hisp.dhis.user.UserSettingService;
+import org.springframework.beans.factory.annotation.Autowired;
 
 import com.opensymphony.xwork2.Action;
 
@@ -108,6 +110,9 @@
         this.localeManager = localeManager;
     }
 
+    @Autowired
+    private UserSettingService userSettingService;
+
     // -------------------------------------------------------------------------
     // Input & Output
     // -------------------------------------------------------------------------
@@ -233,9 +238,9 @@
 
             attributeValues = AttributeUtils.getAttributeValueMap( user.getAttributeValues() );
             
-            currentLocale = (Locale) userService.getUserSettingValue( user, KEY_UI_LOCALE, LocaleManager.DHIS_STANDARD_LOCALE );
+            currentLocale = (Locale) userSettingService.getUserSettingValue( user, KEY_UI_LOCALE, LocaleManager.DHIS_STANDARD_LOCALE );
             
-            currentLocaleDb = (Locale) userService.getUserSettingValue( user, KEY_DB_LOCALE, null );
+            currentLocaleDb = (Locale) userSettingService.getUserSettingValue( user, KEY_DB_LOCALE, null );
         }
         else
         {            

=== modified file 'dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-user/src/main/java/org/hisp/dhis/user/action/UpdateUserAction.java'
--- dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-user/src/main/java/org/hisp/dhis/user/action/UpdateUserAction.java	2014-12-19 15:42:38 +0000
+++ dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-user/src/main/java/org/hisp/dhis/user/action/UpdateUserAction.java	2014-12-22 11:16:13 +0000
@@ -108,6 +108,9 @@
     private IdentifiableObjectManager manager;
 
     @Autowired
+    private UserSettingService userSettingService;
+
+    @Autowired
     private UserGroupService userGroupService;
 
     @Autowired
@@ -371,8 +374,8 @@
         // User settings
         // ---------------------------------------------------------------------
 
-        userService.addOrUpdateUserSetting( new UserSetting( user, UserSettingService.KEY_UI_LOCALE, LocaleUtils.getLocale( localeUi ) ) );
-        userService.addOrUpdateUserSetting( new UserSetting( user, UserSettingService.KEY_DB_LOCALE, LocaleUtils.getLocale( localeDb ) ) );
+        userSettingService.addOrUpdateUserSetting( new UserSetting( user, UserSettingService.KEY_UI_LOCALE, LocaleUtils.getLocale( localeUi ) ) );
+        userSettingService.addOrUpdateUserSetting( new UserSetting( user, UserSettingService.KEY_DB_LOCALE, LocaleUtils.getLocale( localeDb ) ) );
 
         // ---------------------------------------------------------------------
         // User groups