[config] Add nullness annotations to config validation (#2690)
Signed-off-by: Christoph Weitkamp <github@christophweitkamp.de>pull/2741/head
parent
5a4b6fedce
commit
87ecfade74
|
@ -12,6 +12,8 @@
|
|||
*/
|
||||
package org.openhab.core.config.core.internal.validation;
|
||||
|
||||
import org.eclipse.jdt.annotation.NonNullByDefault;
|
||||
import org.eclipse.jdt.annotation.Nullable;
|
||||
import org.openhab.core.config.core.ConfigDescriptionParameter;
|
||||
import org.openhab.core.config.core.validation.ConfigValidationMessage;
|
||||
|
||||
|
@ -21,6 +23,7 @@ import org.openhab.core.config.core.validation.ConfigValidationMessage;
|
|||
*
|
||||
* @author Thomas Höfer - Initial contribution
|
||||
*/
|
||||
@NonNullByDefault
|
||||
public interface ConfigDescriptionParameterValidator {
|
||||
|
||||
/**
|
||||
|
@ -32,5 +35,6 @@ public interface ConfigDescriptionParameterValidator {
|
|||
* @return a {@link ConfigValidationMessage} if value does not meet the declaration of the parameter,
|
||||
* otherwise null
|
||||
*/
|
||||
ConfigValidationMessage validate(ConfigDescriptionParameter parameter, Object value);
|
||||
@Nullable
|
||||
ConfigValidationMessage validate(ConfigDescriptionParameter parameter, @Nullable Object value);
|
||||
}
|
||||
|
|
|
@ -12,12 +12,15 @@
|
|||
*/
|
||||
package org.openhab.core.config.core.internal.validation;
|
||||
|
||||
import org.eclipse.jdt.annotation.NonNullByDefault;
|
||||
|
||||
/**
|
||||
* The {@link ConfigDescriptionParameterValidatorFactory} creates the corresponding
|
||||
* {@link ConfigDescriptionParameterValidator}s used by ConfigDescriptionValidator.
|
||||
*
|
||||
* @author Thomas Höfer - Initial contribution
|
||||
*/
|
||||
@NonNullByDefault
|
||||
public final class ConfigDescriptionParameterValidatorFactory {
|
||||
|
||||
private ConfigDescriptionParameterValidatorFactory() {
|
||||
|
|
|
@ -14,13 +14,13 @@ package org.openhab.core.config.core.internal.validation;
|
|||
|
||||
import java.net.URI;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
|
||||
import org.eclipse.jdt.annotation.NonNullByDefault;
|
||||
import org.eclipse.jdt.annotation.Nullable;
|
||||
import org.openhab.core.config.core.ConfigDescription;
|
||||
import org.openhab.core.config.core.ConfigDescriptionParameter;
|
||||
import org.openhab.core.config.core.ConfigDescriptionRegistry;
|
||||
|
@ -32,10 +32,7 @@ import org.openhab.core.i18n.TranslationProvider;
|
|||
import org.osgi.framework.BundleContext;
|
||||
import org.osgi.service.component.annotations.Activate;
|
||||
import org.osgi.service.component.annotations.Component;
|
||||
import org.osgi.service.component.annotations.Deactivate;
|
||||
import org.osgi.service.component.annotations.Reference;
|
||||
import org.osgi.service.component.annotations.ReferenceCardinality;
|
||||
import org.osgi.service.component.annotations.ReferencePolicy;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
|
@ -49,29 +46,29 @@ import org.slf4j.LoggerFactory;
|
|||
* @author Chris Jackson - Handle checks on multiple selection parameters
|
||||
*/
|
||||
@Component
|
||||
@NonNullByDefault
|
||||
public final class ConfigDescriptionValidatorImpl implements ConfigDescriptionValidator {
|
||||
|
||||
private static final List<ConfigDescriptionParameterValidator> VALIDATORS = List.of( //
|
||||
ConfigDescriptionParameterValidatorFactory.createRequiredValidator(), //
|
||||
ConfigDescriptionParameterValidatorFactory.createTypeValidator(), //
|
||||
ConfigDescriptionParameterValidatorFactory.createMinMaxValidator(), //
|
||||
ConfigDescriptionParameterValidatorFactory.createPatternValidator() //
|
||||
);
|
||||
|
||||
private final Logger logger = LoggerFactory.getLogger(ConfigDescriptionValidatorImpl.class);
|
||||
|
||||
private ConfigDescriptionRegistry configDescriptionRegistry;
|
||||
private TranslationProvider translationProvider;
|
||||
|
||||
private static final List<ConfigDescriptionParameterValidator> VALIDATORS = Collections
|
||||
.unmodifiableList(Arrays.asList(ConfigDescriptionParameterValidatorFactory.createRequiredValidator(),
|
||||
ConfigDescriptionParameterValidatorFactory.createTypeValidator(),
|
||||
ConfigDescriptionParameterValidatorFactory.createMinMaxValidator(),
|
||||
ConfigDescriptionParameterValidatorFactory.createPatternValidator()));
|
||||
|
||||
private BundleContext bundleContext;
|
||||
private final ConfigDescriptionRegistry configDescriptionRegistry;
|
||||
private final TranslationProvider translationProvider;
|
||||
private final BundleContext bundleContext;
|
||||
|
||||
@Activate
|
||||
protected void activate(BundleContext bundleContext) {
|
||||
public ConfigDescriptionValidatorImpl(final BundleContext bundleContext,
|
||||
final @Reference ConfigDescriptionRegistry configDescriptionRegistry,
|
||||
final @Reference TranslationProvider translationProvider) {
|
||||
this.bundleContext = bundleContext;
|
||||
}
|
||||
|
||||
@Deactivate
|
||||
protected void deactivate() {
|
||||
this.bundleContext = null;
|
||||
this.configDescriptionRegistry = configDescriptionRegistry;
|
||||
this.translationProvider = translationProvider;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -86,7 +83,7 @@ public final class ConfigDescriptionValidatorImpl implements ConfigDescriptionVa
|
|||
* @throws NullPointerException if given config description URI or configuration parameters are null
|
||||
*/
|
||||
@Override
|
||||
@SuppressWarnings("unchecked")
|
||||
@SuppressWarnings({ "unchecked", "null" })
|
||||
public void validate(Map<String, Object> configurationParameters, URI configDescriptionURI) {
|
||||
Objects.requireNonNull(configurationParameters, "Configuration parameters must not be null");
|
||||
Objects.requireNonNull(configDescriptionURI, "Config description URI must not be null");
|
||||
|
@ -150,8 +147,8 @@ public final class ConfigDescriptionValidatorImpl implements ConfigDescriptionVa
|
|||
* @return the {@link ConfigValidationMessage} if the given value is not valid for the config description parameter,
|
||||
* otherwise null
|
||||
*/
|
||||
private ConfigValidationMessage validateParameter(ConfigDescriptionParameter configDescriptionParameter,
|
||||
Object value) {
|
||||
private @Nullable ConfigValidationMessage validateParameter(ConfigDescriptionParameter configDescriptionParameter,
|
||||
@Nullable Object value) {
|
||||
for (ConfigDescriptionParameterValidator validator : VALIDATORS) {
|
||||
ConfigValidationMessage message = validator.validate(configDescriptionParameter, value);
|
||||
if (message != null) {
|
||||
|
@ -170,33 +167,11 @@ public final class ConfigDescriptionValidatorImpl implements ConfigDescriptionVa
|
|||
* config description registry is not available or because of config description could not be found for
|
||||
* given URI)
|
||||
*/
|
||||
private ConfigDescription getConfigDescription(URI configDescriptionURI) {
|
||||
if (configDescriptionRegistry == null) {
|
||||
logger.warn("No config description registry available.");
|
||||
return null;
|
||||
}
|
||||
private @Nullable ConfigDescription getConfigDescription(URI configDescriptionURI) {
|
||||
ConfigDescription configDescription = configDescriptionRegistry.getConfigDescription(configDescriptionURI);
|
||||
if (configDescription == null) {
|
||||
logger.warn("No config description found for URI '{}'", configDescriptionURI);
|
||||
}
|
||||
return configDescription;
|
||||
}
|
||||
|
||||
@Reference(cardinality = ReferenceCardinality.OPTIONAL, policy = ReferencePolicy.DYNAMIC)
|
||||
protected void setConfigDescriptionRegistry(ConfigDescriptionRegistry configDescriptionRegistry) {
|
||||
this.configDescriptionRegistry = configDescriptionRegistry;
|
||||
}
|
||||
|
||||
protected void unsetConfigDescriptionRegistry(ConfigDescriptionRegistry configDescriptionRegistry) {
|
||||
this.configDescriptionRegistry = null;
|
||||
}
|
||||
|
||||
@Reference(cardinality = ReferenceCardinality.OPTIONAL, policy = ReferencePolicy.DYNAMIC)
|
||||
protected void setTranslationProvider(TranslationProvider translationProvider) {
|
||||
this.translationProvider = translationProvider;
|
||||
}
|
||||
|
||||
protected void unsetTranslationProvider(TranslationProvider translationProvider) {
|
||||
this.translationProvider = null;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -12,15 +12,18 @@
|
|||
*/
|
||||
package org.openhab.core.config.core.internal.validation;
|
||||
|
||||
import org.eclipse.jdt.annotation.NonNullByDefault;
|
||||
|
||||
/**
|
||||
* Utility class providing the {@link MessageKey}s for config description validation. The {@link MessageKey}
|
||||
* consists of a key to be used for internationalization and a general default text.
|
||||
*
|
||||
* @author Thomas Höfer - Initial contribution
|
||||
*/
|
||||
@NonNullByDefault
|
||||
final class MessageKey {
|
||||
|
||||
static final MessageKey PARAMETER_REQUIRED = new MessageKey("parameter_required", "The parameter is required");
|
||||
static final MessageKey PARAMETER_REQUIRED = new MessageKey("parameter_required", "The parameter is required.");
|
||||
|
||||
static final MessageKey DATA_TYPE_VIOLATED = new MessageKey("data_type_violated",
|
||||
"The data type of the value ({0}) does not match with the type declaration ({1}) in the configuration description.");
|
||||
|
|
|
@ -14,6 +14,8 @@ package org.openhab.core.config.core.internal.validation;
|
|||
|
||||
import java.math.BigDecimal;
|
||||
|
||||
import org.eclipse.jdt.annotation.NonNullByDefault;
|
||||
import org.eclipse.jdt.annotation.Nullable;
|
||||
import org.openhab.core.config.core.ConfigDescriptionParameter;
|
||||
import org.openhab.core.config.core.ConfigDescriptionParameter.Type;
|
||||
import org.openhab.core.config.core.ParameterOption;
|
||||
|
@ -26,12 +28,12 @@ import org.openhab.core.config.core.validation.ConfigValidationMessage;
|
|||
*
|
||||
* @author Thomas Höfer - Initial contribution
|
||||
* @authod Chris Jackson - Allow options to be outside of min/max value
|
||||
* @param <T>
|
||||
*/
|
||||
@NonNullByDefault
|
||||
final class MinMaxValidator implements ConfigDescriptionParameterValidator {
|
||||
|
||||
@Override
|
||||
public ConfigValidationMessage validate(ConfigDescriptionParameter parameter, Object value) {
|
||||
public @Nullable ConfigValidationMessage validate(ConfigDescriptionParameter parameter, @Nullable Object value) {
|
||||
if (value == null || parameter.getType() == Type.BOOLEAN) {
|
||||
return null;
|
||||
}
|
||||
|
@ -61,7 +63,6 @@ final class MinMaxValidator implements ConfigDescriptionParameterValidator {
|
|||
max);
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
|
|
|
@ -12,6 +12,8 @@
|
|||
*/
|
||||
package org.openhab.core.config.core.internal.validation;
|
||||
|
||||
import org.eclipse.jdt.annotation.NonNullByDefault;
|
||||
import org.eclipse.jdt.annotation.Nullable;
|
||||
import org.openhab.core.config.core.ConfigDescriptionParameter;
|
||||
import org.openhab.core.config.core.ConfigDescriptionParameter.Type;
|
||||
import org.openhab.core.config.core.validation.ConfigValidationMessage;
|
||||
|
@ -22,10 +24,11 @@ import org.openhab.core.config.core.validation.ConfigValidationMessage;
|
|||
*
|
||||
* @author Thomas Höfer - Initial contribution
|
||||
*/
|
||||
@NonNullByDefault
|
||||
final class PatternValidator implements ConfigDescriptionParameterValidator {
|
||||
|
||||
@Override
|
||||
public ConfigValidationMessage validate(ConfigDescriptionParameter parameter, Object value) {
|
||||
public @Nullable ConfigValidationMessage validate(ConfigDescriptionParameter parameter, @Nullable Object value) {
|
||||
if (value == null || parameter.getType() != Type.TEXT || parameter.getPattern() == null) {
|
||||
return null;
|
||||
}
|
||||
|
@ -35,7 +38,6 @@ final class PatternValidator implements ConfigDescriptionParameterValidator {
|
|||
return new ConfigValidationMessage(parameter.getName(), messageKey.defaultMessage, messageKey.key,
|
||||
String.valueOf(value), parameter.getPattern());
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -12,6 +12,8 @@
|
|||
*/
|
||||
package org.openhab.core.config.core.internal.validation;
|
||||
|
||||
import org.eclipse.jdt.annotation.NonNullByDefault;
|
||||
import org.eclipse.jdt.annotation.Nullable;
|
||||
import org.openhab.core.config.core.ConfigDescriptionParameter;
|
||||
import org.openhab.core.config.core.validation.ConfigValidationMessage;
|
||||
|
||||
|
@ -20,15 +22,15 @@ import org.openhab.core.config.core.validation.ConfigValidationMessage;
|
|||
*
|
||||
* @author Thomas Höfer - Initial contribution
|
||||
*/
|
||||
@NonNullByDefault
|
||||
final class RequiredValidator implements ConfigDescriptionParameterValidator {
|
||||
|
||||
@Override
|
||||
public ConfigValidationMessage validate(ConfigDescriptionParameter param, Object value) {
|
||||
public @Nullable ConfigValidationMessage validate(ConfigDescriptionParameter param, @Nullable Object value) {
|
||||
if (param.isRequired() && value == null) {
|
||||
MessageKey messageKey = MessageKey.PARAMETER_REQUIRED;
|
||||
return new ConfigValidationMessage(param.getName(), messageKey.defaultMessage, messageKey.key);
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -12,8 +12,6 @@
|
|||
*/
|
||||
package org.openhab.core.config.core.internal.validation;
|
||||
|
||||
import static java.util.Map.entry;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Map;
|
||||
|
||||
|
@ -27,9 +25,12 @@ import org.openhab.core.config.core.ConfigDescriptionParameter.Type;
|
|||
*/
|
||||
final class TypeIntrospections {
|
||||
|
||||
private static final Map<Type, TypeIntrospection> INTROSPECTIONS = Map.ofEntries(
|
||||
entry(Type.BOOLEAN, new BooleanIntrospection()), entry(Type.TEXT, new StringIntrospection()),
|
||||
entry(Type.INTEGER, new IntegerIntrospection()), entry(Type.DECIMAL, new FloatIntrospection()));
|
||||
private static final Map<Type, TypeIntrospection> INTROSPECTIONS = Map.of( //
|
||||
Type.BOOLEAN, new BooleanIntrospection(), //
|
||||
Type.TEXT, new StringIntrospection(), //
|
||||
Type.INTEGER, new IntegerIntrospection(), //
|
||||
Type.DECIMAL, new FloatIntrospection() //
|
||||
);
|
||||
|
||||
private TypeIntrospections() {
|
||||
super();
|
||||
|
|
|
@ -12,8 +12,9 @@
|
|||
*/
|
||||
package org.openhab.core.config.core.internal.validation;
|
||||
|
||||
import org.eclipse.jdt.annotation.NonNullByDefault;
|
||||
import org.eclipse.jdt.annotation.Nullable;
|
||||
import org.openhab.core.config.core.ConfigDescriptionParameter;
|
||||
import org.openhab.core.config.core.ConfigDescriptionParameter.Type;
|
||||
import org.openhab.core.config.core.internal.validation.TypeIntrospections.TypeIntrospection;
|
||||
import org.openhab.core.config.core.validation.ConfigValidationMessage;
|
||||
|
||||
|
@ -23,25 +24,21 @@ import org.openhab.core.config.core.validation.ConfigValidationMessage;
|
|||
*
|
||||
* @author Thomas Höfer - Initial contribution
|
||||
*/
|
||||
@NonNullByDefault
|
||||
final class TypeValidator implements ConfigDescriptionParameterValidator {
|
||||
|
||||
@Override
|
||||
public ConfigValidationMessage validate(ConfigDescriptionParameter parameter, Object value) {
|
||||
public @Nullable ConfigValidationMessage validate(ConfigDescriptionParameter parameter, @Nullable Object value) {
|
||||
if (value == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
TypeIntrospection typeIntrospection = TypeIntrospections.get(parameter.getType());
|
||||
if (!typeIntrospection.isAssignable(value)) {
|
||||
return createDataTypeViolationMessage(parameter.getName(), parameter.getType(), value.getClass());
|
||||
return new ConfigValidationMessage(parameter.getName(), MessageKey.DATA_TYPE_VIOLATED.defaultMessage,
|
||||
MessageKey.DATA_TYPE_VIOLATED.key, value.getClass(), parameter.getType());
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
private static ConfigValidationMessage createDataTypeViolationMessage(String parameterName, Type type,
|
||||
Class<?> clazz) {
|
||||
return new ConfigValidationMessage(parameterName, MessageKey.DATA_TYPE_VIOLATED.defaultMessage,
|
||||
MessageKey.DATA_TYPE_VIOLATED.key, clazz, type);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -15,6 +15,7 @@ package org.openhab.core.config.core.validation;
|
|||
import java.net.URI;
|
||||
import java.util.Map;
|
||||
|
||||
import org.eclipse.jdt.annotation.NonNullByDefault;
|
||||
import org.openhab.core.config.core.ConfigDescription;
|
||||
import org.openhab.core.config.core.Configuration;
|
||||
|
||||
|
@ -27,6 +28,7 @@ import org.openhab.core.config.core.Configuration;
|
|||
* @author Thomas Höfer - Initial contribution
|
||||
* @author Chris Jackson - Handle checks on multiple selection parameters
|
||||
*/
|
||||
@NonNullByDefault
|
||||
public interface ConfigDescriptionValidator {
|
||||
|
||||
/**
|
||||
|
|
|
@ -12,10 +12,8 @@
|
|||
*/
|
||||
package org.openhab.core.config.core.internal.validation;
|
||||
|
||||
import static java.util.stream.Collectors.toList;
|
||||
import static org.hamcrest.CoreMatchers.is;
|
||||
import static org.hamcrest.MatcherAssert.assertThat;
|
||||
import static org.junit.jupiter.api.Assertions.*;
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.Mockito.*;
|
||||
|
||||
|
@ -26,7 +24,6 @@ import java.net.URISyntaxException;
|
|||
import java.util.LinkedHashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
import org.junit.jupiter.api.Assertions;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
|
@ -41,10 +38,9 @@ import org.openhab.core.config.core.ConfigDescriptionRegistry;
|
|||
import org.openhab.core.config.core.validation.ConfigDescriptionValidator;
|
||||
import org.openhab.core.config.core.validation.ConfigValidationException;
|
||||
import org.openhab.core.config.core.validation.ConfigValidationMessage;
|
||||
import org.openhab.core.i18n.TranslationProvider;
|
||||
import org.osgi.framework.Bundle;
|
||||
import org.osgi.framework.BundleContext;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
/**
|
||||
* Testing the {@link ConfigDescriptionValidator}.
|
||||
|
@ -54,8 +50,6 @@ import org.slf4j.LoggerFactory;
|
|||
*/
|
||||
public class ConfigDescriptionValidatorTest {
|
||||
|
||||
private final Logger logger = LoggerFactory.getLogger(ConfigDescriptionValidatorTest.class);
|
||||
|
||||
private static final int MIN_VIOLATED = 1;
|
||||
private static final int MAX_VIOLATED = 1234;
|
||||
|
||||
|
@ -144,10 +138,10 @@ public class ConfigDescriptionValidatorTest {
|
|||
}
|
||||
|
||||
private static final ConfigDescription CONFIG_DESCRIPTION = ConfigDescriptionBuilder.create(CONFIG_DESCRIPTION_URI)
|
||||
.withParameters(Stream.of(BOOL_PARAM, BOOL_REQUIRED_PARAM, TXT_PARAM, TXT_REQUIRED_PARAM, TXT_MIN_PARAM,
|
||||
.withParameters(List.of(BOOL_PARAM, BOOL_REQUIRED_PARAM, TXT_PARAM, TXT_REQUIRED_PARAM, TXT_MIN_PARAM,
|
||||
TXT_MAX_PARAM, TXT_PATTERN_PARAM, TXT_MAX_PATTERN_PARAM, TXT_MULTIPLE_LIMIT_PARAM, INT_PARAM,
|
||||
INT_REQUIRED_PARAM, INT_MIN_PARAM, INT_MAX_PARAM, DECIMAL_PARAM, DECIMAL_REQUIRED_PARAM,
|
||||
DECIMAL_MIN_PARAM, DECIMAL_MAX_PARAM).collect(toList()))
|
||||
DECIMAL_MIN_PARAM, DECIMAL_MAX_PARAM))
|
||||
.build();
|
||||
|
||||
private Map<String, Object> params;
|
||||
|
@ -165,9 +159,8 @@ public class ConfigDescriptionValidatorTest {
|
|||
BundleContext bundleContext = mock(BundleContext.class);
|
||||
when(bundleContext.getBundle()).thenReturn(mock(Bundle.class));
|
||||
|
||||
configDescriptionValidator = new ConfigDescriptionValidatorImpl();
|
||||
configDescriptionValidator.setConfigDescriptionRegistry(configDescriptionRegistry);
|
||||
configDescriptionValidator.activate(bundleContext);
|
||||
configDescriptionValidator = new ConfigDescriptionValidatorImpl(bundleContext, configDescriptionRegistry,
|
||||
mock(TranslationProvider.class));
|
||||
|
||||
params = new LinkedHashMap<>();
|
||||
params.put(BOOL_PARAM_NAME, null);
|
||||
|
@ -232,7 +225,7 @@ public class ConfigDescriptionValidatorTest {
|
|||
|
||||
@Test
|
||||
public void assertValidationThrowsExceptionContainingMessagesForAllRequiredConfigParameters() {
|
||||
List<ConfigValidationMessage> expected = Stream.of(
|
||||
List<ConfigValidationMessage> expected = List.of(
|
||||
new ConfigValidationMessage(BOOL_REQUIRED_PARAM_NAME, MessageKey.PARAMETER_REQUIRED.defaultMessage,
|
||||
MessageKey.PARAMETER_REQUIRED.key),
|
||||
new ConfigValidationMessage(DECIMAL_REQUIRED_PARAM_NAME, MessageKey.PARAMETER_REQUIRED.defaultMessage,
|
||||
|
@ -240,8 +233,7 @@ public class ConfigDescriptionValidatorTest {
|
|||
new ConfigValidationMessage(TXT_REQUIRED_PARAM_NAME, MessageKey.PARAMETER_REQUIRED.defaultMessage,
|
||||
MessageKey.PARAMETER_REQUIRED.key),
|
||||
new ConfigValidationMessage(INT_REQUIRED_PARAM_NAME, MessageKey.PARAMETER_REQUIRED.defaultMessage,
|
||||
MessageKey.PARAMETER_REQUIRED.key))
|
||||
.collect(toList());
|
||||
MessageKey.PARAMETER_REQUIRED.key));
|
||||
params.put(BOOL_PARAM_NAME, null);
|
||||
params.put(TXT_PARAM_NAME, null);
|
||||
params.put(INT_PARAM_NAME, null);
|
||||
|
@ -313,7 +305,7 @@ public class ConfigDescriptionValidatorTest {
|
|||
|
||||
@Test
|
||||
public void assertValidationThrowsExceptionContainingMessagesForAllMinMaxConfigParameters() {
|
||||
List<ConfigValidationMessage> expected = Stream.of(
|
||||
List<ConfigValidationMessage> expected = List.of(
|
||||
new ConfigValidationMessage(TXT_MAX_PARAM_NAME, MessageKey.MAX_VALUE_TXT_VIOLATED.defaultMessage,
|
||||
MessageKey.MAX_VALUE_TXT_VIOLATED.key, MAX.toString()),
|
||||
new ConfigValidationMessage(INT_MIN_PARAM_NAME, MessageKey.MIN_VALUE_NUMERIC_VIOLATED.defaultMessage,
|
||||
|
@ -327,8 +319,7 @@ public class ConfigDescriptionValidatorTest {
|
|||
MessageKey.MAX_VALUE_NUMERIC_VIOLATED.key, MAX.toString()),
|
||||
new ConfigValidationMessage(DECIMAL_MAX_PARAM_NAME,
|
||||
MessageKey.MAX_VALUE_NUMERIC_VIOLATED.defaultMessage, MessageKey.MAX_VALUE_NUMERIC_VIOLATED.key,
|
||||
DECIMAL_MAX.toString()))
|
||||
.collect(toList());
|
||||
DECIMAL_MAX.toString()));
|
||||
params.put(TXT_MIN_PARAM_NAME, String.valueOf(MIN_VIOLATED));
|
||||
params.put(TXT_MAX_PARAM_NAME, String.valueOf(MAX_VIOLATED));
|
||||
params.put(INT_MIN_PARAM_NAME, MIN_VIOLATED);
|
||||
|
@ -375,7 +366,7 @@ public class ConfigDescriptionValidatorTest {
|
|||
|
||||
@Test
|
||||
public void assertValidationThrowsExceptionContainingMessagesForMultipleInvalidTypedConfigParameters() {
|
||||
List<ConfigValidationMessage> expected = Stream.of(
|
||||
List<ConfigValidationMessage> expected = List.of(
|
||||
new ConfigValidationMessage(BOOL_PARAM_NAME, MessageKey.DATA_TYPE_VIOLATED.defaultMessage,
|
||||
MessageKey.DATA_TYPE_VIOLATED.key, Long.class, Type.BOOLEAN),
|
||||
new ConfigValidationMessage(INT_PARAM_NAME, MessageKey.DATA_TYPE_VIOLATED.defaultMessage,
|
||||
|
@ -383,8 +374,7 @@ public class ConfigDescriptionValidatorTest {
|
|||
new ConfigValidationMessage(TXT_PARAM_NAME, MessageKey.DATA_TYPE_VIOLATED.defaultMessage,
|
||||
MessageKey.DATA_TYPE_VIOLATED.key, Long.class, Type.TEXT),
|
||||
new ConfigValidationMessage(DECIMAL_PARAM_NAME, MessageKey.DATA_TYPE_VIOLATED.defaultMessage,
|
||||
MessageKey.DATA_TYPE_VIOLATED.key, Long.class, Type.DECIMAL))
|
||||
.collect(toList());
|
||||
MessageKey.DATA_TYPE_VIOLATED.key, Long.class, Type.DECIMAL));
|
||||
params.put(BOOL_PARAM_NAME, INVALID);
|
||||
params.put(TXT_PARAM_NAME, INVALID);
|
||||
params.put(INT_PARAM_NAME, INVALID);
|
||||
|
@ -434,7 +424,7 @@ public class ConfigDescriptionValidatorTest {
|
|||
|
||||
@Test
|
||||
public void assertValidationThrowsExceptionContainingMultipleVariousViolations() {
|
||||
List<ConfigValidationMessage> expected = Stream.of(
|
||||
List<ConfigValidationMessage> expected = List.of(
|
||||
new ConfigValidationMessage(BOOL_REQUIRED_PARAM_NAME, MessageKey.PARAMETER_REQUIRED.defaultMessage,
|
||||
MessageKey.PARAMETER_REQUIRED.key),
|
||||
new ConfigValidationMessage(TXT_MAX_PARAM_NAME, MessageKey.MAX_VALUE_TXT_VIOLATED.defaultMessage,
|
||||
|
@ -449,8 +439,7 @@ public class ConfigDescriptionValidatorTest {
|
|||
MessageKey.DATA_TYPE_VIOLATED.key, Long.class, Type.DECIMAL),
|
||||
new ConfigValidationMessage(DECIMAL_MAX_PARAM_NAME,
|
||||
MessageKey.MAX_VALUE_NUMERIC_VIOLATED.defaultMessage, MessageKey.MAX_VALUE_NUMERIC_VIOLATED.key,
|
||||
DECIMAL_MAX.toString()))
|
||||
.collect(toList());
|
||||
DECIMAL_MAX.toString()));
|
||||
params.put(BOOL_REQUIRED_PARAM_NAME, null);
|
||||
params.put(TXT_REQUIRED_PARAM_NAME, null);
|
||||
params.put(TXT_MAX_PARAM_NAME, String.valueOf(MAX_VIOLATED));
|
||||
|
@ -489,28 +478,11 @@ public class ConfigDescriptionValidatorTest {
|
|||
configDescriptionValidator.validate(params, CONFIG_DESCRIPTION_URI);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void assertValidateThrowsNPEforNullParamerters() {
|
||||
assertThrows(NullPointerException.class,
|
||||
() -> configDescriptionValidator.validate(null, CONFIG_DESCRIPTION_URI));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void assertValidateThrowsNPEforNullConfigDescriptionUri() {
|
||||
assertThrows(NullPointerException.class, () -> configDescriptionValidator.validate(params, null));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void assertValidateCanHandleUnknownURIs() throws Exception {
|
||||
configDescriptionValidator.validate(params, new URI(UNKNOWN));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void assertValidateCanHandleSituationsWithoutConfigDescriptionRegistry() {
|
||||
configDescriptionValidator.setConfigDescriptionRegistry(null);
|
||||
configDescriptionValidator.validate(params, CONFIG_DESCRIPTION_URI);
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
private static List<ConfigValidationMessage> getConfigValidationMessages(ConfigValidationException cve) {
|
||||
try {
|
||||
|
@ -521,8 +493,4 @@ public class ConfigDescriptionValidatorTest {
|
|||
throw new IllegalStateException("Failed to get configValidationMessages: " + e.getMessage(), e);
|
||||
}
|
||||
}
|
||||
|
||||
private void failBecauseOfMissingConfigValidationException() {
|
||||
fail("A config validation exception was expected but it was not thrown");
|
||||
}
|
||||
}
|
||||
|
|
|
@ -139,8 +139,7 @@ public class ConfigValidationExceptionTest {
|
|||
}
|
||||
|
||||
@Test
|
||||
@SuppressWarnings("unused")
|
||||
public void assertThatNPEisThrownForNullConfigValidationMessages() {
|
||||
public void assertThatNPEIsThrownForNullConfigValidationMessages() {
|
||||
assertThrows(NullPointerException.class,
|
||||
() -> new ConfigValidationException(BUNDLE, TRANSLATION_PROVIDER, null));
|
||||
}
|
||||
|
|
|
@ -286,16 +286,22 @@ public class ThingManagerImpl
|
|||
@Override
|
||||
public void validateConfigurationParameters(Thing thing, Map<String, Object> configurationParameters) {
|
||||
ThingType thingType = thingTypeRegistry.getThingType(thing.getThingTypeUID());
|
||||
if (thingType != null && thingType.getConfigDescriptionURI() != null) {
|
||||
configDescriptionValidator.validate(configurationParameters, thingType.getConfigDescriptionURI());
|
||||
if (thingType != null) {
|
||||
URI configDescriptionURI = thingType.getConfigDescriptionURI();
|
||||
if (configDescriptionURI != null) {
|
||||
configDescriptionValidator.validate(configurationParameters, configDescriptionURI);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void validateConfigurationParameters(Channel channel, Map<String, Object> configurationParameters) {
|
||||
ChannelType channelType = channelTypeRegistry.getChannelType(channel.getChannelTypeUID());
|
||||
if (channelType != null && channelType.getConfigDescriptionURI() != null) {
|
||||
configDescriptionValidator.validate(configurationParameters, channelType.getConfigDescriptionURI());
|
||||
if (channelType != null) {
|
||||
URI configDescriptionURI = channelType.getConfigDescriptionURI();
|
||||
if (configDescriptionURI != null) {
|
||||
configDescriptionValidator.validate(configurationParameters, configDescriptionURI);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue