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 2007/01/25 14:33:40 UTC

svn commit: r499783 - in /lenya/trunk/src: impl/java/org/apache/lenya/ java/org/apache/lenya/ac/ modules-core/ac/config/cocoon-xconf/ modules-core/ac/java/src/org/apache/lenya/ac/file/ modules-core/ac/java/src/org/apache/lenya/ac/impl/

Author: andreas
Date: Thu Jan 25 05:33:38 2007
New Revision: 499783

URL: http://svn.apache.org/viewvc?view=rev&rev=499783
Log:
Introduced AccreditableManagerFactory to clean up the AM setup mechanism

Added:
    lenya/trunk/src/java/org/apache/lenya/ac/AccreditableManagerFactory.java
    lenya/trunk/src/modules-core/ac/config/cocoon-xconf/accreditable-manager-factory.xconf
    lenya/trunk/src/modules-core/ac/java/src/org/apache/lenya/ac/file/FileAccreditableManagerFactory.java
Removed:
    lenya/trunk/src/modules-core/ac/config/cocoon-xconf/accreditable-managers.xconf
Modified:
    lenya/trunk/src/impl/java/org/apache/lenya/lenya.roles
    lenya/trunk/src/modules-core/ac/java/src/org/apache/lenya/ac/file/FileAccreditableManager.java
    lenya/trunk/src/modules-core/ac/java/src/org/apache/lenya/ac/impl/AbstractAccreditableManager.java
    lenya/trunk/src/modules-core/ac/java/src/org/apache/lenya/ac/impl/AbstractGroupable.java
    lenya/trunk/src/modules-core/ac/java/src/org/apache/lenya/ac/impl/DefaultAccessController.java

Modified: lenya/trunk/src/impl/java/org/apache/lenya/lenya.roles
URL: http://svn.apache.org/viewvc/lenya/trunk/src/impl/java/org/apache/lenya/lenya.roles?view=diff&rev=499783&r1=499782&r2=499783
==============================================================================
--- lenya/trunk/src/impl/java/org/apache/lenya/lenya.roles (original)
+++ lenya/trunk/src/impl/java/org/apache/lenya/lenya.roles Thu Jan 25 05:33:38 2007
@@ -58,12 +58,6 @@
 
 <role-list>
 
-  <role name="org.apache.lenya.ac.AccreditableManagerSelector"
-        shorthand="accreditable-managers"
-        default-class="org.apache.cocoon.components.ExtendedComponentSelector">
-    <hint shorthand="file" class="org.apache.lenya.ac.file.FileAccreditableManager"/>
-  </role>
-    
   <role name="org.apache.lenya.ac.AuthorizerSelector"
         shorthand="authorizers"
         default-class="org.apache.cocoon.components.ExtendedComponentSelector">

Added: lenya/trunk/src/java/org/apache/lenya/ac/AccreditableManagerFactory.java
URL: http://svn.apache.org/viewvc/lenya/trunk/src/java/org/apache/lenya/ac/AccreditableManagerFactory.java?view=auto&rev=499783
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/ac/AccreditableManagerFactory.java (added)
+++ lenya/trunk/src/java/org/apache/lenya/ac/AccreditableManagerFactory.java Thu Jan 25 05:33:38 2007
@@ -0,0 +1,40 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.
+ *  The ASF licenses this file to You under the Apache License, Version 2.0
+ *  (the "License"); you may not use this file except in compliance with
+ *  the License.  You may obtain a copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ *  
+ */
+package org.apache.lenya.ac;
+
+import org.apache.avalon.framework.configuration.Configuration;
+import org.apache.avalon.framework.configuration.ConfigurationException;
+
+/**
+ * Factory to produce accreditable managers.
+ */
+public interface AccreditableManagerFactory {
+    
+    /**
+     * The Avalon service role.
+     */
+    String ROLE = AccreditableManagerFactory.class.getName();
+    
+    /**
+     * @param config The configuration.
+     * @return An accreditable manager for a certain configuration.
+     * @throws ConfigurationException if the configuration failed.
+     */
+    AccreditableManager getAccreditableManager(Configuration config) throws ConfigurationException;
+
+}

