]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - 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
diff --git a/bundles/org.simantics.charts/src/org/simantics/charts/query/ChartDataWrite.java b/bundles/org.simantics.charts/src/org/simantics/charts/query/ChartDataWrite.java
new file mode 100644 (file)
index 0000000..967ca93
--- /dev/null
@@ -0,0 +1,113 @@
+package org.simantics.charts.query;\r
+\r
+import java.util.Arrays;\r
+\r
+import org.simantics.charts.ontology.ChartResource;\r
+import org.simantics.charts.ui.ChartData;\r
+import org.simantics.charts.ui.ChartData.ItemKey;\r
+import org.simantics.databoard.Bindings;\r
+import org.simantics.db.Resource;\r
+import org.simantics.db.WriteGraph;\r
+import org.simantics.db.common.request.WriteRequest;\r
+import org.simantics.db.exception.DatabaseException;\r
+import org.simantics.layer0.Layer0;\r
+import org.simantics.trend.configuration.YAxisMode;\r
+\r
+public class ChartDataWrite extends WriteRequest {\r
+\r
+    ChartData data;\r
+    Resource chart;\r
+\r
+    public ChartDataWrite(Resource chart, ChartData data)\r
+    {\r
+        this.data = data;\r
+        this.chart = chart;\r
+    }\r
+\r
+    @Override\r
+    public void perform(WriteGraph g) throws DatabaseException {\r
+        // 0. Initialization\r
+        Layer0 L0 = Layer0.getInstance(g);\r
+        ChartResource CHART = ChartResource.getInstance(g);\r
+\r
+        // Label\r
+        g.claimLiteral(chart, L0.HasName, data.name, Bindings.STRING);\r
+\r
+        // Axis mode\r
+        if ( data.axisMode == YAxisMode.SingleAxis ) {\r
+            g.deny(chart, CHART.Chart_YAxisMode, CHART.YAxisMode_MultiAxis);\r
+            g.claim(chart, CHART.Chart_YAxisMode, CHART.YAxisMode_SingleAxis);\r
+        } else {\r
+            g.deny(chart, CHART.Chart_YAxisMode, CHART.YAxisMode_SingleAxis);\r
+            g.claim(chart, CHART.Chart_YAxisMode, CHART.YAxisMode_MultiAxis);\r
+        }\r
+\r
+        // Boolean flags\r
+        g.claimLiteral(chart, CHART.Chart_ShowMilestones, data.showMilestones, Bindings.BOOLEAN);\r
+        g.claimLiteral(chart, CHART.Chart_showGrid, data.showGrid, Bindings.BOOLEAN);\r
+        g.claimLiteral(chart, CHART.Chart_trackExperimentTime, data.trackExperimentTime, Bindings.BOOLEAN);\r
+\r
+        if ( data.timeIncrement!=null ) {\r
+            g.claimLiteral(chart, CHART.Chart_TimeWindowIncrement, data.timeIncrement, Bindings.DOUBLE);\r
+        } else {\r
+            g.deny(chart, CHART.Chart_TimeWindowIncrement);\r
+        }\r
+\r
+        if ( data.timeLength==null ) {\r
+            g.deny(chart, CHART.Chart_TimeWindowLength);\r
+        } else {\r
+            g.claimLiteral(chart, CHART.Chart_TimeWindowLength, data.timeLength, Bindings.DOUBLE);\r
+        }\r
+        if ( data.timeStart==null ) {\r
+            g.deny(chart, CHART.Chart_TimeWindowStart);\r
+        } else {\r
+            g.claimLiteral(chart, CHART.Chart_TimeWindowStart, data.timeStart, Bindings.DOUBLE);\r
+        }\r
+\r
+        if ( data.allItems != null && data.hiddenItems != null ) {\r
+            for (ItemKey item : data.allItems.keySet()) {\r
+                boolean shouldBeHidden = data.hiddenItems.contains(item);\r
+                Boolean isHidden = g.getRelatedValue(item.resource.getResource(), CHART.Chart_Item_hidden, Bindings.BOOLEAN);\r
+                if (shouldBeHidden != isHidden)\r
+                    g.claimLiteral(item.resource.getResource(), CHART.Chart_Item_hidden, shouldBeHidden, Bindings.BOOLEAN);\r
+            }\r
+        }\r
+\r
+        if (data.backgroundColor1 == null) {\r
+            g.denyValue(chart, CHART.Chart_backgroundColor);\r
+        } else {\r
+            float[] oldValue = g.getPossibleRelatedValue(chart, CHART.Chart_backgroundColor, Bindings.FLOAT_ARRAY);\r
+            float[] newValue = data.backgroundGradient ? joinArrays(data.backgroundColor1, data.backgroundColor2) : data.backgroundColor1;\r
+            if (newValue != null && (oldValue == null || !Arrays.equals(oldValue, newValue))) {\r
+                g.claimLiteral(chart, CHART.Chart_backgroundColor, newValue, Bindings.FLOAT_ARRAY);\r
+            }\r
+        }\r
+\r
+        if (data.gridColor == null) {\r
+            g.denyValue(chart, CHART.Chart_gridColor);\r
+        } else {\r
+            float[] oldValue = g.getPossibleRelatedValue(chart, CHART.Chart_gridColor, Bindings.FLOAT_ARRAY);\r
+            if (data.gridColor != null && (oldValue == null || !Arrays.equals(oldValue, data.gridColor))) {\r
+                g.claimLiteral(chart, CHART.Chart_gridColor, data.gridColor, Bindings.FLOAT_ARRAY);\r
+            }\r
+        }\r
+    }\r
+\r
+    private static float[] joinArrays(float[] c1, float[] c2) {\r
+        int l1 = c1 != null ? c1.length : 0;\r
+        int l2 = c2 != null ? c2.length : 0;\r
+        int l = l1 + l2;\r
+        float[] result = new float[l];\r
+        int i = 0;\r
+        if (c1 != null) {\r
+            System.arraycopy(c1, 0, result, 0, l1);\r
+            i += l1;\r
+        }\r
+        if (c2 != null) {\r
+            System.arraycopy(c2, 0, result, i, l2);\r
+            i += l1;\r
+        }\r
+        return result;\r
+    }\r
+\r
+}\r