From 19004a003b3e4387de43f8c399971187156f3d54 Mon Sep 17 00:00:00 2001
From: Nicolas Capponi <nicolas.capponi@forgerock.com>
Date: Mon, 30 May 2016 10:43:11 +0000
Subject: [PATCH] OPENDJ-2987 Remove object class parsing in ObjectClassSyntax class - now responsability of Schema class
---
opendj-server-legacy/src/main/java/org/opends/server/backends/SchemaBackend.java | 89 ++++++++++++++++++++++----------------------
1 files changed, 44 insertions(+), 45 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 f2f2874..2f59cf4 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
@@ -16,6 +16,7 @@
*/
package org.opends.server.backends;
+import static org.forgerock.opendj.ldap.ResultCode.*;
import static org.forgerock.util.Reject.*;
import static org.opends.messages.BackendMessages.*;
import static org.opends.messages.ConfigMessages.*;
@@ -48,6 +49,7 @@
import java.util.TreeSet;
import org.forgerock.i18n.LocalizableMessage;
+import org.forgerock.i18n.LocalizableMessageDescriptor.Arg2;
import org.forgerock.i18n.slf4j.LocalizedLogger;
import org.forgerock.opendj.config.server.ConfigChangeResult;
import org.forgerock.opendj.config.server.ConfigException;
@@ -85,7 +87,6 @@
import org.opends.server.schema.DITStructureRuleSyntax;
import org.opends.server.schema.GeneralizedTimeSyntax;
import org.opends.server.schema.NameFormSyntax;
-import org.opends.server.schema.ObjectClassSyntax;
import org.opends.server.schema.ServerSchemaElement;
import org.opends.server.schema.SomeSchemaElement;
import org.opends.server.types.Attribute;
@@ -762,22 +763,8 @@
{
for (ByteString v : a)
{
- ObjectClass oc;
- try
- {
- oc = ObjectClassSyntax.decodeObjectClass(v, newSchema, false);
- }
- catch (DirectoryException de)
- {
- logger.traceException(de);
-
- LocalizableMessage message = ERR_SCHEMA_MODIFY_CANNOT_DECODE_OBJECTCLASS.
- get(v, de.getMessageObject());
- throw new DirectoryException(
- ResultCode.INVALID_ATTRIBUTE_SYNTAX, message, de);
- }
-
- addObjectClass(oc, newSchema, modifiedSchemaFiles);
+ ObjectClass objectClass = newSchema.parseObjectClass(v.toString());
+ addObjectClass(objectClass, newSchema, modifiedSchemaFiles);
}
}
else if (at.equals(nameFormsType))
@@ -900,21 +887,7 @@
{
for (ByteString v : a)
{
- ObjectClass oc;
- try
- {
- oc = ObjectClassSyntax.decodeObjectClass(v, newSchema, false);
- }
- catch (DirectoryException de)
- {
- logger.traceException(de);
-
- LocalizableMessage message = ERR_SCHEMA_MODIFY_CANNOT_DECODE_OBJECTCLASS.
- get(v, de.getMessageObject());
- throw new DirectoryException(
- ResultCode.INVALID_ATTRIBUTE_SYNTAX, message, de);
- }
-
+ ObjectClass oc = newSchema.parseObjectClass(v.toString());
removeObjectClass(oc, newSchema, mods, pos, modifiedSchemaFiles);
}
}
@@ -1194,7 +1167,7 @@
String schemaFile = replaceExistingSchemaElement(
modifiedSchemaFiles, new SomeSchemaElement(attributeType), new SomeSchemaElement(existingType));
schema.registerAttributeType(attributeType, schemaFile, false);
- schema.rebuildDependentElements(new SomeSchemaElement(existingType));
+ schema.rebuildDependentElements(existingType);
}
}
@@ -1545,15 +1518,14 @@
// Otherwise, we're replacing an existing one.
if (existingClass.isPlaceHolder())
{
- schema.registerObjectClass(objectClass, false);
- addNewSchemaElement(modifiedSchemaFiles, objectClass);
+ String schemaFile = addNewSchemaElement(modifiedSchemaFiles, new SomeSchemaElement(objectClass));
+ schema.registerObjectClass(objectClass, schemaFile, false);
}
else
{
- schema.deregisterObjectClass(existingClass);
- schema.registerObjectClass(objectClass, false);
- schema.rebuildDependentElements(existingClass);
- replaceExistingSchemaElement(modifiedSchemaFiles, objectClass, existingClass);
+ final String schemaFile = replaceExistingSchemaElement(
+ modifiedSchemaFiles, new SomeSchemaElement(objectClass), new SomeSchemaElement(existingClass));
+ schema.replaceObjectClass(objectClass, existingClass, schemaFile);
}
}
@@ -1618,7 +1590,7 @@
ObjectClass oc;
try
{
- oc = ObjectClassSyntax.decodeObjectClass(v, schema, true);
+ oc = schema.parseObjectClass(v.toString());
}
catch (DirectoryException de)
{
@@ -3448,7 +3420,7 @@
{
// It IS important here to allow the unknown elements that could
// appear in the new config schema.
- ObjectClass newObjectClass = ObjectClassSyntax.decodeObjectClass(v, newSchema, true);
+ ObjectClass newObjectClass = newSchema.parseObjectClass(v.toString());
String schemaFile = getSchemaFile(newObjectClass);
if (CONFIG_SCHEMA_ELEMENTS_FILE.equals(schemaFile))
{
@@ -3458,10 +3430,8 @@
continue;
}
- // Now we know we are not in the config schema, let's check
- // the unknown elements ... sadly but simply by redoing the
- // whole decoding.
- newObjectClass = ObjectClassSyntax.decodeObjectClass(v, newSchema, false);
+ // Now we know we are not in the config schema, let's check the unknown elements ...
+ validateNoUnknownElements(newObjectClass);
oidList.add(newObjectClass.getOID());
try
{
@@ -3517,6 +3487,35 @@
}
}
+ private void validateNoUnknownElements(ObjectClass oc) throws DirectoryException
+ {
+ validateNoUnknownElements(oc.getDeclaredOptionalAttributes(), oc.getOID(),
+ WARN_ATTR_SYNTAX_OBJECTCLASS_UNKNOWN_OPTIONAL_ATTR);
+ validateNoUnknownElements(oc.getDeclaredRequiredAttributes(), oc.getOID(),
+ WARN_ATTR_SYNTAX_OBJECTCLASS_UNKNOWN_REQUIRED_ATTR);
+ for (ObjectClass superiorClass : oc.getSuperiorClasses())
+ {
+ if (superiorClass.isPlaceHolder())
+ {
+ LocalizableMessage message =
+ WARN_ATTR_SYNTAX_OBJECTCLASS_UNKNOWN_SUPERIOR_CLASS.get(oc.getOID(), superiorClass.getOID());
+ throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message);
+ }
+ }
+ }
+
+ private void validateNoUnknownElements(Set<AttributeType> attributeTypes, String oid, Arg2<Object, Object> msg)
+ throws DirectoryException
+ {
+ for (AttributeType attributeType : attributeTypes)
+ {
+ if (attributeType.isPlaceHolder())
+ {
+ throw new DirectoryException(CONSTRAINT_VIOLATION, msg.get(oid, attributeType.getOID()));
+ }
+ }
+ }
+
@Override
public void createBackup(BackupConfig backupConfig) throws DirectoryException
{
--
Gitblit v1.10.0