From ac970139e8db33bb7e1fdbf90f4e22cbd70aa0e6 Mon Sep 17 00:00:00 2001 From: Stephane Nicoll Date: Thu, 1 Oct 2015 12:13:36 +0200 Subject: [PATCH] Expose group in /ui/dependencies Expose the group of each dependency so that it can be added as a search term. See gh-145 --- .../spring/initializr/web/UiController.groovy | 44 ++++++++++++------- .../dependencies/test-dependencies-1.1.2.json | 16 ++++--- .../dependencies/test-dependencies-all.json | 22 +++++++--- 3 files changed, 54 insertions(+), 28 deletions(-) diff --git a/initializr/src/main/groovy/io/spring/initializr/web/UiController.groovy b/initializr/src/main/groovy/io/spring/initializr/web/UiController.groovy index 60acc710..6b5150c7 100644 --- a/initializr/src/main/groovy/io/spring/initializr/web/UiController.groovy +++ b/initializr/src/main/groovy/io/spring/initializr/web/UiController.groovy @@ -17,7 +17,6 @@ package io.spring.initializr.web import groovy.json.JsonBuilder -import io.spring.initializr.metadata.DependenciesCapability import io.spring.initializr.metadata.Dependency import io.spring.initializr.metadata.InitializrMetadataProvider import io.spring.initializr.util.Version @@ -40,38 +39,41 @@ class UiController { @Autowired protected InitializrMetadataProvider metadataProvider - @RequestMapping(value = "/ui/dependencies" , produces = ["application/json"]) + @RequestMapping(value = "/ui/dependencies", produces = ["application/json"]) String dependencies(@RequestParam(required = false) String version) { - DependenciesCapability dependenciesCapability = metadataProvider.get().dependencies - List allDependencies = dependenciesCapability.content.collectMany { it.content } - if (version) { - Version v = Version.parse(version) - def filteredDependencies = allDependencies.findAll { d -> - if (d.versionRange) { - return VersionRange.parse(d.versionRange).match(v) + def dependencyGroups = metadataProvider.get().dependencies.content + def content = [] + Version v = version ? Version.parse(version) : null + dependencyGroups.each { g -> + g.content.each { d -> + if (v && d.versionRange) { + if (VersionRange.parse(d.versionRange).match(v)) { + content << new DependencyItem(g.name, d) + } + } else { + content << new DependencyItem(g.name, d) } - return true } - writeDependencies(filteredDependencies) - } else { - writeDependencies(allDependencies) } + writeDependencies(content) } - private static String writeDependencies(List deps) { + private static String writeDependencies(List items) { JsonBuilder json = new JsonBuilder(); json { - dependencies deps.collect { d -> + dependencies items.collect { d -> mapDependency(d) } } json.toString() } - private static mapDependency(Dependency d) { + private static mapDependency(DependencyItem item) { def result = [:] + Dependency d = item.dependency result.id = d.id result.name = d.name + result.group = item.group if (d.description) { result.description = d.description } @@ -84,4 +86,14 @@ class UiController { result } + private static class DependencyItem { + private final String group + private final Dependency dependency + + DependencyItem(String group, Dependency dependency) { + this.group = group + this.dependency = dependency + } + } + } diff --git a/initializr/src/test/resources/metadata/dependencies/test-dependencies-1.1.2.json b/initializr/src/test/resources/metadata/dependencies/test-dependencies-1.1.2.json index a1a587ae..719e61ad 100644 --- a/initializr/src/test/resources/metadata/dependencies/test-dependencies-1.1.2.json +++ b/initializr/src/test/resources/metadata/dependencies/test-dependencies-1.1.2.json @@ -3,29 +3,35 @@ { "id": "web", "name": "Web", - "description": "Web dependency description" + "description": "Web dependency description", + "group": "Core" }, { "id": "security", - "name": "Security" + "name": "Security", + "group": "Core" }, { "id": "data-jpa", - "name": "Data JPA" + "name": "Data JPA", + "group": "Core" }, { "id": "org.acme:foo", "name": "Foo", + "group": "Other", "keywords": "thefoo,dafoo", "weight": 42 }, { "id": "org.acme:bar", - "name": "Bar" + "name": "Bar", + "group": "Other" }, { "id": "my-api", - "name": "My API" + "name": "My API", + "group": "Other" } ] } \ No newline at end of file diff --git a/initializr/src/test/resources/metadata/dependencies/test-dependencies-all.json b/initializr/src/test/resources/metadata/dependencies/test-dependencies-all.json index 7835e74f..b0ae42e6 100644 --- a/initializr/src/test/resources/metadata/dependencies/test-dependencies-all.json +++ b/initializr/src/test/resources/metadata/dependencies/test-dependencies-all.json @@ -3,37 +3,45 @@ { "id": "web", "name": "Web", - "description": "Web dependency description" + "description": "Web dependency description", + "group": "Core" }, { "id": "security", - "name": "Security" + "name": "Security", + "group": "Core" }, { "id": "data-jpa", - "name": "Data JPA" + "name": "Data JPA", + "group": "Core" }, { "id": "org.acme:foo", "name": "Foo", + "group": "Other", "keywords": "thefoo,dafoo", "weight": 42 }, { "id": "org.acme:bar", - "name": "Bar" + "name": "Bar", + "group": "Other" }, { "id": "org.acme:biz", - "name": "Biz" + "name": "Biz", + "group": "Other" }, { "id": "org.acme:bur", - "name": "Bur" + "name": "Bur", + "group": "Other" }, { "id": "my-api", - "name": "My API" + "name": "My API", + "group": "Other" } ] } \ No newline at end of file