diff --git a/initializr-generator/src/main/groovy/io/spring/initializr/metadata/Dependency.groovy b/initializr-generator/src/main/groovy/io/spring/initializr/metadata/Dependency.groovy index 854e7ebc..d7e88ce9 100644 --- a/initializr-generator/src/main/groovy/io/spring/initializr/metadata/Dependency.groovy +++ b/initializr-generator/src/main/groovy/io/spring/initializr/metadata/Dependency.groovy @@ -16,6 +16,7 @@ package io.spring.initializr.metadata +import com.fasterxml.jackson.annotation.JsonIgnore import com.fasterxml.jackson.annotation.JsonInclude import groovy.transform.AutoClone import groovy.transform.AutoCloneStyle @@ -81,6 +82,9 @@ class Dependency extends MetadataElement { String versionRange + @JsonIgnore + String versionRequirement + String bom String repository @@ -157,7 +161,8 @@ class Dependency extends MetadataElement { } if (versionRange) { try { - VersionRange.parse(versionRange) + def range = VersionRange.parse(versionRange) + versionRequirement = range.toString() } catch (InvalidVersionException ex) { throw new InvalidInitializrMetadataException("Invalid version range '$versionRange' for " + "dependency with id '$id'") @@ -183,6 +188,7 @@ class Dependency extends MetadataElement { dependency.groupId = mapping.groupId ? mapping.groupId : this.groupId dependency.artifactId = mapping.artifactId ? mapping.artifactId : this.artifactId dependency.version = mapping.version ? mapping.version : this.version + dependency.versionRequirement = mapping.range.toString() dependency.mappings = null return dependency } diff --git a/initializr-generator/src/main/groovy/io/spring/initializr/util/VersionRange.groovy b/initializr-generator/src/main/groovy/io/spring/initializr/util/VersionRange.groovy index 2f05d2da..537b87a5 100644 --- a/initializr-generator/src/main/groovy/io/spring/initializr/util/VersionRange.groovy +++ b/initializr-generator/src/main/groovy/io/spring/initializr/util/VersionRange.groovy @@ -38,7 +38,6 @@ import org.springframework.util.Assert * @author Stephane Nicoll * @since 1.0 */ -@ToString @EqualsAndHashCode class VersionRange { @@ -80,6 +79,18 @@ class VersionRange { return true } + @Override + String toString() { + StringBuffer sb = new StringBuffer() + if (lowerVersion) { + sb.append("${lowerInclusive ? '>=' : '>'}${lowerVersion}") + } + if (higherVersion) { + sb.append(" and ${higherInclusive ? '<=' : '<'}${higherVersion}") + } + return sb.toString() + } + /** * Parse the string representation of a {@link VersionRange}. Throws an * {@link InvalidVersionException} if the range could not be parsed. diff --git a/initializr-generator/src/test/groovy/io/spring/initializr/metadata/DependencyTests.groovy b/initializr-generator/src/test/groovy/io/spring/initializr/metadata/DependencyTests.groovy index 14cc2391..ae66bd45 100644 --- a/initializr-generator/src/test/groovy/io/spring/initializr/metadata/DependencyTests.groovy +++ b/initializr-generator/src/test/groovy/io/spring/initializr/metadata/DependencyTests.groovy @@ -155,6 +155,16 @@ class DependencyTests { dependency.resolve() } + @Test + void resolveVersionRequirement() { + def dependency = new Dependency(id: 'web') + dependency.mappings << new Dependency.Mapping( + versionRange: '[1.1.0.RELEASE, 1.2.0.RELEASE)', version: '0.1.0.RELEASE') + dependency.resolve() + def resolved = dependency.resolve(Version.parse('1.1.5.RELEASE')) + assertEquals ">=1.1.0.RELEASE and <1.2.0.RELEASE", resolved.versionRequirement + } + @Test void resolveMatchingVersionMapping() { def dependency = new Dependency(id: 'web', description: 'A web dependency', version: '0.3.0.RELEASE', diff --git a/initializr-web/src/main/resources/static/css/spring.css b/initializr-web/src/main/resources/static/css/spring.css index d4ab63c3..bff107a9 100644 --- a/initializr-web/src/main/resources/static/css/spring.css +++ b/initializr-web/src/main/resources/static/css/spring.css @@ -69,6 +69,13 @@ input[type=text] { margin: 1em 0; } +.version-requirement { + display: none; +} +.disabled .version-requirement { + display: block; +} + /* autocomplete */ #autocomplete, .twitter-typeahead, .tt-hint { diff --git a/initializr-web/src/main/resources/static/js/start.js b/initializr-web/src/main/resources/static/js/start.js index 44fc837d..320823be 100644 --- a/initializr-web/src/main/resources/static/js/start.js +++ b/initializr-web/src/main/resources/static/js/start.js @@ -125,12 +125,12 @@ $(function () { var refreshDependencies = function (versionRange) { var versions = new Versions(); $("#dependencies div.checkbox").each(function (idx, item) { - if ($(item).attr('data-range') === 'null' || versions.matchRange($(item).attr('data-range'))(versionRange)) { + if (!$(item).attr('data-range') || versions.matchRange($(item).attr('data-range'))(versionRange)) { $("input", item).removeAttr("disabled"); - $(item).removeClass("disabled"); + $(item).removeClass("disabled has-error"); } else { $("input", item).prop('checked', false); - $(item).addClass("disabled"); + $(item).addClass("disabled has-error"); $("input", item).attr("disabled", true); removeTag($("input", item).val()); } diff --git a/initializr-web/src/main/resources/templates/home.html b/initializr-web/src/main/resources/templates/home.html index 180c2332..c0a4ec2f 100644 --- a/initializr-web/src/main/resources/templates/home.html +++ b/initializr-web/src/main/resources/templates/home.html @@ -139,11 +139,13 @@

${it.name}

<% it.content.each { %> -
+
<% } %>