View Javadoc

1   /*
2    * $Id: TableMetaDocRenderer.java,v 1.4 2005/03/30 15:52:15 mch Exp $
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        //links
99        String[] links = column.getLinks();
100       for (int i = 0; i < links.length; i++) {
101       //   String name = links[i].getAttribute("Text");
102       //   String link = DomHelper.getValueOf(links[i]);
103 //         if ((name == null) || (name.length() ==0)) {
104 //            name = link;
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