Filter:   InfoImg
download Versioning.java
Language: Java
LOC: 40
Project Info
Hibernate
Server: SourceForge
Type: cvs
...te\cirrus\hibernate\engine\
   Batcher.java
   Cascades.java
   Key.java
   Mapping.java
   ...FactoryImplementor.java
   SessionImplementor.java
   Versioning.java

//$Id: Versioning.java,v 1.2 2002/11/26 03:35:41 oneovthafew Exp $
package cirrus.hibernate.engine;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import cirrus.hibernate.HibernateException;
import cirrus.hibernate.persister.ClassPersister;
import cirrus.hibernate.type.VersionType;

/**
 * Utility methods for managing versions and timestamps
 */
public final class Versioning {
	
	private static final Log log = LogFactory.getLog(Versioning.class);
	
	/**
	 * Increment the given version number
	 */
	public static Object increment(Object version, VersionType versionType) {
		Object next = versionType.next(version);
		if ( log.isTraceEnabled() ) log.trace("Incrementing: " + version + " to " + next);
		return next;
	}
	
	/**
	 * Create an initial version number
	 */
	private static Object seed(VersionType versionType) {
		Object seed = versionType.seed();
		if ( log.isTraceEnabled() ) log.trace("Seeding: " + seed);
		return seed;
	}
	
	/**
	 * Seed the given instance state snapshot with an initial version number
	 */
	public static boolean seedVersion(Object[] fields, int versionProperty, VersionType versionType) {
		if ( fields[versionProperty]==null ) {
			fields[versionProperty] = seed(versionType);
			return true;
		}
		else {
			return false;
		}
	}
	
	private static Object getVersion(Object[] fields, int versionProperty, VersionType versionType) throws HibernateException {
		return fields[versionProperty];
	}
	
	private static void setVersion(Object[] fields, Object version, int versionProperty, VersionType versionType) throws HibernateException {
		fields[versionProperty] = version;
	}
	
	/**
	 * Set the version number of the given instance state snapshot
	 */
	public static void setVersion(Object[] fields, Object version, ClassPersister persister) throws HibernateException {
		setVersion( fields, version, persister.getVersionProperty(), persister.getVersionType() );
	}
	
	/**
	 * Get the version number of the given instance state snapshot
	 */
	public static Object getVersion(Object[] fields, ClassPersister persister) throws HibernateException {
		return persister.isVersioned() ? getVersion( fields, persister.getVersionProperty(), persister.getVersionType() ) : null;
	}

}