From b86eb9353bb1f8bc5a1ba62037bf29ef2d1cb4c2 Mon Sep 17 00:00:00 2001
From: Jean-Noel Rouvignac <jean-noel.rouvignac@forgerock.com>
Date: Tue, 04 Mar 2014 11:28:12 +0000
Subject: [PATCH] OPENDJ-1308 Migrate schema support
---
opendj3-server-dev/src/server/org/opends/server/backends/SchemaBackend.java | 320 ++++++++++-------------------------------------------
1 files changed, 62 insertions(+), 258 deletions(-)
diff --git a/opendj3-server-dev/src/server/org/opends/server/backends/SchemaBackend.java b/opendj3-server-dev/src/server/org/opends/server/backends/SchemaBackend.java
index 3a6a2ed..aa04f87 100644
--- a/opendj3-server-dev/src/server/org/opends/server/backends/SchemaBackend.java
+++ b/opendj3-server-dev/src/server/org/opends/server/backends/SchemaBackend.java
@@ -1413,8 +1413,7 @@
ResultCode.INVALID_ATTRIBUTE_SYNTAX, message, de);
}
- removeDITContentRule(dcr, newSchema, mods, pos,
- modifiedSchemaFiles);
+ removeDITContentRule(dcr, newSchema, modifiedSchemaFiles);
}
}
else if (at.equals(ditStructureRulesType))
@@ -1461,8 +1460,7 @@
ResultCode.INVALID_ATTRIBUTE_SYNTAX, message, de);
}
- removeMatchingRuleUse(mru, newSchema, mods, pos,
- modifiedSchemaFiles);
+ removeMatchingRuleUse(mru, newSchema, modifiedSchemaFiles);
}
}
else if (at.equals(ldapSyntaxesType))
@@ -1719,46 +1717,60 @@
if (existingType == null)
{
schema.registerAttributeType(attributeType, false);
- String schemaFile = getSchemaFile(attributeType);
- if ((schemaFile == null) || (schemaFile.length() == 0))
- {
- schemaFile = FILE_USER_SCHEMA_ELEMENTS;
- setSchemaFile(attributeType, schemaFile);
- }
-
- modifiedSchemaFiles.add(schemaFile);
+ addNewSchemaElement(modifiedSchemaFiles, attributeType);
}
else
{
schema.deregisterAttributeType(existingType);
schema.registerAttributeType(attributeType, false);
schema.rebuildDependentElements(existingType);
+ replaceExistingSchemaElement(modifiedSchemaFiles, attributeType,
+ existingType);
+ }
+ }
- if ((getSchemaFile(attributeType) == null)
- || (getSchemaFile(attributeType).length() == 0))
+
+
+ private void addNewSchemaElement(Set<String> modifiedSchemaFiles,
+ SchemaFileElement elem)
+ {
+ String schemaFile = getSchemaFile(elem);
+ if ((schemaFile == null) || (schemaFile.length() == 0))
+ {
+ schemaFile = FILE_USER_SCHEMA_ELEMENTS;
+ setSchemaFile(elem, schemaFile);
+ }
+
+ modifiedSchemaFiles.add(schemaFile);
+ }
+
+
+
+ private <T extends SchemaFileElement> void replaceExistingSchemaElement(
+ Set<String> modifiedSchemaFiles, T newElem, T existingElem)
+ {
+ String newSchemaFile = getSchemaFile(newElem);
+ String oldSchemaFile = getSchemaFile(existingElem);
+ if (newSchemaFile == null || newSchemaFile.length() == 0)
+ {
+ if (oldSchemaFile == null || oldSchemaFile.length() == 0)
{
- String schemaFile = getSchemaFile(existingType);
- if ((schemaFile == null) || (schemaFile.length() == 0))
- {
- schemaFile = FILE_USER_SCHEMA_ELEMENTS;
- }
+ oldSchemaFile = FILE_USER_SCHEMA_ELEMENTS;
+ }
- setSchemaFile(attributeType, schemaFile);
- modifiedSchemaFiles.add(schemaFile);
+ setSchemaFile(newElem, oldSchemaFile);
+ modifiedSchemaFiles.add(oldSchemaFile);
+ }
+ else
+ {
+ if ((oldSchemaFile == null) || oldSchemaFile.equals(newSchemaFile))
+ {
+ modifiedSchemaFiles.add(newSchemaFile);
}
else
{
- String newSchemaFile = getSchemaFile(attributeType);
- String oldSchemaFile = getSchemaFile(existingType);
- if ((oldSchemaFile == null) || oldSchemaFile.equals(newSchemaFile))
- {
- modifiedSchemaFiles.add(newSchemaFile);
- }
- else
- {
- modifiedSchemaFiles.add(newSchemaFile);
- modifiedSchemaFiles.add(oldSchemaFile);
- }
+ modifiedSchemaFiles.add(newSchemaFile);
+ modifiedSchemaFiles.add(oldSchemaFile);
}
}
}
@@ -2048,47 +2060,15 @@
if (existingClass == null)
{
schema.registerObjectClass(objectClass, false);
- String schemaFile = getSchemaFile(objectClass);
- if ((schemaFile == null) || (schemaFile.length() == 0))
- {
- schemaFile = FILE_USER_SCHEMA_ELEMENTS;
- setSchemaFile(objectClass, schemaFile);
- }
-
- modifiedSchemaFiles.add(schemaFile);
+ addNewSchemaElement(modifiedSchemaFiles, objectClass);
}
else
{
schema.deregisterObjectClass(existingClass);
schema.registerObjectClass(objectClass, false);
schema.rebuildDependentElements(existingClass);
-
- if ((getSchemaFile(objectClass) == null)
- || (getSchemaFile(objectClass).length() == 0))
- {
- String schemaFile = getSchemaFile(existingClass);
- if ((schemaFile == null) || (schemaFile.length() == 0))
- {
- schemaFile = FILE_USER_SCHEMA_ELEMENTS;
- }
-
- setSchemaFile(objectClass, schemaFile);
- modifiedSchemaFiles.add(schemaFile);
- }
- else
- {
- String newSchemaFile = getSchemaFile(objectClass);
- String oldSchemaFile = getSchemaFile(existingClass);
- if ((oldSchemaFile == null) || oldSchemaFile.equals(newSchemaFile))
- {
- modifiedSchemaFiles.add(newSchemaFile);
- }
- else
- {
- modifiedSchemaFiles.add(newSchemaFile);
- modifiedSchemaFiles.add(oldSchemaFile);
- }
- }
+ replaceExistingSchemaElement(modifiedSchemaFiles, objectClass,
+ existingClass);
}
}
@@ -2351,47 +2331,14 @@
if (existingNF == null)
{
schema.registerNameForm(nameForm, false);
- String schemaFile = getSchemaFile(nameForm);
- if ((schemaFile == null) || (schemaFile.length() == 0))
- {
- schemaFile = FILE_USER_SCHEMA_ELEMENTS;
- setSchemaFile(nameForm, schemaFile);
- }
-
- modifiedSchemaFiles.add(schemaFile);
+ addNewSchemaElement(modifiedSchemaFiles, nameForm);
}
else
{
schema.deregisterNameForm(existingNF);
schema.registerNameForm(nameForm, false);
schema.rebuildDependentElements(existingNF);
-
- if ((getSchemaFile(nameForm) == null) ||
- (getSchemaFile(nameForm).length() == 0))
- {
- String schemaFile = getSchemaFile(existingNF);
- if ((schemaFile == null) || (schemaFile.length() == 0))
- {
- schemaFile = FILE_USER_SCHEMA_ELEMENTS;
- }
-
- setSchemaFile(nameForm, schemaFile);
- modifiedSchemaFiles.add(schemaFile);
- }
- else
- {
- String newSchemaFile = getSchemaFile(nameForm);
- String oldSchemaFile = getSchemaFile(existingNF);
- if ((oldSchemaFile == null) || oldSchemaFile.equals(newSchemaFile))
- {
- modifiedSchemaFiles.add(newSchemaFile);
- }
- else
- {
- modifiedSchemaFiles.add(newSchemaFile);
- modifiedSchemaFiles.add(oldSchemaFile);
- }
- }
+ replaceExistingSchemaElement(modifiedSchemaFiles, nameForm, existingNF);
}
}
@@ -2669,47 +2616,15 @@
if (existingDCR == null)
{
schema.registerDITContentRule(ditContentRule, false);
- String schemaFile = getSchemaFile(ditContentRule);
- if ((schemaFile == null) || (schemaFile.length() == 0))
- {
- schemaFile = FILE_USER_SCHEMA_ELEMENTS;
- setSchemaFile(ditContentRule, schemaFile);
- }
-
- modifiedSchemaFiles.add(schemaFile);
+ addNewSchemaElement(modifiedSchemaFiles, ditContentRule);
}
else
{
schema.deregisterDITContentRule(existingDCR);
schema.registerDITContentRule(ditContentRule, false);
schema.rebuildDependentElements(existingDCR);
-
- if ((getSchemaFile(ditContentRule) == null) ||
- (getSchemaFile(ditContentRule).length() == 0))
- {
- String schemaFile = getSchemaFile(existingDCR);
- if ((schemaFile == null) || (schemaFile.length() == 0))
- {
- schemaFile = FILE_USER_SCHEMA_ELEMENTS;
- }
-
- setSchemaFile(ditContentRule, schemaFile);
- modifiedSchemaFiles.add(schemaFile);
- }
- else
- {
- String newSchemaFile = getSchemaFile(ditContentRule);
- String oldSchemaFile = getSchemaFile(existingDCR);
- if ((oldSchemaFile == null) || oldSchemaFile.equals(newSchemaFile))
- {
- modifiedSchemaFiles.add(newSchemaFile);
- }
- else
- {
- modifiedSchemaFiles.add(newSchemaFile);
- modifiedSchemaFiles.add(oldSchemaFile);
- }
- }
+ replaceExistingSchemaElement(modifiedSchemaFiles, ditContentRule,
+ existingDCR);
}
}
@@ -2729,10 +2644,6 @@
* schema.
* @param schema The schema from which the DIT content rule
* should be removed.
- * @param modifications The full set of modifications to be processed
- * against the server schema.
- * @param currentPosition The position of the modification currently
- * being performed.
* @param modifiedSchemaFiles The names of the schema files containing
* schema elements that have been updated as part
* of the schema modification.
@@ -2742,11 +2653,7 @@
* schema.
*/
private void removeDITContentRule(DITContentRule ditContentRule,
- Schema schema,
- ArrayList<Modification> modifications,
- int currentPosition,
- Set<String> modifiedSchemaFiles)
- throws DirectoryException
+ Schema schema, Set<String> modifiedSchemaFiles) throws DirectoryException
{
// See if the specified DIT content rule is actually defined in the server
// schema. If not, then fail.
@@ -2890,47 +2797,15 @@
if (existingDSR == null)
{
schema.registerDITStructureRule(ditStructureRule, false);
- String schemaFile = getSchemaFile(ditStructureRule);
- if ((schemaFile == null) || (schemaFile.length() == 0))
- {
- schemaFile = FILE_USER_SCHEMA_ELEMENTS;
- setSchemaFile(ditStructureRule, schemaFile);
- }
-
- modifiedSchemaFiles.add(schemaFile);
+ addNewSchemaElement(modifiedSchemaFiles, ditStructureRule);
}
else
{
schema.deregisterDITStructureRule(existingDSR);
schema.registerDITStructureRule(ditStructureRule, false);
schema.rebuildDependentElements(existingDSR);
-
- if ((getSchemaFile(ditStructureRule) == null) ||
- (getSchemaFile(ditStructureRule).length() == 0))
- {
- String schemaFile = getSchemaFile(existingDSR);
- if ((schemaFile == null) || (schemaFile.length() == 0))
- {
- schemaFile = FILE_USER_SCHEMA_ELEMENTS;
- }
-
- setSchemaFile(ditStructureRule, schemaFile);
- modifiedSchemaFiles.add(schemaFile);
- }
- else
- {
- String newSchemaFile = getSchemaFile(ditStructureRule);
- String oldSchemaFile = getSchemaFile(existingDSR);
- if ((oldSchemaFile == null) || oldSchemaFile.equals(newSchemaFile))
- {
- modifiedSchemaFiles.add(newSchemaFile);
- }
- else
- {
- modifiedSchemaFiles.add(newSchemaFile);
- modifiedSchemaFiles.add(oldSchemaFile);
- }
- }
+ replaceExistingSchemaElement(modifiedSchemaFiles, ditStructureRule,
+ existingDSR);
}
}
@@ -3150,47 +3025,15 @@
if (existingMRU == null)
{
schema.registerMatchingRuleUse(matchingRuleUse, false);
- String schemaFile = getSchemaFile(matchingRuleUse);
- if ((schemaFile == null) || (schemaFile.length() == 0))
- {
- schemaFile = FILE_USER_SCHEMA_ELEMENTS;
- setSchemaFile(matchingRuleUse, schemaFile);
- }
-
- modifiedSchemaFiles.add(schemaFile);
+ addNewSchemaElement(modifiedSchemaFiles, matchingRuleUse);
}
else
{
schema.deregisterMatchingRuleUse(existingMRU);
schema.registerMatchingRuleUse(matchingRuleUse, false);
schema.rebuildDependentElements(existingMRU);
-
- if ((getSchemaFile(matchingRuleUse) == null) ||
- (getSchemaFile(matchingRuleUse).length() == 0))
- {
- String schemaFile = getSchemaFile(existingMRU);
- if ((schemaFile == null) || (schemaFile.length() == 0))
- {
- schemaFile = FILE_USER_SCHEMA_ELEMENTS;
- }
-
- setSchemaFile(matchingRuleUse, schemaFile);
- modifiedSchemaFiles.add(schemaFile);
- }
- else
- {
- String newSchemaFile = getSchemaFile(matchingRuleUse);
- String oldSchemaFile = getSchemaFile(existingMRU);
- if ((oldSchemaFile == null) || oldSchemaFile.equals(newSchemaFile))
- {
- modifiedSchemaFiles.add(newSchemaFile);
- }
- else
- {
- modifiedSchemaFiles.add(newSchemaFile);
- modifiedSchemaFiles.add(oldSchemaFile);
- }
- }
+ replaceExistingSchemaElement(modifiedSchemaFiles, matchingRuleUse,
+ existingMRU);
}
}
@@ -3211,22 +3054,15 @@
* server schema.
* @param schema The schema from which the matching rule use
* should be removed.
- * @param modifications The full set of modifications to be processed
- * against the server schema.
- * @param currentPosition The position of the modification currently
- * being performed.
* @param modifiedSchemaFiles The names of the schema files containing
* schema elements that have been updated as part
* of the schema modification.
- *
* @throws DirectoryException If a problem occurs while attempting to remove
* the provided matching rule use from the server
* schema.
*/
private void removeMatchingRuleUse(MatchingRuleUse matchingRuleUse,
Schema schema,
- ArrayList<Modification> modifications,
- int currentPosition,
Set<String> modifiedSchemaFiles)
throws DirectoryException
{
@@ -3299,47 +3135,15 @@
if (existingLSD == null)
{
schema.registerLdapSyntaxDescription(ldapSyntaxDesc, false);
- String schemaFile = getSchemaFile(ldapSyntaxDesc);
- if ((schemaFile == null) || (schemaFile.length() == 0))
- {
- schemaFile = FILE_USER_SCHEMA_ELEMENTS;
- setSchemaFile(ldapSyntaxDesc, schemaFile);
- }
-
- modifiedSchemaFiles.add(schemaFile);
+ addNewSchemaElement(modifiedSchemaFiles, ldapSyntaxDesc);
}
else
{
schema.deregisterLdapSyntaxDescription(existingLSD);
schema.registerLdapSyntaxDescription(ldapSyntaxDesc, false);
schema.rebuildDependentElements(existingLSD);
-
- if ((getSchemaFile(ldapSyntaxDesc) == null) ||
- (getSchemaFile(ldapSyntaxDesc).length() == 0))
- {
- String schemaFile = getSchemaFile(ldapSyntaxDesc);
- if ((schemaFile == null) || (schemaFile.length() == 0))
- {
- schemaFile = FILE_USER_SCHEMA_ELEMENTS;
- }
-
- setSchemaFile(ldapSyntaxDesc, schemaFile);
- modifiedSchemaFiles.add(schemaFile);
- }
- else
- {
- String newSchemaFile = getSchemaFile(ldapSyntaxDesc);
- String oldSchemaFile = getSchemaFile(existingLSD);
- if ((oldSchemaFile == null) || oldSchemaFile.equals(newSchemaFile))
- {
- modifiedSchemaFiles.add(newSchemaFile);
- }
- else
- {
- modifiedSchemaFiles.add(newSchemaFile);
- modifiedSchemaFiles.add(oldSchemaFile);
- }
- }
+ replaceExistingSchemaElement(modifiedSchemaFiles, ldapSyntaxDesc,
+ existingLSD);
}
}
--
Gitblit v1.10.0