Author: olamy
Date: Thu Dec 20 20:32:43 2012
New Revision: 1424673

URL: http://svn.apache.org/viewvc?rev=1424673&view=rev
Log:
implements a dynamic cache configurable tru the ui for 
ArchivaConfigurableUsersManager

Modified:
    
archiva/trunk/archiva-modules/archiva-base/archiva-configuration/src/main/mdo/configuration.mdo
    
archiva/trunk/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-api/src/main/java/org/apache/archiva/admin/model/beans/RedbackRuntimeConfiguration.java
    
archiva/trunk/archiva-modules/archiva-web/archiva-web-common/src/main/java/org/apache/archiva/web/security/ArchivaConfigurableUsersManager.java
    
archiva/trunk/archiva-modules/archiva-web/archiva-web-common/src/main/resources/org/apache/archiva/i18n/default.properties
    
archiva/trunk/archiva-modules/archiva-web/archiva-webapp-js/src/main/webapp/js/archiva/general-admin.js
    
archiva/trunk/archiva-modules/archiva-web/archiva-webapp-js/src/main/webapp/js/templates/archiva/general-admin.html

Modified: 
archiva/trunk/archiva-modules/archiva-base/archiva-configuration/src/main/mdo/configuration.mdo
URL: 
http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-base/archiva-configuration/src/main/mdo/configuration.mdo?rev=1424673&r1=1424672&r2=1424673&view=diff
==============================================================================
--- 
archiva/trunk/archiva-modules/archiva-base/archiva-configuration/src/main/mdo/configuration.mdo
 (original)
+++ 
archiva/trunk/archiva-modules/archiva-base/archiva-configuration/src/main/mdo/configuration.mdo
 Thu Dec 20 20:32:43 2012
@@ -1486,6 +1486,13 @@
             <multiplicity>*</multiplicity>
           </association>
         </field>
+        <field>
+          <name>useUsersCache</name>
+          <description>flag to know if redback will use a cache to prevent 
searching users already found.</description>
+          <version>1.4.0+</version>
+          <type>boolean</type>
+          <defaultValue>false</defaultValue>
+        </field>
       </fields>
     </class>
 

Modified: 
archiva/trunk/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-api/src/main/java/org/apache/archiva/admin/model/beans/RedbackRuntimeConfiguration.java
URL: 
http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-api/src/main/java/org/apache/archiva/admin/model/beans/RedbackRuntimeConfiguration.java?rev=1424673&r1=1424672&r2=1424673&view=diff
==============================================================================
--- 
archiva/trunk/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-api/src/main/java/org/apache/archiva/admin/model/beans/RedbackRuntimeConfiguration.java
 (original)
+++ 
archiva/trunk/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-api/src/main/java/org/apache/archiva/admin/model/beans/RedbackRuntimeConfiguration.java
 Thu Dec 20 20:32:43 2012
@@ -53,6 +53,12 @@ public class RedbackRuntimeConfiguration
      */
     private List<PropertyEntry> configurationPropertiesEntries;
 
+    /**
+     * flag to know if redback will use a cache to prevent
+     * searching users already found.
+     */
+    private boolean useUsersCache = false;
+
     public RedbackRuntimeConfiguration()
     {
         // no op
@@ -125,15 +131,28 @@ public class RedbackRuntimeConfiguration
         }
     }
 
+    public boolean isUseUsersCache()
+    {
+        return useUsersCache;
+    }
+
+    public void setUseUsersCache( boolean useUsersCache )
+    {
+        this.useUsersCache = useUsersCache;
+    }
+
     @Override
     public String toString()
     {
-        return "RedbackRuntimeConfiguration{" +
-            "userManagerImpls=" + userManagerImpls +
-            ", ldapConfiguration=" + ldapConfiguration +
-            ", migratedFromRedbackConfiguration=" + 
migratedFromRedbackConfiguration +
-            ", configurationProperties=" + configurationProperties +
-            ", configurationPropertiesEntries=" + 
configurationPropertiesEntries +
-            '}';
+        final StringBuilder sb = new StringBuilder();
+        sb.append( "RedbackRuntimeConfiguration" );
+        sb.append( "{userManagerImpls=" ).append( userManagerImpls );
+        sb.append( ", ldapConfiguration=" ).append( ldapConfiguration );
+        sb.append( ", migratedFromRedbackConfiguration=" ).append( 
migratedFromRedbackConfiguration );
+        sb.append( ", configurationProperties=" ).append( 
configurationProperties );
+        sb.append( ", configurationPropertiesEntries=" ).append( 
configurationPropertiesEntries );
+        sb.append( ", useUsersCache=" ).append( useUsersCache );
+        sb.append( '}' );
+        return sb.toString();
     }
 }

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=1424673&r1=1424672&r2=1424673&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
 Thu Dec 20 20:32:43 2012
