1 /*******************************************************************************
\r
2 * Copyright (c) 2012 Association for Decentralized Information Management in
\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
10 * VTT Technical Research Centre of Finland - initial API and implementation
\r
11 *******************************************************************************/
\r
12 package org.simantics.modeling.ui.diagram.monitor;
\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
29 * @author Tuukka Lehtonen
\r
31 public class ResolveMonitorVariable extends BinaryRead<Resource, Resource, MonitorVariable> {
\r
33 public ResolveMonitorVariable(Resource runtimeDiagram, Resource monitorElement) {
\r
34 super(runtimeDiagram, monitorElement);
\r
38 public MonitorVariable perform(ReadGraph graph) throws DatabaseException {
\r
39 Boolean external = null;
\r
40 DiagramResource DIA = DiagramResource.getInstance(graph);
\r
42 Resource monitorComponent = graph.getPossibleObject(parameter2, DIA.HasMonitorComponent);
\r
43 if (monitorComponent == null)
\r
46 String suffix = graph.getPossibleRelatedValue(parameter2, DIA.HasMonitorSuffix, Bindings.STRING);
\r
50 String diagramVariable = graph.getPossibleRelatedValue(parameter, DIA.RuntimeDiagram_HasVariable);
\r
51 if (diagramVariable == null)
\r
54 Variable var = Variables.getPossibleVariable(graph, diagramVariable);
\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
65 String componentRVI = Variables.getPossibleRVI(graph, component);
\r
66 if (componentRVI == null)
\r
69 Resource realization = Variables.getRealization(graph, var);
\r
70 String diagramRealizationURI = graph.getPossibleURI(realization);
\r
71 if (diagramRealizationURI == null)
\r
74 String componentURI = diagramRealizationURI + componentRVI;
\r
75 var = Variables.getPossibleVariable(graph, componentURI);
\r
79 external = Boolean.TRUE;
\r
84 var = var.browsePossible(graph, suffix);
\r
88 Formatter formatter = graph.getPossibleRelatedAdapter(parameter2, DIA.HasFormatter, Formatter.class);
\r
89 if (formatter == null)
\r
90 formatter = new DecimalFormatFormatter();
\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
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
103 return new MonitorVariable(monitorComponent, formatter, _expression, var, rvi, external);
\r