KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > jimm > datavision > source > charsep > CharSepSource


1 package jimm.datavision.source.charsep;
2 import jimm.datavision.*;
3 import jimm.datavision.source.*;
4 import jimm.util.XMLWriter;
5 import java.io.*;
6 import java.util.*;
7
8 /**
9  * A data source for files whose lines are rows and columns are separated
10  * by a character.
11  *
12  * @author Jim Menard, <a HREF="mailto:jimm@io.com">jimm@io.com</a>
13  */

14 public class CharSepSource extends DataSource {
15
16 protected static final char DEFAULT_SEP_CHAR = ',';
17
18 protected ArrayList columns;
19 protected char sepChar;
20 protected BufferedReader reader;
21 protected String JavaDoc sourceFilePath;
22
23 public CharSepSource(Report report) {
24     super(report, new CharSepQuery(report));
25     columns = new ArrayList();
26     sepChar = DEFAULT_SEP_CHAR;
27 }
28
29 public boolean canJoinTables() { return true; }
30 public boolean isSQLGenerated() { return false; }
31 public boolean isConnectionEditable() { return false; }
32 public boolean areRecordsSelectable() { return true; }
33 public boolean areRecordsSortable() { return false; }
34 public boolean canGroupRecords() { return false; }
35
36 public boolean needsSourceFile() { return true; }
37
38 public void setSourceFile(String JavaDoc filePath) throws FileNotFoundException {
39     sourceFilePath = filePath;
40     reuseSourceFile();
41 }
42
43 public void reuseSourceFile() throws FileNotFoundException {
44     setInput(new FileReader(sourceFilePath));
45 }
46
47 public void setInput(Reader reader) {
48     if (reader instanceof BufferedReader)
49     this.reader = (BufferedReader)reader;
50     else
51     this.reader = new BufferedReader(reader);
52 }
53
54 public void setInput(InputStreamReader inputStreamReader) {
55     reader = new BufferedReader(inputStreamReader);
56 }
57
58 public void setInput(String JavaDoc fileName) throws FileNotFoundException {
59     reader = new BufferedReader(new FileReader(fileName));
60 }
61
62 public char getSepChar() { return sepChar; }
63 public void setSepChar(char c) { sepChar = c; }
64
65 /**
66  * This override not only remembers the column but also hands it to the
67  * query for cacheing.
68  *
69  * @param col a column
70  */

71 public void addColumn(Column col) {
72     columns.add(col);
73     ((CharSepQuery)query).addColumn(col);
74 }
75
76 /**
77  * Given an id (a column name), returns the column that has that id. If no
78  * column with the specified id exists, returns <code>null</code>. Uses
79  * <code>Table.findColumn</code>.
80  *
81  * @param id a column id
82  * @return a column, or <code>null</code> if no column with the specified
83  * id exists
84  * @see Table#findColumn
85  */

86 public Column findColumn(Object JavaDoc id) {
87     for (Iterator iter = columns.iterator(); iter.hasNext(); ) {
88     Column col = (Column)iter.next();
89     if (col.getId().equals(id))
90         return col;
91     }
92     return null;
93 }
94
95 public int indexOfSelectable(Selectable sel) { return columns.indexOf(sel); }
96
97 public Iterator tables() { return null; }
98
99 public Iterator tablesUsedInReport() { return null; }
100
101 public Iterator columns() { return columns.iterator(); }
102
103 public DataCursor execute() {
104     return new CharSepRow(this, query);
105 }
106
107 BufferedReader getReader() {
108     return reader;
109 }
110
111 void closeReader() {
112     try {
113     if (reader != null)
114         reader.close();
115     }
116     catch (IOException ioe) {
117     ErrorHandler.error(ioe);
118     }
119     finally {
120     reader = null;
121     }
122 }
123
124 /**
125  * Writes this database and all its tables as an XML tag.
126  *
127  * @param out a writer that knows how to write XML
128  */

129 protected void doWriteXML(XMLWriter out) {
130     out.startElement("charsep");
131     out.attr("sepchar", sepChar);
132     if (metadataURL != null)
133     out.textElement("metadata-url", metadataURL);
134     else
135     for (Iterator iter = columns.iterator(); iter.hasNext(); )
136         ((Column)iter.next()).writeXML(out);
137     out.endElement();
138 }
139
140 }
141
Popular Tags