diff --git a/modules/plugin/shapefile/src/main/java/org/geotools/data/shapefile/ShapefileDataStoreFactory.java b/modules/plugin/shapefile/src/main/java/org/geotools/data/shapefile/ShapefileDataStoreFactory.java index e4f3ef5..6cb1383 100644 --- a/modules/plugin/shapefile/src/main/java/org/geotools/data/shapefile/ShapefileDataStoreFactory.java +++ b/modules/plugin/shapefile/src/main/java/org/geotools/data/shapefile/ShapefileDataStoreFactory.java @@ -22,6 +22,7 @@ import java.net.MalformedURLException; import java.net.URI; import java.net.URL; import java.nio.charset.Charset; +import java.util.Arrays; import java.util.Collections; import java.util.HashMap; import java.util.Map; @@ -33,6 +34,7 @@ import org.geotools.data.DataStore; import org.geotools.data.DataUtilities; import org.geotools.data.FileDataStore; import org.geotools.data.FileDataStoreFactorySpi; +import org.geotools.data.DataAccessFactory.Param; import org.geotools.data.directory.DirectoryDataStore; import org.geotools.data.directory.FileStoreFactory; import org.geotools.data.shapefile.indexed.IndexType; @@ -149,7 +151,13 @@ public class ShapefileDataStoreFactory implements FileDataStoreFactorySpi { } }; - + /** + * Optional - marker parameter to allow shapefile ng support to be specified + */ + public static final Param SORT = new Param("sort", + String.class, "Sort strategy 'none' supported, 'memory' and 'disk' not supported", false, "none", + new KVP(Param.LEVEL, "advanced", Param.OPTIONS,Arrays.asList(new String[]{"none","memory"}))); + /** * Takes a map of parameters which describes how to access a DataStore and * determines if it can be read by the ShapefileDataStore or @@ -164,6 +172,23 @@ public class ShapefileDataStoreFactory implements FileDataStoreFactorySpi { */ public boolean canProcess(Map params) { boolean accept = false; + try { + String sort = (String) SORT.lookUp(params); + if( sort == null || "none".equals( sort )){ + // this is fine we can support that + } + else if ("memory".equals(sort)){ + return false; // not supported + } + else if ("disk".equals(sort)){ + return false; // not supported + } + else { + LOGGER.warning("Unexpected sort level request: '"+sort+"'"); + } + } catch (IOException e) { + return false; + } if (params.containsKey(URLP.key)) { try { URL url = (URL) URLP.lookUp(params); diff --git a/modules/unsupported/shapefile-ng/src/main/java/org/geotools/data/shapefile/ng/ShapefileDataStoreFactory.java b/modules/unsupported/shapefile-ng/src/main/java/org/geotools/data/shapefile/ng/ShapefileDataStoreFactory.java index 215ef46..941478a 100644 --- a/modules/unsupported/shapefile-ng/src/main/java/org/geotools/data/shapefile/ng/ShapefileDataStoreFactory.java +++ b/modules/unsupported/shapefile-ng/src/main/java/org/geotools/data/shapefile/ng/ShapefileDataStoreFactory.java @@ -109,6 +109,13 @@ public class ShapefileDataStoreFactory extends AbstractDataStoreFactory { }; /** + * Optional - marker parameter to allow shapefile ng support to be specified + */ + public static final Param SORT = new Param("sort", + String.class, "Sort strategy 'disk' supported, 'memory' and 'none' not supported", false, "disk", + new KVP(Param.LEVEL, "advanced")); + + /** * Optional - timezone to decode dates from the DBF file */ public static final Param DBFTIMEZONE = new Param("timezone", TimeZone.class, @@ -210,7 +217,20 @@ public class ShapefileDataStoreFactory extends AbstractDataStoreFactory { if (!super.canProcess(params)) { return false; } - + try { + String sort = (String) SORT.lookUp(params); + if( sort == null || "disk".equals( sort )){ + // this is fine we can support that + } + else if ("memory".equals(sort)){ + return false; // not supported + } + else { + LOGGER.warning("Unexpected sort level request: '"+sort+"'"); + } + } catch (IOException e) { + return false; + } try { URL url = (URL) URLP.lookUp(params); if (canProcess(url)) {