You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by nt...@apache.org on 2020/11/19 14:10:30 UTC

[cayenne] 02/04: Added annotations map

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 <an...@objectstyle.com>
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;
+    }
 }