package org.geoserver.wps.sextante;
import java.io.File;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.geoserver.data.util.IOUtils;
import org.geoserver.platform.GeoServerExtensions;
import org.geoserver.wps.resource.ShapefileResource;
import org.geoserver.wps.resource.WPSResourceManager;
import org.geotools.data.DataStore;
import org.geotools.data.DataUtilities;
import org.geotools.data.shapefile.ShapefileDataStore;
import org.geotools.util.logging.Logging;
import org.opengis.feature.simple.SimpleFeatureType;
import org.opengis.referencing.crs.CoordinateReferenceSystem;
import es.unex.sextante.dataObjects.IVectorLayer;
public class ShpLayerFactory extends DatastoreVectorLayerFactory {
static final Logger LOGGER = Logging.getLogger(ShpLayerFactory.class);
@Override
protected IVectorLayer createLayer(DataStore dataStore, String sName,
Object crs) throws IOException {
GTShpLayer layer = GTShpLayer.createLayer(dataStore, sName,
(CoordinateReferenceSystem) crs);
layer.setName(sName);
return layer;
}
public DataStore createDatastore(String m_sFilename, SimpleFeatureType m_FeatureType) throws IOException {
WPSResourceManager manager = GeoServerExtensions.bean(WPSResourceManager.class);
File directory = IOUtils.createTempDirectory("sxttmp");
File file = new File(directory, m_sFilename);
try {
ShapefileDataStore dataStore = new ShapefileDataStore(DataUtilities.fileToURL(file));
dataStore.createSchema(m_FeatureType);
manager.addResource(new ShapefileResource(dataStore, directory));
return dataStore;
} catch(Throwable t) {
LOGGER.log(Level.SEVERE, "Could not create shapefile output ", t);
IOUtils.delete(directory);
throw (IOException) new IOException(t.getMessage()).initCause(t);
}
}
}