Return-Path: Delivered-To: apmail-directory-commits-archive@www.apache.org Received: (qmail 7440 invoked from network); 6 Dec 2007 08:40:32 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.2) by minotaur.apache.org with SMTP; 6 Dec 2007 08:40:32 -0000 Received: (qmail 44720 invoked by uid 500); 6 Dec 2007 08:40:20 -0000 Delivered-To: apmail-directory-commits-archive@directory.apache.org Received: (qmail 44679 invoked by uid 500); 6 Dec 2007 08:40:20 -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 44668 invoked by uid 99); 6 Dec 2007 08:40:20 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 06 Dec 2007 00:40:20 -0800 X-ASF-Spam-Status: No, hits=-100.0 required=10.0 tests=ALL_TRUSTED 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; Thu, 06 Dec 2007 08:40:00 +0000 Received: by eris.apache.org (Postfix, from userid 65534) id EB02C1A9851; Thu, 6 Dec 2007 00:39:32 -0800 (PST) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r601657 [6/6] - in /directory/apacheds/branches/bigbang: core-integ/src/main/java/org/apache/directory/server/core/integ/ core-integ/src/test/java/org/apache/directory/server/core/jndi/ core-integ/src/test/java/org/apache/directory/server/c... Date: Thu, 06 Dec 2007 08:39:27 -0000 To: commits@directory.apache.org From: akarasulu@apache.org X-Mailer: svnmailer-1.0.8 Message-Id: <20071206083932.EB02C1A9851@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Propchange: directory/apacheds/branches/bigbang/core-integ/src/test/java/org/apache/directory/server/core/schema/SubschemaSubentryIT.java ------------------------------------------------------------------------------ svn:eol-style = native Modified: directory/apacheds/branches/bigbang/core-unit/src/test/java/org/apache/directory/server/core/changelog/DefaultChangeLogITest.java URL: http://svn.apache.org/viewvc/directory/apacheds/branches/bigbang/core-unit/src/test/java/org/apache/directory/server/core/changelog/DefaultChangeLogITest.java?rev=601657&r1=601656&r2=601657&view=diff ============================================================================== --- directory/apacheds/branches/bigbang/core-unit/src/test/java/org/apache/directory/server/core/changelog/DefaultChangeLogITest.java (original) +++ directory/apacheds/branches/bigbang/core-unit/src/test/java/org/apache/directory/server/core/changelog/DefaultChangeLogITest.java Thu Dec 6 00:39:23 2007 @@ -158,6 +158,77 @@ } + public void testManyTagsPersistenceAcrossRestarts() throws NamingException, InterruptedException + { + assertEquals( 0, service.getChangeLog().getCurrentRevision() ); + assertNull( service.getChangeLog().getLatest() ); + + // add new test entry + AttributesImpl attrs = new AttributesImpl( "objectClass", "organizationalUnit", true ); + attrs.put( "ou", "test0" ); + sysRoot.createSubcontext( "ou=test0", attrs ); + assertEquals( 1, service.getChangeLog().getCurrentRevision() ); + + Tag t0 = service.getChangeLog().tag(); + assertEquals( t0, service.getChangeLog().getLatest() ); + assertEquals( 1, service.getChangeLog().getCurrentRevision() ); + assertEquals( 1, t0.getRevision() ); + + // add another test entry + attrs = new AttributesImpl( "objectClass", "organizationalUnit", true ); + attrs.put( "ou", "test1" ); + sysRoot.createSubcontext( "ou=test1", attrs ); + assertEquals( 2, service.getChangeLog().getCurrentRevision() ); + + Tag t1 = service.getChangeLog().tag(); + assertEquals( t1, service.getChangeLog().getLatest() ); + assertEquals( 2, service.getChangeLog().getCurrentRevision() ); + assertEquals( 2, t1.getRevision() ); + + service.sync(); + service.shutdown(); + service.startup(); + + assertEquals( 2, service.getChangeLog().getCurrentRevision() ); + assertEquals( t1, service.getChangeLog().getLatest() ); + assertEquals( 2, t1.getRevision() ); + + // add third test entry + attrs = new AttributesImpl( "objectClass", "organizationalUnit", true ); + attrs.put( "ou", "test2" ); + sysRoot.createSubcontext( "ou=test2", attrs ); + assertEquals( 3, service.getChangeLog().getCurrentRevision() ); + + service.revert(); + sysRoot.getAttributes( "ou=test0" ); // test present + sysRoot.getAttributes( "ou=test1" ); // test present + assertNotPresent( sysRoot, "ou=test2" ); + assertEquals( 4, service.getChangeLog().getCurrentRevision() ); + assertEquals( t1, service.getChangeLog().getLatest() ); + + service.revert( t0.getRevision() ); + sysRoot.getAttributes( "ou=test0" ); // test present + assertNotPresent( sysRoot, "ou=test1" ); + assertNotPresent( sysRoot, "ou=test2" ); + assertEquals( 7, service.getChangeLog().getCurrentRevision() ); + assertEquals( t1, service.getChangeLog().getLatest() ); + + // no sync this time but should happen automatically + service.shutdown(); + service.startup(); + assertEquals( 7, service.getChangeLog().getCurrentRevision() ); + assertEquals( t1, service.getChangeLog().getLatest() ); + assertEquals( 2, t1.getRevision() ); + + service.revert( 0 ); + assertNotPresent( sysRoot, "ou=test0" ); + assertNotPresent( sysRoot, "ou=test1" ); + assertNotPresent( sysRoot, "ou=test2" ); + assertEquals( 14, service.getChangeLog().getCurrentRevision() ); + assertEquals( t1, service.getChangeLog().getLatest() ); + } + + public void testTagPersistenceAcrossRestarts() throws NamingException, InterruptedException { assertEquals( 0, service.getChangeLog().getCurrentRevision() ); Modified: directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/DefaultDirectoryService.java URL: http://svn.apache.org/viewvc/directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/DefaultDirectoryService.java?rev=601657&r1=601656&r2=601657&view=diff ============================================================================== --- directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/DefaultDirectoryService.java (original) +++ directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/DefaultDirectoryService.java Thu Dec 6 00:39:23 2007 @@ -44,10 +44,7 @@ import org.apache.directory.server.core.partition.impl.btree.jdbm.JdbmIndex; import org.apache.directory.server.core.partition.impl.btree.jdbm.JdbmPartition; import org.apache.directory.server.core.referral.ReferralInterceptor; -import org.apache.directory.server.core.schema.PartitionSchemaLoader; -import org.apache.directory.server.core.schema.SchemaInterceptor; -import org.apache.directory.server.core.schema.SchemaManager; -import org.apache.directory.server.core.schema.SchemaPartitionDao; +import org.apache.directory.server.core.schema.*; import org.apache.directory.server.core.subtree.SubentryInterceptor; import org.apache.directory.server.core.trigger.TriggerInterceptor; import org.apache.directory.server.schema.SerializableComparator; @@ -98,7 +95,7 @@ { private static final Logger LOG = LoggerFactory.getLogger( DefaultDirectoryService.class ); - private SchemaManager schemaManager; + private SchemaService schemaService; /** the registries for system schema objects */ private Registries registries; @@ -764,6 +761,18 @@ } + public SchemaService getSchemaService() + { + return schemaService; + } + + + public void setSchemaService( SchemaService schemaService ) + { + this.schemaService = schemaService; + } + + public PartitionNexus getPartitionNexus() { return partitionNexus; @@ -1345,10 +1354,13 @@ schemaLoader.loadEnabled( globalRegistries ); registries = globalRegistries; SerializableComparator.setRegistry( globalRegistries.getComparatorRegistry() ); - - schemaManager = new SchemaManager( globalRegistries, schemaLoader, + + SchemaOperationControl schemaControl = new SchemaOperationControl( registries, schemaLoader, new SchemaPartitionDao( schemaPartition, registries ) ); + schemaService = new SchemaService( registries, schemaPartition, schemaControl ); + + partitionNexus = new DefaultPartitionNexus( new AttributesImpl() ); partitionNexus.init( this ); partitionNexus.addContextPartition( new AddContextPartitionOperationContext( schemaPartition ) ); @@ -1365,17 +1377,5 @@ { LOG.debug( "<--- DefaultDirectoryService initialized" ); } - } - - - public SchemaManager getSchemaManager() - { - return schemaManager; - } - - - public void setSchemaManager( SchemaManager schemaManager ) - { - this.schemaManager = schemaManager; } } Modified: directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/DirectoryService.java URL: http://svn.apache.org/viewvc/directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/DirectoryService.java?rev=601657&r1=601656&r2=601657&view=diff ============================================================================== --- directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/DirectoryService.java (original) +++ directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/DirectoryService.java Thu Dec 6 00:39:23 2007 @@ -27,7 +27,7 @@ import org.apache.directory.server.core.jndi.AbstractContextFactory; import org.apache.directory.server.core.partition.Partition; import org.apache.directory.server.core.partition.PartitionNexus; -import org.apache.directory.server.core.schema.SchemaManager; +import org.apache.directory.server.core.schema.SchemaService; import org.apache.directory.server.schema.registries.Registries; import org.apache.directory.shared.ldap.ldif.Entry; import org.apache.directory.shared.ldap.name.LdapDN; @@ -35,7 +35,6 @@ import javax.naming.Context; import javax.naming.NamingException; import javax.naming.directory.Attributes; -import javax.naming.directory.DirContext; import javax.naming.ldap.LdapContext; import java.io.File; import java.util.List; @@ -105,10 +104,10 @@ void setRegistries( Registries registries ); - SchemaManager getSchemaManager(); + SchemaService getSchemaService(); - void setSchemaManager( SchemaManager schemaManager ); + void setSchemaService( SchemaService schemaService ); /** Modified: directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/changelog/ChangeLogInterceptor.java URL: http://svn.apache.org/viewvc/directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/changelog/ChangeLogInterceptor.java?rev=601657&r1=601656&r2=601657&view=diff ============================================================================== --- directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/changelog/ChangeLogInterceptor.java (original) +++ directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/changelog/ChangeLogInterceptor.java Thu Dec 6 00:39:23 2007 @@ -27,10 +27,12 @@ import org.apache.directory.server.core.invocation.Invocation; import org.apache.directory.server.core.invocation.InvocationStack; import org.apache.directory.server.core.partition.PartitionNexusProxy; +import org.apache.directory.server.core.schema.SchemaService; import org.apache.directory.shared.ldap.ldif.ChangeType; import org.apache.directory.shared.ldap.ldif.Entry; import org.apache.directory.shared.ldap.ldif.LdifUtils; import org.apache.directory.shared.ldap.message.ModificationItemImpl; +import org.apache.directory.shared.ldap.name.LdapDN; import org.apache.directory.shared.ldap.name.Rdn; import org.apache.directory.shared.ldap.schema.AttributeType; import org.apache.directory.shared.ldap.util.AttributeUtils; @@ -55,7 +57,8 @@ private AttributeType entryDeleted; /** the changelog service to log changes to */ private ChangeLog changeLog; - + /** we need the schema service to deal with special conditions */ + private SchemaService schemaService; // ----------------------------------------------------------------------- // Overridden init() and destroy() methods @@ -65,8 +68,9 @@ public void init( DirectoryService directoryService ) throws NamingException { super.init( directoryService ); - changeLog = directoryService.getChangeLog(); + changeLog = directoryService.getChangeLog(); + schemaService = directoryService.getSchemaService(); entryDeleted = directoryService.getRegistries().getAttributeTypeRegistry() .lookup( ApacheSchemaConstants.ENTRY_DELETED_OID ); } @@ -80,7 +84,7 @@ { next.add( opContext ); - if ( ! changeLog.isEnabled() ) + if ( ! changeLog.isEnabled() || opContext.isCollateralOperation() ) { return; } @@ -108,17 +112,14 @@ // must save the entry if change log is enabled Attributes attributes = null; - if ( changeLog.isEnabled() ) + if ( changeLog.isEnabled() && ! opContext.isCollateralOperation() ) { - Invocation invocation = InvocationStack.getInstance().peek(); - PartitionNexusProxy proxy = invocation.getProxy(); - attributes = proxy.lookup( new LookupOperationContext( opContext.getDn() ), - PartitionNexusProxy.LOOKUP_BYPASS ); + attributes = getAttributes( opContext.getDn() ); } next.delete( opContext ); - if ( ! changeLog.isEnabled() ) + if ( ! changeLog.isEnabled() || opContext.isCollateralOperation() ) { return; } @@ -131,25 +132,50 @@ } + /** + * Gets attributes required for modifications. + * + * @param dn the dn of the entry to get + * @return the entry's attributes (may be immutable if the schema subentry) + * @throws NamingException on error accessing the entry's attributes + */ + private Attributes getAttributes( LdapDN dn ) throws NamingException + { + Attributes attributes; + + // @todo make sure we're not putting in operational attributes that cannot be user modified + Invocation invocation = InvocationStack.getInstance().peek(); + PartitionNexusProxy proxy = invocation.getProxy(); + + if ( schemaService.isSchemaSubentry( dn.toNormName() ) ) + { + return schemaService.getSubschemaEntryCloned(); + } + else + { + attributes = proxy.lookup( new LookupOperationContext( dn ), PartitionNexusProxy.LOOKUP_BYPASS ); + } + + return attributes; + } + + public void modify( NextInterceptor next, ModifyOperationContext opContext ) throws NamingException { Attributes attributes = null; boolean isDelete = AttributeUtils.getAttribute( opContext.getModItems(), entryDeleted ) != null; - if ( ! isDelete && changeLog.isEnabled() ) + if ( ! isDelete && ( changeLog.isEnabled() && ! opContext.isCollateralOperation() ) ) { // @todo make sure we're not putting in operational attributes that cannot be user modified - Invocation invocation = InvocationStack.getInstance().peek(); - PartitionNexusProxy proxy = invocation.getProxy(); - attributes = proxy.lookup( new LookupOperationContext( opContext.getDn() ), - PartitionNexusProxy.LOOKUP_BYPASS ); + attributes = getAttributes( opContext.getDn() ); } next.modify( opContext ); // @TODO: needs big consideration!!! // NOTE: perhaps we need to log this as a system operation that cannot and should not be reapplied? - if ( isDelete || ! changeLog.isEnabled() ) + if ( isDelete || ! changeLog.isEnabled() || opContext.isCollateralOperation() ) { if ( isDelete ) { @@ -179,18 +205,15 @@ public void rename ( NextInterceptor next, RenameOperationContext renameContext ) throws NamingException { Attributes attributes = null; - if ( changeLog.isEnabled() ) + if ( changeLog.isEnabled() && ! renameContext.isCollateralOperation() ) { // @todo make sure we're not putting in operational attributes that cannot be user modified - Invocation invocation = InvocationStack.getInstance().peek(); - PartitionNexusProxy proxy = invocation.getProxy(); - attributes = proxy.lookup( new LookupOperationContext( renameContext.getDn() ), - PartitionNexusProxy.LOOKUP_BYPASS ); + attributes = getAttributes( renameContext.getDn() ); } next.rename( renameContext ); - if ( ! changeLog.isEnabled() ) + if ( ! changeLog.isEnabled() || renameContext.isCollateralOperation() ) { return; } @@ -210,7 +233,7 @@ throws NamingException { Attributes attributes = null; - if ( changeLog.isEnabled() ) + if ( changeLog.isEnabled() && ! opCtx.isCollateralOperation() ) { // @todo make sure we're not putting in operational attributes that cannot be user modified Invocation invocation = InvocationStack.getInstance().peek(); @@ -221,7 +244,7 @@ next.moveAndRename( opCtx ); - if ( ! changeLog.isEnabled() ) + if ( ! changeLog.isEnabled() || opCtx.isCollateralOperation() ) { return; } @@ -243,7 +266,7 @@ { next.move( opCtx ); - if ( ! changeLog.isEnabled() ) + if ( ! changeLog.isEnabled() || opCtx.isCollateralOperation() ) { return; } Modified: directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/exception/ExceptionInterceptor.java URL: http://svn.apache.org/viewvc/directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/exception/ExceptionInterceptor.java?rev=601657&r1=601656&r2=601657&view=diff ============================================================================== --- directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/exception/ExceptionInterceptor.java (original) +++ directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/exception/ExceptionInterceptor.java Thu Dec 6 00:39:23 2007 @@ -549,11 +549,11 @@ if ( msg != null ) { - e = new LdapNameNotFoundException( msg + dn ); + e = new LdapNameNotFoundException( msg + dn.getUpName() ); } else { - e = new LdapNameNotFoundException( dn.toString() ); + e = new LdapNameNotFoundException( dn.getUpName() ); } e.setResolvedName( Modified: directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/interceptor/context/AbstractOperationContext.java URL: http://svn.apache.org/viewvc/directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/interceptor/context/AbstractOperationContext.java?rev=601657&r1=601656&r2=601657&view=diff ============================================================================== --- directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/interceptor/context/AbstractOperationContext.java (original) +++ directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/interceptor/context/AbstractOperationContext.java Thu Dec 6 00:39:23 2007 @@ -43,7 +43,9 @@ private LdapDN dn; private Map requestControls = new HashMap(4); private Map responseControls = new HashMap(4); - + + private boolean collateralOperation; + /** * @@ -54,9 +56,8 @@ { } - + /** - * * Creates a new instance of AbstractOperationContext. * * @param dn The associated DN @@ -66,7 +67,44 @@ this.dn = dn; } - + + /** + * Creates a new instance of AbstractOperationContext. + * + * @param dn the associated DN + * @param collateralOperation true if op is collateral, false otherwise + */ + public AbstractOperationContext( LdapDN dn, boolean collateralOperation ) + { + this.dn = dn; + this.collateralOperation = collateralOperation; + } + + + /** + * Creates an operation context where the operation is considered a side + * effect of a direct operation. + * + * @param collateralOperation true if this is a side effect operation + */ + public AbstractOperationContext( boolean collateralOperation ) + { + this.collateralOperation = collateralOperation; + } + + + public boolean isCollateralOperation() + { + return collateralOperation; + } + + + public void setCollateralOperation( boolean collateralOperation ) + { + this.collateralOperation = collateralOperation; + } + + /** * @return The associated DN */ Modified: directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/interceptor/context/AddOperationContext.java URL: http://svn.apache.org/viewvc/directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/interceptor/context/AddOperationContext.java?rev=601657&r1=601656&r2=601657&view=diff ============================================================================== --- directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/interceptor/context/AddOperationContext.java (original) +++ directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/interceptor/context/AddOperationContext.java Thu Dec 6 00:39:23 2007 @@ -36,30 +36,27 @@ /** The added Attribute */ private Attributes entry; + /** - * * Creates a new instance of AddOperationContext. - * */ public AddOperationContext() { super(); } + /** - * * Creates a new instance of AddOperationContext. - * */ public AddOperationContext( LdapDN dn ) { super( dn ); } + /** - * * Creates a new instance of ModifyOperationContext. - * */ public AddOperationContext( LdapDN dn, Attributes entry ) { @@ -67,7 +64,45 @@ this.entry = entry; } - /** + + /** + * Creates a new instance of AddOperationContext. + * + * @param collateralOperation whether or not this is a side-effect + */ + public AddOperationContext( boolean collateralOperation ) + { + super( collateralOperation ); + } + + + /** + * Creates a new instance of AddOperationContext. + * + * @param dn the name of the entry being added + * @param collateralOperation whether or not this is a side-effect + */ + public AddOperationContext( LdapDN dn, boolean collateralOperation ) + { + super( dn, collateralOperation ); + } + + + /** + * Creates a new instance of ModifyOperationContext. + * + * @param dn the name of the entry being added + * @param entry the entry being added + * @param collateralOperation whether or not this is a side-effect + */ + public AddOperationContext( LdapDN dn, Attributes entry, boolean collateralOperation ) + { + super( dn, collateralOperation ); + this.entry = entry; + } + + + /** * @return The added attributes */ public Attributes getEntry() Modified: directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/interceptor/context/DeleteOperationContext.java URL: http://svn.apache.org/viewvc/directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/interceptor/context/DeleteOperationContext.java?rev=601657&r1=601656&r2=601657&view=diff ============================================================================== --- directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/interceptor/context/DeleteOperationContext.java (original) +++ directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/interceptor/context/DeleteOperationContext.java Thu Dec 6 00:39:23 2007 @@ -38,6 +38,18 @@ super(); } + + /** + * Creates a new instance of DeleteOperationContext. + * + * @param collateralOperation true if this is a side effect operation + */ + public DeleteOperationContext( boolean collateralOperation ) + { + super( collateralOperation ); + } + + /** * Creates a new instance of DeleteOperationContext. * @@ -47,7 +59,20 @@ { super( deleteDn ); } - + + + /** + * Creates a new instance of DeleteOperationContext. + * + * @param deleteDn The entry DN to delete + * @param collateralOperation true if this is a side effect operation + */ + public DeleteOperationContext( LdapDN deleteDn, boolean collateralOperation ) + { + super( deleteDn, collateralOperation ); + } + + /** * @see Object#toString() */ Modified: directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/interceptor/context/ModifyOperationContext.java URL: http://svn.apache.org/viewvc/directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/interceptor/context/ModifyOperationContext.java?rev=601657&r1=601656&r2=601657&view=diff ============================================================================== --- directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/interceptor/context/ModifyOperationContext.java (original) +++ directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/interceptor/context/ModifyOperationContext.java Thu Dec 6 00:39:23 2007 @@ -44,7 +44,8 @@ { /** The modification items */ private List modItems; - + + /** * * Creates a new instance of ModifyOperationContext. @@ -55,10 +56,12 @@ super(); } + /** - * * Creates a new instance of ModifyOperationContext. * + * @param dn the dn of the entry to be modified + * @param modItems the modifications to be performed on the entry */ public ModifyOperationContext( LdapDN dn, List modItems ) { @@ -66,6 +69,21 @@ this.modItems = modItems; } + + /** + * Creates a new instance of ModifyOperationContext. + * + * @param dn the dn of the entry to be modified + * @param modItems the modifications to be performed on the entry + * @param collateralOperation true if op is collateral, false otherwise + */ + public ModifyOperationContext( LdapDN dn, List modItems, boolean collateralOperation ) + { + super( dn, collateralOperation ); + this.modItems = modItems; + } + + /** * Set the modified attributes * @param modItems The modified attributes @@ -75,6 +93,7 @@ this.modItems = modItems; } + /** * @return The modifications */ @@ -82,7 +101,8 @@ { return modItems; } - + + @SuppressWarnings( value = "unchecked" ) public static List createModItems( Attributes attributes, int modOp ) throws NamingException { @@ -96,7 +116,8 @@ return items; } - + + /** * @see Object#toString() */ Modified: directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/interceptor/context/OperationContext.java URL: http://svn.apache.org/viewvc/directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/interceptor/context/OperationContext.java?rev=601657&r1=601656&r2=601657&view=diff ============================================================================== --- directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/interceptor/context/OperationContext.java (original) +++ directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/interceptor/context/OperationContext.java Thu Dec 6 00:39:23 2007 @@ -35,6 +35,24 @@ public interface OperationContext { /** + * Checks to see if this operation is an indirect system issued operation. + * Collateral operations often result from direct operations. + * + * @return true if the operation represents a collateral request + */ + boolean isCollateralOperation(); + + + /** + * Sets this operation context to represent an operation that results as a + * byproduct of another directly issued request. + * + * @param collateralOperation true if this is collateral, false otherwise + */ + void setCollateralOperation( boolean collateralOperation ); + + + /** * @return The associated DN */ LdapDN getDn(); Modified: directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/schema/PartitionSchemaLoader.java URL: http://svn.apache.org/viewvc/directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/schema/PartitionSchemaLoader.java?rev=601657&r1=601656&r2=601657&view=diff ============================================================================== --- directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/schema/PartitionSchemaLoader.java (original) +++ directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/schema/PartitionSchemaLoader.java Thu Dec 6 00:39:23 2007 @@ -76,8 +76,8 @@ public class PartitionSchemaLoader extends AbstractSchemaLoader { /** static class logger */ - private final static Logger log = LoggerFactory.getLogger( PartitionSchemaLoader.class ); - + private static final Logger LOG = LoggerFactory.getLogger( PartitionSchemaLoader.class ); + private final SchemaPartitionDao dao; private SchemaEntityFactory factory; private Partition partition; @@ -212,13 +212,13 @@ { if ( ! schema.isDisabled() ) { - log.debug( "will attempt to load enabled schema: {}", schema.getSchemaName() ); + LOG.debug( "will attempt to load enabled schema: {}", schema.getSchemaName() ); enabledSchemaSet.add( schema ); } else { - log.debug( "will NOT attempt to load disabled schema: {}", schema.getSchemaName() ); + LOG.debug( "will NOT attempt to load disabled schema: {}", schema.getSchemaName() ); } } @@ -339,11 +339,11 @@ if ( targetRegistries.getLoadedSchemas().containsKey( schema.getSchemaName() ) ) { - log.debug( "schema {} already seems to be loaded", schema.getSchemaName() ); + LOG.debug( "schema {} already seems to be loaded", schema.getSchemaName() ); return; } - log.debug( "loading {} schema ...", schema.getSchemaName() ); + LOG.debug( "loading {} schema ...", schema.getSchemaName() ); loadComparators( schema, targetRegistries ); loadNormalizers( schema, targetRegistries ); @@ -415,7 +415,7 @@ return; } - log.debug( "{} schema: loading objectClasses", schema.getSchemaName() ); + LOG.debug( "{} schema: loading objectClasses", schema.getSchemaName() ); NamingEnumeration list = partition.list( new ListOperationContext( dn ) ); while ( list.hasMore() ) @@ -436,8 +436,8 @@ } } - log.debug( "Deferred queue size = {}", deferred.size() ); - if ( log.isDebugEnabled() ) + LOG.debug( "Deferred queue size = {}", deferred.size() ); + if ( LOG.isDebugEnabled() ) { StringBuffer buf = new StringBuffer(); buf.append( "Deferred queue contains: " ); @@ -455,7 +455,7 @@ int lastCount = deferred.size(); while ( ! deferred.isEmpty() ) { - log.debug( "Deferred queue size = {}", deferred.size() ); + LOG.debug( "Deferred queue size = {}", deferred.size() ); ObjectClass oc = deferred.removeFirst(); NamingException lastException = null; @@ -515,7 +515,7 @@ return; } - log.debug( "{} schema: loading attributeTypes", schema.getSchemaName() ); + LOG.debug( "{} schema: loading attributeTypes", schema.getSchemaName() ); NamingEnumeration list = partition.list( new ListOperationContext( dn ) ); while ( list.hasMore() ) @@ -535,8 +535,8 @@ } } - log.debug( "Deferred queue size = {}", deferred.size() ); - if ( log.isDebugEnabled() ) + LOG.debug( "Deferred queue size = {}", deferred.size() ); + if ( LOG.isDebugEnabled() ) { StringBuffer buf = new StringBuffer(); buf.append( "Deferred queue contains: " ); @@ -554,7 +554,7 @@ int lastCount = deferred.size(); while ( ! deferred.isEmpty() ) { - log.debug( "Deferred queue size = {}", deferred.size() ); + LOG.debug( "Deferred queue size = {}", deferred.size() ); AttributeType at = deferred.removeFirst(); NamingException lastException = null; @@ -612,7 +612,7 @@ return; } - log.debug( "{} schema: loading matchingRules", schema.getSchemaName() ); + LOG.debug( "{} schema: loading matchingRules", schema.getSchemaName() ); NamingEnumeration list = partition.list( new ListOperationContext( dn ) ); while ( list.hasMore() ) @@ -644,7 +644,7 @@ return; } - log.debug( "{} schema: loading syntaxes", schema.getSchemaName() ); + LOG.debug( "{} schema: loading syntaxes", schema.getSchemaName() ); NamingEnumeration list = partition.list( new ListOperationContext( dn ) ); while ( list.hasMore() ) @@ -675,7 +675,7 @@ return; } - log.debug( "{} schema: loading syntaxCheckers", schema.getSchemaName() ); + LOG.debug( "{} schema: loading syntaxCheckers", schema.getSchemaName() ); NamingEnumeration list = partition.list( new ListOperationContext( dn ) ); while ( list.hasMore() ) @@ -708,7 +708,7 @@ return; } - log.debug( "{} schema: loading normalizers", schema.getSchemaName() ); + LOG.debug( "{} schema: loading normalizers", schema.getSchemaName() ); NamingEnumeration list = partition.list( new ListOperationContext( dn ) ); while ( list.hasMore() ) @@ -777,7 +777,7 @@ return; } - log.debug( "{} schema: loading comparators", schema.getSchemaName() ); + LOG.debug( "{} schema: loading comparators", schema.getSchemaName() ); NamingEnumeration list = partition.list( new ListOperationContext( dn ) ); while ( list.hasMore() ) Modified: directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/schema/SchemaInterceptor.java URL: http://svn.apache.org/viewvc/directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/schema/SchemaInterceptor.java?rev=601657&r1=601656&r2=601657&view=diff ============================================================================== --- directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/schema/SchemaInterceptor.java (original) +++ directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/schema/SchemaInterceptor.java Thu Dec 6 00:39:23 2007 @@ -34,7 +34,6 @@ import org.apache.directory.server.schema.registries.ObjectClassRegistry; import org.apache.directory.server.schema.registries.OidRegistry; import org.apache.directory.server.schema.registries.Registries; -import org.apache.directory.shared.ldap.constants.JndiPropertyConstants; import org.apache.directory.shared.ldap.constants.SchemaConstants; import org.apache.directory.shared.ldap.exception.*; import org.apache.directory.shared.ldap.filter.EqualityNode; @@ -76,7 +75,10 @@ private static Logger log = LoggerFactory.getLogger( SchemaInterceptor.class ); private static final String[] EMPTY_STRING_ARRAY = new String[0]; - private static final String BINARY_KEY = JndiPropertyConstants.JNDI_LDAP_ATTRIBUTES_BINARY; + private static final String[] SCHEMA_SUBENTRY_RETURN_ATTRIBUTES = + new String[] { SchemaConstants.ALL_OPERATIONAL_ATTRIBUTES, SchemaConstants.ALL_USER_ATTRIBUTES }; + + /** Speedup for logs */ @@ -109,7 +111,7 @@ */ private LdapDN schemaModificationAttributesDN; - private SchemaManager schemaManager; + private SchemaOperationControl schemaManager; // the base DN (normalized) of the schema partition private LdapDN schemaBaseDN; @@ -150,7 +152,7 @@ schemaBaseDN = new LdapDN( "ou=schema" ); schemaBaseDN.normalize( registries.getAttributeTypeRegistry().getNormalizerMapping() ); - schemaManager = directoryService.getSchemaManager(); + schemaManager = directoryService.getSchemaService().getSchemaControl(); // stuff for dealing with subentries (garbage for now) String subschemaSubentry = ( String ) nexus.getRootDSE( null ).get( SchemaConstants.SUBSCHEMA_SUBENTRY_AT ).get(); @@ -1202,11 +1204,10 @@ next.rename( opContext ); } - private final static String[] schemaSubentryReturnAttributes = new String[] { SchemaConstants.ALL_OPERATIONAL_ATTRIBUTES, SchemaConstants.ALL_USER_ATTRIBUTES }; - + public void modify( NextInterceptor next, ModifyOperationContext opContext ) throws NamingException { - Attributes entry = null; + Attributes entry; LdapDN name = opContext.getDn(); List mods = opContext.getModItems(); @@ -1214,7 +1215,7 @@ // and never try to look it up in the nexus below if ( name.getNormName().equalsIgnoreCase( subschemaSubentryDnNorm ) ) { - entry = getSubschemaEntry( schemaSubentryReturnAttributes ); + entry = getSubschemaEntry( SCHEMA_SUBENTRY_RETURN_ATTRIBUTES ); } else { @@ -1508,12 +1509,16 @@ if ( name.startsWith( schemaBaseDN ) ) { - schemaManager.modify( name, mods, entry, targetEntry, + log.debug( "Modification attempt on schema partition {}: \n{}", name, opContext ); + + schemaManager.modify( name, mods, entry, targetEntry, opContext.hasRequestControl( CascadeControl.CONTROL_OID )); } else if ( subschemaSubentryDnNorm.equals( name.getNormName() ) ) { - schemaManager.modifySchemaSubentry( name, mods, entry, targetEntry, + log.debug( "Modification attempt on schema subentry {}: \n{}", name, opContext ); + + schemaManager.modifySchemaSubentry( name, mods, entry, targetEntry, opContext.hasRequestControl( CascadeControl.CONTROL_OID ) ); return; } Copied: directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/schema/SchemaOperationControl.java (from r601149, directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/schema/SchemaManager.java) URL: http://svn.apache.org/viewvc/directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/schema/SchemaOperationControl.java?p2=directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/schema/SchemaOperationControl.java&p1=directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/schema/SchemaManager.java&r1=601149&r2=601657&rev=601657&view=diff ============================================================================== --- directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/schema/SchemaManager.java (original) +++ directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/schema/SchemaOperationControl.java Thu Dec 6 00:39:23 2007 @@ -20,22 +20,6 @@ package org.apache.directory.server.core.schema; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import javax.naming.NamingEnumeration; -import javax.naming.NamingException; -import javax.naming.directory.Attribute; -import javax.naming.directory.Attributes; -import javax.naming.directory.DirContext; -import javax.naming.directory.ModificationItem; - import org.apache.directory.server.constants.ApacheSchemaConstants; import org.apache.directory.server.constants.MetaSchemaConstants; import org.apache.directory.server.core.authn.AuthenticationInterceptor; @@ -62,20 +46,23 @@ 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.DITContentRule; -import org.apache.directory.shared.ldap.schema.DITStructureRule; -import org.apache.directory.shared.ldap.schema.MatchingRule; -import org.apache.directory.shared.ldap.schema.MatchingRuleUse; -import org.apache.directory.shared.ldap.schema.NameForm; -import org.apache.directory.shared.ldap.schema.ObjectClass; -import org.apache.directory.shared.ldap.schema.Syntax; +import org.apache.directory.shared.ldap.schema.*; import org.apache.directory.shared.ldap.schema.syntax.AbstractSchemaDescription; import org.apache.directory.shared.ldap.schema.syntax.ComparatorDescription; import org.apache.directory.shared.ldap.schema.syntax.NormalizerDescription; import org.apache.directory.shared.ldap.schema.syntax.SyntaxCheckerDescription; import org.apache.directory.shared.ldap.util.AttributeUtils; import org.apache.directory.shared.ldap.util.DateUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import javax.naming.NamingEnumeration; +import javax.naming.NamingException; +import javax.naming.directory.Attribute; +import javax.naming.directory.Attributes; +import javax.naming.directory.DirContext; +import javax.naming.directory.ModificationItem; +import java.util.*; /** @@ -91,8 +78,10 @@ * @author Apache Directory Project * @version $Rev$, $Date$ */ -public class SchemaManager +public class SchemaOperationControl { + private static final Logger LOG = LoggerFactory.getLogger( SchemaOperationControl.class ); + // indices of handlers and object ids into arrays private static final int COMPARATOR_INDEX = 0; private static final int NORMALIZER_INDEX = 1; @@ -107,7 +96,7 @@ private static final int NAME_FORM_INDEX = 10; private static final Set VALID_OU_VALUES = new HashSet(); - private static final String[] opAttrs = new String[] { + private static final String[] OP_ATTRS = new String[] { SchemaConstants.COMPARATORS_AT, SchemaConstants.NORMALIZERS_AT, SchemaConstants.SYNTAX_CHECKERS_AT, @@ -120,7 +109,7 @@ SchemaConstants.DIT_CONTENT_RULES_AT, SchemaConstants.NAME_FORMS_AT }; - private static final String[] metaObjectClasses = new String[] { + private static final String[] META_OBJECT_CLASSES = new String[] { "metaComparator", "metaNormalizer", "metaSyntaxChecker", @@ -135,26 +124,12 @@ }; private static final Collection SCHEMA_MODIFICATION_ATTRIBUTES_UPDATE_BYPASS; - private final PartitionSchemaLoader loader; private final MetaSchemaHandler metaSchemaHandler; private final Registries globalRegistries; private final AttributeType objectClassAT; private final SchemaSubentryModifier subentryModifier; private final SchemaChangeHandler[] schemaObjectHandlers = new SchemaChangeHandler[11]; - private final String comparatorsOid; - private final String normalizersOid; - private final String syntaxCheckersOid; - - private final String ldapSyntaxesOid; - private final String matchingRulesOid; - private final String attributeTypesOid; - private final String objectClassesOid; - private final String matchingRuleUseOid; - private final String nameFormsOid; - private final String ditContentRulesOid; - private final String ditStructureRulesOid; - private final DescriptionParsers parsers; private final Map opAttr2handlerMap = new HashMap(); @@ -165,7 +140,10 @@ * the handler in the schemaObjectHandlers array. */ private final Map opAttr2handlerIndex = new HashMap( 11 ); - + private static final String CASCADING_ERROR = + "Cascading has not yet been implemented: standard operation is in effect."; + + static { VALID_OU_VALUES.add( SchemaConstants.NORMALIZERS_AT.toLowerCase() ); @@ -187,6 +165,7 @@ c.add( AciAuthorizationInterceptor.class.getName() ); c.add( DefaultAuthorizationInterceptor.class.getName() ); c.add( ExceptionInterceptor.class.getName() ); +// c.add( ChangeLogInterceptor.class.getName() ); // c.add( OperationalAttributeInterceptor.class.getName() ); c.add( SchemaInterceptor.class.getName() ); // c.add( SubentryInterceptor.class.getName() ); @@ -197,15 +176,14 @@ } - public SchemaManager( Registries globalRegistries, PartitionSchemaLoader loader, SchemaPartitionDao dao ) + public SchemaOperationControl( Registries globalRegistries, PartitionSchemaLoader loader, SchemaPartitionDao dao ) throws NamingException { - this.loader = loader; this.globalRegistries = globalRegistries; this.objectClassAT = this.globalRegistries.getAttributeTypeRegistry() .lookup( SchemaConstants.OBJECT_CLASS_AT ); - this.metaSchemaHandler = new MetaSchemaHandler( this.globalRegistries, this.loader ); + this.metaSchemaHandler = new MetaSchemaHandler( this.globalRegistries, loader ); this.schemaObjectHandlers[COMPARATOR_INDEX] = new MetaComparatorHandler( globalRegistries, loader ); this.schemaObjectHandlers[NORMALIZER_INDEX] = new MetaNormalizerHandler( globalRegistries, loader ); @@ -223,39 +201,39 @@ this.parsers = new DescriptionParsers( globalRegistries, dao ); OidRegistry oidRegistry = globalRegistries.getOidRegistry(); - - comparatorsOid = oidRegistry.getOid( SchemaConstants.COMPARATORS_AT ); - opAttr2handlerIndex.put( comparatorsOid, new Integer( COMPARATOR_INDEX ) ); - - normalizersOid = oidRegistry.getOid( SchemaConstants.NORMALIZERS_AT ); - opAttr2handlerIndex.put( normalizersOid, new Integer( NORMALIZER_INDEX ) ); - - syntaxCheckersOid = oidRegistry.getOid( SchemaConstants.SYNTAX_CHECKERS_AT ); - opAttr2handlerIndex.put( syntaxCheckersOid, new Integer( SYNTAX_CHECKER_INDEX ) ); - - ldapSyntaxesOid = oidRegistry.getOid( SchemaConstants.LDAP_SYNTAXES_AT ); - opAttr2handlerIndex.put( ldapSyntaxesOid, new Integer( SYNTAX_INDEX ) ); - - matchingRulesOid = oidRegistry.getOid( SchemaConstants.MATCHING_RULES_AT ); - opAttr2handlerIndex.put( matchingRulesOid, new Integer( MATCHING_RULE_INDEX ) ); - attributeTypesOid = oidRegistry.getOid( SchemaConstants.ATTRIBUTE_TYPES_AT ); - opAttr2handlerIndex.put( attributeTypesOid, new Integer( ATTRIBUTE_TYPE_INDEX ) ); + String comparatorsOid = oidRegistry.getOid( SchemaConstants.COMPARATORS_AT ); + opAttr2handlerIndex.put( comparatorsOid, COMPARATOR_INDEX ); - objectClassesOid = oidRegistry.getOid( SchemaConstants.OBJECT_CLASSES_AT ); - opAttr2handlerIndex.put( objectClassesOid, new Integer( OBJECT_CLASS_INDEX ) ); - - matchingRuleUseOid = oidRegistry.getOid( SchemaConstants.MATCHING_RULE_USE_AT ); - opAttr2handlerIndex.put( matchingRuleUseOid, new Integer( MATCHING_RULE_USE_INDEX ) ); + String normalizersOid = oidRegistry.getOid( SchemaConstants.NORMALIZERS_AT ); + opAttr2handlerIndex.put( normalizersOid, NORMALIZER_INDEX ); + + String syntaxCheckersOid = oidRegistry.getOid( SchemaConstants.SYNTAX_CHECKERS_AT ); + opAttr2handlerIndex.put( syntaxCheckersOid, SYNTAX_CHECKER_INDEX ); + + String ldapSyntaxesOid = oidRegistry.getOid( SchemaConstants.LDAP_SYNTAXES_AT ); + opAttr2handlerIndex.put( ldapSyntaxesOid, SYNTAX_INDEX ); - ditStructureRulesOid = oidRegistry.getOid( SchemaConstants.DIT_STRUCTURE_RULES_AT ); - opAttr2handlerIndex.put( ditStructureRulesOid, new Integer( DIT_STRUCTURE_RULE_INDEX ) ); + String matchingRulesOid = oidRegistry.getOid( SchemaConstants.MATCHING_RULES_AT ); + opAttr2handlerIndex.put( matchingRulesOid, MATCHING_RULE_INDEX ); - ditContentRulesOid = oidRegistry.getOid( SchemaConstants.DIT_CONTENT_RULES_AT ); - opAttr2handlerIndex.put( ditContentRulesOid, new Integer( DIT_CONTENT_RULE_INDEX ) ); + String attributeTypesOid = oidRegistry.getOid( SchemaConstants.ATTRIBUTE_TYPES_AT ); + opAttr2handlerIndex.put( attributeTypesOid, ATTRIBUTE_TYPE_INDEX ); - nameFormsOid = oidRegistry.getOid( SchemaConstants.NAME_FORMS_AT ); - opAttr2handlerIndex.put( nameFormsOid, new Integer( NAME_FORM_INDEX ) ); + String objectClassesOid = oidRegistry.getOid( SchemaConstants.OBJECT_CLASSES_AT ); + opAttr2handlerIndex.put( objectClassesOid, OBJECT_CLASS_INDEX ); + + String matchingRuleUseOid = oidRegistry.getOid( SchemaConstants.MATCHING_RULE_USE_AT ); + opAttr2handlerIndex.put( matchingRuleUseOid, MATCHING_RULE_USE_INDEX ); + + String ditStructureRulesOid = oidRegistry.getOid( SchemaConstants.DIT_STRUCTURE_RULES_AT ); + opAttr2handlerIndex.put( ditStructureRulesOid, DIT_STRUCTURE_RULE_INDEX ); + + String ditContentRulesOid = oidRegistry.getOid( SchemaConstants.DIT_CONTENT_RULES_AT ); + opAttr2handlerIndex.put( ditContentRulesOid, DIT_CONTENT_RULE_INDEX ); + + String nameFormsOid = oidRegistry.getOid( SchemaConstants.NAME_FORMS_AT ); + opAttr2handlerIndex.put( nameFormsOid, NAME_FORM_INDEX ); initHandlerMaps(); } @@ -264,16 +242,16 @@ private void initHandlerMaps() throws NamingException { AttributeTypeRegistry atReg = globalRegistries.getAttributeTypeRegistry(); - for ( int ii = 0; ii < opAttrs.length; ii++ ) + for ( int ii = 0; ii < OP_ATTRS.length; ii++ ) { - AttributeType at = atReg.lookup( opAttrs[ii] ); + AttributeType at = atReg.lookup( OP_ATTRS[ii] ); opAttr2handlerMap.put( at.getOid(), schemaObjectHandlers[ii] ); } ObjectClassRegistry ocReg = globalRegistries.getObjectClassRegistry(); - for ( int ii = 0; ii < metaObjectClasses.length; ii++ ) + for ( int ii = 0; ii < META_OBJECT_CLASSES.length; ii++ ) { - ObjectClass oc = ocReg.lookup( metaObjectClasses[ii] ); + ObjectClass oc = ocReg.lookup( META_OBJECT_CLASSES[ii] ); objectClass2handlerMap.put( oc.getOid(), schemaObjectHandlers[ii] ); } } @@ -287,6 +265,7 @@ public Registries getRegistries( LdapDN dn ) { + LOG.error( "Ignoring request for specific registries under dn {}", dn ); throw new NotImplementedException(); } @@ -437,7 +416,9 @@ updateSchemaModificationAttributes(); return; } - + + LOG.error( String.format( "Unwilling to perform modify on %s:\n\nEntry:\n%s\n\nModifications:\n%s", name, + entry, mods ) ); throw new LdapOperationNotSupportedException( ResultCodeEnum.UNWILLING_TO_PERFORM ); } @@ -536,6 +517,9 @@ * @param mods the modification operations performed on the subentry * @param subentry the attributes of the subentry * @param targetSubentry the target subentry after being modified + * @param doCascadeModify determines if a cascading operation should be performed + * to effect all dependents on the changed entity + * @throws NamingException if the operation fails */ public void modifySchemaSubentry( LdapDN name, List mods, Attributes subentry, Attributes targetSubentry, boolean doCascadeModify ) throws NamingException @@ -584,6 +568,9 @@ * @param mods the modification operations performed on the subentry * @param subentry the attributes of the subentry * @param targetSubentry the target subentry after being modified + * @param doCascadeModify determines if a cascading operation should be performed + * to effect all dependents on the changed entity + * @throws NamingException if the modify fails */ public void modifySchemaSubentry( LdapDN name, int modOp, Attributes mods, Attributes subentry, Attributes targetSubentry, boolean doCascadeModify ) throws NamingException @@ -639,13 +626,15 @@ * * @param opAttrOid the numeric id of the operational attribute modified * @param mods the attribute with the modifications - * @throws NamingException if there are problems updating the registries and the + * @param doCascadeModify determines if a cascading operation should be performed + * to effect all dependents on the changed entity + * @throws NamingException if there are problems updating the registries and the * schema partition */ private void modifyRemoveOperation( String opAttrOid, Attribute mods, boolean doCascadeModify ) throws NamingException { - int index = opAttr2handlerIndex.get( opAttrOid ).intValue(); + int index = opAttr2handlerIndex.get( opAttrOid ); SchemaChangeHandler handler = opAttr2handlerMap.get( opAttrOid ); switch( index ) { @@ -770,12 +759,19 @@ * * @param opAttrOid the numeric id of the operational attribute modified * @param mods the attribute with the modifications - * @throws NamingException if there are problems updating the registries and the + * @param doCascadeModify determines if a cascading operation should be performed + * to effect all dependents on the changed entity + * @throws NamingException if there are problems updating the registries and the * schema partition */ private void modifyAddOperation( String opAttrOid, Attribute mods, boolean doCascadeModify ) throws NamingException { - int index = opAttr2handlerIndex.get( opAttrOid ).intValue(); + if ( doCascadeModify ) + { + LOG.error( CASCADING_ERROR ); + } + + int index = opAttr2handlerIndex.get( opAttrOid ); SchemaChangeHandler handler = opAttr2handlerMap.get( opAttrOid ); switch( index ) { @@ -924,6 +920,7 @@ LdapDN name = new LdapDN( "cn=schemaModifications,ou=schema" ); name.normalize( globalRegistries.getAttributeTypeRegistry().getNormalizerMapping() ); - invocation.getProxy().modify( new ModifyOperationContext( name, mods ), SCHEMA_MODIFICATION_ATTRIBUTES_UPDATE_BYPASS ); + invocation.getProxy().modify( new ModifyOperationContext( name, mods, true ), + SCHEMA_MODIFICATION_ATTRIBUTES_UPDATE_BYPASS ); } } Propchange: directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/schema/SchemaOperationControl.java ------------------------------------------------------------------------------ svn:eol-style = native Modified: directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/schema/SchemaService.java URL: http://svn.apache.org/viewvc/directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/schema/SchemaService.java?rev=601657&r1=601656&r2=601657&view=diff ============================================================================== --- directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/schema/SchemaService.java (original) +++ directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/schema/SchemaService.java Thu Dec 6 00:39:23 2007 @@ -19,7 +19,30 @@ package org.apache.directory.server.core.schema; +import org.apache.directory.server.constants.ApacheSchemaConstants; +import org.apache.directory.server.core.interceptor.context.LookupOperationContext; +import org.apache.directory.server.core.partition.PartitionNexus; +import org.apache.directory.server.core.partition.impl.btree.jdbm.JdbmPartition; import org.apache.directory.server.schema.registries.Registries; +import org.apache.directory.shared.ldap.constants.SchemaConstants; +import org.apache.directory.shared.ldap.message.AttributeImpl; +import org.apache.directory.shared.ldap.message.AttributesImpl; +import org.apache.directory.shared.ldap.name.LdapDN; +import org.apache.directory.shared.ldap.schema.*; +import org.apache.directory.shared.ldap.schema.syntax.ComparatorDescription; +import org.apache.directory.shared.ldap.schema.syntax.NormalizerDescription; +import org.apache.directory.shared.ldap.schema.syntax.SyntaxCheckerDescription; +import org.apache.directory.shared.ldap.util.AttributeUtils; +import org.apache.directory.shared.ldap.util.DateUtils; +import org.apache.directory.shared.ldap.util.ImmutableAttributesWrapper; + +import javax.naming.NamingException; +import javax.naming.directory.Attribute; +import javax.naming.directory.Attributes; +import java.util.Date; +import java.util.HashSet; +import java.util.Iterator; +import java.util.Set; /** @@ -30,11 +53,544 @@ */ public class SchemaService { + public static final String SCHEMA_SUBENTRY_DN = "cn=schema"; + public static final String SCHEMA_SUBENTRY_DN_NORMALIZED = "2.5.4.3=schema"; + public static final String SCHEMA_AREA_DN = "ou=schema"; + public static final String SCHEMA_AREA_DN_NORMALIZED = "2.5.4.11=schema"; + + private static final String[] EMPTY_STRING_ARRAY = new String[0]; + private static final String SCHEMA_TIMESTAMP_ENTRY_DN = "cn=schemaModifications,ou=schema"; + + + /** cached version of the schema subentry with all attributes in it */ + private Attributes schemaSubentry; + private final Object lock = new Object(); + + /** a handle on the registries */ private Registries registries; + /** a handle on the schema partition */ + private JdbmPartition schemaPartition; + + /** schema operation control */ + private SchemaOperationControl schemaControl; + + /** + * the normalized name for the schema modification attributes + */ + private LdapDN schemaModificationAttributesDN; + + + + public SchemaService( Registries registries, JdbmPartition schemaPartition, SchemaOperationControl schemaControl ) throws NamingException + { + this.registries = registries; + this.schemaPartition = schemaPartition; + this.schemaControl = schemaControl; + + schemaModificationAttributesDN = new LdapDN( SCHEMA_TIMESTAMP_ENTRY_DN ); + schemaModificationAttributesDN.normalize( registries.getAttributeTypeRegistry().getNormalizerMapping() ); + } + + + public boolean isSchemaSubentry( String dnString ) throws NamingException + { + if ( dnString.equalsIgnoreCase( SCHEMA_SUBENTRY_DN ) || + dnString.equalsIgnoreCase( SCHEMA_SUBENTRY_DN_NORMALIZED ) ) + { + return true; + } + + LdapDN dn = new LdapDN( dnString ).normalize( registries.getAttributeTypeRegistry().getNormalizerMapping() ); + return dn.getNormName().equals( SCHEMA_SUBENTRY_DN_NORMALIZED ); + } + public Registries getRegistries() { return registries; + } + + + private Attribute generateComparators() + { + Attribute attr = new AttributeImpl( SchemaConstants.COMPARATORS_AT ); + Iterator list = registries.getComparatorRegistry().comparatorDescriptionIterator(); + while ( list.hasNext() ) + { + ComparatorDescription description = list.next(); + attr.add( SchemaUtils.render( description ).toString() ); + } + + return attr; + } + + + private Attribute generateNormalizers() + { + Attribute attr; + attr = new AttributeImpl( SchemaConstants.NORMALIZERS_AT ); + Iterator list = registries.getNormalizerRegistry().normalizerDescriptionIterator(); + while ( list.hasNext() ) + { + NormalizerDescription normalizer = list.next(); + attr.add( SchemaUtils.render( normalizer ).toString() ); + } + return attr; + } + + + private Attribute generateSyntaxCheckers() + { + Attribute attr; + attr = new AttributeImpl( SchemaConstants.SYNTAX_CHECKERS_AT ); + Iterator list = + registries.getSyntaxCheckerRegistry().syntaxCheckerDescriptionIterator(); + + while ( list.hasNext() ) + { + SyntaxCheckerDescription syntaxCheckerDescription = list.next(); + attr.add( SchemaUtils.render( syntaxCheckerDescription ).toString() ); + } + return attr; + } + + + private Attribute generateObjectClasses() throws NamingException + { + Attribute attr; + attr = new AttributeImpl( SchemaConstants.OBJECT_CLASSES_AT ); + Iterator list = registries.getObjectClassRegistry().iterator(); + + while ( list.hasNext() ) + { + ObjectClass oc = list.next(); + attr.add( SchemaUtils.render( oc ).toString() ); + } + return attr; + } + + + private Attribute generateAttributeTypes() throws NamingException + { + Attribute attr; + attr = new AttributeImpl( SchemaConstants.ATTRIBUTE_TYPES_AT ); + Iterator list = registries.getAttributeTypeRegistry().iterator(); + + while ( list.hasNext() ) + { + AttributeType at = list.next(); + attr.add( SchemaUtils.render( at ).toString() ); + } + return attr; + } + + + private Attribute generateMatchingRules() throws NamingException + { + Attribute attr; + attr = new AttributeImpl( SchemaConstants.MATCHING_RULES_AT ); + Iterator list = registries.getMatchingRuleRegistry().iterator(); + + while ( list.hasNext() ) + { + MatchingRule mr = list.next(); + attr.add( SchemaUtils.render( mr ).toString() ); + } + return attr; + } + + + private Attribute generateMatchingRuleUses() + { + Attribute attr; + attr = new AttributeImpl( SchemaConstants.MATCHING_RULE_USE_AT ); + Iterator list = registries.getMatchingRuleUseRegistry().iterator(); + + while ( list.hasNext() ) + { + MatchingRuleUse mru = list.next(); + attr.add( SchemaUtils.render( mru ).toString() ); + } + return attr; + } + + + private Attribute generateSyntaxes() + { + Attribute attr; + attr = new AttributeImpl( SchemaConstants.LDAP_SYNTAXES_AT ); + Iterator list = registries.getSyntaxRegistry().iterator(); + + while ( list.hasNext() ) + { + Syntax syntax = list.next(); + attr.add( SchemaUtils.render( syntax ).toString() ); + } + return attr; + } + + + private Attribute generateDitContextRules() + { + Attribute attr; + attr = new AttributeImpl( SchemaConstants.DIT_CONTENT_RULES_AT ); + Iterator list = registries.getDitContentRuleRegistry().iterator(); + + while ( list.hasNext() ) + { + DITContentRule dcr = list.next(); + attr.add( SchemaUtils.render( dcr ).toString() ); + } + return attr; + } + + + private Attribute generateDitStructureRules() + { + Attribute attr; + attr = new AttributeImpl( SchemaConstants.DIT_STRUCTURE_RULES_AT ); + Iterator list = registries.getDitStructureRuleRegistry().iterator(); + + while ( list.hasNext() ) + { + DITStructureRule dsr =list.next(); + attr.add( SchemaUtils.render( dsr ).toString() ); + } + return attr; + } + + + private Attribute generateNameForms() + { + Attribute attr; + attr = new AttributeImpl( SchemaConstants.NAME_FORMS_AT ); + Iterator list = registries.getNameFormRegistry().iterator(); + + while ( list.hasNext() ) + { + NameForm nf = list.next(); + attr.add( SchemaUtils.render( nf ).toString() ); + } + return attr; + } + + + private void generateSchemaSubentry( Attributes mods ) throws NamingException + { + Attributes attrs = new AttributesImpl( true ); + + // add the objectClass attribute + Attribute oc = new AttributeImpl( SchemaConstants.OBJECT_CLASS_AT ); + oc.add( SchemaConstants.TOP_OC ); + oc.add( "subschema" ); + oc.add( SchemaConstants.SUBENTRY_OC ); + oc.add( ApacheSchemaConstants.APACHE_SUBSCHEMA_OC ); + attrs.put( oc ); + + // add the cn attribute as required for the RDN + attrs.put( SchemaConstants.CN_AT, "schema" ); + + // generate all the other operational attributes + attrs.put( generateComparators() ); + attrs.put( generateNormalizers() ); + attrs.put( generateSyntaxCheckers() ); + attrs.put( generateObjectClasses() ); + attrs.put( generateAttributeTypes() ); + attrs.put( generateMatchingRules() ); + attrs.put( generateMatchingRuleUses() ); + attrs.put( generateSyntaxes() ); + attrs.put( generateDitContextRules() ); + attrs.put( generateDitStructureRules() ); + attrs.put( generateNameForms() ); + attrs.put( new AttributeImpl( SchemaConstants.SUBTREE_SPECIFICATION_AT, "{}" ) ); + + + // ------------------------------------------------------------------- + // set standard operational attributes for the subentry + // ------------------------------------------------------------------- + + // Add the createTimestamp + Attribute attr = new AttributeImpl( SchemaConstants.CREATE_TIMESTAMP_AT ); + AttributeType createTimestampAT = registries. + getAttributeTypeRegistry().lookup( SchemaConstants.CREATE_TIMESTAMP_AT ); + Attribute createTimestamp = AttributeUtils.getAttribute( mods, createTimestampAT ); + attr.add( createTimestamp.get() ); + attrs.put( attr ); + + // Add the creatorsName + attr = new AttributeImpl( SchemaConstants.CREATORS_NAME_AT ); + attr.add( PartitionNexus.ADMIN_PRINCIPAL ); + attrs.put( attr ); + + // Add the modifyTimestamp + attr = new AttributeImpl( SchemaConstants.MODIFY_TIMESTAMP_AT ); + AttributeType schemaModifyTimestampAT = registries. + getAttributeTypeRegistry().lookup( ApacheSchemaConstants.SCHEMA_MODIFY_TIMESTAMP_AT ); + Attribute schemaModifyTimestamp = + AttributeUtils.getAttribute( mods, schemaModifyTimestampAT ); + attr.add( schemaModifyTimestamp.get() ); + attrs.put( attr ); + + // Add the modifiersName + attr = new AttributeImpl( SchemaConstants.MODIFIERS_NAME_AT ); + AttributeType schemaModifiersNameAT = registries. + getAttributeTypeRegistry().lookup( ApacheSchemaConstants.SCHEMA_MODIFIERS_NAME_AT ); + Attribute schemaModifiersName = + AttributeUtils.getAttribute( mods, schemaModifiersNameAT ); + attr.add( schemaModifiersName.get() ); + attrs.put( attr ); + + // don't swap out if a request for the subentry is in progress or we + // can give back an inconsistent schema back to the client so we block + synchronized ( lock ) + { + schemaSubentry = attrs; + } + } + + + private void addAttribute( Attributes attrs, String id ) throws NamingException + { + Attribute attr = schemaSubentry.get( id ); + + if ( attr != null ) + { + attrs.put( attr ); + } + } + + + /** + * A seriously unsafe (unsynchronized) means to access the schemaSubentry. + * + * @return the schemaSubentry + * @throws NamingException if there is a failure to access schema timestamps + */ + public Attributes getSubschemaEntryImmutable() throws NamingException + { + if ( schemaSubentry == null ) + { + generateSchemaSubentry( schemaPartition.lookup( + new LookupOperationContext( schemaModificationAttributesDN ) ) ); + } + + return new ImmutableAttributesWrapper( schemaSubentry ); + } + + + /** + * A seriously unsafe (unsynchronized) means to access the schemaSubentry. + * + * @return the schemaSubentry + * @throws NamingException if there is a failure to access schema timestamps + */ + public Attributes getSubschemaEntryCloned() throws NamingException + { + if ( schemaSubentry == null ) + { + generateSchemaSubentry( schemaPartition.lookup( + new LookupOperationContext( schemaModificationAttributesDN ) ) ); + } + + return ( Attributes ) schemaSubentry.clone(); + } + + + /** + * Gets the schemaSubentry based on specific search id parameters which + * include the special '*' and '+' operators. + * + * @param ids the ids of the attributes that should be returned from a search + * @return the subschema entry with the ids provided + * @throws NamingException if there are failures during schema info access + */ + public Attributes getSubschemaEntry( String[] ids ) throws NamingException + { + if ( ids == null ) + { + ids = EMPTY_STRING_ARRAY; + } + + Set setOids = new HashSet(); + AttributesImpl attrs = new AttributesImpl(); + boolean returnAllOperationalAttributes = false; + + synchronized( lock ) + { + // --------------------------------------------------------------- + // Check if we need an update by looking at timestamps on disk + // --------------------------------------------------------------- + + Attributes mods = schemaPartition.lookup( new LookupOperationContext( schemaModificationAttributesDN ) ); + Attribute modifyTimeDisk = mods.get( SchemaConstants.MODIFY_TIMESTAMP_AT ); + Attribute modifyTimeMemory = schemaSubentry.get( SchemaConstants.MODIFY_TIMESTAMP_AT ); + + if ( modifyTimeDisk == null && modifyTimeMemory == null ) + { + // do nothing! + } + else if ( modifyTimeDisk != null && modifyTimeMemory != null ) + { + Date disk = DateUtils.getDate( ( String ) modifyTimeDisk.get() ); + Date mem = DateUtils.getDate( ( String ) modifyTimeMemory.get() ); + if ( disk.after( mem ) ) + { + generateSchemaSubentry( mods ); + } + } + else + { + generateSchemaSubentry( mods ); + } + + + // --------------------------------------------------------------- + // Prep Work: Transform the attributes to their OID counterpart + // --------------------------------------------------------------- + + for ( String id:ids ) + { + // Check whether the set contains a plus, and use it below to include all + // operational attributes. Due to RFC 3673, and issue DIREVE-228 in JIRA + if ( SchemaConstants.ALL_OPERATIONAL_ATTRIBUTES.equals( id ) ) + { + returnAllOperationalAttributes = true; + } + else if ( SchemaConstants.ALL_USER_ATTRIBUTES.equals( id ) ) + { + setOids.add( id ); + } + else + { + setOids.add( registries.getOidRegistry().getOid( id ) ); + } + } + + if ( returnAllOperationalAttributes || setOids.contains( SchemaConstants.COMPARATORS_AT_OID ) ) + { + addAttribute( attrs, SchemaConstants.COMPARATORS_AT ); + } + + if ( returnAllOperationalAttributes || setOids.contains( SchemaConstants.NORMALIZERS_AT_OID ) ) + { + addAttribute( attrs, SchemaConstants.NORMALIZERS_AT ); + } + + if ( returnAllOperationalAttributes || setOids.contains( SchemaConstants.SYNTAX_CHECKERS_AT_OID ) ) + { + addAttribute( attrs, SchemaConstants.SYNTAX_CHECKERS_AT ); + } + + if ( returnAllOperationalAttributes || setOids.contains( SchemaConstants.OBJECT_CLASSES_AT_OID ) ) + { + addAttribute( attrs, SchemaConstants.OBJECT_CLASSES_AT ); + } + + if ( returnAllOperationalAttributes || setOids.contains( SchemaConstants.ATTRIBUTE_TYPES_AT_OID ) ) + { + addAttribute( attrs, SchemaConstants.ATTRIBUTE_TYPES_AT ); + } + + if ( returnAllOperationalAttributes || setOids.contains( SchemaConstants.MATCHING_RULES_AT_OID ) ) + { + addAttribute( attrs, SchemaConstants.MATCHING_RULES_AT ); + } + + if ( returnAllOperationalAttributes || setOids.contains( SchemaConstants.MATCHING_RULE_USE_AT_OID ) ) + { + addAttribute( attrs, SchemaConstants.MATCHING_RULE_USE_AT ); + } + + if ( returnAllOperationalAttributes || setOids.contains( SchemaConstants.LDAP_SYNTAXES_AT_OID ) ) + { + addAttribute( attrs, SchemaConstants.LDAP_SYNTAXES_AT ); + } + + if ( returnAllOperationalAttributes || setOids.contains( SchemaConstants.DIT_CONTENT_RULES_AT_OID ) ) + { + addAttribute( attrs, SchemaConstants.DIT_CONTENT_RULES_AT ); + } + + if ( returnAllOperationalAttributes || setOids.contains( SchemaConstants.DIT_STRUCTURE_RULES_AT_OID ) ) + { + addAttribute( attrs, SchemaConstants.DIT_STRUCTURE_RULES_AT ); + } + + if ( returnAllOperationalAttributes || setOids.contains( SchemaConstants.NAME_FORMS_AT_OID ) ) + { + addAttribute( attrs, SchemaConstants.NAME_FORMS_AT ); + } + + if ( returnAllOperationalAttributes || setOids.contains( SchemaConstants.SUBTREE_SPECIFICATION_AT_OID ) ) + { + addAttribute( attrs, SchemaConstants.SUBTREE_SPECIFICATION_AT ); + } + + int minSetSize = 0; + if ( setOids.contains( SchemaConstants.ALL_OPERATIONAL_ATTRIBUTES ) ) + { + minSetSize++; + } + + if ( setOids.contains( SchemaConstants.ALL_USER_ATTRIBUTES ) ) + { + minSetSize++; + } + + if ( setOids.contains( SchemaConstants.REF_AT_OID ) ) + { + minSetSize++; + } + + // add the objectClass attribute + if ( setOids.contains( SchemaConstants.ALL_USER_ATTRIBUTES ) || + setOids.contains( SchemaConstants.OBJECT_CLASS_AT_OID ) || + setOids.size() == minSetSize ) + { + addAttribute( attrs, SchemaConstants.OBJECT_CLASS_AT ); + } + + // add the cn attribute as required for the RDN + if ( setOids.contains( SchemaConstants.ALL_USER_ATTRIBUTES ) || + setOids.contains( SchemaConstants.CN_AT_OID ) || + setOids.size() == minSetSize ) + { + addAttribute( attrs, SchemaConstants.CN_AT ); + } + + // ------------------------------------------------------------------- + // set standard operational attributes for the subentry + // ------------------------------------------------------------------- + + + if ( returnAllOperationalAttributes || setOids.contains( SchemaConstants.CREATE_TIMESTAMP_AT_OID ) ) + { + addAttribute( attrs, SchemaConstants.CREATE_TIMESTAMP_AT ); + } + + if ( returnAllOperationalAttributes || setOids.contains( SchemaConstants.CREATORS_NAME_AT_OID ) ) + { + addAttribute( attrs, SchemaConstants.CREATORS_NAME_AT ); + } + + if ( returnAllOperationalAttributes || setOids.contains( SchemaConstants.MODIFY_TIMESTAMP_AT_OID ) ) + { + addAttribute( attrs, SchemaConstants.MODIFY_TIMESTAMP_AT ); + } + + if ( returnAllOperationalAttributes || setOids.contains( SchemaConstants.MODIFIERS_NAME_AT_OID ) ) + { + addAttribute( attrs, SchemaConstants.MODIFIERS_NAME_AT ); + } + } + + return attrs; + } + + + SchemaOperationControl getSchemaControl() + { + return schemaControl; } } Modified: directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/schema/SchemaSubentryModifier.java URL: http://svn.apache.org/viewvc/directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/schema/SchemaSubentryModifier.java?rev=601657&r1=601656&r2=601657&view=diff ============================================================================== --- directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/schema/SchemaSubentryModifier.java (original) +++ directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/schema/SchemaSubentryModifier.java Thu Dec 6 00:39:23 2007 @@ -146,7 +146,7 @@ Schema schema = dao.getSchema( obj.getSchema() ); LdapDN dn = getDn( obj ); Attributes attrs = factory.getAttributes( obj, schema ); - proxy.add( new AddOperationContext( dn, attrs ), BYPASS ); + proxy.add( new AddOperationContext( dn, attrs, true ), BYPASS ); } @@ -154,7 +154,7 @@ { PartitionNexusProxy proxy = InvocationStack.getInstance().peek().getProxy(); LdapDN dn = getDn( obj ); - proxy.delete( new DeleteOperationContext( dn ), BYPASS ); + proxy.delete( new DeleteOperationContext( dn, true ), BYPASS ); } @@ -164,7 +164,7 @@ PartitionNexusProxy proxy = InvocationStack.getInstance().peek().getProxy(); LdapDN dn = new LdapDN( "m-oid=" + normalizerDescription.getNumericOid() + ",ou=normalizers,cn=" + schemaName + ",ou=schema" ); - proxy.delete( new DeleteOperationContext( dn ), BYPASS ); + proxy.delete( new DeleteOperationContext( dn, true ), BYPASS ); } @@ -174,7 +174,7 @@ PartitionNexusProxy proxy = InvocationStack.getInstance().peek().getProxy(); LdapDN dn = new LdapDN( "m-oid=" + syntaxCheckerDescription.getNumericOid() + ",ou=syntaxCheckers,cn=" + schemaName + ",ou=schema" ); - proxy.delete( new DeleteOperationContext( dn ), BYPASS ); + proxy.delete( new DeleteOperationContext( dn, true ), BYPASS ); } @@ -184,7 +184,7 @@ PartitionNexusProxy proxy = InvocationStack.getInstance().peek().getProxy(); LdapDN dn = new LdapDN( "m-oid=" + comparatorDescription.getNumericOid() + ",ou=comparators,cn=" + schemaName + ",ou=schema" ); - proxy.delete( new DeleteOperationContext( dn ), BYPASS ); + proxy.delete( new DeleteOperationContext( dn, true ), BYPASS ); } @@ -195,7 +195,7 @@ LdapDN dn = new LdapDN( "m-oid=" + comparatorDescription.getNumericOid() + ",ou=comparators,cn=" + schemaName + ",ou=schema" ); Attributes attrs = getAttributes( comparatorDescription ); - proxy.add( new AddOperationContext( dn, attrs ), BYPASS ); + proxy.add( new AddOperationContext( dn, attrs, true ), BYPASS ); } @@ -229,7 +229,7 @@ LdapDN dn = new LdapDN( "m-oid=" + normalizerDescription.getNumericOid() + ",ou=normalizers,cn=" + schemaName + ",ou=schema" ); Attributes attrs = getAttributes( normalizerDescription ); - proxy.add( new AddOperationContext( dn, attrs ), BYPASS ); + proxy.add( new AddOperationContext( dn, attrs, true ), BYPASS ); } @@ -263,7 +263,7 @@ LdapDN dn = new LdapDN( "m-oid=" + syntaxCheckerDescription.getNumericOid() + ",ou=syntaxCheckers,cn=" + schemaName + ",ou=schema" ); Attributes attrs = getAttributes( syntaxCheckerDescription ); - proxy.add( new AddOperationContext( dn, attrs ), BYPASS ); + proxy.add( new AddOperationContext( dn, attrs, true ), BYPASS ); } Modified: directory/apacheds/branches/bigbang/core/src/test/java/org/apache/directory/server/core/authz/support/MaxImmSubFilterTest.java URL: http://svn.apache.org/viewvc/directory/apacheds/branches/bigbang/core/src/test/java/org/apache/directory/server/core/authz/support/MaxImmSubFilterTest.java?rev=601657&r1=601656&r2=601657&view=diff ============================================================================== --- directory/apacheds/branches/bigbang/core/src/test/java/org/apache/directory/server/core/authz/support/MaxImmSubFilterTest.java (original) +++ directory/apacheds/branches/bigbang/core/src/test/java/org/apache/directory/server/core/authz/support/MaxImmSubFilterTest.java Thu Dec 6 00:39:23 2007 @@ -32,7 +32,8 @@ import org.apache.directory.server.core.partition.Partition; import org.apache.directory.server.core.partition.PartitionNexus; import org.apache.directory.server.core.partition.PartitionNexusProxy; -import org.apache.directory.server.core.schema.SchemaManager; +import org.apache.directory.server.core.schema.SchemaOperationControl; +import org.apache.directory.server.core.schema.SchemaService; import org.apache.directory.server.schema.registries.Registries; import org.apache.directory.shared.ldap.aci.ACITuple; import org.apache.directory.shared.ldap.aci.MicroOperation; @@ -240,13 +241,25 @@ } - public SchemaManager getSchemaManager() + public SchemaService getSchemaService() { return null; } - public void setSchemaManager( SchemaManager schemaManager ) + public void setSchemaService( SchemaService schemaService ) + { + + } + + + public SchemaOperationControl getSchemaManager() + { + return null; + } + + + public void setSchemaManager( SchemaOperationControl schemaManager ) { } Modified: directory/apacheds/branches/bigbang/core/src/test/java/org/apache/directory/server/core/interceptor/InterceptorChainTest.java URL: http://svn.apache.org/viewvc/directory/apacheds/branches/bigbang/core/src/test/java/org/apache/directory/server/core/interceptor/InterceptorChainTest.java?rev=601657&r1=601656&r2=601657&view=diff ============================================================================== --- directory/apacheds/branches/bigbang/core/src/test/java/org/apache/directory/server/core/interceptor/InterceptorChainTest.java (original) +++ directory/apacheds/branches/bigbang/core/src/test/java/org/apache/directory/server/core/interceptor/InterceptorChainTest.java Thu Dec 6 00:39:23 2007 @@ -31,7 +31,8 @@ import org.apache.directory.server.core.partition.Partition; import org.apache.directory.server.core.partition.PartitionNexus; import org.apache.directory.server.core.partition.PartitionNexusProxy; -import org.apache.directory.server.core.schema.SchemaManager; +import org.apache.directory.server.core.schema.SchemaOperationControl; +import org.apache.directory.server.core.schema.SchemaService; import org.apache.directory.server.schema.registries.Registries; import org.apache.directory.shared.ldap.ldif.Entry; import org.apache.directory.shared.ldap.name.LdapDN; @@ -300,13 +301,25 @@ } - public SchemaManager getSchemaManager() + public SchemaService getSchemaService() { return null; } - public void setSchemaManager( SchemaManager schemaManager ) + public void setSchemaService( SchemaService schemaService ) + { + + } + + + public SchemaOperationControl getSchemaManager() + { + return null; + } + + + public void setSchemaManager( SchemaOperationControl schemaManager ) { }