Skip to content

Commit 76c88c6

Browse files
authored
Merge pull request #580 from sid-srini/jdk-downloader-changes
Minor label changes in JDK Downloader UI
2 parents d1bcfe7 + 1645ce8 commit 76c88c6

File tree

10 files changed

+112
-44
lines changed

10 files changed

+112
-44
lines changed

vscode/l10n/bundle.l10n.en.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
"jdk.downloader.html.details":"<p>This tool enables you to download the latest Oracle JDK under the <a href='https://www.java.com/freeuselicense'>Oracle No-Fee Terms and Conditions</a>.</p> <p>It then handles installation and configuration on your behalf. This ensures you can take full advantage of all the features offered by this extension.</p>",
55
"jdk.downloader.html.license.openJdk":"The Oracle OpenJDK builds are under the <a href='https://openjdk.org/legal/gplv2+ce.html'>GNU Public License with ClassPath Exception</a>.",
66
"jdk.downloader.html.footnote":"<em>Note:</em> Use the command <a href='command:jdk.select.jdk'><code>Select an installed JDK</code></a> to choose an already installed JDK for use with the extension.",
7-
"jdk.downloader.button.label.latestOracleJdk": "Install Oracle JDK",
7+
"jdk.downloader.button.label.latestOracleJdk": "Install Oracle JDK {jdkVersion}",
88
"jdk.downloader.button.label.selectedJdk": "Install selected JDK",
99
"jdk.downloader.label.otherOptions": "Other Options",
1010
"jdk.downloader.label.openJdk": "Oracle OpenJDK",
@@ -18,6 +18,7 @@
1818
"jdk.downloader.label.mac": "macOS",
1919
"jdk.downloader.label.linux": "Linux",
2020
"jdk.downloader.label.selectMachineArchitecture": "Select machine architecture",
21+
"jdk.downloader.label.versionLtsSuffix": "LTS",
2122
"jdk.downloader.message.downloadProgressBar":"{jdkType} {jdkVersion} download in progress",
2223
"jdk.downloader.message.downloadingAndCompletingSetup": "Downloading and completing setup of {jdkType} {jdkVersion}...",
2324
"jdk.downloader.message.downloadCompleted":"{jdkType} {jdkVersion} for {osType} download completed!",

vscode/l10n/bundle.l10n.ja.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
"jdk.downloader.html.details":"<p>このツールを使用すると、最新のOracle JDKを<a href='https://www.java.com/freeuselicense'>Oracle No-Fee Terms and Conditions</a>に基づいてダウンロードできます。</p> <p>その後、インストールと構成が自動で行われます。これにより、この拡張機能で提供されるすべての機能を最大限活用できます。</p>",
55
"jdk.downloader.html.license.openJdk":"Oracle OpenJDKビルドは、<a href='https://openjdk.org/legal/gplv2+ce.html'>クラスパス例外付きGNU Public License</a>に基づいています。",
66
"jdk.downloader.html.footnote":"<em>ノート:</em> <a href='command:jdk.select.jdk'><code>「インストール済のJDKを選択」</code></a>というコマンドを使用して、拡張機能で使用できるよう、すでにインストールされているJDKを選択します。",
7-
"jdk.downloader.button.label.latestOracleJdk": "Oracle JDKをインストール",
7+
"jdk.downloader.button.label.latestOracleJdk": "Oracle JDK {jdkVersion}をインストール",
88
"jdk.downloader.button.label.selectedJdk": "選択したJDKをインストール",
99
"jdk.downloader.label.otherOptions": "その他のオプション",
1010
"jdk.downloader.label.openJdk": "Oracle OpenJDK",
@@ -18,6 +18,7 @@
1818
"jdk.downloader.label.mac": "macOS",
1919
"jdk.downloader.label.linux": "Linux",
2020
"jdk.downloader.label.selectMachineArchitecture": "マシン・アーキテクチャの選択",
21+
"jdk.downloader.label.versionLtsSuffix": "LTS",
2122
"jdk.downloader.message.downloadProgressBar":"{jdkType} {jdkVersion}のダウンロード中",
2223
"jdk.downloader.message.downloadingAndCompletingSetup": "{jdkType} {jdkVersion}の設定をダウンロードおよび完了しています...",
2324
"jdk.downloader.message.downloadCompleted":"{osType}用の{jdkType} {jdkVersion}のダウンロードが完了しました。",

