(no commit message)
authorerik <erik@77661180-640e-0410-b3a8-9f9b13e6d0e0>
Wed, 21 Jul 2010 10:48:18 +0000 (10:48 +0000)
committererik <erik@77661180-640e-0410-b3a8-9f9b13e6d0e0>
Wed, 21 Jul 2010 10:48:18 +0000 (10:48 +0000)
support/general/src/main/java/org/wamblee/persistence/PersistentFactory.java
support/general/src/main/java/org/wamblee/reflection/AnnotationUtils.java

index 2f5bb7c20ee3486e69f4bc7fec5bde8311da7545..dd0d1839756bb1bb21ecc7c4824e492e2491ba6b 100644 (file)
 package org.wamblee.persistence;
 
 import java.io.Serializable;
-import java.lang.annotation.Annotation;
-import java.lang.reflect.Field;
-import java.lang.reflect.Method;
-import java.util.List;
 import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
 
@@ -27,9 +23,7 @@ import javax.persistence.Id;
 import javax.persistence.Version;
 
 import org.wamblee.reflection.Accessor;
-import org.wamblee.reflection.FieldAccessor;
-import org.wamblee.reflection.PropertyAccessor;
-import org.wamblee.reflection.ReflectionUtils;
+import org.wamblee.reflection.AnnotationUtils;
 
 /**
  * Factory which creates a {@link Persistent} object for a given JPA entity for
@@ -134,56 +128,14 @@ public class PersistentFactory {
     }
 
     private static EntityAccessor analyse(Class aClass) {
-        Accessor<Serializable> pk = analyse(aClass, Id.class);
-        Accessor<Integer> version = analyse(aClass, Version.class);
+        Accessor<Serializable> pk = AnnotationUtils.analyse(aClass, Id.class);
+        Accessor<Integer> version = AnnotationUtils.analyse(aClass, Version.class);
         if (pk != null || version != null) {
             return new EntityAccessor(pk, version);
         }
         return null;
     }
 
-    /**
-     * Returns the accessor for a given annotation.
-     * 
-     * @param aClass
-     *            Class to analyse.
-     * @param aAnnotation
-     *            Annotation that must be present.
-     * @return Accessor to use or null if the annotation is not present.
-     */
-    // TODO move generic analysis part to the reflection package.
-    public static Accessor analyse(Class aClass,
-        Class<? extends Annotation> aAnnotation) {
-        List<Field> fields = ReflectionUtils.getAllFields(aClass);
-        for (Field field : fields) {
-            if (field.isAnnotationPresent(aAnnotation)) {
-                return new FieldAccessor(field);
-            }
-        }
-        List<Method> methods = ReflectionUtils.getAllMethods(aClass,
-            Object.class);
-        for (Method method : methods) {
-            if (method.isAnnotationPresent(aAnnotation)) {
-                String setterName = null;
-                if (method.getName().startsWith("get")) {
-                    setterName = method.getName().replaceFirst("get", "set");
-                } else if (method.getName().startsWith("is")) {
-                    setterName = method.getName().replaceFirst("is", "set");
-                }
-                try {
-                    Class returnType = method.getReturnType();
-                    Method setter = method.getDeclaringClass()
-                        .getDeclaredMethod(setterName, returnType);
-                    return new PropertyAccessor(method, setter);
-                } catch (NoSuchMethodException e) {
-                    throw new RuntimeException("Error obtaining setter for " +
-                        method.getName() + " in class " + aClass.getName(), e);
-                }
-            }
-        }
-        return null;
-    }
-
     /**
      * Creates the {@link Persistent} wrapper for interfacing with primary key
      * and version of the entity.
index 5c701fb5ae57878a7dfec4659413ea9a185cf9b8..d31163fb11812487096953b9662d716f7dca5d1b 100644 (file)
  */
 package org.wamblee.reflection;
 
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+import java.util.List;
+
 /**
  * Utlities for working with annotations. 
  * 
@@ -23,4 +28,46 @@ package org.wamblee.reflection;
  */
 public class AnnotationUtils {
 
+    /**
+     * Returns the accessor for a given annotation.
+     * 
+     * @param aClass
+     *            Class to analyse.
+     * @param aAnnotation
+     *            Annotation that must be present.
+     * @return Accessor to use or null if the annotation is not present.
+     */
+    // TODO move generic analysis part to the reflection package.
+    public static Accessor analyse(Class aClass,
+        Class<? extends Annotation> aAnnotation) {
+        List<Field> fields = ReflectionUtils.getAllFields(aClass);
+        for (Field field : fields) {
+            if (field.isAnnotationPresent(aAnnotation)) {
+                return new FieldAccessor(field);
+            }
+        }
+        List<Method> methods = ReflectionUtils.getAllMethods(aClass,
+            Object.class);
+        for (Method method : methods) {
+            if (method.isAnnotationPresent(aAnnotation)) {
+                String setterName = null;
+                if (method.getName().startsWith("get")) {
+                    setterName = method.getName().replaceFirst("get", "set");
+                } else if (method.getName().startsWith("is")) {
+                    setterName = method.getName().replaceFirst("is", "set");
+                }
+                try {
+                    Class returnType = method.getReturnType();
+                    Method setter = method.getDeclaringClass()
+                        .getDeclaredMethod(setterName, returnType);
+                    return new PropertyAccessor(method, setter);
+                } catch (NoSuchMethodException e) {
+                    throw new RuntimeException("Error obtaining setter for " +
+                        method.getName() + " in class " + aClass.getName(), e);
+                }
+            }
+        }
+        return null;
+    }
+
 }