]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.charts/src/org/simantics/charts/query/ChartDataWrite.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.charts / src / org / simantics / charts / query / ChartDataWrite.java
1 package org.simantics.charts.query;\r
2 \r
3 import java.util.Arrays;\r
4 \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
15 \r
16 public class ChartDataWrite extends WriteRequest {\r
17 \r
18     ChartData data;\r
19     Resource chart;\r
20 \r
21     public ChartDataWrite(Resource chart, ChartData data)\r
22     {\r
23         this.data = data;\r
24         this.chart = chart;\r
25     }\r
26 \r
27     @Override\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
32 \r
33         // Label\r
34         g.claimLiteral(chart, L0.HasName, data.name, Bindings.STRING);\r
35 \r
36         // Axis mode\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
40         } else {\r
41             g.deny(chart, CHART.Chart_YAxisMode, CHART.YAxisMode_SingleAxis);\r
42             g.claim(chart, CHART.Chart_YAxisMode, CHART.YAxisMode_MultiAxis);\r
43         }\r
44 \r
45         // Boolean flags\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
49 \r
50         if ( data.timeIncrement!=null ) {\r
51             g.claimLiteral(chart, CHART.Chart_TimeWindowIncrement, data.timeIncrement, Bindings.DOUBLE);\r
52         } else {\r
53             g.deny(chart, CHART.Chart_TimeWindowIncrement);\r
54         }\r
55 \r
56         if ( data.timeLength==null ) {\r
57             g.deny(chart, CHART.Chart_TimeWindowLength);\r
58         } else {\r
59             g.claimLiteral(chart, CHART.Chart_TimeWindowLength, data.timeLength, Bindings.DOUBLE);\r
60         }\r
61         if ( data.timeStart==null ) {\r
62             g.deny(chart, CHART.Chart_TimeWindowStart);\r
63         } else {\r
64             g.claimLiteral(chart, CHART.Chart_TimeWindowStart, data.timeStart, Bindings.DOUBLE);\r
65         }\r
66 \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
73             }\r
74         }\r
75 \r
76         if (data.backgroundColor1 == null) {\r
77             g.denyValue(chart, CHART.Chart_backgroundColor);\r
78         } else {\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
83             }\r
84         }\r
85 \r
86         if (data.gridColor == null) {\r
87             g.denyValue(chart, CHART.Chart_gridColor);\r
88         } else {\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
92             }\r
93         }\r
94     }\r
95 \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
99         int l = l1 + l2;\r
100         float[] result = new float[l];\r
101         int i = 0;\r
102         if (c1 != null) {\r
103             System.arraycopy(c1, 0, result, 0, l1);\r
104             i += l1;\r
105         }\r
106         if (c2 != null) {\r
107             System.arraycopy(c2, 0, result, i, l2);\r
108             i += l1;\r
109         }\r
110         return result;\r
111     }\r
112 \r
113 }\r