From 1345ac0dfae9a555abb7b74ed48452d9bc92b8c3 Mon Sep 17 00:00:00 2001
From: Jean-Noel Rouvignac <jean-noel.rouvignac@forgerock.com>
Date: Tue, 22 Jul 2014 13:44:30 +0000
Subject: [PATCH] Checkpoint commit for OPENDJ-1206 : Create a new ReplicationBackend/ChangelogBackend to support cn=changelog

---
 opends/src/server/org/opends/server/backends/task/TaskBackend.java |  372 +++++++++++++++++-----------------------------------
 1 files changed, 121 insertions(+), 251 deletions(-)

diff --git a/opends/src/server/org/opends/server/backends/task/TaskBackend.java b/opends/src/server/org/opends/server/backends/task/TaskBackend.java
index 99bb124..105ea30 100644
--- a/opends/src/server/org/opends/server/backends/task/TaskBackend.java
+++ b/opends/src/server/org/opends/server/backends/task/TaskBackend.java
@@ -26,8 +26,6 @@
  */
 package org.opends.server.backends.task;
 
-
-
 import java.io.*;
 import java.net.InetAddress;
 import java.security.MessageDigest;
@@ -41,7 +39,6 @@
 import javax.crypto.Mac;
 
 import org.opends.messages.Message;
-import org.opends.server.admin.Configuration;
 import org.opends.server.admin.server.ConfigurationChangeListener;
 import org.opends.server.admin.std.server.TaskBackendCfg;
 import org.opends.server.api.Backend;
@@ -59,15 +56,13 @@
 import static org.opends.server.util.ServerConstants.*;
 import static org.opends.server.util.StaticUtils.*;
 
-
-
 /**
  * This class provides an implementation of a Directory Server backend that may
  * be used to execute various kinds of administrative tasks on a one-time or
  * recurring basis.
  */
 public class TaskBackend
