]> gerrit.simantics Code Review - simantics/platform.git/blob - 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
1 /*******************************************************************************\r
2  * Copyright (c) 2012 Association for Decentralized Information Management in\r
3  * Industry THTH ry.\r
4  * All rights reserved. This program and the accompanying materials\r
5  * are made available under the terms of the Eclipse Public License v1.0\r
6  * which accompanies this distribution, and is available at\r
7  * http://www.eclipse.org/legal/epl-v10.html\r
8  *\r
9  * Contributors:\r
10  *     VTT Technical Research Centre of Finland - initial API and implementation\r
11  *******************************************************************************/\r
12 package org.simantics.modeling.template2d.ui.function;\r
13 \r
14 import java.awt.geom.AffineTransform;\r
15 import java.util.Collection;\r
16 import java.util.List;\r
17 import java.util.TreeMap;\r
18 \r
19 import org.simantics.databoard.Bindings;\r
20 import org.simantics.datatypes.literal.Font;\r
21 import org.simantics.datatypes.literal.RGB;\r
22 import org.simantics.db.ReadGraph;\r
23 import org.simantics.db.Resource;\r
24 import org.simantics.db.common.request.ResourceRead;\r
25 import org.simantics.db.common.utils.ListUtils;\r
26 import org.simantics.db.exception.DatabaseException;\r
27 import org.simantics.diagram.stubs.DiagramResource;\r
28 import org.simantics.layer0.Layer0;\r
29 import org.simantics.modeling.template2d.ontology.Template2dResource;\r
30 import org.simantics.scenegraph.ontology.ScenegraphResources;\r
31 \r
32 public class DrawingTemplateInfo extends ResourceRead<TreeMap<String, FlagTableInfo>> {\r
33     public static final Integer ALIGN_LEFT  = 0;\r
34     public static final Integer ALIGN_RIGHT = 1;\r
35     public static final float BASELINE_VERTICAL_OFFSET = 0.8F; // percent of line height\r
36 //      private String digest = "";\r
37 //\r
38 //Column\r
39 //      public String getDigest() {\r
40 //              return digest;\r
41 //      }\r
42 \r
43         public DrawingTemplateInfo(Resource template) {\r
44         super(template);\r
45     }\r
46 \r
47         /**\r
48          * The byte[] returned by MessageDigest does not have a nice\r
49          * textual representation, so some form of encoding is usually performed.\r
50          *\r
51          * This implementation follows the example of David Flanagan's book\r
52          * "Java In A Nutshell", and converts a byte array into a String\r
53          * of hex characters.\r
54          *\r
55          * Another popular alternative is to use a "Base64" encoding.\r
56          */\r
57 //      static private String hexEncode( byte[] aInput){\r
58 //              StringBuilder result = new StringBuilder();\r
59 //              char[] digits = {'0', '1', '2', '3', '4','5','6','7','8','9','a','b','c','d','e','f'};\r
60 //              for ( int idx = 0; idx < aInput.length; ++idx) {\r
61 //                      byte b = aInput[idx];\r
62 //                      result.append( digits[ (b&0xf0) >> 4 ] );\r
63 //                      result.append( digits[ b&0x0f] );\r
64 //              }\r
65 //              return result.toString();\r
66 //      }\r
67 \r
68         @Override\r
69         public TreeMap<String, FlagTableInfo> perform(ReadGraph g) throws DatabaseException {\r
70         TreeMap<String,FlagTableInfo> entries = new TreeMap<String,FlagTableInfo>();\r
71         try {\r
72         Layer0 L0 = Layer0.getInstance(g);\r
73         Template2dResource TEMPLATE2D = Template2dResource.getInstance(g);\r
74                 DiagramResource DIA = DiagramResource.getInstance(g);\r
75                 ScenegraphResources SG = ScenegraphResources.getInstance(g);\r
76                 //DatatypeResource DTR = DatatypeResource.getInstance(g);\r
77 \r
78 //        MessageDigest sha;\r
79 //        sha = MessageDigest.getInstance("SHA-1");\r
80 //        byte[] result =  sha.digest(info.serialize());\r
81 //        System.err.println(hexEncode(result));\r
82 \r
83 \r
84         Collection<Resource> slotTables = g.getObjects(resource, L0.ConsistsOf);\r
85         for (Resource slotTable:slotTables){\r
86                 if (!g.isInstanceOf(slotTable, TEMPLATE2D.FlagTable))\r
87                         continue;\r
88                 \r
89                 String name = g.getPossibleRelatedValue(slotTable, L0.HasName, Bindings.STRING);\r
90             double[] transform = g.getPossibleRelatedValue2(slotTable, DIA.Scenegraph_Composite_transform, Bindings.getBindingUnchecked(double[].class));\r
91                 Resource align = g.getPossibleObject(slotTable, TEMPLATE2D.FlagTable_HasAlignment);\r
92                 Float width = g.getPossibleRelatedValue(slotTable, TEMPLATE2D.FlagTable_HasWidth, Bindings.FLOAT);\r
93                 Float rowHeight = g.getPossibleRelatedValue(slotTable, TEMPLATE2D.FlagTable_HasRowHeigth, Bindings.FLOAT);\r
94                 Integer rowCount = g.getPossibleRelatedValue(slotTable, TEMPLATE2D.FlagTable_HasRowCount, Bindings.INTEGER);\r
95                 if (name == null || width == null || rowCount == null)\r
96                         continue;\r
97 \r
98                 FlagTableInfo table = new FlagTableInfo();\r
99                 table.setWidth(width);\r
100                 table.setRowCount(rowCount);\r
101                 table.setRowHeight(rowHeight);\r
102                 table.setTransform(transform);\r
103                 table.affineTransform = (transform != null) ? new AffineTransform(transform) : new AffineTransform();\r
104                 if (align != null) {\r
105                     if (align.equals(TEMPLATE2D.FlagTable_Alignment_Left))\r
106                         table.setAlignment(ALIGN_LEFT);\r
107                     if (align.equals(TEMPLATE2D.FlagTable_Alignment_Right))\r
108                         table.setAlignment(ALIGN_RIGHT);\r
109                 }\r
110                 entries.put(name, table);\r
111 \r
112                 // Columns information\r
113                         Resource res = g.getPossibleObject(slotTable, SG.Node_children);\r
114                         if(res == null || !g.isInstanceOf(res, L0.List))\r
115                                 continue;\r
116                         List<Resource> columns = ListUtils.toList(g, res);\r
117 \r
118                         Float weightTotal = 0.0F;\r
119                 for (Resource column:columns){\r
120                         if (!(g.isInstanceOf(column, TEMPLATE2D.FlagTable_Column) || g.isInstanceOf(column, TEMPLATE2D.FlagTable_RowNumberColumn)))\r
121                                 continue;\r
122 \r
123                         Float weight = g.getPossibleRelatedValue(column, TEMPLATE2D.FlagTable_Column_HasWeight, Bindings.FLOAT);\r
124                         if (weight == null)\r
125                                 continue;\r
126                         \r
127                         FlagTableColumnInfo col = new FlagTableColumnInfo(weight);\r
128                         table.addColumn(col);\r
129                         if (g.isInstanceOf(column, TEMPLATE2D.FlagTable_RowNumberColumn)) {\r
130                                 col.setType(FlagTableColumnInfo.TYPE_ROW_NUMBERING);\r
131 \r
132                                 Integer start = g.getPossibleRelatedValue(column, TEMPLATE2D.FlagTable_RowNumberColumn_start, Bindings.INTEGER);\r
133                                 col.setStartOffset(start);\r
134                         }\r
135                         \r
136                         weightTotal = weightTotal + weight; \r
137                                 //sha.update(weight.toString().getBytes());\r
138                         \r
139                         // Header and Data information\r
140                                 Resource res2 = g.getPossibleObject(column, SG.Node_children);\r
141                                 if(res2 == null || !g.isInstanceOf(res2, L0.List))\r
142                                         continue;\r
143                                 List<Resource> columnDatas = ListUtils.toList(g, res2);\r
144                         for (Resource columnData:columnDatas){\r
145                                 if (g.isInstanceOf(columnData, TEMPLATE2D.FlagTable_Column_Data)){\r
146                                 MonitorInfo monitorInfo = new MonitorInfo();\r
147                                         Font font = g.getPossibleRelatedValue2(columnData, DIA.Scenegraph_AbstractText_font, Bindings.getBindingUnchecked(Font.class));\r
148                                         if (font != null){\r
149                                                 monitorInfo.setFont(font);\r
150                                                 //sha.update(font.serialize());\r
151                                         }\r
152 \r
153                                         RGB.Integer color = g.getPossibleRelatedValue2(columnData, DIA.Scenegraph_AbstractText_color, RGB.Integer.BINDING/*Bindings.getBindingUnchecked(RGB.Integer.class)*/);\r
154                                         if (color != null){\r
155                                                 monitorInfo.setColor(color);\r
156                                                 //sha.update(color.serialize());\r
157                                         }\r
158 \r
159                                 String path = g.getRelatedValue(columnData, DIA.Scenegraph_Monitor_reference, Bindings.STRING);\r
160                                 if (path != null && path.length() > 0){\r
161                                         monitorInfo.setText(path);\r
162                                                 //sha.update(path.getBytes());\r
163                                 }\r
164                                 \r
165                             double[] dataTransform = g.getPossibleRelatedValue2(columnData, DIA.Scenegraph_AbstractText_transform, Bindings.getBindingUnchecked(double[].class));\r
166                                 if (dataTransform != null){\r
167                                         monitorInfo.setTransform(dataTransform);\r
168                                                 //sha.update(path.getBytes());\r
169                                 }\r
170 \r
171                                 monitorInfo.setResource(columnData);\r
172                                 //col.setColumnData(monitorInfo);\r
173                                 col.addColumnData(monitorInfo);\r
174                                 }\r
175                                 if (g.isInstanceOf(columnData, TEMPLATE2D.FlagTable_Column_Header)){\r
176                                 MonitorInfo monitorInfo = new MonitorInfo();\r
177                                         Font font = g.getPossibleRelatedValue2(columnData, DIA.Scenegraph_AbstractText_font, Bindings.getBindingUnchecked(Font.class));\r
178                                         if (font != null){\r
179                                                 monitorInfo.setFont(font);\r
180                                                 //sha.update(font.serialize());\r
181                                         }\r
182 \r
183                                         RGB.Integer color = g.getPossibleRelatedValue2(columnData, DIA.Scenegraph_AbstractText_color, RGB.Integer.BINDING/*Bindings.getBindingUnchecked(RGB.Integer.class)*/);\r
184                                         if (color != null){\r
185                                                 monitorInfo.setColor(color);\r
186                                                 //sha.update(color.serialize());\r
187                                         }\r
188 \r
189                                 String path = g.getRelatedValue(columnData, DIA.Scenegraph_Monitor_reference, Bindings.STRING);\r
190                                 if (path != null && path.length() > 0){\r
191                                         monitorInfo.setText(path);\r
192                                                 //sha.update(path.getBytes());\r
193                                 }\r
194                                 \r
195                             double[] dataTransform = g.getPossibleRelatedValue2(columnData, DIA.Scenegraph_AbstractText_transform, Bindings.getBindingUnchecked(double[].class));\r
196                                 if (dataTransform != null){\r
197                                         monitorInfo.setTransform(dataTransform);\r
198                                                 //sha.update(path.getBytes());\r
199                                 }\r
200 \r
201                                 monitorInfo.setResource(columnData);\r
202                                 //col.setColumnHeader(monitorInfo);\r
203                                 col.addColumnHeader(monitorInfo);\r
204                                 }\r
205                         }\r
206                 }\r
207                 table.setWeightTotal(weightTotal);\r
208         }\r
209         //digest = hexEncode(sha.digest());\r
210         } catch (Throwable e){\r
211                 e.printStackTrace(System.err);\r
212         }\r
213         return entries;\r
214     }\r
215 }\r