/**
* Created on Nov 10, 2005
*
* $Id: AbstractSessionHolderProviderManager.java,v 1.3 2006/03/07 13:41:07 costin Exp $
* $Revision: 1.3 $
*/
package org.springmodules.jcr.support;
import java.util.List;
import javax.jcr.Repository;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springmodules.jcr.SessionHolderProvider;
import org.springmodules.jcr.SessionHolderProviderManager;
/**
* Base implementation for SessionHolderProviderManager that adds most of the functionality
* needed by the interface. Usually interface implementations will extends this class.
*
* @author Costin Leau
*
*/
public abstract class AbstractSessionHolderProviderManager implements SessionHolderProviderManager {
protected final Log log = LogFactory.getLog(getClass());
protected SessionHolderProvider defaultProvider = new GenericSessionHolderProvider();
/**
* Returns all the providers for this class. Subclasses have to implement this method.
*
* @return sessionHolderProviders
*/
public abstract List getProviders();
/**
* @see org.springmodules.jcr.SessionHolderProviderManager#getSessionProvider(Repository)
*/
public SessionHolderProvider getSessionProvider(Repository repository) {
// graceful fallback
if (repository == null)
return defaultProvider;
String key = repository.getDescriptor(Repository.REP_NAME_DESC);
List providers = getProviders();
// search the provider
for (int i = 0; i < providers.size(); i++) {
SessionHolderProvider provider = (SessionHolderProvider) providers.get(i);
if (provider.acceptsRepository(key)) {
if (log.isDebugEnabled())
log.debug("specific SessionHolderProvider found for repository " + key);
return provider;
}
}
// no provider found - return the default one
if (log.isDebugEnabled())
log.debug("no specific SessionHolderProvider found for repository "
+ key
+ "; using the default one");
return defaultProvider;
}
}