Revert ConfigUtil::normalizeType and fix null annotations (#4608)
Partly reverts 8e597bde76
.
Signed-off-by: Holger Friedrich <mail@holger-friedrich.de>
pull/4618/head
parent
91940ef34d
commit
4f64c8d37b
|
@ -176,22 +176,20 @@ public class ConfigUtil {
|
||||||
* @return corresponding value as a valid type
|
* @return corresponding value as a valid type
|
||||||
* @throws IllegalArgumentException if an invalid type has been given
|
* @throws IllegalArgumentException if an invalid type has been given
|
||||||
*/
|
*/
|
||||||
public static Object normalizeType(Object value, @Nullable ConfigDescriptionParameter configDescriptionParameter) {
|
@Nullable
|
||||||
Object result = null;
|
public static Object normalizeType(@Nullable Object value,
|
||||||
|
@Nullable ConfigDescriptionParameter configDescriptionParameter) {
|
||||||
if (configDescriptionParameter != null) {
|
if (configDescriptionParameter != null) {
|
||||||
Normalizer normalizer = NormalizerFactory.getNormalizer(configDescriptionParameter);
|
Normalizer normalizer = NormalizerFactory.getNormalizer(configDescriptionParameter);
|
||||||
result = normalizer.normalize(value);
|
return normalizer.normalize(value);
|
||||||
} else if (value instanceof Boolean) {
|
} else if (value instanceof Boolean) {
|
||||||
result = NormalizerFactory.getNormalizer(Type.BOOLEAN).normalize(value);
|
return NormalizerFactory.getNormalizer(Type.BOOLEAN).normalize(value);
|
||||||
} else if (value instanceof String) {
|
} else if (value instanceof String) {
|
||||||
result = NormalizerFactory.getNormalizer(Type.TEXT).normalize(value);
|
return NormalizerFactory.getNormalizer(Type.TEXT).normalize(value);
|
||||||
} else if (value instanceof Number) {
|
} 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) {
|
} else if (value instanceof Collection collection) {
|
||||||
result = normalizeCollection(collection);
|
return normalizeCollection(collection);
|
||||||
}
|
|
||||||
if (result != null) {
|
|
||||||
return result;
|
|
||||||
}
|
}
|
||||||
throw new IllegalArgumentException(
|
throw new IllegalArgumentException(
|
||||||
"Invalid type '{%s}' of configuration value!".formatted(value.getClass().getCanonicalName()));
|
"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
|
* @return the normalized configuration or null if given configuration was null
|
||||||
* @throws IllegalArgumentException if given config description is null
|
* @throws IllegalArgumentException if given config description is null
|
||||||
*/
|
*/
|
||||||
public static Map<String, Object> normalizeTypes(Map<String, Object> configuration,
|
public static Map<String, @Nullable Object> normalizeTypes(Map<String, @Nullable Object> configuration,
|
||||||
List<ConfigDescription> configDescriptions) {
|
List<ConfigDescription> configDescriptions) {
|
||||||
if (configDescriptions.isEmpty()) {
|
if (configDescriptions.isEmpty()) {
|
||||||
throw new IllegalArgumentException("Config description must not be empty.");
|
throw new IllegalArgumentException("Config description must not be empty.");
|
||||||
}
|
}
|
||||||
|
|
||||||
Map<String, Object> convertedConfiguration = new HashMap<>();
|
Map<String, @Nullable Object> convertedConfiguration = new HashMap<>();
|
||||||
|
|
||||||
Map<String, ConfigDescriptionParameter> configParams = new HashMap<>();
|
Map<String, ConfigDescriptionParameter> configParams = new HashMap<>();
|
||||||
for (int i = configDescriptions.size() - 1; i >= 0; i--) {
|
for (int i = configDescriptions.size() - 1; i >= 0; i--) {
|
||||||
configParams.putAll(configDescriptions.get(i).toParametersMap());
|
configParams.putAll(configDescriptions.get(i).toParametersMap());
|
||||||
}
|
}
|
||||||
for (Entry<String, Object> parameter : configuration.entrySet()) {
|
for (Entry<String, @Nullable Object> parameter : configuration.entrySet()) {
|
||||||
String name = parameter.getKey();
|
String name = parameter.getKey();
|
||||||
|
@Nullable
|
||||||
Object value = parameter.getValue();
|
Object value = parameter.getValue();
|
||||||
if (!isOSGiConfigParameter(name)) {
|
if (!isOSGiConfigParameter(name)) {
|
||||||
ConfigDescriptionParameter configDescriptionParameter = configParams.get(name);
|
ConfigDescriptionParameter configDescriptionParameter = configParams.get(name);
|
||||||
|
@ -246,7 +245,7 @@ public class ConfigUtil {
|
||||||
* @param value the value to return as normalized type
|
* @param value the value to return as normalized type
|
||||||
* @return corresponding value as a valid 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);
|
return normalizeType(value, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -399,7 +399,7 @@ public class AddonResource implements RESTResource, EventSubscriber {
|
||||||
@ApiResponse(responseCode = "500", description = "Configuration can not be updated due to internal error") })
|
@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,
|
public Response updateConfiguration(@PathParam("addonId") @Parameter(description = "Add-on id") String addonId,
|
||||||
@QueryParam("serviceId") @Parameter(description = "service ID") @Nullable String serviceId,
|
@QueryParam("serviceId") @Parameter(description = "service ID") @Nullable String serviceId,
|
||||||
@Nullable Map<String, Object> configuration) {
|
@Nullable Map<String, @Nullable Object> configuration) {
|
||||||
try {
|
try {
|
||||||
AddonService addonService = (serviceId != null) ? getServiceById(serviceId) : getDefaultService();
|
AddonService addonService = (serviceId != null) ? getServiceById(serviceId) : getDefaultService();
|
||||||
if (addonService == null) {
|
if (addonService == null) {
|
||||||
|
@ -425,8 +425,8 @@ public class AddonResource implements RESTResource, EventSubscriber {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private @Nullable Map<String, Object> normalizeConfiguration(@Nullable Map<String, Object> properties,
|
private @Nullable Map<String, @Nullable Object> normalizeConfiguration(
|
||||||
String addonId) {
|
@Nullable Map<String, @Nullable Object> properties, String addonId) {
|
||||||
if (properties == null || properties.isEmpty()) {
|
if (properties == null || properties.isEmpty()) {
|
||||||
return properties;
|
return properties;
|
||||||
}
|
}
|
||||||
|
|
|
@ -224,7 +224,7 @@ public class ConfigurableServiceResource implements RESTResource {
|
||||||
public Response updateConfiguration(
|
public Response updateConfiguration(
|
||||||
@HeaderParam("Accept-Language") @Parameter(description = "language") @Nullable String language,
|
@HeaderParam("Accept-Language") @Parameter(description = "language") @Nullable String language,
|
||||||
@PathParam("serviceId") @Parameter(description = "service ID") String serviceId,
|
@PathParam("serviceId") @Parameter(description = "service ID") String serviceId,
|
||||||
@Nullable Map<String, Object> configuration) {
|
@Nullable Map<String, @Nullable Object> configuration) {
|
||||||
Locale locale = localeService.getLocale(language);
|
Locale locale = localeService.getLocale(language);
|
||||||
try {
|
try {
|
||||||
Configuration oldConfiguration = configurationService.get(serviceId);
|
Configuration oldConfiguration = configurationService.get(serviceId);
|
||||||
|
@ -238,8 +238,8 @@ public class ConfigurableServiceResource implements RESTResource {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private @Nullable Map<String, Object> normalizeConfiguration(@Nullable Map<String, Object> properties,
|
private @Nullable Map<String, @Nullable Object> normalizeConfiguration(
|
||||||
String serviceId, Locale locale) {
|
@Nullable Map<String, @Nullable Object> properties, String serviceId, Locale locale) {
|
||||||
if (properties == null || properties.isEmpty()) {
|
if (properties == null || properties.isEmpty()) {
|
||||||
return properties;
|
return properties;
|
||||||
}
|
}
|
||||||
|
|
|
@ -501,7 +501,7 @@ public class ThingResource implements RESTResource {
|
||||||
public Response updateConfiguration(
|
public Response updateConfiguration(
|
||||||
@HeaderParam(HttpHeaders.ACCEPT_LANGUAGE) @Parameter(description = "language") @Nullable String language,
|
@HeaderParam(HttpHeaders.ACCEPT_LANGUAGE) @Parameter(description = "language") @Nullable String language,
|
||||||
@PathParam("thingUID") @Parameter(description = "thing") String thingUID,
|
@PathParam("thingUID") @Parameter(description = "thing") String thingUID,
|
||||||
@Parameter(description = "configuration parameters") @Nullable Map<String, Object> configurationParameters)
|
@Parameter(description = "configuration parameters") @Nullable Map<String, @Nullable Object> configurationParameters)
|
||||||
throws IOException {
|
throws IOException {
|
||||||
final Locale locale = localeService.getLocale(language);
|
final Locale locale = localeService.getLocale(language);
|
||||||
|
|
||||||
|
@ -788,8 +788,9 @@ public class ThingResource implements RESTResource {
|
||||||
return linkedItemsMap;
|
return linkedItemsMap;
|
||||||
}
|
}
|
||||||
|
|
||||||
private @Nullable Map<String, Object> normalizeConfiguration(@Nullable Map<String, Object> properties,
|
private @Nullable Map<String, @Nullable Object> normalizeConfiguration(
|
||||||
ThingTypeUID thingTypeUID, @Nullable ThingUID thingUID) {
|
@Nullable Map<String, @Nullable Object> properties, ThingTypeUID thingTypeUID,
|
||||||
|
@Nullable ThingUID thingUID) {
|
||||||
if (properties == null || properties.isEmpty()) {
|
if (properties == null || properties.isEmpty()) {
|
||||||
return properties;
|
return properties;
|
||||||
}
|
}
|
||||||
|
@ -824,7 +825,7 @@ public class ThingResource implements RESTResource {
|
||||||
return ConfigUtil.normalizeTypes(properties, configDescriptions);
|
return ConfigUtil.normalizeTypes(properties, configDescriptions);
|
||||||
}
|
}
|
||||||
|
|
||||||
private @Nullable Map<String, Object> normalizeConfiguration(Map<String, Object> properties,
|
private @Nullable Map<String, @Nullable Object> normalizeConfiguration(Map<String, @Nullable Object> properties,
|
||||||
ChannelTypeUID channelTypeUID, ChannelUID channelUID) {
|
ChannelTypeUID channelTypeUID, ChannelUID channelUID) {
|
||||||
if (properties == null || properties.isEmpty()) {
|
if (properties == null || properties.isEmpty()) {
|
||||||
return properties;
|
return properties;
|
||||||
|
|
|
@ -28,6 +28,7 @@ import java.util.Optional;
|
||||||
import javax.ws.rs.core.Response;
|
import javax.ws.rs.core.Response;
|
||||||
|
|
||||||
import org.eclipse.jdt.annotation.NonNullByDefault;
|
import org.eclipse.jdt.annotation.NonNullByDefault;
|
||||||
|
import org.eclipse.jdt.annotation.Nullable;
|
||||||
import org.junit.jupiter.api.BeforeEach;
|
import org.junit.jupiter.api.BeforeEach;
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
import org.openhab.core.io.rest.core.service.ConfigurableServiceDTO;
|
import org.openhab.core.io.rest.core.service.ConfigurableServiceDTO;
|
||||||
|
@ -135,7 +136,7 @@ public class ConfigurableServiceResourceOSGiTest extends JavaOSGiTest {
|
||||||
Response response = configurableServiceResource.getConfiguration("id");
|
Response response = configurableServiceResource.getConfiguration("id");
|
||||||
assertThat(response.getStatus(), is(200));
|
assertThat(response.getStatus(), is(200));
|
||||||
|
|
||||||
Map<String, Object> newConfiguration = new HashMap<>();
|
Map<String, @Nullable Object> newConfiguration = new HashMap<>();
|
||||||
newConfiguration.put("a", "b");
|
newConfiguration.put("a", "b");
|
||||||
response = configurableServiceResource.updateConfiguration("en", "id", newConfiguration);
|
response = configurableServiceResource.updateConfiguration("en", "id", newConfiguration);
|
||||||
assertThat(response.getStatus(), is(204));
|
assertThat(response.getStatus(), is(204));
|
||||||
|
|
Loading…
Reference in New Issue