]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.databoard/src/org/simantics/databoard/binding/impl/TreeSetBinding.java
Merge commit 'e87f096'
[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\r
62     public Object create() throws BindingException {\r
63         return new TreeSet<Object>( getKeyBinding() );\r
64     }\r
65 \r
66         public Object create(Set<?> initialSet) throws BindingException {\r
67             if (initialSet instanceof TreeSet && ((TreeSet<?>) initialSet).comparator() == getKeyBinding())\r
68                 return initialSet;\r
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         }\r
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                 }               
122         }
123
124         @Override
125         public Object[] getKeys(Object set) throws BindingException {
126                 TreeSet<Object> _set = (TreeSet<Object>) set;
127                 return _set.toArray(new Object[_set.size()]);
128         }
129
130         @Override
131         public void getKeys(Object set, Set<Object> keys) throws BindingException {
132                 TreeSet<Object> s = (TreeSet<Object>) set;
133                 keys.addAll(s);
134         }\r
135         \r
136         @Override\r
137         public Object[] getValues(Object set) throws BindingException {\r
138                 TreeSet<Object> _set = (TreeSet<Object>) set;\r
139                 return new Object[_set.size()];\r
140         }\r
141         \r
142         @Override\r
143         public int count(Object src, Object from, boolean fromInclusive, Object end, boolean endInclusive) throws BindingException {\r
144                 TreeSet<Object> m = (TreeSet<Object>) src;              \r
145                 Set<Object> sm = m.subSet(from, fromInclusive, end, endInclusive);\r
146                 return sm.size();\r
147         }\r
148         \r
149         @Override\r
150         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
151                 return 0;\r
152         }
153
154         @Override
155         public void put(Object set, Object key, Object value)
156                         throws BindingException {
157                 TreeSet<Object> _set = (TreeSet<Object>) set;
158                 if (value!=null) throw new BindingException("Cannot put non-null to a Set");
159                 _set.add(key);
160         }
161
162         public void putAll(Object setTo, Set<?> from) {
163                 TreeSet<Object> _set = (TreeSet<Object>) setTo;
164                 _set.addAll(from);
165         }
166         
167         @Override
168         public <K,V> void putAll(Object setTo, Map<K,V> from) throws BindingException {
169                 TreeSet<Object> _set = (TreeSet<Object>) setTo;
170                 _set.addAll(from.keySet());
171         }
172
173         @Override
174         public Object remove(Object set, Object key) throws BindingException {
175                 TreeSet<Object> _set = (TreeSet<Object>) set;
176                 _set.remove(key);
177                 return null;
178         }
179
180         @Override
181         public int size(Object set) throws BindingException {
182                 TreeSet<Object> _set = (TreeSet<Object>) set;
183                 return _set.size();
184         }
185
186         @Override
187         public boolean isInstance(Object obj) {
188                 return obj instanceof TreeSet;
189         }
190
191         @Override
192         public Object getCeilingKey(Object set, Object key) {
193                 TreeSet<Object> _set = (TreeSet<Object>) set;
194                 return _set.ceiling(key);
195         }
196
197         @Override
198         public Object getFirstKey(Object set) {
199                 TreeSet<Object> _set = (TreeSet<Object>) set;
200                 return _set.first();
201         }
202
203         @Override
204         public Object getFloorKey(Object set, Object key) {
205                 TreeSet<Object> _set = (TreeSet<Object>) set;
206                 return _set.floor(key);
207         }
208
209         @Override
210         public Object getHigherKey(Object set, Object key) {
211                 TreeSet<Object> _set = (TreeSet<Object>) set;
212                 return _set.higher(key);
213         }
214
215         @Override
216         public Object getLastKey(Object set) {
217                 TreeSet<Object> _set = (TreeSet<Object>) set;
218                 return _set.last();
219         }
220
221         @Override
222         public Object getLowerKey(Object set, Object key) {
223                 TreeSet<Object> _set = (TreeSet<Object>) set;
224                 return _set.lower(key);
225         }
226         
227
228 }
229