]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.databoard/src/org/simantics/databoard/binding/factory/TroveBindingsProvider.java
Merge "Remove unnecessary getComparableKey from HashMapBinding"
[simantics/platform.git] / bundles / org.simantics.databoard / src / org / simantics / databoard / binding / factory / TroveBindingsProvider.java
1 /*******************************************************************************
2  * Copyright (c) 2007, 2011 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.factory;
13
14 import gnu.trove.map.hash.THashMap;
15 import gnu.trove.set.hash.THashSet;
16
17 import java.util.List;
18 import java.util.Map;
19 import java.util.Set;
20
21 import org.simantics.databoard.Datatypes;
22 import org.simantics.databoard.binding.Binding;
23 import org.simantics.databoard.binding.error.BindingConstructionException;
24 import org.simantics.databoard.binding.error.BindingException;
25 import org.simantics.databoard.binding.impl.HashMapBinding;
26 import org.simantics.databoard.binding.impl.HashSetBinding;
27 import org.simantics.databoard.binding.reflection.BindingProvider;
28 import org.simantics.databoard.binding.reflection.BindingRequest;
29 import org.simantics.databoard.binding.reflection.ClassBindingFactory;
30 import org.simantics.databoard.type.MapType;
31
32 public class TroveBindingsProvider implements BindingProvider {
33
34         @Override
35         public Binding provideBinding(ClassBindingFactory factory, BindingRequest request)
36                         throws BindingConstructionException {
37                 
38         if ( request.getClazz().equals(THashSet.class) ) {
39             MapType type = new MapType();
40             type.valueType = Datatypes.VOID;            
41                 return new THashSetBinding(type, null);
42         }
43                 
44         if ( request.getClazz().equals(THashMap.class) ) {
45             MapType type = new MapType();
46                 return new THashMapBinding(type, null, null);
47         }
48                 
49                 return null;
50         }
51
52         static class THashMapBinding extends HashMapBinding {
53                 
54                 public THashMapBinding(Binding keyBinding, Binding valueBinding) {
55                         super(keyBinding, valueBinding);
56                 }
57
58                 public THashMapBinding(MapType mapType, Binding keyBinding,
59                                 Binding valueBinding) {
60                         super(mapType, keyBinding, valueBinding);
61                 }
62
63                 @Override
64                 public Object create() {                
65                         return new THashMap<Object, Object>();
66                 }
67                 
68                 @Override
69                 public Object create(Object[] keys, Object[] values) {
70                         if (keys.length!=values.length)
71                                 throw new IllegalArgumentException("Equal length arrays expected");
72                         
73                         int len = keys.length;
74                         THashMap<Object, Object> result = new THashMap<Object, Object>(len);
75                         
76                         for (int i=0; i<len; i++) {
77                                 Object key = keys[i];
78                                 Object value = values[i];
79                                 result.put(key, value);
80                         }
81                         
82                         return result;
83                 }
84                 
85                 @Override
86                 public Object create(List<Object> keys, List<Object> values) {
87                         if (keys.size()!=values.size())
88                                 throw new IllegalArgumentException("Equal length arrays expected");
89                         
90                         int len = keys.size();
91                         THashMap<Object, Object> result = new THashMap<Object, Object>(len);
92                         
93                         for (int i=0; i<len; i++) {
94                                 Object key = keys.get(i);
95                                 Object value = values.get(i);
96                                 result.put(key, value);
97                         }
98                         
99                         return result;
100                 }
101                 
102                 @Override
103                 public Object create(Map<?, ?> initialMap) throws BindingException {
104                     if (initialMap instanceof THashMap)
105                         return initialMap;
106                     
107                         // Replace with TreeMap. Create comparator from binding.
108                         THashMap<Object, Object> result = new THashMap<Object, Object>();
109                         putAll(result, initialMap);
110                         return result;
111                 }
112                 
113                 @Override
114                 public boolean isInstance(Object obj) {
115                         return obj instanceof THashMap;
116                 }
117                 
118         }
119         
120         static class THashSetBinding extends HashSetBinding {
121                 
122                 public THashSetBinding(Binding elementBinding) {
123                         super(elementBinding);
124                         // TODO Auto-generated constructor stub
125                 }
126
127                 public THashSetBinding(MapType mapType, Binding elementBinding) {
128                         super(mapType, elementBinding);
129                         // TODO Auto-generated constructor stub
130                 }
131
132                 @Override
133                 public Object create() throws BindingException {
134                         return new THashSet<Object>();
135                 }
136
137                 public Object create(Set<?> initialSet) throws BindingException {
138                     if (initialSet instanceof THashSet)
139                         return initialSet;
140                     
141                         return new THashSet<Object>(initialSet);
142                 }
143
144                 @SuppressWarnings({ "unchecked", "rawtypes" })
145         @Override
146                 public Object create(Map initialMap) throws BindingException {
147                         return new THashSet<Object>(initialMap.keySet());
148                 }
149
150                 @Override
151                 public Object create(Object[] keys, Object[] values)
152                 throws BindingException {               
153                         THashSet<Object> result = new THashSet<Object>(keys.length);
154                         for (int i=0; i<keys.length; i++)
155                                 result.add(keys[i]);
156                         return result;
157                 }
158                 
159                 @Override
160                 public Object create(List<Object> keys, List<Object> values) {
161                         THashSet<Object> result = new THashSet<Object>(keys.size());
162                         for (int i=0; i<keys.size(); i++)
163                                 result.add(keys.get(i));
164                         return result;
165                 }
166                 
167                 @Override
168                 public boolean isInstance(Object obj) {
169                         return obj instanceof THashSet;
170                 }               
171                 
172         }
173         
174 }