From ba37d4da3b523f96d8aee1f381b9f0104a41f67d Mon Sep 17 00:00:00 2001
From: Nicolas Capponi <nicolas.capponi@forgerock.com>
Date: Mon, 17 Feb 2014 15:47:33 +0000
Subject: [PATCH] Refactor DirectoryServer class to remove   get/register/deregisterAttributeSyntax methods * add getSchema() method in ServerContext class * inject serverContext into using objects 

---
 opendj-sdk/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/schema/AttributeTypeSyntaxTest.java         |    2 
 opendj-sdk/opendj3-server-dev/src/server/org/opends/server/core/PasswordPolicyConfigManager.java                               |   15 ++-
 opendj-sdk/opendj3-server-dev/src/server/org/opends/server/core/ServerContext.java                                             |    9 +
 opendj-sdk/opendj3-server-dev/src/server/org/opends/server/types/Schema.java                                                   |   53 ++++++++++
 opendj-sdk/opendj3-server-dev/src/server/org/opends/server/api/AuthenticationPolicyFactory.java                                |   11 ++
 opendj-sdk/opendj3-server-dev/src/server/org/opends/server/core/DirectoryServer.java                                           |   77 ++-------------
 opendj-sdk/opendj3-server-dev/src/server/org/opends/server/extensions/LDAPPassThroughAuthenticationPolicyFactory.java          |   14 ++
 opendj-sdk/opendj3-server-dev/src/server/org/opends/server/core/AttributeSyntaxConfigManager.java                              |   18 ++-
 opendj-sdk/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/schema/ConfigurableAttributeSyntaxTest.java |    2 
 opendj-sdk/opendj3-server-dev/src/server/org/opends/server/schema/MatchingRuleSyntax.java                                      |    3 
 opendj-sdk/opendj3-server-dev/src/server/org/opends/server/core/PasswordPolicyFactory.java                                     |   57 ++++++----
 opendj-sdk/opendj3-server-dev/src/server/org/opends/server/core/SchemaConfigManager.java                                       |   10 +
 opendj-sdk/opendj3-server-dev/src/server/org/opends/server/schema/ObjectIdentifierFirstComponentEqualityMatchingRule.java      |    4 
 opendj-sdk/opendj3-server-dev/src/server/org/opends/server/types/DirectoryConfig.java                                          |   23 ----
 14 files changed, 165 insertions(+), 133 deletions(-)

diff --git a/opendj-sdk/opendj3-server-dev/src/server/org/opends/server/api/AuthenticationPolicyFactory.java b/opendj-sdk/opendj3-server-dev/src/server/org/opends/server/api/AuthenticationPolicyFactory.java
index c97653f..cb797c6 100644
--- a/opendj-sdk/opendj3-server-dev/src/server/org/opends/server/api/AuthenticationPolicyFactory.java
+++ b/opendj-sdk/opendj3-server-dev/src/server/org/opends/server/api/AuthenticationPolicyFactory.java
@@ -33,6 +33,7 @@
 import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.std.server.AuthenticationPolicyCfg;
 import org.opends.server.config.ConfigException;
+import org.opends.server.core.ServerContext;
 import org.opends.server.types.InitializationException;
 
 
@@ -82,4 +83,14 @@
    */
   boolean isConfigurationAcceptable(T configuration,
       List<LocalizableMessage> unacceptableReasons);
+
+
+  /**
+   * Sets the server context.
+   *
+   * @param serverContext
+   *            The server context.
+   */
+  void setServerContext(final ServerContext serverContext);
+
 }
