1 package org.simantics.graph.compiler.internal.procedures;
\r
3 import gnu.trove.list.array.TIntArrayList;
\r
4 import gnu.trove.map.hash.TIntObjectHashMap;
\r
6 import java.util.Collection;
\r
8 import org.simantics.databoard.Bindings;
\r
9 import org.simantics.databoard.binding.Binding;
\r
10 import org.simantics.databoard.type.Datatype;
\r
11 import org.simantics.graph.compiler.internal.store.PreValueStore;
\r
12 import org.simantics.graph.query.IDataTypeQuery;
\r
13 import org.simantics.graph.query.IGraph;
\r
14 import org.simantics.graph.query.Paths;
\r
15 import org.simantics.graph.store.GraphStore;
\r
16 import org.simantics.graph.store.StatementStore;
\r
17 import org.simantics.graph.store.ValueStore;
\r
18 import org.simantics.ltk.Problem;
\r
20 public class ConvertPreValues implements Runnable {
\r
24 Collection<Problem> problems;
\r
26 public ConvertPreValues(IGraph cg, GraphStore store,
\r
27 Collection<Problem> problems) {
\r
30 this.problems = problems;
\r
35 PreValueStore preValues = store.getStore(PreValueStore.class);
\r
36 preValues.convertPreValues(store.values, new IDataTypeQuery() {
\r
38 Paths paths = cg.getPaths();
\r
39 StatementStore statements = store.statements;
\r
40 ValueStore values = store.values;
\r
41 int HasDatatype = store.identities.createPathToId(paths.HasDatatype);
\r
42 int InstanceOf = store.identities.createPathToId(paths.InstanceOf);
\r
45 public Binding getDataType(int id) {
\r
46 TIntArrayList objects = statements.getObjects(id, HasDatatype);
\r
47 if(objects.isEmpty()) {
\r
48 objects = statements.getObjects(id, InstanceOf);
\r
49 for(int i=0;i<objects.size();++i) {
\r
50 int type = objects.getQuick(i);
\r
51 Binding binding = getDatatypeForType(type);
\r
58 Datatype dt = values.getDatatypeValue(objects.getQuick(0));
\r
62 return Bindings.getBinding(dt);
\r
66 TIntObjectHashMap<Binding> typeBindingCache = new TIntObjectHashMap<Binding>();
\r
67 private Binding getDatatypeForType(int type) {
\r
68 if(typeBindingCache.containsKey(type))
\r
69 return typeBindingCache.get(type);
\r
71 Datatype dt = cg.getAssertedDatatype(store.idToRes(type));
\r
72 Binding binding = dt == null ? null : Bindings.getBinding(dt);
\r
73 typeBindingCache.put(type, binding);
\r