private <M extends Configuration> void deregisterDelayedAddListener(DN baseDN,
ConfigurationAddListener<M> listener) throws ConfigException {
DN parentDN = baseDN.getParent();
int delayWrappers = 0;
while (parentDN != null) {
ConfigEntry relationEntry = getListenerConfigEntry(parentDN);
if (relationEntry == null) {
parentDN = parentDN.getParent();
delayWrappers++;
} else {
for (ConfigAddListener l : relationEntry.getAddListeners()) {
if(l instanceof DelayedConfigAddListener)
{
DelayedConfigAddListener delayListener =
(DelayedConfigAddListener) l;
ConfigAddListener wrappedListener;
int i = delayWrappers;
for(; i > 0; i--)
{
wrappedListener = delayListener.getDelayedAddListener();
if(wrappedListener != null &&
wrappedListener instanceof DelayedConfigAddListener)
{
delayListener = (DelayedConfigAddListener) l;
}
else
{
break;
}
}
if(i > 0)
{
// There are not enough level of wrapping so this can't be
// the listener we are looking for.
continue;
}
ConfigAddListener delayedListener =
delayListener.getDelayedAddListener();
if (delayedListener != null &&
delayedListener instanceof ConfigAddListenerAdaptor) {
ConfigAddListenerAdaptor<?> adaptor =
(ConfigAddListenerAdaptor<?>) delayedListener;
ServerManagedObjectAddListener<?> l2 = adaptor
.getServerManagedObjectAddListener();
if (l2 instanceof ServerManagedObjectAddListenerAdaptor<?>) {
ServerManagedObjectAddListenerAdaptor<?> adaptor2 =
(ServerManagedObjectAddListenerAdaptor<?>) l2;
if (adaptor2.getConfigurationAddListener() == listener) {
relationEntry.deregisterAddListener(l);
}
}
}
}
}