this.dependencies = new HashSet<DN>();
this.dependencyListener = new ConfigChangeListener() {
public ConfigChangeResult applyConfigurationChange(
ConfigEntry configEntry) {
ConfigEntry dependentConfigEntry = getConfigEntry(dn);
if (dependentConfigEntry != null) {
return ConfigChangeListenerAdaptor.this
.applyConfigurationChange(dependentConfigEntry);
} else {
// The dependent entry was not found.
configEntry.deregisterChangeListener(this);
return new ConfigChangeResult(ResultCode.SUCCESS, false);
}
}
public boolean configChangeIsAcceptable(ConfigEntry configEntry,
MessageBuilder unacceptableReason) {
ConfigEntry dependentConfigEntry = getConfigEntry(dn);
if (dependentConfigEntry != null) {
return ConfigChangeListenerAdaptor.this.configChangeIsAcceptable(
dependentConfigEntry, unacceptableReason, configEntry);
} else {
// The dependent entry was not found.
configEntry.deregisterChangeListener(this);
return true;
}
}
};
AbstractManagedObjectDefinition<?, ?> d = path.getManagedObjectDefinition();
for (PropertyDefinition<?> pd : d.getAllPropertyDefinitions()) {
Visitor.find(path, pd, dependencies);
}
for (DN entryDN : dependencies) {
// Be careful not to register listeners against the dependent
// entry itself.
if (!entryDN.equals(dn)) {
ConfigEntry configEntry = getConfigEntry(entryDN);
if (configEntry != null) {
configEntry.registerChangeListener(dependencyListener);
}
}
}
// Register a delete listener against the parent which will
// finalize this change listener when the monitored configuration
// entry is removed.
this.cleanerListener = new ConfigDeleteListener() {
public ConfigChangeResult applyConfigurationDelete(
ConfigEntry configEntry) {
// Perform finalization if the deleted entry is the monitored
// entry.
if (configEntry.getDN().equals(dn)) {
finalizeChangeListener();
}
return new ConfigChangeResult(ResultCode.SUCCESS, false);
}
public boolean configDeleteIsAcceptable(ConfigEntry configEntry,
MessageBuilder unacceptableReason) {
// Always acceptable.
return true;
}
};
DN parent = dn.getParent();
if (parent != null) {
ConfigEntry configEntry = getConfigEntry(dn.getParent());
if (configEntry != null) {
configEntry.registerDeleteListener(cleanerListener);
}
}
}