From 3e6fbe7581c623218e11f70a9fe48a8ee67435b6 Mon Sep 17 00:00:00 2001 From: Mark Paluch Date: Wed, 17 Jan 2018 13:09:16 +0100 Subject: [PATCH] Polishing. Remove PropertyTransformerSupport in favor of default method in PropertyTransformer and refactor PropertyTransformer to functional interface. See gh-169. --- .../vault/core/util/PropertyTransformer.java | 7 +++- .../vault/core/util/PropertyTransformers.java | 41 ++++--------------- .../util/PropertyTransformersUnitTests.java | 2 +- 3 files changed, 15 insertions(+), 35 deletions(-) diff --git a/spring-vault-core/src/main/java/org/springframework/vault/core/util/PropertyTransformer.java b/spring-vault-core/src/main/java/org/springframework/vault/core/util/PropertyTransformer.java index f101d9df..e2fb3f09 100644 --- a/spring-vault-core/src/main/java/org/springframework/vault/core/util/PropertyTransformer.java +++ b/spring-vault-core/src/main/java/org/springframework/vault/core/util/PropertyTransformer.java @@ -27,6 +27,7 @@ import java.util.Map; * * @author Mark Paluch */ +@FunctionalInterface public interface PropertyTransformer { /** @@ -38,7 +39,7 @@ public interface PropertyTransformer { * @param input must not be {@literal null}. * @return transformed properties. */ - Map transformProperties(Map input); + Map transformProperties(Map input); /** * Return a composed transformer function that first applies this filter, and then @@ -47,5 +48,7 @@ public interface PropertyTransformer { * @return a composed transformer that first applies this function and then applies * the {@code after} transformer. */ - PropertyTransformer andThen(PropertyTransformer after); + default PropertyTransformer andThen(PropertyTransformer after) { + return input -> after.transformProperties(transformProperties(input)); + } } diff --git a/spring-vault-core/src/main/java/org/springframework/vault/core/util/PropertyTransformers.java b/spring-vault-core/src/main/java/org/springframework/vault/core/util/PropertyTransformers.java index d0f814ba..a4b72afa 100644 --- a/spring-vault-core/src/main/java/org/springframework/vault/core/util/PropertyTransformers.java +++ b/spring-vault-core/src/main/java/org/springframework/vault/core/util/PropertyTransformers.java @@ -53,33 +53,11 @@ public abstract class PropertyTransformers { return KeyPrefixPropertyTransformer.forPrefix(propertyNamePrefix); } - /** - * Implementation support class for classes implementing {@link PropertyTransformer}. - */ - abstract static class PropertyTransformerSupport implements PropertyTransformer { - - @Override - public PropertyTransformer andThen(final PropertyTransformer after) { - - final PropertyTransformer that = this; - - return new PropertyTransformerSupport() { - - @Override - public Map transformProperties(Map input) { - - Map processed = that.transformProperties(input); - return after.transformProperties(processed); - } - }; - } - } - /** * {@link PropertyTransformer} that passes the given properties through without * returning changed properties. */ - static class NoOpPropertyTransformer extends PropertyTransformerSupport { + static class NoOpPropertyTransformer implements PropertyTransformer { static NoOpPropertyTransformer INSTANCE = new NoOpPropertyTransformer(); @@ -94,15 +72,15 @@ public abstract class PropertyTransformers { } @Override - public Map transformProperties(Map input) { - return input; + public Map transformProperties(Map input) { + return (Map) input; } } /** * {@link PropertyTransformer} to remove {@literal null}-value properties. */ - static class RemoveNullProperties extends PropertyTransformerSupport { + static class RemoveNullProperties implements PropertyTransformer { static RemoveNullProperties INSTANCE = new RemoveNullProperties(); @@ -117,12 +95,12 @@ public abstract class PropertyTransformers { } @Override - public Map transformProperties(Map input) { + public Map transformProperties(Map input) { Map target = new LinkedHashMap<>(input.size(), 1); - for (Entry entry : input.entrySet()) { + for (Entry entry : input.entrySet()) { if (entry.getValue() == null) { continue; @@ -138,7 +116,7 @@ public abstract class PropertyTransformers { /** * {@link PropertyTransformer} that adds a prefix to each key name. */ - static class KeyPrefixPropertyTransformer extends PropertyTransformerSupport { + static class KeyPrefixPropertyTransformer implements PropertyTransformer { private final String propertyNamePrefix; @@ -162,17 +140,16 @@ public abstract class PropertyTransformers { } @Override - public Map transformProperties(Map input) { + public Map transformProperties(Map input) { Map target = new LinkedHashMap<>(input.size(), 1); - for (Entry entry : input.entrySet()) { + for (Entry entry : input.entrySet()) { target.put(propertyNamePrefix + entry.getKey(), entry.getValue()); } return target; } } - } diff --git a/spring-vault-core/src/test/java/org/springframework/vault/core/util/PropertyTransformersUnitTests.java b/spring-vault-core/src/test/java/org/springframework/vault/core/util/PropertyTransformersUnitTests.java index 202b1a47..bcf72ff9 100644 --- a/spring-vault-core/src/test/java/org/springframework/vault/core/util/PropertyTransformersUnitTests.java +++ b/spring-vault-core/src/test/java/org/springframework/vault/core/util/PropertyTransformersUnitTests.java @@ -27,7 +27,7 @@ import static org.assertj.core.api.Assertions.assertThat; */ public class PropertyTransformersUnitTests { - Map properties = Collections.singletonMap("key", "value"); + Map properties = Collections.singletonMap("key", "value"); @Test public void propertyNamePrefix() {