org.hibernate.collection.internal.PersistentSortedMap.java Source code

Java tutorial

Introduction

Here is the source code for org.hibernate.collection.internal.PersistentSortedMap.java

Source

/*
 * 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.Collection;
import java.util.Comparator;
import java.util.Map;
import java.util.Set;
import java.util.SortedMap;
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 <tt>java.util.SortedMap</tt>. Underlying
 * collection is a <tt>TreeMap</tt>.
 *
 * @see java.util.TreeMap
 * @author <a href="mailto:doug.currie@alum.mit.edu">e</a>
 */
public class PersistentSortedMap extends PersistentMap implements SortedMap {
    protected Comparator comparator;

    /**
     * Constructs a PersistentSortedMap.  This form needed for SOAP libraries, etc
     */
    @SuppressWarnings("UnusedDeclaration")
    public PersistentSortedMap() {
    }

    /**
     * Constructs a PersistentSortedMap.
     *
     * @param session The session
     */
    public PersistentSortedMap(SharedSessionContractImplementor session) {
        super(session);
    }

    /**
     * Constructs a PersistentSortedMap.
     *
     * @param session The session
     * @deprecated {@link #PersistentSortedMap(SharedSessionContractImplementor)} should be used instead.
     */
    @Deprecated
    public PersistentSortedMap(SessionImplementor session) {
        this((SharedSessionContractImplementor) session);
    }

    /**
     * Constructs a PersistentSortedMap.
     *
     * @param session The session
     * @param map The underlying map data
     */
    public PersistentSortedMap(SharedSessionContractImplementor session, SortedMap map) {
        super(session, map);
        comparator = map.comparator();
    }

    /**
     * Constructs a PersistentSortedMap.
     *
     * @param session The session
     * @param map The underlying map data
     * @deprecated {@link #PersistentSortedMap(SharedSessionContractImplementor, SortedMap)} should be used instead.
     */
    @Deprecated
    public PersistentSortedMap(SessionImplementor session, SortedMap map) {
        this((SharedSessionContractImplementor) session, map);
    }

    @SuppressWarnings({ "unchecked", "UnusedParameters" })
    protected Serializable snapshot(BasicCollectionPersister persister, EntityMode entityMode)
            throws HibernateException {
        final TreeMap clonedMap = new TreeMap(comparator);
        for (Object o : map.entrySet()) {
            final Entry e = (Entry) o;
            clonedMap.put(e.getKey(), persister.getElementType().deepCopy(e.getValue(), persister.getFactory()));
        }
        return clonedMap;
    }

    public void setComparator(Comparator comparator) {
        this.comparator = comparator;
    }

    @Override
    public Comparator comparator() {
        return comparator;
    }

    @Override
    @SuppressWarnings("unchecked")
    public SortedMap subMap(Object fromKey, Object toKey) {
        read();
        final SortedMap subMap = ((SortedMap) map).subMap(fromKey, toKey);
        return new SortedSubMap(subMap);
    }

    @Override
    @SuppressWarnings("unchecked")
    public SortedMap headMap(Object toKey) {
        read();
        final SortedMap headMap = ((SortedMap) map).headMap(toKey);
        return new SortedSubMap(headMap);
    }

    @Override
    @SuppressWarnings("unchecked")
    public SortedMap tailMap(Object fromKey) {
        read();
        final SortedMap tailMap = ((SortedMap) map).tailMap(fromKey);
        return new SortedSubMap(tailMap);
    }

    @Override
    @SuppressWarnings("unchecked")
    public Object firstKey() {
        read();
        return ((SortedMap) map).firstKey();
    }

    @Override
    @SuppressWarnings("unchecked")
    public Object lastKey() {
        read();
        return ((SortedMap) map).lastKey();
    }

    class SortedSubMap implements SortedMap {
        SortedMap subMap;

        SortedSubMap(SortedMap subMap) {
            this.subMap = subMap;
        }

        @Override
        @SuppressWarnings("unchecked")
        public int size() {
            return subMap.size();
        }

        @Override
        @SuppressWarnings("unchecked")
        public boolean isEmpty() {
            return subMap.isEmpty();
        }

        @Override
        @SuppressWarnings("unchecked")
        public boolean containsKey(Object key) {
            return subMap.containsKey(key);
        }

        @Override
        @SuppressWarnings("unchecked")
        public boolean containsValue(Object key) {
            return subMap.containsValue(key);
        }

        @Override
        @SuppressWarnings("unchecked")
        public Object get(Object key) {
            return subMap.get(key);
        }

        @Override
        @SuppressWarnings("unchecked")
        public Object put(Object key, Object value) {
            write();
            return subMap.put(key, value);
        }

        @Override
        @SuppressWarnings("unchecked")
        public Object remove(Object key) {
            write();
            return subMap.remove(key);
        }

        @Override
        @SuppressWarnings("unchecked")
        public void putAll(Map other) {
            write();
            subMap.putAll(other);
        }

        @Override
        @SuppressWarnings("unchecked")
        public void clear() {
            write();
            subMap.clear();
        }

        @Override
        @SuppressWarnings("unchecked")
        public Set keySet() {
            return new SetProxy(subMap.keySet());
        }

        @Override
        @SuppressWarnings("unchecked")
        public Collection values() {
            return new SetProxy(subMap.values());
        }

        @Override
        @SuppressWarnings("unchecked")
        public Set entrySet() {
            return new EntrySetProxy(subMap.entrySet());
        }

        @Override
        @SuppressWarnings("unchecked")
        public Comparator comparator() {
            return subMap.comparator();
        }

        @Override
        @SuppressWarnings("unchecked")
        public SortedMap subMap(Object fromKey, Object toKey) {
            final SortedMap subMap = this.subMap.subMap(fromKey, toKey);
            return new SortedSubMap(subMap);
        }

        @Override
        @SuppressWarnings("unchecked")
        public SortedMap headMap(Object toKey) {
            final SortedMap headMap = subMap.headMap(toKey);
            return new SortedSubMap(headMap);
        }

        @Override
        @SuppressWarnings("unchecked")
        public SortedMap tailMap(Object fromKey) {
            final SortedMap tailMap = subMap.tailMap(fromKey);
            return new SortedSubMap(tailMap);
        }

        @Override
        @SuppressWarnings("unchecked")
        public Object firstKey() {
            return subMap.firstKey();
        }

        @Override
        @SuppressWarnings("unchecked")
        public Object lastKey() {
            return subMap.lastKey();
        }
    }
}