]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.document.server/src/org/simantics/document/server/request/ServerSCLValueRequest.java
Fix errors with procedural user components for computational values
[simantics/platform.git] / bundles / org.simantics.document.server / src / org / simantics / document / server / request / ServerSCLValueRequest.java
index 09f1523a2ede4ba26ff3c4d9a52df435647d302f..7d1af5f4c1ea6d765811c036986a96a08ba2736a 100644 (file)
@@ -1,5 +1,6 @@
 package org.simantics.document.server.request;
 
+import java.util.Collections;
 import java.util.Map;
 
 import org.simantics.databoard.Bindings;
@@ -70,7 +71,7 @@ public class ServerSCLValueRequest extends AbstractExpressionCompilationRequest<
        }
 
        public ServerSCLValueRequest(ReadGraph graph, Resource s, Resource o, Resource p) throws DatabaseException {
-           this(getComponentTypeAndRoot(graph, s), o, resolveExpectedValueType(graph, p));
+           this(getComponentTypeAndRoot(graph, s, o), o, resolveExpectedValueType(graph, p));
        }
 
        private static Pair<Resource,Resource> getComponentTypeAndRoot(ReadGraph graph, Variable property)  throws DatabaseException {
@@ -88,7 +89,7 @@ public class ServerSCLValueRequest extends AbstractExpressionCompilationRequest<
                return Pair.make(parent.getType(graph), root);
        }
 
-       private static Pair<Resource,Resource> getComponentTypeAndRoot(ReadGraph graph, Resource component)  throws DatabaseException {
+       private static Pair<Resource,Resource> getComponentTypeAndRoot(ReadGraph graph, Resource component, Resource literal)  throws DatabaseException {
                if(component != null) {
                        Resource type = graph.syncRequest(new FindPossibleComponentTypeRequest(component));
                        if(type != null) {
@@ -108,8 +109,14 @@ public class ServerSCLValueRequest extends AbstractExpressionCompilationRequest<
                                        return Pair.make(null, root);
                                }
                        }
-               }
-               throw new IllegalStateException();
+        // TODO: For Antti to consider and fix later
+        // Introduced to handle procedural user components where component == null
+        } else if (literal != null) {
+            Resource root = graph.syncRequest(new IndexRoot(literal));
+            return Pair.make(null, root);
+        } else {
+            throw new DatabaseException("Couldn't resolve component type and root for component == null && literal == null");
+        }
        }
 
        public static Object compileAndEvaluate(ReadGraph graph, Variable context) throws DatabaseException {
@@ -160,9 +167,16 @@ public class ServerSCLValueRequest extends AbstractExpressionCompilationRequest<
                        public CompilationContext perform(ReadGraph graph)
                                        throws DatabaseException {
                                RuntimeEnvironment runtimeEnvironment = graph.syncRequest(getRuntimeEnvironmentRequest(parameter.first, parameter.second));
-                               Map<String, ComponentTypeProperty> propertyMap =
+                               Map<String, ComponentTypeProperty> propertyMap;
+                               if (parameter.first != null) {
+                                   propertyMap =
                                                graph.syncRequest(new ReadComponentTypeInterfaceRequest(parameter.first, runtimeEnvironment.getEnvironment()),
                                                                TransientCacheListener.<Map<String, ComponentTypeProperty>>instance());
+                               } else {
+                                   // TODO: Antti to consider
+                                   // To handle procedural user components
+                                   propertyMap = Collections.emptyMap();
+                               }
                                return new CompilationContext(runtimeEnvironment, propertyMap);
                        }
                });