]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.modeling.ui/src/org/simantics/modeling/ui/diagram/monitor/ResolveMonitorVariable.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.modeling.ui / src / org / simantics / modeling / ui / diagram / monitor / ResolveMonitorVariable.java
1 /*******************************************************************************\r
2  * Copyright (c) 2012 Association for Decentralized Information Management in\r
3  * Industry THTH ry.\r
4  * All rights reserved. This program and the accompanying materials\r
5  * are made available under the terms of the Eclipse Public License v1.0\r
6  * which accompanies this distribution, and is available at\r
7  * http://www.eclipse.org/legal/epl-v10.html\r
8  *\r
9  * Contributors:\r
10  *     VTT Technical Research Centre of Finland - initial API and implementation\r
11  *******************************************************************************/\r
12 package org.simantics.modeling.ui.diagram.monitor;\r
13 \r
14 import org.simantics.common.format.Formatter;\r
15 import org.simantics.databoard.Bindings;\r
16 import org.simantics.datatypes.literal.DecimalFormatFormatter;\r
17 import org.simantics.db.ReadGraph;\r
18 import org.simantics.db.Resource;\r
19 import org.simantics.db.common.request.BinaryRead;\r
20 import org.simantics.db.exception.DatabaseException;\r
21 import org.simantics.db.layer0.exception.VariableException;\r
22 import org.simantics.db.layer0.variable.RVI;\r
23 import org.simantics.db.layer0.variable.Variable;\r
24 import org.simantics.db.layer0.variable.Variables;\r
25 import org.simantics.diagram.stubs.DiagramResource;\r
26 import org.simantics.operation.Layer0X;\r
27 \r
28 /**\r
29  * @author Tuukka Lehtonen\r
30  */\r
31 public class ResolveMonitorVariable extends BinaryRead<Resource, Resource, MonitorVariable> {\r
32 \r
33     public ResolveMonitorVariable(Resource runtimeDiagram, Resource monitorElement) {\r
34         super(runtimeDiagram, monitorElement);\r
35     }\r
36 \r
37     @Override\r
38     public MonitorVariable perform(ReadGraph graph) throws DatabaseException {\r
39         Boolean external = null;\r
40         DiagramResource DIA = DiagramResource.getInstance(graph);\r
41 \r
42         Resource monitorComponent = graph.getPossibleObject(parameter2, DIA.HasMonitorComponent);\r
43         if (monitorComponent == null)\r
44             return null;\r
45 \r
46         String suffix = graph.getPossibleRelatedValue(parameter2, DIA.HasMonitorSuffix, Bindings.STRING);\r
47         if (suffix == null)\r
48             return null;\r
49 \r
50         String diagramVariable = graph.getPossibleRelatedValue(parameter, DIA.RuntimeDiagram_HasVariable);\r
51         if (diagramVariable == null)\r
52             return null;\r
53 \r
54         Variable var = Variables.getPossibleVariable(graph, diagramVariable);\r
55         if (var == null)\r
56             return null;\r
57 \r
58         Variable component = var.browsePossible(graph, monitorComponent);\r
59         if (component == null) {\r
60             // The monitored component is not in this diagram.\r
61             component = Variables.getPossibleVariable(graph, monitorComponent);\r
62             if (component == null)\r
63                 return null;\r
64 \r
65             String componentRVI = Variables.getPossibleRVI(graph, component);\r
66             if (componentRVI == null)\r
67                 return null;\r
68 \r
69             Resource realization = Variables.getRealization(graph, var);\r
70             String diagramRealizationURI = graph.getPossibleURI(realization);\r
71             if (diagramRealizationURI == null)\r
72                 return null;\r
73 \r
74             String componentURI = diagramRealizationURI + componentRVI;\r
75             var = Variables.getPossibleVariable(graph, componentURI);\r
76             if (var == null)\r
77                 return null;\r
78 \r
79             external = Boolean.TRUE;\r
80         } else {\r
81             var = component;\r
82         }\r
83 \r
84         var = var.browsePossible(graph, suffix);\r
85         if (var == null)\r
86             return null;\r
87 \r
88         Formatter formatter = graph.getPossibleRelatedAdapter(parameter2, DIA.HasFormatter, Formatter.class);\r
89         if (formatter == null)\r
90             formatter = new DecimalFormatFormatter();\r
91 \r
92         Layer0X L0X = Layer0X.getInstance(graph);\r
93         String _expression = graph.getPossibleRelatedAdapter(parameter2, L0X.HasExpression, String.class);\r
94         if(_expression == null) _expression  = "value";\r
95 \r
96         RVI rvi = null;\r
97         try {\r
98             rvi = Variables.getRVI2(graph, var);\r
99         } catch (VariableException e) {\r
100             // No RVI, which is fine for contents that do not originate from the model configuration.\r
101         }\r
102 \r
103         return new MonitorVariable(monitorComponent, formatter, _expression, var, rvi, external);\r
104     }\r
105 \r
106 }