Hibernate SVN: r15506 - in core/trunk/envers/src: main/java/org/hibernate/envers and 12 other directories.
by hibernate-commitsï¼ lists.jboss.org
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)
+ */
+(a)Retention(RetentionPolicy.RUNTIME)
+(a)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