diff options
author | Endi S. Dewata <edewata@redhat.com> | 2014-02-27 10:47:32 -0500 |
---|---|---|
committer | Endi S. Dewata <edewata@redhat.com> | 2014-03-07 18:17:53 -0500 |
commit | 8f1f54ce9817cc196f5b4fb77ab5361f2497de9a (patch) | |
tree | deb90c1f12590d7f5f9487eae523199ad3b7872b | |
parent | 6395d46bfbf5711efec0f145c180d0433cb1906b (diff) | |
download | pki-8f1f54ce9817cc196f5b4fb77ab5361f2497de9a.tar.gz pki-8f1f54ce9817cc196f5b4fb77ab5361f2497de9a.tar.xz pki-8f1f54ce9817cc196f5b4fb77ab5361f2497de9a.zip |
Added CLI help command.
A new help command has been added to display the manual page of the
specified command. If the manual page doesn't exist it will try to
display the manual page of the parent command.
Ticket #519
-rw-r--r-- | base/java-tools/src/com/netscape/cmstools/cli/HelpCLI.java | 91 | ||||
-rw-r--r-- | base/java-tools/src/com/netscape/cmstools/cli/MainCLI.java | 1 |
2 files changed, 92 insertions, 0 deletions
diff --git a/base/java-tools/src/com/netscape/cmstools/cli/HelpCLI.java b/base/java-tools/src/com/netscape/cmstools/cli/HelpCLI.java new file mode 100644 index 000000000..c2468f597 --- /dev/null +++ b/base/java-tools/src/com/netscape/cmstools/cli/HelpCLI.java @@ -0,0 +1,91 @@ +// --- BEGIN COPYRIGHT BLOCK --- +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; version 2 of the License. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License along +// with this program; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +// +// (C) 2014 Red Hat, Inc. +// All rights reserved. +// --- END COPYRIGHT BLOCK --- + +package com.netscape.cmstools.cli; + +import org.apache.commons.cli.CommandLine; + +/** + * @author Endi S. Dewata + */ +public class HelpCLI extends CLI { + + MainCLI mainCLI; + + public HelpCLI(MainCLI parent) { + super("help", "Help messages", parent); + mainCLI = parent; + } + + public String getFullName() { + return name; + } + + public void execute(String[] args) throws Exception { + + CommandLine cmd = null; + + try { + cmd = parser.parse(options, args); + + } catch (Exception e) { + System.err.println("Error: " + e.getMessage()); + printHelp(); + System.exit(1); + } + + String[] cmdArgs = cmd.getArgs(); + + String command; + if (cmdArgs.length == 0) { + command = "pki"; + + } else { + command = "pki-" + cmdArgs[0]; + } + + while (true) { + // display man page for the command + ProcessBuilder pb = new ProcessBuilder( + "/bin/man", + command); + + pb.inheritIO(); + Process p = pb.start(); + int rc = p.waitFor(); + + if (rc == 16) { + // man page not found, find the parent command + int i = command.lastIndexOf('-'); + if (i >= 0) { + // parent command exists, try again + command = command.substring(0, i); + continue; + + } else { + // parent command not found, stop + break; + } + + } else { + // man page found or there's a different error, stop + break; + } + } + } +} 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 3527238d2..2c2ce4d33 100644 --- a/base/java-tools/src/com/netscape/cmstools/cli/MainCLI.java +++ b/base/java-tools/src/com/netscape/cmstools/cli/MainCLI.java @@ -70,6 +70,7 @@ public class MainCLI extends CLI { addModule(new TPSCLI(this)); addModule(new ClientCLI(this)); + addModule(new HelpCLI(this)); addModule(new ProxyCLI(new CertCLI(this), "ca")); addModule(new ProxyCLI(new GroupCLI(this), "ca")); |