summaryrefslogtreecommitdiffstats
path: root/common-parameters/src
diff options
context:
space:
mode:
authorliamfallon <liam.fallon@ericsson.com>2018-07-30 10:22:27 +0100
committerliamfallon <liam.fallon@ericsson.com>2018-07-31 16:06:47 +0100
commit73ba8039930ba56f6a64a7acc4126dc50b77070d (patch)
treebb46330718aa99e9753a69715c0ea54e990aca4d /common-parameters/src
parentc36939ee0e648f4ac28b9cdc538991ced0c603bd (diff)
Improve validation, add hierarchical validation
Parameter validaiton updated to generically support nested groups of parameters, and nested maps of parameters. Unit test showing JSON parameter input added. Unit test showing YAML parameter inout added. Test parameter group classes moved into subdirectory This allows parameters to be unmarshaled seamlessly from JSON and YAML files. Change-Id: I768e11f31ee7f62299c4d5d95ab68a005d1aff16 Issue-ID: POLICY-922 Signed-off-by: liamfallon <liam.fallon@ericsson.com>
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