@@ -20,6 +20,7 @@ package org.apache.archiva.web.security;
 
 import org.apache.archiva.admin.model.RepositoryAdminException;
 import org.apache.archiva.admin.model.runtime.ArchivaRuntimeConfigurationAdmin;
+import org.apache.archiva.redback.components.cache.Cache;
 import org.apache.archiva.redback.users.User;
 import org.apache.archiva.redback.users.UserManager;
 import org.apache.archiva.redback.users.UserManagerException;
@@ -31,6 +32,7 @@ import org.springframework.context.Appli
 import org.springframework.stereotype.Service;
 
 import javax.inject.Inject;
+import javax.inject.Named;
 import java.util.ArrayList;
 import java.util.LinkedHashMap;
 import java.util.List;
@@ -55,6 +57,10 @@ public class ArchivaConfigurableUsersMan
 
     private List<UserManagerListener> listeners = new 
ArrayList<UserManagerListener>();
 
+    @Inject
+    @Named( value = "cache#users" )
+    private Cache usersCache;
+
     @Override
     public void initialize()
     {
@@ -80,11 +86,31 @@ public class ArchivaConfigurableUsersMan
         }
     }
 
+    protected boolean useUsersCache()
+    {
+        try
+        {
+            return 
archivaRuntimeConfigurationAdmin.getArchivaRuntimeConfiguration().isUseUsersCache();
+        }
+        catch ( RepositoryAdminException e )
+        {
+            log.warn( "skip fail to get RedbackRuntimeConfiguration: {}, use 
false", e.getMessage(), e );
+            return false;
+        }
+    }
+
     @Override
     public User addUser( User user )
         throws UserManagerException
     {
-        return userManagerPerId.get( user.getUserManagerId() ).addUser( user );
+        user = userManagerPerId.get( user.getUserManagerId() ).addUser( user );
+
+        if ( useUsersCache() )
+        {
+            usersCache.put( user.getUsername(), user );
+        }
+
+        return user;
     }
 
     @Override
@@ -92,6 +118,11 @@ public class ArchivaConfigurableUsersMan
         throws UserManagerException
     {
         userManagerPerId.get( user.getUserManagerId() ).addUserUnchecked( user 
);
+
+        if ( useUsersCache() )
+        {
+            usersCache.put( user.getUsername(), user );
+        }
     }
 
     protected UserManager findFirstWritable()
@@ -116,7 +147,12 @@ public class ArchivaConfigurableUsersMan
             log.warn( "cannot find writable user manager implementation, skip 
user creation" );
             return null;
         }
-        return userManager.createUser( username, fullName, emailAddress );
+        User user = userManager.createUser( username, fullName, emailAddress );
+        if ( useUsersCache() )
+        {
+            usersCache.put( user.getUsername(), user );
+        }
+        return user;
     }
 
     @Override
@@ -137,6 +173,10 @@ public class ArchivaConfigurableUsersMan
             return;
         }
         userManager.deleteUser( username );
+        if ( useUsersCache() )
+        {
+            usersCache.remove( username );
+        }
     }
 
     @Override
