You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lenya.apache.org by an...@apache.org on 2009/01/21 19:04:04 UTC

svn commit: r736356 [1/2] - in /lenya/sandbox/access_control_redesign/src: java/org/apache/lenya/ac/ modules-core/ac/config/ modules-core/ac/java/src/org/apache/lenya/ac/attr/antlr/ modules-core/ac/java/src/org/apache/lenya/ac/file/ modules-core/ac/jav...

Author: andreas
Date: Wed Jan 21 10:04:03 2009
New Revision: 736356

URL: http://svn.apache.org/viewvc?rev=736356&view=rev
Log:
Next steps in introduction of transient users.

Modified:
    lenya/sandbox/access_control_redesign/src/java/org/apache/lenya/ac/AbstractUserReference.java
    lenya/sandbox/access_control_redesign/src/java/org/apache/lenya/ac/Authenticator.java
    lenya/sandbox/access_control_redesign/src/java/org/apache/lenya/ac/Item.java
    lenya/sandbox/access_control_redesign/src/java/org/apache/lenya/ac/ManagedUser.java
    lenya/sandbox/access_control_redesign/src/java/org/apache/lenya/ac/ManagedUserReference.java
    lenya/sandbox/access_control_redesign/src/java/org/apache/lenya/ac/User.java
    lenya/sandbox/access_control_redesign/src/java/org/apache/lenya/ac/UserManager.java
    lenya/sandbox/access_control_redesign/src/modules-core/ac/config/module.xml
    lenya/sandbox/access_control_redesign/src/modules-core/ac/java/src/org/apache/lenya/ac/attr/antlr/ExpressionsLexer.java
    lenya/sandbox/access_control_redesign/src/modules-core/ac/java/src/org/apache/lenya/ac/attr/antlr/ExpressionsParser.java
    lenya/sandbox/access_control_redesign/src/modules-core/ac/java/src/org/apache/lenya/ac/file/FileGroup.java
    lenya/sandbox/access_control_redesign/src/modules-core/ac/java/src/org/apache/lenya/ac/file/FileIPRange.java
    lenya/sandbox/access_control_redesign/src/modules-core/ac/java/src/org/apache/lenya/ac/file/FileItemManager.java
    lenya/sandbox/access_control_redesign/src/modules-core/ac/java/src/org/apache/lenya/ac/file/FileRole.java
    lenya/sandbox/access_control_redesign/src/modules-core/ac/java/src/org/apache/lenya/ac/file/FileUser.java
    lenya/sandbox/access_control_redesign/src/modules-core/ac/java/src/org/apache/lenya/ac/file/FileUserManager.java
    lenya/sandbox/access_control_redesign/src/modules-core/ac/java/src/org/apache/lenya/ac/impl/AbstractIPRange.java
    lenya/sandbox/access_control_redesign/src/modules-core/ac/java/src/org/apache/lenya/ac/impl/AnonymousAuthenticator.java
    lenya/sandbox/access_control_redesign/src/modules-core/ac/java/src/org/apache/lenya/ac/impl/PolicyBuilder.java
    lenya/sandbox/access_control_redesign/src/modules-core/ac/java/src/org/apache/lenya/ac/impl/TransientUser.java
    lenya/sandbox/access_control_redesign/src/modules-core/ac/java/src/org/apache/lenya/ac/impl/TransientUserReference.java
    lenya/sandbox/access_control_redesign/src/modules-core/ac/java/src/org/apache/lenya/ac/impl/UserAuthenticator.java
    lenya/sandbox/access_control_redesign/src/modules-core/ac/java/src/org/apache/lenya/cms/cocoon/components/modules/input/AccessControlModule.java
    lenya/sandbox/access_control_redesign/src/modules-core/ac/java/test/org/apache/lenya/ac/file/FileUserTest.java
    lenya/sandbox/access_control_redesign/src/modules-core/ac/java/test/org/apache/lenya/ac/impl/UserManagerTest.java
    lenya/sandbox/access_control_redesign/src/modules-core/administration/java/src/org/apache/lenya/cms/ac/usecases/AbstractChangePassword.java
    lenya/sandbox/access_control_redesign/src/modules-core/administration/java/src/org/apache/lenya/cms/ac/usecases/AddUser.java
    lenya/sandbox/access_control_redesign/src/modules-core/administration/java/src/org/apache/lenya/cms/ac/usecases/ChangePassword.java
    lenya/sandbox/access_control_redesign/src/modules-core/administration/java/src/org/apache/lenya/cms/ac/usecases/ChangePasswordAdmin.java
    lenya/sandbox/access_control_redesign/src/modules-core/administration/java/src/org/apache/lenya/cms/ac/usecases/DeleteUser.java
    lenya/sandbox/access_control_redesign/src/modules-core/administration/java/src/org/apache/lenya/cms/ac/usecases/GroupMembers.java
    lenya/sandbox/access_control_redesign/src/modules-core/administration/java/src/org/apache/lenya/cms/ac/usecases/UserGroups.java
    lenya/sandbox/access_control_redesign/src/modules-core/administration/java/src/org/apache/lenya/cms/ac/usecases/UserProfile.java
    lenya/sandbox/access_control_redesign/src/modules/lucene/java/src/org/apache/cocoon/transformation/LuceneIndexTransformer2.java
    lenya/sandbox/access_control_redesign/src/modules/notification/java/src/org/apache/lenya/inbox/xml/XmlSourceInbox.java
    lenya/sandbox/access_control_redesign/src/modules/notification/java/src/org/apache/lenya/notification/AbstractNotifier.java
    lenya/sandbox/access_control_redesign/src/modules/notification/java/src/org/apache/lenya/notification/Address.java
    lenya/sandbox/access_control_redesign/src/modules/notification/java/src/org/apache/lenya/notification/GroupAddress.java
    lenya/sandbox/access_control_redesign/src/modules/notification/java/src/org/apache/lenya/notification/UserAddress.java
    lenya/sandbox/access_control_redesign/src/modules/notification/usecases/currentMessage.jx

Modified: lenya/sandbox/access_control_redesign/src/java/org/apache/lenya/ac/AbstractUserReference.java
URL: http://svn.apache.org/viewvc/lenya/sandbox/access_control_redesign/src/java/org/apache/lenya/ac/AbstractUserReference.java?rev=736356&r1=736355&r2=736356&view=diff
==============================================================================
--- lenya/sandbox/access_control_redesign/src/java/org/apache/lenya/ac/AbstractUserReference.java (original)
+++ lenya/sandbox/access_control_redesign/src/java/org/apache/lenya/ac/AbstractUserReference.java Wed Jan 21 10:04:03 2009
@@ -31,14 +31,18 @@
 
     private static final long serialVersionUID = 1L;
     private String userId;
+    private String managerId;
 
     /**
      * @param userId The ID of the user.
+     * @param accrMgrId The ID of the accreditable manager.
      * @see Item#getId()
      */
-    public AbstractUserReference(String userId) {
+    public AbstractUserReference(String userId, String accrMgrId) {
         Assert.notNull("user ID", userId);
+        Assert.notNull("accreditable manager ID", accrMgrId);
         this.userId = userId;
+        this.managerId = accrMgrId;
     }
 
     /**
@@ -92,4 +96,9 @@
         return matchingGroups;
     }
     
+    public boolean belongsToAccreditableManager(String accrMgrId) {
+        Assert.notNull("accreditable manager ID", accrMgrId);
+        return accrMgrId.equals(this.managerId);
+    }
+
 }

Modified: lenya/sandbox/access_control_redesign/src/java/org/apache/lenya/ac/Authenticator.java
URL: http://svn.apache.org/viewvc/lenya/sandbox/access_control_redesign/src/java/org/apache/lenya/ac/Authenticator.java?rev=736356&r1=736355&r2=736356&view=diff
==============================================================================
--- lenya/sandbox/access_control_redesign/src/java/org/apache/lenya/ac/Authenticator.java (original)
+++ lenya/sandbox/access_control_redesign/src/java/org/apache/lenya/ac/Authenticator.java Wed Jan 21 10:04:03 2009
@@ -20,7 +20,6 @@
 
 import org.apache.avalon.framework.component.Component;
 import org.apache.cocoon.environment.Request;
-import org.apache.lenya.ac.attr.AttributeSet;
 
 /**
  * An authenticator.
@@ -42,25 +41,4 @@
      */
     boolean authenticate(AccreditableManager accreditableManager, Request request)
         throws AccessControlException;
-
-    /**
-     * The login URI for a certain request.
-     * @param request The request.
-     * @return A string.
-     */
-    String getLoginUri(Request request);
-
-    /**
-     * The target URI, i.e. the URI to redirect to after a successful
-     * authentication.
-     * @param request The request containing the authentication data.
-     * @return A string.
-     */
-    String getTargetUri(Request request);
-
-    /**
-     * @return The set of attributes to be expected when a user has been
-     *         authenticated by this authenticator.
-     */
-    AttributeSet getAttributeSet();
 }

Modified: lenya/sandbox/access_control_redesign/src/java/org/apache/lenya/ac/Item.java
URL: http://svn.apache.org/viewvc/lenya/sandbox/access_control_redesign/src/java/org/apache/lenya/ac/Item.java?rev=736356&r1=736355&r2=736356&view=diff
==============================================================================
--- lenya/sandbox/access_control_redesign/src/java/org/apache/lenya/ac/Item.java (original)
+++ lenya/sandbox/access_control_redesign/src/java/org/apache/lenya/ac/Item.java Wed Jan 21 10:04:03 2009
@@ -20,13 +20,15 @@
 
 package org.apache.lenya.ac;
 
+import org.apache.avalon.framework.configuration.Configuration;
+import org.apache.avalon.framework.configuration.ConfigurationException;
 import org.apache.avalon.framework.logger.LogEnabled;
 
 
 /**
  * An item can be initialized from a configuration.
  */