-       extends Backend
+       extends Backend<TaskBackendCfg>
        implements ConfigurationChangeListener<TaskBackendCfg>
 {
   /**
@@ -77,44 +72,46 @@
 
 
 
-  // The current configuration state.
+  /** The current configuration state. */
   private TaskBackendCfg currentConfig;
 
-  // The DN of the configuration entry for this backend.
+  /** The DN of the configuration entry for this backend. */
   private DN configEntryDN;
 
-  // The DN of the entry that will serve as the parent for all recurring task
-  // entries.
+  /**
+   * The DN of the entry that will serve as the parent for all recurring task
+   * entries.
+   */
   private DN recurringTaskParentDN;
 
-  // The DN of the entry that will serve as the parent for all scheduled task
-  // entries.
+  /**
+   * The DN of the entry that will serve as the parent for all scheduled task
+   * entries.
+   */
   private DN scheduledTaskParentDN;
 
-  // The DN of the entry that will serve as the root for all task entries.
+  /** The DN of the entry that will serve as the root for all task entries. */
   private DN taskRootDN;
 
-  // The set of base DNs defined for this backend.
+  /** The set of base DNs defined for this backend. */
   private DN[] baseDNs;
 
-  // The set of supported controls for this backend.
-  private HashSet<String> supportedControls;
-
-  // The set of supported features for this backend.
-  private HashSet<String> supportedFeatures;
-
-  // The length of time in seconds after a task is completed that it should be
-  // removed from the set of scheduled tasks.
+  /**
+   * The length of time in seconds after a task is completed that it should be
+   * removed from the set of scheduled tasks.
+   */
   private long retentionTime;
 
-  // The e-mail address to use for the sender from notification messages.
+  /** The e-mail address to use for the sender from notification messages. */
   private String notificationSenderAddress;
 
-  // The path to the task backing file.
+  /** The path to the task backing file. */
   private String taskBackingFile;
 
-  // The task scheduler that will be responsible for actually invoking scheduled
-  // tasks.
+  /**
+   * The task scheduler that will be responsible for actually invoking scheduled
+   * tasks.
+   */
   private TaskScheduler taskScheduler;
 
 
@@ -133,19 +130,13 @@
 
 
 
-  /**
-   * {@inheritDoc}
-   */
-  @Override()
-  public void configureBackend(Configuration config)
-         throws ConfigException
+  /** {@inheritDoc} */
+  @Override
+  public void configureBackend(TaskBackendCfg cfg) throws ConfigException
   {
-    Validator.ensureNotNull(config);
-    Validator.ensureTrue(config instanceof TaskBackendCfg);
+    Validator.ensureNotNull(cfg);
 
-    TaskBackendCfg cfg = (TaskBackendCfg)config;
-
-    DN[] baseDNs = new DN[cfg.getBaseDN().size()];
+    final DN[] baseDNs = new DN[cfg.getBaseDN().size()];
     cfg.getBaseDN().toArray(baseDNs);
 
     ConfigEntry configEntry = DirectoryServer.getConfigEntry(cfg.dn());
@@ -155,10 +146,9 @@
 
     // Make sure that the provided set of base DNs contains exactly one value.
     // We will only allow one base for task entries.
-    if ((baseDNs == null) || (baseDNs.length == 0))
+    if (baseDNs.length == 0)
     {
-      Message message = ERR_TASKBE_NO_BASE_DNS.get();
-      throw new ConfigException(message);
+      throw new ConfigException(ERR_TASKBE_NO_BASE_DNS.get());
     }
     else if (baseDNs.length > 1)
     {
@@ -172,7 +162,7 @@
       taskRootDN = baseDNs[0];
 
       String recurringTaskBaseString = RECURRING_TASK_BASE_RDN + "," +
-                                       taskRootDN.toString();
+                                       taskRootDN;
       try
       {
         recurringTaskParentDN = DN.decode(recurringTaskBaseString);
@@ -191,7 +181,7 @@
       }
 
       String scheduledTaskBaseString = SCHEDULED_TASK_BASE_RDN + "," +
-                                       taskRootDN.toString();
+                                       taskRootDN;
       try
       {
         scheduledTaskParentDN = DN.decode(scheduledTaskBaseString);
@@ -235,19 +225,13 @@
     // Get the path to the task data backing file.
     taskBackingFile = cfg.getTaskBackingFile();
 
-    // Define an empty sets for the supported controls and features.
-    supportedControls = new HashSet<String>(0);
-    supportedFeatures = new HashSet<String>(0);
-
     currentConfig = cfg;
   }
 
 
 
-  /**
-   * {@inheritDoc}
-   */
-  @Override()
+  /** {@inheritDoc} */
+  @Override
   public void initializeBackend()
          throws ConfigException, InitializationException
   {
@@ -280,10 +264,8 @@
 
 
 
-  /**
-   * {@inheritDoc}
-   */
-  @Override()
+  /** {@inheritDoc} */
+  @Override
   public void finalizeBackend()
   {
     currentConfig.removeTaskChangeListener(this);
@@ -332,10 +314,8 @@
 
 
 
-  /**
-   * {@inheritDoc}
-   */
-  @Override()
+  /** {@inheritDoc} */
+  @Override
   public DN[] getBaseDNs()
   {
     return baseDNs;
@@ -343,10 +323,8 @@
 
 
 
-  /**
-   * {@inheritDoc}
-   */
-  @Override()
+  /** {@inheritDoc} */
+  @Override
   public long getEntryCount()
   {
     if (taskScheduler != null)
@@ -359,10 +337,8 @@
 
 
 
-  /**
-   * {@inheritDoc}
-   */
-  @Override()
+  /** {@inheritDoc} */
+  @Override
   public boolean isLocal()
   {
     // For the purposes of this method, this is a local backend.
@@ -371,10 +347,8 @@
 
 
 
-  /**
-   * {@inheritDoc}
-   */
-  @Override()
+  /** {@inheritDoc} */
+  @Override
   public boolean isIndexed(AttributeType attributeType, IndexType indexType)
   {
     // All searches in this backend will always be considered indexed.
@@ -383,10 +357,8 @@
 
 
 
-  /**
-   * {@inheritDoc}
-   */
-  @Override()
+  /** {@inheritDoc} */
+  @Override
   public ConditionResult hasSubordinates(DN entryDN)
          throws DirectoryException
   {
@@ -407,10 +379,8 @@
 
 
 
-  /**
-   * {@inheritDoc}
-   */
-  @Override()
+  /** {@inheritDoc} */
+  @Override
   public long numSubordinates(DN entryDN, boolean subtree)
       throws DirectoryException
   {
@@ -465,10 +435,8 @@
 
 
 
-  /**
-   * {@inheritDoc}
-   */
-  @Override()
+  /** {@inheritDoc} */
+  @Override
   public Entry getEntry(DN entryDN)
          throws DirectoryException
   {
@@ -523,10 +491,8 @@
 
 
 
-  /**
-   * {@inheritDoc}
-   */
-  @Override()
+  /** {@inheritDoc} */
+  @Override
   public void addEntry(Entry entry, AddOperation addOperation)
          throws DirectoryException
   {
@@ -571,10 +537,8 @@
 
 
 
-  /**
-   * {@inheritDoc}
-   */
-  @Override()
+  /** {@inheritDoc} */
+  @Override
   public void deleteEntry(DN entryDN, DeleteOperation deleteOperation)
          throws DirectoryException
   {
@@ -653,10 +617,8 @@
 
 
 
-  /**
-   * {@inheritDoc}
-   */
-  @Override()
+  /** {@inheritDoc} */
+  @Override
   public void replaceEntry(Entry oldEntry, Entry newEntry,
       ModifyOperation modifyOperation) throws DirectoryException
   {
@@ -855,24 +817,20 @@
 
 
 
-  /**
-   * {@inheritDoc}
-   */
-  @Override()
+  /** {@inheritDoc} */
+  @Override
   public void renameEntry(DN currentDN, Entry entry,
                                    ModifyDNOperation modifyDNOperation)
          throws DirectoryException
   {
-    Message message = ERR_TASKBE_MODIFY_DN_NOT_SUPPORTED.get();
-    throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
+    throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM,
+        ERR_BACKEND_MODIFY_DN_NOT_SUPPORTED.get(String.valueOf(currentDN), getBackendID()));
   }
 
 
 
-  /**
-   * {@inheritDoc}
-   */
-  @Override()
+  /** {@inheritDoc} */
+  @Override
   public void search(SearchOperation searchOperation)
          throws DirectoryException, CanceledOperationException {
     // Look at the base DN and scope for the search operation to decide which
@@ -975,9 +933,8 @@
                                          scheduledTaskParentDN, null);
           }
 
-          if (((searchScope == SearchScope.BASE_OBJECT) ||
-               (searchScope == SearchScope.WHOLE_SUBTREE)) &&
-              searchFilter.matchesEntry(e))
+          if ((searchScope == SearchScope.BASE_OBJECT || searchScope == SearchScope.WHOLE_SUBTREE)
+              && searchFilter.matchesEntry(e))
           {
             searchOperation.returnEntry(e, null);
           }
@@ -1004,9 +961,8 @@
                                          recurringTaskParentDN, null);
           }
 
-          if (((searchScope == SearchScope.BASE_OBJECT) ||
-               (searchScope == SearchScope.WHOLE_SUBTREE)) &&
-              searchFilter.matchesEntry(e))
+          if ((searchScope == SearchScope.BASE_OBJECT || searchScope == SearchScope.WHOLE_SUBTREE)
+              && searchFilter.matchesEntry(e))
           {
             searchOperation.returnEntry(e, null);
           }
@@ -1030,12 +986,9 @@
     if (searchRoot)
     {
       Entry e = taskScheduler.getTaskRootEntry();
-      if (searchFilter.matchesEntry(e))
+      if (searchFilter.matchesEntry(e) && !searchOperation.returnEntry(e, null))
       {
-        if (! searchOperation.returnEntry(e, null))
-        {
-          return;
-        }
+        return;
       }
     }
 
@@ -1043,75 +996,59 @@
     if (searchScheduledParent)
     {
       Entry e = taskScheduler.getScheduledTaskParentEntry();
-      if (searchFilter.matchesEntry(e))
+      if (searchFilter.matchesEntry(e) && !searchOperation.returnEntry(e, null))
       {
-        if (! searchOperation.returnEntry(e, null))
-        {
-          return;
-        }
+        return;
       }
     }
 
 
-    if (searchScheduledTasks)
+    if (searchScheduledTasks
+        && !taskScheduler.searchScheduledTasks(searchOperation))
     {
-      if (! taskScheduler.searchScheduledTasks(searchOperation))
-      {
-        return;
-      }
+      return;
     }
 
 
     if (searchRecurringParent)
     {
       Entry e = taskScheduler.getRecurringTaskParentEntry();
-      if (searchFilter.matchesEntry(e))
-      {
-        if (! searchOperation.returnEntry(e, null))
-        {
-          return;
-        }
-      }
-    }
-
-
-    if (searchRecurringTasks)
-    {
-      if (! taskScheduler.searchRecurringTasks(searchOperation))
+      if (searchFilter.matchesEntry(e) && !searchOperation.returnEntry(e, null))
       {
         return;
       }
     }
+
+
+    if (searchRecurringTasks
+        && !taskScheduler.searchRecurringTasks(searchOperation))
+    {
+      return;
+    }
   }
 
 
 
-  /**
-   * {@inheritDoc}
-   */
-  @Override()
-  public HashSet<String> getSupportedControls()
+  /** {@inheritDoc} */
+  @Override
+  public Set<String> getSupportedControls()
   {
-    return supportedControls;
+    return Collections.emptySet();
   }
 
 
 
-  /**
-   * {@inheritDoc}
-   */
-  @Override()
-  public HashSet<String> getSupportedFeatures()
+  /** {@inheritDoc} */
+  @Override
+  public Set<String> getSupportedFeatures()
   {
-    return supportedFeatures;
+    return Collections.emptySet();
   }
 
 
 
-  /**
-   * {@inheritDoc}
-   */
-  @Override()
+  /** {@inheritDoc} */
+  @Override
   public boolean supportsLDIFExport()
   {
     // LDIF exports are supported.
@@ -1120,10 +1057,8 @@
 
 
 
-  /**
-   * {@inheritDoc}
-   */
-  @Override()
+  /** {@inheritDoc} */
+  @Override
   public void exportLDIF(LDIFExportConfig exportConfig)
          throws DirectoryException
   {
@@ -1203,88 +1138,47 @@
     }
     finally
     {
-      try
-      {
-        ldifWriter.close();
-      }
-      catch (Exception e)
-      {
-        if (debugEnabled())
-        {
-          TRACER.debugCaught(DebugLogLevel.ERROR, e);
-        }
-      }
-      try
-      {
-        ldifReader.close();
-      }
-      catch (Exception e)
-      {
-        if (debugEnabled())
-        {
-          TRACER.debugCaught(DebugLogLevel.ERROR, e);
-        }
-      }
+      close(ldifWriter, ldifReader);
     }
   }
 
-
-
-  /**
-   * {@inheritDoc}
-   */
-  @Override()
+  /** {@inheritDoc} */
+  @Override
   public boolean supportsLDIFImport()
   {
-    // This backend does not support LDIF imports.
     return false;
   }
 
-
-
-  /**
-   * {@inheritDoc}
-   */
-  @Override()
+  /** {@inheritDoc} */
+  @Override
   public LDIFImportResult importLDIF(LDIFImportConfig importConfig)
          throws DirectoryException
   {
-    // This backend does not support LDIF imports.
-    Message message = ERR_TASKBE_IMPORT_NOT_SUPPORTED.get();
-    throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
+    throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM,
+        ERR_BACKEND_IMPORT_NOT_SUPPORTED.get(getBackendID()));
   }
 
-
-
-  /**
-   * {@inheritDoc}
-   */
-  @Override()
+  /** {@inheritDoc} */
+  @Override
   public boolean supportsBackup()
   {
-    // This backend does provide a backup/restore mechanism.
     return true;
   }
 
 
 
-  /**
-   * {@inheritDoc}
-   */
-  @Override()
+  /** {@inheritDoc} */
+  @Override
   public boolean supportsBackup(BackupConfig backupConfig,
                                 StringBuilder unsupportedReason)
   {
-    // This backend does provide a backup/restore mechanism.
     return true;
   }
 
 
 
-  /**
-   * {@inheritDoc}
-   */
-  @Override()
+  /** {@inheritDoc} */
+  @Override
   public void createBackup(BackupConfig backupConfig)
          throws DirectoryException
   {
@@ -1497,16 +1391,7 @@
       if (debugEnabled()) {
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
-
-      try {
-        inputStream.close();
-      } catch (Exception e2) {
-      }
-
-      try {
-        zipStream.close();
-      } catch (Exception e2) {
-      }
+      close(inputStream, zipStream);
 
       message = ERR_TASKS_BACKUP_CANNOT_BACKUP_TASKS_FILE.get(baseName,
         stackTraceToSingleLineString(e));
@@ -1580,10 +1465,8 @@
 
 
 
-  /**
-   * {@inheritDoc}
-   */
-  @Override()
+  /** {@inheritDoc} */
+  @Override
   public void removeBackup(BackupDirectory backupDirectory,
                            String backupID)
          throws DirectoryException
@@ -1640,10 +1523,8 @@
 
 
 
-  /**
-   * {@inheritDoc}
-   */
-  @Override()
+  /** {@inheritDoc} */
+  @Override
   public boolean supportsRestore()
   {
     // This backend does provide a backup/restore mechanism.
@@ -1652,10 +1533,8 @@
 
 
 
-  /**
-   * {@inheritDoc}
-   */
-  @Override()
+  /** {@inheritDoc} */
+  @Override
   public void restoreBackup(RestoreConfig restoreConfig)
          throws DirectoryException
   {
@@ -1973,22 +1852,17 @@
 
 
 
-  /**
-   * {@inheritDoc}
-   */
-  @Override()
-  public boolean isConfigurationAcceptable(Configuration configuration,
+  /** {@inheritDoc} */
+  @Override
+  public boolean isConfigurationAcceptable(TaskBackendCfg config,
                                            List<Message> unacceptableReasons)
   {
-    TaskBackendCfg config = (TaskBackendCfg) configuration;
     return isConfigAcceptable(config, unacceptableReasons, null);
   }
 
 
 
-  /**
-   * {@inheritDoc}
-   */
+  /** {@inheritDoc} */
   @Override
   public boolean isConfigurationChangeAcceptable(TaskBackendCfg configEntry,
                                             List<Message> unacceptableReasons)
@@ -2024,8 +1898,8 @@
     try
     {
       String tmpBackingFile = config.getTaskBackingFile();
-      if ((taskBackingFile == null) ||
-          (! taskBackingFile.equals(tmpBackingFile)))
+      if (taskBackingFile == null ||
+          !taskBackingFile.equals(tmpBackingFile))
       {
         File f = getFileForPath(tmpBackingFile);
         if (f.exists())
@@ -2084,9 +1958,7 @@
 
 
 
-  /**
-   * {@inheritDoc}
-   */
+  /** {@inheritDoc} */
   @Override
   public ConfigChangeResult applyConfigurationChange(TaskBackendCfg configEntry)
   {
@@ -2325,9 +2197,7 @@
 
 
 
-  /**
-   * {@inheritDoc}
-   */
+  /** {@inheritDoc} */
   @Override
   public void preloadEntryCache() throws UnsupportedOperationException {
     throw new UnsupportedOperationException("Operation not supported.");

--
Gitblit v1.10.0