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.
This commit is contained in:
Stephane Nicoll
2015-12-11 11:19:08 +01:00
parent e1fccb1290
commit a978f1eaa7
5 changed files with 44 additions and 35 deletions

View File

@@ -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)
}

View File

@@ -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

View File

@@ -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
}
}
}
}

View File

@@ -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)
}
}

View File

@@ -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)
}