From d1d952094a811e45b77c61df5ec2e7933ee5c7be Mon Sep 17 00:00:00 2001 From: Mark Paluch Date: Sat, 29 Jun 2019 23:12:52 +0200 Subject: [PATCH] Polishing. Refactor duplicate code in SecretEventPublisher into common methods. Reuse Event instead of calling each listener with a new instance. Add FunctionalInterface to LeaseListeners. See gh-431. --- .../core/lease/SecretLeaseEventPublisher.java | 56 +++++++++---------- .../core/lease/event/LeaseErrorListener.java | 3 +- .../vault/core/lease/event/LeaseListener.java | 1 + .../lease/event/SecretLeaseCreatedEvent.java | 4 +- .../core/lease/event/SecretLeaseEvent.java | 2 +- 5 files changed, 34 insertions(+), 32 deletions(-) diff --git a/spring-vault-core/src/main/java/org/springframework/vault/core/lease/SecretLeaseEventPublisher.java b/spring-vault-core/src/main/java/org/springframework/vault/core/lease/SecretLeaseEventPublisher.java index c26d0268..2277bc65 100644 --- a/spring-vault-core/src/main/java/org/springframework/vault/core/lease/SecretLeaseEventPublisher.java +++ b/spring-vault-core/src/main/java/org/springframework/vault/core/lease/SecretLeaseEventPublisher.java @@ -117,11 +117,7 @@ public class SecretLeaseEventPublisher implements InitializingBean { */ protected void onSecretsObtained(RequestedSecret requestedSecret, Lease lease, Map body) { - - for (LeaseListener leaseListener : leaseListeners) { - leaseListener.onLeaseEvent(new SecretLeaseCreatedEvent(requestedSecret, - lease, body)); - } + dispatch(new SecretLeaseCreatedEvent(requestedSecret, lease, body)); } /** @@ -133,11 +129,7 @@ public class SecretLeaseEventPublisher implements InitializingBean { * @param lease must not be {@literal null}. */ protected void onAfterLeaseRenewed(RequestedSecret requestedSecret, Lease lease) { - - for (LeaseListener leaseListener : leaseListeners) { - leaseListener.onLeaseEvent(new AfterSecretLeaseRenewedEvent(requestedSecret, - lease)); - } + dispatch(new AfterSecretLeaseRenewedEvent(requestedSecret, lease)); } /** @@ -149,11 +141,7 @@ public class SecretLeaseEventPublisher implements InitializingBean { * @param lease must not be {@literal null}. */ protected void onBeforeLeaseRevocation(RequestedSecret requestedSecret, Lease lease) { - - for (LeaseListener leaseListener : leaseListeners) { - leaseListener.onLeaseEvent(new BeforeSecretLeaseRevocationEvent( - requestedSecret, lease)); - } + dispatch(new BeforeSecretLeaseRevocationEvent(requestedSecret, lease)); } /** @@ -165,11 +153,7 @@ public class SecretLeaseEventPublisher implements InitializingBean { * @param lease must not be {@literal null}. */ protected void onAfterLeaseRevocation(RequestedSecret requestedSecret, Lease lease) { - - for (LeaseListener leaseListener : leaseListeners) { - leaseListener.onLeaseEvent(new AfterSecretLeaseRevocationEvent( - requestedSecret, lease)); - } + dispatch(new AfterSecretLeaseRevocationEvent(requestedSecret, lease)); } /** @@ -181,11 +165,7 @@ public class SecretLeaseEventPublisher implements InitializingBean { * @param lease must not be {@literal null}. */ protected void onLeaseExpired(RequestedSecret requestedSecret, Lease lease) { - - for (LeaseListener leaseListener : leaseListeners) { - leaseListener - .onLeaseEvent(new SecretLeaseExpiredEvent(requestedSecret, lease)); - } + dispatch(new SecretLeaseExpiredEvent(requestedSecret, lease)); } /** @@ -199,10 +179,30 @@ public class SecretLeaseEventPublisher implements InitializingBean { */ protected void onError(RequestedSecret requestedSecret, @Nullable Lease lease, Exception e) { + dispatch(new SecretLeaseErrorEvent(requestedSecret, lease, e)); + } - for (LeaseErrorListener leaseErrorListener : leaseErrorListeners) { - leaseErrorListener.onLeaseError(new SecretLeaseErrorEvent(requestedSecret, - lease, e), e); + /** + * Dispatch the event to all {@link LeaseListener}s. + * + * @param leaseEvent the event to dispatch. + */ + void dispatch(SecretLeaseEvent leaseEvent) { + + for (LeaseListener listener : leaseListeners) { + listener.onLeaseEvent(leaseEvent); + } + } + + /** + * Dispatch the event to all {@link LeaseErrorListener}s. + * + * @param errorEvent the event to dispatch. + */ + void dispatch(SecretLeaseErrorEvent errorEvent) { + + for (LeaseErrorListener listener : leaseErrorListeners) { + listener.onLeaseError(errorEvent, (Exception) errorEvent.getException()); } } diff --git a/spring-vault-core/src/main/java/org/springframework/vault/core/lease/event/LeaseErrorListener.java b/spring-vault-core/src/main/java/org/springframework/vault/core/lease/event/LeaseErrorListener.java index 8fc9f99b..fd45abdc 100644 --- a/spring-vault-core/src/main/java/org/springframework/vault/core/lease/event/LeaseErrorListener.java +++ b/spring-vault-core/src/main/java/org/springframework/vault/core/lease/event/LeaseErrorListener.java @@ -23,10 +23,11 @@ package org.springframework.vault.core.lease.event; * * @author Mark Paluch */ +@FunctionalInterface public interface LeaseErrorListener { /** - * Callback for a {@link SecretLeaseEvent} + * Callback for a {@link SecretLeaseEvent}. * * @param leaseEvent the event object, must not be {@literal null}. * @param exception the thrown {@link Exception}. diff --git a/spring-vault-core/src/main/java/org/springframework/vault/core/lease/event/LeaseListener.java b/spring-vault-core/src/main/java/org/springframework/vault/core/lease/event/LeaseListener.java index dead1c06..07666777 100644 --- a/spring-vault-core/src/main/java/org/springframework/vault/core/lease/event/LeaseListener.java +++ b/spring-vault-core/src/main/java/org/springframework/vault/core/lease/event/LeaseListener.java @@ -20,6 +20,7 @@ package org.springframework.vault.core.lease.event; * * @author Mark Paluch */ +@FunctionalInterface public interface LeaseListener { /** diff --git a/spring-vault-core/src/main/java/org/springframework/vault/core/lease/event/SecretLeaseCreatedEvent.java b/spring-vault-core/src/main/java/org/springframework/vault/core/lease/event/SecretLeaseCreatedEvent.java index 4d1b3fbe..2e7e8e1b 100644 --- a/spring-vault-core/src/main/java/org/springframework/vault/core/lease/event/SecretLeaseCreatedEvent.java +++ b/spring-vault-core/src/main/java/org/springframework/vault/core/lease/event/SecretLeaseCreatedEvent.java @@ -16,7 +16,7 @@ package org.springframework.vault.core.lease.event; import java.util.Collections; -import java.util.HashMap; +import java.util.LinkedHashMap; import java.util.Map; import org.springframework.vault.core.lease.domain.Lease; @@ -44,7 +44,7 @@ public class SecretLeaseCreatedEvent extends SecretLeaseEvent { Map secrets) { super(requestedSecret, lease); - this.secrets = Collections.unmodifiableMap(new HashMap<>(secrets)); + this.secrets = Collections.unmodifiableMap(new LinkedHashMap<>(secrets)); } public Map getSecrets() { diff --git a/spring-vault-core/src/main/java/org/springframework/vault/core/lease/event/SecretLeaseEvent.java b/spring-vault-core/src/main/java/org/springframework/vault/core/lease/event/SecretLeaseEvent.java index 4f4a1d26..14ecbb8a 100644 --- a/spring-vault-core/src/main/java/org/springframework/vault/core/lease/event/SecretLeaseEvent.java +++ b/spring-vault-core/src/main/java/org/springframework/vault/core/lease/event/SecretLeaseEvent.java @@ -37,7 +37,7 @@ public abstract class SecretLeaseEvent extends ApplicationEvent { private final Lease lease; /** - * Create a new {@link SecretLeaseExpiredEvent} given {@link RequestedSecret} and + * Create a new {@link SecretLeaseEvent} given {@link RequestedSecret} and * {@link Lease}. * * @param requestedSecret must not be {@literal null}.