1 package org.simantics.charts.query;
\r
3 import java.util.Arrays;
\r
5 import org.simantics.charts.ontology.ChartResource;
\r
6 import org.simantics.charts.ui.ChartData;
\r
7 import org.simantics.charts.ui.ChartData.ItemKey;
\r
8 import org.simantics.databoard.Bindings;
\r
9 import org.simantics.db.ReadGraph;
\r
10 import org.simantics.db.Resource;
\r
11 import org.simantics.db.common.NamedResource;
\r
12 import org.simantics.db.common.request.ObjectsWithType;
\r
13 import org.simantics.db.common.request.ResourceRead;
\r
14 import org.simantics.db.exception.DatabaseException;
\r
15 import org.simantics.layer0.Layer0;
\r
16 import org.simantics.trend.configuration.TrendItem;
\r
17 import org.simantics.trend.configuration.YAxisMode;
\r
19 public class ChartDataQuery extends ResourceRead<ChartData> {
\r
21 public ChartDataQuery(Resource resource) {
\r
26 public ChartData perform(ReadGraph g) throws DatabaseException {
\r
27 Resource chart = resource;
\r
28 ChartData data = new ChartData();
\r
30 Layer0 L0 = Layer0.getInstance(g);
\r
31 ChartResource CHART = ChartResource.getInstance(g);
\r
33 data.name = g.getPossibleRelatedValue(chart, L0.HasName, Bindings.STRING);
\r
35 Resource am = g.getPossibleObject(chart, CHART.Chart_YAxisMode);
\r
36 if ( CHART.YAxisMode_SingleAxis.equals(am) ) data.axisMode = YAxisMode.SingleAxis;
\r
37 else if ( CHART.YAxisMode_MultiAxis.equals(am) ) data.axisMode = YAxisMode.MultiAxis;
\r
39 data.axisMode = YAxisMode.SingleAxis;
\r
42 Double increment = g.getPossibleRelatedAdapter(chart, CHART.Chart_TimeWindowIncrement, Double.class);
\r
43 if ( increment!=null ) data.timeIncrement = increment;
\r
44 Double length = g.getPossibleRelatedAdapter(chart, CHART.Chart_TimeWindowLength, Double.class);
\r
45 if ( length !=null ) data.timeLength = length;
\r
46 Double start = g.getPossibleRelatedAdapter(chart, CHART.Chart_TimeWindowStart, Double.class);
\r
47 if ( start!=null ) data.timeStart = start;
\r
49 Boolean showMilestones = g.getPossibleRelatedValue(chart, CHART.Chart_ShowMilestones, Bindings.BOOLEAN);
\r
50 if ( showMilestones!=null ) data.showMilestones = showMilestones;
\r
51 Boolean showGrid = g.getPossibleRelatedValue(chart, CHART.Chart_showGrid, Bindings.BOOLEAN);
\r
52 if ( showGrid!=null ) data.showGrid = showGrid;
\r
53 Boolean trackExperimentTime = g.getPossibleRelatedValue(chart, CHART.Chart_trackExperimentTime, Bindings.BOOLEAN);
\r
54 if ( trackExperimentTime!=null ) data.trackExperimentTime = trackExperimentTime;
\r
56 for (Resource chartItem : g.syncRequest(new ObjectsWithType(chart, L0.ConsistsOf, CHART.Chart_Item))) {
\r
57 TrendItem ti = g.syncRequest(new TrendItemQuery(chartItem));
\r
58 NamedResource nr = new NamedResource(ti.label, chartItem);
\r
59 ItemKey key = new ItemKey(ti.renderer, ti.index, nr);
\r
60 data.allItems.put(key, ti);
\r
61 Boolean hidden = g.getPossibleRelatedValue(chartItem, CHART.Chart_Item_hidden, Bindings.BOOLEAN);
\r
62 if (Boolean.TRUE.equals(hidden))
\r
63 data.hiddenItems.add(key);
\r
66 float[] bgColor = g.getPossibleRelatedValue(chart, CHART.Chart_backgroundColor, Bindings.FLOAT_ARRAY);
\r
67 if (bgColor != null && bgColor.length >= 3) {
\r
68 int len = bgColor.length;
\r
70 data.backgroundGradient = true;
\r
71 data.backgroundColor1 = Arrays.copyOfRange(bgColor, 0, 3);
\r
72 data.backgroundColor2 = Arrays.copyOfRange(bgColor, 3, 6);
\r
73 } else if (len >= 3) {
\r
74 data.backgroundGradient = false;
\r
75 data.backgroundColor1 = Arrays.copyOfRange(bgColor, 0, 3);
\r
76 data.backgroundColor2 = data.backgroundColor1;
\r
80 float[] gridColor = g.getPossibleRelatedValue(chart, CHART.Chart_gridColor, Bindings.FLOAT_ARRAY);
\r
81 if (gridColor != null && gridColor.length >= 3) {
\r
82 data.gridColor = gridColor;
\r