import java.util.Map;\r
\r
import org.apache.commons.collections.map.ReferenceMap;\r
+import org.simantics.databoard.Bindings;\r
import org.simantics.databoard.Units;\r
import org.simantics.databoard.binding.ArrayBinding;\r
import org.simantics.databoard.binding.Binding;\r
return result;
}\r
\r
+ if (domain instanceof VariantBinding && !(range instanceof VariantBinding))\r
+ {\r
+ // Make a recursive adaptation from a variant source\r
+ final VariantBinding domainBinding = (VariantBinding)domain;\r
+ final Binding rangeBinding = range;\r
+ AbstractAdapter result = new AbstractAdapter() {\r
+ @Override\r
+ public Object adapt(Object obj) throws AdaptException {\r
+ try {\r
+ Object value = domainBinding.getContent(obj);\r
+ Binding contentBinding = domainBinding.getContentBinding(obj);\r
+ AbstractAdapter adapter = (AbstractAdapter) getAdapter(contentBinding, rangeBinding, typeAdapter, mustClone);\r
+ return adapter.adapt(value);\r
+ } catch (BindingException | AdapterConstructionException e) {\r
+ throw new AdaptException(e);\r
+ }\r
+ }\r
+ };\r
+ result.clones = mustClone;\r
+ addToCache(req, result);\r
+ return result; \r
+ }\r
+ \r
if (range instanceof VariantBinding && !(domain instanceof VariantBinding))\r
{\r
// Default to just wrapping the domain type\r