]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.objmap2/src/org/simantics/objmap/graph/annotations/factories/RelatedGetSetValueRuleFactory.java
Use type reflection tools from databoard in objmap2.
[simantics/platform.git] / bundles / org.simantics.objmap2 / src / org / simantics / objmap / graph / annotations / factories / RelatedGetSetValueRuleFactory.java
index 994811feef05cc85385ccce8e0d504cad3035b79..5c57a75c3c2d3279281209ffa1dfe786d33a59c9 100644 (file)
@@ -14,6 +14,10 @@ package org.simantics.objmap.graph.annotations.factories;
 import java.lang.annotation.Annotation;
 import java.lang.reflect.Method;
 
+import org.simantics.databoard.Bindings;
+import org.simantics.databoard.binding.Binding;
+import org.simantics.databoard.binding.error.BindingConstructionException;
+import org.simantics.databoard.binding.reflection.BindingRequest;
 import org.simantics.db.ReadGraph;
 import org.simantics.db.Resource;
 import org.simantics.db.exception.DatabaseException;
@@ -47,8 +51,14 @@ public class RelatedGetSetValueRuleFactory<Range> implements IGetSetRuleFactory<
                Class<? extends ValueAdapter> adapterClass = getterAnn.adapter();
                 IRangeAccessor<Range,Object> rangeAccessor = new GetSetValueAccessor<Range,Object>(getter, setter);
         Resource valueType;
+        Binding valueBinding = null;
         if (adapterClass == IdentityAdapter.class) {
-            valueType = dataTypeOfClass(g, getter.getReturnType());
+            try {
+                valueBinding = Bindings.getBinding(BindingRequest.create(getter));
+            } catch (BindingConstructionException e) {
+                return null;
+            }
+            valueType = DataTypeUtils.dataTypeOfDatatype(g, valueBinding.type());
         } else {
                try{
                         ValueAdapter adapter = adapterClass.newInstance();
@@ -60,7 +70,7 @@ public class RelatedGetSetValueRuleFactory<Range> implements IGetSetRuleFactory<
                  throw new RuntimeException(e);
              }
         }
-               return new ValueRule<Resource,Range>(new RelatedValueAccessor(g.getResource(getterAnn.value()), valueType),
+               return new ValueRule<Resource,Range>(new RelatedValueAccessor(g.getResource(getterAnn.value()), valueType, valueBinding),
                                        rangeAccessor);
        }