Statistics
| Revision:

root / trunk / libraries / libDataSourceBaseDrivers / src / org / gvsig / data / datastores / vectorial / driver / dbf / DBFFeaturesWriter.java @ 19673

History | View | Annotate | Download (3.19 KB)

1
package org.gvsig.data.datastores.vectorial.driver.dbf;
2

    
3
import java.io.File;
4
import java.io.IOException;
5
import java.io.RandomAccessFile;
6
import java.nio.channels.FileChannel;
7
import java.nio.channels.WritableByteChannel;
8

    
9
import org.gvsig.data.datastores.vectorial.driver.IDriver;
10
import org.gvsig.data.datastores.vectorial.driver.IFeaturesWriter;
11
import org.gvsig.data.datastores.vectorial.driver.dbf.filedbf.DbaseFileHeader;
12
import org.gvsig.data.datastores.vectorial.driver.dbf.filedbf.DbaseFileWriter;
13
import org.gvsig.data.datastores.vectorial.driver.exception.UnsupportedEncodingDriverException;
14
import org.gvsig.data.exception.InitializeWriterException;
15
import org.gvsig.data.exception.OpenException;
16
import org.gvsig.data.exception.WriteException;
17
import org.gvsig.data.vectorial.IFeature;
18
import org.gvsig.data.vectorial.IFeatureType;
19

    
20
public class DBFFeaturesWriter implements IFeaturesWriter {
21
        private DbaseFileWriter dbfWrite;
22
        private DbaseFileHeader myHeader;
23
        private IFeatureType featureType;
24
        private File dbfFile;
25
        private int numRows;
26
        public void setFile(File file){
27
                dbfFile=file;
28
        }
29
        public void init(IDriver driver) {
30
                DBFDriverParameters parameters=(DBFDriverParameters)driver.getParameters();
31
                dbfFile=((DBFDriverParameters)parameters).getDBFFile();
32
        }
33

    
34
        public void postProcess() throws OpenException, WriteException {
35
                try {
36
                        myHeader.setNumRecords(numRows);
37
                        dbfWrite = new DbaseFileWriter(myHeader,
38
                                        (FileChannel) getWriteChannel(dbfFile.getAbsolutePath()));
39

    
40
                } catch (IOException e) {
41
//                        throw new StopWriterVisitorException(getName(),e);
42
                }
43
        }
44

    
45
        public void preProcess() throws OpenException, InitializeWriterException {
46
                myHeader = DbaseFileHeader.createDbaseHeader(featureType);
47
                try {
48
                        dbfWrite = new DbaseFileWriter(myHeader,
49
                                        (FileChannel) getWriteChannel(dbfFile.getAbsolutePath()));
50
                } catch (IOException e) {
51
                        throw new InitializeWriterException("DBF Feature Writer",e);
52
                }
53
        }
54

    
55
        public void insertFeature(IFeature feature) throws WriteException, UnsupportedEncodingDriverException {
56
                dbfWrite.write(feature);
57
                numRows++;
58

    
59
        }
60
        public void updateFeatureType(IFeatureType featureType) {
61
                this.featureType=featureType;
62
        }
63

    
64
        protected static WritableByteChannel getWriteChannel(String path) throws IOException {
65
                WritableByteChannel channel;
66

    
67
                File f = new File(path);
68

    
69
                if (!f.exists()) {
70
//                        System.out.println("Creando fichero " + f.getAbsolutePath());
71

    
72
                        if (!f.createNewFile()) {
73
                                System.err.print("Error al crear el fichero "
74
                                                + f.getAbsolutePath());
75
                                throw new IOException("Cannot create file " + f);
76
                        }
77
                }
78

    
79
                RandomAccessFile raf = new RandomAccessFile(f, "rw");
80
                channel = raf.getChannel();
81

    
82
                return channel;
83
        }
84
        public static void create(DBFDriverParameters parameters, IFeatureType featureType)throws OpenException, InitializeWriterException {
85
                DbaseFileHeader myHeader = DbaseFileHeader.createDbaseHeader(featureType);
86
                try {
87
                        DbaseFileWriter dbfWrite = new DbaseFileWriter(myHeader,
88
                                        (FileChannel) getWriteChannel(parameters.getDBFFile().getAbsolutePath()));
89
                } catch (IOException e) {
90
                        throw new InitializeWriterException("DBF Feature Writer",e);
91
                }
92
        }
93

    
94
}