final DataRecordIdentifier dataRecordIdentifier,
final boolean persisted, final Object instanceCreated,
final boolean constructed) throws ProxyException,
ObjectIOException, ObjectIODataCorruptedException {
ObjectAndPersistInfo objectAndPersistInfo;
objectAndPersistInfo = objectIOManager
.getObjectAndPersistInfoOfObject(instanceCreated);
if (objectAndPersistInfo == null) {
// not created by save
// FIXMELUC ___seems dataRecordIdentifier always null, see call
// FIXMELUC ___check persisted flag
if (dataRecordIdentifier == null) {
if (constructed) {
/*
* use getOrCreate because constructor can use instance
* factory that set object persist info
*/
objectAndPersistInfo = objectIOManager
.getOrCreateObjectPersistInfoOfObject(
instanceCreated, true, objectClassInfo,
persisted);
} else {
assert objectIOManager
.getObjectAndPersistInfoOfObject(instanceCreated) == null : "must not have associated persist information";
objectAndPersistInfo = objectIOManager
.createObjectPersistInfoOfObject(instanceCreated,
true, objectClassInfo, persisted);
}
} else if (persisted) {
if (constructed) {
/*
* use getOrCreate because constructor can use instance
* factory that set object persist info
*/
objectAndPersistInfo = objectIOManager
.getOrCreateObjectPersistInfoOfObject(
instanceCreated, true, objectClassInfo,
dataRecordIdentifier);
} else {
assert objectIOManager
.getObjectAndPersistInfoOfObject(instanceCreated) == null : "must not have associated persist information";
objectAndPersistInfo = objectIOManager
.createObjectPersistInfoOfObject(instanceCreated,
true, objectClassInfo, dataRecordIdentifier);
}
} else {
throw new ProxyException(
"data record identifier must not be defined if object not persisted");
}
objectAndPersistInfo.setStorageInfo(storageInfo);
if (constructed) {
assert objectAndPersistInfo.isNotWeak() : objectAndPersistInfo
.toString();
assert objectAndPersistInfo.isLoaded() : objectAndPersistInfo
.toString();
// objectIOManager.objectIsAccessed(objectAndPersistInfo);
// objectAndPersistInfo.setNewObject(true);
objectIOManager.newObjectLoaded();
}
} else {
// created by save
assert constructed;
assert objectAndPersistInfo.isNotWeak() : objectAndPersistInfo
.toString();
assert objectAndPersistInfo.isLoaded() : objectAndPersistInfo
.toString();
assert persisted;
assert dataRecordIdentifier == null;
objectAndPersistInfo.setStorageInfo(storageInfo);
// objectIOManager.objectIsAccessed(objectAndPersistInfo);
// objectAndPersistInfo.setNewObject(true);
objectIOManager.newObjectLoaded();
}
return objectAndPersistInfo;