/**
* Compiles internal callback registry.
*/
synchronized void initCallbacks() {
if (callbackRegistry == null) {
LifecycleCallbackRegistry callbackRegistry = new LifecycleCallbackRegistry(
this);
// load default callbacks
Iterator maps = this.maps.iterator();
while (maps.hasNext()) {
DataMap map = (DataMap) maps.next();
Iterator listeners = map.getDefaultEntityListeners().iterator();
while (listeners.hasNext()) {
EntityListener listener = (EntityListener) listeners.next();
Object listenerInstance = createListener(listener);
CallbackDescriptor[] callbacks = listener
.getCallbackMap()
.getCallbacks();
for (int i = 0; i < callbacks.length; i++) {
Iterator callbackMethods = callbacks[i]
.getCallbackMethods()
.iterator();
while (callbackMethods.hasNext()) {
String method = (String) callbackMethods.next();
// note that callbacks[i].getCallbackType() == i
callbackRegistry.addDefaultListener(
i,
listenerInstance,
method);
}
}
}
}
// load entity callbacks
Iterator entities = getObjEntities().iterator();
while (entities.hasNext()) {
ObjEntity entity = (ObjEntity) entities.next();
Class entityClass = entity.getJavaClass();
// external listeners go first, entity's own callbacks go next
Iterator entityListeners = entity.getEntityListeners().iterator();
while (entityListeners.hasNext()) {
EntityListener listener = (EntityListener) entityListeners.next();
Object listenerInstance = createListener(listener);
CallbackDescriptor[] callbacks = listener
.getCallbackMap()
.getCallbacks();
for (int i = 0; i < callbacks.length; i++) {
Iterator callbackMethods = callbacks[i]
.getCallbackMethods()
.iterator();
while (callbackMethods.hasNext()) {
String method = (String) callbackMethods.next();
// note that callbacks[i].getCallbackType() == i
callbackRegistry.addListener(
i,
entityClass,
listenerInstance,
method);
}
}
}
CallbackDescriptor[] callbacks = entity.getCallbackMap().getCallbacks();
for (int i = 0; i < callbacks.length; i++) {
Iterator callbackMethods = callbacks[i]
.getCallbackMethods()
.iterator();
while (callbackMethods.hasNext()) {
String method = (String) callbackMethods.next();
// note that callbacks[i].getCallbackType() == i
callbackRegistry.addListener(i, entityClass, method);
}
}
}
this.callbackRegistry = callbackRegistry;