Statistics
| Revision:

svn-gvsig-desktop / trunk / libraries / libDataSourceBaseDrivers / src / org / gvsig / data / datastores / vectorial / file / dbf / DBFFeaturesWriter.java @ 20377

History | View | Annotate | Download (3.83 KB)

1
package org.gvsig.data.datastores.vectorial.file.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
import java.nio.charset.Charset;
9

    
10
import org.gvsig.data.datastores.vectorial.IFeaturesWriter;
11
import org.gvsig.data.datastores.vectorial.file.dbf.utils.DbaseFileHeader;
12
import org.gvsig.data.datastores.vectorial.file.dbf.utils.DbaseFileWriter;
13
import org.gvsig.data.exception.InitializeWriterException;
14
import org.gvsig.data.exception.OpenException;
15
import org.gvsig.data.exception.ReadException;
16
import org.gvsig.data.exception.UnsupportedEncodingException;
17
import org.gvsig.data.exception.WriteException;
18
import org.gvsig.data.vectorial.IFeature;
19
import org.gvsig.data.vectorial.IFeatureStore;
20
import org.gvsig.data.vectorial.IFeatureType;
21

    
22
public class DBFFeaturesWriter implements IFeaturesWriter {
23
        private DbaseFileWriter dbfWrite;
24
        private DbaseFileHeader myHeader;
25
        private IFeatureType featureType;
26
        private File dbfFile;
27
        protected int numRows;
28
        private Charset charset = Charset.forName("ISO-8859-1");
29
        public void setFile(File file){
30
                dbfFile=file;
31
        }
32
        public void init(IFeatureStore store) throws InitializeWriterException {
33
                DBFStoreParameters parameters=(DBFStoreParameters)store.getParameters();
34
                dbfFile=((DBFStoreParameters)parameters).getDBFFile();
35
        }
36

    
37
        public void postProcess() throws OpenException, WriteException {
38
                // TODO: Elimiar las copias generadas del fichero de copia
39
                //   para el cancelProcess ??
40
                try {
41
                        myHeader.setNumRecords(numRows);
42
                        dbfWrite = new DbaseFileWriter(myHeader,
43
                                        (FileChannel) getWriteChannel(dbfFile.getAbsolutePath()));
44

    
45
                } catch (IOException e) {
46
                        throw new WriteException(DBFStore.DATASTORE_NAME,e);
47
                }
48
        }
49

    
50
        public void preProcess() throws WriteException, ReadException {
51
                // TODO: Hacer copias de los fichero si ya existen para
52
                // en cancelProcess ???
53
                myHeader = DbaseFileHeader.createDbaseHeader(featureType);
54
                myHeader.setNumRecords(0);
55
                numRows = 0;
56
                try {
57
                        dbfWrite = new DbaseFileWriter(myHeader,
58
                                        (FileChannel) getWriteChannel(dbfFile.getAbsolutePath()));
59
                        dbfWrite.setCharset(charset);
60
                } catch (IOException e) {
61
                        throw new InitializeWriterException("DBF Feature Writer",e);
62
                }
63
        }
64

    
65
        public void insertFeature(IFeature feature) throws WriteException, UnsupportedEncodingException {
66
                dbfWrite.write(feature);
67
                numRows++;
68

    
69
        }
70
        public void updateFeatureType(IFeatureType featureType) {
71
                this.featureType=featureType;
72
        }
73

    
74
        protected static WritableByteChannel getWriteChannel(String path) throws IOException {
75
                WritableByteChannel channel;
76

    
77
                File f = new File(path);
78

    
79
                if (!f.exists()) {
80
//                        System.out.println("Creando fichero " + f.getAbsolutePath());
81

    
82
                        if (!f.createNewFile()) {
83
                                System.err.print("Error al crear el fichero "
84
                                                + f.getAbsolutePath());
85
                                throw new IOException("Cannot create file " + f);
86
                        }
87
                }
88

    
89
                RandomAccessFile raf = new RandomAccessFile(f, "rw");
90
                channel = raf.getChannel();
91

    
92
                return channel;
93
        }
94
        public static void create(DBFStoreParameters parameters, IFeatureType featureType)throws OpenException, WriteException {
95
                DbaseFileHeader myHeader = DbaseFileHeader.createDbaseHeader(featureType);
96
                try {
97
                        FileChannel filechannel=(FileChannel) getWriteChannel(parameters.getDBFFile().getAbsolutePath());
98
                        DbaseFileWriter dbfWrite = new DbaseFileWriter(myHeader,filechannel
99
                                        );
100
                        filechannel.close();
101
                } catch (IOException e) {
102
                        throw new InitializeWriterException("DBF Feature Writer",e);
103
                }
104
        }
105
        /* (non-Javadoc)
106
         * @see org.gvsig.data.datastores.vectorial.IFeaturesWriter#cancelProcess()
107
         */
108
        public void cancelProcess() throws WriteException {
109
                // TODO Auto-generated method stub
110
                // RESTAURAR Ficheros anteriores????
111

    
112
        }
113

    
114
}