-/*******************************************************************************\r
- * Copyright (c) 2010 Association for Decentralized Information Management in\r
- * Industry THTH ry.\r
- * All rights reserved. This program and the accompanying materials\r
- * are made available under the terms of the Eclipse Public License v1.0\r
- * which accompanies this distribution, and is available at\r
- * http://www.eclipse.org/legal/epl-v10.html\r
- *\r
- * Contributors:\r
- * VTT Technical Research Centre of Finland - initial API and implementation\r
- *******************************************************************************/\r
+/*******************************************************************************
+ * Copyright (c) 2010 Association for Decentralized Information Management in
+ * Industry THTH ry.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * VTT Technical Research Centre of Finland - initial API and implementation
+ *******************************************************************************/
package org.simantics.databoard.binding.impl;
-import java.util.Arrays;\r
-import java.util.Comparator;\r
-import java.util.HashMap;\r
-import java.util.IdentityHashMap;\r
-import java.util.Iterator;\r
-import java.util.List;\r
-import java.util.Map;\r
-import java.util.Map.Entry;\r
-import java.util.Set;\r
-\r
-import org.simantics.databoard.Bindings;\r
-import org.simantics.databoard.adapter.AdaptException;\r
-import org.simantics.databoard.adapter.Adapter;\r
-import org.simantics.databoard.adapter.AdapterConstructionException;\r
-import org.simantics.databoard.binding.ArrayBinding;\r
-import org.simantics.databoard.binding.Binding;\r
-import org.simantics.databoard.binding.MapBinding;\r
-import org.simantics.databoard.binding.error.BindingException;\r
-import org.simantics.databoard.type.MapType;\r
+import java.util.Arrays;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.IdentityHashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Set;
+
+import org.simantics.databoard.Bindings;
+import org.simantics.databoard.adapter.AdaptException;
+import org.simantics.databoard.adapter.Adapter;
+import org.simantics.databoard.adapter.AdapterConstructionException;
+import org.simantics.databoard.binding.ArrayBinding;
+import org.simantics.databoard.binding.Binding;
+import org.simantics.databoard.binding.MapBinding;
+import org.simantics.databoard.binding.error.BindingException;
+import org.simantics.databoard.type.MapType;
/**
* Binds Databoard's MapType to java.util.Map and instantiates java.util.HashMap.
super(mapType, keyBinding, valueBinding);
}
- public void postConstruction() {}\r
- \r
- @Override
- public Object create() {
- return new HashMap<Object, Object>();
- }
-
+ @Override
+ public Object create() {
+ return new HashMap<Object, Object>();
+ }
+
@Override
public Object create(Object[] keys, Object[] values) {
if (keys.length!=values.length)
for (int i=0; i<len; i++) {
Object key = keys[i];
- key = getComparableKey(result, key);
Object value = values[i];
result.put(key, value);
}
for (int i=0; i<len; i++) {
Object key = keys.get(i);
- key = getComparableKey(result, key);
Object value = values.get(i);
result.put(key, value);
}
@Override
public Object create(Map<?, ?> initialMap) throws BindingException {
+ if (initialMap instanceof HashMap)
+ return initialMap;
+
// Replace with TreeMap. Create comparator from binding.
HashMap<Object, Object> result = new HashMap<Object, Object>();
putAll(result, initialMap);
public void getKeys(Object map, Set<Object> keys) throws BindingException {
Map<?, ?> m = ((Map<?, ?> )map);
keys.addAll(m.keySet());
- }\r
- \r
- @SuppressWarnings("unchecked")\r
- @Override\r
- 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
- // Assert end > from\r
- if (keyBinding.compare(from, end)>0) return 0;\r
- \r
- try {\r
- int dkc = dstKeyArrayBinding.size(dstKeyArray);\r
- int dvc = dstValueArrayBinding.size(dstValueArray);\r
- Adapter ka = Bindings.getTypeAdapter(keyBinding, dstKeyArrayBinding.getComponentBinding());\r
- Adapter va = Bindings.getTypeAdapter(valueBinding, dstValueArrayBinding.getComponentBinding());\r
- HashMap<Object, Object> m = ((HashMap<Object, Object>)src);\r
- int i = 0;\r
- for (Entry<Object, Object> e : m.entrySet()) {\r
- if (limit>=0 && i>=limit) break;\r
- Object k = e.getKey();\r
- int fk = keyBinding.compare(from, k);\r
- int ek = keyBinding.compare(k, end);\r
- boolean fromMatches = fromInclusive ? fk<=0 : fk<0;\r
- boolean endMatches = endInclusive ? ek<=0 : ek <0; \r
- if ( fromMatches && endMatches ) {\r
- Object dk = ka.adapt( e.getKey() );\r
- Object dv = va.adapt( e.getValue() );\r
- if (i<dkc) dstKeyArrayBinding.set(dstKeyArray, i, dk); else dstKeyArrayBinding.add(dstKeyArray, dk);\r
- if (i<dvc) dstValueArrayBinding.set(dstValueArray, i, dv); else dstValueArrayBinding.add(dstValueArray, dv);\r
- i++;\r
- }\r
- }\r
- return i;\r
- } catch (AdapterConstructionException e) {\r
- throw new BindingException( e );\r
- } catch (AdaptException e) {\r
- throw new BindingException( e );\r
- }\r
- }\r
- \r
- @SuppressWarnings("unchecked")\r
- @Override\r
- public int count(Object src, Object from, boolean fromInclusive,\r
- Object end, boolean endInclusive) throws BindingException {\r
- // Assert end > from\r
- if (keyBinding.compare(from, end)>0) return 0;\r
- \r
- int result = 0;\r
- HashMap<Object, Object> m = ((HashMap<Object, Object>)src);\r
- for (Object k : m.keySet()) {\r
- int fk = keyBinding.compare(from, k);\r
- int ek = keyBinding.compare(k, end);\r
- boolean fromMatches = fromInclusive ? fk<=0 : fk<0;\r
- boolean endMatches = endInclusive ? ek<=0 : ek <0; \r
- if ( fromMatches && endMatches ) result++;\r
- } \r
- return result;\r
- }\r
+ }
+
+ @SuppressWarnings("unchecked")
+ @Override
+ 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 {
+ // Assert end > from
+ if (keyBinding.compare(from, end)>0) return 0;
+
+ try {
+ int dkc = dstKeyArrayBinding.size(dstKeyArray);
+ int dvc = dstValueArrayBinding.size(dstValueArray);
+ Adapter ka = Bindings.getTypeAdapter(keyBinding, dstKeyArrayBinding.getComponentBinding());
+ Adapter va = Bindings.getTypeAdapter(valueBinding, dstValueArrayBinding.getComponentBinding());
+ HashMap<Object, Object> m = ((HashMap<Object, Object>)src);
+ int i = 0;
+ for (Entry<Object, Object> e : m.entrySet()) {
+ if (limit>=0 && i>=limit) break;
+ Object k = e.getKey();
+ int fk = keyBinding.compare(from, k);
+ int ek = keyBinding.compare(k, end);
+ boolean fromMatches = fromInclusive ? fk<=0 : fk<0;
+ boolean endMatches = endInclusive ? ek<=0 : ek <0;
+ if ( fromMatches && endMatches ) {
+ Object dk = ka.adapt( e.getKey() );
+ Object dv = va.adapt( e.getValue() );
+ if (i<dkc) dstKeyArrayBinding.set(dstKeyArray, i, dk); else dstKeyArrayBinding.add(dstKeyArray, dk);
+ if (i<dvc) dstValueArrayBinding.set(dstValueArray, i, dv); else dstValueArrayBinding.add(dstValueArray, dv);
+ i++;
+ }
+ }
+ return i;
+ } catch (AdapterConstructionException e) {
+ throw new BindingException( e );
+ } catch (AdaptException e) {
+ throw new BindingException( e );
+ }
+ }
+
+ @SuppressWarnings("unchecked")
+ @Override
+ public int count(Object src, Object from, boolean fromInclusive,
+ Object end, boolean endInclusive) throws BindingException {
+ // Assert end > from
+ if (keyBinding.compare(from, end)>0) return 0;
+
+ int result = 0;
+ HashMap<Object, Object> m = ((HashMap<Object, Object>)src);
+ for (Object k : m.keySet()) {
+ int fk = keyBinding.compare(from, k);
+ int ek = keyBinding.compare(k, end);
+ boolean fromMatches = fromInclusive ? fk<=0 : fk<0;
+ boolean endMatches = endInclusive ? ek<=0 : ek <0;
+ if ( fromMatches && endMatches ) result++;
+ }
+ return result;
+ }
@Override
public Object[] getValues(Object map) {
}
return values;
}
-
- @SuppressWarnings("unchecked")
- protected Object getComparableKey(Object map, Object key) {
- // if (keyIsComparable) return key;
-
- Map<Object, Object> m = ((Map<Object, Object>)map);
- Binding kb = getKeyBinding();
- for (Object k : m.keySet())
- {
- if (kb.equals(k, key))
- return k;
- }
- return key;
- }
@SuppressWarnings("unchecked")
@Override
public void put(Object map, Object key, Object value) {
Map<Object, Object> m = ((Map<Object, Object>)map);
- Object ck = getComparableKey(m, key);
- m.remove(ck);
m.put(key, value);
}
public <K, V> void putAll(Object map, Map<K, V> src) throws BindingException {
Map<K, V> m = ((Map<K, V> )map);
for (Entry<K, V> e : (Set<Entry<K, V> >) src.entrySet()) {
- Object ck = getComparableKey(map, e.getKey());
- m.remove(ck);
m.put(e.getKey(), e.getValue());
}
}
- @SuppressWarnings("unchecked")\r
+ @SuppressWarnings("unchecked")
@Override
public <K, V> void getAll(Object mapFrom, Map<K, V> to) {
Map<K, V> m = ((Map<K, V>)mapFrom);
@SuppressWarnings("unchecked")
@Override
public Object remove(Object map, Object key) {
- Map<Object, Object> m = ((Map<Object, Object>)map);\r
+ Map<Object, Object> m = ((Map<Object, Object>)map);
Binding kb = getKeyBinding();
for (Entry<Object, Object> e : (Set<Entry<Object, Object>>) m.entrySet())
{
return obj instanceof HashMap;
}
- @SuppressWarnings("unchecked")\r
+ @SuppressWarnings("unchecked")
@Override
public int deepHashValue(Object map, IdentityHashMap<Object, Object> hashedObjects) throws BindingException {
int result = 0;
return result;
}
- @SuppressWarnings("unchecked")\r
+ @SuppressWarnings("unchecked")
@Override
public Object getCeilingKey(Object map, Object key) {
Map<Object, Object> m = ((Map<Object, Object>)map);
return pivot;
}
- @SuppressWarnings("unchecked")\r
+ @SuppressWarnings("unchecked")
@Override
public Object getFirstKey(Object map) {
Map<Object, Object> m = (Map<Object, Object>) map;
return result;
}
- @SuppressWarnings("unchecked")\r
+ @SuppressWarnings("unchecked")
@Override
public Object getFloorKey(Object map, Object key) {
Map<Object, Object> m = ((Map<Object, Object>)map);
return pivot;
}
- @SuppressWarnings("unchecked")\r
+ @SuppressWarnings("unchecked")
@Override
public Object getHigherKey(Object map, Object key) {
Map<Object, Object> m = ((Map<Object, Object>)map);
return pivot;
}
- @SuppressWarnings("unchecked")\r
+ @SuppressWarnings("unchecked")
@Override
public Object getLastKey(Object map) {
Map<Object, Object> m = (Map<Object, Object>) map;
return result;
}
- @SuppressWarnings("unchecked")\r
+ @SuppressWarnings("unchecked")
@Override
public Object getLowerKey(Object map, Object key) {
Map<Object, Object> m = ((Map<Object, Object>)map);