You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by ak...@apache.org on 2008/05/31 04:51:51 UTC

svn commit: r661934 - in /directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core: CoreSession.java DefaultDirectoryService.java DefaultOperationManager.java DirectoryService.java OperationManager.java

Author: akarasulu
Date: Fri May 30 19:51:51 2008
New Revision: 661934

URL: http://svn.apache.org/viewvc?rev=661934&view=rev
Log:
some preliminary interfaces for performing operations against the DS - will refine for some time until the best fit is found.

Added:
    directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/DefaultOperationManager.java
    directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/OperationManager.java
Modified:
    directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/CoreSession.java
    directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/DefaultDirectoryService.java
    directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/DirectoryService.java

Modified: directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/CoreSession.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/CoreSession.java?rev=661934&r1=661933&r2=661934&view=diff
==============================================================================
--- directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/CoreSession.java (original)
+++ directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/CoreSession.java Fri May 30 19:51:51 2008
@@ -27,6 +27,8 @@
 import javax.naming.ldap.Control;
 
 import org.apache.directory.server.core.authn.LdapPrincipal;
+import org.apache.directory.server.core.cursor.Cursor;
+import org.apache.directory.server.core.entry.ClonedServerEntry;
 import org.apache.directory.server.core.entry.ServerEntry;
 import org.apache.directory.server.core.interceptor.context.OperationContext;
 import org.apache.directory.shared.ldap.constants.AuthenticationLevel;
@@ -164,45 +166,172 @@
     // -----------------------------------------------------------------------
 
 
+    /**
+     * Adds an entry into the DirectoryService associated with this CoreSession.
+     * 
+     * @param entry the entry to add
+     * @exception Exception on failures to add the entry
+     */
     void add( ServerEntry entry ) throws Exception;
     
     
+    /**
+     * Checks to see if an attribute in an entry contains a value.
+     *
+     * @param dn the distinguished name of the entry to check
+     * @param oid the OID of the attribute to check for the value
+     * @param value the value to check for
+     * @throws Exception if there are failures while comparing
+     */
     void compare( LdapDN dn, String oid, Object value ) throws Exception;
     
     
+    /**
+     * Deletes an entry in the server.
+     *
+     * @param dn the distinguished name of the entry to delete
+     * @throws Exception if there are failures while deleting the entry
+     */
     void delete( LdapDN dn ) throws Exception;
     
     
+    /**
+     * Looks up an entry in the server returning all attributes: both user and
+     * operational attributes.
+     *
+     * @param dn the name of the entry to lookup
+     * @throws Exception if there are failures while looking up the entry
+     */
     void lookup( LdapDN dn ) throws Exception;
 
     
+    /**
+     * Modifies an entry within the server by applying a list of modifications 
+     * to the entry.
+     *
+     * @param dn the distinguished name of the entry to modify
+     * @param mods the list of modifications to apply
+     * @throws Exception if there are failures while modifying the entry
+     */
     void modify( LdapDN dn, List<Modification> mods ) throws Exception;
     
 
+    /**
+     * Modifies an entry within the server by applying a list of modifications 
+     * to the entry as a collateral operation.  This means such operations 
+     * avoid certain house keeping operations.
+     * 
+     * TODO determine if this overload should even be here since this is used 
+     * internally by services in the server.
+     *
+     * @param dn the distinguished name of the entry to modify
+     * @param mods the list of modifications to apply
+     * @param collateral whether or not the operation is a side effect of 
+     * another modify
+     * @throws Exception if there are failures while modifying the entry
+     */
     void modify( LdapDN dn, List<Modification> mods, boolean collateral ) throws Exception;
     
 
+    /**
+     * Moves an entry or a branch of entries at a specified distinguished name
+     * to a position under a new parent.
+     * 
+     * @param dn the distinguished name of the entry/branch to move
+     * @param newParent the new parent under which the entry/branch is moved
+     * @exception if there are failures while moving the entry/branch
+     */
     void move( LdapDN dn, LdapDN newParent ) throws Exception;
     
     
