]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.utils.datastructures/src/org/simantics/utils/datastructures/ListAdapter.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.utils.datastructures / src / org / simantics / utils / datastructures / ListAdapter.java
1 /*******************************************************************************\r
2  * Copyright (c) 2007, 2010 Association for Decentralized Information Management\r
3  * in Industry THTH ry.\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
8  *\r
9  * Contributors:\r
10  *     VTT Technical Research Centre of Finland - initial API and implementation\r
11  *******************************************************************************/\r
12 package org.simantics.utils.datastructures;\r
13 \r
14 import java.util.Collection;\r
15 import java.util.List;\r
16 import java.util.ListIterator;\r
17 \r
18 public class ListAdapter<Domain,Range,C extends List<Domain>> \r
19     extends CollectionAdapter<Domain,Range,C>\r
20     implements List<Range> {\r
21 \r
22     public ListAdapter(Converter<Domain,Range> converter, C collection) {\r
23         super(converter, collection);\r
24     }\r
25     \r
26     @Override\r
27     public void add(int index, Range element) {\r
28         collection.add(index, converter.convertFrom(element));        \r
29     }\r
30 \r
31     @SuppressWarnings("unchecked")\r
32     @Override\r
33     public boolean addAll(int index, Collection<? extends Range> c) {\r
34         return collection.addAll(index, new CollectionAdapter<Range, Domain, Collection<Range>>(inverseConverter(converter), (Collection<Range>)c));\r
35     }\r
36 \r
37     @Override\r
38     public Range get(int index) {\r
39         return converter.convertTo(collection.get(index));        \r
40     }\r
41 \r
42     @SuppressWarnings("unchecked")\r
43     @Override\r
44     public int indexOf(Object o) {\r
45         return collection.indexOf(converter.convertFrom((Range)o));\r
46     }\r
47 \r
48     @SuppressWarnings("unchecked")\r
49     @Override\r
50     public int lastIndexOf(Object o) {\r
51         return collection.lastIndexOf(converter.convertFrom((Range)o));\r
52     }\r
53     \r
54     @Override\r
55     public ListIterator<Range> listIterator() {\r
56         return new ListIteratorAdapter<Domain, Range, ListIterator<Domain>>\r
57             (converter, collection.listIterator());\r
58     }\r
59 \r
60     @Override\r
61     public ListIterator<Range> listIterator(int index) {\r
62         return new ListIteratorAdapter<Domain, Range, ListIterator<Domain>>\r
63             (converter, collection.listIterator(index));                \r
64     }\r
65 \r
66     @Override\r
67     public Range remove(int index) {\r
68         return converter.convertTo(collection.remove(index));\r
69     }\r
70 \r
71     @Override\r
72     public Range set(int index, Range element) {\r
73         return converter.convertTo(collection.set(index, converter.convertFrom(element)));\r
74     }\r
75 \r
76     @Override\r
77     public List<Range> subList(int fromIndex, int toIndex) {\r
78         return new ListAdapter<Domain,Range,List<Domain>>(converter, collection.subList(fromIndex, toIndex)); \r
79     }    \r
80 \r
81 }\r