mirror of
https://github.com/google/nomulus
synced 2026-05-22 07:41:50 +00:00
This comprehensive refactor continues the migration from Joda-Time to java.time (Instant), focusing on core timestamp models, transition properties, and their integration across the codebase. Key changes: - Migrated CreateAutoTimestamp and UpdateAutoTimestamp to use Instant internally, providing Joda-Time bridge methods for backward compatibility. - Updated TimedTransitionProperty to handle Instant-based transition maps and updated corresponding Hibernate UserTypes (TimedTransitionBaseUserType). - Migrated GracePeriod, BillingBase, BillingEvent, PollMessage, and PendingActionNotificationResponse fields (e.g., expirationTime, eventTime) to Instant. - Migrated additional core entities (DomainBase, Registrar, HostBase, LaunchNotice, BsaLabel, DomainTransactionRecord) to use Instant for registrationExpirationTime, lastTransferTime, creationTime, etc. - Updated Tld and FeatureFlag models to use Instant for claimsPeriodEnd, bsaEnrollStartTime, and status transitions. - Enhanced CLI tools and parameters (TransitionListParameter, InstantParameter, RequestParameters) to support Instant-based input and output. - Updated EntityYamlUtils with custom Instant serializers/deserializers to maintain format consistency (e.g., .SSSZ precision) required for YAML-based tests. - Implemented UtcInstantAdapter to ensure JAXB XML serialization maintains millisecond accuracy, matching legacy Joda-Time behavior. - Resolved Hibernate 6 type mismatches in JPQL and Native queries by ensuring consistent use of Instant for comparisons. - Updated GEMINI.md with project-specific engineering standards, including the 'one commit per PR' mandate, full-build validation requirement, and commit message style rules. - Cleaned up unnecessary @JsonIgnore and @JsonProperty annotations that were previously added to methods with parameters or redundant fields. - Refactored DateTimeUtils to use strongly-typed overloads and standardized naming (earliestOf, latestOf) while avoiding type erasure clashes. - Cleaned up fully qualified calls to toDateTime and toInstant by adding static imports across core model and flow files. - Refactored test suites to use clock.now() (Instant) instead of nowUtc() (DateTime) and removed custom Truth subjects in favor of standard assertions.
49 lines
1.6 KiB
Java
49 lines
1.6 KiB
Java
// Copyright 2017 The Nomulus Authors. All Rights Reserved.
|
|
//
|
|
// Licensed 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 google.registry.util;
|
|
|
|
import static org.joda.time.DateTimeZone.UTC;
|
|
|
|
import jakarta.inject.Inject;
|
|
import java.time.Instant;
|
|
import java.time.temporal.ChronoUnit;
|
|
import javax.annotation.concurrent.ThreadSafe;
|
|
import org.joda.time.DateTime;
|
|
|
|
/** Clock implementation that proxies to the real system clock. */
|
|
@ThreadSafe
|
|
public class SystemClock implements Clock {
|
|
|
|
private static final long serialVersionUID = 5165372013848947515L;
|
|
|
|
@Inject
|
|
public SystemClock() {}
|
|
|
|
/** Returns the current time. */
|
|
@Override
|
|
public DateTime nowUtc() {
|
|
return DateTime.now(UTC);
|
|
}
|
|
|
|
@Override
|
|
public Instant now() {
|
|
// Truncate to milliseconds to match the precision of Joda DateTime and our database schema
|
|
// (which uses millisecond precision via DateTimeConverter). This prevents subtle comparison
|
|
// bugs where a high-precision Instant would be considered "after" a truncated database
|
|
// timestamp.
|
|
return Instant.now().truncatedTo(ChronoUnit.MILLIS);
|
|
}
|
|
}
|