1 /*******************************************************************************
\r
2 * Copyright (c) 2010 Association for Decentralized Information Management in
\r
4 * All rights reserved. This program and the accompanying materials
\r
5 * are made available under the terms of the Eclipse Public License v1.0
\r
6 * which accompanies this distribution, and is available at
\r
7 * http://www.eclipse.org/legal/epl-v10.html
\r
10 * VTT Technical Research Centre of Finland - initial API and implementation
\r
11 *******************************************************************************/
\r
12 package org.simantics.databoard.binding.impl;
14 import java.util.ArrayList;
\r
15 import java.util.Collection;
\r
16 import java.util.Iterator;
\r
17 import java.util.List;
\r
19 import org.simantics.databoard.binding.ArrayBinding;
\r
20 import org.simantics.databoard.binding.Binding;
\r
21 import org.simantics.databoard.binding.error.BindingException;
\r
22 import org.simantics.databoard.type.ArrayType;
\r
25 * CollectionListBinding binds ArrayType to java.util.List and
\r
26 * instantiates java.util.ArrayList.
28 * @author Toni Kalajainen <toni.kalajainen@vtt.fi>
30 public class ArrayListBinding extends ArrayBinding {
32 public ArrayListBinding(Binding componentBinding) {
\r
33 this(new ArrayType(componentBinding.type()), componentBinding);
\r
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")
\r
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")
\r
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")
\r
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 {
\r
126 @SuppressWarnings("unchecked")
\r
127 List<Object> list = (List<Object>) array;
\r
128 int oldSize = list.size();
\r
129 if (oldSize==newSize) return;
\r
131 if (oldSize>newSize) {
\r
132 for (int i=oldSize-1; i>=newSize; i--)
\r
137 int c = newSize - oldSize;
\r
138 for (int i=0; i<c; i++) {
\r
139 list.add( componentBinding.createDefault() );
\r
144 public boolean isImmutable() {
\r
149 public boolean isResizable() {
\r