Revision 24791 branches/v2_0_0_prep/libraries/libFMap_dalfile/src/org/gvsig/fmap/dal/store/dbf/DBFStoreProvider.java
DBFStoreProvider.java | ||
---|---|---|
2 | 2 |
|
3 | 3 |
import java.io.File; |
4 | 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 | 5 |
import java.text.DateFormat; |
10 | 6 |
import java.text.ParseException; |
11 | 7 |
import java.util.ArrayList; |
... | ... | |
55 | 51 |
import org.gvsig.fmap.dal.resource.spi.ResourceConsumer; |
56 | 52 |
import org.gvsig.fmap.dal.resource.spi.ResourceProvider; |
57 | 53 |
import org.gvsig.fmap.dal.store.dbf.utils.DbaseFile; |
58 |
import org.gvsig.fmap.dal.store.dbf.utils.DbaseFileHeader; |
|
59 |
import org.gvsig.fmap.dal.store.dbf.utils.DbaseFileWriter; |
|
60 | 54 |
import org.gvsig.metadata.Metadata; |
61 | 55 |
import org.gvsig.tools.exception.NotYetImplemented; |
62 | 56 |
import org.gvsig.tools.persistence.PersistenceException; |
... | ... | |
146 | 140 |
.getDefaultFeatureType()); |
147 | 141 |
} |
148 | 142 |
|
149 |
public void performEditing(Iterator deleteds, Iterator inserteds, Iterator updateds) throws PerformEditingException { |
|
143 |
public void performEditing(Iterator deleteds, Iterator inserteds, |
|
144 |
Iterator updateds) |
|
145 |
throws PerformEditingException { |
|
150 | 146 |
try { |
151 | 147 |
this.close(); |
152 | 148 |
} catch (CloseException e1) { |
153 | 149 |
throw new PerformEditingException(this.getName(), e1); |
154 | 150 |
} |
155 |
File file = this.getDBFParameters().getFile(); |
|
156 | 151 |
|
157 |
|
|
158 |
// TODO sacar copia o grabar en nuevo? |
|
159 |
|
|
160 | 152 |
try { |
161 | 153 |
this.dbfResource.begin(); |
162 |
|
|
163 |
|
|
164 |
DbaseFileHeader myHeader = DbaseFileHeader.createDbaseHeader(this.store.getDefaultFeatureType()); |
|
165 |
|
|
154 |
DBFFeatureWriter writer = new DBFFeatureWriter(this.getName()); |
|
166 | 155 |
FeatureSet set = this.store.getFeatureSet(); |
167 |
myHeader.setNumRecords((int) set.getSize()); //FIXME long !!! |
|
168 |
DbaseFileWriter dbfWrite; |
|
169 |
try { |
|
170 |
dbfWrite = new DbaseFileWriter( |
|
171 |
myHeader, |
|
172 |
(FileChannel) getWriteChannel(file.getAbsolutePath())); |
|
173 |
dbfWrite.setCharset(Charset.forName("ISO-8859-1")); // FIXME !!!! y actualizar codePage |
|
174 |
} catch (IOException e) { |
|
175 |
throw new CreateException(this.getName(), e); |
|
176 |
} |
|
156 |
writer.begin(this.getDBFParameters(), this.store |
|
157 |
.getDefaultFeatureType(), set.getSize()); |
|
177 | 158 |
|
178 | 159 |
Iterator iter = set.iterator(); |
179 | 160 |
while (iter.hasNext()) { |
180 |
dbfWrite.write((Feature) updateds.next());
|
|
161 |
writer.write((Feature) iter.next());
|
|
181 | 162 |
} |
182 |
dbfWrite.close(); |
|
183 | 163 |
|
164 |
writer.end(); |
|
165 |
|
|
184 | 166 |
this.dbfResource.notifyChanges(); |
185 | 167 |
} catch (Exception e) { |
186 | 168 |
throw new PerformEditingException(this.getName(), e); |
... | ... | |
592 | 574 |
throws CreateException { |
593 | 575 |
|
594 | 576 |
DBFNewStoreParameters params = (DBFNewStoreParameters) parameters; |
595 |
File file = params.getFile(); |
|
577 |
File file = params.getDBFFile();
|
|
596 | 578 |
|
597 | 579 |
if (file.exists()) { |
598 | 580 |
if (overwrite) { |
... | ... | |
620 | 602 |
try { |
621 | 603 |
resource.begin(); |
622 | 604 |
|
605 |
DBFFeatureWriter writer = new DBFFeatureWriter(this.getName()); |
|
623 | 606 |
|
624 | 607 |
|
625 |
DbaseFileHeader myHeader = DbaseFileHeader.createDbaseHeader(params |
|
626 |
.getDefaultFeatureType()); |
|
608 |
writer.begin(params, params.getDefaultFeatureType(), 0); |
|
609 |
writer.end(); |
|
610 |
writer.dispose(); |
|
627 | 611 |
|
628 |
myHeader.setNumRecords(0); |
|
629 |
try { |
|
630 | 612 |
|
631 |
FileChannel filechannel = (FileChannel) getWriteChannel(file |
|
632 |
.getAbsolutePath()); |
|
633 |
new DbaseFileWriter(myHeader, filechannel); |
|
634 |
filechannel.close(); |
|
635 |
} catch (IOException e) { |
|
636 |
throw new CreateException(this.getName(), e); |
|
637 |
} |
|
638 |
|
|
639 | 613 |
resource.notifyChanges(); |
640 | 614 |
} catch (Exception e) { |
641 | 615 |
throw new CreateException(this.getName(), e); |
... | ... | |
645 | 619 |
} |
646 | 620 |
} |
647 | 621 |
|
622 |
protected NewDataStoreParameters createInstanceNewDataStoreParameters() { |
|
623 |
return new DBFNewStoreParameters(); |
|
624 |
} |
|
648 | 625 |
public NewDataStoreParameters getCreateParameters() throws DataException { |
649 |
DBFNewStoreParameters params = new DBFNewStoreParameters(); |
|
626 |
DBFNewStoreParameters params = (DBFNewStoreParameters) this |
|
627 |
.createInstanceNewDataStoreParameters(); |
|
650 | 628 |
// FIXME Como crear un FeatureType ?????????? |
651 | 629 |
// params.setDefaultFeatureType(this.store.createFeatureType()); |
652 | 630 |
return params; |
653 | 631 |
} |
654 | 632 |
|
655 | 633 |
|
656 |
protected static WritableByteChannel getWriteChannel(String path) |
|
657 |
throws IOException { |
|
658 |
WritableByteChannel channel; |
|
659 |
|
|
660 |
File f = new File(path); |
|
661 |
|
|
662 |
if (!f.exists()) { |
|
663 |
// System.out.println("Creando fichero " + f.getAbsolutePath()); |
|
664 |
|
|
665 |
if (!f.createNewFile()) { |
|
666 |
System.err.print("Error al crear el fichero " |
|
667 |
+ f.getAbsolutePath()); |
|
668 |
throw new IOException("Cannot create file " + f); |
|
669 |
} |
|
670 |
} |
|
671 |
|
|
672 |
RandomAccessFile raf = new RandomAccessFile(f, "rw"); |
|
673 |
channel = raf.getChannel(); |
|
674 |
|
|
675 |
return channel; |
|
676 |
} |
|
677 |
|
|
678 |
|
|
679 | 634 |
public boolean supportsAppendMode() { |
680 | 635 |
return false; |
681 | 636 |
} |
... | ... | |
688 | 643 |
} |
689 | 644 |
|
690 | 645 |
public void beginAppend() { |
691 |
// TODO Auto-generated method stub |
|
692 |
throw new NotYetImplemented(); |
|
693 | 646 |
|
694 | 647 |
} |
695 | 648 |
|
Also available in: Unified diff