diff --git a/pom.xml b/pom.xml index feed177..5bb4ad9 100755 --- a/pom.xml +++ b/pom.xml @@ -23,6 +23,11 @@ BLE www.ble.de + + Michael Igler + michael.igler@forward-tech.de + Freelancer + diff --git a/src/main/java/org/springframework/data/envers/repository/support/EnversRevisionRepository.java b/src/main/java/org/springframework/data/envers/repository/support/EnversRevisionRepository.java index da9d483..965da4a 100644 --- a/src/main/java/org/springframework/data/envers/repository/support/EnversRevisionRepository.java +++ b/src/main/java/org/springframework/data/envers/repository/support/EnversRevisionRepository.java @@ -17,6 +17,7 @@ package org.springframework.data.envers.repository.support; import java.io.Serializable; +import org.springframework.data.history.Revision; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.repository.NoRepositoryBean; import org.springframework.data.repository.history.RevisionRepository; @@ -24,11 +25,12 @@ import org.springframework.data.repository.history.RevisionRepository; /** * Convenience interface to allow pulling in {@link JpaRepository} and {@link RevisionRepository} functionality in one * go. - * + * * @author Oliver Gierke */ @NoRepositoryBean -public interface EnversRevisionRepository> extends - RevisionRepository, JpaRepository { +public interface EnversRevisionRepository> + extends RevisionRepository, JpaRepository { + Revision findRevision(ID id, N revisionNumber); } diff --git a/src/main/java/org/springframework/data/envers/repository/support/EnversRevisionRepositoryImpl.java b/src/main/java/org/springframework/data/envers/repository/support/EnversRevisionRepositoryImpl.java index 70a250b..707f95b 100755 --- a/src/main/java/org/springframework/data/envers/repository/support/EnversRevisionRepositoryImpl.java +++ b/src/main/java/org/springframework/data/envers/repository/support/EnversRevisionRepositoryImpl.java @@ -16,12 +16,7 @@ package org.springframework.data.envers.repository.support; import java.io.Serializable; -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.Map.Entry; import javax.persistence.EntityManager; @@ -47,12 +42,12 @@ import org.springframework.util.Assert; /** * Repository implementation using Hibernate Envers to implement revision specific query methods. - * + * * @author Oliver Gierke * @author Philipp Huegelmeyer + * @author Michael Igler */ -public class EnversRevisionRepositoryImpl> extends - SimpleJpaRepository implements RevisionRepository { +public class EnversRevisionRepositoryImpl> extends SimpleJpaRepository implements RevisionRepository { private final EntityInformation entityInformation; private final RevisionEntityInformation revisionEntityInformation; @@ -61,13 +56,13 @@ public class EnversRevisionRepositoryImpl entityInformation, - RevisionEntityInformation revisionEntityInformation, EntityManager entityManager) { + RevisionEntityInformation revisionEntityInformation, EntityManager entityManager) { super(entityInformation, entityManager); @@ -103,6 +98,14 @@ public class EnversRevisionRepositoryImpl(metadata, reader.find(type, id, latestRevision)); } + @SuppressWarnings("unchecked") + public Revision findRevision(ID id, N revisionNumber) { + + AuditReader reader = AuditReaderFactory.get(entityManager); + + return getEntityForRevision(revisionNumber, id, reader); + } + /* * (non-Javadoc) * @see org.springframework.data.repository.history.RevisionRepository#findRevisions(java.io.Serializable) @@ -130,7 +133,7 @@ public class EnversRevisionRepositoryImpl revisionNumbers = reader.getRevisions(type, id); if (pageable.getOffset() > revisionNumbers.size()) { - return new PageImpl>(Collections.> emptyList(), pageable, 0); + return new PageImpl>(Collections.>emptyList(), pageable, 0); } int upperBound = pageable.getOffset() + pageable.getPageSize(); @@ -142,9 +145,10 @@ public class EnversRevisionRepositoryImpl>(revisions.getContent(), pageable, revisionNumbers.size()); } + /** * Returns the entities in the given revisions for the entitiy with the given id. - * + * * @param revisionNumbers * @param id * @param reader @@ -167,6 +171,25 @@ public class EnversRevisionRepositoryImpl(toRevisions(revisions, revisionEntities)); } + /** + * Returns an entity in the given revision for the given entity-id. + * + * @param revisionNumber + * @param id + * @param reader + * @return + */ + private Revision getEntityForRevision(N revisionNumber, ID id, AuditReader reader) { + + Class revisionEntityClass = revisionEntityInformation.getRevisionEntityClass(); + + T revision = (T) reader.findRevision(revisionEntityClass, revisionNumber); + + RevisionMetadata metadata = (RevisionMetadata) getRevisionMetadata(revision); + + return new Revision(metadata, revision); + } + @SuppressWarnings("unchecked") private List> toRevisions(Map source, Map revisionEntities) { @@ -186,7 +209,7 @@ public class EnversRevisionRepositoryImpl> revisions = licenseRepository.findRevisions(license.id, new PageRequest(0, 10)); Revisions wrapper = new Revisions(revisions.getContent()); assertThat(wrapper.getLatestRevision(), is(revision)); + + + List> revisionsDe = countryRepository.findRevisions(de.id).getContent(); + for (Revision revisionDe: revisionsDe) { + System.out.println("revisionDe.getRevisionNumber(): " + revisionDe.getRevisionNumber()); + System.out.println("revisionDe.getEntity().name: " + revisionDe.getEntity().name); + } + + Revision originalCountryRevision = enversRevisionRepository.findRevision(de.id, 2); + + Country originalCountry = originalCountryRevision.getEntity(); + assertThat(originalCountry.name, is("Deutschland")); } @Test diff --git a/src/test/java/org/springframework/data/envers/sample/CountryRepository.java b/src/test/java/org/springframework/data/envers/sample/CountryRepository.java index 26232d8..aee5fe0 100755 --- a/src/test/java/org/springframework/data/envers/sample/CountryRepository.java +++ b/src/test/java/org/springframework/data/envers/sample/CountryRepository.java @@ -15,6 +15,7 @@ */ package org.springframework.data.envers.sample; +import org.springframework.data.envers.repository.support.EnversRevisionRepository; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.repository.history.RevisionRepository; @@ -23,6 +24,6 @@ import org.springframework.data.repository.history.RevisionRepository; * * @author Oliver Gierke */ -public interface CountryRepository extends RevisionRepository, JpaRepository { +public interface CountryRepository extends EnversRevisionRepository, JpaRepository { }