Added: lenya/trunk/src/modules-core/ac/config/cocoon-xconf/accreditable-manager-factory.xconf
URL: http://svn.apache.org/viewvc/lenya/trunk/src/modules-core/ac/config/cocoon-xconf/accreditable-manager-factory.xconf?view=auto&rev=499783
==============================================================================
--- lenya/trunk/src/modules-core/ac/config/cocoon-xconf/accreditable-manager-factory.xconf (added)
+++ lenya/trunk/src/modules-core/ac/config/cocoon-xconf/accreditable-manager-factory.xconf Thu Jan 25 05:33:38 2007
@@ -0,0 +1,28 @@
+<?xml version="1.0"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+
+<!-- $Id: usecases-workflow-deactivate.xconf 348547 2005-11-23 20:13:01Z chestnut $ -->
+<!--
+    This file defines the publication specific use-cases
+-->
+
+  <xconf xpath="/cocoon" unless="/cocoon/component[@role = 'org.apache.lenya.ac.AccreditableManagerFactory']">
+    <component logger="lenya.ac.accreditablemanager"
+      role="org.apache.lenya.ac.AccreditableManagerFactory"
+      class="org.apache.lenya.ac.file.FileAccreditableManagerFactory"/>
+  </xconf>

Modified: lenya/trunk/src/modules-core/ac/java/src/org/apache/lenya/ac/file/FileAccreditableManager.java
URL: http://svn.apache.org/viewvc/lenya/trunk/src/modules-core/ac/java/src/org/apache/lenya/ac/file/FileAccreditableManager.java?view=diff&rev=499783&r1=499782&r2=499783
==============================================================================
--- lenya/trunk/src/modules-core/ac/java/src/org/apache/lenya/ac/file/FileAccreditableManager.java (original)
+++ lenya/trunk/src/modules-core/ac/java/src/org/apache/lenya/ac/file/FileAccreditableManager.java Thu Jan 25 05:33:38 2007
@@ -27,15 +27,8 @@
 import java.util.HashSet;
 import java.util.Set;
 
-import org.apache.avalon.framework.configuration.Configuration;
-import org.apache.avalon.framework.configuration.ConfigurationException;
-import org.apache.avalon.framework.configuration.Configurable;
-import org.apache.avalon.framework.parameters.ParameterException;
-import org.apache.avalon.framework.parameters.Parameterizable;
-import org.apache.avalon.framework.parameters.Parameters;
-import org.apache.avalon.framework.service.ServiceException;
+import org.apache.avalon.framework.logger.Logger;
 import org.apache.avalon.framework.service.ServiceManager;
-import org.apache.avalon.framework.service.Serviceable;
 import org.apache.cocoon.util.NetUtils;
 import org.apache.excalibur.source.Source;
 import org.apache.excalibur.source.SourceResolver;
@@ -51,27 +44,27 @@
 /**
  * File-based accreditable manager.
  */
