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 362154b28d Remove usage of `org.opengis.temporal.TemporalFactory`. The
latter was related to ISO 19108, which has not been updated since 2002,
overlaps with `java.time`, overlaps with ISO 19111 and may overlap with the
ongoing work in OGC temporal working group.
362154b28d is described below
commit 362154b28d64d0fcd910017790c6763279e5c20c
Author: Martin Desruisseaux <[email protected]>
AuthorDate: Thu May 9 11:26:48 2024 +0200
Remove usage of `org.opengis.temporal.TemporalFactory`.
The latter was related to ISO 19108, which has not been updated since 2002,
overlaps with `java.time`, overlaps with ISO 19111 and may overlap with the
ongoing work in OGC temporal working group.
---
.../org.apache.sis.metadata/main/module-info.java | 1 -
.../sis/metadata/iso/extent/DefaultExtent.java | 2 -
.../metadata/iso/extent/DefaultTemporalExtent.java | 4 +-
.../apache/sis/metadata/iso/extent/Extents.java | 4 --
.../metadata/iso/lineage/DefaultProcessStep.java | 2 +-
.../apache/sis/pending/temporal/DefaultPeriod.java | 7 +++
.../org/apache/sis/pending/temporal/Primitive.java | 13 ++---
.../temporal}/TemporalUtilities.java | 59 ++++-----------------
.../apache/sis/pending/temporal/package-info.java | 6 ++-
.../org/apache/sis/xml/bind/gml/TM_Primitive.java | 2 +-
.../src/org.apache.sis.util/main/module-info.java | 3 --
.../pending/temporal/DefaultTemporalFactory.java | 60 ----------------------
geoapi/snapshot | 2 +-
13 files changed, 28 insertions(+), 137 deletions(-)
diff --git a/endorsed/src/org.apache.sis.metadata/main/module-info.java
b/endorsed/src/org.apache.sis.metadata/main/module-info.java
index 0105a2f2f9..fdb3d50d7c 100644
--- a/endorsed/src/org.apache.sis.metadata/main/module-info.java
+++ b/endorsed/src/org.apache.sis.metadata/main/module-info.java
@@ -52,7 +52,6 @@ module org.apache.sis.metadata {
uses org.apache.sis.metadata.sql.privy.Initializer;
uses org.apache.sis.xml.bind.AdapterReplacement;
uses org.apache.sis.xml.bind.TypeRegistration;
- uses org.opengis.temporal.TemporalFactory;
/*
* Public API open to everyone.
diff --git
a/endorsed/src/org.apache.sis.metadata/main/org/apache/sis/metadata/iso/extent/DefaultExtent.java
b/endorsed/src/org.apache.sis.metadata/main/org/apache/sis/metadata/iso/extent/DefaultExtent.java
index fa0dfbb2d8..d89ea059ba 100644
---
a/endorsed/src/org.apache.sis.metadata/main/org/apache/sis/metadata/iso/extent/DefaultExtent.java
+++
b/endorsed/src/org.apache.sis.metadata/main/org/apache/sis/metadata/iso/extent/DefaultExtent.java
@@ -323,8 +323,6 @@ public class DefaultExtent extends ISOMetadata implements
Extent {
* @throws IllegalArgumentException if two elements to intersect are not
compatible (e.g. mismatched
* {@linkplain DefaultGeographicBoundingBox#getInclusion()
bounding box inclusion status} or
* mismatched {@linkplain DefaultVerticalExtent#getVerticalCRS()
vertical datum}).
- * @throws UnsupportedOperationException if a {@code TemporalFactory} is
required but no implementation
- * has been found on the module path.
*
* @see Extents#intersection(Extent, Extent)
* @see org.apache.sis.geometry.GeneralEnvelope#intersect(Envelope)
diff --git
a/endorsed/src/org.apache.sis.metadata/main/org/apache/sis/metadata/iso/extent/DefaultTemporalExtent.java
b/endorsed/src/org.apache.sis.metadata/main/org/apache/sis/metadata/iso/extent/DefaultTemporalExtent.java
index cd5dd14d9a..cff6577ffc 100644
---
a/endorsed/src/org.apache.sis.metadata/main/org/apache/sis/metadata/iso/extent/DefaultTemporalExtent.java
+++
b/endorsed/src/org.apache.sis.metadata/main/org/apache/sis/metadata/iso/extent/DefaultTemporalExtent.java
@@ -27,8 +27,8 @@ import org.opengis.metadata.extent.TemporalExtent;
import org.opengis.metadata.extent.SpatialTemporalExtent;
import org.opengis.referencing.operation.TransformException;
import org.apache.sis.metadata.iso.ISOMetadata;
-import org.apache.sis.metadata.privy.TemporalUtilities;
import org.apache.sis.metadata.privy.ReferencingServices;
+import org.apache.sis.pending.temporal.TemporalUtilities;
import org.apache.sis.xml.NilObject;
import org.apache.sis.xml.NilReason;
@@ -242,8 +242,6 @@ public class DefaultTemporalExtent extends ISOMetadata
implements TemporalExtent
* If either this extent or the specified extent has nil primitive, then
the intersection result will also be nil.
*
* @param other the temporal extent to intersect with this extent.
- * @throws UnsupportedOperationException if no implementation of {@code
TemporalFactory} has been found
- * on the module path.
*
* @see Extents#intersection(TemporalExtent, TemporalExtent)
* @see org.apache.sis.geometry.GeneralEnvelope#intersect(Envelope)
diff --git
a/endorsed/src/org.apache.sis.metadata/main/org/apache/sis/metadata/iso/extent/Extents.java
b/endorsed/src/org.apache.sis.metadata/main/org/apache/sis/metadata/iso/extent/Extents.java
index 14478406e7..2459f6ce53 100644
---
a/endorsed/src/org.apache.sis.metadata/main/org/apache/sis/metadata/iso/extent/Extents.java
+++
b/endorsed/src/org.apache.sis.metadata/main/org/apache/sis/metadata/iso/extent/Extents.java
@@ -736,8 +736,6 @@ public final class Extents extends Static {
* @param e2 the second extent, or {@code null}.
* @return the intersection (may be any of the {@code e1} or {@code e2}
argument if unchanged),
* or {@code null} if the two given extents are null.
- * @throws UnsupportedOperationException if no implementation of {@code
TemporalFactory} has been found
- * on the module path.
*
* @see DefaultTemporalExtent#intersect(TemporalExtent)
*
@@ -766,8 +764,6 @@ public final class Extents extends Static {
* @throws IllegalArgumentException if two elements to intersect are not
compatible (e.g. mismatched
* {@linkplain DefaultGeographicBoundingBox#getInclusion()
bounding box inclusion status} or
* mismatched {@linkplain DefaultVerticalExtent#getVerticalCRS()
vertical datum}).
- * @throws UnsupportedOperationException if a {@code TemporalFactory} is
required but no implementation
- * has been found on the module path.
*
* @see DefaultExtent#intersect(Extent)
*
diff --git
a/endorsed/src/org.apache.sis.metadata/main/org/apache/sis/metadata/iso/lineage/DefaultProcessStep.java
b/endorsed/src/org.apache.sis.metadata/main/org/apache/sis/metadata/iso/lineage/DefaultProcessStep.java
index 7762e52c8c..861ad6a85d 100644
---
a/endorsed/src/org.apache.sis.metadata/main/org/apache/sis/metadata/iso/lineage/DefaultProcessStep.java
+++
b/endorsed/src/org.apache.sis.metadata/main/org/apache/sis/metadata/iso/lineage/DefaultProcessStep.java
@@ -37,7 +37,7 @@ import org.apache.sis.xml.bind.FilterByVersion;
import org.apache.sis.xml.privy.LegacyNamespaces;
import org.apache.sis.xml.bind.gml.TM_Primitive;
import org.apache.sis.xml.bind.metadata.MD_Scope;
-import org.apache.sis.metadata.privy.TemporalUtilities;
+import org.apache.sis.pending.temporal.TemporalUtilities;
// Specific to the geoapi-3.1 and geoapi-4.0 branches:
import org.opengis.metadata.maintenance.Scope;
diff --git
a/endorsed/src/org.apache.sis.util/main/org/apache/sis/pending/temporal/DefaultPeriod.java
b/endorsed/src/org.apache.sis.metadata/main/org/apache/sis/pending/temporal/DefaultPeriod.java
similarity index 89%
rename from
endorsed/src/org.apache.sis.util/main/org/apache/sis/pending/temporal/DefaultPeriod.java
rename to
endorsed/src/org.apache.sis.metadata/main/org/apache/sis/pending/temporal/DefaultPeriod.java
index 1973da502c..12a7573630 100644
---
a/endorsed/src/org.apache.sis.util/main/org/apache/sis/pending/temporal/DefaultPeriod.java
+++
b/endorsed/src/org.apache.sis.metadata/main/org/apache/sis/pending/temporal/DefaultPeriod.java
@@ -20,6 +20,8 @@ import java.util.Objects;
// Specific to the geoapi-3.1 and geoapi-4.0 branches:
import java.time.Instant;
+import java.time.Duration;
+import java.time.temporal.TemporalAmount;
import org.opengis.temporal.Period;
@@ -49,6 +51,11 @@ final class DefaultPeriod extends Primitive implements
Period {
return ending;
}
+ /** Duration of this temporal geometric primitive. */
+ @Override public TemporalAmount length() {
+ return (beginning != null && ending != null) ?
Duration.between(beginning, ending) : null;
+ }
+
/** String representation. */
@Override public String toString() {
return "[" + beginning + " … " + ending + ']';
diff --git
a/endorsed/src/org.apache.sis.util/main/org/apache/sis/pending/temporal/Primitive.java
b/endorsed/src/org.apache.sis.metadata/main/org/apache/sis/pending/temporal/Primitive.java
similarity index 84%
rename from
endorsed/src/org.apache.sis.util/main/org/apache/sis/pending/temporal/Primitive.java
rename to
endorsed/src/org.apache.sis.metadata/main/org/apache/sis/pending/temporal/Primitive.java
index 0287791d12..d8c284e1dd 100644
---
a/endorsed/src/org.apache.sis.util/main/org/apache/sis/pending/temporal/Primitive.java
+++
b/endorsed/src/org.apache.sis.metadata/main/org/apache/sis/pending/temporal/Primitive.java
@@ -31,7 +31,7 @@ import org.opengis.metadata.Identifier;
*
* @author Martin Desruisseaux (Geomatys)
*/
-class Primitive implements TemporalGeometricPrimitive, Identifier {
+abstract class Primitive implements TemporalGeometricPrimitive, Identifier {
/**
* For sub-class constructors.
*/
@@ -57,18 +57,13 @@ class Primitive implements TemporalGeometricPrimitive,
Identifier {
return toString();
}
- /** position of this primitive relative to another primitive. */
+ /** Position of this primitive relative to another primitive. */
@Override public final RelativePosition relativePosition(TemporalPrimitive
other) {
- throw DefaultTemporalFactory.unsupported();
+ throw new UnsupportedOperationException();
}
/** Absolute value of the difference between temporal positions. */
@Override public final TemporalAmount distance(TemporalGeometricPrimitive
other) {
- throw DefaultTemporalFactory.unsupported();
- }
-
- /** Duration of this temporal geometric primitive. */
- @Override public final TemporalAmount length() {
- return null; // Do not throw an exception here; this is invoked by
reflection.
+ throw new UnsupportedOperationException();
}
}
diff --git
a/endorsed/src/org.apache.sis.metadata/main/org/apache/sis/metadata/privy/TemporalUtilities.java
b/endorsed/src/org.apache.sis.metadata/main/org/apache/sis/pending/temporal/TemporalUtilities.java
similarity index 65%
rename from
endorsed/src/org.apache.sis.metadata/main/org/apache/sis/metadata/privy/TemporalUtilities.java
rename to
endorsed/src/org.apache.sis.metadata/main/org/apache/sis/pending/temporal/TemporalUtilities.java
index ee30445316..8c7b1dac7c 100644
---
a/endorsed/src/org.apache.sis.metadata/main/org/apache/sis/metadata/privy/TemporalUtilities.java
+++
b/endorsed/src/org.apache.sis.metadata/main/org/apache/sis/pending/temporal/TemporalUtilities.java
@@ -14,67 +14,27 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.sis.metadata.privy;
+package org.apache.sis.pending.temporal;
import java.util.Date;
-import java.util.ServiceLoader;
import org.opengis.temporal.TemporalPrimitive;
-import org.apache.sis.system.Modules;
-import org.apache.sis.system.Reflect;
-import org.apache.sis.system.SystemListener;
-import org.apache.sis.pending.temporal.DefaultTemporalFactory;
// Specific to the geoapi-3.1 and geoapi-4.0 branches:
import java.time.Instant;
import org.opengis.temporal.Period;
-import org.opengis.temporal.TemporalFactory;
/**
- * Utilities related to ISO 19108 objects. This class may disappear after we
reviewed
- * the GeoAPI-pending temporal interfaces.
+ * Utilities related to ISO 19108 objects.
*
* @author Martin Desruisseaux (Geomatys)
* @author Guilhem Legal (Geomatys)
*/
-public final class TemporalUtilities extends SystemListener {
+public final class TemporalUtilities {
/**
- * The default factory to use for implementations.
- */
- private static volatile TemporalFactory implementation;
-
- static {
- SystemListener.add(new TemporalUtilities());
- }
-
- /**
- * For the singleton system listener only.
+ * Do not allow instantiation of this class.
*/
private TemporalUtilities() {
- super(Modules.METADATA);
- }
-
- /**
- * Discards the cached factory when the module path has changed.
- */
- @Override
- protected void classpathChanged() {
- implementation = null;
- }
-
- /**
- * Returns a temporal factory, or a default implementation if none.
- *
- * @return the temporal factory.
- */
- private static TemporalFactory getTemporalFactory() {
- TemporalFactory factory = implementation;
- if (factory == null) {
- factory = ServiceLoader.load(TemporalFactory.class,
Reflect.getContextClassLoader())
- .findFirst().orElseGet(DefaultTemporalFactory::provider);
- implementation = factory;
- }
- return factory;
}
/**
@@ -87,21 +47,20 @@ public final class TemporalUtilities extends SystemListener
{
public static TemporalPrimitive createInstant(final Date time) throws
UnsupportedOperationException {
if (time == null) return null;
final Instant t = time.toInstant();
- return getTemporalFactory().createPeriod(t, t);
+ return new DefaultPeriod(t, t);
}
/**
- * Creates a period for the given begin and end dates. The given arguments
can be null if the
- * {@link TemporalFactory} methods accept null instants, which stand for
undetermined position.
+ * Creates a period for the given begin and end dates.
*
- * @param begin the begin date, inclusive.
- * @param end the end date, inclusive.
+ * @param begin the begin date (inclusive), or {@code null}.
+ * @param end the end date (inclusive), or {@code null}.
* @return the period, or {@code null} if both arguments are null.
* @throws UnsupportedOperationException if the temporal factory is not
available on the module path.
*/
public static TemporalPrimitive createPeriod(final Date begin, final Date
end) throws UnsupportedOperationException {
if (begin == null && end == null) return null;
- return getTemporalFactory().createPeriod(
+ return new DefaultPeriod(
(begin != null) ? begin.toInstant() : null,
(end != null) ? end.toInstant() : null);
}
diff --git
a/endorsed/src/org.apache.sis.util/main/org/apache/sis/pending/temporal/package-info.java
b/endorsed/src/org.apache.sis.metadata/main/org/apache/sis/pending/temporal/package-info.java
similarity index 73%
rename from
endorsed/src/org.apache.sis.util/main/org/apache/sis/pending/temporal/package-info.java
rename to
endorsed/src/org.apache.sis.metadata/main/org/apache/sis/pending/temporal/package-info.java
index 06ff786284..bc684a2a97 100644
---
a/endorsed/src/org.apache.sis.util/main/org/apache/sis/pending/temporal/package-info.java
+++
b/endorsed/src/org.apache.sis.metadata/main/org/apache/sis/pending/temporal/package-info.java
@@ -16,8 +16,10 @@
*/
/**
- * Place-holder for a future "sis-temporal" module. This is a temporary
package;
- * the temporal GeoAPI interfaces are expected to change a lot in a future
revision.
+ * Place-holder for a future implementation of {@code org.opengis.temporal}
interfaces.
+ * Those interfaces should be derived from ISO 19108, but they overlap with
{@code java.time} standard API.
+ * Furthermore, the ISO 19108 standard also overlaps with ISO 19111. How to
resolve those overlaps has not
+ * yet been decided.
*
* @author Martin Desruisseaux (Geomatys)
*/
diff --git
a/endorsed/src/org.apache.sis.metadata/main/org/apache/sis/xml/bind/gml/TM_Primitive.java
b/endorsed/src/org.apache.sis.metadata/main/org/apache/sis/xml/bind/gml/TM_Primitive.java
index edea96f9cb..c7a23ec8e8 100644
---
a/endorsed/src/org.apache.sis.metadata/main/org/apache/sis/xml/bind/gml/TM_Primitive.java
+++
b/endorsed/src/org.apache.sis.metadata/main/org/apache/sis/xml/bind/gml/TM_Primitive.java
@@ -22,7 +22,7 @@ import org.opengis.temporal.TemporalPrimitive;
import org.apache.sis.xml.privy.XmlUtilities;
import org.apache.sis.xml.bind.Context;
import org.apache.sis.xml.bind.gco.PropertyType;
-import org.apache.sis.metadata.privy.TemporalUtilities;
+import org.apache.sis.pending.temporal.TemporalUtilities;
import org.apache.sis.util.resources.Errors;
// Specific to the geoapi-3.1 and geoapi-4.0 branches:
diff --git a/endorsed/src/org.apache.sis.util/main/module-info.java
b/endorsed/src/org.apache.sis.util/main/module-info.java
index 10c920ec57..6391f7b34d 100644
--- a/endorsed/src/org.apache.sis.util/main/module-info.java
+++ b/endorsed/src/org.apache.sis.util/main/module-info.java
@@ -128,9 +128,6 @@ module org.apache.sis.util {
org.apache.sis.referencing.epsg, // In the "non-free"
sub-project.
org.apache.sis.referencing.database; // In the "non-free"
sub-project.
- exports org.apache.sis.pending.temporal to
- org.apache.sis.metadata;
-
exports org.apache.sis.converter to
org.apache.sis.metadata,
org.apache.sis.referencing,
diff --git
a/endorsed/src/org.apache.sis.util/main/org/apache/sis/pending/temporal/DefaultTemporalFactory.java
b/endorsed/src/org.apache.sis.util/main/org/apache/sis/pending/temporal/DefaultTemporalFactory.java
deleted file mode 100644
index b52df00f46..0000000000
---
a/endorsed/src/org.apache.sis.util/main/org/apache/sis/pending/temporal/DefaultTemporalFactory.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.sis.pending.temporal;
-
-import java.time.Instant;
-
-// Specific to the geoapi-3.1 and geoapi-4.0 branches:
-import org.opengis.temporal.*;
-import org.opengis.referencing.crs.TemporalCRS;
-import org.apache.sis.util.resources.Errors;
-
-
-/**
- * Default implementation of temporal object factory. This is a temporary
class;
- * GeoAPI temporal interfaces are expected to change a lot in a future
revision.
- *
- * @author Martin Desruisseaux (Geomatys)
- */
-public final class DefaultTemporalFactory implements TemporalFactory {
- /** The unique instance of this factory. */
- private static final TemporalFactory INSTANCE = new
DefaultTemporalFactory();
-
- /** {@return the unique instance of this factory}. */
- public static TemporalFactory provider() {
- return INSTANCE;
- }
-
- /** Creates the singleton instance. */
- private DefaultTemporalFactory() {
- }
-
- /** Creates a period for the two given instants. */
- @Override public Period createPeriod(Instant begin, Instant end) {
- return new DefaultPeriod(begin, end);
- }
-
- /** Returns the exception to be thrown by all unsupported methods. */
- static UnsupportedOperationException unsupported() {
- return new
UnsupportedOperationException(Errors.format(Errors.Keys.MissingRequiredModule_1,
"sis-temporal"));
- }
-
- /** Unsupported. */
- @Override public TemporalPosition createTemporalPosition(TemporalCRS tcrs,
IndeterminateValue iv) {
- throw unsupported();
- }
-}
diff --git a/geoapi/snapshot b/geoapi/snapshot
index 268b27c27d..76470c0640 160000
--- a/geoapi/snapshot
+++ b/geoapi/snapshot
@@ -1 +1 @@
-Subproject commit 268b27c27dcc3b034dd7621a682bc4d432511f11
+Subproject commit 76470c06402aba756ce77dd98a0d36e4e2abcb14