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 id: jdbc
- name: JPA - name: JPA
id: data-jpa id: data-jpa
aliases:
- jpa
- name: MongoDB - name: MongoDB
id: data-mongodb id: data-mongodb
- name: Redis - name: Redis

View File

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

View File

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

View File

@ -115,17 +115,12 @@ class InitializrMetadataTests {
@Test @Test
void indexedDependencies() { void indexedDependencies() {
InitializrMetadata metadata = new InitializrMetadata()
InitializrMetadata.DependencyGroup group = new InitializrMetadata.DependencyGroup()
InitializrMetadata.Dependency dependency = createDependency('first') InitializrMetadata.Dependency dependency = createDependency('first')
group.content.add(dependency)
InitializrMetadata.Dependency dependency2 = createDependency('second') 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 dependency, metadata.getDependency('first')
assertSame dependency2, metadata.getDependency('second') assertSame dependency2, metadata.getDependency('second')
@ -134,19 +129,46 @@ class InitializrMetadataTests {
@Test @Test
void addTwoDependenciesWithSameId() { void addTwoDependenciesWithSameId() {
InitializrMetadata metadata = new InitializrMetadata()
InitializrMetadata.DependencyGroup group = new InitializrMetadata.DependencyGroup()
InitializrMetadata.Dependency dependency = createDependency('conflict') InitializrMetadata.Dependency dependency = createDependency('conflict')
group.content.add(dependency)
InitializrMetadata.Dependency dependency2 = createDependency('conflict') 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.expect(IllegalArgumentException)
thrown.expectMessage('conflict') 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 @Test

View File

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