[vscode-spring-cli] Added boot add command support
This commit is contained in:
@@ -25,10 +25,31 @@
|
||||
"onStartupFinished"
|
||||
],
|
||||
"contributes": {
|
||||
"menus": {
|
||||
"editor/context": [
|
||||
{
|
||||
"when": "resourceFilename == pom.xml",
|
||||
"command": "vscode-spring-cli.boot.add",
|
||||
"group": "Spring-CLI"
|
||||
}
|
||||
],
|
||||
"explorer/context": [
|
||||
{
|
||||
"when": "resourceFilename == pom.xml",
|
||||
"command": "vscode-spring-cli.boot.add",
|
||||
"group": "Spring-CLI"
|
||||
}
|
||||
]
|
||||
},
|
||||
"commands": [
|
||||
{
|
||||
"command": "vscode-spring-cli.new-project",
|
||||
"title": "New Project",
|
||||
"command": "vscode-spring-cli.boot.new",
|
||||
"title": "New Boot Project",
|
||||
"category": "Spring CLI"
|
||||
},
|
||||
{
|
||||
"command": "vscode-spring-cli.boot.add",
|
||||
"title": "Add to Boot Project",
|
||||
"category": "Spring CLI"
|
||||
}
|
||||
]
|
||||
|
||||
@@ -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> {
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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> {
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user