- }\r
- \r
- @Override\r
- public void readFrom(Binding srcBinding, Object src, Object dst)\r
- throws BindingException {\r
- try {\r
- ArrayBinding sb = (ArrayBinding) srcBinding;\r
- Binding scb = sb.getComponentBinding();\r
- Binding dcb = getComponentBinding();\r
- Adapter cloner = dcb.isImmutable() ? Bindings.adapterFactory.getAdapter(scb, dcb, false, true) : null;\r
- int length = Array.getLength(dst);\r
- if (length != sb.size(src)) throw new BindingException(clazz.getName()+" is length immutable");\r
- \r
- for (int i=0; i<length; i++) {\r
- if (dcb.isImmutable()) {\r
- Object sc = sb.get(src, i);\r
- Object dc = cloner.adapt(sc);\r
- set(dst, i, dc); \r
- } else {\r
- Object dc = Array.get(dst, i);\r
- Object sc = sb.get(src, i);\r
- dc = dcb.readFromTry(scb, sc, dc);\r
- Array.set(dst, i, dc);\r
- }\r
- }\r
- } catch (AdaptException e) {\r
- throw new BindingException(e);\r
- } catch (AdapterConstructionException e) {\r
- throw new BindingException(e);\r
- }\r
- }\r
- \r
- @Override\r
- public Object readFromTry(Binding srcBinding, Object src, Object dst)\r
- throws BindingException {\r
- try {\r
- ArrayBinding sb = (ArrayBinding) srcBinding;\r
- Binding scb = sb.getComponentBinding();\r
- Binding dcb = getComponentBinding();\r
- Adapter cloner = Bindings.adapterFactory.getAdapter(scb, dcb, false, true);\r
- int length = Array.getLength(dst);\r
- int srcSize = sb.size(src);\r
- Object d = dst;\r
- if (length != srcSize || dcb.isImmutable()) {\r
- d = Array.newInstance(componentClass, srcSize);\r
- if (dcb.isImmutable()) {\r
- for (int i=0; i<srcSize; i++) {\r
- Object sc = sb.get(src, i);\r
- Object dc = cloner.adapt(sc);\r
- set(d, i, dc);\r
- }\r
- } else {\r
- int X = Math.min(Array.getLength(dst), srcSize); \r
- for (int i=0; i<X; i++) {\r
- Object dc = Array.get(dst, i);\r
- Object sc = sb.get(src, i);\r
- dc = dcb.readFromTry(scb, sc, dc);\r
- Array.set(d, i, dc);\r
- }\r
- for (int i=X; i<srcSize; i++) {\r
- Object sc = sb.get(src, i);\r
- Object dc = cloner.adapt(sc);\r
- set(d, i, dc);\r
- }\r
- }\r
- \r
- } else {\r
- if (dcb.isImmutable()) {\r
- for (int i=0; i<length; i++) {\r
- Object sc = sb.get(src, i);\r
- Object dc = cloner.adapt(sc);\r
- set(d, i, dc);\r
- }\r
- } else {\r
- for (int i=0; i<length; i++) {\r
- Object dc = Array.get(dst, i);\r
- Object sc = sb.get(src, i);\r
- dc = dcb.readFromTry(scb, sc, dc);\r
- Array.set(d, i, dc);\r
- }\r
- }\r
- }\r
- \r
- return d;\r
- } catch (AdaptException e) {\r
- throw new BindingException(e);\r
- } catch (AdapterConstructionException e) {\r
- throw new BindingException(e);\r
- }\r
+ }
+
+ @Override
+ public void readFrom(Binding srcBinding, Object src, Object dst)
+ throws BindingException {
+ try {
+ ArrayBinding sb = (ArrayBinding) srcBinding;
+ Binding scb = sb.getComponentBinding();
+ Binding dcb = getComponentBinding();
+ Adapter cloner = dcb.isImmutable() ? Bindings.adapterFactory.getAdapter(scb, dcb, false, true) : null;
+ int length = Array.getLength(dst);
+ if (length != sb.size(src)) throw new BindingException(clazz.getName()+" is length immutable");
+
+ for (int i=0; i<length; i++) {
+ if (dcb.isImmutable()) {
+ Object sc = sb.get(src, i);
+ Object dc = cloner.adapt(sc);
+ set(dst, i, dc);
+ } else {
+ Object dc = Array.get(dst, i);
+ Object sc = sb.get(src, i);
+ dc = dcb.readFromTry(scb, sc, dc);
+ Array.set(dst, i, dc);
+ }
+ }
+ } catch (AdaptException e) {
+ throw new BindingException(e);
+ } catch (AdapterConstructionException e) {
+ throw new BindingException(e);
+ }
+ }
+
+ @Override
+ public Object readFromTry(Binding srcBinding, Object src, Object dst)
+ throws BindingException {
+ try {
+ ArrayBinding sb = (ArrayBinding) srcBinding;
+ Binding scb = sb.getComponentBinding();
+ Binding dcb = getComponentBinding();
+ Adapter cloner = Bindings.adapterFactory.getAdapter(scb, dcb, false, true);
+ int length = Array.getLength(dst);
+ int srcSize = sb.size(src);
+ Object d = dst;
+ if (length != srcSize || dcb.isImmutable()) {
+ d = Array.newInstance(componentClass, srcSize);
+ if (dcb.isImmutable()) {
+ for (int i=0; i<srcSize; i++) {
+ Object sc = sb.get(src, i);
+ Object dc = cloner.adapt(sc);
+ set(d, i, dc);
+ }
+ } else {
+ int X = Math.min(Array.getLength(dst), srcSize);
+ for (int i=0; i<X; i++) {
+ Object dc = Array.get(dst, i);
+ Object sc = sb.get(src, i);
+ dc = dcb.readFromTry(scb, sc, dc);
+ Array.set(d, i, dc);
+ }
+ for (int i=X; i<srcSize; i++) {
+ Object sc = sb.get(src, i);
+ Object dc = cloner.adapt(sc);
+ set(d, i, dc);
+ }
+ }
+
+ } else {
+ if (dcb.isImmutable()) {
+ for (int i=0; i<length; i++) {
+ Object sc = sb.get(src, i);
+ Object dc = cloner.adapt(sc);
+ set(d, i, dc);
+ }
+ } else {
+ for (int i=0; i<length; i++) {
+ Object dc = Array.get(dst, i);
+ Object sc = sb.get(src, i);
+ dc = dcb.readFromTry(scb, sc, dc);
+ Array.set(d, i, dc);
+ }
+ }
+ }
+
+ return d;
+ } catch (AdaptException e) {
+ throw new BindingException(e);
+ } catch (AdapterConstructionException e) {
+ throw new BindingException(e);
+ }