Skip to content

Commit

Permalink
#320: added help details support (#389)
Browse files Browse the repository at this point in the history
  • Loading branch information
hohwille authored Jun 18, 2024
1 parent b0dbea3 commit 967fb8b
Show file tree
Hide file tree
Showing 5 changed files with 113 additions and 15 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,10 @@ public void run() {
collectOptions(options, cmd, bundle);
}
options.print();
if (cmd == null) {
this.context.info("");
this.context.info(bundle.getDetail(this.context.getCommandletManager().getCommandlet(HelpCommandlet.class)));
}
}

private void printCommandletHelp(NlsBundle bundle, Commandlet cmd) {
Expand Down Expand Up @@ -115,6 +119,7 @@ private void printCommandletHelp(NlsBundle bundle, Commandlet cmd) {
}
this.context.info(usage.toString());
this.context.info(bundle.get(cmd));
this.context.info(bundle.getDetail(cmd));
this.context.info("");
this.context.info(bundle.get("values"));
values.print();
Expand Down
28 changes: 18 additions & 10 deletions cli/src/main/java/com/devonfw/tools/ide/nls/NlsBundle.java
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
package com.devonfw.tools.ide.nls;

import java.util.Locale;
import java.util.ResourceBundle;

import com.devonfw.tools.ide.commandlet.Commandlet;
import com.devonfw.tools.ide.context.IdeContext;
import com.devonfw.tools.ide.property.Property;

import java.util.Locale;
import java.util.ResourceBundle;

/**
* Wrapper for {@link ResourceBundle} to avoid {@link java.util.MissingResourceException}.
*/
Expand All @@ -22,7 +22,7 @@ public class NlsBundle {
* The constructor.
*
* @param context the {@link IdeContext}.
* @param name the simple name of {@link ResourceBundle} (e.g. "Cli").
* @param name the simple name of {@link ResourceBundle} (e.g. "Cli").
*/
public NlsBundle(IdeContext context, String name) {

Expand All @@ -33,7 +33,7 @@ public NlsBundle(IdeContext context, String name) {
* The constructor.
*
* @param context the {@link IdeContext}.
* @param locale the explicit {@link Locale} to use.
* @param locale the explicit {@link Locale} to use.
*/
public NlsBundle(IdeContext context, Locale locale) {

Expand All @@ -44,8 +44,8 @@ public NlsBundle(IdeContext context, Locale locale) {
* The constructor.
*
* @param context the {@link IdeContext}.
* @param name the simple name of {@link ResourceBundle} (e.g. "Cli").
* @param locale the explicit {@link Locale} to use.
* @param name the simple name of {@link ResourceBundle} (e.g. "Cli").
* @param locale the explicit {@link Locale} to use.
*/
public NlsBundle(IdeContext context, String name, Locale locale) {

Expand Down Expand Up @@ -81,18 +81,26 @@ public String getOrNull(String key) {
}

/**
* @param commandlet the {@link com.devonfw.tools.ide.commandlet.Commandlet#getName() name} of the
* {@link com.devonfw.tools.ide.commandlet.Commandlet}.
* @param commandlet the {@link com.devonfw.tools.ide.commandlet.Commandlet} to get the help summary for.
* @return the localized message (translated to the users language).
*/
public String get(Commandlet commandlet) {

return get("cmd." + commandlet.getName());
}

/**
* @param commandlet the {@link com.devonfw.tools.ide.commandlet.Commandlet} to get the help detail for.
* @return the localized message (translated to the users language).
*/
public String getDetail(Commandlet commandlet) {

return get("cmd." + commandlet.getName() + ".detail");
}

/**
* @param commandlet the {@link Commandlet} {@link Commandlet#getProperties() owning} the given {@link Property}.
* @param property the {@link Property} to the the description of.
* @param property the {@link Property} to the the description of.
* @return the localized message describing the property.
*/
public String get(Commandlet commandlet, Property<?> property) {
Expand Down
45 changes: 43 additions & 2 deletions cli/src/main/resources/nls/Help.properties
Original file line number Diff line number Diff line change
@@ -1,52 +1,93 @@
cmd.--version=Print the version of IDEasy.
cmd.--version.detail=TODO --version
cmd.aws=Tool commandlet for AWS CLI.
cmd.aws.detail=TODO AWS
cmd.az=Tool commandlet for Azure CLI.
cmd.az.detail=TODO AZ
cmd.cobigen=Tool commandlet for Cobigen (code-generator).
cmd.cobigen.detail=TODO cobigen
cmd.complete=Internal commandlet for bash auto-completion.
cmd.complete.detail=TODO complete
cmd.create=Create a new IDEasy project.
cmd.create.detail=TODO create
cmd.create.val.project=The name of the new project that will be created.
cmd.docker=Tool commandlet for Docker.
cmd.docker.detail=TODO docker
cmd.dotnet=Tool commandlet for dotnet.
cmd.dotnet.detail=TODO dotnet
cmd.eclipse=Tool commandlet for Eclipse (IDE).
cmd.eclipse.detail=TODO eclipse
cmd.env=Print the environment variables to set and export.
cmd.env.detail=TODO env
cmd.env.opt.--bash=Convert Windows path syntax to bash for usage in git-bash.
cmd.gcviewer=Tool commandlet for GC Viewer (View garbarge collector logs of Java).
cmd.gcviewer.detail=TODO GCViewer
cmd.get-edition=Get the edition of the selected tool.
cmd.get-edition.detail=TODO get-edition
cmd.get-version=Get the version of the selected tool.
cmd.get-version.detail=TODO get-version
cmd.gh=Tool commandlet for GitHub CLI.
cmd.gh.detail=TODO GH
cmd.graalvm=Tool commandlet for GraalVm (Java with native-image).
cmd.graalvm.detail=TODO GraalVM
cmd.gradle=Tool commandlet for Gradle (Build-Tool).
cmd.gradle.detail=TODO Gralde
cmd.helm=Tool commandlet for Helm (Kubernetes Package Manager).
cmd.helm.detail=TODO Helm
cmd.help=Prints this help.
cmd.help.detail=To get help details about a commandlet, simply call "ide help <commandlet>".
cmd.install=Install the selected tool.
cmd.install.detail=TODO Install
cmd.intellij=Tool commandlet for IntelliJ (IDE)
cmd.jasypt=Tool commandlet for Jasypt, allows to install Jasypt and encrypt or decrypt secrets using strong encryption with a master password. It is possible to input custom arguments by setting the JASYPT_OPTS variable, which defaults to JASYPT_OPTS="algorithm=PBEWITHHMACSHA512ANDAES_256 ivGeneratorClassName=org.jasypt.iv.RandomIvGenerator".
cmd.jasypt.val.command=Action (encrypt | decrypt)
cmd.intellij.detail=TODO IntelliJ
cmd.jasypt=Tool commandlet for Jasypt (encryption/decryption).
cmd.jasypt.detail=TODO Jasypt
cmd.jasypt.val.command=Modues (encrypt | decrypt)
cmd.jasypt.val.masterPassword=master password.
cmd.jasypt.val.secret=The secret to be encrypted or decrypted.
cmd.java=Tool commandlet for Java (OpenJDK).
cmd.java.detail=TODO Java
cmd.jmc=Tool commandlet for JDK Mission Control (performance analysis).
cmd.jmc.detail=TODO JMC
cmd.kotlinc=Tool commandlet for Kotlin (compiler for JRE language).
cmd.kotlinc.detail=TODO kotlinc
cmd.kotlincnative=Tool commandlet for Kotlin-Native (compiler for JRE language).
cmd.kotlincnative.detail=TODO kotlincnative
cmd.list-editions=List the available editions of the selected tool.
cmd.list-editions.detail=TODO list-editions
cmd.list-versions=List the available versions of the selected tool.
cmd.list-versions.detail=TODO list-versions
cmd.mvn=Tool commandlet for Maven (Build-Tool).
cmd.mvn.detail=TODO mvn
cmd.node=Tool commandlet for Node.js (JavaScript runtime).
cmd.node.detail=TODO node
cmd.npm=Tool commandlet for Npm (JavaScript Node Package Manager).
cmd.npm.detail=TODO npm
cmd.oc=Tool commandlet for Openshift CLI (Kubernetes management tool).
cmd.oc.detail=TODO oc
cmd.quarkus=Tool commandlet for Quarkus (framework for cloud-native apps).
cmd.quarkus.detail=TODO quarkus
cmd.repository=Setup pre-configured git repositories (clone, build, import).
cmd.repository.detail=TODO repository
cmd.repository.val.repository=The name of the properties file of the pre-configured git repository to setup, omit to setup all active repositories.
cmd.set-edition=Set the edition of the selected tool.
cmd.set-edition.detail=TODO set-edition
cmd.set-version=Set the version of the selected tool.
cmd.set-version.detail=TODO set-version
cmd.set-version.val.version=The tool version to set.
cmd.shell=Commandlet to start built-in shell with advanced auto-completion.
cmd.shell.detail=TODO shell
cmd.sonar=Tool commandlet for SonarQube.
cmd.sonar.detail=TODO sonar
cmd.sonar.val.command=Action to perform (START|STOP|ANALYZE)
cmd.terraform=Tool commandlet for Terraform.
cmd.terraform.detail=TODO terraform
cmd.uninstall=Uninstall the selected tool.
cmd.uninstall.detail=TODO uninstall
cmd.update=Pull your settings and apply updates (software, configuration and repositories).
cmd.update.detail=TODO update
cmd.vscode=Tool commandlet for Visual Studio Code (IDE).
cmd.vscode.detail=TODO vscode
commandlets=Available commandlets:
opt.--batch=enable batch mode (non-interactive).
opt.--debug=enable debug logging.
Expand Down
43 changes: 42 additions & 1 deletion cli/src/main/resources/nls/Help_de.properties
Original file line number Diff line number Diff line change
@@ -1,52 +1,93 @@
cmd.--version=Gibt die Version von IDEasy aus.
cmd.--version.detail=TODO DE --version
cmd.aws=Werkzeug Kommando für AWS Kommandoschnittstelle.
cmd.aws.detail=TODO DE AWS
cmd.az=Werkzeug Kommando für Azure Kommandoschnittstelle.
cmd.az.detail=TODO DE AZ
cmd.cobigen=Werkzeug Kommando für Cobigen.
cmd.cobigen.detail=TODO DE cobigen
cmd.complete=Internes Werkzeug für bash Autovervollständigung.
cmd.complete.detail=TODO DE complete
cmd.create=Erstellt ein neues IDEasy Projekt.
cmd.create.detail=TODO DE create
cmd.create.val.project=Der Name des zu erstellenden Projekts.
cmd.docker=Werkzeug Kommando für Docker.
cmd.docker.detail=TODO DE docker
cmd.dotnet=Werkzeug Kommando für dotnet Kommandoschnittstelle.
cmd.dotnet.detail=TODO DE dotnet
cmd.eclipse=Werkzeug Kommando für Eclipse (IDE).
cmd.eclipse.detail=TODO DE eclipse
cmd.env=Gibt die zu setzenden und exportierenden Umgebungsvariablen aus.
cmd.env.detail=TODO DE env
cmd.env.opt.--bash=Konvertiert Windows-Pfad-Syntax nach Bash zur Verwendung in git-bash.
cmd.gcviewer=Werkzeug Kommando für GC Viewer (Anzeige von Garbage-Collector Logs von Java).
cmd.gcviewer.detail=TODO DE GCViewer
cmd.get-edition=Zeigt die Edition des selektierten Werkzeugs an.
cmd.get-edition.detail=TODO DE get-edition
cmd.get-version=Zeigt die Version des selektierten Werkzeugs an.
cmd.get-version.detail=TODO DE get-version
cmd.gh=Werkzeug Kommando für die Github Kommandoschnittstelle.
cmd.gh.detail=TODO DE GH
cmd.graalvm=Werkzeug Kommando für GraalVm.
cmd.graalvm.detail=TODO DE GraalVM
cmd.gradle=Werkzeug Kommando für Gradle (Build-Tool).
cmd.gradle.detail=TODO DE Gralde
cmd.helm=Werkzeug Kommando für Helm (Kubernetes Package Manager).
cmd.helm.detail=TODO DE Helm
cmd.help=Zeigt diese Hilfe an.
cmd.help.detail=Die Hilfe-Details eines Kommandos können mit dem Befehl "ide help <commandlet>" ausgegeben werden.
cmd.install=Installiert das selektierte Werkzeug.
cmd.install.detail=TODO DE Install
cmd.intellij=Werkzeug Kommando für Intellij (IDE)
cmd.jasypt=Werkzeug Kommando für Jasypt, ermöglicht die Installation von Jasypt und die Verschlüsselung oder Entschlüsselung von Geheimnissen mit starker Verschlüsselung durch einen Master-Passwort. Es ist möglich, benutzerdefinierte Argumente durch Setzen der JASYPT_OPTS-Variable einzugeben, die standardmäßig auf JASYPT_OPTS="algorithm=PBEWITHHMACSHA512ANDAES_256 ivGeneratorClassName=org.jasypt.iv.RandomIvGenerator" gesetzt ist.
cmd.intellij.detail=TODO DE IntelliJ
cmd.jasypt=Werkzeug Kommando für Jasypt.
cmd.jasypt.detail=TODO DE Jasypt
cmd.jasypt.val.command=Mode (encrypt | decrypt)
cmd.jasypt.val.masterPassword=master Passwort.
cmd.jasypt.val.secret=Das zu verschlüsselnde oder zu entschlüsselnde Geheimnis.
cmd.java=Werkzeug Kommando für Java (OpenJDK).
cmd.java.detail=TODO DE Java
cmd.jmc=Werkzeug Kommando für JDK Mission Control (Performance Analyse).
cmd.jmc.detail=TODO DE JMC
cmd.kotlinc=Werkzeug Kommando für Kotlin (Compiler für JRE Sprache).
cmd.kotlinc.detail=TODO DE kotlinc
cmd.kotlincnative=Werkzeug Kommando für Kotlin-Native (Compiler für JRE Sprache).
cmd.kotlincnative.detail=TODO DE kotlincnative
cmd.list-editions=Listet die verfügbaren Editionen des selektierten Werkzeugs auf.
cmd.list-editions.detail=TODO DE list-editions
cmd.list-versions=Listet die verfügbaren Versionen des selektierten Werkzeugs auf.
cmd.list-versions.detail=TODO DE list-versions
cmd.mvn=Werkzeug Kommando für Maven (Build-Werkzeug).
cmd.mvn.detail=TODO DE mvn
cmd.node=Werkzeug Kommando für Node.js (JavaScript Laufzeitumgebung).
cmd.node.detail=TODO DE node
cmd.npm=Werkzeug Kommando für Npm (JavaScript Node Package Manager).
cmd.npm.detail=TODO DE npm
cmd.oc=Werkzeug Kommando für Openshift CLI (Kubernetes Management Tool).
cmd.oc.detail=TODO DE oc
cmd.quarkus=Werkzeug Kommando für Quarkus (Framework für Cloud-native Anwendungen).
cmd.quarkus.detail=TODO DE quarkus
cmd.repository=Richtet das vorkonfigurierte Git Repository ein.
cmd.repository.detail=TODO DE repository
cmd.repository.val.repository=Der Name der Properties-Datei des vorkonfigurierten Git Repositories zum Einrichten. Falls nicht angegeben, werden alle aktiven Projekte eingerichtet.
cmd.set-edition=Setzt die Edition des selektierten Werkzeugs.
cmd.set-edition.detail=TODO DE set-edition
cmd.set-version=Setzt die Version des selektierten Werkzeugs.
cmd.set-version.detail=TODO DE set-version
cmd.set-version.val.version=Die zu setzende Werkzeug Version.
cmd.shell=Kommando zum Starten der integrierten Shell mit erweiterter Autovervollständigung.
cmd.shell.detail=TODO DE shell
cmd.sonar=Werkzeug Kommando für SonarQube.
cmd.sonar.detail=TODO DE sonar
cmd.sonar.val.command=Auszuführende Aktion (START|STOP|ANALYZE)
cmd.terraform=Werkzeug Kommando für Terraform.
cmd.terraform.detail=TODO DE terraform
cmd.uninstall=Deinstalliert das ausgewählte Werkzeug.
cmd.uninstall.detail=TODO DE uninstall
cmd.update=Updatet die Settings, Software und Repositories.
cmd.update.detail=TODO DE update
cmd.vscode=Werkzeug Kommando für Visual Studio Code (IDE).
cmd.vscode.detail=TODO DE vscode
commandlets=Verfügbare Kommandos:
opt.--batch=Aktiviert den Batch-Modus (nicht-interaktive Stapelverarbeitung).
opt.--debug=Aktiviert Debug-Ausgaben (Fehleranalyse).
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -80,10 +80,10 @@ public void testRunWithCommandlet() {
* Ensure that for every {@link Commandlet} and each of their {@link Property} a help text is defined.
*
* @param locale the {@link String} representation of the {@link Locale} to test. The empty {@link String} will be
* used for {@link Locale#ROOT}.
* used for {@link Locale#ROOT}.
*/
@ParameterizedTest
@ValueSource(strings = { "", "de" })
@ValueSource(strings = {"", "de"})
public void testEnsureAllNlsPropertiesPresent(String locale) throws IOException {

// arrange
Expand All @@ -95,8 +95,11 @@ public void testEnsureAllNlsPropertiesPresent(String locale) throws IOException
for (Commandlet commandlet : context.getCommandletManager().getCommandlets()) {
String message = bundle.get(commandlet);
soft.assertThat(message).doesNotStartWith("?");
String detail = bundle.getDetail(commandlet);
soft.assertThat(detail).doesNotStartWith("?");
if (!locale.isEmpty()) {
soft.assertThat(message).isNotEqualTo(bundleRoot.get(commandlet));
soft.assertThat(detail).isNotEqualTo(bundleRoot.getDetail(commandlet));
}
for (Property<?> property : commandlet.getProperties()) {
if (!(property instanceof KeywordProperty)) {
Expand Down

0 comments on commit 967fb8b

Please sign in to comment.