From 2bf80e51262791cae4bea6553c4af052e96dc740 Mon Sep 17 00:00:00 2001
From: neil_a_wilson <neil_a_wilson@localhost>
Date: Mon, 25 Jun 2007 00:06:03 +0000
Subject: [PATCH] Migrate the matching rule configuration to the admin framework.
---
opends/src/server/org/opends/server/core/SchemaConfigManager.java | 385 ------------------------------------------------------
1 files changed, 3 insertions(+), 382 deletions(-)
diff --git a/opends/src/server/org/opends/server/core/SchemaConfigManager.java b/opends/src/server/org/opends/server/core/SchemaConfigManager.java
index d677b71..bce8c46 100644
--- a/opends/src/server/org/opends/server/core/SchemaConfigManager.java
+++ b/opends/src/server/org/opends/server/core/SchemaConfigManager.java
@@ -34,15 +34,8 @@
import java.util.LinkedList;
import java.util.List;
-import org.opends.server.api.ConfigAddListener;
-import org.opends.server.api.ConfigChangeListener;
-import org.opends.server.api.ConfigDeleteListener;
import org.opends.server.api.ConfigHandler;
-import org.opends.server.api.MatchingRule;
-import org.opends.server.config.BooleanConfigAttribute;
-import org.opends.server.config.ConfigEntry;
import org.opends.server.config.ConfigException;
-import org.opends.server.config.StringConfigAttribute;
import org.opends.server.schema.AttributeTypeSyntax;
import org.opends.server.schema.DITContentRuleSyntax;
import org.opends.server.schema.DITStructureRuleSyntax;
@@ -52,11 +45,9 @@
import org.opends.server.types.Attribute;
import org.opends.server.types.AttributeType;
import org.opends.server.types.AttributeValue;
-import org.opends.server.types.ConfigChangeResult;
import org.opends.server.types.DirectoryException;
import org.opends.server.types.DITContentRule;
import org.opends.server.types.DITStructureRule;
-import org.opends.server.types.DN;
import org.opends.server.types.Entry;
import org.opends.server.types.ErrorLogCategory;
import org.opends.server.types.ErrorLogSeverity;
@@ -67,7 +58,6 @@
import org.opends.server.types.ModificationType;
import org.opends.server.types.NameForm;
import org.opends.server.types.ObjectClass;
-import org.opends.server.types.ResultCode;
import org.opends.server.types.Schema;
import org.opends.server.util.LDIFReader;
@@ -94,7 +84,6 @@
* forms, and matching rule use definitions will be ignored.
*/
public class SchemaConfigManager
- implements ConfigChangeListener, ConfigAddListener, ConfigDeleteListener
{
/**
* The tracer object for the debug logger.
@@ -172,233 +161,9 @@
public void initializeMatchingRules()
throws ConfigException, InitializationException
{
- // First, get the matching rule configuration base entry.
- ConfigEntry matchingRuleBaseEntry;
- try
- {
- DN matchingRuleBaseDN = DN.decode(DN_MATCHING_RULE_CONFIG_BASE);
- matchingRuleBaseEntry = configHandler.getConfigEntry(matchingRuleBaseDN);
- }
- catch (Exception e)
- {
- if (debugEnabled())
- {
- TRACER.debugCaught(DebugLogLevel.ERROR, e);
- }
-
- int msgID = MSGID_CONFIG_SCHEMA_CANNOT_GET_MR_BASE;
- String message = getMessage(msgID, String.valueOf(e));
- throw new ConfigException(msgID, message, e);
- }
-
- if (matchingRuleBaseEntry == null)
- {
- // The matching rule base entry does not exist. This is not acceptable,
- // so throw an exception.
- int msgID = MSGID_CONFIG_SCHEMA_MR_BASE_DOES_NOT_EXIST;
- String message = getMessage(msgID);
- throw new ConfigException(msgID, message);
- }
-
-
- // Register add and delete listeners with the matching rule base entry. We
- // don't care about modifications to it.
- matchingRuleBaseEntry.registerAddListener(this);
- matchingRuleBaseEntry.registerDeleteListener(this);
-
-
- // See if the matching rule base has any children. If not, then this is
- // very bad, since we won't know how to make any comparisons.
- if (! matchingRuleBaseEntry.hasChildren())
- {
- int msgID = MSGID_CONFIG_SCHEMA_NO_MATCHING_RULES;
- String message = getMessage(msgID);
- throw new ConfigException(msgID, message);
- }
-
-
- // Iterate through the child entries and process them as matching rule
- // entries.
- for (ConfigEntry childEntry : matchingRuleBaseEntry.getChildren().values())
- {
- DN mrEntryDN = childEntry.getDN();
-
-
- // Register as a change listener for this matching rule entry so that we
- // will be notified of any changes that may be made to it.
- childEntry.registerChangeListener(this);
-
-
- // Check to see if this entry appears to contain a matching rule
- // configuration. If not, log a warning and skip it.
- if (! childEntry.hasObjectClass(OC_MATCHING_RULE))
- {
- int msgID = MSGID_CONFIG_SCHEMA_ENTRY_DOES_NOT_HAVE_MR_CONFIG;
- String message = getMessage(msgID, String.valueOf(mrEntryDN));
- logError(ErrorLogCategory.CONFIGURATION,
- ErrorLogSeverity.SEVERE_WARNING, message, msgID);
- continue;
- }
-
-
- // See if the entry contains an attribute that indicates whether the
- // matching rule should be enabled. If it does not, or if it is not set
- // to "true", then skip it.
- int msgID = MSGID_CONFIG_SCHEMA_MR_ATTR_DESCRIPTION_ENABLED;
- BooleanConfigAttribute enabledStub =
- new BooleanConfigAttribute(ATTR_MATCHING_RULE_ENABLED,
- getMessage(msgID), false);
- try
- {
- BooleanConfigAttribute enabledAttr =
- (BooleanConfigAttribute)
- childEntry.getConfigAttribute(enabledStub);
- if (enabledAttr == null)
- {
- // The attribute is not present, so this matching rule will be
- // disabled. Log a message and continue.
- msgID = MSGID_CONFIG_SCHEMA_MR_NO_ENABLED_ATTR;
- String message = getMessage(msgID, String.valueOf(mrEntryDN));
- logError(ErrorLogCategory.CONFIGURATION,
- ErrorLogSeverity.SEVERE_WARNING, message, msgID);
- continue;
- }
- else if (! enabledAttr.activeValue())
- {
- // The matching rule is explicitly disabled. Log a mild warning and
- // continue.
- msgID = MSGID_CONFIG_SCHEMA_MR_DISABLED;
- String message = getMessage(msgID, String.valueOf(mrEntryDN));
- logError(ErrorLogCategory.CONFIGURATION,
- ErrorLogSeverity.INFORMATIONAL, message, msgID);
- continue;
- }
- }
- catch (Exception e)
- {
- if (debugEnabled())
- {
- TRACER.debugCaught(DebugLogLevel.ERROR, e);
- }
-
- msgID = MSGID_CONFIG_SCHEMA_MR_UNABLE_TO_DETERMINE_ENABLED_STATE;
- String message = getMessage(msgID, String.valueOf(mrEntryDN),
- getExceptionMessage(e));
- logError(ErrorLogCategory.CONFIGURATION, ErrorLogSeverity.SEVERE_ERROR,
- message, msgID);
- continue;
- }
-
-
- // See if the entry contains an attribute that specifies the class name
- // for the matching rule implementation. If it does, then load it and
- // make sure that it's a valid matching rule implementation. If there is
- // no such attribute, the specified class cannot be loaded, or it does not
- // contain a valid matching rule implementation, then log an error and
- // skip it.
- String className;
- msgID = MSGID_CONFIG_SCHEMA_MR_ATTR_DESCRIPTION_CLASS;
- StringConfigAttribute classStub =
- new StringConfigAttribute(ATTR_MATCHING_RULE_CLASS,
- getMessage(msgID), true, false, true);
- try
- {
- StringConfigAttribute classAttr =
- (StringConfigAttribute)
- childEntry.getConfigAttribute(classStub);
- if (classAttr == null)
- {
- msgID = MSGID_CONFIG_SCHEMA_MR_NO_CLASS_ATTR;
- String message = getMessage(msgID, String.valueOf(mrEntryDN));
- logError(ErrorLogCategory.CONFIGURATION,
- ErrorLogSeverity.SEVERE_ERROR, message, msgID);
- continue;
- }
- else
- {
- className = classAttr.activeValue();
- }
- }
- catch (Exception e)
- {
- if (debugEnabled())
- {
- TRACER.debugCaught(DebugLogLevel.ERROR, e);
- }
-
- msgID = MSGID_CONFIG_SCHEMA_MR_CANNOT_GET_CLASS;
- String message = getMessage(msgID, String.valueOf(mrEntryDN),
- getExceptionMessage(e));
- logError(ErrorLogCategory.CONFIGURATION, ErrorLogSeverity.SEVERE_ERROR,
- message, msgID);
- continue;
- }
-
- MatchingRule matchingRule;
- try
- {
- Class matchingRuleClass = DirectoryServer.loadClass(className);
- matchingRule = (MatchingRule) matchingRuleClass.newInstance();
- }
- catch (Exception e)
- {
- if (debugEnabled())
- {
- TRACER.debugCaught(DebugLogLevel.ERROR, e);
- }
-
- msgID = MSGID_CONFIG_SCHEMA_MR_CANNOT_INSTANTIATE;
- String message = getMessage(msgID, String.valueOf(className),
- String.valueOf(mrEntryDN),
- getExceptionMessage(e));
- logError(ErrorLogCategory.CONFIGURATION, ErrorLogSeverity.SEVERE_ERROR,
- message, msgID);
- continue;
- }
-
-
- // Perform the necessary initialization for the matching rule.
- try
- {
- matchingRule.initializeMatchingRule(childEntry);
- }
- catch (Exception e)
- {
- if (debugEnabled())
- {
- TRACER.debugCaught(DebugLogLevel.ERROR, e);
- }
-
- msgID = MSGID_CONFIG_SCHEMA_MR_CANNOT_INITIALIZE;
- String message = getMessage(msgID, String.valueOf(className),
- String.valueOf(mrEntryDN),
- getExceptionMessage(e));
- logError(ErrorLogCategory.CONFIGURATION, ErrorLogSeverity.SEVERE_ERROR,
- message, msgID);
- continue;
- }
-
-
- // Register the matching rule with the server schema.
- try
- {
- schema.registerMatchingRule(matchingRule, false);
- }
- catch (DirectoryException de)
- {
- if (debugEnabled())
- {
- TRACER.debugCaught(DebugLogLevel.ERROR, de);
- }
-
- msgID = MSGID_CONFIG_SCHEMA_MR_CONFLICTING_MR;
- String message = getMessage(msgID, String.valueOf(mrEntryDN),
- de.getErrorMessage());
- logError(ErrorLogCategory.CONFIGURATION,
- ErrorLogSeverity.SEVERE_WARNING, message, msgID);
- continue;
- }
- }
+ MatchingRuleConfigManager matchingRuleConfigManager =
+ new MatchingRuleConfigManager();
+ matchingRuleConfigManager.initializeMatchingRules();
}
@@ -1571,149 +1336,5 @@
return mods;
}
-
-
-
- /**
- * Indicates whether the configuration entry that will result from a proposed
- * modification is acceptable to this change listener.
- *
- * @param configEntry The configuration entry that will result from
- * the requested update.
- * @param unacceptableReason A buffer to which this method can append a
- * human-readable message explaining why the
- * proposed change is not acceptable.
- *
- * @return <CODE>true</CODE> if the proposed entry contains an acceptable
- * configuration, or <CODE>false</CODE> if it does not.
- */
- public boolean configChangeIsAcceptable(ConfigEntry configEntry,
- StringBuilder unacceptableReason)
- {
- // NYI
-
- // If we've gotten here then the monitor entry appears to be acceptable.
- return true;
- }
-
-
-
- /**
- * Attempts to apply a new configuration to this Directory Server component
- * based on the provided changed entry.
- *
- * @param configEntry The configuration entry that containing the updated
- * configuration for this component.
- *
- * @return Information about the result of processing the configuration
- * change.
- */
- public ConfigChangeResult applyConfigurationChange(ConfigEntry configEntry)
- {
- DN configEntryDN = configEntry.getDN();
- ResultCode resultCode = ResultCode.SUCCESS;
- boolean adminActionRequired = false;
- ArrayList<String> messages = new ArrayList<String>();
-
-
- // NYI
-
-
- // If we've gotten here, then there haven't been any changes to anything
- // that we care about.
- return new ConfigChangeResult(resultCode, adminActionRequired, messages);
- }
-
-
-
- /**
- * Indicates whether the configuration entry that will result from a proposed
- * add is acceptable to this add listener.
- *
- * @param configEntry The configuration entry that will result from
- * the requested add.
- * @param unacceptableReason A buffer to which this method can append a
- * human-readable message explaining why the
- * proposed entry is not acceptable.
- *
- * @return <CODE>true</CODE> if the proposed entry contains an acceptable
- * configuration, or <CODE>false</CODE> if it does not.
- */
- public boolean configAddIsAcceptable(ConfigEntry configEntry,
- StringBuilder unacceptableReason)
- {
- // NYI
-
- // If we've gotten here then the monitor entry appears to be acceptable.
- return true;
- }
-
-
-
- /**
- * Attempts to apply a new configuration based on the provided added entry.
- *
- * @param configEntry The new configuration entry that contains the
- * configuration to apply.
- *
- * @return Information about the result of processing the configuration
- * change.
- */
- public ConfigChangeResult applyConfigurationAdd(ConfigEntry configEntry)
- {
- DN configEntryDN = configEntry.getDN();
- ResultCode resultCode = ResultCode.SUCCESS;
- boolean adminActionRequired = false;
- ArrayList<String> messages = new ArrayList<String>();
-
- // NYI
-
- return new ConfigChangeResult(resultCode, adminActionRequired, messages);
- }
-
-
-
- /**
- * Indicates whether it is acceptable to remove the provided configuration
- * entry.
- *
- * @param configEntry The configuration entry that will be removed
- * from the configuration.
- * @param unacceptableReason A buffer to which this method can append a
- * human-readable message explaining why the
- * proposed delete is not acceptable.
- *
- * @return <CODE>true</CODE> if the proposed entry may be removed from the
- * configuration, or <CODE>false</CODE> if not.
- */
- public boolean configDeleteIsAcceptable(ConfigEntry configEntry,
- StringBuilder unacceptableReason)
- {
- // NYI -- Should we allow deletes of elements with this as superior?
-
- return true;
- }
-
-
-
- /**
- * Attempts to apply a new configuration based on the provided deleted entry.
- *
- * @param configEntry The new configuration entry that has been deleted.
- *
- * @return Information about the result of processing the configuration
- * change.
- */
- public ConfigChangeResult applyConfigurationDelete(ConfigEntry configEntry)
- {
- DN configEntryDN = configEntry.getDN();
- ResultCode resultCode = ResultCode.SUCCESS;
- boolean adminActionRequired = false;
-
-
- // NYI
-
- return new ConfigChangeResult(resultCode, adminActionRequired);
- }
}
--
Gitblit v1.10.0