[vscode-spring-cli] Added boot add command support

This commit is contained in:
aboyko
2024-01-17 19:21:07 -05:00
parent ce45532748
commit edf6396058
5 changed files with 90 additions and 11 deletions

View File

@@ -1,4 +1,4 @@
import { BootNewProjectMetadata, ProjectType } from "./types";
import { BootAddMetadata, BootNewMetadata, ProjectType } from "./types";
import vscode from "vscode";
const SPRING_CLI_TASK_TYPE = 'spring-cli';
@@ -31,7 +31,7 @@ export class Cli {
];
}
createBootProject(metadata: BootNewProjectMetadata): Promise<void> {
bootNew(metadata: BootNewMetadata): Promise<void> {
const args = [
"boot",
"new",
@@ -52,7 +52,17 @@ export class Cli {
args.push("--package-name");
args.push(`"${metadata.rootPackage}"`);
}
return this.exec('Create Spring Boot project', `'${metadata.catalogType}'`, metadata.targetFolder, args);
return this.exec("New Boot Project", `'${metadata.catalogType}'`, metadata.targetFolder, args);
}
bootAdd(metadata: BootAddMetadata): Promise<void> {
const args = [
"boot",
"add",
"--from",
metadata.catalogType
];
return this.exec("Add to Boot Project", `'${metadata.catalogType}'`, metadata.targetFolder, args);
}
private async exec(title: string, message: string, cwd: string, args: string[]): Promise<void> {

View File

@@ -6,11 +6,16 @@ export interface ProjectType {
tags?: string[]
}
export interface BootNewProjectMetadata {
export interface BootNewMetadata {
name?: string;
groupId?: string;
artifactId?: string;
catalogType?: string;
rootPackage?: string;
targetFolder?: string;
}
export interface BootAddMetadata {
targetFolder?: string;
catalogType?: string;
}

View File

@@ -4,14 +4,13 @@
"use strict";
import * as vscode from "vscode";
import { Cli } from "./cli/core";
import { handleNew } from "./boot-project/boot-project";
import { handleAdd, handleNew } from "./boot-project/boot-project";
export const CLI = new Cli();
export async function activate(context: vscode.ExtensionContext): Promise<void> {
vscode.commands.registerCommand('vscode-spring-cli.new-project', () => {
handleNew({});
});
vscode.commands.registerCommand('vscode-spring-cli.boot.new', handleNew);
vscode.commands.registerCommand('vscode-spring-cli.boot.add', handleAdd);
}
export async function deactivate(): Promise<void> {

View File

@@ -1,4 +1,5 @@
import { InputBox, OpenDialogOptions, Uri, window, workspace } from "vscode";
import { InputBox, OpenDialogOptions, Uri, WorkspaceFolder, window, workspace } from "vscode";
import path from "path"
export async function openDialogForFolder(customOptions: OpenDialogOptions): Promise<Uri> {
const options: OpenDialogOptions = {
@@ -42,3 +43,46 @@ export function enterText(opts: {
inputBox.show();
});
}
function getRelativePathToWorkspaceFolder(file: Uri): string {
if (file) {
const wf: WorkspaceFolder = workspace.getWorkspaceFolder(file);
if (wf) {
return path.relative(wf.uri.fsPath, file.fsPath);
}
}
return '';
}
function getWorkspaceFolderName(file: Uri): string {
if (file) {
const wf: WorkspaceFolder = workspace.getWorkspaceFolder(file);
if (wf) {
return wf.name;
}
}
return '';
}
export async function getTargetPomXml(): Promise<Uri> {
if (window.activeTextEditor) {
const activeUri = window.activeTextEditor.document.uri;
if ("pom.xml" === path.basename(activeUri.path).toLowerCase()) {
return activeUri;
}
}
const candidates: Uri[] = await workspace.findFiles("**/pom.xml");
if (candidates.length > 0) {
if (candidates.length === 1) {
return candidates[0];
} else {
return await window.showQuickPick(
candidates.map((c: Uri) => ({ value: c, label: getRelativePathToWorkspaceFolder(c), description: getWorkspaceFolderName(c) })),
{ placeHolder: "Select the target project." },
).then(res => res && res.value);
}
}
return undefined;
}