Author: olamy
Date: Mon Dec 10 16:36:18 2012
New Revision: 1419569

URL: http://svn.apache.org/viewvc?rev=1419569&view=rev
Log:
[MRM-1721] Chaining user manager implementations.

Modified:
    
archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-api/src/main/java/org/apache/archiva/rest/api/model/UserManagerImplementationInformation.java
    
archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultArchivaRuntimeConfigurationService.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-webapp-js/src/main/webapp/js/archiva/general-admin.js
    
archiva/trunk/archiva-modules/archiva-web/archiva-webapp-js/src/main/webapp/js/archiva/proxy-connectors-rules.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-web/archiva-rest/archiva-rest-api/src/main/java/org/apache/archiva/rest/api/model/UserManagerImplementationInformation.java
URL: 
http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-api/src/main/java/org/apache/archiva/rest/api/model/UserManagerImplementationInformation.java?rev=1419569&r1=1419568&r2=1419569&view=diff
==============================================================================
--- 
archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-api/src/main/java/org/apache/archiva/rest/api/model/UserManagerImplementationInformation.java
 (original)
+++ 
archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-api/src/main/java/org/apache/archiva/rest/api/model/UserManagerImplementationInformation.java
 Mon Dec 10 16:36:18 2012
@@ -33,15 +33,18 @@ public class UserManagerImplementationIn
 
     private String descriptionKey;
 
+    private boolean readOnly;
+
     public UserManagerImplementationInformation()
     {
         // no op
     }
 
-    public UserManagerImplementationInformation( String beanId, String 
descriptionKey )
+    public UserManagerImplementationInformation( String beanId, String 
descriptionKey, boolean readOnly )
     {
         this.beanId = beanId;
         this.descriptionKey = descriptionKey;
+        this.readOnly = readOnly;
     }
 
     public String getBeanId()
@@ -64,6 +67,16 @@ public class UserManagerImplementationIn
         this.descriptionKey = descriptionKey;
     }
 
+    public boolean isReadOnly()
+    {
+        return readOnly;
+    }
+
+    public void setReadOnly( boolean readOnly )
+    {
+        this.readOnly = readOnly;
+    }
+
     @Override
     public String toString()
     {

Modified: 
archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultArchivaRuntimeConfigurationService.java
URL: 
http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultArchivaRuntimeConfigurationService.java?rev=1419569&r1=1419568&r2=1419569&view=diff
==============================================================================
--- 
archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultArchivaRuntimeConfigurationService.java
 (original)
+++ 
archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultArchivaRuntimeConfigurationService.java
 Mon Dec 10 16:36:18 2012
@@ -116,6 +116,7 @@ public class DefaultArchivaRuntimeConfig
                 UserManagerImplementationInformation information = new 
UserManagerImplementationInformation();
                 information.setBeanId( StringUtils.substringAfter( 
entry.getKey(), "#" ) );
                 information.setDescriptionKey( userManager.getDescriptionKey() 
);
+                information.setReadOnly( userManager.isReadOnly() );
                 informations.add( information );
             }
         }

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=1419569&r1=1419568&r2=1419569&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
 Mon Dec 10 16:36:18 2012
@@ -31,13 +31,15 @@ import org.springframework.stereotype.Se
 
 import javax.inject.Inject;
 import java.util.ArrayList;
+import java.util.LinkedHashMap;
 import java.util.List;
+import java.util.Map;
 
 /**
  * @author Olivier Lamy
  * @since 1.4-M4
  */