+    /**
+     * Moves and renames (the relative distinguished name of) an entry (or a 
+     * branch if the entry has children) at a specified distinguished name to 
+     * a position under a new parent.
+     * 
+     * @param dn the distinguished name of the entry/branch to move
+     * @param newParent the new parent under which the entry/branch is moved
+     * @param newRdn the new relative distinguished name of the entry at the 
+     * root of the branch
+     * @exception if there are failures while moving and renaming the entry
+     * or branch
+     */
     void moveAndRename( LdapDN dn, LdapDN newParent, Rdn newRdn, boolean deleteOldRdn ) throws Exception;
     
     
+    /**
+     * Renames an entry by changing it's relative distinguished name.  This 
+     * has the side effect of changing the distinguished name of all entries
+     * directly or indirectly subordinate to the named entry if it has 
+     * descendants.
+     *
+     * @param dn the distinguished name of the entry to rename
+     * @param newRdn the new relative distinguished name for the entry
+     * @param deleteOldRdn whether or not the old value for the relative 
+     * distinguished name is to be deleted from the entry
+     * @throws Exception if there are failures while renaming the entry
+     */
     void rename( LdapDN dn, Rdn newRdn, boolean deleteOldRdn ) throws Exception;
     
     
-    void list( LdapDN dn, AliasDerefMode aliasDerefMode, Set<AttributeTypeOptions> returningAttributes ) 
-        throws Exception;
+    /**
+     * An optimized search operation using one level search scope which 
+     * returns all the children of an entry specified by distinguished name.
+     * This is equivalent to a search operation with one level scope using
+     * the <code>(objectClass=*)</code> filter.
+     *
+     * @param dn the distinguished name of the entry to list the children of
+     * @param aliasDerefMode the alias dereferencing mode used
+     * @param returningAttributes the attributes to return
+     * @throws Exception if there are failures while listing children
+     */
+    Cursor<ClonedServerEntry> list( LdapDN dn, AliasDerefMode aliasDerefMode, 
+        Set<AttributeTypeOptions> returningAttributes ) throws Exception;
     
     
-    void list( LdapDN dn, AliasDerefMode aliasDerefMode, 
+    /**
+     * An optimized search operation using one level search scope which 
+     * applies size and time limit constraints and returns all the children 
+     * of an entry specified by distinguished name if thes limits are not
+     * violated.  This is equivalent to a search operation with one level 
+     * scope using the <code>(objectClass=*)</code> filter.
+     *
+     * @param dn the distinguished name of the entry to list the children of
+     * @param aliasDerefMode the alias dereferencing mode used
+     * @param returningAttributes the attributes to return
+     * @param sizeLimit the upper bound to the number of entries to return
+     * @param timeLimit the upper bound to the amount of time before 
+     * terminating the search
+     * @throws Exception if there are failures while listing children
+     */
+    Cursor<ClonedServerEntry> list( LdapDN dn, AliasDerefMode aliasDerefMode, 
         Set<AttributeTypeOptions> returningAttributes, int sizeLimit, int timeLimit ) throws Exception;
     
     
+    /**
+     * Searches the directory using a specified search scope and filter.
+     *
+     * @param dn the distinguished name of the entry to list the children of
+     * @param scope the search scope to apply
+     * @param aliasDerefMode the alias dereferencing mode used
+     * @param returningAttributes the attributes to return
+     * @throws Exception if there are failures while listing children
+     */
     void search( LdapDN dn, SearchScope scope, ExprNode filter, AliasDerefMode aliasDerefMode, 
         Set<AttributeTypeOptions> returningAttributes ) throws Exception;
     
     
+    /**
+     * Searches the directory using a specified search scope and filter.
+     *
+     * @param dn the distinguished name of the entry to list the children of
+     * @param aliasDerefMode the alias dereferencing mode used
+     * @param returningAttributes the attributes to return
+     * @param sizeLimit the upper bound to the number of entries to return
+     * @param timeLimit the upper bound to the amount of time before 
+     * terminating the search
+     * @throws Exception if there are failures while listing children
+     */
     void search( LdapDN dn, SearchScope scope, ExprNode filter, AliasDerefMode aliasDerefMode, 
         Set<AttributeTypeOptions> returningAttributes, int sizeLimit, int timeLimit ) throws Exception;
 }

