]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.document.linking.ui/src/org/simantics/document/linking/report/html/HTMLTable.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.document.linking.ui / src / org / simantics / document / linking / report / html / HTMLTable.java
diff --git a/bundles/org.simantics.document.linking.ui/src/org/simantics/document/linking/report/html/HTMLTable.java b/bundles/org.simantics.document.linking.ui/src/org/simantics/document/linking/report/html/HTMLTable.java
new file mode 100644 (file)
index 0000000..20e74e0
--- /dev/null
@@ -0,0 +1,260 @@
+package org.simantics.document.linking.report.html;\r
+\r
+import java.io.PrintStream;\r
+import java.util.ArrayList;\r
+import java.util.List;\r
+\r
+import org.simantics.document.linking.report.Table;\r
+import org.simantics.document.linking.report.TableColumn;\r
+import org.simantics.document.linking.report.TextItem;\r
+import org.simantics.document.linking.report.TableColumn.Alignment;\r
+import org.simantics.document.linking.report.TableRow;\r
+\r
+\r
+public class HTMLTable extends HTMLTextElement implements Table {\r
+       HTMLDocument writer;\r
+       \r
+       List<TableColumn> columns = new ArrayList<TableColumn>();\r
+       \r
+       boolean linesVisible = true;\r
+       boolean headerVisible = true;\r
+       TextItem title = null;\r
+       int currentLine = 0;\r
+       PrintStream os;\r
+       \r
+       String classID;\r
+       \r
+       boolean copyStyle = false;\r
+       \r
+       public HTMLTable(HTMLDocument writer, boolean id) {\r
+               super(id == false ? null : writer.getUniqueId(HTMLTable.class));\r
+               this.writer = writer;\r
+               this.os = writer.os;\r
+               this.classID = writer.getUniqueId(this);\r
+       }\r
+       \r
+       public HTMLTable(HTMLDocument writer, PrintStream os, boolean id) {\r
+               super(id == false ? null : writer.getUniqueId(HTMLTable.class));\r
+               this.writer = writer;\r
+               this.os = os;\r
+               this.classID = writer.getUniqueId(this);\r
+       }\r
+       \r
+       public HTMLTable(HTMLTable table, boolean id) {\r
+               super(id == false ? null : table.writer.getUniqueId(HTMLTable.class));\r
+               this.writer = table.writer;\r
+               this.os = table.os;\r
+               this.columns.addAll(table.columns);\r
+               this.classID = table.classID;\r
+               this.copyStyle = true;\r
+       }\r
+       \r
+       @Override\r
+       public TableColumn addColumn(String name, double width) {\r
+               TableColumn tc = new TableColumn(name, width);\r
+               columns.add(tc);\r
+               return tc;\r
+       }\r
+       \r
+       @Override\r
+       public List<TableColumn> getColumns() {\r
+               return columns;\r
+       }\r
+       \r
+       @Override\r
+       public void setTitle(String title) {\r
+               try {\r
+                       this.title = writer.newItem(TextItem.class);\r
+                       this.title.setText(title);\r
+               } catch (Exception e) {\r
+                       \r
+               }\r
+       }\r
+       \r
+       @Override\r
+       public void setTitle(TextItem title){\r
+               this.title = title;\r
+       }\r
+       \r
+       @Override\r
+       public TableRow writeRow(String... line) throws Exception {\r
+               List<String> list = new ArrayList<String>(line.length);\r
+               for (String s : line)\r
+                       list.add(s);\r
+               return writeRow(list);\r
+       }\r
+       \r
+       @Override\r
+       public TableRow writeRow(List<String> line) throws Exception {\r
+               for (int i = 0; i < line.size(); i++) {\r
+                       line.set(i, escape(line.get(i)));\r
+               }\r
+               return writeRowRaw(line);\r
+       }\r
+       \r
+       @Override\r
+       public TableRow writeRowItem(List<TextItem> line) throws Exception {\r
+               for (int i = 0; i < line.size(); i++) {\r
+                       TextItem text = line.get(i);\r
+                       if (text != null) {\r
+                               text.setText(escape(text.getText()));\r
+                       }\r
+               }\r
+               return writeRowRaw2(line);\r
+       }\r
+       \r
+       @Override\r
+       public TableRow writeRowItem(TextItem... line) throws Exception {\r
+               List<TextItem> list = new ArrayList<TextItem>(line.length);\r
+               for (TextItem s : line)\r
+                       list.add(s);\r
+               return writeRowItem(list);\r
+       }\r
+       \r
+       \r
+       public TableRow writeRowRaw(List<String> line) throws Exception {\r
+               if (currentLine == 0)\r
+                       startTable();\r
+               String clz = "\"";\r
+               clz += currentLine % 2 == 0 ? "even" : "odd";\r
+               clz += " "+currentTextSize;\r
+               clz += "\"";\r
+               os.println("    <tr class=" + clz+ ">");\r
+               if (line.size() > 1) {\r
+                       for (int i = 0; i < line.size(); i++) {\r
+                               String s = line.get(i);\r
+                               Alignment a = columns.get(i).getAlignment();\r
+                               String tdClass = "class=\"" +a.toString()+"\"";\r
+                               \r
+                               if (s != null)\r
+                                       os.println("      <td "+tdClass+">" + s + "</td>");\r
+                               else\r
+                                       os.println("      <td> </td>");\r
+                       }\r
+               } else if (line.size() == 1){\r
+                       String s = line.get(0);\r
+                       Alignment a = columns.get(0).getAlignment();\r
+                       String tdClass = "class=\"" +a.toString()+"\"";\r
+                       if (s != null)\r
+                               os.println("      <td "+tdClass + " colspan=\"" + columns.size()+"\">" + s + "</td>");\r
+                       else\r
+                               os.println("      <td colspan=\"" + columns.size()+"\"> </td>");\r
+                       \r
+               } else {\r
+                       os.println("      <td colspan=\"" + columns.size()+"\"> </td>");\r
+               }\r
+               os.println("    </tr>");\r
+               currentLine++;\r
+               writer.currentLine++;\r
+               return new HTMLTableRow(null);\r
+       }\r
+       \r
+       public TableRow writeRowRaw2(List<TextItem> line) throws Exception {\r
+               if (currentLine == 0)\r
+                       startTable();\r
+               String clz = "\"";\r
+               clz += currentLine % 2 == 0 ? "even" : "odd";\r
+               clz += " "+currentTextSize;\r
+               clz += "\"";\r
+               os.println("    <tr class=" + clz+ ">");\r
+               if (line.size() > 1) {\r
+                       for (int i = 0; i < line.size(); i++) {\r
+                               TextItem item = line.get(i);\r
+                               Alignment a = columns.get(i).getAlignment();\r
+                               String tdClass = "class=\"" +a.toString()+"\"";\r
+                               \r
+                               if (item != null && item.getText() != null)\r
+                                       os.println("      <td "+tdClass+">" + item.toString() + "</td>");\r
+                               else\r
+                                       os.println("      <td> </td>");\r
+                       }\r
+               } else if (line.size() == 1){\r
+                       String s = line.get(0).toString();\r
+                       Alignment a = columns.get(0).getAlignment();\r
+                       String tdClass = "class=\"" +a.toString()+"\"";\r
+                       if (s != null)\r
+                               os.println("      <td "+tdClass + " colspan=\"" + columns.size()+"\">" + s + "</td>");\r
+                       else\r
+                               os.println("      <td colspan=\"" + columns.size()+"\"> </td>");\r
+                       \r
+               } else {\r
+                       os.println("      <td colspan=\"" + columns.size()+"\"> </td>");\r
+               }\r
+               os.println("    </tr>");\r
+               currentLine++;\r
+               writer.currentLine++;\r
+               return new HTMLTableRow(null);\r
+       }\r
+\r
+       @Override\r
+       public boolean isLinesVisible() {\r
+               return linesVisible;\r
+       }\r
+       \r
+       @Override\r
+       public void setLinesVisible(boolean b) {\r
+               this.linesVisible = b;\r
+       }\r
+       \r
+       @Override\r
+       public boolean isHeaderVisible() {\r
+               return headerVisible;\r
+       }\r
+       \r
+       @Override\r
+       public void setHeaderVisible(boolean b) {\r
+               this.headerVisible = b;\r
+       }\r
+       \r
+       void style() {\r
+               for (int i = 0; i < columns.size(); i++) {\r
+                       os.println("table."+classID+" th.column"+i+" {");\r
+                       os.println("  width: " + ((int)(columns.get(i).getWidth()*100.0)) + "%;");\r
+                       os.println("}");\r
+               }\r
+       }\r
+       \r
+       void startTable() {\r
+               \r
+               if (id != null) {\r
+                       os.println("<a id=\"" + id + "\"></a>");\r
+               }       \r
+               String clz = classID + " " + (linesVisible ? "lines" : "nolines");\r
+               os.println("<table class=\"" + clz +"\" >");\r
+               \r
+               if (headerVisible) {\r
+                       if (title != null)\r
+                               os.println("  <caption>"+title+"</caption>");\r
+                       os.println("  <thead>");\r
+                       os.println("    <tr class=MEDIUM>");\r
+                       int ci = 0;\r
+                       for (TableColumn c : columns) {\r
+                          os.println("      <th class=\"column" + ci +"\">" + escape(c.getName()) + "</th>");\r
+                          ci++;\r
+                       }\r
+                       os.println("    </tr>");\r
+                       os.println("  </thead>");\r
+               }\r
+               os.println("  <tbody>");\r
+       }\r
+       \r
+       void endTable() throws Exception{\r
+               if (currentLine > 0) {\r
+                       os.println("  </tbody>");\r
+                       os.println("</table>");\r
+                       os.println("<br>");\r
+                       if (!copyStyle) {\r
+                               os.println("<style>");\r
+                               style();\r
+                               os.println("</style>");\r
+                       }\r
+               }\r
+       }\r
+       \r
+       private String escape(String s) {\r
+               // TODO : escape string\r
+               return s;\r
+       }\r
+       \r
+       \r
+}\r