1
2
3
4 package org.astrogrid.tableserver.metadata;
5
6 import java.io.IOException;
7 import org.astrogrid.tableserver.metadata.ColumnInfo;
8 import org.astrogrid.tableserver.metadata.TableInfo;
9 import org.astrogrid.tableserver.metadata.TableMetaDocInterpreter;
10 import org.astrogrid.dataservice.service.DataServer;
11 import org.astrogrid.dataservice.service.ServletHelper;
12 import org.astrogrid.ucd.UcdDictionary;
13 import org.astrogrid.units.UnitDictionary;
14 import org.astrogrid.xml.DomHelper;
15 import org.w3c.dom.Element;
16 import org.w3c.dom.NodeList;
17 import org.astrogrid.dataservice.metadata.MetadataException;
18
19
20 /***
21 * Renders an RdbmsMetadata resource document in HTML suitable for including
22 * within the body element. We could probably use
23 * an XSL sheet for this, but I can't be bothered as this is easier for me :-)
24 */
25
26 public class TableMetaDocRenderer {
27
28 public String renderMetaDoc() {
29 StringBuffer html = new StringBuffer();
30
31 html.append("<h2>Table Meta-document for "+DataServer.getDatacenterName()+"</h2>");
32
33 Element metadoc = null;
34 try {
35 TableMetaDocInterpreter interpreter = new TableMetaDocInterpreter();
36
37 String[] catalogs = interpreter.getCatalogs();
38
39 for (int cat = 0; cat < catalogs.length; cat++) {
40 TableInfo[] tables = interpreter.getTables(catalogs[cat]);
41 for (int table=0;table<tables.length;table++) {
42 renderTable(html, interpreter, tables[table]);
43 }
44 }
45
46 return html.toString();
47 }
48 catch (IOException ioe) {
49 html.append(ServletHelper.exceptionAsHtml("Generating Rdbms Table Metadoc ", ioe, null));
50 return html.toString();
51 }
52 }
53
54 public void renderTable(StringBuffer html, TableMetaDocInterpreter interpreter, TableInfo table) throws MetadataException {
55 html.append(
56 "<h3>Table '"+table.getName()+"'</h3>"+
57 "<p>"+emptyIfNull(table.getDescription()) +"</p>"+
58 "<p>"+
59 "<table border=1 summary='Column details for table "+table.getName()+"' cellpadding='5%'>"+
60 "<tr>"+
61 "<th>Column</th>"+
62 "<th>Type</th>"+
63 "<th><a href='"+ UnitDictionary.UNIT_REF+"'>Units</a></th>"+
64 "<th>Dim Eq</th>"+
65 "<th>Scale</th>"+
66 "<th><a href='"+ UcdDictionary.UCD1REF+"'>UCD1</a></th>"+
67 "<th><a href='"+ UcdDictionary.UCD1PREF+"'>UCD1+</a></th>"+
68 "<th>Error</th>"+
69 "<th>Description</th>"+
70 "<th>Links</th>"+
71 "</tr>");
72
73 ColumnInfo[] columns = interpreter.getColumns(table.getDataset(), table.getName());
74
75 for (int col=0;col<columns.length;col++) {
76
77 renderColumn(html, columns[col]);
78 }
79
80 html.append(
81 "</table>");
82 }
83
84 public void renderColumn(StringBuffer html, ColumnInfo column) {
85
86 html.append(
87 "<tr>"+
88 "<th>"+column.getName() +"</th>"+
89 "<td>"+emptyIfNull(column.getPublicType())+"</td>"+
90 "<td>"+column.getUnits().toString() +"</td>"+
91 "<td>"+column.getUnits().getDimEq() +"</td>"+
92 "<td>"+column.getUnits().getDimScale() +"</td>"+
93 "<td>"+emptyIfNull(column.getUcd("1")) +"</td>"+
94 "<td>"+emptyIfNull(column.getUcd("1+")) +"</td>"+
95 "<td>"+emptyIfNull(column.getErrorField()) +"</td>"+
96 "<td>"+emptyIfNull(column.getDescription()) +"</td>");
97
98
99 String[] links = column.getLinks();
100 for (int i = 0; i < links.length; i++) {
101
102
103
104
105
106 html.append(
107 "<td><a href='"+links[i]+"'>"+links[i]+"</a></td>");
108 }
109
110 html.append(
111 "</tr>");
112 }
113
114 public static String emptyIfNull(String s) {
115 if (s==null) {
116 return "";
117 }
118 else return s;
119 }
120
121 }
122