public void merge(ConfigurationChanges diffs, CompressionRules prevRules, CompressionRules rules,
String parentDN) throws NamingException {
for (CompressionRule prevRule : prevRules) {
String cn = prevRule.getCommonName();
if (rules == null || rules.findByCommonName(cn) == null) {
String dn = LdapUtils.dnOf("cn", cn, parentDN);
config.destroySubcontext(dn);
ConfigurationChanges.addModifiedObject(diffs, dn, ConfigurationChanges.ChangeType.D);
}
}
for (CompressionRule rule : rules) {
String cn = rule.getCommonName();
String dn = LdapUtils.dnOf("cn", cn, parentDN);
CompressionRule prevRule = prevRules != null
? prevRules.findByCommonName(cn)
: null;
if (prevRule == null) {
ConfigurationChanges.ModifiedObject ldapObj =
ConfigurationChanges.addModifiedObject(diffs, dn, ConfigurationChanges.ChangeType.C);
config.createSubcontext(dn,
storeTo(rule, new BasicAttributes(true)));
} else {
ConfigurationChanges.ModifiedObject ldapObj =
ConfigurationChanges.addModifiedObject(diffs, dn, ConfigurationChanges.ChangeType.U);
config.modifyAttributes(dn, storeDiffs(ldapObj, prevRule, rule,
new ArrayList<ModificationItem>()));
ConfigurationChanges.removeLastIfEmpty(diffs, ldapObj);
}
}
}