diff --git a/spring-cloud-commons/src/main/java/org/springframework/cloud/client/actuator/FeaturesEndpoint.java b/spring-cloud-commons/src/main/java/org/springframework/cloud/client/actuator/FeaturesEndpoint.java index 3958ffa5..7e6e19c4 100644 --- a/spring-cloud-commons/src/main/java/org/springframework/cloud/client/actuator/FeaturesEndpoint.java +++ b/spring-cloud-commons/src/main/java/org/springframework/cloud/client/actuator/FeaturesEndpoint.java @@ -3,8 +3,6 @@ package org.springframework.cloud.client.actuator; import java.util.ArrayList; import java.util.List; -import lombok.Value; - import org.springframework.beans.BeansException; import org.springframework.beans.factory.NoSuchBeanDefinitionException; import org.springframework.boot.actuate.endpoint.AbstractEndpoint; @@ -12,11 +10,14 @@ import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; +import lombok.Value; + /** * @author Spencer Gibb */ @ConfigurationProperties(prefix = "endpoints.features", ignoreUnknownFields = false) -public class FeaturesEndpoint extends AbstractEndpoint implements ApplicationContextAware { +public class FeaturesEndpoint extends AbstractEndpoint + implements ApplicationContextAware { private final List hasFeaturesList; private ApplicationContext context; @@ -35,10 +36,10 @@ public class FeaturesEndpoint extends AbstractEndpoint abstractFeatures = hasFeatures.getAbstractFeatures(); + for (HasFeatures hasFeatures : this.hasFeaturesList) { + List> abstractFeatures = hasFeatures.getAbstractFeatures(); if (abstractFeatures != null) { - for (Class clazz : abstractFeatures) { + for (Class clazz : abstractFeatures) { addAbstractFeature(features, clazz); } } @@ -54,23 +55,24 @@ public class FeaturesEndpoint extends AbstractEndpoint type) { String featureName = type.getSimpleName(); try { - Object bean = context.getBean(type); + Object bean = this.context.getBean(type); Class beanClass = bean.getClass(); addFeature(features, new NamedFeature(featureName, beanClass)); - } catch (NoSuchBeanDefinitionException e) { + } + catch (NoSuchBeanDefinitionException e) { features.getDisabled().add(featureName); } } private void addFeature(Features features, NamedFeature feature) { - Class type = feature.getType(); - features.getEnabled().add(new Feature(feature.getName(), - type.getCanonicalName(), - type.getPackage().getImplementationVersion(), - type.getPackage().getImplementationVendor())); + Class type = feature.getType(); + features.getEnabled() + .add(new Feature(feature.getName(), type.getCanonicalName(), + type.getPackage().getImplementationVersion(), + type.getPackage().getImplementationVendor())); } @Value diff --git a/spring-cloud-commons/src/main/java/org/springframework/cloud/client/actuator/HasFeatures.java b/spring-cloud-commons/src/main/java/org/springframework/cloud/client/actuator/HasFeatures.java index b1ca576e..7ccf972d 100644 --- a/spring-cloud-commons/src/main/java/org/springframework/cloud/client/actuator/HasFeatures.java +++ b/spring-cloud-commons/src/main/java/org/springframework/cloud/client/actuator/HasFeatures.java @@ -1,31 +1,26 @@ package org.springframework.cloud.client.actuator; +import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List; -import lombok.Builder; -import lombok.Singular; -import lombok.Value; - /** * @author Spencer Gibb */ -@Value -@Builder public class HasFeatures { - @Singular - private final List abstractFeatures; - @Singular - private final List namedFeatures; - public static HasFeatures abstractFeatures(Class... abstractFeatures) { + private final List> abstractFeatures = new ArrayList<>(); + + private final List namedFeatures = new ArrayList<>(); + + public static HasFeatures abstractFeatures(Class... abstractFeatures) { return new HasFeatures(Arrays.asList(abstractFeatures), Collections. emptyList()); } public static HasFeatures namedFeatures(NamedFeature... namedFeatures) { - return new HasFeatures(Collections. emptyList(), + return new HasFeatures(Collections.> emptyList(), Arrays.asList(namedFeatures)); } @@ -38,4 +33,18 @@ public class HasFeatures { return namedFeatures(new NamedFeature(name1, type1), new NamedFeature(name2, type2)); } + + public HasFeatures(List> abstractFeatures, + List namedFeatures) { + this.abstractFeatures.addAll(abstractFeatures); + this.namedFeatures.addAll(namedFeatures); + } + + public List> getAbstractFeatures() { + return this.abstractFeatures; + } + + public List getNamedFeatures() { + return this.namedFeatures; + } } diff --git a/spring-cloud-commons/src/test/java/org/springframework/cloud/client/actuator/FeaturesEndpointTests.java b/spring-cloud-commons/src/test/java/org/springframework/cloud/client/actuator/FeaturesEndpointTests.java index b96e3496..15b2cdc6 100644 --- a/spring-cloud-commons/src/test/java/org/springframework/cloud/client/actuator/FeaturesEndpointTests.java +++ b/spring-cloud-commons/src/test/java/org/springframework/cloud/client/actuator/FeaturesEndpointTests.java @@ -1,10 +1,7 @@ package org.springframework.cloud.client.actuator; - -import static org.hamcrest.Matchers.equalTo; -import static org.hamcrest.Matchers.is; -import static org.hamcrest.Matchers.notNullValue; -import static org.junit.Assert.assertThat; +import java.util.ArrayList; +import java.util.List; import org.junit.After; import org.junit.Before; @@ -16,8 +13,10 @@ import org.springframework.context.annotation.AnnotationConfigApplicationContext import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; -import java.util.ArrayList; -import java.util.List; +import static org.hamcrest.Matchers.equalTo; +import static org.hamcrest.Matchers.is; +import static org.hamcrest.Matchers.notNullValue; +import static org.junit.Assert.assertThat; /** * @author Spencer Gibb @@ -29,7 +28,8 @@ public class FeaturesEndpointTests { @Before public void setup() { this.context = new AnnotationConfigApplicationContext(); - this.context.register(JacksonAutoConfiguration.class, FeaturesConfig.class, Config.class); + this.context.register(JacksonAutoConfiguration.class, FeaturesConfig.class, + Config.class); this.context.refresh(); } @@ -42,7 +42,8 @@ public class FeaturesEndpointTests { @Test public void invokeWorks() { - FeaturesEndpoint.Features features = this.context.getBean(FeaturesEndpoint.class).invoke(); + FeaturesEndpoint.Features features = this.context.getBean(FeaturesEndpoint.class) + .invoke(); assertThat(features, is(notNullValue())); assertThat(features.getEnabled().size(), is(equalTo(2))); assertThat(features.getDisabled().size(), is(equalTo(1))); @@ -57,11 +58,11 @@ public class FeaturesEndpointTests { @Bean HasFeatures localFeatures() { - return HasFeatures.builder() - .abstractFeature(Foo.class) - .namedFeature(new NamedFeature("Bar Feature", Bar.class)) - .abstractFeature(Baz.class) - .build(); + HasFeatures features = HasFeatures.namedFeatures( + new NamedFeature("foo", Foo.class), + new NamedFeature("Bar Feature", Bar.class)); + features.getAbstractFeatures().add(Bar.class); + return features; } } @@ -74,11 +75,16 @@ public class FeaturesEndpointTests { @Bean public FeaturesEndpoint cloudEndpoint() { - return new FeaturesEndpoint(hasFeatures); + return new FeaturesEndpoint(this.hasFeatures); } } - public static class Foo {} - public static class Bar {} - public static class Baz {} + public static class Foo { + } + + public static class Bar { + } + + public static class Baz { + } }