]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.modeling.template2d.ui/src/org/simantics/modeling/template2d/ui/function/DrawingTemplateInfo.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.modeling.template2d.ui / src / org / simantics / modeling / template2d / ui / function / DrawingTemplateInfo.java
diff --git a/bundles/org.simantics.modeling.template2d.ui/src/org/simantics/modeling/template2d/ui/function/DrawingTemplateInfo.java b/bundles/org.simantics.modeling.template2d.ui/src/org/simantics/modeling/template2d/ui/function/DrawingTemplateInfo.java
new file mode 100644 (file)
index 0000000..4cd822e
--- /dev/null
@@ -0,0 +1,215 @@
+/*******************************************************************************\r
+ * Copyright (c) 2012 Association for Decentralized Information Management in\r
+ * Industry THTH ry.\r
+ * All rights reserved. This program and the accompanying materials\r
+ * are made available under the terms of the Eclipse Public License v1.0\r
+ * which accompanies this distribution, and is available at\r
+ * http://www.eclipse.org/legal/epl-v10.html\r
+ *\r
+ * Contributors:\r
+ *     VTT Technical Research Centre of Finland - initial API and implementation\r
+ *******************************************************************************/\r
+package org.simantics.modeling.template2d.ui.function;\r
+\r
+import java.awt.geom.AffineTransform;\r
+import java.util.Collection;\r
+import java.util.List;\r
+import java.util.TreeMap;\r
+\r
+import org.simantics.databoard.Bindings;\r
+import org.simantics.datatypes.literal.Font;\r
+import org.simantics.datatypes.literal.RGB;\r
+import org.simantics.db.ReadGraph;\r
+import org.simantics.db.Resource;\r
+import org.simantics.db.common.request.ResourceRead;\r
+import org.simantics.db.common.utils.ListUtils;\r
+import org.simantics.db.exception.DatabaseException;\r
+import org.simantics.diagram.stubs.DiagramResource;\r
+import org.simantics.layer0.Layer0;\r
+import org.simantics.modeling.template2d.ontology.Template2dResource;\r
+import org.simantics.scenegraph.ontology.ScenegraphResources;\r
+\r
+public class DrawingTemplateInfo extends ResourceRead<TreeMap<String, FlagTableInfo>> {\r
+    public static final Integer ALIGN_LEFT  = 0;\r
+    public static final Integer ALIGN_RIGHT = 1;\r
+    public static final float BASELINE_VERTICAL_OFFSET = 0.8F; // percent of line height\r
+//     private String digest = "";\r
+//\r
+//Column\r
+//     public String getDigest() {\r
+//             return digest;\r
+//     }\r
+\r
+       public DrawingTemplateInfo(Resource template) {\r
+        super(template);\r
+    }\r
+\r
+       /**\r
+        * The byte[] returned by MessageDigest does not have a nice\r
+        * textual representation, so some form of encoding is usually performed.\r
+        *\r
+        * This implementation follows the example of David Flanagan's book\r
+        * "Java In A Nutshell", and converts a byte array into a String\r
+        * of hex characters.\r
+        *\r
+        * Another popular alternative is to use a "Base64" encoding.\r
+        */\r
+//     static private String hexEncode( byte[] aInput){\r
+//             StringBuilder result = new StringBuilder();\r
+//             char[] digits = {'0', '1', '2', '3', '4','5','6','7','8','9','a','b','c','d','e','f'};\r
+//             for ( int idx = 0; idx < aInput.length; ++idx) {\r
+//                     byte b = aInput[idx];\r
+//                     result.append( digits[ (b&0xf0) >> 4 ] );\r
+//                     result.append( digits[ b&0x0f] );\r
+//             }\r
+//             return result.toString();\r
+//     }\r
+\r
+       @Override\r
+       public TreeMap<String, FlagTableInfo> perform(ReadGraph g) throws DatabaseException {\r
+        TreeMap<String,FlagTableInfo> entries = new TreeMap<String,FlagTableInfo>();\r
+       try {\r
+        Layer0 L0 = Layer0.getInstance(g);\r
+        Template2dResource TEMPLATE2D = Template2dResource.getInstance(g);\r
+               DiagramResource DIA = DiagramResource.getInstance(g);\r
+               ScenegraphResources SG = ScenegraphResources.getInstance(g);\r
+               //DatatypeResource DTR = DatatypeResource.getInstance(g);\r
+\r
+//        MessageDigest sha;\r
+//        sha = MessageDigest.getInstance("SHA-1");\r
+//        byte[] result =  sha.digest(info.serialize());\r
+//        System.err.println(hexEncode(result));\r
+\r
+\r
+        Collection<Resource> slotTables = g.getObjects(resource, L0.ConsistsOf);\r
+        for (Resource slotTable:slotTables){\r
+               if (!g.isInstanceOf(slotTable, TEMPLATE2D.FlagTable))\r
+                       continue;\r
+               \r
+               String name = g.getPossibleRelatedValue(slotTable, L0.HasName, Bindings.STRING);\r
+            double[] transform = g.getPossibleRelatedValue2(slotTable, DIA.Scenegraph_Composite_transform, Bindings.getBindingUnchecked(double[].class));\r
+               Resource align = g.getPossibleObject(slotTable, TEMPLATE2D.FlagTable_HasAlignment);\r
+               Float width = g.getPossibleRelatedValue(slotTable, TEMPLATE2D.FlagTable_HasWidth, Bindings.FLOAT);\r
+               Float rowHeight = g.getPossibleRelatedValue(slotTable, TEMPLATE2D.FlagTable_HasRowHeigth, Bindings.FLOAT);\r
+               Integer rowCount = g.getPossibleRelatedValue(slotTable, TEMPLATE2D.FlagTable_HasRowCount, Bindings.INTEGER);\r
+               if (name == null || width == null || rowCount == null)\r
+                       continue;\r
+\r
+               FlagTableInfo table = new FlagTableInfo();\r
+               table.setWidth(width);\r
+               table.setRowCount(rowCount);\r
+               table.setRowHeight(rowHeight);\r
+               table.setTransform(transform);\r
+               table.affineTransform = (transform != null) ? new AffineTransform(transform) : new AffineTransform();\r
+               if (align != null) {\r
+                   if (align.equals(TEMPLATE2D.FlagTable_Alignment_Left))\r
+                       table.setAlignment(ALIGN_LEFT);\r
+                   if (align.equals(TEMPLATE2D.FlagTable_Alignment_Right))\r
+                       table.setAlignment(ALIGN_RIGHT);\r
+               }\r
+               entries.put(name, table);\r
+\r
+               // Columns information\r
+                       Resource res = g.getPossibleObject(slotTable, SG.Node_children);\r
+                       if(res == null || !g.isInstanceOf(res, L0.List))\r
+                               continue;\r
+                       List<Resource> columns = ListUtils.toList(g, res);\r
+\r
+                       Float weightTotal = 0.0F;\r
+               for (Resource column:columns){\r
+                       if (!(g.isInstanceOf(column, TEMPLATE2D.FlagTable_Column) || g.isInstanceOf(column, TEMPLATE2D.FlagTable_RowNumberColumn)))\r
+                               continue;\r
+\r
+                       Float weight = g.getPossibleRelatedValue(column, TEMPLATE2D.FlagTable_Column_HasWeight, Bindings.FLOAT);\r
+                       if (weight == null)\r
+                               continue;\r
+                       \r
+                       FlagTableColumnInfo col = new FlagTableColumnInfo(weight);\r
+                       table.addColumn(col);\r
+                       if (g.isInstanceOf(column, TEMPLATE2D.FlagTable_RowNumberColumn)) {\r
+                               col.setType(FlagTableColumnInfo.TYPE_ROW_NUMBERING);\r
+\r
+                               Integer start = g.getPossibleRelatedValue(column, TEMPLATE2D.FlagTable_RowNumberColumn_start, Bindings.INTEGER);\r
+                               col.setStartOffset(start);\r
+                       }\r
+                       \r
+                       weightTotal = weightTotal + weight; \r
+                               //sha.update(weight.toString().getBytes());\r
+                       \r
+                       // Header and Data information\r
+                               Resource res2 = g.getPossibleObject(column, SG.Node_children);\r
+                               if(res2 == null || !g.isInstanceOf(res2, L0.List))\r
+                                       continue;\r
+                               List<Resource> columnDatas = ListUtils.toList(g, res2);\r
+                       for (Resource columnData:columnDatas){\r
+                               if (g.isInstanceOf(columnData, TEMPLATE2D.FlagTable_Column_Data)){\r
+                               MonitorInfo monitorInfo = new MonitorInfo();\r
+                                       Font font = g.getPossibleRelatedValue2(columnData, DIA.Scenegraph_AbstractText_font, Bindings.getBindingUnchecked(Font.class));\r
+                                       if (font != null){\r
+                                               monitorInfo.setFont(font);\r
+                                               //sha.update(font.serialize());\r
+                                       }\r
+\r
+                                       RGB.Integer color = g.getPossibleRelatedValue2(columnData, DIA.Scenegraph_AbstractText_color, RGB.Integer.BINDING/*Bindings.getBindingUnchecked(RGB.Integer.class)*/);\r
+                                       if (color != null){\r
+                                               monitorInfo.setColor(color);\r
+                                               //sha.update(color.serialize());\r
+                                       }\r
+\r
+                               String path = g.getRelatedValue(columnData, DIA.Scenegraph_Monitor_reference, Bindings.STRING);\r
+                               if (path != null && path.length() > 0){\r
+                                       monitorInfo.setText(path);\r
+                                               //sha.update(path.getBytes());\r
+                               }\r
+                               \r
+                           double[] dataTransform = g.getPossibleRelatedValue2(columnData, DIA.Scenegraph_AbstractText_transform, Bindings.getBindingUnchecked(double[].class));\r
+                               if (dataTransform != null){\r
+                                       monitorInfo.setTransform(dataTransform);\r
+                                               //sha.update(path.getBytes());\r
+                               }\r
+\r
+                               monitorInfo.setResource(columnData);\r
+                               //col.setColumnData(monitorInfo);\r
+                               col.addColumnData(monitorInfo);\r
+                               }\r
+                               if (g.isInstanceOf(columnData, TEMPLATE2D.FlagTable_Column_Header)){\r
+                               MonitorInfo monitorInfo = new MonitorInfo();\r
+                                       Font font = g.getPossibleRelatedValue2(columnData, DIA.Scenegraph_AbstractText_font, Bindings.getBindingUnchecked(Font.class));\r
+                                       if (font != null){\r
+                                               monitorInfo.setFont(font);\r
+                                               //sha.update(font.serialize());\r
+                                       }\r
+\r
+                                       RGB.Integer color = g.getPossibleRelatedValue2(columnData, DIA.Scenegraph_AbstractText_color, RGB.Integer.BINDING/*Bindings.getBindingUnchecked(RGB.Integer.class)*/);\r
+                                       if (color != null){\r
+                                               monitorInfo.setColor(color);\r
+                                               //sha.update(color.serialize());\r
+                                       }\r
+\r
+                               String path = g.getRelatedValue(columnData, DIA.Scenegraph_Monitor_reference, Bindings.STRING);\r
+                               if (path != null && path.length() > 0){\r
+                                       monitorInfo.setText(path);\r
+                                               //sha.update(path.getBytes());\r
+                               }\r
+                               \r
+                           double[] dataTransform = g.getPossibleRelatedValue2(columnData, DIA.Scenegraph_AbstractText_transform, Bindings.getBindingUnchecked(double[].class));\r
+                               if (dataTransform != null){\r
+                                       monitorInfo.setTransform(dataTransform);\r
+                                               //sha.update(path.getBytes());\r
+                               }\r
+\r
+                               monitorInfo.setResource(columnData);\r
+                               //col.setColumnHeader(monitorInfo);\r
+                               col.addColumnHeader(monitorInfo);\r
+                               }\r
+                       }\r
+               }\r
+               table.setWeightTotal(weightTotal);\r
+        }\r
+        //digest = hexEncode(sha.digest());\r
+       } catch (Throwable e){\r
+               e.printStackTrace(System.err);\r
+       }\r
+        return entries;\r
+    }\r
+}\r