blob: 8a1282b744699f2a2dca2ad138be255958fc55c1 [file] [log] [blame]
/*
* 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$ */
package org.apache.lenya.ac.impl;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
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;
import org.apache.lenya.ac.IPRangeManager;
import org.apache.lenya.ac.Item;
import org.apache.lenya.ac.ItemManagerListener;
import org.apache.lenya.ac.RoleManager;
import org.apache.lenya.ac.UserManager;
/**
* Abstract base class for accreditable managers.
*/
public abstract class AbstractAccreditableManager
extends AbstractLogEnabled
implements AccreditableManager, ItemManagerListener {
/**
* @param logger The logger.
*/
public AbstractAccreditableManager(Logger logger) {
ContainerUtil.enableLogging(this, logger);
}
private UserManager userManager = null;
private GroupManager groupManager = null;
private IPRangeManager ipRangeManager = null;
private RoleManager roleManager = null;
private List itemManagerListeners = new ArrayList();
/**
* Attaches an item manager listener to this accreditable manager.
* @param listener An item manager listener.
*/
public void addItemManagerListener(ItemManagerListener listener) {
if (!this.itemManagerListeners.contains(listener)) {
if (getLogger().isDebugEnabled()) {
getLogger().debug("Adding listener: [" + listener + "]");
}
this.itemManagerListeners.add(listener);
}
}
/**
* Removes an item manager listener from this accreditable manager.
* @param listener An item manager listener.
*/
public void removeItemManagerListener(ItemManagerListener listener) {
if (getLogger().isDebugEnabled()) {
getLogger().debug("Removing listener: [" + listener + "]");
}
this.itemManagerListeners.remove(listener);
}
/**
* Notifies the listeners that an item was added.
* @param item The item that was added.
* @throws AccessControlException when a notified listener threw this exception.
*/
protected void notifyAdded(Item item) throws AccessControlException {
List clone = new ArrayList(this.itemManagerListeners);
for (Iterator i = clone.iterator(); i.hasNext();) {
ItemManagerListener listener = (ItemManagerListener) i.next();
listener.itemAdded(item);
}
}
/**
* Notifies the listeners that an item was removed.
* @param item The item that was removed.
* @throws AccessControlException when a notified listener threw this exception.
*/
protected void notifyRemoved(Item item) throws AccessControlException {
List clone = new ArrayList(this.itemManagerListeners);
for (Iterator i = clone.iterator(); i.hasNext();) {
ItemManagerListener listener = (ItemManagerListener) i.next();
listener.itemRemoved(item);
}
}
/**
* @see org.apache.lenya.ac.ItemManagerListener#itemAdded(org.apache.lenya.ac.Item)
*/
public void itemAdded(Item item) throws AccessControlException {
if (getLogger().isDebugEnabled()) {
getLogger().debug("Item was added: [" + item + "] - notifying listeners");
}
notifyAdded(item);
}
/**
* @see org.apache.lenya.ac.ItemManagerListener#itemRemoved(org.apache.lenya.ac.Item)
*/
public void itemRemoved(Item item) throws AccessControlException {
if (getLogger().isDebugEnabled()) {
getLogger().debug("Item was removed: [" + item + "] - notifying listeners");
}
notifyRemoved(item);
}
/**
* @see org.apache.lenya.ac.AccreditableManager#getUserManager()
*/
public UserManager getUserManager() throws AccessControlException {
if (this.userManager == null) {
this.userManager = initializeUserManager();
this.userManager.addItemManagerListener(this);
}
return this.userManager;
}
/**
* @see org.apache.lenya.ac.AccreditableManager#getGroupManager()
*/
public GroupManager getGroupManager() throws AccessControlException {
if (this.groupManager == null) {
this.groupManager = initializeGroupManager();
this.groupManager.addItemManagerListener(this);
}
return this.groupManager;
}
/**
* @see org.apache.lenya.ac.AccreditableManager#getRoleManager()
*/
public RoleManager getRoleManager() throws AccessControlException {
if (this.roleManager == null) {
this.roleManager = initializeRoleManager();
this.roleManager.addItemManagerListener(this);
}
return this.roleManager;
}
/**
* @see org.apache.lenya.ac.AccreditableManager#getIPRangeManager()
*/
public IPRangeManager getIPRangeManager() throws AccessControlException {
if (this.ipRangeManager == null) {
this.ipRangeManager = initializeIPRangeManager();
this.ipRangeManager.addItemManagerListener(this);
}
return this.ipRangeManager;
}
/**
* Initializes the group manager.
*
* @return A group manager.
* @throws AccessControlException when something went wrong.
*/
protected abstract GroupManager initializeGroupManager() throws AccessControlException;
/**
* Initializes the IP range manager.
*
* @return An IP range manager.
* @throws AccessControlException when something went wrong.
*/
protected abstract IPRangeManager initializeIPRangeManager() throws AccessControlException;
/**
* Initializes the role manager.
*
* @return A role manager.
* @throws AccessControlException when something went wrong.
*/
protected abstract RoleManager initializeRoleManager() throws AccessControlException;
/**
* Initializes the user manager.
*
* @return A user manager.
* @throws AccessControlException when something went wrong.
*/
protected abstract UserManager initializeUserManager() throws AccessControlException;
}