X-Git-Url: https://gerrit.simantics.org/r/gitweb?p=simantics%2Fplatform.git;a=blobdiff_plain;f=bundles%2Forg.simantics.document.server%2Fsrc%2Forg%2Fsimantics%2Fdocument%2Fserver%2Frequest%2FServerSCLHandlerValueRequest.java;h=ca82be6c94ee53d624fdcb539573186602cb962e;hp=ab72524b3f6260b75686d3538a8bafc1b2dab491;hb=bf75fd9740858140eac90c18f0bca0aea3893248;hpb=21f879fcd72d7749836fb64375094ef29573fe8c diff --git a/bundles/org.simantics.document.server/src/org/simantics/document/server/request/ServerSCLHandlerValueRequest.java b/bundles/org.simantics.document.server/src/org/simantics/document/server/request/ServerSCLHandlerValueRequest.java index ab72524b3..ca82be6c9 100644 --- a/bundles/org.simantics.document.server/src/org/simantics/document/server/request/ServerSCLHandlerValueRequest.java +++ b/bundles/org.simantics.document.server/src/org/simantics/document/server/request/ServerSCLHandlerValueRequest.java @@ -1,5 +1,6 @@ package org.simantics.document.server.request; +import java.util.HashMap; import java.util.List; import java.util.Map; @@ -8,16 +9,21 @@ import org.simantics.db.ReadGraph; import org.simantics.db.Resource; import org.simantics.db.common.procedure.adapter.TransientCacheListener; import org.simantics.db.common.request.IndexRoot; -import org.simantics.db.common.request.UnaryRead; import org.simantics.db.exception.DatabaseException; +import org.simantics.db.layer0.request.VariableRead; import org.simantics.db.layer0.scl.AbstractExpressionCompilationContext; import org.simantics.db.layer0.scl.AbstractExpressionCompilationRequest; import org.simantics.db.layer0.util.RuntimeEnvironmentRequest; import org.simantics.db.layer0.variable.Variable; +import org.simantics.document.server.Functions; +import org.simantics.document.server.bean.DataDefinition; import org.simantics.document.server.request.ServerSCLHandlerValueRequest.CompilationContext; import org.simantics.layer0.Layer0; +import org.simantics.scl.compiler.constants.StringConstant; import org.simantics.scl.compiler.elaboration.expressions.EApply; import org.simantics.scl.compiler.elaboration.expressions.EConstant; +import org.simantics.scl.compiler.elaboration.expressions.ELiteral; +import org.simantics.scl.compiler.elaboration.expressions.EVar; import org.simantics.scl.compiler.elaboration.expressions.EVariable; import org.simantics.scl.compiler.elaboration.expressions.Expression; import org.simantics.scl.compiler.elaboration.modules.SCLValue; @@ -37,6 +43,7 @@ import org.simantics.utils.datastructures.Pair; public class ServerSCLHandlerValueRequest extends AbstractExpressionCompilationRequest { + private final Variable context; private final Pair componentTypeAndRoot; private final Resource literal; @@ -50,14 +57,15 @@ public class ServerSCLHandlerValueRequest extends AbstractExpressionCompilationR } } - private ServerSCLHandlerValueRequest(Pair componentTypeAndRoot, Resource literal) { + private ServerSCLHandlerValueRequest(Variable context, Pair componentTypeAndRoot, Resource literal) { assert(literal != null); + this.context = context; this.literal = literal; this.componentTypeAndRoot = componentTypeAndRoot; } public ServerSCLHandlerValueRequest(ReadGraph graph, Variable context) throws DatabaseException { - this(getComponentTypeAndRoot(graph, context), context.getRepresents(graph)); + this(context, getComponentTypeAndRoot(graph, context), context.getRepresents(graph)); } private static Pair getComponentTypeAndRoot(ReadGraph graph, Variable property) throws DatabaseException { @@ -122,19 +130,31 @@ public class ServerSCLHandlerValueRequest extends AbstractExpressionCompilationR } @Override - protected CompilationContext getCompilationContext(ReadGraph graph) - throws DatabaseException { - return graph.syncRequest(new UnaryRead,CompilationContext>(componentTypeAndRoot) { + protected CompilationContext getCompilationContext(ReadGraph graph) throws DatabaseException { + + return graph.syncRequest(new VariableRead(context) { + @Override - public CompilationContext perform(ReadGraph graph) - throws DatabaseException { + public CompilationContext perform(ReadGraph graph) throws DatabaseException { + + Pair parameter = getComponentTypeAndRoot(graph, variable); RuntimeEnvironment runtimeEnvironment = graph.syncRequest(getRuntimeEnvironmentRequest(parameter.second)); + Map propertyMap = graph.syncRequest(new ReadComponentTypeInterfaceRequest(parameter.first, runtimeEnvironment.getEnvironment()), TransientCacheListener.>instance()); + +// Map result = new HashMap(propertyMap); +// for(DataDefinition dd : Functions.dataDefinitions(graph, variable)) { +// result.put(dd.target, null); +// } + return new CompilationContext(runtimeEnvironment, propertyMap); + } + }); + } @Override @@ -158,7 +178,6 @@ public class ServerSCLHandlerValueRequest extends AbstractExpressionCompilationR return getPropertyFlexible(environment, accessInputVariable(environment, contextVariable), name, type); } - @Override protected Expression getVariableAccessExpression( ReadGraph graph, @@ -172,8 +191,26 @@ public class ServerSCLHandlerValueRequest extends AbstractExpressionCompilationR contextVariable, name, property.type == null ? Types.metaVar(Kinds.STAR) : property.type); - else + else { + +// if(context.propertyMap.containsKey(name)) { +// +// org.simantics.scl.compiler.elaboration.expressions.Variable parametersVariable = new org.simantics.scl.compiler.elaboration.expressions.Variable("context", COMMAND_CONTEXT); +// +// Environment environment = context.runtimeEnvironment.getEnvironment(); +// +//// return new EApply( +//// new EConstant(environment.getValue(FROM_DYNAMIC), Types.STRING), +// return new EApply( +// new EConstant(environment.getValue(CONTEXT_VARIABLE), Types.DYNAMIC), +// new EVariable(parametersVariable), +// new ELiteral(new StringConstant(name))); +// +// } + return getSpecialVariableAccessExpression(graph, context, contextVariable, name); + + } } protected Expression getSpecialVariableAccessExpression(ReadGraph graph, @@ -191,16 +228,42 @@ public class ServerSCLHandlerValueRequest extends AbstractExpressionCompilationR @Override public int hashCode() { - return 31*(31*getClass().hashCode() + literal.hashCode()) + componentTypeAndRoot.hashCode(); + final int prime = 31; + int result = 1; + result = prime * result + ((context == null) ? 0 : context.hashCode()); + return result; } @Override public boolean equals(Object obj) { - if(this == obj) + if (this == obj) return true; - if(obj == null || obj.getClass() != getClass()) + if (obj == null) + return false; + if (getClass() != obj.getClass()) return false; - ServerSCLHandlerValueRequest other = (ServerSCLHandlerValueRequest)obj; - return literal.equals(other.literal) && componentTypeAndRoot.equals(other.componentTypeAndRoot); + ServerSCLHandlerValueRequest other = (ServerSCLHandlerValueRequest) obj; + if (context == null) { + if (other.context != null) + return false; + } else if (!context.equals(other.context)) + return false; + return true; } + +// @Override +// public int hashCode() { +// return 31*(31*getClass().hashCode() + literal.hashCode()) + componentTypeAndRoot.hashCode(); +// } +// +// @Override +// public boolean equals(Object obj) { +// if(this == obj) +// return true; +// if(obj == null || obj.getClass() != getClass()) +// return false; +// ServerSCLHandlerValueRequest other = (ServerSCLHandlerValueRequest)obj; +// return literal.equals(other.literal) && componentTypeAndRoot.equals(other.componentTypeAndRoot); +// } + }