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
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
}