//$Id: CollectionLoader.java,v 1.11 2005/06/13 20:27:16 oneovthafew Exp $

package org.hibernate.loader.collection;



import java.io.Serializable;

import java.util.Map;



import org.hibernate.HibernateException;

import org.hibernate.engine.SessionFactoryImplementor;

import org.hibernate.engine.SessionImplementor;

import org.hibernate.loader.OuterJoinLoader;

import org.hibernate.persister.collection.QueryableCollection;

import org.hibernate.type.Type;



/**

 * Superclass for loaders that initialize collections

 * 

 * @see OneToManyLoader

 * @see BasicCollectionLoader

 * @author Gavin King

 */

public class CollectionLoader extends OuterJoinLoader implements CollectionInitializer {



	private final QueryableCollection collectionPersister;



	public CollectionLoader(QueryableCollection collectionPersister, SessionFactoryImplementor factory, Map enabledFilters) {

		super( factory, enabledFilters );

		this.collectionPersister = collectionPersister;

	}



	protected boolean isSubselectLoadingEnabled() {

		return hasSubselectLoadableCollections();

	}



	public void initialize(Serializable id, SessionImplementor session)

	throws HibernateException {

		loadCollection( session, id, getKeyType() );

	}



	protected Type getKeyType() {

		return collectionPersister.getKeyType();

	}



	public String toString() {

		return getClass().getName() + '(' + collectionPersister.getRole() + ')';

	}

}

