void postprocess() {
if (!objectsByDescriptor.isEmpty()) {
CompoundDiff result = parent.getResultDiff();
Map modifiedSnapshots = parent.getResultModifiedSnapshots();
Collection deletedIds = parent.getResultDeletedIds();
Iterator it = objectsByDescriptor.entrySet().iterator();
while (it.hasNext()) {
Map.Entry entry = (Map.Entry) it.next();
ClassDescriptor descriptor = (ClassDescriptor) entry.getKey();
Iterator objects = ((Collection) entry.getValue()).iterator();
while (objects.hasNext()) {
Persistent object = (Persistent) objects.next();
ObjectId id = object.getObjectId();
ObjectId finalId;
// record id change and update attributes for generated ids
if (id.isReplacementIdAttached()) {
Map replacement = id.getReplacementIdMap();
Iterator idProperties = descriptor.getIdProperties();
while (idProperties.hasNext()) {
AttributeProperty property = (AttributeProperty) idProperties
.next();
Object value = replacement.get(property
.getAttribute()
.getDbAttributeName());
// TODO: andrus, 11/28/2006: this operation may be redundant
// if the id wasn't generated. We may need to optimize it...
if (value != null) {
property.writePropertyDirectly(object, null, value);
}
}
ObjectId replacementId = id.createReplacementId();
result.add(new NodeIdChangeOperation(id, replacementId));
// classify replaced permanent ids as "deleted", as
// DataRowCache has no notion of replaced id...
if (!id.isTemporary()) {
deletedIds.add(id);