Statistics
| Revision:

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
}