X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=bundles%2Forg.simantics.modeling%2Fsrc%2Forg%2Fsimantics%2Fmodeling%2FProceduralSubstructureMapRequest.java;fp=bundles%2Forg.simantics.modeling%2Fsrc%2Forg%2Fsimantics%2Fmodeling%2FProceduralSubstructureMapRequest.java;h=4a87bc29f221cda8cfac71afa223c15f53654382;hb=969bd23cab98a79ca9101af33334000879fb60c5;hp=0000000000000000000000000000000000000000;hpb=866dba5cd5a3929bbeae85991796acb212338a08;p=simantics%2Fplatform.git diff --git a/bundles/org.simantics.modeling/src/org/simantics/modeling/ProceduralSubstructureMapRequest.java b/bundles/org.simantics.modeling/src/org/simantics/modeling/ProceduralSubstructureMapRequest.java new file mode 100644 index 000000000..4a87bc29f --- /dev/null +++ b/bundles/org.simantics.modeling/src/org/simantics/modeling/ProceduralSubstructureMapRequest.java @@ -0,0 +1,40 @@ +package org.simantics.modeling; + +import gnu.trove.map.hash.THashMap; + +import org.simantics.db.ReadGraph; +import org.simantics.db.exception.DatabaseException; +import org.simantics.db.layer0.request.PropertyInfo; +import org.simantics.db.layer0.request.PropertyInfoRequest; +import org.simantics.db.layer0.request.VariableRead; +import org.simantics.db.layer0.variable.Variable; +import org.simantics.scl.compiler.types.Type; +import org.simantics.utils.datastructures.Pair; + +public class ProceduralSubstructureMapRequest extends VariableRead>>{ + + public ProceduralSubstructureMapRequest(Variable composite) { + super(composite); + } + + @Override + public THashMap> perform(ReadGraph graph) throws DatabaseException { + THashMap> propertyMap = new THashMap>(); + for(Variable child : variable.getChildren(graph)) { + for(Variable property : child.getProperties(graph)) { + PropertyInfo propertyInfo = graph.syncRequest(new PropertyInfoRequest(property.getPredicateResource(graph))); + propertyMap.put(child.getName(graph) + "." + propertyInfo.name, + Pair.make("/" + child.getName(graph) + "#" + propertyInfo.name, + SCLTypeUtils.getType(propertyInfo))); + } + } + for(Variable property : variable.getProperties(graph)) { + PropertyInfo propertyInfo = graph.syncRequest(new PropertyInfoRequest(property.getPredicateResource(graph))); + propertyMap.put(propertyInfo.name, + Pair.make("#" + propertyInfo.name, + SCLTypeUtils.getType(propertyInfo))); + } + return propertyMap; + } + +}