vscode/l10n/bundle.l10n.zh-cn.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
"jdk.downloader.html.details":"<p>使用此工具,您可以遵循 <a href='https://www.java.com/freeuselicense'>Oracle 免费条款和条件</a>下载最新的 Oracle JDK。</p> <p>然后,它将代表您处理安装和配置。这可确保您充分利用此扩展提供的所有功能。</p>",
55
"jdk.downloader.html.license.openJdk":"Oracle OpenJDK 构建遵循 <a href='https://openjdk.org/legal/gplv2+ce.html'>GNU 公共许可证(包含 ClassPath 例外条款)</a>。",
66
"jdk.downloader.html.footnote":"<em>注:</em>使用命令<a href='command:jdk.select.jdk'><code>选择已安装的 JDK</code></a> 来选择一个已安装的 JDK 以供与该扩展配合使用。",
7-
"jdk.downloader.button.label.latestOracleJdk": "安装 Oracle JDK",
7+
"jdk.downloader.button.label.latestOracleJdk": "安装 Oracle JDK {jdkVersion}",
88
"jdk.downloader.button.label.selectedJdk": "安装所选 JDK",
99
"jdk.downloader.label.otherOptions": "其他选项",
1010
"jdk.downloader.label.openJdk": "Oracle OpenJDK",
@@ -17,6 +17,7 @@
1717
"jdk.downloader.label.windows": "Microsoft Windows",
1818
"jdk.downloader.label.mac": "macOS",
1919
"jdk.downloader.label.linux": "Linux",
20+
"jdk.downloader.label.versionLtsSuffix": "LTS",
2021
"jdk.downloader.label.selectMachineArchitecture": "选择计算机体系结构",
2122
"jdk.downloader.message.downloadProgressBar":"{jdkType} {jdkVersion} 正在下载",
2223
"jdk.downloader.message.downloadingAndCompletingSetup": "正在下载 {jdkType} {jdkVersion} 并完成其设置...",

vscode/src/constants.ts

Lines changed: 1 addition & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
Copyright (c) 2023, Oracle and/or its affiliates.
2+
Copyright (c) 2023-2026, Oracle and/or its affiliates.
33
44
Licensed under the Apache License, Version 2.0 (the "License");
55
you may not use this file except in compliance with the License.
@@ -26,16 +26,4 @@ export namespace extConstants {
2626
export const NOTEBOOK_FILE_EXTENSION = 'ijnb';
2727
}
2828

29-
export namespace jdkDownloaderConstants {
30-
31-
export const ORACLE_JDK_RELEASES_BASE_URL = `https://java.oraclecloud.com/currentJavaReleases`;
32-
33-
export const ORACLE_JDK_BASE_DOWNLOAD_URL = `https://download.oracle.com/java`;
34-
35-
export const ORACLE_JDK_FALLBACK_VESIONS = ['26', '25', '21'];
36-
37-
export const OPEN_JDK_VERSION_DOWNLOAD_LINKS: { [key: string]: string } = {
38-
"26": "https://download.java.net/java/GA/jdk26/c3cc523845074aa0af4f5e1e1ed4151d/35/GPL/openjdk-26"
39-
};
40-
}
4129
export const NODE_WINDOWS_LABEL = "Windows_NT";

vscode/src/test/unit/webviews/jdkDownloader/view.unit.test.ts

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
Copyright (c) 2023-2024, Oracle and/or its affiliates.
2+
Copyright (c) 2023-2026, Oracle and/or its affiliates.
33
44
Licensed under the Apache License, Version 2.0 (the "License");
55
you may not use this file except in compliance with the License.
@@ -50,12 +50,14 @@ describe('JDK Downloader view tests', () => {
5050
"items": [
5151
{
5252
"jdkDetails":{
53-
"jdkVersion": 23
53+
"jdkVersion": 23,
54+
"isLts": false
5455
}
5556
},
5657
{
5758
"jdkDetails":{
58-
"jdkVersion": 21
59+
"jdkVersion": 21,
60+
"isLts": true
5961
}
6062
}
6163
]
@@ -104,6 +106,24 @@ describe('JDK Downloader view tests', () => {
104106

105107
expect(actualMachineArch).equals(expectedMachineArch);
106108
});
109+
110+
it("should check if correct jdk version is marked as LTS", () => {
111+
const jdkDownloaderHtml: string = (jdkDownloaderView as any).jdkDownloaderWebView.webview.html;
112+
const ltsVersionRegex = new RegExp(`<option value="21"[^>]*>JDK 21 \\(jdk.downloader.label.versionLtsSuffix\\)</option>`);
113+
expect(jdkDownloaderHtml).to.match(ltsVersionRegex);
114+
});
115+
116+
it("should check if non-LTS jdk versions are not marked as LTS", () => {
117+
const jdkDownloaderHtml: string = (jdkDownloaderView as any).jdkDownloaderWebView.webview.html;
118+
const nonLtsVersionRegex = new RegExp(`<option value="23"[^>]*>JDK 23</option>`);
119+
expect(jdkDownloaderHtml).to.match(nonLtsVersionRegex);
120+
});
121+
122+
it("should check if latest jdk version is marked as selected", () => {
123+
const jdkDownloaderHtml: string = (jdkDownloaderView as any).jdkDownloaderWebView.webview.html;
124+
const latestVersionRegex = new RegExp(`<option value="23"[^>]*selected>JDK 23</option>`);
125+
expect(jdkDownloaderHtml).to.match(latestVersionRegex);
126+
});
107127
});
108128

