This is an automated email from the ASF dual-hosted git repository. ntimofeev pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/cayenne.git
commit c84f39435a91b8e98ec5e4cb2e199569ddadd8ea Author: andreykravchenko <[email protected]> AuthorDate: Thu Nov 12 12:26:08 2020 +0300 Added annotations map --- .../org/apache/cayenne/map/EntityResolver.java | 42 ++++++++++++---------- 1 file changed, 23 insertions(+), 19 deletions(-) diff --git a/cayenne-server/src/main/java/org/apache/cayenne/map/EntityResolver.java b/cayenne-server/src/main/java/org/apache/cayenne/map/EntityResolver.java index ebe7171..cb66101 100644 --- a/cayenne-server/src/main/java/org/apache/cayenne/map/EntityResolver.java +++ b/cayenne-server/src/main/java/org/apache/cayenne/map/EntityResolver.java @@ -22,10 +22,9 @@ package org.apache.cayenne.map; import java.io.IOException; import java.io.ObjectInputStream; import java.io.Serializable; +import java.lang.annotation.Annotation; import java.lang.reflect.Method; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; +import java.util.*; import java.util.concurrent.atomic.AtomicLong; import org.apache.cayenne.Persistent; @@ -147,23 +146,14 @@ public class EntityResolver implements MappingNamespace, Serializable { for (ObjEntity entity : getObjEntities()) { Class<?> entityClass = entity.getJavaClass(); + Map<Class, LifecycleEvent> annotationsMap = createAnnotationsMap(); + for (Method m : entityClass.getDeclaredMethods()) { - if (m.isAnnotationPresent(PostAdd.class)) { - callbackRegistry.addCallback(LifecycleEvent.POST_ADD, entityClass, m.getName()); - } else if (m.isAnnotationPresent(PrePersist.class)) { - callbackRegistry.addCallback(LifecycleEvent.PRE_PERSIST, entityClass, m.getName()); - } else if (m.isAnnotationPresent(PostPersist.class)) { - callbackRegistry.addCallback(LifecycleEvent.POST_PERSIST, entityClass, m.getName()); - } else if (m.isAnnotationPresent(PreUpdate.class)) { - callbackRegistry.addCallback(LifecycleEvent.PRE_UPDATE, entityClass, m.getName()); - } else if (m.isAnnotationPresent(PostUpdate.class)) { - callbackRegistry.addCallback(LifecycleEvent.POST_UPDATE, entityClass, m.getName()); - } else if (m.isAnnotationPresent(PreRemove.class)) { - callbackRegistry.addCallback(LifecycleEvent.PRE_REMOVE, entityClass, m.getName()); - } else if (m.isAnnotationPresent(PostRemove.class)) { - callbackRegistry.addCallback(LifecycleEvent.POST_REMOVE, entityClass, m.getName()); - } else if (m.isAnnotationPresent(PostLoad.class)) { - callbackRegistry.addCallback(LifecycleEvent.POST_LOAD, entityClass, m.getName()); + Annotation[] annotations = m.getAnnotations(); + for (int i = 0; i < annotations.length; i++) { + if (annotationsMap.containsKey(annotations[i].annotationType())) { + callbackRegistry.addCallback(annotationsMap.get(annotations[i].annotationType()), entityClass, m.getName()); + } } } @@ -622,4 +612,18 @@ public class EntityResolver implements MappingNamespace, Serializable { public void setValueComparisionStrategyFactory(ValueComparisonStrategyFactory valueComparisonStrategyFactory) { this.valueComparisonStrategyFactory = valueComparisonStrategyFactory; } + + private Map<Class, LifecycleEvent> createAnnotationsMap() { + Map<Class, LifecycleEvent> annotationsMap = new HashMap<>(); + annotationsMap.put(PostAdd.class, LifecycleEvent.POST_ADD); + annotationsMap.put(PrePersist.class, LifecycleEvent.PRE_PERSIST); + annotationsMap.put(PostPersist.class, LifecycleEvent.POST_PERSIST); + annotationsMap.put(PreUpdate.class, LifecycleEvent.PRE_UPDATE); + annotationsMap.put(PostUpdate.class, LifecycleEvent.POST_UPDATE); + annotationsMap.put(PreRemove.class, LifecycleEvent.PRE_REMOVE); + annotationsMap.put(PostRemove.class, LifecycleEvent.POST_REMOVE); + annotationsMap.put(PostLoad.class, LifecycleEvent.POST_LOAD); + + return annotationsMap; + } }
