Previously the CLI would unnecessarily try to connect to the server while executing commands that do not need connection. The problem has been fixed using lazy initialization of the PKIClient object.

Pushed to master under trivial rule.

--
Endi S. Dewata
>From 4ebdb9417cdda4edd231f7864a934e560aba85b5 Mon Sep 17 00:00:00 2001
From: "Endi S. Dewata" <[email protected]>
Date: Fri, 24 Mar 2017 04:52:44 +0100
Subject: [PATCH] Added CLI.getConfig().

A new CLI.getConfig() has been added to return the parent CLI's
configuration if available.
---
 base/java-tools/src/com/netscape/cmstools/cli/CLI.java     | 6 ++++++
 base/java-tools/src/com/netscape/cmstools/cli/MainCLI.java | 4 ++++
 2 files changed, 10 insertions(+)

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 65fad75e017ed57df871b45c7ce3009ca9f91857..113c5e040b55847d58805f42cd7098727bbee1b6 100644
--- a/base/java-tools/src/com/netscape/cmstools/cli/CLI.java
+++ b/base/java-tools/src/com/netscape/cmstools/cli/CLI.java
@@ -30,6 +30,7 @@ import org.apache.commons.cli.Options;
 import org.apache.commons.cli.PosixParser;
 import org.apache.commons.lang.StringUtils;
 
+import com.netscape.certsrv.client.ClientConfig;
 import com.netscape.certsrv.client.PKIClient;
 
 
@@ -183,6 +184,11 @@ public class CLI {
         return null;
     }
 
+    public ClientConfig getConfig() throws Exception {
+        if (parent != null) return parent.getConfig();
+        return null;
+    }
+
     public PKIClient getClient() throws Exception {
         return client;
     }
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 d7246d60ccdd7357fa236acca959c27de1e07510..d7aa54c09664e76f2e5d4aec7b5088a4d3dfd211 100644
--- a/base/java-tools/src/com/netscape/cmstools/cli/MainCLI.java
+++ b/base/java-tools/src/com/netscape/cmstools/cli/MainCLI.java
@@ -438,6 +438,10 @@ public class MainCLI extends CLI {
         if (verbose) System.out.println("Message format: " + messageFormat);
     }
 
