| /* |
| * 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.partition; |
| |
| |
| import org.apache.directory.server.core.DirectoryService; |
| import org.apache.directory.server.core.entry.ServerEntry; |
| import org.apache.directory.server.core.entry.ServerSearchResult; |
| 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.DeleteOperationContext; |
| import org.apache.directory.server.core.interceptor.context.EntryOperationContext; |
| import org.apache.directory.server.core.interceptor.context.ListOperationContext; |
| 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; |
| |
| import javax.naming.Context; |
| import javax.naming.NamingEnumeration; |
| import javax.naming.NamingException; |
| |
| |
| /** |
| * An interfaces that bridges between underlying JNDI entries and JNDI |
| * {@link Context} API. DIT (Directory Information Tree) consists one or |
| * above {@link Partition}s whose parent is {@link PartitionNexus}, |
| * and all of them are mapped to different |
| * base suffix. Each partition contains entries whose name ends with that |
| * base suffix. |
| * |
| * @org.apache.xbean.XBean |
| * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a> |
| * @version $Rev$ |
| */ |
| public interface Partition |
| { |
| /** The name of reserved system partition */ |
| String SYSTEM_PARTITION_NAME = "system"; |
| |
| /** default partition implementation class */ |
| String DEFAULT_PARTITION_IMPLEMENTATION = "org.apache.directory.server.core.partition.impl.btree.jdbm.JdbmPartition"; |
| |
| /** the default entry cache size to use for a partition */ |
| int DEFAULT_CACHE_SIZE = 10000; |
| |
| |
| // ----------------------------------------------------------------------- |
| // C O N F I G U R A T I O N M E T H O D S |
| // ----------------------------------------------------------------------- |
| |
| |
| /** |
| * Gets the unique identifier for this partition. |
| * |
| * @return the unique identifier for this partition |
| */ |
| String getId(); |
| |
| |
| /** |
| * Sets the unique identifier for this partition. |
| * |
| * @param id the unique identifier for this partition |
| */ |
| void setId( String id ); |
| |
| |
| /** |
| * Gets the root entry of the partition, the entry for the suffix. |
| * |
| * @return the entry for the suffix of this Partition. |
| */ |
| ServerEntry getContextEntry(); |
| |
| |
| /** |
| * Sets the root entry of the partition, the entry for the suffix. |
| * |
| * @param contextEntry the entry for the suffix of this Partition. |
| */ |
| void setContextEntry( ServerEntry contextEntry ); |
| |
| |
| /** |
| * Gets the non-normalized suffix for this Partition as a string. |
| * |
| * @return the suffix string for this Partition. |
| */ |
| String getSuffix(); |
| |
| |
| /** |
| * Sets the non-normalized suffix for this Partition as a string. |
| * |
| * @param suffix the suffix string for this Partition. |
| */ |
| void setSuffix( String suffix ); |
| |
| |
| |
| /** |
| * Used to specify the entry cache size for a Partition. Various Partition |
| * implementations may interpret this value in different ways: i.e. total cache |
| * size limit verses the number of entries to cache. |
| * |
| * @param cacheSize the size of the cache |
| */ |
| void setCacheSize( int cacheSize ); |
| |
| |
| /** |
| * Gets the entry cache size for this partition. |
| * |
| * @return the size of the cache |
| */ |
| int getCacheSize(); |
| |
| |
| // ----------------------------------------------------------------------- |
| // E N D C O N F I G U R A T I O N M E T H O D S |
| // ----------------------------------------------------------------------- |
| |
| |
| /** |
| * Initializes this partition. |
| * |
| * @param core the directory core for the server. |
| * @throws NamingException if initialization fails in any way |
| */ |
| void init( DirectoryService core ) throws NamingException; |
| |
| |
| /** |
| * Deinitialized this partition. |
| */ |
| void destroy(); |
| |
| |
| /** |
| * Checks to see if this partition is initialized or not. |
| * @return true if the partition is initialized, false otherwise |
| */ |
| boolean isInitialized(); |
| |
| |
| /** |
| * Flushes any changes made to this partition now. |
| * @throws NamingException if buffers cannot be flushed to disk |
| */ |
| void sync() throws NamingException; |
| |
| |
| /** |
| * Gets the distinguished/absolute name of the suffix for all entries |
| * stored within this ContextPartition. |
| * |
| * @return Name representing the distinguished/absolute name of this |
| * ContextPartitions root context. |
| * @throws NamingException if access or suffix parsing fails |
| */ |
| LdapDN getSuffixDn() throws NamingException; |
| |
| /** |
| * Gets the distinguished/absolute name of the suffix for all entries |
| * stored within this ContextPartition. |
| * |
| * @return Name representing the distinguished/absolute name of this |
| * ContextPartitions root context. |
| * @throws NamingException if access or suffix parsing fails |
| */ |
| LdapDN getUpSuffixDn() throws NamingException; |
| |
| /** |
| * Deletes a leaf entry from this ContextPartition: non-leaf entries cannot be |
| * deleted until this operation has been applied to their children. |
| * |
| * @param opContext the context of the entry to |
| * delete from this ContextPartition. |
| * @throws NamingException if there are any problems |
| */ |
| void delete( DeleteOperationContext opContext ) throws NamingException; |
| |
| |
| /** |
| * Adds an entry to this ContextPartition. |
| * |
| * @param opContext the context used to add and entry to this ContextPartition |
| * @throws NamingException if there are any problems |
| */ |
| void add( AddOperationContext opContext ) throws NamingException; |
| |
| |
| /** |
| * Modifies an entry by adding, removing or replacing a set of attributes. |
| * |
| * @param opContext The contetx containin the modification operation |
| * to perform on the entry which is one of constants specified by the |
| * DirContext interface: |
| * <code>ADD_ATTRIBUTE, REMOVE_ATTRIBUTE, REPLACE_ATTRIBUTE</code>. |
| * |
| * @throws NamingException if there are any problems |
| * @see javax.naming.directory.DirContext |
| * @see javax.naming.directory.DirContext#ADD_ATTRIBUTE |
| * @see javax.naming.directory.DirContext#REMOVE_ATTRIBUTE |
| * @see javax.naming.directory.DirContext#REPLACE_ATTRIBUTE |
| */ |
| void modify( ModifyOperationContext opContext ) throws NamingException; |
| |
| |
| /** |
| * A specialized form of one level search used to return a minimal set of |
| * information regarding child entries under a base. Convenience method |
| * used to optimize operations rather than conducting a full search with |
| * retrieval. |
| * |
| * @param opContext the context containing the distinguished/absolute name for the search/listing |
| * @return a NamingEnumeration containing objects of type {@link SearchResult} |
| * @throws NamingException if there are any problems |
| */ |
| NamingEnumeration<ServerSearchResult> list( ListOperationContext opContext ) throws NamingException; |
| |
| |
| /** |
| * Conducts a search against this ContextPartition. Namespace specific |
| * parameters for search are contained within the environment using |
| * namespace specific keys into the hash. For example in the LDAP namespace |
| * a ContextPartition implementation may look for search Controls using a |
| * namespace specific or implementation specific key for the set of LDAP |
| * Controls. |
| * |
| * @param opContext The context containing the information used by the operation |
| * @throws NamingException if there are any problems |
| * @return a NamingEnumeration containing objects of type |
| * <a href="http://java.sun.com/j2se/1.4.2/docs/api/ |
| * javax/naming/directory/SearchResult.html">SearchResult</a>. |
| */ |
| NamingEnumeration<ServerSearchResult> search( SearchOperationContext opContext ) |
| throws NamingException; |
| |
| |
| /** |
| * Looks up an entry by distinguished/absolute name. This is a simplified |
| * version of the search operation used to point read an entry used for |
| * convenience. |
| * |
| * Depending on the context parameters, we my look for a simple entry, |
| * or for a restricted set of attributes for this entry |
| * |
| * @param lookupContext The context containing the parameters |
| * @return an Attributes object representing the entry |
| * @throws NamingException if there are any problems |
| */ |
| ServerEntry lookup( LookupOperationContext lookupContext ) throws NamingException; |
| |
| /** |
| * Fast operation to check and see if a particular entry exists. |
| * |
| * @param opContext The context used to pass informations |
| * @return true if the entry exists, false if it does not |
| * @throws NamingException if there are any problems |
| */ |
| boolean hasEntry( EntryOperationContext opContext ) throws NamingException; |
| |
| /** |
| * Modifies an entry by changing its relative name. Optionally attributes |
| * associated with the old relative name can be removed from the entry. |
| * This makes sense only in certain namespaces like LDAP and will be ignored |
| * if it is irrelavent. |
| * |
| * @param opContext the modify DN context |
| * @throws NamingException if there are any problems |
| */ |
| void rename( RenameOperationContext opContext ) throws NamingException; |
| |
| |
| /** |
| * Transplants a child entry, to a position in the namespace under a new |
| * parent entry. |
| * |
| * @param opContext The context containing the DNs to move |
| * @throws NamingException if there are any problems |
| */ |
| void move( MoveOperationContext opContext ) throws NamingException; |
| |
| |
| /** |
| * Transplants a child entry, to a position in the namespace under a new |
| * parent entry and changes the RN of the child entry which can optionally |
| * have its old RN attributes removed. The removal of old RN attributes |
| * may not make sense in all namespaces. If the concept is undefined in a |
| * namespace this parameters is ignored. An example of a namespace where |
| * this parameter is significant is the LDAP namespace. |
| * |
| * @param opContext The context contain all the information about |
| * the modifyDN operation |
| * @throws NamingException if there are any problems |
| */ |
| void moveAndRename( MoveAndRenameOperationContext opContext ) throws NamingException; |
| |
| |
| /** |
| * Represents a bind operation issued to authenticate a client. Partitions |
| * need not support this operation. This operation is here to enable those |
| * interested in implementing virtual directories with ApacheDS. |
| * |
| * @param opContext the bind context, containing all the needed informations to bind |
| * @throws NamingException if something goes wrong |
| */ |
| void bind( BindOperationContext opContext ) throws NamingException; |
| |
| /** |
| * Represents an unbind operation issued by an authenticated client. Partitions |
| * need not support this operation. This operation is here to enable those |
| * interested in implementing virtual directories with ApacheDS. |
| * |
| * @param opContext the context used to unbind |
| * @throws NamingException if something goes wrong |
| */ |
| void unbind( UnbindOperationContext opContext ) throws NamingException; |
| } |