diff --git a/opendj-sdk/opendj3-server-dev/src/server/org/opends/server/core/AttributeSyntaxConfigManager.java b/opendj-sdk/opendj3-server-dev/src/server/org/opends/server/core/AttributeSyntaxConfigManager.java
index 7b0f5dc..5f861aa 100644
--- a/opendj-sdk/opendj3-server-dev/src/server/org/opends/server/core/AttributeSyntaxConfigManager.java
+++ b/opendj-sdk/opendj3-server-dev/src/server/org/opends/server/core/AttributeSyntaxConfigManager.java
@@ -73,13 +73,17 @@
   // attribute syntaxes.
   private ConcurrentHashMap<DN,AttributeSyntax> syntaxes;
 
-
+  private final ServerContext serverContext;
 
   /**
    * Creates a new instance of this attribute syntax config manager.
+   *
+   * @param serverContext
+   *            The server context, that contains the schema.
    */
-  public AttributeSyntaxConfigManager()
+  public AttributeSyntaxConfigManager(final ServerContext serverContext)
   {
+    this.serverContext = serverContext;
     syntaxes = new ConcurrentHashMap<DN,AttributeSyntax>();
   }
 
@@ -130,7 +134,7 @@
 
           try
           {
-            DirectoryServer.registerAttributeSyntax(syntax, false);
+            serverContext.getSchema().registerSyntax(syntax, false);
             syntaxes.put(syntaxConfiguration.dn(), syntax);
           }
           catch (DirectoryException de)
@@ -207,7 +211,7 @@
 
       try
       {
-        DirectoryServer.registerAttributeSyntax(syntax, false);
+        serverContext.getSchema().registerSyntax(syntax, false);
         syntaxes.put(configuration.dn(), syntax);
       }
       catch (DirectoryException de)
@@ -282,7 +286,7 @@
     AttributeSyntax syntax = syntaxes.remove(configuration.dn());
     if (syntax != null)
     {
-      DirectoryServer.deregisterAttributeSyntax(syntax);
+      serverContext.getSchema().deregisterSyntax(syntax);
       syntax.finalizeSyntax();
     }
 
@@ -363,7 +367,7 @@
     {
       if (existingSyntax != null)
       {
-        DirectoryServer.deregisterAttributeSyntax(existingSyntax);
+        serverContext.getSchema().deregisterSyntax(existingSyntax);
 
         AttributeSyntax syntax = syntaxes.remove(configuration.dn());
         if (syntax != null)
@@ -399,7 +403,7 @@
 
       try
       {
-        DirectoryServer.registerAttributeSyntax(syntax, false);
+        serverContext.getSchema().registerSyntax(syntax, false);
         syntaxes.put(configuration.dn(), syntax);
       }
       catch (DirectoryException de)
diff --git a/opendj-sdk/opendj3-server-dev/src/server/org/opends/server/core/DirectoryServer.java b/opendj-sdk/opendj3-server-dev/src/server/org/opends/server/core/DirectoryServer.java
index fbe4356..d147227 100644
--- a/opendj-sdk/opendj3-server-dev/src/server/org/opends/server/core/DirectoryServer.java
+++ b/opendj-sdk/opendj3-server-dev/src/server/org/opends/server/core/DirectoryServer.java
@@ -756,6 +756,13 @@
       return DirectoryServer.getServerRoot();
     }
 
+    /** {@inheritDoc} */
+    @Override
+    public Schema getSchema()
+    {
+      return directoryServer.schema;
+    }
+
   }
 
 
@@ -1607,6 +1614,7 @@
     defaultBooleanSyntax = initAndRegister(new BooleanSyntax());
     defaultStringSyntax = initAndRegister(new DirectoryStringSyntax());
     defaultSyntax = defaultStringSyntax;
+    schema.registerDefaultSyntax(defaultSyntax);
     defaultDNSyntax = initAndRegister(new DistinguishedNameSyntax());
     initAndRegister(new IA5StringSyntax());
     defaultIntegerSyntax = initAndRegister(new IntegerSyntax());