+    public ClientConfig getConfig() {
+        return config;
+    }
+
     public void convertCertStatusList(String list, Collection<Integer> statuses) throws Exception {
 
         if (list == null) return;
-- 
2.9.3

>From 7545c1fd0a71dbddcfcf5726d090df32f99d8ac2 Mon Sep 17 00:00:00 2001
From: "Endi S. Dewata" <[email protected]>
Date: Thu, 23 Mar 2017 22:22:16 +0100
Subject: [PATCH] Refactored CLI.getClient().

The CLI.getClient() has been modified to return the parent CLI's
PKIClient object if available.
---
 base/java-tools/src/com/netscape/cmstools/cli/CLI.java      | 5 +++--
 base/java-tools/src/com/netscape/cmstools/cli/ProxyCLI.java | 2 +-
 2 files changed, 4 insertions(+), 3 deletions(-)

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 113c5e040b55847d58805f42cd7098727bbee1b6..4911b8ae24f716b17b4f5056bf49ab3e36234ecf 100644
--- a/base/java-tools/src/com/netscape/cmstools/cli/CLI.java
+++ b/base/java-tools/src/com/netscape/cmstools/cli/CLI.java
@@ -190,10 +190,11 @@ public class CLI {
     }
 
     public PKIClient getClient() throws Exception {
-        return client;
+        if (parent != null) return parent.getClient();
+        return null;
     }
 
-    public Object getClient(String name) {
+    public Object getClient(String name) throws Exception {
         if (parent != null) return parent.getClient(name);
         return null;
     }
diff --git a/base/java-tools/src/com/netscape/cmstools/cli/ProxyCLI.java b/base/java-tools/src/com/netscape/cmstools/cli/ProxyCLI.java
index 1cf6feaf2b044f2ec7473cdf0a1810761097ac1b..60d4593d42547a7ab4d0054c0350ea77b3af1443 100644
--- a/base/java-tools/src/com/netscape/cmstools/cli/ProxyCLI.java
+++ b/base/java-tools/src/com/netscape/cmstools/cli/ProxyCLI.java
@@ -91,7 +91,7 @@ public class ProxyCLI extends CLI {
         return module.getClient();
     }
 
-    public Object getClient(String name) {
+    public Object getClient(String name) throws Exception {
         return module.getClient(name);
     }
 
-- 
2.9.3

>From 0fc2d665dadc062d9115aba2083eb780e91b6513 Mon Sep 17 00:00:00 2001
From: "Endi S. Dewata" <[email protected]>
Date: Thu, 23 Mar 2017 23:21:12 +0100
Subject: [PATCH] Refactored ClientCLI.

The ClientCLI and its submodules have been modified to use lazy
initialization to get the PKIClient object.
---
 base/java-tools/src/com/netscape/cmstools/client/ClientCLI.java    | 7 -------
 .../src/com/netscape/cmstools/client/ClientCertFindCLI.java        | 3 ++-
 .../src/com/netscape/cmstools/client/ClientCertImportCLI.java      | 4 ++--
 .../src/com/netscape/cmstools/client/ClientCertRemoveCLI.java      | 3 ++-
 .../src/com/netscape/cmstools/client/ClientCertRequestCLI.java     | 6 ++++--
 .../src/com/netscape/cmstools/client/ClientCertShowCLI.java        | 3 ++-
 6 files changed, 12 insertions(+), 14 deletions(-)

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 8bafd84f67f61da24f5df212c9c5b6c0debfe97f..c2826df692676a4c7aef566c55e23420fd572299 100644
--- a/base/java-tools/src/com/netscape/cmstools/client/ClientCLI.java
+++ b/base/java-tools/src/com/netscape/cmstools/client/ClientCLI.java
@@ -56,13 +56,6 @@ public class ClientCLI extends CLI {
         return "pki-client";
     }
 
-    public void execute(String[] args) throws Exception {
-
-        client = parent.getClient();
-
-        super.execute(args);
-    }
-
     public static void printCertInfo(X509Certificate cert) {
         System.out.println("  Serial Number: "+new CertId(cert.getSerialNumber()).toHexString());
         System.out.println("  Nickname: "+cert.getNickname());
diff --git a/base/java-tools/src/com/netscape/cmstools/client/ClientCertFindCLI.java b/base/java-tools/src/com/netscape/cmstools/client/ClientCertFindCLI.java
index c758e3c9a9a601858d3cd636b266eb0bf1cb34d0..0516d9c936d9f1a5100310e16f0a9de80d0a3051 100644
--- a/base/java-tools/src/com/netscape/cmstools/client/ClientCertFindCLI.java
+++ b/base/java-tools/src/com/netscape/cmstools/client/ClientCertFindCLI.java
@@ -23,6 +23,7 @@ import java.util.Arrays;
 import org.apache.commons.cli.CommandLine;
 import org.mozilla.jss.crypto.X509Certificate;
 
+import com.netscape.certsrv.client.PKIClient;
 import com.netscape.cmstools.cli.CLI;
 import com.netscape.cmstools.cli.MainCLI;
 
@@ -63,7 +64,7 @@ public class ClientCertFindCLI extends CLI {
             throw new Exception("Too many arguments specified.");
         }
 
-        client = parent.getClient();
+        PKIClient client = getClient();
 
         X509Certificate[] certs;
         if (cmd.hasOption("ca")) {
diff --git a/base/java-tools/src/com/netscape/cmstools/client/ClientCertImportCLI.java b/base/java-tools/src/com/netscape/cmstools/client/ClientCertImportCLI.java
index 7f67d92403c96690366c2e5db5da97988ff030f4..9cb3e67235e4426d4d90ee3fe4cd4913f77dc46f 100644
--- a/base/java-tools/src/com/netscape/cmstools/client/ClientCertImportCLI.java
+++ b/base/java-tools/src/com/netscape/cmstools/client/ClientCertImportCLI.java
@@ -194,7 +194,7 @@ public class ClientCertImportCLI extends CLI {
             // late initialization
             mainCLI.init();
 
-            client = mainCLI.getClient();
+            PKIClient client = getClient();
             URI serverURI = mainCLI.config.getServerURI();
 
             String caServerURI = serverURI.getScheme() + "://" +
@@ -315,7 +315,7 @@ public class ClientCertImportCLI extends CLI {
     public void run(String[] command) throws IOException, InterruptedException {
 
         if (verbose) {
-           System.out.println("Command: " + StringUtils.join(command));
+           System.out.println("Command: " + StringUtils.join(command, " "));
         }
 
         Runtime rt = Runtime.getRuntime();
diff --git a/base/java-tools/src/com/netscape/cmstools/client/ClientCertRemoveCLI.java b/base/java-tools/src/com/netscape/cmstools/client/ClientCertRemoveCLI.java
index fa350c4123c72797205b9e8592e7e31c7237423b..7dc4bdaac1555b0a80f1e2d2ebc4c0933779d90c 100644
--- a/base/java-tools/src/com/netscape/cmstools/client/ClientCertRemoveCLI.java
+++ b/base/java-tools/src/com/netscape/cmstools/client/ClientCertRemoveCLI.java
@@ -22,6 +22,7 @@ import java.util.Arrays;
 
 import org.apache.commons.cli.CommandLine;
 
+import com.netscape.certsrv.client.PKIClient;
 import com.netscape.cmstools.cli.CLI;
 import com.netscape.cmstools.cli.MainCLI;
 
@@ -56,7 +57,7 @@ public class ClientCertRemoveCLI extends CLI {
             throw new Exception("No nickname specified.");
         }
 
-        client = parent.getClient();
+        PKIClient client = getClient();
 
         String nickname = cmdArgs[0];
         client.removeCert(nickname);
diff --git a/base/java-tools/src/com/netscape/cmstools/client/ClientCertRequestCLI.java b/base/java-tools/src/com/netscape/cmstools/client/ClientCertRequestCLI.java
index 37d0e81aec36bd7c39f6caf299b7d961d0ea9647..cbbf4e9729bc55e541814044e71902a933ab79b0 100644
--- a/base/java-tools/src/com/netscape/cmstools/client/ClientCertRequestCLI.java
+++ b/base/java-tools/src/com/netscape/cmstools/client/ClientCertRequestCLI.java
@@ -40,6 +40,7 @@ import org.mozilla.jss.pkix.primitive.Name;
 import com.netscape.certsrv.cert.CertClient;
 import com.netscape.certsrv.cert.CertEnrollmentRequest;
 import com.netscape.certsrv.cert.CertRequestInfos;
+import com.netscape.certsrv.client.PKIClient;
 import com.netscape.certsrv.profile.ProfileAttribute;
 import com.netscape.certsrv.profile.ProfileInput;
 import com.netscape.certsrv.system.SystemCertClient;
@@ -212,19 +213,20 @@ public class ClientCertRequestCLI extends CLI {
         }
 
         String csr;
+        PKIClient client;
         if ("pkcs10".equals(requestType)) {
             csr = generatePkcs10Request(certDatabase, password, algorithm, length, subjectDN);
 
             // initialize database after PKCS10Client to avoid conflict
             mainCLI.init();
-            client = mainCLI.getClient();
+            client = getClient();
 
 
         } else if ("crmf".equals(requestType)) {
 
             // initialize database before CRMFPopClient to load transport certificate
             mainCLI.init();
-            client = mainCLI.getClient();
+            client = getClient();
 
             String encoded;
             if (transportCertFilename == null) {
diff --git a/base/java-tools/src/com/netscape/cmstools/client/ClientCertShowCLI.java b/base/java-tools/src/com/netscape/cmstools/client/ClientCertShowCLI.java
index 963460c35dd34a0aa827d678f3f961a7af236298..2242b37f84d31db6be227e07eeb4f9acf12e3b6b 100644
--- a/base/java-tools/src/com/netscape/cmstools/client/ClientCertShowCLI.java
+++ b/base/java-tools/src/com/netscape/cmstools/client/ClientCertShowCLI.java
@@ -29,6 +29,7 @@ import org.apache.commons.lang.RandomStringUtils;
 import org.apache.commons.lang.StringUtils;
 import org.mozilla.jss.crypto.X509Certificate;
 
+import com.netscape.certsrv.client.PKIClient;
 import com.netscape.cmstools.cli.CLI;
 import com.netscape.cmstools.cli.MainCLI;
 
@@ -126,7 +127,7 @@ public class ClientCertShowCLI extends CLI {
 
             mainCLI.init();
 
-            client = mainCLI.getClient();
+            PKIClient client = getClient();
             X509Certificate cert = client.getCert(nickname);
 
             ClientCLI.printCertInfo(cert);
-- 
2.9.3

>From 39f752974836ddb416d9b5a3c38a3c0492fab744 Mon Sep 17 00:00:00 2001
From: "Endi S. Dewata" <[email protected]>
Date: Fri, 24 Mar 2017 05:25:44 +0100
Subject: [PATCH] Refactored ProxyCLI.

The ProxyCLI has been modified to use lazy initialization to get
the PKIClient object.
---
 base/java-tools/src/com/netscape/cmstools/cli/ProxyCLI.java | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/base/java-tools/src/com/netscape/cmstools/cli/ProxyCLI.java b/base/java-tools/src/com/netscape/cmstools/cli/ProxyCLI.java
index 60d4593d42547a7ab4d0054c0350ea77b3af1443..ad3fdb8b6788a3d362fad8b2d0750223ee4798bb 100644
--- a/base/java-tools/src/com/netscape/cmstools/cli/ProxyCLI.java
+++ b/base/java-tools/src/com/netscape/cmstools/cli/ProxyCLI.java
@@ -101,17 +101,17 @@ public class ProxyCLI extends CLI {
 
     public void execute(String[] args) throws Exception {
 
-        PKIClient client = module.getParent().getClient();
         AccountClient accountClient = null;
 
         try {
             // login if username or nickname is specified
-            ClientConfig config = client.getConfig();
+            ClientConfig config = module.getConfig();
             if (config.getUsername() != null || config.getCertNickname() != null) {
 
                 String subsystem = config.getSubsystem();
                 if (subsystem == null) subsystem = defaultSubsystem;
 
+                PKIClient client = module.getClient();
                 accountClient = new AccountClient(client, subsystem);
                 accountClient.login();
             }
-- 
2.9.3

>From 61cfd9cd7736ccf71c001445f5f9f32e62af3613 Mon Sep 17 00:00:00 2001
From: "Endi S. Dewata" <[email protected]>
Date: Fri, 24 Mar 2017 01:52:54 +0100
Subject: [PATCH] Refactored SubsystemCLI.

The SubsystemCLI and its subclasses have been modified to use
lazy initialization to get the PKIClient object. They also have
been simplified by moving common methods to the base class.
---
 .../src/com/netscape/cmstools/cli/CACLI.java       | 22 ++++++++--------------
 .../src/com/netscape/cmstools/cli/KRACLI.java      | 22 ++++++++--------------
 .../src/com/netscape/cmstools/cli/OCSPCLI.java     | 22 ++++++++--------------
 .../com/netscape/cmstools/cli/SubsystemCLI.java    | 22 +++++++++++++++++-----
 .../src/com/netscape/cmstools/cli/TKSCLI.java      | 22 ++++++++--------------
 .../src/com/netscape/cmstools/cli/TPSCLI.java      | 22 ++++++++--------------
 6 files changed, 57 insertions(+), 75 deletions(-)

diff --git a/base/java-tools/src/com/netscape/cmstools/cli/CACLI.java b/base/java-tools/src/com/netscape/cmstools/cli/CACLI.java
index 39dd2a2ce723daaf336ba4f3ddc2e2be4afbf407..2ec20dcb02467af7255dc3f181f9c9de9fd30284 100644
--- a/base/java-tools/src/com/netscape/cmstools/cli/CACLI.java
+++ b/base/java-tools/src/com/netscape/cmstools/cli/CACLI.java
@@ -19,7 +19,8 @@
 package com.netscape.cmstools.cli;
 
 import com.netscape.certsrv.ca.CAClient;
-import com.netscape.certsrv.client.Client;
+import com.netscape.certsrv.client.PKIClient;
+import com.netscape.certsrv.client.SubsystemClient;
 import com.netscape.cmstools.authority.AuthorityCLI;
 import com.netscape.cmstools.cert.CertCLI;
 import com.netscape.cmstools.feature.FeatureCLI;
@@ -49,20 +50,13 @@ public class CACLI extends SubsystemCLI {
         addModule(new UserCLI(this));
     }
 
-    public void init() throws Exception {
-        client = parent.getClient();
+    public SubsystemClient getSubsystemClient() throws Exception {
+
+        if (caClient != null) return caClient;
+
+        PKIClient client = getClient();
         caClient = new CAClient(client);
-    }
 
-    public void login() {
-        caClient.login();
-    }
-
-    public void logout() {
-        caClient.logout();
-    }
-
-    public Client getClient(String name) {
-        return caClient.getClient(name);
+        return caClient;
     }
 }
diff --git a/base/java-tools/src/com/netscape/cmstools/cli/KRACLI.java b/base/java-tools/src/com/netscape/cmstools/cli/KRACLI.java
index 8a9f789cd1099a9613615f943adad4fd78d2a666..2db85aafe08b516516e9d52cbf5e22a88a5585e5 100644
--- a/base/java-tools/src/com/netscape/cmstools/cli/KRACLI.java
+++ b/base/java-tools/src/com/netscape/cmstools/cli/KRACLI.java
@@ -18,7 +18,8 @@
 
 package com.netscape.cmstools.cli;
 
-import com.netscape.certsrv.client.Client;
+import com.netscape.certsrv.client.PKIClient;
+import com.netscape.certsrv.client.SubsystemClient;
 import com.netscape.certsrv.kra.KRAClient;
 import com.netscape.cmstools.group.GroupCLI;
 import com.netscape.cmstools.key.KeyCLI;
@@ -41,20 +42,13 @@ public class KRACLI extends SubsystemCLI {
         addModule(new UserCLI(this));
     }
 
-    public void init() throws Exception {
-        client = parent.getClient();
+    public SubsystemClient getSubsystemClient() throws Exception {
+
+        if (kraClient != null) return kraClient;
+
+        PKIClient client = getClient();
         kraClient = new KRAClient(client);
-    }
 
-    public void login() {
-        kraClient.login();
-    }
-
-    public void logout() {
-        kraClient.logout();
-    }
-
-    public Client getClient(String name) {
-        return kraClient.getClient(name);
+        return kraClient;
     }
 }
diff --git a/base/java-tools/src/com/netscape/cmstools/cli/OCSPCLI.java b/base/java-tools/src/com/netscape/cmstools/cli/OCSPCLI.java
index 3768a48e745e4632d22a755751e137ec40ec6299..6348359e22c736943fbea4844110a9ac0941fa3c 100644
--- a/base/java-tools/src/com/netscape/cmstools/cli/OCSPCLI.java
+++ b/base/java-tools/src/com/netscape/cmstools/cli/OCSPCLI.java
@@ -18,7 +18,8 @@
 
 package com.netscape.cmstools.cli;
 
-import com.netscape.certsrv.client.Client;
+import com.netscape.certsrv.client.PKIClient;
+import com.netscape.certsrv.client.SubsystemClient;
 import com.netscape.certsrv.ocsp.OCSPClient;
 import com.netscape.cmstools.group.GroupCLI;
 import com.netscape.cmstools.selftests.SelfTestCLI;
@@ -39,20 +40,13 @@ public class OCSPCLI extends SubsystemCLI {
         addModule(new UserCLI(this));
     }
 
-    public void init() throws Exception {
-        client = parent.getClient();
+    public SubsystemClient getSubsystemClient() throws Exception {
+
+        if (ocspClient != null) return ocspClient;
+
+        PKIClient client = getClient();
         ocspClient = new OCSPClient(client);
-    }
 
-    public void login() {
-        ocspClient.login();
-    }
-
-    public void logout() {
-        ocspClient.logout();
-    }
-
-    public Client getClient(String name) {
-        return ocspClient.getClient(name);
+        return ocspClient;
     }
 }
diff --git a/base/java-tools/src/com/netscape/cmstools/cli/SubsystemCLI.java b/base/java-tools/src/com/netscape/cmstools/cli/SubsystemCLI.java
index b28271dd74371ae75434ffb7f43919b210caa3ac..0f9a497810fc3f947a50fbcf92ff0b3f4f11f6eb 100644
--- a/base/java-tools/src/com/netscape/cmstools/cli/SubsystemCLI.java
+++ b/base/java-tools/src/com/netscape/cmstools/cli/SubsystemCLI.java
@@ -18,7 +18,9 @@
 
 package com.netscape.cmstools.cli;
 
+import com.netscape.certsrv.client.Client;
 import com.netscape.certsrv.client.ClientConfig;
+import com.netscape.certsrv.client.SubsystemClient;
 
 
 /**
@@ -35,21 +37,29 @@ public class SubsystemCLI extends CLI {
         return name;
     }
 
-    public void init() throws Exception {
+    public SubsystemClient getSubsystemClient() throws Exception {
+        return null;
     }
 
     public void login() throws Exception {
+        SubsystemClient subsystemClient = getSubsystemClient();
+        subsystemClient.login();
     }
 
     public void logout() throws Exception {
+        SubsystemClient subsystemClient = getSubsystemClient();
+        subsystemClient.logout();
+    }
+
+    public Client getClient(String name) throws Exception {
+        SubsystemClient subsystemClient = getSubsystemClient();
+        return subsystemClient.getClient(name);
     }
 
     public void execute(String[] args) throws Exception {
 
-        init();
-
         // login if username or nickname is specified
-        ClientConfig config = getClient().getConfig();
+        ClientConfig config = getConfig();
         if (config.getUsername() != null || config.getCertNickname() != null) {
             login();
         }
@@ -57,6 +67,8 @@ public class SubsystemCLI extends CLI {
         super.execute(args);
 
         // logout if there is no failures
-        logout();
+        if (config.getUsername() != null || config.getCertNickname() != null) {
+            logout();
+        }
     }
 }
diff --git a/base/java-tools/src/com/netscape/cmstools/cli/TKSCLI.java b/base/java-tools/src/com/netscape/cmstools/cli/TKSCLI.java
index dd4f179c262036b286d3f44526f9a4a8fac2211e..1afdf649ff7fcd91cff7ab1dd454107ac1947cd6 100644
--- a/base/java-tools/src/com/netscape/cmstools/cli/TKSCLI.java
+++ b/base/java-tools/src/com/netscape/cmstools/cli/TKSCLI.java
@@ -18,7 +18,8 @@
 
 package com.netscape.cmstools.cli;
 
-import com.netscape.certsrv.client.Client;
+import com.netscape.certsrv.client.PKIClient;
+import com.netscape.certsrv.client.SubsystemClient;
 import com.netscape.certsrv.tks.TKSClient;
 import com.netscape.cmstools.group.GroupCLI;
 import com.netscape.cmstools.selftests.SelfTestCLI;
@@ -41,20 +42,13 @@ public class TKSCLI extends SubsystemCLI {
         addModule(new UserCLI(this));
     }
 
-    public void init() throws Exception {
-        client = parent.getClient();
+    public SubsystemClient getSubsystemClient() throws Exception {
+
+        if (tksClient != null) return tksClient;
+
+        PKIClient client = getClient();
         tksClient = new TKSClient(client);
-    }
 
-    public void login() {
-        tksClient.login();
-    }
-
-    public void logout() {
-        tksClient.logout();
-    }
-
-    public Client getClient(String name) {
-        return tksClient.getClient(name);
+        return tksClient;
     }
 }
diff --git a/base/java-tools/src/com/netscape/cmstools/cli/TPSCLI.java b/base/java-tools/src/com/netscape/cmstools/cli/TPSCLI.java
index 1931b2baa56130122be1ef7d1fd2efa1d54f3b01..95836a45be393543dd4affa7cbd307676f558f07 100644
--- a/base/java-tools/src/com/netscape/cmstools/cli/TPSCLI.java
+++ b/base/java-tools/src/com/netscape/cmstools/cli/TPSCLI.java
@@ -18,7 +18,8 @@
 
 package com.netscape.cmstools.cli;
 
-import com.netscape.certsrv.client.Client;
+import com.netscape.certsrv.client.PKIClient;
+import com.netscape.certsrv.client.SubsystemClient;
 import com.netscape.certsrv.tps.TPSClient;
 import com.netscape.cmstools.group.GroupCLI;
 import com.netscape.cmstools.logging.ActivityCLI;
@@ -64,20 +65,13 @@ public class TPSCLI extends SubsystemCLI {
         }
     }
 
-    public void init() throws Exception {
-        client = parent.getClient();
+    public SubsystemClient getSubsystemClient() throws Exception {
+
+        if (tpsClient != null) return tpsClient;
+
+        PKIClient client = getClient();
         tpsClient = new TPSClient(client);
-    }
 
-    public void login() {
-        tpsClient.login();
-    }
-
-    public void logout() {
-        tpsClient.logout();
-    }
-
-    public Client getClient(String name) {
-        return tpsClient.getClient(name);
+        return tpsClient;
     }
 }
-- 
2.9.3

>From 72b24d62b52b208aee589d767bab71af4624cfeb Mon Sep 17 00:00:00 2001
From: "Endi S. Dewata" <[email protected]>
Date: Thu, 23 Mar 2017 23:33:03 +0100
Subject: [PATCH] Refactored CA CertCLI.

The CA CertCLI and its submodules have been modified to use lazy
initialization to get the PKIClient object.
---
 .../src/com/netscape/cmstools/cert/CertCLI.java    | 23 +++++++++++-----------
 .../com/netscape/cmstools/cert/CertFindCLI.java    |  4 +++-
 .../com/netscape/cmstools/cert/CertHoldCLI.java    |  8 +++++---
 .../netscape/cmstools/cert/CertReleaseHoldCLI.java |  8 +++++---
 .../netscape/cmstools/cert/CertRequestFindCLI.java |  4 +++-
 .../cmstools/cert/CertRequestProfileFindCLI.java   |  4 +++-
 .../cmstools/cert/CertRequestProfileShowCLI.java   |  4 +++-
 .../cmstools/cert/CertRequestReviewCLI.java        | 20 ++++++++++---------
 .../netscape/cmstools/cert/CertRequestShowCLI.java |  4 +++-
 .../cmstools/cert/CertRequestSubmitCLI.java        |  7 +++++--
 .../com/netscape/cmstools/cert/CertRevokeCLI.java  | 10 ++++++----
 .../com/netscape/cmstools/cert/CertShowCLI.java    |  4 +++-
 12 files changed, 61 insertions(+), 39 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 14e4a53d6d604e21f06cdf791e27b0bf34a10955..96870844002f23d61d567c2a5647030317ea9f47 100644
--- a/base/java-tools/src/com/netscape/cmstools/cert/CertCLI.java
+++ b/base/java-tools/src/com/netscape/cmstools/cert/CertCLI.java
@@ -29,6 +29,7 @@ import com.netscape.certsrv.cert.CertDataInfo;
 import com.netscape.certsrv.cert.CertRequestInfo;
 import com.netscape.certsrv.cert.CertRequestInfos;
 import com.netscape.certsrv.cert.CertReviewResponse;
+import com.netscape.certsrv.client.PKIClient;
 import com.netscape.cmstools.cli.CLI;
 import com.netscape.cmstools.cli.MainCLI;
 
@@ -73,22 +74,20 @@ public class CertCLI extends CLI {
         return "pki-cert";
     }
 
-    public void execute(String[] args) throws Exception {
+    public CertClient getCertClient() throws Exception {
 
-        client = parent.getClient();
-        certClient = (CertClient)parent.getClient("cert");
+        if (certClient != null) return certClient;
 
-        // if this is a top-level command
-        if (certClient == null) {
-            // determine the subsystem
-            String subsystem = client.getSubsystem();
-            if (subsystem == null) subsystem = "ca";
+        PKIClient client = getClient();
 
-            // create new cert client
-            certClient = new CertClient(client, subsystem);
-        }
+        // determine the subsystem
+        String subsystem = client.getSubsystem();
+        if (subsystem == null) subsystem = "ca";
 
-        super.execute(args);
+        // create new cert client
+        certClient = new CertClient(client, subsystem);
+
+        return certClient;
     }
 
     public static String getAlgorithmNameFromOID(String oid) {
diff --git a/base/java-tools/src/com/netscape/cmstools/cert/CertFindCLI.java b/base/java-tools/src/com/netscape/cmstools/cert/CertFindCLI.java
index 1a9e4de1f48caa3b7e7675e546ec565c1f23d82c..8320619f2670fb3b8bae787eb0668ea4417f2cc8 100644
--- a/base/java-tools/src/com/netscape/cmstools/cert/CertFindCLI.java
+++ b/base/java-tools/src/com/netscape/cmstools/cert/CertFindCLI.java
@@ -27,6 +27,7 @@ import java.util.Date;
 import org.apache.commons.cli.CommandLine;
 import org.apache.commons.cli.Option;
 
+import com.netscape.certsrv.cert.CertClient;
 import com.netscape.certsrv.cert.CertDataInfo;
 import com.netscape.certsrv.cert.CertDataInfos;
 import com.netscape.certsrv.cert.CertSearchRequest;
@@ -244,7 +245,8 @@ public class CertFindCLI extends CLI {
 
         addSearchAttribute(cmd, searchData);
 
-        CertDataInfos certs = certCLI.certClient.findCerts(searchData, start, size);
+        CertClient certClient = certCLI.getCertClient();
+        CertDataInfos certs = certClient.findCerts(searchData, start, size);
 
         MainCLI.printMessage(certs.getTotal() + " entries found");
         if (certs.getTotal() == 0) return;
diff --git a/base/java-tools/src/com/netscape/cmstools/cert/CertHoldCLI.java b/base/java-tools/src/com/netscape/cmstools/cert/CertHoldCLI.java
index 9c30ee0039d01cf6e5e4dc265032d0e675f1a058..28a2da092197a5c6a185d19c1ad60b754849fd9d 100644
--- a/base/java-tools/src/com/netscape/cmstools/cert/CertHoldCLI.java
+++ b/base/java-tools/src/com/netscape/cmstools/cert/CertHoldCLI.java
@@ -25,6 +25,7 @@ import java.util.Arrays;
 import org.apache.commons.cli.CommandLine;
 import org.apache.commons.cli.Option;
 
+import com.netscape.certsrv.cert.CertClient;
 import com.netscape.certsrv.cert.CertData;
 import com.netscape.certsrv.cert.CertRequestInfo;
 import com.netscape.certsrv.cert.CertRevokeRequest;
@@ -77,7 +78,8 @@ public class CertHoldCLI extends CLI {
         }
 
         CertId certID = new CertId(cmdArgs[0]);
-        CertData certData = certCLI.certClient.reviewCert(certID);
+        CertClient certClient = certCLI.getCertClient();
+        CertData certData = certClient.reviewCert(certID);
 
         if (!cmd.hasOption("force")) {
 
@@ -101,7 +103,7 @@ public class CertHoldCLI extends CLI {
         request.setComments(cmd.getOptionValue("comments"));
         request.setNonce(certData.getNonce());
 
-        CertRequestInfo certRequestInfo = certCLI.certClient.revokeCert(certID, request);
+        CertRequestInfo certRequestInfo = certClient.revokeCert(certID, request);
 
         if (verbose) {
             CertCLI.printCertRequestInfo(certRequestInfo);
@@ -116,7 +118,7 @@ public class CertHoldCLI extends CLI {
                 MainCLI.printMessage("Could not place certificate \"" + certID.toHexString() + "\" on-hold");
             } else {
                 MainCLI.printMessage("Placed certificate \"" + certID.toHexString() + "\" on-hold");
-                certData = certCLI.certClient.getCert(certID);
+                certData = certClient.getCert(certID);
                 CertCLI.printCertData(certData, false, false);
             }
         } else {
diff --git a/base/java-tools/src/com/netscape/cmstools/cert/CertReleaseHoldCLI.java b/base/java-tools/src/com/netscape/cmstools/cert/CertReleaseHoldCLI.java
index a767282551754483f7277b15f9ec1e726a7b51d5..3166d4ce057c8a4dea8ac4b2c21d3a86f66bcb88 100644
--- a/base/java-tools/src/com/netscape/cmstools/cert/CertReleaseHoldCLI.java
+++ b/base/java-tools/src/com/netscape/cmstools/cert/CertReleaseHoldCLI.java
@@ -24,6 +24,7 @@ import java.util.Arrays;
 
 import org.apache.commons.cli.CommandLine;
 
+import com.netscape.certsrv.cert.CertClient;
 import com.netscape.certsrv.cert.CertData;
 import com.netscape.certsrv.cert.CertRequestInfo;
 import com.netscape.certsrv.dbs.certdb.CertId;
@@ -69,10 +70,11 @@ public class CertReleaseHoldCLI extends CLI {
         }
 
         CertId certID = new CertId(cmdArgs[0]);
+        CertClient certClient = certCLI.getCertClient();
 
         if (!cmd.hasOption("force")) {
 
-            CertData certData = certCLI.certClient.getCert(certID);
+            CertData certData = certClient.getCert(certID);
 
             System.out.println("Placing certificate off-hold:");
 
@@ -88,7 +90,7 @@ public class CertReleaseHoldCLI extends CLI {
             }
         }
 
-        CertRequestInfo certRequestInfo = certCLI.certClient.unrevokeCert(certID);
+        CertRequestInfo certRequestInfo = certClient.unrevokeCert(certID);
 
         if (verbose) {
             CertCLI.printCertRequestInfo(certRequestInfo);
@@ -103,7 +105,7 @@ public class CertReleaseHoldCLI extends CLI {
                 MainCLI.printMessage("Could not place certificate \"" + certID.toHexString() + "\" off-hold");
             } else {
                 MainCLI.printMessage("Placed certificate \"" + certID.toHexString() + "\" off-hold");
-                CertData certData = certCLI.certClient.getCert(certID);
+                CertData certData = certClient.getCert(certID);
                 CertCLI.printCertData(certData, false, false);
             }
         } else {
diff --git a/base/java-tools/src/com/netscape/cmstools/cert/CertRequestFindCLI.java b/base/java-tools/src/com/netscape/cmstools/cert/CertRequestFindCLI.java
index 71d669e50591e8885b16ecbc6d697e5bbf2f1cbf..460b1a8d3d7569b8c15de5407853e8ecaddbfa12 100644
--- a/base/java-tools/src/com/netscape/cmstools/cert/CertRequestFindCLI.java
+++ b/base/java-tools/src/com/netscape/cmstools/cert/CertRequestFindCLI.java
@@ -24,6 +24,7 @@ import java.util.Collection;
 import org.apache.commons.cli.CommandLine;
 import org.apache.commons.cli.Option;
 
+import com.netscape.certsrv.cert.CertClient;
 import com.netscape.certsrv.cert.CertRequestInfo;
 import com.netscape.certsrv.cert.CertRequestInfos;
 import com.netscape.certsrv.request.RequestId;
@@ -113,7 +114,8 @@ public class CertRequestFindCLI extends CLI {
         String requestType = cmd.getOptionValue("type");
         if (requestType != null && requestType.equals("all")) requestType = null;
 
-        CertRequestInfos response = certCLI.certClient.listRequests(requestState, requestType, start, size, maxResults, maxTime);
+        CertClient certClient = certCLI.getCertClient();
+        CertRequestInfos response = certClient.listRequests(requestState, requestType, start, size, maxResults, maxTime);
 
         MainCLI.printMessage(response.getTotal() + " entries matched");
         if (response.getTotal() == 0) return;
diff --git a/base/java-tools/src/com/netscape/cmstools/cert/CertRequestProfileFindCLI.java b/base/java-tools/src/com/netscape/cmstools/cert/CertRequestProfileFindCLI.java
index 220ee7c18b17c819f6eade29539c9e1976448783..c9be315ae129695038f11cae15d916d48dfae6aa 100644
--- a/base/java-tools/src/com/netscape/cmstools/cert/CertRequestProfileFindCLI.java
+++ b/base/java-tools/src/com/netscape/cmstools/cert/CertRequestProfileFindCLI.java
@@ -6,6 +6,7 @@ import java.util.Collection;
 import org.apache.commons.cli.CommandLine;
 import org.apache.commons.cli.Option;
 
+import com.netscape.certsrv.cert.CertClient;
 import com.netscape.certsrv.profile.ProfileDataInfo;
 import com.netscape.certsrv.profile.ProfileDataInfos;
 import com.netscape.cmstools.cli.CLI;
@@ -58,7 +59,8 @@ public class CertRequestProfileFindCLI extends CLI {
         s = cmd.getOptionValue("size");
         Integer size = s == null ? null : Integer.valueOf(s);
 
-        ProfileDataInfos response = certCLI.certClient.listEnrollmentTemplates(start, size);
+        CertClient certClient = certCLI.getCertClient();
+        ProfileDataInfos response = certClient.listEnrollmentTemplates(start, size);
 
         MainCLI.printMessage(response.getTotal() + " entries matched");
         if (response.getTotal() == 0) return;
diff --git a/base/java-tools/src/com/netscape/cmstools/cert/CertRequestProfileShowCLI.java b/base/java-tools/src/com/netscape/cmstools/cert/CertRequestProfileShowCLI.java
index cb3a79bfb6f788642f9ae4a2a5db67c853a1fd20..ba33bc1c29ea8f779cff02b2c7341f71a4f58555 100644
--- a/base/java-tools/src/com/netscape/cmstools/cert/CertRequestProfileShowCLI.java
+++ b/base/java-tools/src/com/netscape/cmstools/cert/CertRequestProfileShowCLI.java
@@ -5,6 +5,7 @@ import java.util.Arrays;
 import org.apache.commons.cli.CommandLine;
 import org.apache.commons.cli.Option;
 
+import com.netscape.certsrv.cert.CertClient;
 import com.netscape.certsrv.cert.CertEnrollmentRequest;
 import com.netscape.cmstools.cli.CLI;
 import com.netscape.cmstools.cli.MainCLI;
@@ -57,7 +58,8 @@ public class CertRequestProfileShowCLI extends CLI {
             }
         }
 
-        CertEnrollmentRequest request = certCLI.certClient.getEnrollmentTemplate(profileId);
+        CertClient certClient = certCLI.getCertClient();
+        CertEnrollmentRequest request = certClient.getEnrollmentTemplate(profileId);
 
         MainCLI.printMessage("Enrollment Template for Profile \"" + profileId + "\"");
 
diff --git a/base/java-tools/src/com/netscape/cmstools/cert/CertRequestReviewCLI.java b/base/java-tools/src/com/netscape/cmstools/cert/CertRequestReviewCLI.java
index bc3df309a1e98c876370276a572d122c1f16347c..fcfefa8472c8e4039c6c8d66236559a6a5a1dd5f 100644
--- a/base/java-tools/src/com/netscape/cmstools/cert/CertRequestReviewCLI.java
+++ b/base/java-tools/src/com/netscape/cmstools/cert/CertRequestReviewCLI.java
@@ -15,6 +15,7 @@ import org.apache.commons.cli.CommandLine;
 import org.apache.commons.cli.Option;
 import org.apache.commons.lang.StringUtils;
 
+import com.netscape.certsrv.cert.CertClient;
 import com.netscape.certsrv.cert.CertRequestInfo;
 import com.netscape.certsrv.cert.CertReviewResponse;
 import com.netscape.certsrv.request.RequestId;
@@ -98,7 +99,8 @@ public class CertRequestReviewCLI extends CLI {
         }
 
         // Retrieve certificate request.
-        CertReviewResponse reviewInfo = certCLI.certClient.reviewRequest(requestId);
+        CertClient certClient = certCLI.getCertClient();
+        CertReviewResponse reviewInfo = certClient.reviewRequest(requestId);
 
         if (action == null) {
             // Store certificate request in a file.
@@ -133,38 +135,38 @@ public class CertRequestReviewCLI extends CLI {
         }
 
         if (action.equalsIgnoreCase("approve")) {
-            certCLI.certClient.approveRequest(reviewInfo.getRequestId(), reviewInfo);
+            certClient.approveRequest(reviewInfo.getRequestId(), reviewInfo);
             MainCLI.printMessage("Approved certificate request " + requestId);
 
         } else if (action.equalsIgnoreCase("reject")) {
-            certCLI.certClient.rejectRequest(reviewInfo.getRequestId(), reviewInfo);
+            certClient.rejectRequest(reviewInfo.getRequestId(), reviewInfo);
             MainCLI.printMessage("Rejected certificate request " + requestId);
 
         } else if (action.equalsIgnoreCase("cancel")) {
-            certCLI.certClient.cancelRequest(reviewInfo.getRequestId(), reviewInfo);
+            certClient.cancelRequest(reviewInfo.getRequestId(), reviewInfo);
             MainCLI.printMessage("Canceled certificate request " + requestId);
 
         } else if (action.equalsIgnoreCase("update")) {
-            certCLI.certClient.updateRequest(reviewInfo.getRequestId(), reviewInfo);
+            certClient.updateRequest(reviewInfo.getRequestId(), reviewInfo);
             MainCLI.printMessage("Updated certificate request " + requestId);
 
         } else if (action.equalsIgnoreCase("validate")) {
-            certCLI.certClient.validateRequest(reviewInfo.getRequestId(), reviewInfo);
+            certClient.validateRequest(reviewInfo.getRequestId(), reviewInfo);
             MainCLI.printMessage("Validated certificate request " + requestId);
 
         } else if (action.equalsIgnoreCase("assign")) {
-            certCLI.certClient.assignRequest(reviewInfo.getRequestId(), reviewInfo);
+            certClient.assignRequest(reviewInfo.getRequestId(), reviewInfo);
             MainCLI.printMessage("Assigned certificate request " + requestId);
 
         } else if (action.equalsIgnoreCase("unassign")) {
-            certCLI.certClient.unassignRequest(reviewInfo.getRequestId(), reviewInfo);
+            certClient.unassignRequest(reviewInfo.getRequestId(), reviewInfo);
             MainCLI.printMessage("Unassigned certificate request " + requestId);
 
         } else {
             throw new Exception("Invalid action: " + action);
         }
 
-        CertRequestInfo certRequest = certCLI.certClient.getRequest(requestId);
+        CertRequestInfo certRequest = certClient.getRequest(requestId);
         CertCLI.printCertRequestInfo(certRequest);
     }
 }
diff --git a/base/java-tools/src/com/netscape/cmstools/cert/CertRequestShowCLI.java b/base/java-tools/src/com/netscape/cmstools/cert/CertRequestShowCLI.java
index 6df333eae074243aa0654c85d817549d45557e48..079cf604990f695aa5ccc206346f516ba502b0a2 100644
--- a/base/java-tools/src/com/netscape/cmstools/cert/CertRequestShowCLI.java
+++ b/base/java-tools/src/com/netscape/cmstools/cert/CertRequestShowCLI.java
@@ -4,6 +4,7 @@ import java.util.Arrays;
 
 import org.apache.commons.cli.CommandLine;
 
+import com.netscape.certsrv.cert.CertClient;
 import com.netscape.certsrv.cert.CertRequestInfo;
 import com.netscape.certsrv.request.RequestId;
 import com.netscape.cmstools.cli.CLI;
@@ -47,7 +48,8 @@ public class CertRequestShowCLI extends CLI {
             throw new Exception("Invalid certificate request ID " + cmdArgs[0] + ".", e);
         }
 
-        CertRequestInfo certRequest = certCLI.certClient.getRequest(requestId);
+        CertClient certClient = certCLI.getCertClient();
+        CertRequestInfo certRequest = certClient.getRequest(requestId);
 
         MainCLI.printMessage("Certificate request \"" + requestId + "\"");
         CertCLI.printCertRequestInfo(certRequest);
diff --git a/base/java-tools/src/com/netscape/cmstools/cert/CertRequestSubmitCLI.java b/base/java-tools/src/com/netscape/cmstools/cert/CertRequestSubmitCLI.java
index e49dba2406a07697468855c93b71735849527256..fbccc4ce4855f51acfff7faecf00542db04c6ddb 100644
--- a/base/java-tools/src/com/netscape/cmstools/cert/CertRequestSubmitCLI.java
+++ b/base/java-tools/src/com/netscape/cmstools/cert/CertRequestSubmitCLI.java
@@ -14,6 +14,7 @@ import org.apache.commons.cli.CommandLine;
 import org.apache.commons.cli.Option;
 
 import com.netscape.certsrv.ca.AuthorityID;
+import com.netscape.certsrv.cert.CertClient;
 import com.netscape.certsrv.cert.CertEnrollmentRequest;
 import com.netscape.certsrv.cert.CertRequestInfos;
 import com.netscape.certsrv.dbs.certdb.CertId;
@@ -133,7 +134,8 @@ public class CertRequestSubmitCLI extends CLI {
                 System.out.println("Retrieving " + profileID + " profile.");
             }
 
-            request = certCLI.certClient.getEnrollmentTemplate(profileID);
+            CertClient certClient = certCLI.getCertClient();
+            request = certClient.getEnrollmentTemplate(profileID);
 
             // set default request type for new request
             if (requestType == null) requestType = "pkcs10";
@@ -258,7 +260,8 @@ public class CertRequestSubmitCLI extends CLI {
             System.out.println(request);
         }
 
-        CertRequestInfos cri = certCLI.certClient.enrollRequest(request, aid, adn);
+        CertClient certClient = certCLI.getCertClient();
+        CertRequestInfos cri = certClient.enrollRequest(request, aid, adn);
         MainCLI.printMessage("Submitted certificate request");
         CertCLI.printCertRequestInfos(cri);
     }
diff --git a/base/java-tools/src/com/netscape/cmstools/cert/CertRevokeCLI.java b/base/java-tools/src/com/netscape/cmstools/cert/CertRevokeCLI.java
index e61401b903a765e6dbec2da9e8776ef85403e591..ecc3f801a8492285180896056430a70b36a3f9b2 100644
--- a/base/java-tools/src/com/netscape/cmstools/cert/CertRevokeCLI.java
+++ b/base/java-tools/src/com/netscape/cmstools/cert/CertRevokeCLI.java
@@ -25,6 +25,7 @@ import java.util.Arrays;
 import org.apache.commons.cli.CommandLine;
 import org.apache.commons.cli.Option;
 
+import com.netscape.certsrv.cert.CertClient;
 import com.netscape.certsrv.cert.CertData;
 import com.netscape.certsrv.cert.CertRequestInfo;
 import com.netscape.certsrv.cert.CertRevokeRequest;
@@ -102,7 +103,8 @@ public class CertRevokeCLI extends CLI {
             throw new Exception("Invalid revocation reason: " + string);
         }
 
-        CertData certData = certCLI.certClient.reviewCert(certID);
+        CertClient certClient = certCLI.getCertClient();
+        CertData certData = certClient.reviewCert(certID);
 
         if (!cmd.hasOption("force")) {
 
@@ -135,9 +137,9 @@ public class CertRevokeCLI extends CLI {
         CertRequestInfo certRequestInfo;
 
         if (cmd.hasOption("ca")) {
-            certRequestInfo = certCLI.certClient.revokeCACert(certID, request);
+            certRequestInfo = certClient.revokeCACert(certID, request);
         } else {
-            certRequestInfo = certCLI.certClient.revokeCert(certID, request);
+            certRequestInfo = certClient.revokeCert(certID, request);
         }
 
         if (verbose) {
@@ -160,7 +162,7 @@ public class CertRevokeCLI extends CLI {
                     MainCLI.printMessage("Revoked certificate \"" + certID.toHexString() + "\"");
                 }
 
-                certData = certCLI.certClient.getCert(certID);
+                certData = certClient.getCert(certID);
                 CertCLI.printCertData(certData, false, false);
             }
         } else {
diff --git a/base/java-tools/src/com/netscape/cmstools/cert/CertShowCLI.java b/base/java-tools/src/com/netscape/cmstools/cert/CertShowCLI.java
index a31b02253fa41176ff64b1c950e532576a94d277..cf3802705dbdc06a4af98c65bd652236d64fc62c 100644
--- a/base/java-tools/src/com/netscape/cmstools/cert/CertShowCLI.java
+++ b/base/java-tools/src/com/netscape/cmstools/cert/CertShowCLI.java
@@ -25,6 +25,7 @@ import java.util.Arrays;
 import org.apache.commons.cli.CommandLine;
 import org.apache.commons.cli.Option;
 
+import com.netscape.certsrv.cert.CertClient;
 import com.netscape.certsrv.cert.CertData;
 import com.netscape.certsrv.dbs.certdb.CertId;
 import com.netscape.cmstools.cli.CLI;
@@ -78,7 +79,8 @@ public class CertShowCLI extends CLI {
         CertId certID = new CertId(cmdArgs[0]);
         String file = cmd.getOptionValue("output");
 
-        CertData certData = certCLI.certClient.getCert(certID);
+        CertClient certClient = certCLI.getCertClient();
+        CertData certData = certClient.getCert(certID);
 
         String encoded = certData.getEncoded();
         if (encoded != null && file != null) {
-- 
2.9.3

>From cf8fe50d9822708411ca77c13c150f876835e790 Mon Sep 17 00:00:00 2001
From: "Endi S. Dewata" <[email protected]>
Date: Fri, 24 Mar 2017 00:24:48 +0100
Subject: [PATCH] Refactored GroupCLI.

The CertCLI and its submodules have been modified to use lazy
initialization to get the PKIClient object.
---
 .../com/netscape/cmstools/group/GroupAddCLI.java   |  4 +++-
 .../src/com/netscape/cmstools/group/GroupCLI.java  | 23 +++++++++++-----------
 .../com/netscape/cmstools/group/GroupFindCLI.java  |  4 +++-
 .../netscape/cmstools/group/GroupMemberAddCLI.java |  4 +++-
 .../netscape/cmstools/group/GroupMemberCLI.java    | 12 +++++------
 .../cmstools/group/GroupMemberFindCLI.java         |  4 +++-
 .../cmstools/group/GroupMemberRemoveCLI.java       |  4 +++-
 .../cmstools/group/GroupMemberShowCLI.java         |  4 +++-
 .../netscape/cmstools/group/GroupModifyCLI.java    |  4 +++-
 .../netscape/cmstools/group/GroupRemoveCLI.java    |  4 +++-
 .../com/netscape/cmstools/group/GroupShowCLI.java  |  4 +++-
 11 files changed, 43 insertions(+), 28 deletions(-)

diff --git a/base/java-tools/src/com/netscape/cmstools/group/GroupAddCLI.java b/base/java-tools/src/com/netscape/cmstools/group/GroupAddCLI.java
index 0ae506f3f1ee6f12e015bac58bfe871cd91e80ea..5a9da56684eb7b8ef9e8f92fae5672b8cafd6a7b 100644
--- a/base/java-tools/src/com/netscape/cmstools/group/GroupAddCLI.java
+++ b/base/java-tools/src/com/netscape/cmstools/group/GroupAddCLI.java
@@ -23,6 +23,7 @@ import java.util.Arrays;
 import org.apache.commons.cli.CommandLine;
 import org.apache.commons.cli.Option;
 
+import com.netscape.certsrv.group.GroupClient;
 import com.netscape.certsrv.group.GroupData;
 import com.netscape.cmstools.cli.CLI;
 import com.netscape.cmstools.cli.MainCLI;
@@ -72,7 +73,8 @@ public class GroupAddCLI extends CLI {
         groupData.setGroupID(groupID);
         groupData.setDescription(cmd.getOptionValue("description"));
 
-        groupData = groupCLI.groupClient.addGroup(groupData);
+        GroupClient groupClient = groupCLI.getGroupClient();
+        groupData = groupClient.addGroup(groupData);
 
         MainCLI.printMessage("Added group \""+groupID+"\"");
 
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 ca151301ed4031aaf7d2e9e3580a44c71720a058..bd4651d9ee8b46382831bb71ee44446c6b35d1cb 100644
--- a/base/java-tools/src/com/netscape/cmstools/group/GroupCLI.java
+++ b/base/java-tools/src/com/netscape/cmstools/group/GroupCLI.java
@@ -21,6 +21,7 @@ package com.netscape.cmstools.group;
 import org.apache.commons.lang.StringUtils;
 import org.jboss.resteasy.plugins.providers.atom.Link;
 
+import com.netscape.certsrv.client.PKIClient;
 import com.netscape.certsrv.group.GroupClient;
 import com.netscape.certsrv.group.GroupData;
 import com.netscape.cmstools.cli.CLI;
@@ -59,22 +60,20 @@ public class GroupCLI extends CLI {
         return "pki-group";
     }
 
-    public void execute(String[] args) throws Exception {
+    public GroupClient getGroupClient() throws Exception {
 
-        client = parent.getClient();
-        groupClient = (GroupClient)parent.getClient("group");
+        if (groupClient != null) return groupClient;
 
-        // if this is a top-level command
-        if (groupClient == null) {
-            // determine the subsystem
-            String subsystem = client.getSubsystem();
-            if (subsystem == null) subsystem = "ca";
+        PKIClient client = getClient();
 
-            // create new group client
-            groupClient = new GroupClient(client, subsystem);
-        }
+        // determine the subsystem
+        String subsystem = client.getSubsystem();
+        if (subsystem == null) subsystem = "ca";
 
-        super.execute(args);
+        // create new group client
+        groupClient = new GroupClient(client, subsystem);
+
+        return groupClient;
     }
 
     public static void printGroup(GroupData groupData) {
diff --git a/base/java-tools/src/com/netscape/cmstools/group/GroupFindCLI.java b/base/java-tools/src/com/netscape/cmstools/group/GroupFindCLI.java
index dda3dacbc51fc3639eacaae3e0289a0b374a392d..1ff577f0b6b14eb9fd18a9af2e1726b8935a9792 100644
--- a/base/java-tools/src/com/netscape/cmstools/group/GroupFindCLI.java
+++ b/base/java-tools/src/com/netscape/cmstools/group/GroupFindCLI.java
@@ -24,6 +24,7 @@ import java.util.Collection;
 import org.apache.commons.cli.CommandLine;
 import org.apache.commons.cli.Option;
 
+import com.netscape.certsrv.group.GroupClient;
 import com.netscape.certsrv.group.GroupCollection;
 import com.netscape.certsrv.group.GroupData;
 import com.netscape.cmstools.cli.CLI;
@@ -75,7 +76,8 @@ public class GroupFindCLI extends CLI {
         s = cmd.getOptionValue("size");
         Integer size = s == null ? null : Integer.valueOf(s);
 
-        GroupCollection response = groupCLI.groupClient.findGroups(filter, start, size);
+        GroupClient groupClient = groupCLI.getGroupClient();
+        GroupCollection response = groupClient.findGroups(filter, start, size);
 
         MainCLI.printMessage(response.getTotal() + " entries matched");
         if (response.getTotal() == 0) return;
diff --git a/base/java-tools/src/com/netscape/cmstools/group/GroupMemberAddCLI.java b/base/java-tools/src/com/netscape/cmstools/group/GroupMemberAddCLI.java
index cc00417733dbbdbb4330962c66c6509119182f4e..eab9e232ef8daa5017f3d7a48b670383d9ab2a7b 100644
--- a/base/java-tools/src/com/netscape/cmstools/group/GroupMemberAddCLI.java
+++ b/base/java-tools/src/com/netscape/cmstools/group/GroupMemberAddCLI.java
@@ -22,6 +22,7 @@ import java.util.Arrays;
 
 import org.apache.commons.cli.CommandLine;
 
+import com.netscape.certsrv.group.GroupClient;
 import com.netscape.certsrv.group.GroupMemberData;
 import com.netscape.cmstools.cli.CLI;
 import com.netscape.cmstools.cli.MainCLI;
@@ -60,7 +61,8 @@ public class GroupMemberAddCLI extends CLI {
         String groupID = cmdArgs[0];
         String memberID = cmdArgs[1];
 
-        GroupMemberData groupMemberData = groupMemberCLI.groupClient.addGroupMember(groupID, memberID);
+        GroupClient groupClient = groupMemberCLI.getGroupClient();
+        GroupMemberData groupMemberData = groupClient.addGroupMember(groupID, memberID);
 
         MainCLI.printMessage("Added group member \""+memberID+"\"");
 
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 1df404bc553dd4024d44e62822f6a580075f0cdf..527c37290e6957aad87d12cb797cc6e7c6f5028e 100644
--- a/base/java-tools/src/com/netscape/cmstools/group/GroupMemberCLI.java
+++ b/base/java-tools/src/com/netscape/cmstools/group/GroupMemberCLI.java
@@ -29,11 +29,13 @@ import com.netscape.cmstools.cli.CLI;
  */
 public class GroupMemberCLI extends CLI {
 
-    public GroupClient groupClient;
+    GroupCLI parent;
 
     public GroupMemberCLI(GroupCLI parent) {
         super("member", "Group member management commands", parent);
 
+        this.parent = parent;
+
         addModule(new GroupMemberFindCLI(this));
         addModule(new GroupMemberShowCLI(this));
         addModule(new GroupMemberAddCLI(this));
@@ -45,12 +47,8 @@ public class GroupMemberCLI extends CLI {
         return "pki-group-member";
     }
 
-    public void execute(String[] args) throws Exception {
-
-        client = parent.getClient();
-        groupClient = ((GroupCLI)parent).groupClient;
-
-        super.execute(args);
+    public GroupClient getGroupClient() throws Exception {
+        return parent.getGroupClient();
     }
 
     public static void printGroupMember(GroupMemberData groupMemberData) {
diff --git a/base/java-tools/src/com/netscape/cmstools/group/GroupMemberFindCLI.java b/base/java-tools/src/com/netscape/cmstools/group/GroupMemberFindCLI.java
index 788827abf83961b02896440070677e56f2078410..d4f3a4b2711257ddfef99b1e05f1c9455a31d121 100644
--- a/base/java-tools/src/com/netscape/cmstools/group/GroupMemberFindCLI.java
+++ b/base/java-tools/src/com/netscape/cmstools/group/GroupMemberFindCLI.java
@@ -24,6 +24,7 @@ import java.util.Collection;
 import org.apache.commons.cli.CommandLine;
 import org.apache.commons.cli.Option;
 
+import com.netscape.certsrv.group.GroupClient;
 import com.netscape.certsrv.group.GroupMemberCollection;
 import com.netscape.certsrv.group.GroupMemberData;
 import com.netscape.cmstools.cli.CLI;
@@ -81,7 +82,8 @@ public class GroupMemberFindCLI extends CLI {
         s = cmd.getOptionValue("size");
         Integer size = s == null ? null : Integer.valueOf(s);
 
-        GroupMemberCollection response = groupMemberCLI.groupClient.findGroupMembers(groupID, filter, start, size);
+        GroupClient groupClient = groupMemberCLI.getGroupClient();
+        GroupMemberCollection response = groupClient.findGroupMembers(groupID, filter, start, size);
 
         MainCLI.printMessage(response.getTotal() + " entries matched");
         if (response.getTotal() == 0) return;
diff --git a/base/java-tools/src/com/netscape/cmstools/group/GroupMemberRemoveCLI.java b/base/java-tools/src/com/netscape/cmstools/group/GroupMemberRemoveCLI.java
index 89cb668559620e4abed795363005729d2301f38a..b737d059c8bbbc19f05e1605972767283af9c122 100644
--- a/base/java-tools/src/com/netscape/cmstools/group/GroupMemberRemoveCLI.java
+++ b/base/java-tools/src/com/netscape/cmstools/group/GroupMemberRemoveCLI.java
@@ -22,6 +22,7 @@ import java.util.Arrays;
 
 import org.apache.commons.cli.CommandLine;
 
+import com.netscape.certsrv.group.GroupClient;
 import com.netscape.cmstools.cli.CLI;
 import com.netscape.cmstools.cli.MainCLI;
 
@@ -59,7 +60,8 @@ public class GroupMemberRemoveCLI extends CLI {
         String groupID = cmdArgs[0];
         String memberID = cmdArgs[1];
 
-        groupMemberCLI.groupClient.removeGroupMember(groupID, memberID);
+        GroupClient groupClient = groupMemberCLI.getGroupClient();
+        groupClient.removeGroupMember(groupID, memberID);
 
         MainCLI.printMessage("Deleted group member \""+memberID+"\"");
     }
diff --git a/base/java-tools/src/com/netscape/cmstools/group/GroupMemberShowCLI.java b/base/java-tools/src/com/netscape/cmstools/group/GroupMemberShowCLI.java
index a0e9f22310784c8b6be3d8ba5a36bee36764b82d..9579de3793c6883d150f116f8b51df16f65d0cbc 100644
--- a/base/java-tools/src/com/netscape/cmstools/group/GroupMemberShowCLI.java
+++ b/base/java-tools/src/com/netscape/cmstools/group/GroupMemberShowCLI.java
@@ -22,6 +22,7 @@ import java.util.Arrays;
 
 import org.apache.commons.cli.CommandLine;
 
+import com.netscape.certsrv.group.GroupClient;
 import com.netscape.certsrv.group.GroupMemberData;
 import com.netscape.cmstools.cli.CLI;
 import com.netscape.cmstools.cli.MainCLI;
@@ -60,7 +61,8 @@ public class GroupMemberShowCLI extends CLI {
         String groupID = cmdArgs[0];
         String memberID = cmdArgs[1];
 
-        GroupMemberData groupMemberData = groupMemberCLI.groupClient.getGroupMember(groupID, memberID);
+        GroupClient groupClient = groupMemberCLI.getGroupClient();
+        GroupMemberData groupMemberData = groupClient.getGroupMember(groupID, memberID);
 
         MainCLI.printMessage("Group member \""+memberID+"\"");
 
diff --git a/base/java-tools/src/com/netscape/cmstools/group/GroupModifyCLI.java b/base/java-tools/src/com/netscape/cmstools/group/GroupModifyCLI.java
index f3dd2f951302d5a16a7601c311551e4d352ce794..d4d81c5797ceed32bc5a9cbc7424baf1689b29a7 100644
--- a/base/java-tools/src/com/netscape/cmstools/group/GroupModifyCLI.java
+++ b/base/java-tools/src/com/netscape/cmstools/group/GroupModifyCLI.java
@@ -23,6 +23,7 @@ import java.util.Arrays;
 import org.apache.commons.cli.CommandLine;
 import org.apache.commons.cli.Option;
 
+import com.netscape.certsrv.group.GroupClient;
 import com.netscape.certsrv.group.GroupData;
 import com.netscape.cmstools.cli.CLI;
 import com.netscape.cmstools.cli.MainCLI;
@@ -72,7 +73,8 @@ public class GroupModifyCLI extends CLI {
         groupData.setID(groupID);
         groupData.setDescription(cmd.getOptionValue("description"));
 
-        groupData = groupCLI.groupClient.modifyGroup(groupID, groupData);
+        GroupClient groupClient = groupCLI.getGroupClient();
+        groupData = groupClient.modifyGroup(groupID, groupData);
 
         MainCLI.printMessage("Modified group \""+groupID+"\"");
 
diff --git a/base/java-tools/src/com/netscape/cmstools/group/GroupRemoveCLI.java b/base/java-tools/src/com/netscape/cmstools/group/GroupRemoveCLI.java
index 68a17483e87217b70d4d152f0f027fb7d9263af3..be6565491dbd8a0885ca5a5908e34eae0340df94 100644
--- a/base/java-tools/src/com/netscape/cmstools/group/GroupRemoveCLI.java
+++ b/base/java-tools/src/com/netscape/cmstools/group/GroupRemoveCLI.java
@@ -22,6 +22,7 @@ import java.util.Arrays;
 
 import org.apache.commons.cli.CommandLine;
 
+import com.netscape.certsrv.group.GroupClient;
 import com.netscape.cmstools.cli.CLI;
 import com.netscape.cmstools.cli.MainCLI;
 
@@ -59,7 +60,8 @@ public class GroupRemoveCLI extends CLI {
 
         String groupID = cmdArgs[0];
 
-        groupCLI.groupClient.removeGroup(groupID);
+        GroupClient groupClient = groupCLI.getGroupClient();
+        groupClient.removeGroup(groupID);
 
         MainCLI.printMessage("Deleted group \""+groupID+"\"");
     }
diff --git a/base/java-tools/src/com/netscape/cmstools/group/GroupShowCLI.java b/base/java-tools/src/com/netscape/cmstools/group/GroupShowCLI.java
index 39cc66b03b1d7ac2816893fb8d94ee268034982b..6f096af532515cbe37f69c8fd1226ca63dd13046 100644
--- a/base/java-tools/src/com/netscape/cmstools/group/GroupShowCLI.java
+++ b/base/java-tools/src/com/netscape/cmstools/group/GroupShowCLI.java
@@ -22,6 +22,7 @@ import java.util.Arrays;
 
 import org.apache.commons.cli.CommandLine;
 
+import com.netscape.certsrv.group.GroupClient;
 import com.netscape.certsrv.group.GroupData;
 import com.netscape.cmstools.cli.CLI;
 import com.netscape.cmstools.cli.MainCLI;
@@ -59,7 +60,8 @@ public class GroupShowCLI extends CLI {
 
         String groupID = cmdArgs[0];
 
-        GroupData groupData = groupCLI.groupClient.getGroup(groupID);
+        GroupClient groupClient = groupCLI.getGroupClient();
+        GroupData groupData = groupClient.getGroup(groupID);
 
         MainCLI.printMessage("Group \""+groupID+"\"");
 
-- 
2.9.3

>From b855b7c5056903650c572ef1d862eedcae6d231a Mon Sep 17 00:00:00 2001
From: "Endi S. Dewata" <[email protected]>
Date: Fri, 24 Mar 2017 01:02:16 +0100
Subject: [PATCH] Refactored KRA KeyCLI.

The KRA KeyCLI and its submodules have been modified to use lazy
initialization to get the PKIClient object.
---
 .../src/com/netscape/cmstools/key/KeyArchiveCLI.java |  8 +++++---
 .../src/com/netscape/cmstools/key/KeyCLI.java        | 12 ++++++++----
 .../src/com/netscape/cmstools/key/KeyFindCLI.java    |  4 +++-
 .../com/netscape/cmstools/key/KeyGenerateCLI.java    |  7 +++++--
 .../src/com/netscape/cmstools/key/KeyModifyCLI.java  |  6 ++++--
 .../src/com/netscape/cmstools/key/KeyRecoverCLI.java |  6 ++++--
 .../com/netscape/cmstools/key/KeyRequestFindCLI.java |  4 +++-
 .../netscape/cmstools/key/KeyRequestReviewCLI.java   | 10 ++++++----
 .../com/netscape/cmstools/key/KeyRequestShowCLI.java |  4 +++-
 .../com/netscape/cmstools/key/KeyRetrieveCLI.java    | 20 +++++++++++---------
 .../src/com/netscape/cmstools/key/KeyShowCLI.java    |  6 ++++--
 11 files changed, 56 insertions(+), 31 deletions(-)

diff --git a/base/java-tools/src/com/netscape/cmstools/key/KeyArchiveCLI.java b/base/java-tools/src/com/netscape/cmstools/key/KeyArchiveCLI.java
index c3116a673bba7c57ec9a04881b3a9fb5fc48899f..6789957c333edeab5d7bd071e9a36c23ed3678cb 100644
--- a/base/java-tools/src/com/netscape/cmstools/key/KeyArchiveCLI.java
+++ b/base/java-tools/src/com/netscape/cmstools/key/KeyArchiveCLI.java
@@ -12,6 +12,7 @@ import org.apache.commons.cli.CommandLine;
 import org.apache.commons.cli.Option;
 
 import com.netscape.certsrv.key.KeyArchivalRequest;
+import com.netscape.certsrv.key.KeyClient;
 import com.netscape.certsrv.key.KeyRequestResponse;
 import com.netscape.cmstools.cli.CLI;
 import com.netscape.cmstools.cli.MainCLI;
@@ -68,6 +69,7 @@ public class KeyArchiveCLI extends CLI {
         String requestFile = cmd.getOptionValue("input");
 
         KeyRequestResponse response = null;
+        KeyClient keyClient = keyCLI.getKeyClient();
 
         if (requestFile != null) {
             // Case where the request template file is used. For pre-encrypted data.
@@ -78,11 +80,11 @@ public class KeyArchiveCLI extends CLI {
                 KeyArchivalRequest req = (KeyArchivalRequest) unmarshaller.unmarshal(fis);
 
                 if (req.getPKIArchiveOptions() != null) {
-                    response = keyCLI.keyClient.archivePKIOptions(req.getClientKeyId(), req.getDataType(),
+                    response = keyClient.archivePKIOptions(req.getClientKeyId(), req.getDataType(),
                             req.getKeyAlgorithm(), req.getKeySize(), Utils.base64decode(req.getPKIArchiveOptions()),
                             req.getRealm());
                 } else {
-                    response = keyCLI.keyClient.archiveEncryptedData(req.getClientKeyId(), req.getDataType(),
+                    response = keyClient.archiveEncryptedData(req.getClientKeyId(), req.getDataType(),
                             req.getKeyAlgorithm(), req.getKeySize(), req.getAlgorithmOID(),
                             Utils.base64decode(req.getSymmetricAlgorithmParams()),
                             Utils.base64decode(req.getWrappedPrivateData()),
@@ -109,7 +111,7 @@ public class KeyArchiveCLI extends CLI {
             }
             String realm = cmd.getOptionValue("realm");
 
-            response = keyCLI.keyClient.archivePassphrase(clientKeyId, passphrase, realm);
+            response = keyClient.archivePassphrase(clientKeyId, passphrase, realm);
         }
 
         MainCLI.printMessage("Archival request details");
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 d2b425b9fbe0e9616b579dc2f8490ce13d55b82c..b9b27d1132fbff0ed50c22a147ee09513ab66db9 100644
--- a/base/java-tools/src/com/netscape/cmstools/key/KeyCLI.java
+++ b/base/java-tools/src/com/netscape/cmstools/key/KeyCLI.java
@@ -19,6 +19,7 @@
 package com.netscape.cmstools.key;
 
 import com.netscape.certsrv.cert.CertData;
+import com.netscape.certsrv.client.PKIClient;
 import com.netscape.certsrv.key.KeyClient;
 import com.netscape.certsrv.key.KeyInfo;
 import com.netscape.certsrv.key.KeyRequestInfo;
@@ -70,9 +71,11 @@ public class KeyCLI extends CLI {
         return "pki-key";
     }
 
-    public void execute(String[] args) throws Exception {
+    public KeyClient getKeyClient() throws Exception {
 
-        client = parent.getClient();
+        if (keyClient != null) return keyClient;
+
+        PKIClient client = getClient();
 
         // determine the subsystem
         String subsystem = client.getSubsystem();
@@ -81,15 +84,16 @@ public class KeyCLI extends CLI {
 
         // create new key client
         keyClient = new KeyClient(client, subsystem);
+        systemCertClient = new SystemCertClient(client, subsystem);
 
         // if security database password is specified,
         // prepare key client for archival/retrieval
         if (client.getConfig().getCertPassword() != null) {
+
             // create crypto provider for key client
             keyClient.setCrypto(new NSSCryptoProvider(client.getConfig()));
 
             // download transport cert
-            systemCertClient = new SystemCertClient(client, subsystem);
             String transportCert = systemCertClient.getTransportCert().getEncoded();
             transportCert = transportCert.substring(CertData.HEADER.length(),
                     transportCert.indexOf(CertData.FOOTER));
@@ -98,7 +102,7 @@ public class KeyCLI extends CLI {
             keyClient.setTransportCert(transportCert);
         }
 
-        super.execute(args);
+        return keyClient;
     }
 
     public static void printKeyInfo(KeyInfo info) {
diff --git a/base/java-tools/src/com/netscape/cmstools/key/KeyFindCLI.java b/base/java-tools/src/com/netscape/cmstools/key/KeyFindCLI.java
index 87d6b2f98f658634f204eb14fd230b235908df8b..2e41d98f8dd983d0a3ce7a532b2afd8a3c42400c 100644
--- a/base/java-tools/src/com/netscape/cmstools/key/KeyFindCLI.java
+++ b/base/java-tools/src/com/netscape/cmstools/key/KeyFindCLI.java
@@ -24,6 +24,7 @@ import java.util.Collection;
 import org.apache.commons.cli.CommandLine;
 import org.apache.commons.cli.Option;
 
+import com.netscape.certsrv.key.KeyClient;
 import com.netscape.certsrv.key.KeyInfo;
 import com.netscape.certsrv.key.KeyInfoCollection;
 import com.netscape.cmstools.cli.CLI;
@@ -108,7 +109,8 @@ public class KeyFindCLI extends CLI {
         s = cmd.getOptionValue("size");
         Integer size = s == null ? null : Integer.valueOf(s);
 
-        KeyInfoCollection keys = keyCLI.keyClient.listKeys(clientKeyID, status, maxResults, maxTime, start, size, realm);
+        KeyClient keyClient = keyCLI.getKeyClient();
+        KeyInfoCollection keys = keyClient.listKeys(clientKeyID, status, maxResults, maxTime, start, size, realm);
 
         Collection<KeyInfo> entries = keys.getEntries();
 
diff --git a/base/java-tools/src/com/netscape/cmstools/key/KeyGenerateCLI.java b/base/java-tools/src/com/netscape/cmstools/key/KeyGenerateCLI.java
index 312fbf0780df56787fe4f79a8de732c65448cb2d..fb7b919a3c576e175553860df05d657fe7c86e64 100644
--- a/base/java-tools/src/com/netscape/cmstools/key/KeyGenerateCLI.java
+++ b/base/java-tools/src/com/netscape/cmstools/key/KeyGenerateCLI.java
@@ -6,6 +6,7 @@ import java.util.List;
 import org.apache.commons.cli.CommandLine;
 import org.apache.commons.cli.Option;
 
+import com.netscape.certsrv.key.KeyClient;
 import com.netscape.certsrv.key.KeyRequestResource;
 import com.netscape.certsrv.key.KeyRequestResponse;
 import com.netscape.cmstools.cli.CLI;
@@ -109,6 +110,8 @@ public class KeyGenerateCLI extends CLI {
             usages = Arrays.asList(givenUsages.split(","));
         }
 
+        KeyClient keyClient = keyCLI.getKeyClient();
+
         KeyRequestResponse response = null;
         switch (keyAlgorithm) {
         case KeyRequestResource.DES3_ALGORITHM:
@@ -117,12 +120,12 @@ public class KeyGenerateCLI extends CLI {
         case KeyRequestResource.RC4_ALGORITHM:
         case KeyRequestResource.AES_ALGORITHM:
         case KeyRequestResource.RC2_ALGORITHM:
-            response = keyCLI.keyClient.generateSymmetricKey(
+            response = keyClient.generateSymmetricKey(
                     clientKeyId, keyAlgorithm, size, usages, null, realm);
             break;
         case KeyRequestResource.RSA_ALGORITHM:
         case KeyRequestResource.DSA_ALGORITHM:
-            response = keyCLI.keyClient.generateAsymmetricKey(
+            response = keyClient.generateAsymmetricKey(
                     clientKeyId, keyAlgorithm, size, usages, null, realm);
             break;
         default:
diff --git a/base/java-tools/src/com/netscape/cmstools/key/KeyModifyCLI.java b/base/java-tools/src/com/netscape/cmstools/key/KeyModifyCLI.java
index 1778fef479b251d156fb0c33ff3c6c70ea5f2daf..52bf173d5f4866bb83bcbf79f3c6cdeff01b8959 100644
--- a/base/java-tools/src/com/netscape/cmstools/key/KeyModifyCLI.java
+++ b/base/java-tools/src/com/netscape/cmstools/key/KeyModifyCLI.java
@@ -24,6 +24,7 @@ import org.apache.commons.cli.CommandLine;
 import org.apache.commons.cli.Option;
 
 import com.netscape.certsrv.dbs.keydb.KeyId;
+import com.netscape.certsrv.key.KeyClient;
 import com.netscape.certsrv.key.KeyInfo;
 import com.netscape.cmstools.cli.CLI;
 
@@ -67,9 +68,10 @@ public class KeyModifyCLI extends CLI {
 
         KeyId keyId = new KeyId(cmdArgs[0]);
 
-        keyCLI.keyClient.modifyKeyStatus(keyId, status);
+        KeyClient keyClient = keyCLI.getKeyClient();
+        keyClient.modifyKeyStatus(keyId, status);
 
-        KeyInfo keyInfo = keyCLI.keyClient.getKeyInfo(keyId);
+        KeyInfo keyInfo = keyClient.getKeyInfo(keyId);
         KeyCLI.printKeyInfo(keyInfo);
     }
 }
diff --git a/base/java-tools/src/com/netscape/cmstools/key/KeyRecoverCLI.java b/base/java-tools/src/com/netscape/cmstools/key/KeyRecoverCLI.java
index 0bb2a2d3e50c354b11d9c9534ea4d457ab1649a0..4f4929a581e660075295abcb92ff2ac4c7339e23 100644
--- a/base/java-tools/src/com/netscape/cmstools/key/KeyRecoverCLI.java
+++ b/base/java-tools/src/com/netscape/cmstools/key/KeyRecoverCLI.java
@@ -12,6 +12,7 @@ import org.apache.commons.cli.CommandLine;
 import org.apache.commons.cli.Option;
 
 import com.netscape.certsrv.dbs.keydb.KeyId;
+import com.netscape.certsrv.key.KeyClient;
 import com.netscape.certsrv.key.KeyRecoveryRequest;
 import com.netscape.certsrv.key.KeyRequestResponse;
 import com.netscape.cmstools.cli.CLI;
@@ -61,6 +62,7 @@ public class KeyRecoverCLI extends CLI {
         String keyID = cmd.getOptionValue("keyID");
 
         KeyRequestResponse response = null;
+        KeyClient keyClient = keyCLI.getKeyClient();
 
         if (requestFile != null) {
             try {
@@ -68,7 +70,7 @@ public class KeyRecoverCLI extends CLI {
                 Unmarshaller unmarshaller = context.createUnmarshaller();
                 FileInputStream fis = new FileInputStream(requestFile);
                 KeyRecoveryRequest req = (KeyRecoveryRequest) unmarshaller.unmarshal(fis);
-                response = keyCLI.keyClient.recoverKey(req.getKeyId(),
+                response = keyClient.recoverKey(req.getKeyId(),
                         Utils.base64decode(req.getSessionWrappedPassphrase()),
                         Utils.base64decode(req.getTransWrappedSessionKey()), Utils.base64decode(req.getNonceData()),
                         req.getCertificate());
@@ -80,7 +82,7 @@ public class KeyRecoverCLI extends CLI {
 
         } else if (keyID != null) {
             String keyId = cmd.getOptionValue("keyID");
-            response = keyCLI.keyClient.recoverKey(new KeyId(keyId), null, null, null, null);
+            response = keyClient.recoverKey(new KeyId(keyId), null, null, null, null);
         } else {
             throw new Exception("Neither a key ID nor a request file's path is specified.");
         }
diff --git a/base/java-tools/src/com/netscape/cmstools/key/KeyRequestFindCLI.java b/base/java-tools/src/com/netscape/cmstools/key/KeyRequestFindCLI.java
index 69730f9b30e3c2131a1ac29f2b852fd4a0c2e1f6..75f08f161940eaebdadf0b224e53ff191ae1836c 100644
--- a/base/java-tools/src/com/netscape/cmstools/key/KeyRequestFindCLI.java
+++ b/base/java-tools/src/com/netscape/cmstools/key/KeyRequestFindCLI.java
@@ -24,6 +24,7 @@ import java.util.Collection;
 import org.apache.commons.cli.CommandLine;
 import org.apache.commons.cli.Option;
 
+import com.netscape.certsrv.key.KeyClient;
 import com.netscape.certsrv.key.KeyRequestInfo;
 import com.netscape.certsrv.key.KeyRequestInfoCollection;
 import com.netscape.certsrv.request.RequestId;
@@ -114,7 +115,8 @@ public class KeyRequestFindCLI extends CLI {
         s = cmd.getOptionValue("maxTime");
         Integer maxTime = s == null ? null : Integer.valueOf(s);
 
-        KeyRequestInfoCollection keys = keyCLI.keyClient.listRequests(
+        KeyClient keyClient = keyCLI.getKeyClient();
+        KeyRequestInfoCollection keys = keyClient.listRequests(
                 status, type, clientKeyID, start, pageSize, maxResults, maxTime, realm);
 
         MainCLI.printMessage(keys.getTotal() + " entries matched");
diff --git a/base/java-tools/src/com/netscape/cmstools/key/KeyRequestReviewCLI.java b/base/java-tools/src/com/netscape/cmstools/key/KeyRequestReviewCLI.java
index d3ab01b70299d0da8015077907ebde8922517232..09cb0a1859911ab0067132b1e65c35dc11828e72 100644
--- a/base/java-tools/src/com/netscape/cmstools/key/KeyRequestReviewCLI.java
+++ b/base/java-tools/src/com/netscape/cmstools/key/KeyRequestReviewCLI.java
@@ -5,6 +5,7 @@ import java.util.Arrays;
 import org.apache.commons.cli.CommandLine;
 import org.apache.commons.cli.Option;
 
+import com.netscape.certsrv.key.KeyClient;
 import com.netscape.certsrv.key.KeyRequestInfo;
 import com.netscape.certsrv.request.RequestId;
 import com.netscape.cmstools.cli.CLI;
@@ -48,23 +49,24 @@ public class KeyRequestReviewCLI extends CLI {
         }
 
         RequestId reqId = new RequestId(cmdArgs[0]);
+        KeyClient keyClient = keyCLI.getKeyClient();
 
         String action = cmd.getOptionValue("action");
         switch (action.toLowerCase()) {
         case "approve":
-            keyCLI.keyClient.approveRequest(reqId);
+            keyClient.approveRequest(reqId);
             break;
         case "reject":
-            keyCLI.keyClient.rejectRequest(reqId);
+            keyClient.rejectRequest(reqId);
             break;
         case "cancel":
-            keyCLI.keyClient.cancelRequest(reqId);
+            keyClient.cancelRequest(reqId);
             break;
         default:
             throw new Exception("Invalid action.");
         }
 
-        KeyRequestInfo keyRequestInfo = keyCLI.keyClient.getRequestInfo(reqId);
+        KeyRequestInfo keyRequestInfo = keyClient.getRequestInfo(reqId);
 
         MainCLI.printMessage("Result");
         KeyCLI.printKeyRequestInfo(keyRequestInfo);
diff --git a/base/java-tools/src/com/netscape/cmstools/key/KeyRequestShowCLI.java b/base/java-tools/src/com/netscape/cmstools/key/KeyRequestShowCLI.java
index 82aabfc42f962f33e7d68f925a7d7a9f1d9f6c19..9ca6ff9bc4941f5f71b068c80d81e90ef02f4b00 100644
--- a/base/java-tools/src/com/netscape/cmstools/key/KeyRequestShowCLI.java
+++ b/base/java-tools/src/com/netscape/cmstools/key/KeyRequestShowCLI.java
@@ -22,6 +22,7 @@ import java.util.Arrays;
 
 import org.apache.commons.cli.CommandLine;
 
+import com.netscape.certsrv.key.KeyClient;
 import com.netscape.certsrv.key.KeyRequestInfo;
 import com.netscape.certsrv.request.RequestId;
 import com.netscape.cmstools.cli.CLI;
@@ -57,7 +58,8 @@ public class KeyRequestShowCLI extends CLI {
 
         RequestId requestId = new RequestId(args[0].trim());
 
-        KeyRequestInfo keyRequestInfo = keyCLI.keyClient.getRequestInfo(requestId);
+        KeyClient keyClient = keyCLI.getKeyClient();
+        KeyRequestInfo keyRequestInfo = keyClient.getRequestInfo(requestId);
 
         KeyCLI.printKeyRequestInfo(keyRequestInfo);
     }
diff --git a/base/java-tools/src/com/netscape/cmstools/key/KeyRetrieveCLI.java b/base/java-tools/src/com/netscape/cmstools/key/KeyRetrieveCLI.java
index 23e220a9a9e1f45d2e71ed02a171f25ed8a3e008..740baf3b42fd223501485a583feb80b3443ded49 100644
--- a/base/java-tools/src/com/netscape/cmstools/key/KeyRetrieveCLI.java
+++ b/base/java-tools/src/com/netscape/cmstools/key/KeyRetrieveCLI.java
@@ -13,6 +13,7 @@ import org.apache.commons.cli.Option;
 
 import com.netscape.certsrv.dbs.keydb.KeyId;
 import com.netscape.certsrv.key.Key;
+import com.netscape.certsrv.key.KeyClient;
 import com.netscape.certsrv.key.KeyRecoveryRequest;
 import com.netscape.certsrv.request.RequestId;
 import com.netscape.cmstools.cli.CLI;
@@ -77,6 +78,7 @@ public class KeyRetrieveCLI extends CLI {
 
         String requestFile = cmd.getOptionValue("input");
 
+        KeyClient keyClient = keyCLI.getKeyClient();
         Key keyData = null;
 
         if (requestFile != null) {
@@ -90,24 +92,24 @@ public class KeyRetrieveCLI extends CLI {
             }
 
             if (req.getCertificate() != null) {
-                keyData = keyCLI.keyClient.retrieveKeyByPKCS12(req.getKeyId(), req.getCertificate(),
+                keyData = keyClient.retrieveKeyByPKCS12(req.getKeyId(), req.getCertificate(),
                         req.getPassphrase());
 
             } else if (req.getPassphrase() != null) {
-                keyData = keyCLI.keyClient.retrieveKeyByPassphrase(req.getKeyId(), req.getPassphrase());
+                keyData = keyClient.retrieveKeyByPassphrase(req.getKeyId(), req.getPassphrase());
 
             } else if (req.getSessionWrappedPassphrase() != null) {
-                keyData = keyCLI.keyClient.retrieveKeyUsingWrappedPassphrase(req.getKeyId(),
+                keyData = keyClient.retrieveKeyUsingWrappedPassphrase(req.getKeyId(),
                         Utils.base64decode(req.getTransWrappedSessionKey()),
                         Utils.base64decode(req.getSessionWrappedPassphrase()),
                         Utils.base64decode(req.getNonceData()));
 
             } else if (req.getTransWrappedSessionKey() != null) {
-                keyData = keyCLI.keyClient.retrieveKey(req.getKeyId(),
+                keyData = keyClient.retrieveKey(req.getKeyId(),
                         Utils.base64decode(req.getTransWrappedSessionKey()));
 
             } else {
-                keyData = keyCLI.keyClient.retrieveKey(req.getKeyId());
+                keyData = keyClient.retrieveKey(req.getKeyId());
             }
 
         } else {
@@ -122,16 +124,16 @@ public class KeyRetrieveCLI extends CLI {
 
             if (passphrase != null) {
                 if (requestId != null) {
-                    keyData = keyCLI.keyClient.retrieveKeyByRequestWithPassphrase(
+                    keyData = keyClient.retrieveKeyByRequestWithPassphrase(
                             new RequestId(requestId), passphrase);
                 } else {
-                    keyData = keyCLI.keyClient.retrieveKeyByPassphrase(new KeyId(keyId), passphrase);
+                    keyData = keyClient.retrieveKeyByPassphrase(new KeyId(keyId), passphrase);
                 }
             } else {
                 if (requestId != null) {
-                    keyData = keyCLI.keyClient.retrieveKeyByRequest(new RequestId(requestId));
+                    keyData = keyClient.retrieveKeyByRequest(new RequestId(requestId));
                 } else {
-                    keyData = keyCLI.keyClient.retrieveKey(new KeyId(keyId));
+                    keyData = keyClient.retrieveKey(new KeyId(keyId));
                 }
 
                 clientEncryption = false;
diff --git a/base/java-tools/src/com/netscape/cmstools/key/KeyShowCLI.java b/base/java-tools/src/com/netscape/cmstools/key/KeyShowCLI.java
index d877222dc3850ad24b30071e8f59295324c22bec..c579fe5f80b23c6daec6d182fd416e4936b8cb92 100644
--- a/base/java-tools/src/com/netscape/cmstools/key/KeyShowCLI.java
+++ b/base/java-tools/src/com/netscape/cmstools/key/KeyShowCLI.java
@@ -24,6 +24,7 @@ import org.apache.commons.cli.CommandLine;
 import org.apache.commons.cli.Option;
 
 import com.netscape.certsrv.dbs.keydb.KeyId;
+import com.netscape.certsrv.key.KeyClient;
 import com.netscape.certsrv.key.KeyInfo;
 import com.netscape.cmstools.cli.CLI;
 
@@ -59,14 +60,15 @@ public class KeyShowCLI extends CLI {
 
         String[] cmdArgs = cmd.getArgs();
         String clientKeyId = cmd.getOptionValue("clientKeyID");
+        KeyClient keyClient = keyCLI.getKeyClient();
         KeyInfo keyInfo;
 
         if (cmdArgs.length == 1) {
             KeyId keyId = new KeyId(cmdArgs[0]);
-            keyInfo = keyCLI.keyClient.getKeyInfo(keyId);
+            keyInfo = keyClient.getKeyInfo(keyId);
 
         } else if (clientKeyId != null) {
-            keyInfo = keyCLI.keyClient.getActiveKeyInfo(clientKeyId);
+            keyInfo = keyClient.getActiveKeyInfo(clientKeyId);
 
         } else {
             throw new Exception("Missing Key ID or Client Key ID.");
-- 
2.9.3

>From fe9bd51f36268585ca0b321ca0586012d8673066 Mon Sep 17 00:00:00 2001
From: "Endi S. Dewata" <[email protected]>
Date: Fri, 24 Mar 2017 01:06:30 +0100
Subject: [PATCH] Refactored SecurityDomainCLI.

The SecurityDomainCLI and its submodule have been modified to use
lazy initialization to get the PKIClient object.
---
 .../src/com/netscape/cmstools/system/SecurityDomainCLI.java      | 9 ++++++---
 .../src/com/netscape/cmstools/system/SecurityDomainShowCLI.java  | 4 +++-
 2 files changed, 9 insertions(+), 4 deletions(-)

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 0c2ed37d800bf5769136aeed6b3e82d34ac07d7f..d9db91eb9295185188663fbb1dc235d00ab0cb89 100644
--- a/base/java-tools/src/com/netscape/cmstools/system/SecurityDomainCLI.java
+++ b/base/java-tools/src/com/netscape/cmstools/system/SecurityDomainCLI.java
@@ -18,6 +18,7 @@
 
 package com.netscape.cmstools.system;
 
+import com.netscape.certsrv.client.PKIClient;
 import com.netscape.certsrv.system.DomainInfo;
 import com.netscape.certsrv.system.SecurityDomainClient;
 import com.netscape.certsrv.system.SecurityDomainHost;
@@ -52,9 +53,11 @@ public class SecurityDomainCLI extends CLI {
         return "pki-securitydomain";
     }
 
-    public void execute(String[] args) throws Exception {
+    public SecurityDomainClient getSecurityDomainClient() throws Exception {
 
-        client = parent.getClient();
+        if (securityDomainClient != null) return securityDomainClient;
+
+        PKIClient client = getClient();
 
         // determine the subsystem
         String subsystem = client.getSubsystem();
@@ -63,7 +66,7 @@ public class SecurityDomainCLI extends CLI {
         // create new security domain client
         securityDomainClient = new SecurityDomainClient(client, subsystem);
 
-        super.execute(args);
+        return securityDomainClient;
     }
 
     public static void printSecurityDomain(DomainInfo domain) {
diff --git a/base/java-tools/src/com/netscape/cmstools/system/SecurityDomainShowCLI.java b/base/java-tools/src/com/netscape/cmstools/system/SecurityDomainShowCLI.java
index 14d8e6685c502859ef62ced0ccaeb524894ff382..f4082ef4e266ff2f515190340a89278aa6c7e192 100644
--- a/base/java-tools/src/com/netscape/cmstools/system/SecurityDomainShowCLI.java
+++ b/base/java-tools/src/com/netscape/cmstools/system/SecurityDomainShowCLI.java
@@ -23,6 +23,7 @@ import java.util.Arrays;
 import org.apache.commons.cli.CommandLine;
 
 import com.netscape.certsrv.system.DomainInfo;
+import com.netscape.certsrv.system.SecurityDomainClient;
 import com.netscape.cmstools.cli.CLI;
 
 /**
@@ -56,7 +57,8 @@ public class SecurityDomainShowCLI extends CLI {
             throw new Exception("Too many arguments specified.");
         }
 
-        DomainInfo domain = securityDomainCLI.securityDomainClient.getDomainInfo();
+        SecurityDomainClient securityDomainClient = securityDomainCLI.getSecurityDomainClient();
+        DomainInfo domain = securityDomainClient.getDomainInfo();
 
         SecurityDomainCLI.printSecurityDomain(domain);
     }
-- 
2.9.3

>From 31655d244a1d07f8f9af4c3aa9abdc8824a30dba Mon Sep 17 00:00:00 2001
From: "Endi S. Dewata" <[email protected]>
Date: Fri, 24 Mar 2017 01:17:55 +0100
Subject: [PATCH] Refactored UserCLI.

The UserCLI and its submodules have been modified to use lazy
initialization to get the PKIClient object.
---
 .../src/com/netscape/cmstools/user/UserAddCLI.java |  4 +++-
 .../src/com/netscape/cmstools/user/UserCLI.java    | 23 +++++++++++-----------
 .../com/netscape/cmstools/user/UserCertAddCLI.java |  4 +++-
 .../com/netscape/cmstools/user/UserCertCLI.java    | 12 +++++------
 .../netscape/cmstools/user/UserCertFindCLI.java    |  4 +++-
 .../netscape/cmstools/user/UserCertRemoveCLI.java  |  4 +++-
 .../netscape/cmstools/user/UserCertShowCLI.java    |  4 +++-
 .../com/netscape/cmstools/user/UserFindCLI.java    |  4 +++-
 .../cmstools/user/UserMembershipAddCLI.java        |  4 +++-
 .../netscape/cmstools/user/UserMembershipCLI.java  | 12 +++++------
 .../cmstools/user/UserMembershipFindCLI.java       |  4 +++-
 .../cmstools/user/UserMembershipRemoveCLI.java     |  4 +++-
 .../com/netscape/cmstools/user/UserModifyCLI.java  |  4 +++-
 .../com/netscape/cmstools/user/UserRemoveCLI.java  |  4 +++-
 .../com/netscape/cmstools/user/UserShowCLI.java    |  4 +++-
 15 files changed, 57 insertions(+), 38 deletions(-)

diff --git a/base/java-tools/src/com/netscape/cmstools/user/UserAddCLI.java b/base/java-tools/src/com/netscape/cmstools/user/UserAddCLI.java
index 4cccd7adf9aa679a8022c9312e65da928cb2644e..b244ab385d2607ed0a0a86d9bf5f0ea54a438c07 100644
--- a/base/java-tools/src/com/netscape/cmstools/user/UserAddCLI.java
+++ b/base/java-tools/src/com/netscape/cmstools/user/UserAddCLI.java
@@ -23,6 +23,7 @@ import java.util.Arrays;
 import org.apache.commons.cli.CommandLine;
 import org.apache.commons.cli.Option;
 
+import com.netscape.certsrv.user.UserClient;
 import com.netscape.certsrv.user.UserData;
 import com.netscape.cmstools.cli.CLI;
 import com.netscape.cmstools.cli.MainCLI;
@@ -98,7 +99,8 @@ public class UserAddCLI extends CLI {
         userData.setType(cmd.getOptionValue("type"));
         userData.setState(cmd.getOptionValue("state"));
 
-        userData = userCLI.userClient.addUser(userData);
+        UserClient userClient = userCLI.getUserClient();
+        userData = userClient.addUser(userData);
 
         MainCLI.printMessage("Added user \"" + userID + "\"");
 
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 5382c4711657d32d727236c2b96a813f80b89086..57a132c4670c27cda877ca2ed90d6037b3b1a3b5 100644
--- a/base/java-tools/src/com/netscape/cmstools/user/UserCLI.java
+++ b/base/java-tools/src/com/netscape/cmstools/user/UserCLI.java
@@ -21,6 +21,7 @@ package com.netscape.cmstools.user;
 import org.apache.commons.lang.StringUtils;
 import org.jboss.resteasy.plugins.providers.atom.Link;
 
+import com.netscape.certsrv.client.PKIClient;
 import com.netscape.certsrv.user.UserClient;
 import com.netscape.certsrv.user.UserData;
 import com.netscape.certsrv.user.UserResource;
@@ -62,22 +63,20 @@ public class UserCLI extends CLI {
         return "pki-user";
     }
 
-    public void execute(String[] args) throws Exception {
+    public UserClient getUserClient() throws Exception {
 
-        client = parent.getClient();
-        userClient = (UserClient)parent.getClient("user");
+        if (userClient != null) return userClient;
 
-        // if this is a top-level command
-        if (userClient == null) {
-            // determine the subsystem
-            String subsystem = client.getSubsystem();
-            if (subsystem == null) subsystem = "ca";
+        PKIClient client = getClient();
 
-            // create new user client
-            userClient = new UserClient(client, subsystem);
-        }
+        // determine the subsystem
+        String subsystem = client.getSubsystem();
+        if (subsystem == null) subsystem = "ca";
 
-        super.execute(args);
+        // create new user client
+        userClient = new UserClient(client, subsystem);
+
+        return userClient;
     }
 
     public static void printUser(UserData userData) {
diff --git a/base/java-tools/src/com/netscape/cmstools/user/UserCertAddCLI.java b/base/java-tools/src/com/netscape/cmstools/user/UserCertAddCLI.java
index 3b233cdb25df5499af96e63ec6d8b291bf574536..79f02937b205a6972ec497ad0987014caba707f8 100644
--- a/base/java-tools/src/com/netscape/cmstools/user/UserCertAddCLI.java
+++ b/base/java-tools/src/com/netscape/cmstools/user/UserCertAddCLI.java
@@ -30,6 +30,7 @@ import com.netscape.certsrv.cert.CertClient;
 import com.netscape.certsrv.cert.CertData;
 import com.netscape.certsrv.dbs.certdb.CertId;
 import com.netscape.certsrv.user.UserCertData;
+import com.netscape.certsrv.user.UserClient;
 import com.netscape.cmstools.cli.CLI;
 import com.netscape.cmstools.cli.MainCLI;
 
@@ -117,7 +118,8 @@ public class UserCertAddCLI extends CLI {
             System.out.println(userCertData);
         }
 
-        userCertData = userCertCLI.userClient.addUserCert(userID, userCertData);
+        UserClient userClient = userCertCLI.getUserClient();
+        userCertData = userClient.addUserCert(userID, userCertData);
 
         MainCLI.printMessage("Added certificate \"" + userCertData.getID() + "\"");
 
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 d8ea917202711ef1aa5f5430590db34d241f6df1..e6d81e8e70da021f116ac411326fedc33a73c121 100644
--- a/base/java-tools/src/com/netscape/cmstools/user/UserCertCLI.java
+++ b/base/java-tools/src/com/netscape/cmstools/user/UserCertCLI.java
@@ -29,11 +29,13 @@ import com.netscape.cmstools.cli.CLI;
  */
 public class UserCertCLI extends CLI {
 
-    public UserClient userClient;
+    UserCLI parent;
 
     public UserCertCLI(UserCLI parent) {
         super("cert", "User certificate management commands", parent);
 
+        this.parent = parent;
+
         addModule(new UserCertFindCLI(this));
         addModule(new UserCertShowCLI(this));
         addModule(new UserCertAddCLI(this));
@@ -45,12 +47,8 @@ public class UserCertCLI extends CLI {
         return "pki-user-cert";
     }
 
-    public void execute(String[] args) throws Exception {
-
-        client = parent.getClient();
-        userClient = ((UserCLI)parent).userClient;
-
-        super.execute(args);
+    public UserClient getUserClient() throws Exception {
+        return parent.getUserClient();
     }
 
     public static void printCert(
diff --git a/base/java-tools/src/com/netscape/cmstools/user/UserCertFindCLI.java b/base/java-tools/src/com/netscape/cmstools/user/UserCertFindCLI.java
index 4f6980fd83a19b3b9b05e13b7f498dab074c30cc..bbcb00f8f1a2e86eba42c43c96d5e93b84b4bcd9 100644
--- a/base/java-tools/src/com/netscape/cmstools/user/UserCertFindCLI.java
+++ b/base/java-tools/src/com/netscape/cmstools/user/UserCertFindCLI.java
@@ -26,6 +26,7 @@ import org.apache.commons.cli.Option;
 
 import com.netscape.certsrv.user.UserCertCollection;
 import com.netscape.certsrv.user.UserCertData;
+import com.netscape.certsrv.user.UserClient;
 import com.netscape.cmstools.cli.CLI;
 import com.netscape.cmstools.cli.MainCLI;
 
@@ -80,7 +81,8 @@ public class UserCertFindCLI extends CLI {
         s = cmd.getOptionValue("size");
         Integer size = s == null ? null : Integer.valueOf(s);
 
-        UserCertCollection response = userCertCLI.userClient.findUserCerts(userID, start, size);
+        UserClient userClient = userCertCLI.getUserClient();
+        UserCertCollection response = userClient.findUserCerts(userID, start, size);
 
         MainCLI.printMessage(response.getTotal() + " entries matched");
         if (response.getTotal() == 0) return;
diff --git a/base/java-tools/src/com/netscape/cmstools/user/UserCertRemoveCLI.java b/base/java-tools/src/com/netscape/cmstools/user/UserCertRemoveCLI.java
index e1f15cac525be03e14c92c2446fb4c365c02439e..935092a70246a96591b800a89f604428de23bd86 100644
--- a/base/java-tools/src/com/netscape/cmstools/user/UserCertRemoveCLI.java
+++ b/base/java-tools/src/com/netscape/cmstools/user/UserCertRemoveCLI.java
@@ -23,6 +23,7 @@ import java.util.Arrays;
 
 import org.apache.commons.cli.CommandLine;
 
+import com.netscape.certsrv.user.UserClient;
 import com.netscape.cmstools.cli.CLI;
 import com.netscape.cmstools.cli.MainCLI;
 
@@ -65,7 +66,8 @@ public class UserCertRemoveCLI extends CLI {
             System.out.println("Removing cert "+certID+" from user "+userID+".");
         }
 
-        userCertCLI.userClient.removeUserCert(userID, URLEncoder.encode(certID, "UTF-8"));
+        UserClient userClient = userCertCLI.getUserClient();
+        userClient.removeUserCert(userID, URLEncoder.encode(certID, "UTF-8"));
 
         MainCLI.printMessage("Deleted certificate \"" + certID + "\"");
     }
diff --git a/base/java-tools/src/com/netscape/cmstools/user/UserCertShowCLI.java b/base/java-tools/src/com/netscape/cmstools/user/UserCertShowCLI.java
index 1267dbc80ebfc84d7d5d56a2b50f5bc477c56b72..8c1f53ddd791d2ef9be3426a9293a5ab1c690dc8 100644
--- a/base/java-tools/src/com/netscape/cmstools/user/UserCertShowCLI.java
+++ b/base/java-tools/src/com/netscape/cmstools/user/UserCertShowCLI.java
@@ -27,6 +27,7 @@ import org.apache.commons.cli.CommandLine;
 import org.apache.commons.cli.Option;
 
 import com.netscape.certsrv.user.UserCertData;
+import com.netscape.certsrv.user.UserClient;
 import com.netscape.cmstools.cli.CLI;
 import com.netscape.cmstools.cli.MainCLI;
 
@@ -79,7 +80,8 @@ public class UserCertShowCLI extends CLI {
         String certID = cmdArgs[1];
         String file = cmd.getOptionValue("output");
 
-        UserCertData userCertData = userCertCLI.userClient.getUserCert(userID, URLEncoder.encode(certID, "UTF-8"));
+        UserClient userClient = userCertCLI.getUserClient();
+        UserCertData userCertData = userClient.getUserCert(userID, URLEncoder.encode(certID, "UTF-8"));
 
         String encoded = userCertData.getEncoded();
         if (encoded != null && file != null) {
diff --git a/base/java-tools/src/com/netscape/cmstools/user/UserFindCLI.java b/base/java-tools/src/com/netscape/cmstools/user/UserFindCLI.java
index 8f9b8ba7f96e540453754271cb2c9dd510e25fa6..283779dbcd7f13d3e2375851405e9fa932159cb6 100644
--- a/base/java-tools/src/com/netscape/cmstools/user/UserFindCLI.java
+++ b/base/java-tools/src/com/netscape/cmstools/user/UserFindCLI.java
@@ -24,6 +24,7 @@ import java.util.Collection;
 import org.apache.commons.cli.CommandLine;
 import org.apache.commons.cli.Option;
 
+import com.netscape.certsrv.user.UserClient;
 import com.netscape.certsrv.user.UserCollection;
 import com.netscape.certsrv.user.UserData;
 import com.netscape.cmstools.cli.CLI;
@@ -75,7 +76,8 @@ public class UserFindCLI extends CLI {
         s = cmd.getOptionValue("size");
         Integer size = s == null ? null : Integer.valueOf(s);
 
-        UserCollection response = userCLI.userClient.findUsers(filter, start, size);
+        UserClient userClient = userCLI.getUserClient();
+        UserCollection response = userClient.findUsers(filter, start, size);
 
         MainCLI.printMessage(response.getTotal() + " entries matched");
         if (response.getTotal() == 0) return;
diff --git a/base/java-tools/src/com/netscape/cmstools/user/UserMembershipAddCLI.java b/base/java-tools/src/com/netscape/cmstools/user/UserMembershipAddCLI.java
index 966e8ed405d58068b61054f2e244060b85b2fe91..4cb0848abebfa39c11b8220f7a95d85c04081c2e 100644
--- a/base/java-tools/src/com/netscape/cmstools/user/UserMembershipAddCLI.java
+++ b/base/java-tools/src/com/netscape/cmstools/user/UserMembershipAddCLI.java
@@ -22,6 +22,7 @@ import java.util.Arrays;
 
 import org.apache.commons.cli.CommandLine;
 
+import com.netscape.certsrv.user.UserClient;
 import com.netscape.certsrv.user.UserMembershipData;
 import com.netscape.cmstools.cli.CLI;
 import com.netscape.cmstools.cli.MainCLI;
@@ -60,7 +61,8 @@ public class UserMembershipAddCLI extends CLI {
         String userID = args[0];
         String groupID = args[1];
 
-        UserMembershipData userMembershipData = userMembershipCLI.userClient.addUserMembership(userID, groupID);
+        UserClient userClient = userMembershipCLI.getUserClient();
+        UserMembershipData userMembershipData = userClient.addUserMembership(userID, groupID);
 
         MainCLI.printMessage("Added membership in \""+groupID+"\"");
 
diff --git a/base/java-tools/src/com/netscape/cmstools/user/UserMembershipCLI.java b/base/java-tools/src/com/netscape/cmstools/user/UserMembershipCLI.java
index fb418c07504fe2e021e69815b71fb20d3fc9344e..4267421ad5af5151ae3210a14a7b4afcb88e149d 100644
--- a/base/java-tools/src/com/netscape/cmstools/user/UserMembershipCLI.java
+++ b/base/java-tools/src/com/netscape/cmstools/user/UserMembershipCLI.java
@@ -29,22 +29,20 @@ import com.netscape.cmstools.cli.CLI;
  */
 public class UserMembershipCLI extends CLI {
 
-    public UserClient userClient;
+    UserCLI parent;
 
     public UserMembershipCLI(UserCLI parent) {
         super("membership", "User membership management commands", parent);
 
+        this.parent = parent;
+
         addModule(new UserMembershipFindCLI(this));
         addModule(new UserMembershipAddCLI(this));
         addModule(new UserMembershipRemoveCLI(this));
     }
 
-    public void execute(String[] args) throws Exception {
-
-        client = parent.getClient();
-        userClient = ((UserCLI)parent).userClient;
-
-        super.execute(args);
+    public UserClient getUserClient() throws Exception {
+        return parent.getUserClient();
     }
 
     public static void printUserMembership(UserMembershipData userMembershipData) {
diff --git a/base/java-tools/src/com/netscape/cmstools/user/UserMembershipFindCLI.java b/base/java-tools/src/com/netscape/cmstools/user/UserMembershipFindCLI.java
index f51fc49b50528619469e5ddbd3c8f2ffc1435a38..7a19429aaa27f8aad0b3bf7f2c2f0a36e855f601 100644
--- a/base/java-tools/src/com/netscape/cmstools/user/UserMembershipFindCLI.java
+++ b/base/java-tools/src/com/netscape/cmstools/user/UserMembershipFindCLI.java
@@ -24,6 +24,7 @@ import java.util.Collection;
 import org.apache.commons.cli.CommandLine;
 import org.apache.commons.cli.Option;
 
+import com.netscape.certsrv.user.UserClient;
 import com.netscape.certsrv.user.UserMembershipCollection;
 import com.netscape.certsrv.user.UserMembershipData;
 import com.netscape.cmstools.cli.CLI;
@@ -81,7 +82,8 @@ public class UserMembershipFindCLI extends CLI {
         s = cmd.getOptionValue("size");
         Integer size = s == null ? null : Integer.valueOf(s);
 
-        UserMembershipCollection response = userMembershipCLI.userClient.findUserMemberships(userID, filter, start, size);
+        UserClient userClient = userMembershipCLI.getUserClient();
+        UserMembershipCollection response = userClient.findUserMemberships(userID, filter, start, size);
 
         MainCLI.printMessage(response.getTotal() + " entries matched");
         if (response.getTotal() == 0) return;
diff --git a/base/java-tools/src/com/netscape/cmstools/user/UserMembershipRemoveCLI.java b/base/java-tools/src/com/netscape/cmstools/user/UserMembershipRemoveCLI.java
index 1573cc8abe4ac7931cf8decf9f22b56ec908c57a..6fe71e2667990cce8e4e09f442fccf1da94d505e 100644
--- a/base/java-tools/src/com/netscape/cmstools/user/UserMembershipRemoveCLI.java
+++ b/base/java-tools/src/com/netscape/cmstools/user/UserMembershipRemoveCLI.java
@@ -22,6 +22,7 @@ import java.util.Arrays;
 
 import org.apache.commons.cli.CommandLine;
 
+import com.netscape.certsrv.user.UserClient;
 import com.netscape.cmstools.cli.CLI;
 import com.netscape.cmstools.cli.MainCLI;
 
@@ -59,7 +60,8 @@ public class UserMembershipRemoveCLI extends CLI {
         String userID = args[0];
         String groupID = args[1];
 
-        userMembershipCLI.userClient.removeUserMembership(userID, groupID);
+        UserClient userClient = userMembershipCLI.getUserClient();
+        userClient.removeUserMembership(userID, groupID);
 
         MainCLI.printMessage("Deleted membership in group \""+groupID+"\"");
     }
diff --git a/base/java-tools/src/com/netscape/cmstools/user/UserModifyCLI.java b/base/java-tools/src/com/netscape/cmstools/user/UserModifyCLI.java
index e632672d79ed1ba5deb7d22fd9fc5bf8345ae7f9..5ef3398e1c8025d9ff91e99ae76d08a0d434f8ae 100644
--- a/base/java-tools/src/com/netscape/cmstools/user/UserModifyCLI.java
+++ b/base/java-tools/src/com/netscape/cmstools/user/UserModifyCLI.java
@@ -23,6 +23,7 @@ import java.util.Arrays;
 import org.apache.commons.cli.CommandLine;
 import org.apache.commons.cli.Option;
 
+import com.netscape.certsrv.user.UserClient;
 import com.netscape.certsrv.user.UserData;
 import com.netscape.cmstools.cli.CLI;
 import com.netscape.cmstools.cli.MainCLI;
@@ -99,7 +100,8 @@ public class UserModifyCLI extends CLI {
         // userData.setType(cmd.getOptionValue("type"));
         userData.setState(cmd.getOptionValue("state"));
 
-        userData = userCLI.userClient.modifyUser(userId, userData);
+        UserClient userClient = userCLI.getUserClient();
+        userData = userClient.modifyUser(userId, userData);
 
         MainCLI.printMessage("Modified user \"" + userId + "\"");
 
diff --git a/base/java-tools/src/com/netscape/cmstools/user/UserRemoveCLI.java b/base/java-tools/src/com/netscape/cmstools/user/UserRemoveCLI.java
index 4ad8bf1b3ddf99955cc803b877e7d3f92cd2ead0..dbc9d630d3bb1b34e5f66a609318bdafc214722a 100644
--- a/base/java-tools/src/com/netscape/cmstools/user/UserRemoveCLI.java
+++ b/base/java-tools/src/com/netscape/cmstools/user/UserRemoveCLI.java
@@ -22,6 +22,7 @@ import java.util.Arrays;
 
 import org.apache.commons.cli.CommandLine;
 
+import com.netscape.certsrv.user.UserClient;
 import com.netscape.cmstools.cli.CLI;
 import com.netscape.cmstools.cli.MainCLI;
 
@@ -58,7 +59,8 @@ public class UserRemoveCLI extends CLI {
 
         String userID = args[0];
 
-        userCLI.userClient.removeUser(userID);
+        UserClient userClient = userCLI.getUserClient();
+        userClient.removeUser(userID);
 
         MainCLI.printMessage("Deleted user \"" + userID + "\"");
     }
diff --git a/base/java-tools/src/com/netscape/cmstools/user/UserShowCLI.java b/base/java-tools/src/com/netscape/cmstools/user/UserShowCLI.java
index e46013940db068c08e7683156410eba3ea091edf..244187abfa4bb38120c985add858c44f6ffbd7a9 100644
--- a/base/java-tools/src/com/netscape/cmstools/user/UserShowCLI.java
+++ b/base/java-tools/src/com/netscape/cmstools/user/UserShowCLI.java
@@ -22,6 +22,7 @@ import java.util.Arrays;
 
 import org.apache.commons.cli.CommandLine;
 
+import com.netscape.certsrv.user.UserClient;
 import com.netscape.certsrv.user.UserData;
 import com.netscape.cmstools.cli.CLI;
 import com.netscape.cmstools.cli.MainCLI;
@@ -59,7 +60,8 @@ public class UserShowCLI extends CLI {
 
         String userId = args[0];
 
-        UserData userData = userCLI.userClient.getUser(userId);
+        UserClient userClient = userCLI.getUserClient();
+        UserData userData = userClient.getUser(userId);
 
         MainCLI.printMessage("User \"" + userId + "\"");
 
-- 
2.9.3

_______________________________________________
Pki-devel mailing list
[email protected]
https://www.redhat.com/mailman/listinfo/pki-devel

Reply via email to