Modified: directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/DefaultDirectoryService.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/DefaultDirectoryService.java?rev=661934&r1=661933&r2=661934&view=diff
==============================================================================
--- directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/DefaultDirectoryService.java (original)
+++ directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/DefaultDirectoryService.java Fri May 30 19:51:51 2008
@@ -149,7 +149,14 @@
 
     /** the change log service */
     private ChangeLog changeLog;
+    
+    /** 
+     * the interface used to perform various operations on this 
+     * DirectoryService
+     */
+    private OperationManager operationManager = new DefaultOperationManager( this );
 
+    /** the distinguished name of the administrative user */
     private LdapDN adminDn;
 
     /** remove me after implementation is completed */
@@ -735,6 +742,12 @@
         return changeLog.getCurrentRevision();
     }
 
+    
+    public OperationManager getOperationManager()
+    {
+        return operationManager;
+    }
+    
 
     /**
      * @throws NamingException if the LDAP server cannot be started
@@ -1331,7 +1344,7 @@
         
         for ( String attributeId : listing.getIndexedAttributes() )
         {
-            indexedAttributes.add( new JdbmIndex( attributeId ) );
+            indexedAttributes.add( new JdbmIndex<Object,ServerEntry>( attributeId ) );
         }
 
         schemaPartition.setIndexedAttributes( indexedAttributes );
@@ -1367,7 +1380,7 @@
             if ( partition instanceof BTreePartition )
             {
                 JdbmPartition btpconf = ( JdbmPartition ) partition;
-                for ( Index index : btpconf.getIndexedAttributes() )
+                for ( Index<?,ServerEntry> index : btpconf.getIndexedAttributes() )
                 {
                     String schemaName = dao.findSchema( index.getAttributeId() );
                     if ( schemaName == null )

Added: directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/DefaultOperationManager.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/DefaultOperationManager.java?rev=661934&view=auto
==============================================================================
--- directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/DefaultOperationManager.java (added)
+++ directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/DefaultOperationManager.java Fri May 30 19:51:51 2008
@@ -0,0 +1,215 @@
+/*
+ *   Licensed to the Apache Software Foundation (ASF) under one
+ *   or more contributor license agreements.  See the NOTICE file
+ *   distributed with this work for additional information
+ *   regarding copyright ownership.  The ASF licenses this file
+ *   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.
+ *
+ */
+package org.apache.directory.server.core;
+
+
+import java.util.Iterator;
+
+import org.apache.directory.server.core.entry.ClonedServerEntry;
+import org.apache.directory.server.core.filtering.EntryFilteringCursor;
+import org.apache.directory.server.core.interceptor.context.AddOperationContext;
+import org.apache.directory.server.core.interceptor.context.BindOperationContext;
+import org.apache.directory.server.core.interceptor.context.CompareOperationContext;
+import org.apache.directory.server.core.interceptor.context.DeleteOperationContext;
+import org.apache.directory.server.core.interceptor.context.EntryOperationContext;
+import org.apache.directory.server.core.interceptor.context.GetMatchedNameOperationContext;
+import org.apache.directory.server.core.interceptor.context.GetRootDSEOperationContext;
+import org.apache.directory.server.core.interceptor.context.GetSuffixOperationContext;
+import org.apache.directory.server.core.interceptor.context.ListOperationContext;
+import org.apache.directory.server.core.interceptor.context.ListSuffixOperationContext;
+import org.apache.directory.server.core.interceptor.context.LookupOperationContext;
+import org.apache.directory.server.core.interceptor.context.ModifyOperationContext;
+import org.apache.directory.server.core.interceptor.context.MoveAndRenameOperationContext;
+import org.apache.directory.server.core.interceptor.context.MoveOperationContext;
+import org.apache.directory.server.core.interceptor.context.RenameOperationContext;
+import org.apache.directory.server.core.interceptor.context.SearchOperationContext;
+import org.apache.directory.server.core.interceptor.context.UnbindOperationContext;
+import org.apache.directory.shared.ldap.name.LdapDN;
+
+
+/**
+ * The default implementation of an OperationManager.
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ * @version $Rev$, $Date$
+ */
+public class DefaultOperationManager implements OperationManager
+{
+    private final DirectoryService directoryService;
+
+
+    public DefaultOperationManager( DirectoryService directoryService )
+    {
+        this.directoryService = directoryService;
+    }
+
+
+    /* (non-Javadoc)
+     * @see org.apache.directory.server.core.OperationManager#add(org.apache.directory.server.core.interceptor.context.AddOperationContext)
+     */
+    public void add( AddOperationContext opContext ) throws Exception
+    {
+        directoryService.getInterceptorChain().add( opContext );
+    }
+
+
+    /* (non-Javadoc)
+     * @see org.apache.directory.server.core.OperationManager#bind(org.apache.directory.server.core.interceptor.context.BindOperationContext)
+     */
+    public void bind( BindOperationContext opContext ) throws Exception
+    {
+        directoryService.getInterceptorChain().bind( opContext );
+    }
+
+
+    /* (non-Javadoc)
+     * @see org.apache.directory.server.core.OperationManager#compare(org.apache.directory.server.core.interceptor.context.CompareOperationContext)
+     */
+    public boolean compare( CompareOperationContext opContext ) throws Exception
+    {
+        return directoryService.getInterceptorChain().compare( opContext );
+    }
+
+
+    /* (non-Javadoc)
+     * @see org.apache.directory.server.core.OperationManager#delete(org.apache.directory.server.core.interceptor.context.DeleteOperationContext)
+     */
+    public void delete( DeleteOperationContext opContext ) throws Exception
+    {
+        directoryService.getInterceptorChain().delete( opContext );
+    }
+
+
+    /* (non-Javadoc)
+     * @see org.apache.directory.server.core.OperationManager#getMatchedName(org.apache.directory.server.core.interceptor.context.GetMatchedNameOperationContext)
+     */
+    public LdapDN getMatchedName( GetMatchedNameOperationContext opContext ) throws Exception
+    {
+        return directoryService.getInterceptorChain().getMatchedName( opContext );
+    }
+
+
+    /* (non-Javadoc)
+     * @see org.apache.directory.server.core.OperationManager#getRootDSE(org.apache.directory.server.core.interceptor.context.GetRootDSEOperationContext)
+     */
+    public ClonedServerEntry getRootDSE( GetRootDSEOperationContext opContext ) throws Exception
+    {
+        return directoryService.getInterceptorChain().getRootDSE( opContext );
+    }
+
+
+    /* (non-Javadoc)
+     * @see org.apache.directory.server.core.OperationManager#getSuffix(org.apache.directory.server.core.interceptor.context.GetSuffixOperationContext)
+     */
+    public LdapDN getSuffix( GetSuffixOperationContext opContext ) throws Exception
+    {
+        return directoryService.getInterceptorChain().getSuffix( opContext );
+    }
+
+
+    /* (non-Javadoc)
+     * @see org.apache.directory.server.core.OperationManager#hasEntry(org.apache.directory.server.core.interceptor.context.EntryOperationContext)
+     */
+    public boolean hasEntry( EntryOperationContext opContext ) throws Exception
+    {
+        return directoryService.getInterceptorChain().hasEntry( opContext );
+    }
+
+
+    /* (non-Javadoc)
+     * @see org.apache.directory.server.core.OperationManager#list(org.apache.directory.server.core.interceptor.context.ListOperationContext)
+     */
+    public EntryFilteringCursor list( ListOperationContext opContext ) throws Exception
+    {
+        return directoryService.getInterceptorChain().list( opContext );
+    }
+
+
+    /* (non-Javadoc)
+     * @see org.apache.directory.server.core.OperationManager#listSuffixes(org.apache.directory.server.core.interceptor.context.ListSuffixOperationContext)
+     */
+    public Iterator<String> listSuffixes( ListSuffixOperationContext opContext ) throws Exception
+    {
+        return directoryService.getInterceptorChain().listSuffixes( opContext );
+    }
+
+
+    /* (non-Javadoc)
+     * @see org.apache.directory.server.core.OperationManager#lookup(org.apache.directory.server.core.interceptor.context.LookupOperationContext)
+     */
+    public ClonedServerEntry lookup( LookupOperationContext opContext ) throws Exception
+    {
+        return directoryService.getInterceptorChain().lookup( opContext );
+    }
+
+
+    /* (non-Javadoc)
+     * @see org.apache.directory.server.core.OperationManager#modify(org.apache.directory.server.core.interceptor.context.ModifyOperationContext)
+     */
+    public void modify( ModifyOperationContext opContext ) throws Exception
+    {
+        directoryService.getInterceptorChain().modify( opContext );
+    }
+
+
+    /* (non-Javadoc)
+     * @see org.apache.directory.server.core.OperationManager#move(org.apache.directory.server.core.interceptor.context.MoveOperationContext)
+     */
+    public void move( MoveOperationContext opContext ) throws Exception
+    {
+        directoryService.getInterceptorChain().move( opContext );
+    }
+
+
+    /* (non-Javadoc)
+     * @see org.apache.directory.server.core.OperationManager#moveAndRename(org.apache.directory.server.core.interceptor.context.MoveAndRenameOperationContext)
+     */
+    public void moveAndRename( MoveAndRenameOperationContext opContext ) throws Exception
+    {
+        directoryService.getInterceptorChain().moveAndRename( opContext );
+    }
+
+
+    /* (non-Javadoc)
+     * @see org.apache.directory.server.core.OperationManager#rename(org.apache.directory.server.core.interceptor.context.RenameOperationContext)
+     */
+    public void rename( RenameOperationContext opContext ) throws Exception
+    {
+        directoryService.getInterceptorChain().rename( opContext );
+    }
+
+
+    /* (non-Javadoc)
+     * @see org.apache.directory.server.core.OperationManager#search(org.apache.directory.server.core.interceptor.context.SearchOperationContext)
+     */
+    public EntryFilteringCursor search( SearchOperationContext opContext ) throws Exception
+    {
+        return directoryService.getInterceptorChain().search( opContext );
+    }
+
+
+    /* (non-Javadoc)
+     * @see org.apache.directory.server.core.OperationManager#unbind(org.apache.directory.server.core.interceptor.context.UnbindOperationContext)
+     */
+    public void unbind( UnbindOperationContext opContext ) throws Exception
+    {
+        directoryService.getInterceptorChain().unbind( opContext );
+    }
+}

