-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
+package org.simantics.document.linking.report.html;
+
+import java.io.PrintStream;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.simantics.document.linking.report.Table;
+import org.simantics.document.linking.report.TableColumn;
+import org.simantics.document.linking.report.TextItem;
+import org.simantics.document.linking.report.TableColumn.Alignment;
+import org.simantics.document.linking.report.TableRow;
+
+
+public class HTMLTable extends HTMLTextElement implements Table {
+ HTMLDocument writer;
+
+ List<TableColumn> columns = new ArrayList<TableColumn>();
+
+ boolean linesVisible = true;
+ boolean headerVisible = true;
+ TextItem title = null;
+ int currentLine = 0;
+ PrintStream os;
+
+ String classID;
+
+ boolean copyStyle = false;
+
+ public HTMLTable(HTMLDocument writer, boolean id) {
+ super(id == false ? null : writer.getUniqueId(HTMLTable.class));
+ this.writer = writer;
+ this.os = writer.os;
+ this.classID = writer.getUniqueId(this);
+ }
+
+ public HTMLTable(HTMLDocument writer, PrintStream os, boolean id) {
+ super(id == false ? null : writer.getUniqueId(HTMLTable.class));
+ this.writer = writer;
+ this.os = os;
+ this.classID = writer.getUniqueId(this);
+ }
+
+ public HTMLTable(HTMLTable table, boolean id) {
+ super(id == false ? null : table.writer.getUniqueId(HTMLTable.class));
+ this.writer = table.writer;
+ this.os = table.os;
+ this.columns.addAll(table.columns);
+ this.classID = table.classID;
+ this.copyStyle = true;
+ }
+
+ @Override
+ public TableColumn addColumn(String name, double width) {
+ TableColumn tc = new TableColumn(name, width);
+ columns.add(tc);
+ return tc;
+ }
+
+ @Override
+ public List<TableColumn> getColumns() {
+ return columns;
+ }
+
+ @Override
+ public void setTitle(String title) {
+ try {
+ this.title = writer.newItem(TextItem.class);
+ this.title.setText(title);
+ } catch (Exception e) {
+
+ }
+ }
+
+ @Override
+ public void setTitle(TextItem title){
+ this.title = title;
+ }
+
+ @Override
+ public TableRow writeRow(String... line) throws Exception {
+ List<String> list = new ArrayList<String>(line.length);
+ for (String s : line)
+ list.add(s);
+ return writeRow(list);
+ }
+
+ @Override
+ public TableRow writeRow(List<String> line) throws Exception {
+ for (int i = 0; i < line.size(); i++) {
+ line.set(i, escape(line.get(i)));
+ }
+ return writeRowRaw(line);
+ }
+
+ @Override
+ public TableRow writeRowItem(List<TextItem> line) throws Exception {
+ for (int i = 0; i < line.size(); i++) {
+ TextItem text = line.get(i);
+ if (text != null) {
+ text.setText(escape(text.getText()));
+ }
+ }
+ return writeRowRaw2(line);
+ }
+
+ @Override
+ public TableRow writeRowItem(TextItem... line) throws Exception {
+ List<TextItem> list = new ArrayList<TextItem>(line.length);
+ for (TextItem s : line)
+ list.add(s);
+ return writeRowItem(list);
+ }
+
+
+ public TableRow writeRowRaw(List<String> line) throws Exception {
+ if (currentLine == 0)
+ startTable();
+ String clz = "\""; //$NON-NLS-1$
+ clz += currentLine % 2 == 0 ? "even" : "odd"; //$NON-NLS-1$ //$NON-NLS-2$
+ clz += " "+currentTextSize; //$NON-NLS-1$
+ clz += "\""; //$NON-NLS-1$
+ os.println(" <tr class=" + clz+ ">"); //$NON-NLS-1$ //$NON-NLS-2$
+ if (line.size() > 1) {
+ for (int i = 0; i < line.size(); i++) {
+ String s = line.get(i);
+ Alignment a = columns.get(i).getAlignment();
+ String tdClass = "class=\"" +a.toString()+"\""; //$NON-NLS-1$ //$NON-NLS-2$
+
+ if (s != null)
+ os.println(" <td "+tdClass+">" + s + "</td>"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+ else
+ os.println(" <td> </td>"); //$NON-NLS-1$
+ }
+ } else if (line.size() == 1){
+ String s = line.get(0);
+ Alignment a = columns.get(0).getAlignment();
+ String tdClass = "class=\"" +a.toString()+"\""; //$NON-NLS-1$ //$NON-NLS-2$
+ if (s != null)
+ os.println(" <td "+tdClass + " colspan=\"" + columns.size()+"\">" + s + "</td>"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
+ else
+ os.println(" <td colspan=\"" + columns.size()+"\"> </td>"); //$NON-NLS-1$ //$NON-NLS-2$
+
+ } else {
+ os.println(" <td colspan=\"" + columns.size()+"\"> </td>"); //$NON-NLS-1$ //$NON-NLS-2$
+ }
+ os.println(" </tr>"); //$NON-NLS-1$
+ currentLine++;
+ writer.currentLine++;
+ return new HTMLTableRow(null);
+ }
+
+ public TableRow writeRowRaw2(List<TextItem> line) throws Exception {
+ if (currentLine == 0)
+ startTable();
+ String clz = "\""; //$NON-NLS-1$
+ clz += currentLine % 2 == 0 ? "even" : "odd"; //$NON-NLS-1$ //$NON-NLS-2$
+ clz += " "+currentTextSize; //$NON-NLS-1$
+ clz += "\""; //$NON-NLS-1$
+ os.println(" <tr class=" + clz+ ">"); //$NON-NLS-1$ //$NON-NLS-2$
+ if (line.size() > 1) {
+ for (int i = 0; i < line.size(); i++) {
+ TextItem item = line.get(i);
+ Alignment a = columns.get(i).getAlignment();
+ String tdClass = "class=\"" +a.toString()+"\""; //$NON-NLS-1$ //$NON-NLS-2$
+
+ if (item != null && item.getText() != null)
+ os.println(" <td "+tdClass+">" + item.toString() + "</td>"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+ else
+ os.println(" <td> </td>"); //$NON-NLS-1$
+ }
+ } else if (line.size() == 1){
+ String s = line.get(0).toString();
+ Alignment a = columns.get(0).getAlignment();
+ String tdClass = "class=\"" +a.toString()+"\""; //$NON-NLS-1$ //$NON-NLS-2$
+ if (s != null)
+ os.println(" <td "+tdClass + " colspan=\"" + columns.size()+"\">" + s + "</td>"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
+ else
+ os.println(" <td colspan=\"" + columns.size()+"\"> </td>"); //$NON-NLS-1$ //$NON-NLS-2$
+
+ } else {
+ os.println(" <td colspan=\"" + columns.size()+"\"> </td>"); //$NON-NLS-1$ //$NON-NLS-2$
+ }
+ os.println(" </tr>"); //$NON-NLS-1$
+ currentLine++;
+ writer.currentLine++;
+ return new HTMLTableRow(null);
+ }
+
+ @Override
+ public boolean isLinesVisible() {
+ return linesVisible;
+ }
+
+ @Override
+ public void setLinesVisible(boolean b) {
+ this.linesVisible = b;
+ }
+
+ @Override
+ public boolean isHeaderVisible() {
+ return headerVisible;
+ }
+
+ @Override
+ public void setHeaderVisible(boolean b) {
+ this.headerVisible = b;
+ }
+
+ void style() {
+ for (int i = 0; i < columns.size(); i++) {
+ os.println("table."+classID+" th.column"+i+" {"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+ os.println(" width: " + ((int)(columns.get(i).getWidth()*100.0)) + "%;"); //$NON-NLS-1$ //$NON-NLS-2$
+ os.println("}"); //$NON-NLS-1$
+ }
+ }
+
+ void startTable() {
+
+ if (id != null) {
+ os.println("<a id=\"" + id + "\"></a>"); //$NON-NLS-1$ //$NON-NLS-2$
+ }
+ String clz = classID + " " + (linesVisible ? "lines" : "nolines"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+ os.println("<table class=\"" + clz +"\" >"); //$NON-NLS-1$ //$NON-NLS-2$
+
+ if (headerVisible) {
+ if (title != null)
+ os.println(" <caption>"+title+"</caption>"); //$NON-NLS-1$ //$NON-NLS-2$
+ os.println(" <thead>"); //$NON-NLS-1$
+ os.println(" <tr class=MEDIUM>"); //$NON-NLS-1$
+ int ci = 0;
+ for (TableColumn c : columns) {
+ os.println(" <th class=\"column" + ci +"\">" + escape(c.getName()) + "</th>"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+ ci++;
+ }
+ os.println(" </tr>"); //$NON-NLS-1$
+ os.println(" </thead>"); //$NON-NLS-1$
+ }
+ os.println(" <tbody>"); //$NON-NLS-1$
+ }
+
+ void endTable() throws Exception{
+ if (currentLine > 0) {
+ os.println(" </tbody>"); //$NON-NLS-1$
+ os.println("</table>"); //$NON-NLS-1$
+ os.println("<br>"); //$NON-NLS-1$
+ if (!copyStyle) {
+ os.println("<style>"); //$NON-NLS-1$
+ style();
+ os.println("</style>"); //$NON-NLS-1$
+ }
+ }
+ }
+
+ private String escape(String s) {
+ // TODO : escape string
+ return s;
+ }
+
+
+}