Skip to content

Commit 34ee9e0

Browse files
authored
Dedicated Java Runtime View (#154)
1 parent c4ace8b commit 34ee9e0

File tree

6 files changed

+68
-12
lines changed

6 files changed

+68
-12
lines changed

package.json

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,9 @@
3737
"workspaceContains:mnvw",
3838
"onCommand:java.overview",
3939
"onCommand:java.showReleaseNotes",
40-
"onWebviewPanel:java.overview"
40+
"onWebviewPanel:java.overview",
41+
"onCommand:java.runtime",
42+
"onWebviewPanel:java.runtime"
4143
],
4244
"contributes": {
4345
"commands": [
@@ -48,6 +50,10 @@
4850
{
4951
"command": "java.showReleaseNotes",
5052
"title": "Java: Show Release Notes"
53+
},
54+
{
55+
"command": "java.runtime",
56+
"title": "Java: Runtime"
5157
}
5258
]
5359
},

src/commands/index.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import * as vscode from "vscode";
66
import { instrumentCommand } from "../utils";
77
import { createMavenProjectCmdHanlder, createSpringBootProjectCmdHandler, showExtensionCmdHandler, openUrlCmdHandler, showReleaseNotesHandler } from "./handler";
88
import { overviewCmdHandler } from "../overview";
9+
import { javaRuntimeCmdHandler } from "../java-runtime";
910

