You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by go...@apache.org on 2012/01/07 17:50:36 UTC
svn commit: r1228661 -
/directory/apacheds/branches/apacheds-osgi/component-hub/src/main/java/org/apache/directory/server/component/hub/ComponentSchemaManager.java
Author: gokturk
Date: Sat Jan 7 16:50:36 2012
New Revision: 1228661
URL: http://svn.apache.org/viewvc?rev=1228661&view=rev
Log:
* ComponentSchemaManager's problems while accessing SchemaPartition directly has been resolved. It can do its job successfully now.
TODO: Using same principles, making ConfigurationManager to access config partition directly without problem.
Modified:
directory/apacheds/branches/apacheds-osgi/component-hub/src/main/java/org/apache/directory/server/component/hub/ComponentSchemaManager.java
Modified: directory/apacheds/branches/apacheds-osgi/component-hub/src/main/java/org/apache/directory/server/component/hub/ComponentSchemaManager.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/apacheds-osgi/component-hub/src/main/java/org/apache/directory/server/component/hub/ComponentSchemaManager.java?rev=1228661&r1=1228660&r2=1228661&view=diff
==============================================================================
--- directory/apacheds/branches/apacheds-osgi/component-hub/src/main/java/org/apache/directory/server/component/hub/ComponentSchemaManager.java (original)
+++ directory/apacheds/branches/apacheds-osgi/component-hub/src/main/java/org/apache/directory/server/component/hub/ComponentSchemaManager.java Sat Jan 7 16:50:36 2012
@@ -21,10 +21,13 @@ package org.apache.directory.server.comp
import java.io.InputStream;
+import java.util.ArrayList;
import java.util.Dictionary;
import java.util.Hashtable;
import java.util.List;
+import javax.naming.directory.SearchControls;
+
import org.apache.directory.server.component.ADSComponent;
import org.apache.directory.server.component.schema.ADSComponentSchema;
import org.apache.directory.server.component.schema.ComponentOIDGenerator;
@@ -33,18 +36,27 @@ import org.apache.directory.server.compo
import org.apache.directory.server.component.utilities.ADSSchemaConstants;
import org.apache.directory.server.component.utilities.EntryNormalizer;
+import org.apache.directory.server.core.api.CoreSession;
import org.apache.directory.server.core.api.filtering.EntryFilteringCursor;
import org.apache.directory.server.core.api.interceptor.context.AddOperationContext;
import org.apache.directory.server.core.api.interceptor.context.LookupOperationContext;
import org.apache.directory.server.core.api.interceptor.context.SearchOperationContext;
import org.apache.directory.server.core.api.schema.SchemaPartition;
+import org.apache.directory.server.xdbm.IndexCursor;
import org.apache.directory.shared.ldap.model.constants.SchemaConstants;
import org.apache.directory.shared.ldap.model.entry.DefaultEntry;
import org.apache.directory.shared.ldap.model.entry.Entry;
+import org.apache.directory.shared.ldap.model.entry.StringValue;
import org.apache.directory.shared.ldap.model.entry.Value;
import org.apache.directory.shared.ldap.model.exception.LdapException;
+import org.apache.directory.shared.ldap.model.filter.AssertionType;
+import org.apache.directory.shared.ldap.model.filter.EqualityNode;
+import org.apache.directory.shared.ldap.model.filter.ExprNode;
+import org.apache.directory.shared.ldap.model.filter.FilterVisitor;
+import org.apache.directory.shared.ldap.model.filter.PresenceNode;
import org.apache.directory.shared.ldap.model.ldif.LdifEntry;
import org.apache.directory.shared.ldap.model.ldif.LdifReader;
+import org.apache.directory.shared.ldap.model.message.AliasDerefMode;
import org.apache.directory.shared.ldap.model.message.SearchScope;
import org.apache.directory.shared.ldap.model.name.Ava;
import org.apache.directory.shared.ldap.model.name.Dn;
@@ -161,7 +173,9 @@ public class ComponentSchemaManager
Entry normalizedEntry = EntryNormalizer.normalizeEntry( le.getEntry() );
AddOperationContext addContext = new AddOperationContext( null, normalizedEntry );
- schemaPartition.add( addContext );
+ // Add schema element to registries and underlying partition.
+ schemaPartition.getRegistrySynchronizerAdaptor().add( addContext );
+ schemaPartition.getWrappedPartition().add( addContext );
}
}
@@ -177,7 +191,8 @@ public class ComponentSchemaManager
LookupOperationContext luc = new LookupOperationContext( null );
try
{
- luc.setDn( new Dn( "cn", ADSSchemaConstants.ADS_COMPONENT_BASE, SchemaConstants.OU_SCHEMA ) );
+ luc.setDn( EntryNormalizer.normalizeDn( new Dn( "cn", ADSSchemaConstants.ADS_COMPONENT_BASE,
+ SchemaConstants.OU_SCHEMA ) ) );
Entry e = schemaPartition.lookup( luc );
if ( e != null )
@@ -210,10 +225,14 @@ public class ComponentSchemaManager
{
Entry normalizedEntry = EntryNormalizer.normalizeEntry( le.getEntry() );
-
+
AddOperationContext addContext = new AddOperationContext( null, normalizedEntry );
- schemaPartition.add( addContext );
+ // Add schema element to registries and underlying partition.
+ schemaPartition.getRegistrySynchronizerAdaptor().add( addContext );
+ schemaPartition.getWrappedPartition().add( addContext );
+
+ //schemaPartition.add( addContext );
}
}
catch ( LdapException e )
@@ -235,27 +254,36 @@ public class ComponentSchemaManager
*/
private void feedOIDGenerator()
{
+
try
{
- Dn componentOCDn = new Dn( "m-oid", ADSSchemaConstants.ADS_COMPONENT, SchemaConstants.OBJECT_CLASSES_PATH,
- "cn",
- ADSSchemaConstants.ADS_COMPONENT_BASE, SchemaConstants.OU_SCHEMA );
+ Dn componentOCDn = EntryNormalizer.normalizeDn(
+ new Dn( "m-oid", ADSSchemaConstants.ADS_COMPONENT_OID,
+ SchemaConstants.OBJECT_CLASSES_PATH,
+ "cn",
+ ADSSchemaConstants.ADS_COMPONENT_BASE, SchemaConstants.OU_SCHEMA ) );
SearchOperationContext soc = new SearchOperationContext( null );
soc.setDn( componentOCDn );
- soc.setScope( SearchScope.ONELEVEL );
+ soc.setScope( SearchScope.OBJECT );
+ AttributeType moidat = schemaPartition.getSchemaManager().getAttributeType( "m-oid" );
+ soc.setFilter( new PresenceNode( moidat ) );
+
+ // Set to all, because individual names will require CoreSession in OperationContext
soc.setReturningAttributes( new String[]
- { "m-oid" } );
+ { SchemaConstants.NO_ATTRIBUTE } );
EntryFilteringCursor cursor = schemaPartition.search( soc );
- int baseOIDLen = ADSSchemaConstants.ADS_COMPONENT_BASE.length();
+ int baseOIDLen = ADSSchemaConstants.ADS_COMPONENT_BASE_OID.length();
int maxComponentID = 0;
while ( cursor.next() )
{
- String oid = cursor.get().get( "m-oid" ).get().getString();
- String _componentID = oid.substring( baseOIDLen );
+ Entry currentEntry = cursor.get();
+ String oid = currentEntry.getDn().getRdn().getNormValue().getString();
+
+ String _componentID = oid.substring( baseOIDLen + 1 );
_componentID = _componentID.substring( 0, _componentID.indexOf( '.' ) );
int componentID = Integer.parseInt( _componentID );