From ab8845f3c17fd0313ac8a705a71b28a3ed21a2c4 Mon Sep 17 00:00:00 2001
From: Jean-Noël Rouvignac <jean-noel.rouvignac@forgerock.com>
Date: Mon, 06 Jun 2016 18:40:37 +0000
Subject: [PATCH] OPENDJ-3037 Remove LDAPSyntaxDescription class

---
 opendj-server-legacy/src/main/java/org/opends/server/backends/SchemaBackend.java |   70 ++++++++++++++++++++++++----------
 1 files changed, 49 insertions(+), 21 deletions(-)

diff --git a/opendj-server-legacy/src/main/java/org/opends/server/backends/SchemaBackend.java b/opendj-server-legacy/src/main/java/org/opends/server/backends/SchemaBackend.java
index b16283a..f80407b 100644
--- a/opendj-server-legacy/src/main/java/org/opends/server/backends/SchemaBackend.java
+++ b/opendj-server-legacy/src/main/java/org/opends/server/backends/SchemaBackend.java
@@ -69,6 +69,7 @@
 import org.forgerock.opendj.ldap.schema.NameForm;
 import org.forgerock.opendj.ldap.schema.ObjectClass;
 import org.forgerock.opendj.ldap.schema.SchemaElement;
+import org.forgerock.opendj.ldap.schema.Syntax;
 import org.forgerock.opendj.server.config.server.SchemaBackendCfg;
 import org.opends.server.api.AlertGenerator;
 import org.opends.server.api.Backend;
@@ -94,7 +95,6 @@
 import org.opends.server.types.ExistingFileBehavior;
 import org.opends.server.types.IndexType;
 import org.opends.server.types.InitializationException;
-import org.opends.server.types.LDAPSyntaxDescription;
 import org.opends.server.types.LDIFExportConfig;
 import org.opends.server.types.LDIFImportConfig;
 import org.opends.server.types.LDIFImportResult;
@@ -316,8 +316,8 @@
       Set<String> newDCRs = new LinkedHashSet<>();
       Set<String> newDSRs = new LinkedHashSet<>();
       Set<String> newMRUs = new LinkedHashSet<>();
-      Set<String> newLSDs = new LinkedHashSet<>();
-      Schema.genConcatenatedSchema(newATs, newOCs, newNFs, newDCRs, newDSRs, newMRUs,newLSDs);
+      Set<String> newLSs = new LinkedHashSet<>();
+      Schema.genConcatenatedSchema(newATs, newOCs, newNFs, newDCRs, newDSRs, newMRUs, newLSs);
 
       // Next, generate lists of elements from the previous concatenated schema.
       // If there isn't a previous concatenated schema, then use the base
@@ -365,9 +365,9 @@
       Set<String> oldDCRs = new LinkedHashSet<>();
       Set<String> oldDSRs = new LinkedHashSet<>();
       Set<String> oldMRUs = new LinkedHashSet<>();
-      Set<String> oldLSDs = new LinkedHashSet<>();
+      Set<String> oldLSs = new LinkedHashSet<>();
       Schema.readConcatenatedSchema(concatFilePath, oldATs, oldOCs, oldNFs,
-                                    oldDCRs, oldDSRs, oldMRUs,oldLSDs);
+                                    oldDCRs, oldDSRs, oldMRUs,oldLSs);
 
       // Create a list of modifications and add any differences between the old
       // and new schema into them.
@@ -378,7 +378,7 @@
       Schema.compareConcatenatedSchema(oldDCRs, newDCRs, ditContentRulesType, mods);
       Schema.compareConcatenatedSchema(oldDSRs, newDSRs, ditStructureRulesType, mods);
       Schema.compareConcatenatedSchema(oldMRUs, newMRUs, matchingRuleUsesType, mods);
-      Schema.compareConcatenatedSchema(oldLSDs, newLSDs, ldapSyntaxesType, mods);
+      Schema.compareConcatenatedSchema(oldLSs, newLSs, ldapSyntaxesType, mods);
       if (! mods.isEmpty())
       {
         // TODO : Raise an alert notification.
@@ -2118,28 +2118,27 @@
       throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message);
     }
 
-    LDAPSyntaxDescription existingLSD = schema.getLdapSyntaxDescription(oid);
-    // If there is no existing lsd, then we're adding a new ldapsyntax.
+    Syntax existingLS = schema.getSyntax(oid);
+    // If there is no existing ldapsyntax, then we're adding a new one.
     // Otherwise, we're replacing an existing one.
