]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.structural2/src/org/simantics/structural2/Functions.java
Merge "Avoid duplicate evaluation of procedural component type requests"
[simantics/platform.git] / bundles / org.simantics.structural2 / src / org / simantics / structural2 / Functions.java
index 9b5fc4586a9281d16751d002c6103e3047e78bd9..8bf4e3df68b6ac62dc30b2575ddb3eb75b1b9bf2 100644 (file)
@@ -50,6 +50,7 @@ import org.simantics.db.layer0.variable.Variable;
 import org.simantics.db.layer0.variable.VariableMap;
 import org.simantics.db.layer0.variable.VariableMapImpl;
 import org.simantics.db.layer0.variable.VariableNode;
+import org.simantics.db.layer0.variable.Variables;
 import org.simantics.db.service.CollectionSupport;
 import org.simantics.issues.common.IssueUtils;
 import org.simantics.layer0.Layer0;
@@ -332,10 +333,11 @@ public class Functions {
 
     public static List<SubstructureElement> getProceduralDesc(ReadGraph graph, final Variable context) throws DatabaseException {
         StructuralResource2 STR = StructuralResource2.getInstance(graph);
-        final Resource type = context.getPossibleType(graph);
+        Variable config = Variables.getConfigurationVariable(graph, context);
+        final Resource type = config.getPossibleType(graph);
         if(type != null) {
             if(graph.isInstanceOf(type, STR.ProceduralComponentType)) {
-                return graph.syncRequest(new SubstructureRequest(context));
+                return graph.syncRequest(new SubstructureRequest(config));
             }
         }
         return null;
@@ -562,8 +564,14 @@ public class Functions {
                        }
                        throw new DatabaseException("No type for " + variable.getURI(graph));
                } else {
-                   Resource possibleType = graph.getPossibleType(represents, Layer0.getInstance(graph).Entity);
-                   if (graph.syncRequest(new IsInstanceOf(possibleType, StructuralResource2.getInstance(graph).ReplaceableDefinedComponentType), TransientCacheListener.instance()) ) {
+                       StructuralResource2 STR = StructuralResource2.getInstance(graph);
+                   Resource possibleType = graph.getPossibleType(represents, STR.Component);
+                   if (possibleType == null) {
+                       possibleType = graph.getPossibleType(represents, Layer0.getInstance(graph).Entity);
+                       if (possibleType == null)
+                               return null;
+                   }
+                   if (graph.syncRequest(new IsInstanceOf(possibleType, STR.ReplaceableDefinedComponentType), TransientCacheListener.instance()) ) {
                        return graph.syncRequest(new StructuralOverrideDataWalkRequest(variable, represents, possibleType), TransientCacheListener.instance());
                    } else {
                        return null;
@@ -600,8 +608,8 @@ public class Functions {
 
                @Override
                public Variable getVariable(ReadGraph graph, Variable context, String name) throws DatabaseException {
-                       
-                       Resource type = context.getPossibleType(graph);
+                       StructuralResource2 STR = StructuralResource2.getInstance(graph);
+                       Resource type = context.getPossibleType(graph, STR.Component);
                        if(type == null) return null;
                    
                        Tuple2 result = graph.syncRequest(new StructureTypeAndChildMapRequest(type), TransientCacheListener.instance());
@@ -743,7 +751,7 @@ public class Functions {
 
                for(Resource req : requiredConnections) {
                        if(!connections.contains(req)) {
-                               result.add(new StandardIssue(sr.ConnectionConstraint_ErrorIssue, component, req));
+                               result.add(new StandardIssue(sr.ConnectionValidationConstraint_ErrorIssue, component, req));
                        }
                }