Return-Path: Delivered-To: apmail-directory-commits-archive@www.apache.org Received: (qmail 60247 invoked from network); 2 Jun 2008 14:01:30 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.2) by minotaur.apache.org with SMTP; 2 Jun 2008 14:01:30 -0000 Received: (qmail 89710 invoked by uid 500); 2 Jun 2008 14:01:33 -0000 Delivered-To: apmail-directory-commits-archive@directory.apache.org Received: (qmail 89663 invoked by uid 500); 2 Jun 2008 14:01:33 -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 89654 invoked by uid 99); 2 Jun 2008 14:01:33 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 02 Jun 2008 07:01:33 -0700 X-ASF-Spam-Status: No, hits=-2000.0 required=10.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 02 Jun 2008 14:00:33 +0000 Received: by eris.apache.org (Postfix, from userid 65534) id C4C1A2388A85; Mon, 2 Jun 2008 07:00:31 -0700 (PDT) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r662440 [6/8] - in /directory: apacheds/branches/bigbang/core-integ/src/main/java/org/apache/directory/server/core/integ/ apacheds/branches/bigbang/core-integ/src/test/java/org/apache/directory/server/core/authn/ apacheds/branches/bigbang/c... Date: Mon, 02 Jun 2008 14:00:26 -0000 To: commits@directory.apache.org From: akarasulu@apache.org X-Mailer: svnmailer-1.0.8 Message-Id: <20080602140031.C4C1A2388A85@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Modified: directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/schema/SchemaOperationControl.java URL: http://svn.apache.org/viewvc/directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/schema/SchemaOperationControl.java?rev=662440&r1=662439&r2=662440&view=diff ============================================================================== --- directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/schema/SchemaOperationControl.java (original) +++ directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/schema/SchemaOperationControl.java Mon Jun 2 07:00:23 2008 @@ -34,15 +34,19 @@ import org.apache.directory.server.core.authz.AciAuthorizationInterceptor; import org.apache.directory.server.core.authz.DefaultAuthorizationInterceptor; import org.apache.directory.server.core.collective.CollectiveAttributeInterceptor; +import org.apache.directory.server.core.entry.ClonedServerEntry; import org.apache.directory.server.core.entry.DefaultServerAttribute; import org.apache.directory.server.core.entry.ServerEntry; import org.apache.directory.server.core.entry.ServerAttribute; import org.apache.directory.server.core.entry.ServerModification; import org.apache.directory.server.core.exception.ExceptionInterceptor; +import org.apache.directory.server.core.interceptor.context.AddOperationContext; +import org.apache.directory.server.core.interceptor.context.DeleteOperationContext; import org.apache.directory.server.core.interceptor.context.ModifyOperationContext; -import org.apache.directory.server.core.invocation.Invocation; -import org.apache.directory.server.core.invocation.InvocationStack; -import org.apache.directory.server.core.jndi.ServerLdapContext; +import org.apache.directory.server.core.interceptor.context.MoveAndRenameOperationContext; +import org.apache.directory.server.core.interceptor.context.MoveOperationContext; +import org.apache.directory.server.core.interceptor.context.OperationContext; +import org.apache.directory.server.core.interceptor.context.RenameOperationContext; import org.apache.directory.server.core.normalization.NormalizationInterceptor; import org.apache.directory.server.core.referral.ReferralInterceptor; import org.apache.directory.server.schema.registries.AttributeTypeRegistry; @@ -60,7 +64,6 @@ import org.apache.directory.shared.ldap.exception.LdapOperationNotSupportedException; import org.apache.directory.shared.ldap.message.ResultCodeEnum; 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.schema.DITContentRule; import org.apache.directory.shared.ldap.schema.DITStructureRule; @@ -287,9 +290,9 @@ } - public void add( LdapDN name, ServerEntry entry ) throws Exception + public void add( AddOperationContext opContext ) throws Exception { - EntryAttribute oc = entry.get( objectClassAT ); + EntryAttribute oc = opContext.getEntry().get( objectClassAT ); for ( Value value:oc ) { @@ -299,29 +302,29 @@ if ( objectClass2handlerMap.containsKey( oid ) ) { SchemaChangeHandler handler = objectClass2handlerMap.get( oid ); - handler.add( name, entry ); - updateSchemaModificationAttributes(); + handler.add( opContext.getDn(), opContext.getEntry() ); + updateSchemaModificationAttributes( opContext ); return; } } if ( oc.contains( MetaSchemaConstants.META_SCHEMA_OC ) ) { - metaSchemaHandler.add( name, entry ); - updateSchemaModificationAttributes(); + metaSchemaHandler.add( opContext.getDn(), opContext.getEntry() ); + updateSchemaModificationAttributes( opContext ); return; } if ( oc.contains( SchemaConstants.ORGANIZATIONAL_UNIT_OC ) ) { - if ( name.size() != 3 ) + if ( opContext.getDn().size() != 3 ) { throw new LdapInvalidNameException( "Schema entity containers of objectClass organizationalUnit should be 3 name components in length.", ResultCodeEnum.NAMING_VIOLATION ); } - String ouValue = ( String ) name.getRdn().getValue(); + String ouValue = ( String ) opContext.getDn().getRdn().getValue(); ouValue = ouValue.trim().toLowerCase(); if ( ! VALID_OU_VALUES.contains( ouValue ) ) { @@ -336,7 +339,8 @@ } - public void delete( LdapDN name, ServerEntry entry, boolean doCascadeDelete ) throws Exception + public void delete( DeleteOperationContext opContext, ClonedServerEntry entry, boolean doCascadeDelete ) + throws Exception { EntryAttribute oc = entry.get( objectClassAT ); @@ -347,29 +351,29 @@ if ( objectClass2handlerMap.containsKey( oid ) ) { SchemaChangeHandler handler = objectClass2handlerMap.get( oid ); - handler.delete( name, entry, doCascadeDelete ); - updateSchemaModificationAttributes(); + handler.delete( opContext.getDn(), entry, doCascadeDelete ); + updateSchemaModificationAttributes( opContext ); return; } } if ( oc.contains( MetaSchemaConstants.META_SCHEMA_OC ) ) { - metaSchemaHandler.delete( name, entry, doCascadeDelete ); - updateSchemaModificationAttributes(); + metaSchemaHandler.delete( opContext.getDn(), entry, doCascadeDelete ); + updateSchemaModificationAttributes( opContext ); return; } if ( oc.contains( SchemaConstants.ORGANIZATIONAL_UNIT_OC ) ) { - if ( name.size() != 3 ) + if ( opContext.getDn().size() != 3 ) { throw new LdapNamingException( "Only schema entity containers of objectClass organizationalUnit with 3 name components in length" + " can be deleted.", ResultCodeEnum.UNWILLING_TO_PERFORM ); } - String ouValue = ( String ) name.getRdn().getValue(); + String ouValue = ( String ) opContext.getDn().getRdn().getValue(); ouValue = ouValue.trim().toLowerCase(); if ( ! VALID_OU_VALUES.contains( ouValue ) ) { @@ -384,8 +388,8 @@ } - public void modify( LdapDN name, ModificationOperation modOp, ServerEntry mods, ServerEntry entry, - ServerEntry targetEntry, boolean cascade ) throws Exception + public void modify( ModifyOperationContext opContext, ModificationOperation modOp, ServerEntry mods, + ServerEntry entry, ServerEntry targetEntry, boolean cascade ) throws Exception { EntryAttribute oc = entry.get( objectClassAT ); @@ -396,16 +400,16 @@ if ( objectClass2handlerMap.containsKey( oid ) ) { SchemaChangeHandler handler = objectClass2handlerMap.get( oid ); - handler.modify( name, modOp, mods, entry, targetEntry, cascade ); - updateSchemaModificationAttributes(); + handler.modify( opContext.getDn(), modOp, mods, entry, targetEntry, cascade ); + updateSchemaModificationAttributes( opContext ); return; } } if ( oc.contains( MetaSchemaConstants.META_SCHEMA_OC ) ) { - metaSchemaHandler.modify( name, modOp, mods, entry, targetEntry, cascade ); - updateSchemaModificationAttributes(); + metaSchemaHandler.modify( opContext.getDn(), modOp, mods, entry, targetEntry, cascade ); + updateSchemaModificationAttributes( opContext ); return; } @@ -413,8 +417,8 @@ } - public void modify( LdapDN name, List mods, ServerEntry entry, ServerEntry targetEntry, - boolean doCascadeModify ) throws Exception + public void modify( ModifyOperationContext opContext, ServerEntry entry, + ServerEntry targetEntry, boolean doCascadeModify ) throws Exception { EntryAttribute oc = entry.get( objectClassAT ); @@ -425,26 +429,26 @@ if ( objectClass2handlerMap.containsKey( oid ) ) { SchemaChangeHandler handler = objectClass2handlerMap.get( oid ); - handler.modify( name, mods, entry, targetEntry, doCascadeModify ); - updateSchemaModificationAttributes(); + handler.modify( opContext.getDn(), opContext.getModItems(), entry, targetEntry, doCascadeModify ); + updateSchemaModificationAttributes( opContext ); return; } } if ( oc.contains( MetaSchemaConstants.META_SCHEMA_OC ) ) { - metaSchemaHandler.modify( name, mods, entry, targetEntry, doCascadeModify ); - updateSchemaModificationAttributes(); + metaSchemaHandler.modify( opContext.getDn(), opContext.getModItems(), entry, targetEntry, doCascadeModify ); + updateSchemaModificationAttributes( opContext ); return; } - LOG.error( String.format( "Unwilling to perform modify on %s:\n\nEntry:\n%s\n\nModifications:\n%s", name, - entry, mods ) ); + LOG.error( String.format( "Unwilling to perform modify on %s:\n\nEntry:\n%s\n\nModifications:\n%s", + opContext.getDn(), entry, opContext.getModItems() ) ); throw new LdapOperationNotSupportedException( ResultCodeEnum.UNWILLING_TO_PERFORM ); } - public void modifyRn( LdapDN name, Rdn newRdn, boolean deleteOldRn, ServerEntry entry, boolean doCascadeModify ) + public void modifyRn( RenameOperationContext opContext, ServerEntry entry, boolean doCascadeModify ) throws Exception { EntryAttribute oc = entry.get( objectClassAT ); @@ -456,16 +460,16 @@ if ( objectClass2handlerMap.containsKey( oid ) ) { SchemaChangeHandler handler = objectClass2handlerMap.get( oid ); - handler.rename( name, entry, newRdn, doCascadeModify ); - updateSchemaModificationAttributes(); + handler.rename( opContext.getDn(), entry, opContext.getNewRdn(), doCascadeModify ); + updateSchemaModificationAttributes( opContext ); return; } } if ( oc.contains( MetaSchemaConstants.META_SCHEMA_OC ) ) { - metaSchemaHandler.rename( name, entry, newRdn, doCascadeModify ); - updateSchemaModificationAttributes(); + metaSchemaHandler.rename( opContext.getDn(), entry, opContext.getNewRdn(), doCascadeModify ); + updateSchemaModificationAttributes( opContext ); return; } @@ -473,8 +477,7 @@ } - public void replace( LdapDN oriChildName, LdapDN newParentName, ServerEntry entry, - boolean cascade ) throws Exception + public void replace( MoveOperationContext opContext, ServerEntry entry, boolean cascade ) throws Exception { EntryAttribute oc = entry.get( objectClassAT ); @@ -485,16 +488,16 @@ if ( objectClass2handlerMap.containsKey( oid ) ) { SchemaChangeHandler handler = objectClass2handlerMap.get( oid ); - handler.replace( oriChildName, newParentName, entry, cascade ); - updateSchemaModificationAttributes(); + handler.replace( opContext.getDn(), opContext.getParent(), entry, cascade ); + updateSchemaModificationAttributes( opContext ); return; } } if ( oc.contains( MetaSchemaConstants.META_SCHEMA_OC ) ) { - metaSchemaHandler.replace( oriChildName, newParentName, entry, cascade ); - updateSchemaModificationAttributes(); + metaSchemaHandler.replace( opContext.getDn(), opContext.getParent(), entry, cascade ); + updateSchemaModificationAttributes( opContext ); return; } @@ -502,8 +505,7 @@ } - public void move( LdapDN oriChildName, LdapDN newParentName, Rdn newRn, boolean deleteOldRn, - ServerEntry entry, boolean cascade ) throws Exception + public void move( MoveAndRenameOperationContext opContext, ServerEntry entry, boolean cascade ) throws Exception { EntryAttribute oc = entry.get( objectClassAT ); @@ -514,16 +516,18 @@ if ( objectClass2handlerMap.containsKey( oid ) ) { SchemaChangeHandler handler = objectClass2handlerMap.get( oid ); - handler.move( oriChildName, newParentName, newRn, deleteOldRn, entry, cascade ); - updateSchemaModificationAttributes(); + handler.move( opContext.getDn(), opContext.getParent(), opContext.getNewRdn(), + opContext.getDelOldDn(), entry, cascade ); + updateSchemaModificationAttributes( opContext ); return; } } if ( oc.contains( MetaSchemaConstants.META_SCHEMA_OC ) ) { - metaSchemaHandler.move( oriChildName, newParentName, newRn, deleteOldRn, entry, cascade ); - updateSchemaModificationAttributes(); + metaSchemaHandler.move( opContext.getDn(), opContext.getParent(), opContext.getNewRdn(), + opContext.getDelOldDn(), entry, cascade ); + updateSchemaModificationAttributes( opContext ); return; } @@ -544,10 +548,10 @@ * to effect all dependents on the changed entity * @throws NamingException if the operation fails */ - public void modifySchemaSubentry( LdapDN name, List mods, ServerEntry subentry, - ServerEntry targetSubentry, boolean doCascadeModify ) throws Exception + public void modifySchemaSubentry( ModifyOperationContext opContext, + ServerEntry subentry, ServerEntry targetSubentry, boolean doCascadeModify ) throws Exception { - for ( Modification mod : mods ) + for ( Modification mod : opContext.getModItems() ) { String opAttrOid = registries.getOidRegistry().getOid( mod.getAttribute().getId() ); @@ -557,11 +561,11 @@ { case ADD_ATTRIBUTE : - modifyAddOperation( opAttrOid, serverAttribute, doCascadeModify ); + modifyAddOperation( opContext, opAttrOid, serverAttribute, doCascadeModify ); break; case REMOVE_ATTRIBUTE : - modifyRemoveOperation( opAttrOid, serverAttribute, doCascadeModify ); + modifyRemoveOperation( opContext, opAttrOid, serverAttribute, doCascadeModify ); break; case REPLACE_ATTRIBUTE : @@ -577,9 +581,9 @@ } } - if ( mods.size() > 0 ) + if ( opContext.getModItems().size() > 0 ) { - updateSchemaModificationAttributes(); + updateSchemaModificationAttributes( opContext ); } } @@ -598,8 +602,8 @@ * to effect all dependents on the changed entity * @throws NamingException if the modify fails */ - public void modifySchemaSubentry( LdapDN name, int modOp, ServerEntry mods, ServerEntry subentry, - ServerEntry targetSubentry, boolean doCascadeModify ) throws Exception + public void modifySchemaSubentry( ModifyOperationContext opContext, LdapDN name, int modOp, ServerEntry mods, + ServerEntry subentry, ServerEntry targetSubentry, boolean doCascadeModify ) throws Exception { Set attributeTypes = mods.getAttributeTypes(); @@ -608,7 +612,7 @@ case( DirContext.ADD_ATTRIBUTE ): for ( AttributeType attributeType:attributeTypes ) { - modifyAddOperation( attributeType.getOid(), + modifyAddOperation( opContext, attributeType.getOid(), mods.get( attributeType ), doCascadeModify ); } @@ -617,7 +621,7 @@ case( DirContext.REMOVE_ATTRIBUTE ): for ( AttributeType attributeType:attributeTypes ) { - modifyRemoveOperation( attributeType.getOid(), + modifyRemoveOperation( opContext, attributeType.getOid(), mods.get( attributeType ), doCascadeModify ); } @@ -635,7 +639,7 @@ throw new IllegalStateException( "Undefined modify operation: " + modOp ); } - updateSchemaModificationAttributes(); + updateSchemaModificationAttributes( opContext ); } @@ -660,8 +664,8 @@ * @throws NamingException if there are problems updating the registries and the * schema partition */ - private void modifyRemoveOperation( String opAttrOid, EntryAttribute mods, boolean doCascadeModify ) - throws Exception + private void modifyRemoveOperation( ModifyOperationContext opContext, String opAttrOid, + EntryAttribute mods, boolean doCascadeModify ) throws Exception { int index = opAttr2handlerIndex.get( opAttrOid ); SchemaChangeHandler handler = opAttr2handlerMap.get( opAttrOid ); @@ -675,7 +679,7 @@ for ( ComparatorDescription comparatorDescription : comparatorDescriptions ) { comparatorHandler.delete( comparatorDescription.getNumericOid(), doCascadeModify ); - subentryModifier.delete( registries, comparatorDescription ); + subentryModifier.delete( opContext, comparatorDescription ); } break; case( NORMALIZER_INDEX ): @@ -685,7 +689,7 @@ for ( NormalizerDescription normalizerDescription : normalizerDescriptions ) { normalizerHandler.delete( normalizerDescription.getNumericOid(), doCascadeModify ); - subentryModifier.delete( registries, normalizerDescription ); + subentryModifier.delete( opContext, normalizerDescription ); } break; case( SYNTAX_CHECKER_INDEX ): @@ -695,7 +699,7 @@ for ( SyntaxCheckerDescription syntaxCheckerDescription : syntaxCheckerDescriptions ) { syntaxCheckerHandler.delete( syntaxCheckerDescription.getNumericOid(), doCascadeModify ); - subentryModifier.delete( registries, syntaxCheckerDescription ); + subentryModifier.delete( opContext, syntaxCheckerDescription ); } break; case( SYNTAX_INDEX ): @@ -705,7 +709,7 @@ for ( Syntax syntax : syntaxes ) { syntaxHandler.delete( syntax, doCascadeModify ); - subentryModifier.deleteSchemaObject( registries, syntax ); + subentryModifier.deleteSchemaObject( opContext, syntax ); } break; case( MATCHING_RULE_INDEX ): @@ -715,7 +719,7 @@ for ( MatchingRule mr : mrs ) { matchingRuleHandler.delete( mr, doCascadeModify ); - subentryModifier.deleteSchemaObject( registries, mr ); + subentryModifier.deleteSchemaObject( opContext, mr ); } break; case( ATTRIBUTE_TYPE_INDEX ): @@ -725,7 +729,7 @@ for ( AttributeType at : ats ) { atHandler.delete( at, doCascadeModify ); - subentryModifier.deleteSchemaObject( registries, at ); + subentryModifier.deleteSchemaObject( opContext, at ); } break; case( OBJECT_CLASS_INDEX ): @@ -735,7 +739,7 @@ for ( ObjectClass oc : ocs ) { ocHandler.delete( oc, doCascadeModify ); - subentryModifier.deleteSchemaObject( registries, oc ); + subentryModifier.deleteSchemaObject( opContext, oc ); } break; case( MATCHING_RULE_USE_INDEX ): @@ -745,7 +749,7 @@ for ( MatchingRuleUse mru : mrus ) { mruHandler.delete( mru, doCascadeModify ); - subentryModifier.deleteSchemaObject( registries, mru ); + subentryModifier.deleteSchemaObject( opContext, mru ); } break; case( DIT_STRUCTURE_RULE_INDEX ): @@ -755,7 +759,7 @@ for ( DITStructureRule dsr : dsrs ) { dsrHandler.delete( dsr, doCascadeModify ); - subentryModifier.deleteSchemaObject( registries, dsr ); + subentryModifier.deleteSchemaObject( opContext, dsr ); } break; case( DIT_CONTENT_RULE_INDEX ): @@ -765,7 +769,7 @@ for ( DITContentRule dcr : dcrs ) { dcrHandler.delete( dcr, doCascadeModify ); - subentryModifier.deleteSchemaObject( registries, dcr ); + subentryModifier.deleteSchemaObject( opContext, dcr ); } break; case( NAME_FORM_INDEX ): @@ -775,7 +779,7 @@ for ( NameForm nf : nfs ) { nfHandler.delete( nf, doCascadeModify ); - subentryModifier.deleteSchemaObject( registries, nf ); + subentryModifier.deleteSchemaObject( opContext, nf ); } break; default: @@ -794,7 +798,8 @@ * @throws NamingException if there are problems updating the registries and the * schema partition */ - private void modifyAddOperation( String opAttrOid, EntryAttribute mods, boolean doCascadeModify ) throws Exception + private void modifyAddOperation( ModifyOperationContext opContext, String opAttrOid, + EntryAttribute mods, boolean doCascadeModify ) throws Exception { if ( doCascadeModify ) { @@ -813,7 +818,7 @@ for ( ComparatorDescription comparatorDescription : comparatorDescriptions ) { comparatorHandler.add( comparatorDescription ); - subentryModifier.add( registries, comparatorDescription ); + subentryModifier.add( opContext, comparatorDescription ); } break; case( NORMALIZER_INDEX ): @@ -823,7 +828,7 @@ for ( NormalizerDescription normalizerDescription : normalizerDescriptions ) { normalizerHandler.add( normalizerDescription ); - subentryModifier.add( registries, normalizerDescription ); + subentryModifier.add( opContext, normalizerDescription ); } break; case( SYNTAX_CHECKER_INDEX ): @@ -833,7 +838,7 @@ for ( SyntaxCheckerDescription syntaxCheckerDescription : syntaxCheckerDescriptions ) { syntaxCheckerHandler.add( syntaxCheckerDescription ); - subentryModifier.add( registries, syntaxCheckerDescription ); + subentryModifier.add( opContext, syntaxCheckerDescription ); } break; case( SYNTAX_INDEX ): @@ -843,7 +848,7 @@ for ( Syntax syntax : syntaxes ) { syntaxHandler.add( syntax ); - subentryModifier.addSchemaObject( registries, syntax ); + subentryModifier.addSchemaObject( opContext, syntax ); } break; case( MATCHING_RULE_INDEX ): @@ -853,7 +858,7 @@ for ( MatchingRule mr : mrs ) { matchingRuleHandler.add( mr ); - subentryModifier.addSchemaObject( registries, mr ); + subentryModifier.addSchemaObject( opContext, mr ); } break; case( ATTRIBUTE_TYPE_INDEX ): @@ -863,7 +868,7 @@ for ( AttributeType at : ats ) { atHandler.add( at ); - subentryModifier.addSchemaObject( registries, at ); + subentryModifier.addSchemaObject( opContext, at ); } break; case( OBJECT_CLASS_INDEX ): @@ -873,7 +878,7 @@ for ( ObjectClass oc : ocs ) { ocHandler.add( oc ); - subentryModifier.addSchemaObject( registries, oc ); + subentryModifier.addSchemaObject( opContext, oc ); } break; case( MATCHING_RULE_USE_INDEX ): @@ -883,7 +888,7 @@ for ( MatchingRuleUse mru : mrus ) { mruHandler.add( mru ); - subentryModifier.addSchemaObject( registries, mru ); + subentryModifier.addSchemaObject( opContext, mru ); } break; case( DIT_STRUCTURE_RULE_INDEX ): @@ -893,7 +898,7 @@ for ( DITStructureRule dsr : dsrs ) { dsrHandler.add( dsr ); - subentryModifier.addSchemaObject( registries, dsr ); + subentryModifier.addSchemaObject( opContext, dsr ); } break; case( DIT_CONTENT_RULE_INDEX ): @@ -903,7 +908,7 @@ for ( DITContentRule dcr : dcrs ) { dcrHandler.add( dcr ); - subentryModifier.addSchemaObject( registries, dcr ); + subentryModifier.addSchemaObject( opContext, dcr ); } break; case( NAME_FORM_INDEX ): @@ -913,7 +918,7 @@ for ( NameForm nf : nfs ) { nfHandler.add( nf ); - subentryModifier.addSchemaObject( registries, nf ); + subentryModifier.addSchemaObject( opContext, nf ); } break; default: @@ -933,11 +938,9 @@ * * @throws NamingException if the update fails */ - private void updateSchemaModificationAttributes() throws Exception + private void updateSchemaModificationAttributes( OperationContext opContext ) throws Exception { - Invocation invocation = InvocationStack.getInstance().peek(); - ServerLdapContext ctx = ( ServerLdapContext ) invocation.getCaller(); - String modifiersName = ctx.getPrincipal().getJndiName().getNormName(); + String modifiersName = opContext.getSession().getEffectivePrincipal().getJndiName().getNormName(); String modifyTimestamp = DateUtils.getGeneralizedTime(); List mods = new ArrayList( 2 ); @@ -957,7 +960,8 @@ LdapDN name = new LdapDN( "cn=schemaModifications,ou=schema" ); name.normalize( registries.getAttributeTypeRegistry().getNormalizerMapping() ); - invocation.getProxy().modify( new ModifyOperationContext( registries, name, mods, true ), - SCHEMA_MODIFICATION_ATTRIBUTES_UPDATE_BYPASS ); + ModifyOperationContext modifyContext = new ModifyOperationContext( opContext.getSession(), name, mods, true ); + modifyContext.setByPassed( SCHEMA_MODIFICATION_ATTRIBUTES_UPDATE_BYPASS ); + opContext.getSession().getDirectoryService().getOperationManager().modify( modifyContext ); } } Modified: directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/schema/SchemaPartitionDao.java URL: http://svn.apache.org/viewvc/directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/schema/SchemaPartitionDao.java?rev=662440&r1=662439&r2=662440&view=diff ============================================================================== --- directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/schema/SchemaPartitionDao.java (original) +++ directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/schema/SchemaPartitionDao.java Mon Jun 2 07:00:23 2008 @@ -51,11 +51,13 @@ import org.apache.directory.shared.ldap.filter.ExprNode; import org.apache.directory.shared.ldap.filter.OrNode; import org.apache.directory.shared.ldap.filter.PresenceNode; +import org.apache.directory.shared.ldap.filter.SearchScope; import org.apache.directory.shared.ldap.filter.SimpleNode; import org.apache.directory.shared.ldap.message.AliasDerefMode; 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.schema.AttributeTypeOptions; import org.apache.directory.shared.ldap.schema.MatchingRule; import org.apache.directory.shared.ldap.schema.ObjectClass; import org.apache.directory.shared.ldap.schema.syntax.NumericOidSyntaxChecker; @@ -92,11 +94,10 @@ private final Logger LOG = LoggerFactory.getLogger( getClass() ); private static final NumericOidSyntaxChecker NUMERIC_OID_CHECKER = new NumericOidSyntaxChecker(); private static final String[] SCHEMA_ATTRIBUTES = new String[] - { SchemaConstants.CREATORS_NAME_AT, "m-dependencies", SchemaConstants.OBJECT_CLASS_AT, SchemaConstants.CN_AT, - "m-disabled" }; + { SchemaConstants.CREATORS_NAME_AT_OID, "m-dependencies", SchemaConstants.OBJECT_CLASS_AT_OID, + SchemaConstants.CN_AT_OID, "m-disabled" }; private final Partition partition; - private final Registries registries; private final SchemaEntityFactory factory; private final OidRegistry oidRegistry; private final AttributeTypeRegistry attrRegistry; @@ -117,6 +118,7 @@ private final String M_SUP_OBJECT_CLASS_OID; private final String M_DEPENDENCIES_OID; + private final Set schemaAttributesToReturn = new HashSet(); private final AttributeType disabledAttributeType; @@ -130,7 +132,6 @@ public SchemaPartitionDao( Partition partition, Registries registries ) throws Exception { this.partition = partition; - this.registries = registries; this.factory = new SchemaEntityFactory( registries ); this.oidRegistry = registries.getOidRegistry(); this.attrRegistry = registries.getAttributeTypeRegistry(); @@ -151,6 +152,12 @@ this.M_OC_OID = oidRegistry.getOid( MetaSchemaConstants.M_OC_AT ); this.M_SUP_OBJECT_CLASS_OID = oidRegistry.getOid( MetaSchemaConstants.M_SUP_OBJECT_CLASS_AT ); this.M_DEPENDENCIES_OID = oidRegistry.getOid( MetaSchemaConstants.M_DEPENDENCIES_AT ); + + for ( String attrId : SCHEMA_ATTRIBUTES ) + { + AttributeTypeOptions ato = new AttributeTypeOptions( attrRegistry.lookup( attrId ) ); + schemaAttributesToReturn.add( ato ); + } } @@ -191,11 +198,13 @@ base.normalize( attrRegistry.getNormalizerMapping() ); ExprNode filter = new EqualityNode( oidRegistry.getOid( SchemaConstants.OBJECT_CLASS_AT ), new ClientStringValue( MetaSchemaConstants.META_SCHEMA_OC ) ); - SearchControls searchControls = new SearchControls(); - searchControls.setSearchScope( SearchControls.ONELEVEL_SCOPE ); - searchControls.setReturningAttributes( SCHEMA_ATTRIBUTES ); - return partition.search( new SearchOperationContext( registries, base, AliasDerefMode.DEREF_ALWAYS, filter, - searchControls ) ); + + SearchOperationContext searchContext = new SearchOperationContext( null ); + searchContext.setDn( base ); + searchContext.setScope( SearchScope.ONELEVEL ); + searchContext.setReturningAttributes( schemaAttributesToReturn ); + searchContext.setFilter( filter ); + return partition.search( searchContext ); } @@ -203,7 +212,7 @@ { LdapDN dn = new LdapDN( "cn=" + schemaName + ",ou=schema" ); dn.normalize( attrRegistry.getNormalizerMapping() ); - return factory.getSchema( partition.lookup( new LookupOperationContext( registries, dn ) ) ); + return factory.getSchema( partition.lookup( new LookupOperationContext( null, dn ) ) ); } @@ -228,7 +237,7 @@ try { - cursor = partition.search( new SearchOperationContext( registries, partition.getSuffixDn(), + cursor = partition.search( new SearchOperationContext( null, partition.getSuffixDn(), AliasDerefMode.DEREF_ALWAYS, filter, searchControls ) ); if ( !cursor.next() ) @@ -274,7 +283,7 @@ try { - cursor = partition.search( new SearchOperationContext( registries, partition.getSuffixDn(), + cursor = partition.search( new SearchOperationContext( null, partition.getSuffixDn(), AliasDerefMode.DEREF_ALWAYS, filter, searchControls ) ); if ( !cursor.next() ) @@ -320,7 +329,7 @@ try { - cursor = partition.search( new SearchOperationContext( registries, partition.getSuffixDn(), + cursor = partition.search( new SearchOperationContext( null, partition.getSuffixDn(), AliasDerefMode.DEREF_ALWAYS, filter, searchControls ) ); if ( !cursor.next() ) @@ -366,7 +375,7 @@ try { - cursor = partition.search( new SearchOperationContext( registries, partition.getSuffixDn(), + cursor = partition.search( new SearchOperationContext( null, partition.getSuffixDn(), AliasDerefMode.DEREF_ALWAYS, filter, searchControls ) ); if ( !cursor.next() ) @@ -412,7 +421,7 @@ try { - cursor = partition.search( new SearchOperationContext( registries, partition.getSuffixDn(), + cursor = partition.search( new SearchOperationContext( null, partition.getSuffixDn(), AliasDerefMode.DEREF_ALWAYS, filter, searchControls ) ); if ( !cursor.next() ) @@ -508,7 +517,7 @@ try { - cursor = partition.search( new SearchOperationContext( registries, partition.getSuffixDn(), + cursor = partition.search( new SearchOperationContext( null, partition.getSuffixDn(), AliasDerefMode.DEREF_ALWAYS, filter, searchControls ) ); if ( !cursor.next() ) @@ -569,7 +578,7 @@ { LdapDN dn = new LdapDN( "cn=" + schemaName + ",ou=schema" ); dn.normalize( attrRegistry.getNormalizerMapping() ); - ServerEntry entry = partition.lookup( new LookupOperationContext( registries, dn ) ); + ServerEntry entry = partition.lookup( new LookupOperationContext( null, dn ) ); EntryAttribute disabledAttr = entry.get( disabledAttributeType ); List mods = new ArrayList( 3 ); @@ -597,7 +606,7 @@ SchemaConstants.MODIFY_TIMESTAMP_AT, attrRegistry.lookup( SchemaConstants.MODIFY_TIMESTAMP_AT ), DateUtils .getGeneralizedTime() ) ) ); - partition.modify( new ModifyOperationContext( registries, dn, mods ) ); + partition.modify( new ModifyOperationContext( null, dn, mods ) ); } @@ -630,7 +639,7 @@ try { - cursor = partition.search( new SearchOperationContext( registries, partition.getSuffixDn(), + cursor = partition.search( new SearchOperationContext( null, partition.getSuffixDn(), AliasDerefMode.DEREF_ALWAYS, filter, searchControls ) ); while ( cursor.next() ) @@ -681,7 +690,7 @@ try { - cursor = partition.search( new SearchOperationContext( registries, partition.getSuffixDn(), + cursor = partition.search( new SearchOperationContext( null, partition.getSuffixDn(), AliasDerefMode.DEREF_ALWAYS, filter, searchControls ) ); while ( cursor.next() ) @@ -710,7 +719,7 @@ // (& (m-oid=*) (m-name=*) ) filter.addNode( new PresenceNode( M_OID_OID ) ); filter.addNode( new PresenceNode( M_NAME_OID ) ); - return partition.search( new SearchOperationContext( registries, partition.getSuffixDn(), + return partition.search( new SearchOperationContext( null, partition.getSuffixDn(), AliasDerefMode.DEREF_ALWAYS, filter, searchControls ) ); } @@ -758,7 +767,7 @@ try { - cursor = partition.search( new SearchOperationContext( registries, partition.getSuffixDn(), + cursor = partition.search( new SearchOperationContext( null, partition.getSuffixDn(), AliasDerefMode.DEREF_ALWAYS, filter, searchControls ) ); while ( cursor.next() ) @@ -807,7 +816,7 @@ try { - cursor = partition.search( new SearchOperationContext( registries, partition.getSuffixDn(), + cursor = partition.search( new SearchOperationContext( null, partition.getSuffixDn(), AliasDerefMode.DEREF_ALWAYS, filter, searchControls ) ); while ( cursor.next() ) @@ -850,7 +859,7 @@ try { - cursor = partition.search( new SearchOperationContext( registries, partition.getSuffixDn(), + cursor = partition.search( new SearchOperationContext( null, partition.getSuffixDn(), AliasDerefMode.DEREF_ALWAYS, filter, searchControls ) ); while ( cursor.next() ) @@ -930,7 +939,7 @@ try { - cursor = partition.search( new SearchOperationContext( registries, partition.getSuffixDn(), + cursor = partition.search( new SearchOperationContext( null, partition.getSuffixDn(), AliasDerefMode.DEREF_ALWAYS, filter, searchControls ) ); while ( cursor.next() ) 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=662440&r1=662439&r2=662440&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 Mon Jun 2 07:00:23 2008 @@ -385,10 +385,10 @@ if ( schemaSubentry == null ) { generateSchemaSubentry( schemaPartition.lookup( - new LookupOperationContext( registries, schemaModificationAttributesDN ) ) ); + new LookupOperationContext( null, schemaModificationAttributesDN ) ) ); } - return (ServerEntry)schemaSubentry.clone(); + return ( ServerEntry ) schemaSubentry.clone(); } @@ -403,7 +403,7 @@ if ( schemaSubentry == null ) { generateSchemaSubentry( schemaPartition.lookup( - new LookupOperationContext( registries, schemaModificationAttributesDN ) ) ); + new LookupOperationContext( null, schemaModificationAttributesDN ) ) ); } return ( ServerEntry ) schemaSubentry.clone(); @@ -435,7 +435,8 @@ // Check if we need an update by looking at timestamps on disk // --------------------------------------------------------------- - ServerEntry mods = schemaPartition.lookup( new LookupOperationContext( registries, schemaModificationAttributesDN ) ); + ServerEntry mods = + schemaPartition.lookup( new LookupOperationContext( null, schemaModificationAttributesDN ) ); // @todo enable this optimization at some point but for now it // is causing some problems so I will just turn it off // Attribute modifyTimeDisk = mods.get( SchemaConstants.MODIFY_TIMESTAMP_AT ); 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=662440&r1=662439&r2=662440&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 Mon Jun 2 07:00:23 2008 @@ -19,6 +19,7 @@ */ package org.apache.directory.server.core.schema; + import java.util.Collection; import java.util.Collections; import java.util.HashSet; @@ -36,11 +37,9 @@ import org.apache.directory.server.core.exception.ExceptionInterceptor; import org.apache.directory.server.core.interceptor.context.AddOperationContext; import org.apache.directory.server.core.interceptor.context.DeleteOperationContext; -import org.apache.directory.server.core.invocation.InvocationStack; -import org.apache.directory.server.core.partition.PartitionNexusProxy; +import org.apache.directory.server.core.interceptor.context.OperationContext; import org.apache.directory.server.core.referral.ReferralInterceptor; import org.apache.directory.server.schema.bootstrap.Schema; -import org.apache.directory.server.schema.registries.Registries; import org.apache.directory.server.utils.AttributesFactory; import org.apache.directory.shared.ldap.constants.SchemaConstants; import org.apache.directory.shared.ldap.message.AttributesImpl; @@ -143,69 +142,106 @@ } - public void addSchemaObject( Registries registries, SchemaObject obj ) throws Exception + public void add( OperationContext opContext, ComparatorDescription comparatorDescription ) throws Exception + { + String schemaName = getSchema( comparatorDescription ); + LdapDN dn = new LdapDN( "m-oid=" + comparatorDescription.getNumericOid() + ",ou=comparators,cn=" + + schemaName + ",ou=schema" ); + Attributes attrs = getAttributes( comparatorDescription ); + ServerEntry entry = ServerEntryUtils.toServerEntry( attrs, dn, + opContext.getSession().getDirectoryService().getRegistries() ); + + AddOperationContext addContext = new AddOperationContext( opContext.getSession(), dn, entry, true ); + addContext.setByPassed( BYPASS ); + opContext.getSession().getDirectoryService().getOperationManager().add( addContext ); + } + + + public void add( OperationContext opContext, NormalizerDescription normalizerDescription ) throws Exception + { + String schemaName = getSchema( normalizerDescription ); + LdapDN dn = new LdapDN( "m-oid=" + normalizerDescription.getNumericOid() + ",ou=normalizers,cn=" + + schemaName + ",ou=schema" ); + Attributes attrs = getAttributes( normalizerDescription ); + ServerEntry entry = ServerEntryUtils.toServerEntry( attrs, dn, + opContext.getSession().getDirectoryService().getRegistries() ); + + AddOperationContext addContext = new AddOperationContext( opContext.getSession(), dn, entry, true ); + addContext.setByPassed( BYPASS ); + opContext.getSession().getDirectoryService().getOperationManager().add( addContext ); + } + + + public void add( OperationContext opContext, SyntaxCheckerDescription syntaxCheckerDescription ) throws Exception + { + String schemaName = getSchema( syntaxCheckerDescription ); + LdapDN dn = new LdapDN( "m-oid=" + syntaxCheckerDescription.getNumericOid() + ",ou=syntaxCheckers,cn=" + + schemaName + ",ou=schema" ); + Attributes attrs = getAttributes( syntaxCheckerDescription ); + ServerEntry entry = ServerEntryUtils.toServerEntry( attrs, dn, + opContext.getSession().getDirectoryService().getRegistries() ); + AddOperationContext addContext = new AddOperationContext( opContext.getSession(), dn, entry, true ); + addContext.setByPassed( BYPASS ); + opContext.getSession().getDirectoryService().getOperationManager().add( addContext ); + } + + + public void addSchemaObject( OperationContext opContext, SchemaObject obj ) throws Exception { - PartitionNexusProxy proxy = InvocationStack.getInstance().peek().getProxy(); Schema schema = dao.getSchema( obj.getSchema() ); LdapDN dn = getDn( obj ); - ServerEntry entry = factory.getAttributes( obj, schema, registries ); + ServerEntry entry = factory.getAttributes( obj, schema, + opContext.getSession().getDirectoryService().getRegistries() ); entry.setDn( dn ); - proxy.add( new AddOperationContext( registries, dn, entry, true ), BYPASS ); + AddOperationContext addContext = new AddOperationContext( opContext.getSession(), dn, entry, true ); + addContext.setByPassed( BYPASS ); + opContext.getSession().getDirectoryService().getOperationManager().add( addContext ); } - public void deleteSchemaObject( Registries registries, SchemaObject obj ) throws Exception + public void deleteSchemaObject( OperationContext opContext, SchemaObject obj ) throws Exception { - PartitionNexusProxy proxy = InvocationStack.getInstance().peek().getProxy(); LdapDN dn = getDn( obj ); - proxy.delete( new DeleteOperationContext( registries, dn, true ), BYPASS ); + DeleteOperationContext delContext = new DeleteOperationContext( opContext.getSession(), dn, true ); + delContext.setByPassed( BYPASS ); + opContext.getSession().getDirectoryService().getOperationManager().delete( delContext ); } - public void delete( Registries registries, NormalizerDescription normalizerDescription ) throws Exception + public void delete( OperationContext opContext, NormalizerDescription normalizerDescription ) throws Exception { String schemaName = getSchema( normalizerDescription ); - PartitionNexusProxy proxy = InvocationStack.getInstance().peek().getProxy(); LdapDN dn = new LdapDN( "m-oid=" + normalizerDescription.getNumericOid() + ",ou=normalizers,cn=" + schemaName + ",ou=schema" ); - proxy.delete( new DeleteOperationContext( registries, dn, true ), BYPASS ); + DeleteOperationContext delContext = new DeleteOperationContext( opContext.getSession(), dn, true ); + delContext.setByPassed( BYPASS ); + opContext.getSession().getDirectoryService().getOperationManager().delete( delContext ); } - public void delete( Registries registries, SyntaxCheckerDescription syntaxCheckerDescription ) throws Exception + public void delete( OperationContext opContext, SyntaxCheckerDescription syntaxCheckerDescription ) throws Exception { String schemaName = getSchema( syntaxCheckerDescription ); - PartitionNexusProxy proxy = InvocationStack.getInstance().peek().getProxy(); LdapDN dn = new LdapDN( "m-oid=" + syntaxCheckerDescription.getNumericOid() + ",ou=syntaxCheckers,cn=" + schemaName + ",ou=schema" ); - proxy.delete( new DeleteOperationContext( registries, dn, true ), BYPASS ); + DeleteOperationContext delContext = new DeleteOperationContext( opContext.getSession(), dn, true ); + delContext.setByPassed( BYPASS ); + opContext.getSession().getDirectoryService().getOperationManager().delete( delContext ); } - public void delete( Registries registries, ComparatorDescription comparatorDescription ) throws Exception + public void delete( OperationContext opContext, ComparatorDescription comparatorDescription ) throws Exception { String schemaName = getSchema( comparatorDescription ); - PartitionNexusProxy proxy = InvocationStack.getInstance().peek().getProxy(); LdapDN dn = new LdapDN( "m-oid=" + comparatorDescription.getNumericOid() + ",ou=comparators,cn=" + schemaName + ",ou=schema" ); - proxy.delete( new DeleteOperationContext( registries, dn, true ), BYPASS ); + DeleteOperationContext delContext = new DeleteOperationContext( opContext.getSession(), dn, true ); + delContext.setByPassed( BYPASS ); + opContext.getSession().getDirectoryService().getOperationManager().delete( delContext ); } - public void add( Registries registries, ComparatorDescription comparatorDescription ) throws Exception - { - String schemaName = getSchema( comparatorDescription ); - PartitionNexusProxy proxy = InvocationStack.getInstance().peek().getProxy(); - LdapDN dn = new LdapDN( "m-oid=" + comparatorDescription.getNumericOid() + ",ou=comparators,cn=" - + schemaName + ",ou=schema" ); - Attributes attrs = getAttributes( comparatorDescription ); - ServerEntry entry = ServerEntryUtils.toServerEntry( attrs, dn, registries ); - - proxy.add( new AddOperationContext( registries, dn, entry, true ), BYPASS ); - } - - private Attributes getAttributes( ComparatorDescription comparatorDescription ) { AttributesImpl attributes = new AttributesImpl( SchemaConstants.OBJECT_CLASS_AT, SchemaConstants.TOP_OC, true ); @@ -229,19 +265,6 @@ } - public void add( Registries registries, NormalizerDescription normalizerDescription ) throws Exception - { - String schemaName = getSchema( normalizerDescription ); - PartitionNexusProxy proxy = InvocationStack.getInstance().peek().getProxy(); - LdapDN dn = new LdapDN( "m-oid=" + normalizerDescription.getNumericOid() + ",ou=normalizers,cn=" - + schemaName + ",ou=schema" ); - Attributes attrs = getAttributes( normalizerDescription ); - ServerEntry entry = ServerEntryUtils.toServerEntry( attrs, dn, registries ); - - proxy.add( new AddOperationContext( registries, dn, entry, true ), BYPASS ); - } - - private Attributes getAttributes( NormalizerDescription normalizerDescription ) { AttributesImpl attributes = new AttributesImpl( SchemaConstants.OBJECT_CLASS_AT, SchemaConstants.TOP_OC, true ); @@ -265,18 +288,6 @@ } - public void add( Registries registries, SyntaxCheckerDescription syntaxCheckerDescription ) throws Exception - { - String schemaName = getSchema( syntaxCheckerDescription ); - PartitionNexusProxy proxy = InvocationStack.getInstance().peek().getProxy(); - LdapDN dn = new LdapDN( "m-oid=" + syntaxCheckerDescription.getNumericOid() + ",ou=syntaxCheckers,cn=" - + schemaName + ",ou=schema" ); - Attributes attrs = getAttributes( syntaxCheckerDescription ); - ServerEntry entry = ServerEntryUtils.toServerEntry( attrs, dn, registries ); - proxy.add( new AddOperationContext( registries, dn, entry, true ), BYPASS ); - } - - private String getSchema( AbstractSchemaDescription desc ) { if ( desc.getExtensions().containsKey( MetaSchemaConstants.X_SCHEMA ) ) Modified: directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/security/CoreKeyStoreSpi.java URL: http://svn.apache.org/viewvc/directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/security/CoreKeyStoreSpi.java?rev=662440&r1=662439&r2=662440&view=diff ============================================================================== --- directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/security/CoreKeyStoreSpi.java (original) +++ directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/security/CoreKeyStoreSpi.java Mon Jun 2 07:00:23 2008 @@ -35,14 +35,12 @@ import java.util.Date; import java.util.Enumeration; -import javax.naming.directory.Attributes; - import org.apache.commons.lang.ArrayUtils; import org.apache.commons.lang.NotImplementedException; +import org.apache.directory.server.core.CoreSession; import org.apache.directory.server.core.DirectoryService; import org.apache.directory.server.core.authn.LdapPrincipal; import org.apache.directory.server.core.entry.ServerEntry; -import org.apache.directory.server.core.entry.ServerEntryUtils; import org.apache.directory.server.core.partition.PartitionNexus; import org.apache.directory.shared.ldap.constants.AuthenticationLevel; import org.apache.directory.shared.ldap.name.LdapDN; @@ -82,8 +80,8 @@ { LdapDN adminDn = PartitionNexus.getAdminName(); LdapPrincipal principal = new LdapPrincipal( adminDn, AuthenticationLevel.SIMPLE ); - Attributes attrs = directoryService.getJndiContext( principal ).getAttributes( adminDn ); - return ServerEntryUtils.toServerEntry( attrs, adminDn, directoryService.getRegistries() ); + CoreSession session = directoryService.getSession( principal ); + return session.lookup( adminDn ); } Modified: directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/sp/StoredProcEngine.java URL: http://svn.apache.org/viewvc/directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/sp/StoredProcEngine.java?rev=662440&r1=662439&r2=662440&view=diff ============================================================================== --- directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/sp/StoredProcEngine.java (original) +++ directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/sp/StoredProcEngine.java Mon Jun 2 07:00:23 2008 @@ -17,13 +17,10 @@ * under the License. * */ - - package org.apache.directory.server.core.sp; -import javax.naming.NamingException; -import javax.naming.ldap.LdapContext; +import org.apache.directory.server.core.CoreSession; import org.apache.directory.server.core.entry.ServerEntry; @@ -55,12 +52,11 @@ /** * Invokes the stored procedure handled by the engine. * - * @param rootDSE A handle on Root DSE to invoke the stored procedure over. * @param fullSPName A fully qualified name of the stored procedure including its unit name. * @param spArgs A list or arguments to be passed to the stored procedure. It should be an empty array if there aren't any parameters defined. * @return The value obtained from invoked procedure. The client should know what will return exactly so that it can downcast to the appropriate type. * @throws NamingException If an error occurs during invocation. */ - public Object invokeProcedure( LdapContext rootDSE, String fullSPName, Object[] spArgs ) throws NamingException; + public Object invokeProcedure( CoreSession session, String fullSPName, Object[] spArgs ) throws Exception; } Modified: directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/sp/StoredProcExecutionManager.java URL: http://svn.apache.org/viewvc/directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/sp/StoredProcExecutionManager.java?rev=662440&r1=662439&r2=662440&view=diff ============================================================================== --- directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/sp/StoredProcExecutionManager.java (original) +++ directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/sp/StoredProcExecutionManager.java Mon Jun 2 07:00:23 2008 @@ -17,23 +17,30 @@ * under the License. * */ - - package org.apache.directory.server.core.sp; +import org.apache.directory.server.core.CoreSession; +import org.apache.directory.server.core.entry.ClonedServerEntry; import org.apache.directory.server.core.entry.ServerEntry; -import org.apache.directory.server.core.entry.ServerEntryUtils; -import org.apache.directory.server.schema.registries.Registries; +import org.apache.directory.server.core.entry.ServerStringValue; +import org.apache.directory.server.core.filtering.EntryFilteringCursor; import org.apache.directory.shared.ldap.constants.SchemaConstants; +import org.apache.directory.shared.ldap.filter.EqualityNode; +import org.apache.directory.shared.ldap.filter.ExprNode; +import org.apache.directory.shared.ldap.filter.SearchScope; +import org.apache.directory.shared.ldap.message.AliasDerefMode; import org.apache.directory.shared.ldap.name.LdapDN; +import org.apache.directory.shared.ldap.schema.AttributeType; +import org.apache.directory.shared.ldap.schema.AttributeTypeOptions; -import javax.naming.NamingEnumeration; import javax.naming.NamingException; import javax.naming.directory.SearchControls; -import javax.naming.directory.SearchResult; -import javax.naming.ldap.LdapContext; + +import java.util.Collections; import java.util.List; +import java.util.Set; + /** * A Factory type class which holds a registry of supported {@link StoredProcEngineConfig}s. A container reference @@ -44,6 +51,7 @@ */ public class StoredProcExecutionManager { + private final static Set EMPTY_ATTRIBS = Collections.emptySet(); private final String storedProcContainer; @@ -71,15 +79,27 @@ * @return The entry associated with the SP Unit. * @throws NamingException If the unit cannot be located or any other error occurs. */ - public ServerEntry findStoredProcUnit( LdapContext rootDSE, String fullSPName, Registries registries ) throws NamingException + public ServerEntry findStoredProcUnit( CoreSession session, String fullSPName ) throws Exception { SearchControls controls = new SearchControls(); controls.setReturningAttributes( SchemaConstants.ALL_USER_ATTRIBUTES_ARRAY ); controls.setSearchScope( SearchControls.SUBTREE_SCOPE ); String spUnitName = StoredProcUtils.extractStoredProcUnitName( fullSPName ); - String filter = "(storedProcUnitName=" + spUnitName + ")"; - NamingEnumeration results = rootDSE.search( storedProcContainer, filter, controls ); - return ServerEntryUtils.toServerEntry( results.nextElement().getAttributes(), LdapDN.EMPTY_LDAPDN, registries ); + + AttributeType at = session.getDirectoryService() + .getRegistries().getAttributeTypeRegistry().lookup( "storedProcUnitName" ); + ExprNode filter = new EqualityNode( "storedProcUnitName", new ServerStringValue( at, spUnitName ) ); + LdapDN dn = new LdapDN( storedProcContainer ); + EntryFilteringCursor results = session.search( dn, SearchScope.SUBTREE, filter, + AliasDerefMode.DEREF_ALWAYS, EMPTY_ATTRIBS ); + if ( results.first() ) + { + ClonedServerEntry entry = results.get(); + results.close(); + return entry; + } + + return null; } Modified: directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/sp/java/JavaStoredProcEngine.java URL: http://svn.apache.org/viewvc/directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/sp/java/JavaStoredProcEngine.java?rev=662440&r1=662439&r2=662440&view=diff ============================================================================== --- directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/sp/java/JavaStoredProcEngine.java (original) +++ directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/sp/java/JavaStoredProcEngine.java Mon Jun 2 07:00:23 2008 @@ -28,9 +28,8 @@ import java.util.List; import javax.naming.NamingException; -import javax.naming.ldap.LdapContext; -import org.apache.directory.server.core.entry.ServerAttribute; +import org.apache.directory.server.core.CoreSession; import org.apache.directory.server.core.entry.ServerEntry; import org.apache.directory.server.core.sp.StoredProcEngine; import org.apache.directory.server.core.sp.StoredProcUtils; @@ -53,9 +52,9 @@ /* (non-Javadoc) - * @see org.apache.directory.server.core.sp.StoredProcEngine#invokeProcedure(javax.naming.ldap.LdapContext, java.lang.String, java.lang.Object[]) + * @see org.apache.directory.server.core.sp.StoredProcEngine#invokeProcedure(OperationContext, String, Object[]) */ - public Object invokeProcedure( LdapContext rootCtx, String fullSPName, Object[] spArgs ) throws NamingException + public Object invokeProcedure( CoreSession session, String fullSPName, Object[] spArgs ) throws Exception { EntryAttribute javaByteCode = spUnit.get( "javaByteCode" ); String spName = StoredProcUtils.extractStoredProcName( fullSPName ); Modified: directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/subtree/SubentryInterceptor.java URL: http://svn.apache.org/viewvc/directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/subtree/SubentryInterceptor.java?rev=662440&r1=662439&r2=662440&view=diff ============================================================================== --- directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/subtree/SubentryInterceptor.java (original) +++ directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/subtree/SubentryInterceptor.java Mon Jun 2 07:00:23 2008 @@ -23,7 +23,11 @@ import org.apache.directory.server.core.interceptor.BaseInterceptor; import org.apache.directory.server.constants.ApacheSchemaConstants; +import org.apache.directory.server.constants.ServerDNConstants; +import org.apache.directory.server.core.CoreSession; +import org.apache.directory.server.core.DefaultCoreSession; import org.apache.directory.server.core.DirectoryService; +import org.apache.directory.server.core.authn.LdapPrincipal; import org.apache.directory.server.core.entry.ClonedServerEntry; import org.apache.directory.server.core.entry.DefaultServerAttribute; import org.apache.directory.server.core.entry.DefaultServerEntry; @@ -40,15 +44,15 @@ import org.apache.directory.server.core.interceptor.context.ModifyOperationContext; import org.apache.directory.server.core.interceptor.context.MoveAndRenameOperationContext; import org.apache.directory.server.core.interceptor.context.MoveOperationContext; +import org.apache.directory.server.core.interceptor.context.OperationContext; import org.apache.directory.server.core.interceptor.context.RenameOperationContext; import org.apache.directory.server.core.interceptor.context.SearchOperationContext; import org.apache.directory.server.core.interceptor.context.SearchingOperationContext; -import org.apache.directory.server.core.invocation.Invocation; -import org.apache.directory.server.core.invocation.InvocationStack; import org.apache.directory.server.core.partition.PartitionNexus; import org.apache.directory.server.schema.registries.AttributeTypeRegistry; import org.apache.directory.server.schema.registries.OidRegistry; import org.apache.directory.server.schema.registries.Registries; +import org.apache.directory.shared.ldap.constants.AuthenticationLevel; import org.apache.directory.shared.ldap.constants.SchemaConstants; import org.apache.directory.shared.ldap.entry.EntryAttribute; import org.apache.directory.shared.ldap.entry.Modification; @@ -76,8 +80,6 @@ import javax.naming.Name; import javax.naming.directory.SearchControls; -import javax.naming.ldap.Control; -import javax.naming.ldap.LdapContext; import java.util.ArrayList; import java.util.Iterator; import java.util.List; @@ -170,7 +172,12 @@ //suffix = LdapDN.normalize( suffix, registry.getNormalizerMapping() ); suffix.normalize( atRegistry.getNormalizerMapping() ); - EntryFilteringCursor subentries = nexus.search( new SearchOperationContext( registries, + LdapDN adminDn = new LdapDN( ServerDNConstants.ADMIN_SYSTEM_DN_NORMALIZED ); + adminDn.normalize( registries.getAttributeTypeRegistry().getNormalizerMapping() ); + CoreSession adminSession = new DefaultCoreSession( + new LdapPrincipal( adminDn, AuthenticationLevel.STRONG ), directoryService ); + + EntryFilteringCursor subentries = nexus.search( new SearchOperationContext( adminSession, suffix, AliasDerefMode.NEVER_DEREF_ALIASES, filter, controls ) ); while ( subentries.next() ) @@ -238,13 +245,13 @@ // Methods/Code dealing with Subentry Visibility // ----------------------------------------------------------------------- + public EntryFilteringCursor list( NextInterceptor nextInterceptor, ListOperationContext opContext ) throws Exception { EntryFilteringCursor cursor = nextInterceptor.list( opContext ); - Invocation invocation = InvocationStack.getInstance().peek(); - if ( !isSubentryVisible( invocation ) ) + if ( !isSubentryVisible( opContext ) ) { cursor.addEntryFilter( new HideSubentriesFilter() ); } @@ -257,7 +264,6 @@ throws Exception { EntryFilteringCursor cursor = nextInterceptor.search( opContext ); - Invocation invocation = InvocationStack.getInstance().peek(); // object scope searches by default return subentries if ( opContext.getScope() == SearchScope.OBJECT ) @@ -266,7 +272,7 @@ } // for subtree and one level scope we filter - if ( !isSubentryVisible( invocation ) ) + if ( !isSubentryVisible( opContext ) ) { cursor.addEntryFilter( new HideSubentriesFilter() ); } @@ -287,24 +293,18 @@ * @return true if subentries should be visible, false otherwise * @throws Exception if there are problems accessing request controls */ - private boolean isSubentryVisible( Invocation invocation ) throws Exception + private boolean isSubentryVisible( OperationContext opContext ) throws Exception { - Control[] reqControls = ( ( LdapContext ) invocation.getCaller() ).getRequestControls(); - - if ( reqControls == null || reqControls.length <= 0 ) + if ( opContext.hasRequestControls() ) { return false; } - // check all request controls to see if subentry control is present - for ( Control reqControl : reqControls ) + // found the subentry request control so we return its value + if ( opContext.hasRequestControl( SUBENTRY_CONTROL ) ) { - // found the subentry request control so we return its value - if ( reqControl.getID().equals( SUBENTRY_CONTROL ) ) - { - SubentriesControl subentriesControl = ( SubentriesControl ) reqControl; - return subentriesControl.isVisible(); - } + SubentriesControl subentriesControl = ( SubentriesControl ) opContext.getRequestControl( SUBENTRY_CONTROL ); + return subentriesControl.isVisible(); } return false; @@ -414,7 +414,7 @@ // get the name of the administrative point and its administrativeRole attributes LdapDN apName = ( LdapDN ) name.clone(); apName.remove( name.size() - 1 ); - ServerEntry ap = nexus.lookup( new LookupOperationContext( registries, apName ) ); + ServerEntry ap = nexus.lookup( new LookupOperationContext( addContext.getSession(), apName ) ); EntryAttribute administrativeRole = ap.get( "administrativeRole" ); // check that administrativeRole has something valid in it for us @@ -480,7 +480,7 @@ controls.setReturningAttributes( new String[] { SchemaConstants.ALL_OPERATIONAL_ATTRIBUTES, SchemaConstants.ALL_USER_ATTRIBUTES } ); - EntryFilteringCursor subentries = nexus.search( new SearchOperationContext( registries, + EntryFilteringCursor subentries = nexus.search( new SearchOperationContext( addContext.getSession(), baseDn, AliasDerefMode.NEVER_DEREF_ALIASES, filter, controls ) ); while ( subentries.next() ) @@ -491,8 +491,8 @@ if ( evaluator.evaluate( ss, apName, dn, candidate ) ) { - nexus.modify( new ModifyOperationContext( registries, dn, getOperationalModsForAdd( candidate, - operational ) ) ); + nexus.modify( new ModifyOperationContext( addContext.getSession(), dn, + getOperationalModsForAdd( candidate, operational ) ) ); } } @@ -587,7 +587,7 @@ public void delete( NextInterceptor next, DeleteOperationContext opContext ) throws Exception { LdapDN name = opContext.getDn(); - ServerEntry entry = nexus.lookup( new LookupOperationContext( registries, name ) ); + ServerEntry entry = nexus.lookup( new LookupOperationContext( opContext.getSession(), name ) ); EntryAttribute objectClasses = entry.get( objectClassType ); if ( objectClasses.contains( SchemaConstants.SUBENTRY_OC ) ) @@ -614,7 +614,7 @@ controls.setReturningAttributes( new String[] { SchemaConstants.ALL_OPERATIONAL_ATTRIBUTES, SchemaConstants.ALL_USER_ATTRIBUTES } ); - EntryFilteringCursor subentries = nexus.search( new SearchOperationContext( registries, + EntryFilteringCursor subentries = nexus.search( new SearchOperationContext( opContext.getSession(), baseDn, AliasDerefMode.NEVER_DEREF_ALIASES, filter, controls ) ); while ( subentries.next() ) @@ -625,8 +625,8 @@ if ( evaluator.evaluate( ss, apName, dn, candidate ) ) { - nexus.modify( new ModifyOperationContext( registries, dn, getOperationalModsForRemove( name, - candidate ) ) ); + nexus.modify( new ModifyOperationContext( opContext.getSession(), dn, + getOperationalModsForRemove( name, candidate ) ) ); } } } @@ -650,12 +650,12 @@ * are, false otherwise * @throws Exception if there are errors while searching the directory */ - private boolean hasAdministrativeDescendant( LdapDN name ) throws Exception + private boolean hasAdministrativeDescendant( OperationContext opContext, LdapDN name ) throws Exception { ExprNode filter = new PresenceNode( "administrativeRole" ); SearchControls controls = new SearchControls(); controls.setSearchScope( SearchControls.SUBTREE_SCOPE ); - EntryFilteringCursor aps = nexus.search( new SearchOperationContext( registries, name, + EntryFilteringCursor aps = nexus.search( new SearchOperationContext( opContext.getSession(), name, AliasDerefMode.NEVER_DEREF_ALIASES, filter, controls ) ); if ( aps.next() ) @@ -746,7 +746,7 @@ { LdapDN name = opContext.getDn(); - ServerEntry entry = nexus.lookup( new LookupOperationContext( registries, name ) ); + ServerEntry entry = nexus.lookup( new LookupOperationContext( opContext.getSession(), name ) ); EntryAttribute objectClasses = entry.get( objectClassType ); @@ -773,7 +773,7 @@ controls.setSearchScope( SearchControls.SUBTREE_SCOPE ); controls.setReturningAttributes( new String[] { SchemaConstants.ALL_OPERATIONAL_ATTRIBUTES, SchemaConstants.ALL_USER_ATTRIBUTES } ); - EntryFilteringCursor subentries = nexus.search( new SearchOperationContext( registries, + EntryFilteringCursor subentries = nexus.search( new SearchOperationContext( opContext.getSession(), baseDn, AliasDerefMode.NEVER_DEREF_ALIASES, filter, controls ) ); while ( subentries.next() ) @@ -785,14 +785,14 @@ if ( evaluator.evaluate( ss, apName, dn, candidate ) ) { - nexus.modify( new ModifyOperationContext( registries, dn, getOperationalModsForReplace( name, - newName, subentry, candidate ) ) ); + nexus.modify( new ModifyOperationContext( opContext.getSession(), dn, + getOperationalModsForReplace( name, newName, subentry, candidate ) ) ); } } } else { - if ( hasAdministrativeDescendant( name ) ) + if ( hasAdministrativeDescendant( opContext, name ) ) { String msg = "Will not allow rename operation on entries with administrative descendants."; LOG.warn( msg ); @@ -811,7 +811,7 @@ if ( mods.size() > 0 ) { - nexus.modify( new ModifyOperationContext( registries, newName, mods ) ); + nexus.modify( new ModifyOperationContext( opContext.getSession(), newName, mods ) ); } } } @@ -822,7 +822,7 @@ LdapDN oriChildName = opContext.getDn(); LdapDN parent = opContext.getParent(); - ServerEntry entry = nexus.lookup( new LookupOperationContext( registries, oriChildName ) ); + ServerEntry entry = nexus.lookup( new LookupOperationContext( opContext.getSession(), oriChildName ) ); EntryAttribute objectClasses = entry.get( objectClassType ); @@ -850,7 +850,7 @@ controls.setSearchScope( SearchControls.SUBTREE_SCOPE ); controls.setReturningAttributes( new String[] { SchemaConstants.ALL_OPERATIONAL_ATTRIBUTES, SchemaConstants.ALL_USER_ATTRIBUTES } ); - EntryFilteringCursor subentries = nexus.search( new SearchOperationContext( registries, + EntryFilteringCursor subentries = nexus.search( new SearchOperationContext( opContext.getSession(), baseDn, AliasDerefMode.NEVER_DEREF_ALIASES, filter, controls ) ); while ( subentries.next() ) @@ -861,14 +861,14 @@ if ( evaluator.evaluate( ss, apName, dn, candidate ) ) { - nexus.modify( new ModifyOperationContext( registries, dn, getOperationalModsForReplace( - oriChildName, newName, subentry, candidate ) ) ); + nexus.modify( new ModifyOperationContext( opContext.getSession(), dn, + getOperationalModsForReplace( oriChildName, newName, subentry, candidate ) ) ); } } } else { - if ( hasAdministrativeDescendant( oriChildName ) ) + if ( hasAdministrativeDescendant( opContext, oriChildName ) ) { String msg = "Will not allow rename operation on entries with administrative descendants."; LOG.warn( msg ); @@ -886,7 +886,7 @@ if ( mods.size() > 0 ) { - nexus.modify( new ModifyOperationContext( registries, newName, mods ) ); + nexus.modify( new ModifyOperationContext( opContext.getSession(), newName, mods ) ); } } } @@ -897,7 +897,7 @@ LdapDN oriChildName = opContext.getDn(); LdapDN newParentName = opContext.getParent(); - ServerEntry entry = nexus.lookup( new LookupOperationContext( registries, oriChildName ) ); + ServerEntry entry = nexus.lookup( new LookupOperationContext( opContext.getSession(), oriChildName ) ); EntryAttribute objectClasses = entry.get( SchemaConstants.OBJECT_CLASS_AT ); @@ -924,7 +924,7 @@ controls.setSearchScope( SearchControls.SUBTREE_SCOPE ); controls.setReturningAttributes( new String[] { SchemaConstants.ALL_OPERATIONAL_ATTRIBUTES, SchemaConstants.ALL_USER_ATTRIBUTES } ); - EntryFilteringCursor subentries = nexus.search( new SearchOperationContext( registries, + EntryFilteringCursor subentries = nexus.search( new SearchOperationContext( opContext.getSession(), baseDn, AliasDerefMode.NEVER_DEREF_ALIASES, filter, controls ) ); while ( subentries.next() ) @@ -935,14 +935,14 @@ if ( evaluator.evaluate( ss, apName, dn, candidate ) ) { - nexus.modify( new ModifyOperationContext( registries, dn, getOperationalModsForReplace( - oriChildName, newName, subentry, candidate ) ) ); + nexus.modify( new ModifyOperationContext( opContext.getSession(), dn, + getOperationalModsForReplace( oriChildName, newName, subentry, candidate ) ) ); } } } else { - if ( hasAdministrativeDescendant( oriChildName ) ) + if ( hasAdministrativeDescendant( opContext, oriChildName ) ) { String msg = "Will not allow rename operation on entries with administrative descendants."; LOG.warn( msg ); @@ -959,7 +959,7 @@ if ( mods.size() > 0 ) { - nexus.modify( new ModifyOperationContext( registries, newName, mods ) ); + nexus.modify( new ModifyOperationContext( opContext.getSession(), newName, mods ) ); } } } @@ -1013,7 +1013,7 @@ LdapDN name = opContext.getDn(); List mods = opContext.getModItems(); - ServerEntry entry = nexus.lookup( new LookupOperationContext( registries, name ) ); + ServerEntry entry = nexus.lookup( new LookupOperationContext( opContext.getSession(), name ) ); ServerEntry oldEntry = ( ServerEntry ) entry.clone(); EntryAttribute objectClasses = entry.get( objectClassType ); @@ -1058,7 +1058,7 @@ controls.setSearchScope( SearchControls.SUBTREE_SCOPE ); controls.setReturningAttributes( new String[] { SchemaConstants.ALL_OPERATIONAL_ATTRIBUTES, SchemaConstants.ALL_USER_ATTRIBUTES } ); - EntryFilteringCursor subentries = nexus.search( new SearchOperationContext( registries, + EntryFilteringCursor subentries = nexus.search( new SearchOperationContext( opContext.getSession(), oldBaseDn, AliasDerefMode.NEVER_DEREF_ALIASES, filter, controls ) ); while ( subentries.next() ) @@ -1069,8 +1069,8 @@ if ( evaluator.evaluate( ssOld, apName, dn, candidate ) ) { - nexus.modify( new ModifyOperationContext( registries, dn, getOperationalModsForRemove( name, - candidate ) ) ); + nexus.modify( new ModifyOperationContext( opContext.getSession(), dn, + getOperationalModsForRemove( name, candidate ) ) ); } } @@ -1079,7 +1079,7 @@ ServerEntry operational = getSubentryOperatationalAttributes( name, subentry ); LdapDN newBaseDn = ( LdapDN ) apName.clone(); newBaseDn.addAll( ssNew.getBase() ); - subentries = nexus.search( new SearchOperationContext( registries, newBaseDn, + subentries = nexus.search( new SearchOperationContext( opContext.getSession(), newBaseDn, AliasDerefMode.NEVER_DEREF_ALIASES, filter, controls ) ); while ( subentries.next() ) @@ -1090,8 +1090,8 @@ if ( evaluator.evaluate( ssNew, apName, dn, candidate ) ) { - nexus.modify( new ModifyOperationContext( registries, dn, getOperationalModsForAdd( candidate, - operational ) ) ); + nexus.modify( new ModifyOperationContext( opContext.getSession(), dn, + getOperationalModsForAdd( candidate, operational ) ) ); } } } @@ -1101,13 +1101,13 @@ if ( !objectClasses.contains( SchemaConstants.SUBENTRY_OC ) ) { - ServerEntry newEntry = nexus.lookup( new LookupOperationContext( registries, name ) ); + ServerEntry newEntry = nexus.lookup( new LookupOperationContext( opContext.getSession(), name ) ); List subentriesOpAttrMods = getModsOnEntryModification( name, oldEntry, newEntry ); if ( subentriesOpAttrMods.size() > 0 ) { - nexus.modify( new ModifyOperationContext( registries, name, subentriesOpAttrMods ) ); + nexus.modify( new ModifyOperationContext( opContext.getSession(), name, subentriesOpAttrMods ) ); } } } Modified: directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/trigger/AbstractStoredProcedureParameterInjector.java URL: http://svn.apache.org/viewvc/directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/trigger/AbstractStoredProcedureParameterInjector.java?rev=662440&r1=662439&r2=662440&view=diff ============================================================================== --- directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/trigger/AbstractStoredProcedureParameterInjector.java (original) +++ directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/trigger/AbstractStoredProcedureParameterInjector.java Mon Jun 2 07:00:23 2008 @@ -17,9 +17,9 @@ * under the License. * */ - package org.apache.directory.server.core.trigger; + import java.security.Principal; import java.util.ArrayList; import java.util.HashMap; @@ -30,50 +30,56 @@ import javax.naming.Name; import javax.naming.NamingException; -import org.apache.directory.server.core.invocation.Invocation; -import org.apache.directory.server.core.jndi.ServerContext; -import org.apache.directory.server.core.jndi.ServerLdapContext; -import org.apache.directory.server.schema.registries.Registries; +import org.apache.directory.server.core.interceptor.context.LookupOperationContext; +import org.apache.directory.server.core.interceptor.context.OperationContext; import org.apache.directory.shared.ldap.name.LdapDN; import org.apache.directory.shared.ldap.trigger.StoredProcedureParameter; import org.apache.directory.shared.ldap.trigger.StoredProcedureParameter.Generic_LDAP_CONTEXT; + public abstract class AbstractStoredProcedureParameterInjector implements StoredProcedureParameterInjector { - private Invocation invocation; + private OperationContext opContext; private Map, MicroInjector> injectors; - public AbstractStoredProcedureParameterInjector( Invocation invocation ) + + public AbstractStoredProcedureParameterInjector( OperationContext opContext ) { - this.invocation = invocation; + this.opContext = opContext; injectors = new HashMap, MicroInjector>(); injectors.put( StoredProcedureParameter.Generic_OPERATION_PRINCIPAL.class, $operationPrincipalInjector ); injectors.put( StoredProcedureParameter.Generic_LDAP_CONTEXT.class, $ldapContextInjector ); } + protected Name getOperationPrincipal() throws NamingException { - Principal principal = ( ( ServerContext ) invocation.getCaller() ).getPrincipal(); + Principal principal = opContext.getSession().getEffectivePrincipal(); Name userName = new LdapDN( principal.getName() ); return userName; } + protected Map, MicroInjector> getInjectors() { return injectors; } - public Invocation getInvocation() + + public OperationContext getOperationContext() { - return invocation; + return opContext; } - public void setInvocation( Invocation invocation ) + + public void setOperationContext( OperationContext invocation ) { - this.invocation = invocation; + this.opContext = invocation; } - public final List getArgumentsToInject( Registries registries, List parameterList ) throws Exception + + public final List getArgumentsToInject( OperationContext opContext, + List parameterList ) throws Exception { List arguments = new ArrayList(); @@ -83,28 +89,30 @@ { StoredProcedureParameter spParameter = it.next(); MicroInjector injector = injectors.get( spParameter.getClass() ); - arguments.add( injector.inject( registries, spParameter ) ); + arguments.add( injector.inject( opContext, spParameter ) ); } return arguments; } + MicroInjector $operationPrincipalInjector = new MicroInjector() { - public Object inject( Registries registries, StoredProcedureParameter param ) throws NamingException + public Object inject( OperationContext opContext, StoredProcedureParameter param ) throws Exception { return getOperationPrincipal(); } }; + MicroInjector $ldapContextInjector = new MicroInjector() { - public Object inject( Registries registries, StoredProcedureParameter param ) throws NamingException + public Object inject( OperationContext opContext, StoredProcedureParameter param ) throws Exception { Generic_LDAP_CONTEXT ldapCtxParam = ( Generic_LDAP_CONTEXT ) param; LdapDN ldapCtxName = ldapCtxParam.getCtxName(); - return ( ( ServerLdapContext ) ( ( ServerLdapContext ) invocation.getCaller() ).getRootContext()).lookup( ldapCtxName ); + LookupOperationContext lookupContext = new LookupOperationContext( opContext.getSession(), ldapCtxName ); + return opContext.getSession().getDirectoryService().getOperationManager().lookup( lookupContext ); } }; - }