This is an automated email from the ASF dual-hosted git repository. desruisseaux pushed a commit to branch geoapi-3.1 in repository https://gitbox.apache.org/repos/asf/sis.git
commit 269d8e975979799762d278031fd422db4ddd971e Merge: 5dab0950ea 76bddb705e Author: Martin Desruisseaux <[email protected]> AuthorDate: Fri May 24 18:45:47 2024 +0200 Merge branch 'geoapi-4.0' into geoapi-3.1 .../main/org/apache/sis/console/AboutCommand.java | 4 +- .../apache/sis/feature/FeatureMemoryBenchmark.java | 4 +- .../test/org/apache/sis/filter/PeriodLiteral.java | 8 +- .../org/apache/sis/filter/TemporalFilterTest.java | 2 +- .../sis/metadata/iso/acquisition/DefaultEvent.java | 34 +- .../sis/metadata/iso/acquisition/package-info.java | 2 +- .../metadata/iso/citation/DefaultCitationDate.java | 55 ++- .../sis/metadata/iso/citation/package-info.java | 2 +- .../metadata/iso/extent/DefaultTemporalExtent.java | 101 +++-- .../apache/sis/metadata/iso/extent/Extents.java | 131 ++++--- .../sis/metadata/iso/legacy/TemporalToDate.java | 13 +- .../metadata/iso/lineage/DefaultProcessStep.java | 4 +- .../maintenance/DefaultMaintenanceInformation.java | 4 +- .../sis/metadata/privy/ImplementationHelper.java | 2 +- .../apache/sis/pending/temporal/DefaultPeriod.java | 4 +- .../sis/pending/temporal/TemporalUtilities.java | 50 ++- .../org/apache/sis/xml/bind/gml/TM_Primitive.java | 33 +- .../apache/sis/xml/bind/gml/TemporalAdapter.java | 67 ++++ .../apache/sis/xml/bind/gml/TimePeriodBound.java | 1 + .../sis/xml/bind/gml/UniversalTimeAdapter.java | 2 +- .../org/apache/sis/xml/privy/XmlUtilities.java | 33 +- .../sis/metadata/iso/extent/DefaultExtentTest.java | 25 +- .../iso/extent/DefaultTemporalExtentTest.java | 59 +++ .../apache/sis/xml/bind/gml/TimePeriodTest.java | 31 +- .../apache/sis/xml/bind/lan/LanguageCodeTest.java | 2 +- .../org/apache/sis/xml/privy/XmlUtilitiesTest.java | 14 +- .../referencing/gazetteer/AbstractLocation.java | 6 +- .../sis/referencing/gazetteer/LocationFormat.java | 17 +- .../gazetteer/MilitaryGridReferenceSystem.java | 2 +- .../sis/referencing/gazetteer/SimpleLocation.java | 13 +- .../gazetteer/GeohashReferenceSystemTest.java | 2 +- .../gazetteer/MilitaryGridReferenceSystemTest.java | 2 +- .../sis/geometry/AbstractDirectPosition.java | 10 - .../org/apache/sis/geometry/CoordinateFormat.java | 20 +- .../org/apache/sis/geometry/DirectPosition2D.java | 10 - .../main/org/apache/sis/io/wkt/Element.java | 5 +- .../main/org/apache/sis/io/wkt/Formatter.java | 53 ++- .../apache/sis/io/wkt/GeodeticObjectParser.java | 24 +- .../main/org/apache/sis/io/wkt/WKTFormat.java | 2 +- .../main/org/apache/sis/referencing/CommonCRS.java | 26 +- .../sis/referencing/GeodesicsOnEllipsoid.java | 4 +- .../apache/sis/referencing/GeodeticCalculator.java | 48 +-- .../sis/referencing/crs/DefaultTemporalCRS.java | 19 +- .../sis/referencing/datum/BursaWolfParameters.java | 16 +- .../referencing/datum/DefaultGeodeticDatum.java | 10 +- .../referencing/datum/DefaultTemporalDatum.java | 62 ++-- .../sis/referencing/datum/TimeDependentBWP.java | 42 ++- .../factory/ConcurrentAuthorityFactory.java | 6 +- .../referencing/factory/GeodeticObjectFactory.java | 94 +++-- .../factory/MultiAuthoritiesFactory.java | 4 +- .../sis/referencing/factory/ReferenceKeeper.java | 4 +- .../referencing/factory/sql/EPSGDataAccess.java | 28 +- .../sis/referencing/factory/sql/EPSGInstaller.java | 4 +- .../org/apache/sis/referencing/internal/Epoch.java | 4 +- .../operation/CoordinateOperationFinder.java | 39 +- .../operation/builder/LinearTransformBuilder.java | 24 +- .../sis/referencing/privy/ExtentSelector.java | 23 +- .../org/apache/sis/referencing/privy/Formulas.java | 9 - .../referencing/privy/GeodeticObjectBuilder.java | 6 +- .../sis/referencing/privy/TemporalAccessor.java | 4 +- .../test/org/apache/sis/io/wkt/ElementTest.java | 6 +- .../sis/io/wkt/GeodeticObjectParserTest.java | 9 +- .../org/apache/sis/referencing/CommonCRSTest.java | 30 +- .../referencing/crs/DefaultTemporalCRSTest.java | 10 +- .../referencing/datum/BursaWolfParametersTest.java | 5 +- .../datum/DefaultTemporalDatumTest.java | 25 +- .../sis/referencing/datum/HardCodedDatum.java | 8 +- .../referencing/datum/TimeDependentBWPTest.java | 21 +- .../factory/ConcurrentAuthorityFactoryTest.java | 2 +- .../internal/ServicesForMetadataTest.java | 41 +-- .../operation/CoordinateOperationFinderTest.java | 3 +- .../projection/MercatorMethodComparison.java | 2 +- .../operation/projection/ProjectionBenchmark.java | 5 +- .../sis/referencing/privy/ExtentSelectorTest.java | 10 +- .../apache/sis/referencing/privy/FormulasTest.java | 8 - .../apache/sis/test/integration/MetadataTest.java | 4 +- .../apache/sis/storage/landsat/MetadataReader.java | 10 +- .../sis/storage/geotiff/ImageFileDirectory.java | 2 +- .../sis/storage/geotiff/reader/CRSBuilder.java | 3 +- .../apache/sis/storage/netcdf/MetadataReader.java | 12 +- .../apache/sis/storage/netcdf/base/AxisType.java | 3 +- .../apache/sis/storage/netcdf/base/CRSBuilder.java | 12 +- .../apache/sis/storage/netcdf/base/Convention.java | 3 +- .../apache/sis/storage/netcdf/base/Decoder.java | 25 +- .../sis/storage/netcdf/base/GridMapping.java | 7 +- .../org/apache/sis/storage/netcdf/base/HYCOM.java | 8 +- .../apache/sis/storage/netcdf/base/Variable.java | 3 +- .../sis/storage/netcdf/classic/ChannelDecoder.java | 40 +- .../sis/storage/netcdf/ucar/DecoderWrapper.java | 13 +- .../sis/storage/netcdf/base/DecoderTest.java | 21 +- .../apache/sis/storage/netcdf/base/TestCase.java | 12 +- .../sis/storage/sql/feature/ValueGetter.java | 10 +- .../sis/storage/xml/stream/StaxStreamReader.java | 2 +- .../sis/storage/AbstractGridCoverageResource.java | 4 +- .../org/apache/sis/storage/base/LegalSymbols.java | 2 +- .../apache/sis/storage/base/MetadataBuilder.java | 39 +- .../main/org/apache/sis/storage/csv/Store.java | 7 +- .../org/apache/sis/storage/csv/TimeEncoding.java | 27 +- .../sis/storage/test/CoverageReadConsistency.java | 4 +- .../main/org/apache/sis/io/CompoundFormat.java | 2 +- .../main/org/apache/sis/measure/RangeFormat.java | 6 +- .../org/apache/sis/measure/UnitNames.properties | 1 + .../org/apache/sis/measure/UnitNames_fr.properties | 1 + .../main/org/apache/sis/measure/Units.java | 50 ++- .../main/org/apache/sis/pending/jdk/JDK23.java | 47 +++ .../main/org/apache/sis/setup/About.java | 2 +- .../apache/sis/util/logging/MonolineFormatter.java | 2 +- .../main/org/apache/sis/util/privy/Constants.java | 48 +++ .../org/apache/sis/util/privy/DoubleDouble.java | 11 + .../apache/sis/util/privy/StandardDateFormat.java | 120 +----- .../org/apache/sis/util/privy/TemporalDate.java | 236 ++++++++++++ .../main/org/apache/sis/util/resources/Errors.java | 408 ++++++++++----------- .../org/apache/sis/measure/RangeFormatTest.java | 2 +- .../org/apache/sis/measure/UnitFormatTest.java | 1 + .../test/org/apache/sis/test/TestUtilities.java | 15 +- .../org/apache/sis/util/collection/CacheTest.java | 4 +- .../apache/sis/util/collection/RangeSetTest.java | 4 +- .../org/apache/sis/util/privy/ConstantsTest.java | 51 +++ .../sis/util/privy/StandardDateFormatTest.java | 18 +- geoapi/snapshot | 2 +- .../main/org/apache/sis/gui/map/MapCanvas.java | 2 +- .../sis/gui/metadata/IdentificationInfo.java | 9 +- .../apache/sis/gui/referencing/AuthorityCodes.java | 6 +- 123 files changed, 1708 insertions(+), 1127 deletions(-) diff --cc endorsed/src/org.apache.sis.metadata/main/org/apache/sis/metadata/iso/lineage/DefaultProcessStep.java index c2cf029dfc,05df948518..a91ec949e4 --- 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 @@@ -34,14 -34,11 +34,14 @@@ import org.apache.sis.metadata.TitlePro import org.apache.sis.metadata.iso.ISOMetadata; import org.apache.sis.util.iso.Types; 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.xml.privy.LegacyNamespaces; import org.apache.sis.pending.temporal.TemporalUtilities; +// Specific to the main and geoapi-3.1 branches: +import org.opengis.metadata.citation.ResponsibleParty; + // Specific to the geoapi-3.1 and geoapi-4.0 branches: import org.opengis.metadata.maintenance.Scope; diff --cc endorsed/src/org.apache.sis.metadata/main/org/apache/sis/pending/temporal/TemporalUtilities.java index 9dbd8518ad,baedbaaaed..591aee1ba7 --- a/endorsed/src/org.apache.sis.metadata/main/org/apache/sis/pending/temporal/TemporalUtilities.java +++ b/endorsed/src/org.apache.sis.metadata/main/org/apache/sis/pending/temporal/TemporalUtilities.java @@@ -37,32 -40,39 +40,49 @@@ public final class TemporalUtilities private TemporalUtilities() { } + /** + * Creates an instant for the given date. + * + * @param time the date for which to create instant, or {@code null}. + * @return the instant, or {@code null} if the given time was null. - * @throws UnsupportedOperationException if the temporal factory is not available on the module path. + */ - public static TemporalPrimitive createInstant(final Date time) throws UnsupportedOperationException { - if (time == null) return null; - final Instant t = time.toInstant(); - return new DefaultPeriod(t, t); ++ public static TemporalPrimitive createInstant(final Date time) { ++ return (time == null) ? null : createInstant(time.toInstant()); + } + /** - * Creates a period for the given begin and end dates. + * Creates an instant for the given Java temporal instant. * - * @param begin the begin date (inclusive), or {@code null}. - * @param end the end date (inclusive), or {@code null}. + * @param time the date for which to create instant, or {@code null}. + * @return the instant, or {@code null} if the given time was null. + */ + public static TemporalPrimitive createInstant(final Instant time) { + return (time == null) ? null : new DefaultPeriod(time, time); + } + + /** + * Creates a period for the given begin and end instant. + * + * @param begin the begin instant (inclusive), or {@code null}. + * @param end the end instant (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 new DefaultPeriod( - (begin != null) ? begin.toInstant() : null, - (end != null) ? end.toInstant() : null); + public static TemporalPrimitive createPeriod(final Instant begin, final Instant end) { + return (begin == null && end == null) ? null : new DefaultPeriod(begin, end); + } + + /** + * Creates a period for the given begin and end instant. + * + * @param begin the begin instant (inclusive), or {@code null}. + * @param end the end instant (inclusive), or {@code null}. + * @return the period, or {@code null} if both arguments are null. + * + * @todo Needs to avoid assuming UTC timezone. + */ + public static TemporalPrimitive createPeriod(final Temporal begin, final Temporal end) { + return createPeriod(TemporalDate.toInstant(begin, ZoneOffset.UTC), + TemporalDate.toInstant(end, ZoneOffset.UTC)); } /** diff --cc endorsed/src/org.apache.sis.referencing/main/org/apache/sis/geometry/CoordinateFormat.java index 113ee12fe3,efc89b49e2..8b353f26fa --- a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/geometry/CoordinateFormat.java +++ b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/geometry/CoordinateFormat.java @@@ -575,8 -580,8 +580,8 @@@ public class CoordinateFormat extends C } types [i] = DATE; formats[i] = getFormat(Date.class); - epochs [i] = ((TemporalCRS) t).getDatum().getOrigin().getTime(); - setConverter(dimension, i, unit.asType(Time.class).getConverterTo(Units.MILLISECOND)); - epochs [i] = TemporalDate.toInstant(((TemporalCRS) t).getDatum().getOrigin(), null); ++ epochs [i] = TemporalDate.toInstant(((TemporalCRS) t).getDatum().getOrigin()); + setConverter(dimension, i, unit.asType(Time.class).getConverterTo(Units.SECOND)); if (direction == AxisDirection.PAST) { negate(i); } diff --cc endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/crs/DefaultTemporalCRS.java index 3644a65a34,0c3a5579d9..5381ff13e1 --- a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/crs/DefaultTemporalCRS.java +++ b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/crs/DefaultTemporalCRS.java @@@ -40,9 -42,9 +42,12 @@@ import org.apache.sis.metadata.privy.Im import org.apache.sis.io.wkt.Formatter; import org.apache.sis.measure.Units; import org.apache.sis.math.Fraction; - import static org.apache.sis.util.privy.StandardDateFormat.NANOS_PER_SECOND; - import static org.apache.sis.util.privy.StandardDateFormat.MILLIS_PER_SECOND; + import static org.apache.sis.util.privy.Constants.NANOS_PER_SECOND; + import static org.apache.sis.util.privy.Constants.MILLIS_PER_SECOND; + ++// Specific to the main and geoapi-3.1 branches: ++import org.apache.sis.util.privy.TemporalDate; + /** * A 1-dimensional coordinate reference system used for the recording of time. @@@ -223,10 -225,10 +228,10 @@@ public class DefaultTemporalCRS extend */ private void initializeConverter() { toSeconds = getUnit().getConverterTo(Units.SECOND); - long t = datum.getOrigin().getTime(); - origin = t / MILLIS_PER_SECOND; - t %= MILLIS_PER_SECOND; - if (t != 0) { - final Temporal t = datum.getOrigin(); ++ final Temporal t = TemporalDate.toTemporal(datum.getOrigin()); + origin = t.getLong(ChronoField.INSTANT_SECONDS); + int r = t.get(ChronoField.NANO_OF_SECOND); + if (r != 0) { /* * The origin is usually an integer number of days or hours. It rarely has a fractional number of seconds. * If it happens anyway, put the fractional number of seconds in the converter instead of adding another diff --cc endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/datum/DefaultTemporalDatum.java index cb7a8d5e53,51ebb99c78..cc44c7ebb9 --- a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/datum/DefaultTemporalDatum.java +++ b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/datum/DefaultTemporalDatum.java @@@ -34,6 -34,6 +34,9 @@@ import org.apache.sis.util.ComparisonMo import org.apache.sis.io.wkt.Formatter; import org.apache.sis.io.wkt.FormattableObject; ++// Specific to the main and geoapi-3.1 branches: ++import org.apache.sis.util.privy.TemporalDate; ++ // Specific to the geoapi-3.1 and geoapi-4.0 branches: import org.opengis.metadata.Identifier; @@@ -162,7 -166,7 +169,7 @@@ public class DefaultTemporalDatum exten */ protected DefaultTemporalDatum(final TemporalDatum datum) { super(datum); - origin = ImplementationHelper.toMilliseconds(datum.getOrigin()); - origin = datum.getOrigin(); ++ origin = TemporalDate.toTemporal(datum.getOrigin()); } /** @@@ -202,11 -206,8 +209,8 @@@ * @return the date and time origin of this temporal datum. */ @Override - @XmlSchemaType(name = "dateTime") - @XmlElement(name = "origin", required = true) - @XmlJavaTypeAdapter(UniversalTimeAdapter.class) - public Temporal getOrigin() { - return origin; + public Date getOrigin() { - return ImplementationHelper.toDate(origin); ++ return TemporalDate.toDate(origin); } /** @@@ -261,7 -262,7 +265,7 @@@ @Override protected String formatTo(final Formatter formatter) { super.formatTo(formatter); -- formatter.append(new Origin(getOrigin())); ++ formatter.append(new Origin(TemporalDate.toTemporal(getOrigin()))); if (formatter.getConvention().majorVersion() == 1) { formatter.setInvalidWKT(this, null); } diff --cc endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/CoordinateOperationFinder.java index 82eeff00dc,39a7d78e28..92beac6368 --- a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/CoordinateOperationFinder.java +++ b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/CoordinateOperationFinder.java @@@ -69,6 -70,6 +70,9 @@@ import org.apache.sis.util.privy.Double import org.apache.sis.util.resources.Vocabulary; import static org.apache.sis.util.Utilities.equalsIgnoreMetadata; ++// Specific to the main and geoapi-3.1 branches: ++import org.apache.sis.util.privy.TemporalDate; ++ /** * Finds a conversion or transformation path from a source CRS to a target CRS. @@@ -869,9 -866,8 +873,10 @@@ public class CoordinateOperationFinder * This "epoch shift" is in units of `targetCRS`. */ final Unit<Time> targetUnit = targetCS.getAxis(0).getUnit().asType(Time.class); - DoubleDouble epochShift = DoubleDouble.of(sourceDatum.getOrigin().getTime()); - epochShift = epochShift.subtract(targetDatum.getOrigin().getTime()); - epochShift = DoubleDouble.of(Units.MILLISECOND.getConverterTo(targetUnit).convert(epochShift), true); - DoubleDouble epochShift = DoubleDouble.of(Duration.between(targetDatum.getOrigin(), sourceDatum.getOrigin())); ++ DoubleDouble epochShift = DoubleDouble.of(Duration.between( ++ TemporalDate.toTemporal(targetDatum.getOrigin()), ++ TemporalDate.toTemporal(sourceDatum.getOrigin()))); + epochShift = DoubleDouble.of(Units.NANOSECOND.getConverterTo(targetUnit).convert(epochShift), true); /* * Check axis directions. The method `swapAndScaleAxes` should returns a matrix of size 2×2. * The element at index (0,0) may be +1 if source and target axes are in the same direction, diff --cc endorsed/src/org.apache.sis.referencing/test/org/apache/sis/io/wkt/GeodeticObjectParserTest.java index 3b3719cfcd,4610b54611..6356d054c5 --- a/endorsed/src/org.apache.sis.referencing/test/org/apache/sis/io/wkt/GeodeticObjectParserTest.java +++ b/endorsed/src/org.apache.sis.referencing/test/org/apache/sis/io/wkt/GeodeticObjectParserTest.java @@@ -43,8 -43,8 +43,11 @@@ import org.apache.sis.referencing.facto import org.apache.sis.referencing.operation.transform.MathTransforms; import org.apache.sis.referencing.operation.transform.LinearTransform; import org.apache.sis.measure.Units; - import static org.apache.sis.util.privy.StandardDateFormat.MILLISECONDS_PER_DAY; + import static org.apache.sis.util.privy.Constants.SECONDS_PER_DAY; + ++// Specific to the main and geoapi-3.1 branches: ++import org.apache.sis.util.privy.TemporalDate; + // Test dependencies import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.*; @@@ -1065,7 -1065,7 +1068,7 @@@ public final class GeodeticObjectParser final TemporalDatum timeDatum = timeCRS.getDatum(); assertNameAndIdentifierEqual("Time", 0, timeCRS); assertNameAndIdentifierEqual("Modified Julian", 0, timeDatum); - assertEquals(new Date(-40587L * MILLISECONDS_PER_DAY), timeDatum.getOrigin(), "epoch"); - assertEquals(Instant.ofEpochSecond(-40587L * SECONDS_PER_DAY), timeDatum.getOrigin(), "epoch"); ++ assertEquals(Instant.ofEpochSecond(-40587L * SECONDS_PER_DAY), TemporalDate.toTemporal(timeDatum.getOrigin()), "epoch"); // No more CRS. assertFalse(components.hasNext()); diff --cc endorsed/src/org.apache.sis.referencing/test/org/apache/sis/referencing/CommonCRSTest.java index 206e67dc7d,712918bd4a..d2a66ce416 --- a/endorsed/src/org.apache.sis.referencing/test/org/apache/sis/referencing/CommonCRSTest.java +++ b/endorsed/src/org.apache.sis.referencing/test/org/apache/sis/referencing/CommonCRSTest.java @@@ -50,6 -54,6 +54,7 @@@ import static org.apache.sis.util.privy // Specific to the geoapi-3.1 and geoapi-4.0 branches: import org.opengis.referencing.datum.RealizationMethod; import static org.opengis.test.Assertions.assertAxisDirectionsEqual; ++import org.apache.sis.util.privy.TemporalDate; /** @@@ -255,8 -254,20 +255,20 @@@ public final class CommonCRSTest extend */ @Test public void testTemporal() { - final double julianEpoch = CommonCRS.Temporal.JULIAN.datum().getOrigin().getTime() / DAY_LENGTH; - assertTrue(julianEpoch < 0); - final var julianEpoch = (Instant) CommonCRS.Temporal.JULIAN.datum().getOrigin(); ++ final var julianEpoch = TemporalDate.toInstant(CommonCRS.Temporal.JULIAN.datum().getOrigin()); + final double SECONDS_PER_DAY = Constants.SECONDS_PER_DAY; + final double julianEpochSecond = julianEpoch.getEpochSecond() / SECONDS_PER_DAY; + assertTrue(julianEpochSecond < 0); + /* + * We need to use `java.text.DateFormat` rather than `Instant.parse(String)` because + * they have different policy regarding the calendar for dates before October 15, 1582. + * The `java.time` classes use the proleptic Gregorian calendar while `java.text` uses + * the prolectic Julian calendar. The latter is what we need for this test. + */ + final var dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CANADA); + dateFormat.setTimeZone(TimeZone.getTimeZone(UTC)); + dateFormat.setLenient(false); + for (final CommonCRS.Temporal e : CommonCRS.Temporal.values()) { final String epoch; final double days; @@@ -277,8 -288,8 +289,8 @@@ Validators.validate(crs); assertSame(datum, e.datum(), name); // Datum before CRS creation. assertSame(crs.getDatum(), e.datum(), name); // Datum after CRS creation. - assertEquals(epoch, format(origin), name); - assertEquals(days, origin.getTime() / DAY_LENGTH - julianEpoch, name); - assertEquals(epoch, dateFormat.format(Date.from(origin)), name); - assertEquals(days, origin.getEpochSecond() / SECONDS_PER_DAY - julianEpochSecond, name); ++ assertEquals(epoch, dateFormat.format(origin), name); ++ assertEquals(days, origin.getTime() / (1000*SECONDS_PER_DAY) - julianEpochSecond, name); switch (e) { case JAVA: { assertNameContains(datum, "Unix/POSIX"); diff --cc endorsed/src/org.apache.sis.referencing/test/org/apache/sis/referencing/datum/DefaultTemporalDatumTest.java index 80821b864b,443246a803..58b4981490 --- a/endorsed/src/org.apache.sis.referencing/test/org/apache/sis/referencing/datum/DefaultTemporalDatumTest.java +++ b/endorsed/src/org.apache.sis.referencing/test/org/apache/sis/referencing/datum/DefaultTemporalDatumTest.java @@@ -34,6 -34,6 +34,9 @@@ import static org.apache.sis.referencin import static org.apache.sis.test.TestUtilities.getSingleton; import static org.apache.sis.test.TestUtilities.getScope; ++// Specific to the main and geoapi-3.1 branches: ++import org.apache.sis.util.privy.TemporalDate; ++ // Specific to the geoapi-3.1 and geoapi-4.0 branches: import static org.opengis.referencing.ObjectDomain.*; import static org.opengis.referencing.IdentifiedObject.*; @@@ -86,7 -88,7 +91,7 @@@ public final class DefaultTemporalDatum */ @Test public void testConsistency() { - assertEquals(HardCodedDatum.MODIFIED_JULIAN.getOrigin(), new Date(ORIGIN)); - assertEquals(HardCodedDatum.MODIFIED_JULIAN.getOrigin(), ORIGIN.toInstant()); ++ assertEquals(TemporalDate.toTemporal(HardCodedDatum.MODIFIED_JULIAN.getOrigin()), ORIGIN.toInstant()); } /** @@@ -129,6 -131,6 +134,6 @@@ assertEquals("Modified Julian", datum.getName().getCode()); assertRemarksEquals("Time measured as days since November 17, 1858 at 00:00 UTC.", datum, null); assertEquals("History.", getScope(datum)); - assertEquals(new Date(ORIGIN), datum.getOrigin()); - assertEquals(ORIGIN, datum.getOrigin()); ++ assertEquals(ORIGIN, TemporalDate.toTemporal(datum.getOrigin())); } } diff --cc endorsed/src/org.apache.sis.referencing/test/org/apache/sis/referencing/datum/HardCodedDatum.java index cfb5e1e085,3edb04e959..dedd0764fd --- a/endorsed/src/org.apache.sis.referencing/test/org/apache/sis/referencing/datum/HardCodedDatum.java +++ b/endorsed/src/org.apache.sis.referencing/test/org/apache/sis/referencing/datum/HardCodedDatum.java @@@ -16,10 -16,9 +16,10 @@@ */ package org.apache.sis.referencing.datum; - import java.util.Date; import java.util.Map; import java.util.HashMap; + import java.time.Instant; +import org.opengis.referencing.datum.PixelInCell; import org.apache.sis.referencing.NamedIdentifier; import org.apache.sis.referencing.internal.VerticalDatumTypes; import org.apache.sis.measure.Units; diff --cc endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/base/LegalSymbols.java index 3ea5a57b36,570b35d2e2..b71b7cc956 --- a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/base/LegalSymbols.java +++ b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/base/LegalSymbols.java @@@ -27,10 -27,10 +27,10 @@@ import org.apache.sis.metadata.iso.cita import org.apache.sis.metadata.iso.citation.DefaultCitation; import org.apache.sis.metadata.iso.citation.DefaultCitationDate; import org.apache.sis.metadata.iso.constraint.DefaultLegalConstraints; - import static org.apache.sis.util.privy.StandardDateFormat.MILLISECONDS_PER_DAY; + import static org.apache.sis.util.privy.Constants.MILLISECONDS_PER_DAY; -// Specific to the geoapi-4.0 branch: -import org.apache.sis.metadata.iso.citation.DefaultResponsibility; +// Specific to the main and geoapi-3.1 branches: +import org.apache.sis.metadata.iso.citation.DefaultResponsibleParty; /** diff --cc endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/csv/TimeEncoding.java index 34580953fb,1571c6b88b..8fe13bc062 --- a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/csv/TimeEncoding.java +++ b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/csv/TimeEncoding.java @@@ -62,8 -64,8 +64,8 @@@ class TimeEncoding extends SurjectiveCo * Creates a new time encoding. */ TimeEncoding(final TemporalDatum datum, final Unit<Time> unit) { - this.origin = datum.getOrigin().getTime(); - this.interval = unit.getConverterTo(Units.MILLISECOND).convert(1); - this.origin = TemporalDate.toInstant(datum.getOrigin(), null); ++ this.origin = TemporalDate.toInstant(datum.getOrigin()); + this.interval = unit.getConverterTo(Units.SECOND).convert(1); } /** diff --cc geoapi/snapshot index 80d7264486,ccc41ee613..ed7e9f0463 --- a/geoapi/snapshot +++ b/geoapi/snapshot @@@ -1,1 -1,1 +1,1 @@@ - Subproject commit 80d72644860facda496cef21b132d13fec65c029 -Subproject commit ccc41ee613b7451366a796fada91c1f74f8f7168 ++Subproject commit ed7e9f0463a9b5eb0f9181da5ca070d0b79375ac
