]> gerrit.simantics Code Review - simantics/platform.git/blob - 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
1 package org.simantics.document.linking.report.html;\r
2 \r
3 import java.io.PrintStream;\r
4 import java.util.ArrayList;\r
5 import java.util.List;\r
6 \r
7 import org.simantics.document.linking.report.Table;\r
8 import org.simantics.document.linking.report.TableColumn;\r
9 import org.simantics.document.linking.report.TextItem;\r
10 import org.simantics.document.linking.report.TableColumn.Alignment;\r
11 import org.simantics.document.linking.report.TableRow;\r
12 \r
13 \r
14 public class HTMLTable extends HTMLTextElement implements Table {\r
15         HTMLDocument writer;\r
16         \r
17         List<TableColumn> columns = new ArrayList<TableColumn>();\r
18         \r
19         boolean linesVisible = true;\r
20         boolean headerVisible = true;\r
21         TextItem title = null;\r
22         int currentLine = 0;\r
23         PrintStream os;\r
24         \r
25         String classID;\r
26         \r
27         boolean copyStyle = false;\r
28         \r
29         public HTMLTable(HTMLDocument writer, boolean id) {\r
30                 super(id == false ? null : writer.getUniqueId(HTMLTable.class));\r
31                 this.writer = writer;\r
32                 this.os = writer.os;\r
33                 this.classID = writer.getUniqueId(this);\r
34         }\r
35         \r
36         public HTMLTable(HTMLDocument writer, PrintStream os, boolean id) {\r
37                 super(id == false ? null : writer.getUniqueId(HTMLTable.class));\r
38                 this.writer = writer;\r
39                 this.os = os;\r
40                 this.classID = writer.getUniqueId(this);\r
41         }\r
42         \r
43         public HTMLTable(HTMLTable table, boolean id) {\r
44                 super(id == false ? null : table.writer.getUniqueId(HTMLTable.class));\r
45                 this.writer = table.writer;\r
46                 this.os = table.os;\r
47                 this.columns.addAll(table.columns);\r
48                 this.classID = table.classID;\r
49                 this.copyStyle = true;\r
50         }\r
51         \r
52         @Override\r
53         public TableColumn addColumn(String name, double width) {\r
54                 TableColumn tc = new TableColumn(name, width);\r
55                 columns.add(tc);\r
56                 return tc;\r
57         }\r
58         \r
59         @Override\r
60         public List<TableColumn> getColumns() {\r
61                 return columns;\r
62         }\r
63         \r
64         @Override\r
65         public void setTitle(String title) {\r
66                 try {\r
67                         this.title = writer.newItem(TextItem.class);\r
68                         this.title.setText(title);\r
69                 } catch (Exception e) {\r
70                         \r
71                 }\r
72         }\r
73         \r
74         @Override\r
75         public void setTitle(TextItem title){\r
76                 this.title = title;\r
77         }\r
78         \r
79         @Override\r
80         public TableRow writeRow(String... line) throws Exception {\r
81                 List<String> list = new ArrayList<String>(line.length);\r
82                 for (String s : line)\r
83                         list.add(s);\r
84                 return writeRow(list);\r
85         }\r
86         \r
87         @Override\r
88         public TableRow writeRow(List<String> line) throws Exception {\r
89                 for (int i = 0; i < line.size(); i++) {\r
90                         line.set(i, escape(line.get(i)));\r
91                 }\r
92                 return writeRowRaw(line);\r
93         }\r
94         \r
95         @Override\r
96         public TableRow writeRowItem(List<TextItem> line) throws Exception {\r
97                 for (int i = 0; i < line.size(); i++) {\r
98                         TextItem text = line.get(i);\r
99                         if (text != null) {\r
100                                 text.setText(escape(text.getText()));\r
101                         }\r
102                 }\r
103                 return writeRowRaw2(line);\r
104         }\r
105         \r
106         @Override\r
107         public TableRow writeRowItem(TextItem... line) throws Exception {\r
108                 List<TextItem> list = new ArrayList<TextItem>(line.length);\r
109                 for (TextItem s : line)\r
110                         list.add(s);\r
111                 return writeRowItem(list);\r
112         }\r
113         \r
114         \r
115         public TableRow writeRowRaw(List<String> line) throws Exception {\r
116                 if (currentLine == 0)\r
117                         startTable();\r
118                 String clz = "\"";\r
119                 clz += currentLine % 2 == 0 ? "even" : "odd";\r
120                 clz += " "+currentTextSize;\r
121                 clz += "\"";\r
122                 os.println("    <tr class=" + clz+ ">");\r
123                 if (line.size() > 1) {\r
124                         for (int i = 0; i < line.size(); i++) {\r
125                                 String s = line.get(i);\r
126                                 Alignment a = columns.get(i).getAlignment();\r
127                                 String tdClass = "class=\"" +a.toString()+"\"";\r
128                                 \r
129                                 if (s != null)\r
130                                         os.println("      <td "+tdClass+">" + s + "</td>");\r
131                                 else\r
132                                         os.println("      <td> </td>");\r
133                         }\r
134                 } else if (line.size() == 1){\r
135                         String s = line.get(0);\r
136                         Alignment a = columns.get(0).getAlignment();\r
137                         String tdClass = "class=\"" +a.toString()+"\"";\r
138                         if (s != null)\r
139                                 os.println("      <td "+tdClass + " colspan=\"" + columns.size()+"\">" + s + "</td>");\r
140                         else\r
141                                 os.println("      <td colspan=\"" + columns.size()+"\"> </td>");\r
142                         \r
143                 } else {\r
144                         os.println("      <td colspan=\"" + columns.size()+"\"> </td>");\r
145                 }\r
146                 os.println("    </tr>");\r
147                 currentLine++;\r
148                 writer.currentLine++;\r
149                 return new HTMLTableRow(null);\r
150         }\r
151         \r
152         public TableRow writeRowRaw2(List<TextItem> line) throws Exception {\r
153                 if (currentLine == 0)\r
154                         startTable();\r
155                 String clz = "\"";\r
156                 clz += currentLine % 2 == 0 ? "even" : "odd";\r
157                 clz += " "+currentTextSize;\r
158                 clz += "\"";\r
159                 os.println("    <tr class=" + clz+ ">");\r
160                 if (line.size() > 1) {\r
161                         for (int i = 0; i < line.size(); i++) {\r
162                                 TextItem item = line.get(i);\r
163                                 Alignment a = columns.get(i).getAlignment();\r
164                                 String tdClass = "class=\"" +a.toString()+"\"";\r
165                                 \r
166                                 if (item != null && item.getText() != null)\r
167                                         os.println("      <td "+tdClass+">" + item.toString() + "</td>");\r
168                                 else\r
169                                         os.println("      <td> </td>");\r
170                         }\r
171                 } else if (line.size() == 1){\r
172                         String s = line.get(0).toString();\r
173                         Alignment a = columns.get(0).getAlignment();\r
174                         String tdClass = "class=\"" +a.toString()+"\"";\r
175                         if (s != null)\r
176                                 os.println("      <td "+tdClass + " colspan=\"" + columns.size()+"\">" + s + "</td>");\r
177                         else\r
178                                 os.println("      <td colspan=\"" + columns.size()+"\"> </td>");\r
179                         \r
180                 } else {\r
181                         os.println("      <td colspan=\"" + columns.size()+"\"> </td>");\r
182                 }\r
183                 os.println("    </tr>");\r
184                 currentLine++;\r
185                 writer.currentLine++;\r
186                 return new HTMLTableRow(null);\r
187         }\r
188 \r
189         @Override\r
190         public boolean isLinesVisible() {\r
191                 return linesVisible;\r
192         }\r
193         \r
194         @Override\r
195         public void setLinesVisible(boolean b) {\r
196                 this.linesVisible = b;\r
197         }\r
198         \r
199         @Override\r
200         public boolean isHeaderVisible() {\r
201                 return headerVisible;\r
202         }\r
203         \r
204         @Override\r
205         public void setHeaderVisible(boolean b) {\r
206                 this.headerVisible = b;\r
207         }\r
208         \r
209         void style() {\r
210                 for (int i = 0; i < columns.size(); i++) {\r
211                         os.println("table."+classID+" th.column"+i+" {");\r
212                         os.println("  width: " + ((int)(columns.get(i).getWidth()*100.0)) + "%;");\r
213                         os.println("}");\r
214                 }\r
215         }\r
216         \r
217         void startTable() {\r
218                 \r
219                 if (id != null) {\r
220                         os.println("<a id=\"" + id + "\"></a>");\r
221                 }       \r
222                 String clz = classID + " " + (linesVisible ? "lines" : "nolines");\r
223                 os.println("<table class=\"" + clz +"\" >");\r
224                 \r
225                 if (headerVisible) {\r
226                         if (title != null)\r
227                                 os.println("  <caption>"+title+"</caption>");\r
228                         os.println("  <thead>");\r
229                         os.println("    <tr class=MEDIUM>");\r
230                         int ci = 0;\r
231                         for (TableColumn c : columns) {\r
232                            os.println("      <th class=\"column" + ci +"\">" + escape(c.getName()) + "</th>");\r
233                            ci++;\r
234                         }\r
235                         os.println("    </tr>");\r
236                         os.println("  </thead>");\r
237                 }\r
238                 os.println("  <tbody>");\r
239         }\r
240         \r
241         void endTable() throws Exception{\r
242                 if (currentLine > 0) {\r
243                         os.println("  </tbody>");\r
244                         os.println("</table>");\r
245                         os.println("<br>");\r
246                         if (!copyStyle) {\r
247                                 os.println("<style>");\r
248                                 style();\r
249                                 os.println("</style>");\r
250                         }\r
251                 }\r
252         }\r
253         \r
254         private String escape(String s) {\r
255                 // TODO : escape string\r
256                 return s;\r
257         }\r
258         \r
259         \r
260 }\r