You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by da...@apache.org on 2014/02/20 14:10:58 UTC

[2/5] git commit: ISIS-659: extend MementoService to support enums

ISIS-659: extend MementoService to support enums


Project: http://git-wip-us.apache.org/repos/asf/isis/repo
Commit: http://git-wip-us.apache.org/repos/asf/isis/commit/e1401782
Tree: http://git-wip-us.apache.org/repos/asf/isis/tree/e1401782
Diff: http://git-wip-us.apache.org/repos/asf/isis/diff/e1401782

Branch: refs/heads/master
Commit: e14017822ab3073062b2ec45dea2237a31c96e0f
Parents: a55e8d5
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Thu Feb 20 12:37:09 2014 +0000
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Thu Feb 20 12:37:09 2014 +0000

----------------------------------------------------------------------
 .../runtime/services/memento/Dom4jUtil.java     | 41 +++++++++++++-------
 .../memento/MementoServiceDefaultTest.java      |  9 +++++
 2 files changed, 35 insertions(+), 15 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/e1401782/core/runtime/src/main/java/org/apache/isis/core/runtime/services/memento/Dom4jUtil.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/memento/Dom4jUtil.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/services/memento/Dom4jUtil.java
index 88e9a89..a22e49b 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/memento/Dom4jUtil.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/services/memento/Dom4jUtil.java
@@ -112,85 +112,95 @@ class Dom4jUtil {
     static enum Parseable {
         STRING(String.class) {
             @SuppressWarnings("unchecked")
-            public <T> T parseStr(String str) {
+            public <T> T parseStr(String str, Class<T> cls) {
                 return (T) str;
             }
         },
         BOOLEAN(Boolean.class, boolean.class) {
             @SuppressWarnings("unchecked")
             @Override
-            public <T> T parseStr(String str) {
+            public <T> T parseStr(String str, Class<T> cls) {
                 return (T) new Boolean(str);
             }
         },
         BYTE(Byte.class, byte.class) {
             @SuppressWarnings("unchecked")
             @Override
-            public <T> T parseStr(String str) {
+            public <T> T parseStr(String str, Class<T> cls) {
                 return (T) new Byte(str);
             }
         },
         SHORT(Short.class, short.class) {
-
             @SuppressWarnings("unchecked")
             @Override
-            <T> T parseStr(String str) {
+            <T> T parseStr(String str, Class<T> cls) {
                 return (T) new Short(str);
             }
         },
         INTEGER(Integer.class, int.class) {
             @SuppressWarnings("unchecked")
             @Override
-            <T> T parseStr(String str) {
+            <T> T parseStr(String str, Class<T> cls) {
                 return (T) new Integer(str);
             }
         },
         LONG(Long.class, long.class) {
             @SuppressWarnings("unchecked")
             @Override
-            <T> T parseStr(String str) {
+            <T> T parseStr(String str, Class<T> cls) {
                 return (T) new Long(str);
             }
         },
         FLOAT(Float.class, float.class) {
             @SuppressWarnings("unchecked")
             @Override
-            <T> T parseStr(String str) {
+            <T> T parseStr(String str, Class<T> cls) {
                 return (T) new Float(str);
             }
         },
         DOUBLE(Double.class, double.class) {
             @SuppressWarnings("unchecked")
             @Override
-            <T> T parseStr(String str) {
+            <T> T parseStr(String str, Class<T> cls) {
                 return (T) new Double(str);
             }
         },
         BIG_DECIMAL(BigDecimal.class) {
             @SuppressWarnings("unchecked")
             @Override
-            <T> T parseStr(String str) {
+            <T> T parseStr(String str, Class<T> cls) {
                 return (T) new BigDecimal(str);
             }
         },
         BIG_INTEGER(BigInteger.class) {
             @SuppressWarnings("unchecked")
             @Override
-            <T> T parseStr(String str) {
+            <T> T parseStr(String str, Class<T> cls) {
                 return (T) new BigInteger(str);
             }
         },
         LOCAL_DATE(LocalDate.class) {
             @SuppressWarnings("unchecked")
             @Override
-            <T> T parseStr(String str) {
+            <T> T parseStr(String str, Class<T> cls) {
                 return (T) new LocalDate(str);
             } 
         },
+        ENUM(Enum.class) {
+            @SuppressWarnings({ "unchecked", "rawtypes" })
+            @Override
+            <T> T parseStr(String str, Class<T> cls) {
+                Class rawCls = cls;
+                return (T) valueOf(str, rawCls);
+            } 
+            private <E extends Enum<E>> E valueOf(String name, Class<E> cls) {
+                return Enum.valueOf(cls, name);
+            }
+        },
         BOOKMARK(Bookmark.class) {
             @SuppressWarnings("unchecked")
             @Override
-            <T> T parseStr(String str) {
+            <T> T parseStr(String str, Class<T> cls) {
                 return (T) new Bookmark(str);
             } 
         };
@@ -201,17 +211,18 @@ class Dom4jUtil {
         public Class<?>[] getClasses() {
             return classes;
         }
-        abstract <T> T parseStr(String str);
+        abstract <T> T parseStr(String str, Class<T> cls);
         
         // //////////////////////////////////////
 
+        @SuppressWarnings("unchecked")
         static <T> T parse(final String str, final Class<?> cls) {
             assertSupported(cls);
             for (Parseable sc : values()) {
                 for (Class<?> eachCls: sc.getClasses()) {
                     if(eachCls.isAssignableFrom(cls)) {
                         if(!eachCls.isPrimitive() || str != null) {
-                            return sc.parseStr(str);
+                            return (T) sc.parseStr(str, cls);
                         }
                     }
                 }

http://git-wip-us.apache.org/repos/asf/isis/blob/e1401782/core/runtime/src/test/java/org/apache/isis/core/runtime/services/memento/MementoServiceDefaultTest.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/test/java/org/apache/isis/core/runtime/services/memento/MementoServiceDefaultTest.java b/core/runtime/src/test/java/org/apache/isis/core/runtime/services/memento/MementoServiceDefaultTest.java
index 222f8ab..7511b57 100644
--- a/core/runtime/src/test/java/org/apache/isis/core/runtime/services/memento/MementoServiceDefaultTest.java
+++ b/core/runtime/src/test/java/org/apache/isis/core/runtime/services/memento/MementoServiceDefaultTest.java
@@ -39,6 +39,10 @@ public class MementoServiceDefaultTest {
         mementoService = new MementoServiceDefault().withNoEncoding();
     }
     
+    static enum DOW {
+        Mon,Tue,Wed,Thu,Fri
+    }
+    
     @Test
     public void roundtrip() {
         final Memento memento = mementoService.create();
@@ -60,6 +64,8 @@ public class MementoServiceDefaultTest {
         memento.set("someBookmark", new Bookmark("CUS", "12345"));
         memento.set("someNullValue", null);
         
+        memento.set("someEnum", DOW.Wed);
+        
         final String str = memento.asString();
         
         final Memento memento2 = mementoService.parse(str);
@@ -83,5 +89,8 @@ public class MementoServiceDefaultTest {
         assertThat(memento2.get("someNullValue", Integer.class), is(nullValue()));
         assertThat(memento2.get("someNullValue", Bookmark.class), is(nullValue()));
         assertThat(memento2.get("someNullValue", LocalDate.class), is(nullValue()));
+        
+        assertThat(memento2.get("someEnum", DOW.class), is(DOW.Wed));
+        
     }
 }