svn-gvsig-desktop / trunk / libraries / libGDBMS / src / main / java / com / hardcode / gdbms / driver / csvstring / CSVStringDriver.java @ 9799
History | View | Annotate | Download (7.86 KB)
1 |
package com.hardcode.gdbms.driver.csvstring; |
---|---|
2 |
|
3 |
import java.awt.event.KeyEvent; |
4 |
import java.io.BufferedReader; |
5 |
import java.io.File; |
6 |
import java.io.FileNotFoundException; |
7 |
import java.io.FileOutputStream; |
8 |
import java.io.FileReader; |
9 |
import java.io.IOException; |
10 |
import java.io.PrintWriter; |
11 |
import java.sql.Date; |
12 |
import java.sql.Time; |
13 |
import java.sql.Timestamp; |
14 |
import java.sql.Types; |
15 |
import java.util.ArrayList; |
16 |
|
17 |
import com.hardcode.driverManager.Driver; |
18 |
import com.hardcode.gdbms.engine.data.DataSourceFactory; |
19 |
import com.hardcode.gdbms.engine.data.driver.DriverException; |
20 |
import com.hardcode.gdbms.engine.data.driver.FileDriver; |
21 |
import com.hardcode.gdbms.engine.data.file.FileDataWare; |
22 |
import com.hardcode.gdbms.engine.values.Value; |
23 |
import com.hardcode.gdbms.engine.values.ValueFactory; |
24 |
import com.hardcode.gdbms.engine.values.ValueWriter; |
25 |
|
26 |
|
27 |
/**
|
28 |
* Driver para ficheros csv, en el que la primera fila se toma como la que
|
29 |
* define los nombres de los campos
|
30 |
*
|
31 |
* @author Fernando Gonz?lez Cort?s
|
32 |
*/
|
33 |
public class CSVStringDriver implements Driver, FileDriver, ValueWriter { |
34 |
private File file; |
35 |
private BufferedReader reader; |
36 |
private ArrayList lineas; |
37 |
private ValueWriter vWriter = ValueWriter.internalValueWriter;
|
38 |
public static String DEFAULT_SEPARATOR=","; |
39 |
private String separator=DEFAULT_SEPARATOR; |
40 |
|
41 |
/**
|
42 |
* @see com.hardcode.gdbms.driver.Driver#getName()
|
43 |
*/
|
44 |
public String getName() { |
45 |
return "csv string"; |
46 |
} |
47 |
|
48 |
/**
|
49 |
* @see com.hardcode.gdbms.data.DataSource#getFieldName(int)
|
50 |
*/
|
51 |
public String getFieldName(int fieldId) throws DriverException { |
52 |
String[] campos = (String[]) lineas.get(0); |
53 |
|
54 |
return campos[fieldId];
|
55 |
} |
56 |
|
57 |
/**
|
58 |
* @see com.hardcode.gdbms.data.DataSource#getIntFieldValue(int, int)
|
59 |
*/
|
60 |
public Value getFieldValue(long rowIndex, int fieldId) |
61 |
throws DriverException {
|
62 |
String[] campos = (String[]) lineas.get((int) (rowIndex + 1)); |
63 |
if (campos.length<fieldId+1 || campos[fieldId].equals("null")) { |
64 |
return null; |
65 |
} |
66 |
|
67 |
Value value = ValueFactory.createValue(campos[fieldId]); |
68 |
|
69 |
return value;
|
70 |
} |
71 |
|
72 |
/**
|
73 |
* @see com.hardcode.gdbms.data.DataSource#getFieldCount()
|
74 |
*/
|
75 |
public int getFieldCount() throws DriverException { |
76 |
String[] campos = (String[]) lineas.get(0); |
77 |
|
78 |
return campos.length;
|
79 |
} |
80 |
|
81 |
/**
|
82 |
* @see com.hardcode.gdbms.data.DataSource#open(java.io.File)
|
83 |
*/
|
84 |
public void open(File file) throws IOException { |
85 |
this.file = file;
|
86 |
reader = new BufferedReader(new FileReader(file)); |
87 |
|
88 |
lineas = new ArrayList(); |
89 |
|
90 |
String aux;
|
91 |
|
92 |
int colCount;
|
93 |
String[] campos; |
94 |
if ((aux = reader.readLine()) != null) { |
95 |
campos = aux.split(DEFAULT_SEPARATOR); |
96 |
lineas.add(campos); |
97 |
colCount = campos.length; |
98 |
while ((aux = reader.readLine()) != null) { |
99 |
campos = aux.split(DEFAULT_SEPARATOR); |
100 |
if (campos.length < colCount) {
|
101 |
for (int i=campos.length;i < colCount;i++){ |
102 |
aux = aux +" ;";
|
103 |
} |
104 |
campos = aux.split(DEFAULT_SEPARATOR); |
105 |
} |
106 |
lineas.add(campos); |
107 |
} |
108 |
} |
109 |
} |
110 |
|
111 |
/**
|
112 |
* @see com.hardcode.gdbms.data.DataSource#close()
|
113 |
*/
|
114 |
public void close() throws IOException { |
115 |
reader.close(); |
116 |
} |
117 |
|
118 |
/**
|
119 |
* @see com.hardcode.gdbms.data.DataSource#getRowCount()
|
120 |
*/
|
121 |
public long getRowCount() { |
122 |
return lineas.size() - 1; |
123 |
} |
124 |
|
125 |
/**
|
126 |
* @see com.hardcode.gdbms.engine.data.driver.FileDriver#fileAccepted(java.io.File)
|
127 |
*/
|
128 |
public boolean fileAccepted(File f) { |
129 |
return f.getAbsolutePath().toUpperCase().endsWith("CSV"); |
130 |
} |
131 |
|
132 |
/**
|
133 |
* @see com.hardcode.gdbms.engine.data.driver.ObjectDriver#getFieldType(int)
|
134 |
*/
|
135 |
public int getFieldType(int i) throws DriverException { |
136 |
return Types.VARCHAR; |
137 |
} |
138 |
|
139 |
/**
|
140 |
* @see com.hardcode.gdbms.engine.data.driver.FileDriver#writeFile(com.hardcode.gdbms.engine.data.edition.DataWare,
|
141 |
* java.io.File)
|
142 |
*/
|
143 |
public void writeFile(FileDataWare dataWare) |
144 |
throws DriverException {
|
145 |
PrintWriter out;
|
146 |
|
147 |
try {
|
148 |
out = new PrintWriter(new FileOutputStream(file)); |
149 |
|
150 |
String fieldRow = dataWare.getFieldName(0); |
151 |
|
152 |
for (int i = 1; i < (dataWare.getFieldCount() - 1); i++) { |
153 |
fieldRow += (DEFAULT_SEPARATOR + dataWare.getFieldName(i)); |
154 |
} |
155 |
|
156 |
out.println(fieldRow); |
157 |
|
158 |
for (int i = 0; i < dataWare.getRowCount(); i++) { |
159 |
String row = dataWare.getFieldValue(i, 0).getStringValue(this); |
160 |
|
161 |
for (int j = 1; j < (dataWare.getFieldCount() - 1); j++) { |
162 |
row += (DEFAULT_SEPARATOR + |
163 |
dataWare.getFieldValue(i, j).getStringValue(this));
|
164 |
} |
165 |
|
166 |
out.println(row); |
167 |
} |
168 |
|
169 |
out.close(); |
170 |
} catch (FileNotFoundException e) { |
171 |
throw new DriverException(e); |
172 |
} |
173 |
} |
174 |
|
175 |
public void createSource(String path, String[] fieldNames, int[] fieldTypes) throws IOException { |
176 |
File file = new File(path); |
177 |
|
178 |
file.getParentFile().mkdirs(); |
179 |
file.createNewFile(); |
180 |
|
181 |
PrintWriter out = new PrintWriter(new FileOutputStream(file)); |
182 |
|
183 |
String header = fieldNames[0]; |
184 |
for (int i = 1; i < fieldNames.length; i++) { |
185 |
header += DEFAULT_SEPARATOR + fieldNames[i]; |
186 |
} |
187 |
out.println(header); |
188 |
|
189 |
out.close(); |
190 |
} |
191 |
|
192 |
/**
|
193 |
* DOCUMENT ME!
|
194 |
*
|
195 |
* @return DOCUMENT ME!
|
196 |
*/
|
197 |
public String getNullStatementString() { |
198 |
return vWriter.getNullStatementString();
|
199 |
} |
200 |
|
201 |
/**
|
202 |
* DOCUMENT ME!
|
203 |
*
|
204 |
* @param b DOCUMENT ME!
|
205 |
*
|
206 |
* @return DOCUMENT ME!
|
207 |
*/
|
208 |
public String getStatementString(boolean b) { |
209 |
return vWriter.getStatementString(b);
|
210 |
} |
211 |
|
212 |
/**
|
213 |
* DOCUMENT ME!
|
214 |
*
|
215 |
* @param binary DOCUMENT ME!
|
216 |
*
|
217 |
* @return DOCUMENT ME!
|
218 |
*/
|
219 |
public String getStatementString(byte[] binary) { |
220 |
return vWriter.getStatementString(binary);
|
221 |
} |
222 |
|
223 |
/**
|
224 |
* DOCUMENT ME!
|
225 |
*
|
226 |
* @param d DOCUMENT ME!
|
227 |
*
|
228 |
* @return DOCUMENT ME!
|
229 |
*/
|
230 |
public String getStatementString(Date d) { |
231 |
return d.toString();
|
232 |
} |
233 |
|
234 |
/**
|
235 |
* DOCUMENT ME!
|
236 |
*
|
237 |
* @param d DOCUMENT ME!
|
238 |
* @param sqlType DOCUMENT ME!
|
239 |
*
|
240 |
* @return DOCUMENT ME!
|
241 |
*/
|
242 |
public String getStatementString(double d, int sqlType) { |
243 |
return vWriter.getStatementString(d, sqlType);
|
244 |
} |
245 |
|
246 |
/**
|
247 |
* DOCUMENT ME!
|
248 |
*
|
249 |
* @param i DOCUMENT ME!
|
250 |
* @param sqlType DOCUMENT ME!
|
251 |
*
|
252 |
* @return DOCUMENT ME!
|
253 |
*/
|
254 |
public String getStatementString(int i, int sqlType) { |
255 |
return vWriter.getStatementString(i, sqlType);
|
256 |
} |
257 |
|
258 |
/**
|
259 |
* DOCUMENT ME!
|
260 |
*
|
261 |
* @param i DOCUMENT ME!
|
262 |
*
|
263 |
* @return DOCUMENT ME!
|
264 |
*/
|
265 |
public String getStatementString(long i) { |
266 |
return vWriter.getStatementString(i);
|
267 |
} |
268 |
|
269 |
/**
|
270 |
* DOCUMENT ME!
|
271 |
*
|
272 |
* @param str DOCUMENT ME!
|
273 |
* @param sqlType DOCUMENT ME!
|
274 |
*
|
275 |
* @return DOCUMENT ME!
|
276 |
*/
|
277 |
public String getStatementString(String str, int sqlType) { |
278 |
return str;
|
279 |
} |
280 |
|
281 |
/**
|
282 |
* DOCUMENT ME!
|
283 |
*
|
284 |
* @param t DOCUMENT ME!
|
285 |
*
|
286 |
* @return DOCUMENT ME!
|
287 |
*/
|
288 |
public String getStatementString(Time t) { |
289 |
return t.toString();
|
290 |
} |
291 |
|
292 |
/**
|
293 |
* DOCUMENT ME!
|
294 |
*
|
295 |
* @param ts DOCUMENT ME!
|
296 |
*
|
297 |
* @return DOCUMENT ME!
|
298 |
*/
|
299 |
public String getStatementString(Timestamp ts) { |
300 |
return ts.toString();
|
301 |
} |
302 |
|
303 |
public void setDataSourceFactory(DataSourceFactory dsf) { |
304 |
} |
305 |
|
306 |
public int getFieldWidth(int i) throws DriverException { |
307 |
return 30; |
308 |
} |
309 |
|
310 |
public String getSeparator() { |
311 |
return separator;
|
312 |
} |
313 |
|
314 |
public void setSeparator(String separator) { |
315 |
this.separator = separator;
|
316 |
DEFAULT_SEPARATOR=separator; |
317 |
} |
318 |
} |