1011
export function initialize(context: vscode.ExtensionContext) {
1112
context.subscriptions.push(vscode.commands.registerCommand("java.overview", instrumentCommand(context, "java.overview", instrumentCommand(context, "java.helper.overview", overviewCmdHandler))));
@@ -14,4 +15,5 @@ export function initialize(context: vscode.ExtensionContext) {
1415
context.subscriptions.push(vscode.commands.registerCommand("java.helper.showExtension", instrumentCommand(context, "java.helper.showExtension", showExtensionCmdHandler)));
1516
context.subscriptions.push(vscode.commands.registerCommand("java.helper.openUrl", instrumentCommand(context, "java.helper.openUrl", openUrlCmdHandler)));
1617
context.subscriptions.push(vscode.commands.registerCommand("java.showReleaseNotes", instrumentCommand(context, "java.showReleaseNotes", showReleaseNotesHandler)));
18+
context.subscriptions.push(vscode.commands.registerCommand("java.runtime", instrumentCommand(context, "java.runtime", javaRuntimeCmdHandler)));
1719
}

src/extension.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import { initialize as initCommands } from "./commands";
99
import { initialize as initRecommendations } from "./recommendation";
1010
import { initialize as initMisc, showReleaseNotesOnStart } from "./misc";
1111
import { showOverviewPageOnActivation, OverviewViewSerializer } from "./overview";
12-
import { validateJavaRuntime } from "./java-runtime";
12+
import { validateJavaRuntime, JavaRuntimeViewSerializer } from "./java-runtime";
1313

1414
export async function activate(context: vscode.ExtensionContext) {
1515
initializeTelemetry(context);
@@ -23,6 +23,7 @@ async function initializeExtension(operationId: string, context: vscode.Extensio
2323
initMisc(context);
2424

2525
context.subscriptions.push(vscode.window.registerWebviewPanelSerializer("java.overview", new OverviewViewSerializer()));
26+
context.subscriptions.push(vscode.window.registerWebviewPanelSerializer("java.runtime", new JavaRuntimeViewSerializer()));
2627

2728
await showOverviewPageOnActivation(context);
2829
await showReleaseNotesOnStart(context);

src/java-runtime/index.ts

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,51 @@ import * as pathExists from "path-exists";
99
import * as request from "request-promise-native";
1010
import findJavaHome = require("find-java-home");
1111
import architecture = require("arch");
12+
import { loadTextFromFile, getExtensionContext } from "../utils";
13+
14+
let javaRuntimeView: vscode.WebviewPanel | undefined;
15+
16+
export async function javaRuntimeCmdHandler(context: vscode.ExtensionContext, operationId: string) {
17+
if (javaRuntimeView) {
18+
javaRuntimeView.reveal();
19+
return;
20+
}
21+
22+
javaRuntimeView = vscode.window.createWebviewPanel("java.runtime", "Java Runtime", {
23+
viewColumn: vscode.ViewColumn.One,
24+
}, {
25+
enableScripts: true,
26+
enableCommandUris: true,
27+
retainContextWhenHidden: true
28+
});
29+
30+
await initializeJavaRuntimeView(context, javaRuntimeView, onDidDisposeWebviewPanel);
31+
}
32+
33+
function onDidDisposeWebviewPanel() {
34+
javaRuntimeView = undefined;
35+
}
36+
37+
async function initializeJavaRuntimeView(context: vscode.ExtensionContext, webviewPanel: vscode.WebviewPanel, onDisposeCallback: () => void) {
38+
webviewPanel.iconPath = vscode.Uri.file(path.join(context.extensionPath, "logo.lowres.png"));
39+
const resourceUri = context.asAbsolutePath("./out/assets/java-runtime/index.html");
40+
webviewPanel.webview.html = await loadTextFromFile(resourceUri);
41+
42+
context.subscriptions.push(webviewPanel.onDidDispose(onDisposeCallback));
43+
}
44+
45+
export class JavaRuntimeViewSerializer implements vscode.WebviewPanelSerializer {
46+
async deserializeWebviewPanel(webviewPanel: vscode.WebviewPanel, state: any) {
47+
if (javaRuntimeView) {
48+
javaRuntimeView.reveal();
49+
webviewPanel.dispose();
50+
return;
51+
}
52+
53+
javaRuntimeView = webviewPanel;
54+
initializeJavaRuntimeView(getExtensionContext(), webviewPanel, onDidDisposeWebviewPanel);
55+
}
56+
}
1257

1358
const isWindows = process.platform.indexOf("win") === 0;
1459
const JAVAC_FILENAME = path.join("bin", "javac" + (isWindows ? ".exe" : "")) ;

src/overview/index.ts

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,12 @@
33

44
import * as vscode from "vscode";
55

6-
import { readFile as fsReadFile } from "fs";
7-
import * as util from "util";
86
import * as path from "path";
97

10-
const readFile = util.promisify(fsReadFile);
11-
128
import { instrumentOperation, sendInfo } from "vscode-extension-telemetry-wrapper";
139
import { getExtensionContext } from "../utils";
1410
import { validateJavaRuntime, suggestOpenJdk } from "../java-runtime";
11+
import { loadTextFromFile } from "../utils";
1512

1613
let overviewView: vscode.WebviewPanel | undefined;
1714
const KEY_SHOW_WHEN_USING_JAVA = "showWhenUsingJava";
@@ -56,7 +53,8 @@ function onDidDisposeWebviewPanel() {
5653

5754
async function initializeOverviewView(context: vscode.ExtensionContext, webviewPanel: vscode.WebviewPanel, onDisposeCallback: () => void) {
5855
webviewPanel.iconPath = vscode.Uri.file(path.join(context.extensionPath, "logo.lowres.png"));
59-
webviewPanel.webview.html = await loadHtmlContent(context);
56+
const resourceUri = context.asAbsolutePath("./out/assets/overview/index.html");
57+
webviewPanel.webview.html = await loadTextFromFile(resourceUri);
6058

6159
context.subscriptions.push(webviewPanel.onDidDispose(onDisposeCallback));
6260

@@ -98,11 +96,6 @@ async function initializeOverviewView(context: vscode.ExtensionContext, webviewP
9896
}
9997
}
10098

101-
async function loadHtmlContent(context: vscode.ExtensionContext) {
102-
let buffer = await readFile(context.asAbsolutePath("./out/assets/overview/index.html"));
103-
return buffer.toString();
104-
}
105-
10699
export async function showOverviewPageOnActivation(context: vscode.ExtensionContext) {
107100
let showWhenUsingJava = context.globalState.get(KEY_SHOW_WHEN_USING_JAVA);
108101
if (showWhenUsingJava === undefined) {

src/utils/index.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,10 @@
22
// Licensed under the MIT license.
33

44
import * as vscode from "vscode";
5+
import { readFile as fsReadFile } from "fs";
6+
import * as util from "util";
7+
8+
const readFile = util.promisify(fsReadFile);
59

610
let extensionContext: vscode.ExtensionContext;
711

@@ -33,5 +37,10 @@ export function stringToTime(str: string) {
3337
return Date.parse(str);
3438
}
3539

40+
export async function loadTextFromFile(resourceUri: string) {
41+
let buffer = await readFile(resourceUri);
42+
return buffer.toString();
43+
}
44+
3645
export * from "./command";
3746
export * from "./release-notes";

0 commit comments

Comments
 (0)