Modified: directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/DirectoryService.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/DirectoryService.java?rev=661934&r1=661933&r2=661934&view=diff
==============================================================================
--- directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/DirectoryService.java (original)
+++ directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/DirectoryService.java Fri May 30 19:51:51 2008
@@ -389,4 +389,10 @@
      * @param dn the DN for this new entry
      */
     ServerEntry newEntry( String ldif, String dn );
+    
+    
+    /**
+     * Gets the operation manager.
+     */
+    OperationManager getOperationManager();
 }

Added: directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/OperationManager.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/OperationManager.java?rev=661934&view=auto
==============================================================================
--- directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/OperationManager.java (added)
+++ directory/apacheds/branches/bigbang/core/src/main/java/org/apache/directory/server/core/OperationManager.java Fri May 30 19:51:51 2008
@@ -0,0 +1,156 @@
+/*
+ *   Licensed to the Apache Software Foundation (ASF) under one
+ *   or more contributor license agreements.  See the NOTICE file
+ *   distributed with this work for additional information
+ *   regarding copyright ownership.  The ASF licenses this file
+ *   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.
+ *
+ */
+package org.apache.directory.server.core;
+
+
+import java.util.Iterator;
+
+import org.apache.directory.server.core.entry.ClonedServerEntry;
+import org.apache.directory.server.core.filtering.EntryFilteringCursor;
+import org.apache.directory.server.core.interceptor.context.AddOperationContext;
+import org.apache.directory.server.core.interceptor.context.BindOperationContext;
+import org.apache.directory.server.core.interceptor.context.CompareOperationContext;
+import org.apache.directory.server.core.interceptor.context.DeleteOperationContext;
+import org.apache.directory.server.core.interceptor.context.EntryOperationContext;
+import org.apache.directory.server.core.interceptor.context.GetMatchedNameOperationContext;
+import org.apache.directory.server.core.interceptor.context.GetRootDSEOperationContext;
+import org.apache.directory.server.core.interceptor.context.GetSuffixOperationContext;
+import org.apache.directory.server.core.interceptor.context.ListOperationContext;
+import org.apache.directory.server.core.interceptor.context.ListSuffixOperationContext;
+import org.apache.directory.server.core.interceptor.context.LookupOperationContext;
+import org.apache.directory.server.core.interceptor.context.ModifyOperationContext;
+import org.apache.directory.server.core.interceptor.context.MoveAndRenameOperationContext;
+import org.apache.directory.server.core.interceptor.context.MoveOperationContext;
+import org.apache.directory.server.core.interceptor.context.RenameOperationContext;
+import org.apache.directory.server.core.interceptor.context.SearchOperationContext;
+import org.apache.directory.server.core.interceptor.context.UnbindOperationContext;
+import org.apache.directory.shared.ldap.name.LdapDN;
+
+
+/**
+ * An interface used by the DirectoryService to isolate operations that can be 
+ * performed on it.
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ * @version $Rev$, $Date$
+ */
+public interface OperationManager
+{
+    /**
+     * TODO document after determining if this method should be here.
+     */
+    ClonedServerEntry getRootDSE( GetRootDSEOperationContext  opContext ) throws Exception;
+
+
+    /**
+     * TODO document after determining if this method should be here.
+     */
+    LdapDN getMatchedName( GetMatchedNameOperationContext opContext ) throws Exception;
+
+
+    /**
+     * TODO document after determining if this method should be here.
+     */
+    LdapDN getSuffix ( GetSuffixOperationContext opContext ) throws Exception;
+
+
+    /**
+     * TODO document after determining if this method should be here.
+     */
+    Iterator<String> listSuffixes( ListSuffixOperationContext opContext ) throws Exception;
+
+
+    /**
+     * TODO document after determining if this method should be here.
+     */
+    boolean compare( CompareOperationContext opContext) throws Exception;
+
+
+    /**
+     * TODO document after determining if this method should be here.
+     */
+    void delete( DeleteOperationContext opContext ) throws Exception;
+
+
+    /**
+     * TODO document after determining if this method should be here.
+     */
+    void add( AddOperationContext opContext ) throws Exception;
+
+
+    /**
+     * TODO document after determining if this method should be here.
+     */
+    void modify( ModifyOperationContext opContext ) throws Exception;
+
+
+    /**
+     * TODO document after determining if this method should be here.
+     */
+    EntryFilteringCursor list( ListOperationContext opContext ) throws Exception;
+
+
+    /**
+     * TODO document after determining if this method should be here.
+     */
+    EntryFilteringCursor search( SearchOperationContext opContext ) throws Exception;
+
+
+    /**
+     * TODO document after determining if this method should be here.
+     */
+    ClonedServerEntry lookup( LookupOperationContext opContext ) throws Exception;
+
+
+    /**
+     * TODO document after determining if this method should be here.
+     */
+    boolean hasEntry( EntryOperationContext opContext ) throws Exception;
+
+
+    /**
+     * TODO document after determining if this method should be here.
+     */
+    void rename( RenameOperationContext opContext ) throws Exception;
+
+
+    /**
+     * TODO document after determining if this method should be here.
+     */
+    void move( MoveOperationContext opContext ) throws Exception;
+
+
+    /**
+     * TODO document after determining if this method should be here.
+     */
+    void moveAndRename( MoveAndRenameOperationContext opContext ) throws Exception;
+
+    
+    /**
+     * TODO document after determining if this method should be here.
+     */
+    void bind( BindOperationContext opContext ) throws Exception;
+
+    
+    /**
+     * TODO document after determining if this method should be here.
+     */
+    void unbind( UnbindOperationContext opContext ) throws Exception;
+}