1 /*******************************************************************************
\r
2 * Copyright (c) 2007, 2011 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.charts.query;
\r
14 import java.util.Arrays;
\r
16 import org.simantics.charts.ontology.ChartResource;
\r
17 import org.simantics.databoard.Bindings;
\r
18 import org.simantics.databoard.Databoard;
\r
19 import org.simantics.databoard.binding.Binding;
\r
20 import org.simantics.db.ReadGraph;
\r
21 import org.simantics.db.Resource;
\r
22 import org.simantics.db.common.request.ResourceRead;
\r
23 import org.simantics.db.exception.DatabaseException;
\r
24 import org.simantics.db.layer0.request.PossibleModel;
\r
25 import org.simantics.db.layer0.variable.RVI;
\r
26 import org.simantics.db.layer0.variable.Variable;
\r
27 import org.simantics.db.layer0.variable.Variables;
\r
28 import org.simantics.layer0.Layer0;
\r
29 import org.simantics.modeling.ModelingResources;
\r
30 import org.simantics.modeling.subscription.SubscriptionsQuery;
\r
31 import org.simantics.modeling.subscription.SubscriptionsQuery.SubscriptionsResult;
\r
32 import org.simantics.trend.configuration.TrendItem;
\r
33 import org.simantics.trend.configuration.TrendItem.Renderer;
\r
36 * This query reads chart and item data.
\r
38 * @author toni.kalajainen
\r
40 public class ChartAndSubscriptionItemReadQuery extends ResourceRead<ChartAndSubscriptionItemData> {
\r
42 public ChartAndSubscriptionItemReadQuery(Resource chartItem) {
\r
47 public ChartAndSubscriptionItemData perform(ReadGraph g) throws DatabaseException {
\r
48 ChartAndSubscriptionItemData data = new ChartAndSubscriptionItemData();
\r
50 Layer0 L0 = Layer0.getInstance(g);
\r
51 ModelingResources MOD = ModelingResources.getInstance(g);
\r
52 ChartResource CHART = ChartResource.getInstance(g);
\r
53 Resource chartItem = resource;
\r
54 Resource chart = g.getPossibleObject(chartItem, L0.PartOf);
\r
55 Resource model = g.syncRequest(new PossibleModel( chart ));
\r
56 Resource subscriptionItem = g.getPossibleObject(chartItem, CHART.Chart_Item_HasSubscriptionItem);
\r
57 Resource subscription = subscriptionItem==null ? null : g.getPossibleObject(subscriptionItem, L0.PartOf);
\r
58 SubscriptionsResult subscriptions = g.sync( new SubscriptionsQuery(model) );
\r
60 TrendItem trendItem = g.sync( new TrendItemQuery(chartItem) );
\r
62 if ( subscriptionItem != null ) {
\r
63 Variable configuration = Variables.getConfigurationContext(g, subscription);
\r
64 Binding rviBinding = g.getService(Databoard.class).getBindingUnchecked( RVI.class );
\r
65 RVI rvi = g.getRelatedValue(subscriptionItem, MOD.Subscription_Item_VariableId, rviBinding);
\r
66 data.variableReference = rvi.toPossibleString(g, configuration);
\r
69 data.index = trendItem.index;
\r
70 data.chartName = g.getPossibleRelatedValue(chart, L0.HasName, Bindings.STRING);
\r
71 data.subscriptions = subscriptions.toNames();
\r
72 data.subscriptions = subscriptions.names.toArray( new String[subscriptions.names.size()]);
\r
73 data.drawmode = trendItem.drawMode;
\r
74 data.binaryMode = trendItem.renderer == Renderer.Binary;
\r
75 data.subscription = subscriptions.getName(subscription);
\r
76 data.scale = trendItem.scale;
\r
77 if ( data.subscription==null ) data.subscription="";
\r
79 data.min = g.getPossibleRelatedValue(chartItem, CHART.Chart_Item_ScaleMode_Min, Bindings.DOUBLE);
\r
80 data.max = g.getPossibleRelatedValue(chartItem, CHART.Chart_Item_ScaleMode_Max, Bindings.DOUBLE);
\r
82 data.strokeWidth = trendItem.customStrokeWidth;
\r
83 data.color = trendItem.customColor != null ? Arrays.copyOf(trendItem.customColor, trendItem.customColor.length) : null;
\r
85 data.hasSubscriptionItem = subscriptionItem != null;
\r
86 if ( data.hasSubscriptionItem ) {
\r
87 data.label = g.getPossibleRelatedValue(subscriptionItem, L0.HasLabel, Bindings.STRING);
\r
88 data.bias = g.getPossibleRelatedValue(subscriptionItem, MOD.Subscription_Item_Bias, Bindings.DOUBLE);
\r
89 data.gain = g.getPossibleRelatedValue(subscriptionItem, MOD.Subscription_Item_Gain, Bindings.DOUBLE);
\r
90 data.deadband = g.getPossibleRelatedValue(subscriptionItem, MOD.Subscription_Item_Deadband, Bindings.DOUBLE);
\r
91 data.interval = g.getPossibleRelatedValue(subscriptionItem, MOD.Subscription_Item_SamplingInterval, Bindings.DOUBLE);
\r
92 data.unit = g.getPossibleRelatedValue(subscriptionItem, MOD.Subscription_Item_Unit, Bindings.STRING);
\r
94 data.variableReference = trendItem.label;
\r