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