]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.diagram/src/org/simantics/diagram/profile/SCLTextGridStyle.java
Better support for ontological profiles
[simantics/platform.git] / bundles / org.simantics.diagram / src / org / simantics / diagram / profile / SCLTextGridStyle.java
1 package org.simantics.diagram.profile;
2
3 import java.awt.geom.AffineTransform;
4 import java.text.DecimalFormat;
5 import java.text.DecimalFormatSymbols;
6 import java.util.Locale;
7
8 import org.simantics.Simantics;
9 import org.simantics.common.format.Formatter;
10 import org.simantics.databoard.Bindings;
11 import org.simantics.datatypes.literal.Vec2d;
12 import org.simantics.db.ReadGraph;
13 import org.simantics.db.Resource;
14 import org.simantics.db.exception.DatabaseException;
15 import org.simantics.db.layer0.variable.Variable;
16 import org.simantics.db.layer0.variable.Variables;
17 import org.simantics.diagram.stubs.DiagramResource;
18 import org.simantics.diagram.synchronization.graph.DiagramGraphUtil;
19 import org.simantics.modeling.ModelingResources;
20 import org.simantics.scl.runtime.function.Function1;
21 import org.simantics.utils.datastructures.Pair;
22
23 /**
24  * @author Antti Villberg
25  */
26 public class SCLTextGridStyle extends TextGridStyle {
27
28         final Resource style;
29
30         public SCLTextGridStyle(Resource style) {
31                 this.style = style;
32         }
33
34         @Override
35         public Resource getPropertyRelation(ReadGraph graph, Resource module) {
36                 throw new Error("Fix this");
37         }
38
39         @Override
40         protected Object getIdentity(Resource entry) {
41                 return new Pair<Resource, Resource>(style, entry);
42         }
43
44         @Override
45         protected String rowId() {
46                 return getNodeName();
47         }
48
49         @Override
50         public MonitorTextGridResult calculateStyle(ReadGraph graph, Resource runtimeDiagram, Resource entry, Resource element, Variable configuration)
51                         throws DatabaseException {
52
53                 DiagramResource DIA = DiagramResource.getInstance(graph);
54                 ModelingResources MOD = ModelingResources.getInstance(graph);
55
56                 String variableURI = graph.getPossibleRelatedValue(runtimeDiagram, DIA.RuntimeDiagram_HasVariable, Bindings.STRING);
57                 Variable activeVariable = org.simantics.db.layer0.variable.Variables.getPossibleVariable(graph, variableURI);
58                 if (activeVariable == null)
59                         return null;
60
61                 Resource module = graph.getPossibleObject(element, MOD.ElementToComponent);
62                 if (module == null)
63                         return null;
64
65                 Variable moduleVariable = activeVariable.browsePossible(graph, module);
66                 if (moduleVariable == null)
67                         return null;
68
69                 Variable styleVariable = Variables.getVariable(graph, style);
70                 Function1<Variable,String> function = styleVariable.getPossiblePropertyValue(graph, "function");
71                 String result = Simantics.applySCLRead(graph, function, moduleVariable);
72
73                 AffineTransform transform = DiagramGraphUtil.getAffineTransform(graph, element);
74                 Vec2d offset = DiagramGraphUtil.getOffset(graph, element);
75                 boolean enabled = !DiagramGraphUtil.getProfileMonitorsHidden(graph, element);
76                 boolean up = DiagramGraphUtil.getProfileMonitorsUp(graph, element);
77                 double spacing = DiagramGraphUtil.getProfileMonitorSpacing(graph, element);
78
79                 return new MonitorTextGridResult(rowId(), result, "", "", enabled, up, spacing, null, null, ElementTranslation.function(element), transform, offset);
80
81         }
82
83         @Override
84         public String getNodeName() {
85                 return "" + style.getResourceId();
86         }
87
88 }