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


Reply via email to