-public class FileAccreditableManager extends AbstractAccreditableManager implements Serviceable,
-        Configurable, Parameterizable {
+public class FileAccreditableManager extends AbstractAccreditableManager {
 
-    /**
-     * Creates a new FileAccreditableManager. If you use this constructor, you have to set the
-     * configuration directory either by calling {@link #setConfigurationDirectory(File)} or by
-     * calling {@link #parameterize(Parameters)}.
-     */
-    public FileAccreditableManager() {
-	    // do nothing
-    }
+    private ServiceManager manager;
 
     /**
      * Creates a new FileAccessController based on a configuration directory.
-     * @param _configurationDirectory The configuration directory.
+     * @param manager The service manager.
+     * @param logger The logger.
+     * @param configurationUri The configuration directory URI.
      * @param _userTypes The supported user types.
      */
-    public FileAccreditableManager(File _configurationDirectory, UserType[] _userTypes) {
-        Assert.notNull("configuration directory", _configurationDirectory);
-        Assert.isTrue("configuration directory exists", _configurationDirectory.isDirectory());
-        this.configurationDirectory = _configurationDirectory;
+    public FileAccreditableManager(ServiceManager manager, Logger logger,
+            String configurationUri, UserType[] _userTypes) {
+        super(logger);
+
+        Assert.notNull("service manager", manager);
+        this.manager = manager;
+
+        Assert.notNull("configuration directory", configurationUri);
+        this.configurationDirectoryUri = configurationUri;
+
         this.userTypes = new HashSet(Arrays.asList(_userTypes));
     }
 
@@ -98,7 +91,7 @@
 
         if (this.configurationDirectory == null) {
 
-            if (this.configurationDirectoryPath == null) {
+            if (this.configurationDirectoryUri == null) {
                 throw new AccessControlException("Configuration directory not set!");
             }
 
@@ -108,10 +101,10 @@
             try {
 
                 getLogger().debug(
-                        "Configuration directory Path: [" + this.configurationDirectoryPath + "]");
+                        "Configuration directory Path: [" + this.configurationDirectoryUri + "]");
 
                 resolver = (SourceResolver) getManager().lookup(SourceResolver.ROLE);
-                source = resolver.resolveURI(this.configurationDirectoryPath);
+                source = resolver.resolveURI(this.configurationDirectoryUri);
 
                 getLogger().debug("Configuration directory URI: " + source.getURI());
                 directory = new File(new URI(NetUtils.encodePath(source.getURI())));
@@ -125,65 +118,18 @@
                     getManager().release(resolver);
                 }
             }
-            setConfigurationDirectory(directory);
+            this.configurationDirectory = directory;
         }
 
         return this.configurationDirectory;
     }
 
-    protected static final String DIRECTORY = "directory";
-
-    /**
-     * @see org.apache.avalon.framework.parameters.Parameterizable#parameterize(org.apache.avalon.framework.parameters.Parameters)
-     */
-    public void parameterize(Parameters parameters) throws ParameterException {
-        if (parameters.isParameter(DIRECTORY)) {
-            this.configurationDirectoryPath = parameters.getParameter(DIRECTORY);
-            getLogger().debug("Configuration directory: [" + this.configurationDirectoryPath + "]");
-        }
-    }
-
-    protected static final String A_M_TAG = "accreditable-manager";
-    protected static final String U_M_CHILD_TAG = "user-manager";
-    protected static final String U_T_CHILD_TAG = "user-type";
-    protected static final String U_T_CLASS_ATTRIBUTE = "class";
-    protected static final String U_T_CREATE_ATTRIBUTE = "create-use-case";
     // provided for backward compatibility
     protected static final String DEFAULT_USER_TYPE_CLASS = FileUser.class.getName();
     protected static final String DEFAULT_USER_TYPE_KEY = "Local User";
     protected static final String DEFAULT_USER_CREATE_USE_CASE = "userAddUser";
 
     /**
-     * @see org.apache.avalon.framework.configuration.Configurable#configure(org.apache.avalon.framework.configuration.Configuration)
-     *      added to read new user-manager block within accreditable-manager
-     */
-    public void configure(Configuration configuration) throws ConfigurationException {
-        if (A_M_TAG.equals(configuration.getName())) {
-            this.userTypes = new HashSet();
-            Configuration umConf = configuration.getChild(U_M_CHILD_TAG, false);
-            if (umConf != null) {
-                Configuration[] typeConfs = umConf.getChildren();
-                for (int i = 0; i < typeConfs.length; i++) {
-                    this.userTypes.add(new UserType(typeConfs[i].getValue(), typeConfs[i]
-                            .getAttribute(U_T_CLASS_ATTRIBUTE), typeConfs[i]
-                            .getAttribute(U_T_CREATE_ATTRIBUTE)));
-                }
-            } else {
-                getLogger().debug(
-                        "FileAccreditableManager: using default configuration for user types");
-                // no "user-manager" block in access control: provide
-                // a default for backward compatibility
-                this.userTypes.add(getDefaultUserType());
-            }
-            // maybe TODO (or is it overkill?) : validate the parametrized user
-            // types, for example, check if the classes are in the classpath ?
-        } else {
-            // TODO: In most cases it doesn't seem to find this element ...
-            //throw new ConfigurationException("No such element: " + A_M_TAG);
-        }
-    }
-
-    /**
      * Returns the default user type.
      * @return A user type.
      */
@@ -192,31 +138,7 @@
                 DEFAULT_USER_CREATE_USE_CASE);
     }
 
