diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/app/BootVersionValidator.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/app/BootVersionValidator.java index 02a5cad6f..96527bf54 100644 --- a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/app/BootVersionValidator.java +++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/app/BootVersionValidator.java @@ -20,6 +20,7 @@ import org.springframework.ide.vscode.boot.validation.generations.SpringIoProjec import org.springframework.ide.vscode.boot.validation.generations.SpringProjectDiagnostic; import org.springframework.ide.vscode.boot.validation.generations.SpringProjectsClient; import org.springframework.ide.vscode.boot.validation.generations.SpringProjectsProvider; +import org.springframework.ide.vscode.boot.validation.generations.VersionValidationPreferences; import org.springframework.ide.vscode.boot.validation.generations.VersionValidators; import org.springframework.ide.vscode.commons.java.IJavaProject; import org.springframework.ide.vscode.commons.languageserver.java.ProjectObserver; @@ -42,11 +43,13 @@ public class BootVersionValidator { @Override public void created(IJavaProject project) { - - String url = getSpringProjectsUrl(); + VersionValidationPreferences preferences = new VersionValidationPreferences(); + + String url = getSpringProjectsUrl(preferences); SpringProjectsClient client = new SpringProjectsClient(url); SpringProjectsProvider provider = new SpringIoProjectsProvider(client); - VersionValidators validators = new VersionValidators(); + VersionValidators validators = new VersionValidators(preferences); + ProjectVersionDiagnosticProvider diagnosticProvider = new ProjectVersionDiagnosticProvider(provider, validators); try { @@ -69,10 +72,7 @@ public class BootVersionValidator { }); } - - private String getSpringProjectsUrl() { - // TODO: Read from preferences - return "https://spring.io/api/projects"; + private String getSpringProjectsUrl(VersionValidationPreferences preferences) { + return preferences.getSpringProjectsUrl(); } - } diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/validation/generations/ProjectVersionDiagnosticProvider.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/validation/generations/ProjectVersionDiagnosticProvider.java index e61d5d6cf..18bab126c 100644 --- a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/validation/generations/ProjectVersionDiagnosticProvider.java +++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/validation/generations/ProjectVersionDiagnosticProvider.java @@ -46,7 +46,7 @@ public class ProjectVersionDiagnosticProvider { /** * - * @return Non-null list of Diagnostics. Can be empty if no diagnostics are + * @return Non-null list of Diagnostics for the given Java project. Can be empty if no diagnostics are * applicable. * @throws If error encountered while getting diagnostics */ @@ -64,19 +64,20 @@ public class ProjectVersionDiagnosticProvider { throw new Exception("Unable to resolve version for project: " + javaProject.getLocationUri().toString()); } - // The generation of the current dependency Generation javaProjectGeneration = getGenerationForJavaProject(javaProject, springProject); if (javaProjectGeneration == null) { - throw new Exception("Unable to find Spring Generation for project: " + javaProjectVersion.toString()); + throw new Exception("Unable to find Spring Project Generation for project: " + javaProjectVersion.toString()); } VersionValidation validation = null; for (VersionValidator validator : validators.getValidators()) { - validation = validator.getValidation(springProject, javaProjectGeneration, javaProjectVersion); - if (validation != null) { - break; + if (validator.isEnabled()) { + validation = validator.getValidation(springProject, javaProjectGeneration, javaProjectVersion); + if (validation != null) { + break; + } } } diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/validation/generations/ValidationPreference.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/validation/generations/ValidationPreference.java new file mode 100644 index 000000000..c036d0b5c --- /dev/null +++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/validation/generations/ValidationPreference.java @@ -0,0 +1,33 @@ +/******************************************************************************* + * Copyright (c) 2022 VMware, Inc. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * https://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * VMware, Inc. - initial API and implementation + *******************************************************************************/ +package org.springframework.ide.vscode.boot.validation.generations; + +import org.eclipse.lsp4j.DiagnosticSeverity; + +public class ValidationPreference { + + private final boolean enabled; + private final DiagnosticSeverity severity; + + public ValidationPreference(boolean enabled, DiagnosticSeverity severity) { + super(); + this.enabled = enabled; + this.severity = severity; + } + + public boolean isEnabled() { + return enabled; + } + + public DiagnosticSeverity getSeverity() { + return severity; + } +} diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/validation/generations/VersionValidation.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/validation/generations/VersionValidation.java index 8ad68363d..8547892a3 100644 --- a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/validation/generations/VersionValidation.java +++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/validation/generations/VersionValidation.java @@ -16,21 +16,15 @@ import org.springframework.ide.vscode.commons.java.Version; public class VersionValidation { private final Version versionToUpgrade; - private final boolean enabled; private final DiagnosticSeverity severity; private final String message; - public VersionValidation(Version versionToUpgrade, boolean enabled, DiagnosticSeverity severity, String message) { + public VersionValidation(Version versionToUpgrade, DiagnosticSeverity severity, String message) { this.versionToUpgrade = versionToUpgrade; - this.enabled = enabled; this.severity = severity; this.message = message; } - public boolean isEnabled() { - return this.enabled; - } - public DiagnosticSeverity getSeverity() { return this.severity; } diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/validation/generations/VersionValidationPreferences.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/validation/generations/VersionValidationPreferences.java new file mode 100644 index 000000000..ca9123d72 --- /dev/null +++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/validation/generations/VersionValidationPreferences.java @@ -0,0 +1,39 @@ +/******************************************************************************* + * Copyright (c) 2022 VMware, Inc. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * https://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * VMware, Inc. - initial API and implementation + *******************************************************************************/ +package org.springframework.ide.vscode.boot.validation.generations; + +import org.eclipse.lsp4j.DiagnosticSeverity; + +// TODO: integrate with actual LS preferences +public class VersionValidationPreferences { + + private static final String DEFAULT_SPRING_PROJECT_URL = "https://spring.io/api/projects"; + + public ValidationPreference getSupportedPreference() { + return new ValidationPreference(true, DiagnosticSeverity.Hint); + } + + public ValidationPreference getUnsupportedOssPreference() { + return new ValidationPreference(true, DiagnosticSeverity.Warning); + } + + public ValidationPreference getUnsupportedCommercialPreference() { + return new ValidationPreference(true, DiagnosticSeverity.Warning); + } + + public ValidationPreference getUnsupportedPreference() { + return new ValidationPreference(true, DiagnosticSeverity.Error); + } + + public String getSpringProjectsUrl() { + return DEFAULT_SPRING_PROJECT_URL; + } +} diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/validation/generations/VersionValidator.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/validation/generations/VersionValidator.java index 408510053..71536f959 100644 --- a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/validation/generations/VersionValidator.java +++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/validation/generations/VersionValidator.java @@ -27,5 +27,7 @@ public interface VersionValidator { */ VersionValidation getValidation(ResolvedSpringProject springProject, Generation generation, Version version) throws Exception; + + boolean isEnabled(); } diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/validation/generations/VersionValidators.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/validation/generations/VersionValidators.java index 52d93e092..5cadb8523 100644 --- a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/validation/generations/VersionValidators.java +++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/validation/generations/VersionValidators.java @@ -10,6 +10,7 @@ *******************************************************************************/ package org.springframework.ide.vscode.boot.validation.generations; +import java.util.Arrays; import java.util.List; import org.eclipse.lsp4j.DiagnosticSeverity; @@ -17,24 +18,35 @@ import org.springframework.ide.vscode.boot.validation.generations.json.Generatio import org.springframework.ide.vscode.boot.validation.generations.json.ResolvedSpringProject; import org.springframework.ide.vscode.commons.java.Version; -import com.google.common.collect.ImmutableList; - public class VersionValidators { + + private final VersionValidator[] validators; + + public VersionValidators(VersionValidationPreferences preferences) { + this.validators = new VersionValidator[] { + new SupportedValidator(preferences), new UnsupportedCommercialValidator(preferences), + new UnsupportedOssValidator(preferences), new UnsupportedValidator(preferences) + }; + } public List getValidators() { - return ImmutableList.of(new SupportedValidator(), new UnsupportedCommercialValidator(), - new UnsupportedOssValidator(), new UnsupportedValidator()); + return Arrays.asList(this.validators); } private static class SupportedValidator implements VersionValidator { + private final VersionValidationPreferences preferences; + + public SupportedValidator(VersionValidationPreferences preferences) { + this.preferences = preferences; + } + @Override public VersionValidation getValidation(ResolvedSpringProject springProject, Generation generation, Version version) throws Exception { if (VersionValidationUtils.isCommercialValid(generation) && VersionValidationUtils.isOssValid(generation)) { - DiagnosticSeverity severity = DiagnosticSeverity.Information; - boolean enabled = true; + DiagnosticSeverity severity = preferences.getSupportedPreference().getSeverity(); StringBuffer message = new StringBuffer(); @@ -43,23 +55,34 @@ public class VersionValidators { message.append('\n'); message.append("Commercial supports ends on: "); message.append(generation.getCommercialSupportEndDate()); + Version toUpdate = VersionValidationUtils.getLatestSupportedRelease(springProject, version); - return new VersionValidation(toUpdate, enabled, severity, message.toString()); + return new VersionValidation(toUpdate, severity, message.toString()); } return null; } + + @Override + public boolean isEnabled() { + return preferences.getSupportedPreference().isEnabled(); + } } private static class UnsupportedValidator implements VersionValidator { + private final VersionValidationPreferences preferences; + + public UnsupportedValidator(VersionValidationPreferences preferences) { + this.preferences = preferences; + } + @Override public VersionValidation getValidation(ResolvedSpringProject springProject, Generation generation, Version version) throws Exception { if (!VersionValidationUtils.isCommercialValid(generation) && !VersionValidationUtils.isOssValid(generation)) { - DiagnosticSeverity severity = DiagnosticSeverity.Error; - boolean enabled = true; + DiagnosticSeverity severity = preferences.getUnsupportedPreference().getSeverity(); StringBuffer message = new StringBuffer(); message.append("Unsupported OSS. Support ended on: "); @@ -69,21 +92,32 @@ public class VersionValidators { message.append(generation.getCommercialSupportEndDate()); return new VersionValidation( - toUpdateForUnsupported(springProject, version), enabled, severity, message.toString()); + toUpdateForUnsupported(springProject, version), severity, message.toString()); } return null; } + + @Override + public boolean isEnabled() { + return preferences.getUnsupportedPreference().isEnabled(); + } } private static class UnsupportedOssValidator implements VersionValidator { + private final VersionValidationPreferences preferences; + + public UnsupportedOssValidator(VersionValidationPreferences preferences) { + this.preferences = preferences; + } + @Override public VersionValidation getValidation(ResolvedSpringProject springProject, Generation generation, Version version) throws Exception { if (!VersionValidationUtils.isOssValid(generation) && VersionValidationUtils.isCommercialValid(generation)) { - DiagnosticSeverity severity = DiagnosticSeverity.Warning; - boolean enabled = true; + + DiagnosticSeverity severity = preferences.getUnsupportedOssPreference().getSeverity(); StringBuffer message = new StringBuffer(); message.append("Unsupported OSS. Support ended on: "); @@ -91,14 +125,25 @@ public class VersionValidators { message.append('\n'); message.append("Commercial supports ends on: "); message.append(generation.getCommercialSupportEndDate()); - return new VersionValidation(toUpdateForUnsupported(springProject, version), enabled, severity, message.toString()); + return new VersionValidation(toUpdateForUnsupported(springProject, version), severity, message.toString()); } return null; } + + @Override + public boolean isEnabled() { + return preferences.getUnsupportedOssPreference().isEnabled(); + } } private static class UnsupportedCommercialValidator implements VersionValidator { + + private final VersionValidationPreferences preferences; + + public UnsupportedCommercialValidator(VersionValidationPreferences preferences) { + this.preferences = preferences; + } @Override public VersionValidation getValidation(ResolvedSpringProject springProject, Generation generation, @@ -106,8 +151,7 @@ public class VersionValidators { if (!VersionValidationUtils.isCommercialValid(generation) && VersionValidationUtils.isOssValid(generation)) { - DiagnosticSeverity severity = DiagnosticSeverity.Warning; - boolean enabled = true; + DiagnosticSeverity severity = preferences.getUnsupportedCommercialPreference().getSeverity(); StringBuffer message = new StringBuffer(); message.append("OSS support ends on: "); @@ -115,10 +159,16 @@ public class VersionValidators { message.append('\n'); message.append("Unsupported Commercial. Support ended on: "); message.append(generation.getCommercialSupportEndDate()); - return new VersionValidation(toUpdateForUnsupported(springProject, version), enabled, severity, message.toString()); + + return new VersionValidation(toUpdateForUnsupported(springProject, version), severity, message.toString()); } return null; } + + @Override + public boolean isEnabled() { + return preferences.getUnsupportedCommercialPreference().isEnabled(); + } } private static Version toUpdateForUnsupported(ResolvedSpringProject springProject, Version version) @@ -129,4 +179,5 @@ public class VersionValidators { } return toUpdate; } + }