]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.databoard/src/org/simantics/databoard/binding/impl/TreeSetBinding.java
304b3cad4a4dc80e0150ca86618f6f27957abf51
[simantics/platform.git] / bundles / org.simantics.databoard / src / org / simantics / databoard / binding / impl / TreeSetBinding.java
1 /*******************************************************************************\r
2  *  Copyright (c) 2010 Association for Decentralized Information Management in\r
3  *  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.databoard.binding.impl;
13
14 import java.util.List;\r
15 import java.util.Map;\r
16 import java.util.Set;\r
17 import java.util.TreeSet;\r
18 \r
19 import org.simantics.databoard.binding.ArrayBinding;\r
20 import org.simantics.databoard.binding.Binding;\r
21 import org.simantics.databoard.binding.MapBinding;\r
22 import org.simantics.databoard.binding.error.BindingException;\r
23 import org.simantics.databoard.binding.reflection.VoidBinding;\r
24 import org.simantics.databoard.type.MapType;\r
25 import org.simantics.databoard.type.RecordType;\r
26
27 /**
28  * Binds java.util.TreeSet to Map(T, {})
29  *
30  * @author Toni Kalajainen <toni.kalajainen@vtt.fi>
31  */\r
32 @SuppressWarnings("unchecked")
33 public class TreeSetBinding extends MapBinding {
34         
35         public TreeSetBinding(MapType mapType, Binding elementBinding) {
36                 super(mapType, elementBinding, VoidBinding.VOID_BINDING);
37         }
38         
39         public TreeSetBinding(Binding elementBinding) {
40                 super(new MapType(elementBinding.type(), RecordType.VOID_TYPE), elementBinding, VoidBinding.VOID_BINDING);
41         }
42
43         @Override
44         public void clear(Object set) throws BindingException {
45                 TreeSet<Object> _set = (TreeSet<Object>) set;
46                 _set.clear();
47         }
48
49         @Override
50         public boolean containsKey(Object set, Object key) throws BindingException {
51                 TreeSet<Object> _set = (TreeSet<Object>) set;
52                 return _set.contains(key);
53         }
54
55         @Override
56         public boolean containsValue(Object set, Object value)
57                         throws BindingException {
58                 return false;
59         }
60
61         @Override
62         public Object create() throws BindingException {
63                 return new TreeSet<Object>( getKeyBinding() );
64         }
65
66         public Object create(Set<?> initialSet) throws BindingException {
67                 TreeSet<Object> result = new TreeSet<Object>(getKeyBinding());
68                 result.addAll(initialSet);
69                 return result;
70         }
71
72         @Override
73         public Object create(Map<?, ?> initialMap) throws BindingException {
74                 TreeSet<Object> result = new TreeSet<Object>( getKeyBinding() );
75                 result.addAll(initialMap.keySet());
76                 return result;
77         }
78
79         @Override
80         public Object create(Object[] keys, Object[] values)
81         throws BindingException {               
82                 TreeSet<Object> result = new TreeSet<Object>( getKeyBinding() );
83                 for (int i=0; i<keys.length; i++) {
84                         result.add( keys[i] );
85                 }
86                 return result;
87         }
88         
89         @Override
90         public Object create(List<Object> keys, List<Object> values) {
91                 TreeSet<Object> result = new TreeSet<Object>( getKeyBinding() );
92                 for (int i=0; i<keys.size(); i++)
93                         result.add(keys.get(i));
94                 return result;
95         }       
96
97         @Override
98         public Object get(Object set, Object key) throws BindingException {
99                 return null;
100         }\r
101         
102     @Override
103     public <K, V> void getAll(Object setFrom, Map<K, V> to) throws BindingException {
104                 Map<K, V> _to = (Map<K, V>) to;
105                 TreeSet<K> _setFrom = (TreeSet<K>) setFrom;
106                 for (K k : _setFrom)
107                         _to.put(k, null);
108         }
109
110         @Override
111         public void getAll(Object setFrom, Object[] keys, Object[] values)
112                         throws BindingException {
113                 TreeSet<Object> _setFrom = (TreeSet<Object>) setFrom;
114                 int i=0;
115                 for (Object k : _setFrom) {
116                         keys[i] = k;
117                         values[i] = null;
118                 }               
119         }
120
121         @Override
122         public Object[] getKeys(Object set) throws BindingException {
123                 TreeSet<Object> _set = (TreeSet<Object>) set;
124                 return _set.toArray(new Object[_set.size()]);
125         }
126
127         @Override
128         public void getKeys(Object set, Set<Object> keys) throws BindingException {
129                 TreeSet<Object> s = (TreeSet<Object>) set;
130                 keys.addAll(s);
131         }\r
132         \r
133         @Override\r
134         public Object[] getValues(Object set) throws BindingException {\r
135                 TreeSet<Object> _set = (TreeSet<Object>) set;\r
136                 return new Object[_set.size()];\r
137         }\r
138         \r
139         @Override\r
140         public int count(Object src, Object from, boolean fromInclusive, Object end, boolean endInclusive) throws BindingException {\r
141                 TreeSet<Object> m = (TreeSet<Object>) src;              \r
142                 Set<Object> sm = m.subSet(from, fromInclusive, end, endInclusive);\r
143                 return sm.size();\r
144         }\r
145         \r
146         @Override\r
147         public int getEntries(Object src, Object from, boolean fromInclusive, Object end, boolean endInclusive, ArrayBinding dstKeyArrayBinding, Object dstKeyArray, ArrayBinding dstValueArrayBinding, Object dstValueArray, int limit) throws BindingException {\r
148                 return 0;\r
149         }
150
151         @Override
152         public void put(Object set, Object key, Object value)
153                         throws BindingException {
154                 TreeSet<Object> _set = (TreeSet<Object>) set;
155                 if (value!=null) throw new BindingException("Cannot put non-null to a Set");
156                 _set.add(key);
157         }
158
159         public void putAll(Object setTo, Set<?> from) {
160                 TreeSet<Object> _set = (TreeSet<Object>) setTo;
161                 _set.addAll(from);
162         }
163         
164         @Override
165         public <K,V> void putAll(Object setTo, Map<K,V> from) throws BindingException {
166                 TreeSet<Object> _set = (TreeSet<Object>) setTo;
167                 _set.addAll(from.keySet());
168         }
169
170         @Override
171         public Object remove(Object set, Object key) throws BindingException {
172                 TreeSet<Object> _set = (TreeSet<Object>) set;
173                 _set.remove(key);
174                 return null;
175         }
176
177         @Override
178         public int size(Object set) throws BindingException {
179                 TreeSet<Object> _set = (TreeSet<Object>) set;
180                 return _set.size();
181         }
182
183         @Override
184         public boolean isInstance(Object obj) {
185                 return obj instanceof TreeSet;
186         }
187
188         @Override
189         public Object getCeilingKey(Object set, Object key) {
190                 TreeSet<Object> _set = (TreeSet<Object>) set;
191                 return _set.ceiling(key);
192         }
193
194         @Override
195         public Object getFirstKey(Object set) {
196                 TreeSet<Object> _set = (TreeSet<Object>) set;
197                 return _set.first();
198         }
199
200         @Override
201         public Object getFloorKey(Object set, Object key) {
202                 TreeSet<Object> _set = (TreeSet<Object>) set;
203                 return _set.floor(key);
204         }
205
206         @Override
207         public Object getHigherKey(Object set, Object key) {
208                 TreeSet<Object> _set = (TreeSet<Object>) set;
209                 return _set.higher(key);
210         }
211
212         @Override
213         public Object getLastKey(Object set) {
214                 TreeSet<Object> _set = (TreeSet<Object>) set;
215                 return _set.last();
216         }
217
218         @Override
219         public Object getLowerKey(Object set, Object key) {
220                 TreeSet<Object> _set = (TreeSet<Object>) set;
221                 return _set.lower(key);
222         }
223         
224
225 }
226