From 4f64c8d37b8743a05a0e0b6340725f7df5ccd2d2 Mon Sep 17 00:00:00 2001 From: Holger Friedrich Date: Tue, 18 Feb 2025 18:24:48 +0100 Subject: [PATCH] Revert ConfigUtil::normalizeType and fix null annotations (#4608) Partly reverts 8e597bde76ef17a7a4d47b1a39b8e44060c43e36. Signed-off-by: Holger Friedrich --- .../openhab/core/config/core/ConfigUtil.java | 27 +++++++++---------- .../core/internal/addons/AddonResource.java | 6 ++--- .../service/ConfigurableServiceResource.java | 6 ++--- .../core/internal/thing/ThingResource.java | 9 ++++--- .../ConfigurableServiceResourceOSGiTest.java | 3 ++- 5 files changed, 26 insertions(+), 25 deletions(-) diff --git a/bundles/org.openhab.core.config.core/src/main/java/org/openhab/core/config/core/ConfigUtil.java b/bundles/org.openhab.core.config.core/src/main/java/org/openhab/core/config/core/ConfigUtil.java index 74d87c5f00..4f0dd1abb2 100644 --- a/bundles/org.openhab.core.config.core/src/main/java/org/openhab/core/config/core/ConfigUtil.java +++ b/bundles/org.openhab.core.config.core/src/main/java/org/openhab/core/config/core/ConfigUtil.java @@ -176,22 +176,20 @@ public class ConfigUtil { * @return corresponding value as a valid type * @throws IllegalArgumentException if an invalid type has been given */ - public static Object normalizeType(Object value, @Nullable ConfigDescriptionParameter configDescriptionParameter) { - Object result = null; + @Nullable + public static Object normalizeType(@Nullable Object value, + @Nullable ConfigDescriptionParameter configDescriptionParameter) { if (configDescriptionParameter != null) { Normalizer normalizer = NormalizerFactory.getNormalizer(configDescriptionParameter); - result = normalizer.normalize(value); + return normalizer.normalize(value); } else if (value instanceof Boolean) { - result = NormalizerFactory.getNormalizer(Type.BOOLEAN).normalize(value); + return NormalizerFactory.getNormalizer(Type.BOOLEAN).normalize(value); } else if (value instanceof String) { - result = NormalizerFactory.getNormalizer(Type.TEXT).normalize(value); + return NormalizerFactory.getNormalizer(Type.TEXT).normalize(value); } else if (value instanceof Number) { - result = NormalizerFactory.getNormalizer(Type.DECIMAL).normalize(value); + return NormalizerFactory.getNormalizer(Type.DECIMAL).normalize(value); } else if (value instanceof Collection collection) { - result = normalizeCollection(collection); - } - if (result != null) { - return result; + return normalizeCollection(collection); } throw new IllegalArgumentException( "Invalid type '{%s}' of configuration value!".formatted(value.getClass().getCanonicalName())); @@ -214,20 +212,21 @@ public class ConfigUtil { * @return the normalized configuration or null if given configuration was null * @throws IllegalArgumentException if given config description is null */ - public static Map normalizeTypes(Map configuration, + public static Map normalizeTypes(Map configuration, List configDescriptions) { if (configDescriptions.isEmpty()) { throw new IllegalArgumentException("Config description must not be empty."); } - Map convertedConfiguration = new HashMap<>(); + Map convertedConfiguration = new HashMap<>(); Map configParams = new HashMap<>(); for (int i = configDescriptions.size() - 1; i >= 0; i--) { configParams.putAll(configDescriptions.get(i).toParametersMap()); } - for (Entry parameter : configuration.entrySet()) { + for (Entry parameter : configuration.entrySet()) { String name = parameter.getKey(); + @Nullable Object value = parameter.getValue(); if (!isOSGiConfigParameter(name)) { ConfigDescriptionParameter configDescriptionParameter = configParams.get(name); @@ -246,7 +245,7 @@ public class ConfigUtil { * @param value the value to return as normalized type * @return corresponding value as a valid type */ - public static @Nullable Object normalizeType(Object value) { + public static @Nullable Object normalizeType(@Nullable Object value) { return normalizeType(value, null); } diff --git a/bundles/org.openhab.core.io.rest.core/src/main/java/org/openhab/core/io/rest/core/internal/addons/AddonResource.java b/bundles/org.openhab.core.io.rest.core/src/main/java/org/openhab/core/io/rest/core/internal/addons/AddonResource.java index c0aa57da15..b39901b171 100644 --- a/bundles/org.openhab.core.io.rest.core/src/main/java/org/openhab/core/io/rest/core/internal/addons/AddonResource.java +++ b/bundles/org.openhab.core.io.rest.core/src/main/java/org/openhab/core/io/rest/core/internal/addons/AddonResource.java @@ -399,7 +399,7 @@ public class AddonResource implements RESTResource, EventSubscriber { @ApiResponse(responseCode = "500", description = "Configuration can not be updated due to internal error") }) public Response updateConfiguration(@PathParam("addonId") @Parameter(description = "Add-on id") String addonId, @QueryParam("serviceId") @Parameter(description = "service ID") @Nullable String serviceId, - @Nullable Map configuration) { + @Nullable Map configuration) { try { AddonService addonService = (serviceId != null) ? getServiceById(serviceId) : getDefaultService(); if (addonService == null) { @@ -425,8 +425,8 @@ public class AddonResource implements RESTResource, EventSubscriber { } } - private @Nullable Map normalizeConfiguration(@Nullable Map properties, - String addonId) { + private @Nullable Map normalizeConfiguration( + @Nullable Map properties, String addonId) { if (properties == null || properties.isEmpty()) { return properties; } diff --git a/bundles/org.openhab.core.io.rest.core/src/main/java/org/openhab/core/io/rest/core/internal/service/ConfigurableServiceResource.java b/bundles/org.openhab.core.io.rest.core/src/main/java/org/openhab/core/io/rest/core/internal/service/ConfigurableServiceResource.java index 6b7d5a0f4f..fef6c0dfb2 100644 --- a/bundles/org.openhab.core.io.rest.core/src/main/java/org/openhab/core/io/rest/core/internal/service/ConfigurableServiceResource.java +++ b/bundles/org.openhab.core.io.rest.core/src/main/java/org/openhab/core/io/rest/core/internal/service/ConfigurableServiceResource.java @@ -224,7 +224,7 @@ public class ConfigurableServiceResource implements RESTResource { public Response updateConfiguration( @HeaderParam("Accept-Language") @Parameter(description = "language") @Nullable String language, @PathParam("serviceId") @Parameter(description = "service ID") String serviceId, - @Nullable Map configuration) { + @Nullable Map configuration) { Locale locale = localeService.getLocale(language); try { Configuration oldConfiguration = configurationService.get(serviceId); @@ -238,8 +238,8 @@ public class ConfigurableServiceResource implements RESTResource { } } - private @Nullable Map normalizeConfiguration(@Nullable Map properties, - String serviceId, Locale locale) { + private @Nullable Map normalizeConfiguration( + @Nullable Map properties, String serviceId, Locale locale) { if (properties == null || properties.isEmpty()) { return properties; } diff --git a/bundles/org.openhab.core.io.rest.core/src/main/java/org/openhab/core/io/rest/core/internal/thing/ThingResource.java b/bundles/org.openhab.core.io.rest.core/src/main/java/org/openhab/core/io/rest/core/internal/thing/ThingResource.java index 99464a6d78..47109b67e4 100644 --- a/bundles/org.openhab.core.io.rest.core/src/main/java/org/openhab/core/io/rest/core/internal/thing/ThingResource.java +++ b/bundles/org.openhab.core.io.rest.core/src/main/java/org/openhab/core/io/rest/core/internal/thing/ThingResource.java @@ -501,7 +501,7 @@ public class ThingResource implements RESTResource { public Response updateConfiguration( @HeaderParam(HttpHeaders.ACCEPT_LANGUAGE) @Parameter(description = "language") @Nullable String language, @PathParam("thingUID") @Parameter(description = "thing") String thingUID, - @Parameter(description = "configuration parameters") @Nullable Map configurationParameters) + @Parameter(description = "configuration parameters") @Nullable Map configurationParameters) throws IOException { final Locale locale = localeService.getLocale(language); @@ -788,8 +788,9 @@ public class ThingResource implements RESTResource { return linkedItemsMap; } - private @Nullable Map normalizeConfiguration(@Nullable Map properties, - ThingTypeUID thingTypeUID, @Nullable ThingUID thingUID) { + private @Nullable Map normalizeConfiguration( + @Nullable Map properties, ThingTypeUID thingTypeUID, + @Nullable ThingUID thingUID) { if (properties == null || properties.isEmpty()) { return properties; } @@ -824,7 +825,7 @@ public class ThingResource implements RESTResource { return ConfigUtil.normalizeTypes(properties, configDescriptions); } - private @Nullable Map normalizeConfiguration(Map properties, + private @Nullable Map normalizeConfiguration(Map properties, ChannelTypeUID channelTypeUID, ChannelUID channelUID) { if (properties == null || properties.isEmpty()) { return properties; diff --git a/itests/org.openhab.core.io.rest.core.tests/src/main/java/org/openhab/core/io/rest/core/internal/service/ConfigurableServiceResourceOSGiTest.java b/itests/org.openhab.core.io.rest.core.tests/src/main/java/org/openhab/core/io/rest/core/internal/service/ConfigurableServiceResourceOSGiTest.java index 72dcdd0312..f256ba7645 100644 --- a/itests/org.openhab.core.io.rest.core.tests/src/main/java/org/openhab/core/io/rest/core/internal/service/ConfigurableServiceResourceOSGiTest.java +++ b/itests/org.openhab.core.io.rest.core.tests/src/main/java/org/openhab/core/io/rest/core/internal/service/ConfigurableServiceResourceOSGiTest.java @@ -28,6 +28,7 @@ import java.util.Optional; import javax.ws.rs.core.Response; import org.eclipse.jdt.annotation.NonNullByDefault; +import org.eclipse.jdt.annotation.Nullable; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.openhab.core.io.rest.core.service.ConfigurableServiceDTO; @@ -135,7 +136,7 @@ public class ConfigurableServiceResourceOSGiTest extends JavaOSGiTest { Response response = configurableServiceResource.getConfiguration("id"); assertThat(response.getStatus(), is(200)); - Map newConfiguration = new HashMap<>(); + Map newConfiguration = new HashMap<>(); newConfiguration.put("a", "b"); response = configurableServiceResource.updateConfiguration("en", "id", newConfiguration); assertThat(response.getStatus(), is(204));