@@ -1623,7 +1631,7 @@
     try
     {
       syntax.initializeSyntax(null);
-      registerAttributeSyntax(syntax, true);
+      directoryServer.schema.registerSyntax(syntax, true);
     }
     catch (Exception e)
     {
@@ -1761,7 +1769,7 @@
   {
     // Create the schema configuration manager, and initialize the schema from
     // the configuration.
-    schemaConfigManager = new SchemaConfigManager();
+    schemaConfigManager = new SchemaConfigManager(serverContext);
     schema = schemaConfigManager.getSchema();
 
     schemaConfigManager.initializeMatchingRules();
@@ -2658,7 +2666,7 @@
 
 
     // Initialize all the authentication policies.
-    authenticationPolicyConfigManager = new PasswordPolicyConfigManager();
+    authenticationPolicyConfigManager = new PasswordPolicyConfigManager(serverContext);
     authenticationPolicyConfigManager.initializeAuthenticationPolicies();
   }
 
@@ -3805,69 +3813,6 @@
     return directoryServer.schema.getSyntaxSet();
   }
 
-
-
-  /**
-   * Retrieves the requested attribute syntax.
-   *
-   * @param  oid           The OID of the syntax to retrieve.
-   * @param  allowDefault  Indicates whether to return the default attribute
-   *                       syntax if the requested syntax is unknown.
-   *
-   * @return  The requested attribute syntax, the default syntax if the
-   *          requested syntax is unknown and the caller has indicated that the
-   *          default is acceptable, or <CODE>null</CODE> otherwise.
-   */
-  public static AttributeSyntax getAttributeSyntax(String oid,
-                                                   boolean allowDefault)
-  {
-    AttributeSyntax syntax = directoryServer.schema.getSyntax(oid);
-    if (syntax == null && allowDefault)
-    {
-      return getDefaultAttributeSyntax();
-    }
-
-    return syntax;
-  }
-
-
-
-  /**
-   * Registers the provided attribute syntax with the Directory Server.
-   *
-   * @param  syntax             The attribute syntax to register with the
-   *                            Directory Server.
-   * @param  overwriteExisting  Indicates whether to overwrite an existing
-   *                            mapping if there are any conflicts (i.e.,
-   *                            another attribute syntax with the same OID or
-   *                            name).
-   *
-   * @throws  DirectoryException  If a conflict is encountered and the
-   *                              <CODE>overwriteExisting</CODE> flag is set to
-   *                              <CODE>false</CODE>
-   */
-  public static void registerAttributeSyntax(AttributeSyntax syntax,
-                                             boolean overwriteExisting)
-         throws DirectoryException
-  {
-    directoryServer.schema.registerSyntax(syntax, overwriteExisting);
-  }
-
-
-
-  /**
-   * Deregisters the provided attribute syntax with the Directory Server.
-   *
-   * @param  syntax  The attribute syntax to deregister with the Directory
-   *                 Server.
-   */
-  public static void deregisterAttributeSyntax(AttributeSyntax syntax)
-  {
-    directoryServer.schema.deregisterSyntax(syntax);
-  }
-
-
-
   /**
    * Retrieves the default attribute syntax that should be used for attributes
    * that are not defined in the server schema.
diff --git a/opendj-sdk/opendj3-server-dev/src/server/org/opends/server/core/PasswordPolicyConfigManager.java b/opendj-sdk/opendj3-server-dev/src/server/org/opends/server/core/PasswordPolicyConfigManager.java
index 66670ed..94c4cac 100644
--- a/opendj-sdk/opendj3-server-dev/src/server/org/opends/server/core/PasswordPolicyConfigManager.java
+++ b/opendj-sdk/opendj3-server-dev/src/server/org/opends/server/core/PasswordPolicyConfigManager.java
@@ -66,14 +66,17 @@
 {
   private static final LocalizedLogger logger = LocalizedLogger.getLoggerForThisClass();
 
-
+  private final ServerContext serverContext;
 
   /**
    * Creates a new instance of this password policy config manager.
+   *
+   * @param serverContext
+   *            The server context.
    */
