@@ -21,6 +21,7 @@ import { JdkDownloaderAction } from './action';
2121import { downloaderCss } from './styles' ;
2222import { l10n } from '../../localiser' ;
2323import { LOGGER } from '../../logger' ;
24+ import { httpsGet , isError , isString } from '../../utils' ;
2425
2526export class JdkDownloaderView {
2627 public static readonly OPEN_JDK_LABEL = "OpenJDK" ;
@@ -31,8 +32,9 @@ export class JdkDownloaderView {
3132 private jdkDownloaderWebView ?: WebviewPanel ;
3233 private osType ?: string ;
3334 private machineArch ?: string ;
35+ private oracleJdkVersions : string [ ] = [ ] ;
3436
35- public createView = ( ) => {
37+ public createView = async ( ) => {
3638 try {
3739 LOGGER . log ( "Creating JDK downloader webview" ) ;
3840 this . jdkDownloaderWebView = window . createWebviewPanel (
@@ -43,6 +45,7 @@ export class JdkDownloaderView {
4345 enableScripts : true
4446 }
4547 ) ;
48+ this . oracleJdkVersions = await this . getOracleJdkVersions ( ) ;
4649 this . setDropdownOptions ( ) ;
4750 this . jdkDownloaderWebView . webview . html = this . fetchJdkDownloadViewHtml ( ) ;
4851 this . jdkDownloaderWebView . webview . onDidReceiveMessage ( message => {
@@ -111,7 +114,7 @@ export class JdkDownloaderView {
111114 <br />
112115 <div class="jdk-version-dropdown">
113116 <select id="oracleJDKVersionDropdown">
114- ${ this . getJdkVersionsHtml ( jdkDownloaderConstants . ORACLE_JDK_DOWNLOAD_VERSIONS ) }
117+ ${ this . getJdkVersionsHtml ( this . oracleJdkVersions ) }
115118 </select>
116119 </div>
117120 </div>
@@ -177,7 +180,29 @@ export class JdkDownloaderView {
177180 `
178181 }
179182
180- private getJdkVersionsHtml = ( jdkVersions : String [ ] ) => {
183+ private getOracleJdkVersions = async ( ) : Promise < string [ ] > => {
184+ try {
185+ LOGGER . log ( "Fetching Oracle JDK versions..." ) ;
186+ const availableVersions = await httpsGet ( `${ jdkDownloaderConstants . ORACLE_JDK_RELEASES_BASE_URL } ?licenseType=NFTC&sortBy=jdkVersion&sortOrder=DESC` ) ;
187+ if ( isString ( availableVersions ) ) {
188+ const availableVersionsObj = JSON . parse ( availableVersions ) ;
189+ if ( availableVersionsObj ?. items ) {
190+ const jdkVersions = availableVersionsObj ?. items ?. map ( ( version : any ) => version . jdkDetails . jdkVersion ) ;
191+ LOGGER . log ( `Fetched Oracle JDK versions: ${ jdkVersions } ` ) ;
192+
193+ return jdkVersions ;
194+ }
195+ }
196+ LOGGER . warn ( `Response of Oracle JDK versions is not as expected` ) ;
197+ } catch ( error ) {
198+ const msg = `Some error occurred while fetching Oracle JDK versions: ${ isError ( error ) ? error . message : null } ` ;
199+ LOGGER . warn ( msg ) ;
200+ }
201+
202+ return jdkDownloaderConstants . ORACLE_JDK_FALLBACK_VESIONS ;
203+ }
204+
205+ private getJdkVersionsHtml = ( jdkVersions : string [ ] ) => {
181206 let htmlStr = "" ;
182207 jdkVersions . forEach ( ( el : String , index : number ) => {
183208 if ( index === 0 ) {
0 commit comments