summaryrefslogtreecommitdiffstats
path: root/base/java-tools/src/com/netscape/cmstools/cli
diff options
context:
space:
mode:
authorEndi S. Dewata <edewata@redhat.com>2014-02-27 10:47:32 -0500
committerEndi S. Dewata <edewata@redhat.com>2014-03-07 18:17:53 -0500
commit8f1f54ce9817cc196f5b4fb77ab5361f2497de9a (patch)
treedeb90c1f12590d7f5f9487eae523199ad3b7872b /base/java-tools/src/com/netscape/cmstools/cli
parent6395d46bfbf5711efec0f145c180d0433cb1906b (diff)
downloadpki-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
Diffstat (limited to 'base/java-tools/src/com/netscape/cmstools/cli')
-rw-r--r--base/java-tools/src/com/netscape/cmstools/cli/HelpCLI.java91
-rw-r--r--base/java-tools/src/com/netscape/cmstools/cli/MainCLI.java1
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"));