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 | 3199 | fjp | package com.hardcode.gdbms.driver.csvstring; |
---|---|---|---|
2 | |||
3 | 9634 | caballero | import java.awt.event.KeyEvent; |
4 | 3199 | fjp | 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 | 9634 | caballero | public static String DEFAULT_SEPARATOR=","; |
39 | private String separator=DEFAULT_SEPARATOR; |
||
40 | 3199 | fjp | |
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 | 9038 | caballero | if (campos.length<fieldId+1 || campos[fieldId].equals("null")) { |
64 | 3199 | fjp | 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 | 7246 | jmvivo | int colCount;
|
93 | String[] campos; |
||
94 | if ((aux = reader.readLine()) != null) { |
||
95 | 9634 | caballero | campos = aux.split(DEFAULT_SEPARATOR); |
96 | 3199 | fjp | lineas.add(campos); |
97 | 7246 | jmvivo | colCount = campos.length; |
98 | while ((aux = reader.readLine()) != null) { |
||
99 | 9634 | caballero | campos = aux.split(DEFAULT_SEPARATOR); |
100 | 7246 | jmvivo | if (campos.length < colCount) {
|
101 | for (int i=campos.length;i < colCount;i++){ |
||
102 | aux = aux +" ;";
|
||
103 | } |
||
104 | 9634 | caballero | campos = aux.split(DEFAULT_SEPARATOR); |
105 | 7246 | jmvivo | } |
106 | lineas.add(campos); |
||
107 | } |
||
108 | } |
||
109 | 3199 | fjp | } |
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 | 9634 | caballero | fieldRow += (DEFAULT_SEPARATOR + dataWare.getFieldName(i)); |
154 | 3199 | fjp | } |
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 | 9634 | caballero | row += (DEFAULT_SEPARATOR + |
163 | 3199 | fjp | 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 | 9038 | caballero | |
178 | 3199 | fjp | file.getParentFile().mkdirs(); |
179 | file.createNewFile(); |
||
180 | 9038 | caballero | |
181 | 3199 | fjp | PrintWriter out = new PrintWriter(new FileOutputStream(file)); |
182 | 9038 | caballero | |
183 | 3199 | fjp | String header = fieldNames[0]; |
184 | for (int i = 1; i < fieldNames.length; i++) { |
||
185 | 9634 | caballero | header += DEFAULT_SEPARATOR + fieldNames[i]; |
186 | 3199 | fjp | } |
187 | out.println(header); |
||
188 | 9038 | caballero | |
189 | 3199 | fjp | 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 | 4851 | jmvivo | |
306 | public int getFieldWidth(int i) throws DriverException { |
||
307 | return 30; |
||
308 | } |
||
309 | 9634 | caballero | |
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 | 3199 | fjp | } |