package org.simantics.document.server.request;\r
\r
+import java.util.HashMap;\r
import java.util.List;\r
import java.util.Map;\r
\r
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
\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
}\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
}\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
return getPropertyFlexible(environment, accessInputVariable(environment, contextVariable), name, type);\r
}\r
\r
-\r
@Override\r
protected Expression getVariableAccessExpression(\r
ReadGraph graph,\r
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
\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