All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.hibernate.collection.PersistentElementHolder Maven / Gradle / Ivy

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

import java.io.Serializable;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;

import org.dom4j.Element;
import org.hibernate.AssertionFailure;
import org.hibernate.HibernateException;
import org.hibernate.loader.CollectionAliases;
import org.hibernate.engine.SessionImplementor;
import org.hibernate.persister.collection.CollectionPersister;
import org.hibernate.type.Type;
import org.hibernate.util.CollectionHelper;

/**
 * A persistent wrapper for an XML element
 *
 * @author Gavin King
 */
public class PersistentElementHolder extends AbstractPersistentCollection {
	protected Element element;
	
	public PersistentElementHolder(SessionImplementor session, Element element) {
		super(session);
		this.element = element;
		setInitialized();
	}

	public Serializable getSnapshot(CollectionPersister persister) 
	throws HibernateException {
		
		final Type elementType = persister.getElementType();		
		List elements = element.elements( persister.getElementNodeName() );
		ArrayList snapshot = new ArrayList( elements.size() );
		for ( int i=0; i= elements.size() ) {
				result.add(old);
			}
			else {
				Element elem = (Element) elements.get(i);
				Object object = elementType.fromXMLNode( elem, persister.getFactory() );
				if ( elementType.isDirty( old, object, getSession() ) ) result.add(old);
			}
		}
		return result.iterator();
		
	}

	public boolean needsInserting(Object entry, int i, Type elementType) 
	throws HibernateException {
		ArrayList snapshot = (ArrayList) getSnapshot();
		return i>=snapshot.size() || elementType.isDirty( snapshot.get(i), entry, getSession() );
	}

	public boolean needsUpdating(Object entry, int i, Type elementType) 
	throws HibernateException {
		return false;
	}

	public Object getIndex(Object entry, int i, CollectionPersister persister) {
		throw new UnsupportedOperationException();
	}

	public Object getElement(Object entry) {
		return entry;
	}

	public Object getSnapshotElement(Object entry, int i) {
		throw new UnsupportedOperationException();
	}

	public boolean entryExists(Object entry, int i) {
		return entry!=null;
	}

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy