Add dependency alias support

This commit allows to specify an arbitrary number of aliases for a
dependency. A project can be generated using that dependency either
referring to its main id or any of its registered aliases.

Fixes gh-29
This commit is contained in:
Stephane Nicoll 2014-08-19 11:55:26 +02:00
parent 50ee4a5a91
commit b5845ab3c4
5 changed files with 46 additions and 16 deletions

View File

@ -20,6 +20,8 @@ initializr:
id: jdbc
- name: JPA
id: data-jpa
aliases:
- jpa
- name: MongoDB
id: data-mongodb
- name: Redis

View File

@ -93,6 +93,9 @@ class InitializrMetadata {
for (Dependency dependency : group.getContent()) {
validateDependency(dependency)
indexDependency(dependency.id, dependency)
for (String alias : dependency.aliases) {
indexDependency(alias, dependency)
}
}
}
}
@ -153,6 +156,9 @@ class InitializrMetadata {
@ToString(ignoreNulls = true, includePackage = false)
static class Dependency extends IdentifiableElement {
@JsonIgnore
List<String> aliases = []
@JsonIgnore
String groupId

View File

@ -59,8 +59,6 @@ class ProjectRequest {
if (!style.class.isArray() && !(style instanceof Collection)) {
style = [style]
}
style = style.collect { it == 'jpa' ? 'data-jpa' : it }
style.collect { it == '' ? '' : '-' + it }
dependencies = style.collect {
InitializrMetadata.Dependency dependency = metadata.getDependency(it)
if (dependency == null) {

View File

@ -115,17 +115,12 @@ class InitializrMetadataTests {
@Test
void indexedDependencies() {
InitializrMetadata metadata = new InitializrMetadata()
InitializrMetadata.DependencyGroup group = new InitializrMetadata.DependencyGroup()
InitializrMetadata.Dependency dependency = createDependency('first')
group.content.add(dependency)
InitializrMetadata.Dependency dependency2 = createDependency('second')
group.content.add(dependency2)
metadata.dependencies.add(group)
metadata.validate()
InitializrMetadata metadata = InitializrMetadataBuilder.withDefaults()
.addDependencyGroup('foo', dependency, dependency2).get()
assertSame dependency, metadata.getDependency('first')
assertSame dependency2, metadata.getDependency('second')
@ -134,19 +129,46 @@ class InitializrMetadataTests {
@Test
void addTwoDependenciesWithSameId() {
InitializrMetadata metadata = new InitializrMetadata()
InitializrMetadata.DependencyGroup group = new InitializrMetadata.DependencyGroup()
InitializrMetadata.Dependency dependency = createDependency('conflict')
group.content.add(dependency)
InitializrMetadata.Dependency dependency2 = createDependency('conflict')
group.content.add(dependency2)
metadata.dependencies.add(group)
InitializrMetadataBuilder builder = InitializrMetadataBuilder.withDefaults()
.addDependencyGroup('foo', dependency, dependency2)
thrown.expect(IllegalArgumentException)
thrown.expectMessage('conflict')
metadata.validate()
builder.get()
}
@Test
void addDependencyWithAliases() {
InitializrMetadata.Dependency dependency = createDependency('first')
dependency.aliases.add('alias1')
dependency.aliases.add('alias2')
InitializrMetadata metadata = InitializrMetadataBuilder.withDefaults()
.addDependencyGroup('foo', dependency).get()
assertSame dependency, metadata.getDependency('first')
assertSame dependency, metadata.getDependency('alias1')
assertSame dependency, metadata.getDependency('alias2')
}
@Test
void aliasClashWithAnotherDependency() {
InitializrMetadata.Dependency dependency = createDependency('first')
dependency.aliases.add('alias1')
dependency.aliases.add('alias2')
InitializrMetadata.Dependency dependency2 = createDependency('alias2')
InitializrMetadataBuilder builder = InitializrMetadataBuilder.withDefaults()
.addDependencyGroup('foo', dependency)
.addDependencyGroup('bar', dependency2)
thrown.expect(IllegalArgumentException)
thrown.expectMessage('alias2')
builder.get()
}
@Test

View File

@ -13,6 +13,8 @@ initializr:
id: security
- name: Data JPA
id: data-jpa
aliases:
- jpa
- name: Other
content:
- name: Foo