@@ -21,6 +21,7 @@ import { JdkDownloaderAction } from './action';
21
21
import { downloaderCss } from './styles' ;
22
22
import { l10n } from '../../localiser' ;
23
23
import { LOGGER } from '../../logger' ;
24
+ import { httpsGet , isError , isString } from '../../utils' ;
24
25
25
26
export class JdkDownloaderView {
26
27
public static readonly OPEN_JDK_LABEL = "OpenJDK" ;
@@ -31,8 +32,9 @@ export class JdkDownloaderView {
31
32
private jdkDownloaderWebView ?: WebviewPanel ;
32
33
private osType ?: string ;
33
34
private machineArch ?: string ;
35
+ private oracleJdkVersions : string [ ] = [ ] ;
34
36
35
- public createView = ( ) => {
37
+ public createView = async ( ) => {
36
38
try {
37
39
LOGGER . log ( "Creating JDK downloader webview" ) ;
38
40
this . jdkDownloaderWebView = window . createWebviewPanel (
@@ -43,6 +45,7 @@ export class JdkDownloaderView {
43
45
enableScripts : true
44
46
}
45
47
) ;
48
+ this . oracleJdkVersions = await this . getOracleJdkVersions ( ) ;
46
49
this . setDropdownOptions ( ) ;
47
50
this . jdkDownloaderWebView . webview . html = this . fetchJdkDownloadViewHtml ( ) ;
48
51
this . jdkDownloaderWebView . webview . onDidReceiveMessage ( message => {
@@ -111,7 +114,7 @@ export class JdkDownloaderView {
111
114
<br />
112
115
<div class="jdk-version-dropdown">
113
116
<select id="oracleJDKVersionDropdown">
114
- ${ this . getJdkVersionsHtml ( jdkDownloaderConstants . ORACLE_JDK_DOWNLOAD_VERSIONS ) }
117
+ ${ this . getJdkVersionsHtml ( this . oracleJdkVersions ) }
115
118
</select>
116
119
</div>
117
120
</div>
@@ -177,7 +180,29 @@ export class JdkDownloaderView {
177
180
`
178
181
}
179
182
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 [ ] ) => {
181
206
let htmlStr = "" ;
182
207
jdkVersions . forEach ( ( el : String , index : number ) => {
183
208
if ( index === 0 ) {
0 commit comments