From 5203b37903fe2731620fb5b910cda72a238fac11 Mon Sep 17 00:00:00 2001
From: Jean-Noel Rouvignac <jean-noel.rouvignac@forgerock.com>
Date: Wed, 24 Apr 2013 10:17:09 +0000
Subject: [PATCH] OPENDJ-879 (CR-1600) Add HTTP access log

---
 opends/src/server/org/opends/server/loggers/AccessLogger.java |  109 +++++++++++++++---------------------------------------
 1 files changed, 31 insertions(+), 78 deletions(-)

diff --git a/opends/src/server/org/opends/server/loggers/AccessLogger.java b/opends/src/server/org/opends/server/loggers/AccessLogger.java
index d3b1e84..dbd0dc5 100644
--- a/opends/src/server/org/opends/server/loggers/AccessLogger.java
+++ b/opends/src/server/org/opends/server/loggers/AccessLogger.java
@@ -23,38 +23,30 @@
  *
  *
  *      Copyright 2006-2009 Sun Microsystems, Inc.
- *      Portions copyright 2011 ForgeRock AS.
+ *      Portions copyright 2011-2013 ForgeRock AS
  */
 package org.opends.server.loggers;
-import org.opends.messages.Message;
+import static org.opends.messages.ConfigMessages.*;
+import static org.opends.server.loggers.debug.DebugLogger.*;
+import static org.opends.server.util.StaticUtils.*;
 
-
-
-import java.util.concurrent.CopyOnWriteArrayList;
-import java.util.List;
 import java.util.ArrayList;
-import java.lang.reflect.Method;
-import java.lang.reflect.InvocationTargetException;
+import java.util.List;
+import java.util.concurrent.CopyOnWriteArrayList;
 
-import org.opends.server.api.ClientConnection;
-import org.opends.server.api.AccessLogPublisher;
-import org.opends.server.core.*;
-import org.opends.server.types.*;
-import org.opends.server.admin.std.server.AccessLogPublisherCfg;
-import org.opends.server.admin.std.meta.AccessLogPublisherCfgDefn;
+import org.opends.messages.Message;
+import org.opends.server.admin.ClassPropertyDefinition;
 import org.opends.server.admin.server.ConfigurationAddListener;
 import org.opends.server.admin.server.ConfigurationChangeListener;
 import org.opends.server.admin.server.ConfigurationDeleteListener;
-import org.opends.server.admin.ClassPropertyDefinition;
+import org.opends.server.admin.std.meta.AccessLogPublisherCfgDefn;
+import org.opends.server.admin.std.server.AccessLogPublisherCfg;
+import org.opends.server.api.AccessLogPublisher;
+import org.opends.server.api.ClientConnection;
 import org.opends.server.config.ConfigException;
-import static org.opends.server.loggers.debug.DebugLogger.*;
+import org.opends.server.core.*;
 import org.opends.server.loggers.debug.DebugTracer;
-import static org.opends.messages.ConfigMessages.
-    ERR_CONFIG_LOGGER_CANNOT_CREATE_LOGGER;
-import static org.opends.messages.ConfigMessages.
-    ERR_CONFIG_LOGGER_INVALID_ACCESS_LOGGER_CLASS;
-
-import static org.opends.server.util.StaticUtils.stackTraceToSingleLineString;
+import org.opends.server.types.*;
 
 
 /**
@@ -165,6 +157,7 @@
   /**
    * {@inheritDoc}
    */
+  @Override
   public boolean isConfigurationAddAcceptable(
       AccessLogPublisherCfg config,
       List<Message> unacceptableReasons)
@@ -176,6 +169,7 @@
   /**
    * {@inheritDoc}
    */
+  @Override
   public boolean isConfigurationChangeAcceptable(
       AccessLogPublisherCfg config,
       List<Message> unacceptableReasons)
@@ -187,6 +181,7 @@
   /**
    * {@inheritDoc}
    */
