[hibernate-commits] Hibernate SVN: r15506 - in core/trunk/envers/src: main/java/org/hibernate/envers and 12 other directories.

hibernate-commits at lists.jboss.org hibernate-commits at lists.jboss.org
Tue Nov 4 17:11:07 EST 2008


Author: adamw
Date: 2008-11-04 17:11:07 -0500 (Tue, 04 Nov 2008)
New Revision: 15506

Added:
   core/trunk/envers/src/main/java/org/hibernate/envers/event/AuditEventListener.java
   core/trunk/envers/src/main/java/org/hibernate/envers/exception/NotAuditedException.java
   core/trunk/envers/src/main/java/org/hibernate/envers/query/impl/AbstractAuditQuery.java
   core/trunk/envers/src/main/java/org/jboss/
   core/trunk/envers/src/main/java/org/jboss/envers/
   core/trunk/envers/src/main/java/org/jboss/envers/ModificationStore.java
   core/trunk/envers/src/main/java/org/jboss/envers/Versioned.java
   core/trunk/envers/src/main/java/org/jboss/envers/VersionsReader.java
   core/trunk/envers/src/main/java/org/jboss/envers/VersionsReaderFactory.java
   core/trunk/envers/src/main/java/org/jboss/envers/event/
   core/trunk/envers/src/main/java/org/jboss/envers/event/VersionsEventListener.java
   core/trunk/envers/src/main/java/org/jboss/envers/exception/
   core/trunk/envers/src/main/java/org/jboss/envers/exception/NotVersionedException.java
   core/trunk/envers/src/main/java/org/jboss/envers/exception/RevisionDoesNotExistException.java
   core/trunk/envers/src/main/java/org/jboss/envers/exception/VersionsException.java
   core/trunk/envers/src/main/java/org/jboss/envers/query/
   core/trunk/envers/src/main/java/org/jboss/envers/query/VersionsQueryCreator.java
Removed:
   core/trunk/envers/src/main/java/org/hibernate/envers/event/VersionsEventListener.java
   core/trunk/envers/src/main/java/org/hibernate/envers/exception/NotVersionedException.java
   core/trunk/envers/src/main/java/org/hibernate/envers/query/impl/AbstractVersionsQuery.java
Modified:
   core/trunk/envers/src/main/java/org/hibernate/envers/AuditReader.java
   core/trunk/envers/src/main/java/org/hibernate/envers/AuditReaderFactory.java
   core/trunk/envers/src/main/java/org/hibernate/envers/Audited.java
   core/trunk/envers/src/main/java/org/hibernate/envers/exception/AuditException.java
   core/trunk/envers/src/main/java/org/hibernate/envers/exception/RevisionDoesNotExistException.java
   core/trunk/envers/src/main/java/org/hibernate/envers/query/AuditQueryCreator.java
   core/trunk/envers/src/main/java/org/hibernate/envers/query/impl/EntitiesAtRevisionQuery.java
   core/trunk/envers/src/main/java/org/hibernate/envers/query/impl/RevisionsOfEntityQuery.java
   core/trunk/envers/src/main/java/org/hibernate/envers/reader/AuditReaderImpl.java
   core/trunk/envers/src/main/java/org/hibernate/envers/reader/AuditReaderImplementor.java
   core/trunk/envers/src/test/java/org/hibernate/envers/test/integration/basic/NotVersioned.java
   core/trunk/envers/src/test/resources/hibernate.test.cfg.xml
Log:
HHH-3570: more renaming, some compatibility classes

Modified: core/trunk/envers/src/main/java/org/hibernate/envers/AuditReader.java
===================================================================
--- core/trunk/envers/src/main/java/org/hibernate/envers/AuditReader.java	2008-11-04 21:46:12 UTC (rev 15505)
+++ core/trunk/envers/src/main/java/org/hibernate/envers/AuditReader.java	2008-11-04 22:11:07 UTC (rev 15506)
@@ -26,7 +26,7 @@
 import java.util.Date;
 import java.util.List;
 
-import org.hibernate.envers.exception.NotVersionedException;
+import org.hibernate.envers.exception.NotAuditedException;
 import org.hibernate.envers.exception.RevisionDoesNotExistException;
 import org.hibernate.envers.query.AuditQueryCreator;
 
@@ -43,11 +43,11 @@
      * if not all properties are versioned) or null, if an entity with that id didn't exist at that
      * revision.
      * @throws IllegalArgumentException If cls or primaryKey is null or revision is less or equal to 0.
-     * @throws NotVersionedException When entities of the given class are not versioned.
+     * @throws NotAuditedException When entities of the given class are not audited.
      * @throws IllegalStateException If the associated entity manager is closed.
      */
     <T> T find(Class<T> cls, Object primaryKey, Number revision) throws
-            IllegalArgumentException, NotVersionedException, IllegalStateException;
+            IllegalArgumentException, NotAuditedException, IllegalStateException;
 
     /**
      * Get a list of revision numbers, at which an entity was modified.
@@ -55,12 +55,12 @@
      * @param primaryKey Primary key of the entity.
      * @return A list of revision numbers, at which the entity was modified, sorted in ascending order (so older
      * revisions come first).
-     * @throws NotVersionedException When entities of the given class are not versioned.
+     * @throws NotAuditedException When entities of the given class are not audited.
      * @throws IllegalArgumentException If cls or primaryKey is null.
      * @throws IllegalStateException If the associated entity manager is closed.
      */
     List<Number> getRevisions(Class<?> cls, Object primaryKey)
-            throws IllegalArgumentException, NotVersionedException, IllegalStateException;
+            throws IllegalArgumentException, NotAuditedException, IllegalStateException;
 
     /**
      * Get the date, at which a revision was created.
@@ -102,7 +102,7 @@
 
     /**
      *
-     * @return A query creator, associated with this VersionsReader instance, with which queries can be
+     * @return A query creator, associated with this AuditReader instance, with which queries can be
      * created and later executed. Shouldn't be used after the associated Session or EntityManager
      * is closed.
      */

Modified: core/trunk/envers/src/main/java/org/hibernate/envers/AuditReaderFactory.java
===================================================================
--- core/trunk/envers/src/main/java/org/hibernate/envers/AuditReaderFactory.java	2008-11-04 21:46:12 UTC (rev 15505)
+++ core/trunk/envers/src/main/java/org/hibernate/envers/AuditReaderFactory.java	2008-11-04 22:11:07 UTC (rev 15506)
@@ -25,7 +25,7 @@
 
 import javax.persistence.EntityManager;
 
-import org.hibernate.envers.event.VersionsEventListener;
+import org.hibernate.envers.event.AuditEventListener;
 import org.hibernate.envers.exception.AuditException;
 import org.hibernate.envers.reader.AuditReaderImpl;
 import static org.hibernate.envers.tools.ArraysTools.arrayIncludesInstanceOf;
@@ -48,7 +48,7 @@
      * @param session An open session.
      * @return A versions reader associated with the given sesison. It shouldn't be used
      * after the session is closed.