-    if (existingLSD == null)
+    if (existingLS == null)
     {
       String def = Schema.addSchemaFileToElementDefinitionIfAbsent(definition, FILE_USER_SCHEMA_ELEMENTS);
-      schema.registerLdapSyntaxDescription(def, false);
+      schema.registerSyntax(def, false);
 
-      String schemaFile = getSchemaFile(schema.getLdapSyntaxDescription(oid));
-      modifiedSchemaFiles.add(schemaFile);
+      modifiedSchemaFiles.add(getSchemaFile(schema.getSyntax(oid)));
     }
     else
     {
-      schema.deregisterLdapSyntaxDescription(existingLSD);
+      schema.deregisterSyntax(existingLS);
 
-      String oldSchemaFile = getSchemaFile(existingLSD);
+      String oldSchemaFile = getSchemaFile(existingLS);
       String schemaFile = oldSchemaFile != null && oldSchemaFile.length() > 0 ?
           oldSchemaFile : FILE_USER_SCHEMA_ELEMENTS;
       String def = Schema.addSchemaFileToElementDefinitionIfAbsent(definition, schemaFile);
-      schema.registerLdapSyntaxDescription(def, false);
+      schema.registerSyntax(def, false);
 
-      String newSchemaFile = getSchemaFile(schema.getLdapSyntaxDescription(oid));
+      String newSchemaFile = getSchemaFile(schema.getSyntax(oid));
       addIfNotNull(modifiedSchemaFiles, oldSchemaFile);
       addIfNotNull(modifiedSchemaFiles, newSchemaFile);
     }
@@ -2157,16 +2156,16 @@
      */
     String oid = Schema.parseOID(definition, ERR_PARSING_LDAP_SYNTAX_OID);
 
-    LDAPSyntaxDescription removeLSD = schema.getLdapSyntaxDescription(oid);
-    if (removeLSD == null)
+    Syntax removeLS = schema.getSyntax(oid);
+    if (removeLS == null)
     {
       LocalizableMessage message =
           ERR_SCHEMA_MODIFY_REMOVE_NO_SUCH_LSD.get(oid);
       throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
     }
 
-    schema.deregisterLdapSyntaxDescription(removeLSD);
-    addIfNotNull(modifiedSchemaFiles, getSchemaFile(removeLSD));
+    schema.deregisterSyntax(removeLS);
+    addIfNotNull(modifiedSchemaFiles, getSchemaFile(removeLS));
   }
 
   /**
@@ -2223,7 +2222,7 @@
      * this only for the real part of the ldapsyntaxes attribute. The real part
      * is read and write to/from the schema files.
      */
-    Set<ByteString> values = getValuesForSchemaFile(schema.getLdapSyntaxDescriptions(), schemaFile);
+    Set<ByteString> values = getValuesForSchemaFile(getCustomSyntaxes(schema), schemaFile);
     addAttribute(schemaEntry, ldapSyntaxesType, values);
 
     // Add all of the appropriate attribute types to the schema entry.  We need
@@ -2283,6 +2282,35 @@
     return tempFile;
   }
 
+  /**
+   * Returns custom syntaxes defined by OpenDJ configuration or by users.
+   * <p>
+   * These are non-standard syntaxes.
+   *
+   * @param schema
+   *          the schema where to extract custom syntaxes from
+   * @return custom, non-standard syntaxes
+   */
+  private Collection<Syntax> getCustomSyntaxes(Schema schema)
+  {
+    List<Syntax> results = new ArrayList<>();
+    for (Syntax syntax : schema.getSyntaxes())
+    {
+      for (String propertyName : syntax.getExtraProperties().keySet())
+      {
+        if ("x-subst".equalsIgnoreCase(propertyName)
+            || "x-pattern".equalsIgnoreCase(propertyName)
+            || "x-enum".equalsIgnoreCase(propertyName)
+            || "x-schema-file".equalsIgnoreCase(propertyName))
+        {
+          results.add(syntax);
+          break;
+        }
+      }
+    }
+    return results;
+  }
+
   private Set<ByteString> getValuesForSchemaFile(Collection<? extends SchemaElement> schemaElements, String schemaFile)
   {
     Set<ByteString> values = new LinkedHashSet<>();

--
Gitblit v1.10.0