+  @Override
   public ConfigChangeResult applyConfigurationAdd(AccessLogPublisherCfg config)
   {
     // Default result code.
@@ -232,6 +227,7 @@
   /**
    * {@inheritDoc}
    */
+  @Override
   public ConfigChangeResult applyConfigurationChange(
       AccessLogPublisherCfg config)
   {
@@ -288,6 +284,7 @@
   /**
    * {@inheritDoc}
    */
+  @Override
   public boolean isConfigurationDeleteAcceptable(
       AccessLogPublisherCfg config,
       List<Message> unacceptableReasons)
@@ -311,6 +308,7 @@
   /**
    * {@inheritDoc}
    */
+  @Override
   public ConfigChangeResult applyConfigurationDelete(
       AccessLogPublisherCfg config)
   {
@@ -348,13 +346,12 @@
     AccessLogPublisherCfgDefn d = AccessLogPublisherCfgDefn.getInstance();
     ClassPropertyDefinition pd =
         d.getJavaClassPropertyDefinition();
-    // Load the class and cast it to a DebugLogPublisher.
-    AccessLogPublisher<?> publisher = null;
-    Class<? extends AccessLogPublisher<?>> theClass;
     try {
-      theClass = (Class<? extends AccessLogPublisher<?>>)
-        pd.loadClass(className, AccessLogPublisher.class);
-      publisher = theClass.newInstance();
+      // Load the class and cast it to a AccessLogPublisher.
+      AccessLogPublisher<AccessLogPublisherCfg> publisher =
+          pd.loadClass(className, AccessLogPublisher.class).newInstance();
+      // The class is valid as far as we can tell.
+      return publisher.isConfigurationAcceptable(config, unacceptableReasons);
     } catch (Exception e) {
       Message message = ERR_CONFIG_LOGGER_INVALID_ACCESS_LOGGER_CLASS.get(
           className,
@@ -363,31 +360,6 @@
       unacceptableReasons.add(message);
       return false;
     }
-    // Check that the implementation class implements the correct interface.
-    try {
-      // Determine the initialization method to use: it must take a
-      // single parameter which is the exact type of the configuration
-      // object.
-      Method method = theClass.getMethod("isConfigurationAcceptable",
-          AccessLogPublisherCfg.class,
-          List.class);
-      Boolean acceptable = (Boolean) method.invoke(publisher, config,
-          unacceptableReasons);
-
-      if (! acceptable)
-      {
-        return false;
-      }
-    } catch (Exception e) {
-      Message message = ERR_CONFIG_LOGGER_INVALID_ACCESS_LOGGER_CLASS.get(
-          className,
-          config.dn().toString(),
-          String.valueOf(e));
-      unacceptableReasons.add(message);
-      return false;
-    }
-    // The class is valid as far as we can tell.
-    return true;
   }
 
   private AccessLogPublisher<?> getAccessPublisher(AccessLogPublisherCfg config)
@@ -396,29 +368,13 @@
     AccessLogPublisherCfgDefn d = AccessLogPublisherCfgDefn.getInstance();
     ClassPropertyDefinition pd =
         d.getJavaClassPropertyDefinition();
-    // Load the class and cast it to a AccessLogPublisher.
-    AccessLogPublisher<?> accessLogPublisher;
     try {
-      @SuppressWarnings("unchecked")
-      Class<? extends AccessLogPublisher<?>> theClass =
-        (Class<? extends AccessLogPublisher<?>>) pd
-          .loadClass(className, AccessLogPublisher.class);
-      accessLogPublisher = theClass.newInstance();
-
-      // Determine the initialization method to use: it must take a
-      // single parameter which is the exact type of the configuration
-      // object.
-      Method method = theClass.getMethod("initializeAccessLogPublisher", config
-          .configurationClass());
-      method.invoke(accessLogPublisher, config);
-    }
-    catch (InvocationTargetException ite)
-    {
-      // Rethrow the exceptions thrown be the invoked method.
-      Throwable e = ite.getTargetException();
-      Message message = ERR_CONFIG_LOGGER_INVALID_ACCESS_LOGGER_CLASS.get(
-          className, config.dn().toString(), stackTraceToSingleLineString(e));
-      throw new ConfigException(message, e);
+      // Load the class and cast it to a AccessLogPublisher.
+      AccessLogPublisher<AccessLogPublisherCfg> accessLogPublisher =
+          pd.loadClass(className, AccessLogPublisher.class).newInstance();
+      accessLogPublisher.initializeLogPublisher(config);
+      // The access publisher has been successfully initialized.
+      return accessLogPublisher;
     }
     catch (Exception e)
     {
@@ -426,9 +382,6 @@
           className, config.dn().toString(), String.valueOf(e));
       throw new ConfigException(message, e);
     }
-
-    // The access publisher has been successfully initialized.
-    return accessLogPublisher;
   }
 
 

--
Gitblit v1.10.0