From a978f1eaa7bf91b5047b26ea9489c0e3cda6a45b Mon Sep 17 00:00:00 2001 From: Stephane Nicoll Date: Fri, 11 Dec 2015 11:19:08 +0100 Subject: [PATCH] Make sure to use InitializrMetadataProvider consistently The auto-configuration was exposing a InitializrMetadata bean which is wrong since InitializrMetadataProvider is the sole responsible to provide it. --- .../config/InitializrAutoConfiguration.groovy | 10 +--- .../generator/ProjectGenerator.groovy | 6 +-- .../generator/ProjectGeneratorTests.groovy | 49 ++++++++++++------- .../metrics/MetricsExportTests.groovy | 8 +-- ...nitializrControllerIntegrationTests.groovy | 6 ++- 5 files changed, 44 insertions(+), 35 deletions(-) diff --git a/initializr/src/main/groovy/io/spring/initializr/config/InitializrAutoConfiguration.groovy b/initializr/src/main/groovy/io/spring/initializr/config/InitializrAutoConfiguration.groovy index 02b80499..cba940f3 100644 --- a/initializr/src/main/groovy/io/spring/initializr/config/InitializrAutoConfiguration.groovy +++ b/initializr/src/main/groovy/io/spring/initializr/config/InitializrAutoConfiguration.groovy @@ -22,7 +22,6 @@ import com.google.common.cache.CacheBuilder import io.spring.initializr.generator.ProjectGenerationMetricsListener import io.spring.initializr.generator.ProjectGenerator import io.spring.initializr.generator.ProjectResourceLocator -import io.spring.initializr.metadata.InitializrMetadata import io.spring.initializr.metadata.InitializrMetadataBuilder import io.spring.initializr.metadata.InitializrMetadataProvider import io.spring.initializr.metadata.InitializrProperties @@ -92,15 +91,10 @@ class InitializrAutoConfiguration { return new ProjectResourceLocator() } - @Bean - @ConditionalOnMissingBean - InitializrMetadata initializrMetadata(InitializrProperties properties) { - InitializrMetadataBuilder.fromInitializrProperties(properties).build() - } - @Bean @ConditionalOnMissingBean(InitializrMetadataProvider) - InitializrMetadataProvider initializrMetadataProvider(InitializrMetadata metadata) { + InitializrMetadataProvider initializrMetadataProvider(InitializrProperties properties) { + def metadata = InitializrMetadataBuilder.fromInitializrProperties(properties).build() new DefaultInitializrMetadataProvider(metadata) } diff --git a/initializr/src/main/groovy/io/spring/initializr/generator/ProjectGenerator.groovy b/initializr/src/main/groovy/io/spring/initializr/generator/ProjectGenerator.groovy index 9c4d5776..ae4a7da1 100644 --- a/initializr/src/main/groovy/io/spring/initializr/generator/ProjectGenerator.groovy +++ b/initializr/src/main/groovy/io/spring/initializr/generator/ProjectGenerator.groovy @@ -18,7 +18,7 @@ package io.spring.initializr.generator import groovy.util.logging.Slf4j import io.spring.initializr.metadata.Dependency -import io.spring.initializr.metadata.InitializrMetadata +import io.spring.initializr.metadata.InitializrMetadataProvider import io.spring.initializr.util.Version import org.springframework.beans.factory.annotation.Autowired @@ -42,7 +42,7 @@ class ProjectGenerator { private static final VERSION_1_3_0_M1 = Version.parse('1.3.0.M1') @Autowired - InitializrMetadata metadata + InitializrMetadataProvider metadataProvider @Autowired ProjectResourceLocator projectResourceLocator = new ProjectResourceLocator() @@ -173,7 +173,7 @@ class ProjectGenerator { protected Map initializeModel(ProjectRequest request) { Assert.notNull request.bootVersion, 'boot version must not be null' def model = [:] - request.resolve(metadata) + request.resolve(metadataProvider.get()) // request resolved so we can log what has been requested def dependencies = request.resolvedDependencies diff --git a/initializr/src/test/groovy/io/spring/initializr/generator/ProjectGeneratorTests.groovy b/initializr/src/test/groovy/io/spring/initializr/generator/ProjectGeneratorTests.groovy index 868931b4..dbc3be25 100644 --- a/initializr/src/test/groovy/io/spring/initializr/generator/ProjectGeneratorTests.groovy +++ b/initializr/src/test/groovy/io/spring/initializr/generator/ProjectGeneratorTests.groovy @@ -18,6 +18,8 @@ package io.spring.initializr.generator import io.spring.initializr.metadata.BillOfMaterials import io.spring.initializr.metadata.Dependency +import io.spring.initializr.metadata.InitializrMetadata +import io.spring.initializr.metadata.InitializrMetadataProvider import io.spring.initializr.test.GradleBuildAssert import io.spring.initializr.test.InitializrMetadataTestBuilder import io.spring.initializr.test.PomAssert @@ -50,7 +52,7 @@ class ProjectGeneratorTests { void setup() { def metadata = InitializrMetadataTestBuilder.withDefaults() .addDependencyGroup('test', 'web', 'security', 'data-jpa', 'aop', 'batch', 'integration').build() - projectGenerator.metadata = metadata + applyMetadata(metadata) projectGenerator.tmpdir = folder.newFolder().absolutePath } @@ -108,7 +110,7 @@ class ProjectGeneratorTests { def metadata = InitializrMetadataTestBuilder.withDefaults() .addDependencyGroup('core', 'web', 'security', 'data-jpa') .addDependencyGroup('test', dependency).build() - projectGenerator.metadata = metadata + applyMetadata(metadata) def request = createProjectRequest('thymeleaf') generateMavenPom(request) @@ -123,7 +125,7 @@ class ProjectGeneratorTests { def metadata = InitializrMetadataTestBuilder.withDefaults() .addDependencyGroup('core', 'web', 'security', 'data-jpa') .addDependencyGroup('test', dependency).build() - projectGenerator.metadata = metadata + applyMetadata(metadata) def request = createProjectRequest('thymeleaf') request.packaging = 'war' @@ -154,7 +156,7 @@ class ProjectGeneratorTests { def metadata = InitializrMetadataTestBuilder.withDefaults() .addDependencyGroup('core', 'web', 'security', 'data-jpa') .addDependencyGroup('test', dependency).build() - projectGenerator.metadata = metadata + applyMetadata(metadata) def request = createProjectRequest('thymeleaf') request.packaging = 'war' @@ -276,7 +278,7 @@ class ProjectGeneratorTests { def metadata = InitializrMetadataTestBuilder.withDefaults() .addDependencyGroup('core', 'web', 'security', 'data-jpa') .addDependencyGroup('foo', whatever).build() - projectGenerator.metadata = metadata + applyMetadata(metadata) def request = createProjectRequest('whatever', 'data-jpa', 'web') generateMavenPom(request).hasDependency(whatever) .hasSpringBootStarterDependency('data-jpa') @@ -296,7 +298,7 @@ class ProjectGeneratorTests { def metadata = InitializrMetadataTestBuilder.withDefaults() .addDependencyGroup('core', 'web', 'security', 'data-jpa') .addDependencyGroup('foo', whatever).build() - projectGenerator.metadata = metadata + applyMetadata(metadata) def request = createProjectRequest('whatever', 'data-jpa', 'web') generateGradleBuild(request) .contains("compile('org.springframework.boot:spring-boot-starter-web')") @@ -316,7 +318,7 @@ class ProjectGeneratorTests { .addDependencyGroup('database', h2) .addDependencyGroup('container', servlet) .addDependencyGroup('test', hamcrest).build() - projectGenerator.metadata = metadata + applyMetadata(metadata) def request = createProjectRequest('hamcrest', 'h2', 'servlet-api', 'data-jpa', 'web') generateMavenPom(request).hasDependency(h2).hasDependency(hamcrest).hasDependency(servlet) .hasSpringBootStarterDependency('data-jpa') @@ -335,7 +337,7 @@ class ProjectGeneratorTests { .addDependencyGroup('database', h2) .addDependencyGroup('container', servlet) .addDependencyGroup('test', hamcrest).build() - projectGenerator.metadata = metadata + applyMetadata(metadata) def request = createProjectRequest('hamcrest', 'h2', 'servlet-api', 'data-jpa', 'web') generateGradleBuild(request) .contains("compile('org.springframework.boot:spring-boot-starter-web')") @@ -375,7 +377,7 @@ class ProjectGeneratorTests { def metadata = InitializrMetadataTestBuilder.withDefaults() .addDependencyGroup('foo', foo) .addBom('foo-bom', 'org.acme', 'foo-bom', '1.2.3').build() - projectGenerator.metadata = metadata + applyMetadata(metadata) def request = createProjectRequest('foo') generateMavenPom(request).hasDependency(foo) .hasBom('org.acme', 'foo-bom', '1.2.3') @@ -388,7 +390,7 @@ class ProjectGeneratorTests { def metadata = InitializrMetadataTestBuilder.withDefaults() .addDependencyGroup('group', foo, bar) .addBom('the-bom', 'org.acme', 'the-bom', '1.2.3').build() - projectGenerator.metadata = metadata + applyMetadata(metadata) def request = createProjectRequest('foo', 'bar') generateMavenPom(request).hasDependency(foo) .hasBom('org.acme', 'the-bom', '1.2.3') @@ -404,7 +406,7 @@ class ProjectGeneratorTests { def metadata = InitializrMetadataTestBuilder.withDefaults() .addDependencyGroup('foo', foo) .addBom('the-bom', bom).build() - projectGenerator.metadata = metadata + applyMetadata(metadata) // First version def request = createProjectRequest('foo') @@ -430,7 +432,7 @@ class ProjectGeneratorTests { .addBom('the-bom', bom) .addRepository('foo-repo', 'repo', 'http://example.com/foo', true) .addRepository('bar-repo', 'repo', 'http://example.com/bar', false).build() - projectGenerator.metadata = metadata + applyMetadata(metadata) // Second version def request = createProjectRequest('foo') @@ -448,7 +450,7 @@ class ProjectGeneratorTests { def metadata = InitializrMetadataTestBuilder.withDefaults() .addDependencyGroup('foo', foo) .addBom('foo-bom', 'org.acme', 'foo-bom', '1.2.3').build() - projectGenerator.metadata = metadata + applyMetadata(metadata) def request = createProjectRequest('foo') generateGradleBuild(request) .contains("dependencyManagement {") @@ -462,7 +464,7 @@ class ProjectGeneratorTests { def metadata = InitializrMetadataTestBuilder.withDefaults() .addDependencyGroup('foo', foo) .addRepository('foo-repo', 'foo', 'http://example.com/repo', false).build() - projectGenerator.metadata = metadata + applyMetadata(metadata) def request = createProjectRequest('foo') generateMavenPom(request).hasDependency(foo) .hasRepository('foo-repo', 'foo', 'http://example.com/repo', false) @@ -475,7 +477,7 @@ class ProjectGeneratorTests { def metadata = InitializrMetadataTestBuilder.withDefaults() .addDependencyGroup('group', foo, bar) .addRepository('the-repo', 'repo', 'http://example.com/repo', true).build() - projectGenerator.metadata = metadata + applyMetadata(metadata) def request = createProjectRequest('foo', 'bar') generateMavenPom(request).hasDependency(foo) .hasRepository('the-repo', 'repo', 'http://example.com/repo', true) @@ -488,7 +490,7 @@ class ProjectGeneratorTests { def metadata = InitializrMetadataTestBuilder.withDefaults() .addDependencyGroup('foo', foo) .addRepository('foo-repo', 'foo', 'http://example.com/repo', false).build() - projectGenerator.metadata = metadata + applyMetadata(metadata) def request = createProjectRequest('foo') generateGradleBuild(request) .hasRepository('http://example.com/repo') @@ -499,7 +501,7 @@ class ProjectGeneratorTests { def foo = new Dependency(id: 'foo', groupId: 'org.foo', artifactId: 'custom-my-starter') def metadata = InitializrMetadataTestBuilder.withDefaults() .addDependencyGroup('foo', foo).build() - projectGenerator.metadata = metadata + applyMetadata(metadata) def request = createProjectRequest('foo') generateMavenPom(request) @@ -514,7 +516,7 @@ class ProjectGeneratorTests { foo.starter = false def metadata = InitializrMetadataTestBuilder.withDefaults() .addDependencyGroup('foo', foo).build() - projectGenerator.metadata = metadata + applyMetadata(metadata) def request = createProjectRequest('foo') generateMavenPom(request) @@ -542,9 +544,18 @@ class ProjectGeneratorTests { ProjectRequest createProjectRequest(String... styles) { def request = new ProjectRequest() - request.initialize(projectGenerator.metadata) + request.initialize(projectGenerator.metadataProvider.get()) request.style.addAll Arrays.asList(styles) request } + private void applyMetadata(InitializrMetadata metadata) { + projectGenerator.metadataProvider = new InitializrMetadataProvider() { + @Override + InitializrMetadata get() { + return metadata + } + } + } + } diff --git a/initializr/src/test/groovy/io/spring/initializr/metrics/MetricsExportTests.groovy b/initializr/src/test/groovy/io/spring/initializr/metrics/MetricsExportTests.groovy index 4e72087c..5c68af17 100644 --- a/initializr/src/test/groovy/io/spring/initializr/metrics/MetricsExportTests.groovy +++ b/initializr/src/test/groovy/io/spring/initializr/metrics/MetricsExportTests.groovy @@ -1,5 +1,5 @@ /* - * Copyright 2014-2015 the original author or authors. + * Copyright 2012-2015 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -18,8 +18,9 @@ package io.spring.initializr.metrics import io.spring.initializr.generator.ProjectGenerationMetricsListener import io.spring.initializr.generator.ProjectRequest -import io.spring.initializr.metadata.InitializrMetadata +import io.spring.initializr.metadata.InitializrMetadataBuilder import io.spring.initializr.metadata.InitializrMetadataProvider +import io.spring.initializr.metadata.InitializrProperties import io.spring.initializr.test.OfflineInitializrMetadataProvider import io.spring.initializr.test.RedisRunning import org.junit.Before @@ -81,7 +82,8 @@ public class MetricsExportTests { static class Config { @Bean - InitializrMetadataProvider initializrMetadataProvider(InitializrMetadata metadata) { + InitializrMetadataProvider initializrMetadataProvider(InitializrProperties properties) { + def metadata = InitializrMetadataBuilder.fromInitializrProperties(properties).build() new OfflineInitializrMetadataProvider(metadata) } } diff --git a/initializr/src/test/groovy/io/spring/initializr/web/AbstractInitializrControllerIntegrationTests.groovy b/initializr/src/test/groovy/io/spring/initializr/web/AbstractInitializrControllerIntegrationTests.groovy index 38f09b49..5bc89a96 100644 --- a/initializr/src/test/groovy/io/spring/initializr/web/AbstractInitializrControllerIntegrationTests.groovy +++ b/initializr/src/test/groovy/io/spring/initializr/web/AbstractInitializrControllerIntegrationTests.groovy @@ -19,8 +19,9 @@ package io.spring.initializr.web import java.nio.charset.Charset import io.spring.initializr.mapper.InitializrMetadataVersion -import io.spring.initializr.metadata.InitializrMetadata +import io.spring.initializr.metadata.InitializrMetadataBuilder import io.spring.initializr.metadata.InitializrMetadataProvider +import io.spring.initializr.metadata.InitializrProperties import io.spring.initializr.test.OfflineInitializrMetadataProvider import io.spring.initializr.test.ProjectAssert import org.json.JSONObject @@ -215,7 +216,8 @@ abstract class AbstractInitializrControllerIntegrationTests { static class Config { @Bean - InitializrMetadataProvider initializrMetadataProvider(InitializrMetadata metadata) { + InitializrMetadataProvider initializrMetadataProvider(InitializrProperties properties) { + def metadata = InitializrMetadataBuilder.fromInitializrProperties(properties).build() new OfflineInitializrMetadataProvider(metadata) }