From 3f42c1e06e8ea227997351c21f271a4dd074727d Mon Sep 17 00:00:00 2001 From: Mark Paluch Date: Tue, 7 Apr 2020 15:22:55 +0200 Subject: [PATCH] #47 - Polishing. Replace Stream usage with for-loops. Make inner class static. Reduce Lombok usage in production code. Reformat code. Original pull request: #195. --- .../support/DefaultRevisionMetadata.java | 47 ++++++---- .../support/EnversRevisionRepositoryImpl.java | 91 ++++++++++--------- 2 files changed, 80 insertions(+), 58 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 9f37750..bc9411e 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 @@ -15,48 +15,45 @@ */ package org.springframework.data.envers.repository.support; -import lombok.AccessLevel; -import lombok.AllArgsConstructor; -import lombok.Getter; import lombok.NonNull; -import lombok.Value; import java.time.Instant; import java.time.LocalDateTime; import java.time.ZoneOffset; -import java.util.Objects; import java.util.Optional; import org.hibernate.envers.DefaultRevisionEntity; + import org.springframework.data.history.RevisionMetadata; /** - * {@link RevisionMetadata} working with a {@link DefaultRevisionEntity}. - * - * The entity/delegate itself gets ignored for {@link #equals(Object)} and {@link #hashCode()} since they depend on the - * way they were obtained. + * {@link RevisionMetadata} working with a {@link DefaultRevisionEntity}. The entity/delegate itself gets ignored for + * {@link #equals(Object)} and {@link #hashCode()} since they depend on the way they were obtained. * * @author Oliver Gierke * @author Philip Huegelmeyer * @author Jens Schauder */ -@Value -@AllArgsConstructor -public class DefaultRevisionMetadata implements RevisionMetadata { +public final class DefaultRevisionMetadata implements RevisionMetadata { - private final @NonNull @Getter(AccessLevel.NONE) DefaultRevisionEntity entity; + private final @NonNull DefaultRevisionEntity entity; private final RevisionType revisionType; public DefaultRevisionMetadata(DefaultRevisionEntity entity) { this(entity, RevisionType.UNKNOWN); } + public DefaultRevisionMetadata(@NonNull DefaultRevisionEntity entity, RevisionType revisionType) { + this.entity = entity; + this.revisionType = revisionType; + } + /* * (non-Javadoc) * @see org.springframework.data.history.RevisionMetadata#getRevisionNumber() */ public Optional getRevisionNumber() { - return Optional.ofNullable(entity.getId()); + return Optional.of(entity.getId()); } /* @@ -86,9 +83,19 @@ public class DefaultRevisionMetadata implements RevisionMetadata { return (T) entity; } + /* + * (non-Javadoc) + * @see org.springframework.data.history.RevisionMetadata#getRevisionType() + */ + @Override public RevisionType getRevisionType() { return revisionType; } + + /* + * (non-Javadoc) + * @see java.lang.Object#equals(java.lang.Object) + */ @Override public boolean equals(Object o) { @@ -100,7 +107,15 @@ public class DefaultRevisionMetadata implements RevisionMetadata { } DefaultRevisionMetadata that = (DefaultRevisionMetadata) o; return getRevisionNumber().equals(that.getRevisionNumber()) - && getRevisionInstant().equals(that.getRevisionInstant()) - && revisionType.equals(that.getRevisionType()); + && getRevisionInstant().equals(that.getRevisionInstant()) && revisionType.equals(that.getRevisionType()); + } + + /* + * (non-Javadoc) + * @see java.lang.Object#toString() + */ + @Override + public String toString() { + return "DefaultRevisionMetadata{" + "entity=" + entity + ", revisionType=" + revisionType + '}'; } } 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 7622422..a7a3ce7 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 @@ -15,9 +15,11 @@ */ package org.springframework.data.envers.repository.support; +import static org.springframework.data.history.RevisionMetadata.RevisionType.*; + +import java.util.ArrayList; import java.util.List; import java.util.Optional; -import java.util.stream.Collectors; import javax.persistence.EntityManager; @@ -30,6 +32,7 @@ import org.hibernate.envers.RevisionType; import org.hibernate.envers.query.AuditEntity; import org.hibernate.envers.query.AuditQuery; import org.hibernate.envers.query.order.AuditOrder; + import org.springframework.data.domain.Page; import org.springframework.data.domain.PageImpl; import org.springframework.data.domain.Pageable; @@ -45,8 +48,6 @@ 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. * @@ -55,13 +56,13 @@ import static org.springframework.data.history.RevisionMetadata.RevisionType.*; * @author Michael Igler * @author Jens Schauder * @author Julien Millau + * @author Mark Paluch */ @Transactional(readOnly = true) public class EnversRevisionRepositoryImpl> implements RevisionRepository { private final EntityInformation entityInformation; - private final RevisionEntityInformation revisionEntityInformation; private final EntityManager entityManager; /** @@ -78,7 +79,6 @@ public class EnversRevisionRepositoryImpl(singleResult.get(0)))); } /* @@ -119,26 +120,24 @@ public class EnversRevisionRepositoryImpl(singleResult.get(0)))); } @SuppressWarnings("unchecked") public Revisions findRevisions(ID id) { - List resultList = createBaseQuery(id) // - .getResultList(); + List resultList = createBaseQuery(id).getResultList(); + List> revisionList = new ArrayList<>(resultList.size()); - List> revisionList = resultList.stream() // - .map(QueryResult::new) // - .map(this::createRevision) // - .collect(Collectors.toList()); + for (Object[] objects : resultList) { + revisionList.add(createRevision(new QueryResult<>(objects))); + } return Revisions.of(revisionList); - } @SuppressWarnings("unchecked") @@ -157,8 +156,11 @@ public class EnversRevisionRepositoryImpl> revisions = resultList.stream() - .map(singleResult -> createRevision(new QueryResult(singleResult))).collect(Collectors.toList()); + List> revisions = new ArrayList<>(); + + for (Object[] singleResult : resultList) { + revisions.add(createRevision(new QueryResult<>(singleResult))); + } return new PageImpl<>(revisions, pageable, count); } @@ -170,16 +172,16 @@ public class EnversRevisionRepositoryImpl createRevision(QueryResult queryResult) { - - return Revision.of(queryResult.createRevisionMetadata(), queryResult.entity); + .add(AuditEntity.id().eq(id)); } @SuppressWarnings("unchecked") - private class QueryResult { + private Revision createRevision(QueryResult queryResult) { + return Revision.of((RevisionMetadata) queryResult.createRevisionMetadata(), queryResult.entity); + } + + @SuppressWarnings("unchecked") + private static class QueryResult { private final T entity; private final Object metadata; @@ -198,25 +200,30 @@ public class EnversRevisionRepositoryImpl createRevisionMetadata() { + RevisionMetadata createRevisionMetadata() { return metadata instanceof DefaultRevisionEntity // - ? (RevisionMetadata) new DefaultRevisionMetadata((DefaultRevisionEntity) metadata, revisionType) // + ? new DefaultRevisionMetadata((DefaultRevisionEntity) metadata, revisionType) // : new AnnotationRevisionMetadata<>(metadata, RevisionNumber.class, RevisionTimestamp.class); } + + private static RevisionMetadata.RevisionType convertRevisionType(RevisionType datum) { + + switch (datum) { + + case ADD: + return INSERT; + case MOD: + return UPDATE; + case DEL: + return DELETE; + default: + return UNKNOWN; + } + } } }