You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by ak...@apache.org on 2006/08/21 05:20:48 UTC

svn commit: r433133 - in /directory/trunks/apacheds/core/src/main/java/org/apache/directory/server/core/subtree: SubentryService.java SubtreeCache.java

Author: akarasulu
Date: Sun Aug 20 20:20:46 2006
New Revision: 433133

URL: http://svn.apache.org/viewvc?rev=433133&view=rev
Log:
encapsulating access to subtree specification map and adding BadSubentryServiceITest

Added:
    directory/trunks/apacheds/core/src/main/java/org/apache/directory/server/core/subtree/SubtreeCache.java
      - copied unchanged from r433132, directory/branches/apacheds/1.0/core/src/main/java/org/apache/directory/server/core/subtree/SubtreeCache.java
Modified:
    directory/trunks/apacheds/core/src/main/java/org/apache/directory/server/core/subtree/SubentryService.java

Modified: directory/trunks/apacheds/core/src/main/java/org/apache/directory/server/core/subtree/SubentryService.java
URL: http://svn.apache.org/viewvc/directory/trunks/apacheds/core/src/main/java/org/apache/directory/server/core/subtree/SubentryService.java?rev=433133&r1=433132&r2=433133&view=diff
==============================================================================
--- directory/trunks/apacheds/core/src/main/java/org/apache/directory/server/core/subtree/SubentryService.java (original)
+++ directory/trunks/apacheds/core/src/main/java/org/apache/directory/server/core/subtree/SubentryService.java Sun Aug 20 20:20:46 2006
@@ -1,5 +1,5 @@
 /*
- *   Copyright 2004 The Apache Software Foundation
+ *   Copyright 2006 The Apache Software Foundation
  *
  *   Licensed under the Apache License, Version 2.0 (the "License");
  *   you may not use this file except in compliance with the License.
@@ -99,7 +99,8 @@
     private static final Logger log = LoggerFactory.getLogger( SubentryService.class );
 
     /** the hash mapping the DN of a subentry to its SubtreeSpecification */
-    private final Map subtrees = new HashMap();
+    private final SubtreeCache subtreeCache = new SubtreeCache();
+    
     private DirectoryServiceConfiguration factoryCfg;
     private SubtreeSpecificationParser ssParser;
     private SubtreeEvaluator evaluator;
@@ -107,7 +108,6 @@
     private AttributeTypeRegistry attrRegistry;
     private OidRegistry oidRegistry;
     
-    
     private AttributeType objectClassType;
     private AttributeType administrativeRoleType;
 
@@ -169,7 +169,7 @@
                 LdapDN dnName = new LdapDN( dn );
                 //dnName = LdapDN.normalize( dnName, registry.getNormalizerMapping() );
                 dnName.normalize( attrRegistry.getNormalizerMapping() );
-                subtrees.put( dnName.toString(), ss );
+                subtreeCache.setSubtreeSpecification( dnName.toString(), ss );
             }
         }
     }
