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 ea7344752e Fix information lost: - In source file when parameters are
copied. - In root object name when WKT formatting has warnings.
ea7344752e is described below
commit ea7344752e796e7335511ce6723a32cc7fbd0f09
Author: Martin Desruisseaux <[email protected]>
AuthorDate: Thu Dec 28 19:05:13 2023 +0100
Fix information lost:
- In source file when parameters are copied.
- In root object name when WKT formatting has warnings.
---
.../main/org/apache/sis/io/wkt/FormattableObject.java | 17 ++++++++++-------
.../main/org/apache/sis/io/wkt/Warnings.java | 2 ++
.../main/org/apache/sis/parameter/Parameters.java | 4 ++++
.../sis/referencing/operation/gridded/GridFile.java | 9 +++++++++
.../provider/FranceGeocentricInterpolation.java | 2 +-
.../bind/referencing/CC_GeneralOperationParameter.java | 1 +
.../sis/xml/bind/referencing/CC_OperationMethod.java | 7 +++++--
.../sis/referencing/operation/provider/NTv2Test.java | 2 +-
8 files changed, 33 insertions(+), 11 deletions(-)
diff --git
a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/io/wkt/FormattableObject.java
b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/io/wkt/FormattableObject.java
index 893cf1ccf3..9dd15b6d67 100644
---
a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/io/wkt/FormattableObject.java
+++
b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/io/wkt/FormattableObject.java
@@ -195,13 +195,16 @@ public abstract class FormattableObject implements
Printable {
final String wkt;
try {
formatter.append(this);
- if (strict) {
- /*
- * If a warning occurred, consider the object as
non-formattable.
- * We take the last message since it is more likely to be
about the enclosing element.
- */
- final Warnings warnings = formatter.getWarnings();
- if (warnings != null) {
+ final Warnings warnings = formatter.getWarnings();
+ if (warnings != null) {
+ if (warnings.getRootElement() == null) {
+ warnings.setRoot(this);
+ }
+ if (strict) {
+ /*
+ * If a warning occurred, consider the object as
non-formattable.
+ * We take the last message since it is more likely to be
about the enclosing element.
+ */
final int n = warnings.getNumMessages() - 1;
throw new
UnformattableObjectException(warnings.getMessage(n), warnings.getException(n));
}
diff --git
a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/io/wkt/Warnings.java
b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/io/wkt/Warnings.java
index 22051537a6..baf08d84d3 100644
---
a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/io/wkt/Warnings.java
+++
b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/io/wkt/Warnings.java
@@ -161,6 +161,8 @@ public final class Warnings implements Localized,
Serializable {
* parsed or formatted. Defined as a separated method instead of as an
argument for the constructor
* because this information is more easily provided by {@link WKTFormat}
rather than by the parser or
* formatter that created the {@code Warnings} object.
+ *
+ * @see #getRootElement()
*/
final void setRoot(final Object obj) {
if (obj instanceof IdentifiedObject) {
diff --git
a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/parameter/Parameters.java
b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/parameter/Parameters.java
index c4257787bb..1df706d81c 100644
---
a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/parameter/Parameters.java
+++
b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/parameter/Parameters.java
@@ -938,6 +938,10 @@ public abstract class Parameters implements
ParameterValueGroup, Cloneable, Prin
throw new InvalidParameterValueException(Errors.format(
Errors.Keys.IllegalArgumentValue_2, name, v),
name, v);
}
+ if (source instanceof DefaultParameterValue<?> && target
instanceof DefaultParameterValue<?>) {
+ ((DefaultParameterValue<?>)
source).getSourceFile().ifPresent((file) ->
+ ((DefaultParameterValue<?>)
target).setSourceFile(file));
+ }
}
occurrences.put(name, occurrence + 1);
}
diff --git
a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/gridded/GridFile.java
b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/gridded/GridFile.java
index c6fc045fa4..239c7b8f52 100644
---
a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/gridded/GridFile.java
+++
b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/gridded/GridFile.java
@@ -27,6 +27,7 @@ import java.nio.file.Path;
import java.nio.file.Files;
import java.nio.file.NoSuchFileException;
import java.nio.file.FileSystemNotFoundException;
+import java.util.Optional;
import java.util.logging.Level;
import java.util.concurrent.atomic.AtomicBoolean;
import org.opengis.util.FactoryException;
@@ -203,6 +204,14 @@ public final class GridFile {
return resolved;
}
+ /**
+ * {@return the resolved URI as a path if possible}.
+ * A use case for this method is grids to open as a {@link
org.apache.sis.storage.DataStore}.
+ */
+ public Optional<Path> path() {
+ return Optional.ofNullable(asPath);
+ }
+
/**
* Creates a channel for reading bytes from the file at the path specified
at construction time.
* This method tries to open using the file system before to open from the
URL.
diff --git
a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/provider/FranceGeocentricInterpolation.java
b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/provider/FranceGeocentricInterpolation.java
index 44585f67ed..c4022a3982 100644
---
a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/provider/FranceGeocentricInterpolation.java
+++
b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/provider/FranceGeocentricInterpolation.java
@@ -274,7 +274,7 @@ public final class FranceGeocentricInterpolation extends
GeodeticOperation {
* @return {@code true} if the given file looks like a fie from the French
mapping agency.
*/
public static boolean isRecognized(final GridFile file) {
- final String filename = file.resolved().getPath();
+ final String filename = file.parameter.getPath();
final int s = filename.lastIndexOf('/') + 1;
return filename.regionMatches(true, s, DEFAULT, 0, 5);
}
diff --git
a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/xml/bind/referencing/CC_GeneralOperationParameter.java
b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/xml/bind/referencing/CC_GeneralOperationParameter.java
index 57366a788e..b73edf5231 100644
---
a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/xml/bind/referencing/CC_GeneralOperationParameter.java
+++
b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/xml/bind/referencing/CC_GeneralOperationParameter.java
@@ -136,6 +136,7 @@ public final class CC_GeneralOperationParameter extends
PropertyType<CC_GeneralO
*/
@XmlElementRef
public AbstractParameterDescriptor getElement() {
+ @SuppressWarnings("LocalVariableHidesMemberVariable")
final GeneralParameterDescriptor metadata = this.metadata;
if (metadata instanceof AbstractParameterDescriptor) {
return (AbstractParameterDescriptor) metadata;
diff --git
a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/xml/bind/referencing/CC_OperationMethod.java
b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/xml/bind/referencing/CC_OperationMethod.java
index 95ddfab6bf..c66eafed8d 100644
---
a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/xml/bind/referencing/CC_OperationMethod.java
+++
b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/xml/bind/referencing/CC_OperationMethod.java
@@ -213,8 +213,8 @@ public final class CC_OperationMethod extends
PropertyType<CC_OperationMethod, O
final GeneralParameterDescriptor replacement =
replacements.get(p.getDescriptor());
if (replacement != null) {
if (p instanceof ParameterValue<?>) {
- final ParameterValue<?> source = (ParameterValue<?>) p;
- final ParameterValue<?> target = new
DefaultParameterValue<>((ParameterDescriptor<?>) replacement);
+ final var source = (ParameterValue<?>) p;
+ final var target = new
DefaultParameterValue<>((ParameterDescriptor<?>) replacement);
final Object value = source.getValue();
final Unit<?> unit = source.getUnit();
if (unit == null) {
@@ -224,6 +224,9 @@ public final class CC_OperationMethod extends
PropertyType<CC_OperationMethod, O
} else {
target.setValue(((Number) value).doubleValue(), unit);
}
+ if (source instanceof DefaultParameterValue<?>) {
+ ((DefaultParameterValue<?>)
source).getSourceFile().ifPresent(target::setSourceFile);
+ }
p = target;
} else if (p instanceof ParameterValueGroup) {
final ParameterValueGroup source = (ParameterValueGroup) p;
diff --git
a/endorsed/src/org.apache.sis.referencing/test/org/apache/sis/referencing/operation/provider/NTv2Test.java
b/endorsed/src/org.apache.sis.referencing/test/org/apache/sis/referencing/operation/provider/NTv2Test.java
index 0d803d1d5c..d6ac4eb852 100644
---
a/endorsed/src/org.apache.sis.referencing/test/org/apache/sis/referencing/operation/provider/NTv2Test.java
+++
b/endorsed/src/org.apache.sis.referencing/test/org/apache/sis/referencing/operation/provider/NTv2Test.java
@@ -193,7 +193,7 @@ public final class NTv2Test extends DatumShiftTestCase {
final Parameters pg = Parameters.castOrWrap(new
NTv2().getParameters().createValue());
pg.getOrCreate(NTv2.FILE).setValue(new URI(MULTIGRID_TEST_FILE));
final GridFile file = new GridFile(pg, NTv2.FILE);
- assumeTrue(Files.exists(Path.of(file.resolved())));
+ assumeTrue(Files.exists(file.path().orElseThrow()));
final LoadedGrid<Angle,Angle> grid = NTv2.getOrLoad(NTv2.class, file,
2);
assertInstanceOf("Should contain many grids.", GridGroup.class, grid);