-     * @throws org.hibernate.envers.exception.AuditException When the given required listeners aren't installed.
+     * @throws AuditException When the given required listeners aren't installed.
      */
     public static AuditReader get(Session session) throws AuditException {
         SessionImplementor sessionImpl = (SessionImplementor) session;
@@ -56,16 +56,16 @@
         EventListeners listeners = sessionImpl.getListeners();
 
         for (PostInsertEventListener listener : listeners.getPostInsertEventListeners()) {
-            if (listener instanceof VersionsEventListener) {
-                if (arrayIncludesInstanceOf(listeners.getPostUpdateEventListeners(), VersionsEventListener.class) &&
-                        arrayIncludesInstanceOf(listeners.getPostDeleteEventListeners(), VersionsEventListener.class)) {
-                    return new AuditReaderImpl(((VersionsEventListener) listener).getVerCfg(), session,
+            if (listener instanceof AuditEventListener) {
+                if (arrayIncludesInstanceOf(listeners.getPostUpdateEventListeners(), AuditEventListener.class) &&
+                        arrayIncludesInstanceOf(listeners.getPostDeleteEventListeners(), AuditEventListener.class)) {
+                    return new AuditReaderImpl(((AuditEventListener) listener).getVerCfg(), session,
                             sessionImpl);
                 }
             }
         }
 
-        throw new AuditException("You need install the org.hibernate.envers.event.VersionsEventListener " +
+        throw new AuditException("You need to install the org.hibernate.envers.event.AuditEventListener " +
                 "class as post insert, update and delete event listener.");
     }
 
@@ -74,7 +74,7 @@
      * @param entityManager An open entity manager.
      * @return A versions reader associated with the given entity manager. It shouldn't be used
      * after the entity manager is closed.
-     * @throws org.hibernate.envers.exception.AuditException When the given entity manager is not based on Hibernate, or if the required
+     * @throws AuditException When the given entity manager is not based on Hibernate, or if the required
      * listeners aren't installed.
      */
     public static AuditReader get(EntityManager entityManager) throws AuditException {

Modified: core/trunk/envers/src/main/java/org/hibernate/envers/Audited.java
===================================================================
--- core/trunk/envers/src/main/java/org/hibernate/envers/Audited.java	2008-11-04 21:46:12 UTC (rev 15505)
+++ core/trunk/envers/src/main/java/org/hibernate/envers/Audited.java	2008-11-04 22:11:07 UTC (rev 15506)
@@ -29,8 +29,8 @@
 import java.lang.annotation.Target;
 
 /**
- * When applied to a class, indicates that all of its properties should be versioned.
- * When applied to a field, indicates that this field should be versioned.
+ * When applied to a class, indicates that all of its properties should be audited.
+ * When applied to a field, indicates that this field should be audited.
  * @author Adam Warski (adam at warski dot org)
  */
 @Retention(RetentionPolicy.RUNTIME)

Copied: core/trunk/envers/src/main/java/org/hibernate/envers/event/AuditEventListener.java (from rev 15501, core/trunk/envers/src/main/java/org/hibernate/envers/event/VersionsEventListener.java)
===================================================================
--- core/trunk/envers/src/main/java/org/hibernate/envers/event/AuditEventListener.java	                        (rev 0)
+++ core/trunk/envers/src/main/java/org/hibernate/envers/event/AuditEventListener.java	2008-11-04 22:11:07 UTC (rev 15506)
@@ -0,0 +1,218 @@
+/*
+ * Hibernate, Relational Persistence for Idiomatic Java
+ *
+ * Copyright (c) 2008, Red Hat Middleware LLC or third-party contributors as
+ * indicated by the @author tags or express copyright attribution
+ * statements applied by the authors.  All third-party contributions are
+ * distributed under license by Red Hat Middleware LLC.
+ *
+ * This copyrighted material is made available to anyone wishing to use, modify,
+ * copy, or redistribute it subject to the terms and conditions of the GNU
+ * Lesser General Public License, as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License
+ * for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this distribution; if not, write to:
+ * Free Software Foundation, Inc.
+ * 51 Franklin Street, Fifth Floor
+ * Boston, MA  02110-1301  USA
+ */
+package org.hibernate.envers.event;
+
+import java.io.Serializable;
+
+import org.hibernate.envers.configuration.AuditConfiguration;
+import org.hibernate.envers.entities.RelationDescription;
+import org.hibernate.envers.entities.RelationType;
+import org.hibernate.envers.entities.mapper.PersistentCollectionChangeData;
+import org.hibernate.envers.entities.mapper.id.IdMapper;
+import org.hibernate.envers.synchronization.AuditSync;
+import org.hibernate.envers.synchronization.work.AddWorkUnit;
+import org.hibernate.envers.synchronization.work.CollectionChangeWorkUnit;
+import org.hibernate.envers.synchronization.work.DelWorkUnit;
+import org.hibernate.envers.synchronization.work.ModWorkUnit;
+import org.hibernate.envers.synchronization.work.PersistentCollectionChangeWorkUnit;
+import org.hibernate.envers.tools.Tools;
+
+import org.hibernate.cfg.Configuration;
+import org.hibernate.collection.PersistentCollection;
+import org.hibernate.engine.CollectionEntry;
+import org.hibernate.event.AbstractCollectionEvent;
+import org.hibernate.event.Initializable;
+import org.hibernate.event.PostCollectionRecreateEvent;
+import org.hibernate.event.PostCollectionRecreateEventListener;
+import org.hibernate.event.PostDeleteEvent;
+import org.hibernate.event.PostDeleteEventListener;
+import org.hibernate.event.PostInsertEvent;
+import org.hibernate.event.PostInsertEventListener;
+import org.hibernate.event.PostUpdateEvent;
+import org.hibernate.event.PostUpdateEventListener;
+import org.hibernate.event.PreCollectionRemoveEvent;
+import org.hibernate.event.PreCollectionRemoveEventListener;
+import org.hibernate.event.PreCollectionUpdateEvent;
+import org.hibernate.event.PreCollectionUpdateEventListener;
+import org.hibernate.persister.entity.EntityPersister;
+
+/**
+ * @author Adam Warski (adam at warski dot org)
+ */
+public class AuditEventListener implements PostInsertEventListener, PostUpdateEventListener,
+        PostDeleteEventListener, PreCollectionUpdateEventListener, PreCollectionRemoveEventListener,
+        PostCollectionRecreateEventListener, Initializable {
+    private AuditConfiguration verCfg;
+
+    private void generateBidirectionalCollectionChangeWorkUnits(AuditSync verSync, EntityPersister entityPersister,
+                                                                String entityName, Object[] newState, Object[] oldState) {
+        // Checking if this is enabled in configuration ...
+        if (!verCfg.getGlobalCfg().isGenerateRevisionsForCollections()) {
+            return;
+        }
+
+        // Checks every property of the entity, if it is an "owned" to-one relation to another entity.
+        // If the value of that property changed, and the relation is bi-directional, a new revision
+        // for the related entity is generated.
+        String[] propertyNames = entityPersister.getPropertyNames();
+
+        for (int i=0; i<propertyNames.length; i++) {
+            String propertyName = propertyNames[i];
+            RelationDescription relDesc = verCfg.getEntCfg().getRelationDescription(entityName, propertyName);
+            if (relDesc != null && relDesc.isBidirectional() && relDesc.getRelationType() == RelationType.TO_ONE) {
+                // Checking for changes
+                Object oldValue = oldState == null ? null : oldState[i];
+                Object newValue = newState == null ? null : newState[i];
+
+                if (!Tools.objectsEqual(oldValue, newValue)) {
+                    IdMapper idMapper = verCfg.getEntCfg().get(relDesc.getToEntityName()).getIdMapper();
+
+                    // We have to generate changes both in the old collection (size decreses) and new collection
+                    // (size increases).
+                    if (newValue != null) {
+                        Serializable id = (Serializable) idMapper.mapToIdFromEntity(newValue);
+                        verSync.addWorkUnit(new CollectionChangeWorkUnit(relDesc.getToEntityName(), verCfg, id, newValue));
+                    }
+
+                    if (oldValue != null) {
+                        Serializable id = (Serializable) idMapper.mapToIdFromEntity(oldValue);
+                        verSync.addWorkUnit(new CollectionChangeWorkUnit(relDesc.getToEntityName(), verCfg, id, oldValue));
+                    }
+                }
+            }
+        }
+    }
+
+    public void onPostInsert(PostInsertEvent event) {
+        String entityName = event.getPersister().getEntityName();
+
+        if (verCfg.getEntCfg().isVersioned(entityName)) {
+            AuditSync verSync = verCfg.getSyncManager().get(event.getSession());
+
+            verSync.addWorkUnit(new AddWorkUnit(event.getPersister().getEntityName(), verCfg, event.getId(),
+                    event.getPersister(), event.getState()));
+
+            generateBidirectionalCollectionChangeWorkUnits(verSync, event.getPersister(), entityName, event.getState(), null);
+        }
+    }
+
+    public void onPostUpdate(PostUpdateEvent event) {
+        String entityName = event.getPersister().getEntityName();
+
+        if (verCfg.getEntCfg().isVersioned(entityName)) {
+            AuditSync verSync = verCfg.getSyncManager().get(event.getSession());
+
+            verSync.addWorkUnit(new ModWorkUnit(event.getPersister().getEntityName(), verCfg, event.getId(),
+                    event.getPersister(), event.getState(), event.getOldState()));
+
+            generateBidirectionalCollectionChangeWorkUnits(verSync, event.getPersister(), entityName, event.getState(), event.getOldState());
+        }
+    }
+
+    public void onPostDelete(PostDeleteEvent event) {
+        String entityName = event.getPersister().getEntityName();
+
+        if (verCfg.getEntCfg().isVersioned(entityName)) {
+            AuditSync verSync = verCfg.getSyncManager().get(event.getSession());
+
+            verSync.addWorkUnit(new DelWorkUnit(event.getPersister().getEntityName(), verCfg, event.getId()));
+
+            generateBidirectionalCollectionChangeWorkUnits(verSync, event.getPersister(), entityName, null, event.getDeletedState());
+        }
+    }
+
+    private void generateBidirectionalCollectionChangeWorkUnits(AuditSync verSync, AbstractCollectionEvent event,
+                                                                PersistentCollectionChangeWorkUnit workUnit) {
+        // Checking if this is enabled in configuration ...
+        if (!verCfg.getGlobalCfg().isGenerateRevisionsForCollections()) {
+            return;
+        }
+
+        // Checking if this is not a bidirectional relation - then, a revision needs also be generated for
+        // the other side of the relation.
+        RelationDescription relDesc = verCfg.getEntCfg().getRelationDescription(event.getAffectedOwnerEntityName(),
+                workUnit.getReferencingPropertyName());
+
+        // relDesc can be null if this is a collection of simple values (not a relation).
+        if (relDesc != null && relDesc.isBidirectional()) {
+            String relatedEntityName = relDesc.getToEntityName();
+            IdMapper relatedIdMapper = verCfg.getEntCfg().get(relatedEntityName).getIdMapper();
+            
+            for (PersistentCollectionChangeData changeData : workUnit.getCollectionChanges()) {
+                Object relatedObj = changeData.getChangedElement();
+                Serializable relatedId = (Serializable) relatedIdMapper.mapToIdFromEntity(relatedObj);
+
+                verSync.addWorkUnit(new CollectionChangeWorkUnit(relatedEntityName, verCfg, relatedId, relatedObj));
+            }
+        }
+    }
+
+    private void onCollectionAction(AbstractCollectionEvent event, PersistentCollection newColl, Serializable oldColl,
+                                    CollectionEntry collectionEntry) {
+        String entityName = event.getAffectedOwnerEntityName();
+
+        if (verCfg.getEntCfg().isVersioned(entityName)) {
+            AuditSync verSync = verCfg.getSyncManager().get(event.getSession());
+
+            PersistentCollectionChangeWorkUnit workUnit = new PersistentCollectionChangeWorkUnit(entityName, verCfg,
+                    newColl, collectionEntry.getRole(), oldColl, event.getAffectedOwnerIdOrNull());
+            verSync.addWorkUnit(workUnit);
+
+            if (workUnit.containsWork()) {
+                // There are some changes: a revision needs also be generated for the collection owner
+                verSync.addWorkUnit(new CollectionChangeWorkUnit(event.getAffectedOwnerEntityName(), verCfg,
+                        event.getAffectedOwnerIdOrNull(), event.getAffectedOwnerOrNull()));
+
+                generateBidirectionalCollectionChangeWorkUnits(verSync, event, workUnit);
+            }
+        }
+    }
+
+    private CollectionEntry getCollectionEntry(AbstractCollectionEvent event) {
+        return event.getSession().getPersistenceContext().getCollectionEntry(event.getCollection());
+    }
+
+    public void onPreUpdateCollection(PreCollectionUpdateEvent event) {
+        CollectionEntry collectionEntry = getCollectionEntry(event);
+        onCollectionAction(event, event.getCollection(), collectionEntry.getSnapshot(), collectionEntry);
+    }
+
+    public void onPreRemoveCollection(PreCollectionRemoveEvent event) {
+        CollectionEntry collectionEntry = getCollectionEntry(event);
+        onCollectionAction(event, null, collectionEntry.getSnapshot(), collectionEntry);
+    }
+
+    public void onPostRecreateCollection(PostCollectionRecreateEvent event) {
+        onCollectionAction(event, event.getCollection(), null, getCollectionEntry(event));
+    }
+
+    @SuppressWarnings({"unchecked"})
+    public void initialize(Configuration cfg) {
+        verCfg = AuditConfiguration.getFor(cfg);
+    }
+
+    public AuditConfiguration getVerCfg() {
+        return verCfg;
+    }
+}

Deleted: core/trunk/envers/src/main/java/org/hibernate/envers/event/VersionsEventListener.java
===================================================================
--- core/trunk/envers/src/main/java/org/hibernate/envers/event/VersionsEventListener.java	2008-11-04 21:46:12 UTC (rev 15505)
+++ core/trunk/envers/src/main/java/org/hibernate/envers/event/VersionsEventListener.java	2008-11-04 22:11:07 UTC (rev 15506)
@@ -1,218 +0,0 @@
-/*
- * Hibernate, Relational Persistence for Idiomatic Java
- *
- * Copyright (c) 2008, Red Hat Middleware LLC or third-party contributors as
- * indicated by the @author tags or express copyright attribution
- * statements applied by the authors.  All third-party contributions are
- * distributed under license by Red Hat Middleware LLC.
- *
- * This copyrighted material is made available to anyone wishing to use, modify,
- * copy, or redistribute it subject to the terms and conditions of the GNU
- * Lesser General Public License, as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
- * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License
- * for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this distribution; if not, write to:
- * Free Software Foundation, Inc.
- * 51 Franklin Street, Fifth Floor
- * Boston, MA  02110-1301  USA
- */
-package org.hibernate.envers.event;
-
-import java.io.Serializable;
-
-import org.hibernate.envers.configuration.AuditConfiguration;
-import org.hibernate.envers.entities.RelationDescription;
-import org.hibernate.envers.entities.RelationType;
-import org.hibernate.envers.entities.mapper.PersistentCollectionChangeData;
-import org.hibernate.envers.entities.mapper.id.IdMapper;
-import org.hibernate.envers.synchronization.AuditSync;
-import org.hibernate.envers.synchronization.work.AddWorkUnit;
-import org.hibernate.envers.synchronization.work.CollectionChangeWorkUnit;
-import org.hibernate.envers.synchronization.work.DelWorkUnit;
-import org.hibernate.envers.synchronization.work.ModWorkUnit;
-import org.hibernate.envers.synchronization.work.PersistentCollectionChangeWorkUnit;
-import org.hibernate.envers.tools.Tools;
-
-import org.hibernate.cfg.Configuration;
-import org.hibernate.collection.PersistentCollection;
-import org.hibernate.engine.CollectionEntry;
-import org.hibernate.event.AbstractCollectionEvent;
-import org.hibernate.event.Initializable;
-import org.hibernate.event.PostCollectionRecreateEvent;
-import org.hibernate.event.PostCollectionRecreateEventListener;
-import org.hibernate.event.PostDeleteEvent;
-import org.hibernate.event.PostDeleteEventListener;
-import org.hibernate.event.PostInsertEvent;
-import org.hibernate.event.PostInsertEventListener;
-import org.hibernate.event.PostUpdateEvent;
-import org.hibernate.event.PostUpdateEventListener;
-import org.hibernate.event.PreCollectionRemoveEvent;
-import org.hibernate.event.PreCollectionRemoveEventListener;
-import org.hibernate.event.PreCollectionUpdateEvent;
-import org.hibernate.event.PreCollectionUpdateEventListener;
-import org.hibernate.persister.entity.EntityPersister;
-
-/**
- * @author Adam Warski (adam at warski dot org)
- */
-public class VersionsEventListener implements PostInsertEventListener, PostUpdateEventListener,
-        PostDeleteEventListener, PreCollectionUpdateEventListener, PreCollectionRemoveEventListener,
-        PostCollectionRecreateEventListener, Initializable {
-    private AuditConfiguration verCfg;
-
-    private void generateBidirectionalCollectionChangeWorkUnits(AuditSync verSync, EntityPersister entityPersister,
-                                                                String entityName, Object[] newState, Object[] oldState) {
-        // Checking if this is enabled in configuration ...
-        if (!verCfg.getGlobalCfg().isGenerateRevisionsForCollections()) {
-            return;
-        }
-
-        // Checks every property of the entity, if it is an "owned" to-one relation to another entity.
-        // If the value of that property changed, and the relation is bi-directional, a new revision
-        // for the related entity is generated.
-        String[] propertyNames = entityPersister.getPropertyNames();
-
-        for (int i=0; i<propertyNames.length; i++) {
-            String propertyName = propertyNames[i];
-            RelationDescription relDesc = verCfg.getEntCfg().getRelationDescription(entityName, propertyName);
-            if (relDesc != null && relDesc.isBidirectional() && relDesc.getRelationType() == RelationType.TO_ONE) {
-                // Checking for changes
-                Object oldValue = oldState == null ? null : oldState[i];
-                Object newValue = newState == null ? null : newState[i];
-
-                if (!Tools.objectsEqual(oldValue, newValue)) {
-                    IdMapper idMapper = verCfg.getEntCfg().get(relDesc.getToEntityName()).getIdMapper();
-
-                    // We have to generate changes both in the old collection (size decreses) and new collection
-                    // (size increases).
-                    if (newValue != null) {
-                        Serializable id = (Serializable) idMapper.mapToIdFromEntity(newValue);
-                        verSync.addWorkUnit(new CollectionChangeWorkUnit(relDesc.getToEntityName(), verCfg, id, newValue));
-                    }
-
-                    if (oldValue != null) {
-                        Serializable id = (Serializable) idMapper.mapToIdFromEntity(oldValue);
-                        verSync.addWorkUnit(new CollectionChangeWorkUnit(relDesc.getToEntityName(), verCfg, id, oldValue));
-                    }
-                }
-            }
-        }
-    }
-
-    public void onPostInsert(PostInsertEvent event) {
-        String entityName = event.getPersister().getEntityName();
-
-        if (verCfg.getEntCfg().isVersioned(entityName)) {
-            AuditSync verSync = verCfg.getSyncManager().get(event.getSession());
-
-            verSync.addWorkUnit(new AddWorkUnit(event.getPersister().getEntityName(), verCfg, event.getId(),
-                    event.getPersister(), event.getState()));
-
-            generateBidirectionalCollectionChangeWorkUnits(verSync, event.getPersister(), entityName, event.getState(), null);
-        }
-    }
-
-    public void onPostUpdate(PostUpdateEvent event) {
-        String entityName = event.getPersister().getEntityName();
-
-        if (verCfg.getEntCfg().isVersioned(entityName)) {
-            AuditSync verSync = verCfg.getSyncManager().get(event.getSession());
-
-            verSync.addWorkUnit(new ModWorkUnit(event.getPersister().getEntityName(), verCfg, event.getId(),
-                    event.getPersister(), event.getState(), event.getOldState()));
-
-            generateBidirectionalCollectionChangeWorkUnits(verSync, event.getPersister(), entityName, event.getState(), event.getOldState());
-        }
-    }
-
-    public void onPostDelete(PostDeleteEvent event) {
-        String entityName = event.getPersister().getEntityName();
-
-        if (verCfg.getEntCfg().isVersioned(entityName)) {
-            AuditSync verSync = verCfg.getSyncManager().get(event.getSession());
-
-            verSync.addWorkUnit(new DelWorkUnit(event.getPersister().getEntityName(), verCfg, event.getId()));
-
-            generateBidirectionalCollectionChangeWorkUnits(verSync, event.getPersister(), entityName, null, event.getDeletedState());
-        }
-    }
-
-    private void generateBidirectionalCollectionChangeWorkUnits(AuditSync verSync, AbstractCollectionEvent event,
-                                                                PersistentCollectionChangeWorkUnit workUnit) {
-        // Checking if this is enabled in configuration ...
-        if (!verCfg.getGlobalCfg().isGenerateRevisionsForCollections()) {
-            return;
-        }
-
-        // Checking if this is not a bidirectional relation - then, a revision needs also be generated for
-        // the other side of the relation.
-        RelationDescription relDesc = verCfg.getEntCfg().getRelationDescription(event.getAffectedOwnerEntityName(),
-                workUnit.getReferencingPropertyName());
-
-        // relDesc can be null if this is a collection of simple values (not a relation).
-        if (relDesc != null && relDesc.isBidirectional()) {
-            String relatedEntityName = relDesc.getToEntityName();
-            IdMapper relatedIdMapper = verCfg.getEntCfg().get(relatedEntityName).getIdMapper();
-            
-            for (PersistentCollectionChangeData changeData : workUnit.getCollectionChanges()) {
-                Object relatedObj = changeData.getChangedElement();
-                Serializable relatedId = (Serializable) relatedIdMapper.mapToIdFromEntity(relatedObj);
-
-                verSync.addWorkUnit(new CollectionChangeWorkUnit(relatedEntityName, verCfg, relatedId, relatedObj));
-            }
-        }
-    }
-
-    private void onCollectionAction(AbstractCollectionEvent event, PersistentCollection newColl, Serializable oldColl,
-                                    CollectionEntry collectionEntry) {
-        String entityName = event.getAffectedOwnerEntityName();
-
-        if (verCfg.getEntCfg().isVersioned(entityName)) {
-            AuditSync verSync = verCfg.getSyncManager().get(event.getSession());
-
-            PersistentCollectionChangeWorkUnit workUnit = new PersistentCollectionChangeWorkUnit(entityName, verCfg,
-                    newColl, collectionEntry.getRole(), oldColl, event.getAffectedOwnerIdOrNull());
-            verSync.addWorkUnit(workUnit);
-
-            if (workUnit.containsWork()) {
-                // There are some changes: a revision needs also be generated for the collection owner
-                verSync.addWorkUnit(new CollectionChangeWorkUnit(event.getAffectedOwnerEntityName(), verCfg,
-                        event.getAffectedOwnerIdOrNull(), event.getAffectedOwnerOrNull()));
-
-                generateBidirectionalCollectionChangeWorkUnits(verSync, event, workUnit);
-            }
-        }
-    }
-
-    private CollectionEntry getCollectionEntry(AbstractCollectionEvent event) {
-        return event.getSession().getPersistenceContext().getCollectionEntry(event.getCollection());
-    }
-
-    public void onPreUpdateCollection(PreCollectionUpdateEvent event) {
-        CollectionEntry collectionEntry = getCollectionEntry(event);
-        onCollectionAction(event, event.getCollection(), collectionEntry.getSnapshot(), collectionEntry);
-    }
-
-    public void onPreRemoveCollection(PreCollectionRemoveEvent event) {
-        CollectionEntry collectionEntry = getCollectionEntry(event);
-        onCollectionAction(event, null, collectionEntry.getSnapshot(), collectionEntry);
-    }
-
-    public void onPostRecreateCollection(PostCollectionRecreateEvent event) {
-        onCollectionAction(event, event.getCollection(), null, getCollectionEntry(event));
-    }
-
-    @SuppressWarnings({"unchecked"})
-    public void initialize(Configuration cfg) {
-        verCfg = AuditConfiguration.getFor(cfg);
-    }
-
-    public AuditConfiguration getVerCfg() {
-        return verCfg;
-    }
-}

Modified: core/trunk/envers/src/main/java/org/hibernate/envers/exception/AuditException.java
===================================================================
--- core/trunk/envers/src/main/java/org/hibernate/envers/exception/AuditException.java	2008-11-04 21:46:12 UTC (rev 15505)
+++ core/trunk/envers/src/main/java/org/hibernate/envers/exception/AuditException.java	2008-11-04 22:11:07 UTC (rev 15506)
@@ -23,12 +23,12 @@
  */
 package org.hibernate.envers.exception;
 
-import org.hibernate.HibernateException;
+import org.jboss.envers.exception.VersionsException;
 
 /**
  * @author Adam Warski (adam at warski dot org)
  */
-public class AuditException extends HibernateException {
+public class AuditException extends VersionsException {
     public AuditException(String message) {
         super(message);
     }

Copied: core/trunk/envers/src/main/java/org/hibernate/envers/exception/NotAuditedException.java (from rev 15501, core/trunk/envers/src/main/java/org/hibernate/envers/exception/NotVersionedException.java)
===================================================================
--- core/trunk/envers/src/main/java/org/hibernate/envers/exception/NotAuditedException.java	                        (rev 0)
+++ core/trunk/envers/src/main/java/org/hibernate/envers/exception/NotAuditedException.java	2008-11-04 22:11:07 UTC (rev 15506)
@@ -0,0 +1,35 @@
+/*
+ * Hibernate, Relational Persistence for Idiomatic Java
+ *
+ * Copyright (c) 2008, Red Hat Middleware LLC or third-party contributors as
+ * indicated by the @author tags or express copyright attribution
+ * statements applied by the authors.  All third-party contributions are
+ * distributed under license by Red Hat Middleware LLC.
+ *
+ * This copyrighted material is made available to anyone wishing to use, modify,
+ * copy, or redistribute it subject to the terms and conditions of the GNU
+ * Lesser General Public License, as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License
+ * for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this distribution; if not, write to:
+ * Free Software Foundation, Inc.
+ * 51 Franklin Street, Fifth Floor
+ * Boston, MA  02110-1301  USA
+ */
+package org.hibernate.envers.exception;
+
+import org.jboss.envers.exception.NotVersionedException;
+
+/**
+ * @author Adam Warski (adam at warski dot org)
+ */
+public class NotAuditedException extends NotVersionedException {
+    public NotAuditedException(String entityName, String message) {
+        super(entityName, message);
+    }
+}

Deleted: core/trunk/envers/src/main/java/org/hibernate/envers/exception/NotVersionedException.java
===================================================================
--- core/trunk/envers/src/main/java/org/hibernate/envers/exception/NotVersionedException.java	2008-11-04 21:46:12 UTC (rev 15505)
+++ core/trunk/envers/src/main/java/org/hibernate/envers/exception/NotVersionedException.java	2008-11-04 22:11:07 UTC (rev 15506)
@@ -1,40 +0,0 @@
-/*
- * Hibernate, Relational Persistence for Idiomatic Java
- *
- * Copyright (c) 2008, Red Hat Middleware LLC or third-party contributors as
- * indicated by the @author tags or express copyright attribution
- * statements applied by the authors.  All third-party contributions are
- * distributed under license by Red Hat Middleware LLC.
- *
- * This copyrighted material is made available to anyone wishing to use, modify,
- * copy, or redistribute it subject to the terms and conditions of the GNU
- * Lesser General Public License, as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
- * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License
- * for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this distribution; if not, write to:
- * Free Software Foundation, Inc.
- * 51 Franklin Street, Fifth Floor
- * Boston, MA  02110-1301  USA
- */
-package org.hibernate.envers.exception;
-
-/**
- * @author Adam Warski (adam at warski dot org)
- */
-public class NotVersionedException extends AuditException {
-    private final String entityName;
-
-    public NotVersionedException(String entityName, String message) {
-        super(message);
-        this.entityName = entityName;        
-    }
-
-    public String getEntityName() {
-        return entityName;
-    }
-}

Modified: core/trunk/envers/src/main/java/org/hibernate/envers/exception/RevisionDoesNotExistException.java
===================================================================
--- core/trunk/envers/src/main/java/org/hibernate/envers/exception/RevisionDoesNotExistException.java	2008-11-04 21:46:12 UTC (rev 15505)
+++ core/trunk/envers/src/main/java/org/hibernate/envers/exception/RevisionDoesNotExistException.java	2008-11-04 22:11:07 UTC (rev 15506)
@@ -28,25 +28,12 @@
 /**
  * @author Adam Warski (adam at warski dot org)
  */
-public class RevisionDoesNotExistException extends AuditException {
-    private Number revision;
-    private Date date;
-
+public class RevisionDoesNotExistException extends org.jboss.envers.exception.RevisionDoesNotExistException {
     public RevisionDoesNotExistException(Number revision) {
-        super("Revision " + revision + " does not exist.");
-        this.revision = revision;
+        super(revision);
     }
 
     public RevisionDoesNotExistException(Date date) {
-        super("There is no revision before or at " + date + ".");
-        this.date = date;
+        super(date);
     }
-
-    public Number getRevision() {
-        return revision;
-    }
-
-    public Date getDate() {
-        return date;
-    }
 }

Modified: core/trunk/envers/src/main/java/org/hibernate/envers/query/AuditQueryCreator.java
===================================================================
--- core/trunk/envers/src/main/java/org/hibernate/envers/query/AuditQueryCreator.java	2008-11-04 21:46:12 UTC (rev 15505)
+++ core/trunk/envers/src/main/java/org/hibernate/envers/query/AuditQueryCreator.java	2008-11-04 22:11:07 UTC (rev 15506)
@@ -34,12 +34,12 @@
  * @author Adam Warski (adam at warski dot org)
  */
 public class AuditQueryCreator {
-    private final AuditConfiguration verCfg;
-    private final AuditReaderImplementor versionsReaderImplementor;
+    private final AuditConfiguration auditCfg;
+    private final AuditReaderImplementor auditReaderImplementor;
 
-    public AuditQueryCreator(AuditConfiguration verCfg, AuditReaderImplementor versionsReaderImplementor) {
-        this.verCfg = verCfg;
-        this.versionsReaderImplementor = versionsReaderImplementor;
+    public AuditQueryCreator(AuditConfiguration auditCfg, AuditReaderImplementor auditReaderImplementor) {
+        this.auditCfg = auditCfg;
+        this.auditReaderImplementor = auditReaderImplementor;
     }
 
     /**
@@ -54,7 +54,7 @@
     public AuditQuery forEntitiesAtRevision(Class<?> c, Number revision) {
         checkNotNull(revision, "Entity revision");
         checkPositive(revision, "Entity revision");
-        return new EntitiesAtRevisionQuery(verCfg, versionsReaderImplementor, c, revision);
+        return new EntitiesAtRevisionQuery(auditCfg, auditReaderImplementor, c, revision);
     }
 
     /**
@@ -78,6 +78,6 @@
      * unless an order or projection is added.
      */
     public AuditQuery forRevisionsOfEntity(Class<?> c, boolean selectEntitiesOnly, boolean selectDeletedEntities) {
-        return new RevisionsOfEntityQuery(verCfg, versionsReaderImplementor, c, selectEntitiesOnly,selectDeletedEntities);
+        return new RevisionsOfEntityQuery(auditCfg, auditReaderImplementor, c, selectEntitiesOnly,selectDeletedEntities);
     }
 }

Copied: core/trunk/envers/src/main/java/org/hibernate/envers/query/impl/AbstractAuditQuery.java (from rev 15501, core/trunk/envers/src/main/java/org/hibernate/envers/query/impl/AbstractVersionsQuery.java)
===================================================================
--- core/trunk/envers/src/main/java/org/hibernate/envers/query/impl/AbstractAuditQuery.java	                        (rev 0)
+++ core/trunk/envers/src/main/java/org/hibernate/envers/query/impl/AbstractAuditQuery.java	2008-11-04 22:11:07 UTC (rev 15506)
@@ -0,0 +1,216 @@
+/*
+ * Hibernate, Relational Persistence for Idiomatic Java
+ *
+ * Copyright (c) 2008, Red Hat Middleware LLC or third-party contributors as
+ * indicated by the @author tags or express copyright attribution
+ * statements applied by the authors.  All third-party contributions are
+ * distributed under license by Red Hat Middleware LLC.
+ *
+ * This copyrighted material is made available to anyone wishing to use, modify,
+ * copy, or redistribute it subject to the terms and conditions of the GNU
+ * Lesser General Public License, as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License
+ * for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this distribution; if not, write to:
+ * Free Software Foundation, Inc.
+ * 51 Franklin Street, Fifth Floor
+ * Boston, MA  02110-1301  USA
+ */
+package org.hibernate.envers.query.impl;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import javax.persistence.NoResultException;
+import javax.persistence.NonUniqueResultException;
+
+import org.hibernate.envers.configuration.AuditConfiguration;
+import org.hibernate.envers.entities.EntityInstantiator;
+import org.hibernate.envers.exception.AuditException;
+import org.hibernate.envers.query.AuditQuery;
+import org.hibernate.envers.query.criteria.AuditCriterion;
+import org.hibernate.envers.query.order.AuditOrder;
+import org.hibernate.envers.query.projection.AuditProjection;
+import org.hibernate.envers.reader.AuditReaderImplementor;
+import org.hibernate.envers.tools.Pair;
+import org.hibernate.envers.tools.Triple;
+import org.hibernate.envers.tools.query.QueryBuilder;
+
+import org.hibernate.CacheMode;
+import org.hibernate.FlushMode;
+import org.hibernate.LockMode;
+import org.hibernate.Query;
+
+/**
+ * @author Adam Warski (adam at warski dot org)
+ */
+public abstract class AbstractAuditQuery implements AuditQuery {
+    protected EntityInstantiator entityInstantiator;
+    protected List<AuditCriterion> criterions;
+
+    protected String entityName;
+    protected String versionsEntityName;
+    protected QueryBuilder qb;
+
+    protected boolean hasProjection;
+    protected boolean hasOrder;
+
+    protected final AuditConfiguration verCfg;
+    private final AuditReaderImplementor versionsReader;
+
+    protected AbstractAuditQuery(AuditConfiguration verCfg, AuditReaderImplementor versionsReader,
+                                    Class<?> cls) {
+        this.verCfg = verCfg;
+        this.versionsReader = versionsReader;
+
+        criterions = new ArrayList<AuditCriterion>();
+        entityInstantiator = new EntityInstantiator(verCfg, versionsReader);
+
+        entityName = cls.getName();
+        versionsEntityName = verCfg.getAuditEntCfg().getVersionsEntityName(entityName);
+
+        qb = new QueryBuilder(versionsEntityName, "e");
+    }
+
+    protected List buildAndExecuteQuery() {
+        StringBuilder querySb = new StringBuilder();
+        Map<String, Object> queryParamValues = new HashMap<String, Object>();
+
+        qb.build(querySb, queryParamValues);
+
+        Query query = versionsReader.getSession().createQuery(querySb.toString());
+        for (Map.Entry<String, Object> paramValue : queryParamValues.entrySet()) {
+            query.setParameter(paramValue.getKey(), paramValue.getValue());
+        }
+
+        setQueryProperties(query);
+
+        return query.list();
+    }
+
+    public abstract List list() throws AuditException;
+
+    public List getResultList() throws AuditException {
+        return list();
+    }
+
+    public Object getSingleResult() throws AuditException, NonUniqueResultException, NoResultException {
+        List result = list();
+
+        if (result == null || result.size() == 0) {
+            throw new NoResultException();
+        }
+
+        if (result.size() > 1) {
+            throw new NonUniqueResultException();
+        }
+
+        return result.get(0);
+    }
+
+    public AuditQuery add(AuditCriterion criterion) {
+        criterions.add(criterion);
+        return this;
+    }
+
+    // Projection and order
+
+    public AuditQuery addProjection(String function, String propertyName) {
+        hasProjection = true;
+        qb.addProjection(function, propertyName, false);
+        return this;
+    }
+
+    public AuditQuery addProjection(AuditProjection projection) {
+        Triple<String, String, Boolean> projectionData = projection.getData(verCfg);
+        hasProjection = true;
+        qb.addProjection(projectionData.getFirst(), projectionData.getSecond(), projectionData.getThird());
+        return this;
+    }
+
+    public AuditQuery addOrder(String propertyName, boolean asc) {
+        hasOrder = true;
+        qb.addOrder(propertyName, asc);
+        return this;
+    }
+
+    public AuditQuery addOrder(AuditOrder order) {
+        Pair<String, Boolean> orderData = order.getData(verCfg);
+        return addOrder(orderData.getFirst(), orderData.getSecond());
+    }
+
+    // Query properties
+
+    private Integer maxResults;
+    private Integer firstResult;
+    private Boolean cacheable;
+    private String cacheRegion;
+    private String comment;
+    private FlushMode flushMode;
+    private CacheMode cacheMode;
+    private Integer timeout;
+    private LockMode lockMode;
+
+    public AuditQuery setMaxResults(int maxResults) {
+        this.maxResults = maxResults;
+        return this;
+    }
+
+    public AuditQuery setFirstResult(int firstResult) {
+        this.firstResult = firstResult;
+        return this;
+    }
+
+    public AuditQuery setCacheable(boolean cacheable) {
+        this.cacheable = cacheable;
+        return this;
+    }
+
+    public AuditQuery setCacheRegion(String cacheRegion) {
+        this.cacheRegion = cacheRegion;
+        return this;
+    }
+
+    public AuditQuery setComment(String comment) {
+        this.comment = comment;
+        return this;
+    }
+
+    public AuditQuery setFlushMode(FlushMode flushMode) {
+        this.flushMode = flushMode;
+        return this;
+    }
+
+    public AuditQuery setCacheMode(CacheMode cacheMode) {
+        this.cacheMode = cacheMode;
+        return this;
+    }
+
+    public AuditQuery setTimeout(int timeout) {
+        this.timeout = timeout;
+        return this;
+    }
+
+    public AuditQuery setLockMode(LockMode lockMode) {
+        this.lockMode = lockMode;
+        return this;
+    }
+
+    protected void setQueryProperties(Query query) {
+        if (maxResults != null) query.setMaxResults(maxResults);
+        if (firstResult != null) query.setFirstResult(firstResult);
+        if (cacheable != null) query.setCacheable(cacheable);
+        if (cacheRegion != null) query.setCacheRegion(cacheRegion);
+        if (comment != null) query.setComment(comment);
+        if (flushMode != null) query.setFlushMode(flushMode);
+        if (cacheMode != null) query.setCacheMode(cacheMode);
+        if (timeout != null) query.setTimeout(timeout);
+        if (lockMode != null) query.setLockMode("e", lockMode);
+    }
+}

Deleted: core/trunk/envers/src/main/java/org/hibernate/envers/query/impl/AbstractVersionsQuery.java
===================================================================
--- core/trunk/envers/src/main/java/org/hibernate/envers/query/impl/AbstractVersionsQuery.java	2008-11-04 21:46:12 UTC (rev 15505)
+++ core/trunk/envers/src/main/java/org/hibernate/envers/query/impl/AbstractVersionsQuery.java	2008-11-04 22:11:07 UTC (rev 15506)
@@ -1,216 +0,0 @@
-/*
- * Hibernate, Relational Persistence for Idiomatic Java
- *
- * Copyright (c) 2008, Red Hat Middleware LLC or third-party contributors as
- * indicated by the @author tags or express copyright attribution
- * statements applied by the authors.  All third-party contributions are
- * distributed under license by Red Hat Middleware LLC.
- *
- * This copyrighted material is made available to anyone wishing to use, modify,
- * copy, or redistribute it subject to the terms and conditions of the GNU
- * Lesser General Public License, as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
- * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License
- * for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this distribution; if not, write to:
- * Free Software Foundation, Inc.
- * 51 Franklin Street, Fifth Floor
- * Boston, MA  02110-1301  USA
- */
-package org.hibernate.envers.query.impl;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import javax.persistence.NoResultException;
-import javax.persistence.NonUniqueResultException;
-
-import org.hibernate.envers.configuration.AuditConfiguration;
-import org.hibernate.envers.entities.EntityInstantiator;
-import org.hibernate.envers.exception.AuditException;
-import org.hibernate.envers.query.AuditQuery;
-import org.hibernate.envers.query.criteria.AuditCriterion;
-import org.hibernate.envers.query.order.AuditOrder;
-import org.hibernate.envers.query.projection.AuditProjection;
-import org.hibernate.envers.reader.AuditReaderImplementor;
-import org.hibernate.envers.tools.Pair;
-import org.hibernate.envers.tools.Triple;
-import org.hibernate.envers.tools.query.QueryBuilder;
-
-import org.hibernate.CacheMode;
-import org.hibernate.FlushMode;
-import org.hibernate.LockMode;
-import org.hibernate.Query;
-
-/**
- * @author Adam Warski (adam at warski dot org)
- */
-public abstract class AbstractVersionsQuery implements AuditQuery {
-    protected EntityInstantiator entityInstantiator;
-    protected List<AuditCriterion> criterions;
-
-    protected String entityName;
-    protected String versionsEntityName;
-    protected QueryBuilder qb;
-
-    protected boolean hasProjection;
-    protected boolean hasOrder;
-
-    protected final AuditConfiguration verCfg;
-    private final AuditReaderImplementor versionsReader;
-
-    protected AbstractVersionsQuery(AuditConfiguration verCfg, AuditReaderImplementor versionsReader,
-                                    Class<?> cls) {
-        this.verCfg = verCfg;
-        this.versionsReader = versionsReader;
-
-        criterions = new ArrayList<AuditCriterion>();
-        entityInstantiator = new EntityInstantiator(verCfg, versionsReader);
-
-        entityName = cls.getName();
-        versionsEntityName = verCfg.getAuditEntCfg().getVersionsEntityName(entityName);
-
-        qb = new QueryBuilder(versionsEntityName, "e");
-    }
-
-    protected List buildAndExecuteQuery() {
-        StringBuilder querySb = new StringBuilder();
-        Map<String, Object> queryParamValues = new HashMap<String, Object>();
-
-        qb.build(querySb, queryParamValues);
-
-        Query query = versionsReader.getSession().createQuery(querySb.toString());
-        for (Map.Entry<String, Object> paramValue : queryParamValues.entrySet()) {
-            query.setParameter(paramValue.getKey(), paramValue.getValue());
-        }
-
-        setQueryProperties(query);
-
-        return query.list();
-    }
-
-    public abstract List list() throws AuditException;
-
-    public List getResultList() throws AuditException {
-        return list();
-    }
-
-    public Object getSingleResult() throws AuditException, NonUniqueResultException, NoResultException {
-        List result = list();
-
-        if (result == null || result.size() == 0) {
-            throw new NoResultException();
-        }
-
-        if (result.size() > 1) {
-            throw new NonUniqueResultException();
-        }
-
-        return result.get(0);
-    }
-
-    public AuditQuery add(AuditCriterion criterion) {
-        criterions.add(criterion);
-        return this;
-    }
-
-    // Projection and order
-
-    public AuditQuery addProjection(String function, String propertyName) {
-        hasProjection = true;
-        qb.addProjection(function, propertyName, false);
-        return this;
-    }
-
-    public AuditQuery addProjection(AuditProjection projection) {
-        Triple<String, String, Boolean> projectionData = projection.getData(verCfg);
-        hasProjection = true;
-        qb.addProjection(projectionData.getFirst(), projectionData.getSecond(), projectionData.getThird());
-        return this;
-    }
-
-    public AuditQuery addOrder(String propertyName, boolean asc) {
-        hasOrder = true;
-        qb.addOrder(propertyName, asc);
-        return this;
-    }
-
-    public AuditQuery addOrder(AuditOrder order) {
-        Pair<String, Boolean> orderData = order.getData(verCfg);
-        return addOrder(orderData.getFirst(), orderData.getSecond());
-    }
-
-    // Query properties
-
-    private Integer maxResults;
-    private Integer firstResult;
-    private Boolean cacheable;
-    private String cacheRegion;
-    private String comment;
-    private FlushMode flushMode;
-    private CacheMode cacheMode;
-    private Integer timeout;
-    private LockMode lockMode;
-
-    public AuditQuery setMaxResults(int maxResults) {
-        this.maxResults = maxResults;
-        return this;
-    }
-
-    public AuditQuery setFirstResult(int firstResult) {
-        this.firstResult = firstResult;
-        return this;
-    }
-
-    public AuditQuery setCacheable(boolean cacheable) {
-        this.cacheable = cacheable;
-        return this;
-    }
-
-    public AuditQuery setCacheRegion(String cacheRegion) {
-        this.cacheRegion = cacheRegion;
-        return this;
-    }
-
-    public AuditQuery setComment(String comment) {
-        this.comment = comment;
-        return this;
-    }
-
-    public AuditQuery setFlushMode(FlushMode flushMode) {
-        this.flushMode = flushMode;
-        return this;
-    }
-
-    public AuditQuery setCacheMode(CacheMode cacheMode) {
-        this.cacheMode = cacheMode;
-        return this;
-    }
-
-    public AuditQuery setTimeout(int timeout) {
-        this.timeout = timeout;
-        return this;
-    }
-
-    public AuditQuery setLockMode(LockMode lockMode) {
-        this.lockMode = lockMode;
-        return this;
-    }
-
-    protected void setQueryProperties(Query query) {
-        if (maxResults != null) query.setMaxResults(maxResults);
-        if (firstResult != null) query.setFirstResult(firstResult);
-        if (cacheable != null) query.setCacheable(cacheable);
-        if (cacheRegion != null) query.setCacheRegion(cacheRegion);
-        if (comment != null) query.setComment(comment);
-        if (flushMode != null) query.setFlushMode(flushMode);
-        if (cacheMode != null) query.setCacheMode(cacheMode);
-        if (timeout != null) query.setTimeout(timeout);
-        if (lockMode != null) query.setLockMode("e", lockMode);
-    }
-}

Modified: core/trunk/envers/src/main/java/org/hibernate/envers/query/impl/EntitiesAtRevisionQuery.java
===================================================================
--- core/trunk/envers/src/main/java/org/hibernate/envers/query/impl/EntitiesAtRevisionQuery.java	2008-11-04 21:46:12 UTC (rev 15505)
+++ core/trunk/envers/src/main/java/org/hibernate/envers/query/impl/EntitiesAtRevisionQuery.java	2008-11-04 22:11:07 UTC (rev 15506)
@@ -36,7 +36,7 @@
 /**
  * @author Adam Warski (adam at warski dot org)
  */
-public class EntitiesAtRevisionQuery extends AbstractVersionsQuery {
+public class EntitiesAtRevisionQuery extends AbstractAuditQuery {
     private final Number revision;
 
     public EntitiesAtRevisionQuery(AuditConfiguration verCfg,

Modified: core/trunk/envers/src/main/java/org/hibernate/envers/query/impl/RevisionsOfEntityQuery.java
===================================================================
--- core/trunk/envers/src/main/java/org/hibernate/envers/query/impl/RevisionsOfEntityQuery.java	2008-11-04 21:46:12 UTC (rev 15505)
+++ core/trunk/envers/src/main/java/org/hibernate/envers/query/impl/RevisionsOfEntityQuery.java	2008-11-04 22:11:07 UTC (rev 15506)
@@ -39,7 +39,7 @@
 /**
  * @author Adam Warski (adam at warski dot org)
  */
-public class RevisionsOfEntityQuery extends AbstractVersionsQuery {
+public class RevisionsOfEntityQuery extends AbstractAuditQuery {
     private final boolean selectEntitiesOnly;
     private final boolean selectDeletedEntities;
 

Modified: core/trunk/envers/src/main/java/org/hibernate/envers/reader/AuditReaderImpl.java
===================================================================
--- core/trunk/envers/src/main/java/org/hibernate/envers/reader/AuditReaderImpl.java	2008-11-04 21:46:12 UTC (rev 15505)
+++ core/trunk/envers/src/main/java/org/hibernate/envers/reader/AuditReaderImpl.java	2008-11-04 22:11:07 UTC (rev 15506)
@@ -28,11 +28,10 @@
 import javax.persistence.NoResultException;
 
 import org.hibernate.envers.configuration.AuditConfiguration;
-import org.hibernate.envers.exception.NotVersionedException;
+import org.hibernate.envers.exception.NotAuditedException;
 import org.hibernate.envers.exception.RevisionDoesNotExistException;
 import org.hibernate.envers.exception.AuditException;
 import org.hibernate.envers.query.RevisionProperty;
-import org.hibernate.envers.query.AuditQueryCreator;
 import org.hibernate.envers.query.AuditRestrictions;
 import static org.hibernate.envers.tools.ArgumentsTools.checkNotNull;
 import static org.hibernate.envers.tools.ArgumentsTools.checkPositive;
@@ -41,6 +40,7 @@
 import org.hibernate.Query;
 import org.hibernate.Session;
 import org.hibernate.engine.SessionImplementor;
+import org.jboss.envers.query.VersionsQueryCreator;
 
 /**
  * @author Adam Warski (adam at warski dot org)
@@ -80,7 +80,7 @@
 
     @SuppressWarnings({"unchecked"})
     public <T> T find(Class<T> cls, Object primaryKey, Number revision) throws
-            IllegalArgumentException, NotVersionedException, IllegalStateException {
+            IllegalArgumentException, NotAuditedException, IllegalStateException {
         checkNotNull(cls, "Entity class");
         checkNotNull(primaryKey, "Primary key");
         checkNotNull(revision, "Entity revision");
@@ -90,7 +90,7 @@
         String entityName = cls.getName();
 
         if (!verCfg.getEntCfg().isVersioned(entityName)) {
-            throw new NotVersionedException(entityName, entityName + " is not versioned!");
+            throw new NotAuditedException(entityName, entityName + " is not versioned!");
         }
 
         if (firstLevelCache.contains(entityName, revision, primaryKey)) {
@@ -113,7 +113,7 @@
 
     @SuppressWarnings({"unchecked"})
     public List<Number> getRevisions(Class<?> cls, Object primaryKey)
-            throws IllegalArgumentException, NotVersionedException, IllegalStateException {
+            throws IllegalArgumentException, NotAuditedException, IllegalStateException {
         // todo: if a class is not versioned from the beginning, there's a missing ADD rev - what then?
         checkNotNull(cls, "Entity class");
         checkNotNull(primaryKey, "Primary key");
@@ -122,7 +122,7 @@
         String entityName = cls.getName();
 
         if (!verCfg.getEntCfg().isVersioned(entityName)) {
-            throw new NotVersionedException(entityName, entityName + " is not versioned!");
+            throw new NotAuditedException(entityName, entityName + " is not versioned!");
         }
 
         return createQuery().forRevisionsOfEntity(cls, false, true)
@@ -191,7 +191,7 @@
         }
     }
 
-    public AuditQueryCreator createQuery() {
-        return new AuditQueryCreator(verCfg, this);
+    public VersionsQueryCreator createQuery() {
+        return new VersionsQueryCreator(verCfg, this);
     }
 }

Modified: core/trunk/envers/src/main/java/org/hibernate/envers/reader/AuditReaderImplementor.java
===================================================================
--- core/trunk/envers/src/main/java/org/hibernate/envers/reader/AuditReaderImplementor.java	2008-11-04 21:46:12 UTC (rev 15505)
+++ core/trunk/envers/src/main/java/org/hibernate/envers/reader/AuditReaderImplementor.java	2008-11-04 22:11:07 UTC (rev 15506)
@@ -27,12 +27,13 @@
 
 import org.hibernate.Session;
 import org.hibernate.engine.SessionImplementor;
+import org.jboss.envers.VersionsReader;
 
 /**
  * An interface exposed by a VersionsReader to library-facing classes.
  * @author Adam Warski (adam at warski dot org)
  */
-public interface AuditReaderImplementor extends AuditReader {
+public interface AuditReaderImplementor extends AuditReader, VersionsReader {
     SessionImplementor getSessionImplementor();
     Session getSession();
     FirstLevelCache getFirstLevelCache();

Copied: core/trunk/envers/src/main/java/org/jboss/envers/ModificationStore.java (from rev 15501, core/trunk/envers/src/main/java/org/hibernate/envers/ModificationStore.java)
===================================================================
--- core/trunk/envers/src/main/java/org/jboss/envers/ModificationStore.java	                        (rev 0)
+++ core/trunk/envers/src/main/java/org/jboss/envers/ModificationStore.java	2008-11-04 22:11:07 UTC (rev 15506)
@@ -0,0 +1,34 @@
+/*
+ * Hibernate, Relational Persistence for Idiomatic Java
+ *
+ * Copyright (c) 2008, Red Hat Middleware LLC or third-party contributors as
+ * indicated by the @author tags or express copyright attribution
+ * statements applied by the authors.  All third-party contributions are
+ * distributed under license by Red Hat Middleware LLC.
+ *
+ * This copyrighted material is made available to anyone wishing to use, modify,
+ * copy, or redistribute it subject to the terms and conditions of the GNU
+ * Lesser General Public License, as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License
+ * for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this distribution; if not, write to:
+ * Free Software Foundation, Inc.
+ * 51 Franklin Street, Fifth Floor
+ * Boston, MA  02110-1301  USA
+ */
+
+package org.jboss.envers;
+
+/**
+ * @see org.hibernate.envers.ModificationStore
+ * @deprecated
+ * @author Adam Warski (adam at warski dot org)
+ */
+public enum ModificationStore {
+    FULL
+}
\ No newline at end of file


Property changes on: core/trunk/envers/src/main/java/org/jboss/envers/ModificationStore.java
___________________________________________________________________
Name: svn:mergeinfo
   + 

Copied: core/trunk/envers/src/main/java/org/jboss/envers/Versioned.java (from rev 15501, core/trunk/envers/src/main/java/org/hibernate/envers/Audited.java)
===================================================================
--- core/trunk/envers/src/main/java/org/jboss/envers/Versioned.java	                        (rev 0)
+++ core/trunk/envers/src/main/java/org/jboss/envers/Versioned.java	2008-11-04 22:11:07 UTC (rev 15506)
@@ -0,0 +1,41 @@
+/*
+ * Hibernate, Relational Persistence for Idiomatic Java
+ *
+ * Copyright (c) 2008, Red Hat Middleware LLC or third-party contributors as
+ * indicated by the @author tags or express copyright attribution
+ * statements applied by the authors.  All third-party contributions are
+ * distributed under license by Red Hat Middleware LLC.
+ *
+ * This copyrighted material is made available to anyone wishing to use, modify,
+ * copy, or redistribute it subject to the terms and conditions of the GNU
+ * Lesser General Public License, as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License
+ * for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this distribution; if not, write to:
+ * Free Software Foundation, Inc.
+ * 51 Franklin Street, Fifth Floor
+ * Boston, MA  02110-1301  USA
+ */
+
+package org.jboss.envers;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * @see org.hibernate.envers.Audited
+ * @deprecated
+ * @author Adam Warski (adam at warski dot org)
+ */
+ at Retention(RetentionPolicy.RUNTIME)
+ at Target({ElementType.TYPE, ElementType.METHOD, ElementType.FIELD})
+public @interface Versioned {
+    public abstract ModificationStore modStore()    default ModificationStore.FULL;
+}
\ No newline at end of file


Property changes on: core/trunk/envers/src/main/java/org/jboss/envers/Versioned.java
___________________________________________________________________
Name: svn:mergeinfo
   + 

Copied: core/trunk/envers/src/main/java/org/jboss/envers/VersionsReader.java (from rev 15501, core/trunk/envers/src/main/java/org/hibernate/envers/AuditReader.java)
===================================================================
--- core/trunk/envers/src/main/java/org/jboss/envers/VersionsReader.java	                        (rev 0)
+++ core/trunk/envers/src/main/java/org/jboss/envers/VersionsReader.java	2008-11-04 22:11:07 UTC (rev 15506)
@@ -0,0 +1,57 @@
+/*
+ * Hibernate, Relational Persistence for Idiomatic Java
+ *
+ * Copyright (c) 2008, Red Hat Middleware LLC or third-party contributors as
+ * indicated by the @author tags or express copyright attribution
+ * statements applied by the authors.  All third-party contributions are
+ * distributed under license by Red Hat Middleware LLC.
+ *
+ * This copyrighted material is made available to anyone wishing to use, modify,
+ * copy, or redistribute it subject to the terms and conditions of the GNU
+ * Lesser General Public License, as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License
+ * for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this distribution; if not, write to:
+ * Free Software Foundation, Inc.
+ * 51 Franklin Street, Fifth Floor
+ * Boston, MA  02110-1301  USA
+ */
+
+package org.jboss.envers;
+
+import org.hibernate.envers.AuditReader;
+import org.jboss.envers.query.VersionsQueryCreator;
+import org.jboss.envers.exception.NotVersionedException;
+import org.jboss.envers.exception.RevisionDoesNotExistException;
+
+import java.util.List;
+import java.util.Date;
+
+/**
+ * @see org.hibernate.envers.AuditReader
+ * @deprecated
+ * @author Adam Warski (adam at warski dot org)
+ */
+public interface VersionsReader extends AuditReader {
+    <T> T find(Class<T> cls, Object primaryKey, Number revision) throws
+            IllegalArgumentException, NotVersionedException, IllegalStateException;
+
+    List<Number> getRevisions(Class<?> cls, Object primaryKey)
+            throws IllegalArgumentException, NotVersionedException, IllegalStateException;
+
+    Date getRevisionDate(Number revision) throws IllegalArgumentException, RevisionDoesNotExistException,
+            IllegalStateException;
+
+    Number getRevisionNumberForDate(Date date) throws IllegalStateException, RevisionDoesNotExistException,
+            IllegalArgumentException;
+
+    <T> T findRevision(Class<T> revisionEntityClass, Number revision) throws IllegalArgumentException,
+            RevisionDoesNotExistException, IllegalStateException;
+
+    VersionsQueryCreator createQuery();
+}
\ No newline at end of file


Property changes on: core/trunk/envers/src/main/java/org/jboss/envers/VersionsReader.java
___________________________________________________________________
Name: svn:mergeinfo
   + 

Copied: core/trunk/envers/src/main/java/org/jboss/envers/VersionsReaderFactory.java (from rev 15501, core/trunk/envers/src/main/java/org/hibernate/envers/AuditReaderFactory.java)
===================================================================
--- core/trunk/envers/src/main/java/org/jboss/envers/VersionsReaderFactory.java	                        (rev 0)
+++ core/trunk/envers/src/main/java/org/jboss/envers/VersionsReaderFactory.java	2008-11-04 22:11:07 UTC (rev 15506)
@@ -0,0 +1,96 @@
+/*
+ * Hibernate, Relational Persistence for Idiomatic Java
+ *
+ * Copyright (c) 2008, Red Hat Middleware LLC or third-party contributors as
+ * indicated by the @author tags or express copyright attribution
+ * statements applied by the authors.  All third-party contributions are
+ * distributed under license by Red Hat Middleware LLC.
+ *
+ * This copyrighted material is made available to anyone wishing to use, modify,
+ * copy, or redistribute it subject to the terms and conditions of the GNU
+ * Lesser General Public License, as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License
+ * for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this distribution; if not, write to:
+ * Free Software Foundation, Inc.
+ * 51 Franklin Street, Fifth Floor
+ * Boston, MA  02110-1301  USA
+ */
+
+package org.jboss.envers;
+
+import javax.persistence.EntityManager;
+
+import org.hibernate.envers.event.AuditEventListener;
+import org.hibernate.envers.reader.AuditReaderImpl;
+import static org.hibernate.envers.tools.ArraysTools.arrayIncludesInstanceOf;
+
+import org.hibernate.Session;
+import org.hibernate.engine.SessionImplementor;
+import org.hibernate.event.EventListeners;
+import org.hibernate.event.PostInsertEventListener;
+import org.jboss.envers.exception.VersionsException;
+
+/**
+ * @see org.hibernate.envers.AuditReaderFactory
+ * @deprecated
+ * @author Adam Warski (adam at warski dot org)
+ */
+public class VersionsReaderFactory {
+    private VersionsReaderFactory() { }
+
+    /**
+     * Create a versions reader associated with an open session.
+     * <b>WARNING:</b> Using Envers with Hibernate (not with Hibernate Entity Manager/JPA) is experimental,
+     * if possible, use {@link VersionsReaderFactory#get(javax.persistence.EntityManager)}.
+     * @param session An open session.
+     * @return A versions reader associated with the given sesison. It shouldn't be used
+     * after the session is closed.
+     * @throws org.hibernate.envers.exception.AuditException When the given required listeners aren't installed.
+     */
+    public static VersionsReader get(Session session) throws VersionsException {
+        SessionImplementor sessionImpl = (SessionImplementor) session;
+
+        EventListeners listeners = sessionImpl.getListeners();
+
+        for (PostInsertEventListener listener : listeners.getPostInsertEventListeners()) {
+            if (listener instanceof AuditEventListener) {
+                if (arrayIncludesInstanceOf(listeners.getPostUpdateEventListeners(), AuditEventListener.class) &&
+                        arrayIncludesInstanceOf(listeners.getPostDeleteEventListeners(), AuditEventListener.class)) {
+                    return new AuditReaderImpl(((AuditEventListener) listener).getVerCfg(), session,
+                            sessionImpl);
+                }
+            }
+        }
+
+        throw new VersionsException("You need install the org.hibernate.envers.event.VersionsEventListener " +
+                "class as post insert, update and delete event listener.");
+    }
+
+    /**
+     * Create a versions reader associated with an open entity manager.
+     * @param entityManager An open entity manager.
+     * @return A versions reader associated with the given entity manager. It shouldn't be used
+     * after the entity manager is closed.
+     * @throws org.hibernate.envers.exception.AuditException When the given entity manager is not based on Hibernate, or if the required
+     * listeners aren't installed.
+     */
+    public static VersionsReader get(EntityManager entityManager) throws VersionsException {
+        if (entityManager.getDelegate() instanceof Session) {
+            return get((Session) entityManager.getDelegate());
+        }
+
+        if (entityManager.getDelegate() instanceof EntityManager) {
+            if (entityManager.getDelegate() instanceof Session) {
+                return get((Session) entityManager.getDelegate());
+            }
+        }
+
+        throw new VersionsException("Hibernate EntityManager not present!");
+    }
+}
\ No newline at end of file


Property changes on: core/trunk/envers/src/main/java/org/jboss/envers/VersionsReaderFactory.java
___________________________________________________________________
Name: svn:mergeinfo
   + 

Added: core/trunk/envers/src/main/java/org/jboss/envers/event/VersionsEventListener.java
===================================================================
--- core/trunk/envers/src/main/java/org/jboss/envers/event/VersionsEventListener.java	                        (rev 0)
+++ core/trunk/envers/src/main/java/org/jboss/envers/event/VersionsEventListener.java	2008-11-04 22:11:07 UTC (rev 15506)
@@ -0,0 +1,34 @@
+/*
+ * Hibernate, Relational Persistence for Idiomatic Java
+ *
+ * Copyright (c) 2008, Red Hat Middleware LLC or third-party contributors as
+ * indicated by the @author tags or express copyright attribution
+ * statements applied by the authors.  All third-party contributions are
+ * distributed under license by Red Hat Middleware LLC.
+ *
+ * This copyrighted material is made available to anyone wishing to use, modify,
+ * copy, or redistribute it subject to the terms and conditions of the GNU
+ * Lesser General Public License, as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License
+ * for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this distribution; if not, write to:
+ * Free Software Foundation, Inc.
+ * 51 Franklin Street, Fifth Floor
+ * Boston, MA  02110-1301  USA
+ */
+
+package org.jboss.envers.event;
+
+import org.hibernate.envers.event.AuditEventListener;
+
+/**
+ * @see AuditEventListener
+ * @deprecated
+ * @author Adam Warski (adam at warski dot org)
+ */
+public class VersionsEventListener extends AuditEventListener { }
\ No newline at end of file

Copied: core/trunk/envers/src/main/java/org/jboss/envers/exception/NotVersionedException.java (from rev 15501, core/trunk/envers/src/main/java/org/hibernate/envers/exception/NotVersionedException.java)
===================================================================
--- core/trunk/envers/src/main/java/org/jboss/envers/exception/NotVersionedException.java	                        (rev 0)
+++ core/trunk/envers/src/main/java/org/jboss/envers/exception/NotVersionedException.java	2008-11-04 22:11:07 UTC (rev 15506)
@@ -0,0 +1,45 @@
+/*
+ * Hibernate, Relational Persistence for Idiomatic Java
+ *
+ * Copyright (c) 2008, Red Hat Middleware LLC or third-party contributors as
+ * indicated by the @author tags or express copyright attribution
+ * statements applied by the authors.  All third-party contributions are
+ * distributed under license by Red Hat Middleware LLC.
+ *
+ * This copyrighted material is made available to anyone wishing to use, modify,
+ * copy, or redistribute it subject to the terms and conditions of the GNU
+ * Lesser General Public License, as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License
+ * for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this distribution; if not, write to:
+ * Free Software Foundation, Inc.
+ * 51 Franklin Street, Fifth Floor
+ * Boston, MA  02110-1301  USA
+ */
+
+package org.jboss.envers.exception;
+
+import org.hibernate.envers.exception.AuditException;
+
+/**
+ * @see org.hibernate.envers.exception.NotAuditedException
+ * @deprecated
+ * @author Adam Warski (adam at warski dot org)
+ */
+public class NotVersionedException extends VersionsException {
+    private final String entityName;
+
+    public NotVersionedException(String entityName, String message) {
+        super(message);
+        this.entityName = entityName;
+    }
+
+    public String getEntityName() {
+        return entityName;
+    }
+}
\ No newline at end of file

Copied: core/trunk/envers/src/main/java/org/jboss/envers/exception/RevisionDoesNotExistException.java (from rev 15501, core/trunk/envers/src/main/java/org/hibernate/envers/exception/RevisionDoesNotExistException.java)
===================================================================
--- core/trunk/envers/src/main/java/org/jboss/envers/exception/RevisionDoesNotExistException.java	                        (rev 0)
+++ core/trunk/envers/src/main/java/org/jboss/envers/exception/RevisionDoesNotExistException.java	2008-11-04 22:11:07 UTC (rev 15506)
@@ -0,0 +1,55 @@
+/*
+ * Hibernate, Relational Persistence for Idiomatic Java
+ *
+ * Copyright (c) 2008, Red Hat Middleware LLC or third-party contributors as
+ * indicated by the @author tags or express copyright attribution
+ * statements applied by the authors.  All third-party contributions are
+ * distributed under license by Red Hat Middleware LLC.
+ *
+ * This copyrighted material is made available to anyone wishing to use, modify,
+ * copy, or redistribute it subject to the terms and conditions of the GNU
+ * Lesser General Public License, as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License
+ * for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this distribution; if not, write to:
+ * Free Software Foundation, Inc.
+ * 51 Franklin Street, Fifth Floor
+ * Boston, MA  02110-1301  USA
+ */
+
+package org.jboss.envers.exception;
+
+import java.util.Date;
+
+/**
+ * @see org.hibernate.envers.exception.RevisionDoesNotExistException
+ * @deprecated
+ * @author Adam Warski (adam at warski dot org)
+ */
+public class RevisionDoesNotExistException extends VersionsException {
+    private Number revision;
+    private Date date;
+
+    public RevisionDoesNotExistException(Number revision) {
+        super("Revision " + revision + " does not exist.");
+        this.revision = revision;
+    }
+
+    public RevisionDoesNotExistException(Date date) {
+        super("There is no revision before or at " + date + ".");
+        this.date = date;
+    }
+
+    public Number getRevision() {
+        return revision;
+    }
+
+    public Date getDate() {
+        return date;
+    }
+}
\ No newline at end of file


Property changes on: core/trunk/envers/src/main/java/org/jboss/envers/exception/RevisionDoesNotExistException.java
___________________________________________________________________
Name: svn:mergeinfo
   + 

Copied: core/trunk/envers/src/main/java/org/jboss/envers/exception/VersionsException.java (from rev 15501, core/trunk/envers/src/main/java/org/hibernate/envers/exception/AuditException.java)
===================================================================
--- core/trunk/envers/src/main/java/org/jboss/envers/exception/VersionsException.java	                        (rev 0)
+++ core/trunk/envers/src/main/java/org/jboss/envers/exception/VersionsException.java	2008-11-04 22:11:07 UTC (rev 15506)
@@ -0,0 +1,46 @@
+/*
+ * Hibernate, Relational Persistence for Idiomatic Java
+ *
+ * Copyright (c) 2008, Red Hat Middleware LLC or third-party contributors as
+ * indicated by the @author tags or express copyright attribution
+ * statements applied by the authors.  All third-party contributions are
+ * distributed under license by Red Hat Middleware LLC.
+ *
+ * This copyrighted material is made available to anyone wishing to use, modify,
+ * copy, or redistribute it subject to the terms and conditions of the GNU
+ * Lesser General Public License, as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License
+ * for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this distribution; if not, write to:
+ * Free Software Foundation, Inc.
+ * 51 Franklin Street, Fifth Floor
+ * Boston, MA  02110-1301  USA
+ */
+
+package org.jboss.envers.exception;
+
+import org.hibernate.HibernateException;
+
+/**
+ * @see org.hibernate.envers.exception.AuditException
+ * @deprecated
+ * @author Adam Warski (adam at warski dot org)
+ */
+public class VersionsException extends HibernateException {
+    public VersionsException(String message) {
+        super(message);
+    }
+
+    public VersionsException(String message, Throwable cause) {
+        super(message, cause);
+    }
+
+    public VersionsException(Throwable cause) {
+        super(cause);
+    }
+}
\ No newline at end of file


Property changes on: core/trunk/envers/src/main/java/org/jboss/envers/exception/VersionsException.java
___________________________________________________________________
Name: svn:mergeinfo
   + 

Copied: core/trunk/envers/src/main/java/org/jboss/envers/query/VersionsQueryCreator.java (from rev 15501, core/trunk/envers/src/main/java/org/hibernate/envers/query/AuditQueryCreator.java)
===================================================================
--- core/trunk/envers/src/main/java/org/jboss/envers/query/VersionsQueryCreator.java	                        (rev 0)
+++ core/trunk/envers/src/main/java/org/jboss/envers/query/VersionsQueryCreator.java	2008-11-04 22:11:07 UTC (rev 15506)
@@ -0,0 +1,40 @@
+/*
+ * Hibernate, Relational Persistence for Idiomatic Java
+ *
+ * Copyright (c) 2008, Red Hat Middleware LLC or third-party contributors as
+ * indicated by the @author tags or express copyright attribution
+ * statements applied by the authors.  All third-party contributions are
+ * distributed under license by Red Hat Middleware LLC.
+ *
+ * This copyrighted material is made available to anyone wishing to use, modify,
+ * copy, or redistribute it subject to the terms and conditions of the GNU
+ * Lesser General Public License, as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License
+ * for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this distribution; if not, write to:
+ * Free Software Foundation, Inc.
+ * 51 Franklin Street, Fifth Floor
+ * Boston, MA  02110-1301  USA
+ */
+
+package org.jboss.envers.query;
+
+import org.hibernate.envers.configuration.AuditConfiguration;
+import org.hibernate.envers.query.AuditQueryCreator;
+import org.hibernate.envers.reader.AuditReaderImplementor;
+
+/**
+ * @link AuditQueryCreator
+ * @deprecated
+ * @author Adam Warski (adam at warski dot org)
+ */
+public class VersionsQueryCreator extends AuditQueryCreator {
+    public VersionsQueryCreator(AuditConfiguration verCfg, AuditReaderImplementor versionsReaderImplementor) {
+        super(verCfg, versionsReaderImplementor);
+    }
+}
\ No newline at end of file


Property changes on: core/trunk/envers/src/main/java/org/jboss/envers/query/VersionsQueryCreator.java
___________________________________________________________________
Name: svn:mergeinfo
   + 

Modified: core/trunk/envers/src/test/java/org/hibernate/envers/test/integration/basic/NotVersioned.java
===================================================================
--- core/trunk/envers/src/test/java/org/hibernate/envers/test/integration/basic/NotVersioned.java	2008-11-04 21:46:12 UTC (rev 15505)
+++ core/trunk/envers/src/test/java/org/hibernate/envers/test/integration/basic/NotVersioned.java	2008-11-04 22:11:07 UTC (rev 15506)
@@ -25,7 +25,7 @@
 
 import javax.persistence.EntityManager;
 
-import org.hibernate.envers.exception.NotVersionedException;
+import org.hibernate.envers.exception.NotAuditedException;
 import org.hibernate.envers.test.AbstractEntityTest;
 import org.testng.annotations.BeforeClass;
 import org.testng.annotations.Test;
@@ -58,12 +58,12 @@
         em.getTransaction().commit();
     }
 
-    @Test(expectedExceptions = NotVersionedException.class)
+    @Test(expectedExceptions = NotAuditedException.class)
     public void testRevisionsCounts() {
         getVersionsReader().getRevisions(BasicTestEntity3.class, id1);
     }
 
-    @Test(expectedExceptions = NotVersionedException.class)
+    @Test(expectedExceptions = NotAuditedException.class)
     public void testHistoryOfId1() {
         getVersionsReader().find(BasicTestEntity3.class, id1, 1);
     }

Modified: core/trunk/envers/src/test/resources/hibernate.test.cfg.xml
===================================================================
--- core/trunk/envers/src/test/resources/hibernate.test.cfg.xml	2008-11-04 21:46:12 UTC (rev 15505)
+++ core/trunk/envers/src/test/resources/hibernate.test.cfg.xml	2008-11-04 22:11:07 UTC (rev 15506)
@@ -24,22 +24,22 @@
         <property name="connection.password"></property>-->
 
         <event type="post-insert">
-            <listener class="org.hibernate.envers.event.VersionsEventListener" />
+            <listener class="org.hibernate.envers.event.AuditEventListener" />
         </event>
         <event type="post-update">
-            <listener class="org.hibernate.envers.event.VersionsEventListener" />
+            <listener class="org.hibernate.envers.event.AuditEventListener" />
         </event>
         <event type="post-delete">
-            <listener class="org.hibernate.envers.event.VersionsEventListener" />
+            <listener class="org.hibernate.envers.event.AuditEventListener" />
         </event>
         <event type="pre-collection-update">
-            <listener class="org.hibernate.envers.event.VersionsEventListener" />
+            <listener class="org.hibernate.envers.event.AuditEventListener" />
         </event>
         <event type="pre-collection-remove">
-            <listener class="org.hibernate.envers.event.VersionsEventListener" />
+            <listener class="org.hibernate.envers.event.AuditEventListener" />
         </event>
         <event type="post-collection-recreate">
-            <listener class="org.hibernate.envers.event.VersionsEventListener" />
+            <listener class="org.hibernate.envers.event.AuditEventListener" />
         </event>
     </session-factory>
 </hibernate-configuration>
\ No newline at end of file




More information about the hibernate-commits mailing list