Revision 24791 branches/v2_0_0_prep/libraries/libFMap_dalfile/src/org/gvsig/fmap/dal/store/dbf/DBFStoreProvider.java

View differences:

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