1414 limitations under the License.
1515*/
1616
17- import { jdkDownloaderConstants } from '../../constants' ;
17+ import { jdkDownloaderConstants } from '../constants' ;
18+ import { JdkVersionInfo } from '../types' ;
1819import { ViewColumn , WebviewPanel , window } from 'vscode' ;
1920import * as os from 'os' ;
2021import { JdkDownloaderAction } from './action' ;
@@ -41,7 +42,8 @@ export class JdkDownloaderView {
4142 private jdkDownloaderWebView ?: WebviewPanel ;
4243 private osType ?: string ;
4344 private machineArch ?: string ;
44- private oracleJdkVersions : string [ ] = [ ] ;
45+ private oracleJdkVersions : JdkVersionInfo [ ] = [ ] ;
46+ private openJdkVersions : JdkVersionInfo [ ] = [ ] ;
4547
4648 public createView = async ( ) => {
4749 try {
@@ -55,6 +57,8 @@ export class JdkDownloaderView {
5557 enableCommandUris : true
5658 }
5759 ) ;
60+ this . openJdkVersions = Object . keys ( jdkDownloaderConstants . OPEN_JDK_VERSION_DOWNLOAD_LINKS )
61+ . map ( ( version :string ) => ( { version, isLts : false } ) ) ;
5862 this . oracleJdkVersions = await this . getOracleJdkVersions ( ) ;
5963 this . setDropdownOptions ( ) ;
6064 this . jdkDownloaderWebView . webview . html = this . fetchJdkDownloadViewHtml ( ) ;
@@ -74,7 +78,7 @@ export class JdkDownloaderView {
7478 await this . jdkDownloaderWebView ?. dispose ( ) ;
7579 }
7680
77- private setDropdownOptions = async ( ) => {
81+ private setDropdownOptions = ( ) => {
7882 const osTypeNode = os . type ( ) ;
7983 switch ( osTypeNode ) {
8084 case "Linux" :
@@ -124,7 +128,7 @@ export class JdkDownloaderView {
124128 <svg class="icon" viewBox="0 0 24 24" aria-hidden="true">
125129 <path d="M5 20h14v-2H5v2zm7-18c-.6 0-1 .4-1 1v8.6l-2.3-2.3-1.4 1.4 4.7 4.7 4.7-4.7-1.4-1.4-2.3 2.3V3c0-.6-.4-1-1-1z"/>
126130 </svg>
127- ${ l10n . value ( "jdk.downloader.button.label.latestOracleJdk" ) }
131+ ${ l10n . value ( "jdk.downloader.button.label.latestOracleJdk" , { jdkVersion : this . oracleJdkVersions . at ( 0 ) ?. version } ) }
128132 </button>
129133
130134 <!-- Other options: DETAILS accordion -->
@@ -186,7 +190,7 @@ export class JdkDownloaderView {
186190 <div class="jdk-version-container">
187191 <label for="oracleJdkVersionDropdown" class="jdk-version-label">${ l10n . value ( "jdk.downloader.label.selectOracleJdkVersion" ) } </label>
188192 <div class="jdk-version-dropdown">
189- <select class="select" id="oracleJdkVersionDropdown" name="oracleJdkVersionDropdown">
193+ <select class="select" id="oracleJdkVersionDropdown" name="oracleJdkVersionDropdown"${ this . oracleJdkVersions . length < 2 ? " disabled" : "" } >
190194 ${ this . getJdkVersionsHtml ( this . oracleJdkVersions ) }
191195 </select>
192196 </div>
@@ -196,8 +200,8 @@ export class JdkDownloaderView {
196200 <div class="jdk-version-container">
197201 <label for="openJdkVersionDropdown" class="jdk-version-label">${ l10n . value ( "jdk.downloader.label.selectOpenJdkVersion" ) } </label>
198202 <div class="jdk-version-dropdown">
199- <select class="select" id="openJdkVersionDropdown" name="openJdkVersionDropdown">
200- ${ this . getJdkVersionsHtml ( Object . keys ( jdkDownloaderConstants . OPEN_JDK_VERSION_DOWNLOAD_LINKS ) ) }
203+ <select class="select" id="openJdkVersionDropdown" name="openJdkVersionDropdown"${ this . openJdkVersions . length < 2 ? " disabled" : "" } >
204+ ${ this . getJdkVersionsHtml ( this . openJdkVersions ) }
201205 </select>
202206 </div>
203207 </div>
@@ -227,19 +231,17 @@ export class JdkDownloaderView {
227231 `
228232 }
229233
230- private getOracleJdkVersions = async ( ) : Promise < string [ ] > => {
234+ private getOracleJdkVersions = async ( ) : Promise < JdkVersionInfo [ ] > => {
231235 try {
232236 LOGGER . log ( "Fetching Oracle JDK versions..." ) ;
233237 const availableVersions = await httpsGet ( `${ jdkDownloaderConstants . ORACLE_JDK_RELEASES_BASE_URL } ?licenseType=NFTC&sortBy=jdkVersion&sortOrder=DESC` ) ;
234238 if ( isString ( availableVersions ) ) {
235239 const availableVersionsObj = JSON . parse ( availableVersions ) ;
236240 if ( availableVersionsObj ?. items ) {
237- const jdkVersions = availableVersionsObj ?. items ?.
238- map ( ( version : any ) => String ( version . jdkDetails . jdkVersion ) .
239- replace ( / [ ^ a - z A - Z 0 - 9 _ . + - ] / g, "" ) ) .
240- sort ( ( a : string , b : string ) => Number ( parseInt ( b , 10 ) ) - Number ( parseInt ( a , 10 ) ) ) ;
241- LOGGER . log ( `Fetched Oracle JDK versions: ${ jdkVersions } ` ) ;
242-
241+ const jdkVersions : JdkVersionInfo [ ] = availableVersionsObj ?. items ?.
242+ map ( ( version : any ) => version . jdkDetails ) .
243+ map ( ( details : any ) => ( { version : String ( details . jdkVersion ) . replace ( / [ ^ a - z A - Z 0 - 9 _ . + - ] / g, "" ) , isLts : details . isLts } ) ) ;
244+ LOGGER . log ( `Fetched Oracle JDK versions: ${ jdkVersions ?. map ( ( el ) => '{"version"="' + el . version + '", lts:' + el . isLts + '}' ) } )` ) ;
243245 return jdkVersions ;
244246 }
245247 }
@@ -249,17 +251,20 @@ export class JdkDownloaderView {
249251 LOGGER . warn ( msg ) ;
250252 }
251253
252- return jdkDownloaderConstants . ORACLE_JDK_FALLBACK_VESIONS ;
254+ return jdkDownloaderConstants . ORACLE_JDK_FALLBACK_VERSIONS ;
253255 }
254256
255- private getJdkVersionsHtml = ( jdkVersions : string [ ] ) => {
257+ private getJdkVersionsHtml = ( jdkVersions : JdkVersionInfo [ ] ) => {
256258 let htmlStr = "" ;
257- jdkVersions . forEach ( ( el : String , index : number ) => {
259+ const ltsLabel = l10n . value ( "jdk.downloader.label.versionLtsSuffix" ) ;
260+ jdkVersions . forEach ( ( el : JdkVersionInfo , index : number ) => {
261+ const ltsSuffix : string = el . isLts ? ` (${ ltsLabel } )` : '' ;
262+ const version :string = el . version ;
263+ const versionLabel :string = version + ltsSuffix ;
258264 if ( index === 0 ) {
259- htmlStr += `<option value=${ el } default>JDK ${ el } </option>\n` ;
260- }
261- else {
262- htmlStr += `<option value=${ el } >JDK ${ el } </option>\n` ;
265+ htmlStr += `<option value="${ version } " selected>JDK ${ versionLabel } </option>\n` ;
266+ } else {
267+ htmlStr += `<option value="${ version } ">JDK ${ versionLabel } </option>\n` ;
263268 }
264269 } ) ;
265270
@@ -352,7 +357,7 @@ export class JdkDownloaderView {
352357 const jdkType = downloadLatest || !jdkTypeSelected ? "${ JdkDownloaderView . JDK_TYPE . oracleJdk } " : jdkTypeSelected;
353358 const os = downloadLatest ? "${ this . getDefaultOs ( ) } " : document.getElementById('osTypeDropdown').value;
354359 const arch = downloadLatest ? "${ this . getDefaultMachineArch ( ) } " : document.getElementById('machineArchDropdown').value;
355- const version = downloadLatest ? "${ this . oracleJdkVersions . at ( 0 ) } " : document.getElementById(jdkType + 'VersionDropdown').value;
360+ const version = downloadLatest ? "${ this . oracleJdkVersions . at ( 0 ) ?. version } " : document.getElementById(jdkType + 'VersionDropdown').value;
356361 vscode.postMessage({
357362 command: "${ JdkDownloaderView . DOWNLOAD_CMD } ",
358363 id: jdkType,
0 commit comments