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.io.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 String title = null;
35 String comment = null;
36
37 /***
38 * Construct this wrapping the given stream. Writes out the first few tags
39 */
40 public HtmlTableWriter(TargetIdentifier target, String aTitle, String aComment, Principal user) throws IOException {
41
42 target.setMimeType(MimeTypes.HTML);
43
44 printOut = new PrintWriter(new BufferedWriter(target.openWriter()));
45
46 this.title = aTitle;
47 this.comment = aComment;
48 }
49
50 public void open() {
51 printOut.println("<HTML>");
52
53 printOut.println("<HEAD>");
54 printOut.println("<TITLE>"+title+"</TITLE>");
55 printOut.println("</HEAD>");
56
57 printOut.println("<BODY>");
58 printOut.println("<H1>"+title+"</H1>");
59 if (comment != null) {
60 printOut.println("<P>"+comment+"</P>");
61 }
62 }
63
64 /*** Produces text/html */
65 public String getMimeType() {
66 return MimeTypes.HTML;
67 }
68
69 public void startTable(ColumnInfo[] givenCols) throws IOException {
70
71 cols = givenCols;
72
73 printOut.println("<TABLE border='1'>");
74
75 printOut.println("</TR>");
76 printOut.println("<TH>ID</TH>");
77 for (int i = 0; i < cols.length; i++) {
78 if (cols[i] == null) {
79 throw new IllegalArgumentException("No information for column "+i);
80 }
81 printOut.print("<TH>"+cols[i].getId()+"</TH>");
82 }
83 printOut.println("</TR>");
84
85 printOut.println("</TR>");
86 printOut.println("<TH>Public Type</TH>");
87 for (int i = 0; i < cols.length; i++) {
88 printOut.print("<TH>"+cols[i].getPublicType()+"</TH>");
89 }
90 printOut.println("</TR>");
91
92 printOut.println("</TR>");
93 printOut.println("<TH>Java Class</TH>");
94 for (int i = 0; i < cols.length; i++) {
95 printOut.print("<TH>");
96 if (cols[i].getJavaType() != null) {
97 cols[i].getJavaType().getName();
98 }
99 printOut.print("</TH>");
100 }
101 printOut.println("</TR>");
102
103 printOut.println("</TR>");
104 printOut.println("<TH>Native Type</TH>");
105 for (int i = 0; i < cols.length; i++) {
106 printOut.print("<TH>"+cols[i].getBackType()+"</TH>");
107 }
108 printOut.println("</TR>");
109
110 printOut.println("</TR>");
111 printOut.println("<TH>UCD</TH>");
112 for (int i = 0; i < cols.length; i++) {
113 printOut.print("<TH>"+emptyIfNull(cols[i].getUcd("1"))+"</TH>");
114 }
115 printOut.println("</TR>");
116
117 printOut.println("</TR>");
118 printOut.println("<TH>Units</TH>");
119 for (int i = 0; i < cols.length; i++) {
120 if (cols[i].getUnits() == null) {
121 printOut.print("<TH/>");
122 }
123 else {
124 printOut.print("<TH>"+cols[i].getUnits().toString()+"</TH>");
125 }
126 }
127 printOut.println("</TR>");
128
129 rows = 0;
130
131 }
132
133
134 /*** Writes the given array of values out */
135 public void writeRow(Object[] colValues) throws IOException {
136
137 rows++;
138 printOut.println("<TR>");
139 printOut.println("<TH>"+rows+"</TH>");
140 String align = null;
141 for (int i=0;i<colValues.length;i++) {
142 align="";
143 if (cols[i].getJavaType() == Date.class) {
144 printOut.print("<TD align='right'>");
145 try {
146 printOut.print(dateFormat.format(colValues[i]));
147 }
148 catch (IllegalArgumentException iae) {
149 printOut.print(colValues[i]+" ["+iae.toString()+"]");
150 }
151 printOut.println("</TD>");
152 }
153 else {
154 if (cols[i].getJavaType() != null) {
155 if (Number.class.isAssignableFrom(cols[i].getJavaType())) {
156 align = "align='right'";
157 }
158 else {
159 align = "align='left'";
160 }
161 }
162 printOut.println("<TD "+align+">"+colValues[i]+"</TD>");
163 }
164 }
165 printOut.println("</TR>");
166
167 }
168
169 public void endTable() {
170 printOut.println("</TABLE>");
171 printOut.println("<p>"+rows+" Rows</p>");
172 }
173
174 /*** Closes writer - writes out the closing tags and closes wrapped stream
175 */
176 public void close() {
177
178 printOut.println("</BODY>");
179
180 printOut.println("</HTML>");
181 printOut.close();
182 }
183
184
185 /*** Abort writes out a line to show the table is incomplete */
186 public void abort() {
187 printOut.println("<tr><td> ------------------ Writing Aborted -----------------</td></tr> ");
188 close();
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
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271