Modified: sis/trunk/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/Resources.properties URL: http://svn.apache.org/viewvc/sis/trunk/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/Resources.properties?rev=1815606&r1=1815605&r2=1815606&view=diff ============================================================================== --- sis/trunk/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/Resources.properties [ISO-8859-1] (original) +++ sis/trunk/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/Resources.properties [ISO-8859-1] Fri Nov 17 18:12:45 2017 @@ -20,6 +20,7 @@ # For resources shared by all modules in the Apache SIS project, see "org.apache.sis.util.resources" package. # AmbiguousName_4 = Name \u201c{3}\u201d is ambiguous because it can be understood as either \u201c{1}\u201d or \u201c{2}\u201d in the context of \u201c{0}\u201d data. +CanNotGetCommonMetadata_2 = Can not get metadata common to \u201c{0}\u201d files. Reason: {1} CanNotReadCRS_WKT_1 = Can not read the Coordinate Reference System (CRS) Well Known Text (WKT) in \u201c{0}\u201d. CanNotReadDirectory_1 = Can not read \u201c{0}\u201d directory. CanNotReadFile_2 = Can not read \u201c{1}\u201d as a file in the {0} format. @@ -36,6 +37,7 @@ DataStoreTimeZone = Time DirectoryContent_1 = Content of \u201c{0}\u201d directory. FeatureAlreadyPresent_2 = A feature named \u201c{1}\u201d is already present in the \u201c{0}\u201d data store. FeatureNotFound_2 = Feature \u201c{1}\u201d has not been found in the \u201c{0}\u201d data store. +FoliationRepresentation = Whether to assemble trajectory fragments (lines in CSV file) in a single feature instance. ExcessiveStringSize_3 = Character string in the \u201c{0}\u201d file is too long. The string has {2} characters while the limit is {1}. IllegalFeatureType_2 = The {0} data store does not accept features of type \u201c{1}\u201d. IllegalInputTypeForReader_2 = The {0} reader does not accept inputs of type \u2018{1}\u2019.
Modified: sis/trunk/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/Resources_fr.properties URL: http://svn.apache.org/viewvc/sis/trunk/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/Resources_fr.properties?rev=1815606&r1=1815605&r2=1815606&view=diff ============================================================================== --- sis/trunk/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/Resources_fr.properties [ISO-8859-1] (original) +++ sis/trunk/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/Resources_fr.properties [ISO-8859-1] Fri Nov 17 18:12:45 2017 @@ -25,6 +25,7 @@ # U+00A0 NO-BREAK SPACE before : # AmbiguousName_4 = Le nom \u00ab\u202f{3}\u202f\u00bb est ambigu\u00eb car il peut \u00eatre interpr\u00e9t\u00e9 aussi bien comme \u00ab\u202f{1}\u202f\u00bb ou \u00ab\u202f{2}\u202f\u00bb dans le contexte des donn\u00e9es de \u00ab\u202f{0}\u202f\u00bb. +CanNotGetCommonMetadata_2 = Ne peut pas obtenir les m\u00e9ta-donn\u00e9es communes aux fichiers \u00ab\u202f{0}\u202f\u00bb. Raison\u2008: {1} CanNotReadCRS_WKT_1 = Ne peut pas lire le syst\u00e8me de r\u00e9f\u00e9rence spatial dans le \u00ab\u202fWell Known Text\u202f\u00bb (WKT) de \u00ab\u202f{0}\u202f\u00bb. CanNotReadDirectory_1 = Ne peut pas lire le r\u00e9pertoire \u00ab\u202f{0}\u202f\u00bb. CanNotReadFile_2 = Ne peut pas lire \u00ab\u202f{1}\u202f\u00bb comme un fichier au format {0}. @@ -41,7 +42,8 @@ DataStoreTimeZone = Fuse DirectoryContent_1 = Contenu du r\u00e9pertoire \u00ab\u202f{0}\u202f\u00bb. ExcessiveStringSize_3 = La cha\u00eene de caract\u00e8res dans le fichier \u00ab\u202f{0}\u202f\u00bb est trop longue. La cha\u00eene fait {2} caract\u00e8res alors que la limite est {1}. FeatureAlreadyPresent_2 = Une entit\u00e9 nomm\u00e9e \u00ab\u202f{1}\u202f\u00bb est d\u00e9j\u00e0 pr\u00e9sente dans les donn\u00e9es de \u00ab\u202f{0}\u202f\u00bb. -FeatureNotFound_2 = L\u2019entit\u00e9 \u00ab\u202f{1}\u202f\u00bb n\u2019est pas \u00e9t\u00e9 trouv\u00e9e dans les donn\u00e9es de \u00ab\u202f{0}\u202f\u00bb. +FeatureNotFound_2 = L\u2019entit\u00e9 \u00ab\u202f{1}\u202f\u00bb n\u2019a pas \u00e9t\u00e9 trouv\u00e9e dans les donn\u00e9es de \u00ab\u202f{0}\u202f\u00bb. +FoliationRepresentation = Indique s\u2019il faut assembler les fragments de trajectoires (lignes dans un fichier CSV) dans une entit\u00e9 unique. IllegalFeatureType_2 = Le format {0} ne stocke pas de donn\u00e9es de type \u00ab\u202f{1}\u202f\u00bb. IllegalInputTypeForReader_2 = Le lecteur {0} n\u2019accepte pas des entr\u00e9s de type \u2018{1}\u2019. IllegalOutputTypeForWriter_2 = Le l\u2019encodeur {0} n\u2019accepte pas des sorties de type \u2018{1}\u2019. Modified: sis/trunk/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/URIDataStore.java URL: http://svn.apache.org/viewvc/sis/trunk/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/URIDataStore.java?rev=1815606&r1=1815605&r2=1815606&view=diff ============================================================================== --- sis/trunk/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/URIDataStore.java [UTF-8] (original) +++ sis/trunk/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/URIDataStore.java [UTF-8] Fri Nov 17 18:12:45 2017 @@ -17,14 +17,17 @@ package org.apache.sis.internal.storage; import java.net.URI; +import java.nio.charset.Charset; +import org.opengis.parameter.ParameterValueGroup; import org.opengis.parameter.ParameterDescriptor; import org.opengis.parameter.ParameterDescriptorGroup; -import org.opengis.parameter.ParameterValueGroup; +import org.opengis.parameter.ParameterNotFoundException; import org.apache.sis.parameter.ParameterBuilder; +import org.apache.sis.storage.StorageConnector; import org.apache.sis.storage.DataStore; import org.apache.sis.storage.DataStoreProvider; import org.apache.sis.storage.DataStoreException; -import org.apache.sis.storage.StorageConnector; +import org.apache.sis.storage.IllegalOpenParameterException; import org.apache.sis.internal.storage.io.IOUtilities; @@ -35,7 +38,7 @@ import org.apache.sis.internal.storage.i * * @author Johann Sorel (Geomatys) * @author Martin Desruisseaux (Geomatys) - * @version 0.8 + * @version 1.0 * @since 0.8 * @module */ @@ -69,12 +72,12 @@ public abstract class URIDataStore exten /** * Creates parameter value group for the current location, if non-null. - * This convenience method is used for public {@code DataStore} implementations that can not extend - * {@code URIDataStore} directly, because this class is internal. + * This convenience method is used for {@link DataStore#getOpenParameters()} implementations in public + * {@code DataStore} that can not extend {@code URIDataStore} directly, because this class is internal. * - * @param provider - * @param location - * @return + * @param provider the provider of the data store for which to get open parameters. + * @param location file opened by the data store. + * @return parameters to be returned by {@link DataStore#getOpenParameters()}. * * @todo Verify if non-exported classes in JDK9 are hidden from Javadoc, like package-private classes. * If true, we could remove this hack and extend {@code URIDataStore} even in public classes. @@ -99,11 +102,19 @@ public abstract class URIDataStore exten /** * Description of the location parameter. */ - public static final ParameterDescriptor<URI> LOCATION_PARAM = new ParameterBuilder() - .setDescription(Resources.formatInternational(Resources.Keys.DataStoreLocation)) - .addName(LOCATION) - .setRequired(true) - .create(URI.class, null); + public static final ParameterDescriptor<URI> LOCATION_PARAM; + + /** + * Description of the optional parameter for character encoding used by the data store. + * This parameter is not included in the descriptor created by {@link #build(ParameterBuilder)} + * default implementation. It is subclass responsibility to add it if desired. + */ + public static final ParameterDescriptor<Charset> ENCODING; + static { + final ParameterBuilder builder = new ParameterBuilder(); + ENCODING = builder.addName("encoding").setDescription(Resources.formatInternational(Resources.Keys.DataStoreEncoding)).create(Charset.class, null); + LOCATION_PARAM = builder.addName( LOCATION ).setDescription(Resources.formatInternational(Resources.Keys.DataStoreLocation)).setRequired(true).create(URI.class, null); + } /** * The parameter descriptor to be returned by {@link #getOpenParameters()}. @@ -161,6 +172,31 @@ public abstract class URIDataStore exten public static ParameterDescriptorGroup descriptor(final String name) { return new ParameterBuilder().addName(name).createGroup(LOCATION_PARAM); } + + /** + * Creates a storage connector initialized to the location declared in given parameters. + * This convenience method does not set any other parameters. + * + * @param provider the provider for which to create a storage connector (for error messages). + * @param parameters the parameters to use for creating a storage connector. + * @return the storage connector initialized to the location specified in the parameters. + * @throws IllegalOpenParameterException if no {@value #LOCATION} parameter has been found. + */ + public static StorageConnector connector(final DataStoreProvider provider, final ParameterValueGroup parameters) + throws IllegalOpenParameterException + { + ParameterNotFoundException cause = null; + try { + final Object location = parameters.parameter(LOCATION).getValue(); + if (location != null) { + return new StorageConnector(location); + } + } catch (ParameterNotFoundException e) { + cause = e; + } + throw new IllegalOpenParameterException(Resources.format(Resources.Keys.UndefinedParameter_2, + provider.getShortName(), LOCATION), cause); + } } /** Modified: sis/trunk/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/csv/Store.java URL: http://svn.apache.org/viewvc/sis/trunk/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/csv/Store.java?rev=1815606&r1=1815605&r2=1815606&view=diff ============================================================================== --- sis/trunk/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/csv/Store.java [UTF-8] (original) +++ sis/trunk/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/csv/Store.java [UTF-8] Fri Nov 17 18:12:45 2017 @@ -39,6 +39,7 @@ import org.opengis.referencing.crs.Tempo import org.opengis.referencing.operation.TransformException; import org.apache.sis.feature.DefaultAttributeType; import org.apache.sis.feature.DefaultFeatureType; +import org.apache.sis.feature.FoliationRepresentation; import org.apache.sis.referencing.CRS; import org.apache.sis.referencing.CommonCRS; import org.apache.sis.internal.referencing.GeodeticObjectBuilder; @@ -54,6 +55,7 @@ import org.apache.sis.geometry.GeneralEn import org.apache.sis.geometry.ImmutableEnvelope; import org.apache.sis.metadata.iso.DefaultMetadata; import org.apache.sis.metadata.sql.MetadataStoreException; +import org.apache.sis.storage.DataOptionKey; import org.apache.sis.storage.DataStoreException; import org.apache.sis.storage.DataStoreContentException; import org.apache.sis.storage.DataStoreReferencingException; @@ -81,7 +83,7 @@ import org.apache.sis.feature.AbstractId * See package javadoc for more information on the syntax. * * @author Martin Desruisseaux (Geomatys) - * @version 0.8 + * @version 1.0 * @since 0.7 * @module */ @@ -224,12 +226,9 @@ final class Store extends URIDataStore i * * @param provider the factory that created this {@code DataStore} instance, or {@code null} if unspecified. * @param connector information about the storage (URL, stream, <i>etc</i>). - * @param immediate {@code true} for forcing the creation of a distinct {@code Feature} instance for each line. * @throws DataStoreException if an error occurred while opening the stream. */ - public Store(final StoreProvider provider, final StorageConnector connector, final boolean immediate) - throws DataStoreException - { + public Store(final StoreProvider provider, final StorageConnector connector) throws DataStoreException { super(provider, connector); final Reader r = connector.getStorageAs(Reader.class); connector.closeAllExcept(r); @@ -239,7 +238,7 @@ final class Store extends URIDataStore i } source = (r instanceof BufferedReader) ? (BufferedReader) r : new LineNumberReader(r); geometries = Geometries.implementation(connector.getOption(OptionKey.GEOMETRY_LIBRARY)); - dissociate = immediate; + dissociate = FoliationRepresentation.FRAGMENTED.equals(connector.getOption(DataOptionKey.FOLIATION_REPRESENTATION)); GeneralEnvelope envelope = null; DefaultFeatureType featureType = null; Foliation foliation = null; Modified: sis/trunk/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/csv/StoreProvider.java URL: http://svn.apache.org/viewvc/sis/trunk/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/csv/StoreProvider.java?rev=1815606&r1=1815605&r2=1815606&view=diff ============================================================================== --- sis/trunk/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/csv/StoreProvider.java [UTF-8] (original) +++ sis/trunk/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/csv/StoreProvider.java [UTF-8] Fri Nov 17 18:12:45 2017 @@ -16,14 +16,23 @@ */ package org.apache.sis.internal.storage.csv; +import org.opengis.parameter.ParameterValueGroup; +import org.opengis.parameter.ParameterDescriptor; +import org.opengis.parameter.ParameterDescriptorGroup; +import org.apache.sis.parameter.ParameterBuilder; +import org.apache.sis.parameter.Parameters; import org.apache.sis.storage.DataStore; import org.apache.sis.storage.DataStoreException; +import org.apache.sis.storage.DataOptionKey; import org.apache.sis.storage.ProbeResult; import org.apache.sis.storage.StorageConnector; +import org.apache.sis.feature.FoliationRepresentation; +import org.apache.sis.internal.storage.Resources; import org.apache.sis.internal.storage.Capability; import org.apache.sis.internal.storage.Capabilities; import org.apache.sis.internal.storage.URIDataStore; import org.apache.sis.internal.storage.wkt.FirstKeywordPeek; +import org.apache.sis.util.ArgumentChecks; /** @@ -35,7 +44,7 @@ import org.apache.sis.internal.storage.w * the part of the caller. However the {@link Store} instances created by this factory are not thread-safe. * * @author Martin Desruisseaux (Geomatys) - * @version 0.8 + * @version 1.0 * @since 0.8 * @module */ @@ -101,6 +110,19 @@ public final class StoreProvider extends } /** + * Description of the optional parameter for specifying whether the reader should assemble distinct CSV lines + * into a single {@code Feature} instance forming a foliation. This is ignored if the CSV file does not seem + * to contain moving features. + */ + private static final ParameterDescriptor<FoliationRepresentation> FOLIATION; + static { + final ParameterBuilder builder = new ParameterBuilder(); + FOLIATION = builder.addName("foliation") + .setDescription(Resources.formatInternational(Resources.Keys.FoliationRepresentation)) + .create(FoliationRepresentation.class, FoliationRepresentation.ASSEMBLED); + } + + /** * Creates a new provider. */ public StoreProvider() { @@ -138,6 +160,32 @@ public final class StoreProvider extends */ @Override public DataStore open(final StorageConnector connector) throws DataStoreException { - return new Store(this, connector, false); + return new Store(this, connector); + } + + /** + * Returns a CSV {@link Store} implementation from the given parameters. + * + * @return a data store implementation associated with this provider for the given parameters. + * @throws DataStoreException if an error occurred while creating the data store instance. + */ + @Override + public DataStore open(final ParameterValueGroup parameters) throws DataStoreException { + ArgumentChecks.ensureNonNull("parameter", parameters); + final StorageConnector connector = connector(this, parameters); + final Parameters pg = Parameters.castOrWrap(parameters); + connector.setOption(DataOptionKey.ENCODING, pg.getValue(ENCODING)); + connector.setOption(DataOptionKey.FOLIATION_REPRESENTATION, pg.getValue(FOLIATION)); + return new Store(this, connector); + } + + /** + * Invoked by {@link #getOpenParameters()} the first time that a parameter descriptor needs to be created. + * + * @return the parameters descriptor for CSV files. + */ + @Override + protected ParameterDescriptorGroup build(final ParameterBuilder builder) { + return builder.createGroup(LOCATION_PARAM, ENCODING, FOLIATION); } } Modified: sis/trunk/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/csv/package-info.java URL: http://svn.apache.org/viewvc/sis/trunk/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/csv/package-info.java?rev=1815606&r1=1815605&r2=1815606&view=diff ============================================================================== --- sis/trunk/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/csv/package-info.java [UTF-8] (original) +++ sis/trunk/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/csv/package-info.java [UTF-8] Fri Nov 17 18:12:45 2017 @@ -53,7 +53,7 @@ * </ul> * * @author Martin Desruisseaux (Geomatys) - * @version 0.8 + * @version 1.0 * @since 0.7 * @module */ Modified: sis/trunk/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/folder/FolderStoreProvider.java URL: http://svn.apache.org/viewvc/sis/trunk/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/folder/FolderStoreProvider.java?rev=1815606&r1=1815605&r2=1815606&view=diff ============================================================================== --- sis/trunk/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/folder/FolderStoreProvider.java [UTF-8] (original) +++ sis/trunk/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/folder/FolderStoreProvider.java [UTF-8] Fri Nov 17 18:12:45 2017 @@ -27,7 +27,6 @@ import org.opengis.util.InternationalStr import org.opengis.parameter.ParameterValueGroup; import org.opengis.parameter.ParameterDescriptor; import org.opengis.parameter.ParameterDescriptorGroup; -import org.opengis.parameter.ParameterNotFoundException; import org.apache.sis.parameter.ParameterBuilder; import org.apache.sis.parameter.Parameters; import org.apache.sis.storage.DataStore; @@ -35,7 +34,6 @@ import org.apache.sis.storage.DataStoreP import org.apache.sis.storage.DataStoreException; import org.apache.sis.storage.StorageConnector; import org.apache.sis.storage.ProbeResult; -import org.apache.sis.storage.IllegalOpenParameterException; import org.apache.sis.util.ArgumentChecks; import org.apache.sis.util.logging.Logging; import org.apache.sis.internal.system.Modules; @@ -44,7 +42,7 @@ import org.apache.sis.internal.storage.U import org.apache.sis.setup.OptionKey; // Branch-dependent imports -import org.apache.sis.referencing.AbstractIdentifiedObject; +import org.apache.sis.parameter.DefaultParameterDescriptor; /** @@ -87,11 +85,18 @@ public final class FolderStoreProvider e final ParameterDescriptor<Path> location; final ParameterBuilder builder = new ParameterBuilder(); final InternationalString remark = Resources.formatInternational(Resources.Keys.UsedOnlyIfNotEncoded); + ENCODING = annotate(builder, URIDataStore.Provider.ENCODING, remark); LOCALE = builder.addName("locale" ).setDescription(Resources.formatInternational(Resources.Keys.DataStoreLocale )).setRemarks(remark).create(Locale.class, null); TIMEZONE = builder.addName("timezone").setDescription(Resources.formatInternational(Resources.Keys.DataStoreTimeZone)).setRemarks(remark).create(TimeZone.class, null); - ENCODING = builder.addName("encoding").setDescription(Resources.formatInternational(Resources.Keys.DataStoreEncoding)).setRemarks(remark).create(Charset.class, null); - location = builder.addName( LOCATION ).setDescription(((AbstractIdentifiedObject) URIDataStore.Provider.LOCATION_PARAM).getDescription()).setRequired(true) .create(Path.class, null); - PARAMETERS = builder.addName( NAME ).createGroup(location, LOCALE, TIMEZONE, ENCODING); + location = new ParameterBuilder(URIDataStore.Provider.LOCATION_PARAM).create(Path.class, null); + PARAMETERS = builder.addName(NAME).createGroup(location, LOCALE, TIMEZONE, ENCODING); + } + + /** + * Creates a parameter descriptor equals to the given one except for the remarks which are set to the given value. + */ + private static <T> ParameterDescriptor<T> annotate(ParameterBuilder builder, ParameterDescriptor<T> e, InternationalString remark) { + return builder.addName(e.getName()).setDescription(((DefaultParameterDescriptor) e).getDescription()).setRemarks(remark).create(e.getValueClass(), null); } /** @@ -176,22 +181,12 @@ public final class FolderStoreProvider e @Override public DataStore open(final ParameterValueGroup parameters) throws DataStoreException { ArgumentChecks.ensureNonNull("parameter", parameters); - ParameterNotFoundException cause = null; - try { - final Object location = parameters.parameter(LOCATION).getValue(); - if (location != null) { - final Parameters pg = Parameters.castOrWrap(parameters); - final StorageConnector connector = new StorageConnector(location); - connector.setOption(OptionKey.LOCALE, pg.getValue(LOCALE)); - connector.setOption(OptionKey.TIMEZONE, pg.getValue(TIMEZONE)); - connector.setOption(OptionKey.ENCODING, pg.getValue(ENCODING)); - return open(connector); - } - } catch (ParameterNotFoundException e) { - cause = e; - } - throw new IllegalOpenParameterException(Resources.format(Resources.Keys.UndefinedParameter_2, - getShortName(), LOCATION), cause); + final StorageConnector connector = URIDataStore.Provider.connector(this, parameters); + final Parameters pg = Parameters.castOrWrap(parameters); + connector.setOption(OptionKey.LOCALE, pg.getValue(LOCALE)); + connector.setOption(OptionKey.TIMEZONE, pg.getValue(TIMEZONE)); + connector.setOption(OptionKey.ENCODING, pg.getValue(ENCODING)); + return open(connector); } /** Modified: sis/trunk/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/package-info.java URL: http://svn.apache.org/viewvc/sis/trunk/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/package-info.java?rev=1815606&r1=1815605&r2=1815606&view=diff ============================================================================== --- sis/trunk/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/package-info.java [UTF-8] (original) +++ sis/trunk/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/package-info.java [UTF-8] Fri Nov 17 18:12:45 2017 @@ -24,7 +24,7 @@ * may change in incompatible ways in any future version without notice. * * @author Martin Desruisseaux (Geomatys) - * @version 0.8 + * @version 1.0 * @since 0.3 * @module */ Modified: sis/trunk/storage/sis-storage/src/main/java/org/apache/sis/storage/DataStoreProvider.java URL: http://svn.apache.org/viewvc/sis/trunk/storage/sis-storage/src/main/java/org/apache/sis/storage/DataStoreProvider.java?rev=1815606&r1=1815605&r2=1815606&view=diff ============================================================================== --- sis/trunk/storage/sis-storage/src/main/java/org/apache/sis/storage/DataStoreProvider.java [UTF-8] (original) +++ sis/trunk/storage/sis-storage/src/main/java/org/apache/sis/storage/DataStoreProvider.java [UTF-8] Fri Nov 17 18:12:45 2017 @@ -18,10 +18,9 @@ package org.apache.sis.storage; import org.opengis.parameter.ParameterValueGroup; import org.opengis.parameter.ParameterDescriptorGroup; -import org.opengis.parameter.ParameterNotFoundException; import org.opengis.metadata.distribution.Format; import org.apache.sis.internal.simple.SimpleFormat; -import org.apache.sis.internal.storage.Resources; +import org.apache.sis.internal.storage.URIDataStore; import org.apache.sis.metadata.iso.citation.DefaultCitation; import org.apache.sis.metadata.iso.distribution.DefaultFormat; import org.apache.sis.measure.Range; @@ -287,18 +286,6 @@ public abstract class DataStoreProvider */ public DataStore open(final ParameterValueGroup parameters) throws DataStoreException { ArgumentChecks.ensureNonNull("parameter", parameters); - ParameterNotFoundException cause = null; - Object location; - try { - location = parameters.parameter(LOCATION).getValue(); - } catch (ParameterNotFoundException e) { - location = null; - cause = e; - } - if (location == null) { - throw new IllegalOpenParameterException(Resources.format(Resources.Keys.UndefinedParameter_2, - getShortName(), LOCATION), cause); - } - return open(new StorageConnector(location)); + return open(URIDataStore.Provider.connector(this, parameters)); } } Modified: sis/trunk/storage/sis-storage/src/main/java/org/apache/sis/storage/package-info.java URL: http://svn.apache.org/viewvc/sis/trunk/storage/sis-storage/src/main/java/org/apache/sis/storage/package-info.java?rev=1815606&r1=1815605&r2=1815606&view=diff ============================================================================== --- sis/trunk/storage/sis-storage/src/main/java/org/apache/sis/storage/package-info.java [UTF-8] (original) +++ sis/trunk/storage/sis-storage/src/main/java/org/apache/sis/storage/package-info.java [UTF-8] Fri Nov 17 18:12:45 2017 @@ -26,7 +26,7 @@ * * @author Johann Sorel (Geomatys) * @author Martin Desruisseaux (Geomatys) - * @version 0.8 + * @version 1.0 * @since 0.3 * @module */ Modified: sis/trunk/storage/sis-storage/src/test/java/org/apache/sis/internal/storage/csv/StoreTest.java URL: http://svn.apache.org/viewvc/sis/trunk/storage/sis-storage/src/test/java/org/apache/sis/internal/storage/csv/StoreTest.java?rev=1815606&r1=1815605&r2=1815606&view=diff ============================================================================== --- sis/trunk/storage/sis-storage/src/test/java/org/apache/sis/internal/storage/csv/StoreTest.java [UTF-8] (original) +++ sis/trunk/storage/sis-storage/src/test/java/org/apache/sis/internal/storage/csv/StoreTest.java [UTF-8] Fri Nov 17 18:12:45 2017 @@ -22,8 +22,10 @@ import java.io.StringReader; import org.opengis.metadata.Metadata; import org.opengis.metadata.extent.Extent; import org.opengis.metadata.extent.GeographicBoundingBox; +import org.apache.sis.feature.FoliationRepresentation; import org.apache.sis.storage.DataStoreException; import org.apache.sis.storage.StorageConnector; +import org.apache.sis.storage.DataOptionKey; import org.apache.sis.test.TestCase; import org.junit.Test; import com.esri.core.geometry.Point2D; @@ -47,7 +49,7 @@ import org.apache.sis.internal.jdk8.Inst * Tests {@link Store}. * * @author Martin Desruisseaux (Geomatys) - * @version 0.8 + * @version 1.0 * @since 0.7 * @module */ @@ -80,6 +82,15 @@ public final strictfp class StoreTest ex } /** + * Opens a CSV store on the test data for reading the lines as-is, without assembling them in a single trajectory. + */ + private static Store open() throws DataStoreException { + StorageConnector connector = new StorageConnector(testData()); + connector.setOption(DataOptionKey.FOLIATION_REPRESENTATION, FoliationRepresentation.FRAGMENTED); + return new Store(null, connector); + } + + /** * Tests {@link Store#getMetadata()}. * * @throws DataStoreException if an error occurred while parsing the data. @@ -87,7 +98,7 @@ public final strictfp class StoreTest ex @Test public void testGetMetadata() throws DataStoreException { final Metadata metadata; - try (Store store = new Store(null, new StorageConnector(testData()), true)) { + try (Store store = open()) { metadata = store.getMetadata(); } final Extent extent = getSingleton(((AbstractIdentification) getSingleton(metadata.getIdentificationInfo())).getExtents()); @@ -106,7 +117,7 @@ public final strictfp class StoreTest ex */ @Test public void testStaticFeatures() throws DataStoreException { - try (Store store = new Store(null, new StorageConnector(testData()), true)) { + try (Store store = open()) { verifyFeatureType(store.featureType, double[].class, 1); assertEquals("foliation", Foliation.TIME, store.foliation); final Iterator<AbstractFeature> it = store.features(false).iterator(); @@ -135,7 +146,7 @@ public final strictfp class StoreTest ex @Test public void testMovingFeatures() throws DataStoreException { isMovingFeature = true; - try (Store store = new Store(null, new StorageConnector(testData()), false)) { + try (Store store = new Store(null, new StorageConnector(testData()))) { verifyFeatureType(store.featureType, Polyline.class, Integer.MAX_VALUE); assertEquals("foliation", Foliation.TIME, store.foliation); final Iterator<AbstractFeature> it = store.features(false).iterator();