From ee0613ed4d47e04bfeb63f4b3014aed3215452a9 Mon Sep 17 00:00:00 2001 From: Jens Schauder Date: Thu, 27 Jun 2019 17:28:23 +0200 Subject: [PATCH] #47 - Populate the RevisionType with information from Envers. For a given revision r the revision type may now be accessed using r.getMetadata().getRevisionType() Original pull request: #195. --- .../support/DefaultRevisionMetadata.java | 19 ++++++++----- .../support/EnversRevisionRepositoryImpl.java | 18 ++++++++++-- .../support/RepositoryIntegrationTests.java | 28 +++++++++++++++++++ 3 files changed, 55 insertions(+), 10 deletions(-) diff --git a/src/main/java/org/springframework/data/envers/repository/support/DefaultRevisionMetadata.java b/src/main/java/org/springframework/data/envers/repository/support/DefaultRevisionMetadata.java index d0889ac..9f37750 100755 --- a/src/main/java/org/springframework/data/envers/repository/support/DefaultRevisionMetadata.java +++ b/src/main/java/org/springframework/data/envers/repository/support/DefaultRevisionMetadata.java @@ -16,6 +16,7 @@ package org.springframework.data.envers.repository.support; import lombok.AccessLevel; +import lombok.AllArgsConstructor; import lombok.Getter; import lombok.NonNull; import lombok.Value; @@ -40,9 +41,15 @@ import org.springframework.data.history.RevisionMetadata; * @author Jens Schauder */ @Value +@AllArgsConstructor public class DefaultRevisionMetadata implements RevisionMetadata { private final @NonNull @Getter(AccessLevel.NONE) DefaultRevisionEntity entity; + private final RevisionType revisionType; + + public DefaultRevisionMetadata(DefaultRevisionEntity entity) { + this(entity, RevisionType.UNKNOWN); + } /* * (non-Javadoc) @@ -79,6 +86,9 @@ public class DefaultRevisionMetadata implements RevisionMetadata { return (T) entity; } + public RevisionType getRevisionType() { + return revisionType; + } @Override public boolean equals(Object o) { @@ -90,12 +100,7 @@ public class DefaultRevisionMetadata implements RevisionMetadata { } DefaultRevisionMetadata that = (DefaultRevisionMetadata) o; return getRevisionNumber().equals(that.getRevisionNumber()) - && getRevisionInstant().equals(that.getRevisionInstant()); - } - - @Override - public int hashCode() { - - return Objects.hash(getRevisionNumber(), getRevisionInstant()); + && getRevisionInstant().equals(that.getRevisionInstant()) + && revisionType.equals(that.getRevisionType()); } } 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 b8a02c3..7622422 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 @@ -45,6 +45,8 @@ import org.springframework.data.repository.history.support.RevisionEntityInforma import org.springframework.transaction.annotation.Transactional; import org.springframework.util.Assert; +import static org.springframework.data.history.RevisionMetadata.RevisionType.*; + /** * Repository implementation using Hibernate Envers to implement revision specific query methods. * @@ -181,7 +183,7 @@ public class EnversRevisionRepositoryImpl createRevisionMetadata() { return metadata instanceof DefaultRevisionEntity // - ? (RevisionMetadata) new DefaultRevisionMetadata((DefaultRevisionEntity) metadata) // + ? (RevisionMetadata) new DefaultRevisionMetadata((DefaultRevisionEntity) metadata, revisionType) // : new AnnotationRevisionMetadata<>(metadata, RevisionNumber.class, RevisionTimestamp.class); } } diff --git a/src/test/java/org/springframework/data/envers/repository/support/RepositoryIntegrationTests.java b/src/test/java/org/springframework/data/envers/repository/support/RepositoryIntegrationTests.java index 5517f5d..7a8eade 100755 --- a/src/test/java/org/springframework/data/envers/repository/support/RepositoryIntegrationTests.java +++ b/src/test/java/org/springframework/data/envers/repository/support/RepositoryIntegrationTests.java @@ -16,6 +16,7 @@ package org.springframework.data.envers.repository.support; import static org.assertj.core.api.Assertions.*; +import static org.springframework.data.history.RevisionMetadata.RevisionType.*; import java.util.Arrays; import java.util.HashSet; @@ -35,6 +36,7 @@ import org.springframework.data.envers.sample.CountryRepository; import org.springframework.data.envers.sample.License; import org.springframework.data.envers.sample.LicenseRepository; import org.springframework.data.history.Revision; +import org.springframework.data.history.RevisionMetadata; import org.springframework.data.history.RevisionSort; import org.springframework.data.history.Revisions; import org.springframework.test.context.ContextConfiguration; @@ -192,6 +194,32 @@ public class RepositoryIntegrationTests { .containsExactly(null, null); } + @Test // #47 + public void includesCorrectRevisionType() { + + Country de = new Country(); + de.code = "de"; + de.name = "Deutschland"; + + countryRepository.save(de); + + de.name = "Bundes Republik Deutschland"; + + countryRepository.save(de); + + countryRepository.delete(de); + + Revisions revisions = countryRepository.findRevisions(de.id); + + assertThat(revisions) // + .extracting(r -> r.getMetadata().getRevisionType()) // + .containsExactly( // + INSERT, // + UPDATE, // + DELETE // + ); + } + @Test // #146 public void shortCircuitingWhenOffsetIsToLarge() {