Return-Path: Delivered-To: apmail-directory-commits-archive@www.apache.org Received: (qmail 3381 invoked from network); 3 Feb 2007 03:32:33 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.2) by minotaur.apache.org with SMTP; 3 Feb 2007 03:32:33 -0000 Received: (qmail 56754 invoked by uid 500); 3 Feb 2007 03:32:40 -0000 Delivered-To: apmail-directory-commits-archive@directory.apache.org Received: (qmail 56724 invoked by uid 500); 3 Feb 2007 03:32:40 -0000 Mailing-List: contact commits-help@directory.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@directory.apache.org Delivered-To: mailing list commits@directory.apache.org Received: (qmail 33967 invoked by uid 99); 3 Feb 2007 03:06:00 -0000 Received: from herse.apache.org (HELO herse.apache.org) (140.211.11.133) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 02 Feb 2007 19:06:00 -0800 X-ASF-Spam-Status: No, hits=-9.4 required=10.0 tests=ALL_TRUSTED,NO_REAL_NAME X-Spam-Check-By: apache.org Received: from [140.211.11.3] (HELO eris.apache.org) (140.211.11.3) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 02 Feb 2007 19:05:52 -0800 Received: by eris.apache.org (Postfix, from userid 65534) id 089291A981A; Fri, 2 Feb 2007 19:05:32 -0800 (PST) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r502850 - in /directory/apacheds/trunk: core/src/main/java/org/apache/directory/server/core/schema/ schema-bootstrap/src/main/schema/ Date: Sat, 03 Feb 2007 03:05:31 -0000 To: commits@directory.apache.org From: akarasulu@apache.org X-Mailer: svnmailer-1.1.0 Message-Id: <20070203030532.089291A981A@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: akarasulu Date: Fri Feb 2 19:05:30 2007 New Revision: 502850 URL: http://svn.apache.org/viewvc?view=rev&rev=502850 Log: cleaning up handler lookup code to make it more efficient rather than using a bunch of if statements Added: directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/schema/MetaDitContentRuleHandler.java directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/schema/MetaDitStructureRuleHandler.java directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/schema/MetaMatchingRuleUseHandler.java directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/schema/MetaNameFormHandler.java Modified: directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/schema/SchemaManager.java directory/apacheds/trunk/schema-bootstrap/src/main/schema/apachemeta.schema Added: directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/schema/MetaDitContentRuleHandler.java URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/schema/MetaDitContentRuleHandler.java?view=auto&rev=502850 ============================================================================== --- directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/schema/MetaDitContentRuleHandler.java (added) +++ directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/schema/MetaDitContentRuleHandler.java Fri Feb 2 19:05:30 2007 @@ -0,0 +1,107 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + */ +package org.apache.directory.server.core.schema; + + +import javax.naming.NamingException; +import javax.naming.directory.Attributes; + +import org.apache.directory.server.schema.registries.Registries; +import org.apache.directory.shared.ldap.name.LdapDN; + + +/** + * A schema entity change handler for DitContentRules. + * + * @author Apache Directory Project + * @version $Rev$ + */ +public class MetaDitContentRuleHandler extends AbstractSchemaChangeHandler +{ + + protected MetaDitContentRuleHandler( Registries targetRegistries, PartitionSchemaLoader loader ) throws NamingException + { + super( targetRegistries, loader ); + // TODO Auto-generated constructor stub + } + + + /* (non-Javadoc) + * @see org.apache.directory.server.core.schema.AbstractSchemaChangeHandler#modify(org.apache.directory.shared.ldap.name.LdapDN, javax.naming.directory.Attributes, javax.naming.directory.Attributes) + */ + @Override + protected void modify( LdapDN name, Attributes entry, Attributes targetEntry ) throws NamingException + { + // TODO Auto-generated method stub + + } + + + /* (non-Javadoc) + * @see org.apache.directory.server.core.schema.SchemaChangeHandler#add(org.apache.directory.shared.ldap.name.LdapDN, javax.naming.directory.Attributes) + */ + public void add( LdapDN name, Attributes entry ) throws NamingException + { + // TODO Auto-generated method stub + + } + + + /* (non-Javadoc) + * @see org.apache.directory.server.core.schema.SchemaChangeHandler#delete(org.apache.directory.shared.ldap.name.LdapDN, javax.naming.directory.Attributes) + */ + public void delete( LdapDN name, Attributes entry ) throws NamingException + { + // TODO Auto-generated method stub + + } + + + /* (non-Javadoc) + * @see org.apache.directory.server.core.schema.SchemaChangeHandler#move(org.apache.directory.shared.ldap.name.LdapDN, org.apache.directory.shared.ldap.name.LdapDN, java.lang.String, boolean, javax.naming.directory.Attributes) + */ + public void move( LdapDN oriChildName, LdapDN newParentName, String newRn, boolean deleteOldRn, Attributes entry ) + throws NamingException + { + // TODO Auto-generated method stub + + } + + + /* (non-Javadoc) + * @see org.apache.directory.server.core.schema.SchemaChangeHandler#move(org.apache.directory.shared.ldap.name.LdapDN, org.apache.directory.shared.ldap.name.LdapDN, javax.naming.directory.Attributes) + */ + public void move( LdapDN oriChildName, LdapDN newParentName, Attributes entry ) throws NamingException + { + // TODO Auto-generated method stub + + } + + + /* (non-Javadoc) + * @see org.apache.directory.server.core.schema.SchemaChangeHandler#rename(org.apache.directory.shared.ldap.name.LdapDN, javax.naming.directory.Attributes, java.lang.String) + */ + public void rename( LdapDN name, Attributes entry, String newRdn ) throws NamingException + { + // TODO Auto-generated method stub + + } + +} Added: directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/schema/MetaDitStructureRuleHandler.java URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/schema/MetaDitStructureRuleHandler.java?view=auto&rev=502850 ============================================================================== --- directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/schema/MetaDitStructureRuleHandler.java (added) +++ directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/schema/MetaDitStructureRuleHandler.java Fri Feb 2 19:05:30 2007 @@ -0,0 +1,107 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + */ +package org.apache.directory.server.core.schema; + + +import javax.naming.NamingException; +import javax.naming.directory.Attributes; + +import org.apache.directory.server.schema.registries.Registries; +import org.apache.directory.shared.ldap.name.LdapDN; + + +/** + * A schema entity change handler for DitStructureRules. + * + * @author Apache Directory Project + * @version $Rev$ + */ +public class MetaDitStructureRuleHandler extends AbstractSchemaChangeHandler +{ + + protected MetaDitStructureRuleHandler( Registries targetRegistries, PartitionSchemaLoader loader ) throws NamingException + { + super( targetRegistries, loader ); + // TODO Auto-generated constructor stub + } + + + /* (non-Javadoc) + * @see org.apache.directory.server.core.schema.AbstractSchemaChangeHandler#modify(org.apache.directory.shared.ldap.name.LdapDN, javax.naming.directory.Attributes, javax.naming.directory.Attributes) + */ + @Override + protected void modify( LdapDN name, Attributes entry, Attributes targetEntry ) throws NamingException + { + // TODO Auto-generated method stub + + } + + + /* (non-Javadoc) + * @see org.apache.directory.server.core.schema.SchemaChangeHandler#add(org.apache.directory.shared.ldap.name.LdapDN, javax.naming.directory.Attributes) + */ + public void add( LdapDN name, Attributes entry ) throws NamingException + { + // TODO Auto-generated method stub + + } + + + /* (non-Javadoc) + * @see org.apache.directory.server.core.schema.SchemaChangeHandler#delete(org.apache.directory.shared.ldap.name.LdapDN, javax.naming.directory.Attributes) + */ + public void delete( LdapDN name, Attributes entry ) throws NamingException + { + // TODO Auto-generated method stub + + } + + + /* (non-Javadoc) + * @see org.apache.directory.server.core.schema.SchemaChangeHandler#move(org.apache.directory.shared.ldap.name.LdapDN, org.apache.directory.shared.ldap.name.LdapDN, java.lang.String, boolean, javax.naming.directory.Attributes) + */ + public void move( LdapDN oriChildName, LdapDN newParentName, String newRn, boolean deleteOldRn, Attributes entry ) + throws NamingException + { + // TODO Auto-generated method stub + + } + + + /* (non-Javadoc) + * @see org.apache.directory.server.core.schema.SchemaChangeHandler#move(org.apache.directory.shared.ldap.name.LdapDN, org.apache.directory.shared.ldap.name.LdapDN, javax.naming.directory.Attributes) + */ + public void move( LdapDN oriChildName, LdapDN newParentName, Attributes entry ) throws NamingException + { + // TODO Auto-generated method stub + + } + + + /* (non-Javadoc) + * @see org.apache.directory.server.core.schema.SchemaChangeHandler#rename(org.apache.directory.shared.ldap.name.LdapDN, javax.naming.directory.Attributes, java.lang.String) + */ + public void rename( LdapDN name, Attributes entry, String newRdn ) throws NamingException + { + // TODO Auto-generated method stub + + } + +} Added: directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/schema/MetaMatchingRuleUseHandler.java URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/schema/MetaMatchingRuleUseHandler.java?view=auto&rev=502850 ============================================================================== --- directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/schema/MetaMatchingRuleUseHandler.java (added) +++ directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/schema/MetaMatchingRuleUseHandler.java Fri Feb 2 19:05:30 2007 @@ -0,0 +1,107 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + */ +package org.apache.directory.server.core.schema; + + +import javax.naming.NamingException; +import javax.naming.directory.Attributes; + +import org.apache.directory.server.schema.registries.Registries; +import org.apache.directory.shared.ldap.name.LdapDN; + + +/** + * A schema entity change handler for DitMatchingRuleUses. + * + * @author Apache Directory Project + * @version $Rev$ + */ +public class MetaMatchingRuleUseHandler extends AbstractSchemaChangeHandler +{ + + protected MetaMatchingRuleUseHandler( Registries targetRegistries, PartitionSchemaLoader loader ) throws NamingException + { + super( targetRegistries, loader ); + // TODO Auto-generated constructor stub + } + + + /* (non-Javadoc) + * @see org.apache.directory.server.core.schema.AbstractSchemaChangeHandler#modify(org.apache.directory.shared.ldap.name.LdapDN, javax.naming.directory.Attributes, javax.naming.directory.Attributes) + */ + @Override + protected void modify( LdapDN name, Attributes entry, Attributes targetEntry ) throws NamingException + { + // TODO Auto-generated method stub + + } + + + /* (non-Javadoc) + * @see org.apache.directory.server.core.schema.SchemaChangeHandler#add(org.apache.directory.shared.ldap.name.LdapDN, javax.naming.directory.Attributes) + */ + public void add( LdapDN name, Attributes entry ) throws NamingException + { + // TODO Auto-generated method stub + + } + + + /* (non-Javadoc) + * @see org.apache.directory.server.core.schema.SchemaChangeHandler#delete(org.apache.directory.shared.ldap.name.LdapDN, javax.naming.directory.Attributes) + */ + public void delete( LdapDN name, Attributes entry ) throws NamingException + { + // TODO Auto-generated method stub + + } + + + /* (non-Javadoc) + * @see org.apache.directory.server.core.schema.SchemaChangeHandler#move(org.apache.directory.shared.ldap.name.LdapDN, org.apache.directory.shared.ldap.name.LdapDN, java.lang.String, boolean, javax.naming.directory.Attributes) + */ + public void move( LdapDN oriChildName, LdapDN newParentName, String newRn, boolean deleteOldRn, Attributes entry ) + throws NamingException + { + // TODO Auto-generated method stub + + } + + + /* (non-Javadoc) + * @see org.apache.directory.server.core.schema.SchemaChangeHandler#move(org.apache.directory.shared.ldap.name.LdapDN, org.apache.directory.shared.ldap.name.LdapDN, javax.naming.directory.Attributes) + */ + public void move( LdapDN oriChildName, LdapDN newParentName, Attributes entry ) throws NamingException + { + // TODO Auto-generated method stub + + } + + + /* (non-Javadoc) + * @see org.apache.directory.server.core.schema.SchemaChangeHandler#rename(org.apache.directory.shared.ldap.name.LdapDN, javax.naming.directory.Attributes, java.lang.String) + */ + public void rename( LdapDN name, Attributes entry, String newRdn ) throws NamingException + { + // TODO Auto-generated method stub + + } + +} Added: directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/schema/MetaNameFormHandler.java URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/schema/MetaNameFormHandler.java?view=auto&rev=502850 ============================================================================== --- directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/schema/MetaNameFormHandler.java (added) +++ directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/schema/MetaNameFormHandler.java Fri Feb 2 19:05:30 2007 @@ -0,0 +1,107 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + */ +package org.apache.directory.server.core.schema; + + +import javax.naming.NamingException; +import javax.naming.directory.Attributes; + +import org.apache.directory.server.schema.registries.Registries; +import org.apache.directory.shared.ldap.name.LdapDN; + + +/** + * A schema entity change handler for NameForms. + * + * @author Apache Directory Project + * @version $Rev$ + */ +public class MetaNameFormHandler extends AbstractSchemaChangeHandler +{ + + protected MetaNameFormHandler( Registries targetRegistries, PartitionSchemaLoader loader ) throws NamingException + { + super( targetRegistries, loader ); + // TODO Auto-generated constructor stub + } + + + /* (non-Javadoc) + * @see org.apache.directory.server.core.schema.AbstractSchemaChangeHandler#modify(org.apache.directory.shared.ldap.name.LdapDN, javax.naming.directory.Attributes, javax.naming.directory.Attributes) + */ + @Override + protected void modify( LdapDN name, Attributes entry, Attributes targetEntry ) throws NamingException + { + // TODO Auto-generated method stub + + } + + + /* (non-Javadoc) + * @see org.apache.directory.server.core.schema.SchemaChangeHandler#add(org.apache.directory.shared.ldap.name.LdapDN, javax.naming.directory.Attributes) + */ + public void add( LdapDN name, Attributes entry ) throws NamingException + { + // TODO Auto-generated method stub + + } + + + /* (non-Javadoc) + * @see org.apache.directory.server.core.schema.SchemaChangeHandler#delete(org.apache.directory.shared.ldap.name.LdapDN, javax.naming.directory.Attributes) + */ + public void delete( LdapDN name, Attributes entry ) throws NamingException + { + // TODO Auto-generated method stub + + } + + + /* (non-Javadoc) + * @see org.apache.directory.server.core.schema.SchemaChangeHandler#move(org.apache.directory.shared.ldap.name.LdapDN, org.apache.directory.shared.ldap.name.LdapDN, java.lang.String, boolean, javax.naming.directory.Attributes) + */ + public void move( LdapDN oriChildName, LdapDN newParentName, String newRn, boolean deleteOldRn, Attributes entry ) + throws NamingException + { + // TODO Auto-generated method stub + + } + + + /* (non-Javadoc) + * @see org.apache.directory.server.core.schema.SchemaChangeHandler#move(org.apache.directory.shared.ldap.name.LdapDN, org.apache.directory.shared.ldap.name.LdapDN, javax.naming.directory.Attributes) + */ + public void move( LdapDN oriChildName, LdapDN newParentName, Attributes entry ) throws NamingException + { + // TODO Auto-generated method stub + + } + + + /* (non-Javadoc) + * @see org.apache.directory.server.core.schema.SchemaChangeHandler#rename(org.apache.directory.shared.ldap.name.LdapDN, javax.naming.directory.Attributes, java.lang.String) + */ + public void rename( LdapDN name, Attributes entry, String newRdn ) throws NamingException + { + // TODO Auto-generated method stub + + } + +} Modified: directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/schema/SchemaManager.java URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/schema/SchemaManager.java?view=diff&rev=502850&r1=502849&r2=502850 ============================================================================== --- directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/schema/SchemaManager.java (original) +++ directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/schema/SchemaManager.java Fri Feb 2 19:05:30 2007 @@ -20,25 +20,32 @@ package org.apache.directory.server.core.schema; +import java.util.HashMap; import java.util.HashSet; +import java.util.Map; import java.util.Set; import javax.naming.NamingException; import javax.naming.directory.Attribute; import javax.naming.directory.Attributes; +import javax.naming.directory.DirContext; import org.apache.directory.server.constants.CoreSchemaConstants; import org.apache.directory.server.constants.MetaSchemaConstants; import org.apache.directory.server.constants.SystemSchemaConstants; import org.apache.directory.server.core.ServerUtils; +import org.apache.directory.server.schema.registries.AttributeTypeRegistry; +import org.apache.directory.server.schema.registries.ObjectClassRegistry; import org.apache.directory.server.schema.registries.Registries; import org.apache.directory.shared.ldap.NotImplementedException; import org.apache.directory.shared.ldap.exception.LdapInvalidNameException; import org.apache.directory.shared.ldap.exception.LdapNamingException; +import org.apache.directory.shared.ldap.exception.LdapOperationNotSupportedException; import org.apache.directory.shared.ldap.message.ModificationItemImpl; import org.apache.directory.shared.ldap.message.ResultCodeEnum; import org.apache.directory.shared.ldap.name.LdapDN; import org.apache.directory.shared.ldap.schema.AttributeType; +import org.apache.directory.shared.ldap.schema.ObjectClass; import org.apache.directory.shared.ldap.util.AttributeUtils; @@ -58,19 +65,42 @@ public class SchemaManager { private static final Set VALID_OU_VALUES = new HashSet(); + private static final String[] opAttrs = new String[] { + "comparators", + "normalizers", + "syntaxCheckers", + "ldapSyntaxes", + "matchingRules", + "attributeTypes", + "objectClasses", + "matchingRuleUse", + "dITStructureRules", + "dITContentRules", + "nameForms" + }; + private static final String[] metaObjectClasses = new String[] { + "metaComparator", + "metaNormalizer", + "metaSyntaxChecker", + "metaSyntax", + "metaMatchingRule", + "metaAttributeType", + "metaObjectClass", + "metaMatchingRuleUse", + "metaDITStructureRule", + "metaDITContentRule", + "metaNameForm" + }; private final PartitionSchemaLoader loader; private final MetaSchemaHandler metaSchemaHandler; private final Registries globalRegistries; private final AttributeType objectClassAT; - private final MetaComparatorHandler metaComparatorHandler; - private final MetaNormalizerHandler metaNormalizerHandler; - private final MetaSyntaxCheckerHandler metaSyntaxCheckerHandler; - private final MetaSyntaxHandler metaSyntaxHandler; - private final MetaMatchingRuleHandler metaMatchingRuleHandler; - private final MetaAttributeTypeHandler metaAttributeTypeHandler; - private final MetaObjectClassHandler metaObjectClassHandler; + private final SchemaChangeHandler[] schemaObjectHandlers = new SchemaChangeHandler[11]; + + private Map opAttr2handlerMap = new HashMap(); + private Map objectClass2handlerMap = new HashMap(); static { @@ -94,14 +124,40 @@ this.globalRegistries = globalRegistries; this.objectClassAT = this.globalRegistries.getAttributeTypeRegistry() .lookup( SystemSchemaConstants.OBJECT_CLASS_AT ); + this.metaSchemaHandler = new MetaSchemaHandler( this.globalRegistries, this.loader ); - this.metaComparatorHandler = new MetaComparatorHandler( globalRegistries, loader ); - this.metaNormalizerHandler = new MetaNormalizerHandler( globalRegistries, loader ); - this.metaSyntaxCheckerHandler = new MetaSyntaxCheckerHandler( globalRegistries, loader ); - this.metaSyntaxHandler = new MetaSyntaxHandler( globalRegistries, loader, dao ); - this.metaMatchingRuleHandler = new MetaMatchingRuleHandler( globalRegistries, loader, dao ); - this.metaAttributeTypeHandler = new MetaAttributeTypeHandler( globalRegistries, loader, dao ); - this.metaObjectClassHandler = new MetaObjectClassHandler( globalRegistries, loader, dao ); + + this.schemaObjectHandlers[0] = new MetaComparatorHandler( globalRegistries, loader ); + this.schemaObjectHandlers[1] = new MetaNormalizerHandler( globalRegistries, loader ); + this.schemaObjectHandlers[2] = new MetaSyntaxCheckerHandler( globalRegistries, loader ); + this.schemaObjectHandlers[3] = new MetaSyntaxHandler( globalRegistries, loader, dao ); + this.schemaObjectHandlers[4] = new MetaMatchingRuleHandler( globalRegistries, loader, dao ); + this.schemaObjectHandlers[5] = new MetaAttributeTypeHandler( globalRegistries, loader, dao ); + this.schemaObjectHandlers[6] = new MetaObjectClassHandler( globalRegistries, loader, dao ); + this.schemaObjectHandlers[7] = new MetaMatchingRuleUseHandler( globalRegistries, loader ); + this.schemaObjectHandlers[8] = new MetaDitStructureRuleHandler( globalRegistries, loader ); + this.schemaObjectHandlers[9] = new MetaDitContentRuleHandler( globalRegistries, loader ); + this.schemaObjectHandlers[10] = new MetaNameFormHandler( globalRegistries, loader ); + + initHandlerMaps(); + } + + + private void initHandlerMaps() throws NamingException + { + AttributeTypeRegistry atReg = globalRegistries.getAttributeTypeRegistry(); + for ( int ii = 0; ii < opAttrs.length; ii++ ) + { + AttributeType at = atReg.lookup( opAttrs[ii] ); + opAttr2handlerMap.put( at.getOid(), schemaObjectHandlers[ii] ); + } + + ObjectClassRegistry ocReg = globalRegistries.getObjectClassRegistry(); + for ( int ii = 0; ii < metaObjectClasses.length; ii++ ) + { + ObjectClass oc = ocReg.lookup( metaObjectClasses[ii] ); + objectClass2handlerMap.put( oc.getOid(), schemaObjectHandlers[ii] ); + } } @@ -121,54 +177,23 @@ { Attribute oc = ServerUtils.getAttribute( objectClassAT, entry ); - if ( AttributeUtils.containsValue( oc, MetaSchemaConstants.META_SCHEMA_OC, objectClassAT ) ) + for ( int ii = 0; ii < oc.size(); ii++ ) { - metaSchemaHandler.add( name, entry ); - return; + String oid = globalRegistries.getOidRegistry().getOid( ( String ) oc.get( ii ) ); + if ( objectClass2handlerMap.containsKey( oid ) ) + { + SchemaChangeHandler handler = objectClass2handlerMap.get( oid ); + handler.add( name, entry ); + return; + } } - if ( AttributeUtils.containsValue( oc, MetaSchemaConstants.META_COMPARATOR_OC, objectClassAT ) ) - { - metaComparatorHandler.add( name, entry ); - return; - } - - if ( AttributeUtils.containsValue( oc, MetaSchemaConstants.META_NORMALIZER_OC, objectClassAT ) ) - { - metaNormalizerHandler.add( name, entry ); - return; - } - - if ( AttributeUtils.containsValue( oc, MetaSchemaConstants.META_SYNTAX_CHECKER_OC, objectClassAT ) ) - { - metaSyntaxCheckerHandler.add( name, entry ); - return; - } - - if ( AttributeUtils.containsValue( oc, MetaSchemaConstants.META_SYNTAX_OC, objectClassAT ) ) - { - metaSyntaxHandler.add( name, entry ); - return; - } - - if ( AttributeUtils.containsValue( oc, MetaSchemaConstants.META_MATCHING_RULE_OC, objectClassAT ) ) + if ( AttributeUtils.containsValue( oc, MetaSchemaConstants.META_SCHEMA_OC, objectClassAT ) ) { - metaMatchingRuleHandler.add( name, entry ); + metaSchemaHandler.add( name, entry ); return; } - if ( AttributeUtils.containsValue( oc, MetaSchemaConstants.META_ATTRIBUTE_TYPE_OC, objectClassAT ) ) - { - metaAttributeTypeHandler.add( name, entry ); - return; - } - - if ( AttributeUtils.containsValue( oc, MetaSchemaConstants.META_OBJECT_CLASS_OC, objectClassAT ) ) - { - metaObjectClassHandler.add( name, entry ); - return; - } - if ( AttributeUtils.containsValue( oc, CoreSchemaConstants.ORGANIZATIONAL_UNIT_OC, objectClassAT ) ) { if ( name.size() != 3 ) @@ -189,7 +214,7 @@ return; } - throw new LdapNamingException( ResultCodeEnum.UNWILLING_TO_PERFORM ); + throw new LdapOperationNotSupportedException( ResultCodeEnum.UNWILLING_TO_PERFORM ); } @@ -197,54 +222,23 @@ { Attribute oc = ServerUtils.getAttribute( objectClassAT, entry ); - if ( AttributeUtils.containsValue( oc, MetaSchemaConstants.META_SCHEMA_OC, objectClassAT ) ) + for ( int ii = 0; ii < oc.size(); ii++ ) { - metaSchemaHandler.delete( name, entry ); - return; - } - - if ( AttributeUtils.containsValue( oc, MetaSchemaConstants.META_COMPARATOR_OC, objectClassAT ) ) - { - metaComparatorHandler.delete( name, entry ); - return; - } - - if ( AttributeUtils.containsValue( oc, MetaSchemaConstants.META_NORMALIZER_OC, objectClassAT ) ) - { - metaNormalizerHandler.delete( name, entry ); - return; - } - - if ( AttributeUtils.containsValue( oc, MetaSchemaConstants.META_SYNTAX_CHECKER_OC, objectClassAT ) ) - { - metaSyntaxCheckerHandler.delete( name, entry ); - return; - } - - if ( AttributeUtils.containsValue( oc, MetaSchemaConstants.META_SYNTAX_OC, objectClassAT ) ) - { - metaSyntaxHandler.delete( name, entry ); - return; - } - - if ( AttributeUtils.containsValue( oc, MetaSchemaConstants.META_MATCHING_RULE_OC, objectClassAT ) ) - { - metaMatchingRuleHandler.delete( name, entry ); - return; - } - - if ( AttributeUtils.containsValue( oc, MetaSchemaConstants.META_ATTRIBUTE_TYPE_OC, objectClassAT ) ) - { - metaAttributeTypeHandler.delete( name, entry ); - return; + String oid = globalRegistries.getOidRegistry().getOid( ( String ) oc.get( ii ) ); + if ( objectClass2handlerMap.containsKey( oid ) ) + { + SchemaChangeHandler handler = objectClass2handlerMap.get( oid ); + handler.delete( name, entry ); + return; + } } - if ( AttributeUtils.containsValue( oc, MetaSchemaConstants.META_OBJECT_CLASS_OC, objectClassAT ) ) + if ( AttributeUtils.containsValue( oc, MetaSchemaConstants.META_SCHEMA_OC, objectClassAT ) ) { - metaObjectClassHandler.delete( name, entry ); + metaSchemaHandler.delete( name, entry ); return; } - + if ( AttributeUtils.containsValue( oc, CoreSchemaConstants.ORGANIZATIONAL_UNIT_OC, objectClassAT ) ) { if ( name.size() != 3 ) @@ -265,7 +259,7 @@ return; } - throw new LdapNamingException( ResultCodeEnum.UNWILLING_TO_PERFORM ); + throw new LdapOperationNotSupportedException( ResultCodeEnum.UNWILLING_TO_PERFORM ); } @@ -274,55 +268,24 @@ { Attribute oc = ServerUtils.getAttribute( objectClassAT, entry ); - if ( AttributeUtils.containsValue( oc, MetaSchemaConstants.META_SCHEMA_OC, objectClassAT ) ) - { - metaSchemaHandler.modify( name, modOp, mods, entry, targetEntry ); - return; - } - - if ( AttributeUtils.containsValue( oc, MetaSchemaConstants.META_COMPARATOR_OC, objectClassAT ) ) - { - metaComparatorHandler.modify( name, modOp, mods, entry, targetEntry ); - return; - } - - if ( AttributeUtils.containsValue( oc, MetaSchemaConstants.META_NORMALIZER_OC, objectClassAT ) ) - { - metaNormalizerHandler.modify( name, modOp, mods, entry, targetEntry ); - return; - } - - if ( AttributeUtils.containsValue( oc, MetaSchemaConstants.META_SYNTAX_CHECKER_OC, objectClassAT ) ) - { - metaSyntaxCheckerHandler.modify( name, modOp, mods, entry, targetEntry ); - return; - } - - if ( AttributeUtils.containsValue( oc, MetaSchemaConstants.META_SYNTAX_OC, objectClassAT ) ) - { - metaSyntaxHandler.modify( name, modOp, mods, entry, targetEntry ); - return; - } - - if ( AttributeUtils.containsValue( oc, MetaSchemaConstants.META_MATCHING_RULE_OC, objectClassAT ) ) - { - metaMatchingRuleHandler.modify( name, modOp, mods, entry, targetEntry ); - return; - } - - if ( AttributeUtils.containsValue( oc, MetaSchemaConstants.META_ATTRIBUTE_TYPE_OC, objectClassAT ) ) + for ( int ii = 0; ii < oc.size(); ii++ ) { - metaAttributeTypeHandler.modify( name, modOp, mods, entry, targetEntry ); - return; + String oid = globalRegistries.getOidRegistry().getOid( ( String ) oc.get( ii ) ); + if ( objectClass2handlerMap.containsKey( oid ) ) + { + SchemaChangeHandler handler = objectClass2handlerMap.get( oid ); + handler.modify( name, modOp, mods, entry, targetEntry ); + return; + } } - if ( AttributeUtils.containsValue( oc, MetaSchemaConstants.META_OBJECT_CLASS_OC, objectClassAT ) ) + if ( AttributeUtils.containsValue( oc, MetaSchemaConstants.META_SCHEMA_OC, objectClassAT ) ) { - metaObjectClassHandler.modify( name, modOp, mods, entry, targetEntry ); + metaSchemaHandler.modify( name, modOp, mods, entry, targetEntry ); return; } - - throw new LdapNamingException( ResultCodeEnum.UNWILLING_TO_PERFORM ); + + throw new LdapOperationNotSupportedException( ResultCodeEnum.UNWILLING_TO_PERFORM ); } @@ -331,55 +294,24 @@ { Attribute oc = ServerUtils.getAttribute( objectClassAT, entry ); - if ( AttributeUtils.containsValue( oc, MetaSchemaConstants.META_SCHEMA_OC, objectClassAT ) ) - { - metaSchemaHandler.modify( name, mods, entry, targetEntry ); - return; - } - - if ( AttributeUtils.containsValue( oc, MetaSchemaConstants.META_COMPARATOR_OC, objectClassAT ) ) - { - metaComparatorHandler.modify( name, mods, entry, targetEntry ); - return; - } - - if ( AttributeUtils.containsValue( oc, MetaSchemaConstants.META_NORMALIZER_OC, objectClassAT ) ) - { - metaNormalizerHandler.modify( name, mods, entry, targetEntry ); - return; - } - - if ( AttributeUtils.containsValue( oc, MetaSchemaConstants.META_SYNTAX_CHECKER_OC, objectClassAT ) ) - { - metaSyntaxCheckerHandler.modify( name, mods, entry, targetEntry ); - return; - } - - if ( AttributeUtils.containsValue( oc, MetaSchemaConstants.META_SYNTAX_OC, objectClassAT ) ) - { - metaSyntaxHandler.modify( name, mods, entry, targetEntry ); - return; - } - - if ( AttributeUtils.containsValue( oc, MetaSchemaConstants.META_MATCHING_RULE_OC, objectClassAT ) ) - { - metaMatchingRuleHandler.modify( name, mods, entry, targetEntry ); - return; - } - - if ( AttributeUtils.containsValue( oc, MetaSchemaConstants.META_ATTRIBUTE_TYPE_OC, objectClassAT ) ) + for ( int ii = 0; ii < oc.size(); ii++ ) { - metaAttributeTypeHandler.modify( name, mods, entry, targetEntry ); - return; + String oid = globalRegistries.getOidRegistry().getOid( ( String ) oc.get( ii ) ); + if ( objectClass2handlerMap.containsKey( oid ) ) + { + SchemaChangeHandler handler = objectClass2handlerMap.get( oid ); + handler.modify( name, mods, entry, targetEntry ); + return; + } } - if ( AttributeUtils.containsValue( oc, MetaSchemaConstants.META_OBJECT_CLASS_OC, objectClassAT ) ) + if ( AttributeUtils.containsValue( oc, MetaSchemaConstants.META_SCHEMA_OC, objectClassAT ) ) { - metaObjectClassHandler.modify( name, mods, entry, targetEntry ); + metaSchemaHandler.modify( name, mods, entry, targetEntry ); return; } - - throw new LdapNamingException( ResultCodeEnum.UNWILLING_TO_PERFORM ); + + throw new LdapOperationNotSupportedException( ResultCodeEnum.UNWILLING_TO_PERFORM ); } @@ -387,55 +319,24 @@ { Attribute oc = ServerUtils.getAttribute( objectClassAT, entry ); - if ( AttributeUtils.containsValue( oc, MetaSchemaConstants.META_SCHEMA_OC, objectClassAT ) ) - { - metaSchemaHandler.rename( name, entry, newRdn ); - return; - } - - if ( AttributeUtils.containsValue( oc, MetaSchemaConstants.META_COMPARATOR_OC, objectClassAT ) ) - { - metaComparatorHandler.rename( name, entry, newRdn ); - return; - } - - if ( AttributeUtils.containsValue( oc, MetaSchemaConstants.META_NORMALIZER_OC, objectClassAT ) ) - { - metaNormalizerHandler.rename( name, entry, newRdn ); - return; - } - - if ( AttributeUtils.containsValue( oc, MetaSchemaConstants.META_SYNTAX_CHECKER_OC, objectClassAT ) ) + for ( int ii = 0; ii < oc.size(); ii++ ) { - metaSyntaxCheckerHandler.rename( name, entry, newRdn ); - return; - } - - if ( AttributeUtils.containsValue( oc, MetaSchemaConstants.META_SYNTAX_OC, objectClassAT ) ) - { - metaSyntaxHandler.rename( name, entry, newRdn ); - return; - } - - if ( AttributeUtils.containsValue( oc, MetaSchemaConstants.META_MATCHING_RULE_OC, objectClassAT ) ) - { - metaMatchingRuleHandler.rename( name, entry, newRdn ); - return; - } - - if ( AttributeUtils.containsValue( oc, MetaSchemaConstants.META_ATTRIBUTE_TYPE_OC, objectClassAT ) ) - { - metaAttributeTypeHandler.rename( name, entry, newRdn ); - return; + String oid = globalRegistries.getOidRegistry().getOid( ( String ) oc.get( ii ) ); + if ( objectClass2handlerMap.containsKey( oid ) ) + { + SchemaChangeHandler handler = objectClass2handlerMap.get( oid ); + handler.rename( name, entry, newRdn ); + return; + } } - if ( AttributeUtils.containsValue( oc, MetaSchemaConstants.META_OBJECT_CLASS_OC, objectClassAT ) ) + if ( AttributeUtils.containsValue( oc, MetaSchemaConstants.META_SCHEMA_OC, objectClassAT ) ) { - metaObjectClassHandler.rename( name, entry, newRdn ); + metaSchemaHandler.rename( name, entry, newRdn ); return; } - - throw new LdapNamingException( ResultCodeEnum.UNWILLING_TO_PERFORM ); + + throw new LdapOperationNotSupportedException( ResultCodeEnum.UNWILLING_TO_PERFORM ); } @@ -443,55 +344,24 @@ { Attribute oc = ServerUtils.getAttribute( objectClassAT, entry ); - if ( AttributeUtils.containsValue( oc, MetaSchemaConstants.META_SCHEMA_OC, objectClassAT ) ) + for ( int ii = 0; ii < oc.size(); ii++ ) { - metaSchemaHandler.move( oriChildName, newParentName, entry ); - return; - } - - if ( AttributeUtils.containsValue( oc, MetaSchemaConstants.META_COMPARATOR_OC, objectClassAT ) ) - { - metaComparatorHandler.move( oriChildName, newParentName, entry ); - return; - } - - if ( AttributeUtils.containsValue( oc, MetaSchemaConstants.META_NORMALIZER_OC, objectClassAT ) ) - { - metaNormalizerHandler.move( oriChildName, newParentName, entry ); - return; - } - - if ( AttributeUtils.containsValue( oc, MetaSchemaConstants.META_SYNTAX_CHECKER_OC, objectClassAT ) ) - { - metaSyntaxCheckerHandler.move( oriChildName, newParentName, entry ); - return; - } - - if ( AttributeUtils.containsValue( oc, MetaSchemaConstants.META_SYNTAX_OC, objectClassAT ) ) - { - metaSyntaxHandler.move( oriChildName, newParentName, entry ); - return; - } - - if ( AttributeUtils.containsValue( oc, MetaSchemaConstants.META_MATCHING_RULE_OC, objectClassAT ) ) - { - metaMatchingRuleHandler.move( oriChildName, newParentName, entry ); - return; - } - - if ( AttributeUtils.containsValue( oc, MetaSchemaConstants.META_ATTRIBUTE_TYPE_OC, objectClassAT ) ) - { - metaAttributeTypeHandler.move( oriChildName, newParentName, entry ); - return; + String oid = globalRegistries.getOidRegistry().getOid( ( String ) oc.get( ii ) ); + if ( objectClass2handlerMap.containsKey( oid ) ) + { + SchemaChangeHandler handler = objectClass2handlerMap.get( oid ); + handler.move( oriChildName, newParentName, entry ); + return; + } } - if ( AttributeUtils.containsValue( oc, MetaSchemaConstants.META_OBJECT_CLASS_OC, objectClassAT ) ) + if ( AttributeUtils.containsValue( oc, MetaSchemaConstants.META_SCHEMA_OC, objectClassAT ) ) { - metaObjectClassHandler.move( oriChildName, newParentName, entry ); + metaSchemaHandler.move( oriChildName, newParentName, entry ); return; } - - throw new LdapNamingException( ResultCodeEnum.UNWILLING_TO_PERFORM ); + + throw new LdapOperationNotSupportedException( ResultCodeEnum.UNWILLING_TO_PERFORM ); } @@ -500,58 +370,27 @@ { Attribute oc = ServerUtils.getAttribute( objectClassAT, entry ); - if ( AttributeUtils.containsValue( oc, MetaSchemaConstants.META_SCHEMA_OC, objectClassAT ) ) - { - metaSchemaHandler.move( oriChildName, newParentName, newRn, deleteOldRn, entry ); - return; - } - - if ( AttributeUtils.containsValue( oc, MetaSchemaConstants.META_COMPARATOR_OC, objectClassAT ) ) - { - metaComparatorHandler.move( oriChildName, newParentName, newRn, deleteOldRn, entry ); - return; - } - - if ( AttributeUtils.containsValue( oc, MetaSchemaConstants.META_NORMALIZER_OC, objectClassAT ) ) + for ( int ii = 0; ii < oc.size(); ii++ ) { - metaNormalizerHandler.move( oriChildName, newParentName, newRn, deleteOldRn, entry ); - return; - } - - if ( AttributeUtils.containsValue( oc, MetaSchemaConstants.META_SYNTAX_CHECKER_OC, objectClassAT ) ) - { - metaSyntaxCheckerHandler.move( oriChildName, newParentName, newRn, deleteOldRn, entry ); - return; - } - - if ( AttributeUtils.containsValue( oc, MetaSchemaConstants.META_SYNTAX_OC, objectClassAT ) ) - { - metaSyntaxHandler.move( oriChildName, newParentName, newRn, deleteOldRn, entry ); - return; - } - - if ( AttributeUtils.containsValue( oc, MetaSchemaConstants.META_MATCHING_RULE_OC, objectClassAT ) ) - { - metaMatchingRuleHandler.move( oriChildName, newParentName, newRn, deleteOldRn, entry ); - return; - } - - if ( AttributeUtils.containsValue( oc, MetaSchemaConstants.META_ATTRIBUTE_TYPE_OC, objectClassAT ) ) - { - metaAttributeTypeHandler.move( oriChildName, newParentName, newRn, deleteOldRn, entry ); - return; + String oid = globalRegistries.getOidRegistry().getOid( ( String ) oc.get( ii ) ); + if ( objectClass2handlerMap.containsKey( oid ) ) + { + SchemaChangeHandler handler = objectClass2handlerMap.get( oid ); + handler.move( oriChildName, newParentName, newRn, deleteOldRn, entry ); + return; + } } - if ( AttributeUtils.containsValue( oc, MetaSchemaConstants.META_OBJECT_CLASS_OC, objectClassAT ) ) + if ( AttributeUtils.containsValue( oc, MetaSchemaConstants.META_SCHEMA_OC, objectClassAT ) ) { - metaObjectClassHandler.move( oriChildName, newParentName, newRn, deleteOldRn, entry ); + metaSchemaHandler.move( oriChildName, newParentName, newRn, deleteOldRn, entry ); return; } - - throw new LdapNamingException( ResultCodeEnum.UNWILLING_TO_PERFORM ); + + throw new LdapOperationNotSupportedException( ResultCodeEnum.UNWILLING_TO_PERFORM ); } - + /** * Translates modify operations on schema subentries into one or more operations * on meta schema entities within the ou=schema partition and updates the registries @@ -565,6 +404,20 @@ public void modifySchemaSubentry( LdapDN name, ModificationItemImpl[] mods, Attributes subentry, Attributes targetSubentry ) throws NamingException { + for ( int ii = 0; ii < mods.length; ii++ ) + { + switch ( mods[ii].getModificationOp() ) + { + case( DirContext.ADD_ATTRIBUTE ): + break; + case( DirContext.REMOVE_ATTRIBUTE ): + break; + case( DirContext.REPLACE_ATTRIBUTE ): + break; + default: + throw new IllegalStateException( "Undefined modify operation: " + mods[ii].getModificationOp() ); + } + } } @@ -582,5 +435,16 @@ public void modifySchemaSubentry( LdapDN name, int modOp, Attributes mods, Attributes subentry, Attributes targetSubentry ) throws NamingException { + switch ( modOp ) + { + case( DirContext.ADD_ATTRIBUTE ): + break; + case( DirContext.REMOVE_ATTRIBUTE ): + break; + case( DirContext.REPLACE_ATTRIBUTE ): + break; + default: + throw new IllegalStateException( "Undefined modify operation: " + modOp ); + } } } Modified: directory/apacheds/trunk/schema-bootstrap/src/main/schema/apachemeta.schema URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/schema-bootstrap/src/main/schema/apachemeta.schema?view=diff&rev=502850&r1=502849&r2=502850 ============================================================================== --- directory/apacheds/trunk/schema-bootstrap/src/main/schema/apachemeta.schema (original) +++ directory/apacheds/trunk/schema-bootstrap/src/main/schema/apachemeta.schema Fri Feb 2 19:05:30 2007 @@ -564,3 +564,31 @@ SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 ) +# +# These operational attributes need a syntax! +# + +# --- comparators AttributeType ----------------------------------- +attributetype ( 1.3.6.1.4.1.18060.0.4.0.2.39 NAME 'comparators' + DESC 'A multivalued comparator description attribute' + EQUALITY caseIgnoreMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 + USAGE directoryOperation +) + +# --- normalizers AttributeType ----------------------------------- +attributetype ( 1.3.6.1.4.1.18060.0.4.0.2.40 NAME 'normalizers' + DESC 'A multivalued normalizer description attribute' + EQUALITY caseIgnoreMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 + USAGE directoryOperation +) + +# --- syntaxCheckers AttributeType ----------------------------------- +attributetype ( 1.3.6.1.4.1.18060.0.4.0.2.41 NAME 'syntaxCheckers' + DESC 'A multivalued syntaxCheckers description attribute' + EQUALITY caseIgnoreMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 + USAGE directoryOperation +) +