blob: 7c53f4bb7f15dc124fc16fb528301dd6971d7dbb [file] [log] [blame]
/*
* 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 javax.naming.Context;
import javax.naming.NamingEnumeration;
import javax.naming.NamingException;
import javax.naming.directory.Attributes;
import javax.naming.directory.SearchResult;
import org.apache.directory.server.core.DirectoryServiceConfiguration;
import org.apache.directory.server.core.configuration.PartitionConfiguration;
import org.apache.directory.server.core.interceptor.context.OperationContext;
import org.apache.directory.shared.ldap.name.LdapDN;
/**
* 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.
*
* @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
* @version $Rev$
*/
public interface Partition
{
/** The objectClass name for aliases: 'alias' */
String ALIAS_OBJECT = "alias";
/**
* The aliased Dn attribute name: aliasedObjectName for LDAP and
* aliasedEntryName or X.500.
*/
String ALIAS_ATTRIBUTE = "aliasedObjectName";
/**
* Initializes this partition.
*/
void init( DirectoryServiceConfiguration factoryCfg, PartitionConfiguration cfg ) throws NamingException;
/**
* Deinitialized this partition.
*/
void destroy();
/**
* Checks to see if this partition is initialized or not.
*/
boolean isInitialized();
/**
* Flushes any changes made to this partition now.
*/
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.
*/
LdapDN getSuffix() 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.
*/
LdapDN getUpSuffix() 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( OperationContext 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( OperationContext 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( OperationContext 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 list( OperationContext 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<SearchResult> search( OperationContext 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
*/
Attributes lookup( OperationContext 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( OperationContext 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( OperationContext 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( OperationContext 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( OperationContext 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( OperationContext 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( OperationContext opContext ) throws NamingException;
}