package net.sourceforge.pain.db;
/**
* PAiN Date: 01.04.2003 Time: 1:21:48
* Inverse reference to Object wich contain this ref from owner of collection
*/
abstract class DbInverseRef {
/** chained list from inverseREfeference of the obj */
DbInverseRef nextInverseRef;
private DbInverseRef prevInverseRef;
/** object we reference to */
DbObject obj;
DbInverseRef(final DbObject obj) {
this.obj = obj;
if (obj == null) {
return;
}
nextInverseRef = obj.inverseRef;
if (nextInverseRef != null) {
nextInverseRef.prevInverseRef = this;
}
obj.inverseRef = this;
}
abstract void _onTargetDelete();
/**
* called on obj deletion from PainDB
*/
final void onTargetDelete() {
_onTargetDelete();
obj = null;
}
final void onReferenceDestroy() {
if (obj == null) {
return;
}
if (this == obj.inverseRef) {
obj.inverseRef = nextInverseRef;
} else {
prevInverseRef.nextInverseRef = nextInverseRef;
}
if (nextInverseRef != null) {
nextInverseRef.prevInverseRef = prevInverseRef;
}
}
}