-@Service("userManager#archiva")
+@Service( "userManager#archiva" )
 public class ArchivaConfigurableUsersManager
     extends ConfigurableUserManager
 {
@@ -48,7 +50,9 @@ public class ArchivaConfigurableUsersMan
     @Inject
     private ApplicationContext applicationContext;
 
-    private List<UserManager> userManagers;
+    private Map<String, UserManager> userManagerPerId;
+
+    private List<UserManagerListener> listeners = new 
ArrayList<UserManagerListener>();
 
     @Override
     public void initialize()
@@ -59,12 +63,12 @@ public class ArchivaConfigurableUsersMan
                 
archivaRuntimeConfigurationAdmin.getArchivaRuntimeConfiguration().getUserManagerImpls();
             log.info( "use userManagerImpls: '{}'", userManagerImpls );
 
-            userManagers = new ArrayList<UserManager>( userManagerImpls.size() 
);
+            userManagerPerId = new LinkedHashMap<String, UserManager>( 
userManagerImpls.size() );
             for ( String id : userManagerImpls )
             {
                 UserManager userManagerImpl = applicationContext.getBean( 
"userManager#" + id, UserManager.class );
                 setUserManagerImpl( userManagerImpl );
-                userManagers.add( userManagerImpl );
+                userManagerPerId.put( id, userManagerImpl );
             }
         }
         catch ( RepositoryAdminException e )
@@ -78,20 +82,36 @@ public class ArchivaConfigurableUsersMan
     @Override
     public User addUser( User user )
     {
-        return super.addUser( user );    //To change body of overridden 
methods use File | Settings | File Templates.
+        return userManagerPerId.get( user.getUserManagerId() ).addUser( user );
     }
 
     @Override
     public void addUserUnchecked( User user )
     {
-        super.addUserUnchecked( user );    //To change body of overridden 
methods use File | Settings | File Templates.
+        userManagerPerId.get( user.getUserManagerId() ).addUserUnchecked( user 
);
+    }
+
+    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 )
     {
-        return super.createUser( username, fullName,
-                                 emailAddress );    //To change body of 
overridden methods use File | Settings | File Templates.
+        UserManager userManager = findFirstWritable();
+        if ( userManager == null )
+        {
+            throw new RuntimeException( "impossible to find a writable 
userManager" );
+        }
+        return userManager.createUser( username, fullName, emailAddress );
     }
 
     @Override
@@ -100,183 +120,276 @@ public class ArchivaConfigurableUsersMan
         return super.createUserQuery();    //To change body of overridden 
methods use File | Settings | File Templates.
     }
 
