]> gerrit.simantics Code Review - simantics/3d.git/blobdiff - org.simantics.g3d/src/org/simantics/g3d/property/MethodWithMapValueProvider.java
Reflection-based handling of Enum property editing.
[simantics/3d.git] / org.simantics.g3d / src / org / simantics / g3d / property / MethodWithMapValueProvider.java
index 7e9859a5ca8bb78f4a859ec88a4ea81e6bc672dd..8fad88979690dbf266f796982b52c314bd4d1221 100644 (file)
@@ -12,6 +12,8 @@
 package org.simantics.g3d.property;\r
 \r
 import java.lang.reflect.Method;\r
+import java.lang.reflect.ParameterizedType;\r
+import java.lang.reflect.Type;\r
 import java.util.HashMap;\r
 import java.util.Map;\r
 \r
@@ -29,9 +31,12 @@ public class MethodWithMapValueProvider implements ValueProvider {
        \r
        @Override\r
        public Object getValue(Object obj) throws Exception{\r
+               @SuppressWarnings("unchecked")\r
                Map<String,Object> map = (Map<String, Object>)getter.invoke(obj);\r
                return map.get(key);\r
        }\r
+       \r
+       @SuppressWarnings("unchecked")\r
        @Override\r
        public void setValue(Object obj, Object value) throws Exception {\r
                Map<String,Object> map = new HashMap<String, Object>();\r
@@ -39,4 +44,11 @@ public class MethodWithMapValueProvider implements ValueProvider {
                map.put(key, value);\r
                setter.invoke(obj,map);\r
        }\r
+       \r
+       @Override\r
+       public Class<?> getValueType() {\r
+               // The return type of the getter should be a java.util.Map.\r
+               Type[] typeArguments = ((ParameterizedType)getter.getGenericReturnType()).getActualTypeArguments();\r
+               return (Class<?>) typeArguments[1];\r
+       }\r
 }\r