-\r
- @Override\r
- public void readFrom(Binding srcBinding, Object src, Object dst)\r
- throws BindingException {\r
- UnionBinding sb = (UnionBinding) srcBinding;\r
- int newTag = sb.getTag(src);\r
- int oldTag = getTag(dst);\r
- \r
- // New value binding\r
- Binding nvb = sb.getComponentBinding(newTag);\r
- // New value\r
- Object nv = sb.getValue(src);\r
- \r
- // Same tag\r
- if (newTag==oldTag) {\r
- // Same tag - old value is used if possible\r
- \r
- // Old value binding\r
- Binding ovb = getComponentBinding(oldTag);\r
- \r
- Object ov = getValue(dst);\r
- ov = ovb.readFromTry(nvb, nv, ov);\r
- setValue(dst, oldTag, ov);\r
- \r
- } else {\r
- // Different tag - old value is not used\r
- boolean clone = !nvb.isImmutable();\r
- Binding dcb = getComponentBinding(newTag);\r
- boolean adapt = nvb!=dcb;\r
- \r
- if ( !adapt && !clone) {\r
- setValue(dst, newTag, nv);\r
- } else {\r
- try {\r
- // Clone or adapt value if necessary.\r
- Object dv = Bindings.clone(nv, nvb, dcb);\r
- setValue(dst, newTag, dv);\r
- } catch(AdaptException e) {\r
- throw new BindingException(e);\r
- } \r
- }\r
- }\r
- \r
- /*\r
- if (dcb.isImmutable() || st!=dt) {\r
- try {\r
- Object dv = Bindings.clone(sv, scb, dcb);\r
- setValue(dst, st, dv);\r
- } catch(AdaptException e) {\r
- throw new BindingException(e);\r
- }\r
- } else {\r
- Object dv = getValue(dst);\r
- dv = dcb.readFromTry(scb, sv, dv);\r
- setValue(dst, st, dv);\r
- }\r
- */\r
- }\r
- \r
+
+ @Override
+ public void readFrom(Binding srcBinding, Object src, Object dst)
+ throws BindingException {
+ UnionBinding sb = (UnionBinding) srcBinding;
+ int newTag = sb.getTag(src);
+ int oldTag = getTag(dst);
+
+ // New value binding
+ Binding nvb = sb.getComponentBinding(newTag);
+ // New value
+ Object nv = sb.getValue(src);
+
+ // Same tag
+ if (newTag==oldTag) {
+ // Same tag - old value is used if possible
+
+ // Old value binding
+ Binding ovb = getComponentBinding(oldTag);
+
+ Object ov = getValue(dst);
+ ov = ovb.readFromTry(nvb, nv, ov);
+ setValue(dst, oldTag, ov);
+
+ } else {
+ // Different tag - old value is not used
+ boolean clone = !nvb.isImmutable();
+ Binding dcb = getComponentBinding(newTag);
+ boolean adapt = nvb!=dcb;
+
+ if ( !adapt && !clone) {
+ setValue(dst, newTag, nv);
+ } else {
+ try {
+ // Clone or adapt value if necessary.
+ Object dv = Bindings.clone(nv, nvb, dcb);
+ setValue(dst, newTag, dv);
+ } catch(AdaptException e) {
+ throw new BindingException(e);
+ }
+ }
+ }
+
+ /*
+ if (dcb.isImmutable() || st!=dt) {
+ try {
+ Object dv = Bindings.clone(sv, scb, dcb);
+ setValue(dst, st, dv);
+ } catch(AdaptException e) {
+ throw new BindingException(e);
+ }
+ } else {
+ Object dv = getValue(dst);
+ dv = dcb.readFromTry(scb, sv, dv);
+ setValue(dst, st, dv);
+ }
+ */
+ }
+