mirror of
https://gitee.com/dcren/initializr.git
synced 2025-09-23 04:23:49 +08:00
Add project request post processing
This commit introduces `ProjectRequestPostProcessor` as a mean to modify an incoming `ProjectRequest` before and after its resolution against the meta-data. By default, all beans of that type are invoked automatically and they are ordered against their `@Order` or `Ordered` settings. Closes gh-260
This commit is contained in:
@@ -20,6 +20,8 @@ import java.util.concurrent.TimeUnit
|
||||
|
||||
import com.google.common.cache.CacheBuilder
|
||||
import io.spring.initializr.generator.ProjectGenerator
|
||||
import io.spring.initializr.generator.ProjectRequestPostProcessor
|
||||
import io.spring.initializr.generator.ProjectRequestResolver
|
||||
import io.spring.initializr.generator.ProjectResourceLocator
|
||||
import io.spring.initializr.metadata.DependencyMetadataProvider
|
||||
import io.spring.initializr.metadata.InitializrMetadataBuilder
|
||||
@@ -30,6 +32,7 @@ import io.spring.initializr.web.support.DefaultDependencyMetadataProvider
|
||||
import io.spring.initializr.web.support.DefaultInitializrMetadataProvider
|
||||
import io.spring.initializr.web.ui.UiController
|
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean
|
||||
import org.springframework.boot.context.properties.EnableConfigurationProperties
|
||||
import org.springframework.cache.CacheManager
|
||||
@@ -56,6 +59,9 @@ import org.springframework.context.annotation.Configuration
|
||||
@EnableConfigurationProperties(InitializrProperties)
|
||||
class InitializrAutoConfiguration {
|
||||
|
||||
@Autowired(required = false)
|
||||
List<ProjectRequestPostProcessor> postProcessors = []
|
||||
|
||||
@Bean
|
||||
WebConfig webConfig() {
|
||||
new WebConfig()
|
||||
@@ -79,6 +85,12 @@ class InitializrAutoConfiguration {
|
||||
new ProjectGenerator()
|
||||
}
|
||||
|
||||
@Bean
|
||||
@ConditionalOnMissingBean
|
||||
ProjectRequestResolver projectRequestResolver() {
|
||||
new ProjectRequestResolver(postProcessors)
|
||||
}
|
||||
|
||||
@Bean
|
||||
ProjectResourceLocator projectResourceLocator() {
|
||||
return new ProjectResourceLocator()
|
||||
|
@@ -0,0 +1,59 @@
|
||||
package io.spring.initializr.web.project
|
||||
|
||||
import io.spring.initializr.generator.ProjectRequest
|
||||
import io.spring.initializr.generator.ProjectRequestPostProcessor
|
||||
import io.spring.initializr.generator.ProjectRequestPostProcessorAdapter
|
||||
import io.spring.initializr.metadata.InitializrMetadata
|
||||
import io.spring.initializr.web.AbstractInitializrControllerIntegrationTests
|
||||
import org.junit.Test
|
||||
|
||||
import org.springframework.boot.test.SpringApplicationConfiguration
|
||||
import org.springframework.context.annotation.Bean
|
||||
import org.springframework.context.annotation.Configuration
|
||||
import org.springframework.core.annotation.Order
|
||||
import org.springframework.test.context.ActiveProfiles
|
||||
|
||||
@ActiveProfiles('test-default')
|
||||
@SpringApplicationConfiguration(classes = [Config, ProjectRequestPostProcessorConfiguration])
|
||||
class ProjectGenerationPostProcessorTests extends AbstractInitializrControllerIntegrationTests {
|
||||
|
||||
|
||||
@Test
|
||||
void postProcessorsInvoked() {
|
||||
downloadZip('/starter.zip?bootVersion=1.2.4.RELEASE&javaVersion=1.6')
|
||||
.isJavaProject()
|
||||
.isMavenProject().pomAssert()
|
||||
.hasSpringBootParent('1.2.3.RELEASE')
|
||||
.hasProperty('java.version', '1.7')
|
||||
}
|
||||
|
||||
|
||||
@Configuration
|
||||
static class ProjectRequestPostProcessorConfiguration {
|
||||
|
||||
@Bean
|
||||
@Order(2)
|
||||
ProjectRequestPostProcessor secondPostProcessor() {
|
||||
new ProjectRequestPostProcessorAdapter() {
|
||||
@Override
|
||||
void postProcessBeforeResolution(ProjectRequest request, InitializrMetadata metadata) {
|
||||
request.javaVersion = '1.7'
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Bean
|
||||
@Order(1)
|
||||
ProjectRequestPostProcessor firstPostProcessor() {
|
||||
new ProjectRequestPostProcessorAdapter() {
|
||||
@Override
|
||||
void postProcessBeforeResolution(ProjectRequest request, InitializrMetadata metadata) {
|
||||
request.javaVersion = '1.2'
|
||||
request.bootVersion = '1.2.3.RELEASE'
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
Reference in New Issue
Block a user