From 4c6354275265e835bbab21af899df63b4dc0ebcb Mon Sep 17 00:00:00 2001
From: neil_a_wilson <neil_a_wilson@localhost>
Date: Wed, 26 Sep 2007 00:49:44 +0000
Subject: [PATCH] Update the backend API to include new isIndexed methods that can be used to determine whether a given attribute is indexed in a specified manner, or that can be used to determine whether a specified filter is indexed.  At present, all backends except the JE backend and the replication backend are considered always indexed for all operations.  The JE backend is only considered indexed based on its index configuration.  The replication backend is never considered indexed.

---
 opends/src/server/org/opends/server/extensions/ConfigFileHandler.java |  380 +++++++++++++++++++++---------------------------------
 1 files changed, 149 insertions(+), 231 deletions(-)

diff --git a/opends/src/server/org/opends/server/extensions/ConfigFileHandler.java b/opends/src/server/org/opends/server/extensions/ConfigFileHandler.java
index e1ddbf4..25c0244 100644
--- a/opends/src/server/org/opends/server/extensions/ConfigFileHandler.java
+++ b/opends/src/server/org/opends/server/extensions/ConfigFileHandler.java
@@ -56,6 +56,8 @@
 import javax.crypto.Mac;
 
 import org.opends.messages.Message;
+import org.opends.messages.MessageBuilder;
+import org.opends.server.admin.Configuration;
 import org.opends.server.api.AlertGenerator;
 import org.opends.server.api.ClientConnection;
 import org.opends.server.api.ConfigAddListener;
@@ -70,13 +72,34 @@
 import org.opends.server.core.ModifyOperation;
 import org.opends.server.core.ModifyDNOperation;
 import org.opends.server.core.SearchOperation;
+import org.opends.server.loggers.debug.DebugTracer;
 import org.opends.server.protocols.asn1.ASN1OctetString;
 import org.opends.server.schema.GeneralizedTimeSyntax;
 import org.opends.server.tools.LDIFModify;
+import org.opends.server.types.AttributeType;
+import org.opends.server.types.BackupConfig;
+import org.opends.server.types.BackupDirectory;
+import org.opends.server.types.BackupInfo;
+import org.opends.server.types.ConditionResult;
+import org.opends.server.types.ConfigChangeResult;
+import org.opends.server.types.CryptoManager;
+import org.opends.server.types.DebugLogLevel;
 import org.opends.server.types.DirectoryEnvironmentConfig;
-
-
-import org.opends.server.types.*;
+import org.opends.server.types.DirectoryException;
+import org.opends.server.types.DN;
+import org.opends.server.types.Entry;
+import org.opends.server.types.ExistingFileBehavior;
+import org.opends.server.types.IndexType;
+import org.opends.server.types.InitializationException;
+import org.opends.server.types.LDIFExportConfig;
+import org.opends.server.types.LDIFImportConfig;
+import org.opends.server.types.LDIFImportResult;
+import org.opends.server.types.Modification;
+import org.opends.server.types.Privilege;
+import org.opends.server.types.RestoreConfig;
+import org.opends.server.types.ResultCode;
+import org.opends.server.types.SearchFilter;
+import org.opends.server.types.SearchScope;
 import org.opends.server.util.DynamicConstants;
 import org.opends.server.util.LDIFException;
 import org.opends.server.util.LDIFReader;
@@ -87,12 +110,9 @@
 import static org.opends.server.extensions.ExtensionsConstants.*;
 import static org.opends.server.loggers.ErrorLogger.*;
 import static org.opends.server.loggers.debug.DebugLogger.*;
-import org.opends.server.loggers.debug.DebugTracer;
 import static org.opends.messages.ConfigMessages.*;
-import org.opends.messages.MessageBuilder;
 import static org.opends.server.util.ServerConstants.*;
 import static org.opends.server.util.StaticUtils.*;
-import org.opends.server.admin.Configuration;
 
 
 /**
@@ -108,6 +128,8 @@
    */
   private static final DebugTracer TRACER = getTracer();
 
+
+
   /**
    * The fully-qualified name of this class.
    */
@@ -117,6 +139,22 @@
 
 
   /**
+   * The set of supported control OIDs for this backend.
+   */
+  private static final HashSet<String> SUPPORTED_CONTROLS =
+                            new HashSet<String>(0);
+
+
+
+  /**
+   * The set of supported feature OIDs for this backend.
+   */
+  private static final HashSet<String> SUPPORTED_FEATURES =
+                            new HashSet<String>(0);
+
+
+
+  /**
    * The privilege array containing both the CONFIG_READ and CONFIG_WRITE
    * privileges.
    */
