X-Git-Url: https://gerrit.simantics.org/r/gitweb?p=simantics%2Fplatform.git;a=blobdiff_plain;f=bundles%2Forg.simantics.structural2%2Fsrc%2Forg%2Fsimantics%2Fstructural2%2Fvariables%2FStandardProdeduralPropertyVariable.java;fp=bundles%2Forg.simantics.structural2%2Fsrc%2Forg%2Fsimantics%2Fstructural2%2Fvariables%2FStandardProdeduralPropertyVariable.java;h=a277f51428843a77bd97075c2e9f66e026b8753c;hp=0000000000000000000000000000000000000000;hb=c433e87787fb162d3f5d966678aaedf491266080;hpb=09d124e089c1b352cf1d9f723fd0f465fb12a31f diff --git a/bundles/org.simantics.structural2/src/org/simantics/structural2/variables/StandardProdeduralPropertyVariable.java b/bundles/org.simantics.structural2/src/org/simantics/structural2/variables/StandardProdeduralPropertyVariable.java new file mode 100644 index 000000000..a277f5142 --- /dev/null +++ b/bundles/org.simantics.structural2/src/org/simantics/structural2/variables/StandardProdeduralPropertyVariable.java @@ -0,0 +1,71 @@ +package org.simantics.structural2.variables; + +import org.simantics.databoard.Bindings; +import org.simantics.databoard.adapter.AdaptException; +import org.simantics.databoard.binding.Binding; +import org.simantics.databoard.type.Datatype; +import org.simantics.db.ReadGraph; +import org.simantics.db.WriteGraph; +import org.simantics.db.exception.DatabaseException; +import org.simantics.db.layer0.variable.StandardAssertedGraphPropertyVariable; +import org.simantics.db.layer0.variable.ValueAccessor; +import org.simantics.db.layer0.variable.Variable; + +public class StandardProdeduralPropertyVariable extends StandardAssertedGraphPropertyVariable { + + private Object defaultValue; + + public StandardProdeduralPropertyVariable(ReadGraph graph, + StandardProceduralChildVariable parent, + StandardAssertedGraphPropertyVariable assertedVariable, Object value) throws DatabaseException { + super(graph, parent, assertedVariable.node, assertedVariable.parentResource, assertedVariable.property.predicate, assertedVariable.object); + + this.defaultValue = value; + } + + @Override + protected ValueAccessor getValueAccessor(ReadGraph graph) throws DatabaseException { + final ValueAccessor valueAccessor = super.getValueAccessor(graph); + return new ValueAccessor() { + @Override + public void setValue(WriteGraph graph, Variable context, Object value, Binding binding) throws DatabaseException { + valueAccessor.setValue(graph, context, value, binding); + } + + @Override + public void setValue(WriteGraph graph, Variable context, Object value) throws DatabaseException { + valueAccessor.setValue(graph, context, value); + } + + @Override + public Object getValue(ReadGraph graph, Variable context, Binding binding) throws DatabaseException { + if (node != null) { + return valueAccessor.getValue(graph, context, binding); + } else { + if (binding.isInstance(defaultValue)) + return defaultValue; + else + try { + return Bindings.adapt(defaultValue, Bindings.OBJECT, binding); + } catch (AdaptException e) { + throw new DatabaseException("Failed to adapt object " + defaultValue + " to " + binding); + } + } + } + + @Override + public Object getValue(ReadGraph graph, Variable context) throws DatabaseException { + if (node != null) { + return valueAccessor.getValue(graph, context); + } else { + return defaultValue; + } + } + + @Override + public Datatype getDatatype(ReadGraph graph, Variable context) throws DatabaseException { + return valueAccessor.getDatatype(graph, context); + } + }; + } +}