View Javadoc

1   /*
2    * $Id: HtmlTableWriter.java,v 1.7 2005/05/27 16:21:02 clq2 Exp $
3    *
4    * (C) Copyright Astrogrid...
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; //remember column info for printing rows
72        
73        printOut.println("<TABLE border='1'>");  //it's wrong to put formatting in here, but the default seems to be 0
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  $Log: HtmlTableWriter.java,v $
196  Revision 1.7  2005/05/27 16:21:02  clq2
197  mchv_1
198 
199  Revision 1.6.8.2  2005/05/13 16:56:32  mch
200  'some changes'
201 
202  Revision 1.6.8.1  2005/04/21 17:20:51  mch
203  Fixes to output types
204 
205  Revision 1.6  2005/03/31 15:06:16  mch
206  Fixes and workarounds for null values, misisng metadoc columns
207 
208  Revision 1.5  2005/03/31 12:10:28  mch
209  Fixes and workarounds for null values, misisng metadoc columns
210 
211  Revision 1.4  2005/03/30 21:51:25  mch
212  Fix to return Votable fits list for url list
213 
214  Revision 1.3  2005/03/30 15:52:15  mch
215  debug etc for bad sql types
216 
217  Revision 1.2  2005/03/30 15:18:55  mch
218  debug etc for bad sql types
219 
220  Revision 1.1  2005/03/21 18:45:55  mch
221  Naughty big lump of changes
222 
223  Revision 1.3  2005/03/10 15:13:48  mch
224  Seperating out fits, table and xdb servers
225 
226  Revision 1.2  2005/03/10 13:49:52  mch
227  Updating metadata
228 
229  Revision 1.1.1.1  2005/02/17 18:37:34  mch
230  Initial checkin
231 
232  Revision 1.1.1.1  2005/02/16 17:11:24  mch
233  Initial checkin
234 
235  Revision 1.1.2.8  2005/01/24 12:14:27  mch
236  Fixes to VizieR proxy and resource stuff
237 
238  Revision 1.1.2.7  2005/01/13 18:57:31  mch
239  Fixes to metadata mostly
240 
241  Revision 1.1.2.6  2004/12/13 21:53:14  mch
242  Made the java types the intermediate types, added types to Xsv and html output
243 
244  Revision 1.1.2.5  2004/12/08 18:36:40  mch
245  Added Vizier, rationalised SqlWriters etc, separated out TableResults from QueryResults
246 
247  Revision 1.1.2.4  2004/12/06 02:50:30  mch
248  a few bug fixes
249 
250  Revision 1.1.2.3  2004/11/30 02:32:18  mch
251  fix to 0-base of writerows
252 
253  Revision 1.1.2.2  2004/11/30 01:04:02  mch
254  Rationalised tablewriters, reverted AxisDataService06 to string
255 
256  Revision 1.1.2.1  2004/11/25 18:33:43  mch
257  more status (incl persisting) more tablewriting lots of fixes
258 
259  Revision 1.1.2.1  2004/11/25 08:29:41  mch
260  added table writers modelled on STIL
261 
262 
263  */
264 
265 
266 
267 
268 
269 
270 
271