@@ -177,20 +215,9 @@
 
 
   /**
-   * Bootstraps this configuration handler using the information in the provided
-   * configuration file.  Depending on this configuration handler
-   * implementation, the provided file may contain either the entire server
-   * configuration or information that is needed to access the configuration in
-   * some other location or repository.
-   *
-   * @param  configFile   The path to the file to use to initialize this
-   *                      configuration handler.
-   * @param  checkSchema  Indicates whether to perform schema checking on the
-   *                      configuration data.
-   *
-   * @throws  InitializationException  If a problem occurs while attempting to
-   *                                   initialize this configuration handler.
+   * {@inheritDoc}
    */
+  @Override()
   public void initializeConfigHandler(String configFile, boolean checkSchema)
          throws InitializationException
   {
@@ -1015,12 +1042,9 @@
 
 
   /**
-   * Finalizes this configuration handler so that it will release any resources
-   * associated with it so that it will no longer be used.  This will be called
-   * when the Directory Server is shutting down, as well as in the startup
-   * process once the schema has been read so that the configuration can be
-   * re-read using the updated schema.
+   * {@inheritDoc}
    */
+  @Override()
   public void finalizeConfigHandler()
   {
     try
@@ -1039,33 +1063,20 @@
 
 
   /**
-   * Performs any necessary work to finalize this backend, including closing any
-   * underlying databases or connections and deregistering any suffixes that it
-   * manages with the Directory Server.  This may be called during the
-   * Directory Server shutdown process or if a backend is disabled with the
-   * server online.  It must not return until the backend is closed.
-   * <BR><BR>
-   * This method may not throw any exceptions.  If any problems are encountered,
-   * then they may be logged but the closure should progress as completely as
-   * possible.
+   * {@inheritDoc}
    */
+  @Override()
   public void finalizeBackend()
   {
-    // NYI
+    // No implementation is required.
   }
 
 
 
   /**
-   * Retrieves the entry that is at the root of the Directory Server
-   * configuration.
-   *
-   * @return  The entry that is at the root of the Directory Server
-   *          configuration.
-   *
-   * @throws  ConfigException  If a problem occurs while interacting with the
-   *                           configuration.
+   * {@inheritDoc}
    */
+  @Override()
   public ConfigEntry getConfigRootEntry()
          throws ConfigException
   {
@@ -1075,16 +1086,9 @@
 
 
   /**
-   * Retrieves the requested entry from the configuration.
-   *
-   * @param  entryDN  The distinguished name of the configuration entry to
-   *                  retrieve.
-   *
-   * @return  The requested configuration entry.
-   *
-   * @throws  ConfigException  If a problem occurs while interacting with the
-   *                           configuration.
+   * {@inheritDoc}
    */
+  @Override()
   public ConfigEntry getConfigEntry(DN entryDN)
          throws ConfigException
   {
@@ -1094,27 +1098,32 @@
 
 
   /**
-   * Retrieves the absolute path of the Directory Server instance root.
-   *
-   * @return  The absolute path of the Directory Server instance root.
+   * {@inheritDoc}
    */
+  @Override()
   public String getServerRoot()
   {
     return serverRoot;
   }
 
 
-  /**
-   * {@inheritDoc}
-   */
-  public void configureBackend(Configuration cfg) throws ConfigException
-  {
-    // No action is required.
-  }
 
   /**
    * {@inheritDoc}
    */
+  @Override()
+  public void configureBackend(Configuration cfg)
+         throws ConfigException
+  {
+    // No action is required.
+  }
+
+
+
+  /**
+   * {@inheritDoc}
+   */
+  @Override()
   public void initializeBackend()
          throws ConfigException, InitializationException
   {
@@ -1125,10 +1134,9 @@
 
 
   /**
-   * Retrieves the set of base-level DNs that may be used within this backend.
-   *
-   * @return  The set of base-level DNs that may be used within this backend.
+   * {@inheritDoc}
    */
+  @Override()
   public DN[] getBaseDNs()
   {
     return baseDNs;
@@ -1139,6 +1147,7 @@
   /**
    * {@inheritDoc}
    */
+  @Override()
   public long getEntryCount()
   {
     return configEntries.size();
@@ -1147,24 +1156,35 @@
 
 
   /**
-   * Indicates whether the data associated with this backend may be considered
-   * local (i.e., in a repository managed by the Directory Server) rather than
-   * remote (i.e., in an external repository accessed by the Directory Server
-   * but managed through some other means).
-   *
-   * @return  <CODE>true</CODE> if the data associated with this backend may be
-   *          considered local, or <CODE>false</CODE> if it is remote.
+   * {@inheritDoc}
    */
+  @Override()
   public boolean isLocal()
   {
     // The configuration information will always be local.
     return true;
   }
 
+
+
   /**
    * {@inheritDoc}
    */
-  public ConditionResult hasSubordinates(DN entryDN) throws DirectoryException
+  @Override()
+  public boolean isIndexed(AttributeType attributeType, IndexType indexType)
+  {
+    // All searches in this backend will always be considered indexed.
+    return true;
+  }
+
+
+
+  /**
+   * {@inheritDoc}
+   */
+  @Override()
+  public ConditionResult hasSubordinates(DN entryDN)
+         throws DirectoryException
   {
     long ret = numSubordinates(entryDN);
     if(ret < 0)
@@ -1181,10 +1201,14 @@
     }
   }
 
+
+
   /**
    * {@inheritDoc}
    */
-  public long numSubordinates(DN entryDN) throws DirectoryException
+  @Override()
+  public long numSubordinates(DN entryDN)
+         throws DirectoryException
   {
     ConfigEntry baseEntry = configEntries.get(entryDN);
     if (baseEntry == null)
@@ -1195,17 +1219,12 @@
     return baseEntry.getChildren().size();
   }
 
+
+
   /**
-   * Retrieves the requested entry from this backend.
-   *
-   * @param  entryDN  The distinguished name of the entry to retrieve.
-   *
-   * @return  The requested entry, or <CODE>null</CODE> if the entry does not
-   *          exist.
-   *
-   * @throws  DirectoryException  If a problem occurs while trying to retrieve
-   *                              the entry.
+   * {@inheritDoc}
    */
+  @Override()
   public Entry getEntry(DN entryDN)
          throws DirectoryException
   {
@@ -1221,20 +1240,9 @@
 
 
   /**
-   * Indicates whether an entry with the specified DN exists in the backend.
-   * The default implementation obtains a read lock and calls
-   * <CODE>getEntry</CODE>, but backend implementations may override this with a
-   * more efficient version that does not require a lock.  The caller is not
-   * required to hold any locks on the specified DN.
-   *
-   * @param  entryDN  The DN of the entry for which to determine existence.
-   *
-   * @return  <CODE>true</CODE> if the specified entry exists in this backend,
-   *          or <CODE>false</CODE> if it does not.
-   *
-   * @throws  DirectoryException  If a problem occurs while trying to make the
-   *                              determination.
+   * {@inheritDoc}
    */
+  @Override()
   public boolean entryExists(DN entryDN)
          throws DirectoryException
   {
@@ -1244,18 +1252,9 @@
 
 
   /**
-   * Adds the provided entry to this backend.  This method must ensure that the
-   * entry is appropriate for the backend and that no entry already exists with
-   * the same DN.
-   *
-   * @param  entry         The entry to add to this backend.
-   * @param  addOperation  The add operation with which the new entry is
-   *                       associated.  This may be <CODE>null</CODE> for adds
-   *                       performed internally.
-   *
-   * @throws  DirectoryException  If a problem occurs while trying to add the
-   *                              entry.
+   * {@inheritDoc}
    */
+  @Override()
   public void addEntry(Entry entry, AddOperation addOperation)
          throws DirectoryException
   {
@@ -1419,19 +1418,9 @@
 
 
   /**
-   * Removes the specified entry from this backend.  This method must ensure
-   * that the entry exists and that it does not have any subordinate entries
-   * (unless the backend supports a subtree delete operation and the client
-   * included the appropriate information in the request).
-   *
-   * @param  entryDN          The DN of the entry to remove from this backend.
-   * @param  deleteOperation  The delete operation with which this action is
-   *                          associated.  This may be <CODE>null</CODE> for
-   *                          deletes performed internally.
-   *
-   * @throws  DirectoryException  If a problem occurs while trying to remove the
-   *                              entry.
+   * {@inheritDoc}
    */
+  @Override()
   public void deleteEntry(DN entryDN, DeleteOperation deleteOperation)
          throws DirectoryException
   {
@@ -1589,19 +1578,9 @@
 
 
   /**
-   * Replaces the specified entry with the provided entry in this backend.  The
-   * backend must ensure that an entry already exists with the same DN as the
-   * provided entry.
-   *
-   * @param  entry            The new entry to use in place of the existing
-   *                          entry with the same DN.
-   * @param  modifyOperation  The modify operation with which this action is
-   *                          associated.  This may be <CODE>null</CODE> for
-   *                          modifications performed internally.
-   *
-   * @throws  DirectoryException  If a problem occurs while trying to replace
-   *                              the entry.
+   * {@inheritDoc}
    */
+  @Override()
   public void replaceEntry(Entry entry, ModifyOperation modifyOperation)
          throws DirectoryException
   {
@@ -1765,20 +1744,9 @@
 
 
   /**
-   * Moves and/or renames the provided entry in this backend, altering any
-   * subordinate entries as necessary.  This must ensure that an entry already
-   * exists with the provided current DN, and that no entry exists with the
-   * target DN of the provided entry.
-   *
-   * @param  currentDN          The current DN of the entry to be replaced.
-   * @param  entry              The new content to use for the entry.
-   * @param  modifyDNOperation  The modify DN operation with which this action
-   *                            is associated.  This may be <CODE>null</CODE>
-   *                            for modify DN operations performed internally.
-   *
-   * @throws  DirectoryException  If a problem occurs while trying to perform
-   *                              the rename.
+   * {@inheritDoc}
    */
+  @Override()
   public void renameEntry(DN currentDN, Entry entry,
                           ModifyDNOperation modifyDNOperation)
          throws DirectoryException
@@ -1808,15 +1776,9 @@
 
 
   /**
-   * Processes the specified search in this backend.  Matching entries should be
-   * provided back to the core server using the
-   * <CODE>SearchOperation.returnEntry</CODE> method.
-   *
-   * @param  searchOperation  The search operation to be processed.
-   *
-   * @throws  DirectoryException  If a problem occurs while processing the
-   *                              search.
+   * {@inheritDoc}
    */
+  @Override()
   public void search(SearchOperation searchOperation)
          throws DirectoryException
   {
@@ -1964,13 +1926,9 @@
 
 
   /**
-   * Writes an updated version of the configuration file to disk.  This will
-   * archive the previous configuration in a ZIP file before overwriting the
-   * main config file.
-   *
-   * @throws  DirectoryException  If a problem is encountered while writing the
-   *                              updated configuration.
+   * {@inheritDoc}
    */
+  @Override()
   public void writeUpdatedConfig()
          throws DirectoryException
   {
@@ -2280,6 +2238,7 @@
   /**
    * {@inheritDoc}
    */
+  @Override()
   public void writeSuccessfulStartupConfig()
   {
     if (useLastKnownGoodConfig)
@@ -2457,38 +2416,31 @@
 
 
   /**
-   * Retrieves the OIDs of the controls that may be supported by this backend.
-   *
-   * @return  The OIDs of the controls that may be supported by this backend.
+   * {@inheritDoc}
    */
+  @Override()
   public HashSet<String> getSupportedControls()
   {
-    // NYI
-    return null;
+    return SUPPORTED_CONTROLS;
   }
 
 
 
   /**
-   * Retrieves the OIDs of the features that may be supported by this backend.
-   *
-   * @return  The OIDs of the features that may be supported by this backend.
+   * {@inheritDoc}
    */
+  @Override()
   public HashSet<String> getSupportedFeatures()
   {
-    // NYI
-    return null;
+    return SUPPORTED_FEATURES;
   }
 
 
 
   /**
-   * Indicates whether this backend provides a mechanism to export the data it
-   * contains to an LDIF file.
-   *
-   * @return  <CODE>true</CODE> if this backend provides an LDIF export
-   *          mechanism, or <CODE>false</CODE> if not.
+   * {@inheritDoc}
    */
+  @Override()
   public boolean supportsLDIFExport()
   {
     // TODO We would need export-ldif to initialize this backend.
@@ -2500,6 +2452,7 @@
   /**
    * {@inheritDoc}
    */
+  @Override()
   public void exportLDIF(LDIFExportConfig exportConfig)
          throws DirectoryException
   {
@@ -2509,6 +2462,14 @@
 
 
 
+  /**
+   * Writes the current configuration to LDIF with the provided export
+   * configuration.
+   *
+   * @param  exportConfig  The configuration to use for the export.
+   *
+   * @throws  DirectoryException  If a problem occurs while writing the LDIF.
+   */
   private void writeLDIF(LDIFExportConfig exportConfig)
          throws DirectoryException
   {
@@ -2598,12 +2559,9 @@
 
 
   /**
-   * Indicates whether this backend provides a mechanism to import its data from
-   * an LDIF file.
-   *
-   * @return  <CODE>true</CODE> if this backend provides an LDIF import
-   *          mechanism, or <CODE>false</CODE> if not.
+   * {@inheritDoc}
    */
+  @Override()
   public boolean supportsLDIFImport()
   {
     return false;
@@ -2614,6 +2572,7 @@
   /**
    * {@inheritDoc}
    */
+  @Override()
   public LDIFImportResult importLDIF(LDIFImportConfig importConfig)
          throws DirectoryException
   {
@@ -2624,16 +2583,9 @@
 
 
   /**
-   * Indicates whether this backend provides a backup mechanism of any kind.
-   * This method is used by the backup process when backing up all backends to
-   * determine whether this backend is one that should be skipped.  It should
-   * only return <CODE>true</CODE> for backends that it is not possible to
-   * archive directly (e.g., those that don't store their data locally, but
-   * rather pass through requests to some other repository).
-   *
-   * @return  <CODE>true</CODE> if this backend provides any kind of backup
-   *          mechanism, or <CODE>false</CODE> if it does not.
+   * {@inheritDoc}
    */
+  @Override()
   public boolean supportsBackup()
   {
     // We do support an online backup mechanism for the configuration.
@@ -2643,20 +2595,9 @@
 
 
   /**
-   * Indicates whether this backend provides a mechanism to perform a backup of
-   * its contents in a form that can be restored later, based on the provided
-   * configuration.
-   *
-   * @param  backupConfig       The configuration of the backup for which to
-   *                            make the determination.
-   * @param  unsupportedReason  A buffer to which a message can be appended
-   *                            explaining why the requested backup is not
-   *                            supported.
-   *
-   * @return  <CODE>true</CODE> if this backend provides a mechanism for
-   *          performing backups with the provided configuration, or
-   *          <CODE>false</CODE> if not.
+   * {@inheritDoc}
    */
+  @Override()
   public boolean supportsBackup(BackupConfig backupConfig,
                                 StringBuilder unsupportedReason)
   {
@@ -2672,6 +2613,7 @@
   /**
    * {@inheritDoc}
    */
+  @Override()
   public void createBackup(BackupConfig backupConfig)
          throws DirectoryException
   {
@@ -3061,17 +3003,9 @@
 
 
   /**
-   * Removes the specified backup if it is possible to do so.
-   *
-   * @param  backupDirectory  The backup directory structure with which the
-   *                          specified backup is associated.
-   * @param  backupID         The backup ID for the backup to be removed.
-   *
-   * @throws  DirectoryException  If it is not possible to remove the specified
-   *                              backup for some reason (e.g., no such backup
-   *                              exists or there are other backups that are
-   *                              dependent upon it).
+   * {@inheritDoc}
    */
+  @Override()
   public void removeBackup(BackupDirectory backupDirectory,
                            String backupID)
          throws DirectoryException
@@ -3082,11 +3016,9 @@
 
 
   /**
-   * Indicates whether this backend provides a mechanism to restore a backup.
-   *
-   * @return  <CODE>true</CODE> if this backend provides a mechanism for
-   *          restoring backups, or <CODE>false</CODE> if not.
+   * {@inheritDoc}
    */
+  @Override()
   public boolean supportsRestore()
   {
     // We will provide a restore, but only for offline operations.
@@ -3098,6 +3030,7 @@
   /**
    * {@inheritDoc}
    */
+  @Override()
   public void restoreBackup(RestoreConfig restoreConfig)
          throws DirectoryException
   {
@@ -3590,11 +3523,7 @@
 
 
   /**
-   * Retrieves the DN of the configuration entry with which this alert generator
-   * is associated.
-   *
-   * @return  The DN of the configuration entry with which this alert generator
-   *          is associated.
+   * {@inheritDoc}
    */
   public DN getComponentEntryDN()
   {
@@ -3604,11 +3533,7 @@
 
 
   /**
-   * Retrieves the fully-qualified name of the Java class for this alert
-   * generator implementation.
-   *
-   * @return  The fully-qualified name of the Java class for this alert
-   *          generator implementation.
+   * {@inheritDoc}
    */
   public String getClassName()
   {
@@ -3618,14 +3543,7 @@
 
 
   /**
-   * Retrieves information about the set of alerts that this generator may
-   * produce.  The map returned should be between the notification type for a
-   * particular notification and the human-readable description for that
-   * notification.  This alert generator must not generate any alerts with types
-   * that are not contained in this list.
-   *
-   * @return  Information about the set of alerts that this generator may
-   *          produce.
+   * {@inheritDoc}
    */
   public LinkedHashMap<String,String> getAlerts()
   {

--
Gitblit v1.10.0