-  public PasswordPolicyConfigManager()
+  public PasswordPolicyConfigManager(ServerContext serverContext)
   {
-    // Nothing to do.
+    this.serverContext = serverContext;
   }
 
 
@@ -441,7 +444,7 @@
 
   // Creates and registers the provided authentication policy
   // configuration.
-  private static void createAuthenticationPolicy(
+  private void createAuthenticationPolicy(
       AuthenticationPolicyCfg policyConfiguration) throws ConfigException,
       InitializationException
   {
@@ -469,6 +472,7 @@
     {
       theClass = pd.loadClass(className, AuthenticationPolicyFactory.class);
       factory = (AuthenticationPolicyFactory<?>) theClass.newInstance();
+      factory.setServerContext(serverContext);
     }
     catch (Exception e)
     {
@@ -522,7 +526,7 @@
 
   // Determines whether or not the new authentication policy configuration's
   // implementation class is acceptable.
-  private static boolean isAuthenticationPolicyConfigurationAcceptable(
+  private boolean isAuthenticationPolicyConfigurationAcceptable(
       AuthenticationPolicyCfg policyConfiguration,
       List<LocalizableMessage> unacceptableReasons)
   {
@@ -552,6 +556,7 @@
 
       theClass = pd.loadClass(className, AuthenticationPolicyFactory.class);
       factory = (AuthenticationPolicyFactory<?>) theClass.newInstance();
+      factory.setServerContext(serverContext);
 
       // Determine the initialization method to use: it must take a
       // single parameter which is the exact type of the configuration
diff --git a/opendj-sdk/opendj3-server-dev/src/server/org/opends/server/core/PasswordPolicyFactory.java b/opendj-sdk/opendj3-server-dev/src/server/org/opends/server/core/PasswordPolicyFactory.java
index e33dd3a..3dea277 100644
--- a/opendj-sdk/opendj3-server-dev/src/server/org/opends/server/core/PasswordPolicyFactory.java
+++ b/opendj-sdk/opendj3-server-dev/src/server/org/opends/server/core/PasswordPolicyFactory.java
@@ -103,7 +103,7 @@
     // passwords.
     private long requireChangeByTime;
 
-
+    private final ServerContext serverContext;
 
     /**
      * {@inheritDoc}
@@ -124,7 +124,7 @@
       ArrayList<LocalizableMessage> messages = new ArrayList<LocalizableMessage>();
       try
       {
-        updateConfiguration(configuration, this);
+        updateConfiguration(configuration, true);
         return new ConfigChangeResult(ResultCode.SUCCESS, false, messages);
       }
       catch (ConfigException ce)
@@ -158,7 +158,7 @@
     {
       try
       {
-        updateConfiguration(configuration, null);
+        updateConfiguration(configuration, false);
       }
       catch (ConfigException ce)
       {
@@ -192,10 +192,11 @@
      * Creates a new password policy based on the configuration contained in the
      * provided configuration entry. Any parameters not included in the provided
      * configuration entry will be assigned server-wide default values.
-     *
+     * @param serverContext TODO
      * @param configuration
      *          The configuration with the information to use to initialize this
      *          password policy.
+     *
      * @throws ConfigException
      *           If the provided entry does not contain a valid password policy
      *           configuration.
@@ -203,16 +204,17 @@
      *           If an error occurs while initializing the password policy that
      *           is not related to the server configuration.
      */
-    private PasswordPolicyImpl(PasswordPolicyCfg configuration)
+    private PasswordPolicyImpl(ServerContext serverContext, PasswordPolicyCfg configuration)
         throws ConfigException, InitializationException
     {
-      updateConfiguration(configuration, this);
+      this.serverContext = serverContext;
+      updateConfiguration(configuration, true);
     }
 
 
 
-    private static void updateConfiguration(PasswordPolicyCfg configuration,
-        PasswordPolicyImpl policy) throws ConfigException,
+    private void updateConfiguration(PasswordPolicyCfg configuration,
+        boolean applyChanges) throws ConfigException,
         InitializationException
     {
       final DN configEntryDN = configuration.dn();
@@ -333,8 +335,8 @@
         {
           ByteString valueString = ByteString.valueOf(requireChangeBy);
 
-          GeneralizedTimeSyntax syntax = (GeneralizedTimeSyntax) DirectoryServer
-              .getAttributeSyntax(SYNTAX_GENERALIZED_TIME_OID, false);
+          GeneralizedTimeSyntax syntax = (GeneralizedTimeSyntax)
+              serverContext.getSchema().getSyntax(SYNTAX_GENERALIZED_TIME_OID, false);
 
           if (syntax == null)
           {
@@ -428,16 +430,16 @@
 
       // If we've got this far then the configuration is good and we can commit
       // the changes if required.
-      if (policy != null)
+      if (applyChanges)
       {
-        policy.configuration = configuration;
-        policy.authPasswordSyntax = authPasswordSyntax;
-        policy.defaultStorageSchemes = defaultStorageSchemes;
-        policy.deprecatedStorageSchemes = deprecatedStorageSchemes;
-        policy.notificationHandlers = notificationHandlers;
-        policy.passwordGenerator = passwordGenerator;
-        policy.passwordValidators = passwordValidators;
-        policy.requireChangeByTime = requireChangeByTime;
+        this.configuration = configuration;
+        this.authPasswordSyntax = authPasswordSyntax;
+        this.defaultStorageSchemes = defaultStorageSchemes;
+        this.deprecatedStorageSchemes = deprecatedStorageSchemes;
+        this.notificationHandlers = notificationHandlers;
+        this.passwordGenerator = passwordGenerator;
+        this.passwordValidators = passwordValidators;
+        this.requireChangeByTime = requireChangeByTime;
       }
     }
 
@@ -1148,7 +1150,7 @@
 
   }
 
-
+  private ServerContext serverContext;
 
   /**
    * Default constructor instantiated from authentication policy config manager.
@@ -1158,7 +1160,16 @@
     // Nothing to do .
   }
 
-
+  /**
+   * Sets the server context.
+   *
+   * @param serverContext
+   *            The server context.
+   */
+  @Override
+  public void setServerContext(final ServerContext serverContext) {
+    this.serverContext = serverContext;
+  }
 
   /**
    * {@inheritDoc}
@@ -1168,7 +1179,7 @@
       final PasswordPolicyCfg configuration) throws ConfigException,
       InitializationException
   {
-    PasswordPolicyImpl policy = new PasswordPolicyImpl(configuration);
+    PasswordPolicyImpl policy = new PasswordPolicyImpl(serverContext, configuration);
     configuration.addPasswordPolicyChangeListener(policy);
     return policy;
   }
@@ -1185,7 +1196,7 @@
   {
     try
     {
-      new PasswordPolicyImpl(configuration);
+      new PasswordPolicyImpl(null, configuration);
     }
     catch (final ConfigException ce)
     {
diff --git a/opendj-sdk/opendj3-server-dev/src/server/org/opends/server/core/SchemaConfigManager.java b/opendj-sdk/opendj3-server-dev/src/server/org/opends/server/core/SchemaConfigManager.java
index 1153173..9958ffc 100644
--- a/opendj-sdk/opendj3-server-dev/src/server/org/opends/server/core/SchemaConfigManager.java
+++ b/opendj-sdk/opendj3-server-dev/src/server/org/opends/server/core/SchemaConfigManager.java
@@ -64,11 +64,17 @@
   /** The schema that has been parsed from the server configuration. */
   private Schema schema;
 
+  private final ServerContext serverContext;
+
   /**
    * Creates a new instance of this schema config manager.
+   *
+   * @param serverContext
+   *            The server context.
    */
-  public SchemaConfigManager()
+  public SchemaConfigManager(ServerContext serverContext)
   {
+    this.serverContext = serverContext;
     schema = new Schema();
   }
 
@@ -147,7 +153,7 @@
          throws ConfigException, InitializationException
   {
     AttributeSyntaxConfigManager syntaxConfigManager =
-         new AttributeSyntaxConfigManager();
+         new AttributeSyntaxConfigManager(serverContext);
     syntaxConfigManager.initializeAttributeSyntaxes();
   }
 
diff --git a/opendj-sdk/opendj3-server-dev/src/server/org/opends/server/core/ServerContext.java b/opendj-sdk/opendj3-server-dev/src/server/org/opends/server/core/ServerContext.java
index e2bd1d6..11d62bf 100644
--- a/opendj-sdk/opendj3-server-dev/src/server/org/opends/server/core/ServerContext.java
+++ b/opendj-sdk/opendj3-server-dev/src/server/org/opends/server/core/ServerContext.java
@@ -25,6 +25,8 @@
  */
 package org.opends.server.core;
 
+import org.opends.server.types.Schema;
+
 /**
  * Context for the server, giving access to global properties of the server.
  */
@@ -45,4 +47,11 @@
    */
   public String getServerRoot();
 
+  /**
+   * Returns the schema of the server.
+   *
+   * @return the schema
+   */
+  public Schema getSchema();
+
 }
diff --git a/opendj-sdk/opendj3-server-dev/src/server/org/opends/server/extensions/LDAPPassThroughAuthenticationPolicyFactory.java b/opendj-sdk/opendj3-server-dev/src/server/org/opends/server/extensions/LDAPPassThroughAuthenticationPolicyFactory.java
index e02a49e..4d93368 100644
--- a/opendj-sdk/opendj3-server-dev/src/server/org/opends/server/extensions/LDAPPassThroughAuthenticationPolicyFactory.java
+++ b/opendj-sdk/opendj3-server-dev/src/server/org/opends/server/extensions/LDAPPassThroughAuthenticationPolicyFactory.java
@@ -50,6 +50,7 @@
 import org.opends.server.config.ConfigException;
 import org.opends.server.core.DirectoryServer;
 import org.opends.server.core.ModifyOperation;
+import org.opends.server.core.ServerContext;
 import org.opends.server.protocols.internal.InternalClientConnection;
 import org.opends.server.protocols.ldap.*;
 import org.opends.server.schema.GeneralizedTimeSyntax;
@@ -2162,6 +2163,8 @@
   // The provider which should be used by policies to create LDAP connections.
   private final Provider provider;
 
+  private ServerContext serverContext;
+
   /**
    * The default LDAP connection factory provider.
    */
@@ -2390,7 +2393,16 @@
     this(DEFAULT_PROVIDER);
   }
 
-
+  /**
+   * Sets the server context.
+   *
+   * @param serverContext
+   *            The server context.
+   */
+  @Override
+  public void setServerContext(ServerContext serverContext) {
+    this.serverContext = serverContext;
+  }
 
   /**
    * Package private constructor allowing unit tests to provide mock connection
diff --git a/opendj-sdk/opendj3-server-dev/src/server/org/opends/server/schema/MatchingRuleSyntax.java b/opendj-sdk/opendj3-server-dev/src/server/org/opends/server/schema/MatchingRuleSyntax.java
index 45850ed..19c9e4c 100644
--- a/opendj-sdk/opendj3-server-dev/src/server/org/opends/server/schema/MatchingRuleSyntax.java
+++ b/opendj-sdk/opendj3-server-dev/src/server/org/opends/server/schema/MatchingRuleSyntax.java
@@ -546,8 +546,7 @@
 
         // See if the server recognizes that syntax.  If not, then log a
         // warning.
-        syntax = DirectoryServer.getAttributeSyntax(oidBuffer.toString(),
-                                                    false);
+        syntax = DirectoryServer.getSchema().getSyntax(oidBuffer.toString(), false);
         if (syntax == null)
         {
           logger.error(ERR_ATTR_SYNTAX_MR_UNKNOWN_SYNTAX, valueStr, oidBuffer);
diff --git a/opendj-sdk/opendj3-server-dev/src/server/org/opends/server/schema/ObjectIdentifierFirstComponentEqualityMatchingRule.java b/opendj-sdk/opendj3-server-dev/src/server/org/opends/server/schema/ObjectIdentifierFirstComponentEqualityMatchingRule.java
index 4f14222..03c617c 100644
--- a/opendj-sdk/opendj3-server-dev/src/server/org/opends/server/schema/ObjectIdentifierFirstComponentEqualityMatchingRule.java
+++ b/opendj-sdk/opendj3-server-dev/src/server/org/opends/server/schema/ObjectIdentifierFirstComponentEqualityMatchingRule.java
@@ -276,10 +276,10 @@
       }
     }
 
-    AttributeSyntax syntax1 = DirectoryServer.getAttributeSyntax(oid, false);
+    AttributeSyntax syntax1 = DirectoryServer.getSchema().getSyntax(oid, false);
     if (syntax1 != null)
     {
-      AttributeSyntax syntax2 = DirectoryServer.getAttributeSyntax(value2String,
+      AttributeSyntax syntax2 = DirectoryServer.getSchema().getSyntax(value2String,
                                                                    false);
       if (syntax2 == null)
       {
diff --git a/opendj-sdk/opendj3-server-dev/src/server/org/opends/server/types/DirectoryConfig.java b/opendj-sdk/opendj3-server-dev/src/server/org/opends/server/types/DirectoryConfig.java
index 3332586..005e7f9 100644
--- a/opendj-sdk/opendj3-server-dev/src/server/org/opends/server/types/DirectoryConfig.java
+++ b/opendj-sdk/opendj3-server-dev/src/server/org/opends/server/types/DirectoryConfig.java
@@ -418,29 +418,6 @@
     return DirectoryServer.getAttributeSyntaxes();
   }
 
-
-
-  /**
-   * Retrieves the requested attribute syntax.
-   *
-   * @param  oid           The OID of the syntax to retrieve.
-   * @param  allowDefault  Indicates whether to return the default
-   *                       attribute syntax if the requested syntax is
-   *                       unknown.
-   *
-   * @return  The requested attribute syntax, the default syntax if
-   *          the requested syntax is unknown and the caller has
-   *          indicated that the default is acceptable, or
-   *          <CODE>null</CODE> otherwise.
-   */
-  public static AttributeSyntax
-       getAttributeSyntax(String oid, boolean allowDefault)
-  {
-    return DirectoryServer.getAttributeSyntax(oid, allowDefault);
-  }
-
-
-
   /**
    * Retrieves the default attribute syntax that should be used for
    * attributes that are not defined in the server schema.
diff --git a/opendj-sdk/opendj3-server-dev/src/server/org/opends/server/types/Schema.java b/opendj-sdk/opendj3-server-dev/src/server/org/opends/server/types/Schema.java
index 79c7dca..d9c472e 100644
--- a/opendj-sdk/opendj3-server-dev/src/server/org/opends/server/types/Schema.java
+++ b/opendj-sdk/opendj3-server-dev/src/server/org/opends/server/types/Schema.java
@@ -39,6 +39,7 @@
 import java.util.concurrent.ConcurrentHashMap;
 
 import org.forgerock.i18n.LocalizableMessage;
+import org.opends.server.admin.std.server.DirectoryStringAttributeSyntaxCfg;
 import org.forgerock.i18n.slf4j.LocalizedLogger;
 import org.forgerock.opendj.ldap.ByteString;
 import org.forgerock.opendj.ldap.ModificationType;
@@ -119,6 +120,11 @@
   private ConcurrentHashMap<String,AttributeSyntax<?>> syntaxes;
 
   /**
+   * The default attribute syntax to use for attributes with no defined syntax.
+   */
+  private AttributeSyntax<DirectoryStringAttributeSyntaxCfg> defaultSyntax;
+
+  /**
    * The entire set of matching rules for this schema, mapped between the
    * lowercase names and OID for the definition and the matching rule itself.
    */
@@ -836,7 +842,28 @@
     return syntaxes.containsKey(lowerName);
   }
 
+  /**
+   * Retrieves the requested attribute syntax.
+   *
+   * @param oid
+   *          The OID of the syntax to retrieve.
+   * @param allowDefault
+   *          Indicates whether to return the default attribute syntax if the
+   *          requested syntax is unknown.
+   * @return The requested attribute syntax, the default syntax if the requested
+   *         syntax is unknown and the caller has indicated that the default is
+   *         acceptable, or <CODE>null</CODE> otherwise.
+   */
+  public AttributeSyntax getSyntax(String oid, boolean allowDefault)
+  {
+    AttributeSyntax syntax = getSyntax(oid);
+    if (syntax == null && allowDefault)
+    {
+      return getDefaultSyntax();
+    }
 
+    return syntax;
+  }
 
   /**
    * Retrieves the attribute syntax definition with the OID.
@@ -852,6 +879,32 @@
     return syntaxes.get(lowerName);
   }
 
+  /**
+   * Retrieves the default attribute syntax that should be used for attributes
+   * that are not defined in the server schema.
+   *
+   * @return  The default attribute syntax that should be used for attributes
+   *          that are not defined in the server schema.
+   */
+  public AttributeSyntax getDefaultSyntax()
+  {
+    return defaultSyntax;
+  }
+
+
+
+  /**
+   * Registers the defaut syntax for this schema.
+   *
+   * @param defaultSyntax
+   *            The defautl syntax to use.
+   */
+  public void registerDefaultSyntax(
+      AttributeSyntax<DirectoryStringAttributeSyntaxCfg> defaultSyntax)
+  {
+    this.defaultSyntax = defaultSyntax;
+  }
+
 
 
   /**
diff --git a/opendj-sdk/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/schema/AttributeTypeSyntaxTest.java b/opendj-sdk/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/schema/AttributeTypeSyntaxTest.java
index 8ab6967..f295201 100644
--- a/opendj-sdk/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/schema/AttributeTypeSyntaxTest.java
+++ b/opendj-sdk/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/schema/AttributeTypeSyntaxTest.java
@@ -159,7 +159,7 @@
     // server.
     AttributeTypeSyntax attrTypeSyntax =
       (AttributeTypeSyntax)
-      DirectoryServer.getAttributeSyntax("1.3.6.1.4.1.1466.115.121.1.3", false);
+      DirectoryServer.getSchema().getSyntax("1.3.6.1.4.1.1466.115.121.1.3", false);
     assertNotNull(attrTypeSyntax);
 
 
diff --git a/opendj-sdk/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/schema/ConfigurableAttributeSyntaxTest.java b/opendj-sdk/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/schema/ConfigurableAttributeSyntaxTest.java
index 74f75e2..07aac00 100644
--- a/opendj-sdk/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/schema/ConfigurableAttributeSyntaxTest.java
+++ b/opendj-sdk/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/schema/ConfigurableAttributeSyntaxTest.java
@@ -115,7 +115,7 @@
               config.getEntry());
 
     TelephoneNumberSyntax syntax =
-         (TelephoneNumberSyntax) DirectoryServer.getAttributeSyntax(oid, false);
+         (TelephoneNumberSyntax) DirectoryServer.getSchema().getSyntax(oid, false);
 
     // apply the configuration.
     ArrayList<LocalizableMessage> unacceptableReasons = new ArrayList<LocalizableMessage>();

--
Gitblit v1.10.0