-public interface Item {
+public interface Item extends LogEnabled {
     
     /**
      * Returns the ID.
@@ -58,4 +60,16 @@
      */
     void setDescription(String description);
     
+    /**
+     * Configures this item.
+     * @param configuration The configuration.
+     * @throws ConfigurationException when something went wrong.
+     */
+    void configure(Configuration configuration) throws ConfigurationException;
+    
+    /**
+     * @return The item manager this item belongs to.
+     */
+    ItemManager getItemManager();
+
 }

Modified: lenya/sandbox/access_control_redesign/src/java/org/apache/lenya/ac/ManagedUser.java
URL: http://svn.apache.org/viewvc/lenya/sandbox/access_control_redesign/src/java/org/apache/lenya/ac/ManagedUser.java?rev=736356&r1=736355&r2=736356&view=diff
==============================================================================
--- lenya/sandbox/access_control_redesign/src/java/org/apache/lenya/ac/ManagedUser.java (original)
+++ lenya/sandbox/access_control_redesign/src/java/org/apache/lenya/ac/ManagedUser.java Wed Jan 21 10:04:03 2009
@@ -20,7 +20,7 @@
 /**
  * A user which is managed by the Lenya CMS itself, i.e. it belongs to a {@link UserManager}.
  */
-public interface ManagedUser extends User, Accreditable, Groupable {
+public interface ManagedUser extends User, Accreditable {
 
     /**
      * Delete this user.
@@ -43,12 +43,6 @@
     void setPassword(String plainTextPassword);
 
     /**
-     * Checks support for changing password
-     * @return true if password change is supported
-     */
-    public abstract boolean canChangePassword();
- 
-    /**
      * Saves this user.
      * @throws AccessControlException if the user could not be saved.
      */

Modified: lenya/sandbox/access_control_redesign/src/java/org/apache/lenya/ac/ManagedUserReference.java
URL: http://svn.apache.org/viewvc/lenya/sandbox/access_control_redesign/src/java/org/apache/lenya/ac/ManagedUserReference.java?rev=736356&r1=736355&r2=736356&view=diff
==============================================================================
--- lenya/sandbox/access_control_redesign/src/java/org/apache/lenya/ac/ManagedUserReference.java (original)
+++ lenya/sandbox/access_control_redesign/src/java/org/apache/lenya/ac/ManagedUserReference.java Wed Jan 21 10:04:03 2009
@@ -17,23 +17,17 @@
  */
 package org.apache.lenya.ac;
 
-import org.apache.lenya.util.Assert;
-
 /**
  * A reference to a managed user.
  */
 public class ManagedUserReference extends AbstractUserReference {
-    
-    private String managerId;
 
     /**
      * @param userId The user ID.
      * @param managerId The ID of the accreditable manager the user belongs to.
      */
     public ManagedUserReference(String userId, String managerId) {
-        super(userId);
-        Assert.notNull("manager ID", managerId);
-        this.managerId = managerId;
+        super(userId, managerId);
     }
     
     private static final long serialVersionUID = 1L;
@@ -50,9 +44,4 @@
         }
     }
 
-    public boolean belongsToAccreditableManager(String accrMgrId) {
-        Assert.notNull("accreditable manager ID", accrMgrId);
-        return accrMgrId.equals(this.managerId);
-    }
-
 }

Modified: lenya/sandbox/access_control_redesign/src/java/org/apache/lenya/ac/User.java
URL: http://svn.apache.org/viewvc/lenya/sandbox/access_control_redesign/src/java/org/apache/lenya/ac/User.java?rev=736356&r1=736355&r2=736356&view=diff
==============================================================================
--- lenya/sandbox/access_control_redesign/src/java/org/apache/lenya/ac/User.java (original)
+++ lenya/sandbox/access_control_redesign/src/java/org/apache/lenya/ac/User.java Wed Jan 21 10:04:03 2009
@@ -24,7 +24,7 @@
  * A user.
  * @version $Id$
  */
-public interface User extends Item, AttributeOwner {
+public interface User extends Accreditable, Item, Groupable, AttributeOwner {
     
     /**
      * Get the email address
@@ -41,6 +41,18 @@
     void setEmail(String email);
     
     /**
+     * Sets the password.
+     * @param plainTextPassword The plain text password.
+     */
+    void setPassword(String plainTextPassword);
+   
+    /**
+     * Checks support for changing password
+     * @return true if password change is supported
+     */
+    public abstract boolean canChangePassword();
+ 
+    /**
      * Returns the user's preferred locale for the Lenya
      * CMS menus and CMS screens.
      * 
@@ -84,4 +96,32 @@
      */
     void setDefaultDocumentLocale(String documentLocale); 
     
+    /**
+     * Save the user
+     *
+     * @throws AccessControlException if the save failed
+     */
+    void save() throws AccessControlException;
+    
+    /**
+     * Delete a user
+     *
+     * @throws AccessControlException if the delete failed
+     */
+    void delete() throws AccessControlException;
+    
+    /**
+     * Authenticate a user. This is done by encrypting
+     * the given password and comparing this to the
+     * encryptedPassword.
+     *
+     * @param password to authenticate with
+     * @return true if the given password matches the password for this user
+     */
+    boolean authenticate(String password);
+    
+    /**
+     * @return The accreditable manager this accreditable belongs to.
+     */
+    AccreditableManager getAccreditableManager();
 }

Modified: lenya/sandbox/access_control_redesign/src/java/org/apache/lenya/ac/UserManager.java
URL: http://svn.apache.org/viewvc/lenya/sandbox/access_control_redesign/src/java/org/apache/lenya/ac/UserManager.java?rev=736356&r1=736355&r2=736356&view=diff
==============================================================================
--- lenya/sandbox/access_control_redesign/src/java/org/apache/lenya/ac/UserManager.java (original)
+++ lenya/sandbox/access_control_redesign/src/java/org/apache/lenya/ac/UserManager.java Wed Jan 21 10:04:03 2009
@@ -61,7 +61,7 @@
      * @return the requested user or null if there is
      * no user with the given user id
      */
-    ManagedUser getUser(String userId);
+    User getUser(String userId);
     
     /**
      * @param userId A user ID.

Modified: lenya/sandbox/access_control_redesign/src/modules-core/ac/config/module.xml
URL: http://svn.apache.org/viewvc/lenya/sandbox/access_control_redesign/src/modules-core/ac/config/module.xml?rev=736356&r1=736355&r2=736356&view=diff
==============================================================================
--- lenya/sandbox/access_control_redesign/src/modules-core/ac/config/module.xml (original)
+++ lenya/sandbox/access_control_redesign/src/modules-core/ac/config/module.xml Wed Jan 21 10:04:03 2009
@@ -22,8 +22,6 @@
   <id>org.apache.lenya.modules.ac</id>
   <export package="org.apache.lenya.ac.file"/>
   <export package="org.apache.lenya.ac.impl"/>
-  <export package="org.apache.lenya.ac.attr"/>
-  <export package="org.apache.lenya.ac.attr.impl"/>
   <depends module="org.apache.lenya.modules.cache"/>
   <depends module="org.apache.lenya.modules.linking"/>
   <package>org.apache.lenya.modules</package>

Modified: lenya/sandbox/access_control_redesign/src/modules-core/ac/java/src/org/apache/lenya/ac/attr/antlr/ExpressionsLexer.java
URL: http://svn.apache.org/viewvc/lenya/sandbox/access_control_redesign/src/modules-core/ac/java/src/org/apache/lenya/ac/attr/antlr/ExpressionsLexer.java?rev=736356&r1=736355&r2=736356&view=diff
==============================================================================
--- lenya/sandbox/access_control_redesign/src/modules-core/ac/java/src/org/apache/lenya/ac/attr/antlr/ExpressionsLexer.java (original)
+++ lenya/sandbox/access_control_redesign/src/modules-core/ac/java/src/org/apache/lenya/ac/attr/antlr/ExpressionsLexer.java Wed Jan 21 10:04:03 2009
@@ -1,4 +1,4 @@
-// $ANTLR 3.0.1 /Users/nobby/apache/lenya/sandbox/access_control_redesign/src/modules-core/ac/java/src/org/apache/lenya/ac/attr/antlr/Expressions.g 2008-11-19 23:56:23
+// $ANTLR 3.0.1 /Users/nobby/apache/lenya/sandbox/access_control_redesign/src/modules-core/ac/java/src/org/apache/lenya/ac/attr/antlr/Expressions.g 2009-01-21 16:54:41
 
 package org.apache.lenya.ac.attr.antlr;
 import org.apache.lenya.ac.attr.ErrorHandler;

Modified: lenya/sandbox/access_control_redesign/src/modules-core/ac/java/src/org/apache/lenya/ac/attr/antlr/ExpressionsParser.java
URL: http://svn.apache.org/viewvc/lenya/sandbox/access_control_redesign/src/modules-core/ac/java/src/org/apache/lenya/ac/attr/antlr/ExpressionsParser.java?rev=736356&r1=736355&r2=736356&view=diff
==============================================================================
--- lenya/sandbox/access_control_redesign/src/modules-core/ac/java/src/org/apache/lenya/ac/attr/antlr/ExpressionsParser.java (original)
+++ lenya/sandbox/access_control_redesign/src/modules-core/ac/java/src/org/apache/lenya/ac/attr/antlr/ExpressionsParser.java Wed Jan 21 10:04:03 2009
@@ -1,4 +1,4 @@
-// $ANTLR 3.0.1 /Users/nobby/apache/lenya/sandbox/access_control_redesign/src/modules-core/ac/java/src/org/apache/lenya/ac/attr/antlr/Expressions.g 2008-11-19 23:56:22
+// $ANTLR 3.0.1 /Users/nobby/apache/lenya/sandbox/access_control_redesign/src/modules-core/ac/java/src/org/apache/lenya/ac/attr/antlr/Expressions.g 2009-01-21 16:54:40
 
 package org.apache.lenya.ac.attr.antlr;
 import java.util.HashMap;

Modified: lenya/sandbox/access_control_redesign/src/modules-core/ac/java/src/org/apache/lenya/ac/file/FileGroup.java
URL: http://svn.apache.org/viewvc/lenya/sandbox/access_control_redesign/src/modules-core/ac/java/src/org/apache/lenya/ac/file/FileGroup.java?rev=736356&r1=736355&r2=736356&view=diff
==============================================================================
--- lenya/sandbox/access_control_redesign/src/modules-core/ac/java/src/org/apache/lenya/ac/file/FileGroup.java (original)
+++ lenya/sandbox/access_control_redesign/src/modules-core/ac/java/src/org/apache/lenya/ac/file/FileGroup.java Wed Jan 21 10:04:03 2009
@@ -28,6 +28,8 @@
 import org.apache.avalon.framework.configuration.DefaultConfigurationSerializer;
 import org.apache.avalon.framework.logger.Logger;
 import org.apache.lenya.ac.AccessControlException;
+import org.apache.lenya.ac.Accreditable;
+import org.apache.lenya.ac.Item;
 import org.apache.lenya.ac.ItemManager;
 import org.apache.lenya.ac.impl.AbstractGroup;
 import org.apache.lenya.ac.impl.ItemConfiguration;
@@ -35,7 +37,7 @@
 /**
  * File-based group implementation.
  */
-public class FileGroup extends AbstractGroup implements FileItem {
+public class FileGroup extends AbstractGroup implements Item {
 
     /**
      * @see org.apache.lenya.ac.Group#delete()
@@ -127,7 +129,7 @@
         return this.configurationDirectory;
     }
 
-    public void setConfigurationDirectory(File _configurationDirectory) {
+    protected void setConfigurationDirectory(File _configurationDirectory) {
         assert (_configurationDirectory != null) && _configurationDirectory.isDirectory();
         this.configurationDirectory = _configurationDirectory;
     }

Modified: lenya/sandbox/access_control_redesign/src/modules-core/ac/java/src/org/apache/lenya/ac/file/FileIPRange.java
URL: http://svn.apache.org/viewvc/lenya/sandbox/access_control_redesign/src/modules-core/ac/java/src/org/apache/lenya/ac/file/FileIPRange.java?rev=736356&r1=736355&r2=736356&view=diff
==============================================================================
--- lenya/sandbox/access_control_redesign/src/modules-core/ac/java/src/org/apache/lenya/ac/file/FileIPRange.java (original)
+++ lenya/sandbox/access_control_redesign/src/modules-core/ac/java/src/org/apache/lenya/ac/file/FileIPRange.java Wed Jan 21 10:04:03 2009
@@ -41,7 +41,7 @@
 /**
  * IP range that is stored in a file.
  */
-public class FileIPRange extends AbstractIPRange implements Serializable, FileItem {
+public class FileIPRange extends AbstractIPRange implements Serializable {
 
     /**
 	 * 

Modified: lenya/sandbox/access_control_redesign/src/modules-core/ac/java/src/org/apache/lenya/ac/file/FileItemManager.java
URL: http://svn.apache.org/viewvc/lenya/sandbox/access_control_redesign/src/modules-core/ac/java/src/org/apache/lenya/ac/file/FileItemManager.java?rev=736356&r1=736355&r2=736356&view=diff
==============================================================================
--- lenya/sandbox/access_control_redesign/src/modules-core/ac/java/src/org/apache/lenya/ac/file/FileItemManager.java (original)
+++ lenya/sandbox/access_control_redesign/src/modules-core/ac/java/src/org/apache/lenya/ac/file/FileItemManager.java Wed Jan 21 10:04:03 2009
@@ -152,7 +152,7 @@
 
         String fileName = file.getName();
         String id = fileName.substring(0, fileName.length() - getSuffix().length());
-        FileItem item = (FileItem) this.items.get(id);
+        Item item = (Item) this.items.get(id);
 
         String klass = ItemConfiguration.getItemClass(config);
         if (item == null) {
@@ -160,7 +160,7 @@
                 Class[] paramTypes = { ItemManager.class, Logger.class };
                 Constructor ctor = Class.forName(klass).getConstructor(paramTypes);
                 Object[] params = { this, getLogger() };
-                item = (FileItem) ctor.newInstance(params);
+                item = (Item) ctor.newInstance(params);
             } catch (Exception e) {
                 String errorMsg = "Exception when trying to instanciate: " + klass
                         + " with exception: " + e.fillInStackTrace();

Modified: lenya/sandbox/access_control_redesign/src/modules-core/ac/java/src/org/apache/lenya/ac/file/FileRole.java
URL: http://svn.apache.org/viewvc/lenya/sandbox/access_control_redesign/src/modules-core/ac/java/src/org/apache/lenya/ac/file/FileRole.java?rev=736356&r1=736355&r2=736356&view=diff
==============================================================================
--- lenya/sandbox/access_control_redesign/src/modules-core/ac/java/src/org/apache/lenya/ac/file/FileRole.java (original)
+++ lenya/sandbox/access_control_redesign/src/modules-core/ac/java/src/org/apache/lenya/ac/file/FileRole.java Wed Jan 21 10:04:03 2009
@@ -26,6 +26,7 @@
 import org.apache.avalon.framework.configuration.DefaultConfigurationSerializer;
 import org.apache.avalon.framework.logger.Logger;
 import org.apache.lenya.ac.AccessControlException;
+import org.apache.lenya.ac.Item;
 import org.apache.lenya.ac.ItemManager;
 import org.apache.lenya.ac.impl.AbstractRole;
 import org.apache.lenya.ac.impl.ItemConfiguration;
@@ -34,7 +35,7 @@
  * File-based role implementation.
  * @version $Id$
  */
-public class FileRole extends AbstractRole implements FileItem {
+public class FileRole extends AbstractRole implements Item {
 
     protected static final String ATTR_ASSIGNABLE = "assignable";
 
@@ -111,7 +112,7 @@
         return this.configurationDirectory;
     }
 
-    public void setConfigurationDirectory(File file) {
+    protected void setConfigurationDirectory(File file) {
         this.configurationDirectory = file;
     }
 

Modified: lenya/sandbox/access_control_redesign/src/modules-core/ac/java/src/org/apache/lenya/ac/file/FileUser.java
URL: http://svn.apache.org/viewvc/lenya/sandbox/access_control_redesign/src/modules-core/ac/java/src/org/apache/lenya/ac/file/FileUser.java?rev=736356&r1=736355&r2=736356&view=diff
==============================================================================
--- lenya/sandbox/access_control_redesign/src/modules-core/ac/java/src/org/apache/lenya/ac/file/FileUser.java (original)
+++ lenya/sandbox/access_control_redesign/src/modules-core/ac/java/src/org/apache/lenya/ac/file/FileUser.java Wed Jan 21 10:04:03 2009
@@ -29,6 +29,7 @@
 import org.apache.lenya.ac.AccessControlException;
 import org.apache.lenya.ac.Group;
 import org.apache.lenya.ac.GroupManager;
+import org.apache.lenya.ac.Item;
 import org.apache.lenya.ac.ItemManager;
 import org.apache.lenya.ac.ManagedUser;
 import org.apache.lenya.ac.impl.AbstractUser;
@@ -38,7 +39,7 @@
  * File-based user implementation.
  * @version $Id$
  */
-public class FileUser extends AbstractUser implements FileItem, Serializable, ManagedUser {
+public class FileUser extends AbstractUser implements Item, Serializable, ManagedUser {
 
     /**
      * 
@@ -215,7 +216,7 @@
         return this.configurationDirectory;
     }
 
-    public void setConfigurationDirectory(File _configurationDirectory) {
+    protected void setConfigurationDirectory(File _configurationDirectory) {
         assert (_configurationDirectory != null) && _configurationDirectory.isDirectory();
         this.configurationDirectory = _configurationDirectory;
     }

Modified: lenya/sandbox/access_control_redesign/src/modules-core/ac/java/src/org/apache/lenya/ac/file/FileUserManager.java
URL: http://svn.apache.org/viewvc/lenya/sandbox/access_control_redesign/src/modules-core/ac/java/src/org/apache/lenya/ac/file/FileUserManager.java?rev=736356&r1=736355&r2=736356&view=diff
==============================================================================
--- lenya/sandbox/access_control_redesign/src/modules-core/ac/java/src/org/apache/lenya/ac/file/FileUserManager.java (original)
+++ lenya/sandbox/access_control_redesign/src/modules-core/ac/java/src/org/apache/lenya/ac/file/FileUserManager.java Wed Jan 21 10:04:03 2009
@@ -29,7 +29,6 @@
 import org.apache.lenya.ac.AccessControlException;
 import org.apache.lenya.ac.AccreditableManager;
 import org.apache.lenya.ac.Item;
-import org.apache.lenya.ac.ManagedUser;
 import org.apache.lenya.ac.User;
 import org.apache.lenya.ac.UserManager;
 import org.apache.lenya.ac.UserType;
@@ -119,8 +118,8 @@
      * @param userId user id of requested user
      * @return the requested user or null if there is no user with the given user id
      */
-    public ManagedUser getUser(String userId) {
-        return (ManagedUser) getItem(userId);
+    public User getUser(String userId) {
+        return (User) getItem(userId);
     }
 
     /**

Modified: lenya/sandbox/access_control_redesign/src/modules-core/ac/java/src/org/apache/lenya/ac/impl/AbstractIPRange.java
URL: http://svn.apache.org/viewvc/lenya/sandbox/access_control_redesign/src/modules-core/ac/java/src/org/apache/lenya/ac/impl/AbstractIPRange.java?rev=736356&r1=736355&r2=736356&view=diff
==============================================================================
--- lenya/sandbox/access_control_redesign/src/modules-core/ac/java/src/org/apache/lenya/ac/impl/AbstractIPRange.java (original)
+++ lenya/sandbox/access_control_redesign/src/modules-core/ac/java/src/org/apache/lenya/ac/impl/AbstractIPRange.java Wed Jan 21 10:04:03 2009
@@ -121,7 +121,7 @@
         return this.configurationDirectory;
     }
 
-    public void setConfigurationDirectory(File _configurationDirectory) {
+    protected void setConfigurationDirectory(File _configurationDirectory) {
         this.configurationDirectory = _configurationDirectory;
     }
 

Modified: lenya/sandbox/access_control_redesign/src/modules-core/ac/java/src/org/apache/lenya/ac/impl/AnonymousAuthenticator.java
URL: http://svn.apache.org/viewvc/lenya/sandbox/access_control_redesign/src/modules-core/ac/java/src/org/apache/lenya/ac/impl/AnonymousAuthenticator.java?rev=736356&r1=736355&r2=736356&view=diff
==============================================================================
--- lenya/sandbox/access_control_redesign/src/modules-core/ac/java/src/org/apache/lenya/ac/impl/AnonymousAuthenticator.java (original)
+++ lenya/sandbox/access_control_redesign/src/modules-core/ac/java/src/org/apache/lenya/ac/impl/AnonymousAuthenticator.java Wed Jan 21 10:04:03 2009
@@ -26,7 +26,6 @@
 import org.apache.lenya.ac.ManagedUserReference;
 import org.apache.lenya.ac.UserManager;
 import org.apache.lenya.ac.UserReference;
-import org.apache.lenya.ac.attr.AttributeSet;
 
 /**
  * The anonymous authenticator authenticates to an anonymous user with no
@@ -79,19 +78,4 @@
         }
         return authenticated;
     }
-
-    public AttributeSet getAttributeSet() {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    public String getLoginUri(Request request) {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    public String getTargetUri(Request request) {
-        // TODO Auto-generated method stub
-        return null;
-    }
 }

Modified: lenya/sandbox/access_control_redesign/src/modules-core/ac/java/src/org/apache/lenya/ac/impl/PolicyBuilder.java
URL: http://svn.apache.org/viewvc/lenya/sandbox/access_control_redesign/src/modules-core/ac/java/src/org/apache/lenya/ac/impl/PolicyBuilder.java?rev=736356&r1=736355&r2=736356&view=diff
==============================================================================
--- lenya/sandbox/access_control_redesign/src/modules-core/ac/java/src/org/apache/lenya/ac/impl/PolicyBuilder.java (original)
+++ lenya/sandbox/access_control_redesign/src/modules-core/ac/java/src/org/apache/lenya/ac/impl/PolicyBuilder.java Wed Jan 21 10:04:03 2009
@@ -163,7 +163,7 @@
         Accreditable accreditable = null;
 
         if (elementName.equals(USER_ELEMENT)) {
-            accreditable = (Accreditable) getAccreditableManager().getUserManager().getUser(id);
+            accreditable = getAccreditableManager().getUserManager().getUser(id);
         } else if (elementName.equals(GROUP_ELEMENT)) {
             accreditable = getAccreditableManager().getGroupManager().getGroup(id);
         } else if (elementName.equals(WORLD_ELEMENT)) {

Modified: lenya/sandbox/access_control_redesign/src/modules-core/ac/java/src/org/apache/lenya/ac/impl/TransientUser.java
URL: http://svn.apache.org/viewvc/lenya/sandbox/access_control_redesign/src/modules-core/ac/java/src/org/apache/lenya/ac/impl/TransientUser.java?rev=736356&r1=736355&r2=736356&view=diff
==============================================================================
--- lenya/sandbox/access_control_redesign/src/modules-core/ac/java/src/org/apache/lenya/ac/impl/TransientUser.java (original)
+++ lenya/sandbox/access_control_redesign/src/modules-core/ac/java/src/org/apache/lenya/ac/impl/TransientUser.java Wed Jan 21 10:04:03 2009
@@ -18,27 +18,41 @@
 package org.apache.lenya.ac.impl;
 
 import java.util.HashMap;
+import java.util.HashSet;
 import java.util.Map;
 import java.util.Set;
 
+import org.apache.avalon.framework.configuration.Configuration;
+import org.apache.avalon.framework.configuration.ConfigurationException;
+import org.apache.avalon.framework.logger.AbstractLogEnabled;
 import org.apache.lenya.ac.AccessControlException;
+import org.apache.lenya.ac.Accreditable;
+import org.apache.lenya.ac.AccreditableManager;
+import org.apache.lenya.ac.Group;
+import org.apache.lenya.ac.ItemManager;
 import org.apache.lenya.ac.User;
+import org.apache.lenya.util.Assert;
 
 /**
- * Class for users which are not stored in the CMS, but in an external directory
- * like LDAP or a Shibboleth identity provider.
+ * Class for users which are not stored in the CMS, but in an external directory like LDAP or a
+ * Shibboleth identity provider.
  */
-public class TransientUser implements User {
+public class TransientUser extends AbstractLogEnabled implements User {
+
+    private AccreditableManager accreditableManager;
 
     /**
      * @param id The user ID.
      */
-    public TransientUser(String id) {
+    public TransientUser(AccreditableManager accrMgr, String id) {
+        Assert.notNull("accrMgr", accrMgr);
+        Assert.notNull("id", id);
+        this.accreditableManager = accrMgr;
         this.id = id;
     }
 
     private String id;
-    
+
     public String getId() {
         return this.id;
     }
@@ -67,7 +81,7 @@
     protected boolean hasAttributes() {
         return !this.attributes.isEmpty();
     }
-    
+
     private String email;
     private String description;
     private String name;
@@ -105,9 +119,79 @@
     }
 
     public void setDefaultDocumentLocale(String documentLocale) {
+        throw new UnsupportedOperationException();
     }
 
     public void setDefaultMenuLocale(String menuLocale) {
+        throw new UnsupportedOperationException();
+    }
+
+    public boolean authenticate(String password) {
+        throw new UnsupportedOperationException();
+    }
+
+    public boolean canChangePassword() {
+        return false;
+    }
+
+    public void delete() throws AccessControlException {
+        throw new UnsupportedOperationException();
+    }
+
+    public AccreditableManager getAccreditableManager() {
+        return this.accreditableManager;
+    }
+
+    public void save() throws AccessControlException {
+        throw new UnsupportedOperationException();
+    }
+
+    public void setPassword(String plainTextPassword) {
+        throw new UnsupportedOperationException();
+    }
+
+    public Accreditable[] getAccreditablesToAuthorize() {
+        Set accrs = new HashSet();
+        accrs.add(this);
+        accrs.addAll(getGroupSet());
+        return (Accreditable[]) accrs.toArray(new Accreditable[accrs.size()]);
+    }
+
+    public void configure(Configuration configuration) throws ConfigurationException {
+    }
+
+    public ItemManager getItemManager() {
+        throw new UnsupportedOperationException();
+    }
+
+    public void addedToGroup(Group group) {
+    }
+
+    public Group[] getGroups() {
+        Set groups = getGroupSet();
+        return (Group[]) groups.toArray(new Group[groups.size()]);
+    }
+
+    protected Set getGroupSet() {
+        try {
+            Set groups = new HashSet();
+            Group[] allGroups = getAccreditableManager().getGroupManager().getGroups();
+            for (int i = 0; i < allGroups.length; i++) {
+                if (allGroups[i].matches(this)) {
+                    groups.add(allGroups[i]);
+                }
+            }
+            return groups;
+        } catch (AccessControlException e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    public void removeFromAllGroups() {
+        throw new UnsupportedOperationException();
+    }
+
+    public void removedFromGroup(Group group) {
     }
 
 }

Modified: lenya/sandbox/access_control_redesign/src/modules-core/ac/java/src/org/apache/lenya/ac/impl/TransientUserReference.java
URL: http://svn.apache.org/viewvc/lenya/sandbox/access_control_redesign/src/modules-core/ac/java/src/org/apache/lenya/ac/impl/TransientUserReference.java?rev=736356&r1=736355&r2=736356&view=diff
==============================================================================
--- lenya/sandbox/access_control_redesign/src/modules-core/ac/java/src/org/apache/lenya/ac/impl/TransientUserReference.java (original)
+++ lenya/sandbox/access_control_redesign/src/modules-core/ac/java/src/org/apache/lenya/ac/impl/TransientUserReference.java Wed Jan 21 10:04:03 2009
@@ -38,7 +38,7 @@
      * @param user The user.
      */
     public TransientUserReference(TransientUser user) {
-        super(user.getId());
+        super(user.getId(), user.getAccreditableManager().getId());
         this.user = user;
     }
 

Modified: lenya/sandbox/access_control_redesign/src/modules-core/ac/java/src/org/apache/lenya/ac/impl/UserAuthenticator.java
URL: http://svn.apache.org/viewvc/lenya/sandbox/access_control_redesign/src/modules-core/ac/java/src/org/apache/lenya/ac/impl/UserAuthenticator.java?rev=736356&r1=736355&r2=736356&view=diff
==============================================================================
--- lenya/sandbox/access_control_redesign/src/modules-core/ac/java/src/org/apache/lenya/ac/impl/UserAuthenticator.java (original)
+++ lenya/sandbox/access_control_redesign/src/modules-core/ac/java/src/org/apache/lenya/ac/impl/UserAuthenticator.java Wed Jan 21 10:04:03 2009
@@ -24,13 +24,10 @@
 import org.apache.lenya.ac.AccreditableManager;
 import org.apache.lenya.ac.Authenticator;
 import org.apache.lenya.ac.Identity;
-import org.apache.lenya.ac.ManagedUser;
 import org.apache.lenya.ac.ManagedUserReference;
+import org.apache.lenya.ac.User;
 import org.apache.lenya.ac.UserManager;
 import org.apache.lenya.ac.UserReference;
-import org.apache.lenya.ac.attr.AttributeSet;
-import org.apache.lenya.ac.attr.impl.AttributeSetImpl;
-import org.apache.lenya.util.ServletHelper;
 
 /**
  * User authenticator.
@@ -103,7 +100,7 @@
             String password, Identity identity) throws AccessControlException {
 
         UserManager userManager = accreditableManager.getUserManager();
-        ManagedUser user = (ManagedUser) userManager.getUser(username);
+        User user = userManager.getUser(username);
         if (getLogger().isDebugEnabled()) {
             getLogger().debug("Authenticating user: [" + user + "]");
         }
@@ -135,17 +132,4 @@
         return authenticated;
     }
 
-    public AttributeSet getAttributeSet() {
-        return new AttributeSetImpl();
-    }
-
-    public String getLoginUri(Request request) {
-        String webappUrl = ServletHelper.getWebappURI(request);
-        return webappUrl + "?lenya.module=openid&lenya.action=login";
-    }
-
-    public String getTargetUri(Request request) {
-        return ServletHelper.getWebappURI(request);
-    }
-
 }

Modified: lenya/sandbox/access_control_redesign/src/modules-core/ac/java/src/org/apache/lenya/cms/cocoon/components/modules/input/AccessControlModule.java
URL: http://svn.apache.org/viewvc/lenya/sandbox/access_control_redesign/src/modules-core/ac/java/src/org/apache/lenya/cms/cocoon/components/modules/input/AccessControlModule.java?rev=736356&r1=736355&r2=736356&view=diff
==============================================================================
--- lenya/sandbox/access_control_redesign/src/modules-core/ac/java/src/org/apache/lenya/cms/cocoon/components/modules/input/AccessControlModule.java (original)
+++ lenya/sandbox/access_control_redesign/src/modules-core/ac/java/src/org/apache/lenya/cms/cocoon/components/modules/input/AccessControlModule.java Wed Jan 21 10:04:03 2009
@@ -47,7 +47,6 @@
 import org.apache.lenya.ac.User;
 import org.apache.lenya.ac.UserManager;
 import org.apache.lenya.ac.UserReference;
-import org.apache.lenya.ac.impl.DefaultAccessController;
 import org.apache.lenya.cms.ac.PolicyUtil;
 import org.apache.lenya.util.ServletHelper;
 
@@ -62,17 +61,14 @@
  * <li><strong><code>user-id</code></strong> - the ID of the currently logged-in user</li>
  * <li><strong><code>user-name</code></strong> - the full name of the currently logged-in user</li>
  * <li><strong><code>user-name:{user-id}</code></strong> - the full name of a specific user</li>
- * <li><strong><code>user-email</code></strong> - the e-mail address of the currently logged-in user
- * </li>
+ * <li><strong><code>user-email</code></strong> - the e-mail address of the currently logged-in user</li>
  * <li><strong><code>user-email:{user-id}</code></strong> - the e-mail address of a specific user</li>
  * <li><strong><code>ip-address</code></strong> - the IP address of the client machine</li>
- * <li><strong><code>role-ids</code></strong> - the role IDs which are granted to the current
- * identity</li>
+ * <li><strong><code>role-ids</code></strong> - the role IDs which are granted to the current identity</li>
  * <li><strong><code>user-manager</code></strong> - the user manager object</li>
  * <li><strong><code>group-manager</code></strong> - the group manager object</li>
  * <li><strong><code>iprange-manager</code></strong> - the IP range manager object</li>
  * <li><strong><code>role-manager</code></strong> - the role manager object</li>
- * <li><strong><code>login-uri</code></strong> - the URI for the redirect to the login screen</li>
  * </ul>
  * 
  */
@@ -118,16 +114,12 @@
      * Returns if the current page is SSL protected (true|false).
      */
     public static final String SSL = "ssl";
-    /**
-     * The URI for the redirect to the login screen.
-     */
-    public static final String LOGIN_URI = "login-uri";
 
     /**
      * The names of the AccessControlModule parameters.
      */
     static final String[] PARAMETER_NAMES = { IP_ADDRESS, USER_ID, USER_NAME, USER_EMAIL, ROLE_IDS,
-            USER_MANAGER, GROUP_MANAGER, ROLE_MANAGER, IP_RANGE_MANAGER, SSL, LOGIN_URI };
+            USER_MANAGER, GROUP_MANAGER, ROLE_MANAGER, IP_RANGE_MANAGER, SSL };
 
     /**
      * 
@@ -148,9 +140,11 @@
             throw new ConfigurationException("The attribute [" + name + "] is not supported!");
         }
 
-        Identity identity = session != null ? (Identity) session.getAttribute(Identity.class
-                .getName()) : null;
-
+        Identity identity = null;
+        
+        if (session != null) {
+            identity = (Identity) session.getAttribute(Identity.class.getName());
+        }
         User user = getUser(request, parameters, identity);
 
         if (user != null) {
@@ -193,31 +187,40 @@
         if (name.equals(USER_MANAGER) || name.equals(GROUP_MANAGER) || name.equals(ROLE_MANAGER)
                 || name.equals(IP_RANGE_MANAGER)) {
             value = getItemManager(request, name);
-        } else if (name.equals(LOGIN_URI)) {
-            ValueExtractor extractor = new ValueExtractor() {
-                protected String extractValue(DefaultAccessController accessController,
-                        Request request) {
-                    return accessController.getAuthenticator().getLoginUri(request);
-                }
-            };
-            value = extractValue(request, extractor);
-        } else if (name.equals(SSL)) {
-            ValueExtractor extractor = new ValueExtractor() {
-                protected String extractValue(DefaultAccessController accessController,
-                        Request request) {
-                    String url = ServletHelper.getWebappURI(request);
-                    AccreditableManager accreditableManager = accessController
-                            .getAccreditableManager();
-                    PolicyManager policyManager = accessController.getPolicyManager();
-                    try {
-                        Policy policy = policyManager.getPolicy(accreditableManager, url);
-                        return Boolean.toString(policy.isSSLProtected());
-                    } catch (Exception e) {
-                        throw new RuntimeException(e);
+        }
+        
+        if (name.equals(SSL)) {
+            ServiceSelector selector = null;
+            AccessControllerResolver acResolver = null;
+            AccessController accessController = null;
+            try {
+                selector = (ServiceSelector) this.manager.lookup(AccessControllerResolver.ROLE
+                        + "Selector");
+                acResolver
+                    = (AccessControllerResolver) selector.select(AccessControllerResolver.DEFAULT_RESOLVER);
+    
+                String url = ServletHelper.getWebappURI(request);
+                accessController = acResolver.resolveAccessController(url);
+                AccreditableManager accreditableManager = accessController.getAccreditableManager();
+                PolicyManager policyManager = accessController.getPolicyManager();
+    
+                Policy policy = policyManager.getPolicy(accreditableManager, url);
+                value = Boolean.toString(policy.isSSLProtected());
+            }
+            catch (Exception e) {
+                throw new ConfigurationException("Resolving attribute [" + name + "] failed: ", e);
+            }
+            finally {
+                if (selector != null) {
+                    if (acResolver != null) {
+                        if (accessController != null) {
+                            acResolver.release(accessController);
+                        }
+                        selector.release(acResolver);
                     }
+                    this.manager.release(selector);
                 }
-            };
-            value = extractValue(request, extractor);
+            }
         }
 
         return value;
@@ -339,44 +342,4 @@
         this.manager = _manager;
     }
 
-    /**
-     * Class to obtain a property of the access controller without duplicating the lookup/release
-     * boilerplate code.
-     */
-    protected static abstract class ValueExtractor {
-        protected abstract String extractValue(DefaultAccessController accessController,
-                Request request);
-    }
-
-    protected String extractValue(Request request, ValueExtractor extractor)
-            throws ConfigurationException {
-        DefaultAccessController accessController = null;
-        ServiceSelector selector = null;
-        AccessControllerResolver resolver = null;
-
-        try {
-            selector = (ServiceSelector) this.manager.lookup(AccessControllerResolver.ROLE
-                    + "Selector");
-            resolver = (AccessControllerResolver) selector
-                    .select(AccessControllerResolver.DEFAULT_RESOLVER);
-
-            String url = ServletHelper.getWebappURI(request);
-            accessController = (DefaultAccessController) resolver.resolveAccessController(url);
-
-            return extractor.extractValue(accessController, request);
-
-        } catch (Exception e) {
-            throw new ConfigurationException("Could not determine login URI: ", e);
-        } finally {
-            if (selector != null) {
-                if (resolver != null) {
-                    if (accessController != null) {
-                        resolver.release(accessController);
-                    }
-                    selector.release(resolver);
-                }
-                this.manager.release(selector);
-            }
-        }
-    }
 }

Modified: lenya/sandbox/access_control_redesign/src/modules-core/ac/java/test/org/apache/lenya/ac/file/FileUserTest.java
URL: http://svn.apache.org/viewvc/lenya/sandbox/access_control_redesign/src/modules-core/ac/java/test/org/apache/lenya/ac/file/FileUserTest.java?rev=736356&r1=736355&r2=736356&view=diff
==============================================================================
--- lenya/sandbox/access_control_redesign/src/modules-core/ac/java/test/org/apache/lenya/ac/file/FileUserTest.java (original)
+++ lenya/sandbox/access_control_redesign/src/modules-core/ac/java/test/org/apache/lenya/ac/file/FileUserTest.java Wed Jan 21 10:04:03 2009
@@ -225,7 +225,7 @@
         FileUserManager _manager = getUserManager();
         assertNotNull(_manager);
 
-        FileUser lenya = (FileUser) _manager.getUser("lenya");
+        User lenya = _manager.getUser("lenya");
         assertNotNull(lenya);
         assertTrue(lenya.authenticate("levi"));
     }

Modified: lenya/sandbox/access_control_redesign/src/modules-core/ac/java/test/org/apache/lenya/ac/impl/UserManagerTest.java
URL: http://svn.apache.org/viewvc/lenya/sandbox/access_control_redesign/src/modules-core/ac/java/test/org/apache/lenya/ac/impl/UserManagerTest.java?rev=736356&r1=736355&r2=736356&view=diff
==============================================================================
--- lenya/sandbox/access_control_redesign/src/modules-core/ac/java/test/org/apache/lenya/ac/impl/UserManagerTest.java (original)
+++ lenya/sandbox/access_control_redesign/src/modules-core/ac/java/test/org/apache/lenya/ac/impl/UserManagerTest.java Wed Jan 21 10:04:03 2009
@@ -74,7 +74,7 @@
         FileRole adminRole = new FileRole(getAccreditableManager().getRoleManager(), getLogger(),
                 adminRoleId);
 
-        FileUser user = new FileUser(getAccreditableManager().getUserManager(), getLogger(), userName,
+        User user = new FileUser(getAccreditableManager().getUserManager(), getLogger(), userName,
                 "Alice in Wonderland", "alice@test.com", "secret");
 
         editorRole.save();

Modified: lenya/sandbox/access_control_redesign/src/modules-core/administration/java/src/org/apache/lenya/cms/ac/usecases/AbstractChangePassword.java
URL: http://svn.apache.org/viewvc/lenya/sandbox/access_control_redesign/src/modules-core/administration/java/src/org/apache/lenya/cms/ac/usecases/AbstractChangePassword.java?rev=736356&r1=736355&r2=736356&view=diff
==============================================================================
--- lenya/sandbox/access_control_redesign/src/modules-core/administration/java/src/org/apache/lenya/cms/ac/usecases/AbstractChangePassword.java (original)
+++ lenya/sandbox/access_control_redesign/src/modules-core/administration/java/src/org/apache/lenya/cms/ac/usecases/AbstractChangePassword.java Wed Jan 21 10:04:03 2009
@@ -17,7 +17,7 @@
  */
 package org.apache.lenya.cms.ac.usecases;
 
-import org.apache.lenya.ac.ManagedUser;
+import org.apache.lenya.ac.User;
 
 
 /**
@@ -28,7 +28,7 @@
     protected static final String NEW_PASSWORD = "newPassword";
     protected static final String CONFIRM_PASSWORD = "confirmPassword";
 
-    protected abstract ManagedUser getUser();
+    protected abstract User getUser();
 
     /**
      * @see org.apache.lenya.cms.usecase.AbstractUsecase#doCheckExecutionConditions()

Modified: lenya/sandbox/access_control_redesign/src/modules-core/administration/java/src/org/apache/lenya/cms/ac/usecases/AddUser.java
URL: http://svn.apache.org/viewvc/lenya/sandbox/access_control_redesign/src/modules-core/administration/java/src/org/apache/lenya/cms/ac/usecases/AddUser.java?rev=736356&r1=736355&r2=736356&view=diff
==============================================================================
--- lenya/sandbox/access_control_redesign/src/modules-core/administration/java/src/org/apache/lenya/cms/ac/usecases/AddUser.java (original)
+++ lenya/sandbox/access_control_redesign/src/modules-core/administration/java/src/org/apache/lenya/cms/ac/usecases/AddUser.java Wed Jan 21 10:04:03 2009
@@ -20,7 +20,6 @@
 import org.apache.avalon.framework.container.ContainerUtil;
 import org.apache.lenya.ac.AccessControlException;
 import org.apache.lenya.ac.ItemUtil;
-import org.apache.lenya.ac.ManagedUser;
 import org.apache.lenya.ac.User;
 import org.apache.lenya.ac.UserManager;
 import org.apache.lenya.ac.file.FileUser;
@@ -109,7 +108,7 @@
         String email = getParameterAsString(UserProfile.EMAIL);
         String className = getParameterAsString(CLASS_NAME);
 
-        ManagedUser user;
+        User user;
         if (className.equals(LDAPUser.class.getName())) {
             String ldapId = getParameterAsString(LDAP_ID);
             user = new LDAPUser(userManager, getLogger(), userId, email, ldapId, getLogger());

Modified: lenya/sandbox/access_control_redesign/src/modules-core/administration/java/src/org/apache/lenya/cms/ac/usecases/ChangePassword.java
URL: http://svn.apache.org/viewvc/lenya/sandbox/access_control_redesign/src/modules-core/administration/java/src/org/apache/lenya/cms/ac/usecases/ChangePassword.java?rev=736356&r1=736355&r2=736356&view=diff
==============================================================================
--- lenya/sandbox/access_control_redesign/src/modules-core/administration/java/src/org/apache/lenya/cms/ac/usecases/ChangePassword.java (original)
+++ lenya/sandbox/access_control_redesign/src/modules-core/administration/java/src/org/apache/lenya/cms/ac/usecases/ChangePassword.java Wed Jan 21 10:04:03 2009
@@ -17,7 +17,7 @@
  */
 package org.apache.lenya.cms.ac.usecases;
 
-import org.apache.lenya.ac.ManagedUser;
+import org.apache.lenya.ac.User;
 
 /**
  * Usecase to change a user's password. The old password is checked.
@@ -29,7 +29,7 @@
     /**
      * @return Always returns the currently logged in user.
      */
-    protected ManagedUser getUser() {
+    protected User getUser() {
         String id = getSession().getIdentity().getUserReference().getId();
         return getUserManager().getUser(id);
     }
@@ -47,7 +47,7 @@
      */
     private void checkOldPassword() {
         String oldPassword = getParameterAsString(OLD_PASSWORD);
-        boolean authenticated = ((ManagedUser) getUser()).authenticate(oldPassword);
+        boolean authenticated = getUser().authenticate(oldPassword);
         if (!authenticated) {
             addErrorMessage("The old password is not correct.");
         }

Modified: lenya/sandbox/access_control_redesign/src/modules-core/administration/java/src/org/apache/lenya/cms/ac/usecases/ChangePasswordAdmin.java
URL: http://svn.apache.org/viewvc/lenya/sandbox/access_control_redesign/src/modules-core/administration/java/src/org/apache/lenya/cms/ac/usecases/ChangePasswordAdmin.java?rev=736356&r1=736355&r2=736356&view=diff
==============================================================================
--- lenya/sandbox/access_control_redesign/src/modules-core/administration/java/src/org/apache/lenya/cms/ac/usecases/ChangePasswordAdmin.java (original)
+++ lenya/sandbox/access_control_redesign/src/modules-core/administration/java/src/org/apache/lenya/cms/ac/usecases/ChangePasswordAdmin.java Wed Jan 21 10:04:03 2009
@@ -17,16 +17,16 @@
  */
 package org.apache.lenya.cms.ac.usecases;
 
-import org.apache.lenya.ac.ManagedUser;
+import org.apache.lenya.ac.User;
 
 /**
  * Usecase to change a user's password.
  */
 public class ChangePasswordAdmin extends AbstractChangePassword {
 
-    private ManagedUser user;
+    private User user;
 
-    protected ManagedUser getUser() {
+    protected User getUser() {
         if (this.user == null) {
             String userId = getParameterAsString(UserProfile.USER_ID);
             this.user = getUserManager().getUser(userId);

Modified: lenya/sandbox/access_control_redesign/src/modules-core/administration/java/src/org/apache/lenya/cms/ac/usecases/DeleteUser.java
URL: http://svn.apache.org/viewvc/lenya/sandbox/access_control_redesign/src/modules-core/administration/java/src/org/apache/lenya/cms/ac/usecases/DeleteUser.java?rev=736356&r1=736355&r2=736356&view=diff
==============================================================================
--- lenya/sandbox/access_control_redesign/src/modules-core/administration/java/src/org/apache/lenya/cms/ac/usecases/DeleteUser.java (original)
+++ lenya/sandbox/access_control_redesign/src/modules-core/administration/java/src/org/apache/lenya/cms/ac/usecases/DeleteUser.java Wed Jan 21 10:04:03 2009
@@ -17,7 +17,7 @@
  */
 package org.apache.lenya.cms.ac.usecases;
 
-import org.apache.lenya.ac.ManagedUser;
+import org.apache.lenya.ac.User;
 
 /**
  * Usecase to delete a user.
@@ -33,7 +33,7 @@
         super.doExecute();
 
         String userId = getParameterAsString(UserProfile.USER_ID);
-        ManagedUser user = getUserManager().getUser(userId);
+        User user = getUserManager().getUser(userId);
         if (user == null) {
             throw new RuntimeException("User [" + userId + "] not found.");
         }

Modified: lenya/sandbox/access_control_redesign/src/modules-core/administration/java/src/org/apache/lenya/cms/ac/usecases/GroupMembers.java
URL: http://svn.apache.org/viewvc/lenya/sandbox/access_control_redesign/src/modules-core/administration/java/src/org/apache/lenya/cms/ac/usecases/GroupMembers.java?rev=736356&r1=736355&r2=736356&view=diff
==============================================================================
--- lenya/sandbox/access_control_redesign/src/modules-core/administration/java/src/org/apache/lenya/cms/ac/usecases/GroupMembers.java (original)
+++ lenya/sandbox/access_control_redesign/src/modules-core/administration/java/src/org/apache/lenya/cms/ac/usecases/GroupMembers.java Wed Jan 21 10:04:03 2009
@@ -23,7 +23,6 @@
 
 import org.apache.lenya.ac.Group;
 import org.apache.lenya.ac.Groupable;
-import org.apache.lenya.ac.ManagedUser;
 import org.apache.lenya.ac.User;
 import org.apache.lenya.cms.usecase.UsecaseException;
 
@@ -80,7 +79,7 @@
 
         List groupUsers = (List) getParameter(GROUP_USERS);
         for (Iterator i = groupUsers.iterator(); i.hasNext();) {
-            ManagedUser user = (ManagedUser) i.next();
+            User user = (User) i.next();
             group.add(user);
             user.save();
         }

Modified: lenya/sandbox/access_control_redesign/src/modules-core/administration/java/src/org/apache/lenya/cms/ac/usecases/UserGroups.java
URL: http://svn.apache.org/viewvc/lenya/sandbox/access_control_redesign/src/modules-core/administration/java/src/org/apache/lenya/cms/ac/usecases/UserGroups.java?rev=736356&r1=736355&r2=736356&view=diff
==============================================================================
--- lenya/sandbox/access_control_redesign/src/modules-core/administration/java/src/org/apache/lenya/cms/ac/usecases/UserGroups.java (original)
+++ lenya/sandbox/access_control_redesign/src/modules-core/administration/java/src/org/apache/lenya/cms/ac/usecases/UserGroups.java Wed Jan 21 10:04:03 2009
@@ -23,8 +23,7 @@
 import java.util.List;
 
 import org.apache.lenya.ac.Group;
-import org.apache.lenya.ac.Groupable;
-import org.apache.lenya.ac.ManagedUser;
+import org.apache.lenya.ac.User;
 import org.apache.lenya.cms.usecase.UsecaseException;
 
 /**
@@ -45,13 +44,13 @@
     protected void doExecute() throws Exception {
         super.doExecute();
 
-        ManagedUser user = getUser();
+        User user = getUser();
         user.removeFromAllGroups();
 
         List userGroups = (List) getParameter(USER_GROUPS);
         for (Iterator i = userGroups.iterator(); i.hasNext();) {
             Group group = (Group) i.next();
-            group.add((Groupable) user);
+            group.add(user);
         }
         user.save();
     }
@@ -101,9 +100,9 @@
 
     }
 
-    protected ManagedUser getUser() {
+    protected User getUser() {
         String userId = getParameterAsString(UserProfile.USER_ID);
-        ManagedUser user = getUserManager().getUser(userId);
+        User user = getUserManager().getUser(userId);
         if (user == null) {
             throw new RuntimeException("User [" + userId + "] not found.");
         }
@@ -113,7 +112,7 @@
     protected void initParameters() {
         super.initParameters();
         
-        Group[] userGroupArray = ((Groupable) getUser()).getGroups();
+        Group[] userGroupArray = getUser().getGroups();
         List userGroups = new ArrayList(Arrays.asList(userGroupArray));
         setParameter(USER_GROUPS, userGroups);
         

Modified: lenya/sandbox/access_control_redesign/src/modules-core/administration/java/src/org/apache/lenya/cms/ac/usecases/UserProfile.java
URL: http://svn.apache.org/viewvc/lenya/sandbox/access_control_redesign/src/modules-core/administration/java/src/org/apache/lenya/cms/ac/usecases/UserProfile.java?rev=736356&r1=736355&r2=736356&view=diff
==============================================================================
--- lenya/sandbox/access_control_redesign/src/modules-core/administration/java/src/org/apache/lenya/cms/ac/usecases/UserProfile.java (original)
+++ lenya/sandbox/access_control_redesign/src/modules-core/administration/java/src/org/apache/lenya/cms/ac/usecases/UserProfile.java Wed Jan 21 10:04:03 2009
@@ -17,7 +17,7 @@
  */
 package org.apache.lenya.cms.ac.usecases;
 
-import org.apache.lenya.ac.ManagedUser;
+import org.apache.lenya.ac.User;
 import org.apache.lenya.ac.ItemUtil;
 
 /**
@@ -71,13 +71,13 @@
         
     }
     
-    private ManagedUser user;
+    private User user;
     
     /**
      * Returns the currently edited user.
      * @return A user.
      */
-    protected ManagedUser getUser() {
+    protected User getUser() {
         return this.user;
     }
     

Modified: lenya/sandbox/access_control_redesign/src/modules/lucene/java/src/org/apache/cocoon/transformation/LuceneIndexTransformer2.java
URL: http://svn.apache.org/viewvc/lenya/sandbox/access_control_redesign/src/modules/lucene/java/src/org/apache/cocoon/transformation/LuceneIndexTransformer2.java?rev=736356&r1=736355&r2=736356&view=diff
==============================================================================
--- lenya/sandbox/access_control_redesign/src/modules/lucene/java/src/org/apache/cocoon/transformation/LuceneIndexTransformer2.java (original)
+++ lenya/sandbox/access_control_redesign/src/modules/lucene/java/src/org/apache/cocoon/transformation/LuceneIndexTransformer2.java Wed Jan 21 10:04:03 2009
@@ -45,6 +45,8 @@
 import org.apache.lenya.ac.Identity;
 import org.apache.lenya.ac.User;
 import org.apache.lenya.ac.UserManager;
+import org.apache.lenya.cms.repository.RepositoryUtil;
+import org.apache.lenya.cms.repository.Session;
 import org.apache.lenya.modules.lucene.MetaDataFieldRegistry;
 import org.apache.lenya.notification.Address;
 import org.apache.lenya.notification.Message;
@@ -62,20 +64,23 @@
 /**
  * Another lucene index transformer.</br> allow
  * <ul>
- * <li>index function (update indexing or add indexing if clear attribute is true)</li>
+ * <li>index function (update indexing or add indexing if clear attribute is
+ * true)</li>
  * <li>lucene field boosting</li>
  * <li>delete function</li>
  * </ul>
  * 
  * <p>
- * This tranformer used several avalon components, but you can use them separatly :
+ * This tranformer used several avalon components, but you can use them
+ * separatly :
  * <ul>
- * <li>AnalyzerManager: you can setup a analyzer (configurable) in the analyzer_manager tag in
- * cocoon.xconf file</li>
- * <li>IndexManager: you can setup a index in a the /WEB-INF/index.xml (default location , but you
- * can specify the location in the IndexManager component configuration in cocoon.xconf file)</li>
- * <li>Indexer (2 implementations: default (with update optimization) and parallel implementation
- * for multiple cpu)</li>
+ * <li>AnalyzerManager: you can setup a analyzer (configurable) in the
+ * analyzer_manager tag in cocoon.xconf file</li>
+ * <li>IndexManager: you can setup a index in a the /WEB-INF/index.xml (default
+ * location , but you can specify the location in the IndexManager component
+ * configuration in cocoon.xconf file)</li>
+ * <li>Indexer (2 implementations: default (with update optimization) and
+ * parallel implementation for multiple cpu)</li>
  * </p>
  * <p>
  * <strong>Example of input source: </strong>
@@ -85,18 +90,20 @@
  * <li>to Index <br>
  * &lt;lucene:index xmlns:lucene=&quot;http://apache.org/cocoon/lucene/1.0&quot
  * <br/>indexid=&quot;myindex&quot; <br>
- * clear="true" (optinal attribute: clear index) <br/>merge-factor="100"&gt; (optinal attribute: see
- * lucene doc) <br>
- * <br/>&lt;lucene:document uid="http://myhost/myfile1.data"&gt; <br/> &lt;lucene:field name="tile"
- * &gt; sqdqsdq &lt;/lucene:field&gt; <br>
- * &lt;lucene:field name="description" &gt; a text bla bal blalael balbal&lt;/lucene:field&gt; <br>
- * &lt;lucene:field name="date" &gt;10/12/2002&lt;/lucene:field&gt; <br/> &lt;/lucene:document&gt; <br>
+ * clear="true" (optinal attribute: clear index) <br/>merge-factor="100"&gt;
+ * (optinal attribute: see lucene doc) <br>
+ * <br/>&lt;lucene:document uid="http://myhost/myfile1.data"&gt; <br/>
+ * &lt;lucene:field name="tile" &gt; sqdqsdq &lt;/lucene:field&gt; <br>
+ * &lt;lucene:field name="description" &gt; a text bla bal blalael
+ * balbal&lt;/lucene:field&gt; <br>
+ * &lt;lucene:field name="date" &gt;10/12/2002&lt;/lucene:field&gt; <br/>
+ * &lt;/lucene:document&gt; <br>
  * 
  * <p>
  * &lt;lucene:document uid="http://myhost/myfile2.data" &gt; <br>
  * &lt;lucene:field name="author" boost="2" &gt;Mr Author &lt;/lucene:field&gt;
- * <em>(boost the field for the search (see Lucene documentation))</em> <br/> &lt;lucene:field
- * name="langage" &gt;french&lt;/lucene:field&gt; <br>
+ * <em>(boost the field for the search (see Lucene documentation))</em> <br/>
+ * &lt;lucene:field name="langage" &gt;french&lt;/lucene:field&gt; <br>
  * &lt;/lucene:document&gt; <br>
  * &lt; /lucene:index&gt;
  * </p>
@@ -114,15 +121,17 @@
  * <strong>Example of Output Source </strong>
  * </p>
  * <p>
- * &lt;page xmlns:lucene=&quot;http://apache.org/cocoon/lucene/1.0&quot;&gt; <br>
+ * &lt;page xmlns:lucene=&quot;http://apache.org/cocoon/lucene/1.0&quot;&gt;
+ * <br>
  * &lt; lucene:index &gt; <br>
- * &lt;lucene:document uid="http://myhost/myfile1.data"/&gt; <br/> &lt;lucene:document
- * uid="http://myhost/myfile2.data"/&gt; <br/> &lt;/lucene:index&gt;
+ * &lt;lucene:document uid="http://myhost/myfile1.data"/&gt; <br/>
+ * &lt;lucene:document uid="http://myhost/myfile2.data"/&gt; <br/>
+ * &lt;/lucene:index&gt;
  * </p>
  * <p>
- * &lt;lucene:delete &gt; &lt;lucene:document uid="http://myhost/myfile1.data"/&gt;
- * <br/>&lt;lucene:document uid="EODOED-EFE"/&gt; <br/>&lt;/lucene:delete &gt;</br>
- * </li>
+ * &lt;lucene:delete &gt; &lt;lucene:document
+ * uid="http://myhost/myfile1.data"/&gt; <br/>&lt;lucene:document
+ * uid="EODOED-EFE"/&gt; <br/>&lt;/lucene:delete &gt;</br></li>
  * </ul>
  * 
  * @author Nicolas Maisonneuve
@@ -158,14 +167,14 @@
     public static final String LUCENE_INDEXING_CREATE_ATTRIBUTE = "clear";
 
     /**
-     * Optional attribute: Analyzer identity: see analyzerManager Component (default: the analyer of
-     * the index declared in the index definition)
+     * Optional attribute: Analyzer identity: see analyzerManager Component
+     * (default: the analyer of the index declared in the index definition)
      */
     public static final String LUCENE_INDEXING_ANALYZER_ATTRIBUTE = "analyzer";
 
     /**
-     * Optional attribute: MergeFactor number (default 10): improve the indexing speed for large
-     * indexing (see Lucene docs)
+     * Optional attribute: MergeFactor number (default 10): improve the indexing
+     * speed for large indexing (see Lucene docs)
      */
     public static final String LUCENE_INDEXING_MERGE_FACTOR_ATTRIBUTE = "mergefactor";
 
@@ -363,10 +372,9 @@
                 if (LUCENE_FIELD_ELEMENT.equals(localName)) {
                     final String namespace = atts.getValue(NAMESPACE_ATTRIBUTE);
                     final String name = atts.getValue(LUCENE_FIELD_NAME_ATTRIBUTE);
-
+                    
                     // set the field name
-                    this.fieldname = namespace == null ? name : getMetaDataFieldName(namespace,
-                            name);
+                    this.fieldname = namespace == null ? name : getMetaDataFieldName(namespace, name);
                     if (this.fieldname == null || this.fieldname.equals("")) {
                         handleError("<lucene:field> element must contain name attribute");
                     }
@@ -396,8 +404,7 @@
     protected String getMetaDataFieldName(String namespace, String elementName) {
         if (this.registry == null) {
             try {
-                this.registry = (MetaDataFieldRegistry) this.manager
-                        .lookup(MetaDataFieldRegistry.ROLE);
+                this.registry = (MetaDataFieldRegistry) this.manager.lookup(MetaDataFieldRegistry.ROLE);
             } catch (ServiceException e) {
                 throw new RuntimeException(e);
             }
@@ -485,7 +492,7 @@
                     try {
                         Field f = index.createField(fieldname, fieldvalue.toString());
                         f.setBoost(fieldboost);
-
+                        
                         // add field to the lucene document
                         bodyDocument.add(f);
                         processing = IN_DOCUMENT_PROCESS;
@@ -498,8 +505,7 @@
                 break;
 
             default:
-                handleError("Inappropriate element '" + localName + "' in state '" + processing
-                        + "'!");
+                handleError("Inappropriate element '" + localName + "' in state '" + processing  + "'!");
             }
         } else {
             super.endElement(namespaceURI, localName, qName);
@@ -508,8 +514,7 @@
 
     protected void handleUnexpectedClosingElement(String localName, String expectedLocalName)
             throws SAXException {
-        handleError("</lucene:" + expectedLocalName + "> was expected instead of </lucene:"
-                + localName + ">!");
+        handleError("</lucene:" + expectedLocalName + "> was expected instead of </lucene:" + localName + ">!");
     }
 
     protected boolean canIndex() {
@@ -544,10 +549,10 @@
         setIndexer(indexId);
 
         if (canIndex()) {
-
+            
             String analyzerId = atts.getValue(LUCENE_URI, LUCENE_INDEXING_ANALYZER_ATTRIBUTE);
             setAnalyzer(analyzerId);
-
+            
             // set clear mode
             boolean new_index = (clear != null && clear.toLowerCase().equals("true")) ? true
                     : false;
@@ -580,7 +585,8 @@
             index = indexManager.getIndex(indexId);
             if (index == null) {
                 handleError("index [" + indexId + "] no found in the index definition");
-            } else {
+            }
+            else {
                 indexer = index.getIndexer();
                 if (indexer == null) {
                     handleError("Index [" + indexId + "] did return a null indexer.");
@@ -615,12 +621,13 @@
                 handleError(ex1);
             } catch (ConfigurationException ex2) {
                 handleError("error setting analyzer for index [" + this.index.getID() + "]", ex2);
-            } finally {
+            }
+            finally {
                 manager.release(analyzerManager);
             }
         }
     }
-
+    
     void handleError(String message, Exception ex) throws SAXException {
         handleError(message + ": " + getExceptionMessage(ex));
     }
@@ -649,9 +656,11 @@
         closeIndexer();
 
         try {
+            Session session = RepositoryUtil.getSession(this.manager, this.request);
             User user = getErrorMessageRecipient();
             Address sender = new UserAddress(user);
-            User recipient = getUserManager().getUser(this.notificationRecipient);
+            UserManager userManager = (UserManager) user.getItemManager();
+            User recipient = userManager.getUser(this.notificationRecipient);
             Address[] recipients = { new UserAddress(recipient) };
 
             Text subject = new Text("indexing-failed-subject", true);
@@ -671,54 +680,48 @@
         }
 
         /*
-         * if (ex == null) { // this.getLogger().error(msg); throw new SAXException(msg); } else {
-         * // this.getLogger().error(msg, ex); throw new SAXException(msg, ex); }
+         * if (ex == null) { // this.getLogger().error(msg); throw new
+         * SAXException(msg); } else { // this.getLogger().error(msg, ex); throw
+         * new SAXException(msg, ex); }
          */
     }
+    
+    protected User getErrorMessageRecipient() {
 
-    private UserManager userManager;
-
-    protected UserManager getUserManager() {
-        if (this.userManager == null) {
-            AccessController accessController = null;
-            ServiceSelector selector = null;
-            AccessControllerResolver resolver = null;
-            try {
-                selector = (ServiceSelector) this.manager.lookup(AccessControllerResolver.ROLE
-                        + "Selector");
-                resolver = (AccessControllerResolver) selector
-                        .select(AccessControllerResolver.DEFAULT_RESOLVER);
-
-                String url = ServletHelper.getWebappURI(this.request);
-                accessController = resolver.resolveAccessController(url);
-                this.userManager = accessController.getAccreditableManager().getUserManager();
-            } catch (Exception e) {
-                throw new RuntimeException("Could not obtain user manager: ", e);
-            } finally {
-                if (selector != null) {
-                    if (resolver != null) {
-                        if (accessController != null) {
-                            resolver.release(accessController);
-                        }
-                        selector.release(resolver);
+        ServiceSelector selector = null;
+        AccessControllerResolver acResolver = null;
+        AccessController accessController = null;
+        try {
+            selector = (ServiceSelector) this.manager.lookup(AccessControllerResolver.ROLE
+                    + "Selector");
+            acResolver = (AccessControllerResolver) selector
+                    .select(AccessControllerResolver.DEFAULT_RESOLVER);
+            String webappUrl = ServletHelper.getWebappURI(this.request);
+            accessController = acResolver.resolveAccessController(webappUrl);
+
+            UserManager userManager = accessController.getAccreditableManager().getUserManager();
+            Identity identity = (Identity) this.request.getSession().getAttribute(Identity.class.getName());
+            String userId = identity.getUserReference().getId();
+            User user = userManager.getUser(userId);
+            if (user == null) {
+                throw new RuntimeException("The user '" + userId + "' doesn't exist.");
+            }
+            return user;
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        } finally {
+            if (selector != null) {
+                if (acResolver != null) {
+                    if (accessController != null) {
+                        acResolver.release(accessController);
                     }
-                    this.manager.release(selector);
+                    selector.release(acResolver);
                 }
+                this.manager.release(selector);
             }
         }
-        return this.userManager;
     }
 
-    protected User getErrorMessageRecipient() {
-        Identity identity = (Identity) this.request.getSession().getAttribute(
-                Identity.class.getName());
-        String userId = identity.getUserReference().getId();
-        User user = getUserManager().getUser(userId);
-        if (user == null) {
-            throw new RuntimeException("The user '" + userId + "' doesn't exist.");
-        }
-        return user;
-    }
 
     /**
      * Close the indexer

Modified: lenya/sandbox/access_control_redesign/src/modules/notification/java/src/org/apache/lenya/inbox/xml/XmlSourceInbox.java
URL: http://svn.apache.org/viewvc/lenya/sandbox/access_control_redesign/src/modules/notification/java/src/org/apache/lenya/inbox/xml/XmlSourceInbox.java?rev=736356&r1=736355&r2=736356&view=diff
==============================================================================
--- lenya/sandbox/access_control_redesign/src/modules/notification/java/src/org/apache/lenya/inbox/xml/XmlSourceInbox.java (original)
+++ lenya/sandbox/access_control_redesign/src/modules/notification/java/src/org/apache/lenya/inbox/xml/XmlSourceInbox.java Wed Jan 21 10:04:03 2009
@@ -23,17 +23,11 @@
 import javax.xml.parsers.ParserConfigurationException;
 
 import org.apache.avalon.framework.service.ServiceManager;
-import org.apache.avalon.framework.service.ServiceSelector;
 import org.apache.axis.components.uuid.UUIDGen;
 import org.apache.axis.components.uuid.UUIDGenFactory;
-import org.apache.cocoon.environment.Request;
 import org.apache.lenya.ac.AccessControlException;
-import org.apache.lenya.ac.AccessController;
-import org.apache.lenya.ac.AccessControllerResolver;
-import org.apache.lenya.ac.AccreditableManager;
 import org.apache.lenya.ac.Group;
 import org.apache.lenya.ac.User;
-import org.apache.lenya.cms.cocoon.components.context.ContextUtility;
 import org.apache.lenya.cms.cocoon.source.SourceUtil;
 import org.apache.lenya.inbox.Inbox;
 import org.apache.lenya.inbox.InboxMessage;
@@ -44,7 +38,6 @@
 import org.apache.lenya.notification.Text;
 import org.apache.lenya.notification.UserAddress;
 import org.apache.lenya.util.Assert;
-import org.apache.lenya.util.ServletHelper;
 import org.apache.lenya.xml.DocumentHelper;
 import org.apache.lenya.xml.NamespaceHelper;
 import org.w3c.dom.Document;
@@ -57,7 +50,6 @@
 
     private ServiceManager manager;
     private User user;
-    private AccreditableManager accrMgr;
 
     /**
      * @param manager The service manager.
@@ -68,45 +60,6 @@
         this.user = user;
     }
 
-    protected AccreditableManager getAccreditableManager() {
-        if (this.accrMgr == null) {
-            AccessController accessController = null;
-            ServiceSelector selector = null;
-            AccessControllerResolver resolver = null;
-            ContextUtility context = null;
-
-            try {
-                selector = (ServiceSelector) this.manager.lookup(AccessControllerResolver.ROLE
-                        + "Selector");
-                resolver = (AccessControllerResolver) selector
-                        .select(AccessControllerResolver.DEFAULT_RESOLVER);
-                context = (ContextUtility) this.manager.lookup(ContextUtility.ROLE);
-                Request request = context.getRequest();
-                String url = ServletHelper.getWebappURI(request);
-                accessController = resolver.resolveAccessController(url);
-                this.accrMgr = accessController.getAccreditableManager();
-
-            } catch (Exception e) {
-                throw new RuntimeException("Could not obtain accreditable manager: ", e);
-            } finally {
-                if (selector != null) {
-                    if (resolver != null) {
-                        if (accessController != null) {
-                            resolver.release(accessController);
-                        }
-                        selector.release(resolver);
-                    }
-                    this.manager.release(selector);
-                }
-                if (context != null) {
-                    this.manager.release(context);
-                }
-            }
-
-        }
-        return this.accrMgr;
-    }
-
     public synchronized InboxMessage add(Message message) {
         InboxMessage msg = new XmlSourceInboxMessage(this, generateId(), message, false);
         messages().add(msg);
@@ -127,13 +80,13 @@
     }
 
     public InboxMessage[] getMessages() {
-        List messages = messages();
+        List<InboxMessage> messages = messages();
         return (InboxMessage[]) messages.toArray(new InboxMessage[messages.size()]);
     }
 
-    private List messages;
+    private List<InboxMessage> messages;
 
-    protected List messages() {
+    protected List<InboxMessage> messages() {
         if (this.messages == null) {
             load();
         }
@@ -143,7 +96,7 @@
     private long lastModified = -1;
 
     protected synchronized void load() {
-        this.messages = new ArrayList();
+        this.messages = new ArrayList<InboxMessage>();
         try {
 
             if (SourceUtil.exists(getSourceUri(), this.manager)) {
@@ -157,14 +110,15 @@
 
                 Element[] messageElements = helper.getChildren(xml.getDocumentElement(), "message");
                 for (int i = 0; i < messageElements.length; i++) {
-
+                    
                     String id;
                     if (messageElements[i].hasAttribute("id")) {
                         id = messageElements[i].getAttribute("id");
-                    } else {
+                    }
+                    else {
                         id = generateId();
                     }
-
+                    
                     String senderId = messageElements[i].getAttribute("sender");
                     Address sender = new UserAddress(getUser(senderId));
 
@@ -174,7 +128,8 @@
                     Element[] userElements = helper.getChildren(recipientElement, "user");
                     Element[] groupElements = helper.getChildren(recipientElement, "group");
 
-                    Address[] recipients = new Address[userElements.length + groupElements.length];
+                    Address[] recipients = new Address[userElements.length
+                            + groupElements.length];
 
                     for (int u = 0; u < userElements.length; u++) {
                         String userId = userElements[u].getAttribute("id");
@@ -204,15 +159,15 @@
                         subjectParams[p] = DocumentHelper
                                 .getSimpleElementText(subjectParamElements[p]);
                     }
-
+                    
                     String readString = "false";
                     if (messageElements[i].hasAttribute("read")) {
                         readString = messageElements[i].getAttribute("read");
                     }
                     boolean read = Boolean.valueOf(readString).booleanValue();
 
-                    Message message = new Message(new Text(subject, subjectParams), new Text(body,
-                            bodyParams), sender, recipients);
+                    Message message = new Message(new Text(subject, subjectParams), new Text(body, bodyParams), sender,
+                            recipients);
                     InboxMessage msg = new XmlSourceInboxMessage(this, id, message, read);
                     this.messages.add(msg);
                 }
@@ -224,18 +179,18 @@
     }
 
     protected User getUser(String id) throws AccessControlException {
-        return getAccreditableManager().getUserManager().getUser(id);
+        return this.user.getAccreditableManager().getUserManager().getUser(id);
     }
 
     protected Group getGroup(String id) throws AccessControlException {
-        return getAccreditableManager().getGroupManager().getGroup(id);
+        return this.user.getAccreditableManager().getGroupManager().getGroup(id);
     }
 
     private String sourceUri;
 
     protected String getSourceUri() {
         if (this.sourceUri == null) {
-            String configUri = getAccreditableManager().getConfigurationCollectionUri();
+            String configUri = this.user.getAccreditableManager().getConfigurationCollectionUri();
             if (configUri.endsWith("/")) {
                 configUri = configUri.substring(0, configUri.length() - 1);
             }
@@ -264,11 +219,9 @@
     protected NamespaceHelper buildXml() throws ParserConfigurationException {
         NamespaceHelper helper = new NamespaceHelper(Notifier.NAMESPACE, "", "inbox");
 
-        InboxMessage[] messages = getMessages();
-        for (int i = 0; i < messages.length; i++) {
-
-            Message message = messages[i].getMessage();
-
+        for (InboxMessage inboxMessage : getMessages()) {
+            Message message = inboxMessage.getMessage();
+            
             Element messageElement = helper.createElement("message");
             helper.getDocument().getDocumentElement().appendChild(messageElement);
             Address sender = message.getSenderAddress();
@@ -277,27 +230,23 @@
             Element recipientsElement = helper.createElement("recipients");
             messageElement.appendChild(recipientsElement);
 
-            Address[] recipients = message.getRecipientAddresses();
-            for (int r = 0; r < recipients.length; r++) {
-                if (recipients[r] instanceof User) {
-                    Element userElement = helper.createElement("user");
-                    userElement.setAttribute("id", ((User) recipients[r]).getId());
-                    recipientsElement.appendChild(userElement);
-                } else if (recipients[r] instanceof Group) {
-                    Element groupElement = helper.createElement("group");
-                    groupElement.setAttribute("id", ((Group) recipients[r]).getId());
-                    recipientsElement.appendChild(groupElement);
+            for (Address recipient : message.getRecipientAddresses()) {
+                Element element = null;
+                if (recipient instanceof UserAddress) {
+                    element = helper.createElement("user");
+                } else if (recipient instanceof Group) {
+                    element = helper.createElement("group");
                 }
+                element.setAttribute("id", recipient.getId());
+                recipientsElement.appendChild(element);
             }
 
             Element subjectElement = helper.createElement("subject");
             messageElement.appendChild(subjectElement);
-            Element subjectTextElement = helper.createElement("text", message.getSubjectText()
-                    .getText());
+            Element subjectTextElement = helper.createElement("text", message.getSubjectText().getText());
             subjectElement.appendChild(subjectTextElement);
-            Text[] subjectParams = message.getSubjectText().getParameters();
-            for (int p = 0; p < subjectParams.length; p++) {
-                Element paramElement = helper.createElement("param", subjectParams[p].getText());
+            for (Text text : message.getSubjectText().getParameters()) {
+                Element paramElement = helper.createElement("param", text.getText());
                 subjectElement.appendChild(paramElement);
             }
 
@@ -305,14 +254,13 @@
             messageElement.appendChild(bodyElement);
             Element bodyTextElement = helper.createElement("text", message.getBodyText().getText());
             bodyElement.appendChild(bodyTextElement);
-            Text[] bodyParams = message.getBodyText().getParameters();
-            for (int p = 0; p < bodyParams.length; p++) {
-                Element paramElement = helper.createElement("param", bodyParams[p].getText());
+            for (Text text : message.getBodyText().getParameters()) {
+                Element paramElement = helper.createElement("param", text.getText());
                 bodyElement.appendChild(paramElement);
             }
-
-            messageElement.setAttribute("read", Boolean.toString(messages[i].isMarkedAsRead()));
-            messageElement.setAttribute("id", messages[i].getId());
+            
+            messageElement.setAttribute("read", Boolean.toString(inboxMessage.isMarkedAsRead()));
+            messageElement.setAttribute("id", inboxMessage.getId());
         }
         return helper;
     }

Modified: lenya/sandbox/access_control_redesign/src/modules/notification/java/src/org/apache/lenya/notification/AbstractNotifier.java
URL: http://svn.apache.org/viewvc/lenya/sandbox/access_control_redesign/src/modules/notification/java/src/org/apache/lenya/notification/AbstractNotifier.java?rev=736356&r1=736355&r2=736356&view=diff
==============================================================================
--- lenya/sandbox/access_control_redesign/src/modules/notification/java/src/org/apache/lenya/notification/AbstractNotifier.java (original)
+++ lenya/sandbox/access_control_redesign/src/modules/notification/java/src/org/apache/lenya/notification/AbstractNotifier.java Wed Jan 21 10:04:03 2009
@@ -17,9 +17,7 @@
  */
 package org.apache.lenya.notification;
 
-import java.util.Arrays;
 import java.util.HashSet;
-import java.util.Iterator;
 import java.util.Set;
 
 import org.apache.avalon.framework.context.Context;
@@ -35,8 +33,6 @@
 import org.apache.cocoon.transformation.I18nTransformer;
 import org.apache.excalibur.source.Source;
 import org.apache.excalibur.source.SourceResolver;
-import org.apache.lenya.ac.Group;
-import org.apache.lenya.ac.Identifiable;
 import org.apache.lenya.ac.User;
 import org.apache.lenya.xml.DocumentHelper;
 import org.apache.lenya.xml.NamespaceHelper;
@@ -50,29 +46,14 @@
         Contextualizable {
 
     public void notify(Message message) throws NotificationException {
-
-        Set noDuplicates = new HashSet();
-
-        Address[] recipients = message.getRecipientAddresses();
-
-        for (int i = 0; i < recipients.length; i++) {
-            if (recipients[i] instanceof Group) {
-                Group group = (Group) recipients[i];
-                noDuplicates.addAll(Arrays.asList(group.getMembers()));
-            } else {
-                noDuplicates.add(recipients[i]);
-            }
+        Set<User> users = new HashSet<User>();
+        for (Address address : message.getRecipientAddresses()) {
+            users.addAll(address.getRecipients());
         }
-
-        for (Iterator i = noDuplicates.iterator(); i.hasNext();) {
-            Identifiable identifiable = (Identifiable) i.next();
-            if (identifiable instanceof User) {
-                User user = (User) identifiable;
-                Message translatedMessage = translateMessage(user.getDefaultMenuLocale(), message);
-                notify(user, translatedMessage);
-            }
+        for (User user: users) {
+            Message translatedMessage = translateMessage(user.getDefaultMenuLocale(), message);
+            notify(user, translatedMessage);
         }
-
     }
 
     protected abstract void notify(User user, Message translatedMessage)



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@lenya.apache.org
For additional commands, e-mail: commits-help@lenya.apache.org