@@ -268,14 +268,14 @@
     {
         Attributes subentryAttrs = new LockableAttributesImpl();
         Attribute objectClasses = entryAttrs.get( "objectClass" );
-        Iterator list = subtrees.keySet().iterator();
+        Iterator list = subtreeCache.nameIterator();
         while ( list.hasNext() )
         {
             String subentryDnStr = ( String ) list.next();
             LdapDN subentryDn = new LdapDN( subentryDnStr );
             LdapDN apDn = ( LdapDN ) subentryDn.clone();
             apDn.remove( apDn.size() - 1 );
-            SubtreeSpecification ss = ( SubtreeSpecification ) subtrees.get( subentryDnStr );
+            SubtreeSpecification ss = subtreeCache.getSubtreeSpecification( subentryDnStr );
 
             if ( evaluator.evaluate( ss, apDn, dn, objectClasses ) )
             {
@@ -400,7 +400,7 @@
                 log.warn( msg );
                 throw new LdapInvalidAttributeValueException( msg, ResultCodeEnum.INVALIDATTRIBUTESYNTAX );
             }
-            subtrees.put( normName.toString(), ss );
+            subtreeCache.setSubtreeSpecification( normName.toString(), ss );
             next.add(normName, entry );
 
             /* ----------------------------------------------------------------
@@ -436,14 +436,14 @@
         }
         else
         {
-            Iterator list = subtrees.keySet().iterator();
+            Iterator list = subtreeCache.nameIterator();
             while ( list.hasNext() )
             {
                 String subentryDnStr = ( String ) list.next();
                 LdapDN subentryDn = new LdapDN( subentryDnStr );
                 LdapDN apDn = ( LdapDN ) subentryDn.clone();
                 apDn.remove( apDn.size() - 1 );
-                SubtreeSpecification ss = ( SubtreeSpecification ) subtrees.get( subentryDn.toNormName() );
+                SubtreeSpecification ss = subtreeCache.getSubtreeSpecification( subentryDn.toNormName() );
 
                 if ( evaluator.evaluate( ss, apDn, normName, objectClasses ) )
                 {
@@ -534,7 +534,7 @@
 
         if ( objectClasses.contains( "subentry" ) )
         {
-            SubtreeSpecification ss = ( SubtreeSpecification ) subtrees.remove( name.toNormName() );
+            SubtreeSpecification ss = subtreeCache.removeSubtreeSpecification( name.toNormName() );
             next.delete( name );
 
             /* ----------------------------------------------------------------
@@ -625,13 +625,13 @@
          * would be caused by chop exclusions. In this case we must add subentry
          * operational attribute values with the dn of this subentry.
          */
-        Iterator subentries = subtrees.keySet().iterator();
+        Iterator subentries = subtreeCache.nameIterator();
         while ( subentries.hasNext() )
         {
             String subentryDn = ( String ) subentries.next();
             Name apDn = new LdapDN( subentryDn );
             apDn.remove( apDn.size() - 1 );
-            SubtreeSpecification ss = ( SubtreeSpecification ) subtrees.get( subentryDn );
+            SubtreeSpecification ss = subtreeCache.getSubtreeSpecification( subentryDn );
             boolean isOldNameSelected = evaluator.evaluate( ss, apDn, oldName, objectClasses );
             boolean isNewNameSelected = evaluator.evaluate( ss, apDn, newName, objectClasses );
 
@@ -687,7 +687,7 @@
 
         if ( objectClasses.contains( "subentry" ) )
         {
-            SubtreeSpecification ss = ( SubtreeSpecification ) subtrees.get( name.toNormName() );
+            SubtreeSpecification ss = subtreeCache.getSubtreeSpecification( name.toNormName() );
             LdapDN apName = ( LdapDN ) name.clone();
             apName.remove( apName.size() - 1 );
             LdapDN baseDn = ( LdapDN ) apName.clone();
@@ -700,7 +700,7 @@
             rdn.normalize( attrRegistry.getNormalizerMapping() );
             newName.normalize( attrRegistry.getNormalizerMapping() );
 
-            subtrees.put( newName.toNormName(), ss );
+            subtreeCache.setSubtreeSpecification( newName.toNormName(), ss );
             next.modifyRn( name, newRn, deleteOldRn );
 
             Attributes apAttrs = nexus.lookup( apName );
@@ -757,7 +757,7 @@
 
         if ( objectClasses.contains( "subentry" ) )
         {
-            SubtreeSpecification ss = ( SubtreeSpecification ) subtrees.get( oriChildName.toNormName() );
+            SubtreeSpecification ss = subtreeCache.getSubtreeSpecification( oriChildName.toNormName() );
             LdapDN apName = ( LdapDN ) oriChildName.clone();
             apName.remove( apName.size() - 1 );
             LdapDN baseDn = ( LdapDN ) apName.clone();
@@ -770,7 +770,7 @@
             rdn.normalize( attrRegistry.getNormalizerMapping() );
             newName.normalize( attrRegistry.getNormalizerMapping() );
             
-            subtrees.put( newName.toNormName(), ss );
+            subtreeCache.setSubtreeSpecification( newName.toNormName(), ss );
             next.move( oriChildName, newParentName, newRn, deleteOldRn );
 
             Attributes apAttrs = nexus.lookup( apName );
@@ -827,7 +827,7 @@
 
         if ( objectClasses.contains( "subentry" ) )
         {
-            SubtreeSpecification ss = ( SubtreeSpecification ) subtrees.get( oriChildName.toString() );
+            SubtreeSpecification ss = subtreeCache.getSubtreeSpecification( oriChildName.toString() );
             LdapDN apName = ( LdapDN ) oriChildName.clone();
             apName.remove( apName.size() - 1 );
             LdapDN baseDn = ( LdapDN ) apName.clone();
@@ -836,7 +836,7 @@
             newName.remove( newName.size() - 1 );
             newName.add( newParentName.get( newParentName.size() - 1 ) );
 
-            subtrees.put( newName.toString(), ss );
+            subtreeCache.setSubtreeSpecification( newName.toString(), ss );
             next.move( oriChildName, newParentName );
 
             Attributes apAttrs = nexus.lookup( apName );
@@ -897,7 +897,7 @@
 
         if ( objectClasses.contains( "subentry" ) && mods.get( "subtreeSpecification" ) != null )
         {
-            SubtreeSpecification ssOld = ( SubtreeSpecification ) subtrees.remove( name.toNormName() );
+            SubtreeSpecification ssOld = subtreeCache.removeSubtreeSpecification( name.toNormName() );
             SubtreeSpecification ssNew;
 
             try
@@ -911,7 +911,7 @@
                 throw new LdapInvalidAttributeValueException( msg, ResultCodeEnum.INVALIDATTRIBUTESYNTAX );
             }
 
-            subtrees.put( name.toNormName(), ssNew );
+            subtreeCache.setSubtreeSpecification( name.toNormName(), ssNew );
             next.modify( name, modOp, mods );
 
             // search for all entries selected by the old SS and remove references to subentry
@@ -983,7 +983,7 @@
 
         if ( objectClasses.contains( "subentry" ) && isSubtreeSpecificationModification )
         {
-            SubtreeSpecification ssOld = ( SubtreeSpecification ) subtrees.remove( name.toString() );
+            SubtreeSpecification ssOld = subtreeCache.removeSubtreeSpecification( name.toString() );
             SubtreeSpecification ssNew;
 
             try
@@ -997,7 +997,7 @@
                 throw new LdapInvalidAttributeValueException( msg, ResultCodeEnum.INVALIDATTRIBUTESYNTAX );
             }
 
-            subtrees.put( name.toNormName(), ssNew );
+            subtreeCache.setSubtreeSpecification( name.toNormName(), ssNew );
             next.modify( name, mods );
 
             // search for all entries selected by the old SS and remove references to subentry
@@ -1339,7 +1339,7 @@
             String dn = result.getName();
 
             // see if we can get a match without normalization
-            if ( subtrees.containsKey( dn ) )
+            if ( subtreeCache.hasSubtreeSpecification( dn ) )
             {
                 return false;
             }
@@ -1375,7 +1375,7 @@
                 LdapDN ndn = new LdapDN( dn );
                 ndn.normalize( attrRegistry.getNormalizerMapping() );
                 String normalizedDn = ndn.toString();
-                return !subtrees.containsKey( normalizedDn );
+                return !subtreeCache.hasSubtreeSpecification( normalizedDn );
             }
 
             LdapDN name = new LdapDN( invocation.getCaller().getNameInNamespace() );
@@ -1384,7 +1384,7 @@
             LdapDN rest = new LdapDN( result.getName() );
             rest.normalize( attrRegistry.getNormalizerMapping() );
             name.addAll( rest );
-            return !subtrees.containsKey( name.toString() );
+            return !subtreeCache.hasSubtreeSpecification( name.toString() );
         }
     }
 
@@ -1400,7 +1400,7 @@
             String dn = result.getName();
 
             // see if we can get a match without normalization
-            if ( subtrees.containsKey( dn ) )
+            if ( subtreeCache.hasSubtreeSpecification( dn ) )
             {
                 return true;
             }
@@ -1435,7 +1435,7 @@
             {
                 LdapDN ndn = new LdapDN( dn );
                 ndn.normalize( attrRegistry.getNormalizerMapping() );
-                return subtrees.containsKey( ndn.toNormName() );
+                return subtreeCache.hasSubtreeSpecification( ndn.toNormName() );
             }
 
             LdapDN name = new LdapDN( invocation.getCaller().getNameInNamespace() );
@@ -1444,7 +1444,7 @@
             LdapDN rest = new LdapDN( result.getName() );
             rest.normalize( attrRegistry.getNormalizerMapping() );
             name.addAll( rest );
-            return subtrees.containsKey( name.toNormName() );
+            return subtreeCache.hasSubtreeSpecification( name.toNormName() );
         }
     }
 }