1313import java .util .Collection ;
1414import java .util .List ;
1515
16+ import org .eclipse .lsp4j .CodeAction ;
17+ import org .eclipse .lsp4j .CodeActionKind ;
18+ import org .eclipse .lsp4j .Command ;
1619import org .eclipse .lsp4j .Diagnostic ;
20+ import org .eclipse .lsp4j .Range ;
21+ import org .eclipse .lsp4j .ShowDocumentParams ;
1722import org .springframework .ide .vscode .boot .validation .generations .json .Generation ;
1823import org .springframework .ide .vscode .boot .validation .generations .json .ResolvedSpringProject ;
1924import org .springframework .ide .vscode .boot .validation .generations .preferences .VersionValidationProblemType ;
2631
2732public class GenerationsValidator extends AbstractDiagnosticValidator {
2833
34+ private static String SPRING_COMMERCIAL_URL = "https://tanzu.vmware.com/spring-runtime" ;
35+
2936 private SpringProjectsProvider provider ;
3037
3138 public GenerationsValidator (DiagnosticSeverityProvider diagnosticSeverityProvider , SpringProjectsProvider provider ) {
@@ -55,6 +62,9 @@ public Collection<Diagnostic> validate(IJavaProject javaProject, Version javaPro
5562 Generation javaProjectGen = getGenerationForJavaProject (javaProject , springProject );
5663 ImmutableList .Builder <Diagnostic > b = ImmutableList .builder ();
5764
65+ boolean validCommercialSupport = VersionValidationUtils .isCommercialValid (javaProjectGen );
66+
67+
5868 if (VersionValidationUtils .isOssValid (javaProjectGen )) {
5969 StringBuilder message = new StringBuilder ();
6070 message .append ("OSS support for Spring Boot " );
@@ -75,14 +85,22 @@ public Collection<Diagnostic> validate(IJavaProject javaProject, Version javaPro
7585 message .append (javaProjectGen .getName ());
7686 message .append (" no longer available, ended on: " );
7787 message .append (javaProjectGen .getOssSupportEndDate ());
88+ if (validCommercialSupport ) {
89+ message .append (", get commercial support until " );
90+ message .append (javaProjectGen .getCommercialSupportEndDate ());
91+ message .append (" via Tanzu Spring Runtime at https://tanzu.vmware.com/spring-runtime" );
92+ }
7893 }
7994 Diagnostic d = createDiagnostic (VersionValidationProblemType .UNSUPPORTED_OSS_VERSION , message .toString ());
95+ if (validCommercialSupport ) {
96+ d .setData (List .of (getCommercialSupportCodeAction ()));
97+ }
8098 if (d != null ) {
8199 b .add (d );
82100 }
83101 }
84102
85- if (VersionValidationUtils . isCommercialValid ( javaProjectGen ) ) {
103+ if (validCommercialSupport ) {
86104 StringBuilder message = new StringBuilder ();
87105 message .append ("Commercial support for Spring Boot " );
88106 message .append (javaProjectGen .getName ());
@@ -121,5 +139,19 @@ public boolean isEnabled() {
121139 VersionValidationProblemType .UNSUPPORTED_COMMERCIAL_VERSION
122140 );
123141 }
142+
143+ private static CodeAction getCommercialSupportCodeAction () {
144+ CodeAction commercialSupportLink = new CodeAction ();
145+ commercialSupportLink .setKind (CodeActionKind .QuickFix );
146+ commercialSupportLink .setTitle ("Get commercial Spring Boot support via Tanzu Spring Runtime" );
147+ ShowDocumentParams showDocumentParams = new ShowDocumentParams (SPRING_COMMERCIAL_URL );
148+ showDocumentParams .setExternal (true );
149+ showDocumentParams .setTakeFocus (true );
150+ showDocumentParams .setSelection (new Range ());
151+ commercialSupportLink .setCommand (new Command ("Get commercial Spring Boot support via Tanzu Spring Runtime" , "sts/show/document" ,
152+ ImmutableList .of (showDocumentParams )));
153+ return commercialSupportLink ;
154+ }
155+
124156
125157}
0 commit comments