diff options
author | Endi S. Dewata <edewata@redhat.com> | 2015-06-30 22:49:11 -0400 |
---|---|---|
committer | Endi S. Dewata <edewata@redhat.com> | 2015-07-02 17:28:58 -0400 |
commit | 067cbce6c015a50f4a1747f8894b13c9052c2ed9 (patch) | |
tree | dc20de82c992e3ee5d131aaded1b44b09e6afa34 /base/java-tools/src/com/netscape | |
parent | bbd2feaa1f0ca4c338ca490f191184f2bd5c1a41 (diff) | |
download | pki-067cbce6c015a50f4a1747f8894b13c9052c2ed9.tar.gz pki-067cbce6c015a50f4a1747f8894b13c9052c2ed9.tar.xz pki-067cbce6c015a50f4a1747f8894b13c9052c2ed9.zip |
Fixed pki help CLI.
A new findModules() method has been added to the CLI class to find
the list of modules handling a command. The list will be used by the
pki help CLI to find the proper man page for the specified command.
Diffstat (limited to 'base/java-tools/src/com/netscape')
13 files changed, 148 insertions, 6 deletions
diff --git a/base/java-tools/src/com/netscape/cmstools/cert/CertCLI.java b/base/java-tools/src/com/netscape/cmstools/cert/CertCLI.java index 9ffa3ad45..e0924d353 100644 --- a/base/java-tools/src/com/netscape/cmstools/cert/CertCLI.java +++ b/base/java-tools/src/com/netscape/cmstools/cert/CertCLI.java @@ -67,6 +67,11 @@ public class CertCLI extends CLI { } } + @Override + public String getManPage() { + return "pki-cert"; + } + public void execute(String[] args) throws Exception { client = parent.getClient(); diff --git a/base/java-tools/src/com/netscape/cmstools/cli/CLI.java b/base/java-tools/src/com/netscape/cmstools/cli/CLI.java index ed01edc9a..13387495b 100644 --- a/base/java-tools/src/com/netscape/cmstools/cli/CLI.java +++ b/base/java-tools/src/com/netscape/cmstools/cli/CLI.java @@ -21,6 +21,7 @@ package com.netscape.cmstools.cli; import java.util.ArrayList; import java.util.Collection; import java.util.LinkedHashMap; +import java.util.List; import java.util.Map; import org.apache.commons.cli.CommandLineParser; @@ -113,6 +114,75 @@ public class CLI { return modules.remove(name); } + /** + * Find the list of modules that handle the specified command. + */ + public List<CLI> findModules(String command) throws Exception { + + List<CLI> results = new ArrayList<CLI>(); + + // split command into list of names: + // <names[0]>-<names[1]>-<names[2]>-...-<names[n-1]> + String[] names = command.split("-"); + + CLI current = this; + int i = 0; + + // translate all names into modules starting from the beginning + while (i < names.length) { + + String moduleName = null; + CLI module = null; + int j = i; + + // find module that matches the shortest sequence of names + while (j < names.length) { + + // construct module name + if (moduleName == null) { + moduleName = names[j]; + } else { + moduleName = moduleName + "-" + names[j]; + } + + // find module with name <names[i]>-...-<names[j]> + module = current.getModule(moduleName); + + if (module != null) { + // module found, stop + break; + } + + // try again with longer sequence + j++; + } + + if (module == null) + throw new Error("Invalid module \"" + moduleName + "\"."); + + // module found + results.add(module); + + // repeat for the remaining parts + current = module; + i = j + 1; + } + + return results; + } + + /** + * Find the last module that handles the specified command. + */ + public CLI findModule(String command) throws Exception { + List<CLI> modules = findModules(command); + return modules.get(modules.size() - 1); + } + + public String getManPage() { + return null; + } + public PKIClient getClient() { return client; } @@ -182,6 +252,8 @@ public class CLI { System.exit(0); } + // TODO: Rewrite using findModules(). + // A command consists of parts joined by dashes: <part 1>-<part 2>-...-<part N>. // For example: cert-request-find String command = args[0]; diff --git a/base/java-tools/src/com/netscape/cmstools/cli/HelpCLI.java b/base/java-tools/src/com/netscape/cmstools/cli/HelpCLI.java index 6b2a123d0..b348ffc20 100644 --- a/base/java-tools/src/com/netscape/cmstools/cli/HelpCLI.java +++ b/base/java-tools/src/com/netscape/cmstools/cli/HelpCLI.java @@ -18,6 +18,8 @@ package com.netscape.cmstools.cli; +import java.util.List; + import org.apache.commons.cli.CommandLine; /** @@ -51,19 +53,32 @@ public class HelpCLI extends CLI { String[] cmdArgs = cmd.getArgs(); - String command; + String manPage = null; if (cmdArgs.length == 0) { - command = "pki"; + // no command specified, show the pki man page + manPage = parent.getManPage(); } else { - command = "pki-" + cmdArgs[0]; + // find all modules handling the specified command + List<CLI> modules = parent.findModules(cmdArgs[0]); + + // find the module that has a man page starting from the last one + for (int i = modules.size() - 1; i >= 0; i--) { + CLI module = modules.get(i); + manPage = module.getManPage(); + if (manPage != null) break; + } + + // if no module has a man page, show the pki man page + if (manPage == null) + manPage = parent.getManPage(); } while (true) { // display man page for the command ProcessBuilder pb = new ProcessBuilder( "/bin/man", - command); + manPage); pb.inheritIO(); Process p = pb.start(); @@ -71,10 +86,10 @@ public class HelpCLI extends CLI { if (rc == 16) { // man page not found, find the parent command - int i = command.lastIndexOf('-'); + int i = manPage.lastIndexOf('-'); if (i >= 0) { // parent command exists, try again - command = command.substring(0, i); + manPage = manPage.substring(0, i); continue; } else { diff --git a/base/java-tools/src/com/netscape/cmstools/cli/MainCLI.java b/base/java-tools/src/com/netscape/cmstools/cli/MainCLI.java index 17929221b..77245ec53 100644 --- a/base/java-tools/src/com/netscape/cmstools/cli/MainCLI.java +++ b/base/java-tools/src/com/netscape/cmstools/cli/MainCLI.java @@ -89,6 +89,11 @@ public class MainCLI extends CLI { return moduleName; } + @Override + public String getManPage() { + return "pki"; + } + public void printVersion() { Package pkg = MainCLI.class.getPackage(); System.out.println("PKI Command-Line Interface "+pkg.getImplementationVersion()); diff --git a/base/java-tools/src/com/netscape/cmstools/client/ClientCLI.java b/base/java-tools/src/com/netscape/cmstools/client/ClientCLI.java index c9c71521a..f09ea74e9 100644 --- a/base/java-tools/src/com/netscape/cmstools/client/ClientCLI.java +++ b/base/java-tools/src/com/netscape/cmstools/client/ClientCLI.java @@ -50,6 +50,11 @@ public class ClientCLI extends CLI { } } + @Override + public String getManPage() { + return "pki-client"; + } + public void execute(String[] args) throws Exception { client = parent.getClient(); diff --git a/base/java-tools/src/com/netscape/cmstools/group/GroupCLI.java b/base/java-tools/src/com/netscape/cmstools/group/GroupCLI.java index 973e0bae6..ca151301e 100644 --- a/base/java-tools/src/com/netscape/cmstools/group/GroupCLI.java +++ b/base/java-tools/src/com/netscape/cmstools/group/GroupCLI.java @@ -54,6 +54,11 @@ public class GroupCLI extends CLI { } } + @Override + public String getManPage() { + return "pki-group"; + } + public void execute(String[] args) throws Exception { client = parent.getClient(); diff --git a/base/java-tools/src/com/netscape/cmstools/group/GroupMemberCLI.java b/base/java-tools/src/com/netscape/cmstools/group/GroupMemberCLI.java index e21d8175b..1df404bc5 100644 --- a/base/java-tools/src/com/netscape/cmstools/group/GroupMemberCLI.java +++ b/base/java-tools/src/com/netscape/cmstools/group/GroupMemberCLI.java @@ -40,6 +40,11 @@ public class GroupMemberCLI extends CLI { addModule(new GroupMemberRemoveCLI(this)); } + @Override + public String getManPage() { + return "pki-group-member"; + } + public void execute(String[] args) throws Exception { client = parent.getClient(); diff --git a/base/java-tools/src/com/netscape/cmstools/key/KeyCLI.java b/base/java-tools/src/com/netscape/cmstools/key/KeyCLI.java index fb324be25..d83bcf2fc 100644 --- a/base/java-tools/src/com/netscape/cmstools/key/KeyCLI.java +++ b/base/java-tools/src/com/netscape/cmstools/key/KeyCLI.java @@ -65,6 +65,11 @@ public class KeyCLI extends CLI { } } + @Override + public String getManPage() { + return "pki-key"; + } + public void execute(String[] args) throws Exception { client = parent.getClient(); diff --git a/base/java-tools/src/com/netscape/cmstools/logging/AuditCLI.java b/base/java-tools/src/com/netscape/cmstools/logging/AuditCLI.java index 11e530066..531d92020 100644 --- a/base/java-tools/src/com/netscape/cmstools/logging/AuditCLI.java +++ b/base/java-tools/src/com/netscape/cmstools/logging/AuditCLI.java @@ -41,6 +41,11 @@ public class AuditCLI extends CLI { addModule(new AuditShowCLI(this)); } + @Override + public String getManPage() { + return "pki-audit"; + } + public void execute(String[] args) throws Exception { client = parent.getClient(); diff --git a/base/java-tools/src/com/netscape/cmstools/profile/ProfileCLI.java b/base/java-tools/src/com/netscape/cmstools/profile/ProfileCLI.java index e9e21596a..ecfa75340 100644 --- a/base/java-tools/src/com/netscape/cmstools/profile/ProfileCLI.java +++ b/base/java-tools/src/com/netscape/cmstools/profile/ProfileCLI.java @@ -51,6 +51,11 @@ public class ProfileCLI extends CLI { } } + @Override + public String getManPage() { + return "pki-ca-profile"; + } + public void execute(String[] args) throws Exception { client = parent.getClient(); diff --git a/base/java-tools/src/com/netscape/cmstools/system/SecurityDomainCLI.java b/base/java-tools/src/com/netscape/cmstools/system/SecurityDomainCLI.java index b1a359788..0c2ed37d8 100644 --- a/base/java-tools/src/com/netscape/cmstools/system/SecurityDomainCLI.java +++ b/base/java-tools/src/com/netscape/cmstools/system/SecurityDomainCLI.java @@ -47,6 +47,11 @@ public class SecurityDomainCLI extends CLI { } } + @Override + public String getManPage() { + return "pki-securitydomain"; + } + public void execute(String[] args) throws Exception { client = parent.getClient(); diff --git a/base/java-tools/src/com/netscape/cmstools/user/UserCLI.java b/base/java-tools/src/com/netscape/cmstools/user/UserCLI.java index 7a03d3384..5382c4711 100644 --- a/base/java-tools/src/com/netscape/cmstools/user/UserCLI.java +++ b/base/java-tools/src/com/netscape/cmstools/user/UserCLI.java @@ -57,6 +57,11 @@ public class UserCLI extends CLI { } } + @Override + public String getManPage() { + return "pki-user"; + } + public void execute(String[] args) throws Exception { client = parent.getClient(); diff --git a/base/java-tools/src/com/netscape/cmstools/user/UserCertCLI.java b/base/java-tools/src/com/netscape/cmstools/user/UserCertCLI.java index ead915a66..d8ea91720 100644 --- a/base/java-tools/src/com/netscape/cmstools/user/UserCertCLI.java +++ b/base/java-tools/src/com/netscape/cmstools/user/UserCertCLI.java @@ -40,6 +40,11 @@ public class UserCertCLI extends CLI { addModule(new UserCertRemoveCLI(this)); } + @Override + public String getManPage() { + return "pki-user-cert"; + } + public void execute(String[] args) throws Exception { client = parent.getClient(); |