diff options
author | Jim Hahn <jrh3@att.com> | 2020-12-17 12:07:14 -0500 |
---|---|---|
committer | Jim Hahn <jrh3@att.com> | 2020-12-17 18:52:46 -0500 |
commit | 6345dce40405740dc09176c45dae03baeb939b8e (patch) | |
tree | 07804a2f9e2dfd1083975c79059346a9cf778b1d | |
parent | 4c4946e339942863e73e20726dd95aaacfcfb5a6 (diff) |
Use ValidationResult for models v2.0
Policy models uses PfValidationXxx classes which are totally unrelated
to ValidationResult in policy common. This precludes the use of various
utility methods and annotations for doing validation. Modified policy
models to use ValidationResult instead.
This approach uses function calls, though a future approach could make
use of annotations instead.
Issue-ID: POLICY-2648
Change-Id: I9760f1dc46902ab6bef7f440f3caf5e951660a5d
Signed-off-by: Jim Hahn <jrh3@att.com>
87 files changed, 1444 insertions, 2539 deletions
diff --git a/models-base/pom.xml b/models-base/pom.xml index 75134b79a..cf9c27eef 100644 --- a/models-base/pom.xml +++ b/models-base/pom.xml @@ -33,6 +33,11 @@ <dependencies> <dependency> + <groupId>org.onap.policy.common</groupId> + <artifactId>common-parameters</artifactId> + <version>${policy.common.version}</version> + </dependency> + <dependency> <groupId>org.onap.policy.models</groupId> <artifactId>policy-models-errors</artifactId> <version>${project.version}</version> diff --git a/models-base/src/main/java/org/onap/policy/models/base/PfConcept.java b/models-base/src/main/java/org/onap/policy/models/base/PfConcept.java index 5273bd39e..394eb89f2 100644 --- a/models-base/src/main/java/org/onap/policy/models/base/PfConcept.java +++ b/models-base/src/main/java/org/onap/policy/models/base/PfConcept.java @@ -1,7 +1,7 @@ /*- * ============LICENSE_START======================================================= * Copyright (C) 2019 Nordix Foundation. - * Modifications Copyright (C) 2019 AT&T Intellectual Property. All rights reserved. + * Modifications Copyright (C) 2019-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. @@ -30,7 +30,7 @@ import lombok.NonNull; * and interfaces on all concepts that are sub-classes of this class. */ -public abstract class PfConcept implements Serializable, Comparable<PfConcept> { +public abstract class PfConcept extends Validated implements Serializable, Comparable<PfConcept> { private static final long serialVersionUID = -7434939557282697490L; /** @@ -65,15 +65,6 @@ public abstract class PfConcept implements Serializable, Comparable<PfConcept> { public abstract List<PfKey> getKeys(); /** - * Validate that this concept is structurally correct. - * - * @param result the parameter in which the result of the validation will be returned - * @return the validation result that was passed in in the @{link result} field with the result of this validation - * added - */ - public abstract PfValidationResult validate(@NonNull final PfValidationResult result); - - /** * Clean this concept, tidy up any superfluous information such as leading and trailing white space. */ public abstract void clean(); diff --git a/models-base/src/main/java/org/onap/policy/models/base/PfConceptContainer.java b/models-base/src/main/java/org/onap/policy/models/base/PfConceptContainer.java index 863a3ef02..484632f7c 100644 --- a/models-base/src/main/java/org/onap/policy/models/base/PfConceptContainer.java +++ b/models-base/src/main/java/org/onap/policy/models/base/PfConceptContainer.java @@ -45,7 +45,8 @@ import lombok.Data; import lombok.EqualsAndHashCode; import lombok.NonNull; import org.apache.commons.lang3.StringUtils; -import org.onap.policy.models.base.PfValidationResult.ValidationResult; +import org.onap.policy.common.parameters.BeanValidationResult; +import org.onap.policy.common.parameters.ValidationResult; // @formatter:off /** @@ -241,19 +242,11 @@ public class PfConceptContainer<C extends PfConcept, A extends PfNameVersion> ex } @Override - public PfValidationResult validate(@NonNull final PfValidationResult resultIn) { - PfValidationResult result = resultIn; + public BeanValidationResult validate(@NonNull String fieldName) { + BeanValidationResult result = new BeanValidationResult(fieldName, this); - if (key.equals(PfConceptKey.getNullKey())) { - result.addValidationMessage( - new PfValidationMessage(key, this.getClass(), ValidationResult.INVALID, "key is a null key")); - } - - result = key.validate(result); - - if (!conceptMap.isEmpty()) { - result = validateConceptMap(result); - } + result.addResult(validateKeyNotNull("key", key)); + result.addResult(validateConceptMap()); return result; } @@ -261,29 +254,31 @@ public class PfConceptContainer<C extends PfConcept, A extends PfNameVersion> ex /** * Validate the concept map of the container. * - * @param resultIn the incoming validation results so far - * @return the validation results with the results of this validation added + * @return the validation result */ - private PfValidationResult validateConceptMap(final PfValidationResult resultIn) { - PfValidationResult result = resultIn; + private ValidationResult validateConceptMap() { + BeanValidationResult result = new BeanValidationResult("conceptMap", conceptMap); for (final Entry<PfConceptKey, C> conceptEntry : conceptMap.entrySet()) { + BeanValidationResult result2 = null; + if (conceptEntry.getKey().equals(PfConceptKey.getNullKey())) { - result.addValidationMessage(new PfValidationMessage(key, this.getClass(), ValidationResult.INVALID, - "key on concept entry " + conceptEntry.getKey() + " may not be the null key")); + addResult(result, "key on concept entry", conceptEntry.getKey(), IS_A_NULL_KEY); } else if (conceptEntry.getValue() == null) { - result.addValidationMessage(new PfValidationMessage(key, this.getClass(), ValidationResult.INVALID, - "value on concept entry " + conceptEntry.getKey() + " may not be null")); + result2 = new BeanValidationResult(conceptEntry.getKey().getId(), conceptEntry.getKey()); + addResult(result2, "value", conceptEntry.getValue(), IS_NULL); } else if (!conceptEntry.getKey().equals(conceptEntry.getValue().getKey())) { - result.addValidationMessage(new PfValidationMessage(key, this.getClass(), ValidationResult.INVALID, - "key on concept entry key " + conceptEntry.getKey() + " does not equal concept value key " - + conceptEntry.getValue().getKey())); - result = conceptEntry.getValue().validate(result); + result2 = new BeanValidationResult(conceptEntry.getKey().getId(), conceptEntry.getKey()); + addResult(result2, "value", conceptEntry.getValue(), "does not equal concept key"); + result2.addResult(conceptEntry.getValue().validate("value")); } else { - result = conceptEntry.getValue().validate(result); + result2 = new BeanValidationResult(conceptEntry.getKey().getId(), conceptEntry.getKey()); + result2.addResult(conceptEntry.getValue().validate("value")); } + + result.addResult(result2); } - return result; + return (result.isClean() ? null : result); } @Override diff --git a/models-base/src/main/java/org/onap/policy/models/base/PfKeyImpl.java b/models-base/src/main/java/org/onap/policy/models/base/PfKeyImpl.java index 81066c37c..3cbef75f9 100644 --- a/models-base/src/main/java/org/onap/policy/models/base/PfKeyImpl.java +++ b/models-base/src/main/java/org/onap/policy/models/base/PfKeyImpl.java @@ -1,7 +1,7 @@ /* * ============LICENSE_START======================================================= * Copyright (C) 2019-2020 Nordix Foundation. - * Modifications Copyright (C) 2019 AT&T Intellectual Property. All rights reserved. + * Modifications Copyright (C) 2019-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. @@ -26,8 +26,9 @@ import java.util.List; import lombok.Getter; import lombok.NonNull; import lombok.ToString; +import org.onap.policy.common.parameters.BeanValidationResult; +import org.onap.policy.common.parameters.ValidationResult; import org.onap.policy.common.utils.validation.Assertions; -import org.onap.policy.models.base.PfValidationResult.ValidationResult; /** * A key, upon which other key subclasses can be built, providing implementations of the methods. @@ -241,20 +242,11 @@ public abstract class PfKeyImpl extends PfKey { } @Override - public PfValidationResult validate(final PfValidationResult result) { - final String nameValidationErrorMessage = - Assertions.getStringParameterValidationMessage(NAME_TOKEN, getName(), getNameRegEx()); - if (nameValidationErrorMessage != null) { - result.addValidationMessage(new PfValidationMessage(this, this.getClass(), ValidationResult.INVALID, - "name invalid-" + nameValidationErrorMessage)); - } + public ValidationResult validate(@NonNull String fieldName) { + BeanValidationResult result = new BeanValidationResult(fieldName, this); - final String versionValidationErrorMessage = - Assertions.getStringParameterValidationMessage(VERSION_TOKEN, getVersion(), getVersionRegEx()); - if (versionValidationErrorMessage != null) { - result.addValidationMessage(new PfValidationMessage(this, this.getClass(), ValidationResult.INVALID, - "version invalid-" + versionValidationErrorMessage)); - } + result.addResult(validateRegex(NAME_TOKEN, getName(), getNameRegEx())); + result.addResult(validateRegex(VERSION_TOKEN, getVersion(), getVersionRegEx())); return result; } diff --git a/models-base/src/main/java/org/onap/policy/models/base/PfKeyUse.java b/models-base/src/main/java/org/onap/policy/models/base/PfKeyUse.java index 03873236c..616284daf 100644 --- a/models-base/src/main/java/org/onap/policy/models/base/PfKeyUse.java +++ b/models-base/src/main/java/org/onap/policy/models/base/PfKeyUse.java @@ -1,7 +1,7 @@ /*- * ============LICENSE_START======================================================= * Copyright (C) 2019 Nordix Foundation. - * Modifications Copyright (C) 2019 AT&T Intellectual Property. All rights reserved. + * Modifications Copyright (C) 2019-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. @@ -25,8 +25,9 @@ import java.util.List; import lombok.EqualsAndHashCode; import lombok.NonNull; import lombok.ToString; +import org.onap.policy.common.parameters.BeanValidationResult; +import org.onap.policy.common.parameters.ValidationResult; import org.onap.policy.common.utils.validation.Assertions; -import org.onap.policy.models.base.PfValidationResult.ValidationResult; /** * This class records a usage of a key in the system. When the list of keys being used by a concept @@ -134,12 +135,10 @@ public class PfKeyUse extends PfKey { } @Override - public PfValidationResult validate(@NonNull final PfValidationResult result) { - if (usedKey.isNullKey()) { - result.addValidationMessage(new PfValidationMessage(usedKey, this.getClass(), ValidationResult.INVALID, - "usedKey is a null key")); - } - return usedKey.validate(result); + public ValidationResult validate(@NonNull String fieldName) { + BeanValidationResult result = new BeanValidationResult(fieldName, this); + result.addResult(validateKeyNotNull("usedKey", usedKey)); + return result; } @Override diff --git a/models-base/src/main/java/org/onap/policy/models/base/PfModel.java b/models-base/src/main/java/org/onap/policy/models/base/PfModel.java index 340f4e3b2..c87874774 100644 --- a/models-base/src/main/java/org/onap/policy/models/base/PfModel.java +++ b/models-base/src/main/java/org/onap/policy/models/base/PfModel.java @@ -1,7 +1,7 @@ /*- * ============LICENSE_START======================================================= * Copyright (C) 2019 Nordix Foundation. - * Modifications Copyright (C) 2019 AT&T Intellectual Property. All rights reserved. + * Modifications Copyright (C) 2019-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. @@ -32,8 +32,10 @@ import javax.persistence.Table; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.NonNull; +import org.onap.policy.common.parameters.BeanValidationResult; +import org.onap.policy.common.parameters.ObjectValidationResult; +import org.onap.policy.common.parameters.ValidationStatus; import org.onap.policy.common.utils.validation.Assertions; -import org.onap.policy.models.base.PfValidationResult.ValidationResult; /** * This class is the base class for all models in the Policy Framework. All model classes inherit @@ -56,7 +58,7 @@ import org.onap.policy.models.base.PfValidationResult.ValidationResult; @Data @EqualsAndHashCode(callSuper = false) public abstract class PfModel extends PfConcept { - private static final String IS_A_NULL_KEY = " is a null key"; + private static final String KEYS_TOKEN = "keys"; private static final long serialVersionUID = -771659065637205430L; @@ -110,15 +112,10 @@ public abstract class PfModel extends PfConcept { } @Override - public PfValidationResult validate(@NonNull final PfValidationResult resultIn) { - PfValidationResult result = resultIn; + public BeanValidationResult validate(@NonNull String fieldName) { + BeanValidationResult result = new BeanValidationResult(fieldName, this); - if (key.isNullKey()) { - result.addValidationMessage( - new PfValidationMessage(key, this.getClass(), ValidationResult.INVALID, "key is a null key")); - } - - result = key.validate(result); + result.addResult(validateKeyNotNull("key", key)); // Key consistency check final Set<PfConceptKey> artifactKeySet = new TreeSet<>(); @@ -128,9 +125,9 @@ public abstract class PfModel extends PfConcept { for (final PfKey pfKey : this.getKeys()) { // Check for the two type of keys we have if (pfKey instanceof PfConceptKey) { - result = validateArtifactKeyInModel((PfConceptKey) pfKey, artifactKeySet, result); + validateArtifactKeyInModel((PfConceptKey) pfKey, artifactKeySet, result); } else if (pfKey instanceof PfReferenceKey) { - result = validateReferenceKeyInModel((PfReferenceKey) pfKey, referenceKeySet, result); + validateReferenceKeyInModel((PfReferenceKey) pfKey, referenceKeySet, result); } else { // It must be a PfKeyUse, nothing else is legal usedKeySet.add((PfKeyUse) pfKey); @@ -140,12 +137,11 @@ public abstract class PfModel extends PfConcept { // Check all reference keys have correct parent keys for (final PfReferenceKey referenceKey : referenceKeySet) { if (!artifactKeySet.contains(referenceKey.getParentConceptKey())) { - result.addValidationMessage(new PfValidationMessage(key, this.getClass(), ValidationResult.INVALID, - "parent artifact key not found for reference key " + referenceKey)); + addResult(result, "reference key", referenceKey, "parent artifact key not found"); } } - result = validateKeyUses(usedKeySet, artifactKeySet, referenceKeySet, result); + validateKeyUses(usedKeySet, artifactKeySet, referenceKeySet, result); return result; } @@ -156,78 +152,69 @@ public abstract class PfModel extends PfConcept { * @param artifactKey The artifact key to check * @param artifactKeySet The set of artifact keys encountered so far, this key is appended to * the set - * @param result The validation result to append to - * @return the result of the validation + * @param result where to add the results */ - private PfValidationResult validateArtifactKeyInModel(final PfConceptKey artifactKey, - final Set<PfConceptKey> artifactKeySet, final PfValidationResult result) { - // Null key check - if (artifactKey.isNullKey()) { - result.addValidationMessage(new PfValidationMessage(key, this.getClass(), ValidationResult.INVALID, - "key " + artifactKey + IS_A_NULL_KEY)); - } + private void validateArtifactKeyInModel(final PfConceptKey artifactKey, + final Set<PfConceptKey> artifactKeySet, final BeanValidationResult result) { + + result.addResult(validateKeyNotNull(KEYS_TOKEN, artifactKey)); + + BeanValidationResult result2 = new BeanValidationResult(KEYS_TOKEN, artifactKey); // Null key name start check if (artifactKey.getName().toUpperCase().startsWith(PfKey.NULL_KEY_NAME)) { - result.addValidationMessage(new PfValidationMessage(key, this.getClass(), ValidationResult.INVALID, - "key " + artifactKey + " name starts with keyword " + PfKey.NULL_KEY_NAME)); + addResult(result2, "name of " + artifactKey.getId(), artifactKey.getName(), + "starts with keyword " + PfKey.NULL_KEY_NAME); } // Unique key check if (artifactKeySet.contains(artifactKey)) { - result.addValidationMessage(new PfValidationMessage(key, this.getClass(), ValidationResult.INVALID, - "duplicate key " + artifactKey + " found")); + addResult(result, KEYS_TOKEN, artifactKey, "duplicate key"); } else { artifactKeySet.add(artifactKey); } - - return result; } /** * Check for consistent usage of a reference key in the model. * - * @param artifactKey The reference key to check + * @param referenceKey The reference key to check * @param referenceKeySet The set of reference keys encountered so far, this key is appended to * the set - * @param result The validation result to append to - * @return the result of the validation + * @param result where to add the results */ - private PfValidationResult validateReferenceKeyInModel(final PfReferenceKey referenceKey, - final Set<PfReferenceKey> referenceKeySet, final PfValidationResult result) { + private void validateReferenceKeyInModel(final PfReferenceKey referenceKey, + final Set<PfReferenceKey> referenceKeySet, final BeanValidationResult result) { // Null key check if (referenceKey.isNullKey()) { - result.addValidationMessage(new PfValidationMessage(key, this.getClass(), ValidationResult.INVALID, - "key " + referenceKey + IS_A_NULL_KEY)); + addResult(result, KEYS_TOKEN, referenceKey, IS_A_NULL_KEY); } + BeanValidationResult result2 = new BeanValidationResult(KEYS_TOKEN, referenceKey); + // Null parent key check if (referenceKey.getParentConceptKey().isNullKey()) { - result.addValidationMessage(new PfValidationMessage(key, this.getClass(), ValidationResult.INVALID, - "parent artifact key of key " + referenceKey + IS_A_NULL_KEY)); + addResult(result2, "parent key of " + referenceKey.getId(), referenceKey.getParentConceptKey().getId(), + IS_A_NULL_KEY); } // Null local name check if (referenceKey.getLocalName().equals(PfKey.NULL_KEY_NAME)) { - result.addValidationMessage(new PfValidationMessage(key, this.getClass(), ValidationResult.INVALID, - "key " + referenceKey + " has a null local name")); + addResult(result2, "local name of " + referenceKey.getId(), referenceKey.getLocalName(), IS_NULL); } // Null key name start check if (referenceKey.getParentConceptKey().getName().toUpperCase().startsWith(PfKey.NULL_KEY_NAME)) { - result.addValidationMessage(new PfValidationMessage(key, this.getClass(), ValidationResult.INVALID, - "key " + referenceKey + " parent name starts with keyword " + PfKey.NULL_KEY_NAME)); + addResult(result2, "parent name of " + referenceKey.getId(), referenceKey.getParentConceptKey().getName(), + "starts with keyword " + PfKey.NULL_KEY_NAME); } // Unique key check if (referenceKeySet.contains(referenceKey)) { - result.addValidationMessage(new PfValidationMessage(key, this.getClass(), ValidationResult.INVALID, - "duplicate key " + referenceKey + " found")); + addResult(result, KEYS_TOKEN, referenceKey, "duplicate key"); } else { referenceKeySet.add(referenceKey); } - - return result; } /** @@ -238,29 +225,26 @@ public abstract class PfModel extends PfConcept { * the set * @param referenceKeySet The set of reference keys encountered so far, this key is appended to * the set - * @param result The validation result to append to - * @return the result of the validation + * @param result where to add the results */ - private PfValidationResult validateKeyUses(final Set<PfKeyUse> usedKeySet, final Set<PfConceptKey> artifactKeySet, - final Set<PfReferenceKey> referenceKeySet, final PfValidationResult result) { + private void validateKeyUses(final Set<PfKeyUse> usedKeySet, final Set<PfConceptKey> artifactKeySet, + final Set<PfReferenceKey> referenceKeySet, final BeanValidationResult result) { // Check all key uses for (final PfKeyUse usedKey : usedKeySet) { if (usedKey.getKey() instanceof PfConceptKey) { // PfConceptKey usage, check the key exists if (!artifactKeySet.contains(usedKey.getKey())) { - result.addValidationMessage(new PfValidationMessage(usedKey.getKey(), this.getClass(), - ValidationResult.INVALID, "an artifact key used in the model is not defined")); + result.addResult(new ObjectValidationResult("artifact key", usedKey.getId(), + ValidationStatus.INVALID, NOT_DEFINED)); } } else { // PfReferenceKey usage, check the key exists if (!referenceKeySet.contains(usedKey.getKey())) { - result.addValidationMessage(new PfValidationMessage(usedKey.getKey(), this.getClass(), - ValidationResult.INVALID, "a reference key used in the model is not defined")); + result.addResult(new ObjectValidationResult("reference key", usedKey.getId(), + ValidationStatus.INVALID, NOT_DEFINED)); } } } - - return result; } @Override diff --git a/models-base/src/main/java/org/onap/policy/models/base/PfReferenceKey.java b/models-base/src/main/java/org/onap/policy/models/base/PfReferenceKey.java index 7984e4297..83403ac43 100644 --- a/models-base/src/main/java/org/onap/policy/models/base/PfReferenceKey.java +++ b/models-base/src/main/java/org/onap/policy/models/base/PfReferenceKey.java @@ -1,7 +1,7 @@ /*- * ============LICENSE_START======================================================= * Copyright (C) 2019 Nordix Foundation. - * Modifications Copyright (C) 2019 AT&T Intellectual Property. All rights reserved. + * Modifications Copyright (C) 2019-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. @@ -28,8 +28,9 @@ import javax.persistence.Embeddable; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.NonNull; +import org.onap.policy.common.parameters.BeanValidationResult; +import org.onap.policy.common.parameters.ValidationResult; import org.onap.policy.common.utils.validation.Assertions; -import org.onap.policy.models.base.PfValidationResult.ValidationResult; /** * A reference key identifies entities in the system that are contained in other entities. Every contained concept in @@ -339,34 +340,13 @@ public class PfReferenceKey extends PfKey { } @Override - public PfValidationResult validate(final PfValidationResult result) { - final String parentNameValidationErrorMessage = Assertions.getStringParameterValidationMessage(PARENT_KEY_NAME, - parentKeyName, NAME_REGEXP); - if (parentNameValidationErrorMessage != null) { - result.addValidationMessage(new PfValidationMessage(this, this.getClass(), ValidationResult.INVALID, - "parentKeyName invalid-" + parentNameValidationErrorMessage)); - } - - final String parentKeyVersionValidationErrorMessage = Assertions - .getStringParameterValidationMessage(PARENT_KEY_VERSION, parentKeyVersion, VERSION_REGEXP); - if (parentKeyVersionValidationErrorMessage != null) { - result.addValidationMessage(new PfValidationMessage(this, this.getClass(), ValidationResult.INVALID, - "parentKeyVersion invalid-" + parentKeyVersionValidationErrorMessage)); - } + public ValidationResult validate(@NonNull String fieldName) { + BeanValidationResult result = new BeanValidationResult(fieldName, this); - final String parentLocalNameValidationErrorMessage = Assertions - .getStringParameterValidationMessage(PARENT_LOCAL_NAME, parentLocalName, LOCAL_NAME_REGEXP); - if (parentLocalNameValidationErrorMessage != null) { - result.addValidationMessage(new PfValidationMessage(this, this.getClass(), ValidationResult.INVALID, - "parentLocalName invalid-" + parentLocalNameValidationErrorMessage)); - } - - final String localNameValidationErrorMessage = Assertions.getStringParameterValidationMessage(LOCAL_NAME, - localName, LOCAL_NAME_REGEXP); - if (localNameValidationErrorMessage != null) { - result.addValidationMessage(new PfValidationMessage(this, this.getClass(), ValidationResult.INVALID, - "localName invalid-" + localNameValidationErrorMessage)); - } + result.addResult(validateRegex(PARENT_KEY_NAME, parentKeyName, NAME_REGEXP)); + result.addResult(validateRegex(PARENT_KEY_VERSION, parentKeyVersion, VERSION_REGEXP)); + result.addResult(validateRegex(PARENT_LOCAL_NAME, parentLocalName, LOCAL_NAME_REGEXP)); + result.addResult(validateRegex(LOCAL_NAME, localName, LOCAL_NAME_REGEXP)); return result; } diff --git a/models-base/src/main/java/org/onap/policy/models/base/PfValidationMessage.java b/models-base/src/main/java/org/onap/policy/models/base/PfValidationMessage.java deleted file mode 100644 index cd8b08bfa..000000000 --- a/models-base/src/main/java/org/onap/policy/models/base/PfValidationMessage.java +++ /dev/null @@ -1,104 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * Copyright (C) 2019 Nordix Foundation. - * Modifications Copyright (C) 2019 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. - * - * SPDX-License-Identifier: Apache-2.0 - * ============LICENSE_END========================================================= - */ - -package org.onap.policy.models.base; - -import org.onap.policy.common.utils.validation.Assertions; -import org.onap.policy.models.base.PfValidationResult.ValidationResult; - -/** - * A validation message is created for each validation observation observed during validation of a - * concept. The message holds the key and the class of the concept on which the observation was made - * as well as the type of observation and a message describing the observation. - */ -public class PfValidationMessage { - private final PfKey observedKey; - private ValidationResult validationResult = ValidationResult.VALID; - private final String observedClass; - private final String message; - - /** - * Create an validation observation with the given fields. - * - * @param observedKey the key of the class on which the validation observation was made - * @param observedClass the class on which the validation observation was made - * @param validationResult the type of observation made - * @param message a message describing the observation - */ - public PfValidationMessage(final PfKey observedKey, final Class<?> observedClass, - final ValidationResult validationResult, final String message) { - Assertions.argumentNotNull(observedKey, "observedKey may not be null"); - Assertions.argumentNotNull(observedClass, "observedClass may not be null"); - Assertions.argumentNotNull(validationResult, "validationResult may not be null"); - Assertions.argumentNotNull(message, "message may not be null"); - - this.observedKey = observedKey; - this.observedClass = observedClass.getName(); - this.validationResult = validationResult; - this.message = message; - } - - /** - * Gets the key of the observation. - * - * @return the key of the observation - */ - public PfKey getObservedKey() { - return observedKey; - } - - /** - * Gets the observed class. - * - * @return the observed class - */ - public String getObservedClass() { - return observedClass; - } - - /** - * Gets the type of observation made. - * - * @return the type of observation made - */ - public ValidationResult getValidationResult() { - return validationResult; - } - - /** - * Get a description of the observation. - * - * @return the observation description - */ - public String getMessage() { - return message; - } - - /* - * (non-Javadoc) - * - * @see java.lang.Object#toString() - */ - @Override - public String toString() { - return observedKey.toString() + ':' + observedClass + ':' + validationResult.name() + ':' + message; - } -} diff --git a/models-base/src/main/java/org/onap/policy/models/base/PfValidationResult.java b/models-base/src/main/java/org/onap/policy/models/base/PfValidationResult.java deleted file mode 100644 index bbac3b7e5..000000000 --- a/models-base/src/main/java/org/onap/policy/models/base/PfValidationResult.java +++ /dev/null @@ -1,146 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * Copyright (C) 2019-2020 Nordix Foundation. - * ================================================================================ - * 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. - * - * SPDX-License-Identifier: Apache-2.0 - * ============LICENSE_END========================================================= - */ - -package org.onap.policy.models.base; - -import java.util.LinkedList; -import java.util.List; -import lombok.Getter; - -/** - * This class records the result of a validation and holds all validation observation messages. - */ -@Getter -public class PfValidationResult { - /** - * The ValidationResult enumeration describes the severity of a validation result. - */ - public enum ValidationResult { - /** No problems or observations were detected during validation. */ - VALID, - /** - * Observations were made on a concept (such as blank descriptions) of a nature that will not affect the use of - * the concept. - */ - OBSERVATION, - /** - * Warnings were made on a concept (such as defined but unused concepts) of a nature that may affect the use of - * the concept. - */ - WARNING, - /** - * Errors were detected on a concept (such as referenced but undefined concepts) of a nature that will affect - * the use of the concept. - */ - INVALID - } - - // The actual verification result - private ValidationResult validationResult = ValidationResult.VALID; - - // Messages collected during the verification process - private final List<PfValidationMessage> messageList = new LinkedList<>(); - - /** - * Check if a validation reported a valid concept, returns true if the model is usable (that is, even if the model - * has warnings or observations). - * - * @return true, if the concept is reported as valid and can be used - */ - public boolean isValid() { - return validationResult != ValidationResult.INVALID; - } - - /** - * Check if a validation reported a concept with no errors or warnings, returns true if the model is OK to use. - * - * @return true, if the concept has no warnings or errors - */ - public boolean isOk() { - return validationResult == ValidationResult.VALID || validationResult == ValidationResult.OBSERVATION; - } - - - /** - * Append a validation result to another validation result. - * - * @param result2Append the result to append to the current validation result - */ - public void append(final PfValidationResult result2Append) { - for (PfValidationMessage message : result2Append.getMessageList()) { - addValidationMessage(message); - } - } - - /** - * Adds a validation message to the validation result, used by validate() implementations on {@link PfConcept} - * subclasses to report validaiton observations. - * - * @param validationMessage the validation message - */ - public void addValidationMessage(final PfValidationMessage validationMessage) { - messageList.add(validationMessage); - - // Check if the incoming message has a more sever status than the - // current one on the overall validation result, - // if so, the overall result goes to that level - if (validationMessage.getValidationResult().ordinal() > validationResult.ordinal()) { - validationResult = validationMessage.getValidationResult(); - } - } - - /* - * (non-Javadoc) - * - * @see java.lang.Object#toString() - */ - @Override - public String toString() { - final StringBuilder builder = new StringBuilder(); - - switch (validationResult) { - case VALID: - - builder.append("***validation of model successful***"); - return builder.toString(); - case OBSERVATION: - - builder.append("\n***observations noted during validation of model***\n"); - break; - case WARNING: - - builder.append("\n***warnings issued during validation of model***\n"); - break; - case INVALID: - builder.append("\n***validation of model failed***\n"); - break; - default: - break; - } - - for (final PfValidationMessage message : messageList) { - builder.append(message); - builder.append("\n"); - } - - builder.append("********************************"); - return builder.toString(); - } -} diff --git a/models-base/src/main/java/org/onap/policy/models/base/Validated.java b/models-base/src/main/java/org/onap/policy/models/base/Validated.java index d79d58f13..b962d46ab 100644 --- a/models-base/src/main/java/org/onap/policy/models/base/Validated.java +++ b/models-base/src/main/java/org/onap/policy/models/base/Validated.java @@ -20,234 +20,343 @@ package org.onap.policy.models.base; +import com.google.re2j.Pattern; import java.util.Collection; import java.util.Map; import java.util.Map.Entry; +import java.util.function.BiFunction; +import java.util.function.Function; import lombok.NonNull; -import org.onap.policy.common.utils.validation.Assertions; -import org.onap.policy.models.base.PfValidationResult.ValidationResult; +import org.apache.commons.lang3.StringUtils; +import org.onap.policy.common.parameters.BeanValidationResult; +import org.onap.policy.common.parameters.ObjectValidationResult; +import org.onap.policy.common.parameters.ValidationResult; +import org.onap.policy.common.parameters.ValidationStatus; /** * Classes that can be validated. This can be used as a super class or as a stand-alone * utility class. */ -public class Validated { +public abstract class Validated { + public static final String IS_BLANK = "is blank"; + public static final String IS_A_NULL_KEY = "is a null key"; + public static final String IS_NULL = "is null"; + public static final String NOT_DEFINED = "not defined"; + public static final String NOT_FOUND = "not found"; + + public static final String KEY_TOKEN = "key"; + public static final String VALUE_TOKEN = "value"; + + /** + * Validates the fields of the object. + * + * @param fieldName name of the field containing this + * @return the result, or {@code null} + */ + public abstract ValidationResult validate(String fieldName); /** - * Validates the fields of the object. The default method simply returns the result. + * Adds a result indicating that a value is invalid. * - * @param result where to place the result - * @return the result + * @param result where to put the result + * @param fieldName name of the field containing the value + * @param value the field's value + * @param errorMessage the error message */ - public PfValidationResult validate(@NonNull PfValidationResult result) { - return result; + public static void addResult(@NonNull BeanValidationResult result, @NonNull String fieldName, Object value, + @NonNull String errorMessage) { + result.addResult( + new ObjectValidationResult(fieldName, getKeyId(value), ValidationStatus.INVALID, errorMessage)); } /** - * Validates that a field value is not null. + * Makes a result that indicates a value is invalid, because it is null. * - * @param container the object that contains the field - * @param fieldName name of the field to be validated - * @param value value to be validated - * @param result where to place the result - * @return the result + * @param fieldName name of the field containing the value + * @param value the field's value + * @return a result indicating the value is invalid */ - public PfValidationResult validateNotNull(@NonNull Object container, @NonNull String fieldName, Object value, - @NonNull PfValidationResult result) { + public static ValidationResult makeNullResult(@NonNull String fieldName, Object value) { + return new ObjectValidationResult(fieldName, getKeyId(value), ValidationStatus.INVALID, IS_NULL); + } + /** + * Validates a value, if is not {@code null}, by invoking it's validate() method. + * + * @param result where to put the result + * @param fieldName name of the field containing the value + * @param value the field's value + */ + public static void validateOptional(@NonNull BeanValidationResult result, @NonNull String fieldName, + Validated value) { + if (value != null) { + result.addResult(value.validate(fieldName)); + } + } + + /** + * Validates that a value is not {@code null}. If the value is a subclass of this + * class, then it's {@link #validate(String)} method is invoked, too. + * + * @param fieldName name of the field containing the value + * @param value the field's value + * @return a result, or {@code null} + */ + public static ValidationResult validateNotNull(@NonNull String fieldName, Object value) { if (value == null) { - addError(container, fieldName, result, "null"); + return new ObjectValidationResult(fieldName, value, ValidationStatus.INVALID, IS_NULL); + } + + if (value instanceof Validated) { + return ((Validated) value).validate(fieldName); } - return result; + return null; } /** - * Validates that the name and version of a concept key do not have the null default - * values. + * Validates that a value is not "blank" (i.e., empty). value. * - * @param value value to be validated - * @param result where to place the result - * @return the result + * @param fieldName name of the field containing the value + * @param value the field's value + * @param checkNull {@code true} if to validate that the value is not {@code null} + * @return a result, or {@code null} */ - public PfValidationResult validateNotNull(@NonNull PfConceptKey value, @NonNull PfValidationResult result) { - - if (PfKey.NULL_KEY_NAME.equals(value.getName())) { - addError(value, "name", result, "null"); + public static ValidationResult validateNotBlank(@NonNull String fieldName, String value, boolean checkNull) { + if (value == null && !checkNull) { + return null; } - if (PfKey.NULL_KEY_VERSION.equals(value.getVersion())) { - addError(value, "version", result, "null"); + if (StringUtils.isBlank(value)) { + return new ObjectValidationResult(fieldName, value, ValidationStatus.INVALID, IS_BLANK); } - return result; + return null; } /** - * Validates the contents of a field, verifying that it matches a pattern, if it is - * non-null. + * Validates that a value matches regular expression. * - * @param container the object that contains the field - * @param fieldName name of the field to be validated - * @param value value to be validated - * @param pattern pattern used to validate the value - * @param result where to place the result - * @return the result + * @param fieldName name of the field containing the value + * @param value the field's value + * @param pattern regular expression to be matched + * @return a result, or {@code null} */ - public PfValidationResult validateText(@NonNull Object container, @NonNull String fieldName, String value, - @NonNull String pattern, @NonNull PfValidationResult result) { + public static ValidationResult validateRegex(@NonNull String fieldName, String value, @NonNull String pattern) { + if (value == null) { + return makeNullResult(fieldName, value); + } - if (value != null) { - addError(container, fieldName, result, - Assertions.getStringParameterValidationMessage(fieldName, value, pattern)); + if (!Pattern.matches(pattern, value)) { + return new ObjectValidationResult(fieldName, value, ValidationStatus.INVALID, + "does not match regular expression " + pattern); } - return result; + return null; } /** - * Validates the contents of a property field, verifying that the keys ands values are - * non-null. + * Validates a key, ensuring that it isn't null and that it's structurally sound. * - * @param container the object that contains the field - * @param fieldName name of the field to be validated - * @param properties properties to be validated - * @param resultIn where to place the result - * @return the result + * @param fieldName name of the field containing the key + * @param key the field's value + * @return a result, or {@code null} */ - public <T> PfValidationResult validatePropertiesNotNull(@NonNull Object container, @NonNull String fieldName, - Map<String, T> properties, @NonNull PfValidationResult resultIn) { + public static ValidationResult validateKeyNotNull(@NonNull String fieldName, PfKey key) { + if (key == null) { + return new ObjectValidationResult(fieldName, key, ValidationStatus.INVALID, IS_A_NULL_KEY); + } + + if (key.isNullKey()) { + return new ObjectValidationResult(fieldName, key.getId(), ValidationStatus.INVALID, IS_A_NULL_KEY); + } - PfValidationResult result = resultIn; + return key.validate(fieldName); + } - if (properties == null) { + /** + * Validates a key's version, ensuring that it isn't null. + * + * @param fieldName name of the field containing the key + * @param key the field's value + * @return a result, or {@code null} + */ + public static BeanValidationResult validateKeyVersionNotNull(@NonNull String fieldName, PfConceptKey key) { + if (key != null && key.isNullVersion()) { + BeanValidationResult result = new BeanValidationResult(fieldName, key); + result.addResult(makeNullResult(PfKeyImpl.VERSION_TOKEN, key.getVersion())); return result; } - for (Entry<String, T> ent : properties.entrySet()) { - String key = ent.getKey(); - String keyName = fieldName + "." + key; - result = validateNotNull(container, keyName, key, result); + return null; + } + + /** + * Generates a function to validate that a value is not below a minimum. + * + * @param min minimum value allowed + * @param allowedValue {@code null} or an allowed value outside the range + * @param checkRef {@code true} to generate an error if the value is {@code null} + * @return a function to validate that a value is not below a minimum + */ + public static BiFunction<String, Integer, ValidationResult> validateMin(int min, Integer allowedValue, + boolean checkRef) { + return (name, value) -> validateMin(name, value, min, allowedValue, checkRef); + } + + /** + * Validates that a value is not below a minimum. + * + * @param fieldName name of the field containing the key + * @param value the field's value + * @param min minimum value allowed + * @param allowedValue {@code null} or an allowed value outside the range + * @param checkRef {@code true} to generate an error if the value is {@code null} + * @return a result, or {@code null} + */ + public static ValidationResult validateMin(@NonNull String fieldName, Integer value, int min, Integer allowedValue, + boolean checkRef) { + if (value == null) { + if (checkRef) { + return makeNullResult(fieldName, value); + } + + return null; + } - result = validateNotNull(container, keyName, ent.getValue(), result); + if (value < min && !value.equals(allowedValue)) { + return new ObjectValidationResult(fieldName, value, ValidationStatus.INVALID, + "is below the minimum value: " + min); } - return result; + return null; } /** - * Validates the items in a collection field are non-null. + * Validates the items in a list. * - * @param container the object that contains the field - * @param fieldName name of the field to be validated - * @param collection collection whose items are to be validated - * @param resultIn where to place the result - * @return the result + * @param result where to add the results + * @param fieldName name of the field containing the list + * @param list the field's list (may be {@code null}) + * @param checker function to validate in individual item in the list */ - public <T> PfValidationResult validateCollectionNotNull(@NonNull Object container, @NonNull String fieldName, - Collection<T> collection, @NonNull PfValidationResult resultIn) { + public static <T> void validateList(@NonNull BeanValidationResult result, @NonNull String fieldName, + Collection<T> list, @NonNull BiFunction<String, T, ValidationResult> checker) { + if (list == null) { + return; + } - PfValidationResult result = resultIn; + BeanValidationResult result2 = new BeanValidationResult(fieldName, list); - if (collection == null) { - return result; + int count = 0; + for (T value : list) { + result2.addResult(checker.apply(String.valueOf(count++), value)); } - String prefix = fieldName + "."; - int count = 0; + if (!result2.isClean()) { + result.addResult(result2); + } + } + + /** + * Validates the items in a map. + * + * @param result where to add the results + * @param fieldName name of the field containing the list + * @param map the field's map (may be {@code null}) + * @param checker function to validate in individual item in the list + */ + public static <T> void validateMap(@NonNull BeanValidationResult result, @NonNull String fieldName, + Map<String, T> map, @NonNull Function<Map.Entry<String, T>, ValidationResult> checker) { + if (map == null) { + return; + } - for (T item : collection) { - result = validateNotNull(container, prefix + count, item, result); - ++count; + BeanValidationResult result2 = new BeanValidationResult(fieldName, map); + + for (Entry<String, T> entry : map.entrySet()) { + result2.addResult(checker.apply(entry)); } - return result; + if (!result2.isClean()) { + result.addResult(result2); + } } /** - * Invokes the "validate()" method on each item in a collection field, if the item is - * non-null. + * Validates a Map entry, ensuring that neither the key nor the value are "blank" + * (i.e., empty or {@code null}). * - * @param container the object that contains the field - * @param fieldName name of the field to be validated - * @param collection collection whose items are to be validated - * @param result where to place the result - * @return the result + * @param entry entry to be validated + * @return a result, or {@code null} */ - public <T extends Validated> PfValidationResult validateCollection(@NonNull Object container, - @NonNull String fieldName, Collection<T> collection, @NonNull PfValidationResult result) { + public static BeanValidationResult validateEntryNotBlankNotBlank(Map.Entry<String, String> entry) { + BeanValidationResult result = new BeanValidationResult("" + entry.getKey(), entry.getKey()); - if (collection == null) { - return result; + if (StringUtils.isBlank(entry.getKey())) { + Validated.addResult(result, KEY_TOKEN, entry.getKey(), IS_BLANK); } - for (T item : collection) { - if (item != null) { - result = item.validate(result); - } + if (StringUtils.isBlank(entry.getValue())) { + Validated.addResult(result, VALUE_TOKEN, entry.getValue(), IS_BLANK); } - return result; + return (result.isClean() ? null : result); } /** - * Invokes the "validate()" method on each item in a concept collection field, if the - * item is non-null. + * Validates a Map entry, ensuring that the key is not "blank" (i.e., empty or + * {@code null}) and the value is not {@code null}. * - * @param container the object that contains the field - * @param fieldName name of the field to be validated - * @param collection collection whose items are to be validated - * @param result where to place the result - * @return the result + * @param entry entry to be validated + * @return a result, or {@code null} */ - public <T extends PfConcept> PfValidationResult validateConceptCollection(@NonNull Object container, - @NonNull String fieldName, Collection<T> collection, @NonNull PfValidationResult result) { + public static BeanValidationResult validateEntryNotBlankNotNull(Map.Entry<String, String> entry) { + BeanValidationResult result = new BeanValidationResult("" + entry.getKey(), entry.getKey()); - if (collection == null) { - return result; + if (StringUtils.isBlank(entry.getKey())) { + Validated.addResult(result, KEY_TOKEN, entry.getKey(), IS_BLANK); } - for (T item : collection) { - if (item != null) { - result = item.validate(result); - } + if (entry.getValue() == null) { + result.addResult(makeNullResult(VALUE_TOKEN, entry.getValue())); } - return result; + return (result.isClean() ? null : result); } /** - * Adds an error message to the validation result. + * Validates a Map entry, ensuring that neither the key nor the value are + * {@code null}. If the value is a subclass of this class, then it's + * {@link #validate(String)} method is invoked. * - * @param container the object that contains the field - * @param fieldName name of the field to be validated - * @param result where to place the result - * @param errmsg the error message to be added, or {@code null} if nothing to add + * @param entry entry to be validated + * @return a result, or {@code null} */ - public void addError(@NonNull Object container, @NonNull String fieldName, @NonNull PfValidationResult result, - String errmsg) { - if (errmsg != null) { - result.addValidationMessage(new PfValidationMessage(makeKey(container), container.getClass(), - ValidationResult.INVALID, fieldName + " invalid-" + errmsg)); + public static <V> BeanValidationResult validateEntryValueNotNull(Map.Entry<String, V> entry) { + BeanValidationResult result = new BeanValidationResult("" + entry.getKey(), entry.getKey()); + + if (entry.getKey() == null) { + result.addResult(makeNullResult(KEY_TOKEN, entry.getKey())); + } + + V value = entry.getValue(); + if (value == null) { + result.addResult(makeNullResult(VALUE_TOKEN, value)); + } else if (value instanceof Validated) { + result.addResult(((Validated) value).validate(VALUE_TOKEN)); } + + return (result.isClean() ? null : result); } /** - * Makes a PfKey suitable for insertion into a validation message. Note: the - * "toString()" method of the key simply invokes container.toString(); + * Gets a key's ID, if the value is a {@link PfKey}. * - * @param container the container object for which the key should be made - * @return a key for the container + * @param value value from which to get the ID + * @return the value's ID, if it's a key, the original value otherwise */ - public PfKey makeKey(@NonNull Object container) { - - return new PfConceptKey() { - private static final long serialVersionUID = 1L; - - @Override - public String toString() { - return container.toString(); - } - }; + private static Object getKeyId(Object value) { + return (value instanceof PfKey ? ((PfKey) value).getId() : value); } } diff --git a/models-base/src/test/java/org/onap/policy/models/base/PfConceptContainerTest.java b/models-base/src/test/java/org/onap/policy/models/base/PfConceptContainerTest.java index 062f6f953..8c74850d2 100644 --- a/models-base/src/test/java/org/onap/policy/models/base/PfConceptContainerTest.java +++ b/models-base/src/test/java/org/onap/policy/models/base/PfConceptContainerTest.java @@ -21,6 +21,7 @@ package org.onap.policy.models.base; +import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatThrownBy; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; @@ -111,9 +112,7 @@ public class PfConceptContainerTest { container.clean(); assertEquals(clonedContainer, container); - PfValidationResult result = new PfValidationResult(); - result = container.validate(result); - assertTrue(result.isOk()); + assertThat(container.validate("").getResult()).isNull(); assertEquals(0, container.compareTo(clonedContainer)); @@ -136,30 +135,30 @@ public class PfConceptContainerTest { final DummyPfConceptContainer container3 = container; assertThatThrownBy(() -> container3.validate(null)) - .hasMessageMatching("^resultIn is marked .*on.*ull but is null$"); + .hasMessageMatching("^fieldName is marked .*on.*ull but is null$"); DummyPfConceptContainer validateContainer = new DummyPfConceptContainer(); - assertFalse(validateContainer.validate(new PfValidationResult()).isOk()); + assertFalse(validateContainer.validate("").isValid()); validateContainer.setKey(new PfConceptKey("VCKey", VERSION0_0_1)); - assertTrue(validateContainer.validate(new PfValidationResult()).isOk()); + assertTrue(validateContainer.validate("").isValid()); validateContainer.getConceptMap().put(testConceptKey, new DummyPfConcept(testConceptKey)); - assertTrue(validateContainer.validate(new PfValidationResult()).isOk()); + assertTrue(validateContainer.validate("").isValid()); validateContainer.getConceptMap().put(PfConceptKey.getNullKey(), new DummyPfConcept(PfConceptKey.getNullKey())); - assertFalse(validateContainer.validate(new PfValidationResult()).isOk()); + assertFalse(validateContainer.validate("").isValid()); validateContainer.getConceptMap().remove(PfConceptKey.getNullKey()); - assertTrue(validateContainer.validate(new PfValidationResult()).isOk()); + assertTrue(validateContainer.validate("").isValid()); validateContainer.getConceptMap().put(testConceptKey, null); - assertFalse(validateContainer.validate(new PfValidationResult()).isOk()); + assertFalse(validateContainer.validate("").isValid()); validateContainer.getConceptMap().put(testConceptKey, new DummyPfConcept(testConceptKey)); - assertTrue(validateContainer.validate(new PfValidationResult()).isOk()); + assertTrue(validateContainer.validate("").isValid()); validateContainer.getConceptMap().put(testConceptKey, new DummyPfConcept(conceptKey)); - assertFalse(validateContainer.validate(new PfValidationResult()).isOk()); + assertFalse(validateContainer.validate("").isValid()); validateContainer.getConceptMap().put(testConceptKey, new DummyPfConcept(testConceptKey)); - assertTrue(validateContainer.validate(new PfValidationResult()).isOk()); + assertTrue(validateContainer.validate("").isValid()); assertEquals(conceptKey, container.get(conceptKey).getKey()); assertEquals(conceptKey, container.get(conceptKey.getName()).getKey()); diff --git a/models-base/src/test/java/org/onap/policy/models/base/PfKeyImplTest.java b/models-base/src/test/java/org/onap/policy/models/base/PfKeyImplTest.java index 8b94a48c3..8d6b1b9f4 100644 --- a/models-base/src/test/java/org/onap/policy/models/base/PfKeyImplTest.java +++ b/models-base/src/test/java/org/onap/policy/models/base/PfKeyImplTest.java @@ -21,6 +21,7 @@ package org.onap.policy.models.base; +import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatIllegalArgumentException; import static org.assertj.core.api.Assertions.assertThatThrownBy; import static org.junit.Assert.assertEquals; @@ -35,6 +36,7 @@ import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; import org.junit.Test; +import org.onap.policy.common.parameters.ValidationResult; import org.onap.policy.models.base.PfKey.Compatibility; import org.onap.policy.models.base.testconcepts.DummyPfKey; @@ -109,20 +111,13 @@ public class PfKeyImplTest { assertFalse(someKey1.isCompatible(someKey5)); assertFalse(someKey1.isCompatible(new DummyPfKey())); - assertEquals(PfValidationResult.ValidationResult.VALID, - someKey0.validate(new PfValidationResult()).getValidationResult()); - assertEquals(PfValidationResult.ValidationResult.VALID, - someKey1.validate(new PfValidationResult()).getValidationResult()); - assertEquals(PfValidationResult.ValidationResult.VALID, - someKey2.validate(new PfValidationResult()).getValidationResult()); - assertEquals(PfValidationResult.ValidationResult.VALID, - someKey3.validate(new PfValidationResult()).getValidationResult()); - assertEquals(PfValidationResult.ValidationResult.VALID, - someKey4.validate(new PfValidationResult()).getValidationResult()); - assertEquals(PfValidationResult.ValidationResult.VALID, - someKey5.validate(new PfValidationResult()).getValidationResult()); - assertEquals(PfValidationResult.ValidationResult.VALID, - someKey6.validate(new PfValidationResult()).getValidationResult()); + assertTrue(someKey0.validate("").isValid()); + assertTrue(someKey1.validate("").isValid()); + assertTrue(someKey2.validate("").isValid()); + assertTrue(someKey3.validate("").isValid()); + assertTrue(someKey4.validate("").isValid()); + assertTrue(someKey5.validate("").isValid()); + assertTrue(someKey6.validate("").isValid()); someKey0.clean(); assertNotNull(someKey0.toString()); @@ -179,22 +174,20 @@ public class PfKeyImplTest { Field nameField = testKey.getClass().getDeclaredField("name"); nameField.setAccessible(true); nameField.set(testKey, "Key Name"); - PfValidationResult validationResult = new PfValidationResult(); - testKey.validate(validationResult); + ValidationResult validationResult = testKey.validate(""); nameField.set(testKey, "TheKey"); nameField.setAccessible(false); - assertEquals("name invalid-parameter name with value Key Name " + "does not match regular expression " - + PfKey.NAME_REGEXP, validationResult.getMessageList().get(0).getMessage()); + assertThat(validationResult.getResult()).contains("\"name\"").doesNotContain("\"version\"") + .contains("does not match regular expression " + PfKey.NAME_REGEXP); Field versionField = testKey.getClass().getDeclaredField("version"); versionField.setAccessible(true); versionField.set(testKey, "Key Version"); - PfValidationResult validationResult2 = new PfValidationResult(); - testKey.validate(validationResult2); + ValidationResult validationResult2 = testKey.validate(""); versionField.set(testKey, VERSION001); versionField.setAccessible(false); - assertEquals("version invalid-parameter version with value Key Version " + "does not match regular expression " - + PfKey.VERSION_REGEXP, validationResult2.getMessageList().get(0).getMessage()); + assertThat(validationResult2.getResult()).doesNotContain("\"name\"").contains("\"version\"") + .contains("does not match regular expression " + PfKey.VERSION_REGEXP); } @Test diff --git a/models-base/src/test/java/org/onap/policy/models/base/PfKeyUseTest.java b/models-base/src/test/java/org/onap/policy/models/base/PfKeyUseTest.java index f9ad889c7..d2aebdc43 100644 --- a/models-base/src/test/java/org/onap/policy/models/base/PfKeyUseTest.java +++ b/models-base/src/test/java/org/onap/policy/models/base/PfKeyUseTest.java @@ -62,9 +62,7 @@ public class PfKeyUseTest { keyUse.clean(); assertNotNull(keyUse); - PfValidationResult result = new PfValidationResult(); - result = keyUse.validate(result); - assertNotNull(result); + assertNotNull(keyUse.validate("")); assertNotEquals(0, keyUse.hashCode()); @@ -84,8 +82,7 @@ public class PfKeyUseTest { assertEquals(0, keyUse.compareTo(new PfKeyUse(key))); PfKeyUse keyUseNull = new PfKeyUse(PfConceptKey.getNullKey()); - PfValidationResult resultNull = new PfValidationResult(); - assertEquals(false, keyUseNull.validate(resultNull).isValid()); + assertEquals(false, keyUseNull.validate("").isValid()); assertThatThrownBy(() -> keyUse.setKey(null)).hasMessageMatching("^key is marked .*on.*ull but is null$"); @@ -93,7 +90,8 @@ public class PfKeyUseTest { assertThatThrownBy(() -> keyUse.isCompatible(null)).hasMessageMatching(OTHER_KEY_IS_NULL); - assertThatThrownBy(() -> keyUse.validate(null)).hasMessageMatching("^result is marked .*on.*ull but is null$"); + assertThatThrownBy(() -> keyUse.validate(null)) + .hasMessageMatching("^fieldName is marked .*on.*ull but is null$"); PfKeyUse testKeyUse = new PfKeyUse(new DummyPfConceptKeySub(new PfConceptKey())); assertEquals(testKeyUse, new PfKeyUse(testKeyUse)); diff --git a/models-base/src/test/java/org/onap/policy/models/base/PfModelTest.java b/models-base/src/test/java/org/onap/policy/models/base/PfModelTest.java index 9e4e350a1..760231a7c 100644 --- a/models-base/src/test/java/org/onap/policy/models/base/PfModelTest.java +++ b/models-base/src/test/java/org/onap/policy/models/base/PfModelTest.java @@ -73,59 +73,59 @@ public class PfModelTest { public void testPfModelValidation() { PfConceptKey dpmKey = new PfConceptKey("modelKey", VERSION001); DummyPfModel dpm = new DummyPfModel(dpmKey); - assertTrue(dpm.validate(new PfValidationResult()).isValid()); + assertTrue(dpm.validate("").isValid()); - assertThatThrownBy(() -> dpm.validate(null)).hasMessageMatching("^resultIn is marked .*on.*ull but is null$"); + assertThatThrownBy(() -> dpm.validate(null)).hasMessageMatching("^fieldName is marked .*on.*ull but is null$"); dpm.setKey(PfConceptKey.getNullKey()); - assertFalse(dpm.validate(new PfValidationResult()).isValid()); + assertFalse(dpm.validate("").isValid()); dpm.setKey(dpmKey); - assertTrue(dpm.validate(new PfValidationResult()).isValid()); + assertTrue(dpm.validate("").isValid()); dpm.getKeyList().add(PfReferenceKey.getNullKey()); dpm.getKeyList().add(new PfKeyUse(PfReferenceKey.getNullKey())); - assertFalse(dpm.validate(new PfValidationResult()).isValid()); + assertFalse(dpm.validate("").isValid()); dpm.getKeyList().clear(); - assertTrue(dpm.validate(new PfValidationResult()).isValid()); + assertTrue(dpm.validate("").isValid()); PfConceptKey goodCKey = new PfConceptKey("goodCKey", VERSION001); PfReferenceKey goodRKey = new PfReferenceKey(goodCKey, "goodLocalName"); dpm.getKeyList().add(goodCKey); dpm.getKeyList().add(goodRKey); - assertTrue(dpm.validate(new PfValidationResult()).isValid()); + assertTrue(dpm.validate("").isValid()); PfConceptKey goodCKeyDup = new PfConceptKey(goodCKey); dpm.getKeyList().add(goodCKeyDup); - assertFalse(dpm.validate(new PfValidationResult()).isValid()); + assertFalse(dpm.validate("").isValid()); dpm.getKeyList().remove(goodCKeyDup); - assertTrue(dpm.validate(new PfValidationResult()).isValid()); + assertTrue(dpm.validate("").isValid()); PfReferenceKey goodRKeyDup = new PfReferenceKey(goodRKey); dpm.getKeyList().add(goodRKeyDup); - assertFalse(dpm.validate(new PfValidationResult()).isValid()); + assertFalse(dpm.validate("").isValid()); dpm.getKeyList().remove(goodRKeyDup); - assertTrue(dpm.validate(new PfValidationResult()).isValid()); + assertTrue(dpm.validate("").isValid()); PfKeyUse goodCKeyUse = new PfKeyUse(goodCKey); dpm.getKeyList().add(goodCKeyUse); - assertTrue(dpm.validate(new PfValidationResult()).isValid()); + assertTrue(dpm.validate("").isValid()); PfKeyUse goodRKeyUse = new PfKeyUse(goodRKey); dpm.getKeyList().add(goodRKeyUse); - assertTrue(dpm.validate(new PfValidationResult()).isValid()); + assertTrue(dpm.validate("").isValid()); PfConceptKey badCKey = new PfConceptKey("badCKey", VERSION001); PfKeyUse badCKeyUse = new PfKeyUse(badCKey); dpm.getKeyList().add(badCKeyUse); - assertFalse(dpm.validate(new PfValidationResult()).isValid()); + assertFalse(dpm.validate("").isValid()); dpm.getKeyList().remove(badCKeyUse); - assertTrue(dpm.validate(new PfValidationResult()).isValid()); + assertTrue(dpm.validate("").isValid()); PfKeyUse badRKeyUse = new PfKeyUse(new PfReferenceKey(badCKey, "badLocalName")); dpm.getKeyList().add(badRKeyUse); - assertFalse(dpm.validate(new PfValidationResult()).isValid()); + assertFalse(dpm.validate("").isValid()); dpm.getKeyList().remove(badRKeyUse); - assertTrue(dpm.validate(new PfValidationResult()).isValid()); + assertTrue(dpm.validate("").isValid()); } } diff --git a/models-base/src/test/java/org/onap/policy/models/base/PfReferenceKeyTest.java b/models-base/src/test/java/org/onap/policy/models/base/PfReferenceKeyTest.java index a27a5ddea..de328e9f2 100644 --- a/models-base/src/test/java/org/onap/policy/models/base/PfReferenceKeyTest.java +++ b/models-base/src/test/java/org/onap/policy/models/base/PfReferenceKeyTest.java @@ -21,6 +21,7 @@ package org.onap.policy.models.base; +import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatThrownBy; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; @@ -30,6 +31,7 @@ import static org.junit.Assert.assertTrue; import java.lang.reflect.Field; import org.junit.Test; +import org.onap.policy.common.parameters.ValidationResult; public class PfReferenceKeyTest { @@ -93,9 +95,7 @@ public class PfReferenceKeyTest { assertEquals(PfKey.Compatibility.DIFFERENT, testReferenceKey.getCompatibility(PfReferenceKey.getNullKey())); assertEquals(PfKey.Compatibility.IDENTICAL, testReferenceKey.getCompatibility(testReferenceKey)); - PfValidationResult result = new PfValidationResult(); - result = testReferenceKey.validate(result); - assertEquals(PfValidationResult.ValidationResult.VALID, result.getValidationResult()); + assertTrue(testReferenceKey.validate("").isValid()); testReferenceKey.clean(); @@ -139,49 +139,37 @@ public class PfReferenceKeyTest { Field parentNameField = testReferenceKey.getClass().getDeclaredField("parentKeyName"); parentNameField.setAccessible(true); parentNameField.set(testReferenceKey, "Parent Name"); - PfValidationResult validationResult = new PfValidationResult(); - testReferenceKey.validate(validationResult); + ValidationResult validationResult = testReferenceKey.validate(""); parentNameField.set(testReferenceKey, "ParentName"); parentNameField.setAccessible(false); - assertEquals( - "parentKeyName invalid-parameter parentKeyName with value Parent Name " - + "does not match regular expression " + PfKey.NAME_REGEXP, - validationResult.getMessageList().get(0).getMessage()); + assertThat(validationResult.getResult()).contains("\"parentKeyName\"") + .contains("does not match regular expression " + PfKey.NAME_REGEXP); Field parentVersionField = testReferenceKey.getClass().getDeclaredField("parentKeyVersion"); parentVersionField.setAccessible(true); parentVersionField.set(testReferenceKey, "Parent Version"); - PfValidationResult validationResult2 = new PfValidationResult(); - testReferenceKey.validate(validationResult2); + ValidationResult validationResult2 = testReferenceKey.validate(""); parentVersionField.set(testReferenceKey, VERSION001); parentVersionField.setAccessible(false); - assertEquals( - "parentKeyVersion invalid-parameter parentKeyVersion with value Parent Version " - + "does not match regular expression " + PfKey.VERSION_REGEXP, - validationResult2.getMessageList().get(0).getMessage()); + assertThat(validationResult2.getResult()).contains("\"parentKeyVersion\"") + .contains("does not match regular expression " + PfKey.VERSION_REGEXP); Field parentLocalNameField = testReferenceKey.getClass().getDeclaredField("parentLocalName"); parentLocalNameField.setAccessible(true); parentLocalNameField.set(testReferenceKey, "Parent Local Name"); - PfValidationResult validationResult3 = new PfValidationResult(); - testReferenceKey.validate(validationResult3); + ValidationResult validationResult3 = testReferenceKey.validate(""); parentLocalNameField.set(testReferenceKey, PARENT_LOCAL_NAME); parentLocalNameField.setAccessible(false); - assertEquals( - "parentLocalName invalid-parameter parentLocalName with value " - + "Parent Local Name does not match regular expression [A-Za-z0-9\\-_\\.]+|^$", - validationResult3.getMessageList().get(0).getMessage()); + assertThat(validationResult3.getResult()).contains("\"parentLocalName\"") + .contains("does not match regular expression [A-Za-z0-9\\-_\\.]+|^$"); Field localNameField = testReferenceKey.getClass().getDeclaredField("localName"); localNameField.setAccessible(true); localNameField.set(testReferenceKey, "Local Name"); - PfValidationResult validationResult4 = new PfValidationResult(); - testReferenceKey.validate(validationResult4); + ValidationResult validationResult4 = testReferenceKey.validate(""); localNameField.set(testReferenceKey, LOCAL_NAME); localNameField.setAccessible(false); - assertEquals( - "localName invalid-parameter localName with value Local Name " - + "does not match regular expression [A-Za-z0-9\\-_\\.]+|^$", - validationResult4.getMessageList().get(0).getMessage()); + assertThat(validationResult4.getResult()).contains("\"localName\"") + .contains("does not match regular expression [A-Za-z0-9\\-_\\.]+|^$"); } } diff --git a/models-base/src/test/java/org/onap/policy/models/base/ValidatedTest.java b/models-base/src/test/java/org/onap/policy/models/base/ValidatedTest.java index 5d1367028..8534d82a6 100644 --- a/models-base/src/test/java/org/onap/policy/models/base/ValidatedTest.java +++ b/models-base/src/test/java/org/onap/policy/models/base/ValidatedTest.java @@ -1,9 +1,8 @@ -/* +/*- * ============LICENSE_START======================================================= - * ONAP Policy Models + * ONAP * ================================================================================ - * Copyright (C) 2019-2020 AT&T Intellectual Property. All rights reserved. - * Modifications Copyright (C) 2019 AT&T Intellectual Property. All rights reserved. + * 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. @@ -21,424 +20,426 @@ package org.onap.policy.models.base; +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatCode; import static org.assertj.core.api.Assertions.assertThatThrownBy; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertSame; import static org.junit.Assert.assertTrue; -import java.util.Arrays; -import java.util.Iterator; -import java.util.LinkedHashMap; +import java.util.ArrayList; +import java.util.HashMap; import java.util.List; import java.util.Map; -import org.junit.Before; +import java.util.function.BiFunction; +import lombok.AllArgsConstructor; +import lombok.NonNull; import org.junit.Test; +import org.onap.policy.common.parameters.BeanValidationResult; +import org.onap.policy.common.parameters.ObjectValidationResult; +import org.onap.policy.common.parameters.ValidationResult; +import org.onap.policy.common.parameters.ValidationStatus; +import org.onap.policy.common.utils.coder.CoderException; +import org.onap.policy.common.utils.coder.StandardCoder; public class ValidatedTest { - private static final String COLLECTION_TEXT = "collection"; - private static final String ERROR_MESSAGE = "error message"; - private static final String COLLECTION_FIELD = "coll"; - private static final String VALID_VALUE = "abc123"; - private static final String PROPS_FIELD = "props"; - private static final String MY_NAME = "my.name"; - private static final String VALID_FIELD = "validField"; - private static final String INVALID_FIELD = "invalidField"; - private static final String NULL_FIELD = "nullField"; - private static final String WORD_PAT = "\\w*"; - private static final String MY_TO_STRING = "[some text]"; - private static final String VERSION = "1.2.3"; - - private Validated validated; - - @Before - public void setUp() { - validated = new Validated(); + private static final @NonNull String MY_FIELD = "myField"; + private static final @NonNull String Q_KEY = "\"" + Validated.KEY_TOKEN + "\""; + private static final @NonNull String Q_VALUE = "\"" + Validated.VALUE_TOKEN + "\""; + private static final String NOT_SAME = "not same"; + private static final String TEXT = "some text"; + private static final String OTHER = "other text"; + private static final String NAME = "myKey"; + private static final String VERSION = "1.0.0"; + private static final String BLANKS = "\t \n"; + + @Test + public void testAddResult() { + BeanValidationResult result = new BeanValidationResult("", this); + Validated.addResult(result, MY_FIELD, TEXT, "some message"); + assertThat(result.getResult()).contains(MY_FIELD).contains(TEXT).contains("some message"); + + assertThatThrownBy(() -> Validated.addResult(null, MY_FIELD, TEXT, OTHER)) + .isInstanceOf(NullPointerException.class); + + assertThatThrownBy(() -> Validated.addResult(result, null, TEXT, OTHER)) + .isInstanceOf(NullPointerException.class); + + assertThatCode(() -> Validated.addResult(result, MY_FIELD, null, OTHER)).doesNotThrowAnyException(); + + assertThatThrownBy(() -> Validated.addResult(result, MY_FIELD, TEXT, null)) + .isInstanceOf(NullPointerException.class); } @Test - public void testValidate() { - assertThatThrownBy(() -> validated.validate(null)).isInstanceOf(NullPointerException.class); + public void testMakeNullResult() { + ValidationResult rnull = Validated.makeNullResult(MY_FIELD, TEXT); + assertEquals(MY_FIELD, rnull.getName()); + assertThat(rnull.getResult()).contains(MY_FIELD).contains(TEXT).contains(Validated.IS_NULL); + assertFalse(rnull.isValid()); + + assertThatThrownBy(() -> Validated.makeNullResult(null, TEXT)).isInstanceOf(NullPointerException.class); - PfValidationResult result = new PfValidationResult(); - assertSame(result, validated.validate(result)); - assertTrue(result.isValid()); - assertEquals(0, result.getMessageList().size()); + assertThatCode(() -> Validated.makeNullResult(MY_FIELD, null)).doesNotThrowAnyException(); } @Test - public void testValidateNotNull() { - PfValidationResult result = new PfValidationResult(); + public void testValidateOptional() { + BeanValidationResult result = new BeanValidationResult("", this); + Validated.validateOptional(result, MY_FIELD, null); + assertTrue(result.isClean()); - final PfValidationResult result2 = result; - assertThatThrownBy(() -> validated.validateNotNull(null, VALID_FIELD, VALID_VALUE, result2)) - .isInstanceOf(NullPointerException.class); - assertThatThrownBy(() -> validated.validateNotNull(this, null, VALID_VALUE, result2)) + Validated.validateOptional(result, MY_FIELD, new MyString(TEXT)); + assertTrue(result.isClean()); + + Validated.validateOptional(result, MY_FIELD, new MyString(OTHER)); + assertThat(result.getResult()).contains(MY_FIELD).contains(OTHER).contains(NOT_SAME); + + assertThatThrownBy(() -> Validated.validateOptional(null, MY_FIELD, new MyString(TEXT))) .isInstanceOf(NullPointerException.class); - assertThatThrownBy(() -> validated.validateNotNull(this, VALID_FIELD, VALID_VALUE, null)) + + assertThatThrownBy(() -> Validated.validateOptional(result, null, new MyString(TEXT))) .isInstanceOf(NullPointerException.class); - // null text - result = validated.validateNotNull(this, NULL_FIELD, null, result); + assertThatCode(() -> Validated.validateOptional(result, MY_FIELD, null)).doesNotThrowAnyException(); + } + + @Test + public void testValidateNotNull() { + assertThat(Validated.validateNotNull(MY_FIELD, TEXT)).isNull(); - // invalid text - result = validated.validateNotNull(this, INVALID_FIELD, "!!!", result); + assertThat(Validated.validateNotNull(MY_FIELD, null).getResult()).contains(MY_FIELD) + .contains(Validated.IS_NULL); - // valid text - result = validated.validateNotNull(this, VALID_FIELD, VALID_VALUE, result); + // should invoke the value's validate() method, which should return success + assertThat(Validated.validateNotNull(MY_FIELD, new MyString(TEXT))).isNull(); - // different value - result = validated.validateNotNull(this, VALID_FIELD, Integer.valueOf(10), result); + // should invoke the value's validate() method, which should return failure + assertThat(Validated.validateNotNull(MY_FIELD, new MyString(OTHER)).getResult()).contains(MY_FIELD) + .contains(NOT_SAME); - assertFalse(result.isValid()); - assertEquals(1, result.getMessageList().size()); + assertThatThrownBy(() -> Validated.validateNotNull(null, TEXT)).isInstanceOf(NullPointerException.class); - // check result for null text - PfValidationMessage msg = result.getMessageList().get(0); - assertEquals(ValidatedTest.class.getName(), msg.getObservedClass()); - assertEquals(MY_TO_STRING, msg.getObservedKey().toString()); - assertTrue(msg.getMessage().contains("nullField invalid-null")); + assertThatCode(() -> Validated.validateNotNull(MY_FIELD, null)).doesNotThrowAnyException(); } @Test - public void testValidateNotNullConceptKey() { - PfValidationResult result = new PfValidationResult(); - - // null key - PfConceptKey key = new PfConceptKey(); - key.setVersion(VERSION); - result = validated.validateNotNull(key, result); - - // null value - key = new PfConceptKey(); - key.setName(MY_NAME); - result = validated.validateNotNull(key, result); - - // both null - key = new PfConceptKey(); - result = validated.validateNotNull(key, result); - - assertFalse(result.isValid()); - assertEquals(4, result.getMessageList().size()); - - // valid key & value - key = new PfConceptKey(); - key.setName(MY_NAME); - key.setVersion(VERSION); - result = validated.validateNotNull(key, result); - - // no change - assertFalse(result.isValid()); - assertEquals(4, result.getMessageList().size()); - - Iterator<PfValidationMessage> it = result.getMessageList().iterator(); - - // check null key - PfValidationMessage msg = it.next(); - assertEquals(PfConceptKey.class.getName(), msg.getObservedClass()); - assertTrue(msg.getMessage().contains("name invalid-null")); - - // check null value - msg = it.next(); - assertEquals(PfConceptKey.class.getName(), msg.getObservedClass()); - assertTrue(msg.getMessage().contains("version invalid-null")); - - // check both null - msg = it.next(); - assertEquals(PfConceptKey.class.getName(), msg.getObservedClass()); - assertTrue(msg.getMessage().contains("name invalid-null")); - assertTrue(it.next().getMessage().contains("version invalid-null")); - - PfValidationResult pfValidationResult = new PfValidationResult(); - final PfConceptKey key2 = key; - assertThatThrownBy(() -> validated.validateNotNull(key2, null)).isInstanceOf(NullPointerException.class); - assertThatThrownBy(() -> validated.validateNotNull(null, pfValidationResult)) + public void testValidateNotBlank() { + assertThat(Validated.validateNotBlank(MY_FIELD, TEXT, false)).isNull(); + assertThat(Validated.validateNotBlank(MY_FIELD, TEXT, true)).isNull(); + + assertThat(Validated.validateNotBlank(MY_FIELD, null, false)).isNull(); + assertThat(Validated.validateNotBlank(MY_FIELD, null, true).getResult()).contains(MY_FIELD) + .contains(Validated.IS_BLANK); + + assertThat(Validated.validateNotBlank(MY_FIELD, "", false).getResult()).contains(MY_FIELD) + .contains(Validated.IS_BLANK); + assertThat(Validated.validateNotBlank(MY_FIELD, "", true).getResult()).contains(MY_FIELD) + .contains(Validated.IS_BLANK); + + assertThatThrownBy(() -> Validated.validateNotBlank(null, TEXT, false)) .isInstanceOf(NullPointerException.class); + + assertThatCode(() -> Validated.validateNotBlank(MY_FIELD, null, false)).doesNotThrowAnyException(); } @Test - public void testValidateText() { - PfValidationResult result = new PfValidationResult(); + public void testValidateRegex() { + assertThat(Validated.validateRegex(MY_FIELD, "hello", ".*ll.*")).isNull(); - final PfValidationResult result2 = result; - assertThatThrownBy(() -> validated.validateText(null, VALID_FIELD, VALID_VALUE, WORD_PAT, result2)) - .isInstanceOf(NullPointerException.class); - assertThatThrownBy(() -> validated.validateText(this, null, VALID_VALUE, WORD_PAT, result2)) - .isInstanceOf(NullPointerException.class); - assertThatThrownBy(() -> validated.validateText(this, VALID_FIELD, VALID_VALUE, null, result2)) - .isInstanceOf(NullPointerException.class); - assertThatThrownBy(() -> validated.validateText(this, VALID_FIELD, VALID_VALUE, WORD_PAT, null)) - .isInstanceOf(NullPointerException.class); + assertThat(Validated.validateRegex(MY_FIELD, "hello", "[x-z]").getResult()).contains(MY_FIELD).contains("hello") + .contains("does not match regular expression [x-z]"); - // null text - result = validated.validateText(this, NULL_FIELD, null, WORD_PAT, result); + assertThatThrownBy(() -> Validated.validateRegex(null, "hello", "ll")).isInstanceOf(NullPointerException.class); - // invalid text - result = validated.validateText(this, INVALID_FIELD, "!!!", WORD_PAT, result); + assertThatCode(() -> Validated.validateRegex(MY_FIELD, null, "ll")).doesNotThrowAnyException(); - // valid text - result = validated.validateText(this, VALID_FIELD, VALID_VALUE, WORD_PAT, result); + assertThatThrownBy(() -> Validated.validateRegex(MY_FIELD, "hello", null)) + .isInstanceOf(NullPointerException.class); + } - assertFalse(result.isValid()); - assertEquals(1, result.getMessageList().size()); + @Test + public void testValidateKeyNotNull() throws CoderException { + assertThat(Validated.validateKeyNotNull(MY_FIELD, new PfConceptKey(NAME, VERSION)).getResult()).isNull(); + assertThat(Validated.validateKeyNotNull(MY_FIELD, new PfConceptKey(NAME, PfConceptKey.NULL_KEY_VERSION)) + .getResult()).isNull(); + assertThat(Validated.validateKeyNotNull(MY_FIELD, new PfConceptKey(PfConceptKey.NULL_KEY_NAME, VERSION)) + .getResult()).isNull(); + + // key is null + assertThat(Validated.validateKeyNotNull(MY_FIELD, new PfConceptKey()).getResult()).contains(MY_FIELD) + .doesNotContain("\"name\"").doesNotContain("\"version\"").contains(Validated.IS_A_NULL_KEY); + + /* + * Key is not null, but key.validate() should fail due to an invalid version. + * Note: have to create the key by decoding from json, as the class will prevent + * an invalid version from being assigned. + */ + PfConceptKey key = new StandardCoder().decode("{'name':'myKey','version':'bogus'}".replace('\'', '"'), + PfConceptKey.class); + assertThat(Validated.validateKeyNotNull(MY_FIELD, key).getResult()).contains(MY_FIELD).contains("version") + .contains("does not match regular expression"); + + // null parameter tests + assertThatThrownBy(() -> Validated.validateKeyNotNull(null, new PfConceptKey())) + .isInstanceOf(NullPointerException.class); - // check result for invalid text - PfValidationMessage msg = result.getMessageList().get(0); - assertEquals(ValidatedTest.class.getName(), msg.getObservedClass()); - assertEquals(MY_TO_STRING, msg.getObservedKey().toString()); - assertTrue(msg.getMessage().contains("invalidField invalid-parameter invalidField")); + assertThatCode(() -> Validated.validateKeyNotNull(MY_FIELD, null)).doesNotThrowAnyException(); } @Test - public void testValidatePropertiesNotNull() { - PfValidationResult result = new PfValidationResult(); - result = validated.validatePropertiesNotNull(this, "properties", null, result); - assertTrue(result.isValid()); - assertEquals(0, result.getMessageList().size()); + public void testValidateKeyVersionNotNull() { + assertThat(Validated.validateKeyVersionNotNull(MY_FIELD, null)).isNull(); - Map<String, Integer> map = new LinkedHashMap<>(); + assertThat(Validated.validateKeyVersionNotNull(MY_FIELD, new PfConceptKey(NAME, VERSION))).isNull(); - // null key - map.put(null, 10); + assertThat(Validated.validateKeyVersionNotNull(MY_FIELD, new PfConceptKey(NAME, PfConceptKey.NULL_KEY_VERSION)) + .getResult()).contains(MY_FIELD).contains("version").contains(Validated.IS_NULL); - // null value - map.put("abc", null); + assertThatThrownBy(() -> Validated.validateKeyVersionNotNull(null, new PfConceptKey())) + .isInstanceOf(NullPointerException.class); - // valid key & value - map.put("def", 11); + assertThatCode(() -> Validated.validateKeyVersionNotNull(MY_FIELD, null)).doesNotThrowAnyException(); + } + @Test + public void testValidateMinIntIntegerBoolean_testValidateMinStringIntegerIntIntegerBoolean() { + /* + * No "special" value, don't check the reference. + */ + BiFunction<String, Integer, ValidationResult> func = Validated.validateMin(10, null, false); + assertThat(func.apply(MY_FIELD, null)).isNull(); - result = validated.validatePropertiesNotNull(this, PROPS_FIELD, map, result); + // exact match + assertThat(func.apply(MY_FIELD, 10)).isNull(); - assertFalse(result.isValid()); - assertEquals(2, result.getMessageList().size()); + assertThat(func.apply(MY_FIELD, 20)).isNull(); - Iterator<PfValidationMessage> it = result.getMessageList().iterator(); + assertThat(func.apply(MY_FIELD, 9).getResult()).contains(MY_FIELD).contains("9") + .contains("is below the minimum value: 10"); - // check null key - PfValidationMessage msg = it.next(); - assertEquals(ValidatedTest.class.getName(), msg.getObservedClass()); - assertEquals(MY_TO_STRING, msg.getObservedKey().toString()); - assertTrue(msg.getMessage().contains("props.null invalid-null")); + /* + * "special" value, don't check the reference. + */ + func = Validated.validateMin(10, 7, false); + assertThat(func.apply(MY_FIELD, null)).isNull(); - // check null value - msg = it.next(); - assertEquals(ValidatedTest.class.getName(), msg.getObservedClass()); - assertEquals(MY_TO_STRING, msg.getObservedKey().toString()); - assertTrue(msg.getMessage().contains("props.abc invalid-null")); + // exact match + assertThat(func.apply(MY_FIELD, 10)).isNull(); - final PfValidationResult result2 = result; - assertThatThrownBy(() -> validated.validatePropertiesNotNull(null, PROPS_FIELD, map, result2)) - .isInstanceOf(NullPointerException.class); - assertThatThrownBy(() -> validated.validatePropertiesNotNull(this, null, map, result2)) - .isInstanceOf(NullPointerException.class); - assertThatThrownBy(() -> validated.validatePropertiesNotNull(this, PROPS_FIELD, map, null)) - .isInstanceOf(NullPointerException.class); - } + assertThat(func.apply(MY_FIELD, 20)).isNull(); - @Test - public void testValidateCollectionNotNull() { - PfValidationResult result = new PfValidationResult(); - result = validated.validateCollectionNotNull(this, COLLECTION_TEXT, null, result); - assertTrue(result.isValid()); - assertEquals(0, result.getMessageList().size()); + // special value - should be ok + assertThat(func.apply(MY_FIELD, 7)).isNull(); - final List<String> lst = Arrays.asList("abc", null, "def", null); + assertThat(func.apply(MY_FIELD, 9).getResult()).contains(MY_FIELD).contains("9") + .contains("is below the minimum value: 10"); - result = validated.validateCollectionNotNull(this, COLLECTION_FIELD, lst, result); + /* + * Check the reference (i.e., generate an error if the value is null). + */ + func = Validated.validateMin(10, null, true); + assertThat(func.apply(MY_FIELD, null).getResult()).contains(MY_FIELD).contains(Validated.IS_NULL); - assertFalse(result.isValid()); - assertEquals(2, result.getMessageList().size()); + // exact match + assertThat(func.apply(MY_FIELD, 10)).isNull(); - Iterator<PfValidationMessage> it = result.getMessageList().iterator(); + assertThat(func.apply(MY_FIELD, 20)).isNull(); - // check first item - PfValidationMessage msg = it.next(); - assertEquals(ValidatedTest.class.getName(), msg.getObservedClass()); - assertEquals(MY_TO_STRING, msg.getObservedKey().toString()); - assertTrue(msg.getMessage().contains("coll.1 invalid-null")); + assertThat(func.apply(MY_FIELD, 9).getResult()).contains(MY_FIELD).contains("9") + .contains("is below the minimum value: 10"); - // check null value - msg = it.next(); - assertEquals(ValidatedTest.class.getName(), msg.getObservedClass()); - assertEquals(MY_TO_STRING, msg.getObservedKey().toString()); - assertTrue(msg.getMessage().contains("coll.3 invalid-null")); - final PfValidationResult result2 = result; - assertThatThrownBy(() -> validated.validateCollectionNotNull(null, COLLECTION_FIELD, lst, result2)) - .isInstanceOf(NullPointerException.class); - assertThatThrownBy(() -> validated.validateCollectionNotNull(this, null, lst, result2)) - .isInstanceOf(NullPointerException.class); - assertThatThrownBy(() -> validated.validateCollectionNotNull(this, COLLECTION_FIELD, lst, null)) - .isInstanceOf(NullPointerException.class); + BiFunction<String, Integer, ValidationResult> func2 = func; + assertThatThrownBy(() -> func2.apply(null, 30)).isInstanceOf(NullPointerException.class); + + assertThatCode(() -> func2.apply(MY_FIELD, null)).doesNotThrowAnyException(); } @Test - public void testValidateCollection() { - PfValidationResult result = new PfValidationResult(); - result = validated.validateCollection(this, COLLECTION_TEXT, null, result); - assertTrue(result.isValid()); - assertEquals(0, result.getMessageList().size()); - - List<MyValid> lst = Arrays.asList(new MyValid(0, false), new MyValid(1, true), null, new MyValid(2, false), - new MyValid(3, true)); - result = validated.validateCollection(this, COLLECTION_FIELD, lst, result); - - assertFalse(result.isValid()); - assertEquals(2, result.getMessageList().size()); - - Iterator<PfValidationMessage> it = result.getMessageList().iterator(); - - // check first item - PfValidationMessage msg = it.next(); - assertEquals(MyValid.class.getName(), msg.getObservedClass()); - assertEquals(MY_TO_STRING, msg.getObservedKey().toString()); - assertTrue(msg.getMessage().contains("index.0 invalid-wrong value")); - - // check null value - msg = it.next(); - assertEquals(MyValid.class.getName(), msg.getObservedClass()); - assertEquals(MY_TO_STRING, msg.getObservedKey().toString()); - assertTrue(msg.getMessage().contains("index.2 invalid-wrong value")); - - final PfValidationResult result2 = result; - assertThatThrownBy(() -> validated.validateCollection(null, COLLECTION_FIELD, lst, result2)) + public void testValidateList() { + BeanValidationResult result = new BeanValidationResult("", this); + Validated.validateList(result, MY_FIELD, null, Validated::validateNotNull); + assertThat(result.getResult()).isNull(); + + result = new BeanValidationResult("", this); + Validated.validateList(result, MY_FIELD, List.of(TEXT, OTHER), Validated::validateNotNull); + assertThat(result.getResult()).isNull(); + + List<String> list = new ArrayList<>(); + list.add(TEXT); + list.add(null); + list.add(OTHER); + list.add(null); + result = new BeanValidationResult("", this); + Validated.validateList(result, MY_FIELD, list, Validated::validateNotNull); + assertThat(result.getResult()).doesNotContain("0").contains("1").doesNotContain("2").contains("3") + .contains(Validated.IS_NULL); + + BeanValidationResult result2 = result; + assertThatThrownBy(() -> Validated.validateList(null, MY_FIELD, List.of(), Validated::validateNotNull)) .isInstanceOf(NullPointerException.class); - assertThatThrownBy(() -> validated.validateCollection(this, null, lst, result2)) + + assertThatThrownBy(() -> Validated.validateList(result2, null, List.of(), Validated::validateNotNull)) .isInstanceOf(NullPointerException.class); - assertThatThrownBy(() -> validated.validateCollection(this, COLLECTION_FIELD, lst, null)) + + assertThatCode(() -> Validated.validateList(result2, MY_FIELD, null, Validated::validateNotNull)) + .doesNotThrowAnyException(); + + assertThatThrownBy(() -> Validated.validateList(result2, MY_FIELD, List.of(), null)) .isInstanceOf(NullPointerException.class); } @Test - public void testValidateConceptCollection() { - PfValidationResult result = new PfValidationResult(); - result = validated.validateConceptCollection(this, COLLECTION_TEXT, null, result); - assertTrue(result.isValid()); - assertEquals(0, result.getMessageList().size()); - - List<MyConcept> lst = Arrays.asList(new MyConcept(0, false), new MyConcept(1, true), null, - new MyConcept(2, false), new MyConcept(3, true)); - result = validated.validateConceptCollection(this, COLLECTION_FIELD, lst, result); - - assertFalse(result.isValid()); - assertEquals(2, result.getMessageList().size()); - - Iterator<PfValidationMessage> it = result.getMessageList().iterator(); - - // check first item - PfValidationMessage msg = it.next(); - assertEquals(MyConcept.class.getName(), msg.getObservedClass()); - assertEquals(MY_TO_STRING, msg.getObservedKey().toString()); - assertTrue(msg.getMessage().contains("index.0 invalid-wrong value")); - - // check null value - msg = it.next(); - assertEquals(MyConcept.class.getName(), msg.getObservedClass()); - assertEquals(MY_TO_STRING, msg.getObservedKey().toString()); - assertTrue(msg.getMessage().contains("index.2 invalid-wrong value")); - - final PfValidationResult result2 = result; - assertThatThrownBy(() -> validated.validateConceptCollection(null, COLLECTION_FIELD, lst, result2)) + public void testValidateMap() { + BeanValidationResult result = new BeanValidationResult("", this); + Validated.validateMap(result, MY_FIELD, null, Validated::validateEntryNotBlankNotBlank); + assertThat(result.getResult()).isNull(); + + result = new BeanValidationResult("", this); + Validated.validateMap(result, MY_FIELD, Map.of("abc", TEXT, "def", OTHER), + Validated::validateEntryNotBlankNotBlank); + assertThat(result.getResult()).isNull(); + + // invalid values + Map<String, String> map = new HashMap<>(); + map.put("ghi", TEXT); + map.put("jkl", ""); + map.put("mno", OTHER); + map.put("pqr", ""); + result = new BeanValidationResult("", this); + Validated.validateMap(result, MY_FIELD, map, Validated::validateEntryNotBlankNotBlank); + assertThat(result.getResult()).doesNotContain("abc").contains("jkl").doesNotContain("mno").contains("pqr") + .contains(Q_VALUE).doesNotContain(Q_KEY).contains(Validated.IS_BLANK); + + // invalid keys + map = new HashMap<>(); + map.put("stu", TEXT); + map.put("", TEXT); + map.put("vwx", OTHER); + map.put(null, OTHER); + result = new BeanValidationResult("", this); + Validated.validateMap(result, MY_FIELD, map, Validated::validateEntryNotBlankNotBlank); + assertThat(result.getResult()).doesNotContain("stu").contains("\"\"").doesNotContain("vwx").contains("null") + .contains(Q_KEY).doesNotContain(Q_VALUE).contains(Validated.IS_BLANK); + + BeanValidationResult result2 = result; + Map<String, String> map2 = map; + assertThatThrownBy(() -> Validated.validateMap(null, MY_FIELD, map2, Validated::validateEntryNotBlankNotBlank)) .isInstanceOf(NullPointerException.class); - assertThatThrownBy(() -> validated.validateConceptCollection(this, null, lst, result2)) + + assertThatThrownBy(() -> Validated.validateMap(result2, null, map2, Validated::validateEntryNotBlankNotBlank)) .isInstanceOf(NullPointerException.class); - assertThatThrownBy(() -> validated.validateConceptCollection(this, COLLECTION_FIELD, lst, null)) + + assertThatCode(() -> Validated.validateMap(result2, MY_FIELD, null, Validated::validateEntryNotBlankNotBlank)) + .doesNotThrowAnyException(); + + assertThatThrownBy(() -> Validated.validateMap(result2, MY_FIELD, map2, null)) .isInstanceOf(NullPointerException.class); } @Test - public void testAddError() { - final PfValidationResult result = new PfValidationResult(); - final PfValidationResult result2 = result; + public void testValidateEntryNotBlankNotBlank() { + assertThat(Validated.validateEntryNotBlankNotBlank(makeEntry(TEXT, OTHER))).isNull(); - assertThatThrownBy(() -> validated.addError(null, VALID_FIELD, result2, ERROR_MESSAGE)) - .isInstanceOf(NullPointerException.class); - assertThatThrownBy(() -> validated.addError(this, null, result2, ERROR_MESSAGE)) - .isInstanceOf(NullPointerException.class); - assertThatThrownBy(() -> validated.addError(this, VALID_FIELD, null, ERROR_MESSAGE)) - .isInstanceOf(NullPointerException.class); - - validated.addError(this, VALID_FIELD, result, "error-A"); - validated.addError(this, VALID_FIELD, result, null); - validated.addError(this, VALID_FIELD, result, "error-B"); + // try invalid values for the key + assertThat(Validated.validateEntryNotBlankNotBlank(makeEntry(null, OTHER)).getResult()).contains(Q_KEY) + .contains(Validated.IS_BLANK).doesNotContain(Q_VALUE); - assertFalse(result.isValid()); - assertEquals(2, result.getMessageList().size()); + assertThat(Validated.validateEntryNotBlankNotBlank(makeEntry(BLANKS, OTHER)).getResult()).contains(Q_KEY) + .contains(Validated.IS_BLANK).doesNotContain(Q_VALUE); - Iterator<PfValidationMessage> it = result.getMessageList().iterator(); + // try invalid values for the value + assertThat(Validated.validateEntryNotBlankNotBlank(makeEntry(TEXT, null)).getResult()).contains(Q_VALUE) + .contains(Validated.IS_BLANK).doesNotContain(Q_KEY); - PfValidationMessage msg = it.next(); - assertEquals(ValidatedTest.class.getName(), msg.getObservedClass()); - assertEquals(MY_TO_STRING, msg.getObservedKey().toString()); - assertTrue(msg.getMessage().contains("validField invalid-error-A")); + assertThat(Validated.validateEntryNotBlankNotBlank(makeEntry(TEXT, BLANKS)).getResult()).contains(Q_VALUE) + .contains(Validated.IS_BLANK).doesNotContain(Q_KEY); - msg = it.next(); - assertEquals(ValidatedTest.class.getName(), msg.getObservedClass()); - assertEquals(MY_TO_STRING, msg.getObservedKey().toString()); - assertTrue(msg.getMessage().contains("validField invalid-error-B")); + // both invalid + assertThat(Validated.validateEntryNotBlankNotBlank(makeEntry(BLANKS, BLANKS)).getResult()).contains(Q_KEY) + .contains(Q_VALUE); } @Test - public void testMakeKey() { - assertThatThrownBy(() -> validated.makeKey(null)).isInstanceOf(NullPointerException.class); + public void testValidateEntryNotBlankNotNull() { + assertThat(Validated.validateEntryNotBlankNotNull(makeEntry(TEXT, OTHER))).isNull(); - PfKey key = validated.makeKey(this); - assertEquals(MY_TO_STRING, key.toString()); - } + // try invalid values for the key + assertThat(Validated.validateEntryNotBlankNotNull(makeEntry(null, OTHER)).getResult()).contains(Q_KEY) + .contains(Validated.IS_BLANK).doesNotContain(Q_VALUE); + + assertThat(Validated.validateEntryNotBlankNotNull(makeEntry(BLANKS, OTHER)).getResult()).contains(Q_KEY) + .contains(Validated.IS_BLANK).doesNotContain(Q_VALUE); - @Override - public String toString() { - return MY_TO_STRING; + // try invalid values for the value + assertThat(Validated.validateEntryNotBlankNotNull(makeEntry(TEXT, null)).getResult()).contains(Q_VALUE) + .contains(Validated.IS_NULL).doesNotContain(Q_KEY); + + // blanks should have no impact for the value + assertThat(Validated.validateEntryNotBlankNotNull(makeEntry(TEXT, BLANKS))).isNull(); + + // both invalid + assertThat(Validated.validateEntryNotBlankNotNull(makeEntry(BLANKS, null)).getResult()).contains(Q_KEY) + .contains(Q_VALUE); } - private static class MyValid extends Validated { - private boolean valid; - private int index; + @Test + public void testValidateEntryValueNotNull() { + assertThat(Validated.validateEntryValueNotNull(makeEntry(TEXT, OTHER))).isNull(); - public MyValid(int index, boolean valid) { - this.index = index; - this.valid = valid; - } + // blanks should have no impact + assertThat(Validated.validateEntryValueNotNull(makeEntry(BLANKS, OTHER))).isNull(); + assertThat(Validated.validateEntryNotBlankNotNull(makeEntry(TEXT, BLANKS))).isNull(); - @Override - public PfValidationResult validate(PfValidationResult result) { - if (!valid) { - this.addError(this, "index." + index, result, "wrong value"); - } + assertThat(Validated.validateEntryValueNotNull(makeEntry(null, OTHER)).getResult()).contains(Q_KEY) + .contains(Validated.IS_NULL).doesNotContain(Q_VALUE); - return result; - } + assertThat(Validated.validateEntryValueNotNull(makeEntry(TEXT, null)).getResult()).contains(Q_VALUE) + .contains(Validated.IS_NULL).doesNotContain(Q_KEY); - @Override - public String toString() { - return MY_TO_STRING; - } + // should invoke the value's validate() method, which should return success + assertThat(Validated.validateEntryValueNotNull(makeEntry(TEXT, new MyString(TEXT)))).isNull(); + + // should invoke the value's validate() method, which should return failure + assertThat(Validated.validateEntryValueNotNull(makeEntry(TEXT, new MyString(OTHER))).getResult()) + .contains(Q_VALUE).contains(NOT_SAME).doesNotContain(Q_KEY); + + // both invalid + assertThat(Validated.validateEntryValueNotNull(makeEntry(null, null)).getResult()).contains(Q_KEY) + .contains(Q_VALUE); } - private static class MyConcept extends PfConceptKey { - private static final long serialVersionUID = 1L; + @Test + public void testGetKeyId() { + // not a key field - should just use the given value + BeanValidationResult result = new BeanValidationResult("", this); + Validated.addResult(result, MY_FIELD, TEXT, "some message"); + assertThat(result.getResult()).contains(MY_FIELD).contains(TEXT).contains("some message"); + + // repeat with a key field - should use the key's ID + result = new BeanValidationResult("", this); + Validated.addResult(result, MY_FIELD, new PfConceptKey(NAME, VERSION), "some message"); + assertThat(result.getResult()).contains(MY_FIELD).contains("myKey:1.0.0").contains("some message"); + } - private boolean valid; - private int index; + private <V> Map.Entry<String, V> makeEntry(String key, V value) { + Map<String, V> map = new HashMap<>(); + map.put(key, value); + return map.entrySet().iterator().next(); + } - public MyConcept(int index, boolean valid) { - this.index = index; - this.valid = valid; - } + @AllArgsConstructor + private static class MyString extends Validated { + private final String text; @Override - public PfValidationResult validate(PfValidationResult result) { - if (!valid) { - new Validated().addError(this, "index." + index, result, "wrong value"); + public ValidationResult validate(String fieldName) { + if (TEXT.equals(text)) { + return null; } - return result; - } - - @Override - public String toString() { - return MY_TO_STRING; + return new ObjectValidationResult(fieldName, text, ValidationStatus.INVALID, NOT_SAME); } } } diff --git a/models-base/src/test/java/org/onap/policy/models/base/ValidationTest.java b/models-base/src/test/java/org/onap/policy/models/base/ValidationTest.java deleted file mode 100644 index 6030d2ab9..000000000 --- a/models-base/src/test/java/org/onap/policy/models/base/ValidationTest.java +++ /dev/null @@ -1,133 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * Copyright (C) 2019-2020 Nordix Foundation. - * Modifications Copyright (C) 2019 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. - * - * SPDX-License-Identifier: Apache-2.0 - * ============LICENSE_END========================================================= - */ - -package org.onap.policy.models.base; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertTrue; - -import org.junit.Test; -import org.onap.policy.models.base.PfValidationResult.ValidationResult; - -public class ValidationTest { - - private static final String HELLO = "hello"; - private static final String SOME_MESSAGE = "Some message"; - - @Test - public void testValidation1() { - PfValidationResult result = new PfValidationResult(); - PfConceptKey pfKeyey = new PfConceptKey("PK", "0.0.1"); - result = pfKeyey.validate(result); - - assertNotNull(result); - assertTrue(result.isOk()); - assertTrue(result.isValid()); - assertEquals(PfValidationResult.ValidationResult.VALID, result.getValidationResult()); - assertNotNull(result.getMessageList()); - - PfValidationMessage vmess0 = new PfValidationMessage(PfConceptKey.getNullKey(), PfConceptKey.class, - ValidationResult.VALID, SOME_MESSAGE); - result.addValidationMessage(vmess0); - - assertTrue(result.isOk()); - assertTrue(result.isValid()); - assertEquals(PfValidationResult.ValidationResult.VALID, result.getValidationResult()); - assertNotNull(result.getMessageList()); - assertNotNull(HELLO, result.toString()); - - PfValidationMessage vmess1 = new PfValidationMessage(PfConceptKey.getNullKey(), PfConceptKey.class, - ValidationResult.OBSERVATION, SOME_MESSAGE); - result.addValidationMessage(vmess1); - - assertTrue(result.isOk()); - assertTrue(result.isValid()); - assertEquals(PfValidationResult.ValidationResult.OBSERVATION, result.getValidationResult()); - assertNotNull(result.getMessageList()); - assertNotNull(HELLO, result.toString()); - } - - - @Test - public void testValidation2() { - PfValidationResult result = new PfValidationResult(); - - PfValidationMessage vmess2 = new PfValidationMessage(PfConceptKey.getNullKey(), PfConceptKey.class, - ValidationResult.WARNING, SOME_MESSAGE); - result.addValidationMessage(vmess2); - - assertFalse(result.isOk()); - assertTrue(result.isValid()); - assertEquals(PfValidationResult.ValidationResult.WARNING, result.getValidationResult()); - assertNotNull(result.getMessageList()); - assertNotNull(HELLO, result.toString()); - - PfValidationMessage vmess3 = new PfValidationMessage(PfConceptKey.getNullKey(), PfConceptKey.class, - ValidationResult.INVALID, SOME_MESSAGE); - result.addValidationMessage(vmess3); - - assertFalse(result.isOk()); - assertFalse(result.isValid()); - assertEquals(PfValidationResult.ValidationResult.INVALID, result.getValidationResult()); - assertNotNull(result.getMessageList()); - assertNotNull(HELLO, result.toString()); - - assertEquals(PfValidationResult.ValidationResult.INVALID, result.getMessageList().get(1).getValidationResult()); - assertEquals(SOME_MESSAGE, result.getMessageList().get(1).getMessage()); - assertEquals(PfConceptKey.class.getName(), result.getMessageList().get(1).getObservedClass()); - assertEquals(PfConceptKey.getNullKey(), result.getMessageList().get(1).getObservedKey()); - } - - @Test - public void testValidationAppend() { - PfValidationResult result = new PfValidationResult(); - - PfValidationResult result2 = new PfValidationResult(); - PfValidationMessage vmess1 = new PfValidationMessage(PfConceptKey.getNullKey(), PfConceptKey.class, - ValidationResult.OBSERVATION, "Message 1"); - result2.addValidationMessage(vmess1); - - result.append(result2); - assertEquals(1, result.getMessageList().size()); - assertEquals(ValidationResult.OBSERVATION, result.getValidationResult()); - - PfValidationResult result3 = new PfValidationResult(); - PfValidationMessage vmess2 = new PfValidationMessage(PfConceptKey.getNullKey(), PfConceptKey.class, - ValidationResult.WARNING, "Message 2"); - result3.addValidationMessage(vmess2); - result.append(result3); - assertEquals(2, result.getMessageList().size()); - assertEquals(ValidationResult.WARNING, result.getValidationResult()); - - PfValidationResult result4 = new PfValidationResult(); - PfValidationMessage vmess3 = new PfValidationMessage(PfConceptKey.getNullKey(), PfConceptKey.class, - ValidationResult.INVALID, "Message 3"); - PfValidationMessage vmess4 = new PfValidationMessage(PfConceptKey.getNullKey(), PfConceptKey.class, - ValidationResult.VALID, "Message 4"); - result4.addValidationMessage(vmess3); - result4.addValidationMessage(vmess4); - result.append(result4); - assertEquals(4, result.getMessageList().size()); - assertEquals(ValidationResult.INVALID, result.getValidationResult()); - } -} diff --git a/models-base/src/test/java/org/onap/policy/models/base/testconcepts/DummyPfConcept.java b/models-base/src/test/java/org/onap/policy/models/base/testconcepts/DummyPfConcept.java index be398b95f..67a450702 100644 --- a/models-base/src/test/java/org/onap/policy/models/base/testconcepts/DummyPfConcept.java +++ b/models-base/src/test/java/org/onap/policy/models/base/testconcepts/DummyPfConcept.java @@ -1,7 +1,7 @@ /*- * ============LICENSE_START======================================================= * Copyright (C) 2019 Nordix Foundation. - * Modifications Copyright (C) 2019 AT&T Intellectual Property. All rights reserved. + * Modifications Copyright (C) 2019-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. @@ -27,13 +27,12 @@ import lombok.Data; import lombok.EqualsAndHashCode; import lombok.NonNull; import org.apache.commons.lang3.ObjectUtils; +import org.onap.policy.common.parameters.BeanValidationResult; +import org.onap.policy.common.parameters.ValidationResult; import org.onap.policy.models.base.PfAuthorative; import org.onap.policy.models.base.PfConcept; import org.onap.policy.models.base.PfConceptKey; import org.onap.policy.models.base.PfKey; -import org.onap.policy.models.base.PfValidationMessage; -import org.onap.policy.models.base.PfValidationResult; -import org.onap.policy.models.base.PfValidationResult.ValidationResult; @Data @EqualsAndHashCode(callSuper = false) @@ -102,20 +101,11 @@ public class DummyPfConcept extends PfConcept implements PfAuthorative<DummyAuth } @Override - public PfValidationResult validate(PfValidationResult resultIn) { - PfValidationResult result = resultIn; + public ValidationResult validate(@NonNull String fieldName) { + BeanValidationResult result = new BeanValidationResult(fieldName, this); - if (key.isNullKey()) { - result.addValidationMessage( - new PfValidationMessage(key, this.getClass(), ValidationResult.INVALID, "key is a null key")); - } - - result = key.validate(result); - - if (description != null && description.trim().length() == 0) { - result.addValidationMessage(new PfValidationMessage(key, this.getClass(), ValidationResult.INVALID, - "property description may not be blank")); - } + result.addResult(validateKeyNotNull("key", key)); + result.addResult(validateNotBlank("description", description, false)); return result; } diff --git a/models-base/src/test/java/org/onap/policy/models/base/testconcepts/DummyPfKey.java b/models-base/src/test/java/org/onap/policy/models/base/testconcepts/DummyPfKey.java index 81ebb6e59..5a5891ad6 100644 --- a/models-base/src/test/java/org/onap/policy/models/base/testconcepts/DummyPfKey.java +++ b/models-base/src/test/java/org/onap/policy/models/base/testconcepts/DummyPfKey.java @@ -1,7 +1,7 @@ /*- * ============LICENSE_START======================================================= * Copyright (C) 2019 Nordix Foundation. - * Modifications Copyright (C) 2019 AT&T Intellectual Property. All rights reserved. + * Modifications Copyright (C) 2019-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. @@ -24,9 +24,9 @@ package org.onap.policy.models.base.testconcepts; import java.util.Arrays; import java.util.List; import lombok.NonNull; +import org.onap.policy.common.parameters.ValidationResult; import org.onap.policy.models.base.PfConcept; import org.onap.policy.models.base.PfKey; -import org.onap.policy.models.base.PfValidationResult; public class DummyPfKey extends PfKey { private static final long serialVersionUID = 1L; @@ -75,7 +75,7 @@ public class DummyPfKey extends PfKey { } @Override - public PfValidationResult validate(PfValidationResult result) { + public ValidationResult validate(@NonNull String fieldName) { return null; } diff --git a/models-base/src/test/java/org/onap/policy/models/base/testconcepts/DummyPfModel.java b/models-base/src/test/java/org/onap/policy/models/base/testconcepts/DummyPfModel.java index 764b91b24..f828fba09 100644 --- a/models-base/src/test/java/org/onap/policy/models/base/testconcepts/DummyPfModel.java +++ b/models-base/src/test/java/org/onap/policy/models/base/testconcepts/DummyPfModel.java @@ -1,7 +1,7 @@ /*- * ============LICENSE_START======================================================= * Copyright (C) 2019 Nordix Foundation. - * Modifications Copyright (C) 2019 AT&T Intellectual Property. All rights reserved. + * Modifications Copyright (C) 2019-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. @@ -25,12 +25,13 @@ import java.util.ArrayList; import java.util.List; import lombok.Data; import lombok.EqualsAndHashCode; +import lombok.NonNull; +import org.onap.policy.common.parameters.BeanValidationResult; import org.onap.policy.models.base.PfConcept; import org.onap.policy.models.base.PfConceptKey; import org.onap.policy.models.base.PfKey; import org.onap.policy.models.base.PfModel; import org.onap.policy.models.base.PfUtils; -import org.onap.policy.models.base.PfValidationResult; @Data @EqualsAndHashCode(callSuper = true) @@ -108,11 +109,12 @@ public class DummyPfModel extends PfModel { } @Override - public PfValidationResult validate(final PfValidationResult resultIn) { - PfValidationResult result = super.validate(resultIn); + public BeanValidationResult validate(@NonNull String fieldName) { + BeanValidationResult result = super.validate(fieldName); + int count = 0; for (PfKey pfKey : keyList) { - result = pfKey.validate(result); + result.addResult(pfKey.validate("keyList." + (count++))); } return result; diff --git a/models-dao/src/test/java/org/onap/policy/models/dao/DummyConceptEntity.java b/models-dao/src/test/java/org/onap/policy/models/dao/DummyConceptEntity.java index 665651599..4ef3eb94d 100644 --- a/models-dao/src/test/java/org/onap/policy/models/dao/DummyConceptEntity.java +++ b/models-dao/src/test/java/org/onap/policy/models/dao/DummyConceptEntity.java @@ -1,7 +1,7 @@ /*- * ============LICENSE_START======================================================= * Copyright (C) 2019 Nordix Foundation. - * Modifications Copyright (C) 2019 AT&T Intellectual Property. All rights reserved. + * Modifications Copyright (C) 2019-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. @@ -31,11 +31,11 @@ import javax.persistence.Table; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.NonNull; +import org.onap.policy.common.parameters.BeanValidationResult; import org.onap.policy.common.utils.validation.Assertions; import org.onap.policy.models.base.PfConcept; import org.onap.policy.models.base.PfConceptKey; import org.onap.policy.models.base.PfKey; -import org.onap.policy.models.base.PfValidationResult; @Entity @Table(name = "DummyConceptEntity") @@ -100,8 +100,10 @@ public class DummyConceptEntity extends PfConcept { } @Override - public PfValidationResult validate(final PfValidationResult result) { - return key.validate(result); + public BeanValidationResult validate(@NonNull String fieldName) { + BeanValidationResult result = new BeanValidationResult(fieldName, this); + result.addResult(key.validate("key")); + return result; } @Override diff --git a/models-dao/src/test/java/org/onap/policy/models/dao/DummyReferenceEntity.java b/models-dao/src/test/java/org/onap/policy/models/dao/DummyReferenceEntity.java index ee755b4f2..abd9e53ca 100644 --- a/models-dao/src/test/java/org/onap/policy/models/dao/DummyReferenceEntity.java +++ b/models-dao/src/test/java/org/onap/policy/models/dao/DummyReferenceEntity.java @@ -1,7 +1,7 @@ /*- * ============LICENSE_START======================================================= * Copyright (C) 2019 Nordix Foundation. - * Modifications Copyright (C) 2019 AT&T Intellectual Property. All rights reserved. + * Modifications Copyright (C) 2019-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. @@ -30,11 +30,11 @@ import javax.persistence.Table; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.NonNull; +import org.onap.policy.common.parameters.BeanValidationResult; import org.onap.policy.common.utils.validation.Assertions; import org.onap.policy.models.base.PfConcept; import org.onap.policy.models.base.PfKey; import org.onap.policy.models.base.PfReferenceKey; -import org.onap.policy.models.base.PfValidationResult; @Entity @Table(name = "DummyReferenceEntity") @@ -82,8 +82,10 @@ public class DummyReferenceEntity extends PfConcept { } @Override - public PfValidationResult validate(final PfValidationResult result) { - return key.validate(result); + public BeanValidationResult validate(@NonNull String fieldName) { + BeanValidationResult result = new BeanValidationResult(fieldName, this); + result.addResult(key.validate("key")); + return result; } @Override diff --git a/models-dao/src/test/java/org/onap/policy/models/dao/DummyTimestampEntity.java b/models-dao/src/test/java/org/onap/policy/models/dao/DummyTimestampEntity.java index 18d87aeba..37b18c113 100644 --- a/models-dao/src/test/java/org/onap/policy/models/dao/DummyTimestampEntity.java +++ b/models-dao/src/test/java/org/onap/policy/models/dao/DummyTimestampEntity.java @@ -1,6 +1,7 @@ /*- * ============LICENSE_START======================================================= * Copyright (C) 2020 Nordix Foundation. + * Modifications 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. @@ -29,10 +30,10 @@ import javax.persistence.Table; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.NonNull; +import org.onap.policy.common.parameters.BeanValidationResult; import org.onap.policy.models.base.PfConcept; import org.onap.policy.models.base.PfKey; import org.onap.policy.models.base.PfTimestampKey; -import org.onap.policy.models.base.PfValidationResult; @Entity @Table(name = "DummyTimestampEntity") @@ -80,8 +81,10 @@ public class DummyTimestampEntity extends PfConcept { } @Override - public PfValidationResult validate(final PfValidationResult result) { - return key.validate(result); + public BeanValidationResult validate(@NonNull String fieldName) { + BeanValidationResult result = new BeanValidationResult(fieldName, this); + result.addResult(key.validate("key")); + return result; } @Override diff --git a/models-pdp/src/main/java/org/onap/policy/models/pdp/persistence/concepts/JpaPdp.java b/models-pdp/src/main/java/org/onap/policy/models/pdp/persistence/concepts/JpaPdp.java index 5820a355b..d231fe7e4 100644 --- a/models-pdp/src/main/java/org/onap/policy/models/pdp/persistence/concepts/JpaPdp.java +++ b/models-pdp/src/main/java/org/onap/policy/models/pdp/persistence/concepts/JpaPdp.java @@ -2,7 +2,7 @@ * ============LICENSE_START======================================================= * ONAP Policy Model * ================================================================================ - * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved. + * Copyright (C) 2019-2020 AT&T Intellectual Property. All rights reserved. * Modifications Copyright (C) 2019 Nordix Foundation. * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); @@ -35,14 +35,11 @@ import lombok.Data; import lombok.EqualsAndHashCode; import lombok.NonNull; import org.apache.commons.lang3.ObjectUtils; -import org.apache.commons.lang3.StringUtils; +import org.onap.policy.common.parameters.BeanValidationResult; import org.onap.policy.models.base.PfAuthorative; import org.onap.policy.models.base.PfConcept; import org.onap.policy.models.base.PfKey; import org.onap.policy.models.base.PfReferenceKey; -import org.onap.policy.models.base.PfValidationMessage; -import org.onap.policy.models.base.PfValidationResult; -import org.onap.policy.models.base.PfValidationResult.ValidationResult; import org.onap.policy.models.pdp.concepts.Pdp; import org.onap.policy.models.pdp.enums.PdpHealthStatus; import org.onap.policy.models.pdp.enums.PdpState; @@ -163,40 +160,19 @@ public class JpaPdp extends PfConcept implements PfAuthorative<Pdp>, Serializabl } @Override - public PfValidationResult validate(@NonNull final PfValidationResult resultIn) { - PfValidationResult result = resultIn; + public BeanValidationResult validate(@NonNull String fieldName) { + BeanValidationResult result = new BeanValidationResult(fieldName, this); - if (key.isNullKey()) { - result.addValidationMessage( - new PfValidationMessage(key, this.getClass(), ValidationResult.INVALID, "key is a null key")); - } - - result = key.validate(result); - - if (key.getParentConceptKey().isNullKey()) { - result.addValidationMessage(new PfValidationMessage(key, this.getClass(), ValidationResult.INVALID, - "parent of key is a null key")); - } + result.addResult(validateKeyNotNull("key", key)); + result.addResult(validateKeyNotNull("parent of key", key.getParentConceptKey())); if (PfKey.NULL_KEY_NAME.equals(key.getParentLocalName())) { - result.addValidationMessage(new PfValidationMessage(key, this.getClass(), ValidationResult.INVALID, - "local name of parent of key is null")); + addResult(result, "local name of parent of key", key.getParentLocalName(), IS_NULL); } - if (pdpState == null) { - result.addValidationMessage(new PfValidationMessage(key, this.getClass(), ValidationResult.INVALID, - "PDP state may not be null")); - } - - if (healthy == null) { - result.addValidationMessage(new PfValidationMessage(key, this.getClass(), ValidationResult.INVALID, - "PDP health status may not be null")); - } - - if (message != null && StringUtils.isBlank(message)) { - result.addValidationMessage(new PfValidationMessage(key, this.getClass(), ValidationResult.INVALID, - "message may not be blank")); - } + result.addResult(validateNotNull("pdpState", pdpState)); + result.addResult(validateNotNull("healthy", healthy)); + result.addResult(validateNotBlank("message", message, false)); return result; } diff --git a/models-pdp/src/main/java/org/onap/policy/models/pdp/persistence/concepts/JpaPdpGroup.java b/models-pdp/src/main/java/org/onap/policy/models/pdp/persistence/concepts/JpaPdpGroup.java index 67458cf5f..66d36d8d6 100644 --- a/models-pdp/src/main/java/org/onap/policy/models/pdp/persistence/concepts/JpaPdpGroup.java +++ b/models-pdp/src/main/java/org/onap/policy/models/pdp/persistence/concepts/JpaPdpGroup.java @@ -44,17 +44,14 @@ import lombok.Data; import lombok.EqualsAndHashCode; import lombok.NonNull; import org.apache.commons.lang3.ObjectUtils; -import org.apache.commons.lang3.StringUtils; -import org.onap.policy.common.utils.validation.ParameterValidationUtils; +import org.onap.policy.common.parameters.BeanValidationResult; import org.onap.policy.models.base.PfAuthorative; import org.onap.policy.models.base.PfConcept; import org.onap.policy.models.base.PfConceptKey; import org.onap.policy.models.base.PfKey; import org.onap.policy.models.base.PfReferenceKey; import org.onap.policy.models.base.PfUtils; -import org.onap.policy.models.base.PfValidationMessage; -import org.onap.policy.models.base.PfValidationResult; -import org.onap.policy.models.base.PfValidationResult.ValidationResult; +import org.onap.policy.models.base.Validated; import org.onap.policy.models.pdp.concepts.PdpGroup; import org.onap.policy.models.pdp.concepts.PdpSubGroup; import org.onap.policy.models.pdp.enums.PdpState; @@ -218,61 +215,21 @@ public class JpaPdpGroup extends PfConcept implements PfAuthorative<PdpGroup> { } @Override - public PfValidationResult validate(@NonNull final PfValidationResult resultIn) { - PfValidationResult result = resultIn; + public BeanValidationResult validate(@NonNull String fieldName) { + BeanValidationResult result = new BeanValidationResult(fieldName, this); - if (key.isNullKey()) { - result.addValidationMessage( - new PfValidationMessage(key, this.getClass(), ValidationResult.INVALID, "key is a null key")); - } - - result = key.validate(result); - - if (description != null && StringUtils.isBlank(description)) { - result.addValidationMessage(new PfValidationMessage(key, this.getClass(), ValidationResult.INVALID, - "description may not be blank")); - } - - if (pdpGroupState == null) { - result.addValidationMessage(new PfValidationMessage(key, this.getClass(), ValidationResult.INVALID, - "pdpGroupState may not be null")); - } + result.addResult(validateKeyNotNull("key", key)); + result.addResult(validateNotBlank("description", description, false)); + result.addResult(validateNotNull("pdpGroupState", pdpGroupState)); - if (properties != null) { - validateProperties(result); - } + validateMap(result, "properties", properties, Validated::validateEntryNotBlankNotBlank); - if (pdpSubGroups == null) { - result.addValidationMessage(new PfValidationMessage(key, this.getClass(), ValidationResult.INVALID, - "a PDP group must have a list of PDP subgroups")); - } else { - for (JpaPdpSubGroup jpaPdpSubgroup : pdpSubGroups) { - result = jpaPdpSubgroup.validate(result); - } - } + result.addResult(validateNotNull("pdpSubGroups", pdpSubGroups)); + validateList(result, "pdpSubGroups", pdpSubGroups, Validated::validateNotNull); return result; } - /** - * Validate the properties. - * - * @param result where to place any new validation results - */ - private void validateProperties(PfValidationResult result) { - - for (Entry<String, String> propertyEntry : properties.entrySet()) { - if (!ParameterValidationUtils.validateStringParameter(propertyEntry.getKey())) { - result.addValidationMessage(new PfValidationMessage(key, this.getClass(), ValidationResult.INVALID, - "a property key may not be null or blank")); - } - if (!ParameterValidationUtils.validateStringParameter(propertyEntry.getValue())) { - result.addValidationMessage(new PfValidationMessage(key, this.getClass(), ValidationResult.INVALID, - "a property value may not be null or blank")); - } - } - } - @Override public int compareTo(final PfConcept otherConcept) { if (otherConcept == null) { diff --git a/models-pdp/src/main/java/org/onap/policy/models/pdp/persistence/concepts/JpaPdpStatistics.java b/models-pdp/src/main/java/org/onap/policy/models/pdp/persistence/concepts/JpaPdpStatistics.java index d08a19a6a..49163ee8c 100644 --- a/models-pdp/src/main/java/org/onap/policy/models/pdp/persistence/concepts/JpaPdpStatistics.java +++ b/models-pdp/src/main/java/org/onap/policy/models/pdp/persistence/concepts/JpaPdpStatistics.java @@ -3,6 +3,7 @@ * ONAP Policy Model * ================================================================================ * Copyright (C) 2019 Nordix Foundation. + * Modifications 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. @@ -37,14 +38,12 @@ import lombok.Data; import lombok.EqualsAndHashCode; import lombok.NonNull; import org.apache.commons.lang3.builder.CompareToBuilder; +import org.onap.policy.common.parameters.BeanValidationResult; import org.onap.policy.models.base.PfAuthorative; import org.onap.policy.models.base.PfConcept; import org.onap.policy.models.base.PfKey; import org.onap.policy.models.base.PfTimestampKey; import org.onap.policy.models.base.PfUtils; -import org.onap.policy.models.base.PfValidationMessage; -import org.onap.policy.models.base.PfValidationResult; -import org.onap.policy.models.base.PfValidationResult.ValidationResult; import org.onap.policy.models.pdp.concepts.PdpEngineWorkerStatistics; import org.onap.policy.models.pdp.concepts.PdpStatistics; @@ -203,15 +202,10 @@ public class JpaPdpStatistics extends PfConcept implements PfAuthorative<PdpStat } @Override - public PfValidationResult validate(@NonNull PfValidationResult resultIn) { - PfValidationResult result = resultIn; + public BeanValidationResult validate(@NonNull String fieldName) { + BeanValidationResult result = new BeanValidationResult(fieldName, this); - if (key.isNullKey()) { - result.addValidationMessage( - new PfValidationMessage(key, this.getClass(), ValidationResult.INVALID, "key is a null key")); - } - - result = key.validate(result); + result.addResult(validateKeyNotNull("key", key)); return result; } diff --git a/models-pdp/src/main/java/org/onap/policy/models/pdp/persistence/concepts/JpaPdpSubGroup.java b/models-pdp/src/main/java/org/onap/policy/models/pdp/persistence/concepts/JpaPdpSubGroup.java index 7d018860e..c3d172a85 100644 --- a/models-pdp/src/main/java/org/onap/policy/models/pdp/persistence/concepts/JpaPdpSubGroup.java +++ b/models-pdp/src/main/java/org/onap/policy/models/pdp/persistence/concepts/JpaPdpSubGroup.java @@ -2,7 +2,7 @@ * ============LICENSE_START======================================================= * ONAP Policy Model * ================================================================================ - * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved. + * Copyright (C) 2019-2020 AT&T Intellectual Property. All rights reserved. * Modifications Copyright (C) 2019 Nordix Foundation. * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); @@ -43,7 +43,7 @@ import javax.persistence.Table; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.NonNull; -import org.onap.policy.common.utils.validation.ParameterValidationUtils; +import org.onap.policy.common.parameters.BeanValidationResult; import org.onap.policy.models.base.PfAuthorative; import org.onap.policy.models.base.PfConcept; import org.onap.policy.models.base.PfConceptKey; @@ -52,9 +52,7 @@ import org.onap.policy.models.base.PfKeyUse; import org.onap.policy.models.base.PfReferenceKey; import org.onap.policy.models.base.PfSearchableKey; import org.onap.policy.models.base.PfUtils; -import org.onap.policy.models.base.PfValidationMessage; -import org.onap.policy.models.base.PfValidationResult; -import org.onap.policy.models.base.PfValidationResult.ValidationResult; +import org.onap.policy.models.base.Validated; import org.onap.policy.models.pdp.concepts.Pdp; import org.onap.policy.models.pdp.concepts.PdpSubGroup; import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicyIdentifier; @@ -279,80 +277,33 @@ public class JpaPdpSubGroup extends PfConcept implements PfAuthorative<PdpSubGro } @Override - public PfValidationResult validate(@NonNull final PfValidationResult resultIn) { - PfValidationResult result = resultIn; + public BeanValidationResult validate(@NonNull String fieldName) { + BeanValidationResult result = new BeanValidationResult(fieldName, this); - if (key.isNullKey()) { - result.addValidationMessage( - new PfValidationMessage(key, this.getClass(), ValidationResult.INVALID, "key is a null key")); - } - - result = key.validate(result); - - if (key.getParentConceptKey().isNullKey()) { - result.addValidationMessage(new PfValidationMessage(key, this.getClass(), ValidationResult.INVALID, - "parent of key is a null key")); - } + result.addResult(validateKeyNotNull("key", key)); + result.addResult(validateKeyNotNull("parent of key", key.getParentConceptKey())); if (currentInstanceCount < 0) { - result.addValidationMessage(new PfValidationMessage(key, this.getClass(), ValidationResult.INVALID, - "the current instance count of a PDP sub group may not be negative")); + addResult(result, "currentInstanceCount", currentInstanceCount, "is negative"); } if (desiredInstanceCount < 0) { - result.addValidationMessage(new PfValidationMessage(key, this.getClass(), ValidationResult.INVALID, - "the desired instance count of a PDP sub group may not be negative")); - } - - if (properties != null) { - for (Entry<String, String> propertyEntry : properties.entrySet()) { - if (!ParameterValidationUtils.validateStringParameter(propertyEntry.getKey())) { - result.addValidationMessage(new PfValidationMessage(key, this.getClass(), ValidationResult.INVALID, - "a property key may not be null or blank")); - } - if (!ParameterValidationUtils.validateStringParameter(propertyEntry.getValue())) { - result.addValidationMessage(new PfValidationMessage(key, this.getClass(), ValidationResult.INVALID, - "a property value may not be null or blank")); - } - } + addResult(result, "desiredInstanceCount", desiredInstanceCount, "is negative"); } - return validateSubConcepts(result); - } + validateMap(result, "properties", properties, Validated::validateEntryNotBlankNotBlank); - /** - * Validate collections of sub concepts. - * - * @param result the result in which to store the validation result - * @return the validation result including the results of this method - */ - private PfValidationResult validateSubConcepts(PfValidationResult result) { if (supportedPolicyTypes == null || supportedPolicyTypes.isEmpty()) { - result.addValidationMessage(new PfValidationMessage(key, this.getClass(), ValidationResult.INVALID, - "a PDP subgroup must support at least one policy type")); + addResult(result, "supportedPolicyTypes", supportedPolicyTypes, "is empty"); } else { - for (PfSearchableKey supportedPolicyType : supportedPolicyTypes) { - result = supportedPolicyType.validate(result); - } + validateList(result, "supportedPolicyTypes", supportedPolicyTypes, Validated::validateNotNull); } - if (policies == null) { - result.addValidationMessage(new PfValidationMessage(key, this.getClass(), ValidationResult.INVALID, - "a PDP subgroup must have a list of policies")); - } else { - for (PfConceptKey policyKey : policies) { - result = policyKey.validate(result); - } - } + result.validateNotNull("policies", policies); + validateList(result, "policies", policies, Validated::validateNotNull); - if (pdpInstances == null) { - result.addValidationMessage(new PfValidationMessage(key, this.getClass(), ValidationResult.INVALID, - "a PDP subgroup must have a list of PDPs")); - } else { - for (JpaPdp jpaPdp : pdpInstances) { - result = jpaPdp.validate(result); - } - } + result.validateNotNull("pdpInstances", pdpInstances); + validateList(result, "pdpInstances", pdpInstances, Validated::validateNotNull); return result; } diff --git a/models-pdp/src/main/java/org/onap/policy/models/pdp/persistence/provider/PdpProvider.java b/models-pdp/src/main/java/org/onap/policy/models/pdp/persistence/provider/PdpProvider.java index 7ea7cd376..e496521b7 100644 --- a/models-pdp/src/main/java/org/onap/policy/models/pdp/persistence/provider/PdpProvider.java +++ b/models-pdp/src/main/java/org/onap/policy/models/pdp/persistence/provider/PdpProvider.java @@ -1,7 +1,7 @@ /*- * ============LICENSE_START======================================================= * Copyright (C) 2019 Nordix Foundation. - * Modifications Copyright (C) 2019 AT&T Intellectual Property. All rights reserved. + * Modifications Copyright (C) 2019-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. @@ -25,12 +25,12 @@ import java.util.ArrayList; import java.util.List; import javax.ws.rs.core.Response; import lombok.NonNull; +import org.onap.policy.common.parameters.BeanValidationResult; import org.onap.policy.models.base.PfConceptKey; import org.onap.policy.models.base.PfKey; import org.onap.policy.models.base.PfModelException; import org.onap.policy.models.base.PfModelRuntimeException; import org.onap.policy.models.base.PfReferenceKey; -import org.onap.policy.models.base.PfValidationResult; import org.onap.policy.models.dao.PfDao; import org.onap.policy.models.pdp.concepts.Pdp; import org.onap.policy.models.pdp.concepts.PdpGroup; @@ -40,8 +40,6 @@ import org.onap.policy.models.pdp.concepts.PdpSubGroup; import org.onap.policy.models.pdp.persistence.concepts.JpaPdp; import org.onap.policy.models.pdp.persistence.concepts.JpaPdpGroup; import org.onap.policy.models.pdp.persistence.concepts.JpaPdpSubGroup; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** * This class provides the provision of information on PAP concepts in the database to callers. @@ -49,10 +47,6 @@ import org.slf4j.LoggerFactory; * @author Liam Fallon (liam.fallon@est.tech) */ public class PdpProvider { - private static final Logger LOGGER = LoggerFactory.getLogger(PdpProvider.class); - - // Recurring string constants - private static final String NOT_VALID = "\" is not valid \n"; /** * Get PDP groups. @@ -96,11 +90,9 @@ public class PdpProvider { JpaPdpGroup jpaPdpGroup = new JpaPdpGroup(); jpaPdpGroup.fromAuthorative(pdpGroup); - PfValidationResult validationResult = jpaPdpGroup.validate(new PfValidationResult()); - if (!validationResult.isOk()) { - String errorMessage = "pdp group \"" + jpaPdpGroup.getId() + NOT_VALID + validationResult; - LOGGER.warn(errorMessage); - throw new PfModelRuntimeException(Response.Status.BAD_REQUEST, errorMessage); + BeanValidationResult validationResult = jpaPdpGroup.validate("PDP group"); + if (!validationResult.isValid()) { + throw new PfModelRuntimeException(Response.Status.BAD_REQUEST, validationResult.getResult()); } dao.create(jpaPdpGroup); @@ -133,11 +125,9 @@ public class PdpProvider { JpaPdpGroup jpaPdpGroup = new JpaPdpGroup(); jpaPdpGroup.fromAuthorative(pdpGroup); - PfValidationResult validationResult = jpaPdpGroup.validate(new PfValidationResult()); - if (!validationResult.isOk()) { - String errorMessage = "pdp group \"" + jpaPdpGroup.getId() + NOT_VALID + validationResult; - LOGGER.warn(errorMessage); - throw new PfModelRuntimeException(Response.Status.BAD_REQUEST, errorMessage); + BeanValidationResult validationResult = jpaPdpGroup.validate("PDP group"); + if (!validationResult.isValid()) { + throw new PfModelRuntimeException(Response.Status.BAD_REQUEST, validationResult.getResult()); } dao.update(jpaPdpGroup); @@ -171,11 +161,9 @@ public class PdpProvider { final JpaPdpSubGroup jpaPdpSubgroup = new JpaPdpSubGroup(subGroupKey); jpaPdpSubgroup.fromAuthorative(pdpSubGroup); - PfValidationResult validationResult = jpaPdpSubgroup.validate(new PfValidationResult()); - if (!validationResult.isOk()) { - String errorMessage = "PDP subgroup \"" + jpaPdpSubgroup.getId() + NOT_VALID + validationResult; - LOGGER.warn(errorMessage); - throw new PfModelRuntimeException(Response.Status.BAD_REQUEST, errorMessage); + BeanValidationResult validationResult = jpaPdpSubgroup.validate("PDP sub group"); + if (!validationResult.isValid()) { + throw new PfModelRuntimeException(Response.Status.BAD_REQUEST, validationResult.getResult()); } dao.update(jpaPdpSubgroup); @@ -198,11 +186,9 @@ public class PdpProvider { final JpaPdp jpaPdp = new JpaPdp(pdpKey); jpaPdp.fromAuthorative(pdp); - PfValidationResult validationResult = jpaPdp.validate(new PfValidationResult()); - if (!validationResult.isOk()) { - String errorMessage = "PDP \"" + jpaPdp.getId() + NOT_VALID + validationResult; - LOGGER.warn(errorMessage); - throw new PfModelRuntimeException(Response.Status.BAD_REQUEST, errorMessage); + BeanValidationResult validationResult = jpaPdp.validate("PDP"); + if (!validationResult.isValid()) { + throw new PfModelRuntimeException(Response.Status.BAD_REQUEST, validationResult.getResult()); } dao.update(jpaPdp); diff --git a/models-pdp/src/main/java/org/onap/policy/models/pdp/persistence/provider/PdpStatisticsProvider.java b/models-pdp/src/main/java/org/onap/policy/models/pdp/persistence/provider/PdpStatisticsProvider.java index 3b1718090..7901246d7 100644 --- a/models-pdp/src/main/java/org/onap/policy/models/pdp/persistence/provider/PdpStatisticsProvider.java +++ b/models-pdp/src/main/java/org/onap/policy/models/pdp/persistence/provider/PdpStatisticsProvider.java @@ -3,6 +3,7 @@ * ONAP Policy Model * ================================================================================ * Copyright (C) 2019-2020 Nordix Foundation. + * Modifications 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. @@ -30,16 +31,14 @@ import java.util.Map; import java.util.stream.Collectors; import javax.ws.rs.core.Response; import lombok.NonNull; +import org.onap.policy.common.parameters.BeanValidationResult; import org.onap.policy.models.base.PfKey; import org.onap.policy.models.base.PfModelException; import org.onap.policy.models.base.PfModelRuntimeException; import org.onap.policy.models.base.PfTimestampKey; -import org.onap.policy.models.base.PfValidationResult; import org.onap.policy.models.dao.PfDao; import org.onap.policy.models.pdp.concepts.PdpStatistics; import org.onap.policy.models.pdp.persistence.concepts.JpaPdpStatistics; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** @@ -48,10 +47,7 @@ import org.slf4j.LoggerFactory; * @author Ning Xi (ning.xi@est.tech) */ public class PdpStatisticsProvider { - private static final Logger LOGGER = LoggerFactory.getLogger(PdpStatisticsProvider.class); - // Recurring string constants - private static final String NOT_VALID = "\" is not valid \n"; private static final String DESC_ORDER = "DESC"; /** @@ -118,11 +114,9 @@ public class PdpStatisticsProvider { JpaPdpStatistics jpaPdpStatistics = new JpaPdpStatistics(); jpaPdpStatistics.fromAuthorative(pdpStatistics); - PfValidationResult validationResult = jpaPdpStatistics.validate(new PfValidationResult()); - if (!validationResult.isOk()) { - String errorMessage = "pdp statictics \"" + jpaPdpStatistics.getName() + NOT_VALID + validationResult; - LOGGER.warn(errorMessage); - throw new PfModelRuntimeException(Response.Status.BAD_REQUEST, errorMessage); + BeanValidationResult validationResult = jpaPdpStatistics.validate("pdp statistics"); + if (!validationResult.isValid()) { + throw new PfModelRuntimeException(Response.Status.BAD_REQUEST, validationResult.getResult()); } dao.create(jpaPdpStatistics); @@ -156,11 +150,9 @@ public class PdpStatisticsProvider { JpaPdpStatistics jpaPdpStatistics = new JpaPdpStatistics(); jpaPdpStatistics.fromAuthorative(pdpStatistics); - PfValidationResult validationResult = jpaPdpStatistics.validate(new PfValidationResult()); - if (!validationResult.isOk()) { - String errorMessage = "pdp statistics \"" + jpaPdpStatistics.getId() + NOT_VALID + validationResult; - LOGGER.warn(errorMessage); - throw new PfModelRuntimeException(Response.Status.BAD_REQUEST, errorMessage); + BeanValidationResult validationResult = jpaPdpStatistics.validate("pdp statistics"); + if (!validationResult.isValid()) { + throw new PfModelRuntimeException(Response.Status.BAD_REQUEST, validationResult.getResult()); } dao.update(jpaPdpStatistics); diff --git a/models-pdp/src/test/java/org/onap/policy/models/pdp/persistence/concepts/JpaPdpGroupTest.java b/models-pdp/src/test/java/org/onap/policy/models/pdp/persistence/concepts/JpaPdpGroupTest.java index a013addab..a4bf25209 100644 --- a/models-pdp/src/test/java/org/onap/policy/models/pdp/persistence/concepts/JpaPdpGroupTest.java +++ b/models-pdp/src/test/java/org/onap/policy/models/pdp/persistence/concepts/JpaPdpGroupTest.java @@ -35,7 +35,6 @@ import java.util.List; import org.junit.Test; import org.onap.policy.models.base.PfConceptKey; import org.onap.policy.models.base.PfReferenceKey; -import org.onap.policy.models.base.PfValidationResult; import org.onap.policy.models.pdp.concepts.PdpGroup; import org.onap.policy.models.pdp.enums.PdpState; import org.onap.policy.models.pdp.testconcepts.DummyJpaPdpSubgroupChild; @@ -130,44 +129,44 @@ public class JpaPdpGroupTest { assertThatThrownBy(() -> { testJpaPdpGroup.validate(null); - }).hasMessageMatching("resultIn" + NULL_ERROR); + }).hasMessageMatching("fieldName" + NULL_ERROR); - assertFalse(testJpaPdpGroup.validate(new PfValidationResult()).isOk()); + assertFalse(testJpaPdpGroup.validate("").isValid()); testJpaPdpGroup.setPdpGroupState(PdpState.PASSIVE); - assertTrue(testJpaPdpGroup.validate(new PfValidationResult()).isOk()); + assertTrue(testJpaPdpGroup.validate("").isValid()); testJpaPdpGroup.setKey(PfConceptKey.getNullKey()); - assertFalse(testJpaPdpGroup.validate(new PfValidationResult()).isOk()); + assertFalse(testJpaPdpGroup.validate("").isValid()); testJpaPdpGroup.setKey(new PfConceptKey("PdpGroup0", VERSION)); - assertTrue(testJpaPdpGroup.validate(new PfValidationResult()).isOk()); + assertTrue(testJpaPdpGroup.validate("").isValid()); testJpaPdpGroup.setDescription(" "); - assertFalse(testJpaPdpGroup.validate(new PfValidationResult()).isOk()); + assertFalse(testJpaPdpGroup.validate("").isValid()); testJpaPdpGroup.setDescription(" A Description "); - assertTrue(testJpaPdpGroup.validate(new PfValidationResult()).isOk()); + assertTrue(testJpaPdpGroup.validate("").isValid()); testJpaPdpGroup.setDescription(null); - assertTrue(testJpaPdpGroup.validate(new PfValidationResult()).isOk()); + assertTrue(testJpaPdpGroup.validate("").isValid()); testJpaPdpGroup.setProperties(new LinkedHashMap<>()); testJpaPdpGroup.getProperties().put(null, null); - assertFalse(testJpaPdpGroup.validate(new PfValidationResult()).isOk()); + assertFalse(testJpaPdpGroup.validate("").isValid()); testJpaPdpGroup.getProperties().remove(null); - assertTrue(testJpaPdpGroup.validate(new PfValidationResult()).isOk()); + assertTrue(testJpaPdpGroup.validate("").isValid()); testJpaPdpGroup.setProperties(new LinkedHashMap<>()); testJpaPdpGroup.getProperties().put("NullKey", null); - assertFalse(testJpaPdpGroup.validate(new PfValidationResult()).isOk()); + assertFalse(testJpaPdpGroup.validate("").isValid()); testJpaPdpGroup.getProperties().remove("NullKey"); - assertTrue(testJpaPdpGroup.validate(new PfValidationResult()).isOk()); + assertTrue(testJpaPdpGroup.validate("").isValid()); List<JpaPdpSubGroup> jpaPdpSubgroups = testJpaPdpGroup.getPdpSubGroups(); assertNotNull(jpaPdpSubgroups); testJpaPdpGroup.setPdpSubGroups(null); - assertFalse(testJpaPdpGroup.validate(new PfValidationResult()).isOk()); + assertFalse(testJpaPdpGroup.validate("").isValid()); testJpaPdpGroup.setPdpSubGroups(new ArrayList<>()); - assertTrue(testJpaPdpGroup.validate(new PfValidationResult()).isOk()); + assertTrue(testJpaPdpGroup.validate("").isValid()); testJpaPdpGroup.setPdpSubGroups(jpaPdpSubgroups); - assertTrue(testJpaPdpGroup.validate(new PfValidationResult()).isOk()); + assertTrue(testJpaPdpGroup.validate("").isValid()); JpaPdpGroup otherJpaPdpGroup = new JpaPdpGroup(testJpaPdpGroup); assertEquals(0, testJpaPdpGroup.compareTo(otherJpaPdpGroup)); diff --git a/models-pdp/src/test/java/org/onap/policy/models/pdp/persistence/concepts/JpaPdpStatisticsTest.java b/models-pdp/src/test/java/org/onap/policy/models/pdp/persistence/concepts/JpaPdpStatisticsTest.java index b8d8d99a0..83cf85b8f 100644 --- a/models-pdp/src/test/java/org/onap/policy/models/pdp/persistence/concepts/JpaPdpStatisticsTest.java +++ b/models-pdp/src/test/java/org/onap/policy/models/pdp/persistence/concepts/JpaPdpStatisticsTest.java @@ -1,6 +1,7 @@ /*- * ============LICENSE_START======================================================= * Copyright (C) 2019-2020 Nordix Foundation. + * Modifications 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. @@ -31,7 +32,6 @@ import java.util.ArrayList; import java.util.Date; import org.junit.Test; import org.onap.policy.models.base.PfTimestampKey; -import org.onap.policy.models.base.PfValidationResult; import org.onap.policy.models.pdp.concepts.PdpStatistics; /** @@ -92,11 +92,11 @@ public class JpaPdpStatisticsTest { @Test public void testValidate() { JpaPdpStatistics nullKeyJpaPdpStat = new JpaPdpStatistics(); - assertFalse(nullKeyJpaPdpStat.validate(new PfValidationResult()).isOk()); + assertFalse(nullKeyJpaPdpStat.validate("").isValid()); PdpStatistics pdpStat = createPdpStatistics(); JpaPdpStatistics jpaPdpStat2 = new JpaPdpStatistics(pdpStat); - assertTrue(jpaPdpStat2.validate(new PfValidationResult()).isOk()); + assertTrue(jpaPdpStat2.validate("").isValid()); } @Test diff --git a/models-pdp/src/test/java/org/onap/policy/models/pdp/persistence/concepts/JpaPdpSubGroupTest.java b/models-pdp/src/test/java/org/onap/policy/models/pdp/persistence/concepts/JpaPdpSubGroupTest.java index cb27151f8..969b59c6d 100644 --- a/models-pdp/src/test/java/org/onap/policy/models/pdp/persistence/concepts/JpaPdpSubGroupTest.java +++ b/models-pdp/src/test/java/org/onap/policy/models/pdp/persistence/concepts/JpaPdpSubGroupTest.java @@ -21,6 +21,7 @@ package org.onap.policy.models.pdp.persistence.concepts; +import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatThrownBy; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; @@ -36,7 +37,7 @@ import org.junit.Test; import org.onap.policy.models.base.PfConceptKey; import org.onap.policy.models.base.PfReferenceKey; import org.onap.policy.models.base.PfSearchableKey; -import org.onap.policy.models.base.PfValidationResult; +import org.onap.policy.models.base.Validated; import org.onap.policy.models.pdp.concepts.PdpSubGroup; import org.onap.policy.models.pdp.testconcepts.DummyJpaPdpSubgroupChild; @@ -138,82 +139,79 @@ public class JpaPdpSubGroupTest { assertThatThrownBy(() -> { testJpaPdpSubGroup.validate(null); - }).hasMessageMatching("resultIn is marked .*ull but is null"); + }).hasMessageMatching("fieldName is marked .*ull but is null"); - assertFalse(testJpaPdpSubGroup.validate(new PfValidationResult()).isOk()); - assertTrue(testJpaPdpSubGroup.validate(new PfValidationResult()).toString() - .contains("INVALID:parent of key is a null key")); + assertFalse(testJpaPdpSubGroup.validate("").isValid()); + assertThat(testJpaPdpSubGroup.validate("").getResult()) + .contains("parent of key").contains(Validated.IS_A_NULL_KEY); testJpaPdpSubGroup.getKey().setParentConceptKey(new PfConceptKey("Parent:1.0.0")); - assertFalse(testJpaPdpSubGroup.validate(new PfValidationResult()).isOk()); - assertFalse(testJpaPdpSubGroup.validate(new PfValidationResult()).toString() - .contains("INVALID:parent of key is a null key")); - assertTrue(testJpaPdpSubGroup.validate(new PfValidationResult()).toString() - .contains("INVALID:a PDP subgroup must support at least one policy type")); + assertFalse(testJpaPdpSubGroup.validate("").isValid()); + assertThat(testJpaPdpSubGroup.validate("").getResult()) + .doesNotContain("parent of key") + .contains("supportedPolicyTypes").contains("is empty"); testJpaPdpSubGroup.setSupportedPolicyTypes(new ArrayList<>()); testJpaPdpSubGroup.getSupportedPolicyTypes().add(new PfSearchableKey("APolicyType:1.0.0")); - assertTrue(testJpaPdpSubGroup.validate(new PfValidationResult()).isOk()); - assertFalse(testJpaPdpSubGroup.validate(new PfValidationResult()).toString() - .contains("INVALID:a PDP subgroup must support at least one policy type")); + assertTrue(testJpaPdpSubGroup.validate("").isValid()); PfReferenceKey savedKey = testJpaPdpSubGroup.getKey(); testJpaPdpSubGroup.setKey(PfReferenceKey.getNullKey()); - assertFalse(testJpaPdpSubGroup.validate(new PfValidationResult()).isOk()); + assertFalse(testJpaPdpSubGroup.validate("").isValid()); testJpaPdpSubGroup.setKey(savedKey); - assertTrue(testJpaPdpSubGroup.validate(new PfValidationResult()).isOk()); + assertTrue(testJpaPdpSubGroup.validate("").isValid()); testJpaPdpSubGroup.setProperties(new LinkedHashMap<>()); testJpaPdpSubGroup.getProperties().put(null, null); - assertFalse(testJpaPdpSubGroup.validate(new PfValidationResult()).isOk()); + assertFalse(testJpaPdpSubGroup.validate("").isValid()); testJpaPdpSubGroup.getProperties().remove(null); - assertTrue(testJpaPdpSubGroup.validate(new PfValidationResult()).isOk()); + assertTrue(testJpaPdpSubGroup.validate("").isValid()); testJpaPdpSubGroup.setProperties(new LinkedHashMap<>()); testJpaPdpSubGroup.getProperties().put("NullKey", null); - assertFalse(testJpaPdpSubGroup.validate(new PfValidationResult()).isOk()); + assertFalse(testJpaPdpSubGroup.validate("").isValid()); testJpaPdpSubGroup.getProperties().remove("NullKey"); - assertTrue(testJpaPdpSubGroup.validate(new PfValidationResult()).isOk()); + assertTrue(testJpaPdpSubGroup.validate("").isValid()); testJpaPdpSubGroup.setDesiredInstanceCount(-1); - assertFalse(testJpaPdpSubGroup.validate(new PfValidationResult()).isOk()); + assertFalse(testJpaPdpSubGroup.validate("").isValid()); testJpaPdpSubGroup.setDesiredInstanceCount(0); - assertTrue(testJpaPdpSubGroup.validate(new PfValidationResult()).isOk()); + assertTrue(testJpaPdpSubGroup.validate("").isValid()); testJpaPdpSubGroup.setProperties(null); testJpaPdpSubGroup.setCurrentInstanceCount(-1); - assertFalse(testJpaPdpSubGroup.validate(new PfValidationResult()).isOk()); + assertFalse(testJpaPdpSubGroup.validate("").isValid()); testJpaPdpSubGroup.setCurrentInstanceCount(0); - assertTrue(testJpaPdpSubGroup.validate(new PfValidationResult()).isOk()); + assertTrue(testJpaPdpSubGroup.validate("").isValid()); testJpaPdpSubGroup.setProperties(null); - assertTrue(testJpaPdpSubGroup.validate(new PfValidationResult()).isOk()); + assertTrue(testJpaPdpSubGroup.validate("").isValid()); List<PfSearchableKey> supportedPolicyTypes = testJpaPdpSubGroup.getSupportedPolicyTypes(); assertNotNull(supportedPolicyTypes); testJpaPdpSubGroup.setSupportedPolicyTypes(null); - assertFalse(testJpaPdpSubGroup.validate(new PfValidationResult()).isOk()); + assertFalse(testJpaPdpSubGroup.validate("").isValid()); testJpaPdpSubGroup.setSupportedPolicyTypes(new ArrayList<>()); - assertFalse(testJpaPdpSubGroup.validate(new PfValidationResult()).isOk()); + assertFalse(testJpaPdpSubGroup.validate("").isValid()); testJpaPdpSubGroup.setSupportedPolicyTypes(supportedPolicyTypes); - assertTrue(testJpaPdpSubGroup.validate(new PfValidationResult()).isOk()); + assertTrue(testJpaPdpSubGroup.validate("").isValid()); List<PfConceptKey> supportedPolicies = testJpaPdpSubGroup.getPolicies(); assertNotNull(supportedPolicies); testJpaPdpSubGroup.setPolicies(null); - assertFalse(testJpaPdpSubGroup.validate(new PfValidationResult()).isOk()); + assertFalse(testJpaPdpSubGroup.validate("").isValid()); testJpaPdpSubGroup.setPolicies(new ArrayList<>()); - assertTrue(testJpaPdpSubGroup.validate(new PfValidationResult()).isOk()); + assertTrue(testJpaPdpSubGroup.validate("").isValid()); testJpaPdpSubGroup.setPolicies(supportedPolicies); - assertTrue(testJpaPdpSubGroup.validate(new PfValidationResult()).isOk()); + assertTrue(testJpaPdpSubGroup.validate("").isValid()); List<JpaPdp> pdpInstances = testJpaPdpSubGroup.getPdpInstances(); assertNotNull(pdpInstances); testJpaPdpSubGroup.setPdpInstances(null); - assertFalse(testJpaPdpSubGroup.validate(new PfValidationResult()).isOk()); + assertFalse(testJpaPdpSubGroup.validate("").isValid()); testJpaPdpSubGroup.setPdpInstances(new ArrayList<>()); - assertTrue(testJpaPdpSubGroup.validate(new PfValidationResult()).isOk()); + assertTrue(testJpaPdpSubGroup.validate("").isValid()); testJpaPdpSubGroup.setPdpInstances(pdpInstances); - assertTrue(testJpaPdpSubGroup.validate(new PfValidationResult()).isOk()); + assertTrue(testJpaPdpSubGroup.validate("").isValid()); JpaPdpSubGroup otherJpaPdpSubGroup = new JpaPdpSubGroup(testJpaPdpSubGroup); assertEquals(0, testJpaPdpSubGroup.compareTo(otherJpaPdpSubGroup)); diff --git a/models-pdp/src/test/java/org/onap/policy/models/pdp/persistence/concepts/JpaPdpTest.java b/models-pdp/src/test/java/org/onap/policy/models/pdp/persistence/concepts/JpaPdpTest.java index 74a3c9e31..3102c5098 100644 --- a/models-pdp/src/test/java/org/onap/policy/models/pdp/persistence/concepts/JpaPdpTest.java +++ b/models-pdp/src/test/java/org/onap/policy/models/pdp/persistence/concepts/JpaPdpTest.java @@ -21,6 +21,7 @@ package org.onap.policy.models.pdp.persistence.concepts; +import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatThrownBy; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; @@ -31,7 +32,7 @@ import static org.junit.Assert.assertTrue; import org.junit.Test; import org.onap.policy.models.base.PfConceptKey; import org.onap.policy.models.base.PfReferenceKey; -import org.onap.policy.models.base.PfValidationResult; +import org.onap.policy.models.base.Validated; import org.onap.policy.models.pdp.concepts.Pdp; import org.onap.policy.models.pdp.enums.PdpHealthStatus; import org.onap.policy.models.pdp.enums.PdpState; @@ -115,48 +116,45 @@ public class JpaPdpTest { assertThatThrownBy(() -> { testJpaPdp.validate(null); - }).hasMessageMatching("resultIn is marked .*ull but is null"); + }).hasMessageMatching("fieldName is marked .*ull but is null"); - assertFalse(testJpaPdp.validate(new PfValidationResult()).isOk()); - assertTrue(testJpaPdp.validate(new PfValidationResult()).toString() - .contains("INVALID:parent of key is a null key")); + assertFalse(testJpaPdp.validate("").isValid()); + assertThat(testJpaPdp.validate("").getResult()) + .contains("parent").contains(Validated.IS_A_NULL_KEY); testJpaPdp.getKey().setParentConceptKey(new PfConceptKey("Parent:1.0.0")); - assertFalse(testJpaPdp.validate(new PfValidationResult()).isOk()); - assertFalse(testJpaPdp.validate(new PfValidationResult()).toString() - .contains("INVALID:parent of key is a null key")); - assertTrue(testJpaPdp.validate(new PfValidationResult()).toString() - .contains("INVALID:local name of parent of key is null")); + assertFalse(testJpaPdp.validate("").isValid()); + assertThat(testJpaPdp.validate("").getResult()) + .doesNotContain("\"parent\"") + .contains("local name").contains(Validated.IS_NULL); testJpaPdp.getKey().setParentLocalName("ParentLocal"); - assertFalse(testJpaPdp.validate(new PfValidationResult()).isOk()); - assertFalse(testJpaPdp.validate(new PfValidationResult()).toString() - .contains("INVALID:local name of parent of key is null")); - assertTrue(testJpaPdp.validate(new PfValidationResult()).toString() - .contains("INVALID:PDP state may not be null")); + assertFalse(testJpaPdp.validate("").isValid()); + assertThat(testJpaPdp.validate("").getResult()) + .doesNotContain("local name") + .contains("pdpState").contains(Validated.IS_NULL); testJpaPdp.setPdpState(PdpState.ACTIVE); - assertFalse(testJpaPdp.validate(new PfValidationResult()).isOk()); - assertFalse(testJpaPdp.validate(new PfValidationResult()).toString() - .contains("INVALID:PDP state may not be null")); - assertTrue(testJpaPdp.validate(new PfValidationResult()).toString() - .contains("INVALID:PDP health status may not be null")); + assertFalse(testJpaPdp.validate("").isValid()); + assertThat(testJpaPdp.validate("").getResult()) + .doesNotContain("pdpState") + .contains("healthy").contains(Validated.IS_NULL); testJpaPdp.setHealthy(PdpHealthStatus.HEALTHY); - assertTrue(testJpaPdp.validate(new PfValidationResult()).isOk()); + assertTrue(testJpaPdp.validate("").isValid()); PfReferenceKey savedKey = testJpaPdp.getKey(); testJpaPdp.setKey(PfReferenceKey.getNullKey()); - assertFalse(testJpaPdp.validate(new PfValidationResult()).isOk()); + assertFalse(testJpaPdp.validate("").isValid()); testJpaPdp.setKey(savedKey); - assertTrue(testJpaPdp.validate(new PfValidationResult()).isOk()); + assertTrue(testJpaPdp.validate("").isValid()); testJpaPdp.setMessage(null); - assertTrue(testJpaPdp.validate(new PfValidationResult()).isOk()); + assertTrue(testJpaPdp.validate("").isValid()); testJpaPdp.setMessage(""); - assertFalse(testJpaPdp.validate(new PfValidationResult()).isOk()); + assertFalse(testJpaPdp.validate("").isValid()); testJpaPdp.setMessage("Valid Message"); - assertTrue(testJpaPdp.validate(new PfValidationResult()).isOk()); + assertTrue(testJpaPdp.validate("").isValid()); JpaPdp otherJpaPdp = new JpaPdp(testJpaPdp); assertEquals(0, testJpaPdp.compareTo(otherJpaPdp)); diff --git a/models-pdp/src/test/java/org/onap/policy/models/pdp/persistence/provider/PdpProviderTest.java b/models-pdp/src/test/java/org/onap/policy/models/pdp/persistence/provider/PdpProviderTest.java index 7dc5d3ae8..b6874726d 100644 --- a/models-pdp/src/test/java/org/onap/policy/models/pdp/persistence/provider/PdpProviderTest.java +++ b/models-pdp/src/test/java/org/onap/policy/models/pdp/persistence/provider/PdpProviderTest.java @@ -1,7 +1,7 @@ /*- * ============LICENSE_START======================================================= * Copyright (C) 2019 Nordix Foundation. - * Modifications Copyright (C) 2019 AT&T Intellectual Property. All rights reserved. + * Modifications Copyright (C) 2019-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. @@ -36,6 +36,7 @@ import org.junit.Test; import org.onap.policy.common.utils.coder.StandardCoder; import org.onap.policy.common.utils.resources.ResourceUtils; import org.onap.policy.models.base.PfModelException; +import org.onap.policy.models.base.Validated; import org.onap.policy.models.dao.DaoParameters; import org.onap.policy.models.dao.PfDao; import org.onap.policy.models.dao.PfDaoFactory; @@ -204,7 +205,8 @@ public class PdpProviderTest { pdpGroups0.getGroups().get(0).setPdpGroupState(null); assertThatThrownBy(() -> { new PdpProvider().createPdpGroups(pfDao, pdpGroups0.getGroups()); - }).hasMessageContaining("INVALID:pdpGroupState may not be null"); + }).hasMessageContaining("PDP group").hasMessageContaining("pdpGroupState") + .hasMessageContaining(Validated.IS_NULL); } @Test @@ -269,7 +271,8 @@ public class PdpProviderTest { pdpGroups0.getGroups().get(0).setPdpGroupState(null); assertThatThrownBy(() -> { new PdpProvider().updatePdpGroups(pfDao, pdpGroups0.getGroups()); - }).hasMessageContaining("INVALID:pdpGroupState may not be null"); + }).hasMessageContaining("PDP group").hasMessageContaining("pdpGroupState") + .hasMessageContaining(Validated.IS_NULL); } @Test @@ -375,7 +378,8 @@ public class PdpProviderTest { existingSubGroup.setDesiredInstanceCount(-1); assertThatThrownBy(() -> { new PdpProvider().updatePdpSubGroup(pfDao, PDP_GROUP0, existingSubGroup); - }).hasMessageContaining("INVALID:the desired instance count of a PDP sub group may not be negative"); + }).hasMessageContaining("PDP sub group").hasMessageContaining("desiredInstanceCount") + .hasMessageContaining("is negative"); existingSubGroup.setDesiredInstanceCount(10); } @@ -473,7 +477,7 @@ public class PdpProviderTest { existingPdp.setMessage(""); assertThatThrownBy(() -> { new PdpProvider().updatePdp(pfDao, PDP_GROUP0, "APEX", existingPdp); - }).hasMessageContaining("INVALID:message may not be blank"); + }).hasMessageContaining("PDP").hasMessageContaining("message").hasMessageContaining(Validated.IS_BLANK); existingPdp.setMessage("A Message"); } diff --git a/models-pdp/src/test/java/org/onap/policy/models/pdp/persistence/provider/PdpStatisticsProviderTest.java b/models-pdp/src/test/java/org/onap/policy/models/pdp/persistence/provider/PdpStatisticsProviderTest.java index 904e5f135..d8eeab44f 100644 --- a/models-pdp/src/test/java/org/onap/policy/models/pdp/persistence/provider/PdpStatisticsProviderTest.java +++ b/models-pdp/src/test/java/org/onap/policy/models/pdp/persistence/provider/PdpStatisticsProviderTest.java @@ -1,6 +1,7 @@ /*- * ============LICENSE_START======================================================= * Copyright (C) 2020 Nordix Foundation. + * Modifications 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. @@ -32,6 +33,7 @@ import org.eclipse.persistence.config.PersistenceUnitProperties; import org.junit.After; import org.junit.Before; import org.junit.Test; +import org.onap.policy.models.base.Validated; import org.onap.policy.models.dao.DaoParameters; import org.onap.policy.models.dao.PfDao; import org.onap.policy.models.dao.PfDaoFactory; @@ -141,11 +143,13 @@ public class PdpStatisticsProviderTest { assertThatThrownBy(() -> { new PdpStatisticsProvider().createPdpStatistics(pfDao, pdpStatisticsNullList); - }).hasMessageContaining("pdp statictics \"NULL\" is not valid"); + }).hasMessageContaining("pdp statistics").hasMessageContaining("key") + .hasMessageContaining(Validated.IS_A_NULL_KEY); assertThatThrownBy(() -> { new PdpStatisticsProvider().updatePdpStatistics(pfDao, pdpStatisticsNullList); - }).hasMessageContaining("pdp statistics \"NULL:0.0.0:0\" is not valid"); + }).hasMessageContaining("pdp statistics").hasMessageContaining("key") + .hasMessageContaining(Validated.IS_A_NULL_KEY); } @Test diff --git a/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaCapabilityAssignment.java b/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaCapabilityAssignment.java index 63945174a..81c46423a 100644 --- a/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaCapabilityAssignment.java +++ b/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaCapabilityAssignment.java @@ -1,6 +1,7 @@ /*- * ============LICENSE_START======================================================= * Copyright (C) 2020 Nordix Foundation. + * Modifications 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. @@ -24,7 +25,6 @@ import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; -import java.util.Map.Entry; import javax.persistence.ElementCollection; import javax.persistence.Entity; import javax.persistence.Inheritance; @@ -34,14 +34,13 @@ import javax.persistence.Table; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.NonNull; +import org.onap.policy.common.parameters.BeanValidationResult; import org.onap.policy.common.utils.coder.YamlJsonTranslator; import org.onap.policy.models.base.PfAuthorative; import org.onap.policy.models.base.PfConcept; import org.onap.policy.models.base.PfConceptKey; import org.onap.policy.models.base.PfUtils; -import org.onap.policy.models.base.PfValidationMessage; -import org.onap.policy.models.base.PfValidationResult; -import org.onap.policy.models.base.PfValidationResult.ValidationResult; +import org.onap.policy.models.base.Validated; import org.onap.policy.models.tosca.authorative.concepts.ToscaCapabilityAssignment; /** @@ -160,78 +159,13 @@ public class JpaToscaCapabilityAssignment extends JpaToscaEntityType<ToscaCapabi } @Override - public PfValidationResult validate(final PfValidationResult resultIn) { - PfValidationResult result = super.validate(resultIn); + public BeanValidationResult validate(String fieldName) { + BeanValidationResult result = super.validate(fieldName); - if (properties != null) { - result.append(validateProperties(new PfValidationResult())); - } - - if (attributes != null) { - result.append(validateAttributes(new PfValidationResult())); - } - - if (occurrences != null) { - result.append(validateOccurrences(new PfValidationResult())); - } - - return result; - } + validateMap(result, "properties", properties, Validated::validateEntryValueNotNull); + validateMap(result, "attributes", attributes, Validated::validateEntryValueNotNull); - /** - * Validate the properties. - * - * @param resultIn The result of validations up to now - * @return the validation result - */ - private PfValidationResult validateProperties(final PfValidationResult resultIn) { - PfValidationResult result = resultIn; - - for (Entry<String, String> propertyEntry : properties.entrySet()) { - if (propertyEntry.getValue() == null) { - result.addValidationMessage(new PfValidationMessage(getKey(), this.getClass(), ValidationResult.INVALID, - "capability assignment property " + propertyEntry.getKey() + " value may not be null")); - } - } - return result; - } - - /** - * Validate the attributes. - * - * @param resultIn The result of validations up to now - * @return the validation result - */ - private PfValidationResult validateAttributes(final PfValidationResult resultIn) { - PfValidationResult result = resultIn; - - for (Entry<String, String> attributeEntry : attributes.entrySet()) { - if (attributeEntry.getValue() == null) { - result.addValidationMessage(new PfValidationMessage(getKey(), this.getClass(), ValidationResult.INVALID, - "capability assignment attribute " + attributeEntry.getKey() + " value may not be null")); - } - } - return result; - } - - /** - * Validate the occurrences. - * - * @param resultIn The result of validations up to now - * @return the validation result - */ - private PfValidationResult validateOccurrences(final PfValidationResult resultIn) { - PfValidationResult result = resultIn; - - for (Integer occurrence : occurrences) { - if (occurrence == null) { - result.addValidationMessage(new PfValidationMessage(getKey(), this.getClass(), ValidationResult.INVALID, - "capability assignment occurrence value may not be null ")); - } else if (occurrence < 0 && !occurrence.equals(JPA_UNBOUNDED_VALUE)) { - result.addValidationMessage(new PfValidationMessage(getKey(), this.getClass(), ValidationResult.INVALID, - "capability assignment occurrence value may not be negative")); - } - } + validateList(result, "occurrences", occurrences, validateMin(0, JPA_UNBOUNDED_VALUE, true)); return result; } diff --git a/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaCapabilityAssignments.java b/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaCapabilityAssignments.java index 5afc89275..18e77bbf1 100644 --- a/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaCapabilityAssignments.java +++ b/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaCapabilityAssignments.java @@ -1,6 +1,7 @@ /*- * ============LICENSE_START======================================================= * Copyright (C) 2020 Nordix Foundation. + * Modifications 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. @@ -31,10 +32,10 @@ import lombok.Data; import lombok.EqualsAndHashCode; import lombok.NonNull; import lombok.ToString; +import org.onap.policy.common.parameters.BeanValidationResult; import org.onap.policy.models.base.PfAuthorative; import org.onap.policy.models.base.PfConceptContainer; import org.onap.policy.models.base.PfConceptKey; -import org.onap.policy.models.base.PfValidationResult; import org.onap.policy.models.tosca.authorative.concepts.ToscaCapabilityAssignment; import org.onap.policy.models.tosca.utils.ToscaUtils; @@ -105,8 +106,8 @@ public class JpaToscaCapabilityAssignments } @Override - public PfValidationResult validate(@NonNull final PfValidationResult resultIn) { - PfValidationResult result = super.validate(resultIn); + public BeanValidationResult validate(@NonNull String fieldName) { + BeanValidationResult result = super.validate(fieldName); for (JpaToscaCapabilityAssignment assignment : this.getConceptMap().values()) { ToscaUtils.getEntityTypeAncestors(this, assignment, result); diff --git a/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaCapabilityType.java b/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaCapabilityType.java index 4db779557..3a4956c4f 100644 --- a/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaCapabilityType.java +++ b/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaCapabilityType.java @@ -1,6 +1,7 @@ /*- * ============LICENSE_START======================================================= * Copyright (C) 2020 Nordix Foundation. + * Modifications 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. @@ -37,15 +38,14 @@ import lombok.Data; import lombok.EqualsAndHashCode; import lombok.NonNull; import org.apache.commons.collections4.CollectionUtils; +import org.onap.policy.common.parameters.BeanValidationResult; import org.onap.policy.models.base.PfAuthorative; import org.onap.policy.models.base.PfConcept; import org.onap.policy.models.base.PfConceptKey; import org.onap.policy.models.base.PfKey; import org.onap.policy.models.base.PfReferenceKey; import org.onap.policy.models.base.PfUtils; -import org.onap.policy.models.base.PfValidationMessage; -import org.onap.policy.models.base.PfValidationResult; -import org.onap.policy.models.base.PfValidationResult.ValidationResult; +import org.onap.policy.models.base.Validated; import org.onap.policy.models.tosca.authorative.concepts.ToscaCapabilityType; import org.onap.policy.models.tosca.authorative.concepts.ToscaProperty; import org.onap.policy.models.tosca.utils.ToscaUtils; @@ -156,41 +156,16 @@ public class JpaToscaCapabilityType extends JpaToscaEntityType<ToscaCapabilityTy } @Override - public PfValidationResult validate(@NonNull final PfValidationResult resultIn) { - PfValidationResult result = super.validate(resultIn); + public BeanValidationResult validate(@NonNull String fieldName) { + BeanValidationResult result = super.validate(fieldName); - if (getKey().isNullVersion()) { - result.addValidationMessage(new PfValidationMessage(getKey(), this.getClass(), ValidationResult.INVALID, - "key version is a null version")); - } + result.addResult(validateKeyVersionNotNull("key", getKey())); - if (properties != null) { - result = validateProperties(result); - } + validateMap(result, "properties", properties, Validated::validateEntryValueNotNull); return result; } - /** - * Validate the capabiltiy type properties. - * - * @param resultIn The result of validations up to now - * @return the validation result - */ - private PfValidationResult validateProperties(final PfValidationResult resultIn) { - PfValidationResult result = resultIn; - - for (JpaToscaProperty property : properties.values()) { - if (property == null) { - result.addValidationMessage(new PfValidationMessage(getKey(), this.getClass(), ValidationResult.INVALID, - "capability type property may not be null ")); - } else { - result = property.validate(result); - } - } - return result; - } - @Override public int compareTo(final PfConcept otherConcept) { if (otherConcept == null) { diff --git a/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaCapabilityTypes.java b/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaCapabilityTypes.java index 6ec6de56e..e1feaed95 100644 --- a/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaCapabilityTypes.java +++ b/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaCapabilityTypes.java @@ -1,6 +1,7 @@ /*- * ============LICENSE_START======================================================= * Copyright (C) 2020 Nordix Foundation. + * Modifications 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. @@ -31,9 +32,9 @@ import lombok.Data; import lombok.EqualsAndHashCode; import lombok.NonNull; import lombok.ToString; +import org.onap.policy.common.parameters.BeanValidationResult; import org.onap.policy.models.base.PfConceptContainer; import org.onap.policy.models.base.PfConceptKey; -import org.onap.policy.models.base.PfValidationResult; import org.onap.policy.models.tosca.authorative.concepts.ToscaCapabilityType; import org.onap.policy.models.tosca.utils.ToscaUtils; @@ -99,8 +100,8 @@ public class JpaToscaCapabilityTypes extends PfConceptContainer<JpaToscaCapabili } @Override - public PfValidationResult validate(@NonNull final PfValidationResult resultIn) { - PfValidationResult result = super.validate(resultIn); + public BeanValidationResult validate(@NonNull String fieldName) { + BeanValidationResult result = super.validate(fieldName); // Check that all ancestors of this policy type exist for (JpaToscaCapabilityType capabilityType : this.getConceptMap().values()) { diff --git a/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaDataType.java b/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaDataType.java index 58ac9e326..d80c14a97 100644 --- a/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaDataType.java +++ b/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaDataType.java @@ -41,15 +41,14 @@ import lombok.Data; import lombok.EqualsAndHashCode; import lombok.NonNull; import org.apache.commons.collections4.CollectionUtils; +import org.onap.policy.common.parameters.BeanValidationResult; import org.onap.policy.models.base.PfAuthorative; import org.onap.policy.models.base.PfConcept; import org.onap.policy.models.base.PfConceptKey; import org.onap.policy.models.base.PfKey; import org.onap.policy.models.base.PfReferenceKey; import org.onap.policy.models.base.PfUtils; -import org.onap.policy.models.base.PfValidationMessage; -import org.onap.policy.models.base.PfValidationResult; -import org.onap.policy.models.base.PfValidationResult.ValidationResult; +import org.onap.policy.models.base.Validated; import org.onap.policy.models.tosca.authorative.concepts.ToscaDataType; import org.onap.policy.models.tosca.authorative.concepts.ToscaProperty; import org.onap.policy.models.tosca.utils.ToscaUtils; @@ -165,54 +164,15 @@ public class JpaToscaDataType extends JpaToscaEntityType<ToscaDataType> implemen } @Override - public PfValidationResult validate(final PfValidationResult resultIn) { - PfValidationResult result = super.validate(resultIn); + public BeanValidationResult validate(String fieldName) { + BeanValidationResult result = super.validate(fieldName); - if (constraints != null) { - validateConstraints(result); - } - - if (properties != null) { - result = validateProperties(result); - } + validateList(result, "constraints", constraints, Validated::validateNotNull); + validateMap(result, "properties", properties, Validated::validateEntryValueNotNull); return result; } - /** - * Validate the constraints. - * - * @param result where to put the validation results - */ - private void validateConstraints(@NonNull final PfValidationResult result) { - for (JpaToscaConstraint constraint : constraints) { - if (constraint == null) { - result.addValidationMessage(new PfValidationMessage(getKey(), this.getClass(), ValidationResult.INVALID, - "data type constraint may not be null ")); - } - } - } - - /** - * Validate the properties. - * - * @param resultIn The result of validations up to now - * @return the validation result - */ - private PfValidationResult validateProperties(final PfValidationResult resultIn) { - PfValidationResult result = resultIn; - - for (JpaToscaProperty property : properties.values()) { - if (property == null) { - result.addValidationMessage(new PfValidationMessage(getKey(), this.getClass(), ValidationResult.INVALID, - "data type property may not be null ")); - } else { - result = property.validate(result); - } - } - return result; - } - @Override public int compareTo(final PfConcept otherConcept) { if (otherConcept == null) { diff --git a/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaDataTypes.java b/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaDataTypes.java index e570c05bb..faa1ce186 100644 --- a/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaDataTypes.java +++ b/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaDataTypes.java @@ -30,11 +30,10 @@ import javax.persistence.InheritanceType; import javax.persistence.Table; import lombok.Data; import lombok.EqualsAndHashCode; -import lombok.NonNull; import lombok.ToString; +import org.onap.policy.common.parameters.BeanValidationResult; import org.onap.policy.models.base.PfConceptContainer; import org.onap.policy.models.base.PfConceptKey; -import org.onap.policy.models.base.PfValidationResult; import org.onap.policy.models.tosca.authorative.concepts.ToscaDataType; import org.onap.policy.models.tosca.utils.ToscaUtils; @@ -103,8 +102,8 @@ public class JpaToscaDataTypes extends PfConceptContainer<JpaToscaDataType, Tosc } @Override - public PfValidationResult validate(@NonNull final PfValidationResult resultIn) { - PfValidationResult result = super.validate(resultIn); + public BeanValidationResult validate(String fieldName) { + BeanValidationResult result = super.validate(fieldName); for (JpaToscaDataType dataType : this.getConceptMap().values()) { ToscaUtils.getEntityTypeAncestors(this, dataType, result); diff --git a/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaEntityType.java b/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaEntityType.java index 549d93e8a..169d7f244 100644 --- a/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaEntityType.java +++ b/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaEntityType.java @@ -1,7 +1,7 @@ /*- * ============LICENSE_START======================================================= * Copyright (C) 2019-2020 Nordix Foundation. - * Modifications Copyright (C) 2019 AT&T Intellectual Property. All rights reserved. + * Modifications Copyright (C) 2019-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. @@ -35,15 +35,13 @@ import lombok.Data; import lombok.EqualsAndHashCode; import lombok.NonNull; import org.apache.commons.lang3.ObjectUtils; -import org.onap.policy.common.utils.validation.ParameterValidationUtils; +import org.onap.policy.common.parameters.BeanValidationResult; import org.onap.policy.models.base.PfAuthorative; import org.onap.policy.models.base.PfConcept; import org.onap.policy.models.base.PfConceptKey; import org.onap.policy.models.base.PfKey; import org.onap.policy.models.base.PfUtils; -import org.onap.policy.models.base.PfValidationMessage; -import org.onap.policy.models.base.PfValidationResult; -import org.onap.policy.models.base.PfValidationResult.ValidationResult; +import org.onap.policy.models.base.Validated; import org.onap.policy.models.tosca.authorative.concepts.ToscaEntity; /** @@ -188,38 +186,17 @@ public class JpaToscaEntityType<T extends ToscaEntity> extends PfConcept impleme } @Override - public PfValidationResult validate(PfValidationResult resultIn) { - PfValidationResult result = resultIn; + public BeanValidationResult validate(@NonNull String fieldName) { + BeanValidationResult result = new BeanValidationResult(fieldName, this); - if (key.isNullKey()) { - result.addValidationMessage( - new PfValidationMessage(key, this.getClass(), ValidationResult.INVALID, "key is a null key")); - } - - result = key.validate(result); + result.addResult(validateKeyNotNull("key", key)); - if (derivedFrom != null && derivedFrom.isNullKey()) { - result.addValidationMessage(new PfValidationMessage(key, this.getClass(), ValidationResult.INVALID, - "derived from key is a null key")); - } - - if (metadata != null) { - for (Entry<String, String> metadataEntry : metadata.entrySet()) { - if (!ParameterValidationUtils.validateStringParameter(metadataEntry.getKey())) { - result.addValidationMessage(new PfValidationMessage(key, this.getClass(), ValidationResult.INVALID, - "property metadata key may not be null")); - } - if (!ParameterValidationUtils.validateStringParameter(metadataEntry.getValue())) { - result.addValidationMessage(new PfValidationMessage(key, this.getClass(), ValidationResult.INVALID, - "property metadata value may not be null")); - } - } + if (derivedFrom != null) { + result.addResult(validateKeyNotNull("derivedFrom", derivedFrom)); } - if (description != null && description.trim().length() == 0) { - result.addValidationMessage(new PfValidationMessage(key, this.getClass(), ValidationResult.INVALID, - "property description may not be blank")); - } + validateMap(result, "metadata", metadata, Validated::validateEntryNotBlankNotBlank); + result.addResult(validateNotBlank("description", description, false)); return result; } diff --git a/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaEventFilter.java b/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaEventFilter.java index 90bb0a89e..f0d7b9caa 100644 --- a/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaEventFilter.java +++ b/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaEventFilter.java @@ -2,7 +2,7 @@ * ============LICENSE_START======================================================= * ONAP Policy Model * ================================================================================ - * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved. + * Copyright (C) 2019-2020 AT&T Intellectual Property. All rights reserved. * Modifications Copyright (C) 2019-2020 Nordix Foundation. * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); @@ -34,13 +34,11 @@ import lombok.Data; import lombok.EqualsAndHashCode; import lombok.NonNull; import org.apache.commons.lang3.ObjectUtils; +import org.onap.policy.common.parameters.BeanValidationResult; import org.onap.policy.models.base.PfConcept; import org.onap.policy.models.base.PfConceptKey; import org.onap.policy.models.base.PfKey; import org.onap.policy.models.base.PfReferenceKey; -import org.onap.policy.models.base.PfValidationMessage; -import org.onap.policy.models.base.PfValidationResult; -import org.onap.policy.models.base.PfValidationResult.ValidationResult; /** * Class to represent the EventFilter in TOSCA definition. @@ -124,30 +122,13 @@ public class JpaToscaEventFilter extends PfConcept { } @Override - public PfValidationResult validate(@NonNull final PfValidationResult resultIn) { - PfValidationResult result = resultIn; + public BeanValidationResult validate(@NonNull String fieldName) { + BeanValidationResult result = new BeanValidationResult(fieldName, this); - if (key.isNullKey()) { - result.addValidationMessage( - new PfValidationMessage(key, this.getClass(), ValidationResult.INVALID, "key is a null key")); - } - - result = key.validate(result); - - if (node == null || node.isNullKey()) { - result.addValidationMessage(new PfValidationMessage(key, this.getClass(), ValidationResult.INVALID, - "node on an event filter may not be null")); - } - - if (requirement != null && requirement.trim().length() == 0) { - result.addValidationMessage(new PfValidationMessage(key, this.getClass(), ValidationResult.INVALID, - "event filter requirement may not be blank")); - } - - if (capability != null && capability.trim().length() == 0) { - result.addValidationMessage(new PfValidationMessage(key, this.getClass(), ValidationResult.INVALID, - "event filter capability may not be blank")); - } + result.addResult(validateKeyNotNull("key", key)); + result.addResult(validateKeyNotNull("node", node)); + result.addResult(validateNotBlank("requirement", requirement, false)); + result.addResult(validateNotBlank("capability", capability, false)); return result; } diff --git a/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaModel.java b/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaModel.java index d65689d8e..c86c34b92 100644 --- a/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaModel.java +++ b/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaModel.java @@ -1,7 +1,7 @@ /*- * ============LICENSE_START======================================================= * Copyright (C) 2019-2020 Nordix Foundation. - * Modifications Copyright (C) 2019 AT&T Intellectual Property. All rights reserved. + * Modifications Copyright (C) 2019-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. @@ -32,12 +32,12 @@ import javax.persistence.Table; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.NonNull; +import org.onap.policy.common.parameters.BeanValidationResult; import org.onap.policy.models.base.PfConcept; import org.onap.policy.models.base.PfConceptKey; import org.onap.policy.models.base.PfKey; import org.onap.policy.models.base.PfModel; import org.onap.policy.models.base.PfModelService; -import org.onap.policy.models.base.PfValidationResult; /** * A container class for a TOSCA model with multiple service templates. This class is a container class that allows a @@ -117,10 +117,12 @@ public class JpaToscaModel extends PfModel { } @Override - public PfValidationResult validate(@NonNull final PfValidationResult resultIn) { - PfValidationResult result = super.validate(resultIn); + public BeanValidationResult validate(String fieldName) { + BeanValidationResult result = super.validate(fieldName); - return serviceTemplates.validate(result); + result.addResult(serviceTemplates.validate("serviceTemplates")); + + return result; } @Override diff --git a/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaNodeTemplate.java b/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaNodeTemplate.java index 5fccbe27a..05aefa797 100644 --- a/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaNodeTemplate.java +++ b/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaNodeTemplate.java @@ -1,6 +1,7 @@ /*- * ============LICENSE_START======================================================= * Copyright (C) 2020 Nordix Foundation. + * Modifications 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. @@ -41,7 +42,7 @@ import lombok.Data; import lombok.EqualsAndHashCode; import lombok.NonNull; import org.apache.commons.lang3.ObjectUtils; -import org.apache.commons.lang3.StringUtils; +import org.onap.policy.common.parameters.BeanValidationResult; import org.onap.policy.common.utils.coder.CoderException; import org.onap.policy.common.utils.coder.StandardCoder; import org.onap.policy.models.base.PfAuthorative; @@ -50,9 +51,7 @@ import org.onap.policy.models.base.PfConceptKey; import org.onap.policy.models.base.PfKey; import org.onap.policy.models.base.PfModelRuntimeException; import org.onap.policy.models.base.PfUtils; -import org.onap.policy.models.base.PfValidationMessage; -import org.onap.policy.models.base.PfValidationResult; -import org.onap.policy.models.base.PfValidationResult.ValidationResult; +import org.onap.policy.models.base.Validated; import org.onap.policy.models.tosca.authorative.concepts.ToscaCapabilityAssignment; import org.onap.policy.models.tosca.authorative.concepts.ToscaNodeTemplate; @@ -231,44 +230,15 @@ public class JpaToscaNodeTemplate extends JpaToscaEntityType<ToscaNodeTemplate> } @Override - public PfValidationResult validate(final PfValidationResult resultIn) { - PfValidationResult result = super.validate(resultIn); + public BeanValidationResult validate(String fieldName) { + BeanValidationResult result = super.validate(fieldName); - if (StringUtils.isBlank(type)) { - result.addValidationMessage(new PfValidationMessage(getKey(), this.getClass(), ValidationResult.INVALID, - "node template type may not be null")); - } - - if (properties != null) { - result.append(validateProperties(new PfValidationResult())); - } + result.addResult(validateNotBlank("type", type, true)); - if (requirements != null) { - result.append(requirements.validate(result)); - } + validateMap(result, "properties", properties, Validated::validateEntryValueNotNull); + validateOptional(result, "requirements", requirements); + validateOptional(result, "capabilities", capabilities); - if (capabilities != null) { - result.append(validateProperties(capabilities.validate(result))); - } - - return result; - } - - /** - * Validate the properties. - * - * @param resultIn The result of validations up to now - * @return the validation result - */ - private PfValidationResult validateProperties(final PfValidationResult resultIn) { - PfValidationResult result = resultIn; - - for (String property : properties.values()) { - if (property == null) { - result.addValidationMessage(new PfValidationMessage(getKey(), this.getClass(), ValidationResult.INVALID, - "topology template property may not be null ")); - } - } return result; } diff --git a/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaNodeTemplates.java b/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaNodeTemplates.java index 6c83f67c5..6cc7a1f4e 100644 --- a/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaNodeTemplates.java +++ b/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaNodeTemplates.java @@ -1,6 +1,7 @@ /*- * ============LICENSE_START======================================================= * Copyright (C) 2020 Nordix Foundation. + * Modifications 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. @@ -29,11 +30,10 @@ import javax.persistence.InheritanceType; import javax.persistence.Table; import lombok.Data; import lombok.EqualsAndHashCode; -import lombok.NonNull; import lombok.ToString; +import org.onap.policy.common.parameters.BeanValidationResult; import org.onap.policy.models.base.PfConceptContainer; import org.onap.policy.models.base.PfConceptKey; -import org.onap.policy.models.base.PfValidationResult; import org.onap.policy.models.tosca.authorative.concepts.ToscaNodeTemplate; import org.onap.policy.models.tosca.utils.ToscaUtils; @@ -99,8 +99,8 @@ public class JpaToscaNodeTemplates extends PfConceptContainer<JpaToscaNodeTempla } @Override - public PfValidationResult validate(@NonNull final PfValidationResult resultIn) { - PfValidationResult result = super.validate(resultIn); + public BeanValidationResult validate(String fieldName) { + BeanValidationResult result = super.validate(fieldName); // Check that all ancestors of this node template exist for (JpaToscaNodeTemplate nodeTemplate : this.getConceptMap().values()) { diff --git a/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaNodeType.java b/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaNodeType.java index 26684b583..f39f9b914 100644 --- a/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaNodeType.java +++ b/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaNodeType.java @@ -1,6 +1,7 @@ /*- * ============LICENSE_START======================================================= * Copyright (C) 2020 Nordix Foundation. + * Modifications 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. @@ -43,15 +44,14 @@ import lombok.EqualsAndHashCode; import lombok.NonNull; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.ObjectUtils; +import org.onap.policy.common.parameters.BeanValidationResult; import org.onap.policy.models.base.PfAuthorative; import org.onap.policy.models.base.PfConcept; import org.onap.policy.models.base.PfConceptKey; import org.onap.policy.models.base.PfKey; import org.onap.policy.models.base.PfReferenceKey; import org.onap.policy.models.base.PfUtils; -import org.onap.policy.models.base.PfValidationMessage; -import org.onap.policy.models.base.PfValidationResult; -import org.onap.policy.models.base.PfValidationResult.ValidationResult; +import org.onap.policy.models.base.Validated; import org.onap.policy.models.tosca.authorative.concepts.ToscaNodeType; import org.onap.policy.models.tosca.authorative.concepts.ToscaProperty; import org.onap.policy.models.tosca.utils.ToscaUtils; @@ -185,42 +185,14 @@ public class JpaToscaNodeType extends JpaToscaEntityType<ToscaNodeType> implemen } @Override - public PfValidationResult validate(@NonNull final PfValidationResult resultIn) { - PfValidationResult result = super.validate(resultIn); + public BeanValidationResult validate(String fieldName) { + BeanValidationResult result = super.validate(fieldName); - if (PfKey.NULL_KEY_VERSION.equals(getKey().getVersion())) { - result.addValidationMessage(new PfValidationMessage(getKey(), this.getClass(), ValidationResult.INVALID, - "key version is a null version")); - } - - if (properties != null) { - result = validateProperties(result); - } - - if (requirements != null) { - result = requirements.validate(result); - } - - return result; - } + result.addResult(validateKeyVersionNotNull("key", getKey())); - /** - * Validate the capabiltiy type properties. - * - * @param resultIn The result of validations up to now - * @return the validation result - */ - private PfValidationResult validateProperties(final PfValidationResult resultIn) { - PfValidationResult result = resultIn; + validateMap(result, "properties", properties, Validated::validateEntryValueNotNull); + validateOptional(result, "requirements", requirements); - for (JpaToscaProperty property : properties.values()) { - if (property == null) { - result.addValidationMessage(new PfValidationMessage(getKey(), this.getClass(), ValidationResult.INVALID, - "node type property may not be null ")); - } else { - result = property.validate(result); - } - } return result; } diff --git a/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaNodeTypes.java b/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaNodeTypes.java index 5eb5a2c49..b1fe40b78 100644 --- a/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaNodeTypes.java +++ b/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaNodeTypes.java @@ -1,6 +1,7 @@ /*- * ============LICENSE_START======================================================= * Copyright (C) 2020 Nordix Foundation. + * Modifications 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. @@ -29,11 +30,10 @@ import javax.persistence.InheritanceType; import javax.persistence.Table; import lombok.Data; import lombok.EqualsAndHashCode; -import lombok.NonNull; import lombok.ToString; +import org.onap.policy.common.parameters.BeanValidationResult; import org.onap.policy.models.base.PfConceptContainer; import org.onap.policy.models.base.PfConceptKey; -import org.onap.policy.models.base.PfValidationResult; import org.onap.policy.models.tosca.authorative.concepts.ToscaNodeType; import org.onap.policy.models.tosca.utils.ToscaUtils; @@ -99,8 +99,8 @@ public class JpaToscaNodeTypes extends PfConceptContainer<JpaToscaNodeType, Tosc } @Override - public PfValidationResult validate(@NonNull final PfValidationResult resultIn) { - PfValidationResult result = super.validate(resultIn); + public BeanValidationResult validate(String fieldName) { + BeanValidationResult result = super.validate(fieldName); // Check that all ancestors of this policy type exist for (JpaToscaNodeType nodeType : this.getConceptMap().values()) { diff --git a/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaParameter.java b/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaParameter.java index 216e877cc..19e0e5fd5 100644 --- a/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaParameter.java +++ b/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaParameter.java @@ -1,6 +1,7 @@ /*- * ============LICENSE_START======================================================= * Copyright (C) 2020 Nordix Foundation. + * Modifications 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. @@ -31,15 +32,13 @@ import lombok.Data; import lombok.EqualsAndHashCode; import lombok.NonNull; import org.apache.commons.lang3.StringUtils; +import org.onap.policy.common.parameters.BeanValidationResult; import org.onap.policy.common.utils.coder.YamlJsonTranslator; import org.onap.policy.models.base.PfAuthorative; import org.onap.policy.models.base.PfConcept; import org.onap.policy.models.base.PfConceptKey; import org.onap.policy.models.base.PfKey; import org.onap.policy.models.base.PfReferenceKey; -import org.onap.policy.models.base.PfValidationMessage; -import org.onap.policy.models.base.PfValidationResult; -import org.onap.policy.models.base.PfValidationResult.ValidationResult; import org.onap.policy.models.tosca.authorative.concepts.ToscaParameter; /** @@ -161,20 +160,11 @@ public class JpaToscaParameter extends PfConcept implements PfAuthorative<ToscaP } @Override - public PfValidationResult validate(final PfValidationResult resultIn) { - PfValidationResult result = resultIn; + public BeanValidationResult validate(String fieldName) { + BeanValidationResult result = new BeanValidationResult(fieldName, this); - if (key.isNullKey()) { - result.addValidationMessage(new PfValidationMessage(key, this.getClass(), ValidationResult.INVALID, - "paremeter key is a null key")); - } - - result = key.validate(result); - - if (type == null || type.isNullKey()) { - result.addValidationMessage(new PfValidationMessage(key, this.getClass(), ValidationResult.INVALID, - "parameter type may not be null")); - } + result.addResult(validateKeyNotNull("key", key)); + result.addResult(validateKeyNotNull("type", type)); return result; } diff --git a/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaPolicies.java b/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaPolicies.java index ba32ac314..7c1022c84 100644 --- a/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaPolicies.java +++ b/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaPolicies.java @@ -30,12 +30,11 @@ import javax.persistence.InheritanceType; import javax.persistence.Table; import lombok.Data; import lombok.EqualsAndHashCode; -import lombok.NonNull; import lombok.ToString; +import org.onap.policy.common.parameters.BeanValidationResult; import org.onap.policy.models.base.PfAuthorative; import org.onap.policy.models.base.PfConceptContainer; import org.onap.policy.models.base.PfConceptKey; -import org.onap.policy.models.base.PfValidationResult; import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicy; import org.onap.policy.models.tosca.utils.ToscaUtils; @@ -105,8 +104,8 @@ public class JpaToscaPolicies extends PfConceptContainer<JpaToscaPolicy, ToscaPo } @Override - public PfValidationResult validate(@NonNull final PfValidationResult resultIn) { - PfValidationResult result = super.validate(resultIn); + public BeanValidationResult validate(String fieldName) { + BeanValidationResult result = super.validate(fieldName); for (JpaToscaPolicy policy : this.getConceptMap().values()) { ToscaUtils.getEntityTypeAncestors(this, policy, result); diff --git a/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaPolicy.java b/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaPolicy.java index 518a0884b..ae7b34297 100644 --- a/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaPolicy.java +++ b/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaPolicy.java @@ -26,7 +26,6 @@ package org.onap.policy.models.tosca.simple.concepts; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; -import java.util.Map.Entry; import javax.persistence.AttributeOverride; import javax.persistence.AttributeOverrides; import javax.persistence.Column; @@ -40,18 +39,16 @@ import javax.ws.rs.core.Response; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.NonNull; +import org.onap.policy.common.parameters.BeanValidationResult; import org.onap.policy.common.utils.coder.CoderException; import org.onap.policy.common.utils.coder.StandardCoder; -import org.onap.policy.common.utils.validation.ParameterValidationUtils; import org.onap.policy.models.base.PfAuthorative; import org.onap.policy.models.base.PfConcept; import org.onap.policy.models.base.PfConceptKey; import org.onap.policy.models.base.PfKey; import org.onap.policy.models.base.PfModelRuntimeException; import org.onap.policy.models.base.PfUtils; -import org.onap.policy.models.base.PfValidationMessage; -import org.onap.policy.models.base.PfValidationResult; -import org.onap.policy.models.base.PfValidationResult.ValidationResult; +import org.onap.policy.models.base.Validated; import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicy; /** @@ -234,67 +231,15 @@ public class JpaToscaPolicy extends JpaToscaEntityType<ToscaPolicy> implements P } @Override - public PfValidationResult validate(@NonNull final PfValidationResult resultIn) { - PfValidationResult result = super.validate(resultIn); + public BeanValidationResult validate(String fieldName) { + BeanValidationResult result = super.validate(fieldName); - if (PfKey.NULL_KEY_VERSION.equals(getKey().getVersion())) { - result.addValidationMessage(new PfValidationMessage(getKey(), this.getClass(), ValidationResult.INVALID, - "key version is a null version")); - } - - if (type == null || type.isNullKey()) { - result.addValidationMessage(new PfValidationMessage(getKey(), this.getClass(), ValidationResult.INVALID, - "type is null or a null key")); - } else { - result = type.validate(result); - } - - if (properties != null) { - validateProperties(result); - } + result.addResult(validateKeyVersionNotNull("key", getKey())); + result.addResult(validateKeyNotNull("type", type)); - if (targets != null) { - result = validateTargets(result); - } - - return result; - } + validateMap(result, "properties", properties, Validated::validateEntryNotBlankNotNull); + validateList(result, "targets", targets, Validated::validateNotNull); - /** - * Validate the policy properties. - * - * @param result where to put the validation results - */ - private void validateProperties(final PfValidationResult result) { - - for (Entry<String, String> propertyEntry : properties.entrySet()) { - if (!ParameterValidationUtils.validateStringParameter(propertyEntry.getKey())) { - result.addValidationMessage(new PfValidationMessage(getKey(), this.getClass(), ValidationResult.INVALID, - "policy property key may not be null ")); - } else if (propertyEntry.getValue() == null) { - result.addValidationMessage(new PfValidationMessage(getKey(), this.getClass(), ValidationResult.INVALID, - "policy property value may not be null ")); - } - } - } - - /** - * Validate the policy targets. - * - * @param resultIn The result of validations up to now - * @return the validation result - */ - private PfValidationResult validateTargets(final PfValidationResult resultIn) { - PfValidationResult result = resultIn; - - for (PfConceptKey target : targets) { - if (target == null) { - result.addValidationMessage(new PfValidationMessage(getKey(), this.getClass(), ValidationResult.INVALID, - "policy target may not be null ")); - } else { - result = target.validate(result); - } - } return result; } diff --git a/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaPolicyType.java b/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaPolicyType.java index 7a5493ce1..665c79d1f 100644 --- a/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaPolicyType.java +++ b/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaPolicyType.java @@ -2,7 +2,7 @@ * ============LICENSE_START======================================================= * ONAP Policy Model * ================================================================================ - * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved. + * Copyright (C) 2019-2020 AT&T Intellectual Property. All rights reserved. * Modifications Copyright (C) 2019-2020 Nordix Foundation. * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); @@ -40,15 +40,14 @@ import lombok.Data; import lombok.EqualsAndHashCode; import lombok.NonNull; import org.apache.commons.collections4.CollectionUtils; +import org.onap.policy.common.parameters.BeanValidationResult; import org.onap.policy.models.base.PfAuthorative; import org.onap.policy.models.base.PfConcept; import org.onap.policy.models.base.PfConceptKey; import org.onap.policy.models.base.PfKey; import org.onap.policy.models.base.PfReferenceKey; import org.onap.policy.models.base.PfUtils; -import org.onap.policy.models.base.PfValidationMessage; -import org.onap.policy.models.base.PfValidationResult; -import org.onap.policy.models.base.PfValidationResult.ValidationResult; +import org.onap.policy.models.base.Validated; import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicyType; import org.onap.policy.models.tosca.authorative.concepts.ToscaProperty; import org.onap.policy.models.tosca.utils.ToscaUtils; @@ -188,86 +187,15 @@ public class JpaToscaPolicyType extends JpaToscaEntityType<ToscaPolicyType> impl } @Override - public PfValidationResult validate(@NonNull final PfValidationResult resultIn) { - PfValidationResult result = super.validate(resultIn); + public BeanValidationResult validate(String fieldName) { + BeanValidationResult result = super.validate(fieldName); - if (PfKey.NULL_KEY_VERSION.equals(getKey().getVersion())) { - result.addValidationMessage(new PfValidationMessage(getKey(), this.getClass(), ValidationResult.INVALID, - "key version is a null version")); - } - - if (properties != null) { - result = validateProperties(result); - } - - if (targets != null) { - result = validateTargets(result); - } - - if (triggers != null) { - result = validateTriggers(result); - } + result.addResult(validateKeyVersionNotNull("key", getKey())); - return result; - } + validateMap(result, "properties", properties, Validated::validateEntryValueNotNull); + validateList(result, "targets", targets, Validated::validateNotNull); + validateList(result, "triggers", triggers, Validated::validateNotNull); - /** - * Validate the policy properties. - * - * @param result The result of validations up to now - * @return the validation result - */ - private PfValidationResult validateProperties(final PfValidationResult resultIn) { - PfValidationResult result = resultIn; - - for (JpaToscaProperty property : properties.values()) { - if (property == null) { - result.addValidationMessage(new PfValidationMessage(getKey(), this.getClass(), ValidationResult.INVALID, - "policy property may not be null ")); - } else { - result = property.validate(result); - } - } - return result; - } - - /** - * Validate the policy targets. - * - * @param result The result of validations up to now - * @return the validation result - */ - private PfValidationResult validateTargets(final PfValidationResult resultIn) { - PfValidationResult result = resultIn; - - for (PfConceptKey target : targets) { - if (target == null) { - result.addValidationMessage(new PfValidationMessage(getKey(), this.getClass(), ValidationResult.INVALID, - "policy target may not be null ")); - } else { - result = target.validate(result); - } - } - return result; - } - - /** - * Validate the policy triggers. - * - * @param result The result of validations up to now - * @return the validation result - */ - private PfValidationResult validateTriggers(final PfValidationResult resultIn) { - PfValidationResult result = resultIn; - - for (JpaToscaTrigger trigger : triggers) { - if (trigger == null) { - result.addValidationMessage(new PfValidationMessage(getKey(), this.getClass(), ValidationResult.INVALID, - "policy trigger may not be null ")); - } else { - result = trigger.validate(result); - } - } return result; } diff --git a/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaPolicyTypes.java b/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaPolicyTypes.java index 0a3d070ca..c20cada8f 100644 --- a/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaPolicyTypes.java +++ b/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaPolicyTypes.java @@ -30,11 +30,10 @@ import javax.persistence.InheritanceType; import javax.persistence.Table; import lombok.Data; import lombok.EqualsAndHashCode; -import lombok.NonNull; import lombok.ToString; +import org.onap.policy.common.parameters.BeanValidationResult; import org.onap.policy.models.base.PfConceptContainer; import org.onap.policy.models.base.PfConceptKey; -import org.onap.policy.models.base.PfValidationResult; import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicyType; import org.onap.policy.models.tosca.utils.ToscaUtils; @@ -103,8 +102,8 @@ public class JpaToscaPolicyTypes extends PfConceptContainer<JpaToscaPolicyType, } @Override - public PfValidationResult validate(@NonNull final PfValidationResult resultIn) { - PfValidationResult result = super.validate(resultIn); + public BeanValidationResult validate(String fieldName) { + BeanValidationResult result = super.validate(fieldName); // Check that all ancestors of this policy type exist for (JpaToscaPolicyType policyType : this.getConceptMap().values()) { diff --git a/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaProperty.java b/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaProperty.java index c56dc6a42..a7156bbab 100644 --- a/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaProperty.java +++ b/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaProperty.java @@ -2,7 +2,7 @@ * ============LICENSE_START======================================================= * ONAP Policy Model * ================================================================================ - * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved. + * Copyright (C) 2019-2020 AT&T Intellectual Property. All rights reserved. * Modifications Copyright (C) 2019-2020 Nordix Foundation. * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); @@ -38,6 +38,7 @@ import lombok.Data; import lombok.EqualsAndHashCode; import lombok.NonNull; import org.apache.commons.lang3.ObjectUtils; +import org.onap.policy.common.parameters.BeanValidationResult; import org.onap.policy.common.utils.coder.YamlJsonTranslator; import org.onap.policy.models.base.PfAuthorative; import org.onap.policy.models.base.PfConcept; @@ -45,9 +46,7 @@ import org.onap.policy.models.base.PfConceptKey; import org.onap.policy.models.base.PfKey; import org.onap.policy.models.base.PfReferenceKey; import org.onap.policy.models.base.PfUtils; -import org.onap.policy.models.base.PfValidationMessage; -import org.onap.policy.models.base.PfValidationResult; -import org.onap.policy.models.base.PfValidationResult.ValidationResult; +import org.onap.policy.models.base.Validated; import org.onap.policy.models.tosca.authorative.concepts.ToscaProperty; import org.onap.policy.models.tosca.authorative.concepts.ToscaProperty.Status; @@ -241,52 +240,18 @@ public class JpaToscaProperty extends PfConcept implements PfAuthorative<ToscaPr } @Override - public PfValidationResult validate(final PfValidationResult resultIn) { - PfValidationResult result = resultIn; + public BeanValidationResult validate(@NonNull String fieldName) { + BeanValidationResult result = new BeanValidationResult(fieldName, this); - if (key.isNullKey()) { - result.addValidationMessage( - new PfValidationMessage(key, this.getClass(), ValidationResult.INVALID, "key is a null key")); - } - - result = key.validate(result); - - if (type == null || type.isNullKey()) { - result.addValidationMessage(new PfValidationMessage(key, this.getClass(), ValidationResult.INVALID, - "property type may not be null")); - } - - return validateFields(result); - } - - /** - * Validate the property fields. - * - * @param resultIn the incoming validation results so far - * @return the validation results including this validation - */ - private PfValidationResult validateFields(final PfValidationResult resultIn) { - PfValidationResult result = resultIn; + result.addResult(validateKeyNotNull("key", key)); + result.addResult(validateKeyNotNull("type", type)); + result.addResult(validateNotBlank("description", description, false)); + result.addResult(validateNotBlank("defaultValue", defaultValue, false)); - if (description != null && description.trim().length() == 0) { - result.addValidationMessage(new PfValidationMessage(key, this.getClass(), ValidationResult.INVALID, - "property description may not be blank")); - } + validateList(result, "constraints", constraints, Validated::validateNotNull); + validateOptional(result, "entrySchema", entrySchema); - if (defaultValue != null && defaultValue.trim().length() == 0) { - result.addValidationMessage(new PfValidationMessage(key, this.getClass(), ValidationResult.INVALID, - "property default value may not be null")); - } - - if (constraints != null) { - for (JpaToscaConstraint constraint : constraints) { - if (constraint == null) { - result.addValidationMessage(new PfValidationMessage(key, this.getClass(), ValidationResult.INVALID, - "property constraint may not be null ")); - } - } - } - return (entrySchema != null ? entrySchema.validate(result) : result); + return result; } @Override diff --git a/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaRelationshipType.java b/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaRelationshipType.java index d3d06d4a0..4bbcea4ed 100644 --- a/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaRelationshipType.java +++ b/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaRelationshipType.java @@ -1,6 +1,7 @@ /*- * ============LICENSE_START======================================================= * Copyright (C) 2020 Nordix Foundation. + * Modifications 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. @@ -37,15 +38,14 @@ import lombok.Data; import lombok.EqualsAndHashCode; import lombok.NonNull; import org.apache.commons.collections4.CollectionUtils; +import org.onap.policy.common.parameters.BeanValidationResult; import org.onap.policy.models.base.PfAuthorative; import org.onap.policy.models.base.PfConcept; import org.onap.policy.models.base.PfConceptKey; import org.onap.policy.models.base.PfKey; import org.onap.policy.models.base.PfReferenceKey; import org.onap.policy.models.base.PfUtils; -import org.onap.policy.models.base.PfValidationMessage; -import org.onap.policy.models.base.PfValidationResult; -import org.onap.policy.models.base.PfValidationResult.ValidationResult; +import org.onap.policy.models.base.Validated; import org.onap.policy.models.tosca.authorative.concepts.ToscaProperty; import org.onap.policy.models.tosca.authorative.concepts.ToscaRelationshipType; import org.onap.policy.models.tosca.utils.ToscaUtils; @@ -153,41 +153,16 @@ public class JpaToscaRelationshipType extends JpaToscaEntityType<ToscaRelationsh } @Override - public PfValidationResult validate(@NonNull final PfValidationResult resultIn) { - PfValidationResult result = super.validate(resultIn); + public BeanValidationResult validate(String fieldName) { + BeanValidationResult result = super.validate(fieldName); - if (PfKey.NULL_KEY_VERSION.equals(getKey().getVersion())) { - result.addValidationMessage(new PfValidationMessage(getKey(), this.getClass(), ValidationResult.INVALID, - "key version is a null version")); - } + result.addResult(validateKeyVersionNotNull("key", getKey())); - if (properties != null) { - result = validateProperties(result); - } + validateMap(result, "properties", properties, Validated::validateEntryValueNotNull); return result; } - /** - * Validate the capabiltiy type properties. - * - * @param resultIn The result of validations up to now - * @return the validation result - */ - private PfValidationResult validateProperties(final PfValidationResult resultIn) { - PfValidationResult result = resultIn; - - for (JpaToscaProperty property : properties.values()) { - if (property == null) { - result.addValidationMessage(new PfValidationMessage(getKey(), this.getClass(), ValidationResult.INVALID, - "relationship type property may not be null ")); - } else { - result = property.validate(result); - } - } - return result; - } - @Override public int compareTo(final PfConcept otherConcept) { if (otherConcept == null) { diff --git a/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaRelationshipTypes.java b/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaRelationshipTypes.java index 28e1d602c..eed351df5 100644 --- a/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaRelationshipTypes.java +++ b/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaRelationshipTypes.java @@ -1,6 +1,7 @@ /*- * ============LICENSE_START======================================================= * Copyright (C) 2020 Nordix Foundation. + * Modifications 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. @@ -29,11 +30,10 @@ import javax.persistence.InheritanceType; import javax.persistence.Table; import lombok.Data; import lombok.EqualsAndHashCode; -import lombok.NonNull; import lombok.ToString; +import org.onap.policy.common.parameters.BeanValidationResult; import org.onap.policy.models.base.PfConceptContainer; import org.onap.policy.models.base.PfConceptKey; -import org.onap.policy.models.base.PfValidationResult; import org.onap.policy.models.tosca.authorative.concepts.ToscaRelationshipType; import org.onap.policy.models.tosca.utils.ToscaUtils; @@ -100,8 +100,8 @@ public class JpaToscaRelationshipTypes extends PfConceptContainer<JpaToscaRelati } @Override - public PfValidationResult validate(@NonNull final PfValidationResult resultIn) { - PfValidationResult result = super.validate(resultIn); + public BeanValidationResult validate(String fieldName) { + BeanValidationResult result = super.validate(fieldName); // Check that all ancestors of this policy type exist for (JpaToscaRelationshipType relationshipType : this.getConceptMap().values()) { diff --git a/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaRequirement.java b/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaRequirement.java index aebc31caf..bf1249d4b 100644 --- a/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaRequirement.java +++ b/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaRequirement.java @@ -37,14 +37,13 @@ import javax.persistence.Table; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.NonNull; +import org.onap.policy.common.parameters.BeanValidationResult; import org.onap.policy.common.utils.coder.YamlJsonTranslator; import org.onap.policy.models.base.PfAuthorative; import org.onap.policy.models.base.PfConcept; import org.onap.policy.models.base.PfConceptKey; -import org.onap.policy.models.base.PfKey; import org.onap.policy.models.base.PfUtils; -import org.onap.policy.models.base.PfValidationMessage; -import org.onap.policy.models.base.PfValidationResult; +import org.onap.policy.models.base.Validated; import org.onap.policy.models.tosca.authorative.concepts.ToscaRequirement; /** @@ -63,7 +62,7 @@ public class JpaToscaRequirement extends JpaToscaEntityType<ToscaRequirement> private static final long serialVersionUID = 2785481541573683089L; private static final String AUTHORATIVE_UNBOUNDED_LITERAL = "UNBOUNDED"; - private static final Double JPA_UNBOUNDED_VALUE = -1.0; + private static final Integer JPA_UNBOUNDED_VALUE = -1; @Column private String capability; @@ -75,7 +74,7 @@ public class JpaToscaRequirement extends JpaToscaEntityType<ToscaRequirement> private String relationship; @ElementCollection - private List<Double> occurrences; + private List<Integer> occurrences; @ElementCollection @Lob @@ -133,11 +132,11 @@ public class JpaToscaRequirement extends JpaToscaEntityType<ToscaRequirement> if (occurrences != null) { List<Object> occurrencesList = new ArrayList<>(occurrences); - for (Double occurrence : occurrences) { - if (occurrence == JPA_UNBOUNDED_VALUE) { + for (Integer occurrence : occurrences) { + if (JPA_UNBOUNDED_VALUE.equals(occurrence)) { occurrencesList.add(AUTHORATIVE_UNBOUNDED_LITERAL); } else { - occurrencesList.add(occurrence.doubleValue()); + occurrencesList.add(occurrence); } } toscaRequirement.setOccurrences(occurrencesList); @@ -170,7 +169,7 @@ public class JpaToscaRequirement extends JpaToscaEntityType<ToscaRequirement> if (occurrence.equals(AUTHORATIVE_UNBOUNDED_LITERAL)) { occurrences.add(JPA_UNBOUNDED_VALUE); } else { - occurrences.add((Double) occurrence); + occurrences.add(((Number) occurrence).intValue()); } } } @@ -186,11 +185,6 @@ public class JpaToscaRequirement extends JpaToscaEntityType<ToscaRequirement> } @Override - public List<PfKey> getKeys() { - return super.getKeys(); - } - - @Override public void clean() { super.clean(); @@ -202,58 +196,11 @@ public class JpaToscaRequirement extends JpaToscaEntityType<ToscaRequirement> } @Override - public PfValidationResult validate(@NonNull final PfValidationResult resultIn) { - PfValidationResult result = super.validate(resultIn); - - if (properties != null) { - result = validateProperties(result); - } - - if (occurrences != null) { - result = validateOccurrences(result); - } - - return result; - } - - /** - * Validate the properties. - * - * @param resultIn The result of validations up to now - * @return the validation result - */ - private PfValidationResult validateProperties(final PfValidationResult resultIn) { - PfValidationResult result = resultIn; - - for (String property : properties.values()) { - if (property == null) { - result.addValidationMessage(new PfValidationMessage(getKey(), this.getClass(), - PfValidationResult.ValidationResult.INVALID, "topology template property may not be null ")); - } - } - return result; - } + public BeanValidationResult validate(String fieldName) { + BeanValidationResult result = super.validate(fieldName); - /** - * Validate the occurrences. - * - * @param resultIn The result of validations up to now - * @return the validation result - */ - private PfValidationResult validateOccurrences(final PfValidationResult resultIn) { - PfValidationResult result = resultIn; - - for (Double occurrence : occurrences) { - if (occurrence == null) { - result.addValidationMessage(new PfValidationMessage(getKey(), this.getClass(), - PfValidationResult.ValidationResult.INVALID, "requirement occurrence value may not be null ")); - } - if (occurrence < -1.0) { - result.addValidationMessage( - new PfValidationMessage(getKey(), this.getClass(), PfValidationResult.ValidationResult.INVALID, - "requirement occurrence value may not be negative")); - } - } + validateMap(result, "properties", properties, Validated::validateEntryValueNotNull); + validateList(result, "occurrences", occurrences, validateMin(0, JPA_UNBOUNDED_VALUE, true)); return result; } diff --git a/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaRequirements.java b/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaRequirements.java index 08dbb43de..283c161d0 100644 --- a/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaRequirements.java +++ b/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaRequirements.java @@ -1,6 +1,7 @@ /*- * ============LICENSE_START======================================================= * Copyright (C) 2020 Nordix Foundation. + * Modifications 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. @@ -29,12 +30,11 @@ import javax.persistence.InheritanceType; import javax.persistence.Table; import lombok.Data; import lombok.EqualsAndHashCode; -import lombok.NonNull; import lombok.ToString; +import org.onap.policy.common.parameters.BeanValidationResult; import org.onap.policy.models.base.PfAuthorative; import org.onap.policy.models.base.PfConceptContainer; import org.onap.policy.models.base.PfConceptKey; -import org.onap.policy.models.base.PfValidationResult; import org.onap.policy.models.tosca.authorative.concepts.ToscaRequirement; import org.onap.policy.models.tosca.utils.ToscaUtils; @@ -104,8 +104,8 @@ public class JpaToscaRequirements extends PfConceptContainer<JpaToscaRequirement } @Override - public PfValidationResult validate(@NonNull final PfValidationResult resultIn) { - PfValidationResult result = super.validate(resultIn); + public BeanValidationResult validate(String fieldName) { + BeanValidationResult result = super.validate(fieldName); for (JpaToscaRequirement requirement : this.getConceptMap().values()) { ToscaUtils.getEntityTypeAncestors(this, requirement, result); diff --git a/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaSchemaDefinition.java b/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaSchemaDefinition.java index 6bd1b44cd..bae36299a 100644 --- a/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaSchemaDefinition.java +++ b/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaSchemaDefinition.java @@ -2,7 +2,7 @@ * ============LICENSE_START======================================================= * ONAP Policy Model * ================================================================================ - * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved. + * Copyright (C) 2019-2020 AT&T Intellectual Property. All rights reserved. * Modifications Copyright (C) 2019-2020 Nordix Foundation. * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); @@ -33,14 +33,13 @@ import lombok.EqualsAndHashCode; import lombok.NoArgsConstructor; import lombok.NonNull; import org.apache.commons.lang3.ObjectUtils; +import org.onap.policy.common.parameters.BeanValidationResult; import org.onap.policy.common.utils.validation.Assertions; import org.onap.policy.models.base.PfAuthorative; import org.onap.policy.models.base.PfConceptKey; import org.onap.policy.models.base.PfKey; import org.onap.policy.models.base.PfUtils; -import org.onap.policy.models.base.PfValidationMessage; -import org.onap.policy.models.base.PfValidationResult; -import org.onap.policy.models.base.PfValidationResult.ValidationResult; +import org.onap.policy.models.base.Validated; import org.onap.policy.models.tosca.authorative.concepts.ToscaConstraint; import org.onap.policy.models.tosca.authorative.concepts.ToscaSchemaDefinition; @@ -53,14 +52,11 @@ import org.onap.policy.models.tosca.authorative.concepts.ToscaSchemaDefinition; @Data @EqualsAndHashCode(callSuper = false) @NoArgsConstructor -public class JpaToscaSchemaDefinition +public class JpaToscaSchemaDefinition extends Validated implements PfAuthorative<ToscaSchemaDefinition>, Serializable, Comparable<JpaToscaSchemaDefinition> { private static final long serialVersionUID = 3645882081163287058L; - // Recurring string constants - private static final String ENTRY_SCHEMA = "EntrySchema"; - @Column private PfConceptKey type; @@ -147,34 +143,14 @@ public class JpaToscaSchemaDefinition description = (description != null ? description.trim() : null); } - /** - * Validate the entry schema. - * - * @param resultIn the incoming result - * @return the ooutput result witht he result of this validation - */ - public PfValidationResult validate(@NonNull final PfValidationResult resultIn) { - PfValidationResult result = resultIn; - - if (type == null || type.isNullKey()) { - result.addValidationMessage(new PfValidationMessage(new PfConceptKey(ENTRY_SCHEMA, PfKey.NULL_KEY_VERSION), - this.getClass(), ValidationResult.INVALID, "entry schema type may not be null")); - } + @Override + public BeanValidationResult validate(@NonNull String fieldName) { + BeanValidationResult result = new BeanValidationResult(fieldName, this); - if (description != null && description.trim().length() == 0) { - result.addValidationMessage(new PfValidationMessage(new PfConceptKey(ENTRY_SCHEMA, PfKey.NULL_KEY_VERSION), - this.getClass(), ValidationResult.INVALID, "entry schema description may not be blank")); - } + result.addResult(validateKeyNotNull("type", type)); + result.addResult(validateNotBlank("description", description, false)); - if (constraints != null) { - for (JpaToscaConstraint constraint : constraints) { - if (constraint == null) { - result.addValidationMessage( - new PfValidationMessage(new PfConceptKey(ENTRY_SCHEMA, PfKey.NULL_KEY_VERSION), - this.getClass(), ValidationResult.INVALID, "property constraint may not be null ")); - } - } - } + validateList(result, "constraints", constraints, Validated::validateNotNull); return result; } diff --git a/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaServiceTemplate.java b/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaServiceTemplate.java index 791801616..d4e51840b 100644 --- a/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaServiceTemplate.java +++ b/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaServiceTemplate.java @@ -1,7 +1,7 @@ /*- * ============LICENSE_START======================================================= * Copyright (C) 2019-2020 Nordix Foundation. - * Modifications Copyright (C) 2019 AT&T Intellectual Property. All rights reserved. + * Modifications Copyright (C) 2019-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. @@ -41,14 +41,11 @@ import lombok.Data; import lombok.EqualsAndHashCode; import lombok.NonNull; import org.apache.commons.lang3.ObjectUtils; -import org.onap.policy.common.utils.validation.ParameterValidationUtils; +import org.onap.policy.common.parameters.BeanValidationResult; import org.onap.policy.models.base.PfAuthorative; import org.onap.policy.models.base.PfConcept; import org.onap.policy.models.base.PfConceptKey; import org.onap.policy.models.base.PfKey; -import org.onap.policy.models.base.PfValidationMessage; -import org.onap.policy.models.base.PfValidationResult; -import org.onap.policy.models.base.PfValidationResult.ValidationResult; import org.onap.policy.models.tosca.authorative.concepts.ToscaCapabilityType; import org.onap.policy.models.tosca.authorative.concepts.ToscaDataType; import org.onap.policy.models.tosca.authorative.concepts.ToscaNodeType; @@ -363,46 +360,28 @@ public class JpaToscaServiceTemplate extends JpaToscaEntityType<ToscaServiceTemp } @Override - public PfValidationResult validate(final PfValidationResult resultIn) { - PfValidationResult result = super.validate(resultIn); + public BeanValidationResult validate(String fieldName) { + BeanValidationResult result = super.validate(fieldName); - if (!ParameterValidationUtils.validateStringParameter(toscaDefinitionsVersion)) { - result.addValidationMessage(new PfValidationMessage(getKey(), this.getClass(), ValidationResult.INVALID, - "service template tosca definitions version may not be null")); - } - - if (dataTypes != null) { - result = dataTypes.validate(result); - } - - if (capabilityTypes != null) { - result = capabilityTypes.validate(result); - } - - if (relationshipTypes != null) { - result = relationshipTypes.validate(result); - } - - if (nodeTypes != null) { - result = nodeTypes.validate(result); - } - - if (policyTypes != null) { - result = policyTypes.validate(result); - } + result.addResult(validateNotBlank("toscaDefinitionsVersion", toscaDefinitionsVersion, true)); - if (topologyTemplate != null) { - result = topologyTemplate.validate(result); - } + validateOptional(result, "dataTypes", dataTypes); + validateOptional(result, "capabilityTypes", capabilityTypes); + validateOptional(result, "relationshipTypes", relationshipTypes); + validateOptional(result, "nodeTypes", nodeTypes); + validateOptional(result, "policyTypes", policyTypes); + validateOptional(result, "topologyTemplate", topologyTemplate); // No point in validating cross references if the structure of the individual parts are not valid - if (!result.isOk()) { + if (!result.isValid()) { return result; } validateReferencedDataTypes(result); - return validatePolicyTypesInPolicies(result); + validatePolicyTypesInPolicies(result); + + return result; } @Override @@ -471,39 +450,35 @@ public class JpaToscaServiceTemplate extends JpaToscaEntityType<ToscaServiceTemp * Validate that all data types referenced in policy types exist. * * @param result the validation result object to use for the validation result - * @return the validation result object + * @param result where the results are added */ - private PfValidationResult validateReferencedDataTypes(final PfValidationResult result) { + private void validateReferencedDataTypes(final BeanValidationResult result) { if (policyTypes == null) { - return result; + return; } if (dataTypes != null) { for (JpaToscaDataType dataType : dataTypes.getAll(null)) { - validateReferencedDataTypesExists(dataType.getKey(), dataType.getReferencedDataTypes(), result); + validateReferencedDataTypesExists(dataType.getReferencedDataTypes(), result); } } for (JpaToscaPolicyType policyType : policyTypes.getAll(null)) { - validateReferencedDataTypesExists(policyType.getKey(), policyType.getReferencedDataTypes(), result); + validateReferencedDataTypesExists(policyType.getReferencedDataTypes(), result); } - - return result; } /** * Validate that the referenced data types exist for a collection of data type keys. * - * @param referencingEntityKey the key of the referencing entity * @param dataTypeKeyCollection the data type key collection - * @param result the result of the validation + * @param result where the results are added */ - private void validateReferencedDataTypesExists(final PfConceptKey referencingEntityKey, - final Collection<PfConceptKey> dataTypeKeyCollection, final PfValidationResult result) { + private void validateReferencedDataTypesExists( + final Collection<PfConceptKey> dataTypeKeyCollection, final BeanValidationResult result) { for (PfConceptKey dataTypeKey : dataTypeKeyCollection) { if (dataTypes == null || dataTypes.get(dataTypeKey) == null) { - result.addValidationMessage(new PfValidationMessage(referencingEntityKey, this.getClass(), - ValidationResult.INVALID, "referenced data type " + dataTypeKey.getId() + " not found")); + addResult(result, "data type", dataTypeKey.getId(), NOT_FOUND); } } } @@ -511,30 +486,24 @@ public class JpaToscaServiceTemplate extends JpaToscaEntityType<ToscaServiceTemp /** * Validate that all policy types referenced in policies exist. * - * @param result the validation result object to use for the validation result - * @return the validation result object + * @param result where the results are added */ - private PfValidationResult validatePolicyTypesInPolicies(PfValidationResult result) { + private void validatePolicyTypesInPolicies(BeanValidationResult result) { if (topologyTemplate == null || topologyTemplate.getPolicies() == null || topologyTemplate.getPolicies().getConceptMap().isEmpty()) { - return result; + return; } if (policyTypes == null || policyTypes.getConceptMap().isEmpty()) { - result.addValidationMessage(new PfValidationMessage(this.getKey(), this.getClass(), - ValidationResult.INVALID, - "no policy types are defined on the service template for the policies in the topology template")); - return result; + addResult(result, "policyTypes", policyTypes, + "no policy types are defined on the service template for the policies in the topology template"); + return; } for (JpaToscaPolicy policy : topologyTemplate.getPolicies().getAll(null)) { if (policyTypes.get(policy.getType()) == null) { - result.addValidationMessage( - new PfValidationMessage(policy.getKey(), this.getClass(), ValidationResult.INVALID, - "policy type " + policy.getType().getId() + " referenced in policy not found")); + addResult(result, "policy type", policy.getType().getId(), NOT_FOUND); } } - - return result; } } diff --git a/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaTimeInterval.java b/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaTimeInterval.java index 783e2b576..a8a21c3f0 100644 --- a/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaTimeInterval.java +++ b/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaTimeInterval.java @@ -2,7 +2,7 @@ * ============LICENSE_START======================================================= * ONAP Policy Model * ================================================================================ - * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved. + * Copyright (C) 2019-2020 AT&T Intellectual Property. All rights reserved. * Modifications Copyright (C) 2019-2020 Nordix Foundation. * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); @@ -34,13 +34,11 @@ import javax.persistence.Table; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.NonNull; +import org.onap.policy.common.parameters.BeanValidationResult; import org.onap.policy.models.base.PfConcept; import org.onap.policy.models.base.PfKey; import org.onap.policy.models.base.PfReferenceKey; import org.onap.policy.models.base.PfUtils; -import org.onap.policy.models.base.PfValidationMessage; -import org.onap.policy.models.base.PfValidationResult; -import org.onap.policy.models.base.PfValidationResult.ValidationResult; /** * Class to represent the TimeInterval in TOSCA definition. @@ -117,30 +115,21 @@ public class JpaToscaTimeInterval extends PfConcept { } @Override - public PfValidationResult validate(@NonNull final PfValidationResult resultIn) { - PfValidationResult result = resultIn; + public BeanValidationResult validate(@NonNull String fieldName) { + BeanValidationResult result = new BeanValidationResult(fieldName, this); - if (key.isNullKey()) { - result.addValidationMessage( - new PfValidationMessage(key, this.getClass(), ValidationResult.INVALID, "key is a null key")); - } - - result = key.validate(result); + result.addResult(validateKeyNotNull("key", key)); if (startTime == null || startTime.getTime() == 0) { - result.addValidationMessage(new PfValidationMessage(key, this.getClass(), ValidationResult.INVALID, - "start time on time interval may not be null or zero")); + addResult(result, "startTime", startTime, "is null or zero"); } if (endTime == null || endTime.getTime() == 0) { - result.addValidationMessage(new PfValidationMessage(key, this.getClass(), ValidationResult.INVALID, - "end time on time interval may not be null or zero")); + addResult(result, "endTime", endTime, "is null or zero"); } if (startTime != null && endTime != null && endTime.before(startTime)) { - result.addValidationMessage(new PfValidationMessage(key, this.getClass(), ValidationResult.INVALID, - "end time \"" + endTime.toString() + "\" on time interval may not be before start time \"" - + startTime.toString() + "\"")); + addResult(result, "endTime", endTime, "is before startTime"); } return result; diff --git a/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaTopologyTemplate.java b/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaTopologyTemplate.java index 32c459cc9..538680f5f 100644 --- a/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaTopologyTemplate.java +++ b/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaTopologyTemplate.java @@ -1,7 +1,7 @@ /*- * ============LICENSE_START======================================================= * Copyright (C) 2019-2020 Nordix Foundation. - * Modifications Copyright (C) 2019 AT&T Intellectual Property. All rights reserved. + * Modifications Copyright (C) 2019-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. @@ -43,14 +43,13 @@ import lombok.Data; import lombok.EqualsAndHashCode; import lombok.NonNull; import org.apache.commons.lang3.ObjectUtils; +import org.onap.policy.common.parameters.BeanValidationResult; import org.onap.policy.models.base.PfAuthorative; import org.onap.policy.models.base.PfConcept; import org.onap.policy.models.base.PfKey; import org.onap.policy.models.base.PfReferenceKey; import org.onap.policy.models.base.PfUtils; -import org.onap.policy.models.base.PfValidationMessage; -import org.onap.policy.models.base.PfValidationResult; -import org.onap.policy.models.base.PfValidationResult.ValidationResult; +import org.onap.policy.models.base.Validated; import org.onap.policy.models.tosca.authorative.concepts.ToscaNodeTemplate; import org.onap.policy.models.tosca.authorative.concepts.ToscaParameter; import org.onap.policy.models.tosca.authorative.concepts.ToscaTopologyTemplate; @@ -241,54 +240,17 @@ public class JpaToscaTopologyTemplate extends PfConcept implements PfAuthorative } @Override - public PfValidationResult validate(PfValidationResult resultIn) { - PfValidationResult result = resultIn; + public BeanValidationResult validate(@NonNull String fieldName) { + BeanValidationResult result = new BeanValidationResult(fieldName, this); - if (key.isNullKey()) { - result.addValidationMessage( - new PfValidationMessage(key, this.getClass(), ValidationResult.INVALID, "key is a null key")); - } - - result = key.validate(result); - - if (description != null && description.trim().length() == 0) { - result.addValidationMessage(new PfValidationMessage(key, this.getClass(), ValidationResult.INVALID, - "property description may not be blank")); - } - - if (inputs != null) { - result = validateInputs(result); - } - - - if (nodeTemplates != null) { - result = nodeTemplates.validate(result); - } + result.addResult(validateKeyNotNull("key", key)); + result.addResult(validateNotBlank("description", description, false)); - if (policies != null) { - result = policies.validate(result); - } + validateMap(result, "inputs", inputs, Validated::validateEntryValueNotNull); - return result; - } + validateOptional(result, "nodeTemplates", nodeTemplates); + validateOptional(result, "policies", policies); - /** - * Validate the inputs. - * - * @param resultIn The result of validations up to now - * @return the validation result - */ - private PfValidationResult validateInputs(final PfValidationResult resultIn) { - PfValidationResult result = resultIn; - - for (JpaToscaParameter input : inputs.values()) { - if (input == null) { - result.addValidationMessage(new PfValidationMessage(getKey(), this.getClass(), ValidationResult.INVALID, - "topology template input may not be null ")); - } else { - result = input.validate(result); - } - } return result; } diff --git a/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaTrigger.java b/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaTrigger.java index 10a9d2f66..e30754007 100644 --- a/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaTrigger.java +++ b/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaTrigger.java @@ -2,7 +2,7 @@ * ============LICENSE_START======================================================= * ONAP Policy Model * ================================================================================ - * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved. + * Copyright (C) 2019-2020 AT&T Intellectual Property. All rights reserved. * Modifications Copyright (C) 2019-2020 Nordix Foundation. * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); @@ -36,13 +36,10 @@ import lombok.Data; import lombok.EqualsAndHashCode; import lombok.NonNull; import org.apache.commons.lang3.ObjectUtils; -import org.onap.policy.common.utils.validation.ParameterValidationUtils; +import org.onap.policy.common.parameters.BeanValidationResult; import org.onap.policy.models.base.PfConcept; import org.onap.policy.models.base.PfKey; import org.onap.policy.models.base.PfReferenceKey; -import org.onap.policy.models.base.PfValidationMessage; -import org.onap.policy.models.base.PfValidationResult; -import org.onap.policy.models.base.PfValidationResult.ValidationResult; /** * Class to represent the trigger of policy type in TOSCA definition. @@ -177,57 +174,23 @@ public class JpaToscaTrigger extends PfConcept { } @Override - public PfValidationResult validate(@NonNull final PfValidationResult resultIn) { - PfValidationResult result = resultIn; + public BeanValidationResult validate(@NonNull String fieldName) { + BeanValidationResult result = new BeanValidationResult(fieldName, this); - if (key.isNullKey()) { - result.addValidationMessage( - new PfValidationMessage(key, this.getClass(), ValidationResult.INVALID, "key is a null key")); - } - - result = key.validate(result); - - if (description != null && description.trim().length() == 0) { - result.addValidationMessage(new PfValidationMessage(key, this.getClass(), ValidationResult.INVALID, - "trigger description may not be blank")); - } + result.addResult(validateKeyNotNull("key", key)); - if (!ParameterValidationUtils.validateStringParameter(eventType)) { - result.addValidationMessage(new PfValidationMessage(key, this.getClass(), ValidationResult.INVALID, - "event type on trigger must be defined")); - } + result.addResult(validateNotBlank("description", description, false)); + result.addResult(validateNotBlank("eventType", eventType, true)); - result = validateOptionalFields(result); + validateOptional(result, "schedule", schedule); + validateOptional(result, "targetFilter", targetFilter); if (evaluations < 0) { - result.addValidationMessage(new PfValidationMessage(key, this.getClass(), ValidationResult.INVALID, - "evaluations on trigger must be zero or a positive integer")); - } - - if (method != null && method.trim().length() == 0) { - result.addValidationMessage(new PfValidationMessage(key, this.getClass(), ValidationResult.INVALID, - "method on trigger may not be blank")); - } - - if (!ParameterValidationUtils.validateStringParameter(action)) { - result.addValidationMessage(new PfValidationMessage(key, this.getClass(), ValidationResult.INVALID, - "action on trigger must be defined")); + addResult(result, "evaluations", evaluations, "is negative"); } - return result; - } - - /** - * Validate optional fields. - * - * @param resultIn the validation result so far - * @return the validation resutls including these fields - */ - private PfValidationResult validateOptionalFields(final PfValidationResult resultIn) { - PfValidationResult result = resultIn; - - result = (schedule != null ? schedule.validate(result) : result); - result = (targetFilter != null ? targetFilter.validate(result) : result); + result.addResult(validateNotBlank("method", method, false)); + result.addResult(validateNotBlank("action", action, true)); return result; } diff --git a/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/provider/SimpleToscaProvider.java b/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/provider/SimpleToscaProvider.java index 459a32934..8fb4a7711 100644 --- a/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/provider/SimpleToscaProvider.java +++ b/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/provider/SimpleToscaProvider.java @@ -1,6 +1,7 @@ /*- * ============LICENSE_START======================================================= * Copyright (C) 2019-2020 Nordix Foundation. + * Modifications 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. @@ -26,13 +27,13 @@ import java.util.List; import javax.ws.rs.core.Response; import lombok.NonNull; import org.apache.commons.collections4.CollectionUtils; +import org.onap.policy.common.parameters.BeanValidationResult; import org.onap.policy.models.base.PfConcept; import org.onap.policy.models.base.PfConceptFilter; import org.onap.policy.models.base.PfConceptKey; import org.onap.policy.models.base.PfKey; import org.onap.policy.models.base.PfModelException; import org.onap.policy.models.base.PfModelRuntimeException; -import org.onap.policy.models.base.PfValidationResult; import org.onap.policy.models.dao.PfDao; import org.onap.policy.models.tosca.authorative.concepts.ToscaEntity; import org.onap.policy.models.tosca.simple.concepts.JpaToscaDataType; @@ -107,9 +108,9 @@ public class SimpleToscaProvider { ToscaServiceTemplateUtils.addFragment(dbServiceTemplate, incomingServiceTemplateFragment); } - PfValidationResult result = serviceTemplateToWrite.validate(new PfValidationResult()); + BeanValidationResult result = serviceTemplateToWrite.validate("service template"); if (!result.isValid()) { - throw new PfModelRuntimeException(Response.Status.NOT_ACCEPTABLE, result.toString()); + throw new PfModelRuntimeException(Response.Status.NOT_ACCEPTABLE, result.getResult()); } new SimpleToscaServiceTemplateProvider().write(dao, serviceTemplateToWrite); @@ -454,9 +455,11 @@ public class SimpleToscaProvider { POLICY_TYPE + policyTypeKey.getId() + NOT_FOUND); } + BeanValidationResult result = new BeanValidationResult("policy types", serviceTemplate); + for (JpaToscaPolicyType policyType : serviceTemplate.getPolicyTypes().getAll(null)) { Collection<JpaToscaEntityType<ToscaEntity>> ancestorList = ToscaUtils - .getEntityTypeAncestors(serviceTemplate.getPolicyTypes(), policyType, new PfValidationResult()); + .getEntityTypeAncestors(serviceTemplate.getPolicyTypes(), policyType, result); if (ancestorList.contains(policyType4Deletion)) { throw new PfModelRuntimeException(Response.Status.NOT_ACCEPTABLE, POLICY_TYPE + policyTypeKey.getId() diff --git a/models-tosca/src/main/java/org/onap/policy/models/tosca/utils/ToscaServiceTemplateUtils.java b/models-tosca/src/main/java/org/onap/policy/models/tosca/utils/ToscaServiceTemplateUtils.java index 7bf4d29e8..fe5299337 100644 --- a/models-tosca/src/main/java/org/onap/policy/models/tosca/utils/ToscaServiceTemplateUtils.java +++ b/models-tosca/src/main/java/org/onap/policy/models/tosca/utils/ToscaServiceTemplateUtils.java @@ -25,12 +25,11 @@ import java.util.Map; import java.util.Map.Entry; import javax.ws.rs.core.Response; import lombok.NonNull; +import org.onap.policy.common.parameters.BeanValidationResult; import org.onap.policy.models.base.PfConceptContainer; import org.onap.policy.models.base.PfConceptKey; import org.onap.policy.models.base.PfModelRuntimeException; -import org.onap.policy.models.base.PfValidationMessage; -import org.onap.policy.models.base.PfValidationResult; -import org.onap.policy.models.base.PfValidationResult.ValidationResult; +import org.onap.policy.models.base.Validated; import org.onap.policy.models.tosca.authorative.concepts.ToscaEntity; import org.onap.policy.models.tosca.simple.concepts.JpaToscaEntityType; import org.onap.policy.models.tosca.simple.concepts.JpaToscaServiceTemplate; @@ -57,12 +56,13 @@ public class ToscaServiceTemplateUtils { */ public static JpaToscaServiceTemplate addFragment(@NonNull final JpaToscaServiceTemplate originalTemplate, @NonNull final JpaToscaServiceTemplate fragmentTemplate) { - PfValidationResult result = new PfValidationResult(); + + BeanValidationResult result = new BeanValidationResult("incoming fragment", fragmentTemplate); if (originalTemplate.compareToWithoutEntities(fragmentTemplate) != 0) { - result.addValidationMessage(new PfValidationMessage(originalTemplate.getKey(), - ToscaServiceTemplateUtils.class, ValidationResult.INVALID, - "service template in incoming fragment does not equal existing service template")); + Validated.addResult(result, "service template", + originalTemplate.getKey(), + "does not equal existing service template"); } JpaToscaServiceTemplate compositeTemplate = new JpaToscaServiceTemplate(originalTemplate); @@ -79,20 +79,20 @@ public class ToscaServiceTemplateUtils { .setPolicies(addFragmentEntitites(compositeTemplate.getTopologyTemplate().getPolicies(), fragmentTemplate.getTopologyTemplate().getPolicies(), result)); } else { - result.addValidationMessage(new PfValidationMessage(originalTemplate.getTopologyTemplate().getKey(), - ToscaServiceTemplateUtils.class, ValidationResult.INVALID, - "topology template in incoming fragment does not equal existing topology template")); + Validated.addResult(result, "topology template", + originalTemplate.getTopologyTemplate().getKey(), + "does not equal existing topology template"); } } else if (fragmentTemplate.getTopologyTemplate() != null) { compositeTemplate.setTopologyTemplate(new JpaToscaTopologyTemplate(fragmentTemplate.getTopologyTemplate())); } if (result.isValid()) { - result = compositeTemplate.validate(result); + result.addResult(compositeTemplate.validate("composite template")); } if (!result.isValid()) { - String message = result.toString(); + String message = result.getResult(); throw new PfModelRuntimeException(Response.Status.NOT_ACCEPTABLE, message); } @@ -113,7 +113,7 @@ public class ToscaServiceTemplateUtils { private static <S extends PfConceptContainer<? extends JpaToscaEntityType<? extends ToscaEntity>, ? extends ToscaEntity>> S addFragmentEntitites(final S compositeContainer, final S fragmentContainer, - final PfValidationResult result) { + final BeanValidationResult result) { if (compositeContainer == null) { return fragmentContainer; @@ -123,17 +123,22 @@ public class ToscaServiceTemplateUtils { return compositeContainer; } + BeanValidationResult result2 = new BeanValidationResult("incoming fragment", fragmentContainer); + for (Entry<PfConceptKey, ? extends JpaToscaEntityType<? extends ToscaEntity>> fragmentEntry : fragmentContainer .getConceptMap().entrySet()) { JpaToscaEntityType<? extends ToscaEntity> containerEntity = compositeContainer.getConceptMap().get(fragmentEntry.getKey()); if (containerEntity != null && containerEntity.compareTo(fragmentEntry.getValue()) != 0) { - result.addValidationMessage(new PfValidationMessage(fragmentEntry.getKey(), - ToscaServiceTemplateUtils.class, - ValidationResult.INVALID, "entity in incoming fragment does not equal existing entity")); + Validated.addResult(result, "entity", fragmentEntry.getKey(), + "does not equal existing entity"); } } + if (!result2.isClean()) { + result.addResult(result2); + } + // This use of a generic map is required to get around typing errors in directly adding the fragment map to the // original map @SuppressWarnings("rawtypes") diff --git a/models-tosca/src/main/java/org/onap/policy/models/tosca/utils/ToscaUtils.java b/models-tosca/src/main/java/org/onap/policy/models/tosca/utils/ToscaUtils.java index 70c5027d7..b806e4152 100644 --- a/models-tosca/src/main/java/org/onap/policy/models/tosca/utils/ToscaUtils.java +++ b/models-tosca/src/main/java/org/onap/policy/models/tosca/utils/ToscaUtils.java @@ -1,6 +1,7 @@ /*- * ============LICENSE_START======================================================= * Copyright (C) 2019-2020 Nordix Foundation. + * Modifications 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. @@ -27,15 +28,16 @@ import java.util.function.Function; import javax.ws.rs.core.Response; import lombok.NonNull; import org.apache.commons.collections4.CollectionUtils; +import org.onap.policy.common.parameters.BeanValidationResult; +import org.onap.policy.common.parameters.ObjectValidationResult; +import org.onap.policy.common.parameters.ValidationStatus; import org.onap.policy.models.base.PfConcept; import org.onap.policy.models.base.PfConceptContainer; import org.onap.policy.models.base.PfConceptKey; import org.onap.policy.models.base.PfKey; import org.onap.policy.models.base.PfModelRuntimeException; import org.onap.policy.models.base.PfNameVersion; -import org.onap.policy.models.base.PfValidationMessage; -import org.onap.policy.models.base.PfValidationResult; -import org.onap.policy.models.base.PfValidationResult.ValidationResult; +import org.onap.policy.models.base.Validated; import org.onap.policy.models.tosca.authorative.concepts.ToscaEntity; import org.onap.policy.models.tosca.simple.concepts.JpaToscaEntityType; import org.onap.policy.models.tosca.simple.concepts.JpaToscaServiceTemplate; @@ -219,7 +221,7 @@ public final class ToscaUtils { */ public static Collection<JpaToscaEntityType<ToscaEntity>> getEntityTypeAncestors( @NonNull PfConceptContainer<? extends PfConcept, ? extends PfNameVersion> entityTypes, - @NonNull JpaToscaEntityType<?> entityType, @NonNull final PfValidationResult result) { + @NonNull JpaToscaEntityType<?> entityType, @NonNull final BeanValidationResult result) { PfConceptKey parentEntityTypeKey = entityType.getDerivedFrom(); if (parentEntityTypeKey == null || parentEntityTypeKey.getName().endsWith(ROOT_KEY_NAME_SUFFIX)) { @@ -227,9 +229,9 @@ public final class ToscaUtils { } if (entityType.getKey().equals(parentEntityTypeKey)) { - result.addValidationMessage(new PfValidationMessage(entityType.getKey(), ToscaUtils.class, - ValidationResult.INVALID, "entity cannot be an ancestor of itself")); - throw new PfModelRuntimeException(Response.Status.CONFLICT, result.toString()); + result.addResult(new ObjectValidationResult("entity type", entityType.getKey().getId(), + ValidationStatus.INVALID, "ancestor of itself")); + throw new PfModelRuntimeException(Response.Status.CONFLICT, result.getResult()); } @SuppressWarnings("unchecked") @@ -237,8 +239,8 @@ public final class ToscaUtils { .getAll(parentEntityTypeKey.getName(), parentEntityTypeKey.getVersion()); Set<JpaToscaEntityType<ToscaEntity>> ancestorEntitySetToReturn = new HashSet<>(ancestorEntitySet); if (ancestorEntitySet.isEmpty()) { - result.addValidationMessage(new PfValidationMessage(entityType.getKey(), ToscaUtils.class, - ValidationResult.INVALID, "parent " + parentEntityTypeKey.getId() + " of entity not found")); + result.addResult(new ObjectValidationResult("parent", parentEntityTypeKey.getId(), + ValidationStatus.INVALID, Validated.NOT_FOUND)); } else { for (JpaToscaEntityType<?> filteredEntityType : ancestorEntitySet) { ancestorEntitySetToReturn.addAll(getEntityTypeAncestors(entityTypes, filteredEntityType, result)); @@ -258,7 +260,7 @@ public final class ToscaUtils { @NonNull final PfConceptContainer<? extends PfConcept, ? extends PfNameVersion> entityTypes, final String entityName, final String entityVersion) { - PfValidationResult result = new PfValidationResult(); + BeanValidationResult result = new BeanValidationResult("entity", entityName); @SuppressWarnings("unchecked") Set<JpaToscaEntityType<?>> filteredEntitySet = @@ -270,7 +272,7 @@ public final class ToscaUtils { } if (!result.isValid()) { - throw new PfModelRuntimeException(Response.Status.NOT_ACCEPTABLE, result.toString()); + throw new PfModelRuntimeException(Response.Status.NOT_ACCEPTABLE, result.getResult()); } entityTypes.getConceptMap().entrySet() diff --git a/models-tosca/src/test/java/org/onap/policy/models/tosca/authorative/provider/ToscaServiceTemplateMappingTest.java b/models-tosca/src/test/java/org/onap/policy/models/tosca/authorative/provider/ToscaServiceTemplateMappingTest.java index 5258053e9..c4d903986 100644 --- a/models-tosca/src/test/java/org/onap/policy/models/tosca/authorative/provider/ToscaServiceTemplateMappingTest.java +++ b/models-tosca/src/test/java/org/onap/policy/models/tosca/authorative/provider/ToscaServiceTemplateMappingTest.java @@ -31,7 +31,6 @@ import org.junit.Test; import org.onap.policy.common.utils.coder.StandardCoder; import org.onap.policy.common.utils.coder.YamlJsonTranslator; import org.onap.policy.common.utils.resources.ResourceUtils; -import org.onap.policy.models.base.PfValidationResult; import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicy; import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate; import org.onap.policy.models.tosca.simple.concepts.JpaToscaServiceTemplate; @@ -72,7 +71,7 @@ public class ToscaServiceTemplateMappingTest { JpaToscaServiceTemplate internalServiceTemplate = ToscaServiceTemplateUtils.addFragment(policyTypeServiceTemplate, policyFragmentServiceTemplate); - assertTrue(internalServiceTemplate.validate(new PfValidationResult()).isValid()); + assertTrue(internalServiceTemplate.validate("").isValid()); ToscaServiceTemplate plainPolicies2 = internalServiceTemplate.toAuthorative(); ToscaPolicy pp1 = plainPolicies.getToscaTopologyTemplate().getPolicies().get(0).values().iterator().next(); @@ -92,11 +91,11 @@ public class ToscaServiceTemplateMappingTest { ToscaServiceTemplate plainPolicyTypes = standardCoder.decode(yamlAsJsonString, ToscaServiceTemplate.class); JpaToscaServiceTemplate internalPolicyTypes = new JpaToscaServiceTemplate(); internalPolicyTypes.fromAuthorative(plainPolicyTypes); - assertTrue(internalPolicyTypes.validate(new PfValidationResult()).isValid()); + assertTrue(internalPolicyTypes.validate("").isValid()); ToscaServiceTemplate plainPolicyTypes2 = internalPolicyTypes.toAuthorative(); JpaToscaServiceTemplate internalPolicyTypes2 = new JpaToscaServiceTemplate(); internalPolicyTypes2.fromAuthorative(plainPolicyTypes2); - assertTrue(internalPolicyTypes2.validate(new PfValidationResult()).isValid()); + assertTrue(internalPolicyTypes2.validate("").isValid()); assertEquals(0, internalPolicyTypes.compareTo(internalPolicyTypes2)); } } diff --git a/models-tosca/src/test/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaCapabilityAssignmentTest.java b/models-tosca/src/test/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaCapabilityAssignmentTest.java index ee2fee86b..9637d4252 100644 --- a/models-tosca/src/test/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaCapabilityAssignmentTest.java +++ b/models-tosca/src/test/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaCapabilityAssignmentTest.java @@ -1,6 +1,7 @@ /*- * ============LICENSE_START======================================================= * Copyright (C) 2020 Nordix Foundation. + * Modifications 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. @@ -31,7 +32,7 @@ import java.util.List; import java.util.Map; import org.junit.Test; import org.onap.policy.models.base.PfConceptKey; -import org.onap.policy.models.base.PfValidationResult; +import org.onap.policy.models.base.Validated; import org.onap.policy.models.tosca.authorative.concepts.ToscaCapabilityAssignment; /** @@ -69,7 +70,7 @@ public class JpaToscaCapabilityAssignmentTest { assertEquals(caKey, ca.getKeys().get(0)); ca.clean(); - ca.validate(new PfValidationResult()); + ca.validate(""); assertThat(ca.getProperties()).isNullOrEmpty(); assertThat(ca.getAttributes()).isNullOrEmpty(); @@ -77,7 +78,7 @@ public class JpaToscaCapabilityAssignmentTest { ca.setAttributes(null); ca.setOccurrences(null); ca.clean(); - ca.validate(new PfValidationResult()); + ca.validate(""); assertEquals(null, ca.getProperties()); assertEquals(null, ca.getAttributes()); @@ -94,7 +95,7 @@ public class JpaToscaCapabilityAssignmentTest { ca.setOccurrences(occurrences); ca.clean(); - ca.validate(new PfValidationResult()); + ca.validate(""); assertEquals("Untrimmed Value", ca.getProperties().get("Key0")); assertEquals("Untrimmed Value", ca.getAttributes().get("Key0")); @@ -102,10 +103,10 @@ public class JpaToscaCapabilityAssignmentTest { ca.getAttributes().put("Key1", null); ca.getOccurrences().add(null); ca.getOccurrences().add(-12345); - PfValidationResult result = ca.validate(new PfValidationResult()); - assertThat(result.toString()).contains("capability assignment property Key1 value may not be null"); - assertThat(result.toString()).contains("capability assignment attribute Key1 value may not be null"); - assertThat(result.toString()).contains("capability assignment occurrence value may not be negative"); + assertThat(ca.validate("").getResult()) + .contains("properties").contains("Key1").contains(Validated.IS_NULL) + .contains("attributes").contains("Key1").contains(Validated.IS_NULL) + .contains("occurrence").contains("value").contains("is below the minimum value: 0"); } @Test diff --git a/models-tosca/src/test/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaDataTypeTest.java b/models-tosca/src/test/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaDataTypeTest.java index 7168f488c..44bc5346b 100644 --- a/models-tosca/src/test/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaDataTypeTest.java +++ b/models-tosca/src/test/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaDataTypeTest.java @@ -36,7 +36,6 @@ import org.junit.Test; import org.onap.policy.models.base.PfConceptKey; import org.onap.policy.models.base.PfKey; import org.onap.policy.models.base.PfReferenceKey; -import org.onap.policy.models.base.PfValidationResult; import org.onap.policy.models.tosca.authorative.concepts.ToscaConstraint; import org.onap.policy.models.tosca.authorative.concepts.ToscaDataType; @@ -109,22 +108,22 @@ public class JpaToscaDataTypeTest { tdt.clean(); assertEquals(tdtClone0, tdt); - assertFalse(new JpaToscaDataType().validate(new PfValidationResult()).isValid()); - assertTrue(tdt.validate(new PfValidationResult()).isValid()); + assertFalse(new JpaToscaDataType().validate("").isValid()); + assertTrue(tdt.validate("").isValid()); tdt.getConstraints().add(null); - assertFalse(tdt.validate(new PfValidationResult()).isValid()); + assertFalse(tdt.validate("").isValid()); tdt.getConstraints().remove(null); - assertTrue(tdt.validate(new PfValidationResult()).isValid()); + assertTrue(tdt.validate("").isValid()); tdt.getProperties().put(null, null); - assertFalse(tdt.validate(new PfValidationResult()).isValid()); + assertFalse(tdt.validate("").isValid()); tdt.getProperties().remove(null); - assertTrue(tdt.validate(new PfValidationResult()).isValid()); + assertTrue(tdt.validate("").isValid()); assertThatThrownBy(() -> { tdt.validate(null); - }).hasMessageMatching("result is marked .*on.*ull but is null"); + }).hasMessageMatching("fieldName is marked .*on.*ull but is null"); ToscaDataType dat = new ToscaDataType(); dat.setName("name"); @@ -153,21 +152,21 @@ public class JpaToscaDataTypeTest { JpaToscaProperty prop0 = new JpaToscaProperty(new PfReferenceKey(dt0.getKey(), "prop0")); prop0.setType(new PfConceptKey("string", PfKey.NULL_KEY_VERSION)); - assertTrue(prop0.validate(new PfValidationResult()).isValid()); + assertTrue(prop0.validate("").isValid()); dt0.getProperties().put(prop0.getKey().getLocalName(), prop0); assertTrue(dt0.getReferencedDataTypes().isEmpty()); JpaToscaProperty prop1 = new JpaToscaProperty(new PfReferenceKey(dt0.getKey(), "prop1")); prop1.setType(new PfConceptKey("the.property.Type0", "0.0.1")); - assertTrue(prop1.validate(new PfValidationResult()).isValid()); + assertTrue(prop1.validate("").isValid()); dt0.getProperties().put(prop1.getKey().getLocalName(), prop1); assertEquals(1, dt0.getReferencedDataTypes().size()); JpaToscaProperty prop2 = new JpaToscaProperty(new PfReferenceKey(dt0.getKey(), "prop2")); prop2.setType(new PfConceptKey("the.property.Type0", "0.0.1")); - assertTrue(prop2.validate(new PfValidationResult()).isValid()); + assertTrue(prop2.validate("").isValid()); dt0.getProperties().put(prop2.getKey().getLocalName(), prop2); assertEquals(1, dt0.getReferencedDataTypes().size()); @@ -176,7 +175,7 @@ public class JpaToscaDataTypeTest { prop3.setType(new PfConceptKey("the.property.Type1", "0.0.1")); prop3.setEntrySchema(new JpaToscaSchemaDefinition()); prop3.getEntrySchema().setType(new PfConceptKey("the.property.Type3", "0.0.1")); - assertTrue(prop3.validate(new PfValidationResult()).isValid()); + assertTrue(prop3.validate("").isValid()); dt0.getProperties().put(prop3.getKey().getLocalName(), prop3); assertEquals(3, dt0.getReferencedDataTypes().size()); @@ -185,7 +184,7 @@ public class JpaToscaDataTypeTest { prop4.setType(new PfConceptKey("the.property.Type1", "0.0.1")); prop4.setEntrySchema(new JpaToscaSchemaDefinition()); prop4.getEntrySchema().setType(new PfConceptKey("the.property.Type2", "0.0.1")); - assertTrue(prop4.validate(new PfValidationResult()).isValid()); + assertTrue(prop4.validate("").isValid()); dt0.getProperties().put(prop4.getKey().getLocalName(), prop4); assertEquals(3, dt0.getReferencedDataTypes().size()); diff --git a/models-tosca/src/test/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaDataTypesTest.java b/models-tosca/src/test/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaDataTypesTest.java index 910db3654..83d040398 100644 --- a/models-tosca/src/test/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaDataTypesTest.java +++ b/models-tosca/src/test/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaDataTypesTest.java @@ -1,7 +1,7 @@ /*- * ============LICENSE_START======================================================= * Copyright (C) 2019-2020 Nordix Foundation. - * Modifications Copyright (C) 2019 AT&T Intellectual Property. All rights reserved. + * Modifications Copyright (C) 2019-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. @@ -33,8 +33,9 @@ import java.util.List; import java.util.Map; import java.util.TreeMap; import org.junit.Test; +import org.onap.policy.common.parameters.BeanValidationResult; import org.onap.policy.models.base.PfConceptKey; -import org.onap.policy.models.base.PfValidationResult; +import org.onap.policy.models.base.Validated; import org.onap.policy.models.tosca.authorative.concepts.ToscaDataType; public class JpaToscaDataTypesTest { @@ -71,23 +72,24 @@ public class JpaToscaDataTypesTest { dtMapList.get(0).put("dt0", dt0); assertNotNull(new JpaToscaDataTypes(dtMapList)); - assertTrue(new JpaToscaDataTypes(dtMapList).validate(new PfValidationResult()).isValid()); + assertTrue(new JpaToscaDataTypes(dtMapList).validate("").isValid()); assertThatThrownBy(() -> new JpaToscaDataTypes(dtMapList).validate(null)) - .hasMessageMatching("resultIn is marked .*on.*ull but is null"); + .hasMessageMatching("fieldName is marked .*on.*ull but is null"); dt0.setDerivedFrom(null); - assertTrue(new JpaToscaDataTypes(dtMapList).validate(new PfValidationResult()).isValid()); + assertTrue(new JpaToscaDataTypes(dtMapList).validate("").isValid()); dt0.setDerivedFrom("tosca.datatypes.Root"); - assertTrue(new JpaToscaDataTypes(dtMapList).validate(new PfValidationResult()).isValid()); + assertTrue(new JpaToscaDataTypes(dtMapList).validate("").isValid()); dt0.setDerivedFrom("some.other.Thing"); - PfValidationResult result = new JpaToscaDataTypes(dtMapList).validate(new PfValidationResult()); + BeanValidationResult result = new JpaToscaDataTypes(dtMapList).validate(""); assertFalse(result.isValid()); - assertThat(result.toString()).contains("parent some.other.Thing:0.0.0 of entity not found"); + assertThat(result.getResult()).contains("parent").contains("some.other.Thing:0.0.0") + .contains(Validated.NOT_FOUND); dt0.setDerivedFrom(null); - assertTrue(new JpaToscaDataTypes(dtMapList).validate(new PfValidationResult()).isValid()); + assertTrue(new JpaToscaDataTypes(dtMapList).validate("").isValid()); ToscaDataType dt1 = new ToscaDataType(); dt1.setName("dt1"); @@ -95,17 +97,17 @@ public class JpaToscaDataTypesTest { dt1.setDescription("dt1 description"); dtMapList.get(0).put("dt1", dt1); - assertTrue(new JpaToscaDataTypes(dtMapList).validate(new PfValidationResult()).isValid()); + assertTrue(new JpaToscaDataTypes(dtMapList).validate("").isValid()); dt1.setDerivedFrom("dt0"); - assertTrue(new JpaToscaDataTypes(dtMapList).validate(new PfValidationResult()).isValid()); + assertTrue(new JpaToscaDataTypes(dtMapList).validate("").isValid()); dt1.setDerivedFrom("dt2"); - result = new JpaToscaDataTypes(dtMapList).validate(new PfValidationResult()); + result = new JpaToscaDataTypes(dtMapList).validate(""); assertFalse(result.isValid()); - assertThat(result.toString()).contains("parent dt2:0.0.0 of entity not found"); + assertThat(result.getResult()).contains("parent").contains("dt2:0.0.0").contains(Validated.NOT_FOUND); dt1.setDerivedFrom("dt0"); - assertTrue(new JpaToscaDataTypes(dtMapList).validate(new PfValidationResult()).isValid()); + assertTrue(new JpaToscaDataTypes(dtMapList).validate("").isValid()); } } diff --git a/models-tosca/src/test/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaEventFilterTest.java b/models-tosca/src/test/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaEventFilterTest.java index f07a18223..ecffec877 100644 --- a/models-tosca/src/test/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaEventFilterTest.java +++ b/models-tosca/src/test/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaEventFilterTest.java @@ -31,7 +31,6 @@ import static org.junit.Assert.assertTrue; import org.junit.Test; import org.onap.policy.models.base.PfConceptKey; import org.onap.policy.models.base.PfReferenceKey; -import org.onap.policy.models.base.PfValidationResult; /** * DAO test for ToscaEventFilter. @@ -107,30 +106,30 @@ public class JpaToscaEventFilterTest { tef.clean(); assertEquals(tdtClone0, tef); - assertFalse(new JpaToscaEventFilter().validate(new PfValidationResult()).isValid()); - assertTrue(tef.validate(new PfValidationResult()).isValid()); + assertFalse(new JpaToscaEventFilter().validate("").isValid()); + assertTrue(tef.validate("").isValid()); tef.setRequirement(null); - assertTrue(tef.validate(new PfValidationResult()).isValid()); + assertTrue(tef.validate("").isValid()); tef.setRequirement(""); - assertFalse(tef.validate(new PfValidationResult()).isValid()); + assertFalse(tef.validate("").isValid()); tef.setRequirement(A_REQUREMENT); - assertTrue(tef.validate(new PfValidationResult()).isValid()); + assertTrue(tef.validate("").isValid()); tef.setCapability(null); - assertTrue(tef.validate(new PfValidationResult()).isValid()); + assertTrue(tef.validate("").isValid()); tef.setCapability(""); - assertFalse(tef.validate(new PfValidationResult()).isValid()); + assertFalse(tef.validate("").isValid()); tef.setCapability(A_CAPABILITY); - assertTrue(tef.validate(new PfValidationResult()).isValid()); + assertTrue(tef.validate("").isValid()); tef.setNode(null); - assertFalse(tef.validate(new PfValidationResult()).isValid()); + assertFalse(tef.validate("").isValid()); tef.setNode(PfConceptKey.getNullKey()); - assertFalse(tef.validate(new PfValidationResult()).isValid()); + assertFalse(tef.validate("").isValid()); tef.setNode(nodeKey); - assertTrue(tef.validate(new PfValidationResult()).isValid()); + assertTrue(tef.validate("").isValid()); - assertThatThrownBy(() -> tef.validate(null)).hasMessageMatching("resultIn is marked .*on.*ull but is null"); + assertThatThrownBy(() -> tef.validate(null)).hasMessageMatching("fieldName is marked .*on.*ull but is null"); } } diff --git a/models-tosca/src/test/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaModelTest.java b/models-tosca/src/test/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaModelTest.java index 61118c4b6..f0f42e647 100644 --- a/models-tosca/src/test/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaModelTest.java +++ b/models-tosca/src/test/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaModelTest.java @@ -33,7 +33,6 @@ import java.util.TreeMap; import org.junit.Test; import org.onap.policy.models.base.PfConceptKey; import org.onap.policy.models.base.PfModelService; -import org.onap.policy.models.base.PfValidationResult; /** * DAO test for ToscaDatatype. @@ -101,13 +100,13 @@ public class JpaToscaModelTest { tm.clean(); assertEquals(tttClone0, tm); - assertFalse(new JpaToscaModel().validate(new PfValidationResult()).isValid()); - assertTrue(tm.validate(new PfValidationResult()).isValid()); + assertFalse(new JpaToscaModel().validate("").isValid()); + assertTrue(tm.validate("").isValid()); tm.register(); assertTrue(PfModelService.existsModel(tm.getServiceTemplates().getId())); PfModelService.deregisterModel(tm.getServiceTemplates().getId()); - assertThatThrownBy(() -> tm.validate(null)).hasMessageMatching("resultIn is marked .*on.*ull but is null"); + assertThatThrownBy(() -> tm.validate(null)).hasMessageMatching("fieldName is marked .*on.*ull but is null"); } } diff --git a/models-tosca/src/test/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaPoliciesTest.java b/models-tosca/src/test/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaPoliciesTest.java index 47e34335b..15bde0b47 100644 --- a/models-tosca/src/test/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaPoliciesTest.java +++ b/models-tosca/src/test/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaPoliciesTest.java @@ -1,7 +1,7 @@ /*- * ============LICENSE_START======================================================= * Copyright (C) 2019-2020 Nordix Foundation. - * Modifications Copyright (C) 2019 AT&T Intellectual Property. All rights reserved. + * Modifications Copyright (C) 2019-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. @@ -33,8 +33,9 @@ import java.util.List; import java.util.Map; import java.util.TreeMap; import org.junit.Test; +import org.onap.policy.common.parameters.BeanValidationResult; import org.onap.policy.models.base.PfConceptKey; -import org.onap.policy.models.base.PfValidationResult; +import org.onap.policy.models.base.Validated; import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicy; public class JpaToscaPoliciesTest { @@ -73,23 +74,24 @@ public class JpaToscaPoliciesTest { polMapList.get(0).put("pol0", pol0); assertNotNull(new JpaToscaPolicies(polMapList)); - assertTrue(new JpaToscaPolicies(polMapList).validate(new PfValidationResult()).isValid()); + assertTrue(new JpaToscaPolicies(polMapList).validate("").isValid()); assertThatThrownBy(() -> new JpaToscaPolicies(polMapList).validate(null)) - .hasMessageMatching("resultIn is marked .*on.*ull but is null"); + .hasMessageMatching("fieldName is marked .*on.*ull but is null"); pol0.setDerivedFrom(null); - assertTrue(new JpaToscaPolicies(polMapList).validate(new PfValidationResult()).isValid()); + assertTrue(new JpaToscaPolicies(polMapList).validate("").isValid()); pol0.setDerivedFrom("tosca.Policies.Root"); - assertTrue(new JpaToscaPolicies(polMapList).validate(new PfValidationResult()).isValid()); + assertTrue(new JpaToscaPolicies(polMapList).validate("").isValid()); pol0.setDerivedFrom("some.other.Thing"); - PfValidationResult result = new JpaToscaPolicies(polMapList).validate(new PfValidationResult()); + BeanValidationResult result = new JpaToscaPolicies(polMapList).validate(""); assertFalse(result.isValid()); - assertThat(result.toString()).contains("parent some.other.Thing:0.0.0 of entity not found"); + assertThat(result.getResult()).contains("parent").contains("some.other.Thing:0.0.0") + .contains(Validated.NOT_FOUND); pol0.setDerivedFrom(null); - assertTrue(new JpaToscaPolicies(polMapList).validate(new PfValidationResult()).isValid()); + assertTrue(new JpaToscaPolicies(polMapList).validate("").isValid()); ToscaPolicy pol1 = new ToscaPolicy(); pol1.setName("pol1"); @@ -99,17 +101,17 @@ public class JpaToscaPoliciesTest { pol1.setTypeVersion("0.0.1"); polMapList.get(0).put("pol1", pol1); - assertTrue(new JpaToscaPolicies(polMapList).validate(new PfValidationResult()).isValid()); + assertTrue(new JpaToscaPolicies(polMapList).validate("").isValid()); pol1.setDerivedFrom("pol0"); - assertTrue(new JpaToscaPolicies(polMapList).validate(new PfValidationResult()).isValid()); + assertTrue(new JpaToscaPolicies(polMapList).validate("").isValid()); pol1.setDerivedFrom("pol2"); - result = new JpaToscaPolicies(polMapList).validate(new PfValidationResult()); + result = new JpaToscaPolicies(polMapList).validate(""); assertFalse(result.isValid()); - assertThat(result.toString()).contains("parent pol2:0.0.0 of entity not found"); + assertThat(result.getResult()).contains("parent").contains("pol2:0.0.0").contains(Validated.NOT_FOUND); pol1.setDerivedFrom("pol0"); - assertTrue(new JpaToscaPolicies(polMapList).validate(new PfValidationResult()).isValid()); + assertTrue(new JpaToscaPolicies(polMapList).validate("").isValid()); } } diff --git a/models-tosca/src/test/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaPolicyTest.java b/models-tosca/src/test/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaPolicyTest.java index 7f356224f..48bcb0bee 100644 --- a/models-tosca/src/test/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaPolicyTest.java +++ b/models-tosca/src/test/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaPolicyTest.java @@ -37,7 +37,6 @@ import org.junit.Test; import org.onap.policy.models.base.PfConceptKey; import org.onap.policy.models.base.PfKey; import org.onap.policy.models.base.PfUtils; -import org.onap.policy.models.base.PfValidationResult; import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicy; /** @@ -130,41 +129,41 @@ public class JpaToscaPolicyTest { tp.clean(); assertEquals(tdtClone0, tp); - assertFalse(new JpaToscaPolicy().validate(new PfValidationResult()).isValid()); - assertTrue(tp.validate(new PfValidationResult()).isValid()); + assertFalse(new JpaToscaPolicy().validate("").isValid()); + assertTrue(tp.validate("").isValid()); tp.getProperties().put(null, null); - assertFalse(tp.validate(new PfValidationResult()).isValid()); + assertFalse(tp.validate("").isValid()); tp.getProperties().remove(null); - assertTrue(tp.validate(new PfValidationResult()).isValid()); + assertTrue(tp.validate("").isValid()); tp.getProperties().put("Key", null); - assertFalse(tp.validate(new PfValidationResult()).isValid()); + assertFalse(tp.validate("").isValid()); tp.getProperties().remove("Key"); - assertTrue(tp.validate(new PfValidationResult()).isValid()); + assertTrue(tp.validate("").isValid()); tp.getProperties().put(null, "Value"); - assertFalse(tp.validate(new PfValidationResult()).isValid()); + assertFalse(tp.validate("").isValid()); tp.getProperties().remove(null); - assertTrue(tp.validate(new PfValidationResult()).isValid()); + assertTrue(tp.validate("").isValid()); tp.getTargets().add(null); - assertFalse(tp.validate(new PfValidationResult()).isValid()); + assertFalse(tp.validate("").isValid()); tp.getTargets().remove(null); - assertTrue(tp.validate(new PfValidationResult()).isValid()); + assertTrue(tp.validate("").isValid()); PfConceptKey tpTypeKey = tp.getKey(); assertNotNull(tpTypeKey); tp.setType(null); - assertFalse(tp.validate(new PfValidationResult()).isValid()); + assertFalse(tp.validate("").isValid()); tp.setType(PfConceptKey.getNullKey()); - assertFalse(tp.validate(new PfValidationResult()).isValid()); + assertFalse(tp.validate("").isValid()); tp.setType(tpTypeKey); - assertTrue(tp.validate(new PfValidationResult()).isValid()); + assertTrue(tp.validate("").isValid()); assertThatThrownBy(() -> { tp.validate(null); - }).hasMessageMatching("resultIn is marked .*on.*ull but is null"); + }).hasMessageMatching("fieldName is marked .*on.*ull but is null"); assertNotNull(tp.toAuthorative()); tp.getType().setVersion(PfKey.NULL_KEY_VERSION); diff --git a/models-tosca/src/test/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaPolicyTypeTest.java b/models-tosca/src/test/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaPolicyTypeTest.java index 43cacda19..b2f59c459 100644 --- a/models-tosca/src/test/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaPolicyTypeTest.java +++ b/models-tosca/src/test/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaPolicyTypeTest.java @@ -37,7 +37,6 @@ import org.junit.Test; import org.onap.policy.models.base.PfConceptKey; import org.onap.policy.models.base.PfKey; import org.onap.policy.models.base.PfReferenceKey; -import org.onap.policy.models.base.PfValidationResult; import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicy; import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicyType; @@ -132,46 +131,46 @@ public class JpaToscaPolicyTypeTest { tpt.clean(); assertEquals(tdtClone0, tpt); - assertFalse(new JpaToscaPolicyType().validate(new PfValidationResult()).isValid()); - assertTrue(tpt.validate(new PfValidationResult()).isValid()); + assertFalse(new JpaToscaPolicyType().validate("").isValid()); + assertTrue(tpt.validate("").isValid()); tpt.getProperties().put(null, null); - assertFalse(tpt.validate(new PfValidationResult()).isValid()); + assertFalse(tpt.validate("").isValid()); tpt.getProperties().remove(null); - assertTrue(tpt.validate(new PfValidationResult()).isValid()); + assertTrue(tpt.validate("").isValid()); tpt.getTargets().add(null); - assertFalse(tpt.validate(new PfValidationResult()).isValid()); + assertFalse(tpt.validate("").isValid()); tpt.getTargets().remove(null); - assertTrue(tpt.validate(new PfValidationResult()).isValid()); + assertTrue(tpt.validate("").isValid()); tpt.getTriggers().add(null); - assertFalse(tpt.validate(new PfValidationResult()).isValid()); + assertFalse(tpt.validate("").isValid()); tpt.getTriggers().remove(null); - assertTrue(tpt.validate(new PfValidationResult()).isValid()); + assertTrue(tpt.validate("").isValid()); tpt.getMetadata().put(null, null); - assertFalse(tpt.validate(new PfValidationResult()).isValid()); + assertFalse(tpt.validate("").isValid()); tpt.getMetadata().remove(null); - assertTrue(tpt.validate(new PfValidationResult()).isValid()); + assertTrue(tpt.validate("").isValid()); tpt.getMetadata().put("nullKey", null); - assertFalse(tpt.validate(new PfValidationResult()).isValid()); + assertFalse(tpt.validate("").isValid()); tpt.getMetadata().remove("nullKey"); - assertTrue(tpt.validate(new PfValidationResult()).isValid()); + assertTrue(tpt.validate("").isValid()); tpt.setDescription(""); - assertFalse(tpt.validate(new PfValidationResult()).isValid()); + assertFalse(tpt.validate("").isValid()); tpt.setDescription(A_DESCRIPTION); - assertTrue(tpt.validate(new PfValidationResult()).isValid()); + assertTrue(tpt.validate("").isValid()); tpt.setDerivedFrom(PfConceptKey.getNullKey()); - assertFalse(tpt.validate(new PfValidationResult()).isValid()); + assertFalse(tpt.validate("").isValid()); tpt.setDerivedFrom(derivedFromKey); - assertTrue(tpt.validate(new PfValidationResult()).isValid()); + assertTrue(tpt.validate("").isValid()); - assertThatThrownBy(() -> tpt.validate(null)).hasMessageMatching("resultIn is marked .*on.*ull but is null"); + assertThatThrownBy(() -> tpt.validate(null)).hasMessageMatching("fieldName is marked .*on.*ull but is null"); assertThatThrownBy(() -> new JpaToscaEntityType<ToscaPolicy>((PfConceptKey) null)) .hasMessageMatching("key is marked .*on.*ull but is null"); @@ -200,21 +199,21 @@ public class JpaToscaPolicyTypeTest { JpaToscaProperty prop0 = new JpaToscaProperty(new PfReferenceKey(pt0.getKey(), "prop0")); prop0.setType(new PfConceptKey("string", PfKey.NULL_KEY_VERSION)); - assertTrue(prop0.validate(new PfValidationResult()).isValid()); + assertTrue(prop0.validate("").isValid()); pt0.getProperties().put(prop0.getKey().getLocalName(), prop0); assertTrue(pt0.getReferencedDataTypes().isEmpty()); JpaToscaProperty prop1 = new JpaToscaProperty(new PfReferenceKey(pt0.getKey(), "prop1")); prop1.setType(new PfConceptKey("the.property.Type0", "0.0.1")); - assertTrue(prop1.validate(new PfValidationResult()).isValid()); + assertTrue(prop1.validate("").isValid()); pt0.getProperties().put(prop1.getKey().getLocalName(), prop1); assertEquals(1, pt0.getReferencedDataTypes().size()); JpaToscaProperty prop2 = new JpaToscaProperty(new PfReferenceKey(pt0.getKey(), "prop2")); prop2.setType(new PfConceptKey("the.property.Type0", "0.0.1")); - assertTrue(prop2.validate(new PfValidationResult()).isValid()); + assertTrue(prop2.validate("").isValid()); pt0.getProperties().put(prop2.getKey().getLocalName(), prop2); assertEquals(1, pt0.getReferencedDataTypes().size()); @@ -223,7 +222,7 @@ public class JpaToscaPolicyTypeTest { prop3.setType(new PfConceptKey("the.property.Type1", "0.0.1")); prop3.setEntrySchema(new JpaToscaSchemaDefinition()); prop3.getEntrySchema().setType(new PfConceptKey("the.property.Type3", "0.0.1")); - assertTrue(prop3.validate(new PfValidationResult()).isValid()); + assertTrue(prop3.validate("").isValid()); pt0.getProperties().put(prop3.getKey().getLocalName(), prop3); assertEquals(3, pt0.getReferencedDataTypes().size()); @@ -232,7 +231,7 @@ public class JpaToscaPolicyTypeTest { prop4.setType(new PfConceptKey("the.property.Type1", "0.0.1")); prop4.setEntrySchema(new JpaToscaSchemaDefinition()); prop4.getEntrySchema().setType(new PfConceptKey("the.property.Type2", "0.0.1")); - assertTrue(prop4.validate(new PfValidationResult()).isValid()); + assertTrue(prop4.validate("").isValid()); pt0.getProperties().put(prop4.getKey().getLocalName(), prop4); assertEquals(3, pt0.getReferencedDataTypes().size()); diff --git a/models-tosca/src/test/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaPolicyTypesTest.java b/models-tosca/src/test/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaPolicyTypesTest.java index bbd407a14..76f91c56a 100644 --- a/models-tosca/src/test/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaPolicyTypesTest.java +++ b/models-tosca/src/test/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaPolicyTypesTest.java @@ -1,7 +1,7 @@ /*- * ============LICENSE_START======================================================= * Copyright (C) 2019-2020 Nordix Foundation. - * Modifications Copyright (C) 2019 AT&T Intellectual Property. All rights reserved. + * Modifications Copyright (C) 2019-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. @@ -33,8 +33,9 @@ import java.util.List; import java.util.Map; import java.util.TreeMap; import org.junit.Test; +import org.onap.policy.common.parameters.BeanValidationResult; import org.onap.policy.models.base.PfConceptKey; -import org.onap.policy.models.base.PfValidationResult; +import org.onap.policy.models.base.Validated; import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicyType; public class JpaToscaPolicyTypesTest { @@ -71,23 +72,24 @@ public class JpaToscaPolicyTypesTest { ptMapList.get(0).put("pt0", pt0); assertNotNull(new JpaToscaPolicyTypes(ptMapList)); - assertTrue(new JpaToscaPolicyTypes(ptMapList).validate(new PfValidationResult()).isValid()); + assertTrue(new JpaToscaPolicyTypes(ptMapList).validate("").isValid()); assertThatThrownBy(() -> new JpaToscaPolicyTypes(ptMapList).validate(null)) - .hasMessageMatching("resultIn is marked .*on.*ull but is null"); + .hasMessageMatching("fieldName is marked .*on.*ull but is null"); pt0.setDerivedFrom(null); - assertTrue(new JpaToscaPolicyTypes(ptMapList).validate(new PfValidationResult()).isValid()); + assertTrue(new JpaToscaPolicyTypes(ptMapList).validate("").isValid()); pt0.setDerivedFrom("tosca.PolicyTypes.Root"); - assertTrue(new JpaToscaPolicyTypes(ptMapList).validate(new PfValidationResult()).isValid()); + assertTrue(new JpaToscaPolicyTypes(ptMapList).validate("").isValid()); pt0.setDerivedFrom("some.other.Thing"); - PfValidationResult result = new JpaToscaPolicyTypes(ptMapList).validate(new PfValidationResult()); + BeanValidationResult result = new JpaToscaPolicyTypes(ptMapList).validate(""); assertFalse(result.isValid()); - assertThat(result.toString()).contains("parent some.other.Thing:0.0.0 of entity not found"); + assertThat(result.getResult()).contains("parent").contains("some.other.Thing:0.0.0") + .contains(Validated.NOT_FOUND); pt0.setDerivedFrom(null); - assertTrue(new JpaToscaPolicyTypes(ptMapList).validate(new PfValidationResult()).isValid()); + assertTrue(new JpaToscaPolicyTypes(ptMapList).validate("").isValid()); ToscaPolicyType pt1 = new ToscaPolicyType(); pt1.setName("pt1"); @@ -95,17 +97,17 @@ public class JpaToscaPolicyTypesTest { pt1.setDescription("pt1 description"); ptMapList.get(0).put("pt1", pt1); - assertTrue(new JpaToscaPolicyTypes(ptMapList).validate(new PfValidationResult()).isValid()); + assertTrue(new JpaToscaPolicyTypes(ptMapList).validate("").isValid()); pt1.setDerivedFrom("pt0"); - assertTrue(new JpaToscaPolicyTypes(ptMapList).validate(new PfValidationResult()).isValid()); + assertTrue(new JpaToscaPolicyTypes(ptMapList).validate("").isValid()); pt1.setDerivedFrom("pt2"); - result = new JpaToscaPolicyTypes(ptMapList).validate(new PfValidationResult()); + result = new JpaToscaPolicyTypes(ptMapList).validate(""); assertFalse(result.isValid()); - assertThat(result.toString()).contains("parent pt2:0.0.0 of entity not found"); + assertThat(result.getResult()).contains("parent").contains("pt2:0.0.0").contains(Validated.NOT_FOUND); pt1.setDerivedFrom("pt0"); - assertTrue(new JpaToscaPolicyTypes(ptMapList).validate(new PfValidationResult()).isValid()); + assertTrue(new JpaToscaPolicyTypes(ptMapList).validate("").isValid()); } } diff --git a/models-tosca/src/test/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaPropertyTest.java b/models-tosca/src/test/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaPropertyTest.java index 0fa0d3f14..b82888108 100644 --- a/models-tosca/src/test/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaPropertyTest.java +++ b/models-tosca/src/test/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaPropertyTest.java @@ -36,7 +36,6 @@ import java.util.TreeMap; import org.junit.Test; import org.onap.policy.models.base.PfConceptKey; import org.onap.policy.models.base.PfReferenceKey; -import org.onap.policy.models.base.PfValidationResult; import org.onap.policy.models.tosca.authorative.concepts.ToscaProperty; /** @@ -158,42 +157,42 @@ public class JpaToscaPropertyTest { tp.clean(); assertEquals(tdtClone0, tp); - assertFalse(new JpaToscaProperty().validate(new PfValidationResult()).isValid()); - assertTrue(tp.validate(new PfValidationResult()).isValid()); + assertFalse(new JpaToscaProperty().validate("").isValid()); + assertTrue(tp.validate("").isValid()); tp.setDescription(null); - assertTrue(tp.validate(new PfValidationResult()).isValid()); + assertTrue(tp.validate("").isValid()); tp.setDescription(""); - assertFalse(tp.validate(new PfValidationResult()).isValid()); + assertFalse(tp.validate("").isValid()); tp.setDescription(A_DESCRIPTION); - assertTrue(tp.validate(new PfValidationResult()).isValid()); + assertTrue(tp.validate("").isValid()); tp.setType(null); - assertFalse(tp.validate(new PfValidationResult()).isValid()); + assertFalse(tp.validate("").isValid()); tp.setType(typeKey); - assertTrue(tp.validate(new PfValidationResult()).isValid()); + assertTrue(tp.validate("").isValid()); tp.setType(PfConceptKey.getNullKey()); - assertFalse(tp.validate(new PfValidationResult()).isValid()); + assertFalse(tp.validate("").isValid()); tp.setType(typeKey); - assertTrue(tp.validate(new PfValidationResult()).isValid()); + assertTrue(tp.validate("").isValid()); tp.setDefaultValue(null); - assertTrue(tp.validate(new PfValidationResult()).isValid()); + assertTrue(tp.validate("").isValid()); tp.setDefaultValue(""); - assertFalse(tp.validate(new PfValidationResult()).isValid()); + assertFalse(tp.validate("").isValid()); tp.setDefaultValue(DEFAULT_KEY); - assertTrue(tp.validate(new PfValidationResult()).isValid()); + assertTrue(tp.validate("").isValid()); tp.getConstraints().add(null); - assertFalse(tp.validate(new PfValidationResult()).isValid()); + assertFalse(tp.validate("").isValid()); tp.getConstraints().remove(null); - assertTrue(tp.validate(new PfValidationResult()).isValid()); + assertTrue(tp.validate("").isValid()); tp.setMetadata(null); - assertTrue(tp.validate(new PfValidationResult()).isValid()); + assertTrue(tp.validate("").isValid()); - assertThatThrownBy(() -> tp.validate(null)).hasMessageMatching("resultIn is marked .*on.*ull but is null"); + assertThatThrownBy(() -> tp.validate(null)).hasMessageMatching("fieldName is marked .*on.*ull but is null"); } @Test diff --git a/models-tosca/src/test/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaSchemaDefinitionTest.java b/models-tosca/src/test/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaSchemaDefinitionTest.java index e7163f756..7248b45ec 100644 --- a/models-tosca/src/test/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaSchemaDefinitionTest.java +++ b/models-tosca/src/test/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaSchemaDefinitionTest.java @@ -32,7 +32,6 @@ import java.util.ArrayList; import java.util.List; import org.junit.Test; import org.onap.policy.models.base.PfConceptKey; -import org.onap.policy.models.base.PfValidationResult; /** * DAO test for ToscaEntrySchema. @@ -96,27 +95,27 @@ public class JpaToscaSchemaDefinitionTest { tes.clean(); assertEquals(tdtClone0, tes); - assertTrue(new JpaToscaSchemaDefinition(typeKey).validate(new PfValidationResult()).isValid()); - assertTrue(tes.validate(new PfValidationResult()).isValid()); + assertTrue(new JpaToscaSchemaDefinition(typeKey).validate("").isValid()); + assertTrue(tes.validate("").isValid()); tes.setType(PfConceptKey.getNullKey()); - assertFalse(tes.validate(new PfValidationResult()).isValid()); + assertFalse(tes.validate("").isValid()); tes.setType(null); - assertFalse(tes.validate(new PfValidationResult()).isValid()); + assertFalse(tes.validate("").isValid()); tes.setType(typeKey); - assertTrue(tes.validate(new PfValidationResult()).isValid()); + assertTrue(tes.validate("").isValid()); tes.setDescription(""); - assertFalse(tes.validate(new PfValidationResult()).isValid()); + assertFalse(tes.validate("").isValid()); tes.setDescription(A_DESCRIPTION); - assertTrue(tes.validate(new PfValidationResult()).isValid()); + assertTrue(tes.validate("").isValid()); tes.getConstraints().add(null); - assertFalse(tes.validate(new PfValidationResult()).isValid()); + assertFalse(tes.validate("").isValid()); tes.getConstraints().remove(null); - assertTrue(tes.validate(new PfValidationResult()).isValid()); + assertTrue(tes.validate("").isValid()); - assertThatThrownBy(() -> tes.validate(null)).hasMessageMatching("resultIn is marked .*on.*ull but is null"); + assertThatThrownBy(() -> tes.validate(null)).hasMessageMatching("fieldName is marked .*on.*ull but is null"); } } diff --git a/models-tosca/src/test/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaServiceTemplateTest.java b/models-tosca/src/test/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaServiceTemplateTest.java index bb0d2dcb5..d6266b49a 100644 --- a/models-tosca/src/test/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaServiceTemplateTest.java +++ b/models-tosca/src/test/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaServiceTemplateTest.java @@ -33,9 +33,10 @@ import java.util.LinkedHashMap; import java.util.Map; import java.util.TreeMap; import org.junit.Test; +import org.onap.policy.common.parameters.BeanValidationResult; import org.onap.policy.models.base.PfConceptKey; import org.onap.policy.models.base.PfReferenceKey; -import org.onap.policy.models.base.PfValidationResult; +import org.onap.policy.models.base.Validated; /** * DAO test for ToscaDatatype. @@ -126,31 +127,31 @@ public class JpaToscaServiceTemplateTest { tst.clean(); assertEquals(tttClone0, tst); - assertTrue(new JpaToscaServiceTemplate().validate(new PfValidationResult()).isValid()); - assertTrue(tst.validate(new PfValidationResult()).isValid()); + assertTrue(new JpaToscaServiceTemplate().validate("").isValid()); + assertTrue(tst.validate("").isValid()); tst.setDescription(null); - assertTrue(tst.validate(new PfValidationResult()).isValid()); + assertTrue(tst.validate("").isValid()); tst.setDescription(""); - assertFalse(tst.validate(new PfValidationResult()).isValid()); + assertFalse(tst.validate("").isValid()); tst.setDescription("A Description"); - assertTrue(tst.validate(new PfValidationResult()).isValid()); + assertTrue(tst.validate("").isValid()); - assertThatThrownBy(() -> tst.validate(null)).hasMessageMatching("resultIn is marked .*on.*ull but is null"); + assertThatThrownBy(() -> tst.validate(null)).hasMessageMatching("fieldName is marked .*on.*ull but is null"); tst.setToscaDefinitionsVersion(null); - PfValidationResult result = tst.validate(new PfValidationResult()); - assertThat(result.toString()).contains("service template tosca definitions version may not be null"); + BeanValidationResult result = tst.validate(""); + assertThat(result.getResult()).contains("toscaDefinitionsVersion").contains(Validated.IS_BLANK); tst.setToscaDefinitionsVersion(JpaToscaServiceTemplate.DEFAULT_TOSCA_DEFINTIONS_VERISON); tst.setDataTypes(null); - result = tst.validate(new PfValidationResult()); - assertTrue(result.isOk()); + result = tst.validate(""); + assertTrue(result.isValid()); JpaToscaPolicyType pt0 = new JpaToscaPolicyType(new PfConceptKey("pt0:0.0.1")); tst.getPolicyTypes().getConceptMap().put(pt0.getKey(), pt0); - result = tst.validate(new PfValidationResult()); - assertTrue(result.isOk()); + result = tst.validate(""); + assertTrue(result.isValid()); JpaToscaDataType dt0 = new JpaToscaDataType(new PfConceptKey("dt0:0.0.1")); JpaToscaProperty prop0 = new JpaToscaProperty(new PfReferenceKey(pt0.getKey(), "prop0")); @@ -158,81 +159,82 @@ public class JpaToscaServiceTemplateTest { pt0.setProperties(new LinkedHashMap<>()); pt0.getProperties().put(prop0.getKey().getLocalName(), prop0); - result = tst.validate(new PfValidationResult()); - assertFalse(result.isOk()); - assertThat(result.toString()).contains("referenced data type dt0:0.0.1 not found"); + result = tst.validate(""); + assertFalse(result.isValid()); + assertThat(result.getResult()).contains("data type").contains("dt0:0.0.1").contains(Validated.NOT_FOUND); tst.setDataTypes(null); - result = tst.validate(new PfValidationResult()); - assertFalse(result.isOk()); - assertThat(result.toString()).contains("referenced data type dt0:0.0.1 not found"); + result = tst.validate(""); + assertFalse(result.isValid()); + assertThat(result.getResult()).contains("data type").contains("dt0:0.0.1").contains(Validated.NOT_FOUND); tst.setDataTypes(new JpaToscaDataTypes()); - result = tst.validate(new PfValidationResult()); - assertFalse(result.isOk()); - assertThat(result.toString()).contains("referenced data type dt0:0.0.1 not found"); + result = tst.validate(""); + assertFalse(result.isValid()); + assertThat(result.getResult()).contains("data type").contains("dt0:0.0.1").contains(Validated.NOT_FOUND); tst.getDataTypes().getConceptMap().put(dt0.getKey(), dt0); - result = tst.validate(new PfValidationResult()); - assertTrue(result.isOk()); + result = tst.validate(""); + assertTrue(result.isValid()); tst.setTopologyTemplate(null); - result = tst.validate(new PfValidationResult()); - assertTrue(result.isOk()); + result = tst.validate(""); + assertTrue(result.isValid()); tst.setTopologyTemplate(new JpaToscaTopologyTemplate()); - result = tst.validate(new PfValidationResult()); - assertTrue(result.isOk()); + result = tst.validate(""); + assertTrue(result.isValid()); tst.getTopologyTemplate().setPolicies(new JpaToscaPolicies()); - result = tst.validate(new PfValidationResult()); - assertTrue(result.isOk()); + result = tst.validate(""); + assertTrue(result.isValid()); tst.setPolicyTypes(null); - result = tst.validate(new PfValidationResult()); - assertTrue(result.isOk()); + result = tst.validate(""); + assertTrue(result.isValid()); JpaToscaPolicy pol0 = new JpaToscaPolicy(new PfConceptKey("pol0:0.0.1")); tst.getTopologyTemplate().getPolicies().getConceptMap().put(pol0.getKey(), pol0); - result = tst.validate(new PfValidationResult()); - assertFalse(result.isOk()); - assertThat(result.toString()).contains("type is null or a null key"); + result = tst.validate(""); + assertFalse(result.isValid()); + assertThat(result.getResult()).contains("type").contains(Validated.IS_A_NULL_KEY); pol0.setType(new PfConceptKey("i.dont.Exist:0.0.1")); - result = tst.validate(new PfValidationResult()); - assertFalse(result.isOk()); - assertThat(result.toString()).contains( + result = tst.validate(""); + assertFalse(result.isValid()); + assertThat(result.getResult()).contains( "no policy types are defined on the service template for the policies in the topology template"); tst.setPolicyTypes(policyTypes); - result = tst.validate(new PfValidationResult()); - assertFalse(result.isOk()); - assertThat(result.toString()).contains("policy type i.dont.Exist:0.0.1 referenced in policy not found"); + result = tst.validate(""); + assertFalse(result.isValid()); + assertThat(result.getResult()).contains("policy type").contains("i.dont.Exist:0.0.1") + .contains(Validated.NOT_FOUND); pol0.setType(dt0.getKey()); - result = tst.validate(new PfValidationResult()); - assertFalse(result.isOk()); - assertThat(result.toString()).contains("policy type dt0:0.0.1 referenced in policy not found"); + result = tst.validate(""); + assertFalse(result.isValid()); + assertThat(result.getResult()).contains("policy type").contains("dt0:0.0.1").contains(Validated.NOT_FOUND); pol0.setType(pt0.getKey()); - result = tst.validate(new PfValidationResult()); - assertTrue(result.isOk()); + result = tst.validate(""); + assertTrue(result.isValid()); tst.setPolicyTypes(null); - result = tst.validate(new PfValidationResult()); - assertFalse(result.isOk()); - assertThat(result.toString()).contains( + result = tst.validate(""); + assertFalse(result.isValid()); + assertThat(result.getResult()).contains( "no policy types are defined on the service template for the policies in the topology template"); tst.setPolicyTypes(policyTypes); pol0.setType(pt0.getKey()); - result = tst.validate(new PfValidationResult()); - assertTrue(result.isOk()); + result = tst.validate(""); + assertTrue(result.isValid()); tst.setPolicyTypes(new JpaToscaPolicyTypes()); - result = tst.validate(new PfValidationResult()); - assertFalse(result.isOk()); - assertThat(result.toString()).contains( + result = tst.validate(""); + assertFalse(result.isValid()); + assertThat(result.getResult()).contains( "no policy types are defined on the service template for the policies in the topology template"); } diff --git a/models-tosca/src/test/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaTimeIntervalTest.java b/models-tosca/src/test/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaTimeIntervalTest.java index ef9039af9..2d52f504b 100644 --- a/models-tosca/src/test/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaTimeIntervalTest.java +++ b/models-tosca/src/test/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaTimeIntervalTest.java @@ -32,7 +32,6 @@ import java.util.Date; import org.junit.Test; import org.onap.policy.models.base.PfConceptKey; import org.onap.policy.models.base.PfReferenceKey; -import org.onap.policy.models.base.PfValidationResult; /** * DAO test for ToscaTimeInterval. @@ -109,23 +108,23 @@ public class JpaToscaTimeIntervalTest { tti.clean(); assertEquals(tdtClone0, tti); - assertFalse(new JpaToscaTimeInterval().validate(new PfValidationResult()).isValid()); - assertTrue(tti.validate(new PfValidationResult()).isValid()); + assertFalse(new JpaToscaTimeInterval().validate("").isValid()); + assertTrue(tti.validate("").isValid()); tti.setStartTime(null); - assertFalse(tti.validate(new PfValidationResult()).isValid()); + assertFalse(tti.validate("").isValid()); tti.setStartTime(new Date(endTime.getTime() + 1)); - assertFalse(tti.validate(new PfValidationResult()).isValid()); + assertFalse(tti.validate("").isValid()); tti.setStartTime(startTime); - assertTrue(tti.validate(new PfValidationResult()).isValid()); + assertTrue(tti.validate("").isValid()); tti.setEndTime(null); - assertFalse(tti.validate(new PfValidationResult()).isValid()); + assertFalse(tti.validate("").isValid()); tti.setEndTime(new Date(startTime.getTime() - 1)); - assertFalse(tti.validate(new PfValidationResult()).isValid()); + assertFalse(tti.validate("").isValid()); tti.setEndTime(endTime); - assertTrue(tti.validate(new PfValidationResult()).isValid()); + assertTrue(tti.validate("").isValid()); - assertThatThrownBy(() -> tti.validate(null)).hasMessageMatching("resultIn is marked .*on.*ull but is null"); + assertThatThrownBy(() -> tti.validate(null)).hasMessageMatching("fieldName is marked .*on.*ull but is null"); } } diff --git a/models-tosca/src/test/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaTopologyTemplateTest.java b/models-tosca/src/test/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaTopologyTemplateTest.java index d42dfb09d..714b6722c 100644 --- a/models-tosca/src/test/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaTopologyTemplateTest.java +++ b/models-tosca/src/test/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaTopologyTemplateTest.java @@ -33,7 +33,6 @@ import java.util.TreeMap; import org.junit.Test; import org.onap.policy.models.base.PfConceptKey; import org.onap.policy.models.base.PfReferenceKey; -import org.onap.policy.models.base.PfValidationResult; import org.onap.policy.models.tosca.authorative.concepts.ToscaTopologyTemplate; /** @@ -108,21 +107,21 @@ public class JpaToscaTopologyTemplateTest { ttt.clean(); assertEquals(tttClone0, ttt); - assertTrue(new JpaToscaTopologyTemplate().validate(new PfValidationResult()).isValid()); - assertTrue(ttt.validate(new PfValidationResult()).isValid()); + assertTrue(new JpaToscaTopologyTemplate().validate("").isValid()); + assertTrue(ttt.validate("").isValid()); ttt.setKey(PfReferenceKey.getNullKey()); - assertFalse(ttt.validate(new PfValidationResult()).isValid()); + assertFalse(ttt.validate("").isValid()); ttt.setKey(tttKey); - assertTrue(ttt.validate(new PfValidationResult()).isValid()); + assertTrue(ttt.validate("").isValid()); ttt.setDescription(null); - assertTrue(ttt.validate(new PfValidationResult()).isValid()); + assertTrue(ttt.validate("").isValid()); ttt.setDescription(""); - assertFalse(ttt.validate(new PfValidationResult()).isValid()); + assertFalse(ttt.validate("").isValid()); ttt.setDescription(A_DESCRIPTION); - assertTrue(ttt.validate(new PfValidationResult()).isValid()); + assertTrue(ttt.validate("").isValid()); - assertThatThrownBy(() -> ttt.validate(null)).hasMessageMatching("resultIn is marked .*on.*ull but is null"); + assertThatThrownBy(() -> ttt.validate(null)).hasMessageMatching("fieldName is marked .*on.*ull but is null"); } } diff --git a/models-tosca/src/test/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaTriggerTest.java b/models-tosca/src/test/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaTriggerTest.java index 3b196c478..2eb6b10e0 100644 --- a/models-tosca/src/test/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaTriggerTest.java +++ b/models-tosca/src/test/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaTriggerTest.java @@ -33,7 +33,6 @@ import java.util.Date; import org.junit.Test; import org.onap.policy.models.base.PfConceptKey; import org.onap.policy.models.base.PfReferenceKey; -import org.onap.policy.models.base.PfValidationResult; /** * DAO test for ToscaTrigger. @@ -153,28 +152,28 @@ public class JpaToscaTriggerTest { tdt.clean(); assertEquals(tdtClone0, tdt); - assertFalse(new JpaToscaTrigger().validate(new PfValidationResult()).isValid()); - assertTrue(tdt.validate(new PfValidationResult()).isValid()); + assertFalse(new JpaToscaTrigger().validate("").isValid()); + assertTrue(tdt.validate("").isValid()); tdt.setDescription(null); - assertTrue(tdt.validate(new PfValidationResult()).isValid()); + assertTrue(tdt.validate("").isValid()); tdt.setDescription(""); - assertFalse(tdt.validate(new PfValidationResult()).isValid()); + assertFalse(tdt.validate("").isValid()); tdt.setDescription(A_DESCRIPTION); - assertTrue(tdt.validate(new PfValidationResult()).isValid()); + assertTrue(tdt.validate("").isValid()); tdt.setEvaluations(-1); - assertFalse(tdt.validate(new PfValidationResult()).isValid()); + assertFalse(tdt.validate("").isValid()); tdt.setEvaluations(100); - assertTrue(tdt.validate(new PfValidationResult()).isValid()); + assertTrue(tdt.validate("").isValid()); tdt.setMethod(null); - assertTrue(tdt.validate(new PfValidationResult()).isValid()); + assertTrue(tdt.validate("").isValid()); tdt.setMethod(""); - assertFalse(tdt.validate(new PfValidationResult()).isValid()); + assertFalse(tdt.validate("").isValid()); tdt.setMethod(A_METHOD); - assertTrue(tdt.validate(new PfValidationResult()).isValid()); + assertTrue(tdt.validate("").isValid()); - assertThatThrownBy(() -> tdt.validate(null)).hasMessageMatching("resultIn is marked .*on.*ull but is null"); + assertThatThrownBy(() -> tdt.validate(null)).hasMessageMatching("fieldName is marked .*on.*ull but is null"); } } diff --git a/models-tosca/src/test/java/org/onap/policy/models/tosca/simple/provider/SimpleToscaProviderTest.java b/models-tosca/src/test/java/org/onap/policy/models/tosca/simple/provider/SimpleToscaProviderTest.java index 3c363b364..a926ca149 100644 --- a/models-tosca/src/test/java/org/onap/policy/models/tosca/simple/provider/SimpleToscaProviderTest.java +++ b/models-tosca/src/test/java/org/onap/policy/models/tosca/simple/provider/SimpleToscaProviderTest.java @@ -1,7 +1,7 @@ /*- * ============LICENSE_START======================================================= * Copyright (C) 2019-2020 Nordix Foundation. - * Modifications Copyright (C) 2019 AT&T Intellectual Property. All rights reserved. + * Modifications Copyright (C) 2019-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. @@ -38,6 +38,7 @@ import org.onap.policy.common.utils.resources.ResourceUtils; import org.onap.policy.models.base.PfConceptKey; import org.onap.policy.models.base.PfModelException; import org.onap.policy.models.base.PfReferenceKey; +import org.onap.policy.models.base.Validated; import org.onap.policy.models.dao.DaoParameters; import org.onap.policy.models.dao.PfDao; import org.onap.policy.models.dao.PfDaoFactory; @@ -418,7 +419,8 @@ public class SimpleToscaProviderTest { assertThatThrownBy(() -> { new SimpleToscaProvider().createPolicies(pfDao, originalServiceTemplate); - }).hasMessageContaining("policy type IDontExist:99.100.101 referenced in policy not found"); + }).hasMessageContaining("policy type").hasMessageContaining("IDontExist:99.100.101") + .hasMessageContaining(Validated.NOT_FOUND); toscaPolicy.setType("IDontExist"); originalServiceTemplate.fromAuthorative(toscaServiceTemplate); @@ -523,8 +525,8 @@ public class SimpleToscaProviderTest { serviceTemplateFragment.getPolicyTypes().getConceptMap().put(badPt.getKey(), badPt); assertThatThrownBy(() -> new SimpleToscaProvider().appendToServiceTemplate(pfDao, serviceTemplateFragment)) - .hasMessageContaining( - "key on concept entry PfConceptKey(name=NULL, version=0.0.0) may not be the null key"); + .hasMessageContaining("key on concept entry").hasMessageContaining("NULL:0.0.0") + .hasMessageContaining(Validated.IS_A_NULL_KEY); } @Test diff --git a/models-tosca/src/test/java/org/onap/policy/models/tosca/simple/serialization/MonitoringPolicySerializationTest.java b/models-tosca/src/test/java/org/onap/policy/models/tosca/simple/serialization/MonitoringPolicySerializationTest.java index 87a52242f..98ced3b41 100644 --- a/models-tosca/src/test/java/org/onap/policy/models/tosca/simple/serialization/MonitoringPolicySerializationTest.java +++ b/models-tosca/src/test/java/org/onap/policy/models/tosca/simple/serialization/MonitoringPolicySerializationTest.java @@ -36,7 +36,6 @@ import org.onap.policy.common.utils.coder.StandardCoder; import org.onap.policy.common.utils.coder.YamlJsonTranslator; import org.onap.policy.common.utils.resources.ResourceUtils; import org.onap.policy.models.base.PfConceptKey; -import org.onap.policy.models.base.PfValidationResult; import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate; import org.onap.policy.models.tosca.simple.concepts.JpaToscaPolicy; import org.onap.policy.models.tosca.simple.concepts.JpaToscaServiceTemplate; @@ -179,8 +178,8 @@ public class MonitoringPolicySerializationTest { // Sanity check the entire structure assertNotNull(serviceTemplate); - LOGGER.info(serviceTemplate.validate(new PfValidationResult()).toString()); - assertTrue(serviceTemplate.validate(new PfValidationResult()).isValid()); + LOGGER.info(serviceTemplate.validate("").toString()); + assertTrue(serviceTemplate.validate("").isValid()); // Check tosca_definitions_version assertEquals(YAML_VERSION, serviceTemplate.getToscaDefinitionsVersion()); @@ -211,8 +210,8 @@ public class MonitoringPolicySerializationTest { // Sanity check the entire structure assertNotNull(serviceTemplate); - LOGGER.info(serviceTemplate.validate(new PfValidationResult()).toString()); - assertTrue(serviceTemplate.validate(new PfValidationResult()).isValid()); + LOGGER.info(serviceTemplate.validate("").toString()); + assertTrue(serviceTemplate.validate("").isValid()); // Check tosca_definitions_version assertEquals(YAML_VERSION, serviceTemplate.getToscaDefinitionsVersion()); @@ -243,8 +242,8 @@ public class MonitoringPolicySerializationTest { // Sanity check the entire structure assertNotNull(serviceTemplate); - LOGGER.info(serviceTemplate.validate(new PfValidationResult()).toString()); - assertTrue(serviceTemplate.validate(new PfValidationResult()).isValid()); + LOGGER.info(serviceTemplate.validate("").toString()); + assertTrue(serviceTemplate.validate("").isValid()); // Check tosca_definitions_version assertEquals(YAML_VERSION, serviceTemplate.getToscaDefinitionsVersion()); diff --git a/models-tosca/src/test/java/org/onap/policy/models/tosca/simple/serialization/MonitoringPolicyTypeSerializationTest.java b/models-tosca/src/test/java/org/onap/policy/models/tosca/simple/serialization/MonitoringPolicyTypeSerializationTest.java index 4a8378f21..7135da0bf 100644 --- a/models-tosca/src/test/java/org/onap/policy/models/tosca/simple/serialization/MonitoringPolicyTypeSerializationTest.java +++ b/models-tosca/src/test/java/org/onap/policy/models/tosca/simple/serialization/MonitoringPolicyTypeSerializationTest.java @@ -34,7 +34,6 @@ import org.onap.policy.common.utils.coder.CoderException; import org.onap.policy.common.utils.coder.StandardCoder; import org.onap.policy.common.utils.resources.ResourceUtils; import org.onap.policy.models.base.PfConceptKey; -import org.onap.policy.models.base.PfValidationResult; import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate; import org.onap.policy.models.tosca.simple.concepts.JpaToscaConstraintLogical; import org.onap.policy.models.tosca.simple.concepts.JpaToscaConstraintValidValues; @@ -140,8 +139,8 @@ public class MonitoringPolicyTypeSerializationTest { // Sanity check the entire structure assertNotNull(serviceTemplate); - LOGGER.info(serviceTemplate.validate(new PfValidationResult()).toString()); - assertTrue(serviceTemplate.validate(new PfValidationResult()).isValid()); + LOGGER.info(serviceTemplate.validate("").toString()); + assertTrue(serviceTemplate.validate("").isValid()); // Check tosca_definitions_version assertEquals("tosca_simple_yaml_1_1_0", serviceTemplate.getToscaDefinitionsVersion()); @@ -361,8 +360,8 @@ public class MonitoringPolicyTypeSerializationTest { // Sanity check the entire structure assertNotNull(serviceTemplate); - LOGGER.info(serviceTemplate.validate(new PfValidationResult()).toString()); - assertTrue(serviceTemplate.validate(new PfValidationResult()).isValid()); + LOGGER.info(serviceTemplate.validate("").toString()); + assertTrue(serviceTemplate.validate("").isValid()); // Check tosca_definitions_version assertEquals("tosca_simple_yaml_1_1_0", serviceTemplate.getToscaDefinitionsVersion()); diff --git a/models-tosca/src/test/java/org/onap/policy/models/tosca/utils/ToscaServiceTemplateUtilsTest.java b/models-tosca/src/test/java/org/onap/policy/models/tosca/utils/ToscaServiceTemplateUtilsTest.java index c3fc8a310..ad29a7199 100644 --- a/models-tosca/src/test/java/org/onap/policy/models/tosca/utils/ToscaServiceTemplateUtilsTest.java +++ b/models-tosca/src/test/java/org/onap/policy/models/tosca/utils/ToscaServiceTemplateUtilsTest.java @@ -1,6 +1,7 @@ /*- * ============LICENSE_START======================================================= * Copyright (C) 2020 Nordix Foundation. + * Modifications 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. @@ -26,6 +27,7 @@ import static org.junit.Assert.assertEquals; import java.util.Iterator; import org.junit.Test; import org.onap.policy.models.base.PfConceptKey; +import org.onap.policy.models.base.Validated; import org.onap.policy.models.tosca.simple.concepts.JpaToscaDataType; import org.onap.policy.models.tosca.simple.concepts.JpaToscaDataTypes; import org.onap.policy.models.tosca.simple.concepts.JpaToscaPolicies; @@ -132,13 +134,14 @@ public class ToscaServiceTemplateUtilsTest { final JpaToscaServiceTemplate compositeTestTemplate = new JpaToscaServiceTemplate(compositeTemplate00); assertThatThrownBy(() -> { ToscaServiceTemplateUtils.addFragment(compositeTestTemplate, fragmentTemplate03); - }).hasMessageContaining("entity in incoming fragment does not equal existing entity"); + }).hasMessageContaining("incoming fragment").hasMessageContaining("entity").hasMessageContaining("dt0:0.0.1") + .hasMessageContaining("does not equal existing entity"); JpaToscaServiceTemplate fragmentTemplate04 = new JpaToscaServiceTemplate(); fragmentTemplate04.setDescription("Another service template"); assertThatThrownBy(() -> { ToscaServiceTemplateUtils.addFragment(compositeTestTemplate, fragmentTemplate04); - }).hasMessageContaining("service template in incoming fragment does not equal existing service template"); + }).hasMessageContaining("service template").hasMessageContaining("does not equal existing service template"); JpaToscaServiceTemplate fragmentTemplate05 = new JpaToscaServiceTemplate(); fragmentTemplate05.setTopologyTemplate(new JpaToscaTopologyTemplate()); @@ -159,7 +162,8 @@ public class ToscaServiceTemplateUtilsTest { fragmentTemplate07.getTopologyTemplate().setDescription("topology template other description"); assertThatThrownBy(() -> { ToscaServiceTemplateUtils.addFragment(compositeTemplate04, fragmentTemplate07); - }).hasMessageContaining("topology template in incoming fragment does not equal existing topology template"); + }).hasMessageContaining("incoming fragment").hasMessageContaining("topology template") + .hasMessageContaining("does not equal existing topology template"); JpaToscaDataType dt1 = new JpaToscaDataType(); dt1.setKey(new PfConceptKey("dt1", "0.0.1")); @@ -189,7 +193,7 @@ public class ToscaServiceTemplateUtilsTest { assertThatThrownBy(() -> { ToscaServiceTemplateUtils.addFragment(compositeTemplate04, fragmentTemplate08); - }).hasMessageContaining("JpaToscaPolicy:INVALID:type is null or a null key"); + }).hasMessageContaining("type").hasMessageContaining(Validated.IS_A_NULL_KEY); p0.setType(pt0.getKey()); diff --git a/models-tosca/src/test/java/org/onap/policy/models/tosca/utils/ToscaUtilsTest.java b/models-tosca/src/test/java/org/onap/policy/models/tosca/utils/ToscaUtilsTest.java index d75e37be2..0880fd97b 100644 --- a/models-tosca/src/test/java/org/onap/policy/models/tosca/utils/ToscaUtilsTest.java +++ b/models-tosca/src/test/java/org/onap/policy/models/tosca/utils/ToscaUtilsTest.java @@ -1,6 +1,7 @@ /*- * ============LICENSE_START======================================================= * Copyright (C) 2019-2020 Nordix Foundation. + * Modifications 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. @@ -20,6 +21,7 @@ package org.onap.policy.models.tosca.utils; +import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatCode; import static org.assertj.core.api.Assertions.assertThatThrownBy; import static org.junit.Assert.assertEquals; @@ -28,9 +30,10 @@ import static org.junit.Assert.assertNotEquals; import static org.junit.Assert.assertTrue; import org.junit.Test; +import org.onap.policy.common.parameters.BeanValidationResult; import org.onap.policy.models.base.PfConceptKey; import org.onap.policy.models.base.PfKey; -import org.onap.policy.models.base.PfValidationResult; +import org.onap.policy.models.base.Validated; import org.onap.policy.models.tosca.simple.concepts.JpaToscaDataType; import org.onap.policy.models.tosca.simple.concepts.JpaToscaDataTypes; import org.onap.policy.models.tosca.simple.concepts.JpaToscaPolicies; @@ -149,7 +152,7 @@ public class ToscaUtilsTest { }).hasMessageMatching("entityTypes is marked .*on.*ull but is null"); assertThatThrownBy(() -> { - ToscaUtils.getEntityTypeAncestors(null, null, new PfValidationResult()); + ToscaUtils.getEntityTypeAncestors(null, null, new BeanValidationResult("", null)); }).hasMessageMatching("entityTypes is marked .*on.*ull but is null"); assertThatThrownBy(() -> { @@ -157,7 +160,7 @@ public class ToscaUtilsTest { }).hasMessageMatching("entityTypes is marked .*on.*ull but is null"); assertThatThrownBy(() -> { - ToscaUtils.getEntityTypeAncestors(null, new JpaToscaDataType(), new PfValidationResult()); + ToscaUtils.getEntityTypeAncestors(null, new JpaToscaDataType(), new BeanValidationResult("", null)); }).hasMessageMatching("entityTypes is marked .*on.*ull but is null"); assertThatThrownBy(() -> { @@ -165,7 +168,7 @@ public class ToscaUtilsTest { }).hasMessageMatching("entityType is marked .*on.*ull but is null"); assertThatThrownBy(() -> { - ToscaUtils.getEntityTypeAncestors(new JpaToscaDataTypes(), null, new PfValidationResult()); + ToscaUtils.getEntityTypeAncestors(new JpaToscaDataTypes(), null, new BeanValidationResult("", null)); }).hasMessageMatching("entityType is marked .*on.*ull but is null"); assertThatThrownBy(() -> { @@ -176,7 +179,7 @@ public class ToscaUtilsTest { JpaToscaDataType dt0 = new JpaToscaDataType(); dt0.setKey(new PfConceptKey("dt0", "0.0.1")); dt0.setDescription("dt0 description"); - PfValidationResult result = new PfValidationResult(); + BeanValidationResult result = new BeanValidationResult("", null); assertTrue(ToscaUtils.getEntityTypeAncestors(dataTypes, dt0, result).isEmpty()); @@ -195,9 +198,10 @@ public class ToscaUtilsTest { dt0.setDerivedFrom(new PfConceptKey("some.thing.Else", PfKey.NULL_KEY_VERSION)); assertTrue(ToscaUtils.getEntityTypeAncestors(dataTypes, dt0, result).isEmpty()); assertFalse(result.isValid()); - assertTrue(result.toString().contains("parent some.thing.Else:0.0.0 of entity not found")); + assertThat(result.getResult()).contains("parent").contains("some.thing.Else:0.0.0") + .contains(Validated.NOT_FOUND); - result = new PfValidationResult(); + result = new BeanValidationResult("", null); dt0.setDerivedFrom(new PfConceptKey("tosca.datatyps.Root", PfKey.NULL_KEY_VERSION)); JpaToscaDataType dt1 = new JpaToscaDataType(); @@ -233,8 +237,8 @@ public class ToscaUtilsTest { dt0.setDerivedFrom(dt0.getKey()); assertThatThrownBy(() -> { - ToscaUtils.getEntityTypeAncestors(dataTypes, dt0, new PfValidationResult()); - }).hasMessageContaining("entity cannot be an ancestor of itself"); + ToscaUtils.getEntityTypeAncestors(dataTypes, dt0, new BeanValidationResult("", null)); + }).hasMessageContaining("entity type").hasMessageContaining("ancestor of itself"); dt0.setDerivedFrom(null); assertEquals(2, ToscaUtils.getEntityTypeAncestors(dataTypes, dt2, result).size()); @@ -250,7 +254,7 @@ public class ToscaUtilsTest { dataTypes.getConceptMap().remove(dt1.getKey()); assertTrue(ToscaUtils.getEntityTypeAncestors(dataTypes, dt2, result).isEmpty()); assertFalse(result.isValid()); - assertTrue(result.toString().contains("parent dt1:0.0.1 of entity not found")); + assertThat(result.getResult()).contains("parent").contains("dt1:0.0.1").contains(Validated.NOT_FOUND); } @Test @@ -369,6 +373,7 @@ public class ToscaUtilsTest { assertThatThrownBy(() -> { final JpaToscaDataTypes badDataTypes = new JpaToscaDataTypes(dataTypes); ToscaUtils.getEntityTree(badDataTypes, dt9.getKey().getName(), dt9.getKey().getVersion()); - }).hasMessageContaining("parent i.dont.Exist:0.0.0 of entity not found"); + }).hasMessageContaining("parent").hasMessageContaining("i.dont.Exist:0.0.0") + .hasMessageContaining(Validated.NOT_FOUND); } } |