final Map<Object, D> dataBefore = listOfIdentifiableToMap(customizer.extract(currentId, parentDataBefore));
final Map<Object, D> dataAfter = listOfIdentifiableToMap(customizer.extract(currentId, parentDataAfter));
+ // The order of delete/write/update operations can have side-effects for devices like VPP
+ // TODO make it configurable
+
+ // First perform delete:
+ for (Object deletedNodeKey : Sets.difference(dataBefore.keySet(), dataAfter.keySet())) {
+ final D deleted = dataBefore.get(deletedNodeKey);
+ deleteCurrent(currentId, deleted, ctx);
+ }
+
+ // Then write/update:
for (Map.Entry<Object, D> after : dataAfter.entrySet()) {
final D before = dataBefore.get(after.getKey());
if(before == null) {
}
}
- // Delete the rest in dataBefore
- for (Object deletedNodeKey : Sets.difference(dataBefore.keySet(), dataAfter.keySet())) {
- final D deleted = dataBefore.get(deletedNodeKey);
- deleteCurrent(currentId, deleted, ctx);
- }
-
}
@Override