//$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;
}
}