From cae23fce9d4549327f10c6efb0d90456813be3f6 Mon Sep 17 00:00:00 2001
From: Jean-Noel Rouvignac <jean-noel.rouvignac@forgerock.com>
Date: Thu, 04 Jul 2013 09:02:30 +0000
Subject: [PATCH] AbstractTextAccessLogPublisher.java: Extracted methods decodePatterns() and filterDN() to remove code duplication.

---
 opends/src/server/org/opends/server/loggers/AbstractTextAccessLogPublisher.java |  147 +++++++++++++-----------------------------------
 1 files changed, 40 insertions(+), 107 deletions(-)

diff --git a/opends/src/server/org/opends/server/loggers/AbstractTextAccessLogPublisher.java b/opends/src/server/org/opends/server/loggers/AbstractTextAccessLogPublisher.java
index e6609a7..885d49c 100644
--- a/opends/src/server/org/opends/server/loggers/AbstractTextAccessLogPublisher.java
+++ b/opends/src/server/org/opends/server/loggers/AbstractTextAccessLogPublisher.java
@@ -26,8 +26,6 @@
  */
 package org.opends.server.loggers;
 
-
-
 import static org.opends.messages.ConfigMessages.*;
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import static org.opends.server.util.StaticUtils.*;
@@ -37,8 +35,10 @@
 import java.util.Collection;
 import java.util.EnumSet;
 import java.util.List;
+import java.util.Set;
 
 import org.opends.messages.Message;
+import org.opends.messages.MessageDescriptor.Arg2;
 import org.opends.server.admin.server.ConfigurationAddListener;
 import org.opends.server.admin.server.ConfigurationChangeListener;
 import org.opends.server.admin.server.ConfigurationDeleteListener;
@@ -55,8 +55,6 @@
 import org.opends.server.loggers.debug.DebugTracer;
 import org.opends.server.types.*;
 
