From 43a01cb8d6c368843baa014eb80be265bfe092e7 Mon Sep 17 00:00:00 2001
From: Nicolas Capponi <nicolas.capponi@forgerock.com>
Date: Fri, 01 Jul 2016 13:46:08 +0000
Subject: [PATCH] OPENDJ-3038 Merge ServerSchemaElement class into SchemaUtils class

---
 opendj-server-legacy/src/main/java/org/opends/server/util/SchemaUtils.java |   88 ++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 88 insertions(+), 0 deletions(-)

diff --git a/opendj-server-legacy/src/main/java/org/opends/server/util/SchemaUtils.java b/opendj-server-legacy/src/main/java/org/opends/server/util/SchemaUtils.java
index d0fa47d..166b2d0 100644
--- a/opendj-server-legacy/src/main/java/org/opends/server/util/SchemaUtils.java
+++ b/opendj-server-legacy/src/main/java/org/opends/server/util/SchemaUtils.java
@@ -15,15 +15,21 @@
  */
 package org.opends.server.util;
 
+import static org.opends.server.types.Schema.addSchemaFileToElementDefinitionIfAbsent;
 import static org.opends.server.schema.SchemaConstants.SYNTAX_AUTH_PASSWORD_OID;
 import static org.opends.server.schema.SchemaConstants.SYNTAX_USER_PASSWORD_OID;
 
 import java.util.Collection;
 import java.util.HashSet;
+import java.util.List;
 import java.util.Set;
 
 import org.forgerock.opendj.ldap.schema.AttributeType;
 import org.forgerock.opendj.ldap.schema.ObjectClass;
+import org.forgerock.opendj.ldap.schema.Schema;
+import org.forgerock.opendj.ldap.schema.SchemaBuilder;
+import org.forgerock.opendj.ldap.schema.SchemaElement;
+import org.opends.server.core.ServerContext;
 
 /** Utility methods related to schema. */
 public class SchemaUtils
@@ -67,6 +73,60 @@
   }
 
   /**
+   * Retrieves the definition string used to create the provided schema element and including the
+   * X-SCHEMA-FILE extension.
+   *
+   * @param element
+   *            The schema element.
+   * @return The definition string used to create the schema element including the X-SCHEMA-FILE
+   *         extension.
+   */
+  public static String getElementDefinitionWithFileName(SchemaElement element)
+  {
+    final String definition = element.toString();
+    return addSchemaFileToElementDefinitionIfAbsent(definition, SchemaUtils.getElementSchemaFile(element));
+  }
+
+  /**
+   * Returns the origin of the provided schema element.
+   *
+   * @param element
+   *            The schema element.
+   * @return the origin of the schema element as defined in the extra properties.
+   */
+  public static String getElementOrigin(SchemaElement element)
+  {
+    return getElementPropertyAsSingleValue(element, ServerConstants.SCHEMA_PROPERTY_ORIGIN);
+  }
+
+  /**
+   * Returns the single value of the provided extra property for the provided schema element.
+   *
+   * @param element
+   *            The schema element.
+   * @param property
+   *            The name of property to retrieve.
+   * @return the single value of the extra property
+   */
+  public static String getElementPropertyAsSingleValue(SchemaElement element, String property)
+  {
+    List<String> values = element.getExtraProperties().get(property);
+    return values != null && !values.isEmpty() ? values.get(0) : null;
+  }
+
+  /**
+   * Returns the schema file of the provided schema element.
+   *
+   * @param element
+   *            The schema element.
+   * @return the schema file of schema element.
+   */
+  public static String getElementSchemaFile(SchemaElement element)
+  {
+    return getElementPropertyAsSingleValue(element, ServerConstants.SCHEMA_PROPERTY_FILENAME);
+  }
+
+  /**
    * Returns a new collection with the result of calling {@link ObjectClass#getNameOrOID()} on each
    * element of the provided collection.
    *
@@ -101,4 +161,32 @@
     }
     return results;
   }
+
+  /**
+   * Returns the new updated attribute type with the provided extra property and its values.
+   *
+   * @param serverContext
+   *          the server context
+   * @param attributeType
+   *          attribute type to update
+   * @param property
+   *          the property to set
+   * @param values
+   *          the values to set
+   * @return the new updated attribute type
+   */
+  public static AttributeType getNewAttributeTypeWithProperty(ServerContext serverContext, AttributeType attributeType,
+      String property, String...values)
+  {
+    SchemaBuilder schemaBuilder =
+         new SchemaBuilder(serverContext != null ? serverContext.getSchemaNG() : Schema.getDefaultSchema());
+    AttributeType.Builder builder =
+        schemaBuilder.buildAttributeType(attributeType).removeExtraProperty(property, (String) null);
+    if (values != null && values.length > 0)
+    {
+      builder.extraProperties(property, values);
+      return builder.addToSchemaOverwrite().toSchema().getAttributeType(attributeType.getNameOrOID());
+    }
+    return attributeType;
+  }
 }

--
Gitblit v1.10.0