This is an automated email from the ASF dual-hosted git repository.
desruisseaux pushed a commit to branch geoapi-4.0
in repository https://gitbox.apache.org/repos/asf/sis.git
The following commit(s) were added to refs/heads/geoapi-4.0 by this push:
new 874c7d7056 Fix a few deprecation warnings.
874c7d7056 is described below
commit 874c7d7056ede39844ad63be875b95d130c3d0b5
Author: Martin Desruisseaux <[email protected]>
AuthorDate: Sun Jul 16 23:37:54 2023 +0200
Fix a few deprecation warnings.
---
.../apache/sis/console/FormattedOutputCommand.java | 2 +-
.../java/org/apache/sis/feature/Validator.java | 1 +
.../java/org/apache/sis/image/ImageProcessor.java | 3 +
.../org/apache/sis/feature/CustomAttribute.java | 3 +-
.../org/apache/sis/feature/FeatureTestCase.java | 14 ++-
.../apache/sis/feature/SingletonAttributeTest.java | 1 +
.../apache/sis/internal/jaxb/gco/GO_Record.java | 2 +-
.../internal/metadata/TransformationAccuracy.java | 1 +
.../metadata/iso/distribution/DefaultDataFile.java | 1 +
.../sis/metadata/iso/quality/AbstractElement.java | 1 +
.../iso/quality/AbstractTemporalQuality.java | 1 +
.../metadata/iso/quality/DefaultDataQuality.java | 1 +
...DefaultNonQuantitativeAttributeCorrectness.java | 1 +
.../iso/quality/DefaultQuantitativeResult.java | 1 +
.../org/apache/sis/metadata/sql/Dispatcher.java | 2 +-
.../org/apache/sis/util/iso/DefaultRecordType.java | 5 +-
.../sis/metadata/iso/DefaultMetadataTest.java | 2 +-
.../apache/sis/metadata/iso/MarshallingTest.java | 14 +--
.../java/org/apache/sis/test/sql/TestDatabase.java | 2 -
.../sis/util/iso/DefaultRecordSchemaTest.java | 3 +-
.../org/apache/sis/util/iso/DefaultRecordTest.java | 8 +-
.../apache/sis/util/iso/DefaultRecordTypeTest.java | 1 +
.../referencing/PositionalAccuracyConstant.java | 3 +-
.../provider/MolodenskyInterpolation.java | 2 +
.../apache/sis/io/wkt/GeodeticObjectParser.java | 1 +
.../transform/DefaultMathTransformFactory.java | 2 +
.../transform/InterpolatedMolodenskyTransform.java | 2 +
.../InterpolatedMolodenskyTransform2D.java | 2 +
.../referencing/provider/ProvidersTest.java | 1 +
.../sis/referencing/ImmutableIdentifierTest.java | 1 +
.../sis/test/integration/DatumShiftTest.java | 2 +-
.../sis/test/integration/MetadataVerticalTest.java | 2 +-
.../sis/internal/converter/StringConverter.java | 4 +-
.../org/apache/sis/internal/system/Reflect.java | 2 +-
.../apache/sis/internal/util/PropertyFormat.java | 2 +-
.../sis/util/DefaultInternationalString.java | 5 +-
.../src/main/java/org/apache/sis/util/Locales.java | 2 +
.../sis/internal/converter/PathConverterTest.java | 11 +-
.../internal/converter/StringConverterTest.java | 2 +-
.../src/test/java/org/apache/sis/test/Assume.java | 4 +-
.../test/java/org/apache/sis/util/LocalesTest.java | 2 +
.../apache/sis/storage/landsat/MetadataReader.java | 5 +-
.../apache/sis/storage/geotiff/GeoTiffStore.java | 3 +-
.../org/apache/sis/internal/netcdf/TestCase.java | 7 +-
.../sis/internal/sql/feature/ValueGetter.java | 4 +-
.../sis/internal/storage/MetadataBuilder.java | 38 ++-----
.../apache/sis/internal/storage/PRJDataStore.java | 13 ++-
.../org/apache/sis/internal/storage/csv/Store.java | 2 +-
.../sis/internal/storage/esri/RasterStore.java | 3 +-
.../apache/sis/internal/storage/folder/Store.java | 3 +-
.../sis/internal/storage/io/IOUtilities.java | 119 ++++++++++++---------
.../sis/internal/storage/io/IOUtilitiesTest.java | 61 ++++++-----
.../sis/internal/storage/gpx/WriterTest.java | 2 +
53 files changed, 217 insertions(+), 165 deletions(-)
diff --git
a/application/sis-console/src/main/java/org/apache/sis/console/FormattedOutputCommand.java
b/application/sis-console/src/main/java/org/apache/sis/console/FormattedOutputCommand.java
index 7d01a2891e..17527daa4f 100644
---
a/application/sis-console/src/main/java/org/apache/sis/console/FormattedOutputCommand.java
+++
b/application/sis-console/src/main/java/org/apache/sis/console/FormattedOutputCommand.java
@@ -212,7 +212,7 @@ abstract class FormattedOutputCommand extends CommandRunner
{
* @throws JAXBException if an error occurred while producing the XML
output using JAXB.
* @throws IOException should never happen since we are appending to a
print writer.
*/
- @SuppressWarnings("UseOfSystemOutOrSystemErr")
+ @SuppressWarnings({"UseOfSystemOutOrSystemErr", "deprecation"})
final void format(final Object object) throws DataStoreException,
JAXBException, IOException {
switch (outputFormat) {
case TEXT: {
diff --git
a/core/sis-feature/src/main/java/org/apache/sis/feature/Validator.java
b/core/sis-feature/src/main/java/org/apache/sis/feature/Validator.java
index 4ea92464f9..6c8ead25a9 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/feature/Validator.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/feature/Validator.java
@@ -86,6 +86,7 @@ final class Validator {
* @param explanation explanation of the constraint violation.
* @return the {@code report}, or a new report if {@code report} was null.
*/
+ @SuppressWarnings("deprecation")
private AbstractElement addViolationReport(AbstractElement report,
final PropertyType type, final InternationalString explanation)
{
diff --git
a/core/sis-feature/src/main/java/org/apache/sis/image/ImageProcessor.java
b/core/sis-feature/src/main/java/org/apache/sis/image/ImageProcessor.java
index 9b92aecd31..333156b27c 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/image/ImageProcessor.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/image/ImageProcessor.java
@@ -1281,6 +1281,7 @@ public class ImageProcessor implements Cloneable {
* @param colors colors to use for each range of values in the source
image.
* @deprecated Replaced by {@link #visualize(RenderedImage)} with colors
map inferred from the {@link Colorizer}.
*/
+ @SuppressWarnings("removal")
@Deprecated(since="1.4", forRemoval=true)
public synchronized RenderedImage visualize(final RenderedImage source,
final Map<NumberRange<?>,Color[]> colors) {
/*
@@ -1305,6 +1306,7 @@ public class ImageProcessor implements Cloneable {
* @param ranges description of {@code source} bands, or {@code null} if
none. This is typically
* obtained by {@link
org.apache.sis.coverage.grid.GridCoverage#getSampleDimensions()}.
*/
+ @SuppressWarnings("removal")
@Deprecated(since="1.4", forRemoval=true)
public RenderedImage visualize(final RenderedImage source, final
List<SampleDimension> ranges) {
ArgumentChecks.ensureNonNull("source", source);
@@ -1458,6 +1460,7 @@ public class ImageProcessor implements Cloneable {
* @param ranges description of {@code source} bands, or {@code null} if
none. This is typically
* obtained by {@link
org.apache.sis.coverage.grid.GridCoverage#getSampleDimensions()}.
*/
+ @SuppressWarnings("removal")
@Deprecated(since="1.4", forRemoval=true)
public RenderedImage visualize(final RenderedImage source, final Rectangle
bounds, final MathTransform toSource,
final List<SampleDimension> ranges)
diff --git
a/core/sis-feature/src/test/java/org/apache/sis/feature/CustomAttribute.java
b/core/sis-feature/src/test/java/org/apache/sis/feature/CustomAttribute.java
index 48fc8926f3..8de8967a57 100644
--- a/core/sis-feature/src/test/java/org/apache/sis/feature/CustomAttribute.java
+++ b/core/sis-feature/src/test/java/org/apache/sis/feature/CustomAttribute.java
@@ -33,7 +33,7 @@ import org.opengis.feature.AttributeType;
* This implementation adds its own criterion to the attribute quality
evaluation.
*
* @author Martin Desruisseaux (Geomatys)
- * @version 0.5
+ * @version 1.4
* @since 0.5
*/
@SuppressWarnings("serial")
@@ -76,6 +76,7 @@ final class CustomAttribute<V> extends AbstractAttribute<V> {
* Evaluates the quality of this attribute with a custom rule.
*/
@Override
+ @SuppressWarnings("deprecation")
public DataQuality quality() {
final DefaultDataQuality quality = (DefaultDataQuality)
super.quality();
final DefaultDomainConsistency report = new
DefaultDomainConsistency();
diff --git
a/core/sis-feature/src/test/java/org/apache/sis/feature/FeatureTestCase.java
b/core/sis-feature/src/test/java/org/apache/sis/feature/FeatureTestCase.java
index 36d2ab7904..bb62f5db81 100644
--- a/core/sis-feature/src/test/java/org/apache/sis/feature/FeatureTestCase.java
+++ b/core/sis-feature/src/test/java/org/apache/sis/feature/FeatureTestCase.java
@@ -19,6 +19,7 @@ package org.apache.sis.feature;
import java.util.Map;
import java.util.List;
import java.util.Collection;
+import org.opengis.util.InternationalString;
import org.opengis.metadata.quality.DataQuality;
import org.opengis.metadata.quality.Element;
import org.opengis.metadata.quality.Result;
@@ -45,7 +46,7 @@ import org.opengis.feature.Property;
*
* @author Martin Desruisseaux (Geomatys)
* @author Marc le Bihan
- * @version 0.8
+ * @version 1.4
* @since 0.5
*/
public abstract class FeatureTestCase extends TestCase {
@@ -330,14 +331,18 @@ public abstract class FeatureTestCase extends TestCase {
int numOccurrences = 0;
final DataQuality quality = verifyQualityReports("population");
for (final Element report : quality.getReports()) {
+ @SuppressWarnings("deprecation")
final String identifier =
report.getMeasureIdentification().toString();
if (identifier.equals("city")) {
numOccurrences++;
final Result result =
TestUtilities.getSingleton(report.getResults());
assertInstanceOf("result", QuantitativeResult.class,
result);
+
+ @SuppressWarnings("deprecation")
+ final InternationalString error = ((QuantitativeResult)
result).getErrorStatistic();
assertEquals("quality.report.result.errorStatistic",
CustomAttribute.ADDITIONAL_QUALITY_INFO,
- String.valueOf(((QuantitativeResult)
result).getErrorStatistic()));
+ String.valueOf(error));
}
}
assertEquals("Number of reports.", 1, numOccurrences);
@@ -381,8 +386,9 @@ public abstract class FeatureTestCase extends TestCase {
if (result instanceof ConformanceResult &&
!((ConformanceResult) result).pass()) {
assertTrue("Too many reports", anomalyIndex <
anomalousProperties.length);
final String propertyName =
anomalousProperties[anomalyIndex];
- final String identifier =
report.getMeasureIdentification().toString();
- final String explanation = ((ConformanceResult)
result).getExplanation().toString();
+ @SuppressWarnings("deprecation")
+ final String identifier =
String.valueOf(report.getMeasureIdentification());
+ final String explanation =
String.valueOf(((ConformanceResult) result).getExplanation());
assertEquals("quality.report.measureIdentification",
propertyName, identifier);
assertTrue ("quality.report.result.explanation",
explanation.contains(propertyName));
anomalyIndex++;
diff --git
a/core/sis-feature/src/test/java/org/apache/sis/feature/SingletonAttributeTest.java
b/core/sis-feature/src/test/java/org/apache/sis/feature/SingletonAttributeTest.java
index b6ce21cb71..fde89024e4 100644
---
a/core/sis-feature/src/test/java/org/apache/sis/feature/SingletonAttributeTest.java
+++
b/core/sis-feature/src/test/java/org/apache/sis/feature/SingletonAttributeTest.java
@@ -116,6 +116,7 @@ public final class SingletonAttributeTest extends TestCase {
* @param explanation the expected explanation.
* @param consistency the report element to test.
*/
+ @SuppressWarnings("deprecation")
private static void assertDomainConsistencyEquals(final String
propertyName, final String explanation,
final DomainConsistency consistency)
{
diff --git
a/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/gco/GO_Record.java
b/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/gco/GO_Record.java
index b0ab926d59..d6fb401e65 100644
---
a/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/gco/GO_Record.java
+++
b/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/gco/GO_Record.java
@@ -85,7 +85,7 @@ public class GO_Record extends PropertyType<GO_Record,
Record> {
* @param metadata the unmarshalled metadata.
*/
public final void setElement(final DefaultRecord metadata) {
- if (!metadata.getAttributes().isEmpty()) {
+ if (!metadata.getFields().isEmpty()) {
this.metadata = metadata;
}
}
diff --git
a/core/sis-metadata/src/main/java/org/apache/sis/internal/metadata/TransformationAccuracy.java
b/core/sis-metadata/src/main/java/org/apache/sis/internal/metadata/TransformationAccuracy.java
index 94edf600cd..27a0867e21 100644
---
a/core/sis-metadata/src/main/java/org/apache/sis/internal/metadata/TransformationAccuracy.java
+++
b/core/sis-metadata/src/main/java/org/apache/sis/internal/metadata/TransformationAccuracy.java
@@ -62,6 +62,7 @@ public final class TransformationAccuracy extends Static {
* @param accuracy the accuracy in metres.
* @return a positional accuracy with the given value.
*/
+ @SuppressWarnings("deprecation")
public static PositionalAccuracy create(final Double accuracy) {
PositionalAccuracy p = CACHE.get(accuracy);
if (p == null) {
diff --git
a/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/distribution/DefaultDataFile.java
b/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/distribution/DefaultDataFile.java
index 45b008708c..eef5b1659f 100644
---
a/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/distribution/DefaultDataFile.java
+++
b/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/distribution/DefaultDataFile.java
@@ -126,6 +126,7 @@ public class DefaultDataFile extends ISOMetadata implements
DataFile {
*
* @see #castOrCopy(DataFile)
*/
+ @SuppressWarnings("deprecation")
public DefaultDataFile(final DataFile object) {
super(object);
if (object != null) {
diff --git
a/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/AbstractElement.java
b/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/AbstractElement.java
index b8a28f8d04..b7805439b3 100644
---
a/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/AbstractElement.java
+++
b/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/AbstractElement.java
@@ -101,6 +101,7 @@ import static
org.apache.sis.util.collection.Containers.isNullOrEmpty;
AbstractMetaquality.class,
DefaultQualityMeasure.class // Not a subclass, but "weakly" associated.
})
+@SuppressWarnings("deprecation")
public class AbstractElement extends ISOMetadata implements Element {
/**
* Serial number for inter-operability with different versions.
diff --git
a/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/AbstractTemporalQuality.java
b/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/AbstractTemporalQuality.java
index 9e501feb85..c025eb7e66 100644
---
a/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/AbstractTemporalQuality.java
+++
b/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/AbstractTemporalQuality.java
@@ -55,6 +55,7 @@ import org.opengis.metadata.quality.TemporalAccuracy;
DefaultTemporalConsistency.class,
DefaultTemporalValidity.class
})
+@SuppressWarnings("deprecation")
public class AbstractTemporalQuality extends AbstractElement implements
TemporalQuality {
/**
* Serial number for inter-operability with different versions.
diff --git
a/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultDataQuality.java
b/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultDataQuality.java
index 23828525d4..8729c012d9 100644
---
a/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultDataQuality.java
+++
b/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultDataQuality.java
@@ -136,6 +136,7 @@ public class DefaultDataQuality extends ISOMetadata
implements DataQuality {
*
* @see #castOrCopy(DataQuality)
*/
+ @SuppressWarnings("deprecation")
public DefaultDataQuality(final DataQuality object) {
super(object);
if (object != null) {
diff --git
a/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultNonQuantitativeAttributeCorrectness.java
b/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultNonQuantitativeAttributeCorrectness.java
index e98269e9fd..195d67988b 100644
---
a/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultNonQuantitativeAttributeCorrectness.java
+++
b/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultNonQuantitativeAttributeCorrectness.java
@@ -50,6 +50,7 @@ import
org.opengis.metadata.quality.NonQuantitativeAttributeCorrectness;
@XmlSeeAlso({
DefaultNonQuantitativeAttributeAccuracy.class
})
+@SuppressWarnings("deprecation")
public class DefaultNonQuantitativeAttributeCorrectness extends
AbstractThematicAccuracy
implements NonQuantitativeAttributeCorrectness
{
diff --git
a/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultQuantitativeResult.java
b/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultQuantitativeResult.java
index f71700d502..096d380d2c 100644
---
a/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultQuantitativeResult.java
+++
b/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultQuantitativeResult.java
@@ -109,6 +109,7 @@ public class DefaultQuantitativeResult extends
AbstractResult implements Quantit
*
* @see #castOrCopy(QuantitativeResult)
*/
+ @SuppressWarnings("deprecation")
public DefaultQuantitativeResult(final QuantitativeResult object) {
super(object);
if (object != null) {
diff --git
a/core/sis-metadata/src/main/java/org/apache/sis/metadata/sql/Dispatcher.java
b/core/sis-metadata/src/main/java/org/apache/sis/metadata/sql/Dispatcher.java
index 274e8a67a6..9d48372338 100644
---
a/core/sis-metadata/src/main/java/org/apache/sis/metadata/sql/Dispatcher.java
+++
b/core/sis-metadata/src/main/java/org/apache/sis/metadata/sql/Dispatcher.java
@@ -231,7 +231,7 @@ final class Dispatcher implements InvocationHandler {
if (impl == null) {
return value;
}
- cache = impl.newInstance();
+ cache =
impl.getDeclaredConstructor().newInstance();
if (cache instanceof ModifiableMetadata) {
((ModifiableMetadata)
cache).transitionTo(ModifiableMetadata.State.COMPLETABLE);
}
diff --git
a/core/sis-metadata/src/main/java/org/apache/sis/util/iso/DefaultRecordType.java
b/core/sis-metadata/src/main/java/org/apache/sis/util/iso/DefaultRecordType.java
index 08232653cb..8ac75ba397 100644
---
a/core/sis-metadata/src/main/java/org/apache/sis/util/iso/DefaultRecordType.java
+++
b/core/sis-metadata/src/main/java/org/apache/sis/util/iso/DefaultRecordType.java
@@ -115,7 +115,7 @@ public class DefaultRecordType extends RecordDefinition
implements RecordType, S
*
* @see #getContainer()
*/
- @SuppressWarnings("serial")
+ @SuppressWarnings({"serial", "deprecation"})
private final RecordSchema container;
/**
@@ -130,6 +130,7 @@ public class DefaultRecordType extends RecordDefinition
implements RecordType, S
*
* @param other the {@code RecordType} to copy.
*/
+ @SuppressWarnings("deprecation")
public DefaultRecordType(final RecordType other) {
typeName = other.getTypeName();
container = other.getContainer();
@@ -401,7 +402,7 @@ public class DefaultRecordType extends RecordDefinition
implements RecordType, S
*/
@Override
public boolean isInstance(final Record record) {
- return (record != null) &&
getMembers().containsAll(record.getAttributes().keySet());
+ return (record != null) &&
getMembers().containsAll(record.getFields().keySet());
}
/**
diff --git
a/core/sis-metadata/src/test/java/org/apache/sis/metadata/iso/DefaultMetadataTest.java
b/core/sis-metadata/src/test/java/org/apache/sis/metadata/iso/DefaultMetadataTest.java
index 14bb447e07..1b39fa94dd 100644
---
a/core/sis-metadata/src/test/java/org/apache/sis/metadata/iso/DefaultMetadataTest.java
+++
b/core/sis-metadata/src/test/java/org/apache/sis/metadata/iso/DefaultMetadataTest.java
@@ -138,7 +138,7 @@ public final class DefaultMetadataTest extends TestCase {
*/
@SuppressWarnings("deprecation")
private static void assertLanguagesEquals(final DefaultMetadata metadata,
final Locale... expected) {
- assertArrayEquals("languages", expected,
metadata.getLanguages().toArray());
+ assertArrayEquals("languages", expected,
metadata.getLocalesAndCharsets().keySet().toArray());
assertEquals ("language", expected[0], metadata.getLanguage());
assertArrayEquals("locales", Arrays.copyOfRange(expected, 1,
expected.length), metadata.getLocales().toArray());
}
diff --git
a/core/sis-metadata/src/test/java/org/apache/sis/metadata/iso/MarshallingTest.java
b/core/sis-metadata/src/test/java/org/apache/sis/metadata/iso/MarshallingTest.java
index 3641ae4686..6ecc79c1e8 100644
---
a/core/sis-metadata/src/test/java/org/apache/sis/metadata/iso/MarshallingTest.java
+++
b/core/sis-metadata/src/test/java/org/apache/sis/metadata/iso/MarshallingTest.java
@@ -143,13 +143,10 @@ public final class MarshallingTest extends TestUsingFile
implements Filter {
id.setCodeSpace("md.id.ns");
md.setMetadataIdentifier(id);
}
- // Languages — one language only, and one (country, language) tuple.
- final Collection<Locale> languages = List.of(Locale.ENGLISH,
Locale.CANADA_FRENCH);
- md.setLanguages(languages);
-
- // Character Sets (character encoding)
- final Collection<Charset> charSets =
Set.of(StandardCharsets.ISO_8859_1);
- md.setCharacterSets(charSets);
+ final Map<Locale,Charset> languages = Map.of(
+ Locale.ENGLISH, StandardCharsets.ISO_8859_1,
+ Locale.CANADA_FRENCH, StandardCharsets.ISO_8859_1);
+ md.setLocalesAndCharsets(languages);
{
// Parent metadata
final DefaultCitation parent = new DefaultCitation("A parent
metadata");
@@ -516,8 +513,7 @@ public final class MarshallingTest extends TestUsingFile
implements Filter {
associatedResources = Set.of(associatedResource);
dataId.setAssociatedResources(associatedResources);
}
- dataId.setLanguages(languages); // Locales (ISO 19115:2014) a.k.a
Languages and CharacterSets (ISO 19115:2003)
- dataId.setCharacterSets(charSets);
+ dataId.setLocalesAndCharsets(languages); // Locales (ISO
19115:2014) a.k.a Languages and CharacterSets (ISO 19115:2003)
dataId.setEnvironmentDescription (new SimpleInternationalString("High
humidity."));
dataId.setSupplementalInformation(new SimpleInternationalString("High
water pressure."));
{
diff --git
a/core/sis-metadata/src/test/java/org/apache/sis/test/sql/TestDatabase.java
b/core/sis-metadata/src/test/java/org/apache/sis/test/sql/TestDatabase.java
index d5bdcad545..5a0dc63121 100644
--- a/core/sis-metadata/src/test/java/org/apache/sis/test/sql/TestDatabase.java
+++ b/core/sis-metadata/src/test/java/org/apache/sis/test/sql/TestDatabase.java
@@ -26,7 +26,6 @@ import java.sql.Statement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.SQLDataException;
-import org.postgresql.PGProperty;
import org.postgresql.ds.PGSimpleDataSource;
import org.apache.derby.jdbc.EmbeddedDataSource;
import org.apache.sis.internal.metadata.sql.Dialect;
@@ -237,7 +236,6 @@ public class TestDatabase implements AutoCloseable {
ds.setDatabaseName(NAME);
ds.setApplicationName("Apache SIS test database");
ds.setCurrentSchema(schema);
- ds.setProperty(PGProperty.LOGGER_LEVEL, "OFF"); // For avoiding
warning when no PostgreSQL server is running.
/*
* Current version does not use pooling on the assumption that
connections to local host are fast enough.
* We verify that the schema does not exist, even if the `create`
argument is `false`, because we assume
diff --git
a/core/sis-metadata/src/test/java/org/apache/sis/util/iso/DefaultRecordSchemaTest.java
b/core/sis-metadata/src/test/java/org/apache/sis/util/iso/DefaultRecordSchemaTest.java
index fb65d9acfc..ee2e3b8105 100644
---
a/core/sis-metadata/src/test/java/org/apache/sis/util/iso/DefaultRecordSchemaTest.java
+++
b/core/sis-metadata/src/test/java/org/apache/sis/util/iso/DefaultRecordSchemaTest.java
@@ -47,6 +47,7 @@ public final class DefaultRecordSchemaTest extends TestCase {
* Tests {@link DefaultRecordSchema#createRecordType(CharSequence, Map)}.
*/
@Test
+ @SuppressWarnings("deprecation")
public void testCreateRecordType() {
final DefaultRecordSchema schema = new DefaultRecordSchema(null, null,
"MySchema");
final Map<CharSequence,Class<?>> fields = new LinkedHashMap<>(8);
@@ -104,7 +105,7 @@ public final class DefaultRecordSchemaTest extends TestCase
{
* The DefaultRecordType(TypeName, RecordSchema, Map) constructor
performs many argument checks, so
* we use that constructor as a way to perform a final validation,
especially regarding namespaces.
*/
- final DefaultRecordType copy = new DefaultRecordType(
+ final var copy = new DefaultRecordType(
recordType.getTypeName(),
recordType.getContainer(),
recordType.getFieldTypes());
diff --git
a/core/sis-metadata/src/test/java/org/apache/sis/util/iso/DefaultRecordTest.java
b/core/sis-metadata/src/test/java/org/apache/sis/util/iso/DefaultRecordTest.java
index 50cba65534..e1f29e3a58 100644
---
a/core/sis-metadata/src/test/java/org/apache/sis/util/iso/DefaultRecordTest.java
+++
b/core/sis-metadata/src/test/java/org/apache/sis/util/iso/DefaultRecordTest.java
@@ -38,7 +38,7 @@ import static
org.apache.sis.test.Assertions.assertSerializedEquals;
* Tests the {@link DefaultRecord} implementation.
*
* @author Martin Desruisseaux (Geomatys)
- * @version 0.5
+ * @version 1.4
* @since 0.5
*/
@DependsOn(DefaultRecordSchemaTest.class)
@@ -78,7 +78,7 @@ public final class DefaultRecordTest extends TestCase {
*/
private static void setAllAndCompare(final DefaultRecord record, final
Object... values) {
record.setAll(values);
- assertArrayEquals("attributes.values", values,
record.getAttributes().values().toArray());
+ assertArrayEquals("attributes.values", values,
record.getFields().values().toArray());
}
/**
@@ -112,7 +112,7 @@ public final class DefaultRecordTest extends TestCase {
final DefaultRecord record = new DefaultRecord(recordType);
assertSame("recordType", recordType, record.getRecordType());
int index = 0;
- for (final Map.Entry<MemberName,Object> entry :
record.getAttributes().entrySet()) {
+ for (final Map.Entry<MemberName,Object> entry :
record.getFields().entrySet()) {
final String name;
final Object value;
switch (index) {
@@ -191,7 +191,7 @@ public final class DefaultRecordTest extends TestCase {
*/
assertEquals("baseValueClass", Double.TYPE,
record.definition.baseValueClass());
assertArrayEquals("attributes.values", new Double[] {0.0, 0.0},
- record.getAttributes().values().toArray());
+ record.getFields().values().toArray());
/*
* Combines tests similar to 3 other test methods in this class.
*/
diff --git
a/core/sis-metadata/src/test/java/org/apache/sis/util/iso/DefaultRecordTypeTest.java
b/core/sis-metadata/src/test/java/org/apache/sis/util/iso/DefaultRecordTypeTest.java
index 0ddfdd2fb2..c7baec1f1b 100644
---
a/core/sis-metadata/src/test/java/org/apache/sis/util/iso/DefaultRecordTypeTest.java
+++
b/core/sis-metadata/src/test/java/org/apache/sis/util/iso/DefaultRecordTypeTest.java
@@ -77,6 +77,7 @@ public final class DefaultRecordTypeTest extends TestCase {
* {@link DefaultRecordType#locate(MemberName)}.
*/
@Test
+ @SuppressWarnings("deprecation")
public void testConstructor() {
init();
final DefaultRecordType type = create();
diff --git
a/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/PositionalAccuracyConstant.java
b/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/PositionalAccuracyConstant.java
index 48230d4912..8dd2e30efd 100644
---
a/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/PositionalAccuracyConstant.java
+++
b/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/PositionalAccuracyConstant.java
@@ -123,6 +123,7 @@ public final class PositionalAccuracyConstant extends
DefaultAbsoluteExternalPos
/**
* Creates an positional accuracy initialized to the given result.
*/
+ @SuppressWarnings("deprecation")
private PositionalAccuracyConstant(final InternationalString
measureDescription,
final InternationalString evaluationMethodDescription, final
boolean pass)
{
@@ -185,7 +186,7 @@ public final class PositionalAccuracyConstant extends
DefaultAbsoluteExternalPos
if (Units.isLinear(unit)) {
final Unit<Length> unitOfLength =
unit.asType(Length.class);
for (final Record record : records) {
- for (final Object value :
record.getAttributes().values()) {
+ for (final Object value :
record.getFields().values()) {
if (value instanceof Number) {
double v = ((Number)
value).doubleValue();
v =
unitOfLength.getConverterTo(Units.METRE).convert(v);
diff --git
a/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/provider/MolodenskyInterpolation.java
b/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/provider/MolodenskyInterpolation.java
index abc116296d..c9b4c4e3e9 100644
---
a/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/provider/MolodenskyInterpolation.java
+++
b/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/provider/MolodenskyInterpolation.java
@@ -86,6 +86,7 @@ public final class MolodenskyInterpolation extends
FranceGeocentricInterpolation
/**
* Constructs a provider for the given number of dimensions.
*/
+ @SuppressWarnings("removal")
private MolodenskyInterpolation(ParameterDescriptorGroup parameters, int
indexOfDim) {
super(parameters, indexOfDim);
}
@@ -95,6 +96,7 @@ public final class MolodenskyInterpolation extends
FranceGeocentricInterpolation
* after all parameters have been processed.
*/
@Override
+ @SuppressWarnings("removal")
MathTransform createGeodeticTransformation(final MathTransformFactory
factory,
final Ellipsoid source, final Ellipsoid target, final boolean
withHeights,
final DatumShiftGridFile<Angle,Length> grid) throws
FactoryException
diff --git
a/core/sis-referencing/src/main/java/org/apache/sis/io/wkt/GeodeticObjectParser.java
b/core/sis-referencing/src/main/java/org/apache/sis/io/wkt/GeodeticObjectParser.java
index a628e877d2..865f2c4394 100644
---
a/core/sis-referencing/src/main/java/org/apache/sis/io/wkt/GeodeticObjectParser.java
+++
b/core/sis-referencing/src/main/java/org/apache/sis/io/wkt/GeodeticObjectParser.java
@@ -1261,6 +1261,7 @@ class GeodeticObjectParser extends MathTransformParser
implements Comparator<Coo
int dimension = 2;
String csType = WKTKeywords.ellipsoidal;
if (method != null) {
+ @SuppressWarnings("deprecation")
final Integer d = method.getSourceDimensions();
if (d != null) dimension = d;
if (method instanceof AbstractProvider) {
diff --git
a/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/transform/DefaultMathTransformFactory.java
b/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/transform/DefaultMathTransformFactory.java
index 783eca7656..2e92bc472a 100644
---
a/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/transform/DefaultMathTransformFactory.java
+++
b/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/transform/DefaultMathTransformFactory.java
@@ -1060,7 +1060,9 @@ public class DefaultMathTransformFactory extends
AbstractFactory implements Math
* one.
*/
if (method instanceof AbstractProvider) {
+ @SuppressWarnings("deprecation")
final Integer sourceDim = (sourceCS != null) ?
sourceCS.getDimension() : method.getSourceDimensions();
+ @SuppressWarnings("deprecation")
final Integer targetDim = (targetCS != null) ?
targetCS.getDimension() : method.getTargetDimensions();
if (sourceDim != null && targetDim != null) {
method = ((AbstractProvider)
method).redimension(sourceDim, targetDim);
diff --git
a/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/transform/InterpolatedMolodenskyTransform.java
b/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/transform/InterpolatedMolodenskyTransform.java
index 5ece127daf..9f71464802 100644
---
a/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/transform/InterpolatedMolodenskyTransform.java
+++
b/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/transform/InterpolatedMolodenskyTransform.java
@@ -148,6 +148,7 @@ public class InterpolatedMolodenskyTransform extends
MolodenskyFormula {
*
* @see #createGeodeticTransformation(MathTransformFactory, Ellipsoid,
boolean, Ellipsoid, boolean, DatumShiftGrid)
*/
+ @SuppressWarnings("removal")
protected InterpolatedMolodenskyTransform(final Ellipsoid source, final
boolean isSource3D,
final Ellipsoid target, final
boolean isTarget3D,
final
DatumShiftGrid<Angle,Length> grid)
@@ -193,6 +194,7 @@ public class InterpolatedMolodenskyTransform extends
MolodenskyFormula {
* @return the transformation between geographic coordinates in degrees.
* @throws FactoryException if an error occurred while creating a
transform.
*/
+ @SuppressWarnings("removal")
public static MathTransform createGeodeticTransformation(final
MathTransformFactory factory,
final Ellipsoid source, final boolean isSource3D,
final Ellipsoid target, final boolean isTarget3D,
diff --git
a/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/transform/InterpolatedMolodenskyTransform2D.java
b/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/transform/InterpolatedMolodenskyTransform2D.java
index 5cc19d8ce7..d97b9a1a2d 100644
---
a/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/transform/InterpolatedMolodenskyTransform2D.java
+++
b/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/transform/InterpolatedMolodenskyTransform2D.java
@@ -36,6 +36,7 @@ import org.apache.sis.referencing.datum.DatumShiftGrid;
*
* @see <a href="https://issues.apache.org/jira/browse/SIS-500">Deprecate (for
removal) InterpolatedMolodenskyTransform</a>
*/
+@SuppressWarnings("removal")
@Deprecated(since="1.4", forRemoval=true)
final class InterpolatedMolodenskyTransform2D extends
InterpolatedMolodenskyTransform implements MathTransform2D {
/**
@@ -89,6 +90,7 @@ final class InterpolatedMolodenskyTransform2D extends
InterpolatedMolodenskyTran
* @version 0.7
* @since 0.7
*/
+ @SuppressWarnings("removal")
static final class Inverse extends InterpolatedMolodenskyTransform.Inverse
implements MathTransform2D {
/**
* Serial number for inter-operability with different versions.
diff --git
a/core/sis-referencing/src/test/java/org/apache/sis/internal/referencing/provider/ProvidersTest.java
b/core/sis-referencing/src/test/java/org/apache/sis/internal/referencing/provider/ProvidersTest.java
index 14cac2b1b5..d7d479634a 100644
---
a/core/sis-referencing/src/test/java/org/apache/sis/internal/referencing/provider/ProvidersTest.java
+++
b/core/sis-referencing/src/test/java/org/apache/sis/internal/referencing/provider/ProvidersTest.java
@@ -49,6 +49,7 @@ public final class ProvidersTest extends TestCase {
/**
* Returns all providers to test.
*/
+ @SuppressWarnings("removal")
private static Class<?>[] methods() {
return new Class<?>[] {
Affine.class,
diff --git
a/core/sis-referencing/src/test/java/org/apache/sis/referencing/ImmutableIdentifierTest.java
b/core/sis-referencing/src/test/java/org/apache/sis/referencing/ImmutableIdentifierTest.java
index 36a0cb353d..618a61a505 100644
---
a/core/sis-referencing/src/test/java/org/apache/sis/referencing/ImmutableIdentifierTest.java
+++
b/core/sis-referencing/src/test/java/org/apache/sis/referencing/ImmutableIdentifierTest.java
@@ -79,6 +79,7 @@ public final class ImmutableIdentifierTest extends TestCase {
assertEquals ("description_fr", "Voici une description",
identifier.getDescription().toString(Locale.FRENCH));
assertEquals ("description_fr_CA", "Pareil",
identifier.getDescription().toString(Locale.CANADA_FRENCH));
assertEquals ("description_fr_BE", "Voici une description",
identifier.getDescription().toString(new Locale("fr", "BE")));
+ // TODO: use Locale.of(…) with JDK19.
}
/**
diff --git
a/core/sis-referencing/src/test/java/org/apache/sis/test/integration/DatumShiftTest.java
b/core/sis-referencing/src/test/java/org/apache/sis/test/integration/DatumShiftTest.java
index 3ee02e4f98..f5cd745518 100644
---
a/core/sis-referencing/src/test/java/org/apache/sis/test/integration/DatumShiftTest.java
+++
b/core/sis-referencing/src/test/java/org/apache/sis/test/integration/DatumShiftTest.java
@@ -25,7 +25,7 @@ import org.apache.sis.test.DependsOn;
import org.apache.sis.test.TestCase;
import org.junit.Test;
-import static org.apache.sis.test.Assume.*;
+import static org.apache.sis.test.Assume.assumeDataExists;
/**
diff --git
a/core/sis-referencing/src/test/java/org/apache/sis/test/integration/MetadataVerticalTest.java
b/core/sis-referencing/src/test/java/org/apache/sis/test/integration/MetadataVerticalTest.java
index 9da38465c8..ba0f247cb7 100644
---
a/core/sis-referencing/src/test/java/org/apache/sis/test/integration/MetadataVerticalTest.java
+++
b/core/sis-referencing/src/test/java/org/apache/sis/test/integration/MetadataVerticalTest.java
@@ -157,7 +157,7 @@ public class MetadataVerticalTest extends TestCase {
assertInstanceOf("citation", NilObject.class, citation);
assertEquals("nilReason", NilReason.MISSING, ((NilObject)
citation).getNilReason());
assertEquals("abstract", "SIS test",
identification.getAbstract().toString());
- assertEquals("language", Locale.ENGLISH,
getSingleton(identification.getLanguages()));
+ assertEquals("language", Locale.ENGLISH,
getSingleton(identification.getLocalesAndCharsets().keySet()));
/*
* <gmd:geographicElement>
* <gmd:EX_GeographicBoundingBox>
diff --git
a/core/sis-utility/src/main/java/org/apache/sis/internal/converter/StringConverter.java
b/core/sis-utility/src/main/java/org/apache/sis/internal/converter/StringConverter.java
index 142629c27c..367e5ddfa9 100644
---
a/core/sis-utility/src/main/java/org/apache/sis/internal/converter/StringConverter.java
+++
b/core/sis-utility/src/main/java/org/apache/sis/internal/converter/StringConverter.java
@@ -296,8 +296,8 @@ abstract class StringConverter<T> extends
SystemConverter<String, T> {
private static final long serialVersionUID = -6518011235037500143L;
public URL() {super(java.net.URL.class);}
// Instantiated by ServiceLoader.
- @Override java.net.URL doConvert(String source) throws
MalformedURLException {
- return new java.net.URL(source);
+ @Override java.net.URL doConvert(String source) throws
URISyntaxException, MalformedURLException {
+ return new java.net.URI(source).parseServerAuthority().toURL();
}
}
diff --git
a/core/sis-utility/src/main/java/org/apache/sis/internal/system/Reflect.java
b/core/sis-utility/src/main/java/org/apache/sis/internal/system/Reflect.java
index 35808d7986..5854380b88 100644
--- a/core/sis-utility/src/main/java/org/apache/sis/internal/system/Reflect.java
+++ b/core/sis-utility/src/main/java/org/apache/sis/internal/system/Reflect.java
@@ -23,7 +23,7 @@ import java.util.function.Consumer;
/**
- * Contextual information fetching by reflection.
+ * Contextual information fetched by reflection.
*
* @author Martin Desruisseaux (Geomatys)
* @author Guilhem Legal (Geomatys)
diff --git
a/core/sis-utility/src/main/java/org/apache/sis/internal/util/PropertyFormat.java
b/core/sis-utility/src/main/java/org/apache/sis/internal/util/PropertyFormat.java
index c8899e315b..6b4b9d472c 100644
---
a/core/sis-utility/src/main/java/org/apache/sis/internal/util/PropertyFormat.java
+++
b/core/sis-utility/src/main/java/org/apache/sis/internal/util/PropertyFormat.java
@@ -121,7 +121,7 @@ public abstract class PropertyFormat extends LineAppender
implements Localized {
final Locale locale = getLocale();
text = (locale != Locale.ROOT) ? ((Currency)
value).getDisplayName(locale) : value.toString();
} else if (value instanceof Record) {
- appendCollection(((Record) value).getAttributes().values(),
recursive);
+ appendCollection(((Record) value).getFields().values(), recursive);
return;
} else if (value instanceof Iterable<?>) {
appendCollection((Iterable<?>) value, recursive);
diff --git
a/core/sis-utility/src/main/java/org/apache/sis/util/DefaultInternationalString.java
b/core/sis-utility/src/main/java/org/apache/sis/util/DefaultInternationalString.java
index 728d437d2b..36e1755d88 100644
---
a/core/sis-utility/src/main/java/org/apache/sis/util/DefaultInternationalString.java
+++
b/core/sis-utility/src/main/java/org/apache/sis/util/DefaultInternationalString.java
@@ -44,7 +44,7 @@ import org.apache.sis.util.collection.Containers;
* SIS typically references them as if they were immutable because of their
<cite>add-only</cite> behavior.
*
* @author Martin Desruisseaux (IRD, Geomatys)
- * @version 1.1
+ * @version 1.4
*
* @see org.apache.sis.util.iso.Types#toInternationalString(Map, String)
*
@@ -188,6 +188,7 @@ public class DefaultInternationalString extends
AbstractInternationalString impl
* @param locale the locale to look for, or {@code null}.
* @return the string in the specified locale, or {@code null} if none was
found.
*/
+ @SuppressWarnings("deprecation")
private String getString(Locale locale) {
while (locale != null) {
final String text = localeMap.get(locale);
@@ -198,10 +199,12 @@ public class DefaultInternationalString extends
AbstractInternationalString impl
final String country = locale.getCountry ();
final String variant = locale.getVariant ();
if (!variant.isEmpty()) {
+ // TODO: replace by Locale.of(…) with JDK19.
locale = new Locale(language, country);
continue;
}
if (!country.isEmpty()) {
+ // TODO: replace by Locale.of(…) with JDK19.
locale = new Locale(language);
continue;
}
diff --git a/core/sis-utility/src/main/java/org/apache/sis/util/Locales.java
b/core/sis-utility/src/main/java/org/apache/sis/util/Locales.java
index 9496f735c0..bb01a2872b 100644
--- a/core/sis-utility/src/main/java/org/apache/sis/util/Locales.java
+++ b/core/sis-utility/src/main/java/org/apache/sis/util/Locales.java
@@ -210,6 +210,7 @@ filter: for (final Locale locale : locales) {
* @param locales the locales from which to get the languages.
* @return the languages, without country or variant information.
*/
+ @SuppressWarnings("deprecation")
private static Locale[] getLanguages(final Locale... locales) {
final Set<String> codes = new
LinkedHashSet<>(hashMapCapacity(locales.length));
for (final Locale locale : locales) {
@@ -218,6 +219,7 @@ filter: for (final Locale locale : locales) {
int i=0;
final Locale[] languages = new Locale[codes.size()];
for (final String code : codes) {
+ // TODO: replace by Locale.of(…) with JDK19.
languages[i++] = unique(new Locale(code));
}
return languages;
diff --git
a/core/sis-utility/src/test/java/org/apache/sis/internal/converter/PathConverterTest.java
b/core/sis-utility/src/test/java/org/apache/sis/internal/converter/PathConverterTest.java
index 0588b795cc..15a558d819 100644
---
a/core/sis-utility/src/test/java/org/apache/sis/internal/converter/PathConverterTest.java
+++
b/core/sis-utility/src/test/java/org/apache/sis/internal/converter/PathConverterTest.java
@@ -101,7 +101,7 @@ public final class PathConverterTest extends TestCase {
public void testFile_URL() throws MalformedURLException {
assumeUnixRoot();
final ObjectConverter<File,URL> c = PathConverter.FileURL.INSTANCE;
- runInvertibleConversion(c, new File("/home/user/index.txt"), new
URL("file:/home/user/index.txt"));
+ runInvertibleConversion(c, new File("/home/user/index.txt"),
URI.create("file:/home/user/index.txt").toURL());
assertSerializedEquals(c);
}
@@ -126,7 +126,7 @@ public final class PathConverterTest extends TestCase {
@Test
public void testURI_URL() throws MalformedURLException, URISyntaxException
{
final ObjectConverter<URI,URL> c = PathConverter.URI_URL.INSTANCE;
- runInvertibleConversion(c, new URI("file:/home/user/index.txt"), new
URL("file:/home/user/index.txt"));
+ runInvertibleConversion(c, new URI("file:/home/user/index.txt"),
URI.create("file:/home/user/index.txt").toURL());
assertSerializedEquals(c);
}
@@ -152,7 +152,7 @@ public final class PathConverterTest extends TestCase {
@Test
public void testURL_String() throws MalformedURLException {
final ObjectConverter<URL,String> c = new
StringConverter.URL().inverse();
- runInvertibleConversion(c, new URL("file:/home/user/index.txt"),
"file:/home/user/index.txt");
+ runInvertibleConversion(c,
URI.create("file:/home/user/index.txt").toURL(), "file:/home/user/index.txt");
assertSerializedEquals(c);
}
@@ -164,8 +164,9 @@ public final class PathConverterTest extends TestCase {
*/
@Test
public void testURL_URI() throws MalformedURLException, URISyntaxException
{
+ final URI uri = new URI("file:/home/user/index.txt");
final ObjectConverter<URL,URI> c = PathConverter.URL_URI.INSTANCE;
- runInvertibleConversion(c, new URL("file:/home/user/index.txt"), new
URI("file:/home/user/index.txt"));
+ runInvertibleConversion(c, uri.toURL(), uri);
assertSerializedEquals(c);
}
@@ -179,7 +180,7 @@ public final class PathConverterTest extends TestCase {
public void testURL_File() throws MalformedURLException {
assumeUnixRoot();
final ObjectConverter<URL,File> c = PathConverter.URLFile.INSTANCE;
- runInvertibleConversion(c, new URL("file:/home/user/index.txt"), new
File("/home/user/index.txt"));
+ runInvertibleConversion(c,
URI.create("file:/home/user/index.txt").toURL(), new
File("/home/user/index.txt"));
assertSerializedEquals(c);
}
}
diff --git
a/core/sis-utility/src/test/java/org/apache/sis/internal/converter/StringConverterTest.java
b/core/sis-utility/src/test/java/org/apache/sis/internal/converter/StringConverterTest.java
index 50f285df82..9897d347c3 100644
---
a/core/sis-utility/src/test/java/org/apache/sis/internal/converter/StringConverterTest.java
+++
b/core/sis-utility/src/test/java/org/apache/sis/internal/converter/StringConverterTest.java
@@ -288,7 +288,7 @@ public final class StringConverterTest extends TestCase {
@Test
public void testURL() throws MalformedURLException {
final ObjectConverter<String,URL> c = new StringConverter.URL();
- runInvertibleConversion(c, "file:/home/user/index.txt", new
URL("file:/home/user/index.txt"));
+ runInvertibleConversion(c, "file:/home/user/index.txt",
URI.create("file:/home/user/index.txt").toURL());
assertSerializedEquals(c);
}
diff --git a/core/sis-utility/src/test/java/org/apache/sis/test/Assume.java
b/core/sis-utility/src/test/java/org/apache/sis/test/Assume.java
index efe64d3fcd..365b4c7c8f 100644
--- a/core/sis-utility/src/test/java/org/apache/sis/test/Assume.java
+++ b/core/sis-utility/src/test/java/org/apache/sis/test/Assume.java
@@ -21,6 +21,8 @@ import java.nio.file.Path;
import java.nio.file.Files;
import org.apache.sis.internal.system.DataDirectory;
+import static org.junit.Assume.*;
+
/**
* Assumption methods used by the SIS project in addition of the JUnit ones.
@@ -29,7 +31,7 @@ import org.apache.sis.internal.system.DataDirectory;
* @version 1.4
* @since 0.7
*/
-public final class Assume extends org.junit.Assume {
+public final class Assume {
/**
* Do not allow instantiation.
*/
diff --git
a/core/sis-utility/src/test/java/org/apache/sis/util/LocalesTest.java
b/core/sis-utility/src/test/java/org/apache/sis/util/LocalesTest.java
index 72d16f7547..ef848828f3 100644
--- a/core/sis-utility/src/test/java/org/apache/sis/util/LocalesTest.java
+++ b/core/sis-utility/src/test/java/org/apache/sis/util/LocalesTest.java
@@ -63,6 +63,7 @@ public final class LocalesTest extends TestCase {
*/
@Test
public void testUnique() {
+ // TODO: use Locale.of(…) with JDK19.
assertSame(Locale.ENGLISH, Locales.unique(new Locale("en")));
assertSame(Locale.FRENCH, Locales.unique(new Locale("fr")));
}
@@ -83,6 +84,7 @@ public final class LocalesTest extends TestCase {
assertSame(Locale.JAPAN, Locales.parse("ja_JP"));
assertSame(Locale.US, Locales.parse("en; USA"));
+ // TODO: use Locale.of(…) with JDK19.
assertEquals(new Locale("de", "DE"),
Locales.parse("de_DE"));
assertEquals(new Locale("", "GB"), Locales.parse("_GB"));
assertEquals(new Locale("en", "US", "WINDOWS"),
Locales.parse("en_US_WINDOWS"));
diff --git
a/storage/sis-earth-observation/src/main/java/org/apache/sis/storage/landsat/MetadataReader.java
b/storage/sis-earth-observation/src/main/java/org/apache/sis/storage/landsat/MetadataReader.java
index 4f84643f68..901473663e 100644
---
a/storage/sis-earth-observation/src/main/java/org/apache/sis/storage/landsat/MetadataReader.java
+++
b/storage/sis-earth-observation/src/main/java/org/apache/sis/storage/landsat/MetadataReader.java
@@ -19,6 +19,7 @@ package org.apache.sis.storage.landsat;
import java.awt.Dimension;
import java.io.BufferedReader;
import java.io.IOException;
+import java.nio.charset.StandardCharsets;
import java.util.Optional;
import java.util.Arrays;
import java.util.Date;
@@ -96,7 +97,7 @@ import static
org.apache.sis.internal.util.CollectionsExt.singletonOrNull;
* @author Thi Phuong Hao Nguyen (VNSC)
* @author Rémi Maréchal (Geomatys)
* @author Martin Desruisseaux (Geomatys)
- * @version 1.1
+ * @version 1.4
* @since 0.8
*/
final class MetadataReader extends MetadataBuilder {
@@ -856,7 +857,7 @@ final class MetadataReader extends MetadataBuilder {
* @throws FactoryException if an error occurred while creating the
Coordinate Reference System.
*/
final Metadata getMetadata() throws FactoryException {
- addLanguage(Locale.ENGLISH, MetadataBuilder.Scope.METADATA);
+ addLanguage(Locale.ENGLISH, StandardCharsets.US_ASCII,
MetadataBuilder.Scope.METADATA);
addResourceScope(ScopeCode.COVERAGE, null);
addTopicCategory(TopicCategory.GEOSCIENTIFIC_INFORMATION);
try {
diff --git
a/storage/sis-geotiff/src/main/java/org/apache/sis/storage/geotiff/GeoTiffStore.java
b/storage/sis-geotiff/src/main/java/org/apache/sis/storage/geotiff/GeoTiffStore.java
index 4858494bfa..d4bde598dc 100644
---
a/storage/sis-geotiff/src/main/java/org/apache/sis/storage/geotiff/GeoTiffStore.java
+++
b/storage/sis-geotiff/src/main/java/org/apache/sis/storage/geotiff/GeoTiffStore.java
@@ -17,6 +17,7 @@
package org.apache.sis.storage.geotiff;
import java.util.List;
+import java.util.Locale;
import java.util.Optional;
import java.util.logging.LogRecord;
import java.net.URI;
@@ -293,7 +294,7 @@ public class GeoTiffStore extends DataStore implements
Aggregate {
builder.addFormatName(Constants.GEOTIFF);
listeners.warning(e);
}
- builder.addEncoding(encoding, MetadataBuilder.Scope.METADATA);
+ builder.addLanguage(Locale.ENGLISH, encoding,
MetadataBuilder.Scope.METADATA);
builder.addResourceScope(ScopeCode.COVERAGE, null);
}
diff --git
a/storage/sis-netcdf/src/test/java/org/apache/sis/internal/netcdf/TestCase.java
b/storage/sis-netcdf/src/test/java/org/apache/sis/internal/netcdf/TestCase.java
index ebe37c7989..f939c4332b 100644
---
a/storage/sis-netcdf/src/test/java/org/apache/sis/internal/netcdf/TestCase.java
+++
b/storage/sis-netcdf/src/test/java/org/apache/sis/internal/netcdf/TestCase.java
@@ -29,7 +29,9 @@ import org.apache.sis.setup.GeometryLibrary;
import org.apache.sis.storage.event.StoreListeners;
import org.apache.sis.storage.DataStoreMock;
import org.opengis.test.dataset.TestData;
+import ucar.nc2.dataset.NetcdfDatasets;
import ucar.nc2.dataset.NetcdfDataset;
+import ucar.nc2.NetcdfFiles;
import ucar.nc2.NetcdfFile;
import org.junit.AfterClass;
@@ -89,7 +91,7 @@ public abstract class TestCase extends
org.apache.sis.test.TestCase {
*/
String location = file.location().toString();
location = location.substring(location.lastIndexOf('/') + 1);
- return NetcdfFile.openInMemory(location, file.content());
+ return NetcdfFiles.openInMemory(location, file.content());
}
/**
@@ -111,7 +113,8 @@ public abstract class TestCase extends
org.apache.sis.test.TestCase {
* @throws DataStoreException if a logical error occurred.
*/
protected Decoder createDecoder(final TestData file) throws IOException,
DataStoreException {
- return new DecoderWrapper(new NetcdfDataset(createUCAR(file)),
GeometryLibrary.JAVA2D, createListeners());
+ final NetcdfDataset ds = NetcdfDatasets.enhance(createUCAR(file),
NetcdfDataset.getDefaultEnhanceMode(), null);
+ return new DecoderWrapper(ds, GeometryLibrary.JAVA2D,
createListeners());
}
/**
diff --git
a/storage/sis-sqlstore/src/main/java/org/apache/sis/internal/sql/feature/ValueGetter.java
b/storage/sis-sqlstore/src/main/java/org/apache/sis/internal/sql/feature/ValueGetter.java
index 1676b22bf3..803c0d1002 100644
---
a/storage/sis-sqlstore/src/main/java/org/apache/sis/internal/sql/feature/ValueGetter.java
+++
b/storage/sis-sqlstore/src/main/java/org/apache/sis/internal/sql/feature/ValueGetter.java
@@ -400,8 +400,8 @@ public class ValueGetter<T> {
* <h4>Implementation note</h4>
* PostgreSQL always return the time in the local time zone, while HSQLDB
and H2 return the time as
* inserted in the database but ignoring the timezone offset. The latter
implies that we don't know
- * how convert a HSQLDB and H2 to local or UTC timezone. Current
implementation assumes PostgreSQL
- * behavior, which is the only one that we can map to {@link
OffsetDateTime}.
+ * how to convert a HSQLDB and H2 date to local or UTC timezone. Current
implementation assumes the
+ * PostgreSQL behavior, which is the only one that we can map to {@link
OffsetDateTime}.
* Specifying a {@link java.util.Calendar} seems to have no effect.
*/
static final class AsOffsetDateTime extends ValueGetter<OffsetDateTime> {
diff --git
a/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/MetadataBuilder.java
b/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/MetadataBuilder.java
index 2f335d3d03..4c8348815f 100644
---
a/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/MetadataBuilder.java
+++
b/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/MetadataBuilder.java
@@ -1036,44 +1036,20 @@ public class MetadataBuilder {
* Storage locations are:
*
* <ul>
- * <li><b>Metadata:</b> {@code metadata/language}</li>
- * <li><b>Resource:</b> {@code metadata/identificationInfo/language}</li>
+ * <li><b>Metadata:</b> {@code metadata/defaultLocale} or {@code
metadata/otherLocale}</li>
+ * <li><b>Resource:</b> {@code
metadata/identificationInfo/defaultLocale} or
+ * {@code
metadata/identificationInfo/otherLocale}</li>
* </ul>
*
* @param language a language used for documenting data and/or metadata,
or {@code null} for no-operation.
+ * @param encoding the encoding associated to the locale, or {@code
null} if unspecified.
* @param scope whether the language applies to data, to metadata or
to both.
- *
- * @see #addEncoding(Charset, MetadataBuilder.Scope)
*/
- public final void addLanguage(final Locale language, final Scope scope) {
+ public final void addLanguage(final Locale language, final Charset
encoding, final Scope scope) {
ArgumentChecks.ensureNonNull("scope", scope);
if (language != null) {
- // No need to use `addIfNotPresent(…)` because Locale collection
is a Set by default.
- if (scope != Scope.RESOURCE)
metadata().getLanguages().add(language);
- if (scope != Scope.METADATA)
identification().getLanguages().add(language);
- }
- }
-
- /**
- * Adds a character set used for encoding the data and/or metadata.
- * Storage locations are:
- *
- * <ul>
- * <li><b>Metadata:</b> {@code metadata/characterSet}</li>
- * <li><b>Resource:</b> {@code
metadata/identificationInfo/characterSet}</li>
- * </ul>
- *
- * @param encoding the character set used for encoding data and/or
metadata, or {@code null} for no-operation.
- * @param scope whether the encoding applies to data, to metadata or
to both.
- *
- * @see #addLanguage(Locale, MetadataBuilder.Scope)
- */
- public final void addEncoding(final Charset encoding, final Scope scope) {
- ArgumentChecks.ensureNonNull("scope", scope);
- if (encoding != null) {
- // No need to use `addIfNotPresent(…)` because Charset collection
is a Set by default.
- if (scope != Scope.RESOURCE)
metadata().getCharacterSets().add(encoding);
- if (scope != Scope.METADATA)
identification().getCharacterSets().add(encoding);
+ if (scope != Scope.RESOURCE)
metadata().getLocalesAndCharsets().put(language, encoding);
+ if (scope != Scope.METADATA)
identification().getLocalesAndCharsets().put(language, encoding);
}
}
diff --git
a/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/PRJDataStore.java
b/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/PRJDataStore.java
index c5912cc2f0..699b1b32ac 100644
---
a/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/PRJDataStore.java
+++
b/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/PRJDataStore.java
@@ -17,6 +17,8 @@
package org.apache.sis.internal.storage;
import java.net.URL;
+import java.net.URI;
+import java.net.URISyntaxException;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
@@ -66,7 +68,7 @@ import org.apache.sis.util.Classes;
* be null and the CRS defined by the {@code DataOptionKey} will be used.</p>
*
* @author Martin Desruisseaux (Geomatys)
- * @version 1.3
+ * @version 1.4
* @since 1.2
*/
public abstract class PRJDataStore extends URIDataStore {
@@ -202,13 +204,16 @@ public abstract class PRJDataStore extends URIDataStore {
path = path.resolveSibling(base.concat(extension));
stream = Files.newInputStream(path);
source = path;
- } else {
- final URL url = IOUtilities.toAuxiliaryURL(location, extension);
- if (url == null) {
+ } else try {
+ final URI uri = IOUtilities.toAuxiliaryURI(location, extension);
+ if (uri == null) {
return null;
}
+ final URL url = uri.toURL();
stream = url.openStream();
source = url;
+ } catch (URISyntaxException e) {
+ throw new
DataStoreException(Resources.format(Resources.Keys.CanNotReadAuxiliaryFile_1,
"*." + extension), e);
}
/*
* Reads the auxiliary file fully, with an arbitrary size limit.
diff --git
a/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/csv/Store.java
b/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/csv/Store.java
index 3bc737deea..e87174afc7 100644
---
a/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/csv/Store.java
+++
b/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/csv/Store.java
@@ -641,7 +641,7 @@ final class Store extends URIDataStore implements
FeatureSet {
builder.addFormatName(format);
listeners.warning(e);
}
- builder.addEncoding(encoding, MetadataBuilder.Scope.ALL);
+ builder.addLanguage(Locale.ENGLISH, encoding,
MetadataBuilder.Scope.ALL);
builder.addResourceScope(ScopeCode.FEATURE, null);
try {
builder.addExtent(envelope);
diff --git
a/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/esri/RasterStore.java
b/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/esri/RasterStore.java
index 9de8ce1903..5226f189f9 100644
---
a/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/esri/RasterStore.java
+++
b/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/esri/RasterStore.java
@@ -20,6 +20,7 @@ import java.util.List;
import java.util.Arrays;
import java.util.Optional;
import java.util.Hashtable;
+import java.util.Locale;
import java.util.logging.Level;
import java.io.IOException;
import java.io.FileNotFoundException;
@@ -174,7 +175,7 @@ abstract class RasterStore extends PRJDataStore implements
GridCoverageResource
listeners.warning(e);
}
builder.addResourceScope(ScopeCode.COVERAGE, null);
- builder.addEncoding(encoding, MetadataBuilder.Scope.METADATA);
+ builder.addLanguage(Locale.ENGLISH, encoding,
MetadataBuilder.Scope.METADATA);
builder.addSpatialRepresentation(null, gridGeometry, true);
try {
builder.addExtent(gridGeometry.getEnvelope());
diff --git
a/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/folder/Store.java
b/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/folder/Store.java
index b701cdfe1c..08a047c56a 100644
---
a/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/folder/Store.java
+++
b/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/folder/Store.java
@@ -272,8 +272,7 @@ class Store extends DataStore implements StoreResource,
UnstructuredAggregate, D
if (metadata == null) {
final MetadataBuilder mb = new MetadataBuilder();
mb.addResourceScope(ScopeCode.COLLECTION,
Resources.formatInternational(Resources.Keys.DirectoryContent_1,
getDisplayName()));
- mb.addLanguage(locale, MetadataBuilder.Scope.RESOURCE);
- mb.addEncoding(encoding, MetadataBuilder.Scope.RESOURCE);
+ mb.addLanguage(locale, encoding, MetadataBuilder.Scope.RESOURCE);
final GenericName identifier = identifier(null);
String name = null;
if (identifier != null) {
diff --git
a/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/io/IOUtilities.java
b/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/io/IOUtilities.java
index 456a1a7549..39e165ec11 100644
---
a/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/io/IOUtilities.java
+++
b/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/io/IOUtilities.java
@@ -204,22 +204,20 @@ public final class IOUtilities extends Static {
}
/**
- * Converts the given {@link URI} to a {@link URL} with the same path
except for the file extension,
- * which is replaced by the given extension. This method is used for
opening auxiliary files such as
- * {@code "*.prj"} and {@code "*.tfw"} files that come with e.g. TIFF
files.
+ * Converts the given URI to a new URI with the same path except for the
file extension,
+ * which is replaced by the given extension. This method is used for
opening auxiliary files
+ * such as {@code "*.prj"} and {@code "*.tfw"} files that come with e.g.
TIFF files.
*
* @param location the URI to convert to a URL with a different
extension, or {@code null}.
* @param extension the file extension (without {@code '.'}) of the
auxiliary file.
- * @return URL for the auxiliary file with the given extension, or {@code
null} if none.
- * @throws MalformedURLException if the URI uses an unknown protocol or a
negative port number other than -1.
- *
- * @since 1.2
+ * @return URI for the auxiliary file with the given extension, or {@code
null} if none.
+ * @throws URISyntaxException if the URI cannot be reconstructed.
*/
- public static URL toAuxiliaryURL(final URI location, final String
extension) throws MalformedURLException {
+ public static URI toAuxiliaryURI(final URI location, final String
extension) throws URISyntaxException {
if (location == null || !location.isAbsolute() || location.isOpaque())
{
return null;
}
- String path = location.getRawPath(); // Raw because URL constructor
needs encoded strings.
+ String path = location.getRawPath();
int s = path.indexOf('?'); // Shall be before '#' in a
valid URL.
if (s < 0) {
s = path.indexOf('#'); // A '?' after '#' would be
part of the anchor.
@@ -233,10 +231,9 @@ public final class IOUtilities extends Static {
} else {
path = path + '.' + extension;
}
- return new URL(location.getScheme(), // http, https, file
or jar.
+ return new URI(location.getScheme(), // http, https, file
or jar.
location.getRawAuthority(), // Host name or
literal IP address.
- location.getPort(), // -1 if undefined.
- path);
+ path, null, null);
}
/**
@@ -316,13 +313,43 @@ public final class IOUtilities extends Static {
return (buffer != null) ? buffer.toString() : path;
}
+ /**
+ * Converts a path specified as a character string to an URL.
+ * This method can be used as a replacement for the deprecated {@link URL}
constructors.
+ *
+ * @param url the path to convert, or {@code null}.
+ * @param encoding if the URL is encoded in a {@code
application/x-www-form-urlencoded} MIME format,
+ * the character encoding (normally {@code "UTF-8"}).
+ * If the URL is not encoded, then {@code null}.
+ * @return the path converted to an uRL, or {@code null} if the given path
was null.
+ * @throws MalformedURLException if the path can not be parsed as an URL.
+ * @throws IOException if a non-null {@code encoding} was specified and an
encoding error is found.
+ *
+ * @since 1.4
+ */
+ public static URL toURL(String url, final String encoding) throws
IOException {
+ if (url == null) {
+ return null;
+ }
+ if (encoding != null) {
+ url = URLDecoder.decode(url, encoding);
+ }
+ url = encodeURI(url);
+ try {
+ return new URI(url).parseServerAuthority().toURL();
+ } catch (IllegalArgumentException | URISyntaxException cause) {
+ throw (MalformedURLException) new
MalformedURLException(malformed(url, cause)).initCause(cause);
+ }
+ }
+
/**
* Converts a {@link URL} to a {@link URI}. This is equivalent to a call
to the standard {@link URL#toURI()}
* method, except for the following functionalities:
*
* <ul>
* <li>Optionally decodes the {@code "%XX"} sequences, where {@code
"XX"} is a number.</li>
- * <li>Converts various exceptions into subclasses of {@link
IOException}.</li>
+ * <li>Escape spaces and a some other reserved characters.</li>
+ * <li>Converts exceptions into subclasses of {@link IOException}.</li>
* </ul>
*
* @param url the URL to convert, or {@code null}.
@@ -333,77 +360,72 @@ public final class IOUtilities extends Static {
* @throws IOException if the URL cannot be converted to a URI.
*
* @see URI#URI(String)
+ * @see URL#toURI()
*/
public static URI toURI(final URL url, final String encoding) throws
IOException {
if (url == null) {
return null;
}
/*
- * Convert the URL to a URI, taking in account the encoding if any.
- *
- * Note: URL.toURI() is implemented as new URI(URL.toString()) where
toString()
- * delegates to toExternalForm(), and all those methods are final. So
we really
- * don't lost anything by doing those steps ourself.
+ * Convert the URL to a URI, taking in account the encoding if any. We
want to escape
+ * spaces with `encodeURI(…)` before to convert. Invoking
`URL.toURI()` is preferable
+ * to `new URI(String)` because the former performs more checks, but
is possible only
+ * if the decoding and escaping resulted in no change.
*/
- String path = url.toExternalForm();
+ final String specified = url.toExternalForm();
+ String path = specified;
if (encoding != null) {
path = URLDecoder.decode(path, encoding);
}
path = encodeURI(path);
try {
- return new URI(path);
+ return path.equals(specified) ? url.toURI() : new URI(path);
} catch (URISyntaxException cause) {
/*
* Occurs only if the URL is not compliant with RFC 2396.
Otherwise every URL
* should succeed, so a failure can actually be considered as a
malformed URL.
*/
- throw (MalformedURLException) new
MalformedURLException(Exceptions.formatChainedMessages(null,
- Errors.format(Errors.Keys.IllegalArgumentValue_2, "URL",
path), cause)).initCause(cause);
+ throw (MalformedURLException) new
MalformedURLException(malformed(url, cause)).initCause(cause);
}
}
/**
* Converts a {@link URL} to a {@link File}. This is equivalent to a call
to the standard
* {@link URL#toURI()} method followed by a call to the {@link
File#File(URI)} constructor,
- * except for the following functionalities:
- *
- * <ul>
- * <li>Optionally decodes the {@code "%XX"} sequences, where {@code
"XX"} is a number.</li>
- * <li>Converts various exceptions into subclasses of {@link
IOException}.</li>
- * </ul>
+ * except that exceptions are converted to {@link IOException}:
*
- * @param url the URL to convert, or {@code null}.
- * @param encoding if the URL is encoded in a {@code
application/x-www-form-urlencoded} MIME format,
- * the character encoding (normally {@code "UTF-8"}). If
the URL is not encoded,
- * then {@code null}.
+ * @param url the URL to convert, or {@code null}.
* @return the file for the given URL, or {@code null} if the given URL
was null.
* @throws IOException if the URL cannot be converted to a file.
*
* @see File#File(URI)
*/
- public static File toFile(final URL url, final String encoding) throws
IOException {
+ public static File toFile(final URL url) throws IOException {
if (url == null) {
return null;
- }
- final URI uri = toURI(url, encoding);
- /*
- * We really want to call the File constructor expecting a URI
argument,
- * not the constructor expecting a String argument, because the one for
- * the URI argument performs additional platform-specific parsing.
- */
- try {
- return new File(uri);
- } catch (IllegalArgumentException cause) {
+ } else try {
+ return new File(url.toURI());
+ } catch (IllegalArgumentException | URISyntaxException cause) {
/*
* Typically happen when the URI scheme is not "file". But may
also happen if the
* URI contains fragment that cannot be represented in a File
(e.g. a Query part).
* The IllegalArgumentException does not allow us to distinguish
those cases.
*/
- throw new IOException(Exceptions.formatChainedMessages(null,
- Errors.format(Errors.Keys.IllegalArgumentValue_2, "URL",
url), cause), cause);
+ throw new IOException(malformed(url, cause), cause);
}
}
+ /**
+ * Prepares a message for a malformed URL.
+ *
+ * @param url the malformed URL.
+ * @param cause the exception thrown.
+ */
+ private static String malformed(final Object url, final Exception cause) {
+ return Exceptions.formatChainedMessages(null,
+ Errors.format(Errors.Keys.IllegalArgumentValue_2, "URL", url),
cause);
+ }
+
/**
* Converts a {@link URL} to a {@link Path}. This is equivalent to a call
to the standard
* {@link URL#toURI()} method followed by a call to the {@link
Path#of(URI)} static method,
@@ -431,8 +453,7 @@ public final class IOUtilities extends Static {
try {
return Path.of(uri);
} catch (IllegalArgumentException | FileSystemNotFoundException cause)
{
- final String message = Exceptions.formatChainedMessages(null,
- Errors.format(Errors.Keys.IllegalArgumentValue_2, "URL",
url), cause);
+ final String message = malformed(url, cause);
/*
* If the exception is IllegalArgumentException, then the URI
scheme has been recognized
* but the URI syntax is illegal for that file system. So we can
consider that the URL is
@@ -486,10 +507,10 @@ public final class IOUtilities extends Static {
return new File(path);
}
}
- final URL url = new URL(path);
+ final URL url = toURL(path, encoding);
final String scheme = url.getProtocol();
if (scheme != null && scheme.equalsIgnoreCase("file")) {
- return toFile(url, encoding);
+ return toFile(url);
}
/*
* Leave the URL in its original encoding on the assumption that this
is the encoding expected by
diff --git
a/storage/sis-storage/src/test/java/org/apache/sis/internal/storage/io/IOUtilitiesTest.java
b/storage/sis-storage/src/test/java/org/apache/sis/internal/storage/io/IOUtilitiesTest.java
index 57650ad0c8..2fe397f311 100644
---
a/storage/sis-storage/src/test/java/org/apache/sis/internal/storage/io/IOUtilitiesTest.java
+++
b/storage/sis-storage/src/test/java/org/apache/sis/internal/storage/io/IOUtilitiesTest.java
@@ -47,11 +47,12 @@ public final class IOUtilitiesTest extends TestCase {
*/
@Test
public void testFilename() throws URISyntaxException,
MalformedURLException {
- assertEquals("Map.png", IOUtilities.filename(
"/Users/name/Map.png"));
- assertEquals("Map.png", IOUtilities.filename(new File(
"/Users/name/Map.png")));
- assertEquals("Map.png", IOUtilities.filename(new URI
("file:/Users/name/Map.png")));
- assertEquals("Map.png", IOUtilities.filename(new URL
("file:/Users/name/Map.png")));
- assertEquals("name", IOUtilities.filename(new URI
("file:/Users/name/")));
+ final URI uri = new URI ("file:/Users/name/Map.png");
+ assertEquals("Map.png", IOUtilities.filename(
"/Users/name/Map.png"));
+ assertEquals("Map.png", IOUtilities.filename(new
File("/Users/name/Map.png")));
+ assertEquals("Map.png", IOUtilities.filename(uri));
+ assertEquals("Map.png", IOUtilities.filename(uri.toURL()));
+ assertEquals("name", IOUtilities.filename(new
URI("file:/Users/name/")));
assertEquals("", IOUtilities.filename("/"));
assertEquals("", IOUtilities.filename(""));
assertNull(IOUtilities.filename(Boolean.FALSE));
@@ -67,12 +68,13 @@ public final class IOUtilitiesTest extends TestCase {
@Test
@DependsOnMethod("testFilename")
public void testExtension() throws URISyntaxException,
MalformedURLException {
- assertEquals("png", IOUtilities.extension(
"/Users/name/Map.png"));
- assertEquals("png", IOUtilities.extension(new File(
"/Users/name/Map.png")));
- assertEquals("png", IOUtilities.extension(new URI
("file:/Users/name/Map.png")));
- assertEquals("png", IOUtilities.extension(new URL
("file:/Users/name/Map.png")));
- assertEquals("", IOUtilities.extension(new File(
"/Users/name/Map")));
- assertEquals("", IOUtilities.extension(new File(
"/Users/name/.png")));
+ final URI uri = new URI ("file:/Users/name/Map.png");
+ assertEquals("png", IOUtilities.extension(
"/Users/name/Map.png"));
+ assertEquals("png", IOUtilities.extension(new
File("/Users/name/Map.png")));
+ assertEquals("png", IOUtilities.extension(uri));
+ assertEquals("png", IOUtilities.extension(uri.toURL()));
+ assertEquals("", IOUtilities.extension(new
File("/Users/name/Map")));
+ assertEquals("", IOUtilities.extension(new
File("/Users/name/.png")));
assertNull(IOUtilities.extension(Boolean.FALSE));
assertNull(IOUtilities.extension(null));
}
@@ -92,7 +94,7 @@ public final class IOUtilitiesTest extends TestCase {
assertEquals("Any.xml", IOUtilities.filename (uri));
assertEquals( "xml", IOUtilities.extension(uri));
- final URL url = new
URL("jar:file:/sis-storage-tests.jar!/org/apache/sis/Any.xml");
+ final URL url = new
URI("jar:file:/sis-storage-tests.jar!/org/apache/sis/Any.xml").toURL();
assertEquals("Any.xml", IOUtilities.filename (url));
assertEquals( "xml", IOUtilities.extension(url));
}
@@ -106,23 +108,24 @@ public final class IOUtilitiesTest extends TestCase {
@Test
public void testToString() throws URISyntaxException,
MalformedURLException {
// Do not test File because the result is platform-specific.
- assertEquals("/Users/name/Map.png", IOUtilities.toString(
"/Users/name/Map.png"));
- assertEquals("file:/Users/name/Map.png", IOUtilities.toString(new URI
("file:/Users/name/Map.png")));
- assertEquals("file:/Users/name/Map.png", IOUtilities.toString(new URL
("file:/Users/name/Map.png")));
+ final URI uri = new URI ("file:/Users/name/Map.png");
+ assertEquals("/Users/name/Map.png",
IOUtilities.toString("/Users/name/Map.png"));
+ assertEquals("file:/Users/name/Map.png", IOUtilities.toString(uri));
+ assertEquals("file:/Users/name/Map.png",
IOUtilities.toString(uri.toURL()));
assertNull(IOUtilities.toString(Boolean.FALSE));
assertNull(IOUtilities.toString(null));
}
/**
- * Tests {@link IOUtilities#toAuxiliaryURL(URI, int)}.
+ * Tests {@link IOUtilities#toAuxiliaryURI(URI, int)}.
*
* @throws URISyntaxException if a URI cannot be parsed.
* @throws MalformedURLException if a URL cannot be parsed.
*/
@Test
- public void testAuxiliaryURL() throws URISyntaxException,
MalformedURLException {
- assertEquals(new URL("http://localhost/directory/image.tfw"),
- IOUtilities.toAuxiliaryURL(new
URI("http://localhost/directory/image.tiff"), "tfw"));
+ public void testAuxiliaryURI() throws URISyntaxException,
MalformedURLException {
+ assertEquals(new URI("http://localhost/directory/image.tfw"),
+ IOUtilities.toAuxiliaryURI(new
URI("http://localhost/directory/image.tiff"), "tfw"));
}
/**
@@ -153,6 +156,7 @@ public final class IOUtilitiesTest extends TestCase {
*/
@Test
@DependsOnMethod("testEncodeURI")
+ @SuppressWarnings("deprecation")
public void testToURI() throws IOException, URISyntaxException {
assertEquals(new URI("file:/Users/name/Map.png"),
IOUtilities.toURI(new URL("file:/Users/name/Map.png"), null));
@@ -169,7 +173,7 @@ public final class IOUtilitiesTest extends TestCase {
}
/**
- * Tests the {@link IOUtilities#toFile(URL, String)} method. Do not test a
Windows-specific path
+ * Tests the {@link IOUtilities#toFile(URL)} method. Do not test a
Windows-specific path
* (e.g. {@code "file:///C:/some/path/Map.png"}), since the result is
different on Windows or
* Unix platforms.
*
@@ -193,7 +197,7 @@ public final class IOUtilitiesTest extends TestCase {
}
/**
- * Implementation of {@link #testToFile()} using the given encoding.
+ * Implementation of {@link #testToURL()} using the given encoding.
* If the encoding is null, then the {@code URLDecoder} will not be used.
*
* @param encoding the encoding, or {@code null} if none.
@@ -202,24 +206,25 @@ public final class IOUtilitiesTest extends TestCase {
*/
private void testToFile(final String encoding, final String plus) throws
IOException {
assertEquals("Unix absolute path.", new File("/Users/name/Map.png"),
- IOUtilities.toFile(new URL("file:/Users/name/Map.png"),
encoding));
+
IOUtilities.toFile(IOUtilities.toURL("file:/Users/name/Map.png", encoding)));
assertEquals("Path with space.", new File("/Users/name/Map with
spaces.png"),
- IOUtilities.toFile(new URL("file:/Users/name/Map with
spaces.png"), encoding));
+ IOUtilities.toFile(IOUtilities.toURL("file:/Users/name/Map
with spaces.png", encoding)));
assertEquals("Path with + sign.", new
File("/Users/name/++t--++est.shp"),
- IOUtilities.toFile(new
URL(CharSequences.replace("file:/Users/name/++t--++est.shp", "+",
plus).toString()), encoding));
+ IOUtilities.toFile(IOUtilities.toURL(
+
CharSequences.replace("file:/Users/name/++t--++est.shp", "+", plus).toString(),
encoding)));
}
/**
- * Tests {@link IOUtilities#toFileOrURL(String, String)}.
+ * Tests {@link IOUtilities#toFileOrURL(String)}.
*
* @throws IOException if a URL cannot be parsed.
*/
@Test
@DependsOnMethod("testToFileFromUTF8")
public void testToFileOrURL() throws IOException {
- assertEquals(new File("/Users/name/Map.png"),
IOUtilities.toFileOrURL("/Users/name/Map.png", null));
- assertEquals(new File("/Users/name/Map.png"),
IOUtilities.toFileOrURL("file:/Users/name/Map.png", null));
- assertEquals(new URL("http://localhost"),
IOUtilities.toFileOrURL("http://localhost", null));
+ assertEquals(new File("/Users/name/Map.png"),
IOUtilities.toFileOrURL("/Users/name/Map.png", null));
+ assertEquals(new File("/Users/name/Map.png"),
IOUtilities.toFileOrURL("file:/Users/name/Map.png", null));
+ assertEquals(URI.create("http://localhost").toURL(),
IOUtilities.toFileOrURL("http://localhost", null));
assertEquals(new File("/Users/name/Map with spaces.png"),
IOUtilities.toFileOrURL("file:/Users/name/Map%20with%20spaces.png", "UTF-8"));
}
diff --git
a/storage/sis-xmlstore/src/test/java/org/apache/sis/internal/storage/gpx/WriterTest.java
b/storage/sis-xmlstore/src/test/java/org/apache/sis/internal/storage/gpx/WriterTest.java
index f906676612..e37a2266b6 100644
---
a/storage/sis-xmlstore/src/test/java/org/apache/sis/internal/storage/gpx/WriterTest.java
+++
b/storage/sis-xmlstore/src/test/java/org/apache/sis/internal/storage/gpx/WriterTest.java
@@ -133,6 +133,7 @@ public final class WriterTest extends TestCase {
* @param version either {@link StoreProvider#V1_0} or {@link
StoreProvider#V1_1}.
* @param expected name of a test file containing the expected XML result.
*/
+ @SuppressWarnings("deprecation")
private void testMetadata(final TestData data) throws Exception {
final Metadata metadata = MetadataTest.create();
try (WritableStore store = create()) {
@@ -245,6 +246,7 @@ public final class WriterTest extends TestCase {
* @param store the store where to write.
* @param type the kind of feature to write: way point, route or track.
*/
+ @SuppressWarnings("deprecation")
private void testFeatures(final WritableStore store, final Type type)
throws Exception {
final Types types = store.types;
/*