in openjpa-kernel/src/main/java/org/apache/openjpa/event/LifecycleEventManager.java [364:545]
private Object fireEvent(LifecycleEvent ev, Object source, Object rel,
int type, ListenerList listeners, boolean mock, List<Exception> exceptions) {
if (listeners == null || !listeners.hasListeners(type))
return null;
Object listener;
boolean responds;
for (int i = 0, size = listeners.size(); !_fail && i < size; i++) {
listener = listeners.get(i);
if (size == 1)
responds = true;
else if (listener instanceof ListenerAdapter) {
responds = ((ListenerAdapter) listener).respondsTo(type);
if (!responds)
continue;
} else {
responds = false;
}
try {
switch (type) {
case LifecycleEvent.BEFORE_CLEAR:
case LifecycleEvent.AFTER_CLEAR:
if (responds || listener instanceof ClearListener) {
if (mock)
return Boolean.TRUE;
if (ev == null)
ev = new LifecycleEvent(source, type);
if (type == LifecycleEvent.BEFORE_CLEAR)
((ClearListener) listener).beforeClear(ev);
else
((ClearListener) listener).afterClear(ev);
}
break;
case LifecycleEvent.BEFORE_PERSIST:
case LifecycleEvent.AFTER_PERSIST:
if (responds || listener instanceof PersistListener) {
if (mock)
return Boolean.TRUE;
if (ev == null)
ev = new LifecycleEvent(source, type);
if (type == LifecycleEvent.BEFORE_PERSIST)
((PersistListener) listener).beforePersist(ev);
else
((PersistListener) listener).afterPersist(ev);
}
break;
case LifecycleEvent.BEFORE_DELETE:
case LifecycleEvent.AFTER_DELETE:
if (responds || listener instanceof DeleteListener) {
if (mock)
return Boolean.TRUE;
if (ev == null)
ev = new LifecycleEvent(source, type);
if (type == LifecycleEvent.BEFORE_DELETE)
((DeleteListener) listener).beforeDelete(ev);
else
((DeleteListener) listener).afterDelete(ev);
}
break;
case LifecycleEvent.BEFORE_DIRTY:
case LifecycleEvent.AFTER_DIRTY:
case LifecycleEvent.BEFORE_DIRTY_FLUSHED:
case LifecycleEvent.AFTER_DIRTY_FLUSHED:
if (responds || listener instanceof DirtyListener) {
if (mock)
return Boolean.TRUE;
if (ev == null)
ev = new LifecycleEvent(source, type);
switch (type) {
case LifecycleEvent.BEFORE_DIRTY:
((DirtyListener) listener).beforeDirty(ev);
break;
case LifecycleEvent.AFTER_DIRTY:
((DirtyListener) listener).afterDirty(ev);
break;
case LifecycleEvent.BEFORE_DIRTY_FLUSHED:
((DirtyListener) listener)
.beforeDirtyFlushed(ev);
break;
case LifecycleEvent.AFTER_DIRTY_FLUSHED:
((DirtyListener) listener)
.afterDirtyFlushed(ev);
break;
}
}
break;
case LifecycleEvent.AFTER_LOAD:
case LifecycleEvent.AFTER_REFRESH:
if (responds || listener instanceof LoadListener) {
if (mock)
return Boolean.TRUE;
if (ev == null)
ev = new LifecycleEvent(source, type);
if (type == LifecycleEvent.AFTER_LOAD)
((LoadListener) listener).afterLoad(ev);
else
((LoadListener) listener).afterRefresh(ev);
}
break;
case LifecycleEvent.BEFORE_STORE:
case LifecycleEvent.AFTER_STORE:
if (responds || listener instanceof StoreListener) {
if (mock)
return Boolean.TRUE;
if (ev == null)
ev = new LifecycleEvent(source, type);
if (type == LifecycleEvent.BEFORE_STORE)
((StoreListener) listener).beforeStore(ev);
else
((StoreListener) listener).afterStore(ev);
}
break;
case LifecycleEvent.BEFORE_DETACH:
case LifecycleEvent.AFTER_DETACH:
if (responds || listener instanceof DetachListener) {
if (mock)
return Boolean.TRUE;
if (ev == null)
ev = new LifecycleEvent(source, rel, type);
if (type == LifecycleEvent.BEFORE_DETACH)
((DetachListener) listener).beforeDetach(ev);
else
((DetachListener) listener).afterDetach(ev);
}
break;
case LifecycleEvent.BEFORE_ATTACH:
case LifecycleEvent.AFTER_ATTACH:
if (responds || listener instanceof AttachListener) {
if (mock)
return Boolean.TRUE;
if (ev == null)
ev = new LifecycleEvent(source, rel, type);
if (type == LifecycleEvent.BEFORE_ATTACH)
((AttachListener) listener).beforeAttach(ev);
else
((AttachListener) listener).afterAttach(ev);
}
break;
case LifecycleEvent.AFTER_PERSIST_PERFORMED:
if (responds || listener instanceof PostPersistListener) {
if (mock)
return Boolean.TRUE;
if (ev == null)
ev = new LifecycleEvent(source, rel, type);
((PostPersistListener) listener).afterPersistPerformed(ev);
}
break;
case LifecycleEvent.BEFORE_UPDATE:
case LifecycleEvent.AFTER_UPDATE_PERFORMED:
if (responds || listener instanceof UpdateListener) {
if (mock)
return Boolean.TRUE;
if (ev == null)
ev = new LifecycleEvent(source, rel, type);
if (type == LifecycleEvent.BEFORE_UPDATE)
((UpdateListener) listener).beforeUpdate(ev);
else
((UpdateListener) listener).afterUpdatePerformed(ev);
}
break;
case LifecycleEvent.AFTER_DELETE_PERFORMED:
if (responds || listener instanceof PostDeleteListener){
if (mock)
return Boolean.TRUE;
if (ev == null)
ev = new LifecycleEvent(source, rel, type);
((PostDeleteListener) listener).afterDeletePerformed(ev);
}
break;
default:
throw new InvalidStateException(_loc.get("unknown-lifecycle-event", Integer.toString(type)));
}
}
catch (Exception e) {
exceptions.add(e);
if (_failFast)
_fail = true;
}
}
return ev;
}