1 package org.simantics.document.linking.report.html;
\r
3 import java.io.PrintStream;
\r
4 import java.util.ArrayList;
\r
5 import java.util.List;
\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
14 public class HTMLTable extends HTMLTextElement implements Table {
\r
15 HTMLDocument writer;
\r
17 List<TableColumn> columns = new ArrayList<TableColumn>();
\r
19 boolean linesVisible = true;
\r
20 boolean headerVisible = true;
\r
21 TextItem title = null;
\r
22 int currentLine = 0;
\r
27 boolean copyStyle = false;
\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
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
40 this.classID = writer.getUniqueId(this);
\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
47 this.columns.addAll(table.columns);
\r
48 this.classID = table.classID;
\r
49 this.copyStyle = true;
\r
53 public TableColumn addColumn(String name, double width) {
\r
54 TableColumn tc = new TableColumn(name, width);
\r
60 public List<TableColumn> getColumns() {
\r
65 public void setTitle(String title) {
\r
67 this.title = writer.newItem(TextItem.class);
\r
68 this.title.setText(title);
\r
69 } catch (Exception e) {
\r
75 public void setTitle(TextItem title){
\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
84 return writeRow(list);
\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
92 return writeRowRaw(line);
\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
100 text.setText(escape(text.getText()));
\r
103 return writeRowRaw2(line);
\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
111 return writeRowItem(list);
\r
115 public TableRow writeRowRaw(List<String> line) throws Exception {
\r
116 if (currentLine == 0)
\r
119 clz += currentLine % 2 == 0 ? "even" : "odd";
\r
120 clz += " "+currentTextSize;
\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
130 os.println(" <td "+tdClass+">" + s + "</td>");
\r
132 os.println(" <td> </td>");
\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
139 os.println(" <td "+tdClass + " colspan=\"" + columns.size()+"\">" + s + "</td>");
\r
141 os.println(" <td colspan=\"" + columns.size()+"\"> </td>");
\r
144 os.println(" <td colspan=\"" + columns.size()+"\"> </td>");
\r
146 os.println(" </tr>");
\r
148 writer.currentLine++;
\r
149 return new HTMLTableRow(null);
\r
152 public TableRow writeRowRaw2(List<TextItem> line) throws Exception {
\r
153 if (currentLine == 0)
\r
156 clz += currentLine % 2 == 0 ? "even" : "odd";
\r
157 clz += " "+currentTextSize;
\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
166 if (item != null && item.getText() != null)
\r
167 os.println(" <td "+tdClass+">" + item.toString() + "</td>");
\r
169 os.println(" <td> </td>");
\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
176 os.println(" <td "+tdClass + " colspan=\"" + columns.size()+"\">" + s + "</td>");
\r
178 os.println(" <td colspan=\"" + columns.size()+"\"> </td>");
\r
181 os.println(" <td colspan=\"" + columns.size()+"\"> </td>");
\r
183 os.println(" </tr>");
\r
185 writer.currentLine++;
\r
186 return new HTMLTableRow(null);
\r
190 public boolean isLinesVisible() {
\r
191 return linesVisible;
\r
195 public void setLinesVisible(boolean b) {
\r
196 this.linesVisible = b;
\r
200 public boolean isHeaderVisible() {
\r
201 return headerVisible;
\r
205 public void setHeaderVisible(boolean b) {
\r
206 this.headerVisible = b;
\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
217 void startTable() {
\r
220 os.println("<a id=\"" + id + "\"></a>");
\r
222 String clz = classID + " " + (linesVisible ? "lines" : "nolines");
\r
223 os.println("<table class=\"" + clz +"\" >");
\r
225 if (headerVisible) {
\r
227 os.println(" <caption>"+title+"</caption>");
\r
228 os.println(" <thead>");
\r
229 os.println(" <tr class=MEDIUM>");
\r
231 for (TableColumn c : columns) {
\r
232 os.println(" <th class=\"column" + ci +"\">" + escape(c.getName()) + "</th>");
\r
235 os.println(" </tr>");
\r
236 os.println(" </thead>");
\r
238 os.println(" <tbody>");
\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
247 os.println("<style>");
\r
249 os.println("</style>");
\r
254 private String escape(String s) {
\r
255 // TODO : escape string
\r