export async function addDependencyHandler()

in src/handlers/addDependencyHandler.ts [14:68]


export async function addDependencyHandler(options?: any): Promise<void> {
    let pomPath: string;
    if (options && options.pomPath) {
        // for nodes from Maven explorer
        pomPath = options.pomPath;
    } else if (options && options.projectBasePath) {
        // for "Maven dependencies" nodes from Project Manager
        pomPath = path.join(options.projectBasePath, "pom.xml");
    } else if (options?.project?.pomPath) {
        // for "Dependencies" node from module in Maven explorer
        pomPath = options.project.pomPath;
    } else {
        // select a project(pomfile)
        const selectedProject: MavenProject | undefined = await selectProjectIfNecessary();
        if (!selectedProject) {
            return;
        }
        pomPath = selectedProject.pomPath;
    }

    if (!await fse.pathExists(pomPath)) {
        throw new UserError("Specified POM file does not exist on file system.");
    }

    // check if another extension has passed a dependency to add on its own
    if (options && options.groupId && options.artifactId && options.version) {
        await addDependency(pomPath, options.groupId, options.artifactId, options.version, options.packaging, options.classifier);
    }
    else {

        const keywordString: string | undefined = await vscode.window.showInputBox({
            ignoreFocusOut: true,
            prompt: "Input keywords to search artifacts from Maven Central Repository.",
            placeHolder: "e.g. spring azure storage",
            validateInput: (text: string) => {
                if (text.trim().length < 3) {
                    return "Keywords are too short.";
                }
                return undefined;
            }
        });
        if (!keywordString) {
            return;
        }

        const selectedDoc: IArtifactMetadata | undefined = await vscode.window.showQuickPick<vscode.QuickPickItem & { value: IArtifactMetadata }>(
            getArtifacts(keywordString.trim().split(/[-,. :]/)).then(artifacts => artifacts.map(artifact => ({ value: artifact, label: `$(package) ${artifact.a}`, description: artifact.g }))),
            { placeHolder: "Select a dependency ..." }
        ).then(selected => selected ? selected.value : undefined);
        if (!selectedDoc) {
            return;
        }
        await addDependency(pomPath, selectedDoc.g, selectedDoc.a, selectedDoc.latestVersion, selectedDoc.p, undefined);
    }
}