From e433824f46514e6ed863eb6b95c70038331c8c24 Mon Sep 17 00:00:00 2001
From: Nicolas Capponi <nicolas.capponi@forgerock.com>
Date: Tue, 24 Nov 2015 12:49:54 +0000
Subject: [PATCH] OPENDJ-2260 OPENDJ-2271 Integration of common audit into the server

---
 opendj-server-legacy/src/main/java/org/opends/server/loggers/AbstractLogger.java |   71 ++++++++++++++++++++++++++++-------
 1 files changed, 57 insertions(+), 14 deletions(-)

diff --git a/opendj-server-legacy/src/main/java/org/opends/server/loggers/AbstractLogger.java b/opendj-server-legacy/src/main/java/org/opends/server/loggers/AbstractLogger.java
index 3c03ba8..d00339f 100644
--- a/opendj-server-legacy/src/main/java/org/opends/server/loggers/AbstractLogger.java
+++ b/opendj-server-legacy/src/main/java/org/opends/server/loggers/AbstractLogger.java
@@ -26,6 +26,7 @@
  */
 package org.opends.server.loggers;
 
+import static org.opends.server.loggers.CommonAudit.*;
 import static org.opends.messages.ConfigMessages.*;
 import static org.opends.server.util.StaticUtils.*;
 
@@ -185,7 +186,7 @@
   private final Arg3<Object, Object, Object>
       invalidLoggerClassErrorMessage;
 
-  ServerContext serverContext;
+  private ServerContext serverContext;
 
   /**
    * The constructor for this class.
@@ -226,13 +227,20 @@
     {
       config.addChangeListener((ConfigurationChangeListener) this);
 
-      if(config.isEnabled())
+      if (config.isEnabled())
       {
-        addLogPublisher(getLogPublisher(config));
+        final P logPublisher = isCommonAuditConfig(config) ?
+            getLogPublisherForCommonAudit(config) : getLogPublisher(config);
+        addLogPublisher(logPublisher);
       }
     }
   }
 
+  ServerContext getServerContext()
+  {
+    return serverContext;
+  }
+
   /** {@inheritDoc} */
   @Override
   public boolean isConfigurationAddAcceptable(C config,
@@ -263,7 +271,9 @@
     {
       try
       {
-        addLogPublisher(getLogPublisher(config));
+        final P logPublisher = isCommonAuditConfig(config) ?
+            getLogPublisherForCommonAudit(config) : getLogPublisher(config);
+        addLogPublisher(logPublisher);
       }
       catch(ConfigException e)
       {
@@ -274,8 +284,7 @@
       catch (Exception e)
       {
         LocalizedLogger.getLoggerForThisClass().traceException(e);
-        ccr.addMessage(ERR_CONFIG_LOGGER_CANNOT_CREATE_LOGGER.get(
-            config.dn(), stackTraceToSingleLineString(e)));
+        ccr.addMessage(ERR_CONFIG_LOGGER_CANNOT_CREATE_LOGGER.get(config.dn(), stackTraceToSingleLineString(e)));
         ccr.setResultCode(DirectoryServer.getServerErrorResultCode());
       }
     }
@@ -301,9 +310,9 @@
     final ConfigChangeResult ccr = new ConfigChangeResult();
 
     P logPublisher = findLogPublisher(config.dn());
-    if(logPublisher == null)
+    if (logPublisher == null)
     {
-      if(config.isEnabled())
+      if (config.isEnabled())
       {
         // Needs to be added and enabled.
         return applyConfigurationAdd(config);
@@ -311,26 +320,38 @@
     }
     else
     {
-      if(config.isEnabled())
+      if (config.isEnabled())
       {
-        // The publisher is currently active, so we don't need to do anything.
         // Changes to the class name cannot be
         // applied dynamically, so if the class name did change then
         // indicate that administrative action is required for that
         // change to take effect.
         String className = config.getJavaClass();
-        if(!className.equals(logPublisher.getClass().getName()))
+        if (!className.equals(logPublisher.getClass().getName()))
         {
           ccr.setAdminActionRequired(true);
         }
+        try
+        {
+          if (isCommonAuditConfig(config))
+          {
+            serverContext.getCommonAudit().addOrUpdatePublisher(config);
+          } // else the publisher is currently active, so we don't need to do
+            // anything.
+        }
+        catch (Exception e)
+        {
+          LocalizedLogger.getLoggerForThisClass().traceException(e);
+          ccr.addMessage(ERR_CONFIG_LOGGER_CANNOT_UPDATE_LOGGER.get(config.dn(), stackTraceToSingleLineString(e)));
+          ccr.setResultCode(DirectoryServer.getServerErrorResultCode());
+        }
       }
       else
       {
         // The publisher is being disabled so shut down and remove.
-        removeLogPublisher(logPublisher);
+        return applyConfigurationDelete(config);
       }
     }
-
     return ccr;
   }
 
@@ -342,7 +363,6 @@
     return findLogPublisher(config.dn()) != null;
   }
 
-  /** {@inheritDoc} */
   @Override
   public ConfigChangeResult applyConfigurationDelete(C config)
   {
@@ -352,6 +372,19 @@
     if(logPublisher != null)
     {
       removeLogPublisher(logPublisher);
+      try
+      {
+        if (isCommonAuditConfig(config))
+        {
+          serverContext.getCommonAudit().removePublisher(config);
+        }
+      }
+      catch (ConfigException e)
+      {
+        LocalizedLogger.getLoggerForThisClass().traceException(e);
+        ccr.addMessage(ERR_CONFIG_LOGGER_CANNOT_DELETE_LOGGER.get(config.dn(), stackTraceToSingleLineString(e)));
+        ccr.setResultCode(DirectoryServer.getServerErrorResultCode());
+      }
     }
     else
     {
@@ -391,4 +424,14 @@
     }
   }
 
+  private P getLogPublisherForCommonAudit(C config) throws InitializationException, ConfigException
+  {
+    CommonAudit commonAudit = serverContext.getCommonAudit();
+    commonAudit.addOrUpdatePublisher(config);
+    P logPublisher = getLogPublisher(config);
+    CommonAuditLogPublisher publisher = (CommonAuditLogPublisher) logPublisher;
+    publisher.setRequestHandler(commonAudit.getRequestHandler(config));
+    return logPublisher;
+  }
+
 }

--
Gitblit v1.10.0