-package org.simantics.modeling.ui.expression;\r
-\r
-import org.simantics.basicexpression.Expressions;\r
-import org.simantics.databoard.binding.Binding;\r
-import org.simantics.databoard.Bindings;\r
-import org.simantics.db.ReadGraph;\r
-import org.simantics.db.Resource;\r
-import org.simantics.db.WriteGraph;\r
-import org.simantics.db.exception.DatabaseException;\r
-import org.simantics.db.layer0.variable.EquationExpression;\r
-import org.simantics.db.layer0.variable.Expression;\r
-import org.simantics.db.layer0.variable.Variable;\r
-import org.simantics.utils.datastructures.Triple;\r
-\r
-public class BasicExpression implements Expression, EquationExpression {\r
-\r
- final private Resource expression;\r
- \r
- public BasicExpression(Resource expression) {\r
- this.expression = expression;\r
- }\r
- \r
- @Override\r
- public <T> T evaluate(ReadGraph graph, Variable property, Binding binding) throws DatabaseException {\r
- return evaluate(graph, property);\r
- }\r
-\r
- @SuppressWarnings("unchecked")\r
- @Override\r
- public <T> T evaluate(ReadGraph graph, Variable property) throws DatabaseException {\r
- \r
- String expressionString = graph.getValue(expression, Bindings.STRING);\r
- BasicExpressionVisitor visitor = new BasicExpressionVisitor(graph, property);\r
- Expressions.evaluate(expressionString, visitor);\r
- return (T)visitor.getResult();\r
- \r
- }\r
-\r
- @Override\r
- public <T> void invert(WriteGraph graph, Variable property, T value, Binding binding) throws DatabaseException {\r
- \r
- String expressionString = graph.getValue(expression, Bindings.STRING);\r
- InvertBasicExpressionVisitor visitor = new InvertBasicExpressionVisitor();\r
- Expressions.evaluate(expressionString, visitor);\r
- Object pair = visitor.getResult();\r
- if(pair instanceof Triple) {\r
- @SuppressWarnings("unchecked")\r
- Triple<Double, Double, String> data = (Triple<Double, Double, String>)pair;\r
- if(Math.abs(data.first) > 1e-9) {\r
- Double inverted = ((Double)value - data.second) / data.first;\r
- String target = data.third;\r
- Variable targetVariable = property.browse(graph, target);\r
-// System.out.println("invert: " + target + " = " + property.browse(graph, target).getURI(graph));\r
- targetVariable.setValue(graph, inverted, binding);\r
- }\r
- }\r
- \r
- }\r
-\r
- @Override\r
- public boolean isInvertible(ReadGraph graph, Variable property) throws DatabaseException {\r
- \r
- String expressionString = graph.getValue(expression, Bindings.STRING);\r
- InvertBasicExpressionVisitor visitor = new InvertBasicExpressionVisitor();\r
- Expressions.evaluate(expressionString, visitor);\r
- Object value = visitor.getResult();\r
- if(value instanceof Triple) return true;\r
- else return false;\r
- \r
- }\r
-\r
-}\r
+package org.simantics.modeling.ui.expression;
+
+import org.simantics.basicexpression.Expressions;
+import org.simantics.databoard.binding.Binding;
+import org.simantics.databoard.Bindings;
+import org.simantics.db.ReadGraph;
+import org.simantics.db.Resource;
+import org.simantics.db.WriteGraph;
+import org.simantics.db.exception.DatabaseException;
+import org.simantics.db.layer0.variable.EquationExpression;
+import org.simantics.db.layer0.variable.Expression;
+import org.simantics.db.layer0.variable.Variable;
+import org.simantics.utils.datastructures.Triple;
+
+public class BasicExpression implements Expression, EquationExpression {
+
+ final private Resource expression;
+
+ public BasicExpression(Resource expression) {
+ this.expression = expression;
+ }
+
+ @Override
+ public <T> T evaluate(ReadGraph graph, Variable property, Binding binding) throws DatabaseException {
+ return evaluate(graph, property);
+ }
+
+ @SuppressWarnings("unchecked")
+ @Override
+ public <T> T evaluate(ReadGraph graph, Variable property) throws DatabaseException {
+
+ String expressionString = graph.getValue(expression, Bindings.STRING);
+ BasicExpressionVisitor visitor = new BasicExpressionVisitor(graph, property);
+ Expressions.evaluate(expressionString, visitor);
+ return (T)visitor.getResult();
+
+ }
+
+ @Override
+ public <T> void invert(WriteGraph graph, Variable property, T value, Binding binding) throws DatabaseException {
+
+ String expressionString = graph.getValue(expression, Bindings.STRING);
+ InvertBasicExpressionVisitor visitor = new InvertBasicExpressionVisitor();
+ Expressions.evaluate(expressionString, visitor);
+ Object pair = visitor.getResult();
+ if(pair instanceof Triple) {
+ @SuppressWarnings("unchecked")
+ Triple<Double, Double, String> data = (Triple<Double, Double, String>)pair;
+ if(Math.abs(data.first) > 1e-9) {
+ Double inverted = ((Double)value - data.second) / data.first;
+ String target = data.third;
+ Variable targetVariable = property.browse(graph, target);
+// System.out.println("invert: " + target + " = " + property.browse(graph, target).getURI(graph));
+ targetVariable.setValue(graph, inverted, binding);
+ }
+ }
+
+ }
+
+ @Override
+ public boolean isInvertible(ReadGraph graph, Variable property) throws DatabaseException {
+
+ String expressionString = graph.getValue(expression, Bindings.STRING);
+ InvertBasicExpressionVisitor visitor = new InvertBasicExpressionVisitor();
+ Expressions.evaluate(expressionString, visitor);
+ Object value = visitor.getResult();
+ if(value instanceof Triple) return true;
+ else return false;
+
+ }
+
+}