You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by el...@apache.org on 2010/05/30 14:04:20 UTC
svn commit: r949506 - in
/directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core:
collective/ operational/ schema/ subtree/
Author: elecharny
Date: Sun May 30 12:04:20 2010
New Revision: 949506
URL: http://svn.apache.org/viewvc?rev=949506&view=rev
Log:
o Removing some more useless lookups
o Small improvements
o Added some missing Javadoc, minor code refactoring
Modified:
directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/collective/CollectiveAttributeInterceptor.java
directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/collective/CollectiveAttributesSchemaChecker.java
directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/operational/OperationalAttributeInterceptor.java
directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/schema/SchemaInterceptor.java
directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/subtree/SubentryInterceptor.java
Modified: directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/collective/CollectiveAttributeInterceptor.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/collective/CollectiveAttributeInterceptor.java?rev=949506&r1=949505&r2=949506&view=diff
==============================================================================
--- directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/collective/CollectiveAttributeInterceptor.java (original)
+++ directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/collective/CollectiveAttributeInterceptor.java Sun May 30 12:04:20 2010
@@ -23,6 +23,8 @@ package org.apache.directory.server.core
import java.util.HashSet;
import java.util.Set;
+import javax.naming.NamingException;
+
import org.apache.directory.server.core.DirectoryService;
import org.apache.directory.server.core.entry.ClonedServerEntry;
import org.apache.directory.server.core.filtering.EntryFilter;
@@ -40,8 +42,8 @@ import org.apache.directory.server.core.
import org.apache.directory.server.core.partition.PartitionNexus;
import org.apache.directory.shared.ldap.constants.SchemaConstants;
import org.apache.directory.shared.ldap.entry.DefaultEntryAttribute;
-import org.apache.directory.shared.ldap.entry.EntryAttribute;
import org.apache.directory.shared.ldap.entry.Entry;
+import org.apache.directory.shared.ldap.entry.EntryAttribute;
import org.apache.directory.shared.ldap.entry.Value;
import org.apache.directory.shared.ldap.name.DN;
import org.apache.directory.shared.ldap.schema.AttributeType;
@@ -64,33 +66,32 @@ public class CollectiveAttributeIntercep
{
/** The SchemaManager */
private SchemaManager schemaManager;
-
+
private PartitionNexus nexus;
-
- private CollectiveAttributesSchemaChecker collectiveAttributesSchemaChecker;
+ private CollectiveAttributesSchemaChecker collectiveAttributesSchemaChecker;
/**
* the search result filter to use for collective attribute injection
*/
private final EntryFilter SEARCH_FILTER = new EntryFilter()
{
- public boolean accept( SearchingOperationContext operation, ClonedServerEntry result )
- throws Exception
+ public boolean accept( SearchingOperationContext operation, ClonedServerEntry result ) throws Exception
{
DN name = result.getDn();
-
+
if ( name.isNormalized() == false )
{
name = DN.normalize( name, schemaManager.getNormalizerMapping() );
}
-
+
String[] retAttrs = operation.getSearchControls().getReturningAttributes();
addCollectiveAttributes( operation, result, retAttrs );
return true;
}
};
+
public void init( DirectoryService directoryService ) throws Exception
{
super.init( directoryService );
@@ -112,12 +113,11 @@ public class CollectiveAttributeIntercep
* @param retAttrs array or attribute type to be specifically included in the result entry(s)
* @throws NamingException if there are problems accessing subentries
*/
- private void addCollectiveAttributes( OperationContext opContext, Entry entry,
- String[] retAttrs ) throws Exception
+ private void addCollectiveAttributes( OperationContext opContext, Entry entry, String[] retAttrs ) throws Exception
{
- EntryAttribute collectiveAttributeSubentries =
- ((ClonedServerEntry)entry).getOriginalEntry().get( SchemaConstants.COLLECTIVE_ATTRIBUTE_SUBENTRIES_AT );
-
+ EntryAttribute collectiveAttributeSubentries = ( ( ClonedServerEntry ) entry ).getOriginalEntry().get(
+ SchemaConstants.COLLECTIVE_ATTRIBUTE_SUBENTRIES_AT );
+
/*
* If there are no collective attribute subentries referenced then we
* have no collective attributes to inject to this entry.
@@ -126,22 +126,21 @@ public class CollectiveAttributeIntercep
{
return;
}
-
+
/*
* Before we proceed we need to lookup the exclusions within the entry
* and build a set of exclusions for rapid lookup. We use OID values
* in the exclusions set instead of regular names that may have case
* variance.
*/
- EntryAttribute collectiveExclusions =
- ((ClonedServerEntry)entry).getOriginalEntry().get( SchemaConstants.COLLECTIVE_EXCLUSIONS_AT );
+ EntryAttribute collectiveExclusions = ( ( ClonedServerEntry ) entry ).getOriginalEntry().get(
+ SchemaConstants.COLLECTIVE_EXCLUSIONS_AT );
Set<String> exclusions = new HashSet<String>();
-
+
if ( collectiveExclusions != null )
{
if ( collectiveExclusions.contains( SchemaConstants.EXCLUDE_ALL_COLLECTIVE_ATTRIBUTES_AT_OID )
- ||
- collectiveExclusions.contains( SchemaConstants.EXCLUDE_ALL_COLLECTIVE_ATTRIBUTES_AT ) )
+ || collectiveExclusions.contains( SchemaConstants.EXCLUDE_ALL_COLLECTIVE_ATTRIBUTES_AT ) )
{
/*
* This entry does not allow any collective attributes
@@ -151,14 +150,14 @@ public class CollectiveAttributeIntercep
}
exclusions = new HashSet<String>();
-
- for ( Value<?> value:collectiveExclusions )
+
+ for ( Value<?> value : collectiveExclusions )
{
AttributeType attrType = schemaManager.lookupAttributeTypeRegistry( value.getString() );
exclusions.add( attrType.getOid() );
}
}
-
+
/*
* If no attributes are requested specifically
* then it means all user attributes are requested.
@@ -168,16 +167,16 @@ public class CollectiveAttributeIntercep
{
retAttrs = SchemaConstants.ALL_USER_ATTRIBUTES_ARRAY;
}
-
+
/*
* Construct a set of requested attributes for easier tracking.
- */
+ */
Set<String> retIdsSet = new HashSet<String>( retAttrs.length );
-
- for ( String retAttr:retAttrs )
+
+ for ( String retAttr : retAttrs )
{
- if ( retAttr.equals( SchemaConstants.ALL_USER_ATTRIBUTES ) ||
- retAttr.equals( SchemaConstants.ALL_OPERATIONAL_ATTRIBUTES ) )
+ if ( retAttr.equals( SchemaConstants.ALL_USER_ATTRIBUTES )
+ || retAttr.equals( SchemaConstants.ALL_OPERATIONAL_ATTRIBUTES ) )
{
retIdsSet.add( retAttr );
}
@@ -192,29 +191,29 @@ public class CollectiveAttributeIntercep
* attributes of the subentry and copy collective attributes from the
* subentry into the entry.
*/
- for ( Value<?> value:collectiveAttributeSubentries )
+ for ( Value<?> value : collectiveAttributeSubentries )
{
String subentryDnStr = value.getString();
DN subentryDn = new DN( subentryDnStr );
-
+
/*
* TODO - Instead of hitting disk here can't we leverage the
* SubentryService to get us cached sub-entries so we're not
* wasting time with a lookup here? It is ridiculous to waste
* time looking up this sub-entry.
*/
-
+
Entry subentry = opContext.lookup( subentryDn, ByPassConstants.LOOKUP_COLLECTIVE_BYPASS );
-
- for ( AttributeType attributeType:subentry.getAttributeTypes() )
+
+ for ( AttributeType attributeType : subentry.getAttributeTypes() )
{
String attrId = attributeType.getName();
-
+
if ( !attributeType.isCollective() )
{
continue;
}
-
+
/*
* Skip the addition of this collective attribute if it is excluded
* in the 'collectiveAttributes' attribute.
@@ -223,12 +222,13 @@ public class CollectiveAttributeIntercep
{
continue;
}
-
+
Set<AttributeType> allSuperTypes = getAllSuperTypes( attributeType );
for ( String retId : retIdsSet )
{
- if ( retId.equals( SchemaConstants.ALL_USER_ATTRIBUTES ) || retId.equals( SchemaConstants.ALL_OPERATIONAL_ATTRIBUTES ) )
+ if ( retId.equals( SchemaConstants.ALL_USER_ATTRIBUTES )
+ || retId.equals( SchemaConstants.ALL_OPERATIONAL_ATTRIBUTES ) )
{
continue;
}
@@ -246,12 +246,12 @@ public class CollectiveAttributeIntercep
* If not all attributes or this collective attribute requested specifically
* then bypass the inclusion process.
*/
- if ( !( retIdsSet.contains( SchemaConstants.ALL_USER_ATTRIBUTES ) ||
- retIdsSet.contains( schemaManager.lookupAttributeTypeRegistry( attrId ).getOid() ) ) )
+ if ( !( retIdsSet.contains( SchemaConstants.ALL_USER_ATTRIBUTES ) || retIdsSet.contains( schemaManager
+ .lookupAttributeTypeRegistry( attrId ).getOid() ) ) )
{
continue;
}
-
+
EntryAttribute subentryColAttr = subentry.get( attrId );
EntryAttribute entryColAttr = entry.get( attrId );
@@ -260,7 +260,8 @@ public class CollectiveAttributeIntercep
*/
if ( entryColAttr == null )
{
- entryColAttr = new DefaultEntryAttribute( attrId, schemaManager.lookupAttributeTypeRegistry( attrId ) );
+ entryColAttr = new DefaultEntryAttribute( attrId, schemaManager
+ .lookupAttributeTypeRegistry( attrId ) );
entry.put( entryColAttr );
}
@@ -268,30 +269,30 @@ public class CollectiveAttributeIntercep
* Add all the collective attribute values in the subentry
* to the currently processed collective attribute in the entry.
*/
- for ( Value<?> subentryColVal:subentryColAttr )
+ for ( Value<?> subentryColVal : subentryColAttr )
{
entryColAttr.add( subentryColVal.getString() );
}
}
}
}
-
-
+
+
private Set<AttributeType> getAllSuperTypes( AttributeType id ) throws Exception
{
Set<AttributeType> allSuperTypes = new HashSet<AttributeType>();
AttributeType superType = id;
-
+
while ( superType != null )
{
superType = superType.getSuperior();
-
+
if ( superType != null )
{
allSuperTypes.add( superType );
}
}
-
+
return allSuperTypes;
}
@@ -300,18 +301,16 @@ public class CollectiveAttributeIntercep
// Interceptor Method Overrides
// ------------------------------------------------------------------------
-
- public Entry lookup( NextInterceptor nextInterceptor, LookupOperationContext opContext )
- throws Exception
+ public Entry lookup( NextInterceptor nextInterceptor, LookupOperationContext opContext ) throws Exception
{
Entry result = nextInterceptor.lookup( opContext );
-
+
if ( result == null )
{
return null;
}
-
- if ( ( opContext.getAttrsId() == null ) || ( opContext.getAttrsId().size() == 0 ) )
+
+ if ( ( opContext.getAttrsId() == null ) || ( opContext.getAttrsId().size() == 0 ) )
{
addCollectiveAttributes( opContext, result, SchemaConstants.ALL_USER_ATTRIBUTES_ARRAY );
}
@@ -324,7 +323,8 @@ public class CollectiveAttributeIntercep
}
- public EntryFilteringCursor list( NextInterceptor nextInterceptor, ListOperationContext opContext ) throws Exception
+ public EntryFilteringCursor list( NextInterceptor nextInterceptor, ListOperationContext opContext )
+ throws Exception
{
EntryFilteringCursor cursor = nextInterceptor.list( opContext );
cursor.addEntryFilter( SEARCH_FILTER );
@@ -332,30 +332,30 @@ public class CollectiveAttributeIntercep
}
- public EntryFilteringCursor search( NextInterceptor nextInterceptor, SearchOperationContext opContext ) throws Exception
+ public EntryFilteringCursor search( NextInterceptor nextInterceptor, SearchOperationContext opContext )
+ throws Exception
{
EntryFilteringCursor cursor = nextInterceptor.search( opContext );
cursor.addEntryFilter( SEARCH_FILTER );
return cursor;
}
-
+
// ------------------------------------------------------------------------
// Partial Schema Checking
// ------------------------------------------------------------------------
-
-
+
public void add( NextInterceptor next, AddOperationContext opContext ) throws Exception
{
collectiveAttributesSchemaChecker.checkAdd( opContext.getDn(), opContext.getEntry() );
-
+
next.add( opContext );
}
public void modify( NextInterceptor next, ModifyOperationContext opContext ) throws Exception
{
- collectiveAttributesSchemaChecker.checkModify( opContext,opContext.getDn(), opContext.getModItems() );
+ collectiveAttributesSchemaChecker.checkModify( opContext );
next.modify( opContext );
}
Modified: directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/collective/CollectiveAttributesSchemaChecker.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/collective/CollectiveAttributesSchemaChecker.java?rev=949506&r1=949505&r2=949506&view=diff
==============================================================================
--- directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/collective/CollectiveAttributesSchemaChecker.java (original)
+++ directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/collective/CollectiveAttributesSchemaChecker.java Sun May 30 12:04:20 2010
@@ -25,8 +25,7 @@ import java.util.Set;
import javax.naming.NamingException;
-import org.apache.directory.server.core.interceptor.context.OperationContext;
-import org.apache.directory.server.core.partition.ByPassConstants;
+import org.apache.directory.server.core.interceptor.context.ModifyOperationContext;
import org.apache.directory.server.core.partition.PartitionNexus;
import org.apache.directory.server.i18n.I18n;
import org.apache.directory.shared.ldap.constants.SchemaConstants;
@@ -53,19 +52,21 @@ import org.apache.directory.shared.ldap.
public class CollectiveAttributesSchemaChecker
{
private SchemaManager schemaManager = null;
-
+
+
public CollectiveAttributesSchemaChecker( PartitionNexus nexus, SchemaManager schemaManager )
{
this.schemaManager = schemaManager;
}
-
- /* package scope*/ void checkAdd( DN normName, Entry entry ) throws Exception
+
+
+ /* package scope*/void checkAdd( DN normName, Entry entry ) throws Exception
{
if ( entry.hasObjectClass( SchemaConstants.COLLECTIVE_ATTRIBUTE_SUBENTRY_OC ) )
{
return;
}
-
+
if ( containsAnyCollectiveAttributes( entry ) )
{
/*
@@ -74,39 +75,41 @@ public class CollectiveAttributesSchemaC
throw new LdapSchemaViolationException( ResultCodeEnum.OTHER, I18n.err( I18n.ERR_241 ) );
}
}
-
-
- public void checkModify( OperationContext opContext, DN normName, List<Modification> mods ) throws Exception
+
+
+ public void checkModify( ModifyOperationContext opContext ) throws Exception
{
- Entry originalEntry = opContext.lookup( normName, ByPassConstants.LOOKUP_BYPASS );
- Entry targetEntry = (Entry)SchemaUtils.getTargetEntry( mods, originalEntry );
-
+ List<Modification> mods = opContext.getModItems();
+ Entry originalEntry = opContext.getEntry();
+ Entry targetEntry = ( Entry ) SchemaUtils.getTargetEntry( mods, originalEntry );
+
EntryAttribute targetObjectClasses = targetEntry.get( SchemaConstants.OBJECT_CLASS_AT );
-
+
if ( targetObjectClasses == null )
{
// This is not allowed
- throw new LdapSchemaViolationException( ResultCodeEnum.OTHER, I18n.err( I18n.ERR_272_MODIFY_LEAVES_NO_STRUCTURAL_OBJECT_CLASS, originalEntry.getDn() ));
+ throw new LdapSchemaViolationException( ResultCodeEnum.OTHER, I18n.err(
+ I18n.ERR_272_MODIFY_LEAVES_NO_STRUCTURAL_OBJECT_CLASS, originalEntry.getDn() ) );
}
-
+
if ( targetObjectClasses.contains( SchemaConstants.COLLECTIVE_ATTRIBUTE_SUBENTRY_OC ) )
{
return;
}
-
+
if ( addsAnyCollectiveAttributes( mods ) )
{
/*
* TODO: Replace the Exception and the ResultCodeEnum with the correct ones.
*/
- throw new LdapSchemaViolationException( ResultCodeEnum.OTHER, I18n.err( I18n.ERR_242 ));
+ throw new LdapSchemaViolationException( ResultCodeEnum.OTHER, I18n.err( I18n.ERR_242 ) );
}
}
-
-
+
+
private boolean addsAnyCollectiveAttributes( List<Modification> mods ) throws LdapException
{
- for ( Modification mod:mods )
+ for ( Modification mod : mods )
{
// TODO: handle http://issues.apache.org/jira/browse/DIRSERVER-1198
EntryAttribute attr = mod.getAttribute();
@@ -114,42 +117,41 @@ public class CollectiveAttributesSchemaC
if ( attrType == null )
{
- if ( !schemaManager.getAttributeTypeRegistry().contains( attr.getUpId() ) )
+ try
{
- throw new LdapInvalidAttributeTypeException();
+ attrType = schemaManager.lookupAttributeTypeRegistry( attr.getUpId() );
}
- else
+ catch ( LdapException le )
{
- attrType = schemaManager.lookupAttributeTypeRegistry( attr.getUpId() );
+ throw new LdapInvalidAttributeTypeException();
}
}
-
-
+
ModificationOperation modOp = mod.getOperation();
-
- if ( ( ( modOp == ModificationOperation.ADD_ATTRIBUTE ) || ( modOp == ModificationOperation.REPLACE_ATTRIBUTE ) ) &&
- attrType.isCollective() )
+
+ if ( ( ( modOp == ModificationOperation.ADD_ATTRIBUTE ) || ( modOp == ModificationOperation.REPLACE_ATTRIBUTE ) )
+ && attrType.isCollective() )
{
return true;
}
}
-
+
return false;
}
-
-
+
+
private boolean containsAnyCollectiveAttributes( Entry entry ) throws NamingException
{
Set<AttributeType> attributeTypes = entry.getAttributeTypes();
-
- for ( AttributeType attributeType:attributeTypes )
+
+ for ( AttributeType attributeType : attributeTypes )
{
if ( attributeType.isCollective() )
{
return true;
}
}
-
+
return false;
}
}
Modified: directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/operational/OperationalAttributeInterceptor.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/operational/OperationalAttributeInterceptor.java?rev=949506&r1=949505&r2=949506&view=diff
==============================================================================
--- directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/operational/OperationalAttributeInterceptor.java (original)
+++ directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/operational/OperationalAttributeInterceptor.java Sun May 30 12:04:20 2010
@@ -66,7 +66,7 @@ import org.apache.directory.shared.ldap.
import org.apache.directory.shared.ldap.util.DateUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-
+
/**
* An {@link Interceptor} that adds or modifies the default attributes
@@ -86,14 +86,13 @@ public class OperationalAttributeInterce
private final EntryFilter DENORMALIZING_SEARCH_FILTER = new EntryFilter()
{
- public boolean accept( SearchingOperationContext operation, ClonedServerEntry serverEntry )
- throws Exception
+ public boolean accept( SearchingOperationContext operation, ClonedServerEntry serverEntry ) throws Exception
{
if ( operation.getSearchControls().getReturningAttributes() == null )
{
return true;
}
-
+
return filterDenormalized( serverEntry );
}
};
@@ -103,22 +102,24 @@ public class OperationalAttributeInterce
*/
private final EntryFilter SEARCH_FILTER = new EntryFilter()
{
- public boolean accept( SearchingOperationContext operation, ClonedServerEntry entry )
- throws Exception
+ public boolean accept( SearchingOperationContext operation, ClonedServerEntry entry ) throws Exception
{
- return operation.getSearchControls().getReturningAttributes() != null
+ return operation.getSearchControls().getReturningAttributes() != null
|| filterOperationalAttributes( entry );
}
};
-
private DirectoryService service;
+ /** The subschemasubentry DN */
private DN subschemaSubentryDn;
-
+
+ /** The admin DN */
+ private DN adminDn;
+
/** The schemaManager */
private SchemaManager schemaManager;
-
+
private static AttributeType MODIFIERS_NAME_ATTRIBUTE_TYPE;
private static AttributeType MODIFY_TIMESTAMP_ATTRIBUTE_TYPE;
@@ -137,13 +138,18 @@ public class OperationalAttributeInterce
schemaManager = directoryService.getSchemaManager();
// stuff for dealing with subentries (garbage for now)
- Value<?> subschemaSubentry = service.getPartitionNexus()
- .getRootDSE( null ).get( SchemaConstants.SUBSCHEMA_SUBENTRY_AT ).get();
+ Value<?> subschemaSubentry = service.getPartitionNexus().getRootDSE( null ).get(
+ SchemaConstants.SUBSCHEMA_SUBENTRY_AT ).get();
subschemaSubentryDn = new DN( subschemaSubentry.getString() );
subschemaSubentryDn.normalize( schemaManager.getNormalizerMapping() );
-
+
+ // Create the Admin DN
+ adminDn = new DN( ServerDNConstants.ADMIN_SYSTEM_DN );
+ adminDn.normalize( schemaManager.getNormalizerMapping() );
+
MODIFIERS_NAME_ATTRIBUTE_TYPE = schemaManager.lookupAttributeTypeRegistry( SchemaConstants.MODIFIERS_NAME_AT );
- MODIFY_TIMESTAMP_ATTRIBUTE_TYPE = schemaManager.lookupAttributeTypeRegistry( SchemaConstants.MODIFY_TIMESTAMP_AT );
+ MODIFY_TIMESTAMP_ATTRIBUTE_TYPE = schemaManager
+ .lookupAttributeTypeRegistry( SchemaConstants.MODIFY_TIMESTAMP_AT );
}
@@ -161,18 +167,17 @@ public class OperationalAttributeInterce
* - entryCSN
* - entryUUID
*/
- public void add( NextInterceptor nextInterceptor, AddOperationContext opContext )
- throws Exception
+ public void add( NextInterceptor nextInterceptor, AddOperationContext opContext ) throws Exception
{
String principal = getPrincipal().getName();
-
+
Entry entry = opContext.getEntry();
// If we are using replication, the below four OAs may already be present and we retain
// those values if the user is admin.
- boolean isAdmin = opContext.getSession().getAuthenticatedPrincipal().getName().equals(
+ boolean isAdmin = opContext.getSession().getAuthenticatedPrincipal().getName().equals(
ServerDNConstants.ADMIN_SYSTEM_DN_NORMALIZED );
-
+
if ( entry.containsAttribute( SchemaConstants.ENTRY_UUID_AT ) )
{
if ( !isAdmin )
@@ -187,13 +192,13 @@ public class OperationalAttributeInterce
{
entry.put( SchemaConstants.ENTRY_UUID_AT, UUID.randomUUID().toString() );
}
-
+
if ( entry.containsAttribute( SchemaConstants.ENTRY_CSN_AT ) )
{
if ( !isAdmin )
{
// Wrong !
- String message = I18n.err( I18n.ERR_30, SchemaConstants.ENTRY_CSN_AT );
+ String message = I18n.err( I18n.ERR_30, SchemaConstants.ENTRY_CSN_AT );
LOG.error( message );
throw new LdapNoPermissionException( message );
}
@@ -208,7 +213,7 @@ public class OperationalAttributeInterce
if ( !isAdmin )
{
// Wrong !
- String message = I18n.err( I18n.ERR_30, SchemaConstants.CREATORS_NAME_AT );
+ String message = I18n.err( I18n.ERR_30, SchemaConstants.CREATORS_NAME_AT );
LOG.error( message );
throw new LdapNoPermissionException( message );
}
@@ -223,7 +228,7 @@ public class OperationalAttributeInterce
if ( !isAdmin )
{
// Wrong !
- String message = I18n.err( I18n.ERR_30, SchemaConstants.CREATE_TIMESTAMP_AT );
+ String message = I18n.err( I18n.ERR_30, SchemaConstants.CREATE_TIMESTAMP_AT );
LOG.error( message );
throw new LdapNoPermissionException( message );
}
@@ -232,13 +237,15 @@ public class OperationalAttributeInterce
{
entry.put( SchemaConstants.CREATE_TIMESTAMP_AT, DateUtils.getGeneralizedTime() );
}
-
+
nextInterceptor.add( opContext );
}
- public void modify( NextInterceptor nextInterceptor, ModifyOperationContext opContext )
- throws Exception
+ /**
+ * {@inheritDoc}
+ */
+ public void modify( NextInterceptor nextInterceptor, ModifyOperationContext opContext ) throws Exception
{
// We must check that the user hasn't injected either the modifiersName
// or the modifyTimestamp operational attributes : they are not supposed to be
@@ -246,20 +253,19 @@ public class OperationalAttributeInterce
// If so, remove them, and if there are no more attributes, simply return.
// otherwise, inject those values into the list of modifications
List<Modification> mods = opContext.getModItems();
-
- boolean isAdmin = opContext.getSession().getAuthenticatedPrincipal().getName().equals(
- ServerDNConstants.ADMIN_SYSTEM_DN_NORMALIZED );
-
+
+ boolean isAdmin = opContext.getSession().getAuthenticatedPrincipal().getDN().equals( adminDn );
+
boolean modifierAtPresent = false;
boolean modifiedTimeAtPresent = false;
-
- for ( Modification modification: mods )
+
+ for ( Modification modification : mods )
{
AttributeType attributeType = modification.getAttribute().getAttributeType();
-
+
if ( attributeType.equals( MODIFIERS_NAME_ATTRIBUTE_TYPE ) )
{
- if( ! isAdmin )
+ if ( !isAdmin )
{
String message = I18n.err( I18n.ERR_31 );
LOG.error( message );
@@ -273,7 +279,7 @@ public class OperationalAttributeInterce
if ( attributeType.equals( MODIFY_TIMESTAMP_ATTRIBUTE_TYPE ) )
{
- if( ! isAdmin )
+ if ( !isAdmin )
{
String message = I18n.err( I18n.ERR_32 );
LOG.error( message );
@@ -286,25 +292,23 @@ public class OperationalAttributeInterce
}
}
- if ( ! modifierAtPresent )
+ if ( !modifierAtPresent )
{
// Inject the ModifiersName AT if it's not present
- EntryAttribute attribute = new DefaultEntryAttribute(
- MODIFIERS_NAME_ATTRIBUTE_TYPE,
- getPrincipal().getName());
+ EntryAttribute attribute = new DefaultEntryAttribute( MODIFIERS_NAME_ATTRIBUTE_TYPE, getPrincipal()
+ .getName() );
Modification modifiersName = new DefaultModification( ModificationOperation.REPLACE_ATTRIBUTE, attribute );
mods.add( modifiersName );
}
- if ( ! modifiedTimeAtPresent )
+ if ( !modifiedTimeAtPresent )
{
// Inject the ModifyTimestamp AT if it's not present
- EntryAttribute attribute = new DefaultEntryAttribute(
- MODIFY_TIMESTAMP_ATTRIBUTE_TYPE,
- DateUtils.getGeneralizedTime() );
-
+ EntryAttribute attribute = new DefaultEntryAttribute( MODIFY_TIMESTAMP_ATTRIBUTE_TYPE, DateUtils
+ .getGeneralizedTime() );
+
Modification timestamp = new DefaultModification( ModificationOperation.REPLACE_ATTRIBUTE, attribute );
mods.add( timestamp );
@@ -312,64 +316,26 @@ public class OperationalAttributeInterce
// Go down in the chain
nextInterceptor.modify( opContext );
-
- if ( opContext.getDn().getNormName().equals( subschemaSubentryDn.getNormName() ) )
- {
- return;
- }
-
- // -------------------------------------------------------------------
- // Add the operational attributes for the modifier first
- // -------------------------------------------------------------------
- // TODO : Why can't we add those elements on teh original modifications ???
- // Or into the context ?
- /*
- List<Modification> modItemList = new ArrayList<Modification>(2);
-
- AttributeType modifiersNameAt = atRegistry.lookup( SchemaConstants.MODIFIERS_NAME_AT );
- ServerAttribute attribute = new DefaultServerAttribute(
- modifiersNameAt,
- getPrincipal().getName());
-
- Modification modifiers = new ServerModification( ModificationOperation.REPLACE_ATTRIBUTE, attribute );
- modItemList.add( modifiers );
-
- AttributeType modifyTimeStampAt = atRegistry.lookup( SchemaConstants.MODIFY_TIMESTAMP_AT );
- attribute = new DefaultServerAttribute(
- modifyTimeStampAt,
- DateUtils.getGeneralizedTime() );
-
- Modification timestamp = new ServerModification( ModificationOperation.REPLACE_ATTRIBUTE, attribute );
- modItemList.add( timestamp );
-
- // -------------------------------------------------------------------
- // Make the modify() call happen
- // -------------------------------------------------------------------
- ModifyOperationContext newModify = new ModifyOperationContext( opContext.getSession(),
- opContext.getDn(), modItemList );
- newModify.setEntry( opContext.getAlteredEntry() );
- service.getPartitionNexus().modify( newModify );
- */
}
- public void rename( NextInterceptor nextInterceptor, RenameOperationContext opContext )
- throws Exception
+ public void rename( NextInterceptor nextInterceptor, RenameOperationContext opContext ) throws Exception
{
nextInterceptor.rename( opContext );
DN newDn = opContext.getNewDn();
-
+
// add operational attributes after call in case the operation fails
Entry serverEntry = new DefaultEntry( schemaManager, newDn );
serverEntry.put( SchemaConstants.MODIFIERS_NAME_AT, getPrincipal().getName() );
serverEntry.put( SchemaConstants.MODIFY_TIMESTAMP_AT, DateUtils.getGeneralizedTime() );
- List<Modification> items = ModifyOperationContext.createModItems( serverEntry, ModificationOperation.REPLACE_ATTRIBUTE );
+ List<Modification> items = ModifyOperationContext.createModItems( serverEntry,
+ ModificationOperation.REPLACE_ATTRIBUTE );
ModifyOperationContext newModify = new ModifyOperationContext( opContext.getSession(), newDn, items );
newModify.setEntry( opContext.getAlteredEntry() );
-
+
service.getPartitionNexus().modify( newModify );
}
@@ -383,12 +349,12 @@ public class OperationalAttributeInterce
serverEntry.put( SchemaConstants.MODIFIERS_NAME_AT, getPrincipal().getName() );
serverEntry.put( SchemaConstants.MODIFY_TIMESTAMP_AT, DateUtils.getGeneralizedTime() );
- List<Modification> items = ModifyOperationContext.createModItems( serverEntry, ModificationOperation.REPLACE_ATTRIBUTE );
+ List<Modification> items = ModifyOperationContext.createModItems( serverEntry,
+ ModificationOperation.REPLACE_ATTRIBUTE );
+ ModifyOperationContext newModify = new ModifyOperationContext( opContext.getSession(), opContext.getParent(),
+ items );
- ModifyOperationContext newModify =
- new ModifyOperationContext( opContext.getSession(), opContext.getParent(), items );
-
service.getPartitionNexus().modify( newModify );
}
@@ -403,11 +369,12 @@ public class OperationalAttributeInterce
serverEntry.put( SchemaConstants.MODIFIERS_NAME_AT, getPrincipal().getName() );
serverEntry.put( SchemaConstants.MODIFY_TIMESTAMP_AT, DateUtils.getGeneralizedTime() );
- List<Modification> items = ModifyOperationContext.createModItems( serverEntry, ModificationOperation.REPLACE_ATTRIBUTE );
+ List<Modification> items = ModifyOperationContext.createModItems( serverEntry,
+ ModificationOperation.REPLACE_ATTRIBUTE );
+
+ ModifyOperationContext newModify = new ModifyOperationContext( opContext.getSession(), opContext.getParent(),
+ items );
- ModifyOperationContext newModify =
- new ModifyOperationContext( opContext.getSession(), opContext.getParent(), items );
-
service.getPartitionNexus().modify( newModify );
}
@@ -415,7 +382,7 @@ public class OperationalAttributeInterce
public Entry lookup( NextInterceptor nextInterceptor, LookupOperationContext opContext ) throws Exception
{
Entry result = nextInterceptor.lookup( opContext );
-
+
if ( result == null )
{
return null;
@@ -429,13 +396,14 @@ public class OperationalAttributeInterce
{
filter( opContext, result );
}
-
+
denormalizeEntryOpAttrs( result );
return result;
}
- public EntryFilteringCursor list( NextInterceptor nextInterceptor, ListOperationContext opContext ) throws Exception
+ public EntryFilteringCursor list( NextInterceptor nextInterceptor, ListOperationContext opContext )
+ throws Exception
{
EntryFilteringCursor cursor = nextInterceptor.list( opContext );
cursor.addEntryFilter( SEARCH_FILTER );
@@ -443,18 +411,19 @@ public class OperationalAttributeInterce
}
- public EntryFilteringCursor search( NextInterceptor nextInterceptor, SearchOperationContext opContext ) throws Exception
+ public EntryFilteringCursor search( NextInterceptor nextInterceptor, SearchOperationContext opContext )
+ throws Exception
{
EntryFilteringCursor cursor = nextInterceptor.search( opContext );
-
- if ( opContext.isAllOperationalAttributes() ||
- ( opContext.getReturningAttributes() != null && ! opContext.getReturningAttributes().isEmpty() ) )
+
+ if ( opContext.isAllOperationalAttributes()
+ || ( opContext.getReturningAttributes() != null && !opContext.getReturningAttributes().isEmpty() ) )
{
if ( service.isDenormalizeOpAttrsEnabled() )
{
cursor.addEntryFilter( DENORMALIZING_SEARCH_FILTER );
}
-
+
return cursor;
}
@@ -476,20 +445,20 @@ public class OperationalAttributeInterce
Set<AttributeType> removedAttributes = new HashSet<AttributeType>();
// Build a list of attributeType to remove
- for ( AttributeType attributeType:attributes.getAttributeTypes() )
+ for ( AttributeType attributeType : attributes.getAttributeTypes() )
{
if ( attributeType.getUsage() != UsageEnum.USER_APPLICATIONS )
{
removedAttributes.add( attributeType );
}
}
-
+
// Now remove the attributes which are not USERs
- for ( AttributeType attributeType:removedAttributes )
+ for ( AttributeType attributeType : removedAttributes )
{
attributes.removeAttributes( attributeType );
}
-
+
return true;
}
@@ -498,7 +467,7 @@ public class OperationalAttributeInterce
{
DN dn = lookupContext.getDn();
List<String> ids = lookupContext.getAttrsId();
-
+
// still need to protect against returning op attrs when ids is null
if ( ids == null || ids.isEmpty() )
{
@@ -510,7 +479,7 @@ public class OperationalAttributeInterce
if ( dn.size() == 0 )
{
- for ( AttributeType attributeType:attributeTypes )
+ for ( AttributeType attributeType : attributeTypes )
{
if ( !ids.contains( attributeType.getOid() ) )
{
@@ -520,13 +489,13 @@ public class OperationalAttributeInterce
}
denormalizeEntryOpAttrs( entry );
-
+
// do nothing past here since this explicity specifies which
// attributes to include - backends will automatically populate
// with right set of attributes using ids array
}
-
+
public void denormalizeEntryOpAttrs( Entry entry ) throws Exception
{
if ( service.isDenormalizeOpAttrsEnabled() )
@@ -536,13 +505,13 @@ public class OperationalAttributeInterce
if ( attr != null )
{
DN creatorsName = new DN( attr.getString() );
-
+
attr.clear();
attr.add( denormalizeTypes( creatorsName ).getName() );
}
-
+
attr = entry.get( SchemaConstants.MODIFIERS_NAME_AT );
-
+
if ( attr != null )
{
DN modifiersName = new DN( attr.getString() );
@@ -552,7 +521,7 @@ public class OperationalAttributeInterce
}
attr = entry.get( ApacheSchemaConstants.SCHEMA_MODIFIERS_NAME_AT );
-
+
if ( attr != null )
{
DN modifiersName = new DN( attr.getString() );
@@ -563,7 +532,7 @@ public class OperationalAttributeInterce
}
}
-
+
/**
* Does not create a new DN but alters existing DN by using the first
* short name for an attributeType definition.
@@ -575,7 +544,7 @@ public class OperationalAttributeInterce
public DN denormalizeTypes( DN dn ) throws Exception
{
DN newDn = new DN();
-
+
for ( int ii = 0; ii < dn.size(); ii++ )
{
RDN rdn = dn.getRdn( ii );
@@ -587,29 +556,29 @@ public class OperationalAttributeInterce
else if ( rdn.size() == 1 )
{
String name = schemaManager.lookupAttributeTypeRegistry( rdn.getNormType() ).getName();
- String value = rdn.getAtav().getNormValue().getString();
+ String value = rdn.getAtav().getNormValue().getString();
newDn.add( new RDN( name, name, value, value ) );
continue;
}
// below we only process multi-valued rdns
StringBuffer buf = new StringBuffer();
-
- for ( Iterator<AVA> atavs = rdn.iterator(); atavs.hasNext(); /**/ )
+
+ for ( Iterator<AVA> atavs = rdn.iterator(); atavs.hasNext(); /**/)
{
AVA atav = atavs.next();
String type = schemaManager.lookupAttributeTypeRegistry( rdn.getNormType() ).getName();
buf.append( type ).append( '=' ).append( atav.getNormValue() );
-
+
if ( atavs.hasNext() )
{
buf.append( '+' );
}
}
-
- newDn.add( new RDN(buf.toString()) );
+
+ newDn.add( new RDN( buf.toString() ) );
}
-
+
return newDn;
}
Modified: directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/schema/SchemaInterceptor.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/schema/SchemaInterceptor.java?rev=949506&r1=949505&r2=949506&view=diff
==============================================================================
--- directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/schema/SchemaInterceptor.java (original)
+++ directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/schema/SchemaInterceptor.java Sun May 30 12:04:20 2010
@@ -171,6 +171,7 @@ public class SchemaInterceptor extends B
private static AttributeType MODIFIERS_NAME_ATTRIBUTE_TYPE;
private static AttributeType MODIFY_TIMESTAMP_ATTRIBUTE_TYPE;
+
/**
* Initialize the Schema Service
*
@@ -206,14 +207,15 @@ public class SchemaInterceptor extends B
schemaModificationAttributesDN.normalize( schemaManager.getNormalizerMapping() );
computeSuperiors();
-
+
// Initialize the schema manager
SchemaLoader loader = schemaService.getSchemaPartition().getSchemaManager().getLoader();
schemaSubEntryManager = new SchemaSubentryManager( schemaManager, loader );
MODIFIERS_NAME_ATTRIBUTE_TYPE = schemaManager.lookupAttributeTypeRegistry( SchemaConstants.MODIFIERS_NAME_AT );
- MODIFY_TIMESTAMP_ATTRIBUTE_TYPE = schemaManager.lookupAttributeTypeRegistry( SchemaConstants.MODIFY_TIMESTAMP_AT );
-
+ MODIFY_TIMESTAMP_ATTRIBUTE_TYPE = schemaManager
+ .lookupAttributeTypeRegistry( SchemaConstants.MODIFY_TIMESTAMP_AT );
+
if ( IS_DEBUG )
{
LOG.debug( "SchemaInterceptor Initialized !" );
@@ -366,7 +368,7 @@ public class SchemaInterceptor extends B
superiors.put( objectClass.getName(), ocSuperiors );
}
-
+
/**
* Compute all ObjectClasses superiors, MAY and MUST attributes.
@@ -753,8 +755,8 @@ public class SchemaInterceptor extends B
// call.setBypass( true );
Entry serverEntry = schemaService.getSubschemaEntry( searchCtls.getReturningAttributes() );
serverEntry.setDn( base );
- EntryFilteringCursor cursor = new BaseEntryFilteringCursor( new SingletonCursor<Entry>(
- serverEntry ), opContext );
+ EntryFilteringCursor cursor = new BaseEntryFilteringCursor(
+ new SingletonCursor<Entry>( serverEntry ), opContext );
return cursor;
}
}
@@ -768,8 +770,7 @@ public class SchemaInterceptor extends B
/**
* Search for an entry, using its DN. Binary attributes and ObjectClass attribute are removed.
*/
- public Entry lookup( NextInterceptor nextInterceptor, LookupOperationContext opContext )
- throws Exception
+ public Entry lookup( NextInterceptor nextInterceptor, LookupOperationContext opContext ) throws Exception
{
Entry result = nextInterceptor.lookup( opContext );
@@ -968,7 +969,7 @@ public class SchemaInterceptor extends B
DN oldDn = opContext.getDn();
RDN newRdn = opContext.getNewRdn();
boolean deleteOldRn = opContext.getDelOldDn();
- Entry entry = (Entry)opContext.getEntry().getClonedEntry();
+ Entry entry = ( Entry ) opContext.getEntry().getClonedEntry();
/*
* Note: This is only a consistency checks, to the ensure that all
@@ -989,7 +990,7 @@ public class SchemaInterceptor extends B
AttributeType type = schemaManager.lookupAttributeTypeRegistry( atav.getUpType() );
tmpEntry.remove( type, atav.getUpValue() );
}
-
+
for ( AVA atav : newRdn )
{
AttributeType type = schemaManager.lookupAttributeTypeRegistry( atav.getUpType() );
@@ -1027,7 +1028,7 @@ public class SchemaInterceptor extends B
private EntryAttribute createNewAttribute( EntryAttribute attribute )
{
AttributeType attributeType = attribute.getAttributeType();
-
+
// Create the new Attribute
EntryAttribute newAttribute = new DefaultEntryAttribute( attribute.getUpId(), attributeType );
@@ -1038,8 +1039,8 @@ public class SchemaInterceptor extends B
return newAttribute;
}
-
-
+
+
/**
* Modify an entry, applying the given modifications, and check if it's OK
*/
@@ -1050,38 +1051,38 @@ public class SchemaInterceptor extends B
// - The value is syntaxically correct
//
// While doing that, we will apply the modification to a copy of the current entry
- Entry tempEntry = (Entry)currentEntry.clone();
-
+ Entry tempEntry = ( Entry ) currentEntry.clone();
+
// Now, apply each mod one by one
- for ( Modification mod:mods )
+ for ( Modification mod : mods )
{
EntryAttribute attribute = mod.getAttribute();
AttributeType attributeType = attribute.getAttributeType();
-
+
// We don't allow modification of operational attributes
- if ( !attributeType.isUserModifiable() && ( !attributeType.equals( MODIFIERS_NAME_ATTRIBUTE_TYPE ) &&
- !attributeType.equals( MODIFY_TIMESTAMP_ATTRIBUTE_TYPE ) ) )
+ if ( !attributeType.isUserModifiable()
+ && ( !attributeType.equals( MODIFIERS_NAME_ATTRIBUTE_TYPE ) && !attributeType
+ .equals( MODIFY_TIMESTAMP_ATTRIBUTE_TYPE ) ) )
{
String msg = I18n.err( I18n.ERR_52, attributeType );
LOG.error( msg );
throw new LdapNoPermissionException( msg );
}
-
+
switch ( mod.getOperation() )
{
- case ADD_ATTRIBUTE :
+ case ADD_ATTRIBUTE:
// Check the syntax here
if ( !attribute.isValid() )
{
// The value syntax is incorrect : this is an error
String msg = I18n.err( I18n.ERR_53, attributeType );
LOG.error( msg );
- throw new LdapInvalidAttributeValueException( ResultCodeEnum.INVALID_ATTRIBUTE_SYNTAX,
- msg );
+ throw new LdapInvalidAttributeValueException( ResultCodeEnum.INVALID_ATTRIBUTE_SYNTAX, msg );
}
EntryAttribute currentAttribute = tempEntry.get( attributeType );
-
+
// First check if the added Attribute is already present in the entry
// If not, we have to create the entry
if ( currentAttribute != null )
@@ -1091,14 +1092,14 @@ public class SchemaInterceptor extends B
// At this point, we know that the attribute's syntax is correct
// We just have to check that the current attribute does not
// contains the value already
- if ( currentAttribute.contains( value ))
+ if ( currentAttribute.contains( value ) )
{
// This is an error.
String msg = I18n.err( I18n.ERR_54, value );
LOG.error( msg );
throw new LdapAttributeInUseException( msg );
}
-
+
currentAttribute.add( value );
}
}
@@ -1111,10 +1112,10 @@ public class SchemaInterceptor extends B
tempEntry.put( newAttribute );
}
-
+
break;
-
- case REMOVE_ATTRIBUTE :
+
+ case REMOVE_ATTRIBUTE:
// First check that the removed attribute exists
if ( !tempEntry.containsAttribute( attributeType ) )
{
@@ -1132,9 +1133,9 @@ public class SchemaInterceptor extends B
else
{
currentAttribute = tempEntry.get( attributeType );
-
+
// Now remove all the values
- for ( Value<?> value:attribute )
+ for ( Value<?> value : attribute )
{
// We can only remove existing values.
if ( currentAttribute.contains( value ) )
@@ -1149,7 +1150,6 @@ public class SchemaInterceptor extends B
}
}
-
// If the current attribute is empty, we have to remove
// it from the entry
if ( currentAttribute.size() == 0 )
@@ -1159,8 +1159,8 @@ public class SchemaInterceptor extends B
}
break;
-
- case REPLACE_ATTRIBUTE :
+
+ case REPLACE_ATTRIBUTE:
// The replaced attribute might not exist, it will then be a Add
// If there is no value, then the attribute will be removed
if ( !tempEntry.containsAttribute( attributeType ) )
@@ -1198,11 +1198,11 @@ public class SchemaInterceptor extends B
tempEntry.put( newAttribute );
}
}
-
+
break;
}
}
-
+
// Ok, we have created the modified entry. We now have to check that it's a valid
// entry wrt the schema.
// We have to check that :
@@ -1215,7 +1215,7 @@ public class SchemaInterceptor extends B
check( dn, tempEntry );
}
-
+
/**
* {@inheritDoc}
*/
@@ -1233,45 +1233,46 @@ public class SchemaInterceptor extends B
// - We have to update the registries
// - We have to modify the ou=schemaModifications entry
//
-
+
// First, check that the entry is either a subschemaSubentry or a schema element.
// This is the case if it's a child of cn=schema or ou=schema
DN dn = opContext.getDn();
-
+
// Gets the stored entry on which the modification must be applied
if ( dn.equals( subschemaSubentryDn ) )
{
LOG.debug( "Modification attempt on schema subentry {}: \n{}", dn, opContext );
-
+
// We can get rid of the modifiersName and modifyTimestamp, they are useless.
List<Modification> mods = opContext.getModItems();
- List<Modification> cleanMods = new ArrayList<Modification>();
-
- for ( Modification mod:mods )
- {
- AttributeType at = ( (DefaultModification)mod).getAttribute().getAttributeType();
-
- if ( !MODIFIERS_NAME_ATTRIBUTE_TYPE.equals( at ) && !MODIFY_TIMESTAMP_ATTRIBUTE_TYPE.equals( at ) )
+ List<Modification> cleanMods = new ArrayList<Modification>();
+
+ for ( Modification mod : mods )
+ {
+ AttributeType at = ( ( DefaultModification ) mod ).getAttribute().getAttributeType();
+
+ if ( !MODIFIERS_NAME_ATTRIBUTE_TYPE.equals( at ) && !MODIFY_TIMESTAMP_ATTRIBUTE_TYPE.equals( at ) )
{
cleanMods.add( mod );
}
}
-
+
opContext.setModItems( cleanMods );
-
+
// Now that the entry has been modified, update the SSSE
- schemaSubEntryManager.modifySchemaSubentry( opContext, opContext.hasRequestControl( CascadeControl.CONTROL_OID ) );
-
+ schemaSubEntryManager.modifySchemaSubentry( opContext, opContext
+ .hasRequestControl( CascadeControl.CONTROL_OID ) );
+
return;
}
Entry entry = opContext.getEntry();
List<Modification> modifications = opContext.getModItems();
checkModifyEntry( dn, entry, modifications );
-
+
next.modify( opContext );
}
-
+
/**
* Filter the attributes by removing the ones which are not allowed
@@ -1334,12 +1335,11 @@ public class SchemaInterceptor extends B
for ( Value<?> value : attribute )
{
attribute.add( value );
- binaries.add( new BinaryValue( attribute.getAttributeType(),
- value.getBytes() ) );
+ binaries.add( new BinaryValue( attribute.getAttributeType(), value.getBytes() ) );
}
attribute.clear();
-
+
for ( Value<?> value : binaries )
{
attribute.add( value );
@@ -1393,8 +1393,7 @@ public class SchemaInterceptor extends B
{
if ( !schemaManager.getAttributeTypeRegistry().contains( attributeType.getName() ) )
{
- throw new LdapInvalidAttributeTypeException( I18n.err( I18n.ERR_275,
- attributeType.getName() ) );
+ throw new LdapInvalidAttributeTypeException( I18n.err( I18n.ERR_275, attributeType.getName() ) );
}
}
@@ -1442,8 +1441,8 @@ public class SchemaInterceptor extends B
// Now check the syntaxes
assertSyntaxes( entry );
-
- assertRdn ( dn, entry );
+
+ assertRdn( dn, entry );
}
@@ -1451,50 +1450,50 @@ public class SchemaInterceptor extends B
{
// handle the m-supObjectClass meta attribute
EntryAttribute supOC = entry.get( MetaSchemaConstants.M_SUP_OBJECT_CLASS_AT );
-
+
if ( supOC != null )
{
ObjectClassTypeEnum ocType = ObjectClassTypeEnum.STRUCTURAL;
-
+
if ( entry.get( MetaSchemaConstants.M_TYPE_OBJECT_CLASS_AT ) != null )
{
String type = entry.get( MetaSchemaConstants.M_TYPE_OBJECT_CLASS_AT ).getString();
ocType = ObjectClassTypeEnum.getClassType( type );
}
-
+
// First check that the inheritence scheme is correct.
// 1) If the ocType is ABSTRACT, it should not have any other SUP not ABSTRACT
- for ( Value<?> sup:supOC )
+ for ( Value<?> sup : supOC )
{
try
{
String supName = sup.getString();
-
+
ObjectClass superior = schemaManager.getObjectClassRegistry().lookup( supName );
switch ( ocType )
{
- case ABSTRACT :
+ case ABSTRACT:
if ( !superior.isAbstract() )
{
String message = I18n.err( I18n.ERR_57 );
LOG.error( message );
throw new LdapSchemaViolationException( ResultCodeEnum.OBJECT_CLASS_VIOLATION, message );
}
-
+
break;
-
- case AUXILIARY :
- if ( !superior.isAbstract() && ! superior.isAuxiliary() )
+
+ case AUXILIARY:
+ if ( !superior.isAbstract() && !superior.isAuxiliary() )
{
String message = I18n.err( I18n.ERR_58 );
LOG.error( message );
throw new LdapSchemaViolationException( ResultCodeEnum.OBJECT_CLASS_VIOLATION, message );
}
-
+
break;
- case STRUCTURAL :
+ case STRUCTURAL:
break;
}
}
@@ -1545,7 +1544,7 @@ public class SchemaInterceptor extends B
// Update the structures now that the schema element has been added
Schema schema = schemaManager.getLoadedSchema( schemaName );
-
+
if ( ( schema != null ) && schema.isEnabled() )
{
String ocName = entry.get( MetaSchemaConstants.M_NAME_AT ).getString();
@@ -1555,7 +1554,7 @@ public class SchemaInterceptor extends B
}
else if ( entry.contains( SchemaConstants.OBJECT_CLASS_AT, SchemaConstants.META_ATTRIBUTE_TYPE_OC ) )
{
-
+
// This is an AttributeType addition
next.add( addContext );
}
@@ -1563,22 +1562,22 @@ public class SchemaInterceptor extends B
{
next.add( addContext );
}
-
+
}
else
{
next.add( addContext );
}
}
-
-
+
+
private String getSchemaName( DN dn ) throws LdapException
{
if ( dn.size() < 2 )
{
throw new LdapException( I18n.err( I18n.ERR_276 ) );
}
-
+
RDN rdn = dn.getRdn( 1 );
return ( String ) rdn.getNormValue();
}
@@ -1608,11 +1607,11 @@ public class SchemaInterceptor extends B
AttributeType attributeType = attribute.getAttributeType();
- if ( !attributeType.isCollective() && ( attributeType.getUsage() == UsageEnum.USER_APPLICATIONS ) &&
- !allowed.contains( attrOid ) )
+ if ( !attributeType.isCollective() && ( attributeType.getUsage() == UsageEnum.USER_APPLICATIONS )
+ && !allowed.contains( attrOid ) )
{
- throw new LdapSchemaViolationException( ResultCodeEnum.OBJECT_CLASS_VIOLATION, I18n.err( I18n.ERR_277, attribute.getUpId(),
- dn.getName() ) );
+ throw new LdapSchemaViolationException( ResultCodeEnum.OBJECT_CLASS_VIOLATION, I18n.err( I18n.ERR_277,
+ attribute.getUpId(), dn.getName() ) );
}
}
}
@@ -1633,12 +1632,13 @@ public class SchemaInterceptor extends B
/**
* Checks to see numbers of values of attributes conforms to the schema
*/
- private void assertNumberOfAttributeValuesValid( EntryAttribute attribute ) throws LdapInvalidAttributeValueException
+ private void assertNumberOfAttributeValuesValid( EntryAttribute attribute )
+ throws LdapInvalidAttributeValueException
{
if ( attribute.size() > 1 && attribute.getAttributeType().isSingleValued() )
{
- throw new LdapInvalidAttributeValueException( ResultCodeEnum.CONSTRAINT_VIOLATION,
- I18n.err( I18n.ERR_278, attribute.getUpId() ) );
+ throw new LdapInvalidAttributeValueException( ResultCodeEnum.CONSTRAINT_VIOLATION, I18n.err( I18n.ERR_278,
+ attribute.getUpId() ) );
}
}
@@ -1655,8 +1655,8 @@ public class SchemaInterceptor extends B
if ( must.size() != 0 )
{
- throw new LdapSchemaViolationException( ResultCodeEnum.OBJECT_CLASS_VIOLATION,
- I18n.err( I18n.ERR_279, must, dn.getName() ) );
+ throw new LdapSchemaViolationException( ResultCodeEnum.OBJECT_CLASS_VIOLATION, I18n.err( I18n.ERR_279,
+ must, dn.getName() ) );
}
}
@@ -1710,7 +1710,7 @@ public class SchemaInterceptor extends B
Set<ObjectClass> remaining = new HashSet<ObjectClass>( structuralObjectClasses.size() );
remaining.addAll( structuralObjectClasses );
-
+
for ( ObjectClass oc : structuralObjectClasses )
{
if ( oc.getSuperiors() != null )
@@ -1761,7 +1761,7 @@ public class SchemaInterceptor extends B
// No need to validate something which is already ok
continue;
}
-
+
try
{
syntaxChecker.assertSyntax( value.get() );
@@ -1776,14 +1776,14 @@ public class SchemaInterceptor extends B
}
}
}
-
-
+
+
private void assertRdn( DN dn, Entry entry ) throws Exception
{
for ( AVA atav : dn.getRdn() )
{
EntryAttribute attribute = entry.get( atav.getNormType() );
-
+
if ( ( attribute == null ) || ( !attribute.contains( atav.getNormValue() ) ) )
{
String message = I18n.err( I18n.ERR_62, dn, atav.getUpType() );
Modified: directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/subtree/SubentryInterceptor.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/subtree/SubentryInterceptor.java?rev=949506&r1=949505&r2=949506&view=diff
==============================================================================
--- directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/subtree/SubentryInterceptor.java (original)
+++ directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/subtree/SubentryInterceptor.java Sun May 30 12:04:20 2010
@@ -1029,31 +1029,34 @@ public class SubentryInterceptor extends
}
+ /**
+ * {@inheritDoc}
+ */
public void modify( NextInterceptor next, ModifyOperationContext opContext ) throws Exception
{
- DN name = opContext.getDn();
+ DN dn = opContext.getDn();
List<Modification> mods = opContext.getModItems();
- Entry entry = opContext.lookup( name, ByPassConstants.LOOKUP_BYPASS );
- // Entry entry = opContext.getEntry();
+ Entry entry = opContext.getEntry();
- Entry oldEntry = ( Entry ) entry.clone();
EntryAttribute objectClasses = entry.get( objectClassType );
boolean isSubtreeSpecificationModification = false;
Modification subtreeMod = null;
+ // Find the subtreeSpecification
for ( Modification mod : mods )
{
if ( SchemaConstants.SUBTREE_SPECIFICATION_AT.equalsIgnoreCase( mod.getAttribute().getId() ) )
{
isSubtreeSpecificationModification = true;
subtreeMod = mod;
+ break;
}
}
if ( objectClasses.contains( SchemaConstants.SUBENTRY_OC ) && isSubtreeSpecificationModification )
{
- SubtreeSpecification ssOld = subentryCache.removeSubentry( name.getNormName() ).getSubtreeSpecification();
+ SubtreeSpecification ssOld = subentryCache.removeSubentry( dn.getNormName() ).getSubtreeSpecification();
SubtreeSpecification ssNew;
try
@@ -1067,11 +1070,11 @@ public class SubentryInterceptor extends
throw new LdapInvalidAttributeValueException( ResultCodeEnum.INVALID_ATTRIBUTE_SYNTAX, msg );
}
- subentryCache.setSubentry( name.getNormName(), ssNew, getSubentryTypes( entry, mods ) );
+ subentryCache.setSubentry( dn.getNormName(), ssNew, getSubentryTypes( entry, mods ) );
next.modify( opContext );
// search for all entries selected by the old SS and remove references to subentry
- DN apName = ( DN ) name.clone();
+ DN apName = ( DN ) dn.clone();
apName.remove( apName.size() - 1 );
DN oldBaseDn = ( DN ) apName.clone();
oldBaseDn.addAll( ssOld.getBase() );
@@ -1091,19 +1094,19 @@ public class SubentryInterceptor extends
while ( subentries.next() )
{
Entry candidate = subentries.get();
- DN dn = candidate.getDn();
- dn.normalize( schemaManager.getNormalizerMapping() );
+ DN candidateDn = candidate.getDn();
+ candidateDn.normalize( schemaManager.getNormalizerMapping() );
- if ( evaluator.evaluate( ssOld, apName, dn, candidate ) )
+ if ( evaluator.evaluate( ssOld, apName, candidateDn, candidate ) )
{
- nexus.modify( new ModifyOperationContext( opContext.getSession(), dn, getOperationalModsForRemove(
- name, candidate ) ) );
+ nexus.modify( new ModifyOperationContext( opContext.getSession(), candidateDn,
+ getOperationalModsForRemove( dn, candidate ) ) );
}
}
// search for all selected entries by the new SS and add references to subentry
- Subentry subentry = subentryCache.getSubentry( name.getNormName() );
- Entry operational = getSubentryOperatationalAttributes( name, subentry );
+ Subentry subentry = subentryCache.getSubentry( dn.getNormName() );
+ Entry operational = getSubentryOperatationalAttributes( dn, subentry );
DN newBaseDn = ( DN ) apName.clone();
newBaseDn.addAll( ssNew.getBase() );
@@ -1115,13 +1118,13 @@ public class SubentryInterceptor extends
while ( subentries.next() )
{
Entry candidate = subentries.get();
- DN dn = candidate.getDn();
- dn.normalize( schemaManager.getNormalizerMapping() );
+ DN candidateDn = candidate.getDn();
+ candidateDn.normalize( schemaManager.getNormalizerMapping() );
- if ( evaluator.evaluate( ssNew, apName, dn, candidate ) )
+ if ( evaluator.evaluate( ssNew, apName, candidateDn, candidate ) )
{
- nexus.modify( new ModifyOperationContext( opContext.getSession(), dn, getOperationalModsForAdd(
- candidate, operational ) ) );
+ nexus.modify( new ModifyOperationContext( opContext.getSession(), candidateDn,
+ getOperationalModsForAdd( candidate, operational ) ) );
}
}
}
@@ -1131,13 +1134,13 @@ public class SubentryInterceptor extends
if ( !objectClasses.contains( SchemaConstants.SUBENTRY_OC ) )
{
- Entry newEntry = opContext.lookup( name, ByPassConstants.LOOKUP_BYPASS );
+ Entry newEntry = opContext.lookup( dn, ByPassConstants.LOOKUP_BYPASS );
- List<Modification> subentriesOpAttrMods = getModsOnEntryModification( name, oldEntry, newEntry );
+ List<Modification> subentriesOpAttrMods = getModsOnEntryModification( dn, entry, newEntry );
if ( subentriesOpAttrMods.size() > 0 )
{
- nexus.modify( new ModifyOperationContext( opContext.getSession(), name, subentriesOpAttrMods ) );
+ nexus.modify( new ModifyOperationContext( opContext.getSession(), dn, subentriesOpAttrMods ) );
}
}
}