ConfigurationDeleteListener<TestParentCfg> listener = new TestParentDeleteListener();
root.registerDeleteListener(TestCfg.getTestOneToManyParentRelationDefinition(), listener);
// Make sure that the relation entry does not exist.
DN relationDN = DN.decode("cn=test parents,cn=config");
ConfigEntry configEntry = DirectoryServer.getConfigEntry(relationDN);
assertNull(configEntry, "Relation entry " + relationDN + " already exists");
// Make sure that the listener was delayed and registered against
// the parent.
DN parentDN = DN.decode("cn=config");
configEntry = DirectoryServer.getConfigEntry(parentDN);
assertNotNull(configEntry, "Relation parent entry " + parentDN
+ " does not exist");
boolean isFound = false;
for (ConfigAddListener l : configEntry.getAddListeners()) {
if (l instanceof DelayedConfigAddListener) {
DelayedConfigAddListener dl = (DelayedConfigAddListener) l;
ConfigDeleteListener tmp = dl.getDelayedDeleteListener();
if (tmp instanceof ConfigDeleteListenerAdaptor) {
ConfigDeleteListenerAdaptor<?> al = (ConfigDeleteListenerAdaptor<?>) tmp;
if (extractListener(al) == listener) {
isFound = true;
}
}
}
}
if (!isFound) {
fail("Unable to locate delayed listener in entry " + parentDN);
}
// Now make sure that the delayed listener is removed from the
// parent and the add listener register against the relation entry
// when it is created.
String[] entry = new String[] {
"dn: cn=test parents,cn=config",
"objectclass: top",
"objectclass: ds-cfg-branch",
"cn: test-parents"
};
TestCaseUtils.addEntry(entry);
// Check the delayed listener is removed.
for (ConfigAddListener l : configEntry.getAddListeners()) {
if (l instanceof DelayedConfigAddListener) {
DelayedConfigAddListener dl = (DelayedConfigAddListener) l;
ConfigDeleteListener tmp = dl.getDelayedDeleteListener();
if (tmp instanceof ConfigDeleteListenerAdaptor) {
ConfigDeleteListenerAdaptor<?> al = (ConfigDeleteListenerAdaptor<?>) tmp;
if (extractListener(al) == listener) {
fail("Delayed listener still exists in entry " + parentDN
+ " when it should have been removed");
// Clean up.
configEntry.deregisterAddListener(dl);
}
}
}
}
// Check the add listener is registered.
configEntry = DirectoryServer.getConfigEntry(relationDN);
assertNotNull(configEntry, "Relation entry " + relationDN
+ " does not exist");
isFound = false;
for (ConfigDeleteListener l : configEntry.getDeleteListeners()) {
if (l instanceof ConfigDeleteListenerAdaptor) {
ConfigDeleteListenerAdaptor<?> al = (ConfigDeleteListenerAdaptor<?>) l;
if (extractListener(al) == listener) {
isFound = true;
// Clean up.
configEntry.deregisterDeleteListener(al);
}
}
}
if (!isFound) {