/** * Resolve all callbacks. */ void resolve() { if (!_resolved) { _all = combineCallbacks(); _resolved = true; } }
/** * Return all callbacks for the given event type, including superclass * callbacks if appropriate. */ public LifecycleCallbacks[] getCallbacks(int eventType) { resolve(); return (_all == null || _all[eventType] == null) ? EMPTY_CALLBACKS : _all[eventType]; }
/** * Store lifecycle metadata. */ private void recordCallbacks(ClassMetaData cls, Collection<LifecycleCallbacks>[] callbacks, int[] highs, boolean superClass) { if (callbacks == null) return; LifecycleMetaData meta = cls.getLifecycleMetaData(); LifecycleCallbacks[] array; for (int event : LifecycleEvent.ALL_EVENTS) { if (callbacks[event] == null) continue; array = callbacks[event].toArray (new LifecycleCallbacks[callbacks[event].size()]); if (superClass) { meta.setNonPCSuperclassCallbacks(event, array, (highs == null) ? 0 : highs[event]); } else { meta.setDeclaredCallbacks(event, array, (highs == null) ? 0 : highs[event]); } } }
supMeta.resolve(); if (supMeta._all == null) return _declared; int count; for (int i = 0; i < all.length; i++) { decs = getDeclaredCallbacks(i); if (supMeta == null) { sups = (_super[i] == null) ? EMPTY_CALLBACKS : _super[i]; supHigh = (_superHigh == null) ? 0 : _superHigh[i]; } else { sups = supMeta.getCallbacks(i); supHigh = (supMeta._high == null) ? 0 : supMeta._high[i];
if (isMetaDataMode()) meta.getLifecycleMetaData() .setIgnoreSystemListeners(true); break; case EXCLUDE_SUPERCLASS_LISTENERS: if (isMetaDataMode()) meta.getLifecycleMetaData().setIgnoreSuperclassCallbacks (LifecycleMetaData.IGNORE_HIGH); break;
/** * Make callbacks, recording any exceptions in the given collection. */ private void makeCallbacks(Object source, Object related, ClassMetaData meta, int type, Collection<Exception> exceptions) { // make lifecycle callbacks LifecycleCallbacks[] callbacks = meta.getLifecycleMetaData(). getCallbacks(type); for (int i = 0; !_fail && i < callbacks.length; i++) { try { callbacks[i].makeCallback(source, related, type); } catch (Exception e) { exceptions.add(e); if (_failFast) _fail = true; } } }
if (!meta.getLifecycleMetaData().getIgnoreSystemListeners()) { ListenerList system = meta.getRepository().getSystemListeners(); fireEvent(ev, source, related, type, system, false, exceptions);
/** * Parse exclude-superclass-listeners. */ private boolean startExcludeSuperclassListeners(Attributes attrs) throws SAXException { if (!isMetaDataMode()) return false; ClassMetaData meta = (ClassMetaData) currentElement(); meta.getLifecycleMetaData().setIgnoreSuperclassCallbacks (LifecycleMetaData.IGNORE_HIGH); return true; }
/** * Parse exclude-default-listeners. */ private boolean startExcludeDefaultListeners(Attributes attrs) throws SAXException { if (!isMetaDataMode()) return false; ClassMetaData meta = (ClassMetaData) currentElement(); meta.getLifecycleMetaData().setIgnoreSystemListeners(true); return true; }
/** * Start entity-listeners */ private boolean startEntityListeners(Attributes attrs) throws SAXException { if (!isMetaDataMode()) return false; if (currentElement() == null) return true; // reset listeners declared in annotations. LifecycleMetaData meta = ((ClassMetaData) currentElement()). getLifecycleMetaData(); for (int i = 0; i < LifecycleEvent.ALL_EVENTS.length; i++) meta.setDeclaredCallbacks(i, null, 0); return true; }
/** * Whether this LifeCycleEventManager has had at least one listener or callback * registered. Used for a quick test when firing events. * @return boolean */ public boolean isActive(ClassMetaData meta) { return _activated || meta.getLifecycleMetaData().is_activated() || meta.getRepository().is_systemListenersActivated(); }
supMeta.resolve(); if (supMeta._all == null) return _declared; int count; for (int i = 0; i < all.length; i++) { decs = getDeclaredCallbacks(i); if (supMeta == null) { sups = (_super[i] == null) ? EMPTY_CALLBACKS : _super[i]; supHigh = (_superHigh == null) ? 0 : _superHigh[i]; } else { sups = supMeta.getCallbacks(i); supHigh = (supMeta._high == null) ? 0 : supMeta._high[i];
if (isMetaDataMode()) meta.getLifecycleMetaData() .setIgnoreSystemListeners(true); break; case EXCLUDE_SUPERCLASS_LISTENERS: if (isMetaDataMode()) meta.getLifecycleMetaData().setIgnoreSuperclassCallbacks (LifecycleMetaData.IGNORE_HIGH); break;
/** * Make callbacks, recording any exceptions in the given collection. */ private void makeCallbacks(Object source, Object related, ClassMetaData meta, int type, Collection<Exception> exceptions) { // make lifecycle callbacks LifecycleCallbacks[] callbacks = meta.getLifecycleMetaData(). getCallbacks(type); for (int i = 0; !_fail && i < callbacks.length; i++) { try { callbacks[i].makeCallback(source, related, type); } catch (Exception e) { exceptions.add(e); if (_failFast) _fail = true; } } }
if (!meta.getLifecycleMetaData().getIgnoreSystemListeners()) { ListenerList system = meta.getRepository().getSystemListeners(); fireEvent(ev, source, related, type, system, false, exceptions);
/** * Parse exclude-superclass-listeners. */ private boolean startExcludeSuperclassListeners(Attributes attrs) throws SAXException { if (!isMetaDataMode()) return false; ClassMetaData meta = (ClassMetaData) currentElement(); meta.getLifecycleMetaData().setIgnoreSuperclassCallbacks (LifecycleMetaData.IGNORE_HIGH); return true; }
/** * Parse exclude-default-listeners. */ private boolean startExcludeDefaultListeners(Attributes attrs) throws SAXException { if (!isMetaDataMode()) return false; ClassMetaData meta = (ClassMetaData) currentElement(); meta.getLifecycleMetaData().setIgnoreSystemListeners(true); return true; }
/** * Start entity-listeners */ private boolean startEntityListeners(Attributes attrs) throws SAXException { if (!isMetaDataMode()) return false; if (currentElement() == null) return true; // reset listeners declared in annotations. LifecycleMetaData meta = ((ClassMetaData) currentElement()). getLifecycleMetaData(); for (int i = 0; i < LifecycleEvent.ALL_EVENTS.length; i++) meta.setDeclaredCallbacks(i, null, 0); return true; }
/** * Whether this LifeCycleEventManager has had at least one listener or callback * registered. Used for a quick test when firing events. * @return boolean */ public boolean isActive(ClassMetaData meta) { return _activated || meta.getLifecycleMetaData().is_activated() || meta.getRepository().is_systemListenersActivated(); }
supMeta.resolve(); if (supMeta._all == null) return _declared; int count; for (int i = 0; i < all.length; i++) { decs = getDeclaredCallbacks(i); if (supMeta == null) { sups = (_super[i] == null) ? EMPTY_CALLBACKS : _super[i]; supHigh = (_superHigh == null) ? 0 : _superHigh[i]; } else { sups = supMeta.getCallbacks(i); supHigh = (supMeta._high == null) ? 0 : supMeta._high[i];