-    private String configurationDirectoryPath;
-
-    /**
-     * Sets the configuration directory.
-     * @param file The configuration directory.
-     * @throws AccessControlException if an error occurs
-     */
-    public void setConfigurationDirectory(File file) throws AccessControlException {
-        if (file == null || !file.isDirectory()) {
-            throw new AccessControlException("Configuration directory [" + file
-                    + "] does not exist!");
-        }
-        this.configurationDirectory = file;
-    }
-
-    private ServiceManager manager;
-
-    /**
-     * Set the global component manager.
-     * @param _manager The global component manager
-     * @throws ServiceException when something went wrong.
-     */
-    public void service(ServiceManager _manager) throws ServiceException {
-        this.manager = _manager;
-    }
+    private String configurationDirectoryUri;
 
     /**
      * Returns the service manager.
@@ -230,7 +152,8 @@
      * @see org.apache.lenya.ac.impl.AbstractAccreditableManager#initializeGroupManager()
      */
     protected GroupManager initializeGroupManager() throws AccessControlException {
-        FileGroupManager _manager = FileGroupManager.instance(this, getConfigurationDirectory(), getLogger());
+        FileGroupManager _manager = FileGroupManager.instance(this, getConfigurationDirectory(),
+                getLogger());
         return _manager;
     }
 
@@ -238,7 +161,8 @@
      * @see org.apache.lenya.ac.impl.AbstractAccreditableManager#initializeIPRangeManager()
      */
     protected IPRangeManager initializeIPRangeManager() throws AccessControlException {
-        FileIPRangeManager _manager = FileIPRangeManager.instance(this, getConfigurationDirectory(), getLogger());
+        FileIPRangeManager _manager = FileIPRangeManager.instance(this,
+                getConfigurationDirectory(), getLogger());
         return _manager;
     }
 
@@ -246,7 +170,8 @@
      * @see org.apache.lenya.ac.impl.AbstractAccreditableManager#initializeRoleManager()
      */
     protected RoleManager initializeRoleManager() throws AccessControlException {
-        FileRoleManager _manager = FileRoleManager.instance(this, getConfigurationDirectory(), getLogger());
+        FileRoleManager _manager = FileRoleManager.instance(this, getConfigurationDirectory(),
+                getLogger());
         return _manager;
     }
 
