From db472bf04e8a59b3015fe39efa4899bd1cd8f6e4 Mon Sep 17 00:00:00 2001 From: Nieraj Singh Date: Sat, 12 Nov 2022 03:56:54 -0800 Subject: [PATCH] Partial implementation of Spring Boot Releases --- .../commons/java/SpringProjectUtil.java | 18 +++++++++++++++ .../generations/json/GenerationsEmbedded.java | 4 ---- .../generations/json/JsonHalEmbedded.java | 2 -- .../validation/generations/json/Links.java | 20 ---------------- .../validation/generations/json/Release.java | 23 +++++++++++++++++++ .../validation/generations/json/Releases.java | 16 +++++++++++++ .../generations/json/SpringProject.java | 15 ++++++++++++ .../json/SpringProjectsEmbedded.java | 4 ---- .../ProjectGenerationsValidationTest.java | 22 ++++++++++++++++++ 9 files changed, 94 insertions(+), 30 deletions(-) create mode 100644 headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/validation/generations/json/Release.java create mode 100644 headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/validation/generations/json/Releases.java diff --git a/headless-services/commons/commons-java/src/main/java/org/springframework/ide/vscode/commons/java/SpringProjectUtil.java b/headless-services/commons/commons-java/src/main/java/org/springframework/ide/vscode/commons/java/SpringProjectUtil.java index 7fa15432f..0386b0774 100644 --- a/headless-services/commons/commons-java/src/main/java/org/springframework/ide/vscode/commons/java/SpringProjectUtil.java +++ b/headless-services/commons/commons-java/src/main/java/org/springframework/ide/vscode/commons/java/SpringProjectUtil.java @@ -186,4 +186,22 @@ public class SpringProjectUtil { } return null; } + + public static Version getVersion(String version) { + Pattern pattern = Pattern.compile(VERSION_PATTERN_STR); + Matcher matcher = pattern.matcher(version); + if (matcher.find() && matcher.groupCount() > 4) { + String major = matcher.group(1); + String minor = matcher.group(2); + String patch = matcher.group(3); + String qualifier = matcher.group(5); + return new Version( + Integer.parseInt(major), + Integer.parseInt(minor), + Integer.parseInt(patch), + qualifier + ); + } + return null; + } } diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/validation/generations/json/GenerationsEmbedded.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/validation/generations/json/GenerationsEmbedded.java index 9679fc075..f3ece6f86 100644 --- a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/validation/generations/json/GenerationsEmbedded.java +++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/validation/generations/json/GenerationsEmbedded.java @@ -18,8 +18,4 @@ public class GenerationsEmbedded extends JsonHalLinks implements JsonHalEmbedded public Generations get_embedded() { return _embedded; } - - public void set_embedded(Generations _embedded) { - this._embedded = _embedded; - } } diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/validation/generations/json/JsonHalEmbedded.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/validation/generations/json/JsonHalEmbedded.java index 29dd01992..9e084ded0 100644 --- a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/validation/generations/json/JsonHalEmbedded.java +++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/validation/generations/json/JsonHalEmbedded.java @@ -13,6 +13,4 @@ package org.springframework.ide.vscode.boot.validation.generations.json; public interface JsonHalEmbedded { T get_embedded(); - - void set_embedded(T _embedded); } diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/validation/generations/json/Links.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/validation/generations/json/Links.java index 8cb988a92..e6422f633 100644 --- a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/validation/generations/json/Links.java +++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/validation/generations/json/Links.java @@ -22,39 +22,19 @@ public class Links { return self; } - public void setSelf(Link self) { - this.self = self; - } - public Link getReleases() { return releases; } - public void setReleases(Link releases) { - this.releases = releases; - } - public Link getGenerations() { return generations; } - public void setGenerations(Link generations) { - this.generations = generations; - } - public Link getParent() { return parent; } - public void setParent(Link parent) { - this.parent = parent; - } - public Link getProject() { return project; } - - public void setProject(Link project) { - this.project = project; - } } diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/validation/generations/json/Release.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/validation/generations/json/Release.java new file mode 100644 index 000000000..5f5a03595 --- /dev/null +++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/validation/generations/json/Release.java @@ -0,0 +1,23 @@ +package org.springframework.ide.vscode.boot.validation.generations.json; + +import org.springframework.ide.vscode.commons.java.SpringProjectUtil; +import org.springframework.ide.vscode.commons.java.Version; + +public class Release { + + private String version; + private String status; + private boolean current; + + public Version getVersion() { + return SpringProjectUtil.getVersion(version); + } + + public String getStatus() { + return status; + } + + public boolean isCurrent() { + return current; + } +} diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/validation/generations/json/Releases.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/validation/generations/json/Releases.java new file mode 100644 index 000000000..afe45b46a --- /dev/null +++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/validation/generations/json/Releases.java @@ -0,0 +1,16 @@ +package org.springframework.ide.vscode.boot.validation.generations.json; + +import java.util.Arrays; +import java.util.List; + +import com.google.common.collect.ImmutableList; + +public class Releases { + + private Release[] releases; + + public List getReleases() { + return releases != null ? Arrays.asList(releases) : ImmutableList.of(); + } + +} diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/validation/generations/json/SpringProject.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/validation/generations/json/SpringProject.java index 22bb6e111..627cf910d 100644 --- a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/validation/generations/json/SpringProject.java +++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/validation/generations/json/SpringProject.java @@ -15,6 +15,7 @@ import org.springframework.ide.vscode.boot.validation.generations.SpringProjects public class SpringProject extends JsonHalLinks { private Generations generations; + private Releases releases; private String name; @@ -52,4 +53,18 @@ public class SpringProject extends JsonHalLinks { } return this.generations; } + + public Releases getReleases(SpringProjectsClient client) throws Exception { + // cache the releases to prevent frequent calls to the client + if (this.releases == null) { + Links _links = get_links(); + if (_links != null) { + Link genLink = _links.getReleases(); + if (genLink != null) { +// this.releases = client.getGenerations(genLink.getHref()); + } + } + } + return this.releases; + } } diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/validation/generations/json/SpringProjectsEmbedded.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/validation/generations/json/SpringProjectsEmbedded.java index f6950fc3d..8b0482b1d 100644 --- a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/validation/generations/json/SpringProjectsEmbedded.java +++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/validation/generations/json/SpringProjectsEmbedded.java @@ -17,8 +17,4 @@ public class SpringProjectsEmbedded extends JsonHalLinks implements JsonHalEmbed public SpringProjects get_embedded() { return _embedded; } - - public void set_embedded(SpringProjects _embedded) { - this._embedded = _embedded; - } } diff --git a/headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/validation/test/ProjectGenerationsValidationTest.java b/headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/validation/test/ProjectGenerationsValidationTest.java index 7da1e56f9..769dd664b 100644 --- a/headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/validation/test/ProjectGenerationsValidationTest.java +++ b/headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/validation/test/ProjectGenerationsValidationTest.java @@ -134,4 +134,26 @@ public class ProjectGenerationsValidationTest { version = SpringProjectUtil.getDependencyVersion("spring-boot-actuator-1.2.3.BUILD-SNAPSHOT.jar", "spring-boot"); assertNull(version); } + + @Test + public void testVersionCalculation() throws Exception { + Version version = SpringProjectUtil.getVersion("2.7.5"); + assertEquals(2, version.getMajor()); + assertEquals(7, version.getMinor()); + assertEquals(5, version.getPatch()); + assertNull(version.getQualifier()); + + version = SpringProjectUtil.getVersion("3.0.0-SNAPSHOT"); + assertEquals(3, version.getMajor()); + assertEquals(0, version.getMinor()); + assertEquals(0, version.getPatch()); + assertEquals(version.getQualifier(), "SNAPSHOT"); + + + version = SpringProjectUtil.getVersion("2.6.14-RC2"); + assertEquals(2, version.getMajor()); + assertEquals(6, version.getMinor()); + assertEquals(14, version.getPatch()); + assertEquals(version.getQualifier(), "RC2"); + } }