/******************************************************************************* * Copyright (c) 2010 Association for Decentralized Information Management in * Industry THTH ry. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * VTT Technical Research Centre of Finland - initial API and implementation *******************************************************************************/ package org.simantics.databoard.binding.impl; import java.lang.reflect.Array; import java.util.Iterator; import org.simantics.databoard.Bindings; import org.simantics.databoard.adapter.AdaptException; import org.simantics.databoard.adapter.Adapter; import org.simantics.databoard.adapter.AdapterConstructionException; import org.simantics.databoard.binding.ArrayBinding; import org.simantics.databoard.binding.Binding; import org.simantics.databoard.binding.error.BindingException; import org.simantics.databoard.type.ArrayType; /** * Binds to Object[] * * @author Toni Kalajainen */ public class ObjectArrayBinding extends ArrayBinding { public ObjectArrayBinding(ArrayType type, Binding componentBinding) { super(type, componentBinding); if (type == null) throw new IllegalArgumentException("null arg"); this.type = type; } public ObjectArrayBinding(Binding componentBinding) { this(new ArrayType(componentBinding.type()), componentBinding); } @Override public Object create(int length, Iterator values) { Object[] array = new Object[length]; for (int i = 0; i < length; ++i) array[i] = values.next(); return array; } @Override public Object create() { return new Object[0]; } public Object create(Object[] values) { return values.clone(); } @Override public void readFrom(Binding srcBinding, Object src, Object dst) throws BindingException { // Src Binding ArrayBinding sb = (ArrayBinding) srcBinding; // Src Component Binding Binding scb = sb.getComponentBinding(); // Dst component binding Binding dcb = getComponentBinding(); // Dst array Object[] d = (Object[]) dst; if (d.length != sb.size(src)) throw new BindingException("Object[] is length immutable"); for (int i=0; i