Open Source Repository

Home /hibernate/hibernate-3.2.7.ga | Repository Home



org/hibernate/usertype/UserCollectionType.java
//$Id: UserCollectionType.java 10086 2006-07-05 18:17:27Z [email protected] $
package org.hibernate.usertype;

import java.util.Iterator;
import java.util.Map;

import org.hibernate.HibernateException;
import org.hibernate.collection.PersistentCollection;
import org.hibernate.engine.SessionImplementor;
import org.hibernate.persister.collection.CollectionPersister;

/**
 * A custom type for mapping user-written classes that implement <tt>PersistentCollection</tt>
 
 @see org.hibernate.collection.PersistentCollection
 @author Gavin King
 */
public interface UserCollectionType {
  
  /**
   * Instantiate an uninitialized instance of the collection wrapper
   */
  public PersistentCollection instantiate(SessionImplementor session, CollectionPersister persister
  throws HibernateException;
  
  /**
   * Wrap an instance of a collection
   */
  public PersistentCollection wrap(SessionImplementor session, Object collection);
  
  /**
   * Return an iterator over the elements of this collection - the passed collection
   * instance may or may not be a wrapper
   */
  public Iterator getElementsIterator(Object collection);

  /**
   * Optional operation. Does the collection contain the entity instance?
   */
  public boolean contains(Object collection, Object entity);
  /**
   * Optional operation. Return the index of the entity in the collection.
   */
  public Object indexOf(Object collection, Object entity);
  
  /**
   * Replace the elements of a collection with the elements of another collection
   */
  public Object replaceElements(
      Object original, 
      Object target, 
      CollectionPersister persister, 
      Object owner, 
      Map copyCache, 
      SessionImplementor session)
      throws HibernateException;

  /**
   * Instantiate an empty instance of the "underlying" collection (not a wrapper),
   * but with the given anticipated size (i.e. accounting for initial size
   * and perhaps load factor).
   *
   @param anticipatedSize The anticipated size of the instaniated collection
   * after we are done populating it.  Note, may be negative to indicate that
   * we not yet know anything about the anticipated size (i.e., when initializing
   * from a result set row by row).
   */
  public Object instantiate(int anticipatedSize);
  
}