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/08/04 19:13:47 UTC
svn commit: r982332 [3/5] - in /directory:
apacheds/trunk/core-api/src/main/java/org/apache/directory/server/core/interceptor/context/
apacheds/trunk/core-api/src/main/java/org/apache/directory/server/core/schema/
apacheds/trunk/core-api/src/main/java/...
Modified: directory/apacheds/trunk/ldif-partition/src/test/java/org/apache/directory/server/core/partition/LdifPartitionTest.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/ldif-partition/src/test/java/org/apache/directory/server/core/partition/LdifPartitionTest.java?rev=982332&r1=982331&r2=982332&view=diff
==============================================================================
--- directory/apacheds/trunk/ldif-partition/src/test/java/org/apache/directory/server/core/partition/LdifPartitionTest.java (original)
+++ directory/apacheds/trunk/ldif-partition/src/test/java/org/apache/directory/server/core/partition/LdifPartitionTest.java Wed Aug 4 17:13:46 2010
@@ -6,16 +6,16 @@
* to you 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.
- *
+ * under the License.
+ *
*/
package org.apache.directory.server.core.partition;
@@ -113,18 +113,18 @@ public class LdifPartitionTest
}
defaultCSNFactory = new CsnFactory( 0 );
-
+
wkdir = File.createTempFile( LdifPartitionTest.class.getSimpleName(), "db" );
wkdir.delete();
wkdir = new File( wkdir.getParentFile(), LdifPartitionTest.class.getSimpleName() );
FileUtils.deleteDirectory( wkdir );
}
-
+
@Before
public void createStore() throws Exception
{
- String contextEntry =
+ String contextEntry =
"dn: ou=test, ou=system\n" +
"objectclass: organizationalUnit\n" +
"objectclass: top\n" +
@@ -143,7 +143,7 @@ public class LdifPartitionTest
partition.setSuffix( new DN( "ou=test,ou=system" ) );
partition.setSchemaManager( schemaManager );
partition.setWorkingDirectory( wkdir.getAbsolutePath() );
-
+
partition.setContextEntry( contextEntry );
partition.initialize();
@@ -158,25 +158,25 @@ public class LdifPartitionTest
FileUtils.deleteDirectory( wkdir );
}
-
+
private ClonedServerEntry createEntry( String dn ) throws Exception
{
Entry entry = new DefaultEntry( schemaManager );
entry.setDn( new DN( dn, schemaManager ) );
entry.put( SchemaConstants.ENTRY_CSN_AT, defaultCSNFactory.newInstance().toString() );
entry.add( SchemaConstants.ENTRY_UUID_AT, UUID.randomUUID().toString() );
-
+
ClonedServerEntry clonedEntry = new ClonedServerEntry( entry );
return clonedEntry;
}
-
-
+
+
//-------------------------------------------------------------------------
// Partition.add() tests
//-------------------------------------------------------------------------
/**
- * Test some entries creation
+ * Test some entries creation
*
* @throws Exception
*/
@@ -186,28 +186,28 @@ public class LdifPartitionTest
DN adminDn = new DN( "uid=admin,ou=system", schemaManager );
CoreSession session = new MockCoreSession( new LdapPrincipal( adminDn, AuthenticationLevel.STRONG ), new MockDirectoryService( 1 ) );
AddOperationContext addCtx = new AddOperationContext( session );
-
+
ClonedServerEntry entry1 = createEntry( "dc=test,ou=test,ou=system" );
entry1.put( "ObjectClass", "top", "domain" );
entry1.put( "dc", "test" );
addCtx.setEntry( entry1 );
-
+
partition.add( addCtx );
ClonedServerEntry entry2 = createEntry( "dc=test,dc=test,ou=test,ou=system" );
entry2.put( "ObjectClass", "top", "domain" );
entry2.put( "dc", "test" );
addCtx.setEntry( entry2 );
-
+
partition.add( addCtx );
-
+
ClonedServerEntry entryMvrdn = createEntry( "dc=mvrdn+objectClass=domain,dc=test,ou=test,ou=system" );
entryMvrdn.put( "ObjectClass", "top", "domain" );
entryMvrdn.put( "dc", "mvrdn" );
addCtx.setEntry( entryMvrdn );
-
+
partition.add( addCtx );
-
+
assertTrue( new File( wkdir, "ou=test,ou=system" ).exists() );
assertTrue( new File( wkdir, "ou=test,ou=system.ldif" ).exists() );
assertTrue( new File( wkdir, "ou=test,ou=system/dc=test" ).exists() );
@@ -218,9 +218,9 @@ public class LdifPartitionTest
assertTrue( new File( wkdir, "ou=test,ou=system/dc=test/dc=mvrdn+objectclass=domain.ldif" ).exists() );
}
-
+
/**
- * Test that we can't add an existing entry
+ * Test that we can't add an existing entry
*
* @throws Exception
*/
@@ -230,26 +230,26 @@ public class LdifPartitionTest
DN adminDn = new DN( "uid=admin,ou=system", schemaManager );
CoreSession session = new MockCoreSession( new LdapPrincipal( adminDn, AuthenticationLevel.STRONG ), new MockDirectoryService( 1 ) );
AddOperationContext addCtx = new AddOperationContext( session );
-
+
ClonedServerEntry entry1 = createEntry( "dc=test,ou=test,ou=system" );
entry1.put( "ObjectClass", "top", "domain" );
entry1.put( "dc", "test" );
addCtx.setEntry( entry1 );
-
+
partition.add( addCtx );
ClonedServerEntry entry2 = createEntry( "dc=test,dc=test,ou=test,ou=system" );
entry2.put( "ObjectClass", "top", "domain" );
entry2.put( "dc", "test" );
addCtx.setEntry( entry2 );
-
+
partition.add( addCtx );
-
+
ClonedServerEntry entry3 = createEntry( "dc=test,dc=test,ou=test,ou=system" );
entry3.put( "ObjectClass", "top", "domain" );
entry3.put( "dc", "test" );
addCtx.setEntry( entry3 );
-
+
try
{
partition.add( addCtx );
@@ -273,7 +273,7 @@ public class LdifPartitionTest
// Partition.delete() tests
//-------------------------------------------------------------------------
/**
- * Test that we can delete an existing entry
+ * Test that we can delete an existing entry
*
* @throws Exception
*/
@@ -283,41 +283,41 @@ public class LdifPartitionTest
DN adminDn = new DN( "uid=admin,ou=system", schemaManager );
CoreSession session = new MockCoreSession( new LdapPrincipal( adminDn, AuthenticationLevel.STRONG ), new MockDirectoryService( 1 ) );
AddOperationContext addCtx = new AddOperationContext( session );
-
+
ClonedServerEntry entry1 = createEntry( "dc=test,ou=test,ou=system" );
entry1.put( "ObjectClass", "top", "domain" );
entry1.put( "dc", "test" );
addCtx.setEntry( entry1 );
-
+
partition.add( addCtx );
ClonedServerEntry entry2 = createEntry( "dc=test1,dc=test,ou=test,ou=system" );
entry2.put( "ObjectClass", "top", "domain" );
entry2.put( "dc", "test1" );
addCtx.setEntry( entry2 );
-
+
partition.add( addCtx );
-
+
ClonedServerEntry entry3 = createEntry( "dc=test2,dc=test,ou=test,ou=system" );
entry3.put( "ObjectClass", "top", "domain" );
entry3.put( "dc", "test2" );
addCtx.setEntry( entry3 );
-
+
partition.add( addCtx );
ClonedServerEntry entryMvrdn = createEntry( "dc=mvrdn+objectClass=domain,dc=test,ou=test,ou=system" );
entryMvrdn.put( "ObjectClass", "top", "domain" );
entryMvrdn.put( "dc", "mvrdn" );
addCtx.setEntry( entryMvrdn );
-
+
partition.add( addCtx );
-
+
DeleteOperationContext delCtx = new DeleteOperationContext( session );
DN dn = new DN( "dc=test1,dc=test,ou=test,ou=system", schemaManager );
-
+
delCtx.setDn( dn );
-
+
partition.delete( delCtx );
assertTrue( new File( wkdir, "ou=test,ou=system" ).exists() );
@@ -332,15 +332,15 @@ public class LdifPartitionTest
assertTrue( new File( wkdir, "ou=test,ou=system/dc=test/dc=mvrdn+objectclass=domain.ldif" ).exists() );
dn = new DN( "dc=test2,dc=test,ou=test,ou=system", schemaManager );
-
+
delCtx.setDn( dn );
-
+
partition.delete( delCtx );
-
+
dn = new DN( "dc=mvrdn+objectClass=domain,dc=test,ou=test,ou=system", schemaManager );
-
+
delCtx.setDn( dn );
-
+
partition.delete( delCtx );
assertTrue( new File( wkdir, "ou=test,ou=system" ).exists() );
@@ -356,7 +356,7 @@ public class LdifPartitionTest
// Partition.delete() tests
//-------------------------------------------------------------------------
/**
- * Test that we can search for an existing entry
+ * Test that we can search for an existing entry
*
* @throws Exception
*/
@@ -366,32 +366,32 @@ public class LdifPartitionTest
DN adminDn = new DN( "uid=admin,ou=system", schemaManager );
CoreSession session = new MockCoreSession( new LdapPrincipal( adminDn, AuthenticationLevel.STRONG ), new MockDirectoryService( 1 ) );
AddOperationContext addCtx = new AddOperationContext( session );
-
+
ClonedServerEntry entry1 = createEntry( "dc=test,ou=test,ou=system" );
entry1.put( "ObjectClass", "top", "domain" );
entry1.put( "dc", "test" );
addCtx.setEntry( entry1 );
-
+
partition.add( addCtx );
ClonedServerEntry entry2 = createEntry( "dc=test1,dc=test,ou=test,ou=system" );
entry2.put( "ObjectClass", "top", "domain" );
entry2.put( "dc", "test1" );
addCtx.setEntry( entry2 );
-
+
partition.add( addCtx );
-
+
ClonedServerEntry entry3 = createEntry( "dc=test2,dc=test,ou=test,ou=system" );
entry3.put( "ObjectClass", "top", "domain" );
entry3.put( "dc", "test2" );
addCtx.setEntry( entry3 );
-
+
partition.add( addCtx );
-
+
SearchOperationContext searchCtx = new SearchOperationContext( session );
DN dn = new DN( "dc=test,ou=test,ou=system" );
- dn.normalize( schemaManager.getNormalizerMapping() );
+ dn.normalize( schemaManager );
searchCtx.setDn( dn );
ExprNode filter = FilterParser.parse( schemaManager, "(ObjectClass=domain)" );
NameComponentNormalizer ncn = new ConcreteNameComponentNormalizer( schemaManager );
@@ -399,33 +399,33 @@ public class LdifPartitionTest
filter.accept( visitor );
searchCtx.setFilter( filter );
searchCtx.setScope( SearchScope.SUBTREE );
-
+
EntryFilteringCursor cursor = partition.search( searchCtx );
-
+
assertNotNull( cursor );
-
+
Set<String> expectedDns = new HashSet<String>();
expectedDns.add( entry1.getDn().getNormName() );
expectedDns.add( entry2.getDn().getNormName() );
expectedDns.add( entry3.getDn().getNormName() );
-
+
cursor.beforeFirst();
int nbRes = 0;
-
+
while ( cursor.next() )
{
Entry entry = cursor.get();
assertNotNull( entry );
nbRes++;
-
+
expectedDns.remove( entry.getDn().getNormName() );
}
assertEquals( 3, nbRes );
assertEquals( 0, expectedDns.size() );
}
-
-
+
+
@Test
public void testLdifMoveEntry() throws Exception
{
@@ -433,7 +433,7 @@ public class LdifPartitionTest
ClonedServerEntry childEntry1 = partition.lookup( partition.getEntryId( new DN( "dc=child1,ou=test,ou=system", schemaManager ) ) );
ClonedServerEntry childEntry2 = partition.lookup( partition.getEntryId( new DN( "dc=child2,ou=test,ou=system", schemaManager ) ) );
-
+
MoveOperationContext moveOpCtx = new MoveOperationContext( session, childEntry1.getDn(), childEntry2.getDn() );
partition.move( moveOpCtx );
@@ -451,18 +451,18 @@ public class LdifPartitionTest
assertTrue( new File( wkdir, "ou=test,ou=system/dc=child2/dc=child1/dc=grandchild11/dc=greatgrandchild111.ldif" ).exists() );
}
-
+
@Test
public void testLdifRenameAndDeleteOldDN() throws Exception
{
CoreSession session = injectEntries();
DN childDn1 = new DN( "dc=child1,ou=test,ou=system", schemaManager );
-
+
RDN newRdn = new RDN( SchemaConstants.DC_AT + "=" + "renamedChild1" );
RenameOperationContext renameOpCtx = new RenameOperationContext( session, childDn1, newRdn, true );
partition.rename( renameOpCtx );
-
+
assertFalse( new File( wkdir, "ou=test,ou=system/dc=child1" ).exists() );
assertFalse( new File( wkdir, "ou=test,ou=system/dc=child1.ldif" ).exists() );
@@ -476,18 +476,18 @@ public class LdifPartitionTest
assertTrue( new File( wkdir, "ou=test,ou=system/dc=renamedchild1/dc=grandchild11/dc=greatgrandchild111.ldif" ).exists() );
}
-
+
@Test
public void testLdifRenameAndRetainOldDN() throws Exception
{
CoreSession session = injectEntries();
DN childDn1 = new DN( "dc=child1,ou=test,ou=system", schemaManager );
-
+
RDN newRdn = new RDN( SchemaConstants.DC_AT + "=" + "renamedChild1" );
RenameOperationContext renameOpCtx = new RenameOperationContext( session, childDn1, newRdn, false );
partition.rename( renameOpCtx );
-
+
assertFalse( new File( wkdir, "ou=test,ou=system/dc=child1" ).exists() );
assertFalse( new File( wkdir, "ou=test,ou=system/dc=child1.ldif" ).exists() );
@@ -506,7 +506,7 @@ public class LdifPartitionTest
assertTrue( content.contains( "dc: renamedChild1" ) );
}
-
+
@Test
public void testLdifMoveAndRenameWithDeletingOldDN() throws Exception
{
@@ -519,7 +519,7 @@ public class LdifPartitionTest
RDN newRdn = new RDN( SchemaConstants.DC_AT + "=" + "movedChild1" );
MoveAndRenameOperationContext moveAndRenameOpCtx = new MoveAndRenameOperationContext( session, childDn1, childDn2, newRdn, true );
partition.moveAndRename( moveAndRenameOpCtx );
-
+
assertFalse( new File( wkdir, "ou=test,ou=system/dc=child1" ).exists() );
assertFalse( new File( wkdir, "ou=test,ou=system/dc=child1.ldif" ).exists() );
@@ -533,7 +533,7 @@ public class LdifPartitionTest
assertTrue( new File( wkdir, "ou=test,ou=system/dc=child2/dc=movedchild1/dc=grandchild11/dc=greatgrandchild111.ldif" ).exists() );
}
-
+
@Test
public void testLdifMoveAndRenameRetainingOldDN() throws Exception
{
@@ -546,7 +546,7 @@ public class LdifPartitionTest
RDN newRdn = new RDN( SchemaConstants.DC_AT + "=" + "movedChild1" );
MoveAndRenameOperationContext moveAndRenameOpCtx = new MoveAndRenameOperationContext( session, childDn1, childDn2, newRdn, false );
partition.moveAndRename( moveAndRenameOpCtx );
-
+
assertFalse( new File( wkdir, "ou=test,ou=system/dc=child1" ).exists() );
assertFalse( new File( wkdir, "ou=test,ou=system/dc=child1.ldif" ).exists() );
@@ -566,18 +566,18 @@ public class LdifPartitionTest
assertTrue( content.contains( "dc: movedChild1" ) );
}
-
+
private CoreSession injectEntries() throws Exception
{
DN adminDn = new DN( "uid=admin,ou=system", schemaManager );
CoreSession session = new MockCoreSession( new LdapPrincipal( adminDn, AuthenticationLevel.STRONG ), new MockDirectoryService( 1 ) );
AddOperationContext addCtx = new AddOperationContext( session );
-
+
ClonedServerEntry rootEntry = createEntry( "ou=test,ou=system" );
rootEntry.put( "ObjectClass", "top", "domain" );
rootEntry.put( "ou", "test" );
addCtx.setEntry( rootEntry );
-
+
partition.add( addCtx );
ClonedServerEntry childEntry1 = createEntry( "dc=child1,ou=test,ou=system" );
@@ -593,8 +593,8 @@ public class LdifPartitionTest
addCtx.setEntry( childEntry2 );
partition.add( addCtx );
-
-
+
+
ClonedServerEntry grandChild11 = createEntry( "dc=grandChild11,dc=child1,ou=test,ou=system" );
grandChild11.put( "ObjectClass", "top", "domain" );
grandChild11.put( "dc", "grandChild11" );
@@ -615,7 +615,7 @@ public class LdifPartitionTest
addCtx.setEntry( greatGrandChild111 );
partition.add( addCtx );
-
+
assertTrue( new File( wkdir, "ou=test,ou=system" ).exists() );
assertTrue( new File( wkdir, "ou=test,ou=system.ldif" ).exists() );
assertTrue( new File( wkdir, "ou=test,ou=system/dc=child1" ).exists() );
@@ -628,7 +628,7 @@ public class LdifPartitionTest
assertTrue( new File( wkdir, "ou=test,ou=system/dc=child1/dc=grandchild12.ldif" ).exists() );
assertFalse( new File( wkdir, "ou=test,ou=system/dc=child1/dc=grandchild11/dc=greatgrandchild111" ).exists() );
assertTrue( new File( wkdir, "ou=test,ou=system/dc=child1/dc=grandchild11/dc=greatgrandchild111.ldif" ).exists() );
-
+
return session;
}
}
Modified: directory/apacheds/trunk/protocol-ldap/src/main/java/org/apache/directory/server/ldap/handlers/SearchHandler.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/protocol-ldap/src/main/java/org/apache/directory/server/ldap/handlers/SearchHandler.java?rev=982332&r1=982331&r2=982332&view=diff
==============================================================================
--- directory/apacheds/trunk/protocol-ldap/src/main/java/org/apache/directory/server/ldap/handlers/SearchHandler.java (original)
+++ directory/apacheds/trunk/protocol-ldap/src/main/java/org/apache/directory/server/ldap/handlers/SearchHandler.java Wed Aug 4 17:13:46 2010
@@ -6,16 +6,16 @@
* to you 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.
- *
+ * under the License.
+ *
*/
package org.apache.directory.server.ldap.handlers;
@@ -89,13 +89,13 @@ public class SearchHandler extends LdapR
/** Speedup for logs */
private static final boolean IS_DEBUG = LOG.isDebugEnabled();
- /** cached to save redundant lookups into registries */
+ /** cached to save redundant lookups into registries */
private AttributeType OBJECT_CLASS_AT;
-
+
protected ReplicationProvider replicationProvider;
-
+
/**
- * Constructs a new filter EqualityNode asserting that a candidate
+ * Constructs a new filter EqualityNode asserting that a candidate
* objectClass is a referral.
*
* @param session the {@link LdapSession} to construct the node for
@@ -109,35 +109,35 @@ public class SearchHandler extends LdapR
OBJECT_CLASS_AT = session.getCoreSession().getDirectoryService().
getSchemaManager().getAttributeType( SchemaConstants.OBJECT_CLASS_AT );
}
-
+
EqualityNode<String> ocIsReferral = new EqualityNode<String>( OBJECT_CLASS_AT,
new StringValue( OBJECT_CLASS_AT, SchemaConstants.REFERRAL_OC ) );
-
+
return ocIsReferral;
}
-
-
+
+
/**
- * Handles search requests containing the persistent search control but
- * delegates to doSimpleSearch() if the changesOnly parameter of the
+ * Handles search requests containing the persistent search control but
+ * delegates to doSimpleSearch() if the changesOnly parameter of the
* control is set to false.
*
- * @param session the LdapSession for which this search is conducted
+ * @param session the LdapSession for which this search is conducted
* @param req the search request containing the persistent search control
* @param psearchControl the persistent search control extracted
* @throws Exception if failures are encountered while searching
*/
- private void handlePersistentSearch( LdapSession session, InternalSearchRequest req,
- PersistentSearchControl psearchControl ) throws Exception
+ private void handlePersistentSearch( LdapSession session, InternalSearchRequest req,
+ PersistentSearchControl psearchControl ) throws Exception
{
/*
- * We want the search to complete first before we start listening to
+ * We want the search to complete first before we start listening to
* events when the control does NOT specify changes ONLY mode.
*/
if ( ! psearchControl.isChangesOnly() )
{
InternalSearchResponseDone done = doSimpleSearch( session, req );
-
+
// ok if normal search beforehand failed somehow quickly abandon psearch
if ( done.getLdapResult().getResultCode() != ResultCodeEnum.SUCCESS )
{
@@ -150,12 +150,12 @@ public class SearchHandler extends LdapR
{
return;
}
-
+
// now we process entries forever as they change
PersistentSearchListener handler = new PersistentSearchListener( session, req );
-
- // compose notification criteria and add the listener to the event
- // service using that notification criteria to determine which events
+
+ // compose notification criteria and add the listener to the event
+ // service using that notification criteria to determine which events
// are to be delivered to the persistent search issuing client
NotificationCriteria criteria = new NotificationCriteria();
criteria.setAliasDerefMode( req.getDerefAliases() );
@@ -166,15 +166,15 @@ public class SearchHandler extends LdapR
getLdapServer().getDirectoryService().getEventService().addListener( handler, criteria );
req.addAbandonListener( new SearchAbandonListener( ldapServer, handler ) );
}
-
-
+
+
/**
* {@inheritDoc}
*/
public final void handle( LdapSession session, InternalSearchRequest req ) throws Exception
{
LOG.debug( "Handling single reply request: {}", req );
-
+
// check first for the syncrepl search request control
if ( req.getControls().containsKey( SyncRequestValueControl.CONTROL_OID ) )
{
@@ -187,7 +187,7 @@ public class SearchHandler extends LdapR
// If the ManageDsaIT control is present, we will
// consider that the user wants to get entry which
// are referrals as plain entry. We have to return
- // SearchResponseEntry elements instead of
+ // SearchResponseEntry elements instead of
// SearchResponseReference elements.
LOG.debug( "ManageDsaITControl detected." );
handleIgnoringReferrals( session, req );
@@ -197,7 +197,7 @@ public class SearchHandler extends LdapR
// No ManageDsaIT control. If the found entries is a referral,
// we will return SearchResponseReference elements.
LOG.debug( "ManageDsaITControl NOT detected." );
-
+
switch ( req.getType() )
{
case SEARCH_REQUEST:
@@ -207,30 +207,30 @@ public class SearchHandler extends LdapR
default:
throw new IllegalStateException( I18n.err( I18n.ERR_685, req ) );
}
-
+
}
}
-
+
/**
- * Handles search requests on the RootDSE.
- *
- * @param session the LdapSession for which this search is conducted
+ * Handles search requests on the RootDSE.
+ *
+ * @param session the LdapSession for which this search is conducted
* @param req the search request on the RootDSE
* @throws Exception if failures are encountered while searching
*/
private void handleRootDseSearch( LdapSession session, InternalSearchRequest req ) throws Exception
{
EntryFilteringCursor cursor = null;
-
+
try
{
cursor = session.getCoreSession().search( req );
-
+
// Position the cursor at the beginning
cursor.beforeFirst();
boolean hasRootDSE = false;
-
+
while ( cursor.next() )
{
if ( hasRootDSE )
@@ -245,7 +245,7 @@ public class SearchHandler extends LdapR
session.getIoSession().write( generateResponse( session, req, entry ) );
}
}
-
+
// write the SearchResultDone message
session.getIoSession().write( req.getResultResponse() );
}
@@ -265,13 +265,13 @@ public class SearchHandler extends LdapR
}
}
}
-
-
+
+
/**
- * Based on the server maximum time limits configured for search and the
- * requested time limits this method determines if at all to replace the
+ * Based on the server maximum time limits configured for search and the
+ * requested time limits this method determines if at all to replace the
* default ClosureMonitor of the result set Cursor with one that closes
- * the Cursor when either server mandated or request mandated time limits
+ * the Cursor when either server mandated or request mandated time limits
* are reached.
*
* @param req the {@link InternalSearchRequest} issued
@@ -285,31 +285,31 @@ public class SearchHandler extends LdapR
{
return;
}
-
+
/*
- * Non administrator based searches are limited by time if the server
- * has been configured with unlimited time and the request specifies
+ * Non administrator based searches are limited by time if the server
+ * has been configured with unlimited time and the request specifies
* unlimited search time
*/
if ( ldapServer.getMaxTimeLimit() == NO_TIME_LIMIT && req.getTimeLimit() == NO_TIME_LIMIT )
{
return;
}
-
+
/*
- * If the non-administrator user specifies unlimited time but the server
- * is configured to limit the search time then we limit by the max time
- * allowed by the configuration
+ * If the non-administrator user specifies unlimited time but the server
+ * is configured to limit the search time then we limit by the max time
+ * allowed by the configuration
*/
if ( req.getTimeLimit() == 0 )
{
cursor.setClosureMonitor( new SearchTimeLimitingMonitor( ldapServer.getMaxTimeLimit(), TimeUnit.SECONDS ) );
return;
}
-
+
/*
- * If the non-administrative user specifies a time limit equal to or
- * less than the maximum limit configured in the server then we
+ * If the non-administrative user specifies a time limit equal to or
+ * less than the maximum limit configured in the server then we
* constrain search by the amount specified in the request
*/
if ( ldapServer.getMaxTimeLimit() >= req.getTimeLimit() )
@@ -319,14 +319,14 @@ public class SearchHandler extends LdapR
}
/*
- * Here the non-administrative user's requested time limit is greater
+ * Here the non-administrative user's requested time limit is greater
* than what the server's configured maximum limit allows so we limit
* the search to the configured limit
*/
cursor.setClosureMonitor( new SearchTimeLimitingMonitor( ldapServer.getMaxTimeLimit(), TimeUnit.SECONDS ) );
}
-
-
+
+
/**
* Return the server size limit
*/
@@ -355,8 +355,8 @@ public class SearchHandler extends LdapR
}
}
}
-
-
+
+
private void readResults( LdapSession session, InternalSearchRequest req, InternalLdapResult ldapResult,
EntryFilteringCursor cursor, long sizeLimit ) throws Exception
{
@@ -368,7 +368,7 @@ public class SearchHandler extends LdapR
if ( session.getIoSession().isClosing() )
{
// The client has closed the connection
- LOG.debug( "Request terminated for message {}, the client has closed the session",
+ LOG.debug( "Request terminated for message {}, the client has closed the session",
req.getMessageId() );
break;
}
@@ -376,17 +376,17 @@ public class SearchHandler extends LdapR
if ( req.isAbandoned() )
{
// The cursor has been closed by an abandon request.
- LOG.debug( "Request terminated by an AbandonRequest for message {}",
+ LOG.debug( "Request terminated by an AbandonRequest for message {}",
req.getMessageId() );
break;
}
-
+
ClonedServerEntry entry = cursor.get();
session.getIoSession().write( generateResponse( session, req, entry ) );
LOG.debug( "Sending {}", entry.getDn() );
count++;
}
-
+
// DO NOT WRITE THE RESPONSE - JUST RETURN IT
ldapResult.setResultCode( ResultCodeEnum.SUCCESS );
@@ -400,38 +400,38 @@ public class SearchHandler extends LdapR
ldapResult.setResultCode( ResultCodeEnum.SIZE_LIMIT_EXCEEDED );
}
}
-
-
- private void readPagedResults( LdapSession session, InternalSearchRequest req, InternalLdapResult ldapResult,
- EntryFilteringCursor cursor, long sizeLimit, int pagedLimit,
+
+
+ private void readPagedResults( LdapSession session, InternalSearchRequest req, InternalLdapResult ldapResult,
+ EntryFilteringCursor cursor, long sizeLimit, int pagedLimit,
PagedSearchContext pagedContext, PagedResultsControl pagedResultsControl ) throws Exception
{
req.addAbandonListener( new SearchAbandonListener( ldapServer, cursor ) );
setTimeLimitsOnCursor( req, session, cursor );
LOG.debug( "using <{},{}> for size limit", sizeLimit, pagedLimit );
int cookieValue = 0;
-
+
int count = pagedContext.getCurrentPosition();
int pageCount = 0;
-
+
while ( ( count < sizeLimit ) && ( pageCount < pagedLimit ) && cursor.next() )
{
if ( session.getIoSession().isClosing() )
{
break;
}
-
+
ClonedServerEntry entry = cursor.get();
session.getIoSession().write( generateResponse( session, req, entry ) );
count++;
pageCount++;
}
-
+
// DO NOT WRITE THE RESPONSE - JUST RETURN IT
ldapResult.setResultCode( ResultCodeEnum.SUCCESS );
-
+
boolean hasMoreEntry = cursor.next();
-
+
if ( hasMoreEntry )
{
cursor.previous();
@@ -444,18 +444,18 @@ public class SearchHandler extends LdapR
// We have to remove the cookie from the session
cookieValue = pagedContext.getCookieValue();
PagedSearchContext psCookie = session.removePagedSearchContext( cookieValue );
-
+
// Close the cursor if there is one
if ( psCookie != null )
{
cursor = psCookie.getCursor();
-
+
if ( cursor != null )
{
cursor.close();
}
}
-
+
pagedResultsControl = new PagedResultsControl();
pagedResultsControl.setCritical( true );
pagedResultsControl.setSize( 0 );
@@ -466,15 +466,15 @@ public class SearchHandler extends LdapR
else
{
// We have reached one limit
-
+
if ( count < sizeLimit )
{
// We stop here. We have to add a ResponseControl
// DO NOT WRITE THE RESPONSE - JUST RETURN IT
ldapResult.setResultCode( ResultCodeEnum.SUCCESS );
req.getResultResponse().add( pagedResultsControl );
-
- // Stores the cursor current position
+
+ // Stores the cursor current position
pagedContext.incrementCurrentPosition( pageCount );
return;
}
@@ -482,32 +482,32 @@ public class SearchHandler extends LdapR
{
// Return an exception, close the cursor, and clean the session
ldapResult.setResultCode( ResultCodeEnum.SIZE_LIMIT_EXCEEDED );
-
+
if ( cursor != null )
{
cursor.close();
}
-
+
session.removePagedSearchContext( cookieValue );
-
+
return;
}
}
}
-
-
+
+
/**
* Manage the abandoned Paged Search (when paged size = 0). We have to
* remove the cookie and its associated cursor from the session.
*/
- private InternalSearchResponseDone abandonPagedSearch( LdapSession session, InternalSearchRequest req )
+ private InternalSearchResponseDone abandonPagedSearch( LdapSession session, InternalSearchRequest req )
throws Exception
{
PagedResultsControl pagedResultsControl = null;
- PagedResultsControl pagedSearchControl =
+ PagedResultsControl pagedSearchControl =
( PagedResultsControl )req.getControls().get( PagedResultsControl.CONTROL_OID );
byte [] cookie = pagedSearchControl.getCookie();
-
+
if ( !StringTools.isEmpty( cookie ) )
{
// If the cookie is not null, we have to destroy the associated
@@ -518,10 +518,10 @@ public class SearchHandler extends LdapR
pagedResultsControl.setCookie( psCookie.getCookie() );
pagedResultsControl.setSize( 0 );
pagedResultsControl.setCritical( true );
-
+
// Close the cursor
EntryFilteringCursor cursor = psCookie.getCursor();
-
+
if ( cursor != null )
{
cursor.close();
@@ -533,7 +533,7 @@ public class SearchHandler extends LdapR
pagedResultsControl.setSize( 0 );
pagedResultsControl.setCritical( true );
}
-
+
// and return
// DO NOT WRITE THE RESPONSE - JUST RETURN IT
InternalLdapResult ldapResult = req.getResultResponse().getLdapResult();
@@ -541,8 +541,8 @@ public class SearchHandler extends LdapR
req.getResultResponse().add( pagedResultsControl );
return ( InternalSearchResponseDone ) req.getResultResponse();
}
-
-
+
+
/**
* Remove a cookie instance from the session, if it exists.
*/
@@ -552,26 +552,26 @@ public class SearchHandler extends LdapR
{
return null;
}
-
+
int cookieValue = cookieInstance.getCookieValue();
-
+
return session.removePagedSearchContext( cookieValue );
}
-
-
+
+
/**
* Handle a Paged Search request.
*/
private InternalSearchResponseDone doPagedSearch( LdapSession session, InternalSearchRequest req, PagedResultsControl control )
throws Exception
{
- PagedResultsControl pagedSearchControl = ( PagedResultsControl )control;
+ PagedResultsControl pagedSearchControl = control;
PagedResultsControl pagedResultsControl = null;
// Get the size limits
// Don't bother setting size limits for administrators that don't ask for it
long serverLimit = getServerSizeLimit( session, req );
-
+
long requestLimit = req.getSizeLimit() == 0L ?
Long.MAX_VALUE : req.getSizeLimit();
long sizeLimit = min( serverLimit, requestLimit );
@@ -588,27 +588,27 @@ public class SearchHandler extends LdapR
// search
// 3) The cookie is not empty and the request is the same, we return
// the next SIZE elements
- // 4) The cookie is not empty, but the request is not the same : this is
+ // 4) The cookie is not empty, but the request is not the same : this is
// a new request (we have to discard the cookie and do a new search from
// the beginning)
// 5) The SIZE is above the size-limit : the request is treated as if it
// was a simple search
-
+
// Case 1
if ( pagedLimit == 0L )
{
// An abandoned paged search
return abandonPagedSearch( session, req );
}
-
+
// Now, depending on the cookie, we will deal with case 2, 3, 4 and 5
byte [] cookie= pagedSearchControl.getCookie();
InternalLdapResult ldapResult = req.getResultResponse().getLdapResult();
-
+
if ( StringTools.isEmpty( cookie ) )
{
// This is a new search. We have a special case when the paged size
- // is above the server size limit : in this case, we default to a
+ // is above the server size limit : in this case, we default to a
// standard search
if ( pagedLimit > sizeLimit )
{
@@ -620,7 +620,7 @@ public class SearchHandler extends LdapR
// Position the cursor at the beginning
cursor.beforeFirst();
-
+
// And read the entries
readResults( session, req, ldapResult, cursor, sizeLimit );
}
@@ -635,7 +635,7 @@ public class SearchHandler extends LdapR
LOG.error( I18n.err( I18n.ERR_168 ), e );
}
}
-
+
// If we had a cookie in the session, remove it
removeContext( session, pagedContext );
return ( InternalSearchResponseDone ) req.getResultResponse();
@@ -658,7 +658,7 @@ public class SearchHandler extends LdapR
// Position the cursor at the beginning
cursor.beforeFirst();
-
+
// And stores the cursor into the session
pagedContext.setCursor( cursor );
}
@@ -669,22 +669,22 @@ public class SearchHandler extends LdapR
// Either case 3, 4 or 5
int cookieValue = pagedSearchControl.getCookieValue();
pagedContext = session.getPagedSearchContext( cookieValue );
-
+
if ( pagedContext == null )
{
// We didn't found the cookie into the session : it must be invalid
// send an error.
ldapResult.setErrorMessage( "Invalid cookie for this PagedSearch request." );
ldapResult.setResultCode( ResultCodeEnum.UNWILLING_TO_PERFORM );
-
+
return ( InternalSearchResponseDone ) req.getResultResponse();
}
-
+
if ( pagedContext.hasSameRequest( req, session ) )
{
// Case 3 : continue the search
cursor = pagedContext.getCursor();
-
+
// get the cookie
cookie = pagedContext.getCookie();
pagedResultsControl = new PagedResultsControl();
@@ -698,17 +698,17 @@ public class SearchHandler extends LdapR
// case 2 : create a new cursor
// We have to close the cursor
cursor = pagedContext.getCursor();
-
+
if ( cursor != null )
{
cursor.close();
}
-
+
// Now create a new context and stores it into the session
pagedContext = new PagedSearchContext( req );
session.addPagedSearchContext( pagedContext );
-
+
cookie = pagedContext.getCookie();
pagedResultsControl = new PagedResultsControl();
pagedResultsControl.setCookie( cookie );
@@ -717,7 +717,7 @@ public class SearchHandler extends LdapR
}
}
-
+
// Now, do the real search
/*
* Iterate through all search results building and sending back responses
@@ -741,44 +741,44 @@ public class SearchHandler extends LdapR
}
}
}
-
+
return ( InternalSearchResponseDone ) req.getResultResponse();
}
-
+
/**
- * Conducts a simple search across the result set returning each entry
+ * Conducts a simple search across the result set returning each entry
* back except for the search response done. This is calculated but not
* returned so the persistent search mechanism can leverage this method
* along with standard search.<br>
* <br>
* @param session the LDAP session object for this request
- * @param req the search request
- * @return the result done
+ * @param req the search request
+ * @return the result done
* @throws Exception if there are failures while processing the request
*/
- private InternalSearchResponseDone doSimpleSearch( LdapSession session, InternalSearchRequest req )
+ private InternalSearchResponseDone doSimpleSearch( LdapSession session, InternalSearchRequest req )
throws Exception
{
InternalLdapResult ldapResult = req.getResultResponse().getLdapResult();
-
+
// Check if we are using the Paged Search Control
Object control = req.getControls().get( PagedResultsControl.CONTROL_OID );
-
+
if ( control != null )
{
// Let's deal with the pagedControl
return doPagedSearch( session, req, (PagedResultsControl)control );
}
-
+
// A normal search
- // Check that we have a cursor or not.
+ // Check that we have a cursor or not.
// No cursor : do a search.
EntryFilteringCursor cursor = session.getCoreSession().search( req );
// Position the cursor at the beginning
cursor.beforeFirst();
-
+
/*
* Iterate through all search results building and sending back responses
* for each search result returned.
@@ -788,7 +788,7 @@ public class SearchHandler extends LdapR
// Get the size limits
// Don't bother setting size limits for administrators that don't ask for it
long serverLimit = getServerSizeLimit( session, req );
-
+
long requestLimit = req.getSizeLimit() == 0L ?
Long.MAX_VALUE : req.getSizeLimit();
@@ -796,7 +796,7 @@ public class SearchHandler extends LdapR
setTimeLimitsOnCursor( req, session, cursor );
LOG.debug( "using <{},{}> for size limit", requestLimit, serverLimit );
long sizeLimit = min( requestLimit, serverLimit );
-
+
readResults( session, req, ldapResult, cursor, sizeLimit );
}
finally
@@ -813,16 +813,16 @@ public class SearchHandler extends LdapR
}
}
}
-
+
return ( InternalSearchResponseDone ) req.getResultResponse();
}
-
+
/**
- * Generates a response for an entry retrieved from the server core based
- * on the nature of the request with respect to referral handling. This
- * method will either generate a SearchResponseEntry or a
- * SearchResponseReference depending on if the entry is a referral or if
+ * Generates a response for an entry retrieved from the server core based
+ * on the nature of the request with respect to referral handling. This
+ * method will either generate a SearchResponseEntry or a
+ * SearchResponseReference depending on if the entry is a referral or if
* the ManageDSAITControl has been enabled.
*
* @param req the search request
@@ -841,16 +841,16 @@ public class SearchHandler extends LdapR
InternalSearchResponseReference respRef;
respRef = new SearchResponseReferenceImpl( req.getMessageId() );
respRef.setReferral( new ReferralImpl() );
-
+
for ( Value<?> val : ref )
{
String url = val.getString();
-
+
if ( ! url.startsWith( "ldap" ) )
{
respRef.getReferral().addLdapUrl( url );
}
-
+
LdapURL ldapUrl = new LdapURL();
ldapUrl.setForceScopeRendering( true );
try
@@ -867,53 +867,53 @@ public class SearchHandler extends LdapR
case SUBTREE:
ldapUrl.setScope( SearchScope.SUBTREE.getScope() );
break;
-
+
case ONELEVEL: // one level here is object level on remote server
ldapUrl.setScope( SearchScope.OBJECT.getScope() );
break;
-
+
default:
ldapUrl.setScope( SearchScope.OBJECT.getScope() );
}
-
+
respRef.getReferral().addLdapUrl( ldapUrl.toString() );
}
-
+
return respRef;
}
- else
+ else
{
// The entry is not a referral, or the ManageDsaIt control is set
InternalSearchResponseEntry respEntry;
respEntry = new SearchResponseEntryImpl( req.getMessageId() );
respEntry.setEntry( entry );
respEntry.setObjectName( entry.getDn() );
-
+
// Filter the userPassword if the server mandate to do so
if ( session.getCoreSession().getDirectoryService().isPasswordHidden() )
{
// Remove the userPassord attribute from the entry.
respEntry.getEntry().removeAttributes( SchemaConstants.USER_PASSWORD_AT );
}
-
+
return respEntry;
}
}
-
-
+
+
/**
- * Alters the filter expression based on the presence of the
+ * Alters the filter expression based on the presence of the
* ManageDsaIT control. If the control is not present, the search
* filter will be altered to become a disjunction with two terms.
* The first term is the original filter. The second term is a
* (objectClass=referral) assertion. When OR'd together these will
- * make sure we get all referrals so we can process continuations
- * properly without having the filter remove them from the result
+ * make sure we get all referrals so we can process continuations
+ * properly without having the filter remove them from the result
* set.
- *
- * NOTE: original filter is first since most entries are not referrals
- * so it has a higher probability on average of accepting and shorting
- * evaluation before having to waste cycles trying to evaluate if the
+ *
+ * NOTE: original filter is first since most entries are not referrals
+ * so it has a higher probability on average of accepting and shorting
+ * evaluation before having to waste cycles trying to evaluate if the
* entry is a referral.
*
* @param session the session to use to construct the filter (schema access)
@@ -926,23 +926,23 @@ public class SearchHandler extends LdapR
{
return;
}
-
+
/*
- * Most of the time the search filter is just (objectClass=*) and if
+ * Most of the time the search filter is just (objectClass=*) and if
* this is the case then there's no reason at all to OR this with an
- * (objectClass=referral). If we detect this case then we leave it
+ * (objectClass=referral). If we detect this case then we leave it
* as is to represent the OR condition:
- *
+ *
* (| (objectClass=referral)(objectClass=*)) == (objectClass=*)
*/
if ( req.getFilter() instanceof PresenceNode )
{
PresenceNode presenceNode = ( PresenceNode ) req.getFilter();
-
+
if ( presenceNode.isSchemaAware() )
{
AttributeType attributeType = presenceNode.getAttributeType();
-
+
if ( attributeType.equals( OBJECT_CLASS_AT ) )
{
return;
@@ -951,7 +951,7 @@ public class SearchHandler extends LdapR
else
{
String attribute = presenceNode.getAttribute();
-
+
if ( attribute.equalsIgnoreCase( SchemaConstants.OBJECT_CLASS_AT ) ||
attribute.equalsIgnoreCase( SchemaConstants.OBJECT_CLASS_AT_OID ) )
{
@@ -961,27 +961,27 @@ public class SearchHandler extends LdapR
}
/*
- * Do not add the OR'd (objectClass=referral) expression if the user
- * searches for the subSchemaSubEntry as the SchemaIntercepter can't
+ * Do not add the OR'd (objectClass=referral) expression if the user
+ * searches for the subSchemaSubEntry as the SchemaIntercepter can't
* handle an OR'd filter.
*/
if ( isSubSchemaSubEntrySearch( session, req ) )
{
return;
}
-
- // using varags to add two expressions to an OR node
+
+ // using varags to add two expressions to an OR node
req.setFilter( new OrNode( req.getFilter(), newIsReferralEqualityNode( session ) ) );
}
-
-
+
+
/**
- * Main message handing method for search requests. This will be called
+ * Main message handing method for search requests. This will be called
* even if the ManageDsaIT control is present because the super class does
- * not know that the search operation has more to do after finding the
- * base. The call to this means that finding the base can ignore
+ * not know that the search operation has more to do after finding the
+ * base. The call to this means that finding the base can ignore
* referrals.
- *
+ *
* @param session the associated session
* @param req the received SearchRequest
*/
@@ -994,11 +994,11 @@ public class SearchHandler extends LdapR
// A flag set if we have a persistent search
boolean isPersistentSearch = false;
-
+
// A flag set when we've got an exception while processing a
// persistent search
boolean persistentSearchException = false;
-
+
// add the search request to the registry of outstanding requests for this session
session.registerOutstandingRequest( req );
@@ -1010,20 +1010,20 @@ public class SearchHandler extends LdapR
if ( isRootDSESearch( req ) )
{
handleRootDseSearch( session, req );
-
+
return;
}
// modify the filter to affect continuation support
modifyFilter( session, req );
-
+
// ===============================================================
// Handle psearch differently
// ===============================================================
- PersistentSearchControl psearchControl = ( PersistentSearchControl )
+ PersistentSearchControl psearchControl = ( PersistentSearchControl )
req.getControls().get( PersistentSearchControl.CONTROL_OID );
-
+
if ( psearchControl != null )
{
// Set the flag to avoid the request being removed
@@ -1031,7 +1031,7 @@ public class SearchHandler extends LdapR
isPersistentSearch = true;
handlePersistentSearch( session, req, psearchControl );
-
+
return;
}
@@ -1070,14 +1070,14 @@ public class SearchHandler extends LdapR
{
persistentSearchException = true;
}
-
+
handleException( session, req, e );
}
- finally
+ finally
{
-
+
// remove the request from the session, except if
- // we didn't got an exception for a Persistent search
+ // we didn't got an exception for a Persistent search
if ( !isPersistentSearch || persistentSearchException )
{
session.unregisterOutstandingRequest( req );
@@ -1098,25 +1098,25 @@ public class SearchHandler extends LdapR
DirectoryService directoryService = session.getCoreSession().getDirectoryService();
ReferralManager referralManager = directoryService.getReferralManager();
DN reqTargetDn = req.getBase();
-
- reqTargetDn.normalize( directoryService.getSchemaManager().getNormalizerMapping() );
-
+
+ reqTargetDn.normalize( directoryService.getSchemaManager() );
+
// Check if the entry itself is a referral
referralManager.lockRead();
-
+
isReferral = referralManager.isReferral( reqTargetDn );
-
+
if ( !isReferral )
{
// Check if the entry has a parent which is a referral
isparentReferral = referralManager.hasParentReferral( reqTargetDn );
}
-
+
referralManager.unlock();
-
+
if ( !isReferral && !isparentReferral )
{
- // This is not a referral and it does not have a parent which
+ // This is not a referral and it does not have a parent which
// is a referral : standard case, just deal with the request
LOG.debug( "Entry {} is NOT a referral.", reqTargetDn );
handleIgnoringReferrals( session, req );
@@ -1127,10 +1127,10 @@ public class SearchHandler extends LdapR
// -------------------------------------------------------------------
// Lookup Entry
// -------------------------------------------------------------------
-
- // try to lookup the entry but ignore exceptions when it does not
- // exist since entry may not exist but may have an ancestor that is a
- // referral - would rather attempt a lookup that fails then do check
+
+ // try to lookup the entry but ignore exceptions when it does not
+ // exist since entry may not exist but may have an ancestor that is a
+ // referral - would rather attempt a lookup that fails then do check
// for existence than have to do another lookup to get entry info
try
{
@@ -1148,18 +1148,18 @@ public class SearchHandler extends LdapR
handleException( session, req, e );
return;
}
-
+
// -------------------------------------------------------------------
// Handle Existing Entry
// -------------------------------------------------------------------
-
+
if ( entry != null )
{
try
{
LOG.debug( "Entry is a referral: {}", entry );
-
- handleReferralEntryForSearch( session, ( InternalSearchRequest ) req, ((ClonedServerEntry)entry) );
+
+ handleReferralEntryForSearch( session, req, ((ClonedServerEntry)entry) );
return;
}
@@ -1168,20 +1168,20 @@ public class SearchHandler extends LdapR
handleException( session, req, e );
}
}
-
+
// -------------------------------------------------------------------
// Handle Non-existing Entry
// -------------------------------------------------------------------
-
+
// if the entry is null we still have to check for a referral ancestor
// also the referrals need to be adjusted based on the ancestor's ref
// values to yield the correct path to the entry in the target DSAs
-
+
else
{
// The entry is null : it has a parent referral.
Entry referralAncestor = null;
-
+
try
{
referralAncestor = getFarthestReferralAncestor( session, reqTargetDn );
@@ -1191,7 +1191,7 @@ public class SearchHandler extends LdapR
handleException( session, req, e );
return;
}
-
+
if ( referralAncestor == null )
{
result.setErrorMessage( "Entry not found." );
@@ -1199,12 +1199,12 @@ public class SearchHandler extends LdapR
session.getIoSession().write( req.getResultResponse() );
return;
}
-
+
// if we get here then we have a valid referral ancestor
try
{
- InternalReferral referral = getReferralOnAncestorForSearch( session, ( InternalSearchRequest ) req, ((ClonedServerEntry)referralAncestor) );
-
+ InternalReferral referral = getReferralOnAncestorForSearch( session, req, ((ClonedServerEntry)referralAncestor) );
+
result.setResultCode( ResultCodeEnum.REFERRAL );
result.setReferral( referral );
session.getIoSession().write( req.getResultResponse() );
@@ -1216,11 +1216,11 @@ public class SearchHandler extends LdapR
}
}
}
-
-
+
+
/**
- * Handles processing a referral response on a target entry which is a
- * referral. It will for any request that returns an LdapResult in it's
+ * Handles processing a referral response on a target entry which is a
+ * referral. It will for any request that returns an LdapResult in it's
* response.
*
* @param session the session to use for processing
@@ -1239,19 +1239,19 @@ public class SearchHandler extends LdapR
result.setMatchedDn( req.getBase() );
EntryAttribute refAttr = entry.getOriginalEntry().get( SchemaConstants.REF_AT );
-
+
for ( Value<?> refval : refAttr )
{
String refstr = refval.getString();
-
+
// need to add non-ldap URLs as-is
if ( ! refstr.startsWith( "ldap" ) )
{
referral.addLdapUrl( refstr );
continue;
}
-
- // parse the ref value and normalize the DN
+
+ // parse the ref value and normalize the DN
LdapURL ldapUrl = new LdapURL();
try
{
@@ -1262,7 +1262,7 @@ public class SearchHandler extends LdapR
LOG.error( I18n.err( I18n.ERR_165, refstr, entry ) );
continue;
}
-
+
ldapUrl.setForceScopeRendering( true );
ldapUrl.setAttributes( req.getAttributes() );
ldapUrl.setScope( req.getScope().getScope() );
@@ -1271,16 +1271,16 @@ public class SearchHandler extends LdapR
session.getIoSession().write( req.getResultResponse() );
}
-
-
+
+
/**
* Determines if a search request is on the RootDSE of the server.
- *
+ *
* It is a RootDSE search if :
* - the base DN is empty
* - and the scope is BASE OBJECT
* - and the filter is (ObjectClass = *)
- *
+ *
* (RFC 4511, 5.1, par. 1 & 2)
*
* @param req the request issued
@@ -1291,11 +1291,11 @@ public class SearchHandler extends LdapR
boolean isBaseIsRoot = req.getBase().isEmpty();
boolean isBaseScope = req.getScope() == SearchScope.OBJECT;
boolean isRootDSEFilter = false;
-
+
if ( req.getFilter() instanceof PresenceNode )
{
ExprNode filter = req.getFilter();
-
+
if ( filter.isSchemaAware() )
{
AttributeType attributeType = ( ( PresenceNode ) req.getFilter() ).getAttributeType();
@@ -1307,11 +1307,11 @@ public class SearchHandler extends LdapR
isRootDSEFilter = attribute.equalsIgnoreCase( SchemaConstants.OBJECT_CLASS_AT ) || attribute.equals( SchemaConstants.OBJECT_CLASS_AT_OID );
}
}
-
+
return isBaseIsRoot && isBaseScope && isRootDSEFilter;
}
-
-
+
+
/**
* <p>
* Determines if a search request is a subSchemaSubEntry search.
@@ -1327,12 +1327,12 @@ public class SearchHandler extends LdapR
* However in this method we only check the first condition to avoid
* performance issues.
* </p>
- *
+ *
* @param session the LDAP session
* @param req the request issued
- *
+ *
* @return true if the search is on the subSchemaSubEntry, false otherwise
- *
+ *
* @throws Exception the exception
*/
private boolean isSubSchemaSubEntrySearch( LdapSession session, InternalSearchRequest req ) throws Exception
@@ -1345,24 +1345,24 @@ public class SearchHandler extends LdapR
Value<?> subschemaSubentry = nexus.getRootDSE( null ).get( SchemaConstants.SUBSCHEMA_SUBENTRY_AT ).get();
DN subschemaSubentryDn = new DN( subschemaSubentry.getString(), ds.getSchemaManager() );
String subschemaSubentryDnNorm = subschemaSubentryDn.getNormName();
-
+
return subschemaSubentryDnNorm.equals( baseNormForm );
}
/**
- * Handles processing with referrals without ManageDsaIT control and with
- * an ancestor that is a referral. The original entry was not found and
+ * Handles processing with referrals without ManageDsaIT control and with
+ * an ancestor that is a referral. The original entry was not found and
* the walk of the ancestry returned a referral.
- *
- * @param referralAncestor the farthest referral ancestor of the missing
- * entry
+ *
+ * @param referralAncestor the farthest referral ancestor of the missing
+ * entry
*/
- public InternalReferral getReferralOnAncestorForSearch( LdapSession session, InternalSearchRequest req,
+ public InternalReferral getReferralOnAncestorForSearch( LdapSession session, InternalSearchRequest req,
ClonedServerEntry referralAncestor ) throws Exception
{
LOG.debug( "Inside getReferralOnAncestor()" );
-
+
EntryAttribute refAttr = referralAncestor.getOriginalEntry()
.get( SchemaConstants.REF_AT );
InternalReferral referral = new ReferralImpl();
@@ -1379,8 +1379,8 @@ public class SearchHandler extends LdapR
referral.addLdapUrl( ref );
continue;
}
-
- // Parse the ref value
+
+ // Parse the ref value
LdapURL ldapUrl = new LdapURL();
try
{
@@ -1390,10 +1390,10 @@ public class SearchHandler extends LdapR
{
LOG.error( I18n.err( I18n.ERR_165, ref, referralAncestor ) );
}
-
+
// Normalize the DN to check for same dn
DN urlDn = new DN( ldapUrl.getDn().getName(), session.getCoreSession().getDirectoryService().getSchemaManager() );
-
+
if ( urlDn.getNormName().equals( req.getBase().getNormName() ) )
{
ldapUrl.setForceScopeRendering( true );
@@ -1402,9 +1402,9 @@ public class SearchHandler extends LdapR
referral.addLdapUrl( ldapUrl.toString() );
continue;
}
-
+
/*
- * If we get here then the DN of the referral was not the same as the
+ * If we get here then the DN of the referral was not the same as the
* DN of the ref LDAP URL. We must calculate the remaining (difference)
* name past the farthest referral DN which the target name extends.
*/
@@ -1426,24 +1426,24 @@ public class SearchHandler extends LdapR
ldapUrl.setScope( req.getScope().getScope() );
referral.addLdapUrl( ldapUrl.toString() );
}
-
+
return referral;
}
-
+
/**
- * Handles processing with referrals without ManageDsaIT control and with
- * an ancestor that is a referral. The original entry was not found and
+ * Handles processing with referrals without ManageDsaIT control and with
+ * an ancestor that is a referral. The original entry was not found and
* the walk of the ancestry returned a referral.
- *
- * @param referralAncestor the farthest referral ancestor of the missing
- * entry
+ *
+ * @param referralAncestor the farthest referral ancestor of the missing
+ * entry
*/
- public InternalReferral getReferralOnAncestor( LdapSession session, DN reqTargetDn, InternalSearchRequest req,
+ public InternalReferral getReferralOnAncestor( LdapSession session, DN reqTargetDn, InternalSearchRequest req,
ClonedServerEntry referralAncestor ) throws Exception
{
LOG.debug( "Inside getReferralOnAncestor()" );
-
+
EntryAttribute refAttr =referralAncestor.getOriginalEntry()
.get( SchemaConstants.REF_AT );
InternalReferral referral = new ReferralImpl();
@@ -1460,8 +1460,8 @@ public class SearchHandler extends LdapR
referral.addLdapUrl( ref );
continue;
}
-
- // parse the ref value and normalize the DN
+
+ // parse the ref value and normalize the DN
LdapURL ldapUrl = new LdapURL();
try
{
@@ -1471,9 +1471,9 @@ public class SearchHandler extends LdapR
{
LOG.error( I18n.err( I18n.ERR_165, ref, referralAncestor ) );
}
-
+
DN urlDn = new DN( ldapUrl.getDn().getName(), session.getCoreSession().getDirectoryService().getSchemaManager() );
-
+
if ( urlDn.getNormName().equals( referralAncestor.getDn().getNormName() ) )
{
// according to the protocol there is no need for the dn since it is the same as this request
@@ -1490,9 +1490,9 @@ public class SearchHandler extends LdapR
referral.addLdapUrl( buf.toString() );
continue;
}
-
+
/*
- * If we get here then the DN of the referral was not the same as the
+ * If we get here then the DN of the referral was not the same as the
* DN of the ref LDAP URL. We must calculate the remaining (difference)
* name past the farthest referral DN which the target name extends.
*/
@@ -1523,11 +1523,11 @@ public class SearchHandler extends LdapR
buf.append( LdapURL.urlEncode( urlDn.getName(), false ) );
referral.addLdapUrl( buf.toString() );
}
-
+
return referral;
}
-
+
/**
* Handles processing with referrals without ManageDsaIT control.
*/
@@ -1539,7 +1539,7 @@ public class SearchHandler extends LdapR
* Set the result code or guess the best option.
*/
ResultCodeEnum code;
-
+
if ( e instanceof LdapOperationException )
{
code = ( ( LdapOperationException ) e ).getResultCode();
@@ -1548,22 +1548,22 @@ public class SearchHandler extends LdapR
{
code = ResultCodeEnum.getBestEstimate( e, req.getType() );
}
-
+
result.setResultCode( code );
/*
* Setup the error message to put into the request and put entire
- * exception into the message if we are in debug mode. Note we
+ * exception into the message if we are in debug mode. Note we
* embed the result code name into the message.
*/
String msg = code.toString() + ": failed for " + req + ": " + e.getLocalizedMessage();
LOG.debug( msg, e );
-
+
if ( IS_DEBUG )
{
msg += ":\n" + ExceptionUtils.getStackTrace( e );
}
-
+
result.setErrorMessage( msg );
if ( e instanceof LdapOperationException )
@@ -1571,27 +1571,27 @@ public class SearchHandler extends LdapR
LdapOperationException ne = ( LdapOperationException ) e;
// Add the matchedDN if necessary
- boolean setMatchedDn =
- code == ResultCodeEnum.NO_SUCH_OBJECT ||
+ boolean setMatchedDn =
+ code == ResultCodeEnum.NO_SUCH_OBJECT ||
code == ResultCodeEnum.ALIAS_PROBLEM ||
- code == ResultCodeEnum.INVALID_DN_SYNTAX ||
+ code == ResultCodeEnum.INVALID_DN_SYNTAX ||
code == ResultCodeEnum.ALIAS_DEREFERENCING_PROBLEM;
-
+
if ( ( ne.getResolvedDn() != null ) && setMatchedDn )
{
- result.setMatchedDn( ( DN ) ne.getResolvedDn() );
+ result.setMatchedDn( ne.getResolvedDn() );
}
}
session.getIoSession().write( req.getResultResponse() );
}
-
-
+
+
/**
- * Searches up the ancestry of a DN searching for the farthest referral
- * ancestor. This is required to properly handle referrals. Note that
- * this function is quite costly since it attempts to lookup all the
- * ancestors up the hierarchy just to see if they represent referrals.
+ * Searches up the ancestry of a DN searching for the farthest referral
+ * ancestor. This is required to properly handle referrals. Note that
+ * this function is quite costly since it attempts to lookup all the
+ * ancestors up the hierarchy just to see if they represent referrals.
* Techniques can be employed later to improve this performance hit by
* having an intelligent referral cache.
*
@@ -1600,13 +1600,13 @@ public class SearchHandler extends LdapR
*/
// This will suppress PMD.EmptyCatchBlock warnings in this method
@SuppressWarnings("PMD.EmptyCatchBlock")
- public static final Entry getFarthestReferralAncestor( LdapSession session, DN target )
+ public static final Entry getFarthestReferralAncestor( LdapSession session, DN target )
throws Exception
{
Entry entry;
Entry farthestReferralAncestor = null;
DN dn = target;
-
+
try
{
dn = dn.remove( dn.size() - 1 );
@@ -1615,17 +1615,17 @@ public class SearchHandler extends LdapR
{
// never thrown
}
-
+
while ( ! dn.isEmpty() )
{
LOG.debug( "Walking ancestors of {} to find referrals.", dn );
-
+
try
{
entry = session.getCoreSession().lookup( dn );
boolean isReferral = ((ClonedServerEntry)entry).getOriginalEntry().contains( SchemaConstants.OBJECT_CLASS_AT, SchemaConstants.REFERRAL_OC );
-
+
if ( isReferral )
{
farthestReferralAncestor = entry;
@@ -1637,7 +1637,7 @@ public class SearchHandler extends LdapR
{
LOG.debug( "Entry for {} not found.", dn );
- // update the DN as we strip last component
+ // update the DN as we strip last component
try
{
dn = dn.remove( dn.size() - 1 );
@@ -1648,7 +1648,7 @@ public class SearchHandler extends LdapR
}
}
}
-
+
return farthestReferralAncestor;
}
@@ -1658,11 +1658,11 @@ public class SearchHandler extends LdapR
this.replicationProvider = prov;
}
-
+
/**
- *
+ *
* handles the syncrepl search
- *
+ *
* @param session the LDAP session under which processing occurs
* @param req the request to be handled
* @throws LdapException
Modified: directory/apacheds/trunk/protocol-ldap/src/main/java/org/apache/directory/server/ldap/handlers/bind/ntlm/NtlmSaslServer.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/protocol-ldap/src/main/java/org/apache/directory/server/ldap/handlers/bind/ntlm/NtlmSaslServer.java?rev=982332&r1=982331&r2=982332&view=diff
==============================================================================
--- directory/apacheds/trunk/protocol-ldap/src/main/java/org/apache/directory/server/ldap/handlers/bind/ntlm/NtlmSaslServer.java (original)
+++ directory/apacheds/trunk/protocol-ldap/src/main/java/org/apache/directory/server/ldap/handlers/bind/ntlm/NtlmSaslServer.java Wed Aug 4 17:13:46 2010
@@ -6,16 +6,16 @@
* to you 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.
- *
+ * under the License.
+ *
*/
package org.apache.directory.server.ldap.handlers.bind.ntlm;
@@ -47,14 +47,14 @@ import org.apache.directory.shared.ldap.
*/
public class NtlmSaslServer extends AbstractSaslServer
{
- /** The different states during a NTLM negotiation */
+ /** The different states during a NTLM negotiation */
enum NegotiationState { INITIALIZED, TYPE_1_RECEIVED, TYPE_2_SENT, TYPE_3_RECEIVED, COMPLETED }
/** The current state */
private NegotiationState state = NegotiationState.INITIALIZED;
private final NtlmProvider provider;
-
+
public NtlmSaslServer( NtlmProvider provider, InternalBindRequest bindRequest, LdapSession ldapSession )
{
super( ldapSession, null, bindRequest );
@@ -78,17 +78,17 @@ public class NtlmSaslServer extends Abst
case INITIALIZED:
state = NegotiationState.TYPE_1_RECEIVED;
break;
-
+
case TYPE_1_RECEIVED:
throw new IllegalStateException( I18n.err( I18n.ERR_660 ) );
-
+
case TYPE_2_SENT:
state = NegotiationState.TYPE_3_RECEIVED;
break;
-
+
case TYPE_3_RECEIVED:
throw new IllegalStateException( I18n.err( I18n.ERR_661 ) );
-
+
case COMPLETED:
throw new IllegalStateException( I18n.err( I18n.ERR_662 ) );
}
@@ -101,18 +101,18 @@ public class NtlmSaslServer extends Abst
{
case INITIALIZED:
throw new IllegalStateException( I18n.err( I18n.ERR_663 ) );
-
+
case TYPE_1_RECEIVED:
state = NegotiationState.TYPE_2_SENT;
break;
-
+
case TYPE_2_SENT:
throw new IllegalStateException( I18n.err( I18n.ERR_664 ) );
-
+
case TYPE_3_RECEIVED:
state = NegotiationState.COMPLETED;
break;
-
+
case COMPLETED:
throw new IllegalStateException( I18n.err( I18n.ERR_662 ) );
}
@@ -148,17 +148,17 @@ public class NtlmSaslServer extends Abst
{
throw new SaslException( I18n.err( I18n.ERR_668 ), e );
}
-
+
break;
-
+
case TYPE_3_RECEIVED:
boolean result;
try
{
result = provider.authenticate( getLdapSession().getIoSession(), response );
DN dn = getBindRequest().getName();
- dn.normalize( getLdapSession().getLdapServer().getDirectoryService().getSchemaManager().getNormalizerMapping() );
- LdapPrincipal ldapPrincipal = new LdapPrincipal( dn, AuthenticationLevel.STRONG );
+ dn.normalize( getLdapSession().getLdapServer().getDirectoryService().getSchemaManager() );
+ LdapPrincipal ldapPrincipal = new LdapPrincipal( dn, AuthenticationLevel.STRONG );
getLdapSession().putSaslProperty( SaslConstants.SASL_AUTHENT_USER, ldapPrincipal );
getLdapSession().putSaslProperty( Context.SECURITY_PRINCIPAL, getBindRequest().getName().toString() );
}
@@ -171,10 +171,10 @@ public class NtlmSaslServer extends Abst
{
throw new SaslException( I18n.err( I18n.ERR_670 ) );
}
-
+
break;
}
-
+
responseSent();
return retval;
}
@@ -188,13 +188,13 @@ public class NtlmSaslServer extends Abst
BindOperationContext bindContext = new BindOperationContext( getLdapSession().getCoreSession() );
bindContext.setDn( new DN( user ) );
bindContext.setCredentials( StringTools.getBytesUtf8( password ) );
-
+
getAdminSession().getDirectoryService().getOperationManager().bind( bindContext );
-
+
return bindContext.getSession();
}
-
+
/**
* {@inheritDoc}
*/
Modified: directory/apacheds/trunk/protocol-ldap/src/main/java/org/apache/directory/server/ldap/handlers/controls/PagedSearchContext.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/protocol-ldap/src/main/java/org/apache/directory/server/ldap/handlers/controls/PagedSearchContext.java?rev=982332&r1=982331&r2=982332&view=diff
==============================================================================
--- directory/apacheds/trunk/protocol-ldap/src/main/java/org/apache/directory/server/ldap/handlers/controls/PagedSearchContext.java (original)
+++ directory/apacheds/trunk/protocol-ldap/src/main/java/org/apache/directory/server/ldap/handlers/controls/PagedSearchContext.java Wed Aug 4 17:13:46 2010
@@ -35,28 +35,28 @@ import org.apache.directory.shared.ldap.
/**
* The structure which stores the informations relative to the pagedSearch control.
- * They are associated to a cookie, stored into the session and associated to an
+ * They are associated to a cookie, stored into the session and associated to an
* instance of this class.
- *
+ *
* @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
*/
public class PagedSearchContext
{
/** The previous search request */
private InternalSearchRequest previousSearchRequest;
-
+
/** The current position in the cursor */
private int currentPosition;
-
+
/** The cookie key */
private byte[] cookie;
-
+
/** The integer value for the cookie */
private AtomicInteger cookieValue;
-
+
/** The associated cursor for the current search request */
private EntryFilteringCursor cursor;
-
+
/**
* Creates a new instance of this class, storing the SearchRequest into it.
*/
@@ -64,21 +64,21 @@ public class PagedSearchContext
{
previousSearchRequest = searchRequest;
currentPosition = 0;
-
+
// We compute a key for this cookie. It combines the search request
// and some time seed, in order to avoid possible collisions, as
// a user may send more than one PagedSearch on the same session.
cookieValue = new AtomicInteger( searchRequest.getMessageId() << 16 );
-
+
cookie = Value.getBytes( cookieValue.get() );
}
-
-
+
+
/**
- * Compute a new key for this cookie, based on the current searchRequest
+ * Compute a new key for this cookie, based on the current searchRequest
* hashCode and the current position. This value will be stored into the
* session, and will permit the retrieval of this instance.
- *
+ *
* @return The new cookie's key
*/
public byte[] getCookie()
@@ -86,35 +86,35 @@ public class PagedSearchContext
return cookie;
}
-
+
public int getCookieValue()
{
return cookieValue.get();
}
-
-
+
+
/**
* Compute a new cookie, if the previous one already exists. This
- * is unlikely, as we are based on some time seed, but just in case,
+ * is unlikely, as we are based on some time seed, but just in case,
* this method will generate a new one.
* @return The new cookie
*/
public byte[] getNewCookie()
{
cookie = Value.getBytes( cookieValue.incrementAndGet() );
-
+
return cookie;
}
-
-
+
+
/**
* Build a set of OIDs from the list of attributes we have in the search request
*/
- private Set<String> buildAttributeSet( InternalSearchRequest request,
+ private Set<String> buildAttributeSet( InternalSearchRequest request,
SchemaManager schemaManager )
{
Set<String> requestSet = new HashSet<String>();
-
+
// Build the set of attributeType from the attributes
for ( String attribute:request.getAttributes() )
{
@@ -132,18 +132,18 @@ public class PagedSearchContext
{
requestSet.add( attribute );
}
-
+
// Otherwise, don't add the attribute to the set
}
}
-
+
return requestSet;
}
-
+
/**
- * Compare the previous search request and the new one, and return
+ * Compare the previous search request and the new one, and return
* true if they are equal. We compare every field but the MessageID.
- *
+ *
* @param request The new SearchRequest
* @return true if both request are equal.
*/
@@ -154,7 +154,7 @@ public class PagedSearchContext
{
return false;
}
-
+
// Compares the sizeLimit
if ( request.getSizeLimit() != previousSearchRequest.getSizeLimit() )
{
@@ -166,20 +166,20 @@ public class PagedSearchContext
{
return false;
}
-
+
// Compares the TypesOnly
if ( request.getTypesOnly() != previousSearchRequest.getTypesOnly() )
{
return false;
}
-
+
// Compares the deref aliases mode
if ( request.getDerefAliases() != previousSearchRequest.getDerefAliases() )
{
return false;
}
-
- SchemaManager schemaManager =
+
+ SchemaManager schemaManager =
session.getLdapServer().getDirectoryService().getSchemaManager();
// Compares the attributes
@@ -203,23 +203,23 @@ public class PagedSearchContext
{
return false;
}
-
+
// Build the set of attributeType from both requests
Set<String> requestSet = buildAttributeSet( request, schemaManager );
Set<String> previousRequestSet = buildAttributeSet( previousSearchRequest, schemaManager );
-
+
// Check that both sets have the same size again after having converted
// the attributes to OID
if ( requestSet.size() != previousRequestSet.size() )
{
return false;
}
-
+
for ( String attribute:requestSet )
{
previousRequestSet.remove( attribute );
}
-
+
// The other set must be empty
if ( !previousRequestSet.isEmpty() )
{
@@ -227,17 +227,17 @@ public class PagedSearchContext
}
}
}
-
+
// Compare the baseDN
try
{
- request.getBase().normalize( schemaManager.getNormalizerMapping() );
-
+ request.getBase().normalize( schemaManager );
+
if ( !previousSearchRequest.getBase().isNormalized() )
{
- previousSearchRequest.getBase().normalize( schemaManager.getNormalizerMapping() );
+ previousSearchRequest.getBase().normalize( schemaManager );
}
-
+
if ( !request.getBase().equals( previousSearchRequest.getBase() ) )
{
return false;
@@ -247,7 +247,7 @@ public class PagedSearchContext
{
return false;
}
-
+
// Compare the filters
// Here, we assume the user hasn't changed the filter's order or content,
// as the filter is not normalized. This is a real problem, as the normalization
@@ -256,21 +256,21 @@ public class PagedSearchContext
return true; //request.getFilter().equals( previousSearchRequest.getFilter() );
}
-
+
/**
* @return The current position in the cursor. This value is updated
- * after each successful search request.
+ * after each successful search request.
*/
public int getCurrentPosition()
{
return currentPosition;
}
-
+
/**
- * Set the new current position, incrementing it with the
+ * Set the new current position, incrementing it with the
* number of returned entries.
- *
+ *
* @param returnedEntries The number of returned entries
*/
public void incrementCurrentPosition( int returnedEntries )
@@ -278,7 +278,7 @@ public class PagedSearchContext
this.currentPosition += returnedEntries;
}
-
+
/**
* @return The previous search request
*/
@@ -305,21 +305,21 @@ public class PagedSearchContext
{
this.cursor = cursor;
}
-
-
+
+
/**
* @see Object#toString()
*/
public String toString()
{
StringBuilder sb = new StringBuilder();
-
+
sb.append( "PagedSearch context : <" );
sb.append( StringTools.dumpBytes( cookie ) );
sb.append( ", " );
sb.append( currentPosition );
sb.append( ">" );
-
+
return sb.toString();
}
}