X-Git-Url: https://gerrit.simantics.org/r/gitweb?p=simantics%2Fplatform.git;a=blobdiff_plain;f=bundles%2Forg.simantics.databoard%2Fsrc%2Forg%2Fsimantics%2Fdataboard%2Fbinding%2FArrayBinding.java;h=bf74376cac8f3a36b2451cd4bc57fb761c525402;hp=1a0cd56517681c366e0762ade068609b3ad550e8;hb=0ae2b770234dfc3cbb18bd38f324125cf0faca07;hpb=24e2b34260f219f0d1644ca7a138894980e25b14 diff --git a/bundles/org.simantics.databoard/src/org/simantics/databoard/binding/ArrayBinding.java b/bundles/org.simantics.databoard/src/org/simantics/databoard/binding/ArrayBinding.java index 1a0cd5651..bf74376ca 100644 --- a/bundles/org.simantics.databoard/src/org/simantics/databoard/binding/ArrayBinding.java +++ b/bundles/org.simantics.databoard/src/org/simantics/databoard/binding/ArrayBinding.java @@ -1,55 +1,55 @@ -/******************************************************************************* - * 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 - *******************************************************************************/ +/******************************************************************************* + * 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; -import java.util.Collection; -import java.util.IdentityHashMap; -import java.util.Iterator; -import java.util.Set; - -import org.simantics.databoard.Bindings; -import org.simantics.databoard.accessor.reference.ChildReference; -import org.simantics.databoard.accessor.reference.IndexReference; -import org.simantics.databoard.accessor.reference.LabelReference; -import org.simantics.databoard.adapter.AdaptException; -import org.simantics.databoard.adapter.Adapter; -import org.simantics.databoard.adapter.AdapterConstructionException; -import org.simantics.databoard.binding.error.BindingException; -import org.simantics.databoard.binding.error.RuntimeBindingException; -import org.simantics.databoard.binding.impl.ArrayListBinding; -import org.simantics.databoard.binding.impl.BindingPrintContext; -import org.simantics.databoard.binding.impl.ByteArrayBinding; -import org.simantics.databoard.binding.impl.DoubleArrayBinding; -import org.simantics.databoard.binding.impl.FloatArrayBinding; -import org.simantics.databoard.binding.impl.IntArrayBinding; -import org.simantics.databoard.binding.impl.LinkedListBinding; -import org.simantics.databoard.binding.impl.LongArrayBinding; -import org.simantics.databoard.binding.impl.ObjectArrayBinding; -import org.simantics.databoard.type.ArrayType; -import org.simantics.databoard.util.IdentityPair; -import org.simantics.databoard.util.Range; +import java.util.Collection; +import java.util.IdentityHashMap; +import java.util.Iterator; +import java.util.Set; + +import org.simantics.databoard.Bindings; +import org.simantics.databoard.accessor.reference.ChildReference; +import org.simantics.databoard.accessor.reference.IndexReference; +import org.simantics.databoard.accessor.reference.LabelReference; +import org.simantics.databoard.adapter.AdaptException; +import org.simantics.databoard.adapter.Adapter; +import org.simantics.databoard.adapter.AdapterConstructionException; +import org.simantics.databoard.binding.error.BindingException; +import org.simantics.databoard.binding.error.RuntimeBindingException; +import org.simantics.databoard.binding.impl.ArrayListBinding; +import org.simantics.databoard.binding.impl.BindingPrintContext; +import org.simantics.databoard.binding.impl.ByteArrayBinding; +import org.simantics.databoard.binding.impl.DoubleArrayBinding; +import org.simantics.databoard.binding.impl.FloatArrayBinding; +import org.simantics.databoard.binding.impl.IntArrayBinding; +import org.simantics.databoard.binding.impl.LinkedListBinding; +import org.simantics.databoard.binding.impl.LongArrayBinding; +import org.simantics.databoard.binding.impl.ObjectArrayBinding; +import org.simantics.databoard.type.ArrayType; +import org.simantics.databoard.util.IdentityPair; +import org.simantics.databoard.util.Range; /** * This is a binding of Array type and a Java Object. * - * @see ArrayType - * @see ArrayListBinding for Binding of java.util.ArrayList - * @see LinkedListBinding for Binding of java.util.LinkedList - * @see ObjectArrayBinding for Binding of Object[] - * @see IntArrayBinding for primitive array int[] binding - * @see ByteArrayBinding for primitive array byte[] binding - * @see LongArrayBinding for primitive array long[] binding - * @see DoubleArrayBinding for primitive array double[] binding - * @see FloatArrayBinding for primitive array float[] binding + * @see ArrayType + * @see ArrayListBinding for Binding of java.util.ArrayList + * @see LinkedListBinding for Binding of java.util.LinkedList + * @see ObjectArrayBinding for Binding of Object[] + * @see IntArrayBinding for primitive array int[] binding + * @see ByteArrayBinding for primitive array byte[] binding + * @see LongArrayBinding for primitive array long[] binding + * @see DoubleArrayBinding for primitive array double[] binding + * @see FloatArrayBinding for primitive array float[] binding * @author Toni Kalajainen */ public abstract class ArrayBinding extends Binding { @@ -62,27 +62,27 @@ public abstract class ArrayBinding extends Binding { this.componentBinding = componentBinding; this.type = type; } - - @Override - public Binding getComponentBinding(ChildReference path) { - if (path==null) return this; - if (path instanceof org.simantics.databoard.accessor.reference.ComponentReference) { - return componentBinding.getComponentBinding(path.childReference); - } - if (path instanceof IndexReference) { - IndexReference ir = (IndexReference) path; - if (ir.index == 0) { - return componentBinding.getComponentBinding(path.childReference); - } - } - if (path instanceof LabelReference) { - LabelReference lr = (LabelReference) path; - if (lr.label.equals("v")) { - return componentBinding.getComponentBinding(path.childReference); - } - } - throw new IllegalArgumentException(); - } + + @Override + public Binding getComponentBinding(ChildReference path) { + if (path==null) return this; + if (path instanceof org.simantics.databoard.accessor.reference.ComponentReference) { + return componentBinding.getComponentBinding(path.childReference); + } + if (path instanceof IndexReference) { + IndexReference ir = (IndexReference) path; + if (ir.index == 0) { + return componentBinding.getComponentBinding(path.childReference); + } + } + if (path instanceof LabelReference) { + LabelReference lr = (LabelReference) path; + if (lr.label.equals("v")) { + return componentBinding.getComponentBinding(path.childReference); + } + } + throw new IllegalArgumentException(); + } /** * Returns true if array length can be modified. @@ -92,14 +92,14 @@ public abstract class ArrayBinding extends Binding { @Override public boolean isImmutable() { return super.isImmutable(); - } - - /** - * Return true if the array's size can be adjusted and false if not - * - * @return true if array is resizable - */ - public abstract boolean isResizable(); + } + + /** + * Return true if the array's size can be adjusted and false if not + * + * @return true if array is resizable + */ + public abstract boolean isResizable(); @Override public ArrayType type() { @@ -137,38 +137,38 @@ public abstract class ArrayBinding extends Binding { * @return new instance */ public abstract Object create(int length, Iterator values) - throws BindingException; - - /** - * - * @param length - * @return array - * @throws BindingException - */ - public Object create(int length) throws BindingException - { - try { - return create(length, new Iterator() { - @Override - public boolean hasNext() { - return true; - } - - @Override - public Object next() { - try { - return componentBinding.createDefault(); - } catch (BindingException e) { - throw new RuntimeBindingException(e); - } - } - - @Override - public void remove() { - }}); - } catch (RuntimeBindingException e) { - throw e.getCause(); - } + throws BindingException; + + /** + * + * @param length + * @return array + * @throws BindingException + */ + public Object create(int length) throws BindingException + { + try { + return create(length, new Iterator() { + @Override + public boolean hasNext() { + return true; + } + + @Override + public Object next() { + try { + return componentBinding.createDefault(); + } catch (BindingException e) { + throw new RuntimeBindingException(e); + } + } + + @Override + public void remove() { + }}); + } catch (RuntimeBindingException e) { + throw e.getCause(); + } } /** @@ -188,67 +188,67 @@ public abstract class ArrayBinding extends Binding { } catch (BindingException e) { throw new RuntimeBindingException(e); } - } - - @Override - public void readFrom(Binding srcBinding, Object src, Object dst) - throws BindingException { - - try { - - // Src Binding - ArrayBinding sb = (ArrayBinding) srcBinding; - // Src Component Binding - Binding scb = sb.getComponentBinding(); - - // Dst Component Binding - Binding dcb = getComponentBinding(); - - int newLen = sb.size(src); - int oldLen = size(dst); - boolean cbImmutable = dcb.isImmutable(); - Adapter cloner = cbImmutable ? Bindings.adapterFactory.getAdapter(scb, dcb, false, true) : null; - - // Set elements - for (int i=0; inewLen) { - setSize(dst, newLen); - } - - if (!Bindings.equals(srcBinding, src, this, dst)) - throw new BindingException("internal error"); - - } catch (AdaptException e) { - throw new BindingException(e); - } catch (AdapterConstructionException e) { - throw new BindingException(e); - } - - } - + } + + @Override + public void readFrom(Binding srcBinding, Object src, Object dst) + throws BindingException { + + try { + + // Src Binding + ArrayBinding sb = (ArrayBinding) srcBinding; + // Src Component Binding + Binding scb = sb.getComponentBinding(); + + // Dst Component Binding + Binding dcb = getComponentBinding(); + + int newLen = sb.size(src); + int oldLen = size(dst); + boolean cbImmutable = dcb.isImmutable(); + Adapter cloner = cbImmutable ? Bindings.adapterFactory.getAdapter(scb, dcb, false, true) : null; + + // Set elements + for (int i=0; inewLen) { + setSize(dst, newLen); + } + + if (!Bindings.equals(srcBinding, src, this, dst)) + throw new BindingException("internal error"); + + } catch (AdaptException e) { + throw new BindingException(e); + } catch (AdapterConstructionException e) { + throw new BindingException(e); + } + + } + public void add(Object array, Object element) throws BindingException { @@ -263,7 +263,7 @@ public abstract class ArrayBinding extends Binding { public abstract void remove(Object array, int index, int count) throws BindingException, IndexOutOfBoundsException; public abstract Object get(Object array, int index) throws BindingException, IndexOutOfBoundsException; public abstract void getAll(Object array, Object[] result) throws BindingException; - public abstract void set(Object array, int index, Object value) throws BindingException; + public abstract void set(Object array, int index, Object value) throws BindingException; public abstract void setSize(Object array, int newSize) throws BindingException; public abstract int size(Object array) throws BindingException; @@ -335,48 +335,48 @@ public abstract class ArrayBinding extends Binding { } return 0; } - - @Override - protected void toString(Object value, BindingPrintContext ctx) throws BindingException { - Binding componentBinding = getComponentBinding(); - ctx.b.append('['); - int size = size(value); - boolean numberArray = componentBinding instanceof NumberBinding; - boolean hasMany = size > 1; - for(int i=0;i0) { - ctx.b.append(", "); - if ( hasMany && !numberArray && !ctx.singleLine ) { - ctx.b.append("\n"); - } - } - componentBinding.toString(get(value, i), ctx); - } - ctx.b.append(']'); - } - - /** - * Get the number of component bindings - */ - @Override - public int getComponentCount() { - return 1; - } - - @Override - public Binding getComponentBinding(int index) { - if (index!=0) throw new IllegalArgumentException(); - return componentBinding; - } - - @Override - protected boolean deepEquals(Object obj, - Set> compareHistory) { - return super.deepEquals( obj, compareHistory ) && componentBinding.equals(((ArrayBinding)obj).componentBinding, compareHistory); - } - - @Override - public int deepHashCode(IdentityHashMap hashedObjects) { - return super.deepHashCode(hashedObjects) + 13 * componentBinding.hashCode(hashedObjects); - } + + @Override + protected void toString(Object value, BindingPrintContext ctx) throws BindingException { + Binding componentBinding = getComponentBinding(); + ctx.b.append('['); + int size = size(value); + boolean numberArray = componentBinding instanceof NumberBinding; + boolean hasMany = size > 1; + for(int i=0;i0) { + ctx.b.append(", "); + if ( hasMany && !numberArray && !ctx.singleLine ) { + ctx.b.append("\n"); + } + } + componentBinding.toString(get(value, i), ctx); + } + ctx.b.append(']'); + } + + /** + * Get the number of component bindings + */ + @Override + public int getComponentCount() { + return 1; + } + + @Override + public Binding getComponentBinding(int index) { + if (index!=0) throw new IllegalArgumentException(); + return componentBinding; + } + + @Override + protected boolean deepEquals(Object obj, + Set> compareHistory) { + return super.deepEquals( obj, compareHistory ) && componentBinding.equals(((ArrayBinding)obj).componentBinding, compareHistory); + } + + @Override + public int deepHashCode(IdentityHashMap hashedObjects) { + return super.deepHashCode(hashedObjects) + 13 * componentBinding.hashCode(hashedObjects); + } }