From 209d3c557147c8c2c8ae4d8500d1b9a8c5c3166d Mon Sep 17 00:00:00 2001 From: Reino Ruusu Date: Mon, 16 Mar 2020 22:00:33 +0200 Subject: [PATCH] Prevent exceptions in procedural substructure requests gitlab #497 Change-Id: Iaec7ce4ac40fb07d7b91ab2d6d9f3609b10facaa --- .../ProceduralSubstructureMapRequest.java | 22 ++++++++++++++----- 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/bundles/org.simantics.modeling/src/org/simantics/modeling/ProceduralSubstructureMapRequest.java b/bundles/org.simantics.modeling/src/org/simantics/modeling/ProceduralSubstructureMapRequest.java index e8c54fa98..6256891b8 100644 --- a/bundles/org.simantics.modeling/src/org/simantics/modeling/ProceduralSubstructureMapRequest.java +++ b/bundles/org.simantics.modeling/src/org/simantics/modeling/ProceduralSubstructureMapRequest.java @@ -3,6 +3,7 @@ package org.simantics.modeling; import gnu.trove.map.hash.THashMap; import org.simantics.db.ReadGraph; +import org.simantics.db.Resource; import org.simantics.db.exception.DatabaseException; import org.simantics.db.layer0.request.PropertyInfo; import org.simantics.db.layer0.request.PropertyInfoRequest; @@ -21,19 +22,28 @@ public class ProceduralSubstructureMapRequest extends VariableRead> 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))); + for(Variable property : child.getProperties(graph)) { + Resource predicate = property.getPossiblePredicateResource(graph); + if (predicate == null) + continue; + + PropertyInfo propertyInfo = graph.syncRequest(new PropertyInfoRequest(predicate)); 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))); + for(Variable property : variable.getProperties(graph)) { + Resource predicate = property.getPossiblePredicateResource(graph); + if (predicate == null) + continue; + + PropertyInfo propertyInfo = graph.syncRequest(new PropertyInfoRequest(predicate)); propertyMap.put(propertyInfo.name, Pair.make("#" + propertyInfo.name, SCLTypeUtils.getType(propertyInfo))); - } + } + return propertyMap; } -- 2.47.1