}
private void exportRule(final MappingRule rule, final GeogigCLI cli, final File shapeFile)
throws IOException {
if (shapeFile.exists() && !overwrite) {
throw new CommandFailedException(
"The selected shapefile already exists. Use -o to overwrite");
}
Function<Feature, Optional<Feature>> function = new Function<Feature, Optional<Feature>>() {
@Override
@Nullable
public Optional<Feature> apply(@Nullable Feature feature) {
Optional<Feature> mapped = rule.apply(feature);
return mapped;
}
};
SimpleFeatureType outputFeatureType = rule.getFeatureType();
String path = getOriginTreesFromOutputFeatureType(outputFeatureType);
ShapefileDataStoreFactory dataStoreFactory = new ShapefileDataStoreFactory();
Map<String, Serializable> params = new HashMap<String, Serializable>();
params.put(ShapefileDataStoreFactory.URLP.key, shapeFile.toURI().toURL());
params.put(ShapefileDataStoreFactory.CREATE_SPATIAL_INDEX.key, Boolean.TRUE);
DataStore dataStore = dataStoreFactory.createNewDataStore(params);
try {
dataStore.createSchema(outputFeatureType);
final String typeName = dataStore.getTypeNames()[0];
final SimpleFeatureSource source = dataStore.getFeatureSource(typeName);
checkParameter(source instanceof SimpleFeatureStore,
"Could not create feature store. Shapefile may be read only");
final SimpleFeatureStore store = (SimpleFeatureStore) source;
ExportOp op = cli.getGeogig().command(ExportOp.class).setFeatureStore(store)
.setPath(path).setFeatureTypeConversionFunction(function);
try {
op.setProgressListener(cli.getProgressListener()).call();
cli.getConsole().println("OSM data exported successfully to " + shapeFile);
} catch (IllegalArgumentException iae) {
shapeFile.delete();
throw new org.locationtech.geogig.cli.InvalidParameterException(iae.getMessage(),
iae);
} catch (GeoToolsOpException e) {
shapeFile.delete();
throw new CommandFailedException("Could not export. Error:" + e.statusCode.name(),
e);
}
} finally {
dataStore.dispose();
}