X-Git-Url: https://gerrit.simantics.org/r/gitweb?p=simantics%2Fplatform.git;a=blobdiff_plain;f=bundles%2Forg.simantics.graph.compiler%2Fsrc%2Forg%2Fsimantics%2Fgraph%2Fcompiler%2Finternal%2Fprocedures%2FConvertPreValues.java;fp=bundles%2Forg.simantics.graph.compiler%2Fsrc%2Forg%2Fsimantics%2Fgraph%2Fcompiler%2Finternal%2Fprocedures%2FConvertPreValues.java;h=ca1588ff079993835939446c3f7ba50ef1f729d9;hp=0000000000000000000000000000000000000000;hb=969bd23cab98a79ca9101af33334000879fb60c5;hpb=866dba5cd5a3929bbeae85991796acb212338a08 diff --git a/bundles/org.simantics.graph.compiler/src/org/simantics/graph/compiler/internal/procedures/ConvertPreValues.java b/bundles/org.simantics.graph.compiler/src/org/simantics/graph/compiler/internal/procedures/ConvertPreValues.java new file mode 100644 index 000000000..ca1588ff0 --- /dev/null +++ b/bundles/org.simantics.graph.compiler/src/org/simantics/graph/compiler/internal/procedures/ConvertPreValues.java @@ -0,0 +1,80 @@ +package org.simantics.graph.compiler.internal.procedures; + +import gnu.trove.list.array.TIntArrayList; +import gnu.trove.map.hash.TIntObjectHashMap; + +import java.util.Collection; + +import org.simantics.databoard.Bindings; +import org.simantics.databoard.binding.Binding; +import org.simantics.databoard.type.Datatype; +import org.simantics.graph.compiler.internal.store.PreValueStore; +import org.simantics.graph.query.IDataTypeQuery; +import org.simantics.graph.query.IGraph; +import org.simantics.graph.query.Paths; +import org.simantics.graph.store.GraphStore; +import org.simantics.graph.store.StatementStore; +import org.simantics.graph.store.ValueStore; +import org.simantics.ltk.Problem; + +public class ConvertPreValues implements Runnable { + + IGraph cg; + GraphStore store; + Collection problems; + + public ConvertPreValues(IGraph cg, GraphStore store, + Collection problems) { + this.cg = cg; + this.store = store; + this.problems = problems; + } + + @Override + public void run() { + PreValueStore preValues = store.getStore(PreValueStore.class); + preValues.convertPreValues(store.values, new IDataTypeQuery() { + + Paths paths = cg.getPaths(); + StatementStore statements = store.statements; + ValueStore values = store.values; + int HasDatatype = store.identities.createPathToId(paths.HasDatatype); + int InstanceOf = store.identities.createPathToId(paths.InstanceOf); + + @Override + public Binding getDataType(int id) { + TIntArrayList objects = statements.getObjects(id, HasDatatype); + if(objects.isEmpty()) { + objects = statements.getObjects(id, InstanceOf); + for(int i=0;i typeBindingCache = new TIntObjectHashMap(); + private Binding getDatatypeForType(int type) { + if(typeBindingCache.containsKey(type)) + return typeBindingCache.get(type); + else { + Datatype dt = cg.getAssertedDatatype(store.idToRes(type)); + Binding binding = dt == null ? null : Bindings.getBinding(dt); + typeBindingCache.put(type, binding); + return binding; + } + } + }, problems); + } + +}