From 1016d3f096782cb2b0471c9613cf733d20f30528 Mon Sep 17 00:00:00 2001 From: "nikolce.mihajlovski" Date: Mon, 19 Jan 2015 00:19:41 +0100 Subject: [PATCH] Improved and moved the Metadata util to the Beany module. --- .../java/org/rapidoid/app/AppPageGeneric.java | 2 +- .../java/org/rapidoid/app/AppScreens.java | 2 +- .../java/org/rapidoid/beany/BeanProp.java | 5 ++++ .../main/java/org/rapidoid/beany/MapProp.java | 5 ++++ .../java/org/rapidoid/beany}/Metadata.java | 26 ++++++++++--------- .../main/java/org/rapidoid/beany/Prop.java | 2 ++ .../java/org/rapidoid/db/impl/EntityImpl.java | 2 +- .../org/rapidoid/security/AppSecurity.java | 2 +- .../java/org/rapidoid/security/Secure.java | 10 +++---- 9 files changed, 35 insertions(+), 21 deletions(-) rename {rapidoid-utils/src/main/java/org/rapidoid/util => rapidoid-beany/src/main/java/org/rapidoid/beany}/Metadata.java (73%) diff --git a/rapidoid-app/src/main/java/org/rapidoid/app/AppPageGeneric.java b/rapidoid-app/src/main/java/org/rapidoid/app/AppPageGeneric.java index df3c956ea4..9bb39b1b31 100644 --- a/rapidoid-app/src/main/java/org/rapidoid/app/AppPageGeneric.java +++ b/rapidoid-app/src/main/java/org/rapidoid/app/AppPageGeneric.java @@ -27,6 +27,7 @@ import org.rapidoid.annotation.Scaffold; import org.rapidoid.beany.Beany; +import org.rapidoid.beany.Metadata; import org.rapidoid.db.DB; import org.rapidoid.html.Cmd; import org.rapidoid.html.Tag; @@ -41,7 +42,6 @@ import org.rapidoid.security.Secure; import org.rapidoid.util.Cls; import org.rapidoid.util.Conf; -import org.rapidoid.util.Metadata; import org.rapidoid.util.U; public class AppPageGeneric extends AppGUI { diff --git a/rapidoid-app/src/main/java/org/rapidoid/app/AppScreens.java b/rapidoid-app/src/main/java/org/rapidoid/app/AppScreens.java index d8b00d746c..029e6b7e53 100644 --- a/rapidoid-app/src/main/java/org/rapidoid/app/AppScreens.java +++ b/rapidoid-app/src/main/java/org/rapidoid/app/AppScreens.java @@ -25,9 +25,9 @@ import java.util.Map; import java.util.Map.Entry; +import org.rapidoid.beany.Metadata; import org.rapidoid.security.annotation.DevMode; import org.rapidoid.util.Arr; -import org.rapidoid.util.Metadata; public class AppScreens implements Comparator> { diff --git a/rapidoid-beany/src/main/java/org/rapidoid/beany/BeanProp.java b/rapidoid-beany/src/main/java/org/rapidoid/beany/BeanProp.java index 1fb4635e7e..dcda824b26 100644 --- a/rapidoid-beany/src/main/java/org/rapidoid/beany/BeanProp.java +++ b/rapidoid-beany/src/main/java/org/rapidoid/beany/BeanProp.java @@ -243,6 +243,11 @@ public void setDefaultValue(Object defaultValue) { this.defaultValue = defaultValue; } + @Override + public Class getDeclaringType() { + return declaringType; + } + @Override public String toString() { return declaringType.getSimpleName() + "#" + name + ":" + type.getSimpleName(); diff --git a/rapidoid-beany/src/main/java/org/rapidoid/beany/MapProp.java b/rapidoid-beany/src/main/java/org/rapidoid/beany/MapProp.java index ef2a6c3c71..9e7e4c7fd2 100644 --- a/rapidoid-beany/src/main/java/org/rapidoid/beany/MapProp.java +++ b/rapidoid-beany/src/main/java/org/rapidoid/beany/MapProp.java @@ -138,4 +138,9 @@ public Class getRawTypeArg(int index) { throw U.rte("No type args available!"); } + @Override + public Class getDeclaringType() { + return null; + } + } diff --git a/rapidoid-utils/src/main/java/org/rapidoid/util/Metadata.java b/rapidoid-beany/src/main/java/org/rapidoid/beany/Metadata.java similarity index 73% rename from rapidoid-utils/src/main/java/org/rapidoid/util/Metadata.java rename to rapidoid-beany/src/main/java/org/rapidoid/beany/Metadata.java index 86c28c569b..9131380095 100644 --- a/rapidoid-utils/src/main/java/org/rapidoid/util/Metadata.java +++ b/rapidoid-beany/src/main/java/org/rapidoid/beany/Metadata.java @@ -1,9 +1,10 @@ -package org.rapidoid.util; +package org.rapidoid.beany; import java.lang.annotation.Annotation; -import java.lang.reflect.Field; import java.util.Map; +import org.rapidoid.util.U; + /* * #%L * rapidoid-utils @@ -41,25 +42,26 @@ public static T classAnnotation(Class clazz, Class return (T) classAnnotations(clazz).get(annotationClass); } - public static Map, Annotation> fieldAnnotations(Class clazz, String fieldName) { + public static Map, Annotation> propAnnotations(Class clazz, String property) { - Field field = Cls.getField(clazz, fieldName); Map, Annotation> annotations = U.map(); + Prop prop = Beany.property(clazz, property, false); - for (Annotation ann : field.getDeclaringClass().getAnnotations()) { - annotations.put(ann.annotationType(), ann); - } - - for (Annotation ann : field.getAnnotations()) { - annotations.put(ann.annotationType(), ann); + if (prop != null) { + for (Annotation ann : prop.getDeclaringType().getAnnotations()) { + annotations.put(ann.annotationType(), ann); + } + for (Annotation ann : prop.getAnnotations()) { + annotations.put(ann.annotationType(), ann); + } } return annotations; } @SuppressWarnings("unchecked") - public static T fieldAnnotation(Class clazz, String fieldName, Class annotationClass) { - return (T) fieldAnnotations(clazz, fieldName).get(annotationClass); + public static T propAnnotation(Class clazz, String property, Class annotationClass) { + return (T) propAnnotations(clazz, property).get(annotationClass); } public static boolean isAnnotated(Class target, Class annotation) { diff --git a/rapidoid-beany/src/main/java/org/rapidoid/beany/Prop.java b/rapidoid-beany/src/main/java/org/rapidoid/beany/Prop.java index b6e701252d..cc0179cbef 100644 --- a/rapidoid-beany/src/main/java/org/rapidoid/beany/Prop.java +++ b/rapidoid-beany/src/main/java/org/rapidoid/beany/Prop.java @@ -61,4 +61,6 @@ public interface Prop { Class getRawTypeArg(int index); + Class getDeclaringType(); + } diff --git a/rapidoid-db-impl/src/main/java/org/rapidoid/db/impl/EntityImpl.java b/rapidoid-db-impl/src/main/java/org/rapidoid/db/impl/EntityImpl.java index 9e656034af..37c81c7066 100644 --- a/rapidoid-db-impl/src/main/java/org/rapidoid/db/impl/EntityImpl.java +++ b/rapidoid-db-impl/src/main/java/org/rapidoid/db/impl/EntityImpl.java @@ -24,6 +24,7 @@ import java.util.concurrent.ConcurrentMap; import org.rapidoid.annotation.Relation; +import org.rapidoid.beany.Metadata; import org.rapidoid.db.DB; import org.rapidoid.db.DbColumn; import org.rapidoid.db.DbList; @@ -31,7 +32,6 @@ import org.rapidoid.db.DbSet; import org.rapidoid.db.Entity; import org.rapidoid.util.Cls; -import org.rapidoid.util.Metadata; import org.rapidoid.util.U; public class EntityImpl implements Entity { diff --git a/rapidoid-security/src/main/java/org/rapidoid/security/AppSecurity.java b/rapidoid-security/src/main/java/org/rapidoid/security/AppSecurity.java index d7ad2da6b9..a58fee8353 100644 --- a/rapidoid-security/src/main/java/org/rapidoid/security/AppSecurity.java +++ b/rapidoid-security/src/main/java/org/rapidoid/security/AppSecurity.java @@ -28,6 +28,7 @@ import java.util.Set; import org.rapidoid.beany.Beany; +import org.rapidoid.beany.Metadata; import org.rapidoid.security.annotation.Admin; import org.rapidoid.security.annotation.LoggedIn; import org.rapidoid.security.annotation.Manager; @@ -37,7 +38,6 @@ import org.rapidoid.util.CommonRoles; import org.rapidoid.util.Conf; import org.rapidoid.util.Constants; -import org.rapidoid.util.Metadata; import org.rapidoid.util.U; public class AppSecurity implements Constants { diff --git a/rapidoid-security/src/main/java/org/rapidoid/security/Secure.java b/rapidoid-security/src/main/java/org/rapidoid/security/Secure.java index c6530a2a87..5fac1a5ba6 100644 --- a/rapidoid-security/src/main/java/org/rapidoid/security/Secure.java +++ b/rapidoid-security/src/main/java/org/rapidoid/security/Secure.java @@ -24,13 +24,13 @@ import java.util.List; import java.util.Map; +import org.rapidoid.beany.Metadata; import org.rapidoid.security.annotation.CanChange; import org.rapidoid.security.annotation.CanDelete; import org.rapidoid.security.annotation.CanInsert; import org.rapidoid.security.annotation.CanRead; import org.rapidoid.util.AppCtx; import org.rapidoid.util.Constants; -import org.rapidoid.util.Metadata; import org.rapidoid.util.U; import org.rapidoid.util.UserInfo; @@ -113,10 +113,10 @@ public static DataPermissions getPropertyPermissions(String username, Class c return DataPermissions.NONE; } - CanRead canRead = Metadata.fieldAnnotation(clazz, propertyName, CanRead.class); - CanInsert canInsert = Metadata.fieldAnnotation(clazz, propertyName, CanInsert.class); - CanChange canChange = Metadata.fieldAnnotation(clazz, propertyName, CanChange.class); - CanDelete canDelete = Metadata.fieldAnnotation(clazz, propertyName, CanDelete.class); + CanRead canRead = Metadata.propAnnotation(clazz, propertyName, CanRead.class); + CanInsert canInsert = Metadata.propAnnotation(clazz, propertyName, CanInsert.class); + CanChange canChange = Metadata.propAnnotation(clazz, propertyName, CanChange.class); + CanDelete canDelete = Metadata.propAnnotation(clazz, propertyName, CanDelete.class); if (canRead == null && canInsert == null && canChange == null && canDelete == null) { return DataPermissions.ALL;