1
2
3
4
5
6
7 package org.astrogrid.tableserver.out;
8 import java.io.BufferedWriter;
9 import java.io.IOException;
10 import java.io.PrintWriter;
11 import java.security.Principal;
12 import java.util.Date;
13 import org.apache.commons.logging.Log;
14 import org.astrogrid.slinger.mime.MimeTypes;
15 import org.astrogrid.slinger.targets.TargetIdentifier;
16 import org.astrogrid.tableserver.metadata.ColumnInfo;
17
18 /***
19 * For writing out tables in html form
20 *
21 * @author M Hill
22 */
23
24 public class HtmlTableWriter extends AsciiTableSupport {
25
26 protected static final Log log = org.apache.commons.logging.LogFactory.getLog(HtmlTableWriter.class);
27
28 PrintWriter printOut = null;
29
30 long rows = 0;
31
32 ColumnInfo[] cols = null;
33
34 /***
35 * Construct this wrapping the given stream. Writes out the first few tags
36 */
37 public HtmlTableWriter(TargetIdentifier target, String title, String comment, Principal user) throws IOException {
38
39 target.setMimeType(MimeTypes.HTML, user);
40
41 printOut = new PrintWriter(new BufferedWriter(target.resolveWriter(user)));
42
43 printOut.println("<HTML>");
44
45 printOut.println("<HEAD>");
46 printOut.println("<TITLE>"+title+"</TITLE>");
47 printOut.println("</HEAD>");
48
49 printOut.println("<BODY>");
50 printOut.println("<H1>"+title+"</H1>");
51 if (comment != null) {
52 printOut.println("<P>"+comment+"</P>");
53 }
54 }
55
56 /*** Closes writer - writes out the closing tags and closes wrapped stream
57 */
58 public void close() {
59
60 printOut.println("</BODY>");
61
62 printOut.println("</HTML>");
63 printOut.close();
64 }
65
66 /*** Produces text/html */
67 public String getMimeType() {
68 return MimeTypes.HTML;
69 }
70
71 public void startTable(ColumnInfo[] givenCols) throws IOException {
72
73 cols = givenCols;
74
75 printOut.println("<TABLE border='1'>");
76
77 printOut.println("</TR>");
78 printOut.println("<TH>ID</TH>");
79 for (int i = 0; i < cols.length; i++) {
80 if (cols[i] == null) {
81 throw new IllegalArgumentException("No information for column "+i);
82 }
83 printOut.print("<TH>"+cols[i].getId()+"</TH>");
84 }
85 printOut.println("</TR>");
86
87 printOut.println("</TR>");
88 printOut.println("<TH>Public Type</TH>");
89 for (int i = 0; i < cols.length; i++) {
90 printOut.print("<TH>"+cols[i].getPublicType()+"</TH>");
91 }
92 printOut.println("</TR>");
93
94 printOut.println("</TR>");
95 printOut.println("<TH>Java Class</TH>");
96 for (int i = 0; i < cols.length; i++) {
97 printOut.print("<TH>");
98 if (cols[i].getJavaType() != null) {
99 cols[i].getJavaType().getName();
100 }
101 printOut.print("</TH>");
102 }
103 printOut.println("</TR>");
104
105 printOut.println("</TR>");
106 printOut.println("<TH>Native Type</TH>");
107 for (int i = 0; i < cols.length; i++) {
108 printOut.print("<TH>"+cols[i].getBackType()+"</TH>");
109 }
110 printOut.println("</TR>");
111
112 printOut.println("</TR>");
113 printOut.println("<TH>UCD</TH>");
114 for (int i = 0; i < cols.length; i++) {
115 printOut.print("<TH>"+emptyIfNull(cols[i].getUcd("1"))+"</TH>");
116 }
117 printOut.println("</TR>");
118
119 printOut.println("</TR>");
120 printOut.println("<TH>Units</TH>");
121 for (int i = 0; i < cols.length; i++) {
122 if (cols[i].getUnits() == null) {
123 printOut.print("<TH/>");
124 }
125 else {
126 printOut.print("<TH>"+cols[i].getUnits().toString()+"</TH>");
127 }
128 }
129 printOut.println("</TR>");
130
131 rows = 0;
132
133 }
134
135
136 /*** Writes the given array of values out */
137 public void writeRow(Object[] colValues) throws IOException {
138
139 rows++;
140 printOut.println("<TR>");
141 printOut.println("<TH>"+rows+"</TH>");
142 String align = null;
143 for (int i=0;i<colValues.length;i++) {
144 align="";
145 if (cols[i].getJavaType() == Date.class) {
146 printOut.print("<TD align='right'>");
147 try {
148 printOut.print(dateFormat.format(colValues[i]));
149 }
150 catch (IllegalArgumentException iae) {
151 printOut.print(colValues[i]+" ["+iae.toString()+"]");
152 }
153 printOut.println("</TD>");
154 }
155 else {
156 if (cols[i].getJavaType() != null) {
157 if (Number.class.isAssignableFrom(cols[i].getJavaType())) {
158 align = "align='right'";
159 }
160 else {
161 align = "align='left'";
162 }
163 }
164 printOut.println("<TD "+align+">"+colValues[i]+"</TD>");
165 }
166 }
167 printOut.println("</TR>");
168
169 }
170
171 public void endTable() {
172 printOut.println("</TABLE>");
173 printOut.println("<p>"+rows+" Rows</p>");
174 }
175
176
177 /*** Abort writes out a line to show the table is incomplete */
178 public void abort() {
179 printOut.println("<tr><td> ------------------ Writing Aborted -----------------</td></tr> ");
180 close();
181 }
182
183
184 }
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254