From d93a390af714f4e5f91046a9e21634b8c6094488 Mon Sep 17 00:00:00 2001 From: Dave Syer Date: Thu, 26 Feb 2015 14:34:34 +0000 Subject: [PATCH] Add InitializrMetadataCustomizer callback --- .../initializr/InitializrMetadata.groovy | 11 +++++++- .../InitializrMetadataCustomizer.groovy | 25 +++++++++++++++++++ .../initializr/InitializrMetadataTests.groovy | 15 +++++++++++ 3 files changed, 50 insertions(+), 1 deletion(-) create mode 100644 initializr/src/main/groovy/io/spring/initializr/InitializrMetadataCustomizer.groovy diff --git a/initializr/src/main/groovy/io/spring/initializr/InitializrMetadata.groovy b/initializr/src/main/groovy/io/spring/initializr/InitializrMetadata.groovy index 79255190..38e88206 100644 --- a/initializr/src/main/groovy/io/spring/initializr/InitializrMetadata.groovy +++ b/initializr/src/main/groovy/io/spring/initializr/InitializrMetadata.groovy @@ -26,6 +26,7 @@ import io.spring.initializr.mapper.InitializrMetadataV2JsonMapper import io.spring.initializr.support.InvalidVersionException import io.spring.initializr.support.VersionRange +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.context.properties.ConfigurationProperties /** @@ -65,6 +66,9 @@ class InitializrMetadata { final Env env = new Env() private final Map indexedDependencies = [:] + + @Autowired + List customizers = [] /** * Return the {@link Dependency} with the specified id or {@code null} if @@ -170,7 +174,12 @@ class InitializrMetadata { */ @PostConstruct void validate() { - for (DependencyGroup group : dependencies) { + + customizers.each { customizer -> + customizer.customize(this) + } + + dependencies.each { group -> group.content.each { dependency -> validateDependency(dependency) indexDependency(dependency.id, dependency) diff --git a/initializr/src/main/groovy/io/spring/initializr/InitializrMetadataCustomizer.groovy b/initializr/src/main/groovy/io/spring/initializr/InitializrMetadataCustomizer.groovy new file mode 100644 index 00000000..e6aaadfe --- /dev/null +++ b/initializr/src/main/groovy/io/spring/initializr/InitializrMetadataCustomizer.groovy @@ -0,0 +1,25 @@ +/* + * Copyright 2014-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. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.spring.initializr + +/** + * @author Dave Syer + * + */ +interface InitializrMetadataCustomizer { + void customize(InitializrMetadata metadata) +} diff --git a/initializr/src/test/groovy/io/spring/initializr/InitializrMetadataTests.groovy b/initializr/src/test/groovy/io/spring/initializr/InitializrMetadataTests.groovy index 044ec5ca..b3c98fda 100644 --- a/initializr/src/test/groovy/io/spring/initializr/InitializrMetadataTests.groovy +++ b/initializr/src/test/groovy/io/spring/initializr/InitializrMetadataTests.groovy @@ -139,6 +139,21 @@ class InitializrMetadataTests { dependency.generateId() } + @Test + void addDependencyInCustomizer() { + def group = new InitializrMetadata.DependencyGroup() + group.name = 'Extra' + def dependency = createDependency('com.foo:foo:1.0.0') + group.content.add(dependency) + metadata.setCustomizers([new InitializrMetadataCustomizer() { + void customize(InitializrMetadata metadata) { + metadata.dependencies.add(group) + } + }]) + metadata.validate() + assertEquals 1, metadata.dependencies.size() + } + @Test void indexedDependencies() { def dependency = createDependency('first')