1 /*******************************************************************************
2 * Copyright (c) 2010 Association for Decentralized Information Management in
4 * All rights reserved. This program and the accompanying materials
5 * are made available under the terms of the Eclipse Public License v1.0
6 * which accompanies this distribution, and is available at
7 * http://www.eclipse.org/legal/epl-v10.html
10 * VTT Technical Research Centre of Finland - initial API and implementation
11 *******************************************************************************/
12 package org.simantics.databoard.binding.impl;
14 import java.util.ArrayList;
15 import java.util.Collection;
16 import java.util.Iterator;
17 import java.util.List;
19 import org.simantics.databoard.binding.ArrayBinding;
20 import org.simantics.databoard.binding.Binding;
21 import org.simantics.databoard.binding.error.BindingException;
22 import org.simantics.databoard.type.ArrayType;
25 * CollectionListBinding binds ArrayType to java.util.List and
26 * instantiates java.util.ArrayList.
28 * @author Toni Kalajainen <toni.kalajainen@vtt.fi>
30 public class ArrayListBinding extends ArrayBinding {
32 public ArrayListBinding(Binding componentBinding) {
33 this(new ArrayType(componentBinding.type()), componentBinding);
36 public ArrayListBinding(ArrayType type, Binding componentBinding) {
37 super(type, componentBinding);
38 if (type==null) throw new IllegalArgumentException("null arg");
43 public Object create() {
44 return new ArrayList<Object>();
48 public Object create(Collection<Object> collection) throws BindingException {
49 return new ArrayList<Object>( collection );
53 * Create new ArrayList
56 public Object create(int length, Iterator<Object> values) {
57 ArrayList<Object> array = new ArrayList<Object>(length);
58 while (values.hasNext())
59 array.add(values.next());
63 public Object create(Object[] values) {
64 ArrayList<Object> array = new ArrayList<Object>(values.length);
65 for (int i=0; i<values.length; i++)
71 @SuppressWarnings("unchecked")
73 public Object get(Object array, int index) throws BindingException {
74 if (!isInstance(array)) throw new BindingException("Unexpected class "+array.getClass().getSimpleName()+", java.util.List expected");
75 List<Object> list = (List<Object>) array;
76 return list.get(index);
79 @SuppressWarnings("unchecked")
81 public void getAll(Object array, Object[] result) throws BindingException {
82 List<Object> list = (List<Object>) array;
83 for (int i=0; i<list.size(); i++)
84 result[i] = list.get(i);
87 @SuppressWarnings("unchecked")
89 public void set(Object array, int index, Object value)
90 throws BindingException {
91 List<Object> list = (List<Object>) array;
92 list.set(index, value);
95 @SuppressWarnings("unchecked")
97 public void add(Object array, int index, Object element)
98 throws BindingException, IndexOutOfBoundsException {
99 List<Object> list = (List<Object>) array;
100 list.add(index, element);
103 @SuppressWarnings("unchecked")
105 public void remove(Object array, int index, int count) throws BindingException {
106 List<Object> list = (List<Object>) array;
107 for (int i=0; i<count; i++)
111 @SuppressWarnings("unchecked")
113 public int size(Object array) throws BindingException {
114 if (!isInstance(array)) throw new BindingException("Unexpected class "+array.getClass().getSimpleName()+", java.util.List expected");
115 List<Object> list = (List<Object>) array;
120 public boolean isInstance(Object obj) {
121 return obj instanceof List<?>;
125 public void setSize(Object array, int newSize) throws BindingException {
126 @SuppressWarnings("unchecked")
127 List<Object> list = (List<Object>) array;
128 int oldSize = list.size();
129 if (oldSize==newSize) return;
131 if (oldSize>newSize) {
132 for (int i=oldSize-1; i>=newSize; i--)
137 int c = newSize - oldSize;
138 for (int i=0; i<c; i++) {
139 list.add( componentBinding.createDefault() );
144 public boolean isImmutable() {
149 public boolean isResizable() {