-package org.simantics.graph.store;\r
-\r
-import gnu.trove.map.hash.TIntIntHashMap;\r
-import gnu.trove.map.hash.TIntObjectHashMap;\r
-import gnu.trove.procedure.TIntObjectProcedure;\r
-import gnu.trove.procedure.TIntProcedure;\r
-import gnu.trove.set.hash.TIntHashSet;\r
-\r
-import java.util.ArrayList;\r
-\r
-import org.simantics.databoard.Bindings;\r
-import org.simantics.databoard.adapter.AdaptException;\r
-import org.simantics.databoard.binding.Binding;\r
-import org.simantics.databoard.binding.mutable.Variant;\r
-import org.simantics.databoard.serialization.Serializer;\r
-import org.simantics.databoard.type.Datatype;\r
-import org.simantics.graph.representation.Value;\r
-\r
-public class ValueStore implements IStore {\r
- \r
- public static Binding DatatypeBinding =\r
- Bindings.getBindingUnchecked(Datatype.class);\r
- public static Serializer DatatypeSerializer =\r
- Bindings.getSerializerUnchecked(DatatypeBinding);\r
- \r
- TIntObjectHashMap<Variant> byteValues = new TIntObjectHashMap<Variant>();\r
- TIntObjectHashMap<Datatype> datatypeValues = new TIntObjectHashMap<Datatype>();\r
- TIntHashSet collisions = new TIntHashSet();\r
- \r
- public void map(final TIntIntHashMap map) {\r
- collisions = IndexMappingUtils.map(map, collisions);\r
- byteValues = IndexMappingUtils.map(map, byteValues, collisions);\r
- datatypeValues = IndexMappingUtils.map(map, datatypeValues, collisions);\r
- }\r
- \r
- public void setValue(int id, Variant value) {\r
- if(byteValues.put(id, value) != null)\r
- collisions.add(id);\r
- }\r
- \r
- public void setValue(int id, Datatype value) {\r
- datatypeValues.put(id, value);\r
- }\r
-\r
- public Variant getByteValue(int id) {\r
- return byteValues.get(id);\r
- }\r
- \r
- private static final Binding DATATYPE_BINDING = \r
- Bindings.getBindingUnchecked(Datatype.class);\r
- \r
- public Datatype getDatatypeValue(int id) {\r
- Datatype datatype = datatypeValues.get(id);\r
- if(datatype == null) {\r
- Variant bytes = byteValues.get(id);\r
- if(bytes != null)\r
- try {\r
- return (Datatype)bytes.getValue(DATATYPE_BINDING);\r
- } catch (AdaptException e) {\r
- throw new RuntimeException(e);\r
- }\r
- }\r
- return datatype;\r
- }\r
-\r
- public Value[] toArray() {\r
- final ArrayList<Value> values = new ArrayList<Value>();\r
- byteValues.forEachEntry(new TIntObjectProcedure<Variant>() {\r
- @Override\r
- public boolean execute(int a, Variant b) {\r
- values.add(new Value(a, b));\r
- return true;\r
- }\r
- });\r
- datatypeValues.forEachEntry(new TIntObjectProcedure<Datatype>() {\r
- Binding datatypeBinding = Bindings.getBindingUnchecked(Datatype.class);\r
- @Override\r
- public boolean execute(int a, Datatype b) {\r
- if(!byteValues.containsKey(a))\r
- try {\r
- if(b == null)\r
- System.out.println("Resource " + a + " has null Datatype value.");\r
- else\r
- values.add(new Value(a, new Variant(datatypeBinding, b)));\r
- } catch (Exception e) {\r
- throw new RuntimeException(e);\r
- }\r
- return true;\r
- }\r
- });\r
- return values.toArray(new Value[values.size()]);\r
- }\r
- \r
- public void collectReferences(final boolean[] set) {\r
- TIntProcedure proc = new TIntProcedure() { \r
- @Override\r
- public boolean execute(int value) {\r
- set[value] = true;\r
- return true;\r
- }\r
- };\r
- \r
- byteValues.forEach(proc);\r
- datatypeValues.forEach(proc);\r
- }\r
- \r
- public TIntHashSet getCollisions() {\r
- datatypeValues.forEachKey(new TIntProcedure() {\r
- @Override\r
- public boolean execute(int value) {\r
- if(byteValues.containsKey(value))\r
- collisions.add(value);\r
- return true;\r
- }\r
- });\r
- return collisions;\r
- }\r
-}\r
+package org.simantics.graph.store;
+
+import gnu.trove.map.hash.TIntIntHashMap;
+import gnu.trove.map.hash.TIntObjectHashMap;
+import gnu.trove.procedure.TIntObjectProcedure;
+import gnu.trove.procedure.TIntProcedure;
+import gnu.trove.set.hash.TIntHashSet;
+
+import java.util.ArrayList;
+
+import org.simantics.databoard.Bindings;
+import org.simantics.databoard.adapter.AdaptException;
+import org.simantics.databoard.binding.Binding;
+import org.simantics.databoard.binding.mutable.Variant;
+import org.simantics.databoard.serialization.Serializer;
+import org.simantics.databoard.type.Datatype;
+import org.simantics.graph.representation.Value;
+
+public class ValueStore implements IStore {
+
+ public static Binding DatatypeBinding =
+ Bindings.getBindingUnchecked(Datatype.class);
+ public static Serializer DatatypeSerializer =
+ Bindings.getSerializerUnchecked(DatatypeBinding);
+
+ TIntObjectHashMap<Variant> byteValues = new TIntObjectHashMap<Variant>();
+ TIntObjectHashMap<Datatype> datatypeValues = new TIntObjectHashMap<Datatype>();
+ TIntHashSet collisions = new TIntHashSet();
+
+ public void map(final TIntIntHashMap map) {
+ collisions = IndexMappingUtils.map(map, collisions);
+ byteValues = IndexMappingUtils.map(map, byteValues, collisions);
+ datatypeValues = IndexMappingUtils.map(map, datatypeValues, collisions);
+ }
+
+ public void setValue(int id, Variant value) {
+ if(byteValues.put(id, value) != null)
+ collisions.add(id);
+ }
+
+ public void setValue(int id, Datatype value) {
+ datatypeValues.put(id, value);
+ }
+
+ public Variant getByteValue(int id) {
+ return byteValues.get(id);
+ }
+
+ private static final Binding DATATYPE_BINDING =
+ Bindings.getBindingUnchecked(Datatype.class);
+
+ public Datatype getDatatypeValue(int id) {
+ Datatype datatype = datatypeValues.get(id);
+ if(datatype == null) {
+ Variant bytes = byteValues.get(id);
+ if(bytes != null)
+ try {
+ return (Datatype)bytes.getValue(DATATYPE_BINDING);
+ } catch (AdaptException e) {
+ throw new RuntimeException(e);
+ }
+ }
+ return datatype;
+ }
+
+ public Value[] toArray() {
+ final ArrayList<Value> values = new ArrayList<Value>();
+ byteValues.forEachEntry(new TIntObjectProcedure<Variant>() {
+ @Override
+ public boolean execute(int a, Variant b) {
+ values.add(new Value(a, b));
+ return true;
+ }
+ });
+ datatypeValues.forEachEntry(new TIntObjectProcedure<Datatype>() {
+ Binding datatypeBinding = Bindings.getBindingUnchecked(Datatype.class);
+ @Override
+ public boolean execute(int a, Datatype b) {
+ if(!byteValues.containsKey(a))
+ try {
+ if(b == null)
+ System.out.println("Resource " + a + " has null Datatype value.");
+ else
+ values.add(new Value(a, new Variant(datatypeBinding, b)));
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ return true;
+ }
+ });
+ return values.toArray(new Value[values.size()]);
+ }
+
+ public void collectReferences(final boolean[] set) {
+ TIntProcedure proc = new TIntProcedure() {
+ @Override
+ public boolean execute(int value) {
+ set[value] = true;
+ return true;
+ }
+ };
+
+ byteValues.forEach(proc);
+ datatypeValues.forEach(proc);
+ }
+
+ public TIntHashSet getCollisions() {
+ datatypeValues.forEachKey(new TIntProcedure() {
+ @Override
+ public boolean execute(int value) {
+ if(byteValues.containsKey(value))
+ collisions.add(value);
+ return true;
+ }
+ });
+ return collisions;
+ }
+}