(no commit message)
[utils] / support / general / src / main / java / org / wamblee / persistence / PersistentFactory.java
index 7dfb460bc60e244242e65dec0a46c9a77bb47698..bd1217e61cb7b2ae66dc2a7b0749228c26362da7 100644 (file)
@@ -18,7 +18,6 @@ package org.wamblee.persistence;
 import java.io.Serializable;
 import java.lang.annotation.Annotation;
 import java.lang.reflect.Field;
-import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
 import java.util.List;
 import java.util.Map;
@@ -30,7 +29,7 @@ import javax.persistence.Version;
 import org.wamblee.reflection.ReflectionUtils;
 
 /**
- * Factory which creates a {@link Persistent} object for a given entity for
+ * Factory which creates a {@link Persistent} object for a given JPA entity for
  * interfacing with the primary key and version of the entity.
  * 
  * This utility only treats primary keys and fields that are annotated with @Id
@@ -47,82 +46,6 @@ public class PersistentFactory {
      */
     private static Map<String, EntityAccessor> CACHE = new ConcurrentHashMap<String, EntityAccessor>();
 
-    static interface Accessor<T> {
-        void set(Object aEntity, T aValue);
-
-        T get(Object aEntity);
-    }
-
-    static class FieldAccessor<T> implements Accessor<T> {
-        private Field field;
-
-        public FieldAccessor(Field aField) {
-            field = aField;
-            field.setAccessible(true);
-        }
-
-        @Override
-        public T get(Object aEntity) {
-            try {
-                T value = (T) field.get(aEntity);
-                return value;
-            } catch (Exception e) {
-                throw new RuntimeException(e);
-            }
-        }
-
-        @Override
-        public void set(Object aEntity, T aValue) {
-            try {
-                field.set(aEntity, aValue);
-            } catch (IllegalAccessException e) {
-                throw new RuntimeException(e.getMessage(), e);
-            }
-        }
-
-        public Field getField() {
-            return field;
-        }
-    }
-
-    static class PropertyAccessor<T> implements Accessor<T> {
-        private Method getter;
-        private Method setter;
-
-        public PropertyAccessor(Method aGetter, Method aSetter) {
-            getter = aGetter;
-            setter = aSetter;
-            getter.setAccessible(true);
-            setter.setAccessible(true);
-        }
-
-        @Override
-        public T get(Object aEntity) {
-            try {
-                return (T) getter.invoke(aEntity);
-            } catch (Exception e) {
-                throw new RuntimeException(e);
-            }
-        }
-
-        @Override
-        public void set(Object aEntity, T aValue) {
-            try {
-                setter.invoke(aEntity, aValue);
-            } catch (Exception e) {
-                throw new RuntimeException(e);
-            }
-        }
-
-        public Method getGetter() {
-            return getter;
-        }
-
-        public Method getSetter() {
-            return setter;
-        }
-    }
-
     static class EntityAccessor {
         private Accessor pk;
         private Accessor version;
@@ -172,16 +95,16 @@ public class PersistentFactory {
 
         @Override
         public Number getPersistedVersion() {
-            if ( accessor == null || accessor.getVersion() == null) { 
-                return null; 
+            if (accessor == null || accessor.getVersion() == null) {
+                return null;
             }
             return (Number) accessor.getVersion().get(entity);
         }
 
         @Override
         public void setPersistedVersion(Number aVersion) {
-            if ( accessor == null || accessor.getVersion() == null) { 
-                return; 
+            if (accessor == null || accessor.getVersion() == null) {
+                return;
             }
             accessor.getVersion().set(entity, aVersion);
         }
@@ -225,7 +148,8 @@ public class PersistentFactory {
      *            Annotation that must be present.
      * @return Accessor to use or null if the annotation is not present.
      */
-    private static Accessor analyse(Class aClass,
+    // 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) {