]> 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 256de3acc4bc0f31bae759f98831b10cda89f826..8fad88979690dbf266f796982b52c314bd4d1221 100644 (file)
@@ -1,6 +1,19 @@
+/*******************************************************************************\r
+ * Copyright (c) 2012, 2013 Association for Decentralized Information Management in\r
+ * Industry THTH ry.\r
+ * All rights reserved. This program and the accompanying materials\r
+ * are made available under the terms of the Eclipse Public License v1.0\r
+ * which accompanies this distribution, and is available at\r
+ * http://www.eclipse.org/legal/epl-v10.html\r
+ *\r
+ * Contributors:\r
+ *     VTT Technical Research Centre of Finland - initial API and implementation\r
+ *******************************************************************************/\r
 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
@@ -18,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
@@ -28,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