-    @Override
-    public void deleteUser( Object principal )
-        throws UserNotFoundException
-    {
-        super.deleteUser( principal );    //To change body of overridden 
methods use File | Settings | File Templates.
-    }
 
     @Override
     public void deleteUser( String username )
         throws UserNotFoundException
     {
-        super.deleteUser( username );    //To change body of overridden 
methods use File | Settings | File Templates.
+        UserManager userManager = findFirstWritable();
+        if ( userManager == null )
+        {
+            throw new RuntimeException( "impossible to find a writable 
userManager" );
+        }
+        userManager.deleteUser( username );
     }
 
     @Override
     public void eraseDatabase()
     {
-        super.eraseDatabase();    //To change body of overridden methods use 
File | Settings | File Templates.
+        for ( UserManager userManager : userManagerPerId.values() )
+        {
+            userManager.eraseDatabase();
+        }
     }
 
     @Override
     public User findUser( String username )
         throws UserNotFoundException
     {
-        return super.findUser(
-            username );    //To change body of overridden methods use File | 
Settings | File Templates.
-    }
+        User user = null;
+        UserNotFoundException lastException = null;
+        for ( UserManager userManager : userManagerPerId.values() )
+        {
+            try
+            {
+                user = userManager.findUser( username );
+                if ( user != null )
+                {
+                    return user;
+                }
+            }
+            catch ( UserNotFoundException e )
+            {
+                lastException = e;
+            }
+        }
 
-    @Override
-    public User findUser( Object principal )
-        throws UserNotFoundException
-    {
-        return super.findUser(
-            principal );    //To change body of overridden methods use File | 
Settings | File Templates.
+        if ( user == null )
+        {
+            throw lastException;
+        }
+
+        return user;
     }
 
+
     @Override
     public User getGuestUser()
         throws UserNotFoundException
     {
-        return super.getGuestUser();    //To change body of overridden methods 
use File | Settings | File Templates.
+        User user = null;
+        UserNotFoundException lastException = null;
+        for ( UserManager userManager : userManagerPerId.values() )
+        {
+            try
+            {
+                user = userManager.getGuestUser();
+                if ( user != null )
+                {
+                    return user;
+                }
+            }
+            catch ( UserNotFoundException e )
+            {
+                lastException = e;
+            }
+        }
+
+        if ( user == null )
+        {
+            throw lastException;
+        }
+
+        return user;
     }
 
     @Override
     public List<User> findUsersByEmailKey( String emailKey, boolean 
orderAscending )
     {
-        return super.findUsersByEmailKey( emailKey,
-                                          orderAscending );    //To change 
body of overridden methods use File | Settings | File Templates.
+        List<User> users = new ArrayList<User>();
+
+        for ( UserManager userManager : userManagerPerId.values() )
+        {
+            List<User> found = userManager.findUsersByEmailKey( emailKey, 
orderAscending );
+            if ( found != null )
+            {
+                users.addAll( found );
+            }
+        }
+        return users;
     }
 
     @Override
     public List<User> findUsersByFullNameKey( String fullNameKey, boolean 
orderAscending )
     {
-        return super.findUsersByFullNameKey( fullNameKey,
-                                             orderAscending );    //To change 
body of overridden methods use File | Settings | File Templates.
+        List<User> users = new ArrayList<User>();
+
+        for ( UserManager userManager : userManagerPerId.values() )
+        {
+            List<User> found = userManager.findUsersByFullNameKey( 
fullNameKey, orderAscending );
+            if ( found != null )
+            {
+                users.addAll( found );
+            }
+        }
+        return users;
     }
 
     @Override
     public List<User> findUsersByQuery( UserQuery query )
     {
-        return super.findUsersByQuery(
-            query );    //To change body of overridden methods use File | 
Settings | File Templates.
+        List<User> users = new ArrayList<User>();
+
+        for ( UserManager userManager : userManagerPerId.values() )
+        {
+            List<User> found = userManager.findUsersByQuery( query );
+            if ( found != null )
+            {
+                users.addAll( found );
+            }
+        }
+        return users;
     }
 
     @Override
     public List<User> findUsersByUsernameKey( String usernameKey, boolean 
orderAscending )
     {
-        return super.findUsersByUsernameKey( usernameKey,
-                                             orderAscending );    //To change 
body of overridden methods use File | Settings | File Templates.
+        List<User> users = new ArrayList<User>();
+
+        for ( UserManager userManager : userManagerPerId.values() )
+        {
+            List<User> found = userManager.findUsersByUsernameKey( 
usernameKey, orderAscending );
+            if ( found != null )
+            {
+                users.addAll( found );
+            }
+        }
+        return users;
     }
 
     @Override
     public String getId()
     {
-        return super.getId();    //To change body of overridden methods use 
File | Settings | File Templates.
+        return null;
     }
 
     @Override
     public List<User> getUsers()
     {
-        return super.getUsers();    //To change body of overridden methods use 
File | Settings | File Templates.
+        List<User> users = new ArrayList<User>();
+
+        for ( UserManager userManager : userManagerPerId.values() )
+        {
+            List<User> found = userManager.getUsers();
+            if ( found != null )
+            {
+                users.addAll( found );
+            }
+        }
+        return users;
     }
 
     @Override
     public List<User> getUsers( boolean orderAscending )
     {
-        return super.getUsers(
-            orderAscending );    //To change body of overridden methods use 
File | Settings | File Templates.
+        List<User> users = new ArrayList<User>();
+
+        for ( UserManager userManager : userManagerPerId.values() )
+        {
+            List<User> found = userManager.getUsers( orderAscending );
+            if ( found != null )
+            {
+                users.addAll( found );
+            }
+        }
+        return users;
     }
 
     @Override
     public boolean isReadOnly()
     {
-        return super.isReadOnly();    //To change body of overridden methods 
use File | Settings | File Templates.
+        //olamy: must be it depends :-)
+        return true;
     }
 
     @Override
     public User updateUser( User user )
         throws UserNotFoundException
     {
-        return super.updateUser( user );    //To change body of overridden 
methods use File | Settings | File Templates.
+        return userManagerPerId.get( user.getUserManagerId() ).updateUser( 
user );
     }
 
     @Override
     public User updateUser( User user, boolean passwordChangeRequired )
         throws UserNotFoundException
     {
-        return super.updateUser( user,
-                                 passwordChangeRequired );    //To change body 
of overridden methods use File | Settings | File Templates.
-    }
-
-    @Override
-    public boolean userExists( Object principal )
-    {
-        return super.userExists(
-            principal );    //To change body of overridden methods use File | 
Settings | File Templates.
+        return userManagerPerId.get( user.getUserManagerId() ).updateUser( 
user, passwordChangeRequired );
     }
 
     @Override
     public void setUserManagerImpl( UserManager userManagerImpl )
     {
-        super.setUserManagerImpl(
-            userManagerImpl );    //To change body of overridden methods use 
File | Settings | File Templates.
+        log.error( "setUserManagerImpl cannot be used in this implementation" 
);
     }
 
     @Override
     public void addUserManagerListener( UserManagerListener listener )
     {
-        super.addUserManagerListener(
-            listener );    //To change body of overridden methods use File | 
Settings | File Templates.
+        this.listeners.add( listener );
     }
 
     @Override
     public void removeUserManagerListener( UserManagerListener listener )
     {
-        super.removeUserManagerListener(
-            listener );    //To change body of overridden methods use File | 
Settings | File Templates.
+        this.listeners.remove( listener );
     }
 
     @Override
     protected void fireUserManagerInit( boolean freshDatabase )
     {
-        super.fireUserManagerInit(
-            freshDatabase );    //To change body of overridden methods use 
File | Settings | File Templates.
+        for ( UserManagerListener listener : listeners )
+        {
+            listener.userManagerInit( freshDatabase );
+        }
     }
 
     @Override
     protected void fireUserManagerUserAdded( User addedUser )
     {
-        super.fireUserManagerUserAdded(
-            addedUser );    //To change body of overridden methods use File | 
Settings | File Templates.
+        for ( UserManagerListener listener : listeners )
+        {
+            listener.userManagerUserAdded( addedUser );
+        }
     }
 
     @Override
     protected void fireUserManagerUserRemoved( User removedUser )
     {
-        super.fireUserManagerUserRemoved(
-            removedUser );    //To change body of overridden methods use File 
| Settings | File Templates.
+        for ( UserManagerListener listener : listeners )
+        {
+            listener.userManagerUserRemoved( removedUser );
+        }
     }
 
     @Override
     protected void fireUserManagerUserUpdated( User updatedUser )
     {
-        super.fireUserManagerUserUpdated(
-            updatedUser );    //To change body of overridden methods use File 
| Settings | File Templates.
+        for ( UserManagerListener listener : listeners )
+        {
+            listener.userManagerUserUpdated( updatedUser );
+        }
     }
 
     @Override
     public User createGuestUser()
     {
-        return super.createGuestUser();    //To change body of overridden 
methods use File | Settings | File Templates.
+        return findFirstWritable().createGuestUser();
     }
 
     @Override
     public boolean isFinalImplementation()
     {
-        return super.isFinalImplementation();    //To change body of 
overridden methods use File | Settings | File Templates.
+        return false;
     }
 
     public String getDescriptionKey()

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=1419569&r1=1419568&r2=1419569&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
 Mon Dec 10 16:36:18 2012
@@ -1167,7 +1167,7 @@ define("archiva.general-admin",["jquery"
         configurationPropertiesEntries=[];
     }
 
-    return new 
ArchivaRuntimeConfiguration(data.userManagerImpl,mapLdapConfiguration(data.ldapConfiguration),data.migratedFromRedbackConfiguration,
+    return new 
ArchivaRuntimeConfiguration(data.userManagerImpls,mapLdapConfiguration(data.ldapConfiguration),data.migratedFromRedbackConfiguration,
                                            configurationPropertiesEntries);
   }
 
@@ -1215,9 +1215,53 @@ define("archiva.general-admin",["jquery"
   }
 
   
ArchivaRuntimeConfigurationViewModel=function(archivaRuntimeConfiguration,userManagerImplementationInformations){
+    var self=this;
     
this.archivaRuntimeConfiguration=ko.observable(archivaRuntimeConfiguration);
     
this.userManagerImplementationInformations=ko.observable(userManagerImplementationInformations);
-    var self=this;
+
+    this.usedUserManagerImpls=ko.observableArray([]);
+
+    findUserManagerImplementationInformation=function(id){
+      for(var i= 0;i<self.userManagerImplementationInformations().length;i++){
+        $.log(id+""+self.userManagerImplementationInformations()[i].beanId);
+        if(id==self.userManagerImplementationInformations()[i].beanId){
+          return self.userManagerImplementationInformations()[i];
+        }
+      }
+    }
+
+    for(var i= 0;i<archivaRuntimeConfiguration.userManagerImpls().length;i++){
+      var id=archivaRuntimeConfiguration.userManagerImpls()[i];
+      $.log("id:"+id);
+      var 
userManagerImplementationInformation=findUserManagerImplementationInformation(id);
+
+      if(userManagerImplementationInformation!=null){
+        this.usedUserManagerImpls.push(userManagerImplementationInformation);
+      }
+    }
+
+    isUsedUserManagerImpl=function(userManagerImplementationInformation){
+      for(var i=0;i<self.usedUserManagerImpls().length;i++){
+        
if(self.usedUserManagerImpls()[i].beanId==userManagerImplementationInformation.beanId){
+          return true;
+        }
+      }
+      return false;
+    }
+
+    this.availableUserManagerImpls=ko.observableArray([]);
+
+    for(var i=0;i<self.userManagerImplementationInformations().length;i++){
+      
if(!isUsedUserManagerImpl(self.userManagerImplementationInformations()[i])){
+        
self.availableUserManagerImpls.push(self.userManagerImplementationInformations()[i]);
+      }
+
+    }
+
+    userManagerImplMoved=function(arg){
+      $.log("userManagerImplMoved:"+arg.sourceIndex+" to " + arg.targetIndex);
+      
//self.usedUserManagerImpls().push(self.availableUserManagerImpls()[arg.sourceIndex]);
+    }
 
     saveArchivaRuntimeConfiguration=function(){
       $.log("saveArchivaRuntimeConfiguration");
@@ -1250,10 +1294,11 @@ define("archiva.general-admin",["jquery"
     }
   }
 
-  UserManagerImplementationInformation=function(beanId,descriptionKey){
+  
UserManagerImplementationInformation=function(beanId,descriptionKey,readOnly){
     this.beanId=beanId;
     this.descriptionKey=descriptionKey;
     this.description= $.i18n.prop(descriptionKey);
+    this.readOnly=readOnly;
   }
 
   mapUserManagerImplementationInformations=function(data){
@@ -1266,7 +1311,7 @@ define("archiva.general-admin",["jquery"
     if(data==null){
       return null;
     }
-    return new 
UserManagerImplementationInformation(data.beanId,data.descriptionKey);
+    return new 
UserManagerImplementationInformation(data.beanId,data.descriptionKey,data.readOnly);
   }
 
   displayRuntimeConfiguration=function(){
@@ -1286,7 +1331,7 @@ define("archiva.general-admin",["jquery"
           var archivaRuntimeConfiguration = 
mapArchivaRuntimeConfiguration(data);
           var archivaRuntimeConfigurationViewModel =
               new 
ArchivaRuntimeConfigurationViewModel(archivaRuntimeConfiguration,userManagerImplementationInformations);
-          mainContent.html( $( "#runtime-configuration-main" ).tmpl( ) );
+          mainContent.html( $( "#runtime-configuration-main" ).tmpl() );
           
ko.applyBindings(archivaRuntimeConfigurationViewModel,$("#runtime-configuration-content"
 ).get(0));
           activatePopoverDoc();
         }

Modified: 
archiva/trunk/archiva-modules/archiva-web/archiva-webapp-js/src/main/webapp/js/archiva/proxy-connectors-rules.js
URL: 
http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-web/archiva-webapp-js/src/main/webapp/js/archiva/proxy-connectors-rules.js?rev=1419569&r1=1419568&r2=1419569&view=diff
==============================================================================
--- 
archiva/trunk/archiva-modules/archiva-web/archiva-webapp-js/src/main/webapp/js/archiva/proxy-connectors-rules.js
 (original)
+++ 
archiva/trunk/archiva-modules/archiva-web/archiva-webapp-js/src/main/webapp/js/archiva/proxy-connectors-rules.js
 Mon Dec 10 16:36:18 2012
@@ -224,7 +224,6 @@ define("archiva.proxy-connectors-rules",
       for(var i=0;i<self.proxyConnectorRule.proxyConnectors().length;i++){
         
if(self.proxyConnectorRule.proxyConnectors()[i].sourceRepoId()==sourceRepoId &&
             
self.proxyConnectorRule.proxyConnectors()[i].targetRepoId()==targetRepoId){
-          $.log("found");
           proxyConnectorToRemove=self.proxyConnectorRule.proxyConnectors()[i];
         }
       }

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=1419569&r1=1419568&r2=1419569&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
 Mon Dec 10 16:36:18 2012
@@ -744,7 +744,7 @@
                     <div style="min-height: 40px"
                          data-bind="sortable: {template: 
'statistics-repositories-order-tmpl',data:availableRepositories}">
                     </div>
-                </div>
+                  </div>
                 </div>
               </div>
               <div class="span6 well">
@@ -842,9 +842,9 @@
 </script>
 
 <script id="statistics-repositories-order-tmpl" type="text/html">
-    <div class="well draggable-item">
-        ${$data}
-    </div>
+  <div class="well draggable-item">
+    ${$data}
+  </div>
 </script>
 
 <script id="report-health" type="text/html">
@@ -904,20 +904,23 @@
   <div class="tab-content">
     <div class="tab-pane active" id="redback-runtime-general-content">
       <div class="well">
-        <form class="form-horizontal" id="runtime-configuration-form-id">
-          <fieldset id="form-runtime-configuration">
-            <div class="control-group">
-              <label for="userManagerImpl" class="control-label">
-                ${$.i18n.prop('runtime-configuration.usermanager.label')}
-              </label>
-
-              <div class="controls">
-                <select id="userManagerImpl"
-                        data-bind="options: 
userManagerImplementationInformations,optionsValue: 'beanId', optionsText: 
'description', value: archivaRuntimeConfiguration().userManagerImpl, 
optionsCaption: 'Choose...'"></select>
-              </div>
+        <div class="row-fluid">
+          <div class="span4 dotted">
+            <h5></h5>
+            <hr/>
+            <div style="min-height: 40px" 
id="user-mananagers-sortables-choosed"
+                 data-bind="sortable: { template: 
'redback-runtime-general-content-usermanagers', data:usedUserManagerImpls}">
+            </div>
+          </div>
+
+          <div class="span4 dotted">
+            <h5></h5>
+            <hr/>
+            <div style="min-height: 
40px"id="user-mananagers-sortables-availables"
+                 data-bind="sortable: {template: 
'redback-runtime-general-content-usermanagers',data:availableUserManagerImpls}">
             </div>
-          </fieldset>
-        </form>
+          </div>
+        </div>
       </div>
     </div>
 
@@ -1033,3 +1036,9 @@
   </div>
 
 </script>
+
+<script id="redback-runtime-general-content-usermanagers" type="text/html">
+  <div class="well draggable-item">
+    ${$data.description}
+  </div>
+</script>


Reply via email to