opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/util/RemoteSchemaLoader.java
@@ -16,6 +16,7 @@ */ package org.opends.guitools.controlpanel.util; import java.util.Arrays; import java.util.HashSet; import java.util.Set; @@ -145,7 +146,7 @@ .implementation(impl) .addToSchema().toSchema().getMatchingRule(oid); } schema.registerMatchingRule(matchingRule, true); schema.registerMatchingRules(Arrays.asList(matchingRule), true); } private void registerSchemaAttr(final CustomSearchResult csr, final String schemaAttr) throws DirectoryException opendj-server-legacy/src/main/java/org/opends/server/core/MatchingRuleConfigManager.java
@@ -186,10 +186,7 @@ throws InitializationException, DirectoryException { MatchingRuleFactory<?> factory = loadMatchingRuleFactory(className, configuration, true); for (MatchingRule matchingRule: factory.getMatchingRules()) { DirectoryServer.getSchema().registerMatchingRule(matchingRule, false); } DirectoryServer.getSchema().registerMatchingRules(factory.getMatchingRules(), false); matchingRuleFactories.put(configuration.dn(),factory); } opendj-server-legacy/src/main/java/org/opends/server/types/Schema.java
@@ -16,6 +16,7 @@ */ package org.opends.server.types; import static org.forgerock.opendj.ldap.ResultCode.*; import static org.forgerock.opendj.ldap.schema.CoreSchema.*; import static org.forgerock.opendj.ldap.schema.SchemaOptions.*; import static org.opends.messages.BackendMessages.*; @@ -1058,13 +1059,11 @@ return schemaNG.getMatchingRule(nameOrOid); } /** * Registers the provided matching rule definition with this schema. * Registers the provided matching rule definitions with this schema. * * @param matchingRule * The matching rule to register with this schema. * @param matchingRules * The matching rules to register with this schema. * @param overwriteExisting * Indicates whether to overwrite an existing mapping if there are * any conflicts (i.e., another matching rule with the same OID or @@ -1073,40 +1072,30 @@ * If a conflict is encountered and the * {@code overwriteExisting} flag is set to {@code false} */ public void registerMatchingRule(final MatchingRule matchingRule, final boolean overwriteExisting) throws DirectoryException public void registerMatchingRules(Collection<MatchingRule> matchingRules, boolean overwriteExisting) throws DirectoryException { exclusiveLock.lock(); try { if (!overwriteExisting) { // check all names of the matching rules because it is not checked by SDK schema for (String name : matchingRule.getNames()) { if (schemaNG.hasMatchingRule(name)) { Collection<MatchingRule> conflictingRules = schemaNG.getMatchingRulesWithName(name); // there should be only one MatchingRule conflictingRule = conflictingRules.iterator().next(); LocalizableMessage message = ERR_SCHEMA_CONFLICTING_MR_NAME.get(matchingRule.getOID(), name, conflictingRule.getOID()); throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message); } } // Not checked by SDK schema checkNoConflictingMatchingRuleNames(matchingRules); } // now register the matching rule SchemaBuilder builder = new SchemaBuilder(schemaNG); MatchingRule.Builder b = builder.buildMatchingRule(matchingRule); if (overwriteExisting) for (MatchingRule matchingRule : matchingRules) { b.addToSchemaOverwrite(); } else { b.addToSchema(); MatchingRule.Builder b = builder.buildMatchingRule(matchingRule); if (overwriteExisting) { b.addToSchemaOverwrite(); } else { b.addToSchema(); } } switchSchema(builder.toSchema()); } @@ -1120,6 +1109,36 @@ } } private void checkNoConflictingMatchingRuleNames(Collection<MatchingRule> matchingRules) throws DirectoryException { final Map<String, MatchingRule> rules = new HashMap<>(); for (MatchingRule matchingRule : matchingRules) { for (String name : matchingRule.getNames()) { if (schemaNG.hasMatchingRule(name)) { // there should be only one MatchingRule conflictingRule = schemaNG.getMatchingRulesWithName(name).iterator().next(); throw conflictingMatchingRuleName(name, matchingRule, conflictingRule); } MatchingRule conflictingRule = rules.get(name); if (conflictingRule != null) { throw conflictingMatchingRuleName(name, matchingRule, conflictingRule); } rules.put(name, matchingRule); } } } private DirectoryException conflictingMatchingRuleName( String name, MatchingRule matchingRule, MatchingRule conflictingRule) { return new DirectoryException(CONSTRAINT_VIOLATION, ERR_SCHEMA_CONFLICTING_MR_NAME.get(matchingRule.getOID(), name, conflictingRule.getOID())); } /** * Deregisters the provided matching rule definition with this schema. * opendj-server-legacy/src/test/java/org/opends/server/backends/SchemaBackendTestCase.java
@@ -846,8 +846,8 @@ @Test public void testAddAttributeTypeObsoleteEMR() throws Exception { MatchingRule matchingRule = getMatchingRule("testAddATObsoleteEMRMatch", "1.3.6.1.4.1.26027.1.999.20", true); DirectoryServer.getSchema().registerMatchingRule(matchingRule, false); MatchingRule matchingRule = registerNewMatchingRule("testAddATObsoleteEMRMatch", "1.3.6.1.4.1.26027.1.999.20", true); try { @@ -1189,8 +1189,8 @@ @Test public void testRemoveAttributeTypeReferencedByMRU() throws Exception { MatchingRule matchingRule = getMatchingRule("testRemoveATRefByMRUMatch", "1.3.6.1.4.1.26027.1.999.17", false); DirectoryServer.getSchema().registerMatchingRule(matchingRule, false); MatchingRule matchingRule = registerNewMatchingRule("testRemoveATRefByMRUMatch", "1.3.6.1.4.1.26027.1.999.17", false); try { @@ -3695,8 +3695,8 @@ @Test public void testAddMatchingRuleUseSuccessful() throws Exception { MatchingRule matchingRule = getMatchingRule("testAddMRUSuccessfulMatch", "1.3.6.1.4.1.26027.1.999.10", false); DirectoryServer.getSchema().registerMatchingRule(matchingRule, false); MatchingRule matchingRule = registerNewMatchingRule("testAddMRUSuccessfulMatch", "1.3.6.1.4.1.26027.1.999.10", false); try { @@ -3730,8 +3730,8 @@ @Test public void testAddMatchingRuleUseToAltSchemaFile() throws Exception { MatchingRule matchingRule = getMatchingRule("testAddMRUToAltSchemaFileMatch", "1.3.6.1.4.1.26027.1.999.18", false); DirectoryServer.getSchema().registerMatchingRule(matchingRule, false); MatchingRule matchingRule = registerNewMatchingRule("testAddMRUToAltSchemaFileMatch", "1.3.6.1.4.1.26027.1.999.18", false); try { @@ -3775,8 +3775,8 @@ @Test public void testReplaceMatchingRuleUseSuccessful() throws Exception { MatchingRule matchingRule = getMatchingRule("testReplaceMRUSuccessfulMatch", "1.3.6.1.4.1.26027.1.999.11", false); DirectoryServer.getSchema().registerMatchingRule(matchingRule, false); MatchingRule matchingRule = registerNewMatchingRule("testReplaceMRUSuccessfulMatch", "1.3.6.1.4.1.26027.1.999.11", false); try { @@ -3817,8 +3817,8 @@ @Test public void testRemoveAndAddMatchingRuleUse() throws Exception { MatchingRule matchingRule = getMatchingRule("testRemoveAndAddMRUMatch", "1.3.6.1.4.1.26027.1.999.12", false); DirectoryServer.getSchema().registerMatchingRule(matchingRule, false); MatchingRule matchingRule = registerNewMatchingRule("testRemoveAndAddMRUMatch", "1.3.6.1.4.1.26027.1.999.12", false); try { @@ -3865,8 +3865,8 @@ @Test public void testAddMatchingRuleUseMRConflict() throws Exception { MatchingRule matchingRule = getMatchingRule("testAddMRUMRConflictMatch", "1.3.6.1.4.1.26027.1.999.14", false); DirectoryServer.getSchema().registerMatchingRule(matchingRule, false); MatchingRule matchingRule = registerNewMatchingRule("testAddMRUMRConflictMatch", "1.3.6.1.4.1.26027.1.999.14", false); try { @@ -3935,8 +3935,8 @@ @Test public void testAddMatchingRuleUseAttributeTypeUndefined() throws Exception { MatchingRule matchingRule = getMatchingRule("testAddMRUATUndefinedMatch", "1.3.6.1.4.1.26027.1.999.16", false); DirectoryServer.getSchema().registerMatchingRule(matchingRule, false); MatchingRule matchingRule = registerNewMatchingRule("testAddMRUATUndefinedMatch", "1.3.6.1.4.1.26027.1.999.16", false); try { @@ -3969,8 +3969,7 @@ public void testAddMatchingRuleUseAttributeTypeMultipleUndefined() throws Exception { MatchingRule matchingRule = getMatchingRule("testAddMRUATMultipleUndefinedMatch", "1.3.6.1.4.1.26027.1.999.19", false); DirectoryServer.getSchema().registerMatchingRule(matchingRule, false); registerNewMatchingRule("testAddMRUATMultipleUndefinedMatch", "1.3.6.1.4.1.26027.1.999.19", false); try { @@ -4010,8 +4009,8 @@ @Test public void testAddMatchingRuleUseObsoleteMatchingRule() throws Exception { MatchingRule matchingRule = getMatchingRule("testAddMRUObsoleteMRMatch", "1.3.6.1.4.1.26027.1.999.21", true); DirectoryServer.getSchema().registerMatchingRule(matchingRule, false); MatchingRule matchingRule = registerNewMatchingRule("testAddMRUObsoleteMRMatch", "1.3.6.1.4.1.26027.1.999.21", true); try { @@ -4042,8 +4041,8 @@ @Test public void testAddMatchingRuleUseObsoleteAttributeType() throws Exception { MatchingRule matchingRule = getMatchingRule("testAddMRUObsoleteATMatch", "1.3.6.1.4.1.26027.1.999.22", false); DirectoryServer.getSchema().registerMatchingRule(matchingRule, false); MatchingRule matchingRule = registerNewMatchingRule("testAddMRUObsoleteATMatch", "1.3.6.1.4.1.26027.1.999.22", false); try { @@ -4071,6 +4070,13 @@ } } private MatchingRule registerNewMatchingRule(String name, String oid, boolean obsolete) throws DirectoryException { MatchingRule matchingRule = getMatchingRule(name, oid, obsolete); DirectoryServer.getSchema().registerMatchingRules(Arrays.asList(matchingRule), false); return matchingRule; } private void runModify(String[] args, String ldifContent, ResultCode expectedRC) { runModify(args, ldifContent, null, expectedRC); @@ -4111,8 +4117,8 @@ @Test public void testRemoveMatchingRuleUseSuccessful() throws Exception { MatchingRule matchingRule = getMatchingRule("testRemoveMRUSuccessfulMatch", "1.3.6.1.4.1.26027.1.999.13", false); DirectoryServer.getSchema().registerMatchingRule(matchingRule, false); MatchingRule matchingRule = registerNewMatchingRule("testRemoveMRUSuccessfulMatch", "1.3.6.1.4.1.26027.1.999.13", false); try { opendj-server-legacy/src/test/java/org/opends/server/tasks/AddSchemaFileTaskTestCase.java
@@ -21,6 +21,7 @@ import java.io.FileWriter; import java.io.IOException; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import org.forgerock.opendj.ldap.DN; @@ -80,7 +81,7 @@ .addToSchema() .toSchema() .getMatchingRule(oid); DirectoryServer.getSchema().registerMatchingRule(matchingRule, false); DirectoryServer.getSchema().registerMatchingRules(Arrays.asList(matchingRule), false); matchingRulesToRemove.add(matchingRule); }