@@ -152,7 +192,17 @@ public class ArchivaConfigurableUsersMan
     public User findUser( String username )
         throws UserManagerException
     {
+
         User user = null;
+        if ( useUsersCache() )
+        {
+            user = (User) usersCache.get( username );
+            if ( user != null )
+            {
+                return user;
+            }
+
+        }
         UserManagerException lastException = null;
         for ( UserManager userManager : userManagerPerId.values() )
         {
@@ -161,6 +211,10 @@ public class ArchivaConfigurableUsersMan
                 user = userManager.findUser( username );
                 if ( user != null )
                 {
+                    if ( useUsersCache() )
+                    {
+                        usersCache.put( username, user );
+                    }
                     return user;
                 }
             }
@@ -191,6 +245,14 @@ public class ArchivaConfigurableUsersMan
         throws UserNotFoundException, UserManagerException
     {
         User user = null;
+        if ( useUsersCache() )
+        {
+            user = (User) usersCache.get( GUEST_USERNAME );
+            if ( user != null )
+            {
+                return user;
+            }
+        }
         UserNotFoundException lastException = null;
         for ( UserManager userManager : userManagerPerId.values() )
         {
@@ -334,14 +396,28 @@ public class ArchivaConfigurableUsersMan
     public User updateUser( User user )
         throws UserNotFoundException, UserManagerException
     {
-        return userManagerPerId.get( user.getUserManagerId() ).updateUser( 
user );
+        user = userManagerPerId.get( user.getUserManagerId() ).updateUser( 
user );
+
+        if ( useUsersCache() )
+        {
+            usersCache.put( user.getUsername(), user );
+        }
+
+        return user;
     }
 
     @Override
     public User updateUser( User user, boolean passwordChangeRequired )
         throws UserNotFoundException, UserManagerException
     {
-        return userManagerPerId.get( user.getUserManagerId() ).updateUser( 
user, passwordChangeRequired );
+        user = userManagerPerId.get( user.getUserManagerId() ).updateUser( 
user, passwordChangeRequired );
+
+        if ( useUsersCache() )
+        {
+            usersCache.put( user.getUsername(), user );
+        }
+
+        return user;
     }
 
     @Override

Modified: 
archiva/trunk/archiva-modules/archiva-web/archiva-web-common/src/main/resources/org/apache/archiva/i18n/default.properties
URL: 
http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-web/archiva-web-common/src/main/resources/org/apache/archiva/i18n/default.properties?rev=1424673&r1=1424672&r2=1424673&view=diff
==============================================================================
--- 
archiva/trunk/archiva-modules/archiva-web/archiva-web-common/src/main/resources/org/apache/archiva/i18n/default.properties
 (original)
+++ 
archiva/trunk/archiva-modules/archiva-web/archiva-web-common/src/main/resources/org/apache/archiva/i18n/default.properties
 Thu Dec 20 20:32:43 2012
@@ -630,5 +630,6 @@ redback.runtime.user-managers.impls.avai
 redback.runtime.ldap.verified=Ldap connection verified.
 redback.runtime.ldap.checkModification=Verify LDAP changes.
 redback.runtime.ldap.checkServer=Verify LDAP configuration on server side.
+redback.runtime.useUsersCache.label=Use a cache for users.
 
 

Modified: 
archiva/trunk/archiva-modules/archiva-web/archiva-webapp-js/src/main/webapp/js/archiva/general-admin.js
URL: 
http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-web/archiva-webapp-js/src/main/webapp/js/archiva/general-admin.js?rev=1424673&r1=1424672&r2=1424673&view=diff
==============================================================================
--- 
archiva/trunk/archiva-modules/archiva-web/archiva-webapp-js/src/main/webapp/js/archiva/general-admin.js
 (original)
+++ 
archiva/trunk/archiva-modules/archiva-web/archiva-webapp-js/src/main/webapp/js/archiva/general-admin.js
 Thu Dec 20 20:32:43 2012
@@ -1151,7 +1151,9 @@ define("archiva.general-admin",["jquery"
   }
 
 
-  
RedbackRuntimeConfiguration=function(userManagerImpls,ldapConfiguration,migratedFromRedbackConfiguration,configurationPropertiesEntries){
+  
RedbackRuntimeConfiguration=function(userManagerImpls,ldapConfiguration,migratedFromRedbackConfiguration,configurationPropertiesEntries
+                                      ,useUsersCache){
+    $.log("new RedbackRuntimeConfiguration");
     var self=this;
     this.modified=ko.observable(false);
     
this.modified.subscribe(function(newValue){$.log("RedbackRuntimeConfiguration 
modified")});
@@ -1164,12 +1166,16 @@ define("archiva.general-admin",["jquery"
 
     
this.migratedFromRedbackConfiguration=ko.observable(migratedFromRedbackConfiguration);
 
+    $.log("new RedbackRuntimeConfiguration before 
configurationPropertiesEntries mapping:");
+
     
this.configurationPropertiesEntries=ko.observableArray(configurationPropertiesEntries?configurationPropertiesEntries:[]);
     this.configurationPropertiesEntries.subscribe(function(newValue){
       self.modified(true);
       $.log("configurationPropertiesEntries modified")
     });
 
+    $.log("new RedbackRuntimeConfiguration before 
configurationPropertiesEntries mapping done");
+
     this.findPropertyValue=function(key){
       for(var i=0;i<self.configurationPropertiesEntries().length;i++){
         if(self.configurationPropertiesEntries()[i].key==key){
@@ -1179,12 +1185,20 @@ define("archiva.general-admin",["jquery"
         }
       }
     }
+
+    this.useUsersCache=ko.observable(useUsersCache);
+    this.useUsersCache.subscribe(function(newValue){self.modified(true)});
   }
 
   mapRedbackRuntimeConfiguration=function(data){
+    $.log("mapRedbackRuntimeConfiguration");
+    var ldapConfiguration=mapLdapConfiguration(data.ldapConfiguration);
+    $.log("mapLdapConfiguration done for ");
+
     var redbackRuntimeConfiguration =
-            new 
RedbackRuntimeConfiguration(data.userManagerImpls,mapLdapConfiguration(data.ldapConfiguration),data.migratedFromRedbackConfiguration);
+            new 
RedbackRuntimeConfiguration(data.userManagerImpls,ldapConfiguration,data.migratedFromRedbackConfiguration,[],data.useUsersCache);
 
+    $.log("mapRedbackRuntimeConfiguration done");
     var configurationPropertiesEntries = data.configurationPropertiesEntries 
== null ? []: $.each(data.configurationPropertiesEntries,function(item){
       return new Entry(item.key, item.value,function(newValue){
         redbackRuntimeConfiguration.modified(true);
@@ -1242,6 +1256,7 @@ define("archiva.general-admin",["jquery"
   }
 
   mapLdapConfiguration=function(data){
+    $.log("mapLdapConfiguration");
       if(data){
         var extraPropertiesEntries = data.extraPropertiesEntries == null ? []: 
$.each(data.extraPropertiesEntries,function(item){
             return new Entry(item.key, item.value);
@@ -1249,6 +1264,7 @@ define("archiva.general-admin",["jquery"
         if (!$.isArray(extraPropertiesEntries)){
             extraPropertiesEntries=[];
         }
+        $.log("mapLdapConfiguration done");
         return new 
LdapConfiguration(data.hostName,data.port,data.ssl,data.baseDn,data.contextFactory,data.bindDn,data.password,
                                     
data.authenticationMethod,extraPropertiesEntries);
       }

Modified: 
archiva/trunk/archiva-modules/archiva-web/archiva-webapp-js/src/main/webapp/js/templates/archiva/general-admin.html
URL: 
http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-web/archiva-webapp-js/src/main/webapp/js/templates/archiva/general-admin.html?rev=1424673&r1=1424672&r2=1424673&view=diff
==============================================================================
--- 
archiva/trunk/archiva-modules/archiva-web/archiva-webapp-js/src/main/webapp/js/templates/archiva/general-admin.html
 (original)
+++ 
archiva/trunk/archiva-modules/archiva-web/archiva-webapp-js/src/main/webapp/js/templates/archiva/general-admin.html
 Thu Dec 20 20:32:43 2012
@@ -905,6 +905,19 @@
     <div class="tab-pane active" id="redback-runtime-general-content">
       <div class="well">
         <div class="row-fluid">
+          <form class="form-horizontal" id="redback-runtime-general-form-id">
+            <div class="control-group">
+              <label for="redback-runtime-useUsersCache" class="control-label">
+                ${$.i18n.prop('redback.runtime.useUsersCache.label')}
+              </label>
+              <div class="controls">
+                <input type="checkbox" id="redback-runtime-useUsersCache" 
name="redback-runtime-useUsersCache"
+                       data-bind="checked: 
redbackRuntimeConfiguration().useUsersCache"/>
+              </div>
+            </div>
+          </form>
+        </div>
+        <div class="row-fluid">
           <div class="span4 dotted">
             
<h5>${$.i18n.prop('redback.runtime.user-managers.impls.choosed')}</h5>
             <div style="min-height: 40px" 
id="user-mananagers-sortables-choosed"


Reply via email to