aboutsummaryrefslogtreecommitdiffstats
path: root/common-parameters/src
diff options
context:
space:
mode:
authorJorge Hernandez <jh1730@att.com>2018-07-31 16:57:16 +0000
committerGerrit Code Review <gerrit@onap.org>2018-07-31 16:57:16 +0000
commit59c650d413522286a047f470e59a1142d9eb20b2 (patch)
tree7cdc9810dca73f3418cb3065ec01e12e42f2d3bb /common-parameters/src
parent9f8be335925299059992bd46285a1b633d518051 (diff)
parent73ba8039930ba56f6a64a7acc4126dc50b77070d (diff)
Merge "Improve validation, add hierarchical validation"
Diffstat (limited to 'common-parameters/src')
-rw-r--r--common-parameters/src/main/java/org/onap/policy/common/parameters/GroupMapValidationResult.java163
-rw-r--r--common-parameters/src/main/java/org/onap/policy/common/parameters/GroupValidationResult.java324
-rw-r--r--common-parameters/src/main/java/org/onap/policy/common/parameters/ParameterConstants.java45
-rw-r--r--common-parameters/src/main/java/org/onap/policy/common/parameters/ParameterException.java15
-rw-r--r--common-parameters/src/main/java/org/onap/policy/common/parameters/ParameterGroup.java (renamed from common-parameters/src/main/java/org/onap/policy/common/parameters/AbstractParameters.java)39
-rw-r--r--common-parameters/src/main/java/org/onap/policy/common/parameters/ParameterRuntimeException.java12
-rw-r--r--common-parameters/src/main/java/org/onap/policy/common/parameters/ParameterService.java87
-rw-r--r--common-parameters/src/main/java/org/onap/policy/common/parameters/ParameterValidationResult.java110
-rw-r--r--common-parameters/src/main/java/org/onap/policy/common/parameters/ValidationResult.java78
-rw-r--r--common-parameters/src/main/java/org/onap/policy/common/parameters/ValidationStatus.java (renamed from common-parameters/src/test/java/org/onap/policy/common/parameters/LegalParameters.java)21
-rw-r--r--common-parameters/src/test/java/org/onap/policy/common/parameters/ExceptionTest.java3
-rw-r--r--common-parameters/src/test/java/org/onap/policy/common/parameters/TestAbstractParameters.java8
-rw-r--r--common-parameters/src/test/java/org/onap/policy/common/parameters/TestJsonInput.java62
-rw-r--r--common-parameters/src/test/java/org/onap/policy/common/parameters/TestParameterService.java57
-rw-r--r--common-parameters/src/test/java/org/onap/policy/common/parameters/TestValidation.java183
-rw-r--r--common-parameters/src/test/java/org/onap/policy/common/parameters/TestValidationErrors.java105
-rw-r--r--common-parameters/src/test/java/org/onap/policy/common/parameters/TestValidationResults.java147
-rw-r--r--common-parameters/src/test/java/org/onap/policy/common/parameters/TestYamlInput.java59
-rw-r--r--common-parameters/src/test/java/org/onap/policy/common/parameters/testclasses/EmptyParameterGroup.java (renamed from common-parameters/src/main/java/org/onap/policy/common/parameters/ParameterValidator.java)34
-rw-r--r--common-parameters/src/test/java/org/onap/policy/common/parameters/testclasses/ParameterGroupWithArray.java47
-rw-r--r--common-parameters/src/test/java/org/onap/policy/common/parameters/testclasses/ParameterGroupWithCollection.java58
-rw-r--r--common-parameters/src/test/java/org/onap/policy/common/parameters/testclasses/ParameterGroupWithIllegalMapKey.java59
-rw-r--r--common-parameters/src/test/java/org/onap/policy/common/parameters/testclasses/ParameterGroupWithIllegalMapValue.java58
-rw-r--r--common-parameters/src/test/java/org/onap/policy/common/parameters/testclasses/ParameterGroupWithNullCollection.java53
-rw-r--r--common-parameters/src/test/java/org/onap/policy/common/parameters/testclasses/ParameterGroupWithNullMapValue.java53
-rw-r--r--common-parameters/src/test/java/org/onap/policy/common/parameters/testclasses/ParameterGroupWithParameterGroupCollection.java58
-rw-r--r--common-parameters/src/test/java/org/onap/policy/common/parameters/testclasses/TestParametersL00.java177
-rw-r--r--common-parameters/src/test/java/org/onap/policy/common/parameters/testclasses/TestParametersL10.java173
-rw-r--r--common-parameters/src/test/java/org/onap/policy/common/parameters/testclasses/TestParametersLGeneric.java135
-rw-r--r--common-parameters/src/test/resources/expectedValidationResults/TestJsonYamlValidationResult.txt39
-rw-r--r--common-parameters/src/test/resources/expectedValidationResults/TestParametersL0_0_OK.txt39
-rw-r--r--common-parameters/src/test/resources/expectedValidationResults/TestParametersL0_1_Invalid.txt3
-rw-r--r--common-parameters/src/test/resources/expectedValidationResults/TestParametersL0_1_Observation.txt3
-rw-r--r--common-parameters/src/test/resources/expectedValidationResults/TestParametersL0_1_Warning.txt3
-rw-r--r--common-parameters/src/test/resources/expectedValidationResults/TestParametersL0_2_Invalid.txt9
-rw-r--r--common-parameters/src/test/resources/expectedValidationResults/TestParametersL0_2_Observation.txt9
-rw-r--r--common-parameters/src/test/resources/expectedValidationResults/TestParametersL0_2_Warning.txt9
-rw-r--r--common-parameters/src/test/resources/expectedValidationResults/TestParametersL0_3_Invalid.txt15
-rw-r--r--common-parameters/src/test/resources/expectedValidationResults/TestParametersL0_3_Observation.txt15
-rw-r--r--common-parameters/src/test/resources/expectedValidationResults/TestParametersL0_3_Warning.txt15
-rw-r--r--common-parameters/src/test/resources/parameters/TestParameters.json49
-rw-r--r--common-parameters/src/test/resources/parameters/TestParameters.yaml37
42 files changed, 2546 insertions, 122 deletions
diff --git a/common-parameters/src/main/java/org/onap/policy/common/parameters/GroupMapValidationResult.java b/common-parameters/src/main/java/org/onap/policy/common/parameters/GroupMapValidationResult.java
new file mode 100644
index 00000000..09cdc1de
--- /dev/null
+++ b/common-parameters/src/main/java/org/onap/policy/common/parameters/GroupMapValidationResult.java
@@ -0,0 +1,163 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2018 Ericsson. 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.common.parameters;
+
+import java.lang.reflect.Field;
+import java.util.LinkedHashMap;
+import java.util.Map;
+import java.util.Map.Entry;
+
+/**
+ * This class holds the result of the validation of a map of parameter groups.
+ */
+public class GroupMapValidationResult implements ValidationResult {
+ // The name of the parameter group map
+ final String mapParameterName;
+
+ // Validation status for the entire parameter class
+ private ValidationStatus status = ValidationStatus.CLEAN;
+ private String message = ParameterConstants.PARAMETER_GROUP_MAP_HAS_STATUS_MESSAGE + status.toString();
+
+ // Validation results for each parameter in the group
+ private final Map<String, ValidationResult> validationResultMap = new LinkedHashMap<>();
+
+ /**
+ * Constructor, create the group map validation result.
+ *
+ * @param field the map parameter field
+ * @param mapObject the value of the map parameter field
+ */
+ protected GroupMapValidationResult(final Field field, final Object mapObject) {
+ this.mapParameterName = field.getName();
+
+ // Cast the map object to a map of parameter groups keyed by string, we can't type check maps
+ // due to restrictions on generics so we have to check each entry key is a string and each entry
+ // value is a parameter group
+ @SuppressWarnings("unchecked")
+ Map<String, ParameterGroup> parameterGroupMap = (Map<String, ParameterGroup>) mapObject;
+
+ // Add a validation result per map entry
+ for (Entry<String, ParameterGroup> parameterGroupMapEntry : parameterGroupMap.entrySet()) {
+ // Create a validation status entry for the map
+ validationResultMap.put(parameterGroupMapEntry.getKey(),
+ new GroupValidationResult(parameterGroupMapEntry.getValue()));
+ }
+ }
+
+ /**
+ * Gets the name of the parameter being validated.
+ *
+ * @return the name
+ */
+ @Override
+ public String getName() {
+ return mapParameterName;
+ }
+
+ /**
+ * Gets the status of validation.
+ *
+ * @return the status
+ */
+ @Override
+ public ValidationStatus getStatus() {
+ return status;
+ }
+
+ /**
+ * Set the validation result on on a parameter group.
+ *
+ * @param status The validation status the field is receiving
+ * @param message The validation message explaining the validation status
+ */
+ @Override
+ public void setResult(ValidationStatus status, String message) {
+ setResult(status);
+ this.message = message;
+ }
+
+ /**
+ * Set the validation result on on a parameter group.
+ *
+ * @param status The validation status the field is receiving
+ */
+ public void setResult(final ValidationStatus status) {
+ // We record the most serious validation status, assuming the status enum ordinals
+ // increase in order of severity
+ if (this.status.ordinal() < status.ordinal()) {
+ this.status = status;
+ this.message = ParameterConstants.PARAMETER_GROUP_HAS_STATUS_MESSAGE + status.toString();
+ }
+ }
+
+ /**
+ * Set the validation result on a parameter map entry.
+ *
+ * @param entryName The name of the parameter map entry
+ * @param mapEntryValidationResult The validation result for the entry
+ */
+ public void setResult(String entryName, ValidationResult mapEntryValidationResult) {
+ ValidationResult validationResult = validationResultMap.get(entryName);
+ if (validationResult == null) {
+ throw new ParameterRuntimeException("no entry with name \"" + entryName + "\" exists");
+ }
+
+ // Set the status of the parameter group and replace the field result
+ validationResultMap.put(entryName, mapEntryValidationResult);
+ this.setResult(status);
+ }
+
+ /**
+ * Gets the validation result.
+ *
+ * @param initialIndentation the indentation to use on the main result output
+ * @param subIndentation the indentation to use on sub parts of the result output
+ * @param showClean output information on clean fields
+ * @return the result
+ */
+ @Override
+ public String getResult(final String initialIndentation, final String subIndentation, final boolean showClean) {
+ if (status == ValidationStatus.CLEAN && !showClean) {
+ return null;
+ }
+
+ StringBuilder validationResultBuilder = new StringBuilder();
+
+ validationResultBuilder.append(initialIndentation);
+ validationResultBuilder.append("parameter group map \"");
+ validationResultBuilder.append(mapParameterName);
+ validationResultBuilder.append("\" ");
+ validationResultBuilder.append(status);
+ validationResultBuilder.append(", ");
+ validationResultBuilder.append(message);
+ validationResultBuilder.append('\n');
+
+ for (ValidationResult fieldResult : validationResultMap.values()) {
+ String fieldResultMessage = fieldResult.getResult(initialIndentation + subIndentation, subIndentation,
+ showClean);
+ if (fieldResultMessage != null) {
+ validationResultBuilder.append(fieldResultMessage);
+ }
+ }
+
+ return validationResultBuilder.toString();
+ }
+} \ No newline at end of file
diff --git a/common-parameters/src/main/java/org/onap/policy/common/parameters/GroupValidationResult.java b/common-parameters/src/main/java/org/onap/policy/common/parameters/GroupValidationResult.java
new file mode 100644
index 00000000..91c3d145
--- /dev/null
+++ b/common-parameters/src/main/java/org/onap/policy/common/parameters/GroupValidationResult.java
@@ -0,0 +1,324 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2018 Ericsson. 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.common.parameters;
+
+import java.lang.reflect.Field;
+import java.util.Collection;
+import java.util.LinkedHashMap;
+import java.util.Map;
+import java.util.Map.Entry;
+
+/**
+ * This class holds the result of the validation of a parameter group.
+ */
+public class GroupValidationResult implements ValidationResult {
+ // The parameter group which the validation result applies
+ private final ParameterGroup parameterGroup;
+
+ // Validation status for the entire parameter class
+ private ValidationStatus status = ValidationStatus.CLEAN;
+ private String message = ParameterConstants.PARAMETER_GROUP_HAS_STATUS_MESSAGE + status.toString();
+
+ // Validation results for each parameter in the group
+ private final Map<String, ValidationResult> validationResultMap = new LinkedHashMap<>();
+
+ /**
+ * Constructor, create the field validation result with default arguments.
+ *
+ * @param parameterGroup the parameter group being validated
+ */
+ public GroupValidationResult(final ParameterGroup parameterGroup) {
+ this.parameterGroup = parameterGroup;
+
+ // Add a validation result per field
+ for (Field field : parameterGroup.getClass().getDeclaredFields()) {
+ // Exclude system fields
+ if (field.getName().startsWith("$") || field.getName().startsWith("_")) {
+ continue;
+ }
+
+ // Make the field accessible
+ boolean savedAccessibilityValue = field.isAccessible();
+ field.setAccessible(true);
+
+ try {
+ // Set the validation result
+ validationResultMap.put(field.getName(), getValidationResult(field, parameterGroup));
+ } catch (IllegalArgumentException | IllegalAccessException e) {
+ throw new ParameterRuntimeException("could not get value of parameter \"" + field.getName() + "\"", e);
+ } finally {
+ field.setAccessible(savedAccessibilityValue);
+ }
+ }
+ }
+
+ /**
+ * Construct a validation result for a field
+ *
+ * @param field The parameter field
+ * @param ParameterGroup The parameter group containing the field
+ * @return the validation result
+ * @throws IllegalAccessException on accessing private fields
+ */
+ private ValidationResult getValidationResult(final Field field, final ParameterGroup parameterGroup)
+ throws IllegalAccessException {
+ final String fieldName = field.getName();
+ final Class<?> fieldType = field.getType();
+ final Object fieldObject = field.get(parameterGroup);
+
+ // Nested parameter groups are allowed
+ if (ParameterGroup.class.isAssignableFrom(fieldType)) {
+ return new GroupValidationResult((ParameterGroup) field.get(parameterGroup));
+ }
+
+ // Nested maps of parameter groups are allowed
+ if (Map.class.isAssignableFrom(field.getType())) {
+ checkMapIsParameterGroupMap(fieldName, fieldObject);
+ return new GroupMapValidationResult(field, fieldObject);
+ }
+
+ // Collections of parameter groups are not allowed
+ if (Collection.class.isAssignableFrom(field.getType())) {
+ checkCollection4ParameterGroups(fieldName, fieldObject);
+ return new ParameterValidationResult(field, fieldObject);
+ }
+
+ // It's a regular parameter
+ return new ParameterValidationResult(field, fieldObject);
+ }
+
+ /**
+ * Check if this field is a map of parameter groups indexed by string keys.
+ *
+ * @param fieldName the name of the collection field.
+ * @param mapObject the map object to check
+ */
+ private void checkMapIsParameterGroupMap(String fieldName, Object mapObject) {
+ if (mapObject == null) {
+ throw new ParameterRuntimeException("map parameter \"" + fieldName + "\" is null");
+ }
+
+ Map<?, ?> incomingMap = (Map<?, ?>) mapObject;
+
+ for (Entry<?, ?> mapEntry : incomingMap.entrySet()) {
+ // Check the key is a string
+ if (!String.class.isAssignableFrom(mapEntry.getKey().getClass())) {
+ throw new ParameterRuntimeException("map entry is not a parameter group keyed by a string, key \""
+ + mapEntry.getKey() + "\" in map \"" + fieldName + "\" is not a string");
+ }
+
+ // Check the value is a parameter group
+ if (!ParameterGroup.class.isAssignableFrom(mapEntry.getValue().getClass())) {
+ throw new ParameterRuntimeException("map entry is not a parameter group keyed by a string, value \""
+ + mapEntry.getValue() + "\" in map \"" + fieldName + "\" is not a parameter group");
+ }
+ }
+ }
+
+ /**
+ * Check if this field contains parameter groups.
+ *
+ * @param fieldName the name of the collection field.
+ * @param collectionObject the collection object to check
+ */
+ private void checkCollection4ParameterGroups(final String fieldName, final Object collectionObject) {
+ if (collectionObject == null) {
+ throw new ParameterRuntimeException("collection parameter \"" + fieldName + "\" is null");
+ }
+
+ Collection<?> collection2Check = (Collection<?>) collectionObject;
+
+ for (Object collectionMember : collection2Check) {
+ if (ParameterGroup.class.isAssignableFrom(collectionMember.getClass())) {
+ throw new ParameterRuntimeException("collection parameter \"" + fieldName + "\" is illegal,"
+ + " parameter groups are not allowed as collection members");
+ }
+ }
+ }
+
+ /**
+ * Gets the parameter group for this validation result.
+ *
+ * @return the parameter class
+ */
+ public ParameterGroup getParameterGroup() {
+ return parameterGroup;
+ }
+
+ /**
+ * Gets the name of the parameter group being validated.
+ *
+ * @return the name
+ */
+ @Override
+ public String getName() {
+ return parameterGroup.getName();
+ }
+
+ /**
+ * Gets the status of validation.
+ *
+ * @return the status
+ */
+ @Override
+ public ValidationStatus getStatus() {
+ return status;
+ }
+
+ /**
+ * Set the validation result on on a parameter group.
+ *
+ * @param status The validation status the parameter group is receiving
+ * @param message The validation message explaining the validation status
+ */
+ @Override
+ public void setResult(ValidationStatus status, String message) {
+ setResult(status);
+ this.message = message;
+ }
+
+ /**
+ * Set the validation result on on a parameter group.
+ *
+ * On a sequence of calls, the most serious validation status is recorded, assuming the status enum ordinal increase
+ * in order of severity
+ *
+ * @param status The validation status the parameter group is receiving
+ */
+ public void setResult(final ValidationStatus status) {
+ //
+ if (this.status.ordinal() < status.ordinal()) {
+ this.status = status;
+ this.message = ParameterConstants.PARAMETER_GROUP_HAS_STATUS_MESSAGE + status.toString();
+ }
+ }
+
+ /**
+ * Set the validation result on a parameter group.
+ *
+ * @param parameterGroupName The name of the parameter group
+ * @param status The validation status the field is receiving
+ * @param message The validation message explaining the validation status
+ */
+ public void setResult(final String parameterGroupName, final ValidationStatus status, final String message) {
+ ParameterValidationResult parameterValidationResult;
+ try {
+ parameterValidationResult = (ParameterValidationResult) validationResultMap.get(parameterGroupName);
+ } catch (ClassCastException e) {
+ throw new ParameterRuntimeException("parameter not a regular parameter: " + parameterGroupName, e);
+ }
+
+ if (parameterValidationResult == null) {
+ throw new ParameterRuntimeException(
+ "no regular parameter field exists for parameter: " + parameterGroupName);
+ }
+
+ // Set the status of the parameter group and the field
+ parameterValidationResult.setResult(status, message);
+ this.setResult(status);
+ }
+
+ /**
+ * Set the validation result on a nested parameter group.
+ *
+ * @param parameterName The name of the parameter field
+ * @param nestedValidationResult The validation result from a nested field
+ */
+ public void setResult(String parameterName, ValidationResult nestedValidationResult) {
+ GroupValidationResult groupValidationResult;
+ try {
+ groupValidationResult = (GroupValidationResult) validationResultMap.get(parameterName);
+ } catch (ClassCastException e) {
+ throw new ParameterRuntimeException("parameter is not a nested group parameter: " + parameterName, e);
+ }
+
+ if (groupValidationResult == null) {
+ throw new ParameterRuntimeException("no nested parameter field exists for parameter: " + parameterName);
+ }
+
+ // Set the status of the parameter group and replace the field result
+ validationResultMap.put(parameterName, nestedValidationResult);
+ this.setResult(status);
+ }
+
+ /**
+ * Set the validation result on a nested parameter group map entry.
+ *
+ * @param parameterName The name of the parameter field
+ * @param key The key of the map entry
+ * @param nestedMapValidationResult The validation result from a nested map entry
+ */
+ public void setResult(final String parameterName, final String key,
+ final ValidationResult nestedMapValidationResult) {
+ GroupMapValidationResult groupMapValidationResult;
+ try {
+ groupMapValidationResult = (GroupMapValidationResult) validationResultMap.get(parameterName);
+ } catch (ClassCastException e) {
+ throw new ParameterRuntimeException("parameter is not a nested group map parameter: " + parameterName, e);
+ }
+
+ if (groupMapValidationResult == null) {
+ throw new ParameterRuntimeException("no group map parameter field exists for parameter: " + parameterName);
+ }
+
+ // Set the status of the parameter group and the field
+ groupMapValidationResult.setResult(key, nestedMapValidationResult);
+ this.setResult(status);
+ }
+
+ /**
+ * Gets the validation result.
+ *
+ * @param initialIndentation the indentation to use on the main result output
+ * @param subIndentation the indentation to use on sub parts of the result output
+ * @param showClean output information on clean fields
+ * @return the result
+ */
+ @Override
+ public String getResult(final String initialIndentation, final String subIndentation, final boolean showClean) {
+ if (status == ValidationStatus.CLEAN && !showClean) {
+ return null;
+ }
+
+ StringBuilder validationResultBuilder = new StringBuilder();
+
+ validationResultBuilder.append(initialIndentation);
+ validationResultBuilder.append("parameter group \"");
+ validationResultBuilder.append(parameterGroup.getName());
+ validationResultBuilder.append("\" type \"");
+ validationResultBuilder.append(parameterGroup.getClass().getCanonicalName());
+ validationResultBuilder.append("\" ");
+ validationResultBuilder.append(status);
+ validationResultBuilder.append(", ");
+ validationResultBuilder.append(message);
+ validationResultBuilder.append('\n');
+
+ for (ValidationResult fieldResult : validationResultMap.values()) {
+ String fieldResultMessage = fieldResult.getResult(initialIndentation + subIndentation, subIndentation,
+ showClean);
+ if (fieldResultMessage != null) {
+ validationResultBuilder.append(fieldResultMessage);
+ }
+ }
+
+ return validationResultBuilder.toString();
+ }
+} \ No newline at end of file
diff --git a/common-parameters/src/main/java/org/onap/policy/common/parameters/ParameterConstants.java b/common-parameters/src/main/java/org/onap/policy/common/parameters/ParameterConstants.java
new file mode 100644
index 00000000..240b1f40
--- /dev/null
+++ b/common-parameters/src/main/java/org/onap/policy/common/parameters/ParameterConstants.java
@@ -0,0 +1,45 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2018 Ericsson. 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.common.parameters;
+
+/**
+ * This static class holds the values of constants for parameter handling.
+ */
+public final class ParameterConstants {
+ // Indentation is 0 on the left and 2 for each level of hierarchy
+ public static final String DEFAULT_INITIAL_RESULT_INDENTATION = "";
+ public static final String DEFAULT_RESULT_INDENTATION = " ";
+
+ // By default we do not show validation results for parameters that are validated as clean
+ public static final boolean DO_NOT_SHOW_CLEAN_RESULTS = false;
+
+ // Messages for clean validations
+ public static final String PARAMETER_GROUP_HAS_STATUS_MESSAGE = "parameter group has status ";
+ public static final String PARAMETER_GROUP_MAP_HAS_STATUS_MESSAGE = "parameter group map has status ";
+ public static final String PARAMETER_HAS_STATUS_MESSAGE = "parameter has status ";
+
+ /**
+ * Private constructor to prevent subclassing.
+ */
+ private ParameterConstants() {
+ // Private constructor to prevent subclassing
+ }
+} \ No newline at end of file
diff --git a/common-parameters/src/main/java/org/onap/policy/common/parameters/ParameterException.java b/common-parameters/src/main/java/org/onap/policy/common/parameters/ParameterException.java
index 129d5390..3a6e17e8 100644
--- a/common-parameters/src/main/java/org/onap/policy/common/parameters/ParameterException.java
+++ b/common-parameters/src/main/java/org/onap/policy/common/parameters/ParameterException.java
@@ -55,21 +55,21 @@ public class ParameterException extends Exception {
* Instantiates a new parameter exception.
*
* @param message the message on the exception
- * @param e the exception that caused this parameter exception
+ * @param exception the exception that caused this parameter exception
*/
- public ParameterException(final String message, final Exception e) {
- this(message, e, null);
+ public ParameterException(final String message, final Exception exception) {
+ this(message, exception, null);
}
/**
* Instantiates a new parameter exception.
*
* @param message the message on the exception
- * @param e the exception that caused this parameter exception
+ * @param exception the exception that caused this parameter exception
* @param object the object that the exception was thrown on
*/
- public ParameterException(final String message, final Exception e, final Object object) {
- super(message, e);
+ public ParameterException(final String message, final Exception exception, final Object object) {
+ super(message, exception);
this.object = object;
}
@@ -83,7 +83,7 @@ public class ParameterException extends Exception {
}
/**
- * Build a cascaded message from an exception and all its nested exceptions
+ * Build a cascaded message from an exception and all its nested exceptions.
*
* @param throwable the top level exception
* @return cascaded message string
@@ -101,7 +101,6 @@ public class ParameterException extends Exception {
}
/**
- *
* Get the object on which the exception was thrown.
*
* @return The object on which the exception was thrown
diff --git a/common-parameters/src/main/java/org/onap/policy/common/parameters/AbstractParameters.java b/common-parameters/src/main/java/org/onap/policy/common/parameters/ParameterGroup.java
index 5430dfeb..48e8379f 100644
--- a/common-parameters/src/main/java/org/onap/policy/common/parameters/AbstractParameters.java
+++ b/common-parameters/src/main/java/org/onap/policy/common/parameters/ParameterGroup.java
@@ -1,5 +1,4 @@
-package org.onap.policy.common.parameters;
-/*
+/*-
* ============LICENSE_START=======================================================
* Copyright (C) 2018 Ericsson. All rights reserved.
* ================================================================================
@@ -19,29 +18,35 @@ package org.onap.policy.common.parameters;
* ============LICENSE_END=========================================================
*/
+package org.onap.policy.common.parameters;
+
/**
- * This class defines an abstract parameter interface that acts as a base interface for all parameters in the ONAP
- * Policy Framework. All parameter POJOs are subclass of the abstract parameter class and can be used with the
- * {@link ParameterService}.
+ * This interface acts as a base interface for all parameter groups in the ONAP Policy Framework. All parameter group
+ * POJOs are implementations of the parameter group interface and can be used with the {@link ParameterService}.
*
* @author Liam Fallon (liam.fallon@ericsson.com)
*/
-public interface AbstractParameters {
+public interface ParameterGroup {
/**
- * Gets the parameter class.
- *
- * @return the parameter class
+ * Get the group name.
+ *
+ * @return the group name
*/
- default Class<? extends AbstractParameters> getParameterClass() {
- return this.getClass();
- }
+ public String getName();
+
+ /**
+ * Validate parameters.
+ *
+ * @return the result of the parameter validation
+ */
+ GroupValidationResult validate();
/**
- * Gets the parameter class name.
- *
- * @return the parameter class name
+ * Check if the parameters are valid.
+ *
+ * @return true if the parameters are valid
*/
- default String getParameterClassName() {
- return this.getClass().getCanonicalName();
+ default boolean isValid() {
+ return validate().getStatus().isValid();
}
}
diff --git a/common-parameters/src/main/java/org/onap/policy/common/parameters/ParameterRuntimeException.java b/common-parameters/src/main/java/org/onap/policy/common/parameters/ParameterRuntimeException.java
index 4b7d5874..071593a9 100644
--- a/common-parameters/src/main/java/org/onap/policy/common/parameters/ParameterRuntimeException.java
+++ b/common-parameters/src/main/java/org/onap/policy/common/parameters/ParameterRuntimeException.java
@@ -55,21 +55,21 @@ public class ParameterRuntimeException extends RuntimeException {
* Instantiates a new parameter runtime exception.
*
* @param message the message on the exception
- * @param e the exception that caused this parameter exception
+ * @param exception the exception that caused this parameter exception
*/
- public ParameterRuntimeException(final String message, final Exception e) {
- this(message, e, null);
+ public ParameterRuntimeException(final String message, final Exception exception) {
+ this(message, exception, null);
}
/**
* Instantiates a new parameter runtime exception.
*
* @param message the message on the exception
- * @param e the exception that caused this parameter exception
+ * @param exception the exception that caused this parameter exception
* @param object the object that the exception was thrown on
*/
- public ParameterRuntimeException(final String message, final Exception e, final Object object) {
- super(message, e);
+ public ParameterRuntimeException(final String message, final Exception exception, final Object object) {
+ super(message, exception);
this.object = object;
}
diff --git a/common-parameters/src/main/java/org/onap/policy/common/parameters/ParameterService.java b/common-parameters/src/main/java/org/onap/policy/common/parameters/ParameterService.java
index f411937d..db6995c5 100644
--- a/common-parameters/src/main/java/org/onap/policy/common/parameters/ParameterService.java
+++ b/common-parameters/src/main/java/org/onap/policy/common/parameters/ParameterService.java
@@ -1,5 +1,4 @@
-package org.onap.policy.common.parameters;
-/*
+/*-
* ============LICENSE_START=======================================================
* Copyright (C) 2018 Ericsson. All rights reserved.
* ================================================================================
@@ -19,25 +18,27 @@ package org.onap.policy.common.parameters;
* ============LICENSE_END=========================================================
*/
+package org.onap.policy.common.parameters;
+
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
/**
- * The parameter service makes ONAP PF parameters available to all classes in a JVM.
- *
- * The reason for having a parameter service is to avoid having to pass parameters down long call chains in modules such
- * as PDPs and editors. The parameter service makes correct and verified parameters available statically.
- *
- * The parameter service must be used with care because changing a parameter set anywhere in a JVM will affect all users
- * of those parameters anywhere in the JVM.
+ * The parameter service makes ONAP PF parameter groups available to all classes in a JVM.
+ *
+ * <p>The reason for having a parameter service is to avoid having to pass parameters down long call chains in modules
+ * such as PDPs and editors. The parameter service makes correct and verified parameters available statically.
+ *
+ * <p>The parameter service must be used with care because changing a parameter set anywhere in a JVM will affect all
+ * users of those parameters anywhere in the JVM.
*
* @author Liam Fallon (liam.fallon@ericsson.com)
*/
public abstract class ParameterService {
// The map holding the parameters
- private static Map<Class<? extends AbstractParameters>, AbstractParameters> parameterMap = new ConcurrentHashMap<>();
+ private static Map<String, ParameterGroup> parameterGroupMap = new ConcurrentHashMap<>();
/**
* This class is an abstract static class that cannot be extended.
@@ -46,69 +47,71 @@ public abstract class ParameterService {
}
/**
- * Register parameters with the parameter service.
+ * Register a parameter group with the parameter service.
*
- * @param <P> the generic type
- * @param parametersClass the class of the parameter, used to index the parameter
- * @param parameters the parameters
+ * @param parameterGroup the parameter group
*/
- public static <P extends AbstractParameters> void registerParameters(final P parameters) {
- parameterMap.put(parameters.getClass(), parameters);
+ public static void register(final ParameterGroup parameterGroup) {
+ if (!parameterGroupMap.containsKey(parameterGroup.getName())) {
+ parameterGroupMap.put(parameterGroup.getName(), parameterGroup);
+ } else {
+ throw new ParameterRuntimeException(
+ "\"" + parameterGroup.getName() + "\" already registered in parameter service");
+ }
}
/**
- * Remove parameters from the parameter service.
+ * Remove a parameter group from the parameter service.
*
- * @param <P> the generic type
- * @param parametersClass the class of the parameter, used to index the parameter
+ * @param parameterGroupName the name of the parameter group
*/
- public static <P extends AbstractParameters> void deregisterParameters(final Class<P> parametersClass) {
- parameterMap.remove(parametersClass);
+ public static void deregister(final String parameterGroupName) {
+ if (parameterGroupMap.containsKey(parameterGroupName)) {
+ parameterGroupMap.remove(parameterGroupName);
+ } else {
+ throw new ParameterRuntimeException("\"" + parameterGroupName + "\" not registered in parameter service");
+ }
}
/**
- * Get parameters from the parameter service.
+ * Get a parameter group from the parameter service.
*
- * @param <P> the generic type
- * @param parametersClass the class of the parameter, used to index the parameter
- * @return The parameter
+ * @param parameterGroupName the name of the parameter group
+ * @return The parameter group
*/
- @SuppressWarnings("unchecked")
- public static <P extends AbstractParameters> P getParameters(final Class<P> parametersClass) {
- final P parameter = (P) parameterMap.get(parametersClass);
+ public static ParameterGroup get(final String parameterGroupName) {
+ final ParameterGroup parameterGroup = parameterGroupMap.get(parameterGroupName);
- if (parameter == null) {
- throw new ParameterRuntimeException(
- "Parameters for " + parametersClass.getCanonicalName() + " not found in parameter service");
+ if (parameterGroup == null) {
+ throw new ParameterRuntimeException("\"" + parameterGroupName + "\" not found in parameter service");
}
- return parameter;
+ return parameterGroup;
}
/**
- * Check if parameters is defined on the parameter service.
+ * Check if a parameter group is defined on the parameter service.
*
- * @param <P> the generic type
- * @param parametersClass the class of the parameter, used to index the parameter
+ * @param parameterGroupName the name of the parameter group
* @return true if the parameter is defined
*/
- public static <P extends AbstractParameters> boolean existsParameters(final Class<P> parametersClass) {
- return parameterMap.get(parametersClass) != null;
+ public static boolean contains(final String parameterGroupName) {
+ return parameterGroupMap.containsKey(parameterGroupName) && parameterGroupMap.get(parameterGroupName) != null;
}
/**
- * Get all the entries in the parameters map.
+ * Get all parameter groups.
*
* @return The entries
*/
- public static Set<Entry<Class<? extends AbstractParameters>, AbstractParameters>> getAll() {
- return parameterMap.entrySet();
+ public static Set<Entry<String, ParameterGroup>> getAll() {
+ return parameterGroupMap.entrySet();
}
/**
- * Clear all parameters in the parameter service.
+ * Clear all parameter groups in the parameter service.
*/
public static void clear() {
- parameterMap.clear();
+ parameterGroupMap.clear();
}
}
diff --git a/common-parameters/src/main/java/org/onap/policy/common/parameters/ParameterValidationResult.java b/common-parameters/src/main/java/org/onap/policy/common/parameters/ParameterValidationResult.java
new file mode 100644
index 00000000..9c829f4b
--- /dev/null
+++ b/common-parameters/src/main/java/org/onap/policy/common/parameters/ParameterValidationResult.java
@@ -0,0 +1,110 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2018 Ericsson. 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.common.parameters;
+
+import java.lang.reflect.Field;
+
+/**
+ * This class holds the result of the validation of a parameter.
+ */
+public class ParameterValidationResult implements ValidationResult {
+ // The field and value of the parameter to which the validation result applies
+ private final Field field;
+ private final Object parameterValue;
+
+ // Validation status and message
+ private ValidationStatus status = ValidationStatus.CLEAN;
+ private String message = ParameterConstants.PARAMETER_HAS_STATUS_MESSAGE + status.toString();
+
+ /**
+ * Constructor, create validation result for a parameter with default arguments.
+ *
+ * @param field the parameter field
+ * @param parameterValue the value of the parameter field
+ */
+ protected ParameterValidationResult(final Field field, final Object parameterValue) {
+ this.field = field;
+ this.parameterValue = parameterValue;
+ }
+
+ /**
+ * Gets the name of the parameter being validated.
+ *
+ * @return the name
+ */
+ @Override
+ public String getName() {
+ return field.getName();
+ }
+
+ /**
+ * Gets the validation status.
+ *
+ * @return the validation status
+ */
+ @Override
+ public ValidationStatus getStatus() {
+ return status;
+ }
+
+ /**
+ * Set the validation result on on a parameter field.
+ * @param status The validation status the field is receiving
+ * @param message The validation message explaining the validation status
+ */
+ @Override
+ public void setResult(final ValidationStatus status, final String message) {
+ this.status = status;
+ this.message = message;
+ }
+
+ /**
+ * Gets the validation result.
+ *
+ * @param initialIndentation the result indentation
+ * @param subIndentation the indentation to use on sub parts of the result output
+ * @param showClean output information on clean fields
+ * @return the result
+ */
+ @Override
+ public String getResult(final String initialIndentation, final String subIndentation, final boolean showClean) {
+ if (status == ValidationStatus.CLEAN && !showClean) {
+ return null;
+ }
+
+ StringBuilder validationResultBuilder = new StringBuilder();
+
+ validationResultBuilder.append(initialIndentation);
+ validationResultBuilder.append("field \"");
+ validationResultBuilder.append(getName());
+ validationResultBuilder.append("\" type \"");
+ validationResultBuilder.append(field.getType().getCanonicalName());
+ validationResultBuilder.append("\" value \"");
+ validationResultBuilder.append(parameterValue);
+ validationResultBuilder.append("\" ");
+ validationResultBuilder.append(getStatus());
+ validationResultBuilder.append(", ");
+ validationResultBuilder.append(message);
+ validationResultBuilder.append('\n');
+
+ return validationResultBuilder.toString();
+ }
+}
diff --git a/common-parameters/src/main/java/org/onap/policy/common/parameters/ValidationResult.java b/common-parameters/src/main/java/org/onap/policy/common/parameters/ValidationResult.java
new file mode 100644
index 00000000..b97ccda0
--- /dev/null
+++ b/common-parameters/src/main/java/org/onap/policy/common/parameters/ValidationResult.java
@@ -0,0 +1,78 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2018 Ericsson. 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.common.parameters;
+
+/**
+ * This interface defines the result of a parameter validation.
+ */
+public interface ValidationResult {
+ /**
+ * Gets the name of the entity being validated.
+ *
+ * @return the name
+ */
+ public String getName();
+
+ /**
+ * Gets the status of validation.
+ *
+ * @return the status
+ */
+ public ValidationStatus getStatus();
+
+ /**
+ * Checks if the result is valid.
+ *
+ * @return true, if is valid
+ */
+ default boolean isValid() {
+ return getStatus().isValid();
+ }
+
+ /**
+ * Gets the validation result.
+ *
+ * @return the full validation result
+ */
+ default String getResult() {
+ return getResult(
+ ParameterConstants.DEFAULT_INITIAL_RESULT_INDENTATION,
+ ParameterConstants.DEFAULT_RESULT_INDENTATION,
+ ParameterConstants.DO_NOT_SHOW_CLEAN_RESULTS);
+ }
+
+ /**
+ * Gets the validation result.
+ *
+ * @param initialIndentation the indentation to use on the main result output
+ * @param subIndentation the indentation to use on sub parts of the result output
+ * @param showClean output information on clean fields
+ * @return the result
+ */
+ public String getResult(final String initialIndentation, final String subIndentation, final boolean showClean);
+
+ /**
+ * Set a validation result.
+ * @param status The validation status the field is receiving
+ * @param message The validation message explaining the validation status
+ */
+ public void setResult(final ValidationStatus status, final String message);
+} \ No newline at end of file
diff --git a/common-parameters/src/test/java/org/onap/policy/common/parameters/LegalParameters.java b/common-parameters/src/main/java/org/onap/policy/common/parameters/ValidationStatus.java
index fb1bd478..ff453a1b 100644
--- a/common-parameters/src/test/java/org/onap/policy/common/parameters/LegalParameters.java
+++ b/common-parameters/src/main/java/org/onap/policy/common/parameters/ValidationStatus.java
@@ -1,4 +1,4 @@
-/*
+/*-
* ============LICENSE_START=======================================================
* Copyright (C) 2018 Ericsson. All rights reserved.
* ================================================================================
@@ -20,12 +20,17 @@
package org.onap.policy.common.parameters;
-import org.onap.policy.common.parameters.AbstractParameters;
-
-/**
- * @author Liam Fallon (liam.fallon@ericsson.com)
- */
-public class LegalParameters implements AbstractParameters {
- public LegalParameters() {
+public enum ValidationStatus {
+ CLEAN,
+ OBSERVATION,
+ WARNING,
+ INVALID;
+
+ /**
+ * The result of a validation is valid unless the status is INVALID.
+ * @return true if the validation has passed
+ */
+ public boolean isValid() {
+ return !this.equals(INVALID);
}
}
diff --git a/common-parameters/src/test/java/org/onap/policy/common/parameters/ExceptionTest.java b/common-parameters/src/test/java/org/onap/policy/common/parameters/ExceptionTest.java
index 510b6e36..b65db953 100644
--- a/common-parameters/src/test/java/org/onap/policy/common/parameters/ExceptionTest.java
+++ b/common-parameters/src/test/java/org/onap/policy/common/parameters/ExceptionTest.java
@@ -1,4 +1,4 @@
-/*
+/*-
* ============LICENSE_START=======================================================
* Copyright (C) 2018 Ericsson. All rights reserved.
* ================================================================================
@@ -17,6 +17,7 @@
* SPDX-License-Identifier: Apache-2.0
* ============LICENSE_END=========================================================
*/
+
package org.onap.policy.common.parameters;
import static org.junit.Assert.assertEquals;
diff --git a/common-parameters/src/test/java/org/onap/policy/common/parameters/TestAbstractParameters.java b/common-parameters/src/test/java/org/onap/policy/common/parameters/TestAbstractParameters.java
index f8003cfe..b568d7fb 100644
--- a/common-parameters/src/test/java/org/onap/policy/common/parameters/TestAbstractParameters.java
+++ b/common-parameters/src/test/java/org/onap/policy/common/parameters/TestAbstractParameters.java
@@ -20,16 +20,16 @@
package org.onap.policy.common.parameters;
-import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
import org.junit.Test;
+import org.onap.policy.common.parameters.testclasses.EmptyParameterGroup;
public class TestAbstractParameters {
@Test
public void testAbstractParameters() {
- final LegalParameters parameters = new LegalParameters();
- assertEquals(LegalParameters.class, parameters.getParameterClass());
- assertEquals("org.onap.policy.common.parameters.LegalParameters", parameters.getParameterClassName());
+ final EmptyParameterGroup parameters = new EmptyParameterGroup("Empty Group");
+ assertTrue(parameters.isValid());
}
}
diff --git a/common-parameters/src/test/java/org/onap/policy/common/parameters/TestJsonInput.java b/common-parameters/src/test/java/org/onap/policy/common/parameters/TestJsonInput.java
new file mode 100644
index 00000000..6d0aae5e
--- /dev/null
+++ b/common-parameters/src/test/java/org/onap/policy/common/parameters/TestJsonInput.java
@@ -0,0 +1,62 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2018 Ericsson. 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.common.parameters;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+import java.io.FileReader;
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+
+import org.junit.Test;
+import org.onap.policy.common.parameters.testclasses.TestParametersL00;
+
+import com.google.gson.Gson;
+import com.google.gson.GsonBuilder;
+
+public class TestJsonInput {
+
+ @Test
+ public void testJsonInput() throws IOException {
+ TestParametersL00 testParameterGroup = null;
+
+ // Read the parameters
+ try {
+ // Read the parameters from JSON using Gson
+ final Gson gson = new GsonBuilder().create();
+ testParameterGroup = gson.fromJson(new FileReader("src/test/resources/parameters/TestParameters.json"), TestParametersL00.class);
+ } catch (final Exception e) {
+ fail("test should not throw an exception here: " + e.getMessage());
+ }
+
+ GroupValidationResult validationResult = testParameterGroup.validate();
+ assertTrue(validationResult.isValid());
+ assertEquals("l00NameFromFile", testParameterGroup.getName());
+
+ String expectedResult = new String(Files.readAllBytes(
+ Paths.get("src/test/resources/expectedValidationResults/TestJsonYamlValidationResult.txt")))
+ .replaceAll("\\s+", "");
+ assertEquals(expectedResult, validationResult.getResult("", " ", true).replaceAll("\\s+", ""));
+ }
+}
diff --git a/common-parameters/src/test/java/org/onap/policy/common/parameters/TestParameterService.java b/common-parameters/src/test/java/org/onap/policy/common/parameters/TestParameterService.java
index efd3e304..0b7e46ca 100644
--- a/common-parameters/src/test/java/org/onap/policy/common/parameters/TestParameterService.java
+++ b/common-parameters/src/test/java/org/onap/policy/common/parameters/TestParameterService.java
@@ -27,6 +27,9 @@ import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import org.junit.Test;
+import org.onap.policy.common.parameters.ParameterRuntimeException;
+import org.onap.policy.common.parameters.ParameterService;
+import org.onap.policy.common.parameters.testclasses.EmptyParameterGroup;
public class TestParameterService {
@@ -34,47 +37,57 @@ public class TestParameterService {
public void testParameterService() {
ParameterService.clear();
- assertFalse(ParameterService.existsParameters(LegalParameters.class));
+ assertFalse(ParameterService.contains("EmptyGroup"));
try {
- ParameterService.getParameters(LegalParameters.class);
+ ParameterService.get("EmptyGroup");
fail("Test should throw an exception here");
} catch (final Exception e) {
- assertEquals(
- "Parameters for org.onap.policy.common.parameters.LegalParameters not found in parameter service",
- e.getMessage());
+ assertEquals("\"EmptyGroup\" not found in parameter service", e.getMessage());
}
- ParameterService.registerParameters(new LegalParameters());
- assertTrue(ParameterService.existsParameters(LegalParameters.class));
- assertNotNull(ParameterService.getParameters(LegalParameters.class));
+ ParameterService.register(new EmptyParameterGroup("Empty Group"));
+ assertTrue(ParameterService.contains("Empty Group"));
+ assertNotNull(ParameterService.get("Empty Group"));
+
+ try {
+ ParameterService.register(new EmptyParameterGroup("Empty Group"));
+ fail("this test should throw an exception");
+ }
+ catch (ParameterRuntimeException e) {
+ assertEquals("\"Empty Group\" already registered in parameter service", e.getMessage());
+ }
+
+ ParameterService.deregister("Empty Group");
+ assertFalse(ParameterService.contains("Empty Group"));
- ParameterService.deregisterParameters(LegalParameters.class);
+ try {
+ ParameterService.deregister("Empty Group");
+ fail("this test should throw an exception");
+ }
+ catch (ParameterRuntimeException e) {
+ assertEquals("\"Empty Group\" not registered in parameter service", e.getMessage());
+ }
- assertFalse(ParameterService.existsParameters(LegalParameters.class));
try {
- ParameterService.getParameters(LegalParameters.class);
+ ParameterService.get("Empty Group");
fail("Test should throw an exception here");
} catch (final Exception e) {
- assertEquals(
- "Parameters for org.onap.policy.common.parameters.LegalParameters not found in parameter service",
- e.getMessage());
+ assertEquals("\"Empty Group\" not found in parameter service", e.getMessage());
}
- ParameterService.registerParameters(new LegalParameters());
- assertTrue(ParameterService.existsParameters(LegalParameters.class));
- assertNotNull(ParameterService.getParameters(LegalParameters.class));
+ ParameterService.register(new EmptyParameterGroup("Empty Group"));
+ assertTrue(ParameterService.contains("Empty Group"));
+ assertNotNull(ParameterService.get("Empty Group"));
assertEquals(1, ParameterService.getAll().size());
ParameterService.clear();
assertEquals(0, ParameterService.getAll().size());
- assertFalse(ParameterService.existsParameters(LegalParameters.class));
+ assertFalse(ParameterService.contains("Empty Group"));
try {
- ParameterService.getParameters(LegalParameters.class);
+ ParameterService.get("Empty Group");
fail("Test should throw an exception here");
} catch (final Exception e) {
- assertEquals(
- "Parameters for org.onap.policy.common.parameters.LegalParameters not found in parameter service",
- e.getMessage());
+ assertEquals("\"Empty Group\" not found in parameter service", e.getMessage());
}
}
}
diff --git a/common-parameters/src/test/java/org/onap/policy/common/parameters/TestValidation.java b/common-parameters/src/test/java/org/onap/policy/common/parameters/TestValidation.java
new file mode 100644
index 00000000..2ca24a05
--- /dev/null
+++ b/common-parameters/src/test/java/org/onap/policy/common/parameters/TestValidation.java
@@ -0,0 +1,183 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2018 Ericsson. 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.common.parameters;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
+
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+
+import org.junit.Test;
+import org.onap.policy.common.parameters.testclasses.TestParametersL00;
+
+public class TestValidation {
+ @Test
+ public void testValidationOk() throws IOException {
+ TestParametersL00 l0Parameters = new TestParametersL00("l0Parameters");
+
+ GroupValidationResult validationResult = l0Parameters.validate();
+ assertTrue(validationResult.isValid());
+ assertNull(validationResult.getResult());
+ assertEquals(l0Parameters, validationResult.getParameterGroup());
+ assertEquals(l0Parameters.getName(), validationResult.getName());
+
+ String expectedResult = new String(Files.readAllBytes(
+ Paths.get("src/test/resources/expectedValidationResults/TestParametersL0_0_OK.txt")))
+ .replaceAll("\\s+", "");
+ assertEquals(expectedResult, validationResult.getResult("", " ", true).replaceAll("\\s+", ""));
+ }
+
+ @Test
+ public void testValidationObservation() throws IOException {
+ TestParametersL00 l0Parameters = new TestParametersL00("l0Parameters");
+
+ l0Parameters.triggerValidationStatus(ValidationStatus.OBSERVATION, 3);
+
+ String expectedResult = new String(Files.readAllBytes(
+ Paths.get("src/test/resources/expectedValidationResults/TestParametersL0_3_Observation.txt")))
+ .replaceAll("\\s+", "");
+
+ GroupValidationResult validationResult = l0Parameters.validate();
+ assertTrue(validationResult.isValid());
+ assertEquals(expectedResult, validationResult.getResult().replaceAll("\\s+", ""));
+
+ l0Parameters.triggerValidationStatus(ValidationStatus.CLEAN, 3);
+ l0Parameters.triggerValidationStatus(ValidationStatus.OBSERVATION, 2);
+
+ expectedResult = new String(Files.readAllBytes(
+ Paths.get("src/test/resources/expectedValidationResults/TestParametersL0_2_Observation.txt")))
+ .replaceAll("\\s+", "");
+
+ validationResult = l0Parameters.validate();
+ assertTrue(validationResult.isValid());
+ assertEquals(expectedResult, validationResult.getResult().replaceAll("\\s+", ""));
+
+ l0Parameters.triggerValidationStatus(ValidationStatus.CLEAN, 3);
+ l0Parameters.triggerValidationStatus(ValidationStatus.OBSERVATION, 1);
+
+ expectedResult = new String(Files.readAllBytes(
+ Paths.get("src/test/resources/expectedValidationResults/TestParametersL0_1_Observation.txt")))
+ .replaceAll("\\s+", "");
+
+ validationResult = l0Parameters.validate();
+ assertTrue(validationResult.isValid());
+ assertEquals(expectedResult, validationResult.getResult().replaceAll("\\s+", ""));
+
+ l0Parameters.triggerValidationStatus(ValidationStatus.CLEAN, 3);
+ l0Parameters.triggerValidationStatus(ValidationStatus.OBSERVATION, 0);
+
+ validationResult = l0Parameters.validate();
+ assertTrue(validationResult.isValid());
+ assertEquals(null, validationResult.getResult());
+ }
+
+ @Test
+ public void testValidationWarning() throws IOException {
+ TestParametersL00 l0Parameters = new TestParametersL00("l0Parameters");
+
+ l0Parameters.triggerValidationStatus(ValidationStatus.WARNING, 3);
+
+ String expectedResult = new String(Files.readAllBytes(
+ Paths.get("src/test/resources/expectedValidationResults/TestParametersL0_3_Warning.txt")))
+ .replaceAll("\\s+", "");
+
+ GroupValidationResult validationResult = l0Parameters.validate();
+ assertTrue(validationResult.isValid());
+ assertEquals(expectedResult, validationResult.getResult().replaceAll("\\s+", ""));
+
+ l0Parameters.triggerValidationStatus(ValidationStatus.CLEAN, 3);
+ l0Parameters.triggerValidationStatus(ValidationStatus.WARNING, 2);
+
+ expectedResult = new String(Files.readAllBytes(
+ Paths.get("src/test/resources/expectedValidationResults/TestParametersL0_2_Warning.txt")))
+ .replaceAll("\\s+", "");
+
+ validationResult = l0Parameters.validate();
+ assertTrue(validationResult.isValid());
+ assertEquals(expectedResult, validationResult.getResult().replaceAll("\\s+", ""));
+
+ l0Parameters.triggerValidationStatus(ValidationStatus.CLEAN, 3);
+ l0Parameters.triggerValidationStatus(ValidationStatus.WARNING, 1);
+
+ expectedResult = new String(Files.readAllBytes(
+ Paths.get("src/test/resources/expectedValidationResults/TestParametersL0_1_Warning.txt")))
+ .replaceAll("\\s+", "");
+
+ validationResult = l0Parameters.validate();
+ assertTrue(validationResult.isValid());
+ assertEquals(expectedResult, validationResult.getResult().replaceAll("\\s+", ""));
+
+ l0Parameters.triggerValidationStatus(ValidationStatus.CLEAN, 3);
+ l0Parameters.triggerValidationStatus(ValidationStatus.WARNING, 0);
+
+ validationResult = l0Parameters.validate();
+ assertTrue(validationResult.isValid());
+ assertEquals(null, validationResult.getResult());
+ }
+
+ @Test
+ public void testValidationInvalid() throws IOException {
+ TestParametersL00 l0Parameters = new TestParametersL00("l0Parameters");
+
+ l0Parameters.triggerValidationStatus(ValidationStatus.INVALID, 3);
+
+ String expectedResult = new String(Files.readAllBytes(
+ Paths.get("src/test/resources/expectedValidationResults/TestParametersL0_3_Invalid.txt")))
+ .replaceAll("\\s+", "");
+
+ GroupValidationResult validationResult = l0Parameters.validate();
+ assertFalse(validationResult.isValid());
+ assertEquals(expectedResult, validationResult.getResult().replaceAll("\\s+", ""));
+
+ l0Parameters.triggerValidationStatus(ValidationStatus.CLEAN, 3);
+ l0Parameters.triggerValidationStatus(ValidationStatus.INVALID, 2);
+
+ expectedResult = new String(Files.readAllBytes(
+ Paths.get("src/test/resources/expectedValidationResults/TestParametersL0_2_Invalid.txt")))
+ .replaceAll("\\s+", "");
+
+ validationResult = l0Parameters.validate();
+ assertFalse(validationResult.isValid());
+ assertEquals(expectedResult, validationResult.getResult().replaceAll("\\s+", ""));
+
+ l0Parameters.triggerValidationStatus(ValidationStatus.CLEAN, 3);
+ l0Parameters.triggerValidationStatus(ValidationStatus.INVALID, 1);
+
+ expectedResult = new String(Files.readAllBytes(
+ Paths.get("src/test/resources/expectedValidationResults/TestParametersL0_1_Invalid.txt")))
+ .replaceAll("\\s+", "");
+
+ validationResult = l0Parameters.validate();
+ assertFalse(validationResult.isValid());
+ assertEquals(expectedResult, validationResult.getResult().replaceAll("\\s+", ""));
+
+ l0Parameters.triggerValidationStatus(ValidationStatus.CLEAN, 3);
+ l0Parameters.triggerValidationStatus(ValidationStatus.INVALID, 0);
+
+ validationResult = l0Parameters.validate();
+ assertTrue(validationResult.isValid());
+ assertEquals(null, validationResult.getResult());
+ }
+}
diff --git a/common-parameters/src/test/java/org/onap/policy/common/parameters/TestValidationErrors.java b/common-parameters/src/test/java/org/onap/policy/common/parameters/TestValidationErrors.java
new file mode 100644
index 00000000..6b781472
--- /dev/null
+++ b/common-parameters/src/test/java/org/onap/policy/common/parameters/TestValidationErrors.java
@@ -0,0 +1,105 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2018 Ericsson. 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.common.parameters;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+import org.junit.Test;
+import org.onap.policy.common.parameters.testclasses.ParameterGroupWithArray;
+import org.onap.policy.common.parameters.testclasses.ParameterGroupWithCollection;
+import org.onap.policy.common.parameters.testclasses.ParameterGroupWithIllegalMapKey;
+import org.onap.policy.common.parameters.testclasses.ParameterGroupWithIllegalMapValue;
+import org.onap.policy.common.parameters.testclasses.ParameterGroupWithNullCollection;
+import org.onap.policy.common.parameters.testclasses.ParameterGroupWithNullMapValue;
+import org.onap.policy.common.parameters.testclasses.ParameterGroupWithParameterGroupCollection;
+
+public class TestValidationErrors {
+ @Test
+ public void testBadArrayValidation() {
+ ParameterGroupWithArray groupWithArray = new ParameterGroupWithArray("Illegal Array Group");
+ assertTrue(groupWithArray.isValid());
+ }
+
+ @Test
+ public void testCollectionValidation() {
+ ParameterGroupWithCollection legalCollection = new ParameterGroupWithCollection("Legal Collection");
+ assertTrue(legalCollection.isValid());
+
+ ParameterGroupWithParameterGroupCollection illegalCollection = new ParameterGroupWithParameterGroupCollection(
+ "Illegal Collection");
+ try {
+ illegalCollection.isValid();
+ fail("test should throw an exception");
+ } catch (ParameterRuntimeException e) {
+ assertEquals("collection parameter \"parameterGroupArrayList\" is illegal,"
+ + " parameter groups are not allowed as collection members", e.getMessage());
+ }
+ }
+
+ @Test
+ public void testNullCollection() {
+ ParameterGroupWithNullCollection nullCollection = new ParameterGroupWithNullCollection("Null Collection");
+
+ try {
+ nullCollection.isValid();
+ fail("test should throw an exception");
+ } catch (ParameterRuntimeException e) {
+ assertEquals("collection parameter \"nullList\" is null", e.getMessage());
+ }
+ }
+
+ @Test
+ public void testMapNullValueValidation() {
+ ParameterGroupWithNullMapValue nullMap = new ParameterGroupWithNullMapValue("Null Map value");
+ try {
+ nullMap.isValid();
+ fail("test should throw an exception");
+ } catch (ParameterRuntimeException e) {
+ assertEquals("map parameter \"nullMap\" is null", e.getMessage());
+ }
+ }
+
+ @Test
+ public void testBadMapKeyValidation() {
+ ParameterGroupWithIllegalMapKey illegalMap = new ParameterGroupWithIllegalMapKey("Illegal Map");
+ try {
+ illegalMap.isValid();
+ fail("test should throw an exception");
+ } catch (ParameterRuntimeException e) {
+ assertEquals("map entry is not a parameter group keyed by a string, key \"1\" "
+ + "in map \"badMap\" is not a string", e.getMessage());
+ }
+ }
+
+ @Test
+ public void testBadMapValueValidation() {
+ ParameterGroupWithIllegalMapValue illegalMap = new ParameterGroupWithIllegalMapValue("Illegal Map");
+ try {
+ illegalMap.isValid();
+ fail("test should throw an exception");
+ } catch (ParameterRuntimeException e) {
+ assertEquals("map entry is not a parameter group keyed by a string, value \"1\" in "
+ + "map \"intMap\" is not a parameter group", e.getMessage());
+ }
+ }
+}
diff --git a/common-parameters/src/test/java/org/onap/policy/common/parameters/TestValidationResults.java b/common-parameters/src/test/java/org/onap/policy/common/parameters/TestValidationResults.java
new file mode 100644
index 00000000..8f22765b
--- /dev/null
+++ b/common-parameters/src/test/java/org/onap/policy/common/parameters/TestValidationResults.java
@@ -0,0 +1,147 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2018 Ericsson. 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.common.parameters;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+import java.util.LinkedHashMap;
+import java.util.Map;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.onap.policy.common.parameters.testclasses.TestParametersL10;
+import org.onap.policy.common.parameters.testclasses.TestParametersLGeneric;
+
+public class TestValidationResults {
+ private Map<String, ParameterGroup> pgMap = new LinkedHashMap<>();
+ private ParameterGroup pg = new TestParametersL10("pg");
+
+ @Before
+ public void initMap() {
+ pgMap.put("entry0", new TestParametersLGeneric("entry0"));
+ }
+
+ @Test
+ public void testGroupMapValidationResult() throws NoSuchFieldException, SecurityException {
+ GroupMapValidationResult result = new GroupMapValidationResult(this.getClass().getDeclaredField("pgMap"),
+ pgMap);
+
+ assertTrue(result.isValid());
+ assertEquals("pgMap", result.getName());
+
+ result.setResult(ValidationStatus.OBSERVATION);
+ assertTrue(result.isValid());
+ assertEquals(ValidationStatus.OBSERVATION, result.getStatus());
+
+ // Once the status is stepped, it can't be reset back because it is the status of map members
+ result.setResult(ValidationStatus.CLEAN);
+ assertTrue(result.isValid());
+ assertEquals(ValidationStatus.OBSERVATION, result.getStatus());
+
+ result.setResult(ValidationStatus.OBSERVATION, "Something was observed");
+ assertTrue(result.isValid());
+ assertEquals(ValidationStatus.OBSERVATION, result.getStatus());
+ assertEquals("parameter group map \"pgMap\" OBSERVATION, Something was observed", result.getResult().trim());
+
+ result.setResult("entry0", new GroupValidationResult(pgMap.get("entry0")));
+ assertTrue(result.isValid());
+ assertEquals(ValidationStatus.OBSERVATION, result.getStatus());
+ assertEquals("parameter group map \"pgMap\" OBSERVATION, Something was observed", result.getResult().trim());
+
+ try {
+ result.setResult("nonExistantEntry", new GroupValidationResult(pgMap.get("entry0")));
+ fail("test shold throw an exception here");
+ } catch (Exception e) {
+ assertEquals("no entry with name \"nonExistantEntry\" exists", e.getMessage());
+ }
+ }
+
+ @Test
+ public void testGroupValidationResult() throws NoSuchFieldException, SecurityException {
+ GroupValidationResult result = new GroupValidationResult(pg);
+
+ assertTrue(result.isValid());
+ assertEquals(pg, result.getParameterGroup());
+ assertEquals("pg", result.getName());
+
+ result.setResult(ValidationStatus.OBSERVATION);
+ assertTrue(result.isValid());
+ assertEquals(ValidationStatus.OBSERVATION, result.getStatus());
+
+ // Once the status is stepped, it can't be reset back because it is the status of map members
+ result.setResult(ValidationStatus.CLEAN);
+ assertTrue(result.isValid());
+ assertEquals(ValidationStatus.OBSERVATION, result.getStatus());
+
+ result.setResult(ValidationStatus.OBSERVATION, "Something was observed");
+ assertTrue(result.isValid());
+ assertEquals(ValidationStatus.OBSERVATION, result.getStatus());
+ assertEquals("parameter group \"pg\" type \"org.onap.policy.common.parameters.testclasses.TestParametersL10\""
+ + " OBSERVATION, Something was observed", result.getResult().trim());
+
+ try {
+ result.setResult("nonExistantParameter", ValidationStatus.OBSERVATION, "Something was observed");
+ fail("test shold throw an exception here");
+ } catch (Exception e) {
+ assertEquals("no regular parameter field exists for parameter: nonExistantParameter", e.getMessage());
+ }
+
+ try {
+ result.setResult("l10LGenericNestedMap", ValidationStatus.OBSERVATION, "Something was observed");
+ fail("test shold throw an exception here");
+ } catch (Exception e) {
+ assertEquals("parameter not a regular parameter: l10LGenericNestedMap", e.getMessage());
+ }
+
+ try {
+ result.setResult("nonExistantParameter", new GroupValidationResult(pg));
+ fail("test shold throw an exception here");
+ } catch (Exception e) {
+ assertEquals("no nested parameter field exists for parameter: nonExistantParameter", e.getMessage());
+ }
+
+ try {
+ result.setResult("l10IntField", new GroupValidationResult(pg));
+ fail("test shold throw an exception here");
+ } catch (Exception e) {
+ assertEquals("parameter is not a nested group parameter: l10IntField", e.getMessage());
+ }
+
+ GroupMapValidationResult groupMapResult = new GroupMapValidationResult(
+ this.getClass().getDeclaredField("pgMap"), pgMap);
+
+ try {
+ result.setResult("nonExistantParameter", "entry0", groupMapResult);
+ fail("test shold throw an exception here");
+ } catch (Exception e) {
+ assertEquals("no group map parameter field exists for parameter: nonExistantParameter", e.getMessage());
+ }
+
+ try {
+ result.setResult("l10IntField", "entry0", groupMapResult);
+ fail("test shold throw an exception here");
+ } catch (Exception e) {
+ assertEquals("parameter is not a nested group map parameter: l10IntField", e.getMessage());
+ }
+ }
+}
diff --git a/common-parameters/src/test/java/org/onap/policy/common/parameters/TestYamlInput.java b/common-parameters/src/test/java/org/onap/policy/common/parameters/TestYamlInput.java
new file mode 100644
index 00000000..7d803525
--- /dev/null
+++ b/common-parameters/src/test/java/org/onap/policy/common/parameters/TestYamlInput.java
@@ -0,0 +1,59 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2018 Ericsson. 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.common.parameters;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+import java.io.FileReader;
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+
+import org.junit.Test;
+import org.onap.policy.common.parameters.testclasses.TestParametersL00;
+import org.yaml.snakeyaml.Yaml;
+
+public class TestYamlInput {
+ @Test
+ public void testYamlInput() throws IOException {
+ TestParametersL00 testParameterGroup = null;
+
+ // Read the parameters
+ try {
+ // Read the parameters from JSON using Gson
+ final Yaml yaml = new Yaml();
+ testParameterGroup = yaml.loadAs(new FileReader("src/test/resources/parameters/TestParameters.yaml"), TestParametersL00.class);
+ } catch (final Exception e) {
+ fail("test should not throw an exception here: " + e.getMessage());
+ }
+
+ GroupValidationResult validationResult = testParameterGroup.validate();
+ assertTrue(validationResult.isValid());
+ assertEquals("l00NameFromFile", testParameterGroup.getName());
+
+ String expectedResult = new String(Files.readAllBytes(
+ Paths.get("src/test/resources/expectedValidationResults/TestJsonYamlValidationResult.txt")))
+ .replaceAll("\\s+", "");
+ assertEquals(expectedResult, validationResult.getResult("", " ", true).replaceAll("\\s+", ""));
+ }
+}
diff --git a/common-parameters/src/main/java/org/onap/policy/common/parameters/ParameterValidator.java b/common-parameters/src/test/java/org/onap/policy/common/parameters/testclasses/EmptyParameterGroup.java
index 0d718267..f545ce65 100644
--- a/common-parameters/src/main/java/org/onap/policy/common/parameters/ParameterValidator.java
+++ b/common-parameters/src/test/java/org/onap/policy/common/parameters/testclasses/EmptyParameterGroup.java
@@ -18,19 +18,25 @@
* ============LICENSE_END=========================================================
*/
-package org.onap.policy.common.parameters;
+package org.onap.policy.common.parameters.testclasses;
-/**
- * This interface is implemented by ONAP PF parameter classes so that they can be validated.
- *
- * @author Liam Fallon (liam.fallon@ericsson.com)
- */
-public interface ParameterValidator {
- /**
- * Validate a parameter java bean, if the parameter bean is valid, an empty string is returned,
- * otherwise the string gives details of the invalid parameters.
- *
- * @return the string with validation errors
- */
- String validate();
+import org.onap.policy.common.parameters.ParameterGroup;
+import org.onap.policy.common.parameters.GroupValidationResult;
+
+public class EmptyParameterGroup implements ParameterGroup {
+ private String name;
+
+ public EmptyParameterGroup(final String name) {
+ this.name = name;
+ }
+
+ @Override
+ public String getName() {
+ return name;
+ }
+
+ @Override
+ public GroupValidationResult validate() {
+ return new GroupValidationResult(this);
+ }
}
diff --git a/common-parameters/src/test/java/org/onap/policy/common/parameters/testclasses/ParameterGroupWithArray.java b/common-parameters/src/test/java/org/onap/policy/common/parameters/testclasses/ParameterGroupWithArray.java
new file mode 100644
index 00000000..cdab1272
--- /dev/null
+++ b/common-parameters/src/test/java/org/onap/policy/common/parameters/testclasses/ParameterGroupWithArray.java
@@ -0,0 +1,47 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2018 Ericsson. 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.common.parameters.testclasses;
+
+import org.onap.policy.common.parameters.ParameterGroup;
+import org.onap.policy.common.parameters.GroupValidationResult;
+
+public class ParameterGroupWithArray implements ParameterGroup {
+ private String name;
+ private int[] intArray = {1, 2, 3};
+
+ public ParameterGroupWithArray(final String name) {
+ this.name = name;
+ }
+
+ public int[] getIntArray() {
+ return intArray;
+ }
+
+ @Override
+ public String getName() {
+ return name;
+ }
+
+ @Override
+ public GroupValidationResult validate() {
+ return new GroupValidationResult(this);
+ }
+}
diff --git a/common-parameters/src/test/java/org/onap/policy/common/parameters/testclasses/ParameterGroupWithCollection.java b/common-parameters/src/test/java/org/onap/policy/common/parameters/testclasses/ParameterGroupWithCollection.java
new file mode 100644
index 00000000..0f993099
--- /dev/null
+++ b/common-parameters/src/test/java/org/onap/policy/common/parameters/testclasses/ParameterGroupWithCollection.java
@@ -0,0 +1,58 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2018 Ericsson. 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.common.parameters.testclasses;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.onap.policy.common.parameters.ParameterGroup;
+import org.onap.policy.common.parameters.GroupValidationResult;
+
+public class ParameterGroupWithCollection implements ParameterGroup {
+ private String name;
+ private List<Integer> intArrayList = new ArrayList<>();
+
+ /**
+ * Create a test parameter group.
+ * @param name the parameter group name
+ */
+ public ParameterGroupWithCollection(final String name) {
+ this.name = name;
+
+ intArrayList.add(1);
+ intArrayList.add(2);
+ intArrayList.add(3);
+ }
+
+ public List<Integer> getIntArrayList() {
+ return intArrayList;
+ }
+
+ @Override
+ public String getName() {
+ return name;
+ }
+
+ @Override
+ public GroupValidationResult validate() {
+ return new GroupValidationResult(this);
+ }
+}
diff --git a/common-parameters/src/test/java/org/onap/policy/common/parameters/testclasses/ParameterGroupWithIllegalMapKey.java b/common-parameters/src/test/java/org/onap/policy/common/parameters/testclasses/ParameterGroupWithIllegalMapKey.java
new file mode 100644
index 00000000..3de3270e
--- /dev/null
+++ b/common-parameters/src/test/java/org/onap/policy/common/parameters/testclasses/ParameterGroupWithIllegalMapKey.java
@@ -0,0 +1,59 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2018 Ericsson. 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.common.parameters.testclasses;
+
+import java.util.LinkedHashMap;
+import java.util.Map;
+
+import org.onap.policy.common.parameters.ParameterGroup;
+import org.onap.policy.common.parameters.GroupValidationResult;
+
+public class ParameterGroupWithIllegalMapKey implements ParameterGroup {
+ private String name;
+ private Map<Integer, ParameterGroup> badMap = new LinkedHashMap<>();
+
+ /**
+ * Create a test parameter group.
+ * @param name the parameter group name
+ */
+ public ParameterGroupWithIllegalMapKey(final String name) {
+ this.name = name;
+
+ badMap.put(1, new TestParametersLGeneric("One"));
+ badMap.put(2, new TestParametersLGeneric("Two"));
+ badMap.put(3, new TestParametersLGeneric("Three"));
+ }
+
+ public Map<Integer, ParameterGroup> getBadMap() {
+ return badMap;
+ }
+
+ @Override
+ public String getName() {
+ return name;
+ }
+
+ @Override
+ public GroupValidationResult validate() {
+ return new GroupValidationResult(this);
+ }
+
+}
diff --git a/common-parameters/src/test/java/org/onap/policy/common/parameters/testclasses/ParameterGroupWithIllegalMapValue.java b/common-parameters/src/test/java/org/onap/policy/common/parameters/testclasses/ParameterGroupWithIllegalMapValue.java
new file mode 100644
index 00000000..8eb697a4
--- /dev/null
+++ b/common-parameters/src/test/java/org/onap/policy/common/parameters/testclasses/ParameterGroupWithIllegalMapValue.java
@@ -0,0 +1,58 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2018 Ericsson. 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.common.parameters.testclasses;
+
+import java.util.LinkedHashMap;
+import java.util.Map;
+
+import org.onap.policy.common.parameters.ParameterGroup;
+import org.onap.policy.common.parameters.GroupValidationResult;
+
+public class ParameterGroupWithIllegalMapValue implements ParameterGroup {
+ private String name;
+ private Map<String, Integer> intMap = new LinkedHashMap<>();
+
+ /**
+ * Create a test parameter group.
+ * @param name the parameter group name
+ */
+ public ParameterGroupWithIllegalMapValue(final String name) {
+ this.name = name;
+
+ intMap.put("One", 1);
+ intMap.put("Two", 2);
+ intMap.put("Three", 3);
+ }
+
+ public Map<String, Integer> getIntMap() {
+ return intMap;
+ }
+
+ @Override
+ public String getName() {
+ return name;
+ }
+
+ @Override
+ public GroupValidationResult validate() {
+ return new GroupValidationResult(this);
+ }
+}
diff --git a/common-parameters/src/test/java/org/onap/policy/common/parameters/testclasses/ParameterGroupWithNullCollection.java b/common-parameters/src/test/java/org/onap/policy/common/parameters/testclasses/ParameterGroupWithNullCollection.java
new file mode 100644
index 00000000..37399da3
--- /dev/null
+++ b/common-parameters/src/test/java/org/onap/policy/common/parameters/testclasses/ParameterGroupWithNullCollection.java
@@ -0,0 +1,53 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2018 Ericsson. 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.common.parameters.testclasses;
+
+import java.util.List;
+
+import org.onap.policy.common.parameters.ParameterGroup;
+import org.onap.policy.common.parameters.GroupValidationResult;
+
+public class ParameterGroupWithNullCollection implements ParameterGroup {
+ private String name;
+ private List<Integer> nullList = null;
+
+ /**
+ * Create a test parameter group.
+ * @param name the parameter group name
+ */
+ public ParameterGroupWithNullCollection(final String name) {
+ this.name = name;
+ }
+
+ public List<Integer> getNullList() {
+ return nullList;
+ }
+
+ @Override
+ public String getName() {
+ return name;
+ }
+
+ @Override
+ public GroupValidationResult validate() {
+ return new GroupValidationResult(this);
+ }
+}
diff --git a/common-parameters/src/test/java/org/onap/policy/common/parameters/testclasses/ParameterGroupWithNullMapValue.java b/common-parameters/src/test/java/org/onap/policy/common/parameters/testclasses/ParameterGroupWithNullMapValue.java
new file mode 100644
index 00000000..80f55355
--- /dev/null
+++ b/common-parameters/src/test/java/org/onap/policy/common/parameters/testclasses/ParameterGroupWithNullMapValue.java
@@ -0,0 +1,53 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2018 Ericsson. 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.common.parameters.testclasses;
+
+import java.util.Map;
+
+import org.onap.policy.common.parameters.ParameterGroup;
+import org.onap.policy.common.parameters.GroupValidationResult;
+
+public class ParameterGroupWithNullMapValue implements ParameterGroup {
+ private String name;
+ private Map<String, Integer> nullMap = null;
+
+ /**
+ * Create a test parameter group.
+ * @param name the parameter group name
+ */
+ public ParameterGroupWithNullMapValue(final String name) {
+ this.name = name;
+ }
+
+ public Map<String, Integer> getNullMap() {
+ return nullMap;
+ }
+
+ @Override
+ public String getName() {
+ return name;
+ }
+
+ @Override
+ public GroupValidationResult validate() {
+ return new GroupValidationResult(this);
+ }
+}
diff --git a/common-parameters/src/test/java/org/onap/policy/common/parameters/testclasses/ParameterGroupWithParameterGroupCollection.java b/common-parameters/src/test/java/org/onap/policy/common/parameters/testclasses/ParameterGroupWithParameterGroupCollection.java
new file mode 100644
index 00000000..e7d1de75
--- /dev/null
+++ b/common-parameters/src/test/java/org/onap/policy/common/parameters/testclasses/ParameterGroupWithParameterGroupCollection.java
@@ -0,0 +1,58 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2018 Ericsson. 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.common.parameters.testclasses;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.onap.policy.common.parameters.ParameterGroup;
+import org.onap.policy.common.parameters.GroupValidationResult;
+
+public class ParameterGroupWithParameterGroupCollection implements ParameterGroup {
+ private String name;
+ private List<ParameterGroup> parameterGroupArrayList = new ArrayList<>();
+
+ /**
+ * Create a test parameter group.
+ * @param name the parameter group name
+ */
+ public ParameterGroupWithParameterGroupCollection(final String name) {
+ this.name = name;
+
+ parameterGroupArrayList.add(new TestParametersLGeneric("Generic0"));
+ parameterGroupArrayList.add(new TestParametersLGeneric("Generic1"));
+ parameterGroupArrayList.add(new TestParametersLGeneric("Generic2"));
+ }
+
+ public List<ParameterGroup> getIntArrayList() {
+ return parameterGroupArrayList;
+ }
+
+ @Override
+ public String getName() {
+ return name;
+ }
+
+ @Override
+ public GroupValidationResult validate() {
+ return new GroupValidationResult(this);
+ }
+}
diff --git a/common-parameters/src/test/java/org/onap/policy/common/parameters/testclasses/TestParametersL00.java b/common-parameters/src/test/java/org/onap/policy/common/parameters/testclasses/TestParametersL00.java
new file mode 100644
index 00000000..6b8460cd
--- /dev/null
+++ b/common-parameters/src/test/java/org/onap/policy/common/parameters/testclasses/TestParametersL00.java
@@ -0,0 +1,177 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2018 Ericsson. 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.common.parameters.testclasses;
+
+import java.util.LinkedHashMap;
+import java.util.Map;
+import java.util.Map.Entry;
+
+import org.onap.policy.common.parameters.ParameterGroup;
+import org.onap.policy.common.parameters.GroupValidationResult;
+import org.onap.policy.common.parameters.ParameterConstants;
+import org.onap.policy.common.parameters.ValidationStatus;
+
+public class TestParametersL00 implements ParameterGroup {
+ private String name;
+ private int l00IntField = 0;
+ private String l00StringField = "Legal " + this.getClass().getCanonicalName();
+ private TestParametersL10 l00L10Nested = new TestParametersL10("l00L10Nested");
+ private TestParametersLGeneric l00LGenericNested = new TestParametersLGeneric("l00LGenericNested");
+ private Map<String, TestParametersLGeneric> l00LGenericNestedMap = new LinkedHashMap<>();
+
+ /**
+ * Default constructor
+ */
+ public TestParametersL00() {
+ }
+
+ /**
+ * Create a test parameter group.
+ *
+ * @param name the parameter group name
+ */
+ public TestParametersL00(final String name) {
+ this.name = name;
+
+ TestParametersLGeneric l00LGenericNestedMapVal0 = new TestParametersLGeneric("l00LGenericNestedMapVal0");
+ l00LGenericNestedMap.put(l00LGenericNestedMapVal0.getName(), l00LGenericNestedMapVal0);
+ TestParametersLGeneric l00LGenericNestedMapVal1 = new TestParametersLGeneric("l00LGenericNestedMapVal1");
+ l00LGenericNestedMap.put(l00LGenericNestedMapVal1.getName(), l00LGenericNestedMapVal1);
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public void setL00IntField(int l00IntField) {
+ this.l00IntField = l00IntField;
+ }
+
+ public void setL00StringField(String l00StringField) {
+ this.l00StringField = l00StringField;
+ }
+
+ public void setL00L10Nested(TestParametersL10 l00l10Nested) {
+ l00L10Nested = l00l10Nested;
+ }
+
+ public void setL00LGenericNested(TestParametersLGeneric l00lGenericNested) {
+ l00LGenericNested = l00lGenericNested;
+ }
+
+ public void setL00LGenericNestedMap(Map<String, TestParametersLGeneric> l00lGenericNestedMap) {
+ l00LGenericNestedMap = l00lGenericNestedMap;
+ }
+
+ /**
+ * Trigger a validation message.
+ *
+ * @param triggerStatus Validation status to trigger
+ * @param level Number of levels to recurse before stopping
+ */
+ public void triggerValidationStatus(final ValidationStatus triggerStatus, int level) {
+ if (level == 0) {
+ return;
+ } else {
+ level--;
+ }
+
+ switch (triggerStatus) {
+ case CLEAN:
+ l00StringField = "Legal " + this.getClass().getCanonicalName();
+ l00IntField = 0;
+ break;
+ case OBSERVATION:
+ l00StringField = "aString";
+ l00IntField = 2;
+ break;
+ case WARNING:
+ l00StringField = "l00StringField";
+ l00IntField = 3;
+ break;
+ case INVALID:
+ l00StringField = "";
+ l00IntField = -1;
+ break;
+ default:
+ break;
+ }
+
+ l00L10Nested.triggerValidationStatus(triggerStatus, level);
+ l00LGenericNested.triggerValidationStatus(triggerStatus, level);
+
+ for (TestParametersLGeneric nestedParameterGroup : l00LGenericNestedMap.values()) {
+ nestedParameterGroup.triggerValidationStatus(triggerStatus, level);
+ }
+
+ }
+
+ @Override
+ public String getName() {
+ return name;
+ }
+
+ @Override
+ public GroupValidationResult validate() {
+ GroupValidationResult validationResult = new GroupValidationResult(this);
+
+ if (name == null || name.trim().length() == 0) {
+ validationResult.setResult("name", ValidationStatus.INVALID, "name must be a non-blank string");
+ }
+
+ if (l00StringField == null || l00StringField.trim().length() == 0) {
+ validationResult.setResult("l00StringField", ValidationStatus.INVALID,
+ "l00StringField must be a non-blank string");
+ } else if (l00StringField.equals("l00StringField")) {
+ validationResult.setResult("l00StringField", ValidationStatus.WARNING,
+ "using the field name for the parameter value is dangerous");
+ } else if (l00StringField.equals("aString")) {
+ validationResult.setResult("l00StringField", ValidationStatus.OBSERVATION,
+ "this value for name is unhelpful");
+ } else {
+ validationResult.setResult("l00StringField", ValidationStatus.CLEAN,
+ ParameterConstants.PARAMETER_HAS_STATUS_MESSAGE + ValidationStatus.CLEAN.toString());
+ }
+
+ if (l00IntField < 0) {
+ validationResult.setResult("l00IntField", ValidationStatus.INVALID,
+ "l00IntField must be a positive integer");
+ } else if (l00IntField > 2) {
+ validationResult.setResult("l00IntField", ValidationStatus.WARNING,
+ "values greater than 2 are not recommended");
+ } else if (l00IntField == 2) {
+ validationResult.setResult("l00IntField", ValidationStatus.OBSERVATION, "this field has been set to 2");
+ } else {
+ validationResult.setResult("l00IntField", ValidationStatus.CLEAN,
+ ParameterConstants.PARAMETER_HAS_STATUS_MESSAGE + ValidationStatus.CLEAN.toString());
+ }
+
+ validationResult.setResult("l00L10Nested", l00L10Nested.validate());
+ validationResult.setResult("l00LGenericNested", l00LGenericNested.validate());
+
+ for (Entry<String, TestParametersLGeneric> nestedGroupEntry : l00LGenericNestedMap.entrySet()) {
+ validationResult.setResult("l00LGenericNestedMap", nestedGroupEntry.getKey(),
+ nestedGroupEntry.getValue().validate());
+ }
+
+ return validationResult;
+ }
+}
diff --git a/common-parameters/src/test/java/org/onap/policy/common/parameters/testclasses/TestParametersL10.java b/common-parameters/src/test/java/org/onap/policy/common/parameters/testclasses/TestParametersL10.java
new file mode 100644
index 00000000..94a67ec7
--- /dev/null
+++ b/common-parameters/src/test/java/org/onap/policy/common/parameters/testclasses/TestParametersL10.java
@@ -0,0 +1,173 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2018 Ericsson. 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.common.parameters.testclasses;
+
+import java.util.LinkedHashMap;
+import java.util.Map;
+import java.util.Map.Entry;
+
+import org.onap.policy.common.parameters.ParameterGroup;
+import org.onap.policy.common.parameters.GroupValidationResult;
+import org.onap.policy.common.parameters.ParameterConstants;
+import org.onap.policy.common.parameters.ValidationStatus;
+
+public class TestParametersL10 implements ParameterGroup {
+ private String name;
+ private int l10IntField = 0;
+ private String l10StringField = "Legal " + this.getClass().getCanonicalName();
+ private TestParametersLGeneric l10LGenericNested0 = new TestParametersLGeneric("l10LGenericNested0");
+ private TestParametersLGeneric l10LGenericNested1 = new TestParametersLGeneric("l10LGenericNested1");
+ private Map<String, TestParametersLGeneric> l10LGenericNestedMap = new LinkedHashMap<>();
+
+ /**
+ * Default constructor
+ */
+ public TestParametersL10() {
+ }
+
+ /**
+ * Create a test parameter group.
+ *
+ * @param name the parameter group name
+ */
+ public TestParametersL10(final String name) {
+ this.name = name;
+
+ TestParametersLGeneric l10LGenericNestedMapVal0 = new TestParametersLGeneric("l10LGenericNestedMapVal0");
+ l10LGenericNestedMap.put(l10LGenericNestedMapVal0.getName(), l10LGenericNestedMapVal0);
+ TestParametersLGeneric l10LGenericNestedMapVal1 = new TestParametersLGeneric("l10LGenericNestedMapVal1");
+ l10LGenericNestedMap.put(l10LGenericNestedMapVal1.getName(), l10LGenericNestedMapVal1);
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public void setL10IntField(int l10IntField) {
+ this.l10IntField = l10IntField;
+ }
+
+ public void setL10StringField(String l10StringField) {
+ this.l10StringField = l10StringField;
+ }
+
+ public void setL10LGenericNested0(TestParametersLGeneric l10lGenericNested0) {
+ l10LGenericNested0 = l10lGenericNested0;
+ }
+
+ public void setL10LGenericNested1(TestParametersLGeneric l10lGenericNested1) {
+ l10LGenericNested1 = l10lGenericNested1;
+ }
+
+ public void setL10LGenericNestedMap(Map<String, TestParametersLGeneric> l10lGenericNestedMap) {
+ l10LGenericNestedMap = l10lGenericNestedMap;
+ }
+
+ /**
+ * Trigger a validation message.
+ *
+ * @param level Number of levels to recurse before stopping
+ */
+ public void triggerValidationStatus(final ValidationStatus triggerStatus, int level) {
+ if (level == 0) {
+ return;
+ }
+ else {
+ level--;
+ }
+
+ switch (triggerStatus) {
+ case CLEAN:
+ l10StringField = "Legal " + this.getClass().getCanonicalName();
+ l10IntField = 0;
+ break;
+ case OBSERVATION:
+ l10StringField = "aString";
+ l10IntField = 2;
+ break;
+ case WARNING:
+ l10StringField = "l10StringField";
+ l10IntField = 3;
+ break;
+ case INVALID:
+ l10StringField = "";
+ l10IntField = -1;
+ break;
+ default:
+ break;
+ }
+
+ l10LGenericNested0.triggerValidationStatus(triggerStatus, level);
+ l10LGenericNested1.triggerValidationStatus(triggerStatus, level);
+
+ for (TestParametersLGeneric nestedParameterGroup : l10LGenericNestedMap.values()) {
+ nestedParameterGroup.triggerValidationStatus(triggerStatus, level);
+ }
+ }
+
+ @Override
+ public String getName() {
+ return this.name;
+ }
+
+ @Override
+ public GroupValidationResult validate() {
+ GroupValidationResult validationResult = new GroupValidationResult(this);
+
+ if (l10StringField == null || l10StringField.trim().length() == 0) {
+ validationResult.setResult("l10StringField", ValidationStatus.INVALID,
+ "l10StringField must be a non-blank string");
+ } else if (l10StringField.equals("l10StringField")) {
+ validationResult.setResult("l10StringField", ValidationStatus.WARNING,
+ "using the field name for the parameter value is dangerous");
+ } else if (l10StringField.equals("aString")) {
+ validationResult.setResult("l10StringField", ValidationStatus.OBSERVATION,
+ "this value for name is unhelpful");
+ } else {
+ validationResult.setResult("l10StringField", ValidationStatus.CLEAN,
+ ParameterConstants.PARAMETER_HAS_STATUS_MESSAGE + ValidationStatus.CLEAN.toString());
+ }
+
+ if (l10IntField < 0) {
+ validationResult.setResult("l10IntField", ValidationStatus.INVALID,
+ "l10IntField must be a positive integer");
+ } else if (l10IntField > 2) {
+ validationResult.setResult("l10IntField", ValidationStatus.WARNING,
+ "values greater than 2 are not recommended");
+ } else if (l10IntField == 2) {
+ validationResult.setResult("l10IntField", ValidationStatus.OBSERVATION, "this field has been set to 2");
+ } else {
+ validationResult.setResult("l10IntField", ValidationStatus.CLEAN,
+ ParameterConstants.PARAMETER_HAS_STATUS_MESSAGE + ValidationStatus.CLEAN.toString());
+ }
+
+
+ validationResult.setResult("l10LGenericNested0", l10LGenericNested0.validate());
+ validationResult.setResult("l10LGenericNested1", l10LGenericNested1.validate());
+
+ for (Entry<String, TestParametersLGeneric> nestedGroupEntry : l10LGenericNestedMap.entrySet()) {
+ validationResult.setResult("l10LGenericNestedMap", nestedGroupEntry.getKey(),
+ nestedGroupEntry.getValue().validate());
+ }
+
+ return validationResult;
+ }
+}
diff --git a/common-parameters/src/test/java/org/onap/policy/common/parameters/testclasses/TestParametersLGeneric.java b/common-parameters/src/test/java/org/onap/policy/common/parameters/testclasses/TestParametersLGeneric.java
new file mode 100644
index 00000000..ce368bac
--- /dev/null
+++ b/common-parameters/src/test/java/org/onap/policy/common/parameters/testclasses/TestParametersLGeneric.java
@@ -0,0 +1,135 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2018 Ericsson. 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.common.parameters.testclasses;
+
+import org.onap.policy.common.parameters.ParameterGroup;
+import org.onap.policy.common.parameters.GroupValidationResult;
+import org.onap.policy.common.parameters.ParameterConstants;
+import org.onap.policy.common.parameters.ValidationStatus;
+
+public class TestParametersLGeneric implements ParameterGroup {
+ private String name;
+ private int lgenericIntField = 0;
+ private String lgenericStringField = "Legal " + this.getClass().getCanonicalName();
+
+ /**
+ * Default constructor
+ */
+ public TestParametersLGeneric() {
+ }
+
+ /**
+ * Create a test parameter group.
+ *
+ * @param name the parameter group name
+ */
+ public TestParametersLGeneric(final String name) {
+ this.name = name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public void setLgenericIntField(int lgenericIntField) {
+ this.lgenericIntField = lgenericIntField;
+ }
+
+ public void setLgenericStringField(String lgenericStringField) {
+ this.lgenericStringField = lgenericStringField;
+ }
+
+ /**
+ * Trigger a validation message.
+ *
+ * @param level Number of levels to recurse before stopping
+ */
+ public void triggerValidationStatus(final ValidationStatus triggerStatus, int level) {
+ if (level == 0) {
+ return;
+ }
+ else {
+ level--;
+ }
+
+ switch (triggerStatus) {
+ case CLEAN:
+ lgenericStringField = "Legal " + this.getClass().getCanonicalName();
+ lgenericIntField = 0;
+ break;
+ case OBSERVATION:
+ lgenericStringField = "aString";
+ lgenericIntField = 2;
+ break;
+ case WARNING:
+ lgenericStringField = "lgenericStringField";
+ lgenericIntField = 3;
+ break;
+ case INVALID:
+ lgenericStringField = "";
+ lgenericIntField = -1;
+ break;
+ default:
+ break;
+ }
+
+ }
+
+ @Override
+ public String getName() {
+ return this.name;
+ }
+
+ @Override
+ public GroupValidationResult validate() {
+ GroupValidationResult validationResult = new GroupValidationResult(this);
+
+ if (lgenericStringField == null || lgenericStringField.trim().length() == 0) {
+ validationResult.setResult("lgenericStringField", ValidationStatus.INVALID,
+ "lgenericStringField must be a non-blank string");
+ } else if (lgenericStringField.equals("lgenericStringField")) {
+ validationResult.setResult("lgenericStringField", ValidationStatus.WARNING,
+ "using the field name for the parameter value is dangerous");
+ } else if (lgenericStringField.equals("aString")) {
+ validationResult.setResult("lgenericStringField", ValidationStatus.OBSERVATION,
+ "this value for name is unhelpful");
+ } else {
+ validationResult.setResult("lgenericStringField", ValidationStatus.CLEAN,
+ ParameterConstants.PARAMETER_HAS_STATUS_MESSAGE + ValidationStatus.CLEAN.toString());
+ }
+
+ if (lgenericIntField < 0) {
+ validationResult.setResult("lgenericIntField", ValidationStatus.INVALID,
+ "lgenericIntField must be a positive integer");
+ } else if (lgenericIntField > 2) {
+ validationResult.setResult("lgenericIntField", ValidationStatus.WARNING,
+ "values greater than 2 are not recommended");
+ } else if (lgenericIntField == 2) {
+ validationResult.setResult("lgenericIntField", ValidationStatus.OBSERVATION,
+ "this field has been set to 2");
+ } else {
+ validationResult.setResult("lgenericIntField", ValidationStatus.CLEAN,
+ ParameterConstants.PARAMETER_HAS_STATUS_MESSAGE + ValidationStatus.CLEAN.toString());
+ }
+
+ return validationResult;
+ }
+}
diff --git a/common-parameters/src/test/resources/expectedValidationResults/TestJsonYamlValidationResult.txt b/common-parameters/src/test/resources/expectedValidationResults/TestJsonYamlValidationResult.txt
new file mode 100644
index 00000000..103321ff
--- /dev/null
+++ b/common-parameters/src/test/resources/expectedValidationResults/TestJsonYamlValidationResult.txt
@@ -0,0 +1,39 @@
+parameter group "l00NameFromFile" type "org.onap.policy.common.parameters.testclasses.TestParametersL00" CLEAN, parameter group has status CLEAN
+ field "name" type "java.lang.String" value "l00NameFromFile" CLEAN, parameter has status CLEAN
+ field "l00IntField" type "int" value "1" CLEAN, parameter has status CLEAN
+ field "l00StringField" type "java.lang.String" value "l00 string field value from file" CLEAN, parameter has status CLEAN
+ parameter group "l00L10NestedNameFromFile" type "org.onap.policy.common.parameters.testclasses.TestParametersL10" CLEAN, parameter group has status CLEAN
+ field "name" type "java.lang.String" value "l00L10NestedNameFromFile" CLEAN, parameter has status CLEAN
+ field "l10IntField" type "int" value "1" CLEAN, parameter has status CLEAN
+ field "l10StringField" type "java.lang.String" value "l00 L10 nested string field value from file" CLEAN, parameter has status CLEAN
+ parameter group "l10LGenericNested0NameFromFile" type "org.onap.policy.common.parameters.testclasses.TestParametersLGeneric" CLEAN, parameter group has status CLEAN
+ field "name" type "java.lang.String" value "l10LGenericNested0NameFromFile" CLEAN, parameter has status CLEAN
+ field "lgenericIntField" type "int" value "1" CLEAN, parameter has status CLEAN
+ field "lgenericStringField" type "java.lang.String" value "l10 generic nested 0 string field value from file" CLEAN, parameter has status CLEAN
+ parameter group "l10LGenericNested1NameFromFile" type "org.onap.policy.common.parameters.testclasses.TestParametersLGeneric" CLEAN, parameter group has status CLEAN
+ field "name" type "java.lang.String" value "l10LGenericNested1NameFromFile" CLEAN, parameter has status CLEAN
+ field "lgenericIntField" type "int" value "1" CLEAN, parameter has status CLEAN
+ field "lgenericStringField" type "java.lang.String" value "l10 generic nested 1 string field value from file" CLEAN, parameter has status CLEAN
+ parameter group map "l10LGenericNestedMap" CLEAN, parameter group map has status CLEAN
+ parameter group "L10Entry0Name" type "org.onap.policy.common.parameters.testclasses.TestParametersLGeneric" CLEAN, parameter group has status CLEAN
+ field "name" type "java.lang.String" value "L10Entry0Name" CLEAN, parameter has status CLEAN
+ field "lgenericIntField" type "int" value "1" CLEAN, parameter has status CLEAN
+ field "lgenericStringField" type "java.lang.String" value "L10Entry0 value from file" CLEAN, parameter has status CLEAN
+ parameter group "L10Entry1Name" type "org.onap.policy.common.parameters.testclasses.TestParametersLGeneric" CLEAN, parameter group has status CLEAN
+ field "name" type "java.lang.String" value "L10Entry1Name" CLEAN, parameter has status CLEAN
+ field "lgenericIntField" type "int" value "1" CLEAN, parameter has status CLEAN
+ field "lgenericStringField" type "java.lang.String" value "L10Entry1 value from file" CLEAN, parameter has status CLEAN
+ parameter group "l00GenericNestedNameFromFile" type "org.onap.policy.common.parameters.testclasses.TestParametersLGeneric" CLEAN, parameter group has status CLEAN
+ field "name" type "java.lang.String" value "l00GenericNestedNameFromFile" CLEAN, parameter has status CLEAN
+ field "lgenericIntField" type "int" value "1" CLEAN, parameter has status CLEAN
+ field "lgenericStringField" type "java.lang.String" value "l00 generic nested string field value from file" CLEAN, parameter has status CLEAN
+ parameter group map "l00LGenericNestedMap" CLEAN, parameter group map has status CLEAN
+ parameter group "L00Entry0Name" type "org.onap.policy.common.parameters.testclasses.TestParametersLGeneric" CLEAN, parameter group has status CLEAN
+ field "name" type "java.lang.String" value "L00Entry0Name" CLEAN, parameter has status CLEAN
+ field "lgenericIntField" type "int" value "1" CLEAN, parameter has status CLEAN
+ field "lgenericStringField" type "java.lang.String" value "L00Entry0 value from file" CLEAN, parameter has status CLEAN
+ parameter group "L00Entry1Name" type "org.onap.policy.common.parameters.testclasses.TestParametersLGeneric" CLEAN, parameter group has status CLEAN
+ field "name" type "java.lang.String" value "L00Entry1Name" CLEAN, parameter has status CLEAN
+ field "lgenericIntField" type "int" value "1" CLEAN, parameter has status CLEAN
+ field "lgenericStringField" type "java.lang.String" value "L00Entry1 value from file" CLEAN, parameter has status CLEAN
+
diff --git a/common-parameters/src/test/resources/expectedValidationResults/TestParametersL0_0_OK.txt b/common-parameters/src/test/resources/expectedValidationResults/TestParametersL0_0_OK.txt
new file mode 100644
index 00000000..7f6d298c
--- /dev/null
+++ b/common-parameters/src/test/resources/expectedValidationResults/TestParametersL0_0_OK.txt
@@ -0,0 +1,39 @@
+parameter group "l0Parameters" type "org.onap.policy.common.parameters.testclasses.TestParametersL00" CLEAN, parameter group has status CLEAN
+ field "name" type "java.lang.String" value "l0Parameters" CLEAN, parameter has status CLEAN
+ field "l00IntField" type "int" value "0" CLEAN, parameter has status CLEAN
+ field "l00StringField" type "java.lang.String" value "Legal org.onap.policy.common.parameters.testclasses.TestParametersL00" CLEAN, parameter has status CLEAN
+ parameter group "l00L10Nested" type "org.onap.policy.common.parameters.testclasses.TestParametersL10" CLEAN, parameter group has status CLEAN
+ field "name" type "java.lang.String" value "l00L10Nested" CLEAN, parameter has status CLEAN
+ field "l10IntField" type "int" value "0" CLEAN, parameter has status CLEAN
+ field "l10StringField" type "java.lang.String" value "Legal org.onap.policy.common.parameters.testclasses.TestParametersL10" CLEAN, parameter has status CLEAN
+ parameter group "l10LGenericNested0" type "org.onap.policy.common.parameters.testclasses.TestParametersLGeneric" CLEAN, parameter group has status CLEAN
+ field "name" type "java.lang.String" value "l10LGenericNested0" CLEAN, parameter has status CLEAN
+ field "lgenericIntField" type "int" value "0" CLEAN, parameter has status CLEAN
+ field "lgenericStringField" type "java.lang.String" value "Legal org.onap.policy.common.parameters.testclasses.TestParametersLGeneric" CLEAN, parameter has status CLEAN
+ parameter group "l10LGenericNested1" type "org.onap.policy.common.parameters.testclasses.TestParametersLGeneric" CLEAN, parameter group has status CLEAN
+ field "name" type "java.lang.String" value "l10LGenericNested1" CLEAN, parameter has status CLEAN
+ field "lgenericIntField" type "int" value "0" CLEAN, parameter has status CLEAN
+ field "lgenericStringField" type "java.lang.String" value "Legal org.onap.policy.common.parameters.testclasses.TestParametersLGeneric" CLEAN, parameter has status CLEAN
+ parameter group map "l10LGenericNestedMap" CLEAN, parameter group map has status CLEAN
+ parameter group "l10LGenericNestedMapVal0" type "org.onap.policy.common.parameters.testclasses.TestParametersLGeneric" CLEAN, parameter group has status CLEAN
+ field "name" type "java.lang.String" value "l10LGenericNestedMapVal0" CLEAN, parameter has status CLEAN
+ field "lgenericIntField" type "int" value "0" CLEAN, parameter has status CLEAN
+ field "lgenericStringField" type "java.lang.String" value "Legal org.onap.policy.common.parameters.testclasses.TestParametersLGeneric" CLEAN, parameter has status CLEAN
+ parameter group "l10LGenericNestedMapVal1" type "org.onap.policy.common.parameters.testclasses.TestParametersLGeneric" CLEAN, parameter group has status CLEAN
+ field "name" type "java.lang.String" value "l10LGenericNestedMapVal1" CLEAN, parameter has status CLEAN
+ field "lgenericIntField" type "int" value "0" CLEAN, parameter has status CLEAN
+ field "lgenericStringField" type "java.lang.String" value "Legal org.onap.policy.common.parameters.testclasses.TestParametersLGeneric" CLEAN, parameter has status CLEAN
+ parameter group "l00LGenericNested" type "org.onap.policy.common.parameters.testclasses.TestParametersLGeneric" CLEAN, parameter group has status CLEAN
+ field "name" type "java.lang.String" value "l00LGenericNested" CLEAN, parameter has status CLEAN
+ field "lgenericIntField" type "int" value "0" CLEAN, parameter has status CLEAN
+ field "lgenericStringField" type "java.lang.String" value "Legal org.onap.policy.common.parameters.testclasses.TestParametersLGeneric" CLEAN, parameter has status CLEAN
+ parameter group map "l00LGenericNestedMap" CLEAN, parameter group map has status CLEAN
+ parameter group "l00LGenericNestedMapVal0" type "org.onap.policy.common.parameters.testclasses.TestParametersLGeneric" CLEAN, parameter group has status CLEAN
+ field "name" type "java.lang.String" value "l00LGenericNestedMapVal0" CLEAN, parameter has status CLEAN
+ field "lgenericIntField" type "int" value "0" CLEAN, parameter has status CLEAN
+ field "lgenericStringField" type "java.lang.String" value "Legal org.onap.policy.common.parameters.testclasses.TestParametersLGeneric" CLEAN, parameter has status CLEAN
+ parameter group "l00LGenericNestedMapVal1" type "org.onap.policy.common.parameters.testclasses.TestParametersLGeneric" CLEAN, parameter group has status CLEAN
+ field "name" type "java.lang.String" value "l00LGenericNestedMapVal1" CLEAN, parameter has status CLEAN
+ field "lgenericIntField" type "int" value "0" CLEAN, parameter has status CLEAN
+ field "lgenericStringField" type "java.lang.String" value "Legal org.onap.policy.common.parameters.testclasses.TestParametersLGeneric" CLEAN, parameter has status CLEAN
+
diff --git a/common-parameters/src/test/resources/expectedValidationResults/TestParametersL0_1_Invalid.txt b/common-parameters/src/test/resources/expectedValidationResults/TestParametersL0_1_Invalid.txt
new file mode 100644
index 00000000..dcc3cee3
--- /dev/null
+++ b/common-parameters/src/test/resources/expectedValidationResults/TestParametersL0_1_Invalid.txt
@@ -0,0 +1,3 @@
+parameter group "l0Parameters" type "org.onap.policy.common.parameters.testclasses.TestParametersL00" INVALID, parameter group has status INVALID
+ field "l00IntField" type "int" value "-1" INVALID, l00IntField must be a positive integer
+ field "l00StringField" type "java.lang.String" value "" INVALID, l00StringField must be a non-blank string
diff --git a/common-parameters/src/test/resources/expectedValidationResults/TestParametersL0_1_Observation.txt b/common-parameters/src/test/resources/expectedValidationResults/TestParametersL0_1_Observation.txt
new file mode 100644
index 00000000..ae627926
--- /dev/null
+++ b/common-parameters/src/test/resources/expectedValidationResults/TestParametersL0_1_Observation.txt
@@ -0,0 +1,3 @@
+parameter group "l0Parameters" type "org.onap.policy.common.parameters.testclasses.TestParametersL00" OBSERVATION, parameter group has status OBSERVATION
+ field "l00IntField" type "int" value "2" OBSERVATION, this field has been set to 2
+ field "l00StringField" type "java.lang.String" value "aString" OBSERVATION, this value for name is unhelpful
diff --git a/common-parameters/src/test/resources/expectedValidationResults/TestParametersL0_1_Warning.txt b/common-parameters/src/test/resources/expectedValidationResults/TestParametersL0_1_Warning.txt
new file mode 100644
index 00000000..14a65aa8
--- /dev/null
+++ b/common-parameters/src/test/resources/expectedValidationResults/TestParametersL0_1_Warning.txt
@@ -0,0 +1,3 @@
+parameter group "l0Parameters" type "org.onap.policy.common.parameters.testclasses.TestParametersL00" WARNING, parameter group has status WARNING
+ field "l00IntField" type "int" value "3" WARNING, values greater than 2 are not recommended
+ field "l00StringField" type "java.lang.String" value "l00StringField" WARNING, using the field name for the parameter value is dangerous
diff --git a/common-parameters/src/test/resources/expectedValidationResults/TestParametersL0_2_Invalid.txt b/common-parameters/src/test/resources/expectedValidationResults/TestParametersL0_2_Invalid.txt
new file mode 100644
index 00000000..cec8f208
--- /dev/null
+++ b/common-parameters/src/test/resources/expectedValidationResults/TestParametersL0_2_Invalid.txt
@@ -0,0 +1,9 @@
+parameter group "l0Parameters" type "org.onap.policy.common.parameters.testclasses.TestParametersL00" INVALID, parameter group has status INVALID
+ field "l00IntField" type "int" value "-1" INVALID, l00IntField must be a positive integer
+ field "l00StringField" type "java.lang.String" value "" INVALID, l00StringField must be a non-blank string
+ parameter group "l00L10Nested" type "org.onap.policy.common.parameters.testclasses.TestParametersL10" INVALID, parameter group has status INVALID
+ field "l10IntField" type "int" value "-1" INVALID, l10IntField must be a positive integer
+ field "l10StringField" type "java.lang.String" value "" INVALID, l10StringField must be a non-blank string
+ parameter group "l00LGenericNested" type "org.onap.policy.common.parameters.testclasses.TestParametersLGeneric" INVALID, parameter group has status INVALID
+ field "lgenericIntField" type "int" value "-1" INVALID, lgenericIntField must be a positive integer
+ field "lgenericStringField" type "java.lang.String" value "" INVALID, lgenericStringField must be a non-blank string \ No newline at end of file
diff --git a/common-parameters/src/test/resources/expectedValidationResults/TestParametersL0_2_Observation.txt b/common-parameters/src/test/resources/expectedValidationResults/TestParametersL0_2_Observation.txt
new file mode 100644
index 00000000..45402033
--- /dev/null
+++ b/common-parameters/src/test/resources/expectedValidationResults/TestParametersL0_2_Observation.txt
@@ -0,0 +1,9 @@
+parameter group "l0Parameters" type "org.onap.policy.common.parameters.testclasses.TestParametersL00" OBSERVATION, parameter group has status OBSERVATION
+ field "l00IntField" type "int" value "2" OBSERVATION, this field has been set to 2
+ field "l00StringField" type "java.lang.String" value "aString" OBSERVATION, this value for name is unhelpful
+ parameter group "l00L10Nested" type "org.onap.policy.common.parameters.testclasses.TestParametersL10" OBSERVATION, parameter group has status OBSERVATION
+ field "l10IntField" type "int" value "2" OBSERVATION, this field has been set to 2
+ field "l10StringField" type "java.lang.String" value "aString" OBSERVATION, this value for name is unhelpful
+ parameter group "l00LGenericNested" type "org.onap.policy.common.parameters.testclasses.TestParametersLGeneric" OBSERVATION, parameter group has status OBSERVATION
+ field "lgenericIntField" type "int" value "2" OBSERVATION, this field has been set to 2
+ field "lgenericStringField" type "java.lang.String" value "aString" OBSERVATION, this value for name is unhelpful
diff --git a/common-parameters/src/test/resources/expectedValidationResults/TestParametersL0_2_Warning.txt b/common-parameters/src/test/resources/expectedValidationResults/TestParametersL0_2_Warning.txt
new file mode 100644
index 00000000..33d1d16a
--- /dev/null
+++ b/common-parameters/src/test/resources/expectedValidationResults/TestParametersL0_2_Warning.txt
@@ -0,0 +1,9 @@
+parameter group "l0Parameters" type "org.onap.policy.common.parameters.testclasses.TestParametersL00" WARNING, parameter group has status WARNING
+ field "l00IntField" type "int" value "3" WARNING, values greater than 2 are not recommended
+ field "l00StringField" type "java.lang.String" value "l00StringField" WARNING, using the field name for the parameter value is dangerous
+ parameter group "l00L10Nested" type "org.onap.policy.common.parameters.testclasses.TestParametersL10" WARNING, parameter group has status WARNING
+ field "l10IntField" type "int" value "3" WARNING, values greater than 2 are not recommended
+ field "l10StringField" type "java.lang.String" value "l10StringField" WARNING, using the field name for the parameter value is dangerous
+ parameter group "l00LGenericNested" type "org.onap.policy.common.parameters.testclasses.TestParametersLGeneric" WARNING, parameter group has status WARNING
+ field "lgenericIntField" type "int" value "3" WARNING, values greater than 2 are not recommended
+ field "lgenericStringField" type "java.lang.String" value "lgenericStringField" WARNING, using the field name for the parameter value is dangerous \ No newline at end of file
diff --git a/common-parameters/src/test/resources/expectedValidationResults/TestParametersL0_3_Invalid.txt b/common-parameters/src/test/resources/expectedValidationResults/TestParametersL0_3_Invalid.txt
new file mode 100644
index 00000000..fecfe70d
--- /dev/null
+++ b/common-parameters/src/test/resources/expectedValidationResults/TestParametersL0_3_Invalid.txt
@@ -0,0 +1,15 @@
+parameter group "l0Parameters" type "org.onap.policy.common.parameters.testclasses.TestParametersL00" INVALID, parameter group has status INVALID
+ field "l00IntField" type "int" value "-1" INVALID, l00IntField must be a positive integer
+ field "l00StringField" type "java.lang.String" value "" INVALID, l00StringField must be a non-blank string
+ parameter group "l00L10Nested" type "org.onap.policy.common.parameters.testclasses.TestParametersL10" INVALID, parameter group has status INVALID
+ field "l10IntField" type "int" value "-1" INVALID, l10IntField must be a positive integer
+ field "l10StringField" type "java.lang.String" value "" INVALID, l10StringField must be a non-blank string
+ parameter group "l10LGenericNested0" type "org.onap.policy.common.parameters.testclasses.TestParametersLGeneric" INVALID, parameter group has status INVALID
+ field "lgenericIntField" type "int" value "-1" INVALID, lgenericIntField must be a positive integer
+ field "lgenericStringField" type "java.lang.String" value "" INVALID, lgenericStringField must be a non-blank string
+ parameter group "l10LGenericNested1" type "org.onap.policy.common.parameters.testclasses.TestParametersLGeneric" INVALID, parameter group has status INVALID
+ field "lgenericIntField" type "int" value "-1" INVALID, lgenericIntField must be a positive integer
+ field "lgenericStringField" type "java.lang.String" value "" INVALID, lgenericStringField must be a non-blank string
+ parameter group "l00LGenericNested" type "org.onap.policy.common.parameters.testclasses.TestParametersLGeneric" INVALID, parameter group has status INVALID
+ field "lgenericIntField" type "int" value "-1" INVALID, lgenericIntField must be a positive integer
+ field "lgenericStringField" type "java.lang.String" value "" INVALID, lgenericStringField must be a non-blank string \ No newline at end of file
diff --git a/common-parameters/src/test/resources/expectedValidationResults/TestParametersL0_3_Observation.txt b/common-parameters/src/test/resources/expectedValidationResults/TestParametersL0_3_Observation.txt
new file mode 100644
index 00000000..00fe6627
--- /dev/null
+++ b/common-parameters/src/test/resources/expectedValidationResults/TestParametersL0_3_Observation.txt
@@ -0,0 +1,15 @@
+parameter group "l0Parameters" type "org.onap.policy.common.parameters.testclasses.TestParametersL00" OBSERVATION, parameter group has status OBSERVATION
+ field "l00IntField" type "int" value "2" OBSERVATION, this field has been set to 2
+ field "l00StringField" type "java.lang.String" value "aString" OBSERVATION, this value for name is unhelpful
+ parameter group "l00L10Nested" type "org.onap.policy.common.parameters.testclasses.TestParametersL10" OBSERVATION, parameter group has status OBSERVATION
+ field "l10IntField" type "int" value "2" OBSERVATION, this field has been set to 2
+ field "l10StringField" type "java.lang.String" value "aString" OBSERVATION, this value for name is unhelpful
+ parameter group "l10LGenericNested0" type "org.onap.policy.common.parameters.testclasses.TestParametersLGeneric" OBSERVATION, parameter group has status OBSERVATION
+ field "lgenericIntField" type "int" value "2" OBSERVATION, this field has been set to 2
+ field "lgenericStringField" type "java.lang.String" value "aString" OBSERVATION, this value for name is unhelpful
+ parameter group "l10LGenericNested1" type "org.onap.policy.common.parameters.testclasses.TestParametersLGeneric" OBSERVATION, parameter group has status OBSERVATION
+ field "lgenericIntField" type "int" value "2" OBSERVATION, this field has been set to 2
+ field "lgenericStringField" type "java.lang.String" value "aString" OBSERVATION, this value for name is unhelpful
+ parameter group "l00LGenericNested" type "org.onap.policy.common.parameters.testclasses.TestParametersLGeneric" OBSERVATION, parameter group has status OBSERVATION
+ field "lgenericIntField" type "int" value "2" OBSERVATION, this field has been set to 2
+ field "lgenericStringField" type "java.lang.String" value "aString" OBSERVATION, this value for name is unhelpful
diff --git a/common-parameters/src/test/resources/expectedValidationResults/TestParametersL0_3_Warning.txt b/common-parameters/src/test/resources/expectedValidationResults/TestParametersL0_3_Warning.txt
new file mode 100644
index 00000000..6c1c639d
--- /dev/null
+++ b/common-parameters/src/test/resources/expectedValidationResults/TestParametersL0_3_Warning.txt
@@ -0,0 +1,15 @@
+parameter group "l0Parameters" type "org.onap.policy.common.parameters.testclasses.TestParametersL00" WARNING, parameter group has status WARNING
+ field "l00IntField" type "int" value "3" WARNING, values greater than 2 are not recommended
+ field "l00StringField" type "java.lang.String" value "l00StringField" WARNING, using the field name for the parameter value is dangerous
+ parameter group "l00L10Nested" type "org.onap.policy.common.parameters.testclasses.TestParametersL10" WARNING, parameter group has status WARNING
+ field "l10IntField" type "int" value "3" WARNING, values greater than 2 are not recommended
+ field "l10StringField" type "java.lang.String" value "l10StringField" WARNING, using the field name for the parameter value is dangerous
+ parameter group "l10LGenericNested0" type "org.onap.policy.common.parameters.testclasses.TestParametersLGeneric" WARNING, parameter group has status WARNING
+ field "lgenericIntField" type "int" value "3" WARNING, values greater than 2 are not recommended
+ field "lgenericStringField" type "java.lang.String" value "lgenericStringField" WARNING, using the field name for the parameter value is dangerous
+ parameter group "l10LGenericNested1" type "org.onap.policy.common.parameters.testclasses.TestParametersLGeneric" WARNING, parameter group has status WARNING
+ field "lgenericIntField" type "int" value "3" WARNING, values greater than 2 are not recommended
+ field "lgenericStringField" type "java.lang.String" value "lgenericStringField" WARNING, using the field name for the parameter value is dangerous
+ parameter group "l00LGenericNested" type "org.onap.policy.common.parameters.testclasses.TestParametersLGeneric" WARNING, parameter group has status WARNING
+ field "lgenericIntField" type "int" value "3" WARNING, values greater than 2 are not recommended
+ field "lgenericStringField" type "java.lang.String" value "lgenericStringField" WARNING, using the field name for the parameter value is dangerous \ No newline at end of file
diff --git a/common-parameters/src/test/resources/parameters/TestParameters.json b/common-parameters/src/test/resources/parameters/TestParameters.json
new file mode 100644
index 00000000..8e312166
--- /dev/null
+++ b/common-parameters/src/test/resources/parameters/TestParameters.json
@@ -0,0 +1,49 @@
+{
+ "name" : "l00NameFromFile",
+ "l00IntField" : 1,
+ "l00StringField" : "l00 string field value from file",
+ "l00L10Nested" : {
+ "name" : "l00L10NestedNameFromFile",
+ "l10IntField" : 1,
+ "l10StringField" : "l00 L10 nested string field value from file",
+ "l10LGenericNested0" : {
+ "name" : "l10LGenericNested0NameFromFile",
+ "lgenericIntField" : 1,
+ "lgenericStringField" : "l10 generic nested 0 string field value from file"
+ },
+ "l10LGenericNested1" : {
+ "name" : "l10LGenericNested1NameFromFile",
+ "lgenericIntField" : 1,
+ "lgenericStringField" : "l10 generic nested 1 string field value from file"
+ },
+ "l10LGenericNestedMap": {
+ "L10Entry0": {
+ "name" : "L10Entry0Name",
+ "lgenericIntField" : 1,
+ "lgenericStringField" : "L10Entry0 value from file"
+ },
+ "L10Entry1": {
+ "name" : "L10Entry1Name",
+ "lgenericIntField" : 1,
+ "lgenericStringField" : "L10Entry1 value from file"
+ }
+ }
+ },
+ "l00LGenericNested" : {
+ "name" : "l00GenericNestedNameFromFile",
+ "lgenericIntField" : 1,
+ "lgenericStringField" : "l00 generic nested string field value from file"
+ },
+ "l00LGenericNestedMap": {
+ "L00Entry0": {
+ "name" : "L00Entry0Name",
+ "lgenericIntField" : 1,
+ "lgenericStringField" : "L00Entry0 value from file"
+ },
+ "L00Entry1": {
+ "name" : "L00Entry1Name",
+ "lgenericIntField" : 1,
+ "lgenericStringField" : "L00Entry1 value from file"
+ }
+ }
+} \ No newline at end of file
diff --git a/common-parameters/src/test/resources/parameters/TestParameters.yaml b/common-parameters/src/test/resources/parameters/TestParameters.yaml
new file mode 100644
index 00000000..c7e17f6a
--- /dev/null
+++ b/common-parameters/src/test/resources/parameters/TestParameters.yaml
@@ -0,0 +1,37 @@
+name: l00NameFromFile
+l00IntField: 1
+l00StringField: l00 string field value from file
+l00L10Nested:
+ name: l00L10NestedNameFromFile
+ l10IntField: 1
+ l10StringField: l00 L10 nested string field value from file
+ l10LGenericNested0:
+ name: l10LGenericNested0NameFromFile
+ lgenericIntField: 1
+ lgenericStringField: l10 generic nested 0 string field value from file
+ l10LGenericNested1:
+ name: l10LGenericNested1NameFromFile
+ lgenericIntField: 1
+ lgenericStringField: l10 generic nested 1 string field value from file
+ l10LGenericNestedMap:
+ l10Entry0:
+ name: L10Entry0Name
+ lgenericIntField: 1
+ lgenericStringField: L10Entry0 value from file
+ L10Entry1:
+ name: L10Entry1Name
+ lgenericIntField: 1
+ lgenericStringField: L10Entry1 value from file
+l00LGenericNested:
+ name: l00GenericNestedNameFromFile
+ lgenericIntField: 1
+ lgenericStringField: l00 generic nested string field value from file
+l00LGenericNestedMap:
+ L00Entry0:
+ name: L00Entry0Name
+ lgenericIntField: 1
+ lgenericStringField: L00Entry0 value from file
+ L00Entry1:
+ name: L00Entry1Name
+ lgenericIntField: 1
+ lgenericStringField: L00Entry1 value from file