in mavibot/src/main/java/org/apache/directory/mavibot/btree/BulkLoader.java [1373:1445]
public static BTree<?, ?> compact( BTree<?, ?> btree ) throws IOException, KeyNotFoundException
{
// First, create a new BTree which will contain all the elements
InMemoryBTreeConfiguration configuration = new InMemoryBTreeConfiguration();
configuration.setName( btree.getName() );
configuration.setPageSize( btree.getPageSize() );
configuration.setKeySerializer( btree.getKeySerializer() );
configuration.setValueSerializer( btree.getValueSerializer() );
configuration.setAllowDuplicates( btree.isAllowDuplicates() );
configuration.setReadTimeOut( btree.getReadTimeOut() );
configuration.setWriteBufferSize( btree.getWriteBufferSize() );
File file = ( ( InMemoryBTree ) btree ).getFile();
if ( file != null )
{
configuration.setFilePath( file.getPath() );
}
// Create a new Btree Builder
InMemoryBTreeBuilder btreeBuilder = new InMemoryBTreeBuilder( configuration );
// Create a cursor over the existing btree
final TupleCursor cursor = btree.browse();
// Create an iterator that will iterate the existing btree
Iterator<Tuple> tupleItr = new Iterator<Tuple>()
{
@Override
public Tuple next()
{
try
{
return cursor.next();
}
catch ( EndOfFileExceededException e )
{
return null;
}
catch ( IOException e )
{
return null;
}
}
@Override
public boolean hasNext()
{
try
{
return cursor.hasNext();
}
catch ( EndOfFileExceededException e )
{
return false;
}
catch ( IOException e )
{
return false;
}
}
@Override
public void remove()
{
}
};
// And finally, compact the btree
return btreeBuilder.build( tupleItr );
}