]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.document.server/src/org/simantics/document/server/request/ServerSCLHandlerValueRequest.java
Sync git svn branch with SVN repository r33269.
[simantics/platform.git] / bundles / org.simantics.document.server / src / org / simantics / document / server / request / ServerSCLHandlerValueRequest.java
index ab72524b3f6260b75686d3538a8bafc1b2dab491..ca82be6c94ee53d624fdcb539573186602cb962e 100644 (file)
@@ -1,5 +1,6 @@
 package org.simantics.document.server.request;\r
 \r
+import java.util.HashMap;\r
 import java.util.List;\r
 import java.util.Map;\r
 \r
@@ -8,16 +9,21 @@ import org.simantics.db.ReadGraph;
 import org.simantics.db.Resource;\r
 import org.simantics.db.common.procedure.adapter.TransientCacheListener;\r
 import org.simantics.db.common.request.IndexRoot;\r
-import org.simantics.db.common.request.UnaryRead;\r
 import org.simantics.db.exception.DatabaseException;\r
+import org.simantics.db.layer0.request.VariableRead;\r
 import org.simantics.db.layer0.scl.AbstractExpressionCompilationContext;\r
 import org.simantics.db.layer0.scl.AbstractExpressionCompilationRequest;\r
 import org.simantics.db.layer0.util.RuntimeEnvironmentRequest;\r
 import org.simantics.db.layer0.variable.Variable;\r
+import org.simantics.document.server.Functions;\r
+import org.simantics.document.server.bean.DataDefinition;\r
 import org.simantics.document.server.request.ServerSCLHandlerValueRequest.CompilationContext;\r
 import org.simantics.layer0.Layer0;\r
+import org.simantics.scl.compiler.constants.StringConstant;\r
 import org.simantics.scl.compiler.elaboration.expressions.EApply;\r
 import org.simantics.scl.compiler.elaboration.expressions.EConstant;\r
+import org.simantics.scl.compiler.elaboration.expressions.ELiteral;\r
+import org.simantics.scl.compiler.elaboration.expressions.EVar;\r
 import org.simantics.scl.compiler.elaboration.expressions.EVariable;\r
 import org.simantics.scl.compiler.elaboration.expressions.Expression;\r
 import org.simantics.scl.compiler.elaboration.modules.SCLValue;\r
@@ -37,6 +43,7 @@ import org.simantics.utils.datastructures.Pair;
 \r
 public class ServerSCLHandlerValueRequest extends AbstractExpressionCompilationRequest<CompilationContext, Variable> {\r
 \r
+       private final Variable context;\r
        private final Pair<Resource,Resource> componentTypeAndRoot;\r
        private final Resource literal;\r
 \r
@@ -50,14 +57,15 @@ public class ServerSCLHandlerValueRequest extends AbstractExpressionCompilationR
                }\r
        }\r
 \r
