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