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