109129
describe("Webview HTML tests", () => {

vscode/src/webviews/constants.ts

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
/*
2+
Copyright (c) 2023-2026, Oracle and/or its affiliates.
3+
4+
Licensed under the Apache License, Version 2.0 (the "License");
5+
you may not use this file except in compliance with the License.
6+
You may obtain a copy of the License at
7+
8+
https://www.apache.org/licenses/LICENSE-2.0
9+
10+
Unless required by applicable law or agreed to in writing, software
11+
distributed under the License is distributed on an "AS IS" BASIS,
12+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
See the License for the specific language governing permissions and
14+
limitations under the License.
15+
*/
16+
import { JdkVersionInfo } from "./types";
17+
18+
export namespace jdkDownloaderConstants {
19+
export const ORACLE_JDK_RELEASES_BASE_URL = `https://java.oraclecloud.com/currentJavaReleases`;
20+
21+
export const ORACLE_JDK_BASE_DOWNLOAD_URL = `https://download.oracle.com/java`;
22+
23+
export const ORACLE_JDK_FALLBACK_VERSIONS: JdkVersionInfo[] = [
24+
{version: '26', isLts: false},
25+
{version: '25', isLts: true},
26+
{version: '21', isLts: true}
27+
];
28+
29+
export const OPEN_JDK_VERSION_DOWNLOAD_LINKS: { [key: string]: string } = {
30+
"26": "https://download.java.net/java/GA/jdk26/c3cc523845074aa0af4f5e1e1ed4151d/35/GPL/openjdk-26"
31+
};
32+
}

vscode/src/webviews/jdkDownloader/action.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616

1717
import { commands, OpenDialogOptions, window } from "vscode";
1818
import { JdkDownloaderView } from "./view";
19-
import { jdkDownloaderConstants } from "../../constants";
19+
import { jdkDownloaderConstants } from "../constants";
2020
import * as path from 'path';
2121
import * as fs from 'fs';
2222
import { calculateChecksum, downloadFileWithProgressBar, httpsGet } from "../../utils";

vscode/src/webviews/jdkDownloader/styles.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -193,7 +193,7 @@ summary.change__summary {
193193
margin: 0.5em 0.5em 0 0;
194194
padding-right: 0.25em;
195195
}
196-
.jdk-version-dropdown::after {
196+
.jdk-version-dropdown:has(select:not(:disabled))::after {
197197
content: "\u25BC";
198198
position: absolute;
199199
top: 25%;
@@ -203,7 +203,7 @@ summary.change__summary {
203203
pointer-events: none;
204204
color: var(--vscode-dropdown-foreground);
205205
}
206-
.jdk-version-dropdown:hover::after {
206+
.jdk-version-dropdown:has(select:not(:disabled)):hover::after {
207207
color: var(--vscode-input-placeholderForeground);
208208
}
209209

vscode/src/webviews/jdkDownloader/view.ts

Lines changed: 27 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,8 @@
1414
limitations under the License.
1515
*/
1616

17-
import { jdkDownloaderConstants } from '../../constants';
17+
import { jdkDownloaderConstants } from '../constants';
18+
import { JdkVersionInfo } from '../types';
1819
import { ViewColumn, WebviewPanel, window } from 'vscode';
1920
import * as os from 'os';
2021
import { 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-zA-Z0-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-zA-Z0-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,

vscode/src/webviews/types.ts

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
/*
2+
Copyright (c) 2026, Oracle and/or its affiliates.
3+
4+
Licensed under the Apache License, Version 2.0 (the "License");
5+
you may not use this file except in compliance with the License.
6+
You may obtain a copy of the License at
7+
8+
https://www.apache.org/licenses/LICENSE-2.0
9+
10+
Unless required by applicable law or agreed to in writing, software
11+
distributed under the License is distributed on an "AS IS" BASIS,
12+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
See the License for the specific language governing permissions and
14+
limitations under the License.
15+
*/
16+
17+
export type JdkVersionInfo = {
18+
version: string,
19+
isLts: boolean
20+
};

0 commit comments

Comments
 (0)