diff options
author | Jim Hahn <jrh3@att.com> | 2021-01-07 10:03:30 -0500 |
---|---|---|
committer | Jim Hahn <jrh3@att.com> | 2021-01-07 10:04:58 -0500 |
commit | 4fd3271364741062cfc3b84b79425e93e3e3d864 (patch) | |
tree | 840208d1507269767b51e1b63c92f7e2a629a418 | |
parent | 8208cc4b1d8855eee3fe59c7a832abccb2a67ed7 (diff) |
Deprecate old validation annotations
Removed @Items and @Entries validation annotations, as they are no
longer needed.
Issue-ID: POLICY-2648
Change-Id: I68b78738d520ad96175567572e3c2f4a845dae44
Signed-off-by: Jim Hahn <jrh3@att.com>
11 files changed, 30 insertions, 710 deletions
diff --git a/common-parameters/src/main/java/org/onap/policy/common/parameters/BeanValidator.java b/common-parameters/src/main/java/org/onap/policy/common/parameters/BeanValidator.java index 6791c616..68455ac3 100644 --- a/common-parameters/src/main/java/org/onap/policy/common/parameters/BeanValidator.java +++ b/common-parameters/src/main/java/org/onap/policy/common/parameters/BeanValidator.java @@ -20,14 +20,11 @@ package org.onap.policy.common.parameters; -import java.lang.annotation.Annotation; import java.lang.reflect.Field; import java.util.Collection; import java.util.Map; import java.util.Map.Entry; import org.apache.commons.lang3.StringUtils; -import org.onap.policy.common.parameters.annotations.Entries; -import org.onap.policy.common.parameters.annotations.Items; import org.onap.policy.common.parameters.annotations.Max; import org.onap.policy.common.parameters.annotations.Min; import org.onap.policy.common.parameters.annotations.NotBlank; @@ -81,8 +78,6 @@ public class BeanValidator { validator.addAnnotation(Min.class, this::verMin); validator.addAnnotation(Pattern.class, this::verRegex); validator.addAnnotation(Valid.class, this::verCascade); - validator.addAnnotation(Items.class, this::verCollection); - validator.addAnnotation(Entries.class, this::verMap); } /** @@ -277,29 +272,6 @@ public class BeanValidator { * * @param result where to add the validation result * @param fieldName name of the field containing the collection - * @param annot validation annotations for individual items - * @param value value to be verified - * @return {@code true} if the next check should be performed, {@code false} otherwise - */ - public boolean verCollection(BeanValidationResult result, String fieldName, Annotation annot, Object value) { - - if (!(value instanceof Collection)) { - return true; - } - - ItemValidator itemValidator = makeItemValidator(annot); - if (itemValidator.isEmpty()) { - return true; - } - - return verCollection(result, fieldName, itemValidator, value); - } - - /** - * Validates the items in a collection. - * - * @param result where to add the validation result - * @param fieldName name of the field containing the collection * @param itemValidator validator for individual items within the list * @param value value to be verified * @return {@code true} if the next check should be performed, {@code false} otherwise @@ -332,57 +304,6 @@ public class BeanValidator { * * @param result where to add the validation result * @param fieldName name of the field containing the map - * @param annot validation annotations for individual entries - * @param value value to be verified - * @return {@code true} if the next check should be performed, {@code false} otherwise - */ - public boolean verMap(BeanValidationResult result, String fieldName, Entries annot, Object value) { - - if (!(value instanceof Map)) { - return true; - } - - EntryValidator entryValidator = makeEntryValidator(annot.key(), annot.value()); - - return verMap(result, fieldName, entryValidator, value); - } - - /** - * Validates the items in a Map. - * - * @param result where to add the validation result - * @param fieldName name of the field containing the map - * @param entryValidator validator for individual entries within the Map - * @param value value to be verified - * @return {@code true} if the next check should be performed, {@code false} otherwise - */ - public boolean verMap(BeanValidationResult result, String fieldName, EntryValidator entryValidator, Object value) { - - if (!(value instanceof Map) || entryValidator.isEmpty()) { - return true; - } - - Map<?, ?> map = (Map<?, ?>) value; - - BeanValidationResult result2 = new BeanValidationResult(fieldName, value); - - for (Entry<?, ?> entry : map.entrySet()) { - entryValidator.validateEntry(result2, entry); - } - - if (result2.isClean()) { - return true; - } - - result.addResult(result2); - return false; - } - - /** - * Validates the items in a Map. - * - * @param result where to add the validation result - * @param fieldName name of the field containing the map * @param keyValidator validator for an individual key within the Map entry * @param valueValidator validator for an individual value within the Map entry * @param value value to be verified @@ -446,27 +367,6 @@ public class BeanValidator { } /** - * Makes an item validator. - * - * @param annot container for the item annotations - * @return a new item validator - */ - protected ItemValidator makeItemValidator(Annotation annot) { - return new ItemValidator(this, annot); - } - - /** - * Makes an entry validator. - * - * @param keyAnnot container for the annotations associated with the entry key - * @param valueAnnot container for the annotations associated with the entry value - * @return a new entry validator - */ - protected EntryValidator makeEntryValidator(Annotation keyAnnot, Annotation valueAnnot) { - return new EntryValidator(this, keyAnnot, valueAnnot); - } - - /** * Translates a value to something printable, for use by * {@link ObjectValidationResult}. This default method simply returns the original * value. diff --git a/common-parameters/src/main/java/org/onap/policy/common/parameters/EntryValidator.java b/common-parameters/src/main/java/org/onap/policy/common/parameters/EntryValidator.java deleted file mode 100644 index 965c95e5..00000000 --- a/common-parameters/src/main/java/org/onap/policy/common/parameters/EntryValidator.java +++ /dev/null @@ -1,84 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * ONAP - * ================================================================================ - * Copyright (C) 2020 AT&T Intellectual Property. 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. - * ============LICENSE_END========================================================= - */ - -package org.onap.policy.common.parameters; - -import java.lang.annotation.Annotation; -import java.util.Map; - -/** - * Validator of an entry within a Map. - */ -public class EntryValidator { - private final ItemValidator keyValidator; - private final ItemValidator valueValidator; - - /** - * Constructs the object. - * - * @param validator provider of validation methods - * @param keyAnnotationContainer an annotation containing validation annotations to be - * applied to the entry key - * @param valueAnnotationContainer an annotation containing validation annotations to - * be applied to the entry value - */ - public EntryValidator(BeanValidator validator, Annotation keyAnnotationContainer, - Annotation valueAnnotationContainer) { - keyValidator = new ItemValidator(validator, keyAnnotationContainer); - valueValidator = new ItemValidator(validator, valueAnnotationContainer); - } - - public boolean isEmpty() { - return (keyValidator.isEmpty() && valueValidator.isEmpty()); - } - - /** - * Performs validation of a single entry. - * - * @param result validation results are added here - * @param entry value to be validated - */ - public <K, V> void validateEntry(BeanValidationResult result, Map.Entry<K, V> entry) { - String name = getName(entry); - - BeanValidationResult result2 = new BeanValidationResult(name, entry); - keyValidator.validateValue(result2, "key", entry.getKey()); - valueValidator.validateValue(result2, "value", entry.getValue()); - - if (!result2.isClean()) { - result.addResult(result2); - } - } - - /** - * Gets a name for the entry. - * - * @param entry entry whose name is to be determined - * @return a name for the entry - */ - protected <K, V> String getName(Map.Entry<K, V> entry) { - K key = entry.getKey(); - if (key == null) { - return ""; - } - - return key.toString(); - } -} diff --git a/common-parameters/src/main/java/org/onap/policy/common/parameters/FieldValidator.java b/common-parameters/src/main/java/org/onap/policy/common/parameters/FieldValidator.java index 58f3e833..efe48bb3 100644 --- a/common-parameters/src/main/java/org/onap/policy/common/parameters/FieldValidator.java +++ b/common-parameters/src/main/java/org/onap/policy/common/parameters/FieldValidator.java @@ -131,7 +131,7 @@ public class FieldValidator extends ValueValidator { return; } - Item2Validator itemValidator = new Item2Validator(validator, targs[0]); + ItemValidator itemValidator = new ItemValidator(validator, targs[0]); if (itemValidator.isEmpty()) { return; } @@ -159,8 +159,8 @@ public class FieldValidator extends ValueValidator { return; } - Item2Validator keyValidator = new Item2Validator(validator, targs[0]); - Item2Validator valueValidator = new Item2Validator(validator, targs[1]); + ItemValidator keyValidator = new ItemValidator(validator, targs[0]); + ItemValidator valueValidator = new ItemValidator(validator, targs[1]); if (keyValidator.isEmpty() && valueValidator.isEmpty()) { return; } diff --git a/common-parameters/src/main/java/org/onap/policy/common/parameters/Item2Validator.java b/common-parameters/src/main/java/org/onap/policy/common/parameters/Item2Validator.java deleted file mode 100644 index c82244d6..00000000 --- a/common-parameters/src/main/java/org/onap/policy/common/parameters/Item2Validator.java +++ /dev/null @@ -1,71 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * ONAP - * ================================================================================ - * Copyright (C) 2021 AT&T Intellectual Property. 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. - * ============LICENSE_END========================================================= - */ - -package org.onap.policy.common.parameters; - -import java.lang.annotation.Annotation; -import java.lang.reflect.AnnotatedType; - -/** - * Validator of an "item", which is typically found in a collection, or the key or value - * components of an entry in a Map. - */ -public class Item2Validator extends ValueValidator { - private final AnnotatedType annotatedType; - - /** - * Constructs the object. - * - * @param validator provider of validation methods - * @param annotatedType a type having validation annotations to be - * applied to the item - */ - public Item2Validator(BeanValidator validator, AnnotatedType annotatedType) { - this(validator, annotatedType, true); - } - - /** - * Constructs the object. - * - * @param validator provider of validation methods - * @param annotatedType a type having validation annotations to be - * applied to the item - * @param addValidators {@code true} if to add validators - */ - public Item2Validator(BeanValidator validator, AnnotatedType annotatedType, boolean addValidators) { - this.annotatedType = annotatedType; - - if (addValidators) { - validator.addValidators(this); - } - } - - /** - * Gets an annotation from the field or the class. - * - * @param annotClass annotation class of interest - * @return the annotation, or {@code null} if the {@link #annotatedType} does - * not contain the desired annotation - */ - @Override - public <T extends Annotation> T getAnnotation(Class<T> annotClass) { - return annotatedType.getAnnotation(annotClass); - } -} diff --git a/common-parameters/src/main/java/org/onap/policy/common/parameters/ItemValidator.java b/common-parameters/src/main/java/org/onap/policy/common/parameters/ItemValidator.java index 07efebbe..44b70cdf 100644 --- a/common-parameters/src/main/java/org/onap/policy/common/parameters/ItemValidator.java +++ b/common-parameters/src/main/java/org/onap/policy/common/parameters/ItemValidator.java @@ -2,7 +2,7 @@ * ============LICENSE_START======================================================= * ONAP * ================================================================================ - * Copyright (C) 2020-2021 AT&T Intellectual Property. All rights reserved. + * Copyright (C) 2021 AT&T Intellectual Property. 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. @@ -21,37 +21,36 @@ package org.onap.policy.common.parameters; import java.lang.annotation.Annotation; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; +import java.lang.reflect.AnnotatedType; /** * Validator of an "item", which is typically found in a collection, or the key or value * components of an entry in a Map. */ public class ItemValidator extends ValueValidator { - private final Annotation annotationContainer; + private final AnnotatedType annotatedType; /** * Constructs the object. * * @param validator provider of validation methods - * @param annotationContainer an annotation containing validation annotations to be + * @param annotatedType a type having validation annotations to be * applied to the item */ - public ItemValidator(BeanValidator validator, Annotation annotationContainer) { - this(validator, annotationContainer, true); + public ItemValidator(BeanValidator validator, AnnotatedType annotatedType) { + this(validator, annotatedType, true); } /** * Constructs the object. * * @param validator provider of validation methods - * @param annotationContainer an annotation containing validation annotations to be + * @param annotatedType a type having validation annotations to be * applied to the item * @param addValidators {@code true} if to add validators */ - public ItemValidator(BeanValidator validator, Annotation annotationContainer, boolean addValidators) { - this.annotationContainer = annotationContainer; + public ItemValidator(BeanValidator validator, AnnotatedType annotatedType, boolean addValidators) { + this.annotatedType = annotatedType; if (addValidators) { validator.addValidators(this); @@ -62,53 +61,11 @@ public class ItemValidator extends ValueValidator { * Gets an annotation from the field or the class. * * @param annotClass annotation class of interest - * @return the annotation, or {@code null} if the {@link #annotationContainer} does + * @return the annotation, or {@code null} if the {@link #annotatedType} does * not contain the desired annotation */ @Override public <T extends Annotation> T getAnnotation(Class<T> annotClass) { - try { - for (Method meth : annotationContainer.getClass().getDeclaredMethods()) { - T annot = getAnnotation2(annotClass, meth); - if (annot != null) { - return annot; - } - } - } catch (RuntimeException | IllegalAccessException | InvocationTargetException e) { - throw new IllegalArgumentException("cannot determine " + annotClass.getName(), e); - } - - return null; - } - - /** - * Note: this is only marked "protected" so it can be overridden for junit testing. - */ - protected <T extends Annotation> T getAnnotation2(Class<T> annotClass, Method method) - throws IllegalAccessException, IllegalArgumentException, InvocationTargetException { - - Class<?> ret = method.getReturnType(); - if (!ret.isArray()) { - return null; - } - - Class<?> comp = ret.getComponentType(); - if (comp != annotClass) { - return null; - } - - // get the array for this type of annotation - @SuppressWarnings("unchecked") - T[] arrobj = (T[]) method.invoke(annotationContainer); - - if (arrobj.length == 0) { - return null; - } - - if (arrobj.length > 1) { - throw new IllegalArgumentException("extra item annotations of type: " + annotClass.getName()); - } - - return arrobj[0]; + return annotatedType.getAnnotation(annotClass); } } diff --git a/common-parameters/src/main/java/org/onap/policy/common/parameters/annotations/Entries.java b/common-parameters/src/main/java/org/onap/policy/common/parameters/annotations/Entries.java deleted file mode 100644 index 89c9ce26..00000000 --- a/common-parameters/src/main/java/org/onap/policy/common/parameters/annotations/Entries.java +++ /dev/null @@ -1,45 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * ONAP - * ================================================================================ - * Copyright (C) 2020 AT&T Intellectual Property. 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. - * ============LICENSE_END========================================================= - */ - -package org.onap.policy.common.parameters.annotations; - -import static java.lang.annotation.ElementType.FIELD; -import static java.lang.annotation.RetentionPolicy.RUNTIME; - -import java.lang.annotation.Retention; -import java.lang.annotation.Target; - -/** - * Validations on entries within a Map. - */ -@Retention(RUNTIME) -@Target(FIELD) -public @interface Entries { - - /** - * Validations to perform on each entry's key. - */ - Items key(); - - /** - * Validations to perform on each entry's value. - */ - Items value(); -} diff --git a/common-parameters/src/main/java/org/onap/policy/common/parameters/annotations/Items.java b/common-parameters/src/main/java/org/onap/policy/common/parameters/annotations/Items.java deleted file mode 100644 index d022d95e..00000000 --- a/common-parameters/src/main/java/org/onap/policy/common/parameters/annotations/Items.java +++ /dev/null @@ -1,66 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * ONAP - * ================================================================================ - * Copyright (C) 2020 AT&T Intellectual Property. 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. - * ============LICENSE_END========================================================= - */ - -package org.onap.policy.common.parameters.annotations; - -import static java.lang.annotation.ElementType.FIELD; -import static java.lang.annotation.RetentionPolicy.RUNTIME; - -import java.lang.annotation.Retention; -import java.lang.annotation.Target; - -/** - * Validations on individual items, typically within a collection. - */ -@Retention(RUNTIME) -@Target(FIELD) -public @interface Items { - - /** - * Validates the item is not {@code null}. - */ - NotNull[] notNull() default {}; - - /** - * Validates the item is not blank. - */ - NotBlank[] notBlank() default {}; - - /** - * Validates the item matches a regular expression. - */ - Pattern[] pattern() default {}; - - /** - * Validates the item is not greater than a certain value. - */ - Max[] max() default {}; - - /** - * Validates the item is not less than a certain value. - */ - Min[] min() default {}; - - /** - * Validates the item is valid, using a {@link BeanValidator}. - */ - Valid[] valid() default {}; - -} diff --git a/common-parameters/src/test/java/org/onap/policy/common/parameters/TestBeanValidator.java b/common-parameters/src/test/java/org/onap/policy/common/parameters/TestBeanValidator.java index 00ed972c..1095ff40 100644 --- a/common-parameters/src/test/java/org/onap/policy/common/parameters/TestBeanValidator.java +++ b/common-parameters/src/test/java/org/onap/policy/common/parameters/TestBeanValidator.java @@ -31,7 +31,6 @@ import java.util.function.Consumer; import lombok.Getter; import org.junit.Before; import org.junit.Test; -import org.onap.policy.common.parameters.annotations.Items; import org.onap.policy.common.parameters.annotations.Max; import org.onap.policy.common.parameters.annotations.Min; import org.onap.policy.common.parameters.annotations.NotBlank; @@ -453,11 +452,10 @@ public class TestBeanValidator { public void testVerCollection() { @Getter class Container { - @Items(min = @Min(5)) - List<Integer> items; + List<@Min(5) Integer> items; // not a collection - should not be checked - @Items(valid = {@Valid}) + @Valid String strValue; String noAnnotations; diff --git a/common-parameters/src/test/java/org/onap/policy/common/parameters/TestEntryValidator.java b/common-parameters/src/test/java/org/onap/policy/common/parameters/TestEntryValidator.java deleted file mode 100644 index 1c93d6c8..00000000 --- a/common-parameters/src/test/java/org/onap/policy/common/parameters/TestEntryValidator.java +++ /dev/null @@ -1,108 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * ONAP - * ================================================================================ - * Copyright (C) 2021 AT&T Intellectual Property. 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. - * ============LICENSE_END========================================================= - */ - -package org.onap.policy.common.parameters; - -import static org.assertj.core.api.Assertions.assertThat; - -import java.util.HashMap; -import java.util.Map; -import org.junit.Before; -import org.junit.Test; -import org.onap.policy.common.parameters.annotations.Items; -import org.onap.policy.common.parameters.annotations.Min; -import org.onap.policy.common.parameters.annotations.NotBlank; - -public class TestEntryValidator extends ValidatorUtil { - - // annotations for keys and values - - @Items() - private int emptyAnnot; - - @Items(notBlank = {@NotBlank}) - private int keyAnnot; - - @Items(min = {@Min(5)}) - private int valueAnnot; - - - @Before - public void setUp() { - bean = new BeanValidator(); - } - - @Test - public void testIsEmpty() { - // no annotations for key or value - assertThat(new EntryValidator(bean, getAnnot("emptyAnnot"), getAnnot("emptyAnnot")).isEmpty()).isTrue(); - - // annotations for key, value, or both - assertThat(new EntryValidator(bean, getAnnot("keyAnnot"), getAnnot("emptyAnnot")).isEmpty()).isFalse(); - assertThat(new EntryValidator(bean, getAnnot("emptyAnnot"), getAnnot("valueAnnot")).isEmpty()).isFalse(); - assertThat(new EntryValidator(bean, getAnnot("keyAnnot"), getAnnot("valueAnnot")).isEmpty()).isFalse(); - } - - @Test - public void testValidateEntry() { - EntryValidator validator = new EntryValidator(bean, getAnnot("keyAnnot"), getAnnot("valueAnnot")); - - // valid key & value - BeanValidationResult result = new BeanValidationResult(MY_NAME, this); - validator.validateEntry(result, makeEntry(HELLO, 10)); - assertThat(result.getResult()).isNull(); - - // invalid key - result = new BeanValidationResult(MY_NAME, this); - validator.validateEntry(result, makeEntry("", 20)); - assertThat(result.getResult()).doesNotContain("\"value\"").contains("\"key\"", "blank"); - - // invalid value - result = new BeanValidationResult(MY_NAME, this); - validator.validateEntry(result, makeEntry(HELLO, -10)); - assertThat(result.getResult()).contains(HELLO, "\"value\"", "-10").doesNotContain("\"key\""); - - // both invalid - result = new BeanValidationResult(MY_NAME, this); - validator.validateEntry(result, makeEntry("", -100)); - assertThat(result.getResult()).contains("\"key\"", "blank", "\"value\"", "-100"); - } - - @Test - public void testGetName() { - EntryValidator validator = new EntryValidator(bean, getAnnot("emptyAnnot"), getAnnot("emptyAnnot")); - assertThat(validator.getName(makeEntry(null, 0))).isEmpty(); - assertThat(validator.getName(makeEntry("", 0))).isEmpty(); - assertThat(validator.getName(makeEntry(HELLO, 0))).isEqualTo(HELLO); - } - - /** - * Makes a Map entry with the given key and value. - * - * @param key desired key - * @param value desired value - * @return a new Map entry - */ - Map.Entry<String, Integer> makeEntry(String key, int value) { - HashMap<String, Integer> map = new HashMap<>(); - map.put(key, value); - return map.entrySet().iterator().next(); - } -} diff --git a/common-parameters/src/test/java/org/onap/policy/common/parameters/TestItem2Validator.java b/common-parameters/src/test/java/org/onap/policy/common/parameters/TestItem2Validator.java deleted file mode 100644 index f8d38642..00000000 --- a/common-parameters/src/test/java/org/onap/policy/common/parameters/TestItem2Validator.java +++ /dev/null @@ -1,121 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * ONAP - * ================================================================================ - * Copyright (C) 2021 AT&T Intellectual Property. 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. - * ============LICENSE_END========================================================= - */ - -package org.onap.policy.common.parameters; - -import static java.lang.annotation.ElementType.FIELD; -import static java.lang.annotation.RetentionPolicy.RUNTIME; -import static org.assertj.core.api.Assertions.assertThat; - -import java.lang.annotation.Retention; -import java.lang.annotation.Target; -import org.junit.Before; -import org.junit.Test; -import org.onap.policy.common.parameters.annotations.Min; -import org.onap.policy.common.parameters.annotations.NotBlank; -import org.onap.policy.common.parameters.annotations.NotNull; - -public class TestItem2Validator extends ValidatorUtil { - - // annotated fields - each field must have exactly one annotation - - /** - * This annotation does not contain a method returning an array. - */ - @Min(value = 0) - private int notArray; - - /** - * This annotation doesn't contain any annotations that the {@link BeanValidator} - * recognizes. - */ - @Simple - private int mismatch; - - /** - * No annotations. - */ - @SuppressWarnings("unused") - private int noAnnotations; - - /** - * One matching annotation. - */ - @NotNull - private int match; - - /** - * Multiple matching annotations. - */ - @NotNull - @NotBlank - private String multiMatch; - - - @Before - public void setUp() { - bean = new BeanValidator(); - } - - @Test - public void testGetAnnotation() { - // no matches - assertThat(new Item2Validator(bean, getAnnotType("noAnnotations"), true).isEmpty()).isTrue(); - - // had a match - assertThat(new Item2Validator(bean, getAnnotType("match"), true).checkers).hasSize(1); - - // multiple matches - Item2Validator validator = new Item2Validator(bean, getAnnotType("multiMatch"), true); - assertThat(validator.checkers).hasSize(2); - - BeanValidationResult result = new BeanValidationResult(MY_NAME, this); - validator.validateValue(result, MY_FIELD, HELLO); - assertThat(result.getResult()).isNull(); - - result = new BeanValidationResult(MY_NAME, this); - validator.validateValue(result, MY_FIELD, null); - assertThat(result.getResult()).isNotNull(); - - result = new BeanValidationResult(MY_NAME, this); - validator.validateValue(result, MY_FIELD, ""); - assertThat(result.getResult()).isNotNull(); - } - - @Test - public void testItem2ValidatorBeanValidatorAnnotation() { - assertThat(new Item2Validator(bean, getAnnotType("match")).isEmpty()).isFalse(); - } - - @Test - public void testItem2ValidatorBeanValidatorAnnotationBoolean() { - assertThat(new Item2Validator(bean, getAnnotType("match"), true).isEmpty()).isFalse(); - - assertThat(new Item2Validator(bean, getAnnotType("match"), false).isEmpty()).isTrue(); - } - - // these annotations are not recognized by the BeanValidator - - @Retention(RUNTIME) - @Target(FIELD) - public @interface Simple { - - } -} diff --git a/common-parameters/src/test/java/org/onap/policy/common/parameters/TestItemValidator.java b/common-parameters/src/test/java/org/onap/policy/common/parameters/TestItemValidator.java index 2a0394dc..cadcfdee 100644 --- a/common-parameters/src/test/java/org/onap/policy/common/parameters/TestItemValidator.java +++ b/common-parameters/src/test/java/org/onap/policy/common/parameters/TestItemValidator.java @@ -23,15 +23,11 @@ package org.onap.policy.common.parameters; import static java.lang.annotation.ElementType.FIELD; import static java.lang.annotation.RetentionPolicy.RUNTIME; import static org.assertj.core.api.Assertions.assertThat; -import static org.assertj.core.api.Assertions.assertThatThrownBy; -import java.lang.annotation.Annotation; import java.lang.annotation.Retention; import java.lang.annotation.Target; -import java.lang.reflect.Method; import org.junit.Before; import org.junit.Test; -import org.onap.policy.common.parameters.annotations.Items; import org.onap.policy.common.parameters.annotations.Min; import org.onap.policy.common.parameters.annotations.NotBlank; import org.onap.policy.common.parameters.annotations.NotNull; @@ -50,31 +46,26 @@ public class TestItemValidator extends ValidatorUtil { * This annotation doesn't contain any annotations that the {@link BeanValidator} * recognizes. */ - @SimpleItems(simple = {@Simple}) + @Simple private int mismatch; /** - * Annotation with no sub-annotations. + * No annotations. */ - @Items() + @SuppressWarnings("unused") private int noAnnotations; /** - * One matching sub-annotation. + * One matching annotation. */ - @Items(notNull = {@NotNull}) + @NotNull private int match; /** - * Excess matching sub-annotations of a single type. - */ - @Items(notNull = {@NotNull, @NotNull}) - private int excess; - - /** * Multiple matching annotations. */ - @Items(notNull = {@NotNull}, notBlank = {@NotBlank}) + @NotNull + @NotBlank private String multiMatch; @@ -86,24 +77,14 @@ public class TestItemValidator extends ValidatorUtil { @Test public void testGetAnnotation() { // no matches - assertThat(new ItemValidator(bean, getAnnot("noAnnotations"), true).isEmpty()).isTrue(); + assertThat(new ItemValidator(bean, getAnnotType("noAnnotations"), true).isEmpty()).isTrue(); // had a match - assertThat(new ItemValidator(bean, getAnnot("match"), true).isEmpty()).isFalse(); - - // with an exception - IllegalAccessException ex = new IllegalAccessException("expected exception"); - - assertThatThrownBy(() -> new ItemValidator(bean, getAnnot("match"), true) { - @Override - protected <T extends Annotation> T getAnnotation2(Class<T> annotClass, Method method) - throws IllegalAccessException { - throw ex; - } - }).hasCause(ex); + assertThat(new ItemValidator(bean, getAnnotType("match"), true).checkers).hasSize(1); // multiple matches - ItemValidator validator = new ItemValidator(bean, getAnnot("multiMatch"), true); + ItemValidator validator = new ItemValidator(bean, getAnnotType("multiMatch"), true); + assertThat(validator.checkers).hasSize(2); BeanValidationResult result = new BeanValidationResult(MY_NAME, this); validator.validateValue(result, MY_FIELD, HELLO); @@ -120,26 +101,14 @@ public class TestItemValidator extends ValidatorUtil { @Test public void testItemValidatorBeanValidatorAnnotation() { - assertThat(new ItemValidator(bean, getAnnot("match")).isEmpty()).isFalse(); + assertThat(new ItemValidator(bean, getAnnotType("match")).isEmpty()).isFalse(); } @Test public void testItemValidatorBeanValidatorAnnotationBoolean() { - assertThat(new ItemValidator(bean, getAnnot("match"), true).isEmpty()).isFalse(); - - assertThat(new ItemValidator(bean, getAnnot("match"), false).isEmpty()).isTrue(); - } + assertThat(new ItemValidator(bean, getAnnotType("match"), true).isEmpty()).isFalse(); - @Test - public void testGetAnnotation2() { - assertThat(new ItemValidator(bean, getAnnot("notArray"), true).isEmpty()).isTrue(); - assertThat(new ItemValidator(bean, getAnnot("mismatch"), true).isEmpty()).isTrue(); - assertThat(new ItemValidator(bean, getAnnot("noAnnotations"), true).isEmpty()).isTrue(); - - assertThat(new ItemValidator(bean, getAnnot("match"), true).isEmpty()).isFalse(); - - Annotation excess = getAnnot("excess"); - assertThatThrownBy(() -> new ItemValidator(bean, excess, true)).isInstanceOf(IllegalArgumentException.class); + assertThat(new ItemValidator(bean, getAnnotType("match"), false).isEmpty()).isTrue(); } // these annotations are not recognized by the BeanValidator @@ -149,13 +118,4 @@ public class TestItemValidator extends ValidatorUtil { public @interface Simple { } - - @Retention(RUNTIME) - @Target(FIELD) - public @interface SimpleItems { - /** - * Validates that it's simple. - */ - Simple[] simple() default {}; - } } |