// **********************************************************************
//
// <copyright>
//
// BBN Technologies
// 10 Moulton Street
// Cambridge, MA 02138
// (617) 873-8000
//
// Copyright (C) BBNT Solutions LLC. All rights reserved.
//
// </copyright>
// **********************************************************************
//
// $Source: /cvs/distapps/openmap/src/corba/com/bbn/openmap/layer/specialist/vpf/TableListener.java,v $
// $RCSfile: TableListener.java,v $
// $Revision: 1.3 $
// $Date: 2004/10/14 18:05:37 $
// $Author: dietrick $
//
// **********************************************************************
package com.bbn.openmap.layer.specialist.vpf;
import java.io.IOException;
import java.util.Iterator;
import java.util.List;
import com.bbn.openmap.layer.vpf.DcwColumnInfo;
import com.bbn.openmap.layer.vpf.DcwRecordFile;
import com.bbn.openmap.util.html.Document;
import com.bbn.openmap.util.html.HeaderElement;
import com.bbn.openmap.util.html.StringElement;
import com.bbn.openmap.util.html.TableHeaderElement;
import com.bbn.openmap.util.html.TableRowElement;
import com.bbn.openmap.util.http.HttpRequestEvent;
import com.bbn.openmap.util.http.HttpRequestListener;
/**
* An HttpRequestListener that returns schema and data from a VPF
* table
*/
public class TableListener implements HttpRequestListener {
public TableListener() {}
/** Just write the request out to the client. */
public void httpRequest(HttpRequestEvent e) throws IOException {
String s = e.getRequest();
System.out.println(s);
Document d = new Document(s);
d.addElement(new HeaderElement(1, s));
try {
DcwRecordFile f = new DcwRecordFile(s);
d.addElement(new HeaderElement(3, "Table Description Schema"));
d.addElement(new StringElement("<table border>"));
DcwColumnInfo dci[] = f.getColumnInfo();
TableRowElement t = new TableRowElement();
d.addElement(t);
t.addElement(new TableHeaderElement("Column Name"));
t.addElement(new TableHeaderElement("Field Type"));
t.addElement(new TableHeaderElement("Number Of Elements"));
t.addElement(new TableHeaderElement("Key Type"));
t.addElement(new TableHeaderElement("Column Description"));
t.addElement(new TableHeaderElement("Value Description Table"));
t.addElement(new TableHeaderElement("Thematic Index Name"));
t.addElement(new TableHeaderElement("Narrative Table"));
TableRowElement rw = new TableRowElement();
for (int i = 0; i < dci.length; i++) {
TableRowElement row = new TableRowElement();
d.addElement(row);
row.addElement(dci[i].getColumnName());
char munge[] = dci[i].getColumnName().toCharArray();
for (int j = 0; j < munge.length; j++)
if (munge[j] == '_')
munge[j] = ' ';
rw.addElement(new TableHeaderElement(new String(munge)));
row.addElement(new Character(dci[i].getFieldType()).toString());
row.addElement(Integer.toString(dci[i].getNumberOfElements()));
row.addElement(new Character(dci[i].getKeyType()).toString());
row.addElement(dci[i].getColumnDescription());
row.addElement(dci[i].getValueDescriptionTable());
row.addElement(dci[i].getThematicIndexName());
row.addElement(dci[i].getNarrativeTable());
}
d.addElement(new StringElement("</table>"));
d.addElement(new HeaderElement(3, "Table Data"));
d.addElement(new StringElement("<table border>"));
d.addElement(rw);
List colhdr;
while ((colhdr = f.parseRow()) != null) {
d.addElement(listAsTableRow(colhdr));
}
d.addElement(new StringElement("</table>"));
f.close();
} catch (com.bbn.openmap.io.FormatException f) {
d.addElement(new StringElement(f.getMessage()));
}
d.generate(e.getWriter());
}
private TableRowElement listAsTableRow(List v) {
TableRowElement rv = new TableRowElement();
Iterator it = v.iterator();
while (it.hasNext()) {
rv.addElement(it.next().toString());
}
return rv;
}
}