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:17:14 UTC
svn commit: r433132 - in /directory/branches/apacheds/1.0:
core-unit/src/test/java/org/apache/directory/server/core/subtree/
core/src/main/java/org/apache/directory/server/core/subtree/
Author: akarasulu
Date: Sun Aug 20 20:17:12 2006
New Revision: 433132
URL: http://svn.apache.org/viewvc?rev=433132&view=rev
Log:
encapsulating access to subtree specification map
Added:
directory/branches/apacheds/1.0/core/src/main/java/org/apache/directory/server/core/subtree/SubtreeCache.java
Modified:
directory/branches/apacheds/1.0/core-unit/src/test/java/org/apache/directory/server/core/subtree/BadSubentryServiceITest.java
directory/branches/apacheds/1.0/core/src/main/java/org/apache/directory/server/core/subtree/SubentryService.java
Modified: directory/branches/apacheds/1.0/core-unit/src/test/java/org/apache/directory/server/core/subtree/BadSubentryServiceITest.java
URL: http://svn.apache.org/viewvc/directory/branches/apacheds/1.0/core-unit/src/test/java/org/apache/directory/server/core/subtree/BadSubentryServiceITest.java?rev=433132&r1=433131&r2=433132&view=diff
==============================================================================
--- directory/branches/apacheds/1.0/core-unit/src/test/java/org/apache/directory/server/core/subtree/BadSubentryServiceITest.java (original)
+++ directory/branches/apacheds/1.0/core-unit/src/test/java/org/apache/directory/server/core/subtree/BadSubentryServiceITest.java Sun Aug 20 20:17:12 2006
@@ -183,5 +183,4 @@
assertEquals( 1, accessControlSubentries.size() );
*/
}
-
}
Modified: directory/branches/apacheds/1.0/core/src/main/java/org/apache/directory/server/core/subtree/SubentryService.java
URL: http://svn.apache.org/viewvc/directory/branches/apacheds/1.0/core/src/main/java/org/apache/directory/server/core/subtree/SubentryService.java?rev=433132&r1=433131&r2=433132&view=diff
==============================================================================
--- directory/branches/apacheds/1.0/core/src/main/java/org/apache/directory/server/core/subtree/SubentryService.java (original)
+++ directory/branches/apacheds/1.0/core/src/main/java/org/apache/directory/server/core/subtree/SubentryService.java Sun Aug 20 20:17:12 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.
@@ -96,7 +96,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;
@@ -104,7 +105,6 @@
private AttributeTypeRegistry attrRegistry;
private OidRegistry oidRegistry;
-
private AttributeType objectClassType;
private AttributeType administrativeRoleType;
@@ -166,7 +166,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 );
}
}
}
@@ -265,14 +265,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 ) )
{
@@ -388,7 +388,7 @@
log.warn( msg );
throw new LdapInvalidAttributeValueException( msg, ResultCodeEnum.INVALIDATTRIBUTESYNTAX );
}
- subtrees.put( normName.toString(), ss );
+ subtreeCache.setSubtreeSpecification( normName.toString(), ss );
next.add(normName, entry );
/* ----------------------------------------------------------------
@@ -424,14 +424,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 ) )
{
@@ -513,7 +513,7 @@
if ( objectClasses.contains( "subentry" ) )
{
- SubtreeSpecification ss = ( SubtreeSpecification ) subtrees.remove( name.toNormName() );
+ SubtreeSpecification ss = subtreeCache.removeSubtreeSpecification( name.toNormName() );
next.delete( name );
/* ----------------------------------------------------------------
@@ -604,13 +604,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 );
@@ -666,7 +666,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();
@@ -679,7 +679,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 );
@@ -736,7 +736,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();
@@ -749,7 +749,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 );
@@ -806,7 +806,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();
@@ -815,7 +815,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 );
@@ -876,7 +876,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
@@ -890,7 +890,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
@@ -962,7 +962,7 @@
if ( objectClasses.contains( "subentry" ) && isSubtreeSpecificationModification )
{
- SubtreeSpecification ssOld = ( SubtreeSpecification ) subtrees.remove( name.toString() );
+ SubtreeSpecification ssOld = subtreeCache.removeSubtreeSpecification( name.toString() );
SubtreeSpecification ssNew;
try
@@ -976,7 +976,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
@@ -1293,7 +1293,7 @@
String dn = result.getName();
// see if we can get a match without normalization
- if ( subtrees.containsKey( dn ) )
+ if ( subtreeCache.hasSubtreeSpecification( dn ) )
{
return false;
}
@@ -1329,7 +1329,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() );
@@ -1338,7 +1338,7 @@
LdapDN rest = new LdapDN( result.getName() );
rest.normalize( attrRegistry.getNormalizerMapping() );
name.addAll( rest );
- return !subtrees.containsKey( name.toString() );
+ return !subtreeCache.hasSubtreeSpecification( name.toString() );
}
}
@@ -1354,7 +1354,7 @@
String dn = result.getName();
// see if we can get a match without normalization
- if ( subtrees.containsKey( dn ) )
+ if ( subtreeCache.hasSubtreeSpecification( dn ) )
{
return true;
}
@@ -1389,7 +1389,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() );
@@ -1398,7 +1398,7 @@
LdapDN rest = new LdapDN( result.getName() );
rest.normalize( attrRegistry.getNormalizerMapping() );
name.addAll( rest );
- return subtrees.containsKey( name.toNormName() );
+ return subtreeCache.hasSubtreeSpecification( name.toNormName() );
}
}
}
Added: directory/branches/apacheds/1.0/core/src/main/java/org/apache/directory/server/core/subtree/SubtreeCache.java
URL: http://svn.apache.org/viewvc/directory/branches/apacheds/1.0/core/src/main/java/org/apache/directory/server/core/subtree/SubtreeCache.java?rev=433132&view=auto
==============================================================================
--- directory/branches/apacheds/1.0/core/src/main/java/org/apache/directory/server/core/subtree/SubtreeCache.java (added)
+++ directory/branches/apacheds/1.0/core/src/main/java/org/apache/directory/server/core/subtree/SubtreeCache.java Sun Aug 20 20:17:12 2006
@@ -0,0 +1,66 @@
+/*
+ * 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.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+package org.apache.directory.server.core.subtree;
+
+
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+
+import org.apache.directory.shared.ldap.subtree.SubtreeSpecification;
+
+
+/**
+ * A cache for subtree specifications.
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ * @version $Rev$
+ */
+public class SubtreeCache
+{
+ private final Map subtrees = new HashMap();
+
+
+ final SubtreeSpecification getSubtreeSpecification( String normalizedName )
+ {
+ return ( SubtreeSpecification ) subtrees.get( normalizedName );
+ }
+
+
+ final SubtreeSpecification removeSubtreeSpecification( String normalizedName )
+ {
+ return ( SubtreeSpecification ) subtrees.remove( normalizedName );
+ }
+
+
+ final SubtreeSpecification setSubtreeSpecification( String normalizedName, SubtreeSpecification ss )
+ {
+ return ( SubtreeSpecification ) subtrees.put( normalizedName, ss );
+ }
+
+
+ final boolean hasSubtreeSpecification( String normalizedName )
+ {
+ return subtrees.containsKey( normalizedName );
+ }
+
+
+ final Iterator nameIterator()
+ {
+ return subtrees.keySet().iterator();
+ }
+}