public static boolean comparePropertiesAgainstBaseState(
NodeState state, NodeState base, NodeStateDiff diff) {
Set<String> baseProperties = new HashSet<String>();
for (PropertyState beforeProperty : base.getProperties()) {
String name = beforeProperty.getName();
PropertyState afterProperty = state.getProperty(name);
if (afterProperty == null) {
if (!diff.propertyDeleted(beforeProperty)) {
return false;
}
} else {
baseProperties.add(name);
if (!beforeProperty.equals(afterProperty)) {
if (!diff.propertyChanged(beforeProperty, afterProperty)) {
return false;
}
}
}
}
for (PropertyState afterProperty : state.getProperties()) {
if (!baseProperties.contains(afterProperty.getName())) {
if (!diff.propertyAdded(afterProperty)) {
return false;
}
}
}