-
-
 /**
  * This class provides the base implementation of the access loggers used by the
  * directory server.
@@ -182,73 +180,38 @@
       clientAddressEqualTo = cfg.getConnectionClientAddressEqualTo();
       clientAddressNotEqualTo = cfg.getConnectionClientAddressNotEqualTo();
 
-      userDNEqualTo = new PatternDN[cfg.getUserDNEqualTo().size()];
-      i = 0;
-      for (final String s : cfg.getUserDNEqualTo())
-      {
-        try
-        {
-          userDNEqualTo[i++] = PatternDN.decode(s);
-        }
-        catch (final DirectoryException e)
-        {
-          final Message m = ERR_CONFIG_LOGGING_INVALID_USER_DN_PATTERN.get(
-              String.valueOf(cfg.dn()), s);
-          throw new ConfigException(m);
-        }
-      }
-
-      userDNNotEqualTo = new PatternDN[cfg.getUserDNNotEqualTo().size()];
-      i = 0;
-      for (final String s : cfg.getUserDNNotEqualTo())
-      {
-        try
-        {
-          userDNNotEqualTo[i++] = PatternDN.decode(s);
-        }
-        catch (final DirectoryException e)
-        {
-          final Message m = ERR_CONFIG_LOGGING_INVALID_USER_DN_PATTERN.get(
-              String.valueOf(cfg.dn()), s);
-          throw new ConfigException(m);
-        }
-      }
+      userDNEqualTo = decodePatterns(cfg.getUserDNEqualTo(),
+              ERR_CONFIG_LOGGING_INVALID_USER_DN_PATTERN, cfg.dn());
+      userDNNotEqualTo = decodePatterns(cfg.getUserDNNotEqualTo(),
+              ERR_CONFIG_LOGGING_INVALID_USER_DN_PATTERN, cfg.dn());
 
       userIsMemberOf = cfg.getUserIsMemberOf().toArray(new DN[0]);
       userIsNotMemberOf = cfg.getUserIsNotMemberOf().toArray(new DN[0]);
 
-      targetDNEqualTo = new PatternDN[cfg.getRequestTargetDNEqualTo().size()];
-      i = 0;
-      for (final String s : cfg.getRequestTargetDNEqualTo())
-      {
-        try
-        {
-          targetDNEqualTo[i++] = PatternDN.decode(s);
-        }
-        catch (final DirectoryException e)
-        {
-          final Message m = ERR_CONFIG_LOGGING_INVALID_TARGET_DN_PATTERN.get(
-              String.valueOf(cfg.dn()), s);
-          throw new ConfigException(m);
-        }
-      }
+      targetDNEqualTo = decodePatterns(cfg.getRequestTargetDNEqualTo(),
+              ERR_CONFIG_LOGGING_INVALID_TARGET_DN_PATTERN, cfg.dn());
+      targetDNNotEqualTo = decodePatterns(cfg.getRequestTargetDNNotEqualTo(),
+              ERR_CONFIG_LOGGING_INVALID_TARGET_DN_PATTERN, cfg.dn());
+    }
 
-      targetDNNotEqualTo = new PatternDN[cfg.getRequestTargetDNNotEqualTo()
-          .size()];
-      i = 0;
-      for (final String s : cfg.getRequestTargetDNNotEqualTo())
+    private PatternDN[] decodePatterns(Set<String> patterns,
+        Arg2<CharSequence, CharSequence> errorMessage, DN dn)
+        throws ConfigException
+    {
+      PatternDN[] results = new PatternDN[patterns.size()];
+      int i = 0;
+      for (final String s : patterns)
       {
         try
         {
-          targetDNNotEqualTo[i++] = PatternDN.decode(s);
+          results[i++] = PatternDN.decode(s);
         }
         catch (final DirectoryException e)
         {
-          final Message m = ERR_CONFIG_LOGGING_INVALID_TARGET_DN_PATTERN.get(
-              String.valueOf(cfg.dn()), s);
-          throw new ConfigException(m);
+          throw new ConfigException(errorMessage.get(String.valueOf(dn), s));
         }
       }
+      return results;
     }
 
 
@@ -497,44 +460,37 @@
         }
         catch (final DirectoryException e)
         {
-          // The DN raw target DN was invalid. It will never match any
-          // not-equal-to nor equal-to patterns, so return appropriate result.
-          if (targetDNEqualTo.length != 0)
-          {
-            // Invalid DN will never match equal-to patterns.
-            return false;
-          }
-          else
-          {
-            // Invalid DN does not match any not-equal-to patterns.
-            return true;
-          }
+          // The DN raw target DN was invalid:
+          // Invalid DN will never match equal-to patterns,
+          // Invalid DN does not match any not-equal-to patterns,
+          // so return appropriate result.
+          return targetDNEqualTo.length == 0;
         }
       }
 
-      if (targetDNNotEqualTo.length > 0)
+      return filterDN(targetDN, targetDNNotEqualTo, targetDNEqualTo);
+    }
+
+    private boolean filterDN(final DN dn, PatternDN[] notEqualTo,
+        PatternDN[] equalTo)
+    {
+      for (final PatternDN pattern : notEqualTo)
       {
-        for (final PatternDN pattern : targetDNNotEqualTo)
+        if (pattern.matchesDN(dn))
         {
-          if (pattern.matchesDN(targetDN))
-          {
-            return false;
-          }
+          return false;
         }
       }
 
-      if (targetDNEqualTo.length > 0)
+      for (final PatternDN pattern : equalTo)
       {
-        for (final PatternDN pattern : targetDNEqualTo)
+        if (pattern.matchesDN(dn))
         {
-          if (pattern.matchesDN(targetDN))
-          {
-            return true;
-          }
+          return true;
         }
       }
 
-      // The target DN did not match.
+      // The DN did not match.
       return false;
     }
 
@@ -677,30 +633,7 @@
         return userDNEqualTo.length == 0;
       }
 
-      if (userDNNotEqualTo.length > 0)
-      {
-        for (final PatternDN pattern : userDNNotEqualTo)
-        {
-          if (pattern.matchesDN(userDN))
-          {
-            return false;
-          }
-        }
-      }
-
-      if (userDNEqualTo.length > 0)
-      {
-        for (final PatternDN pattern : userDNEqualTo)
-        {
-          if (pattern.matchesDN(userDN))
-          {
-            return true;
-          }
-        }
-      }
-
-      // The user DN did not match.
-      return false;
+      return filterDN(userDN, userDNNotEqualTo, userDNEqualTo);
     }
 
 

--
Gitblit v1.10.0