diff options
author | Jim Hahn <jrh3@att.com> | 2019-06-13 12:34:17 -0400 |
---|---|---|
committer | Jim Hahn <jrh3@att.com> | 2019-06-13 16:10:38 -0400 |
commit | fe5d78724f723a451ddc0d7cc41d6fc60092b314 (patch) | |
tree | 9913cc94014b3e99774e9ec5e39a7211046a765a /common-parameters/src/main/java | |
parent | ea262e6da52fd4da0733f02998f87aebaf502ddb (diff) |
More sonar fixes in policy/common
Note: this does not increase code coverage, but should fix other
code issues.
Resolved cyclomatic complexity issue in ParameterValidationResult.
Refactored duplicate code in GroupValidationResult.
Removed IOException from NetworkUtil "throws".
Replaced null/empty string tests with StringUtils.isBlank().
Added @FunctionalInterface where needed.
Replaced anonymous classes with lambda expressions.
Replaced duplicate strings with a constant.
Added private constructors for utility classes.
Removed sleep() from tests.
Removed unused parameter from method call.
Made some protected methods private.
Compute integrity monitor's state-transition table once.
Use for-loop instead of iterator.
Moved constructors.
Fixed some checkstyle issues (tabs => spaces, trailing spaces).
Change-Id: I9a962ca45c4ff3f212c6014da799d06f07b232ef
Issue-ID: POLICY-1791
Signed-off-by: Jim Hahn <jrh3@att.com>
Diffstat (limited to 'common-parameters/src/main/java')
4 files changed, 189 insertions, 174 deletions
diff --git a/common-parameters/src/main/java/org/onap/policy/common/parameters/CommonGroupValidationResult.java b/common-parameters/src/main/java/org/onap/policy/common/parameters/CommonGroupValidationResult.java new file mode 100644 index 00000000..f35d1970 --- /dev/null +++ b/common-parameters/src/main/java/org/onap/policy/common/parameters/CommonGroupValidationResult.java @@ -0,0 +1,137 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + * ============LICENSE_END========================================================= + */ + +package org.onap.policy.common.parameters; + +import java.util.LinkedHashMap; +import java.util.Map; + +/** + * This class holds the result of the validation of a parameter group. + */ +public abstract class CommonGroupValidationResult implements ValidationResult { + + + private final String messagePrefix; + + /** + * Validation status for the entire class. + */ + protected ValidationStatus status = ValidationStatus.CLEAN; + + /** + * Status message. + */ + protected String message; + + /** + * Validation results for each parameter in the group. + */ + protected final Map<String, ValidationResult> validationResultMap = new LinkedHashMap<>(); + + + /** + * Constructs the object. + * + * @param messagePrefix status message prefix + */ + public CommonGroupValidationResult(String messagePrefix) { + this.messagePrefix = messagePrefix; + this.message = messagePrefix + status.toString(); + } + + /** + * Gets the status of validation. + * + * @return the status + */ + @Override + public ValidationStatus getStatus() { + return status; + } + + /** + * Set the validation result 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 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 = messagePrefix + 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 result = new StringBuilder(); + + result.append(initialIndentation); + + addGroupTypeName(result); + + result.append(status); + result.append(", "); + result.append(message); + result.append('\n'); + + for (ValidationResult fieldResult : validationResultMap.values()) { + String msg = fieldResult.getResult(initialIndentation + subIndentation, subIndentation, showClean); + if (msg != null) { + result.append(msg); + } + } + + return result.toString(); + } + + /** + * Adds the group type and name to the result string. + * + * @param result result string + */ + protected abstract void addGroupTypeName(StringBuilder result); +} 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 index 3baacb1f..2a616dba 100644 --- 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 @@ -1,19 +1,20 @@ /*- * ============LICENSE_START======================================================= * Copyright (C) 2018 Ericsson. All rights reserved. + * Modifications Copyright (C) 2019 AT&T Intellectual Property. All rights reserved. * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. - * + * * SPDX-License-Identifier: Apache-2.0 * ============LICENSE_END========================================================= */ @@ -21,23 +22,15 @@ 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 { +public class GroupMapValidationResult extends CommonGroupValidationResult { // 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. @@ -46,6 +39,8 @@ public class GroupMapValidationResult implements ValidationResult { * @param mapObject the value of the map parameter field */ protected GroupMapValidationResult(final Field field, final Object mapObject) { + super(ParameterConstants.PARAMETER_GROUP_MAP_HAS_STATUS_MESSAGE); + this.mapParameterName = field.getName(); // Cast the map object to a map of parameter groups keyed by string, we can't type check maps @@ -73,44 +68,8 @@ public class GroupMapValidationResult implements ValidationResult { } /** - * 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(final ValidationStatus status, final 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 status The validation status for the entry * @param message The validation message for the entry @@ -122,14 +81,14 @@ public class GroupMapValidationResult implements ValidationResult { } // Set the status of the parameter group and replace the field result - validationResult.setResult(status, message); + validationResult.setResult(status, message); this.setResult(status); } /** * 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 */ @@ -144,39 +103,10 @@ public class GroupMapValidationResult implements ValidationResult { this.setResult(mapEntryValidationResult.getStatus()); } - /** - * 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(); + protected void addGroupTypeName(StringBuilder result) { + result.append("parameter group map \""); + result.append(mapParameterName); + result.append("\" "); } }
\ 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 index 6da36c19..3dc01299 100644 --- 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 @@ -1,4 +1,4 @@ -/* +/*- * ============LICENSE_START======================================================= * Copyright (C) 2018 Ericsson. All rights reserved. * Modifications Copyright (C) 2018-2019 AT&T Intellectual Property. All rights reserved. @@ -27,33 +27,26 @@ import java.lang.reflect.Method; import java.lang.reflect.Modifier; import java.util.ArrayList; import java.util.Collection; -import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.Map.Entry; - import org.apache.commons.lang3.StringUtils; /** * This class holds the result of the validation of a parameter group. */ -public class GroupValidationResult implements ValidationResult { +public class GroupValidationResult extends CommonGroupValidationResult { // 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) { + super(ParameterConstants.PARAMETER_GROUP_HAS_STATUS_MESSAGE); + this.parameterGroup = parameterGroup; // Parameter group definitions may be optional @@ -245,42 +238,6 @@ public class GroupValidationResult implements ValidationResult { } /** - * Gets the status of validation. - * - * @return the status - */ - @Override - public ValidationStatus getStatus() { - return status; - } - - /** - * Set the validation result 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 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 in a parameter group. * * @param parameterName The name of the parameter @@ -375,47 +332,19 @@ public class GroupValidationResult implements ValidationResult { 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 \""); + protected void addGroupTypeName(StringBuilder result) { + result.append("parameter group \""); if (parameterGroup != null) { - validationResultBuilder.append(parameterGroup.getName()); - validationResultBuilder.append("\" type \""); - validationResultBuilder.append(parameterGroup.getClass().getCanonicalName()); + result.append(parameterGroup.getName()); + result.append("\" type \""); + result.append(parameterGroup.getClass().getCanonicalName()); } else { - validationResultBuilder.append("UNDEFINED"); - } - 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); - } + result.append("UNDEFINED"); } - return validationResultBuilder.toString(); + result.append("\" "); } 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 index 0b66a533..2c367a30 100644 --- 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 @@ -61,15 +61,34 @@ public class ParameterValidationResult implements ValidationResult { } } else if (parameterValue instanceof Number) { - Min minAnnot = field.getAnnotation(Min.class); - if (minAnnot != null && ((Number) parameterValue).longValue() < minAnnot.value()) { - setResult(ValidationStatus.INVALID, "must be >= " + minAnnot.value()); - } + checkMinValue(field, parameterValue); + checkMaxValue(field, parameterValue); + } + } - Max maxAnnot = field.getAnnotation(Max.class); - if (maxAnnot != null && ((Number) parameterValue).longValue() > maxAnnot.value()) { - setResult(ValidationStatus.INVALID, "must be <= " + maxAnnot.value()); - } + /** + * Checks the minimum value of a field, if it has the "@Min" annotation. + * + * @param field field whose value is being validated + * @param parameterValue field's value + */ + private void checkMinValue(final Field field, final Object parameterValue) { + Min minAnnot = field.getAnnotation(Min.class); + if (minAnnot != null && ((Number) parameterValue).longValue() < minAnnot.value()) { + setResult(ValidationStatus.INVALID, "must be >= " + minAnnot.value()); + } + } + + /** + * Checks the maximum value of a field, if it has the "@Max" annotation. + * + * @param field field whose value is being validated + * @param parameterValue field's value + */ + private void checkMaxValue(final Field field, final Object parameterValue) { + Max maxAnnot = field.getAnnotation(Max.class); + if (maxAnnot != null && ((Number) parameterValue).longValue() > maxAnnot.value()) { + setResult(ValidationStatus.INVALID, "must be <= " + maxAnnot.value()); } } |