From aea98eb80f29f33b203f6798957afb06ffb7feb3 Mon Sep 17 00:00:00 2001 From: Gavin King Date: Tue, 15 Apr 2025 11:42:25 +0200 Subject: [PATCH 1/2] move incubating enum TimeZoneStorageStrategy to org.hibernate.type This enum is not really an API-API, and has no usages in org.hibernate. Application programs are expected to use o.h.annotations.TimeZoneStorageType, and so putting this enum in o.h is pretty confusing to users. --- .../hibernate/annotations/TimeZoneStorageType.java | 3 ++- .../hibernate/boot/internal/MetadataBuilderImpl.java | 2 +- .../boot/internal/SessionFactoryOptionsBuilder.java | 2 +- .../boot/model/internal/BasicValueBinder.java | 2 +- .../boot/model/internal/TimeZoneStorageHelper.java | 2 +- .../model/process/internal/VersionResolution.java | 2 +- .../AbstractDelegatingMetadataBuildingOptions.java | 2 +- .../spi/AbstractDelegatingSessionFactoryOptions.java | 2 +- .../hibernate/boot/spi/MetadataBuildingOptions.java | 2 +- .../hibernate/boot/spi/SessionFactoryOptions.java | 2 +- .../main/java/org/hibernate/mapping/BasicValue.java | 2 +- .../main/java/org/hibernate/mapping/SimpleValue.java | 2 +- .../java/org/hibernate/type/StandardBasicTypes.java | 12 ++++++------ .../{ => type}/TimeZoneStorageStrategy.java | 4 +++- .../jdbc/DelegatingJdbcTypeIndicators.java | 2 +- .../type/descriptor/jdbc/JdbcTypeIndicators.java | 2 +- .../org/hibernate/type/spi/TypeConfiguration.java | 2 +- .../processor/validation/MockSessionFactory.java | 2 +- 18 files changed, 26 insertions(+), 23 deletions(-) rename hibernate-core/src/main/java/org/hibernate/{ => type}/TimeZoneStorageStrategy.java (95%) diff --git a/hibernate-core/src/main/java/org/hibernate/annotations/TimeZoneStorageType.java b/hibernate-core/src/main/java/org/hibernate/annotations/TimeZoneStorageType.java index 1b8762a93b21..200113cb7c53 100644 --- a/hibernate-core/src/main/java/org/hibernate/annotations/TimeZoneStorageType.java +++ b/hibernate-core/src/main/java/org/hibernate/annotations/TimeZoneStorageType.java @@ -6,6 +6,7 @@ import org.hibernate.Incubating; import org.hibernate.dialect.Dialect; +import org.hibernate.type.TimeZoneStorageStrategy; /** * Describes the storage of timezone information for zoned datetime types, @@ -61,7 +62,7 @@ * @since 6.0 * * @see TimeZoneStorage - * @see org.hibernate.TimeZoneStorageStrategy + * @see TimeZoneStorageStrategy */ @Incubating public enum TimeZoneStorageType { diff --git a/hibernate-core/src/main/java/org/hibernate/boot/internal/MetadataBuilderImpl.java b/hibernate-core/src/main/java/org/hibernate/boot/internal/MetadataBuilderImpl.java index 2dbb479339d2..37df701b6c1f 100644 --- a/hibernate-core/src/main/java/org/hibernate/boot/internal/MetadataBuilderImpl.java +++ b/hibernate-core/src/main/java/org/hibernate/boot/internal/MetadataBuilderImpl.java @@ -10,7 +10,7 @@ import org.hibernate.AnnotationException; import org.hibernate.HibernateException; -import org.hibernate.TimeZoneStorageStrategy; +import org.hibernate.type.TimeZoneStorageStrategy; import org.hibernate.annotations.CacheConcurrencyStrategy; import org.hibernate.annotations.TimeZoneStorageType; import org.hibernate.boot.CacheRegionDefinition; diff --git a/hibernate-core/src/main/java/org/hibernate/boot/internal/SessionFactoryOptionsBuilder.java b/hibernate-core/src/main/java/org/hibernate/boot/internal/SessionFactoryOptionsBuilder.java index 823741a44426..77f4da8da3bd 100644 --- a/hibernate-core/src/main/java/org/hibernate/boot/internal/SessionFactoryOptionsBuilder.java +++ b/hibernate-core/src/main/java/org/hibernate/boot/internal/SessionFactoryOptionsBuilder.java @@ -28,7 +28,7 @@ import org.hibernate.LockOptions; import org.hibernate.SessionEventListener; import org.hibernate.SessionFactoryObserver; -import org.hibernate.TimeZoneStorageStrategy; +import org.hibernate.type.TimeZoneStorageStrategy; import org.hibernate.annotations.CacheLayout; import org.hibernate.boot.SchemaAutoTooling; import org.hibernate.boot.TempTableDdlTransactionHandling; diff --git a/hibernate-core/src/main/java/org/hibernate/boot/model/internal/BasicValueBinder.java b/hibernate-core/src/main/java/org/hibernate/boot/model/internal/BasicValueBinder.java index f335773ca36c..a807f3928a4b 100644 --- a/hibernate-core/src/main/java/org/hibernate/boot/model/internal/BasicValueBinder.java +++ b/hibernate-core/src/main/java/org/hibernate/boot/model/internal/BasicValueBinder.java @@ -25,7 +25,7 @@ import org.hibernate.AnnotationException; import org.hibernate.AssertionFailure; import org.hibernate.MappingException; -import org.hibernate.TimeZoneStorageStrategy; +import org.hibernate.type.TimeZoneStorageStrategy; import org.hibernate.annotations.*; import org.hibernate.boot.internal.AnyKeyType; import org.hibernate.boot.model.convert.spi.ConverterDescriptor; diff --git a/hibernate-core/src/main/java/org/hibernate/boot/model/internal/TimeZoneStorageHelper.java b/hibernate-core/src/main/java/org/hibernate/boot/model/internal/TimeZoneStorageHelper.java index 6bcb99ceaaa8..24720bf1d749 100644 --- a/hibernate-core/src/main/java/org/hibernate/boot/model/internal/TimeZoneStorageHelper.java +++ b/hibernate-core/src/main/java/org/hibernate/boot/model/internal/TimeZoneStorageHelper.java @@ -19,7 +19,7 @@ import org.hibernate.usertype.internal.OffsetTimeCompositeUserType; import org.hibernate.usertype.internal.ZonedDateTimeCompositeUserType; -import static org.hibernate.TimeZoneStorageStrategy.COLUMN; +import static org.hibernate.type.TimeZoneStorageStrategy.COLUMN; import static org.hibernate.dialect.TimeZoneSupport.NATIVE; public class TimeZoneStorageHelper { diff --git a/hibernate-core/src/main/java/org/hibernate/boot/model/process/internal/VersionResolution.java b/hibernate-core/src/main/java/org/hibernate/boot/model/process/internal/VersionResolution.java index 26d9d4330be5..1a057f02a677 100644 --- a/hibernate-core/src/main/java/org/hibernate/boot/model/process/internal/VersionResolution.java +++ b/hibernate-core/src/main/java/org/hibernate/boot/model/process/internal/VersionResolution.java @@ -7,7 +7,7 @@ import java.util.function.Function; import jakarta.persistence.TemporalType; -import org.hibernate.TimeZoneStorageStrategy; +import org.hibernate.type.TimeZoneStorageStrategy; import org.hibernate.annotations.TimeZoneStorageType; import org.hibernate.boot.spi.MetadataBuildingContext; import org.hibernate.dialect.Dialect; diff --git a/hibernate-core/src/main/java/org/hibernate/boot/spi/AbstractDelegatingMetadataBuildingOptions.java b/hibernate-core/src/main/java/org/hibernate/boot/spi/AbstractDelegatingMetadataBuildingOptions.java index 72c42a5bad7e..1da649a3c139 100644 --- a/hibernate-core/src/main/java/org/hibernate/boot/spi/AbstractDelegatingMetadataBuildingOptions.java +++ b/hibernate-core/src/main/java/org/hibernate/boot/spi/AbstractDelegatingMetadataBuildingOptions.java @@ -7,7 +7,7 @@ import java.util.List; import org.hibernate.HibernateException; -import org.hibernate.TimeZoneStorageStrategy; +import org.hibernate.type.TimeZoneStorageStrategy; import org.hibernate.boot.model.naming.ImplicitNamingStrategy; import org.hibernate.boot.model.naming.PhysicalNamingStrategy; import org.hibernate.boot.model.relational.ColumnOrderingStrategy; diff --git a/hibernate-core/src/main/java/org/hibernate/boot/spi/AbstractDelegatingSessionFactoryOptions.java b/hibernate-core/src/main/java/org/hibernate/boot/spi/AbstractDelegatingSessionFactoryOptions.java index 5447e3b73eed..6b86f67d8387 100644 --- a/hibernate-core/src/main/java/org/hibernate/boot/spi/AbstractDelegatingSessionFactoryOptions.java +++ b/hibernate-core/src/main/java/org/hibernate/boot/spi/AbstractDelegatingSessionFactoryOptions.java @@ -17,7 +17,7 @@ import org.hibernate.Interceptor; import org.hibernate.LockOptions; import org.hibernate.SessionFactoryObserver; -import org.hibernate.TimeZoneStorageStrategy; +import org.hibernate.type.TimeZoneStorageStrategy; import org.hibernate.annotations.CacheLayout; import org.hibernate.boot.SchemaAutoTooling; import org.hibernate.boot.TempTableDdlTransactionHandling; diff --git a/hibernate-core/src/main/java/org/hibernate/boot/spi/MetadataBuildingOptions.java b/hibernate-core/src/main/java/org/hibernate/boot/spi/MetadataBuildingOptions.java index bc6f0e17fa63..2af643783127 100644 --- a/hibernate-core/src/main/java/org/hibernate/boot/spi/MetadataBuildingOptions.java +++ b/hibernate-core/src/main/java/org/hibernate/boot/spi/MetadataBuildingOptions.java @@ -7,7 +7,7 @@ import java.util.List; import org.hibernate.Incubating; -import org.hibernate.TimeZoneStorageStrategy; +import org.hibernate.type.TimeZoneStorageStrategy; import org.hibernate.boot.model.naming.ImplicitNamingStrategy; import org.hibernate.boot.model.naming.PhysicalNamingStrategy; import org.hibernate.boot.model.relational.ColumnOrderingStrategy; diff --git a/hibernate-core/src/main/java/org/hibernate/boot/spi/SessionFactoryOptions.java b/hibernate-core/src/main/java/org/hibernate/boot/spi/SessionFactoryOptions.java index 8023bbe179d1..0ae58214f235 100644 --- a/hibernate-core/src/main/java/org/hibernate/boot/spi/SessionFactoryOptions.java +++ b/hibernate-core/src/main/java/org/hibernate/boot/spi/SessionFactoryOptions.java @@ -20,7 +20,7 @@ import org.hibernate.LockOptions; import org.hibernate.SessionEventListener; import org.hibernate.SessionFactoryObserver; -import org.hibernate.TimeZoneStorageStrategy; +import org.hibernate.type.TimeZoneStorageStrategy; import org.hibernate.annotations.CacheLayout; import org.hibernate.boot.SchemaAutoTooling; import org.hibernate.boot.TempTableDdlTransactionHandling; diff --git a/hibernate-core/src/main/java/org/hibernate/mapping/BasicValue.java b/hibernate-core/src/main/java/org/hibernate/mapping/BasicValue.java index a57874e40da0..2c9c2012bb9a 100644 --- a/hibernate-core/src/main/java/org/hibernate/mapping/BasicValue.java +++ b/hibernate-core/src/main/java/org/hibernate/mapping/BasicValue.java @@ -13,7 +13,7 @@ import org.hibernate.Incubating; import org.hibernate.Internal; import org.hibernate.MappingException; -import org.hibernate.TimeZoneStorageStrategy; +import org.hibernate.type.TimeZoneStorageStrategy; import org.hibernate.annotations.SoftDelete; import org.hibernate.annotations.SoftDeleteType; import org.hibernate.annotations.TimeZoneStorageType; diff --git a/hibernate-core/src/main/java/org/hibernate/mapping/SimpleValue.java b/hibernate-core/src/main/java/org/hibernate/mapping/SimpleValue.java index 3fe5eee0b527..2eeae2602a7c 100644 --- a/hibernate-core/src/main/java/org/hibernate/mapping/SimpleValue.java +++ b/hibernate-core/src/main/java/org/hibernate/mapping/SimpleValue.java @@ -19,7 +19,7 @@ import org.hibernate.FetchMode; import org.hibernate.Internal; import org.hibernate.MappingException; -import org.hibernate.TimeZoneStorageStrategy; +import org.hibernate.type.TimeZoneStorageStrategy; import org.hibernate.annotations.OnDeleteAction; import org.hibernate.boot.model.convert.internal.ConverterDescriptors; import org.hibernate.boot.model.convert.spi.ConverterDescriptor; diff --git a/hibernate-core/src/main/java/org/hibernate/type/StandardBasicTypes.java b/hibernate-core/src/main/java/org/hibernate/type/StandardBasicTypes.java index e0d018c00b17..2d52d48abe94 100644 --- a/hibernate-core/src/main/java/org/hibernate/type/StandardBasicTypes.java +++ b/hibernate-core/src/main/java/org/hibernate/type/StandardBasicTypes.java @@ -393,7 +393,7 @@ private StandardBasicTypes() { /** * The standard Hibernate type for mapping {@link OffsetDateTime} to JDBC {@link org.hibernate.type.SqlTypes#TIMESTAMP_WITH_TIMEZONE TIMESTAMP_WITH_TIMEZONE}. - * This maps to {@link org.hibernate.TimeZoneStorageStrategy#NATIVE}. + * This maps to {@link TimeZoneStorageStrategy#NATIVE}. */ public static final BasicTypeReference OFFSET_DATE_TIME_WITH_TIMEZONE = new BasicTypeReference<>( "OffsetDateTimeWithTimezone", @@ -402,7 +402,7 @@ private StandardBasicTypes() { ); /** * The standard Hibernate type for mapping {@link OffsetDateTime} to JDBC {@link org.hibernate.type.SqlTypes#TIMESTAMP TIMESTAMP}. - * This maps to {@link org.hibernate.TimeZoneStorageStrategy#NORMALIZE}. + * This maps to {@link TimeZoneStorageStrategy#NORMALIZE}. */ public static final BasicTypeReference OFFSET_DATE_TIME_WITHOUT_TIMEZONE = new BasicTypeReference<>( "OffsetDateTimeWithoutTimezone", @@ -421,7 +421,7 @@ private StandardBasicTypes() { /** * The standard Hibernate type for mapping {@link OffsetTime} to JDBC {@link org.hibernate.type.SqlTypes#TIME_UTC TIME_UTC}. - * This maps to {@link org.hibernate.TimeZoneStorageStrategy#NORMALIZE_UTC}. + * This maps to {@link TimeZoneStorageStrategy#NORMALIZE_UTC}. */ public static final BasicTypeReference OFFSET_TIME_UTC = new BasicTypeReference<>( "OffsetTimeUtc", @@ -431,7 +431,7 @@ private StandardBasicTypes() { /** * The standard Hibernate type for mapping {@link OffsetTime} to JDBC {@link org.hibernate.type.SqlTypes#TIME_WITH_TIMEZONE TIME_WITH_TIMEZONE}. - * This maps to {@link org.hibernate.TimeZoneStorageStrategy#NATIVE}. + * This maps to {@link TimeZoneStorageStrategy#NATIVE}. */ public static final BasicTypeReference OFFSET_TIME_WITH_TIMEZONE = new BasicTypeReference<>( "OffsetTimeWithTimezone", @@ -460,7 +460,7 @@ private StandardBasicTypes() { /** * The standard Hibernate type for mapping {@link ZonedDateTime} to JDBC {@link org.hibernate.type.SqlTypes#TIMESTAMP_WITH_TIMEZONE TIMESTAMP_WITH_TIMEZONE}. - * This maps to {@link org.hibernate.TimeZoneStorageStrategy#NATIVE}. + * This maps to {@link TimeZoneStorageStrategy#NATIVE}. */ public static final BasicTypeReference ZONED_DATE_TIME_WITH_TIMEZONE = new BasicTypeReference<>( "ZonedDateTimeWithTimezone", @@ -470,7 +470,7 @@ private StandardBasicTypes() { /** * The standard Hibernate type for mapping {@link ZonedDateTime} to JDBC {@link org.hibernate.type.SqlTypes#TIMESTAMP TIMESTAMP}. - * This maps to {@link org.hibernate.TimeZoneStorageStrategy#NORMALIZE}. + * This maps to {@link TimeZoneStorageStrategy#NORMALIZE}. */ public static final BasicTypeReference ZONED_DATE_TIME_WITHOUT_TIMEZONE = new BasicTypeReference<>( "ZonedDateTimeWithoutTimezone", diff --git a/hibernate-core/src/main/java/org/hibernate/TimeZoneStorageStrategy.java b/hibernate-core/src/main/java/org/hibernate/type/TimeZoneStorageStrategy.java similarity index 95% rename from hibernate-core/src/main/java/org/hibernate/TimeZoneStorageStrategy.java rename to hibernate-core/src/main/java/org/hibernate/type/TimeZoneStorageStrategy.java index 34b4a16de9e7..836a5c76e1f6 100644 --- a/hibernate-core/src/main/java/org/hibernate/TimeZoneStorageStrategy.java +++ b/hibernate-core/src/main/java/org/hibernate/type/TimeZoneStorageStrategy.java @@ -2,7 +2,9 @@ * SPDX-License-Identifier: Apache-2.0 * Copyright Red Hat Inc. and Hibernate Authors */ -package org.hibernate; +package org.hibernate.type; + +import org.hibernate.Incubating; /** * Enumerates the possible storage strategies for offset or zoned datetimes. diff --git a/hibernate-core/src/main/java/org/hibernate/type/descriptor/jdbc/DelegatingJdbcTypeIndicators.java b/hibernate-core/src/main/java/org/hibernate/type/descriptor/jdbc/DelegatingJdbcTypeIndicators.java index 1b87ea53e8f3..001dbbc39e57 100644 --- a/hibernate-core/src/main/java/org/hibernate/type/descriptor/jdbc/DelegatingJdbcTypeIndicators.java +++ b/hibernate-core/src/main/java/org/hibernate/type/descriptor/jdbc/DelegatingJdbcTypeIndicators.java @@ -5,7 +5,7 @@ package org.hibernate.type.descriptor.jdbc; import org.hibernate.Incubating; -import org.hibernate.TimeZoneStorageStrategy; +import org.hibernate.type.TimeZoneStorageStrategy; import org.hibernate.dialect.Dialect; import org.hibernate.type.spi.TypeConfiguration; diff --git a/hibernate-core/src/main/java/org/hibernate/type/descriptor/jdbc/JdbcTypeIndicators.java b/hibernate-core/src/main/java/org/hibernate/type/descriptor/jdbc/JdbcTypeIndicators.java index ba779d62a991..d40bd1822e2a 100644 --- a/hibernate-core/src/main/java/org/hibernate/type/descriptor/jdbc/JdbcTypeIndicators.java +++ b/hibernate-core/src/main/java/org/hibernate/type/descriptor/jdbc/JdbcTypeIndicators.java @@ -8,7 +8,7 @@ import jakarta.persistence.TemporalType; import org.hibernate.Incubating; -import org.hibernate.TimeZoneStorageStrategy; +import org.hibernate.type.TimeZoneStorageStrategy; import org.hibernate.dialect.Dialect; import org.hibernate.type.SqlTypes; import org.hibernate.type.descriptor.java.BasicJavaType; diff --git a/hibernate-core/src/main/java/org/hibernate/type/spi/TypeConfiguration.java b/hibernate-core/src/main/java/org/hibernate/type/spi/TypeConfiguration.java index ed2f3c48a294..6ab9fffb9311 100644 --- a/hibernate-core/src/main/java/org/hibernate/type/spi/TypeConfiguration.java +++ b/hibernate-core/src/main/java/org/hibernate/type/spi/TypeConfiguration.java @@ -37,7 +37,7 @@ import org.hibernate.Internal; import org.hibernate.SessionFactory; import org.hibernate.SessionFactoryObserver; -import org.hibernate.TimeZoneStorageStrategy; +import org.hibernate.type.TimeZoneStorageStrategy; import org.hibernate.boot.cfgxml.spi.CfgXmlAccessService; import org.hibernate.boot.registry.classloading.spi.ClassLoaderService; import org.hibernate.boot.spi.BasicTypeRegistration; diff --git a/tooling/metamodel-generator/src/main/java/org/hibernate/processor/validation/MockSessionFactory.java b/tooling/metamodel-generator/src/main/java/org/hibernate/processor/validation/MockSessionFactory.java index e8e11f04c7f4..7a6529ddba13 100644 --- a/tooling/metamodel-generator/src/main/java/org/hibernate/processor/validation/MockSessionFactory.java +++ b/tooling/metamodel-generator/src/main/java/org/hibernate/processor/validation/MockSessionFactory.java @@ -10,7 +10,7 @@ import org.hibernate.EntityNameResolver; import org.hibernate.MappingException; import org.hibernate.SessionFactoryObserver; -import org.hibernate.TimeZoneStorageStrategy; +import org.hibernate.type.TimeZoneStorageStrategy; import org.hibernate.boot.internal.DefaultCustomEntityDirtinessStrategy; import org.hibernate.boot.internal.MetadataImpl; import org.hibernate.boot.internal.StandardEntityNotFoundDelegate; From c065b016beb0815058f0c38abc1e3a028b65e876 Mon Sep 17 00:00:00 2001 From: Gavin King Date: Tue, 15 Apr 2025 11:49:51 +0200 Subject: [PATCH 2/2] use && in TimeZoneStorageHelper for readability --- .../model/internal/TimeZoneStorageHelper.java | 30 +++++++------------ 1 file changed, 11 insertions(+), 19 deletions(-) diff --git a/hibernate-core/src/main/java/org/hibernate/boot/model/internal/TimeZoneStorageHelper.java b/hibernate-core/src/main/java/org/hibernate/boot/model/internal/TimeZoneStorageHelper.java index 24720bf1d749..f747e3b4594f 100644 --- a/hibernate-core/src/main/java/org/hibernate/boot/model/internal/TimeZoneStorageHelper.java +++ b/hibernate-core/src/main/java/org/hibernate/boot/model/internal/TimeZoneStorageHelper.java @@ -33,7 +33,7 @@ static Class> resolveTimeZoneStorageCompositeUser ClassDetails returnedClass, MetadataBuildingContext context) { if ( useColumnForTimeZoneStorage( attributeMember, context ) ) { - String returnedClassName = returnedClass.getName(); + final String returnedClassName = returnedClass.getName(); if ( OFFSET_DATETIME_CLASS.equals( returnedClassName ) ) { return OffsetDateTimeCompositeUserType.class; } @@ -49,24 +49,20 @@ else if ( OFFSET_TIME_CLASS.equals( returnedClassName ) ) { private static boolean isTemporalWithTimeZoneClass(String returnedClassName) { return OFFSET_DATETIME_CLASS.equals( returnedClassName ) - || ZONED_DATETIME_CLASS.equals( returnedClassName ) - || isOffsetTimeClass( returnedClassName ); + || ZONED_DATETIME_CLASS.equals( returnedClassName ) + || isOffsetTimeClass( returnedClassName ); } public static boolean isOffsetTimeClass(AnnotationTarget element) { - if ( element instanceof MemberDetails memberDetails ) { - return isOffsetTimeClass( memberDetails ); - } - return false; + return element instanceof MemberDetails memberDetails + && isOffsetTimeClass( memberDetails ); } public static boolean isOffsetTimeClass(MemberDetails element) { final TypeDetails type = element.getType(); - if ( type == null ) { - return false; - } + return type != null + && isOffsetTimeClass( type.determineRawClass().getClassName() ); - return isOffsetTimeClass( type.determineRawClass().getClassName() ); } private static boolean isOffsetTimeClass(String returnedClassName) { @@ -76,14 +72,10 @@ private static boolean isOffsetTimeClass(String returnedClassName) { static boolean useColumnForTimeZoneStorage(AnnotationTarget element, MetadataBuildingContext context) { final TimeZoneStorage timeZoneStorage = element.getDirectAnnotationUsage( TimeZoneStorage.class ); if ( timeZoneStorage == null ) { - if ( element instanceof MemberDetails attributeMember ) { - return isTemporalWithTimeZoneClass( attributeMember.getType().getName() ) - //no @TimeZoneStorage annotation, so we need to use the default storage strategy - && context.getBuildingOptions().getDefaultTimeZoneStorage() == COLUMN; - } - else { - return false; - } + return element instanceof MemberDetails attributeMember + && isTemporalWithTimeZoneClass( attributeMember.getType().getName() ) + //no @TimeZoneStorage annotation, so we need to use the default storage strategy + && context.getBuildingOptions().getDefaultTimeZoneStorage() == COLUMN; } else { return switch ( timeZoneStorage.value() ) {