From a1c888a79fd941839fe875a420cf068ae8703c18 Mon Sep 17 00:00:00 2001
From: "Endi S. Dewata" <edewata@redhat.com>
Date: Thu, 27 Feb 2014 10:47:32 -0500
Subject: [PATCH] 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
---
 .../src/com/netscape/cmstools/cli/HelpCLI.java     | 91 ++++++++++++++++++++++
 .../src/com/netscape/cmstools/cli/MainCLI.java     |  1 +
 2 files changed, 92 insertions(+)
 create mode 100644 base/java-tools/src/com/netscape/cmstools/cli/HelpCLI.java

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 0000000000000000000000000000000000000000..c2468f597fd07e3eade98a3bf250dc0296e5cc9f
--- /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 48cb83cf353eab19a29ac2c75e8129b0a753de8a..09696a0bd2f6e34b9adc573543b638d278e321cd 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"));
-- 
1.8.4.2

