]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.databoard/src/org/simantics/databoard/binding/impl/TreeSetBinding.java
Merge "Remove unnecessary getComparableKey from HashMapBinding"
[simantics/platform.git] / bundles / org.simantics.databoard / src / org / simantics / databoard / binding / impl / TreeSetBinding.java
1 /*******************************************************************************
2  *  Copyright (c) 2010 Association for Decentralized Information Management in
3  *  Industry THTH ry.
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
8  *
9  *  Contributors:
10  *      VTT Technical Research Centre of Finland - initial API and implementation
11  *******************************************************************************/
12 package org.simantics.databoard.binding.impl;
13
14 import java.util.List;
15 import java.util.Map;
16 import java.util.Set;
17 import java.util.TreeSet;
18
19 import org.simantics.databoard.binding.ArrayBinding;
20 import org.simantics.databoard.binding.Binding;
21 import org.simantics.databoard.binding.MapBinding;
22 import org.simantics.databoard.binding.error.BindingException;
23 import org.simantics.databoard.binding.reflection.VoidBinding;
24 import org.simantics.databoard.type.MapType;
25 import org.simantics.databoard.type.RecordType;
26
27 /**
28  * Binds java.util.TreeSet to Map(T, {})
29  *
30  * @author Toni Kalajainen <toni.kalajainen@vtt.fi>
31  */
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             if (initialSet instanceof TreeSet && ((TreeSet<?>) initialSet).comparator() == getKeyBinding())
68                 return initialSet;
69             
70                 TreeSet<Object> result = new TreeSet<Object>(getKeyBinding());
71                 result.addAll(initialSet);
72                 return result;
73         }
74
75         @Override
76         public Object create(Map<?, ?> initialMap) throws BindingException {
77                 TreeSet<Object> result = new TreeSet<Object>( getKeyBinding() );
78                 result.addAll(initialMap.keySet());
79                 return result;
80         }
81
82         @Override
83         public Object create(Object[] keys, Object[] values)
84         throws BindingException {               
85                 TreeSet<Object> result = new TreeSet<Object>( getKeyBinding() );
86                 for (int i=0; i<keys.length; i++) {
87                         result.add( keys[i] );
88                 }
89                 return result;
90         }
91         
92         @Override
93         public Object create(List<Object> keys, List<Object> values) {
94                 TreeSet<Object> result = new TreeSet<Object>( getKeyBinding() );
95                 for (int i=0; i<keys.size(); i++)
96                         result.add(keys.get(i));
97                 return result;
98         }       
99
100         @Override
101         public Object get(Object set, Object key) throws BindingException {
102                 return null;
103         }
104         
105     @Override
106     public <K, V> void getAll(Object setFrom, Map<K, V> to) throws BindingException {
107                 Map<K, V> _to = (Map<K, V>) to;
108                 TreeSet<K> _setFrom = (TreeSet<K>) setFrom;
109                 for (K k : _setFrom)
110                         _to.put(k, null);
111         }
112
113         @Override
114         public void getAll(Object setFrom, Object[] keys, Object[] values)
115                         throws BindingException {
116                 TreeSet<Object> _setFrom = (TreeSet<Object>) setFrom;
117                 int i=0;
118                 for (Object k : _setFrom) {
119                         keys[i] = k;
120                         values[i] = null;
121                         i++;
122                 }
123         }
124
125         @Override
126         public Object[] getKeys(Object set) throws BindingException {
127                 TreeSet<Object> _set = (TreeSet<Object>) set;
128                 return _set.toArray(new Object[_set.size()]);
129         }
130
131         @Override
132         public void getKeys(Object set, Set<Object> keys) throws BindingException {
133                 TreeSet<Object> s = (TreeSet<Object>) set;
134                 keys.addAll(s);
135         }
136         
137         @Override
138         public Object[] getValues(Object set) throws BindingException {
139                 TreeSet<Object> _set = (TreeSet<Object>) set;
140                 return new Object[_set.size()];
141         }
142         
143         @Override
144         public int count(Object src, Object from, boolean fromInclusive, Object end, boolean endInclusive) throws BindingException {
145                 TreeSet<Object> m = (TreeSet<Object>) src;              
146                 Set<Object> sm = m.subSet(from, fromInclusive, end, endInclusive);
147                 return sm.size();
148         }
149         
150         @Override
151         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 {
152                 return 0;
153         }
154
155         @Override
156         public void put(Object set, Object key, Object value)
157                         throws BindingException {
158                 TreeSet<Object> _set = (TreeSet<Object>) set;
159                 if (value!=null) throw new BindingException("Cannot put non-null to a Set");
160                 _set.add(key);
161         }
162
163         public void putAll(Object setTo, Set<?> from) {
164                 TreeSet<Object> _set = (TreeSet<Object>) setTo;
165                 _set.addAll(from);
166         }
167         
168         @Override
169         public <K,V> void putAll(Object setTo, Map<K,V> from) throws BindingException {
170                 TreeSet<Object> _set = (TreeSet<Object>) setTo;
171                 _set.addAll(from.keySet());
172         }
173
174         @Override
175         public Object remove(Object set, Object key) throws BindingException {
176                 TreeSet<Object> _set = (TreeSet<Object>) set;
177                 _set.remove(key);
178                 return null;
179         }
180
181         @Override
182         public int size(Object set) throws BindingException {
183                 TreeSet<Object> _set = (TreeSet<Object>) set;
184                 return _set.size();
185         }
186
187         @Override
188         public boolean isInstance(Object obj) {
189                 return obj instanceof TreeSet;
190         }
191
192         @Override
193         public Object getCeilingKey(Object set, Object key) {
194                 TreeSet<Object> _set = (TreeSet<Object>) set;
195                 return _set.ceiling(key);
196         }
197
198         @Override
199         public Object getFirstKey(Object set) {
200                 TreeSet<Object> _set = (TreeSet<Object>) set;
201                 return _set.first();
202         }
203
204         @Override
205         public Object getFloorKey(Object set, Object key) {
206                 TreeSet<Object> _set = (TreeSet<Object>) set;
207                 return _set.floor(key);
208         }
209
210         @Override
211         public Object getHigherKey(Object set, Object key) {
212                 TreeSet<Object> _set = (TreeSet<Object>) set;
213                 return _set.higher(key);
214         }
215
216         @Override
217         public Object getLastKey(Object set) {
218                 TreeSet<Object> _set = (TreeSet<Object>) set;
219                 return _set.last();
220         }
221
222         @Override
223         public Object getLowerKey(Object set, Object key) {
224                 TreeSet<Object> _set = (TreeSet<Object>) set;
225                 return _set.lower(key);
226         }
227         
228
229 }
230