@@ -269,6 +194,7 @@
 
     public String getId() {
         try {
+            Assert.notNull("configuration directory", this.configurationDirectory);
             return this.configurationDirectory.getCanonicalPath();
         } catch (IOException e) {
             throw new RuntimeException(e);

Added: lenya/trunk/src/modules-core/ac/java/src/org/apache/lenya/ac/file/FileAccreditableManagerFactory.java
URL: http://svn.apache.org/viewvc/lenya/trunk/src/modules-core/ac/java/src/org/apache/lenya/ac/file/FileAccreditableManagerFactory.java?view=auto&rev=499783
==============================================================================
--- lenya/trunk/src/modules-core/ac/java/src/org/apache/lenya/ac/file/FileAccreditableManagerFactory.java (added)
+++ lenya/trunk/src/modules-core/ac/java/src/org/apache/lenya/ac/file/FileAccreditableManagerFactory.java Thu Jan 25 05:33:38 2007
@@ -0,0 +1,102 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.
+ *  The ASF licenses this file to You under the Apache License, Version 2.0
+ *  (the "License"); you may not use this file except in compliance with
+ *  the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ *
+ */
+package org.apache.lenya.ac.file;
+
+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.avalon.framework.service.ServiceException;
+import org.apache.avalon.framework.service.ServiceManager;
+import org.apache.avalon.framework.service.Serviceable;
+import org.apache.avalon.framework.thread.ThreadSafe;
+import org.apache.lenya.ac.AccreditableManager;
+import org.apache.lenya.ac.AccreditableManagerFactory;
+import org.apache.lenya.ac.UserType;
+
+/**
+ * Factory for file-based accreditable managers.
+ */
+public class FileAccreditableManagerFactory extends AbstractLogEnabled implements
+        AccreditableManagerFactory, ThreadSafe, Serviceable {
+
+    private Map id2manager = new HashMap();
+
+    protected static final String U_M_CHILD_TAG = "user-manager";
+    protected static final String U_T_CHILD_TAG = "user-type";
+    protected static final String U_T_CLASS_ATTRIBUTE = "class";
+    protected static final String U_T_CREATE_ATTRIBUTE = "create-use-case";
+
+    public AccreditableManager getAccreditableManager(Configuration config)
+            throws ConfigurationException {
+
+        try {
+            String configUri = null;
+            Configuration[] paramConfigs = config.getChildren("parameter");
+            for (int i = 0; i < paramConfigs.length; i++) {
+                if (paramConfigs[i].getAttribute("name").equals("directory")) {
+                    configUri = paramConfigs[i].getAttribute("value");
+                }
+            }
+
+            if (configUri == null) {
+                throw new RuntimeException("No <parameter name=\"directory\"> element found!");
+            }
+
+            if (this.id2manager.containsKey(configUri)) {
+                return (AccreditableManager) this.id2manager.get(configUri);
+            } else {
+                Set userTypes = new HashSet();
+                Configuration umConf = config.getChild(U_M_CHILD_TAG, false);
+                if (umConf != null) {
+                    Configuration[] typeConfs = umConf.getChildren();
+                    for (int i = 0; i < typeConfs.length; i++) {
+                        userTypes.add(new UserType(typeConfs[i].getValue(), typeConfs[i]
+                                .getAttribute(U_T_CLASS_ATTRIBUTE), typeConfs[i]
+                                .getAttribute(U_T_CREATE_ATTRIBUTE)));
+                    }
+                } else {
+                    getLogger().debug(
+                            "FileAccreditableManager: using default configuration for user types");
+                    // no "user-manager" block in access control: provide
+                    // a default for backward compatibility
+                    userTypes.add(FileAccreditableManager.getDefaultUserType());
+                }
+                UserType[] types = (UserType[]) userTypes.toArray(new UserType[userTypes.size()]);
+                AccreditableManager mgr = new FileAccreditableManager(this.manager, getLogger(),
+                        configUri, types);
+                this.id2manager.put(configUri, mgr);
+                return mgr;
+            }
+
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    protected ServiceManager manager;
+
+    public void service(ServiceManager manager) throws ServiceException {
+        this.manager = manager;
+    }
+
+}

Modified: lenya/trunk/src/modules-core/ac/java/src/org/apache/lenya/ac/impl/AbstractAccreditableManager.java
URL: http://svn.apache.org/viewvc/lenya/trunk/src/modules-core/ac/java/src/org/apache/lenya/ac/impl/AbstractAccreditableManager.java?view=diff&rev=499783&r1=499782&r2=499783
==============================================================================
--- lenya/trunk/src/modules-core/ac/java/src/org/apache/lenya/ac/impl/AbstractAccreditableManager.java (original)
+++ lenya/trunk/src/modules-core/ac/java/src/org/apache/lenya/ac/impl/AbstractAccreditableManager.java Thu Jan 25 05:33:38 2007
@@ -24,8 +24,9 @@
 import java.util.Iterator;
 import java.util.List;
 
-import org.apache.avalon.framework.activity.Disposable;
+import org.apache.avalon.framework.container.ContainerUtil;
 import org.apache.avalon.framework.logger.AbstractLogEnabled;
+import org.apache.avalon.framework.logger.Logger;
 import org.apache.lenya.ac.AccessControlException;
 import org.apache.lenya.ac.AccreditableManager;
 import org.apache.lenya.ac.GroupManager;
@@ -40,7 +41,14 @@
  */
 public abstract class AbstractAccreditableManager
     extends AbstractLogEnabled
-    implements AccreditableManager, ItemManagerListener, Disposable {
+    implements AccreditableManager, ItemManagerListener {
+    
+    /**
+     * @param logger The logger.
+     */
+    public AbstractAccreditableManager(Logger logger) {
+        ContainerUtil.enableLogging(this, logger);
+    }
 
     private UserManager userManager = null;
     private GroupManager groupManager = null;
@@ -120,28 +128,6 @@
             getLogger().debug("Item was removed: [" + item + "] - notifying listeners");
         }
         notifyRemoved(item);
-    }
-
-    /**
-	 * @see org.apache.avalon.framework.activity.Disposable#dispose()
-	 */
-    public void dispose() {
-        if (this.userManager != null) {
-            this.userManager.removeItemManagerListener(this);
-        }
-        if (this.groupManager != null) {
-            this.groupManager.removeItemManagerListener(this);
-        }
-        if (this.ipRangeManager != null) {
-            this.ipRangeManager.removeItemManagerListener(this);
-        }
-        if (this.roleManager != null) {
-            this.roleManager.removeItemManagerListener(this);
-        }
-        
-        if (getLogger().isDebugEnabled()) {
-            getLogger().debug("Disposing [" + this + "]");
-        }
     }
 
     /**

Modified: lenya/trunk/src/modules-core/ac/java/src/org/apache/lenya/ac/impl/AbstractGroupable.java
URL: http://svn.apache.org/viewvc/lenya/trunk/src/modules-core/ac/java/src/org/apache/lenya/ac/impl/AbstractGroupable.java?view=diff&rev=499783&r1=499782&r2=499783
==============================================================================
--- lenya/trunk/src/modules-core/ac/java/src/org/apache/lenya/ac/impl/AbstractGroupable.java (original)
+++ lenya/trunk/src/modules-core/ac/java/src/org/apache/lenya/ac/impl/AbstractGroupable.java Thu Jan 25 05:33:38 2007
@@ -24,7 +24,6 @@
 
 import org.apache.avalon.framework.logger.Logger;
 import org.apache.lenya.ac.Accreditable;
-import org.apache.lenya.ac.AccreditableManager;
 import org.apache.lenya.ac.Group;
 import org.apache.lenya.ac.Groupable;
 import org.apache.lenya.ac.ItemManager;

Modified: lenya/trunk/src/modules-core/ac/java/src/org/apache/lenya/ac/impl/DefaultAccessController.java
URL: http://svn.apache.org/viewvc/lenya/trunk/src/modules-core/ac/java/src/org/apache/lenya/ac/impl/DefaultAccessController.java?view=diff&rev=499783&r1=499782&r2=499783
==============================================================================
--- lenya/trunk/src/modules-core/ac/java/src/org/apache/lenya/ac/impl/DefaultAccessController.java (original)
+++ lenya/trunk/src/modules-core/ac/java/src/org/apache/lenya/ac/impl/DefaultAccessController.java Thu Jan 25 05:33:38 2007
@@ -43,6 +43,7 @@
 import org.apache.lenya.ac.AccessController;
 import org.apache.lenya.ac.Accreditable;
 import org.apache.lenya.ac.AccreditableManager;
+import org.apache.lenya.ac.AccreditableManagerFactory;
 import org.apache.lenya.ac.Authenticator;
 import org.apache.lenya.ac.Authorizer;
 import org.apache.lenya.ac.IPRange;
@@ -181,22 +182,19 @@
      */
     protected void setupAccreditableManager(Configuration configuration)
             throws ConfigurationException, ServiceException, ParameterException {
-
-        Configuration accreditableManagerConfiguration = configuration.getChild(
-                ACCREDITABLE_MANAGER_ELEMENT, false);
-        if (accreditableManagerConfiguration != null) {
-            String accreditableManagerType = accreditableManagerConfiguration
-                    .getAttribute(TYPE_ATTRIBUTE);
-            if (getLogger().isDebugEnabled()) {
-                getLogger().debug("AccreditableManager type: [" + accreditableManagerType + "]");
+        Configuration config = configuration.getChild(ACCREDITABLE_MANAGER_ELEMENT, false);
+        if (config != null) {
+            AccreditableManagerFactory factory = null;
+            try {
+                factory = (AccreditableManagerFactory) this.manager.lookup(AccreditableManagerFactory.ROLE);
+                this.accreditableManager = factory.getAccreditableManager(config);
+                this.accreditableManager.addItemManagerListener(this);
+            }
+            finally {
+                if (factory != null) {
+                    this.manager.release(factory);
+                }
             }
-
-            this.accreditableManagerSelector = (ServiceSelector) this.manager.lookup(AccreditableManager.ROLE
-                    + "Selector");
-            this.accreditableManager = (AccreditableManager) this.accreditableManagerSelector
-                    .select(accreditableManagerType);
-            this.accreditableManager.addItemManagerListener(this);
-            configureOrParameterize(this.accreditableManager, accreditableManagerConfiguration);
         }
     }
 



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