private Object fireEvent()

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;
    }