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.Resource;
\r
10 import org.simantics.db.WriteGraph;
\r
11 import org.simantics.db.common.request.WriteRequest;
\r
12 import org.simantics.db.exception.DatabaseException;
\r
13 import org.simantics.layer0.Layer0;
\r
14 import org.simantics.trend.configuration.YAxisMode;
\r
16 public class ChartDataWrite extends WriteRequest {
\r
21 public ChartDataWrite(Resource chart, ChartData data)
\r
28 public void perform(WriteGraph g) throws DatabaseException {
\r
29 // 0. Initialization
\r
30 Layer0 L0 = Layer0.getInstance(g);
\r
31 ChartResource CHART = ChartResource.getInstance(g);
\r
34 g.claimLiteral(chart, L0.HasName, data.name, Bindings.STRING);
\r
37 if ( data.axisMode == YAxisMode.SingleAxis ) {
\r
38 g.deny(chart, CHART.Chart_YAxisMode, CHART.YAxisMode_MultiAxis);
\r
39 g.claim(chart, CHART.Chart_YAxisMode, CHART.YAxisMode_SingleAxis);
\r
41 g.deny(chart, CHART.Chart_YAxisMode, CHART.YAxisMode_SingleAxis);
\r
42 g.claim(chart, CHART.Chart_YAxisMode, CHART.YAxisMode_MultiAxis);
\r
46 g.claimLiteral(chart, CHART.Chart_ShowMilestones, data.showMilestones, Bindings.BOOLEAN);
\r
47 g.claimLiteral(chart, CHART.Chart_showGrid, data.showGrid, Bindings.BOOLEAN);
\r
48 g.claimLiteral(chart, CHART.Chart_trackExperimentTime, data.trackExperimentTime, Bindings.BOOLEAN);
\r
50 if ( data.timeIncrement!=null ) {
\r
51 g.claimLiteral(chart, CHART.Chart_TimeWindowIncrement, data.timeIncrement, Bindings.DOUBLE);
\r
53 g.deny(chart, CHART.Chart_TimeWindowIncrement);
\r
56 if ( data.timeLength==null ) {
\r
57 g.deny(chart, CHART.Chart_TimeWindowLength);
\r
59 g.claimLiteral(chart, CHART.Chart_TimeWindowLength, data.timeLength, Bindings.DOUBLE);
\r
61 if ( data.timeStart==null ) {
\r
62 g.deny(chart, CHART.Chart_TimeWindowStart);
\r
64 g.claimLiteral(chart, CHART.Chart_TimeWindowStart, data.timeStart, Bindings.DOUBLE);
\r
67 if ( data.allItems != null && data.hiddenItems != null ) {
\r
68 for (ItemKey item : data.allItems.keySet()) {
\r
69 boolean shouldBeHidden = data.hiddenItems.contains(item);
\r
70 Boolean isHidden = g.getRelatedValue(item.resource.getResource(), CHART.Chart_Item_hidden, Bindings.BOOLEAN);
\r
71 if (shouldBeHidden != isHidden)
\r
72 g.claimLiteral(item.resource.getResource(), CHART.Chart_Item_hidden, shouldBeHidden, Bindings.BOOLEAN);
\r
76 if (data.backgroundColor1 == null) {
\r
77 g.denyValue(chart, CHART.Chart_backgroundColor);
\r
79 float[] oldValue = g.getPossibleRelatedValue(chart, CHART.Chart_backgroundColor, Bindings.FLOAT_ARRAY);
\r
80 float[] newValue = data.backgroundGradient ? joinArrays(data.backgroundColor1, data.backgroundColor2) : data.backgroundColor1;
\r
81 if (newValue != null && (oldValue == null || !Arrays.equals(oldValue, newValue))) {
\r
82 g.claimLiteral(chart, CHART.Chart_backgroundColor, newValue, Bindings.FLOAT_ARRAY);
\r
86 if (data.gridColor == null) {
\r
87 g.denyValue(chart, CHART.Chart_gridColor);
\r
89 float[] oldValue = g.getPossibleRelatedValue(chart, CHART.Chart_gridColor, Bindings.FLOAT_ARRAY);
\r
90 if (data.gridColor != null && (oldValue == null || !Arrays.equals(oldValue, data.gridColor))) {
\r
91 g.claimLiteral(chart, CHART.Chart_gridColor, data.gridColor, Bindings.FLOAT_ARRAY);
\r
96 private static float[] joinArrays(float[] c1, float[] c2) {
\r
97 int l1 = c1 != null ? c1.length : 0;
\r
98 int l2 = c2 != null ? c2.length : 0;
\r
100 float[] result = new float[l];
\r
103 System.arraycopy(c1, 0, result, 0, l1);
\r
107 System.arraycopy(c2, 0, result, i, l2);
\r