/*
* CDDL HEADER START
*
* The contents of this file are subject to the terms of the
* Common Development and Distribution License, Version 1.0 only
* (the "License"). You may not use this file except in compliance
* with the License.
*
* You can obtain a copy of the license at legal-notices/CDDLv1_0.txt
* or http://forgerock.org/license/CDDLv1.0.html.
* See the License for the specific language governing permissions
* and limitations under the License.
*
* When distributing Covered Code, include this CDDL HEADER in each
* file and include the License file at legal-notices/CDDLv1_0.txt.
* If applicable, add the following below this CDDL HEADER, with the
* fields enclosed by brackets "[]" replaced with your own identifying
* information:
* Portions Copyright [yyyy] [name of copyright owner]
*
* CDDL HEADER END
*
*
* Copyright 2013 ForgeRock AS.
*/
package org.forgerock.opendj.config.server.spi;
import java.util.List;
import java.util.Set;
import org.forgerock.opendj.config.server.ConfigException;
import org.forgerock.opendj.ldap.DN;
import org.forgerock.opendj.ldap.Entry;
/**
* Provides configuration entries and listener registration on the entries.
*/
public interface ConfigurationRepository {
/**
* Returns the set of DNs of children of the entry corresponding to the
* provided DN. .
*
* @param dn
* DN of a configuration entry.
* @return the set of DN of children of the corresponding entry
* @throws ConfigException
* If a problem occurs during retrieval.
*/
Set<DN> getChildren(DN dn) throws ConfigException;
/**
* Returns the configuration entry for the provided DN.
*
* @param dn
* DN of the configuration entry
* @return the config entry
* @throws ConfigException
* If a problem occurs while trying to retrieve the requested
* entry.
*/
Entry getEntry(DN dn) throws ConfigException;
/**
* Checks if the provided DN corresponds to a configuration entry.
*
* @param dn
* DN of the configuration entry
* @return {@code true} if and only if there is a configuration entry with
* this DN
* @throws ConfigException
* If a problem occurs.
*/
boolean hasEntry(DN dn) throws ConfigException;
/**
* Registers the provided add listener so that it will be notified if any
* new entries are added immediately below the entry corresponding to the
* provided DN.
*
* @param dn
* The DN of the configuration entry.
* @param listener
* The add listener that should be registered.
*/
void registerAddListener(DN dn, ConfigAddListener listener);
/**
* Registers the provided delete listener so that it will be notified if any
* entries are deleted immediately below the entry corresponding to the
* provided DN.
*
* @param dn
* The DN of the configuration entry.
* @param listener
* The delete listener that should be registered.
*/
void registerDeleteListener(DN dn, ConfigDeleteListener listener);
/**
* Registers the provided change listener so that it will be notified of any
* changes to the entry corrresponding to provided DN. No check will be made
* to determine whether the provided listener is already registered.
*
* @param dn
* The DN of the configuration entry.
* @param listener
* The change listener that should be registered.
*/
void registerChangeListener(DN dn, ConfigChangeListener listener);
/**
* Deregisters the provided add listener so that it will no longer be
* notified if any new entries are added immediately below the entry
* corresponding to the provided DN.
*
* @param dn
* The DN of the configuration entry.
* @param listener
* The add listener that should be deregistered.
*/
void deregisterAddListener(DN dn, ConfigAddListener listener);
/**
* Deregisters the provided delete listener so that it will no longer be
* notified if any entries are deleted immediately below the entry
* corresponding to the provided DN.
*
* @param dn
* The DN of the configuration entry.
* @param listener
* The delete listener that should be deregistered.
*/
void deregisterDeleteListener(DN dn, ConfigDeleteListener listener);
/**
* Attempts to deregister the provided change listener with the provided DN.
*
* @param dn
* The DN of the configuration entry.
* @param listener
* The change listener to deregister with this DN.
* @return <CODE>true</CODE> if the specified listener was deregistered, or
* <CODE>false</CODE> if it was not.
*/
boolean deregisterChangeListener(DN dn, ConfigChangeListener listener);
/**
* Retrieves the add listeners that have been registered with the provided
* DN.
*
* @param dn
* The DN of the configuration entry.
* @return The list of add listeners.
*/
List<ConfigAddListener> getAddListeners(DN dn);
/**
* Retrieves the delete listeners that have been registered with the
* provided DN.
*
* @param dn
* The DN of the configuration entry.
* @return The list of delete listeners.
*/
List<ConfigDeleteListener> getDeleteListeners(DN dn);
/**
* Retrieves the change listeners that have been registered with the
* provided DN.
*
* @param dn
* The DN of the configuration entry.
* @return The list of change listeners.
*/
List<ConfigChangeListener> getChangeListeners(DN dn);
}