-       private ServerSCLHandlerValueRequest(Pair<Resource,Resource> componentTypeAndRoot, Resource literal) {\r
+       private ServerSCLHandlerValueRequest(Variable context, Pair<Resource,Resource> componentTypeAndRoot, Resource literal) {\r
                assert(literal != null);\r
+               this.context = context;\r
                this.literal = literal;\r
                this.componentTypeAndRoot = componentTypeAndRoot;\r
        }\r
 \r
        public ServerSCLHandlerValueRequest(ReadGraph graph, Variable context) throws DatabaseException {\r
-               this(getComponentTypeAndRoot(graph, context), context.getRepresents(graph));\r
+               this(context, getComponentTypeAndRoot(graph, context), context.getRepresents(graph));\r
        }\r
 \r
        private static Pair<Resource,Resource> getComponentTypeAndRoot(ReadGraph graph, Variable property)  throws DatabaseException {\r
@@ -122,19 +130,31 @@ public class ServerSCLHandlerValueRequest extends AbstractExpressionCompilationR
        }\r
 \r
        @Override\r
-       protected CompilationContext getCompilationContext(ReadGraph graph)\r
-                       throws DatabaseException {\r
-               return graph.syncRequest(new UnaryRead<Pair<Resource,Resource>,CompilationContext>(componentTypeAndRoot) {\r
+       protected CompilationContext getCompilationContext(ReadGraph graph) throws DatabaseException {\r
+               \r
+               return graph.syncRequest(new VariableRead<CompilationContext>(context) {\r
+                       \r
                        @Override\r
-                       public CompilationContext perform(ReadGraph graph)\r
-                                       throws DatabaseException {\r
+                       public CompilationContext perform(ReadGraph graph) throws DatabaseException {\r
+                               \r
+                               Pair<Resource,Resource> parameter = getComponentTypeAndRoot(graph, variable);\r
                                RuntimeEnvironment runtimeEnvironment = graph.syncRequest(getRuntimeEnvironmentRequest(parameter.second));\r
+                               \r
                                Map<String, ComponentTypeProperty> propertyMap =\r
                                                graph.syncRequest(new ReadComponentTypeInterfaceRequest(parameter.first, runtimeEnvironment.getEnvironment()),\r
                                                                TransientCacheListener.<Map<String, ComponentTypeProperty>>instance());\r
+\r
+//                             Map<String, ComponentTypeProperty> result = new HashMap<String,ComponentTypeProperty>(propertyMap); \r
+//                             for(DataDefinition dd : Functions.dataDefinitions(graph, variable)) {\r
+//                                     result.put(dd.target, null);\r
+//                             }\r
+                               \r
                                return new CompilationContext(runtimeEnvironment, propertyMap);\r
+                               \r
                        }\r
+                       \r
                });\r
+               \r
        }\r
 \r
        @Override\r
@@ -158,7 +178,6 @@ public class ServerSCLHandlerValueRequest extends AbstractExpressionCompilationR
                return getPropertyFlexible(environment, accessInputVariable(environment, contextVariable), name, type);\r
        }\r
 \r
-\r
        @Override\r
        protected Expression getVariableAccessExpression(\r
                        ReadGraph graph,\r
@@ -172,8 +191,26 @@ public class ServerSCLHandlerValueRequest extends AbstractExpressionCompilationR
                                        contextVariable,\r
                                        name,\r
                                        property.type == null ? Types.metaVar(Kinds.STAR) : property.type);\r
-               else\r
+               else {\r
+                       \r
+//                     if(context.propertyMap.containsKey(name)) {\r
+//                             \r
+//                             org.simantics.scl.compiler.elaboration.expressions.Variable parametersVariable = new org.simantics.scl.compiler.elaboration.expressions.Variable("context", COMMAND_CONTEXT);\r
+//                             \r
+//                             Environment environment = context.runtimeEnvironment.getEnvironment();\r
+//                             \r
+////                           return new EApply(\r
+////                           new EConstant(environment.getValue(FROM_DYNAMIC), Types.STRING),\r
+//                             return new EApply(\r
+//                                     new EConstant(environment.getValue(CONTEXT_VARIABLE), Types.DYNAMIC),\r
+//                                     new EVariable(parametersVariable),\r
+//                                     new ELiteral(new StringConstant(name)));\r
+//                             \r
+//                     }\r
+                       \r
                        return getSpecialVariableAccessExpression(graph, context, contextVariable, name);\r
+                       \r
+               }\r
        }\r
 \r
        protected Expression getSpecialVariableAccessExpression(ReadGraph graph,\r
@@ -191,16 +228,42 @@ public class ServerSCLHandlerValueRequest extends AbstractExpressionCompilationR
 \r
        @Override\r
        public int hashCode() {\r
-               return 31*(31*getClass().hashCode() + literal.hashCode()) + componentTypeAndRoot.hashCode();\r
+               final int prime = 31;\r
+               int result = 1;\r
+               result = prime * result + ((context == null) ? 0 : context.hashCode());\r
+               return result;\r
        }\r
 \r
        @Override\r
        public boolean equals(Object obj) {\r
-               if(this == obj)\r
+               if (this == obj)\r
                        return true;\r
-               if(obj == null || obj.getClass() != getClass())\r
+               if (obj == null)\r
+                       return false;\r
+               if (getClass() != obj.getClass())\r
                        return false;\r
-               ServerSCLHandlerValueRequest other = (ServerSCLHandlerValueRequest)obj;\r
-               return literal.equals(other.literal) && componentTypeAndRoot.equals(other.componentTypeAndRoot);\r
+               ServerSCLHandlerValueRequest other = (ServerSCLHandlerValueRequest) obj;\r
+               if (context == null) {\r
+                       if (other.context != null)\r
+                               return false;\r
+               } else if (!context.equals(other.context))\r
+                       return false;\r
+               return true;\r
        }\r
+\r
+//     @Override\r
+//     public int hashCode() {\r
+//             return 31*(31*getClass().hashCode() + literal.hashCode()) + componentTypeAndRoot.hashCode();\r
+//     }\r
+//\r
+//     @Override\r
+//     public boolean equals(Object obj) {\r
+//             if(this == obj)\r
+//                     return true;\r
+//             if(obj == null || obj.getClass() != getClass())\r
+//                     return false;\r
+//             ServerSCLHandlerValueRequest other = (ServerSCLHandlerValueRequest)obj;\r
+//             return literal.equals(other.literal) && componentTypeAndRoot.equals(other.componentTypeAndRoot);\r
+//     }\r
+       \r
 }\r