X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;ds=sidebyside;f=bundles%2Forg.simantics.objmap2%2Fsrc%2Forg%2Fsimantics%2Fobjmap%2Fgraph%2Fannotations%2Ffactories%2FRelatedValueRuleFactory.java;fp=bundles%2Forg.simantics.objmap2%2Fsrc%2Forg%2Fsimantics%2Fobjmap%2Fgraph%2Fannotations%2Ffactories%2FRelatedValueRuleFactory.java;h=adb2f6215e3a76c8d45f76a9122f5feef2ec7ec6;hb=240fea4f9c0aa8dba1e1af496aebb4157740fa20;hp=ca226c60554edc91a625dffa889b492acbd06dc0;hpb=aefd2e1032b23c86b153be48bcdfee9f8b4dd126;p=simantics%2Fplatform.git diff --git a/bundles/org.simantics.objmap2/src/org/simantics/objmap/graph/annotations/factories/RelatedValueRuleFactory.java b/bundles/org.simantics.objmap2/src/org/simantics/objmap/graph/annotations/factories/RelatedValueRuleFactory.java index ca226c605..adb2f6215 100644 --- a/bundles/org.simantics.objmap2/src/org/simantics/objmap/graph/annotations/factories/RelatedValueRuleFactory.java +++ b/bundles/org.simantics.objmap2/src/org/simantics/objmap/graph/annotations/factories/RelatedValueRuleFactory.java @@ -14,12 +14,15 @@ package org.simantics.objmap.graph.annotations.factories; import java.lang.annotation.Annotation; import java.lang.reflect.Field; +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.ResourceNotFoundException; import org.simantics.db.exception.ServiceException; import org.simantics.db.exception.ValidationException; - import org.simantics.objmap.bidirectional.IBidirectionalMappingRule; import org.simantics.objmap.graph.annotations.RelatedValue; import org.simantics.objmap.graph.rules.ValueRule; @@ -41,8 +44,14 @@ public class RelatedValueRuleFactory implements IFieldRuleFactory adapterClass = annotation.adapter(); IRangeAccessor rangeAccessor = new FieldAccessor(field); Resource valueType; + Binding valueBinding = null; if (adapterClass == IdentityAdapter.class) { - valueType = DataTypeUtils.dataTypeOfClass(g, field.getType()); + try { + valueBinding = Bindings.getBinding(BindingRequest.create(field)); + valueType = DataTypeUtils.dataTypeOfDatatype(g, valueBinding.type()); + } catch (BindingConstructionException e) { + return null; + } } else { try { ValueAdapter adapter = adapterClass.newInstance(); @@ -54,7 +63,7 @@ public class RelatedValueRuleFactory implements IFieldRuleFactory(new RelatedValueAccessor(g.getResource(annotation.value()), valueType), rangeAccessor); + return new ValueRule(new RelatedValueAccessor(g.getResource(annotation.value()), valueType, valueBinding), rangeAccessor); } }