diff options
Diffstat (limited to 'services/services-engine/src/main/java/org/onap/policy/apex/service/parameters/ApexParameters.java')
-rw-r--r-- | services/services-engine/src/main/java/org/onap/policy/apex/service/parameters/ApexParameters.java | 239 |
1 files changed, 83 insertions, 156 deletions
diff --git a/services/services-engine/src/main/java/org/onap/policy/apex/service/parameters/ApexParameters.java b/services/services-engine/src/main/java/org/onap/policy/apex/service/parameters/ApexParameters.java index 692d5aee3..1302661b9 100644 --- a/services/services-engine/src/main/java/org/onap/policy/apex/service/parameters/ApexParameters.java +++ b/services/services-engine/src/main/java/org/onap/policy/apex/service/parameters/ApexParameters.java @@ -1,19 +1,20 @@ /*- * ============LICENSE_START======================================================= * Copyright (C) 2016-2018 Ericsson. All rights reserved. + * Modifications Copyright (C) 2021 AT&T Intellectual Property. All rights reserved. * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. - * + * * SPDX-License-Identifier: Apache-2.0 * ============LICENSE_END========================================================= */ @@ -24,20 +25,30 @@ import java.util.Arrays; import java.util.HashMap; import java.util.HashSet; import java.util.LinkedHashMap; +import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.Set; +import lombok.Getter; +import lombok.Setter; import org.onap.policy.apex.service.parameters.engineservice.EngineServiceParameters; import org.onap.policy.apex.service.parameters.eventhandler.EventHandlerParameters; import org.onap.policy.apex.service.parameters.eventhandler.EventHandlerPeeredMode; -import org.onap.policy.common.parameters.GroupValidationResult; +import org.onap.policy.common.parameters.BeanValidationResult; +import org.onap.policy.common.parameters.BeanValidator; import org.onap.policy.common.parameters.ParameterGroup; +import org.onap.policy.common.parameters.ValidationResult; import org.onap.policy.common.parameters.ValidationStatus; +import org.onap.policy.common.parameters.annotations.NotBlank; +import org.onap.policy.common.parameters.annotations.NotNull; +import org.onap.policy.common.parameters.annotations.Size; +import org.onap.policy.common.parameters.annotations.Valid; import org.onap.policy.common.utils.validation.ParameterValidationUtils; +import org.onap.policy.models.base.Validated; /** * The main container parameter class for an Apex service. - * + * * <p>The following parameters are defined: <ol> <li>engineServiceParameters: The parameters for the Apex engine service * itself, such as the number of engine threads to run and the deployment port number to use. <li>eventOutputParameters: * A map of parameters for event outputs that Apex will use to emit events. Apex emits events on all outputs @@ -48,6 +59,8 @@ import org.onap.policy.common.utils.validation.ParameterValidationUtils; */ public class ApexParameters implements ParameterGroup { // Parameter group name + @Getter + @Setter private String name; // Constants for recurring strings @@ -58,16 +71,27 @@ public class ApexParameters implements ParameterGroup { private static final String FOR_PEERED_MODE_STRING = " for peered mode "; // Properties for the Java JVM + @Getter private String[][] javaProperties = null; // Parameters for the engine service and the engine threads in the engine service - private EngineServiceParameters engineServiceParameters; + @Getter + @Setter + private @NotNull @Valid EngineServiceParameters engineServiceParameters; // Parameters for the event outputs that Apex will use to send events on its outputs - private Map<String, EventHandlerParameters> eventOutputParameters = new LinkedHashMap<>(); + @Getter + @Setter + @Size(min = 1) + private Map<@NotNull @NotBlank String, @NotNull @Valid EventHandlerParameters> eventOutputParameters = + new LinkedHashMap<>(); // Parameters for the event inputs that Apex will use to receive events on its inputs - private Map<String, EventHandlerParameters> eventInputParameters = new LinkedHashMap<>(); + @Getter + @Setter + @Size(min = 1) + private Map<@NotNull @NotBlank String, @NotNull @Valid EventHandlerParameters> eventInputParameters = + new LinkedHashMap<>(); /** * Constructor to create an apex parameters instance and register the instance with the parameter service. @@ -80,70 +104,6 @@ public class ApexParameters implements ParameterGroup { } /** - * Gets the parameters for the Apex engine service. - * - * @return the engine service parameters - */ - public EngineServiceParameters getEngineServiceParameters() { - return engineServiceParameters; - } - - /** - * Sets the engine service parameters. - * - * @param engineServiceParameters the engine service parameters - */ - public void setEngineServiceParameters(final EngineServiceParameters engineServiceParameters) { - this.engineServiceParameters = engineServiceParameters; - } - - /** - * Gets the event output parameter map. - * - * @return the parameters for all event outputs - */ - public Map<String, EventHandlerParameters> getEventOutputParameters() { - return eventOutputParameters; - } - - /** - * Sets the event output parameters. - * - * @param eventOutputParameters the event outputs parameters - */ - public void setEventOutputParameters(final Map<String, EventHandlerParameters> eventOutputParameters) { - this.eventOutputParameters = eventOutputParameters; - } - - /** - * Gets the event input parameter map. - * - * @return the parameters for all event inputs - */ - public Map<String, EventHandlerParameters> getEventInputParameters() { - return eventInputParameters; - } - - /** - * Sets the event input parameters. - * - * @param eventInputParameters the event input parameters - */ - public void setEventInputParameters(final Map<String, EventHandlerParameters> eventInputParameters) { - this.eventInputParameters = eventInputParameters; - } - - @Override - public String getName() { - return name; - } - - @Override - public void setName(final String name) { - this.name = name; - } - - /** * Check if Java properties have been specified. * * @return true if Java properties have been specified @@ -152,38 +112,11 @@ public class ApexParameters implements ParameterGroup { return javaProperties != null && javaProperties.length > 0; } - /** - * Gets the Java properties that have been specified. - * - * @return the Java properties that have been specified - */ - public String[][] getJavaProperties() { - return javaProperties; - } - @Override - public GroupValidationResult validate() { - GroupValidationResult result = new GroupValidationResult(this); + public BeanValidationResult validate() { + BeanValidationResult result = new BeanValidator().validateTop(getClass().getSimpleName(), this); - validateJavaProperties(result); - - if (engineServiceParameters == null) { - result.setResult("engineServiceParameters", ValidationStatus.INVALID, - "engine service parameters are not specified"); - } else { - result.setResult("engineServiceParameters", engineServiceParameters.validate()); - } - - // Sanity check, we must have an entry in both output and input maps - if (eventInputParameters.isEmpty()) { - result.setResult(EVENT_INPUT_PARAMETERS_STRING, ValidationStatus.INVALID, - "at least one event input must be specified"); - } - - if (eventOutputParameters.isEmpty()) { - result.setResult(EVENT_OUTPUT_PARAMETERS_STRING, ValidationStatus.INVALID, - "at least one event output must be specified"); - } + result.addResult(validateJavaProperties()); // Validate that the values of all parameters are ok validateEventHandlerMap(EVENT_INPUT_PARAMETERS_STRING, result, eventInputParameters); @@ -201,56 +134,50 @@ public class ApexParameters implements ParameterGroup { /** * This method validates the java properties variable if it is present. - * - * @param result the result of the validation */ - private void validateJavaProperties(GroupValidationResult result) { + private ValidationResult validateJavaProperties() { if (javaProperties == null) { - return; + return null; } - StringBuilder errorMessageBuilder = new StringBuilder(); + BeanValidationResult result = new BeanValidationResult(JAVA_PROPERTIES, javaProperties); + int item = 0; for (String[] javaProperty : javaProperties) { + final String label = "entry " + (item++); + final List<String> value = (javaProperty == null ? null : Arrays.asList(javaProperty)); + BeanValidationResult result2 = new BeanValidationResult(label, value); + if (javaProperty == null) { - errorMessageBuilder.append("java properties array entry is null\n"); + // note: add to result, not result2 + result.addResult(label, null, ValidationStatus.INVALID, Validated.IS_NULL); + } else if (javaProperty.length != 2) { - errorMessageBuilder.append("java properties array entries must have one key and one value: " - + Arrays.deepToString(javaProperty) + "\n"); + // note: add to result, not result2 + result.addResult(label, value, ValidationStatus.INVALID, "must have one key and one value"); + } else if (!ParameterValidationUtils.validateStringParameter(javaProperty[0])) { - errorMessageBuilder - .append("java properties key is null or blank: " + Arrays.deepToString(javaProperty) + "\n"); + result2.addResult("key", javaProperty[0], ValidationStatus.INVALID, Validated.IS_BLANK); + } else if (!ParameterValidationUtils.validateStringParameter(javaProperty[1])) { - errorMessageBuilder - .append("java properties value is null or blank: " + Arrays.deepToString(javaProperty) + "\n"); + result2.addResult("value", javaProperty[1], ValidationStatus.INVALID, Validated.IS_BLANK); } - } - if (errorMessageBuilder.length() > 0) { - result.setResult(JAVA_PROPERTIES, ValidationStatus.INVALID, errorMessageBuilder.toString()); + result.addResult(result2); } + + return result; } /** * This method validates the parameters in an event handler map. - * + * * @param eventHandlerType the type of the event handler to use on error messages * @param result the result object to use to return validation messages * @param parsForValidation The event handler parameters to validate (input or output) */ - private void validateEventHandlerMap(final String eventHandlerType, final GroupValidationResult result, + private void validateEventHandlerMap(final String eventHandlerType, final BeanValidationResult result, final Map<String, EventHandlerParameters> parsForValidation) { for (final Entry<String, EventHandlerParameters> parameterEntry : parsForValidation.entrySet()) { - if (parameterEntry.getKey() == null || parameterEntry.getKey().trim().isEmpty()) { - result.setResult(eventHandlerType, parameterEntry.getKey(), ValidationStatus.INVALID, - "invalid " + eventHandlerType + " name \"" + parameterEntry.getKey() + "\""); - } else if (parameterEntry.getValue() == null) { - result.setResult(eventHandlerType, parameterEntry.getKey(), ValidationStatus.INVALID, - "invalid/Null event input prameters specified for " + eventHandlerType + " name \"" - + parameterEntry.getKey() + "\" "); - } else { - result.setResult(eventHandlerType, parameterEntry.getKey(), parameterEntry.getValue().validate()); - } - parameterEntry.getValue().setName(parameterEntry.getKey()); // Validate parameters for peered mode settings @@ -262,46 +189,46 @@ public class ApexParameters implements ParameterGroup { /** * Validate parameter values for event handlers in a peered mode. - * + * * @param eventHandlerType The event handler type we are checking * @param result The result object to which to append any error messages * @param parameterEntry The entry to check the peered mode on * @param peeredMode The mode to check */ - private void validatePeeredModeParameters(final String eventHandlerType, final GroupValidationResult result, + private void validatePeeredModeParameters(final String eventHandlerType, final BeanValidationResult result, final Entry<String, EventHandlerParameters> parameterEntry, final EventHandlerPeeredMode peeredMode) { final String messagePreamble = "specified peered mode \"" + peeredMode + "\""; final String peer = parameterEntry.getValue().getPeer(peeredMode); if (parameterEntry.getValue().isPeeredMode(peeredMode)) { if (peer == null || peer.trim().isEmpty()) { - result.setResult(eventHandlerType, parameterEntry.getKey(), ValidationStatus.INVALID, + result.addResult(eventHandlerType, parameterEntry.getKey(), ValidationStatus.INVALID, messagePreamble + " mandatory parameter not specified or is null"); } if (parameterEntry.getValue().getPeerTimeout(peeredMode) < 0) { - result.setResult(eventHandlerType, parameterEntry.getKey(), ValidationStatus.INVALID, + result.addResult(eventHandlerType, parameterEntry.getKey(), ValidationStatus.INVALID, messagePreamble + " timeout value \"" + parameterEntry.getValue().getPeerTimeout(peeredMode) + "\" is illegal, specify a non-negative timeout value in milliseconds"); } } else { if (peer != null) { - result.setResult(eventHandlerType, parameterEntry.getKey(), ValidationStatus.INVALID, messagePreamble - + " peer is illegal on " + eventHandlerType + " \"" + parameterEntry.getKey() + "\" "); + result.addResult(eventHandlerType, parameterEntry.getKey(), ValidationStatus.INVALID, messagePreamble + + " peer is illegal"); } if (parameterEntry.getValue().getPeerTimeout(peeredMode) != 0) { - result.setResult(eventHandlerType, parameterEntry.getKey(), ValidationStatus.INVALID, messagePreamble - + " timeout is illegal on " + eventHandlerType + " \"" + parameterEntry.getKey() + "\""); + result.addResult(eventHandlerType, parameterEntry.getKey(), ValidationStatus.INVALID, messagePreamble + + " timeout is illegal"); } } } /** * This method validates that the settings are valid for the given peered mode. - * + * * @param result The result object to which to append any error messages * @param peeredMode The peered mode to check */ - private void validatePeeredMode(final GroupValidationResult result, final EventHandlerPeeredMode peeredMode) { + private void validatePeeredMode(final BeanValidationResult result, final EventHandlerPeeredMode peeredMode) { // Find the input and output event handlers that use this peered mode final Map<String, EventHandlerParameters> inputParametersUsingMode = new HashMap<>(); final Map<String, EventHandlerParameters> outputParametersUsingMode = new HashMap<>(); @@ -327,13 +254,13 @@ public class ApexParameters implements ParameterGroup { /** * This method validates that the settings are valid for the event handlers on one. - * + * * @param handlerMapVariableName the variable name of the map on which the paired parameters are being checked * @param result The result object to which to append any error messages * @param leftModeParameters The mode parameters being checked * @param rightModeParameters The mode parameters being referenced by the checked parameters */ - private void validatePeeredModePeers(final String handlerMapVariableName, final GroupValidationResult result, + private void validatePeeredModePeers(final String handlerMapVariableName, final BeanValidationResult result, final EventHandlerPeeredMode peeredMode, final Map<String, EventHandlerParameters> leftModeParameterMap, final Map<String, EventHandlerParameters> rightModeParameterMap) { @@ -351,7 +278,7 @@ public class ApexParameters implements ParameterGroup { // Check that the peer reference is OK if (rightModeParameters == null) { - result.setResult(handlerMapVariableName, leftModeParameterEntry.getKey(), ValidationStatus.INVALID, + result.addResult(handlerMapVariableName, leftModeParameterEntry.getKey(), ValidationStatus.INVALID, PEER_STRING + '"' + leftModeParameters.getPeer(peeredMode) + FOR_PEERED_MODE_STRING + peeredMode + " does not exist or is not defined with the same peered mode"); continue; @@ -360,20 +287,20 @@ public class ApexParameters implements ParameterGroup { // Now check that the right side peer is the left side event handler final String rightSidePeer = rightModeParameters.getPeer(peeredMode); if (!rightSidePeer.equals(leftModeParameterEntry.getKey())) { - result.setResult(handlerMapVariableName, leftModeParameterEntry.getKey(), ValidationStatus.INVALID, - PEER_STRING + '"' + leftModeParameters.getPeer(peeredMode) + FOR_PEERED_MODE_STRING + peeredMode - + ", value \"" + rightSidePeer + "\" on peer \"" + leftSidePeer - + "\" does not equal event handler \"" + leftModeParameterEntry.getKey() + "\""); + result.addResult(handlerMapVariableName, leftModeParameterEntry.getKey(), ValidationStatus.INVALID, + PEER_STRING + '"' + leftModeParameters.getPeer(peeredMode) + '"' + + FOR_PEERED_MODE_STRING + peeredMode + ", value \"" + rightSidePeer + + "\" on peer does not equal event handler"); } else { // Check for duplicates if (!leftCheckDuplicateSet.add(leftSidePeer)) { - result.setResult(handlerMapVariableName, leftModeParameterEntry.getKey(), ValidationStatus.INVALID, + result.addResult(handlerMapVariableName, leftModeParameterEntry.getKey(), ValidationStatus.INVALID, PEER_STRING + '"' + leftModeParameters.getPeer(peeredMode) + FOR_PEERED_MODE_STRING + peeredMode + ", peer value \"" + leftSidePeer + "\" on event handler \"" + leftModeParameterEntry.getKey() + "\" is used more than once"); } if (!rightCheckDuplicateSet.add(rightSidePeer)) { - result.setResult(handlerMapVariableName, leftModeParameterEntry.getKey(), ValidationStatus.INVALID, + result.addResult(handlerMapVariableName, leftModeParameterEntry.getKey(), ValidationStatus.INVALID, PEER_STRING + '"' + leftModeParameters.getPeer(peeredMode) + FOR_PEERED_MODE_STRING + peeredMode + ", peer value \"" + rightSidePeer + "\" on peer \"" + leftSidePeer + "\" on event handler \"" + leftModeParameterEntry.getKey() + "\" is used more than once"); @@ -381,12 +308,12 @@ public class ApexParameters implements ParameterGroup { } if (!crossCheckPeeredTimeoutValues(leftModeParameters, rightModeParameters, peeredMode)) { - result.setResult(handlerMapVariableName, leftModeParameterEntry.getKey(), ValidationStatus.INVALID, - PEER_STRING + '"' + leftModeParameters.getPeer(peeredMode) + FOR_PEERED_MODE_STRING + peeredMode - + " timeout " + leftModeParameters.getPeerTimeout(peeredMode) + " on event handler \"" - + leftModeParameters.getName() + "\" does not equal timeout " - + rightModeParameters.getPeerTimeout(peeredMode) + " on event handler \"" - + rightModeParameters.getName() + "\""); + result.addResult(handlerMapVariableName, leftModeParameterEntry.getKey(), ValidationStatus.INVALID, + PEER_STRING + '"' + leftModeParameters.getPeer(peeredMode) + '"' + + FOR_PEERED_MODE_STRING + peeredMode + " timeout " + + leftModeParameters.getPeerTimeout(peeredMode) + + " does not equal peer timeout " + + rightModeParameters.getPeerTimeout(peeredMode)); } } @@ -394,7 +321,7 @@ public class ApexParameters implements ParameterGroup { /** * Validate the timeout values on two peers. - * + * * @param leftModeParameters The parameters of the left hand peer * @param peeredMode The peered mode being checked * @return true if the timeout values are cross checked as being OK |