From 31da6f93e7078135157ea5944e3977550eedef3e Mon Sep 17 00:00:00 2001
From: Jean-Noël Rouvignac <jean-noel.rouvignac@forgerock.com>
Date: Wed, 27 Jul 2016 12:07:23 +0000
Subject: [PATCH] code cleanup

---
 opendj-server-legacy/src/main/java/org/opends/admin/ads/util/ConnectionUtils.java |  146 ++++++++++++++++++++----------------------------
 1 files changed, 60 insertions(+), 86 deletions(-)

diff --git a/opendj-server-legacy/src/main/java/org/opends/admin/ads/util/ConnectionUtils.java b/opendj-server-legacy/src/main/java/org/opends/admin/ads/util/ConnectionUtils.java
index 86c219b..49feb14 100644
--- a/opendj-server-legacy/src/main/java/org/opends/admin/ads/util/ConnectionUtils.java
+++ b/opendj-server-legacy/src/main/java/org/opends/admin/ads/util/ConnectionUtils.java
@@ -93,12 +93,7 @@
       String pwd, int timeout, Hashtable<String, String> env)
       throws NamingException
   {
-    env = copy(env);
-    env.put(Context.INITIAL_CONTEXT_FACTORY,
-        "com.sun.jndi.ldap.LdapCtxFactory");
-    env.put("java.naming.ldap.attributes.binary",
-        EntryHistorical.HISTORICAL_ATTRIBUTE_NAME);
-    env.put(Context.PROVIDER_URL, ldapURL);
+    env = newEnvironmentFrom(ldapURL, env);
     if (timeout >= 1)
     {
       env.put("com.sun.jndi.ldap.connect.timeout", String.valueOf(timeout));
@@ -113,8 +108,7 @@
     }
 
     /* Contains the DirContext and the Exception if any */
-    final Object[] pair = new Object[]
-      { null, null };
+    final Object[] pair = { null, null };
     final Hashtable<String, String> fEnv = env;
     Thread t = new Thread(new Runnable()
     {
@@ -124,11 +118,9 @@
         try
         {
           pair[0] = new InitialLdapContext(fEnv, null);
-
         } catch (NamingException ne)
         {
           pair[1] = ne;
-
         } catch (Throwable t)
         {
           t.printStackTrace();
@@ -166,20 +158,14 @@
    */
   static InitialLdapContext createLdapsContext(String ldapsURL,
       String dn, String pwd, int timeout, Hashtable<String, String> env,
-      TrustManager trustManager, KeyManager keyManager) throws NamingException {
-    env = copy(env);
-    env.put(Context.INITIAL_CONTEXT_FACTORY,
-        "com.sun.jndi.ldap.LdapCtxFactory");
-    env.put("java.naming.ldap.attributes.binary",
-        EntryHistorical.HISTORICAL_ATTRIBUTE_NAME);
-    env.put(Context.PROVIDER_URL, ldapsURL);
-    env.put("java.naming.ldap.factory.socket",
-        org.opends.admin.ads.util.TrustedSocketFactory.class.getName());
+      TrustManager trustManager, final KeyManager keyManager) throws NamingException {
+    final Hashtable<String, String> newEnv = newEnvironmentFrom(ldapsURL, env);
+    newEnv.put("java.naming.ldap.factory.socket", TrustedSocketFactory.class.getName());
 
     if (dn != null && pwd != null)
     {
-      env.put(Context.SECURITY_PRINCIPAL, dn);
-      env.put(Context.SECURITY_CREDENTIALS, pwd);
+      newEnv.put(Context.SECURITY_PRINCIPAL, dn);
+      newEnv.put(Context.SECURITY_CREDENTIALS, pwd);
     }
 
     if (trustManager == null)
@@ -188,18 +174,14 @@
     }
 
     /* Contains the DirContext and the Exception if any */
-    final Object[] pair = new Object[] {null, null};
-    final Hashtable<String, String> fEnv = env;
+    final Object[] pair = { null, null };
     final TrustManager fTrustManager = trustManager;
-    final KeyManager   fKeyManager   = keyManager;
-
     Thread t = new Thread(new Runnable() {
       @Override
       public void run() {
         try {
-          TrustedSocketFactory.setCurrentThreadTrustManager(fTrustManager,
-              fKeyManager);
-          pair[0] = new InitialLdapContext(fEnv, null);
+          TrustedSocketFactory.setCurrentThreadTrustManager(fTrustManager, keyManager);
+          pair[0] = new InitialLdapContext(newEnv, null);
         } catch (NamingException | RuntimeException ne) {
           pair[1] = ne;
         }
@@ -221,19 +203,17 @@
    * @throws NamingException if there was an error creating the new connection.
    */
   public static ConnectionWrapper cloneConnectionWrapper(
-      final ConnectionWrapper conn, int timeout, TrustManager trustManager,
-      KeyManager keyManager) throws NamingException
+      final ConnectionWrapper conn, int timeout, final TrustManager trustManager,
+      final KeyManager keyManager) throws NamingException
   {
-    final Object[] pair = new Object[] {null, null};
-    final TrustManager fTrustManager = trustManager;
-    final KeyManager fKeyManager = keyManager;
+    final Object[] pair = { null, null };
     Thread t = new Thread(new Runnable() {
       @Override
       public void run() {
         try {
           if (conn.isSSL() || conn.isStartTLS())
           {
-            TrustedSocketFactory.setCurrentThreadTrustManager(fTrustManager, fKeyManager);
+            TrustedSocketFactory.setCurrentThreadTrustManager(trustManager, keyManager);
           }
           pair[0] = new ConnectionWrapper(conn);
         } catch (NamingException | RuntimeException ne) {
@@ -278,8 +258,8 @@
    * @see TrustedSocketFactory
    */
   static InitialLdapContext createStartTLSContext(String ldapURL,
-      String dn, String pwd, int timeout, Hashtable<String, String> env,
-      TrustManager trustManager, KeyManager keyManager,
+      final String dn, final String pwd, int timeout, Hashtable<String, String> env,
+      TrustManager trustManager, final KeyManager keyManager,
       HostnameVerifier verifier)
   throws NamingException
   {
@@ -291,41 +271,28 @@
       verifier = new BlindHostnameVerifier();
     }
 
-    env = copy(env);
-    env.put(Context.INITIAL_CONTEXT_FACTORY,
-        "com.sun.jndi.ldap.LdapCtxFactory");
-    env.put("java.naming.ldap.attributes.binary",
-        EntryHistorical.HISTORICAL_ATTRIBUTE_NAME);
-    env.put(Context.PROVIDER_URL, ldapURL);
-    env.put(Context.SECURITY_AUTHENTICATION , "none");
+    final Hashtable<String, String> newEnv = newEnvironmentFrom(ldapURL, env);
+    newEnv.put(Context.SECURITY_AUTHENTICATION, "none");
 
     /* Contains the DirContext and the Exception if any */
-    final Object[] pair = new Object[] {null, null};
-    final Hashtable<?, ?> fEnv = env;
-    final String fDn = dn;
-    final String fPwd = pwd;
+    final Object[] pair = { null, null };
     final TrustManager fTrustManager = trustManager;
-    final KeyManager fKeyManager     = keyManager;
     final HostnameVerifier fVerifier = verifier;
 
     Thread t = new Thread(new Runnable() {
       @Override
       public void run() {
         try {
-          StartTlsResponse tls;
+          InitialLdapContext result = new InitialLdapContext(newEnv, null);
 
-          InitialLdapContext result = new InitialLdapContext(fEnv, null);
-
-          tls = (StartTlsResponse) result.extendedOperation(
-              new StartTlsRequest());
+          StartTlsResponse tls = (StartTlsResponse) result.extendedOperation(new StartTlsRequest());
           tls.setHostnameVerifier(fVerifier);
           try
           {
-            tls.negotiate(new TrustedSocketFactory(fTrustManager,fKeyManager));
+            tls.negotiate(new TrustedSocketFactory(fTrustManager, keyManager));
           }
           catch(IOException x) {
-            NamingException xx;
-            xx = new CommunicationException(
+            NamingException xx = new CommunicationException(
                 "Failed to negotiate Start TLS operation");
             xx.initCause(x);
             result.close();
@@ -333,13 +300,13 @@
           }
 
           result.addToEnvironment(STARTTLS_PROPERTY, "true");
-          if (fDn != null)
+          if (dn != null)
           {
             result.addToEnvironment(Context.SECURITY_AUTHENTICATION , "simple");
-            result.addToEnvironment(Context.SECURITY_PRINCIPAL, fDn);
-            if (fPwd != null)
+            result.addToEnvironment(Context.SECURITY_PRINCIPAL, dn);
+            if (pwd != null)
             {
-              result.addToEnvironment(Context.SECURITY_CREDENTIALS, fPwd);
+              result.addToEnvironment(Context.SECURITY_CREDENTIALS, pwd);
             }
             result.reconnect(null);
           }
@@ -358,12 +325,21 @@
     return env != null ? new Hashtable<>(env) : new Hashtable<String, String>();
   }
 
+  private static Hashtable<String, String> newEnvironmentFrom(String ldapURL, Hashtable<String, String> env)
+  {
+    final Hashtable<String, String> copy = copy(env);
+    copy.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
+    copy.put("java.naming.ldap.attributes.binary", EntryHistorical.HISTORICAL_ATTRIBUTE_NAME);
+    copy.put(Context.PROVIDER_URL, ldapURL);
+    return copy;
+  }
+
   /**
    * Method used to know if we are connected as administrator in a server with a
    * given InitialLdapContext.
    * @param ctx the context.
-   * @return <CODE>true</CODE> if we are connected and read the configuration
-   * and <CODE>false</CODE> otherwise.
+   * @return {@code true} if we are connected and read the configuration
+   * and {@code false} otherwise.
    */
   static boolean connectedAsAdministrativeUser(InitialLdapContext ctx)
   {
@@ -435,15 +411,12 @@
       {
         t.run();
       }
-
     } catch (InterruptedException x)
     {
       // This might happen for problems in sockets
       // so it does not necessarily imply a bug
     }
 
-    boolean throwException = false;
-
     if (timeout > 0 && t.isAlive())
     {
       t.interrupt();
@@ -455,38 +428,39 @@
         // This might happen for problems in sockets
         // so it does not necessarily imply a bug
       }
-      throwException = true;
+      throw connectionTimedOut();
     }
 
-    if (pair[0] == null && pair[1] == null)
+    Object connection = pair[0];
+    Object ex = pair[1];
+    if (connection == null && ex == null)
     {
-      throwException = true;
+      throw connectionTimedOut();
     }
 
-    if (throwException)
+    if (ex != null)
     {
-      NamingException xx = new CommunicationException("Connection timed out");
-      xx.initCause(new ConnectException("Connection timed out"));
-      throw xx;
-    }
-
-    if (pair[1] != null)
-    {
-      if (pair[1] instanceof NamingException)
+      if (ex instanceof NamingException)
       {
-        throw (NamingException) pair[1];
-
-      } else if (pair[1] instanceof RuntimeException)
+        throw (NamingException) ex;
+      }
+      else if (ex instanceof RuntimeException)
       {
-        throw (RuntimeException) pair[1];
-
-      } else if (pair[1] instanceof Throwable)
+        throw (RuntimeException) ex;
+      }
+      else if (ex instanceof Throwable)
       {
-        throw new IllegalStateException("Unexpected throwable occurred",
-            (Throwable) pair[1]);
+        throw new IllegalStateException("Unexpected throwable occurred", (Throwable) ex);
       }
     }
-    return (T) pair[0];
+    return (T) connection;
+  }
+
+  private static NamingException connectionTimedOut()
+  {
+    NamingException xx = new CommunicationException("Connection timed out");
+    xx.initCause(new ConnectException("Connection timed out"));
+    return xx;
   }
 
   /**

--
Gitblit v1.10.0