You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@archiva.apache.org by ol...@apache.org on 2013/02/22 17:05:08 UTC

svn commit: r1449091 - /archiva/trunk/archiva-modules/archiva-web/archiva-web-common/src/main/java/org/apache/archiva/web/security/ArchivaConfigurableUsersManager.java

Author: olamy
Date: Fri Feb 22 16:05:08 2013
New Revision: 1449091

URL: http://svn.apache.org/r1449091
Log:
really chain user managers

Modified:
    archiva/trunk/archiva-modules/archiva-web/archiva-web-common/src/main/java/org/apache/archiva/web/security/ArchivaConfigurableUsersManager.java

Modified: archiva/trunk/archiva-modules/archiva-web/archiva-web-common/src/main/java/org/apache/archiva/web/security/ArchivaConfigurableUsersManager.java
URL: http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-web/archiva-web-common/src/main/java/org/apache/archiva/web/security/ArchivaConfigurableUsersManager.java?rev=1449091&r1=1449090&r2=1449091&view=diff
==============================================================================
--- archiva/trunk/archiva-modules/archiva-web/archiva-web-common/src/main/java/org/apache/archiva/web/security/ArchivaConfigurableUsersManager.java (original)
+++ archiva/trunk/archiva-modules/archiva-web/archiva-web-common/src/main/java/org/apache/archiva/web/security/ArchivaConfigurableUsersManager.java Fri Feb 22 16:05:08 2013
@@ -121,32 +121,31 @@ public class ArchivaConfigurableUsersMan
         }
     }
 
-    protected UserManager findFirstWritable()
-    {
-        for ( UserManager userManager : userManagerPerId.values() )
-        {
-            if ( !userManager.isReadOnly() )
-            {
-                return userManager;
-            }
-        }
-        return null;
-    }
-
     @Override
     public User createUser( String username, String fullName, String emailAddress )
         throws UserManagerException
     {
-        UserManager userManager = findFirstWritable();
-        if ( userManager.isReadOnly() )
+        Exception lastException = null;
+        boolean allFailed = true;
+        User user = null;
+        for ( UserManager userManager : userManagerPerId.values() )
         {
-            log.warn( "cannot find writable user manager implementation, skip user creation" );
-            return null;
+            try
+            {
+                if ( !userManager.isReadOnly() )
+                {
+                    user = userManager.createUser( username, fullName, emailAddress );
+                    allFailed = false;
+                }
+            }
+            catch ( Exception e )
+            {
+                lastException = e;
+            }
         }
-        User user = userManager.createUser( username, fullName, emailAddress );
-        if ( useUsersCache() )
+        if ( lastException != null && allFailed )
         {
-            usersCache.put( user.getUsername(), user );
+            throw new UserManagerException( lastException.getMessage(), lastException );
         }
         return user;
     }
@@ -162,16 +161,27 @@ public class ArchivaConfigurableUsersMan
     public void deleteUser( String username )
         throws UserNotFoundException, UserManagerException
     {
-        UserManager userManager = findFirstWritable();
-        if ( userManager.isReadOnly() )
+        Exception lastException = null;
+        boolean allFailed = true;
+        User user = null;
+        for ( UserManager userManager : userManagerPerId.values() )
         {
-            log.warn( "cannot find writable user manager implementation, skip delete user" );
-            return;
+            try
+            {
+                if ( !userManager.isReadOnly() )
+                {
+                    userManager.deleteUser( username );
+                    allFailed = false;
+                }
+            }
+            catch ( Exception e )
+            {
+                lastException = e;
+            }
         }
-        userManager.deleteUser( username );
-        if ( useUsersCache() )
+        if ( lastException != null && allFailed )
         {
-            usersCache.remove( username );
+            throw new UserManagerException( lastException.getMessage(), lastException );
         }
     }
 
@@ -354,7 +364,13 @@ public class ArchivaConfigurableUsersMan
     @Override
     public boolean isReadOnly()
     {
-        return findFirstWritable() != null;
+        boolean readOnly = false;
+
+        for ( UserManager userManager : userManagerPerId.values() )
+        {
+            readOnly = readOnly || userManager.isReadOnly();
+        }
+        return readOnly;
     }
 
     @Override
@@ -444,13 +460,29 @@ public class ArchivaConfigurableUsersMan
     public User createGuestUser()
         throws UserManagerException
     {
-        UserManager userManager = findFirstWritable();
-        if ( userManager == null )
+        Exception lastException = null;
+        boolean allFailed = true;
+        User user = null;
+        for ( UserManager userManager : userManagerPerId.values() )
+        {
+            try
+            {
+                if ( !userManager.isReadOnly() )
+                {
+                    user = userManager.createGuestUser();
+                    allFailed = false;
+                }
+            }
+            catch ( Exception e )
+            {
+                lastException = e;
+            }
+        }
+        if ( lastException != null && allFailed )
         {
-            log.warn( "cannot find writable user manager implementation, skip guest user creation" );
-            return null;
+            throw new UserManagerException( lastException.getMessage(), lastException );
         }
-        return userManager.createGuestUser();
+        return user;
     }
 
     @Override