/*
 * Hibernate, Relational Persistence for Idiomatic Java
 *
 * License: GNU Lesser General Public License (LGPL), version 2.1 or later.
 * See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
 */
package org.hibernate.collection.internal;

import java.io.Serializable;
import java.util.Comparator;
import java.util.SortedSet;
import java.util.TreeMap;

import org.hibernate.EntityMode;
import org.hibernate.HibernateException;
import org.hibernate.engine.spi.SessionImplementor;
import org.hibernate.engine.spi.SharedSessionContractImplementor;
import org.hibernate.persister.collection.BasicCollectionPersister;

A persistent wrapper for a java.util.SortedSet. Underlying collection is a TreeSet.
Author:e
See Also:
  • TreeSet
/** * A persistent wrapper for a <tt>java.util.SortedSet</tt>. Underlying * collection is a <tt>TreeSet</tt>. * * @see java.util.TreeSet * @author <a href="mailto:doug.currie@alum.mit.edu">e</a> */
public class PersistentSortedSet extends PersistentSet implements SortedSet { protected Comparator comparator;
Constructs a PersistentSortedSet. This form needed for SOAP libraries, etc
/** * Constructs a PersistentSortedSet. This form needed for SOAP libraries, etc */
@SuppressWarnings("UnusedDeclaration") public PersistentSortedSet() { }
Constructs a PersistentSortedSet
Params:
  • session – The session
/** * Constructs a PersistentSortedSet * * @param session The session */
public PersistentSortedSet(SharedSessionContractImplementor session) { super( session ); }
Constructs a PersistentSortedSet
Params:
  • session – The session
  • set – The underlying set data
/** * Constructs a PersistentSortedSet * * @param session The session * @param set The underlying set data */
public PersistentSortedSet(SharedSessionContractImplementor session, SortedSet set) { super( session, set ); comparator = set.comparator(); } @SuppressWarnings({"unchecked", "UnusedParameters"}) protected Serializable snapshot(BasicCollectionPersister persister, EntityMode entityMode) throws HibernateException { final TreeMap clonedSet = new TreeMap( comparator ); for ( Object setElement : set ) { final Object copy = persister.getElementType().deepCopy( setElement, persister.getFactory() ); clonedSet.put( copy, copy ); } return clonedSet; } public void setComparator(Comparator comparator) { this.comparator = comparator; } @Override public Comparator comparator() { return comparator; } @Override @SuppressWarnings("unchecked") public SortedSet subSet(Object fromElement, Object toElement) { read(); final SortedSet subSet = ( (SortedSet) set ).subSet( fromElement, toElement ); return new SubSetProxy( subSet ); } @Override @SuppressWarnings("unchecked") public SortedSet headSet(Object toElement) { read(); final SortedSet headSet = ( (SortedSet) set ).headSet( toElement ); return new SubSetProxy( headSet ); } @Override @SuppressWarnings("unchecked") public SortedSet tailSet(Object fromElement) { read(); final SortedSet tailSet = ( (SortedSet) set ).tailSet( fromElement ); return new SubSetProxy( tailSet ); } @Override @SuppressWarnings("unchecked") public Object first() { read(); return ( (SortedSet) set ).first(); } @Override @SuppressWarnings("unchecked") public Object last() { read(); return ( (SortedSet) set ).last(); }
wrapper for subSets to propagate write to its backing set
/** * wrapper for subSets to propagate write to its backing set */
class SubSetProxy extends SetProxy implements SortedSet { SubSetProxy(SortedSet s) { super( s ); } @Override @SuppressWarnings("unchecked") public Comparator comparator() { return ( (SortedSet) this.set ).comparator(); } @Override @SuppressWarnings("unchecked") public Object first() { return ( (SortedSet) this.set ).first(); } @Override @SuppressWarnings("unchecked") public SortedSet headSet(Object toValue) { return new SubSetProxy( ( (SortedSet) this.set ).headSet( toValue ) ); } @Override @SuppressWarnings("unchecked") public Object last() { return ( (SortedSet) this.set ).last(); } @Override @SuppressWarnings("unchecked") public SortedSet subSet(Object fromValue, Object toValue) { return new SubSetProxy( ( (SortedSet) this.set ).subSet( fromValue, toValue ) ); } @Override @SuppressWarnings("unchecked") public SortedSet tailSet(Object fromValue) { return new SubSetProxy( ( (SortedSet) this.set ).tailSet( fromValue ) ); } } }