package es.udc.cartolab.gvsig.testutils;
import java.io.File;
import com.hardcode.driverManager.DriverLoadException;
import com.hardcode.gdbms.driver.exceptions.InitializeWriterException;
import com.iver.cit.gvsig.exceptions.visitors.ProcessWriterVisitorException;
import com.iver.cit.gvsig.exceptions.visitors.StartWriterVisitorException;
import com.iver.cit.gvsig.exceptions.visitors.StopWriterVisitorException;
import com.iver.cit.gvsig.fmap.core.IFeature;
import com.iver.cit.gvsig.fmap.crs.CRSFactory;
import com.iver.cit.gvsig.fmap.drivers.FieldDescription;
import com.iver.cit.gvsig.fmap.drivers.SHPLayerDefinition;
import com.iver.cit.gvsig.fmap.drivers.VectorialFileDriver;
import com.iver.cit.gvsig.fmap.edition.DefaultRowEdited;
import com.iver.cit.gvsig.fmap.edition.IRowEdited;
import com.iver.cit.gvsig.fmap.edition.writers.shp.ShpWriter;
import com.iver.cit.gvsig.fmap.layers.FLyrVect;
import com.iver.cit.gvsig.fmap.layers.LayerFactory;
public class SHPFactory {
public static void createSHP(File file, FieldDescription[] fieldsDesc,
int geometryType, IFeature[] features) throws DriverLoadException, InitializeWriterException, StartWriterVisitorException, ProcessWriterVisitorException, StopWriterVisitorException {
SHPLayerDefinition lyrDef = new SHPLayerDefinition();
lyrDef.setFieldsDesc(fieldsDesc);
lyrDef.setFile(file);
lyrDef.setName(FileNameUtils.removeExtension(file.getName()));
lyrDef.setShapeType(geometryType);
ShpWriter writer = (ShpWriter) LayerFactory.getWM().getWriter(
"Shape Writer");
// String charSetName = prefs.get("dbf_encoding", DbaseFile
// .getDefaultCharset().toString());
// writer.loadDbfEncoding(newFile.getAbsolutePath(),
// Charset.forName(charSetName));
// writer.setCharset(Charset.forName(charSetName));
// if (writer instanceof ShpWriter) {
// String charSetName = prefs.get("dbf_encoding", DbaseFile
// .getDefaultCharset().toString());
// if (lyrVect.getSource() instanceof VectorialFileAdapter) {
// ((ShpWriter) writer).loadDbfEncoding(
// ((VectorialFileAdapter) lyrVect.getSource())
// .getFile().getAbsolutePath(), Charset
// .forName(charSetName));
// } else {
// Object s = lyrVect.getProperty("DBFFile");
// if (s != null && s instanceof String) {
// ((ShpWriter) writer).loadDbfEncoding((String) s,
// Charset.forName(charSetName));
// }
// }
// }
writer.setFile(file);
writer.initialize(lyrDef);
writer.preProcess();
for (int i = 0; i < features.length; i++) {
DefaultRowEdited row = new DefaultRowEdited(features[i],
IRowEdited.STATUS_ADDED, i);
writer.process(row);
}
writer.postProcess();
}
public static FLyrVect getFLyrVectFromSHP(File file)
throws DriverLoadException {
FLyrVect layer = (FLyrVect) LayerFactory.createLayer(
FileNameUtils.removeExtension(file.getName()),
(VectorialFileDriver) LayerFactory.getDM().getDriver(
"gvSIG shp driver"), file,
CRSFactory.getCRS("EPSG:23039"));
return layer;
}
}