View Javadoc

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