1 package org.simantics.modeling.utils;
\r
3 import java.util.ArrayList;
\r
4 import java.util.List;
\r
6 import org.simantics.databoard.type.Datatype;
\r
7 import org.simantics.databoard.util.ObjectUtils;
\r
8 import org.simantics.db.ReadGraph;
\r
9 import org.simantics.db.Resource;
\r
10 import org.simantics.db.exception.DatabaseException;
\r
11 import org.simantics.db.layer0.variable.RVI;
\r
12 import org.simantics.db.layer0.variable.Variable;
\r
13 import org.simantics.db.layer0.variable.VariableReference;
\r
14 import org.simantics.db.layer0.variable.Variables;
\r
15 import org.simantics.db.request.Read;
\r
16 import org.simantics.modeling.PropertyVariables;
\r
19 * A intermediate hack solution for converting variables to variable references.
\r
20 * {@link NodeReference}s and {@link Datatype}s for subscription and charting
\r
23 * @author Tuukka Lehtonen
\r
25 public final class VariableReferences {
\r
27 public static Read<List<VariableReference>> toReferences(final List<PropertyVariables> vars) {
\r
28 return toReferences(null, vars);
\r
31 public static Read<List<VariableReference>> toReferences(final Resource expectedModel, final List<PropertyVariables> vars) {
\r
32 return new Read<List<VariableReference>>() {
\r
34 public List<VariableReference> perform(ReadGraph graph) throws DatabaseException {
\r
35 List<VariableReference> result = new ArrayList<VariableReference>();
\r
36 for (PropertyVariables v : vars) {
\r
37 if (expectedModel != null) {
\r
38 // Check that the model of the variable matches the target model.
\r
39 Resource model = Variables.getModel(graph, v.getContainer());
\r
40 if (!ObjectUtils.objectEquals(expectedModel, model))
\r
44 Datatype datatype = v.getVisualVariable().getPossibleDatatype(graph);
\r
46 // System.out.println("URI1: " + v.getContainer().getURI(graph));
\r
47 // System.out.println("URI2: " + v.getExperiment().getURI(graph));
\r
48 // System.out.println("URI3: " + v.getProperty().getURI(graph));
\r
49 // System.out.println("RVI: " + Variables.getRVI(graph, v.getProperty()));
\r
50 RVI rvi = Variables.getRVI2(graph, v.getVisualVariable());
\r
51 // String rvi = Variables.getRVI(graph, v.getVisualVariable());
\r
52 // String nodeReference = rvi.replaceFirst("/", "");
\r
53 // System.out.println("NODEREF: " + nodeReference);
\r
54 // System.out.println("DATATYPE: " + datatype);
\r
55 result.add( VariableReference.of( rvi, datatype, null ) );
\r
62 public static Read<List<VariableReference>> variablesToReferences(final List<Variable> vars) {
\r
63 return variablesToReferences((Resource) null, vars);
\r
66 public static Read<List<VariableReference>> variablesToReferences(final Resource expectedModel, final List<Variable> vars) {
\r
67 return new Read<List<VariableReference>>() {
\r
69 public List<VariableReference> perform(ReadGraph graph) throws DatabaseException {
\r
70 List<VariableReference> result = new ArrayList<VariableReference>();
\r
71 for (Variable v : vars) {
\r
72 if (expectedModel != null) {
\r
73 // Check that the model of the variable matches the target model.
\r
74 Resource model = Variables.getModel(graph, v);
\r
75 if (!ObjectUtils.objectEquals(expectedModel, model))
\r
78 Datatype datatype = v.getPossibleDatatype(graph);
\r
79 RVI rvi = Variables.getRVI2(graph, v);
\r
80 // String rvi = Variables.getRVI(graph, v);
\r
81 // String nodeReference = rvi.replaceFirst("/", "");
\r
82 result.add( VariableReference.of( rvi, datatype, null ) );
\r