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;
Class<? extends ValueAdapter> adapterClass = annotation.adapter();
IRangeAccessor<Range,Object> rangeAccessor = new FieldAccessor<Range,Object>(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();
throw new RuntimeException(e);
}
}
- return new ValueRule<Resource,Range>(new RelatedValueAccessor(g.getResource(annotation.value()), valueType), rangeAccessor);
+ return new ValueRule<Resource,Range>(new RelatedValueAccessor(g.getResource(annotation.value()), valueType, valueBinding), rangeAccessor);
}
}