diff options
author | Jim Hahn <jrh3@att.com> | 2021-05-04 11:56:38 +0000 |
---|---|---|
committer | Gerrit Code Review <gerrit@onap.org> | 2021-05-04 11:56:38 +0000 |
commit | e57a113a469c36f5ca483fe3a8f35bb5fd657691 (patch) | |
tree | b4e9f6e77318e7f8d0ce391e7a5c52f987b31016 | |
parent | e0b224292938634c10aecd17b641a0888065a8b1 (diff) | |
parent | e168ce2fad71650ad730519c772a9b093c0a8f43 (diff) |
Merge "Remove GroupValidationResult"
53 files changed, 713 insertions, 1460 deletions
diff --git a/context/context-management/src/main/java/org/onap/policy/apex/context/impl/schema/java/JavaSchemaHelperJsonAdapterParameters.java b/context/context-management/src/main/java/org/onap/policy/apex/context/impl/schema/java/JavaSchemaHelperJsonAdapterParameters.java index 0c68c42a1..75099f6ad 100644 --- a/context/context-management/src/main/java/org/onap/policy/apex/context/impl/schema/java/JavaSchemaHelperJsonAdapterParameters.java +++ b/context/context-management/src/main/java/org/onap/policy/apex/context/impl/schema/java/JavaSchemaHelperJsonAdapterParameters.java @@ -24,7 +24,9 @@ package org.onap.policy.apex.context.impl.schema.java; import com.google.gson.JsonDeserializer; import com.google.gson.JsonSerializer; import com.google.gson.TypeAdapter; -import org.onap.policy.common.parameters.GroupValidationResult; +import org.apache.commons.lang3.StringUtils; +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.ValidationStatus; import org.slf4j.ext.XLogger; @@ -145,8 +147,8 @@ public class JavaSchemaHelperJsonAdapterParameters implements ParameterGroup { * {@inheritDoc}. */ @Override - public GroupValidationResult validate() { - final GroupValidationResult result = new GroupValidationResult(this); + public BeanValidationResult validate() { + final BeanValidationResult result = new BeanValidator().validateTop(getClass().getSimpleName(), this); getClass(ADAPTED_CLASS, adaptedClass, result); @@ -172,7 +174,7 @@ public class JavaSchemaHelperJsonAdapterParameters implements ParameterGroup { } if (errorMessage != null) { - result.setResult(ADAPTOR_CLASS, ValidationStatus.INVALID, errorMessage); + result.addResult(ADAPTOR_CLASS, adaptorClazz, ValidationStatus.INVALID, errorMessage); } } @@ -186,9 +188,9 @@ public class JavaSchemaHelperJsonAdapterParameters implements ParameterGroup { * @param classToCheck the class to check for existence * @param result the result of the check */ - private Class<?> getClass(String parameterName, String classToCheck, final GroupValidationResult result) { - if (classToCheck == null || classToCheck.trim().length() == 0) { - result.setResult(parameterName, ValidationStatus.INVALID, "parameter is null or blank"); + private Class<?> getClass(String parameterName, String classToCheck, final BeanValidationResult result) { + if (StringUtils.isBlank(classToCheck)) { + result.addResult(parameterName, classToCheck, ValidationStatus.INVALID, "parameter is null or blank"); return null; } @@ -196,7 +198,8 @@ public class JavaSchemaHelperJsonAdapterParameters implements ParameterGroup { try { return Class.forName(classToCheck); } catch (final ClassNotFoundException e) { - result.setResult(parameterName, ValidationStatus.INVALID, "class not found: " + e.getMessage()); + result.addResult(parameterName, classToCheck, ValidationStatus.INVALID, + "class not found: " + e.getMessage()); LOGGER.warn("class not found: ", e); return null; } diff --git a/context/context-management/src/main/java/org/onap/policy/apex/context/impl/schema/java/JavaSchemaHelperParameters.java b/context/context-management/src/main/java/org/onap/policy/apex/context/impl/schema/java/JavaSchemaHelperParameters.java index 2c57d4ea9..417a2e8ce 100644 --- a/context/context-management/src/main/java/org/onap/policy/apex/context/impl/schema/java/JavaSchemaHelperParameters.java +++ b/context/context-management/src/main/java/org/onap/policy/apex/context/impl/schema/java/JavaSchemaHelperParameters.java @@ -1,6 +1,7 @@ /*- * ============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. @@ -22,9 +23,9 @@ package org.onap.policy.apex.context.impl.schema.java; import java.util.LinkedHashMap; import java.util.Map; -import java.util.Map.Entry; import org.onap.policy.apex.context.parameters.SchemaHelperParameters; -import org.onap.policy.common.parameters.GroupValidationResult; +import org.onap.policy.common.parameters.annotations.NotNull; +import org.onap.policy.common.parameters.annotations.Valid; /** * The Schema helper parameter class for the Java schema helper is an empty parameter class that acts as a placeholder. @@ -33,7 +34,7 @@ import org.onap.policy.common.parameters.GroupValidationResult; */ public class JavaSchemaHelperParameters extends SchemaHelperParameters { // Map of specific type adapters for this event - private Map<String, JavaSchemaHelperJsonAdapterParameters> jsonAdapters = new LinkedHashMap<>(); + private Map<String, @NotNull @Valid JavaSchemaHelperJsonAdapterParameters> jsonAdapters = new LinkedHashMap<>(); /** * Constructor for Java schema helper parameters. @@ -61,17 +62,4 @@ public class JavaSchemaHelperParameters extends SchemaHelperParameters { this.jsonAdapters = jsonAdapters; } - /** - * {@inheritDoc}. - */ - @Override - public GroupValidationResult validate() { - final GroupValidationResult result = new GroupValidationResult(this); - - for (Entry<String, JavaSchemaHelperJsonAdapterParameters> typeAdapterEntry : jsonAdapters.entrySet()) { - result.setResult("jsonAdapters", typeAdapterEntry.getKey(), typeAdapterEntry.getValue().validate()); - } - return result; - } - } diff --git a/context/context-management/src/main/java/org/onap/policy/apex/context/parameters/ContextParameters.java b/context/context-management/src/main/java/org/onap/policy/apex/context/parameters/ContextParameters.java index 21b3a5eaf..56b6c8ec4 100644 --- a/context/context-management/src/main/java/org/onap/policy/apex/context/parameters/ContextParameters.java +++ b/context/context-management/src/main/java/org/onap/policy/apex/context/parameters/ContextParameters.java @@ -1,6 +1,7 @@ /*- * ============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. @@ -20,8 +21,9 @@ package org.onap.policy.apex.context.parameters; -import org.onap.policy.common.parameters.GroupValidationResult; -import org.onap.policy.common.parameters.ParameterGroup; +import org.onap.policy.common.parameters.ParameterGroupImpl; +import org.onap.policy.common.parameters.annotations.NotNull; +import org.onap.policy.common.parameters.annotations.Valid; // @formatter:off /** @@ -42,25 +44,19 @@ import org.onap.policy.common.parameters.ParameterGroup; * being used for context album persistence * </ol> */ -// @formatter:on -public class ContextParameters implements ParameterGroup { - // @formatter:off - // Plugin Parameters - private String name; - private DistributorParameters distributorParameters = new DistributorParameters(); - private SchemaParameters schemaParameters = new SchemaParameters(); - private LockManagerParameters lockManagerParameters = new LockManagerParameters(); - private PersistorParameters persistorParameters = new PersistorParameters(); +@NotNull +public class ContextParameters extends ParameterGroupImpl { + private @Valid DistributorParameters distributorParameters = new DistributorParameters(); + private @Valid SchemaParameters schemaParameters = new SchemaParameters(); + private @Valid LockManagerParameters lockManagerParameters = new LockManagerParameters(); + private @Valid PersistorParameters persistorParameters = new PersistorParameters(); // @formatter:on /** * Constructor to create a context parameters instance and register the instance with the parameter service. */ public ContextParameters() { - super(); - - // Set the name for the parameters - this.name = ContextParameterConstants.MAIN_GROUP_NAME; + super(ContextParameterConstants.MAIN_GROUP_NAME); } /** @@ -137,32 +133,8 @@ public class ContextParameters implements ParameterGroup { @Override public String toString() { - return "ContextParameters [name=" + name + ", distributorParameters=" + distributorParameters + return "ContextParameters [name=" + getName() + ", distributorParameters=" + distributorParameters + ", schemaParameters=" + schemaParameters + ", lockManagerParameters=" + lockManagerParameters + ", persistorParameters=" + persistorParameters + "]"; } - - @Override - public String getName() { - return name; - } - - @Override - public void setName(final String name) { - this.name = name; - } - - @Override - public GroupValidationResult validate() { - GroupValidationResult result = new GroupValidationResult(this); - - // @formatter:off - result.setResult("distributorParameters", distributorParameters.validate()); - result.setResult("schemaParameters", schemaParameters.validate()); - result.setResult("lockManagerParameters", lockManagerParameters.validate()); - result.setResult("persistorParameters", persistorParameters.validate()); - // @formatter:on - - return result; - } } diff --git a/context/context-management/src/main/java/org/onap/policy/apex/context/parameters/DistributorParameters.java b/context/context-management/src/main/java/org/onap/policy/apex/context/parameters/DistributorParameters.java index 8cb6c5916..e1432e6c5 100644 --- a/context/context-management/src/main/java/org/onap/policy/apex/context/parameters/DistributorParameters.java +++ b/context/context-management/src/main/java/org/onap/policy/apex/context/parameters/DistributorParameters.java @@ -1,6 +1,7 @@ /*- * ============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. @@ -21,8 +22,9 @@ package org.onap.policy.apex.context.parameters; import org.onap.policy.apex.context.impl.distribution.jvmlocal.JvmLocalDistributor; -import org.onap.policy.common.parameters.GroupValidationResult; -import org.onap.policy.common.parameters.ParameterGroup; +import org.onap.policy.common.parameters.ParameterGroupImpl; +import org.onap.policy.common.parameters.annotations.ClassName; +import org.onap.policy.common.parameters.annotations.NotNull; /** * An empty distributor parameter class that may be specialized by context distributor plugins that @@ -31,22 +33,19 @@ import org.onap.policy.common.parameters.ParameterGroup; * * @author Liam Fallon (liam.fallon@ericsson.com) */ -public class DistributorParameters implements ParameterGroup { +@NotNull +public class DistributorParameters extends ParameterGroupImpl { /** The default distributor makes context albums available to all threads in a single JVM. */ public static final String DEFAULT_DISTRIBUTOR_PLUGIN_CLASS = JvmLocalDistributor.class.getName(); - private String name; - private String pluginClass = DEFAULT_DISTRIBUTOR_PLUGIN_CLASS; + private @ClassName String pluginClass = DEFAULT_DISTRIBUTOR_PLUGIN_CLASS; /** * Constructor to create a distributor parameters instance and register the instance with the * parameter service. */ public DistributorParameters() { - super(); - - // Set the name for the parameters - this.name = ContextParameterConstants.DISTRIBUTOR_GROUP_NAME; + super(ContextParameterConstants.DISTRIBUTOR_GROUP_NAME); } /** @@ -69,21 +68,6 @@ public class DistributorParameters implements ParameterGroup { @Override public String toString() { - return "DistributorParameters [name=" + name + ", pluginClass=" + pluginClass + "]"; - } - - @Override - public String getName() { - return name; - } - - @Override - public void setName(final String name) { - this.name = name; - } - - @Override - public GroupValidationResult validate() { - return new GroupValidationResult(this); + return "DistributorParameters [name=" + getName() + ", pluginClass=" + pluginClass + "]"; } } diff --git a/context/context-management/src/main/java/org/onap/policy/apex/context/parameters/LockManagerParameters.java b/context/context-management/src/main/java/org/onap/policy/apex/context/parameters/LockManagerParameters.java index 2f8aa0d2a..d49adf464 100644 --- a/context/context-management/src/main/java/org/onap/policy/apex/context/parameters/LockManagerParameters.java +++ b/context/context-management/src/main/java/org/onap/policy/apex/context/parameters/LockManagerParameters.java @@ -1,6 +1,7 @@ /*- * ============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. @@ -21,8 +22,9 @@ package org.onap.policy.apex.context.parameters; import org.onap.policy.apex.context.impl.locking.jvmlocal.JvmLocalLockManager; -import org.onap.policy.common.parameters.GroupValidationResult; -import org.onap.policy.common.parameters.ParameterGroup; +import org.onap.policy.common.parameters.ParameterGroupImpl; +import org.onap.policy.common.parameters.annotations.ClassName; +import org.onap.policy.common.parameters.annotations.NotNull; /** * An empty lock manager parameter class that may be specialized by context lock manager plugins @@ -31,24 +33,21 @@ import org.onap.policy.common.parameters.ParameterGroup; * * @author Liam Fallon (liam.fallon@ericsson.com) */ -public class LockManagerParameters implements ParameterGroup { +@NotNull +public class LockManagerParameters extends ParameterGroupImpl { /** * The default lock manager can lock context album instance across all threads in a single JVM. */ public static final String DEFAULT_LOCK_MANAGER_PLUGIN_CLASS = JvmLocalLockManager.class.getName(); - private String name; - private String pluginClass = DEFAULT_LOCK_MANAGER_PLUGIN_CLASS; + private @ClassName String pluginClass = DEFAULT_LOCK_MANAGER_PLUGIN_CLASS; /** * Constructor to create a lock manager parameters instance and register the instance with the * parameter service. */ public LockManagerParameters() { - super(); - - // Set the name for the parameters - this.name = ContextParameterConstants.LOCKING_GROUP_NAME; + super(ContextParameterConstants.LOCKING_GROUP_NAME); } /** @@ -68,24 +67,9 @@ public class LockManagerParameters implements ParameterGroup { public void setPluginClass(final String pluginClass) { this.pluginClass = pluginClass; } - - @Override - public String toString() { - return "LockManagerParameters [name=" + name + ", pluginClass=" + pluginClass + "]"; - } @Override - public String getName() { - return name; - } - - @Override - public void setName(final String name) { - this.name = name; - } - - @Override - public GroupValidationResult validate() { - return new GroupValidationResult(this); + public String toString() { + return "LockManagerParameters [name=" + getName() + ", pluginClass=" + pluginClass + "]"; } } diff --git a/context/context-management/src/main/java/org/onap/policy/apex/context/parameters/PersistorParameters.java b/context/context-management/src/main/java/org/onap/policy/apex/context/parameters/PersistorParameters.java index 3616b526e..98865cd88 100644 --- a/context/context-management/src/main/java/org/onap/policy/apex/context/parameters/PersistorParameters.java +++ b/context/context-management/src/main/java/org/onap/policy/apex/context/parameters/PersistorParameters.java @@ -1,6 +1,7 @@ /*- * ============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. @@ -20,8 +21,9 @@ package org.onap.policy.apex.context.parameters; -import org.onap.policy.common.parameters.GroupValidationResult; -import org.onap.policy.common.parameters.ParameterGroup; +import org.onap.policy.common.parameters.ParameterGroupImpl; +import org.onap.policy.common.parameters.annotations.ClassName; +import org.onap.policy.common.parameters.annotations.NotNull; /** * A persistor parameter class that may be specialized by context persistor plugins that require @@ -36,7 +38,8 @@ import org.onap.policy.common.parameters.ParameterGroup; * * @author Liam Fallon (liam.fallon@ericsson.com) */ -public class PersistorParameters implements ParameterGroup { +@NotNull +public class PersistorParameters extends ParameterGroupImpl { /** The default persistor is a dummy persistor that stubs the Persistor interface. */ public static final String DEFAULT_PERSISTOR_PLUGIN_CLASS = "org.onap.policy.apex.context.impl.persistence.ephemeral.EphemeralPersistor"; @@ -44,8 +47,7 @@ public class PersistorParameters implements ParameterGroup { /** Default periodic flushing interval, 5 minutes in milliseconds. */ public static final long DEFAULT_FLUSH_PERIOD = 300000; - private String name; - private String pluginClass = DEFAULT_PERSISTOR_PLUGIN_CLASS; + private @ClassName String pluginClass = DEFAULT_PERSISTOR_PLUGIN_CLASS; // Parameters for flushing private long flushPeriod = DEFAULT_FLUSH_PERIOD; @@ -55,10 +57,7 @@ public class PersistorParameters implements ParameterGroup { * parameter service. */ public PersistorParameters() { - super(); - - // Set the name for the parameters - this.name = ContextParameterConstants.PERSISTENCE_GROUP_NAME; + super(ContextParameterConstants.PERSISTENCE_GROUP_NAME); } /** @@ -103,22 +102,7 @@ public class PersistorParameters implements ParameterGroup { @Override public String toString() { - return "PersistorParameters [name=" + name + ", pluginClass=" + pluginClass + ", flushPeriod=" + flushPeriod - + "]"; - } - - @Override - public String getName() { - return name; - } - - @Override - public void setName(final String name) { - this.name = name; - } - - @Override - public GroupValidationResult validate() { - return new GroupValidationResult(this); + return "PersistorParameters [name=" + getName() + ", pluginClass=" + pluginClass + ", flushPeriod=" + + flushPeriod + "]"; } } diff --git a/context/context-management/src/main/java/org/onap/policy/apex/context/parameters/SchemaHelperParameters.java b/context/context-management/src/main/java/org/onap/policy/apex/context/parameters/SchemaHelperParameters.java index e2bb4d6b9..0c6d3592b 100644 --- a/context/context-management/src/main/java/org/onap/policy/apex/context/parameters/SchemaHelperParameters.java +++ b/context/context-management/src/main/java/org/onap/policy/apex/context/parameters/SchemaHelperParameters.java @@ -1,6 +1,7 @@ /*- * ============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. @@ -20,8 +21,9 @@ package org.onap.policy.apex.context.parameters; -import org.onap.policy.common.parameters.GroupValidationResult; -import org.onap.policy.common.parameters.ParameterGroup; +import org.onap.policy.common.parameters.ParameterGroupImpl; +import org.onap.policy.common.parameters.annotations.ClassName; +import org.onap.policy.common.parameters.annotations.NotNull; /** * An empty schema helper parameter class that may be specialized by context schema helper plugins that require plugin @@ -29,9 +31,9 @@ import org.onap.policy.common.parameters.ParameterGroup; * * @author Liam Fallon (liam.fallon@ericsson.com) */ -public class SchemaHelperParameters implements ParameterGroup { - private String name; - private String schemaHelperPluginClass; +@NotNull +public class SchemaHelperParameters extends ParameterGroupImpl { + private @ClassName String schemaHelperPluginClass; /** * Constructor to create a schema helper parameters instance and register the instance with the parameter service. @@ -57,24 +59,10 @@ public class SchemaHelperParameters implements ParameterGroup { public void setSchemaHelperPluginClass(final String pluginClass) { schemaHelperPluginClass = pluginClass; } - - @Override - public String toString() { - return "SchemaHelperParameters [name=" + name + ", schemaHelperPluginClass=" + schemaHelperPluginClass + "]"; - } - - @Override - public String getName() { - return name; - } @Override - public void setName(final String name) { - this.name = name; - } - - @Override - public GroupValidationResult validate() { - return new GroupValidationResult(this); + public String toString() { + return "SchemaHelperParameters [name=" + getName() + ", schemaHelperPluginClass=" + schemaHelperPluginClass + + "]"; } } diff --git a/context/context-management/src/main/java/org/onap/policy/apex/context/parameters/SchemaParameters.java b/context/context-management/src/main/java/org/onap/policy/apex/context/parameters/SchemaParameters.java index 3f5c26e34..a1dedc5c0 100644 --- a/context/context-management/src/main/java/org/onap/policy/apex/context/parameters/SchemaParameters.java +++ b/context/context-management/src/main/java/org/onap/policy/apex/context/parameters/SchemaParameters.java @@ -1,6 +1,7 @@ /*- * ============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. @@ -21,11 +22,11 @@ package org.onap.policy.apex.context.parameters; import java.util.Map; -import java.util.Map.Entry; import java.util.TreeMap; import org.onap.policy.apex.context.impl.schema.java.JavaSchemaHelperParameters; -import org.onap.policy.common.parameters.GroupValidationResult; -import org.onap.policy.common.parameters.ParameterGroup; +import org.onap.policy.common.parameters.ParameterGroupImpl; +import org.onap.policy.common.parameters.annotations.NotNull; +import org.onap.policy.common.parameters.annotations.Valid; /** * Bean class holding schema parameters for schemas and their helpers. As more than one schema can be used in Apex @@ -37,23 +38,20 @@ import org.onap.policy.common.parameters.ParameterGroup; * * @author Liam Fallon (liam.fallon@ericsson.com) */ -public class SchemaParameters implements ParameterGroup { +@NotNull +public class SchemaParameters extends ParameterGroupImpl { /** The Java schema flavour is always available for use. */ public static final String DEFAULT_SCHEMA_FLAVOUR = "Java"; - private String name; // A map of parameters for executors of various logic types - private Map<String, SchemaHelperParameters> schemaHelperParameterMap; + private Map<String, @NotNull @Valid SchemaHelperParameters> schemaHelperParameterMap; /** * Constructor to create a distributor parameters instance and register the instance with the parameter service. */ public SchemaParameters() { - super(); - - // Set the name for the parameters - this.name = ContextParameterConstants.SCHEMA_GROUP_NAME; + super(ContextParameterConstants.SCHEMA_GROUP_NAME); schemaHelperParameterMap = new TreeMap<>(); @@ -88,25 +86,4 @@ public class SchemaParameters implements ParameterGroup { public SchemaHelperParameters getSchemaHelperParameters(final String schemaFlavour) { return schemaHelperParameterMap.get(schemaFlavour); } - - @Override - public String getName() { - return name; - } - - @Override - public void setName(final String name) { - this.name = name; - } - - @Override - public GroupValidationResult validate() { - final GroupValidationResult result = new GroupValidationResult(this); - - for (Entry<String, SchemaHelperParameters> schemaHelperEntry : schemaHelperParameterMap.entrySet()) { - result.setResult("schemaHelperParameterMap", schemaHelperEntry.getKey(), - schemaHelperEntry.getValue().validate()); - } - return result; - } } diff --git a/core/core-engine/src/main/java/org/onap/policy/apex/core/engine/EngineParameters.java b/core/core-engine/src/main/java/org/onap/policy/apex/core/engine/EngineParameters.java index 3ca74153e..3cf43c581 100644 --- a/core/core-engine/src/main/java/org/onap/policy/apex/core/engine/EngineParameters.java +++ b/core/core-engine/src/main/java/org/onap/policy/apex/core/engine/EngineParameters.java @@ -2,6 +2,7 @@ * ============LICENSE_START======================================================= * Copyright (C) 2016-2018 Ericsson. All rights reserved. * Modifications Copyright (C) 2020 Nordix Foundation. + * 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. @@ -24,14 +25,13 @@ package org.onap.policy.apex.core.engine; import java.util.ArrayList; import java.util.List; import java.util.Map; -import java.util.Map.Entry; import java.util.TreeMap; import lombok.Getter; import lombok.Setter; import org.onap.policy.apex.context.parameters.ContextParameters; -import org.onap.policy.common.parameters.GroupValidationResult; -import org.onap.policy.common.parameters.ParameterGroup; -import org.onap.policy.common.parameters.ValidationResult; +import org.onap.policy.common.parameters.ParameterGroupImpl; +import org.onap.policy.common.parameters.annotations.NotNull; +import org.onap.policy.common.parameters.annotations.Valid; /** * This class holds the parameters for a single Apex engine. This parameter class holds parameters for context schemas @@ -51,44 +51,21 @@ import org.onap.policy.common.parameters.ValidationResult; */ @Getter @Setter -public class EngineParameters implements ParameterGroup { - private ContextParameters contextParameters = new ContextParameters(); +@NotNull +public class EngineParameters extends ParameterGroupImpl { + private @Valid ContextParameters contextParameters = new ContextParameters(); - // Parameter group name - private String name; // A map of parameters for executors of various logic types - private Map<String, ExecutorParameters> executorParameterMap = new TreeMap<>(); + private Map<String, @NotNull @Valid ExecutorParameters> executorParameterMap = new TreeMap<>(); // A list of parameters to be passed to the task, so that they can be used in the logic - private List<TaskParameters> taskParameters = new ArrayList<>(); + private List<@NotNull @Valid TaskParameters> taskParameters = new ArrayList<>(); /** * Constructor to create an engine parameters instance and register the instance with the parameter service. */ public EngineParameters() { - super(); - - // Set the name for the parameters - this.name = EngineParameterConstants.MAIN_GROUP_NAME; + super(EngineParameterConstants.MAIN_GROUP_NAME); } - - @Override - public GroupValidationResult validate() { - final GroupValidationResult result = new GroupValidationResult(this); - - result.setResult("contextParameters", contextParameters.validate()); - - for (Entry<String, ExecutorParameters> executorParEntry : executorParameterMap.entrySet()) { - result.setResult("executorParameterMap", executorParEntry.getKey(), executorParEntry.getValue().validate()); - } - for (TaskParameters taskParam : taskParameters) { - ValidationResult taskParamValidationResult = taskParam.validate("taskParameters"); - result.setResult(taskParamValidationResult.getName(), taskParamValidationResult.getStatus(), - taskParamValidationResult.getResult()); - } - return result; - } - - } diff --git a/core/core-engine/src/main/java/org/onap/policy/apex/core/engine/ExecutorParameters.java b/core/core-engine/src/main/java/org/onap/policy/apex/core/engine/ExecutorParameters.java index 7de121d66..7bff07d9a 100644 --- a/core/core-engine/src/main/java/org/onap/policy/apex/core/engine/ExecutorParameters.java +++ b/core/core-engine/src/main/java/org/onap/policy/apex/core/engine/ExecutorParameters.java @@ -1,6 +1,7 @@ /*- * ============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. @@ -20,8 +21,7 @@ package org.onap.policy.apex.core.engine; -import org.onap.policy.common.parameters.GroupValidationResult; -import org.onap.policy.common.parameters.ParameterGroup; +import org.onap.policy.common.parameters.ParameterGroupImpl; /** * This class provides the executors for a logic flavour. Plugin classes for execution of task @@ -32,10 +32,7 @@ import org.onap.policy.common.parameters.ParameterGroup; * * @author Liam Fallon (liam.fallon@ericsson.com) */ -public class ExecutorParameters implements ParameterGroup { - // Parameter group name - private String name; - +public class ExecutorParameters extends ParameterGroupImpl { // Executor Plugin classes for executors private String taskExecutorPluginClass; private String taskSelectionExecutorPluginClass; @@ -46,10 +43,7 @@ public class ExecutorParameters implements ParameterGroup { * parameter service. */ public ExecutorParameters() { - super(); - - // Set the name for the parameters - this.name = EngineParameterConstants.EXECUTOR_GROUP_NAME; + super(EngineParameterConstants.EXECUTOR_GROUP_NAME); } /** @@ -110,23 +104,8 @@ public class ExecutorParameters implements ParameterGroup { @Override public String toString() { - return "ExecutorParameters [name=" + name + ", taskExecutorPluginClass=" + taskExecutorPluginClass + return "ExecutorParameters [name=" + getName() + ", taskExecutorPluginClass=" + taskExecutorPluginClass + ", taskSelectionExecutorPluginClass=" + taskSelectionExecutorPluginClass + ", stateFinalizerExecutorPluginClass=" + stateFinalizerExecutorPluginClass + "]"; } - - @Override - public String getName() { - return name; - } - - @Override - public void setName(final String name) { - this.name = name; - } - - @Override - public GroupValidationResult validate() { - return new GroupValidationResult(this); - } } diff --git a/core/core-engine/src/test/java/org/onap/policy/apex/core/engine/EngineParametersTest.java b/core/core-engine/src/test/java/org/onap/policy/apex/core/engine/EngineParametersTest.java index ba936f24a..5427c3515 100644 --- a/core/core-engine/src/test/java/org/onap/policy/apex/core/engine/EngineParametersTest.java +++ b/core/core-engine/src/test/java/org/onap/policy/apex/core/engine/EngineParametersTest.java @@ -2,6 +2,7 @@ * ============LICENSE_START======================================================= * Copyright (C) 2018 Ericsson. All rights reserved. * Modifications Copyright (C) 2020 Nordix Foundation. + * 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. @@ -21,6 +22,7 @@ package org.onap.policy.apex.core.engine; +import static org.assertj.core.api.Assertions.assertThat; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; @@ -59,6 +61,8 @@ public class EngineParametersTest { taskParameters.add(new TaskParameters("param1key", "param1value", "param1taskId")); taskParameters.add(new TaskParameters("param1key", "param1value", null)); pars.setTaskParameters(taskParameters); + + assertThat(pars.validate().getResult()).isNull(); assertTrue(pars.validate().isValid()); ParameterService.register(pars); diff --git a/core/core-engine/src/test/java/org/onap/policy/apex/core/engine/ExecutorParametersTest.java b/core/core-engine/src/test/java/org/onap/policy/apex/core/engine/ExecutorParametersTest.java index 88c8c852d..784580422 100644 --- a/core/core-engine/src/test/java/org/onap/policy/apex/core/engine/ExecutorParametersTest.java +++ b/core/core-engine/src/test/java/org/onap/policy/apex/core/engine/ExecutorParametersTest.java @@ -1,25 +1,27 @@ /*- * ============LICENSE_START======================================================= * Copyright (C) 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========================================================= */ package org.onap.policy.apex.core.engine; +import static org.assertj.core.api.Assertions.assertThat; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; @@ -47,10 +49,11 @@ public class ExecutorParametersTest { assertEquals("ExecutorParameters [name=Name, taskExecutorPluginClass=some.task.executor.plugin.class, " + "taskSelectionExecutorPluginClass=some.task.selection.executor.plugin.class, " + "stateFinalizerExecutorPluginClass=some.state.finalizer.plugin.class]", pars.toString()); - + + assertThat(pars.validate().getResult()).isNull(); assertTrue(pars.validate().isValid()); - - + + ParameterService.register(pars); ParameterService.deregister(pars); } diff --git a/plugins/plugins-event/plugins-event-carrier/plugins-event-carrier-grpc/src/test/java/org/onap/policy/apex/plugins/event/carrier/grpc/GrpcCarrierTechnologyParametersTest.java b/plugins/plugins-event/plugins-event-carrier/plugins-event-carrier-grpc/src/test/java/org/onap/policy/apex/plugins/event/carrier/grpc/GrpcCarrierTechnologyParametersTest.java index 480d8423b..7c79e95b6 100644 --- a/plugins/plugins-event/plugins-event-carrier/plugins-event-carrier-grpc/src/test/java/org/onap/policy/apex/plugins/event/carrier/grpc/GrpcCarrierTechnologyParametersTest.java +++ b/plugins/plugins-event/plugins-event-carrier/plugins-event-carrier-grpc/src/test/java/org/onap/policy/apex/plugins/event/carrier/grpc/GrpcCarrierTechnologyParametersTest.java @@ -1,6 +1,7 @@ /*- * ============LICENSE_START======================================================= * Copyright (C) 2020 Nordix Foundation. + * 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. @@ -28,7 +29,7 @@ import org.assertj.core.api.Assertions; import org.junit.Before; import org.junit.Test; import org.onap.policy.apex.service.engine.event.ApexEventException; -import org.onap.policy.common.parameters.GroupValidationResult; +import org.onap.policy.common.parameters.ValidationResult; public class GrpcCarrierTechnologyParametersTest { @@ -45,7 +46,7 @@ public class GrpcCarrierTechnologyParametersTest { @Test public void testGrpcCarrierTechnologyParameters_invalid_producer_params() throws ApexEventException { - GroupValidationResult result = params.validate(); + ValidationResult result = params.validate(); assertTrue(result.isValid()); assertThatThrownBy(() -> params.validateGrpcParameters(true)) .hasMessage("Issues in specifying gRPC Producer parameters:\ntimeout should have a positive value.\n" @@ -64,7 +65,7 @@ public class GrpcCarrierTechnologyParametersTest { params.setPort(2233); params.setTimeout(1000); params.setUsername(USERNAME); - GroupValidationResult result = params.validate(); + ValidationResult result = params.validate(); assertTrue(result.isValid()); Assertions.assertThatCode(() -> params.validateGrpcParameters(true)).doesNotThrowAnyException(); } @@ -77,7 +78,7 @@ public class GrpcCarrierTechnologyParametersTest { params.setUsername(USERNAME); params.setPort(23); // invalid value - GroupValidationResult result = params.validate(); + ValidationResult result = params.validate(); assertTrue(result.isValid()); assertThatThrownBy(() -> params.validateGrpcParameters(true)) .hasMessageContaining("port range should be between 1024 and 65535"); diff --git a/plugins/plugins-event/plugins-event-carrier/plugins-event-carrier-jms/src/main/java/org/onap/policy/apex/plugins/event/carrier/jms/JmsCarrierTechnologyParameters.java b/plugins/plugins-event/plugins-event-carrier/plugins-event-carrier-jms/src/main/java/org/onap/policy/apex/plugins/event/carrier/jms/JmsCarrierTechnologyParameters.java index d93a1b981..d4647b584 100644 --- a/plugins/plugins-event/plugins-event-carrier/plugins-event-carrier-jms/src/main/java/org/onap/policy/apex/plugins/event/carrier/jms/JmsCarrierTechnologyParameters.java +++ b/plugins/plugins-event/plugins-event-carrier/plugins-event-carrier-jms/src/main/java/org/onap/policy/apex/plugins/event/carrier/jms/JmsCarrierTechnologyParameters.java @@ -2,6 +2,7 @@ * ============LICENSE_START======================================================= * Copyright (C) 2016-2018 Ericsson. All rights reserved. * Modifications Copyright (C) 2019,2021 Nordix Foundation. + * 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. @@ -23,10 +24,10 @@ package org.onap.policy.apex.plugins.event.carrier.jms; import java.util.Properties; import javax.naming.Context; -import org.apache.commons.lang3.StringUtils; import org.onap.policy.apex.service.parameters.carriertechnology.CarrierTechnologyParameters; -import org.onap.policy.common.parameters.GroupValidationResult; -import org.onap.policy.common.parameters.ValidationStatus; +import org.onap.policy.common.parameters.annotations.Min; +import org.onap.policy.common.parameters.annotations.NotBlank; +import org.onap.policy.common.parameters.annotations.NotNull; /** * Apex parameters for JMS as an event carrier technology. @@ -100,12 +101,19 @@ public class JmsCarrierTechnologyParameters extends CarrierTechnologyParameters // JMS carrier parameters private String connectionFactory = DEFAULT_CONNECTION_FACTORY; + @NotNull @NotBlank private String initialContextFactory = DEFAULT_INITIAL_CTXT_FACTORY; + @NotNull @NotBlank private String providerUrl = DEFAULT_PROVIDER_URL; + @NotNull @NotBlank private String securityPrincipal = DEFAULT_SECURITY_PRINCIPAL; + @NotNull @NotBlank private String securityCredentials = DEFAULT_SECURITY_CREDENTIALS; + @NotNull @NotBlank private String producerTopic = DEFAULT_PRODUCER_TOPIC; + @NotNull @NotBlank private String consumerTopic = DEFAULT_CONSUMER_TOPIC; + @Min(0) private int consumerWaitTime = DEFAULT_CONSUMER_WAIT_TIME; private boolean objectMessageSending = DEFAULT_TO_OBJECT_MSG_SENDING; // @formatter:on @@ -327,56 +335,4 @@ public class JmsCarrierTechnologyParameters extends CarrierTechnologyParameters public void setObjectMessageSending(final boolean objectMessageSending) { this.objectMessageSending = objectMessageSending; } - - /** - * {@inheritDoc}. - */ - @Override - public GroupValidationResult validate() { - final GroupValidationResult result = super.validate(); - - if (StringUtils.isBlank(initialContextFactory)) { - result.setResult("initialContextFactory", ValidationStatus.INVALID, - "initialContextFactory must be specified as a string that is a class that implements the " - + "interface org.jboss.naming.remote.client.InitialContextFactory"); - } - - if (StringUtils.isBlank(providerUrl)) { - result.setResult("providerUrl", ValidationStatus.INVALID, - "providerUrl must be specified as a URL string that specifies the location of " - + "configuration information for the service provider to use " - + "such as remote://localhost:4447"); - } - - if (StringUtils.isBlank(securityPrincipal)) { - result.setResult("securityPrincipal", ValidationStatus.INVALID, - "securityPrincipal must be specified the identity of the principal for authenticating " - + "the caller to the service"); - } - - if (StringUtils.isBlank(securityCredentials)) { - result.setResult("securityCredentials", ValidationStatus.INVALID, - " securityCredentials must be specified as the credentials of the " - + "principal for authenticating the caller to the service"); - } - - if (StringUtils.isBlank(producerTopic)) { - result.setResult("producerTopic", ValidationStatus.INVALID, - " producerTopic must be a string that identifies the JMS topic " - + "on which Apex will send events"); - } - - if (StringUtils.isBlank(consumerTopic)) { - result.setResult("consumerTopic", ValidationStatus.INVALID, - " consumerTopic must be a string that identifies the JMS topic " - + "on which Apex will recieve events"); - } - - if (consumerWaitTime < 0) { - result.setResult("consumerWaitTime", ValidationStatus.INVALID, - "[" + consumerWaitTime + "] invalid, must be specified as consumerWaitTime >= 0"); - } - - return result; - } } diff --git a/plugins/plugins-event/plugins-event-carrier/plugins-event-carrier-jms/src/test/java/org/onap/policy/apex/plugins/event/carrier/jms/JmsCarrierTechnologyParametersTest.java b/plugins/plugins-event/plugins-event-carrier/plugins-event-carrier-jms/src/test/java/org/onap/policy/apex/plugins/event/carrier/jms/JmsCarrierTechnologyParametersTest.java index 5f1b99500..36f2e31ce 100644 --- a/plugins/plugins-event/plugins-event-carrier/plugins-event-carrier-jms/src/test/java/org/onap/policy/apex/plugins/event/carrier/jms/JmsCarrierTechnologyParametersTest.java +++ b/plugins/plugins-event/plugins-event-carrier/plugins-event-carrier-jms/src/test/java/org/onap/policy/apex/plugins/event/carrier/jms/JmsCarrierTechnologyParametersTest.java @@ -2,6 +2,7 @@ * ============LICENSE_START======================================================= * Copyright (C) 2019 Samsung. All rights reserved. * Modifications Copyright (C) 2019,2021 Nordix Foundation. + * 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. @@ -32,15 +33,15 @@ import java.util.Properties; import javax.naming.Context; import org.junit.Before; import org.junit.Test; -import org.onap.policy.common.parameters.GroupValidationResult; import org.onap.policy.common.parameters.ParameterRuntimeException; +import org.onap.policy.common.parameters.ValidationResult; public class JmsCarrierTechnologyParametersTest { JmsCarrierTechnologyParameters jmsCarrierTechnologyParameters = null; Properties jmsProducerProperties = null; Properties jmsConsumerProperties = null; - GroupValidationResult result = null; + ValidationResult result = null; public static final String JMS_CARRIER_TECHNOLOGY_LABEL = "JMS"; diff --git a/plugins/plugins-event/plugins-event-carrier/plugins-event-carrier-kafka/src/main/java/org/onap/policy/apex/plugins/event/carrier/kafka/KafkaCarrierTechnologyParameters.java b/plugins/plugins-event/plugins-event-carrier/plugins-event-carrier-kafka/src/main/java/org/onap/policy/apex/plugins/event/carrier/kafka/KafkaCarrierTechnologyParameters.java index eb1f15c93..475017283 100644 --- a/plugins/plugins-event/plugins-event-carrier/plugins-event-carrier-kafka/src/main/java/org/onap/policy/apex/plugins/event/carrier/kafka/KafkaCarrierTechnologyParameters.java +++ b/plugins/plugins-event/plugins-event-carrier/plugins-event-carrier-kafka/src/main/java/org/onap/policy/apex/plugins/event/carrier/kafka/KafkaCarrierTechnologyParameters.java @@ -3,6 +3,7 @@ * Copyright (C) 2016-2018 Ericsson. All rights reserved. * Modifications Copyright (C) 2019 Nordix Foundation. * Modifications Copyright (C) 2021 Bell Canada. 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. @@ -25,16 +26,20 @@ package org.onap.policy.apex.plugins.event.carrier.kafka; import java.time.Duration; import java.util.Arrays; import java.util.Collection; +import java.util.List; import java.util.Properties; import lombok.Getter; import lombok.Setter; import org.apache.commons.lang3.StringUtils; import org.apache.kafka.clients.producer.internals.DefaultPartitioner; import org.onap.policy.apex.service.parameters.carriertechnology.CarrierTechnologyParameters; -import org.onap.policy.common.parameters.GroupValidationResult; +import org.onap.policy.common.parameters.BeanValidationResult; +import org.onap.policy.common.parameters.ObjectValidationResult; +import org.onap.policy.common.parameters.ValidationResult; import org.onap.policy.common.parameters.ValidationStatus; import org.onap.policy.common.parameters.annotations.Min; import org.onap.policy.common.parameters.annotations.NotBlank; +import org.onap.policy.models.base.Validated; /** * Apex parameters for Kafka as an event carrier technology. @@ -226,68 +231,76 @@ public class KafkaCarrierTechnologyParameters extends CarrierTechnologyParameter * {@inheritDoc}. */ @Override - public GroupValidationResult validate() { - final GroupValidationResult result = super.validate(); + public BeanValidationResult validate() { + final BeanValidationResult result = super.validate(); - validateConsumerTopicList(result); + result.addResult(validateConsumerTopicList()); - validateKafkaProperties(result); + result.addResult(validateKafkaProperties()); return result; } /** * Validate the consumer topic list. - * - * @param result the result of the validation. */ - private void validateConsumerTopicList(final GroupValidationResult result) { + private ValidationResult validateConsumerTopicList() { if (consumerTopicList == null || consumerTopicList.length == 0) { - result.setResult("consumerTopicList", ValidationStatus.INVALID, + return new ObjectValidationResult("consumerTopicList", consumerTopicList, ValidationStatus.INVALID, "not specified, must be specified as a list of strings"); - return; } - StringBuilder consumerTopicStringBuilder = new StringBuilder(); + BeanValidationResult result = new BeanValidationResult("consumerTopicList", consumerTopicList); + int item = 0; for (final String consumerTopic : consumerTopicList) { if (StringUtils.isBlank(consumerTopic)) { - consumerTopicStringBuilder.append(consumerTopic + "/"); + result.addResult(ENTRY + item, consumerTopic, ValidationStatus.INVALID, Validated.IS_BLANK); } + + ++item; } - if (consumerTopicStringBuilder.length() > 0) { - result.setResult("consumerTopicList", ValidationStatus.INVALID, - "invalid consumer topic list entries found: /" + consumerTopicStringBuilder.toString()); - } + + return result; } /** * Validate the kafka properties. - * - * @param result the result of the validation. */ - private void validateKafkaProperties(final GroupValidationResult result) { + private ValidationResult validateKafkaProperties() { // Kafka properties are optional if (kafkaProperties == null || kafkaProperties.length == 0) { - return; + return null; } - for (int i = 0; i < kafkaProperties.length; i++) { - if (kafkaProperties[i].length != 2) { - result.setResult(KAFKA_PROPERTIES, ValidationStatus.INVALID, - ENTRY + i + " invalid, kafka properties must be name-value pairs"); - } + BeanValidationResult result = new BeanValidationResult(KAFKA_PROPERTIES, kafkaProperties); - if (StringUtils.isBlank(kafkaProperties[i][0])) { - result.setResult(KAFKA_PROPERTIES, ValidationStatus.INVALID, - ENTRY + i + " invalid, key is null or blank"); + for (int i = 0; i < kafkaProperties.length; i++) { + final String label = ENTRY + i; + final String[] kafkaProperty = kafkaProperties[i]; + final List<String> value = (kafkaProperty == null ? null : Arrays.asList(kafkaProperty)); + final BeanValidationResult result2 = new BeanValidationResult(label, value); + + if (kafkaProperty == null) { + // note: add to result, not result2 + result.addResult(label, value, ValidationStatus.INVALID, Validated.IS_NULL); + + } else if (kafkaProperty.length != 2) { + // note: add to result, not result2 + result.addResult(label, Arrays.asList(kafkaProperty), ValidationStatus.INVALID, + "kafka properties must be name-value pairs"); + + } else if (StringUtils.isBlank(kafkaProperty[0])) { + result2.addResult("key", kafkaProperty[0], ValidationStatus.INVALID, Validated.IS_BLANK); + + } else if (null == kafkaProperty[1]) { + // the value of a property has to be specified as empty in some cases, but should never be null. + result2.addResult("value", kafkaProperty[1], ValidationStatus.INVALID, Validated.IS_NULL); } - // the value of a property has to be specified as empty in some cases, but should never be null. - if (null == kafkaProperties[i][1]) { - result.setResult(KAFKA_PROPERTIES, ValidationStatus.INVALID, - ENTRY + i + " invalid, value is null"); - } + result.addResult(result2); } + + return result; } /** diff --git a/plugins/plugins-event/plugins-event-carrier/plugins-event-carrier-restclient/src/main/java/org/onap/policy/apex/plugins/event/carrier/restclient/RestClientCarrierTechnologyParameters.java b/plugins/plugins-event/plugins-event-carrier/plugins-event-carrier-restclient/src/main/java/org/onap/policy/apex/plugins/event/carrier/restclient/RestClientCarrierTechnologyParameters.java index d5bca3f5a..23936439a 100644 --- a/plugins/plugins-event/plugins-event-carrier/plugins-event-carrier-restclient/src/main/java/org/onap/policy/apex/plugins/event/carrier/restclient/RestClientCarrierTechnologyParameters.java +++ b/plugins/plugins-event/plugins-event-carrier/plugins-event-carrier-restclient/src/main/java/org/onap/policy/apex/plugins/event/carrier/restclient/RestClientCarrierTechnologyParameters.java @@ -2,6 +2,7 @@ * ============LICENSE_START======================================================= * Copyright (C) 2016-2018 Ericsson. All rights reserved. * Modifications Copyright (C) 2019-2020 Nordix Foundation. + * 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. @@ -24,7 +25,8 @@ package org.onap.policy.apex.plugins.event.carrier.restclient; import lombok.Getter; import lombok.Setter; import org.onap.policy.apex.service.parameters.carriertechnology.RestPluginCarrierTechnologyParameters; -import org.onap.policy.common.parameters.GroupValidationResult; +import org.onap.policy.common.parameters.ObjectValidationResult; +import org.onap.policy.common.parameters.ValidationResult; import org.onap.policy.common.parameters.ValidationStatus; // @formatter:off @@ -66,14 +68,13 @@ public class RestClientCarrierTechnologyParameters extends RestPluginCarrierTech * {@inheritDoc} */ @Override - public GroupValidationResult validateUrl(final GroupValidationResult result) { + public ValidationResult validateUrl() { // Check if the URL has been set for event output - final String urlNullMessage = "no URL has been set for event sending on " + getLabel(); if (getUrl() == null) { - result.setResult("url", ValidationStatus.INVALID, urlNullMessage); - return result; + final String urlNullMessage = "no URL has been set for event sending on " + getLabel(); + return new ObjectValidationResult("url", null, ValidationStatus.INVALID, urlNullMessage); } - return super.validateUrl(result); + return super.validateUrl(); } } diff --git a/plugins/plugins-event/plugins-event-carrier/plugins-event-carrier-restclient/src/test/java/org/onap/policy/apex/plugins/event/carrier/restclient/RestClientCarrierTechnologyParametersTest.java b/plugins/plugins-event/plugins-event-carrier/plugins-event-carrier-restclient/src/test/java/org/onap/policy/apex/plugins/event/carrier/restclient/RestClientCarrierTechnologyParametersTest.java index 9d4da1cd0..58d265a97 100644 --- a/plugins/plugins-event/plugins-event-carrier/plugins-event-carrier-restclient/src/test/java/org/onap/policy/apex/plugins/event/carrier/restclient/RestClientCarrierTechnologyParametersTest.java +++ b/plugins/plugins-event/plugins-event-carrier/plugins-event-carrier-restclient/src/test/java/org/onap/policy/apex/plugins/event/carrier/restclient/RestClientCarrierTechnologyParametersTest.java @@ -3,6 +3,7 @@ * Copyright (C) 2018 Ericsson. All rights reserved. * Modifications Copyright (C) 2019-2020 Nordix Foundation. * Modifications Copyright (C) 2020 Bell Canada. 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. @@ -47,7 +48,10 @@ public class RestClientCarrierTechnologyParametersTest { arguments.setRelativeFileRoot("."); assertThatThrownBy(() -> new ApexParameterHandler().getParameters(arguments)) - .hasMessageContaining("HTTP header array entry is null\n parameter"); + .hasMessageContaining("httpHeaders") + .hasMessageContaining("item \"entry 0\" value \"null\" INVALID, is null") + .hasMessageContaining("item \"entry 1\" value \"null\" INVALID, is null") + .hasMessageContaining("item \"entry 2\" value \"null\" INVALID, is null"); } @Test @@ -57,8 +61,9 @@ public class RestClientCarrierTechnologyParametersTest { arguments.setRelativeFileRoot("."); assertThatThrownBy(() -> new ApexParameterHandler().getParameters(arguments)) - .hasMessageContaining("HTTP header array entries must have one key and one value: [aaa, bbb, ccc]") - .hasMessageEndingWith("HTTP header array entries must have one key and one value: [aaa]\n"); + .hasMessageContaining("httpHeaders") + .hasMessageContaining("\"entry 0\" value \"[aaa, bbb, ccc]\" INVALID, must have one key and one value") + .hasMessageContaining("\"entry 0\" value \"[aaa]\" INVALID, must have one key and one value"); } @Test @@ -68,8 +73,9 @@ public class RestClientCarrierTechnologyParametersTest { arguments.setRelativeFileRoot("."); assertThatThrownBy(() -> new ApexParameterHandler().getParameters(arguments)) - .hasMessageContaining("HTTP header key is null or blank: [null, bbb]") - .hasMessageEndingWith("HTTP header value is null or blank: [ccc, null]\n"); + .hasMessageContaining("httpHeaders", "entry 0", "entry 1") + .hasMessageContaining("item \"key\" value \"null\" INVALID, is blank") + .hasMessageContaining("item \"value\" value \"null\" INVALID, is blank"); } @Test diff --git a/plugins/plugins-event/plugins-event-carrier/plugins-event-carrier-restrequestor/src/test/java/org/onap/policy/apex/plugins/event/carrier/restrequestor/RestRequestorCarrierTechnologyParametersTest.java b/plugins/plugins-event/plugins-event-carrier/plugins-event-carrier-restrequestor/src/test/java/org/onap/policy/apex/plugins/event/carrier/restrequestor/RestRequestorCarrierTechnologyParametersTest.java index d5268b14c..f17721bdc 100644 --- a/plugins/plugins-event/plugins-event-carrier/plugins-event-carrier-restrequestor/src/test/java/org/onap/policy/apex/plugins/event/carrier/restrequestor/RestRequestorCarrierTechnologyParametersTest.java +++ b/plugins/plugins-event/plugins-event-carrier/plugins-event-carrier-restrequestor/src/test/java/org/onap/policy/apex/plugins/event/carrier/restrequestor/RestRequestorCarrierTechnologyParametersTest.java @@ -43,19 +43,19 @@ public class RestRequestorCarrierTechnologyParametersTest { @Test public void testRestRequestorCarrierTechnologyParametersBadList() { verifyException("src/test/resources/prodcons/RESTRequestorWithHTTPHeaderBadList.json", - "HTTP header array entry is null\n parameter"); + "item \"entry 2\" value \"null\" INVALID, is null"); } @Test public void testRestRequestorCarrierTechnologyParametersNotKvPairs() { verifyException("src/test/resources/prodcons/RESTRequestorWithHTTPHeaderNotKvPairs.json", - "HTTP header array entries must have one key and one value: [aaa, bbb, ccc]"); + "item \"entry 0\" value \"[aaa, bbb, ccc]\" INVALID, must have one key"); } @Test public void testRestRequestorCarrierTechnologyParametersNulls() { verifyException("src/test/resources/prodcons/RESTRequestorWithHTTPHeaderNulls.json", - "HTTP header key is null or blank: [null, bbb]"); + "\"key\""); } private void verifyException(String fileName, String expectedMsg) { diff --git a/plugins/plugins-event/plugins-event-carrier/plugins-event-carrier-restserver/src/main/java/org/onap/policy/apex/plugins/event/carrier/restserver/RestServerCarrierTechnologyParameters.java b/plugins/plugins-event/plugins-event-carrier/plugins-event-carrier-restserver/src/main/java/org/onap/policy/apex/plugins/event/carrier/restserver/RestServerCarrierTechnologyParameters.java index afc07da95..bf24d2260 100644 --- a/plugins/plugins-event/plugins-event-carrier/plugins-event-carrier-restserver/src/main/java/org/onap/policy/apex/plugins/event/carrier/restserver/RestServerCarrierTechnologyParameters.java +++ b/plugins/plugins-event/plugins-event-carrier/plugins-event-carrier-restserver/src/main/java/org/onap/policy/apex/plugins/event/carrier/restserver/RestServerCarrierTechnologyParameters.java @@ -2,6 +2,7 @@ * ============LICENSE_START======================================================= * Copyright (C) 2016-2018 Ericsson. All rights reserved. * Modifications Copyright (C) 2019 Nordix Foundation. + * 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. @@ -24,9 +25,11 @@ package org.onap.policy.apex.plugins.event.carrier.restserver; import lombok.AccessLevel; import lombok.Getter; import lombok.Setter; +import org.apache.commons.lang3.StringUtils; import org.onap.policy.apex.service.parameters.carriertechnology.CarrierTechnologyParameters; -import org.onap.policy.common.parameters.GroupValidationResult; +import org.onap.policy.common.parameters.BeanValidationResult; import org.onap.policy.common.parameters.ValidationStatus; +import org.onap.policy.models.base.Validated; /** * Apex parameters for REST as an event carrier technology with Apex as a REST client. @@ -89,27 +92,25 @@ public class RestServerCarrierTechnologyParameters extends CarrierTechnologyPara * {@inheritDoc}. */ @Override - public GroupValidationResult validate() { - final GroupValidationResult result = super.validate(); + public BeanValidationResult validate() { + final BeanValidationResult result = super.validate(); // Check if host is defined, it is only defined on REST server consumers if (standalone) { - if (host != null && host.trim().length() == 0) { - result.setResult("host", ValidationStatus.INVALID, - "host not specified, host must be specified as a string"); + if (StringUtils.isBlank(host)) { + result.addResult("host", host, ValidationStatus.INVALID, Validated.IS_BLANK); } // Check if port is defined, it is only defined on REST server consumers if (port != -1 && port < MIN_USER_PORT || port > MAX_USER_PORT) { - result.setResult("port", ValidationStatus.INVALID, - "[" + port + "] invalid, must be specified as 1024 <= port <= 65535"); + result.addResult("port", port, ValidationStatus.INVALID, "must be between 1024 and 65535"); } } else { if (host != null) { - result.setResult("host", ValidationStatus.INVALID, "host is specified only in standalone mode"); + result.addResult("host", host, ValidationStatus.INVALID, "should be specified only in standalone mode"); } if (port != -1) { - result.setResult("port", ValidationStatus.INVALID, "port is specified only in standalone mode"); + result.addResult("port", port, ValidationStatus.INVALID, "should be specified only in standalone mode"); } } diff --git a/plugins/plugins-event/plugins-event-carrier/plugins-event-carrier-restserver/src/test/java/org/onap/policy/apex/plugins/event/carrier/restserver/RestServerCarrierTechnologyParametersTest.java b/plugins/plugins-event/plugins-event-carrier/plugins-event-carrier-restserver/src/test/java/org/onap/policy/apex/plugins/event/carrier/restserver/RestServerCarrierTechnologyParametersTest.java index 2c8a764e8..ef78d3211 100644 --- a/plugins/plugins-event/plugins-event-carrier/plugins-event-carrier-restserver/src/test/java/org/onap/policy/apex/plugins/event/carrier/restserver/RestServerCarrierTechnologyParametersTest.java +++ b/plugins/plugins-event/plugins-event-carrier/plugins-event-carrier-restserver/src/test/java/org/onap/policy/apex/plugins/event/carrier/restserver/RestServerCarrierTechnologyParametersTest.java @@ -2,6 +2,7 @@ * ============LICENSE_START======================================================= * Copyright (C) 2019 Samsung. All rights reserved. * Modifications Copyright (C) 2019 Nordix Foundation. + * 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. @@ -21,6 +22,7 @@ package org.onap.policy.apex.plugins.event.carrier.restserver; +import static org.assertj.core.api.Assertions.assertThat; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; @@ -28,12 +30,12 @@ import static org.junit.Assert.assertTrue; import java.lang.reflect.Field; import org.junit.Before; import org.junit.Test; -import org.onap.policy.common.parameters.GroupValidationResult; +import org.onap.policy.common.parameters.ValidationResult; public class RestServerCarrierTechnologyParametersTest { RestServerCarrierTechnologyParameters restServerCarrierTechnologyParameters = null; - GroupValidationResult result = null; + ValidationResult result = null; /** * Set up testing. @@ -144,7 +146,6 @@ public class RestServerCarrierTechnologyParametersTest { result = restServerCarrierTechnologyParameters.validate(); assertNotNull(result); assertFalse(result.isValid()); - assertTrue(result.getResult().contains("host is specified only in standalone mode")); - assertTrue(result.getResult().contains("port is specified only in standalone mode")); + assertThat(result.getResult()).contains("host", "port", "should be specified only in standalone mode"); } } diff --git a/plugins/plugins-event/plugins-event-carrier/plugins-event-carrier-websocket/src/main/java/org/onap/policy/apex/plugins/event/carrier/websocket/WebSocketCarrierTechnologyParameters.java b/plugins/plugins-event/plugins-event-carrier/plugins-event-carrier-websocket/src/main/java/org/onap/policy/apex/plugins/event/carrier/websocket/WebSocketCarrierTechnologyParameters.java index c77aac9a9..f867020ec 100644 --- a/plugins/plugins-event/plugins-event-carrier/plugins-event-carrier-websocket/src/main/java/org/onap/policy/apex/plugins/event/carrier/websocket/WebSocketCarrierTechnologyParameters.java +++ b/plugins/plugins-event/plugins-event-carrier/plugins-event-carrier-websocket/src/main/java/org/onap/policy/apex/plugins/event/carrier/websocket/WebSocketCarrierTechnologyParameters.java @@ -1,6 +1,7 @@ /*- * ============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. @@ -20,9 +21,13 @@ package org.onap.policy.apex.plugins.event.carrier.websocket; +import org.apache.commons.lang3.StringUtils; import org.onap.policy.apex.service.parameters.carriertechnology.CarrierTechnologyParameters; -import org.onap.policy.common.parameters.GroupValidationResult; +import org.onap.policy.common.parameters.BeanValidationResult; import org.onap.policy.common.parameters.ValidationStatus; +import org.onap.policy.common.parameters.annotations.Max; +import org.onap.policy.common.parameters.annotations.Min; +import org.onap.policy.models.base.Validated; /** * Apex parameters for Kafka as an event carrier technology. @@ -50,6 +55,8 @@ public class WebSocketCarrierTechnologyParameters extends CarrierTechnologyParam // Web socket parameters private boolean wsClient = true; private String host = DEFAULT_HOST; + @Min(MIN_USER_PORT) + @Max(MAX_USER_PORT) private int port = DEFAULT_PORT; // @formatter:on @@ -97,16 +104,11 @@ public class WebSocketCarrierTechnologyParameters extends CarrierTechnologyParam * {@inheritDoc}. */ @Override - public GroupValidationResult validate() { - final GroupValidationResult result = super.validate(); + public BeanValidationResult validate() { + final BeanValidationResult result = super.validate(); - if (wsClient && (host == null || host.trim().length() == 0)) { - result.setResult("host", ValidationStatus.INVALID, "host not specified, must be host as a string"); - } - - if (port < MIN_USER_PORT || port > MAX_USER_PORT) { - result.setResult("port", ValidationStatus.INVALID, - "[" + port + "] invalid, must be specified as 1024 <= port <= 65535"); + if (wsClient && StringUtils.isBlank(host)) { + result.addResult("host", host, ValidationStatus.INVALID, Validated.IS_BLANK); } return result; diff --git a/plugins/plugins-event/plugins-event-carrier/plugins-event-carrier-websocket/src/test/java/org/onap/policy/apex/plugins/event/carrier/websocket/WebSocketCarrierTechnologyParametersTest.java b/plugins/plugins-event/plugins-event-carrier/plugins-event-carrier-websocket/src/test/java/org/onap/policy/apex/plugins/event/carrier/websocket/WebSocketCarrierTechnologyParametersTest.java index 1ab732141..f318c000a 100644 --- a/plugins/plugins-event/plugins-event-carrier/plugins-event-carrier-websocket/src/test/java/org/onap/policy/apex/plugins/event/carrier/websocket/WebSocketCarrierTechnologyParametersTest.java +++ b/plugins/plugins-event/plugins-event-carrier/plugins-event-carrier-websocket/src/test/java/org/onap/policy/apex/plugins/event/carrier/websocket/WebSocketCarrierTechnologyParametersTest.java @@ -2,6 +2,7 @@ * ============LICENSE_START======================================================= * Copyright (C) 2019 Samsung. All rights reserved. * Modifications Copyright (C) 2019 Nordix Foundation. + * 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. @@ -26,12 +27,12 @@ import static org.junit.Assert.assertNotNull; import org.junit.Before; import org.junit.Test; -import org.onap.policy.common.parameters.GroupValidationResult; +import org.onap.policy.common.parameters.ValidationResult; public class WebSocketCarrierTechnologyParametersTest { WebSocketCarrierTechnologyParameters webSocketCarrierTechnologyParameters = null; - GroupValidationResult result = null; + ValidationResult result = null; /** * Set up testing. diff --git a/services/services-engine/src/main/java/org/onap/policy/apex/service/engine/event/impl/eventrequestor/EventRequestorCarrierTechnologyParameters.java b/services/services-engine/src/main/java/org/onap/policy/apex/service/engine/event/impl/eventrequestor/EventRequestorCarrierTechnologyParameters.java index 6f352599c..635597548 100644 --- a/services/services-engine/src/main/java/org/onap/policy/apex/service/engine/event/impl/eventrequestor/EventRequestorCarrierTechnologyParameters.java +++ b/services/services-engine/src/main/java/org/onap/policy/apex/service/engine/event/impl/eventrequestor/EventRequestorCarrierTechnologyParameters.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========================================================= */ @@ -21,7 +22,6 @@ package org.onap.policy.apex.service.engine.event.impl.eventrequestor; import org.onap.policy.apex.service.parameters.carriertechnology.CarrierTechnologyParameters; -import org.onap.policy.common.parameters.GroupValidationResult; /** * This class holds the parameters that allows an output event to to be sent back into APEX as one @@ -60,14 +60,6 @@ public class EventRequestorCarrierTechnologyParameters extends CarrierTechnology * {@inheritDoc}. */ @Override - public GroupValidationResult validate() { - return new GroupValidationResult(this); - } - - /** - * {@inheritDoc}. - */ - @Override public String getName() { return this.getLabel(); } diff --git a/services/services-engine/src/main/java/org/onap/policy/apex/service/engine/event/impl/filecarrierplugin/FileCarrierTechnologyParameters.java b/services/services-engine/src/main/java/org/onap/policy/apex/service/engine/event/impl/filecarrierplugin/FileCarrierTechnologyParameters.java index 5071824ce..eceb0b4f9 100644 --- a/services/services-engine/src/main/java/org/onap/policy/apex/service/engine/event/impl/filecarrierplugin/FileCarrierTechnologyParameters.java +++ b/services/services-engine/src/main/java/org/onap/policy/apex/service/engine/event/impl/filecarrierplugin/FileCarrierTechnologyParameters.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========================================================= */ @@ -21,12 +22,18 @@ package org.onap.policy.apex.service.engine.event.impl.filecarrierplugin; import java.io.File; +import lombok.Getter; +import lombok.Setter; import org.onap.policy.apex.service.engine.event.impl.filecarrierplugin.consumer.ApexFileEventConsumer; import org.onap.policy.apex.service.engine.event.impl.filecarrierplugin.producer.ApexFileEventProducer; import org.onap.policy.apex.service.parameters.carriertechnology.CarrierTechnologyParameters; -import org.onap.policy.common.parameters.GroupValidationResult; +import org.onap.policy.common.parameters.BeanValidationResult; +import org.onap.policy.common.parameters.ObjectValidationResult; +import org.onap.policy.common.parameters.ValidationResult; import org.onap.policy.common.parameters.ValidationStatus; +import org.onap.policy.common.parameters.annotations.Min; import org.onap.policy.common.utils.validation.ParameterValidationUtils; +import org.onap.policy.models.base.Validated; /** * This class holds the parameters that allows transport of events into and out of Apex using files and standard input @@ -42,6 +49,8 @@ import org.onap.policy.common.utils.validation.ParameterValidationUtils; * * @author Liam Fallon (liam.fallon@ericsson.com) */ +@Getter +@Setter public class FileCarrierTechnologyParameters extends CarrierTechnologyParameters { // @formatter:off /** The label of this carrier technology. */ @@ -60,7 +69,7 @@ public class FileCarrierTechnologyParameters extends CarrierTechnologyParameters private boolean standardIo = false; private boolean standardError = false; private boolean streamingMode = false; - private long startDelay = 0; + private @Min(0) long startDelay = 0; // @formatter:on /** @@ -77,96 +86,6 @@ public class FileCarrierTechnologyParameters extends CarrierTechnologyParameters } /** - * Gets the file name from which to read or to which to write events. - * - * @return the file name from which to read or to which to write events - */ - public String getFileName() { - return fileName; - } - - /** - * Checks if is standard IO should be used for input or output. - * - * @return true, if standard IO should be used for input or output - */ - public boolean isStandardIo() { - return standardIo; - } - - /** - * Checks if is standard error should be used for output. - * - * @return true, if standard error should be used for output - */ - public boolean isStandardError() { - return standardError; - } - - /** - * Checks if is streaming mode is on. - * - * @return true, if streaming mode is on - */ - public boolean isStreamingMode() { - return streamingMode; - } - - /** - * Sets the file name from which to read or to which to write events. - * - * @param fileName the file name from which to read or to which to write events - */ - public void setFileName(final String fileName) { - this.fileName = fileName; - } - - /** - * Sets if standard IO should be used for event input or output. - * - * @param standardIo if standard IO should be used for event input or output - */ - public void setStandardIo(final boolean standardIo) { - this.standardIo = standardIo; - } - - /** - * Sets if standard error should be used for event output. - * - * @param standardError if standard error should be used for event output - */ - public void setStandardError(final boolean standardError) { - this.standardError = standardError; - } - - /** - * Sets streaming mode. - * - * @param streamingMode the streaming mode value - */ - public void setStreamingMode(final boolean streamingMode) { - this.streamingMode = streamingMode; - } - - /** - * Gets the delay in milliseconds before the plugin starts processing. - * - * @return the delay - */ - public long getStartDelay() { - return startDelay; - } - - /** - * Sets the delay in milliseconds before the plugin starts processing. - * - * @param startDelay the delay - */ - public void setStartDelay(final long startDelay) { - this.startDelay = startDelay; - } - - /** * {@inheritDoc}. */ @Override @@ -188,36 +107,29 @@ public class FileCarrierTechnologyParameters extends CarrierTechnologyParameters * {@inheritDoc}. */ @Override - public GroupValidationResult validate() { - final GroupValidationResult result = super.validate(); + public BeanValidationResult validate() { + final BeanValidationResult result = super.validate(); if (!standardIo && !standardError) { - validateFileName(result); + result.addResult(validateFileName()); } if (standardIo || standardError) { streamingMode = true; } - if (startDelay < 0) { - result.setResult("startDelay", ValidationStatus.INVALID, - "startDelay must be zero or a positive number of milliseconds"); - } - return result; } - + /** * Validate the file name parameter. - * - * @param result the variable in which to store the result of the validation + * + * @return the result of the validation */ - private void validateFileName(final GroupValidationResult result) { + private ValidationResult validateFileName() { if (!ParameterValidationUtils.validateStringParameter(fileName)) { - result.setResult(FILE_NAME_TOKEN, ValidationStatus.INVALID, - "\"" + fileName + "\" invalid, must be specified as a non-empty string"); - return; + return new ObjectValidationResult(FILE_NAME_TOKEN, fileName, ValidationStatus.INVALID, Validated.IS_BLANK); } String absoluteFileName = null; @@ -233,53 +145,65 @@ public class FileCarrierTechnologyParameters extends CarrierTechnologyParameters // Check if the file exists, the file should be a regular file and should be readable if (theFile.exists()) { - validateExistingFile(result, absoluteFileName, theFile); + return validateExistingFile(absoluteFileName, theFile); } else { // The path to the file should exist and should be writable - validateNewFileParent(result, absoluteFileName, theFile); + return validateNewFileParent(absoluteFileName, theFile); } } /** * Validate an existing file is OK. - * - * @param result the result of the validation + * * @param absoluteFileName the absolute file name of the file * @param theFile the file that exists + * @return the result of the validation */ - private void validateExistingFile(final GroupValidationResult result, String absoluteFileName, File theFile) { + private ValidationResult validateExistingFile(String absoluteFileName, File theFile) { // Check that the file is a regular file if (!theFile.isFile()) { - result.setResult(FILE_NAME_TOKEN, ValidationStatus.INVALID, "is not a plain file"); + return new ObjectValidationResult(FILE_NAME_TOKEN, absoluteFileName, ValidationStatus.INVALID, + "is not a plain file"); + } else { fileName = absoluteFileName; if (!theFile.canRead()) { - result.setResult(FILE_NAME_TOKEN, ValidationStatus.INVALID, "is not readable"); + return new ObjectValidationResult(FILE_NAME_TOKEN, absoluteFileName, ValidationStatus.INVALID, + "is not readable"); } + + return null; } } /** * Validate the parent of a new file is OK. - * - * @param result the result of the validation + * * @param absoluteFileName the absolute file name of the file * @param theFile the file that exists + * @return the result of the validation */ - private void validateNewFileParent(final GroupValidationResult result, String absoluteFileName, File theFile) { + private ValidationResult validateNewFileParent(String absoluteFileName, File theFile) { // Check that the parent of the file is a directory if (!theFile.getParentFile().exists()) { - result.setResult(FILE_NAME_TOKEN, ValidationStatus.INVALID, "parent of file does not exist"); + return new ObjectValidationResult(FILE_NAME_TOKEN, absoluteFileName, ValidationStatus.INVALID, + "parent of file does not exist"); + } else if (!theFile.getParentFile().isDirectory()) { // Check that the parent of the file is a directory - result.setResult(FILE_NAME_TOKEN, ValidationStatus.INVALID, "parent of file is not directory"); + return new ObjectValidationResult(FILE_NAME_TOKEN, absoluteFileName, ValidationStatus.INVALID, + "parent of file is not directory"); + } else { fileName = absoluteFileName; if (!theFile.getParentFile().canRead()) { - result.setResult(FILE_NAME_TOKEN, ValidationStatus.INVALID, "is not readable"); + return new ObjectValidationResult(FILE_NAME_TOKEN, absoluteFileName, ValidationStatus.INVALID, + "is not readable"); } + + return null; } } } diff --git a/services/services-engine/src/main/java/org/onap/policy/apex/service/engine/main/ApexMain.java b/services/services-engine/src/main/java/org/onap/policy/apex/service/engine/main/ApexMain.java index 9757c57e8..80974af31 100644 --- a/services/services-engine/src/main/java/org/onap/policy/apex/service/engine/main/ApexMain.java +++ b/services/services-engine/src/main/java/org/onap/policy/apex/service/engine/main/ApexMain.java @@ -3,6 +3,7 @@ * Copyright (C) 2016-2018 Ericsson. All rights reserved. * Modifications Copyright (C) 2019-2021 Nordix Foundation. * Modifications Copyright (C) 2020-2021 Bell Canada. 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. @@ -106,14 +107,12 @@ public class ApexMain { // The arguments return a string if there is a message to print and we should exit final String argumentMessage = arguments.parse(args); if (argumentMessage != null) { - LOGGER.info(argumentMessage); throw new ApexException(argumentMessage); } // Validate that the arguments are sane arguments.validateInputFiles(); } catch (final ApexException | CommandLineException e) { - LOGGER.error("Arguments validation failed.", e); throw new ApexException("Arguments validation failed.", e); } @@ -122,7 +121,6 @@ public class ApexMain { try { axParameters = apexParameterHandler.getParameters(arguments); } catch (final Exception e) { - LOGGER.error("Cannot create APEX Parameters from the arguments provided.", e); throw new ApexException("Cannot create APEX Parameters from the arguments provided.", e); } diff --git a/services/services-engine/src/main/java/org/onap/policy/apex/service/engine/runtime/impl/EngineServiceImpl.java b/services/services-engine/src/main/java/org/onap/policy/apex/service/engine/runtime/impl/EngineServiceImpl.java index a558b9946..3deb234c6 100644 --- a/services/services-engine/src/main/java/org/onap/policy/apex/service/engine/runtime/impl/EngineServiceImpl.java +++ b/services/services-engine/src/main/java/org/onap/policy/apex/service/engine/runtime/impl/EngineServiceImpl.java @@ -2,6 +2,7 @@ * ============LICENSE_START======================================================= * Copyright (C) 2016-2018 Ericsson. All rights reserved. * Modifications Copyright (C) 2019-2020 Nordix Foundation. + * 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. @@ -48,7 +49,7 @@ import org.onap.policy.apex.service.engine.runtime.ApexEventListener; import org.onap.policy.apex.service.engine.runtime.EngineService; import org.onap.policy.apex.service.engine.runtime.EngineServiceEventInterface; import org.onap.policy.apex.service.parameters.engineservice.EngineServiceParameters; -import org.onap.policy.common.parameters.GroupValidationResult; +import org.onap.policy.common.parameters.ValidationResult; import org.slf4j.ext.XLogger; import org.slf4j.ext.XLoggerFactory; @@ -138,7 +139,7 @@ public final class EngineServiceImpl implements EngineService, EngineServiceEven throw new ApexException("engine service configuration parameters are null"); } - final GroupValidationResult validation = config.validate(); + final ValidationResult validation = config.validate(); if (!validation.isValid()) { LOGGER.warn("Invalid engine service configuration parameters: {}" + validation.getResult()); throw new ApexException("Invalid engine service configuration parameters: " + validation); diff --git a/services/services-engine/src/main/java/org/onap/policy/apex/service/parameters/ApexParameterHandler.java b/services/services-engine/src/main/java/org/onap/policy/apex/service/parameters/ApexParameterHandler.java index 673d9cab5..0a317d600 100644 --- a/services/services-engine/src/main/java/org/onap/policy/apex/service/parameters/ApexParameterHandler.java +++ b/services/services-engine/src/main/java/org/onap/policy/apex/service/parameters/ApexParameterHandler.java @@ -3,6 +3,7 @@ * Copyright (C) 2016-2018 Ericsson. All rights reserved. * Modifications Copyright (C) 2019 Nordix Foundation. * Modifications Copyright (C) 2020-2021 Bell Canada. 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. @@ -38,9 +39,9 @@ import org.onap.policy.apex.service.parameters.carriertechnology.CarrierTechnolo import org.onap.policy.apex.service.parameters.engineservice.EngineServiceParametersJsonAdapter; import org.onap.policy.apex.service.parameters.eventprotocol.EventProtocolParameters; import org.onap.policy.apex.service.parameters.eventprotocol.EventProtocolParametersJsonAdapter; -import org.onap.policy.common.parameters.GroupValidationResult; import org.onap.policy.common.parameters.ParameterException; import org.onap.policy.common.parameters.ParameterService; +import org.onap.policy.common.parameters.ValidationResult; import org.onap.policy.common.utils.coder.StandardCoder; import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate; import org.slf4j.ext.XLogger; @@ -107,7 +108,7 @@ public class ApexParameterHandler { } // Validate the parameters - final GroupValidationResult validationResult = parameters.validate(); + final ValidationResult validationResult = parameters.validate(); if (!validationResult.isValid()) { String returnMessage = "validation error(s) on parameters from \"" + toscaPolicyFilePath + "\"\n"; returnMessage += validationResult.getResult(); 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 diff --git a/services/services-engine/src/main/java/org/onap/policy/apex/service/parameters/carriertechnology/CarrierTechnologyParameters.java b/services/services-engine/src/main/java/org/onap/policy/apex/service/parameters/carriertechnology/CarrierTechnologyParameters.java index e688aad17..503d4c5d7 100644 --- a/services/services-engine/src/main/java/org/onap/policy/apex/service/parameters/carriertechnology/CarrierTechnologyParameters.java +++ b/services/services-engine/src/main/java/org/onap/policy/apex/service/parameters/carriertechnology/CarrierTechnologyParameters.java @@ -21,10 +21,11 @@ package org.onap.policy.apex.service.parameters.carriertechnology; -import org.onap.policy.common.parameters.GroupValidationResult; -import org.onap.policy.common.parameters.ParameterGroup; +import org.onap.policy.common.parameters.ParameterGroupImpl; import org.onap.policy.common.parameters.ParameterRuntimeException; -import org.onap.policy.common.parameters.ValidationStatus; +import org.onap.policy.common.parameters.annotations.ClassName; +import org.onap.policy.common.parameters.annotations.NotBlank; +import org.onap.policy.common.parameters.annotations.NotNull; /** * The default carrier technology parameter class that may be specialized by carrier technology plugins that require @@ -37,15 +38,17 @@ import org.onap.policy.common.parameters.ValidationStatus; * * @author Liam Fallon (liam.fallon@ericsson.com) */ -public abstract class CarrierTechnologyParameters implements ParameterGroup { +@NotNull +@NotBlank +public abstract class CarrierTechnologyParameters extends ParameterGroupImpl { // The carrier technology label private String label = null; // Producer and Consumer plugin classes for the event producer and consumer for this carrier // technology - private String eventProducerPluginClass = null; - private String eventConsumerPluginClass = null; + private @ClassName String eventProducerPluginClass = null; + private @ClassName String eventConsumerPluginClass = null; /** * Constructor to create a carrier technology parameters instance with the name of a sub class of this class and @@ -130,30 +133,6 @@ public abstract class CarrierTechnologyParameters implements ParameterGroup { + ", eventConsumerPluginClass=" + eventConsumerPluginClass + "]"; } - /** - * {@inheritDoc}. - */ - @Override - public GroupValidationResult validate() { - final GroupValidationResult result = new GroupValidationResult(this); - - if (label == null || label.length() == 0) { - result.setResult("label", ValidationStatus.INVALID, "carrier technology label not specified or is blank"); - } - - if (eventProducerPluginClass == null || eventProducerPluginClass.length() == 0) { - result.setResult("eventProducerPluginClass", ValidationStatus.INVALID, - "carrier technology eventProducerPluginClass not specified or is blank"); - } - - if (eventConsumerPluginClass == null || eventConsumerPluginClass.length() == 0) { - result.setResult("eventConsumerPluginClass", ValidationStatus.INVALID, - "carrier technology eventConsumerPluginClass not specified or is blank"); - } - - return result; - } - @Override public String getName() { return this.getLabel(); diff --git a/services/services-engine/src/main/java/org/onap/policy/apex/service/parameters/carriertechnology/RestPluginCarrierTechnologyParameters.java b/services/services-engine/src/main/java/org/onap/policy/apex/service/parameters/carriertechnology/RestPluginCarrierTechnologyParameters.java index eab936edc..4e086e809 100644 --- a/services/services-engine/src/main/java/org/onap/policy/apex/service/parameters/carriertechnology/RestPluginCarrierTechnologyParameters.java +++ b/services/services-engine/src/main/java/org/onap/policy/apex/service/parameters/carriertechnology/RestPluginCarrierTechnologyParameters.java @@ -2,6 +2,7 @@ * ============LICENSE_START======================================================= * Copyright (C) 2016-2018 Ericsson. All rights reserved. * Modifications Copyright (C) 2019-2020 Nordix Foundation. + * 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. @@ -23,6 +24,7 @@ package org.onap.policy.apex.service.parameters.carriertechnology; import java.util.Arrays; import java.util.HashSet; +import java.util.List; import java.util.Set; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -32,9 +34,12 @@ import javax.ws.rs.core.MultivaluedMap; import lombok.Getter; import lombok.Setter; import org.apache.commons.lang3.StringUtils; -import org.onap.policy.common.parameters.GroupValidationResult; +import org.onap.policy.common.parameters.BeanValidationResult; +import org.onap.policy.common.parameters.ObjectValidationResult; +import org.onap.policy.common.parameters.ValidationResult; import org.onap.policy.common.parameters.ValidationStatus; import org.onap.policy.common.utils.validation.ParameterValidationUtils; +import org.onap.policy.models.base.Validated; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -155,42 +160,42 @@ public class RestPluginCarrierTechnologyParameters extends CarrierTechnologyPara * {@inheritDoc}. */ @Override - public GroupValidationResult validate() { - GroupValidationResult result = super.validate(); + public BeanValidationResult validate() { + BeanValidationResult result = super.validate(); - validateUrl(result); - validateHttpHeaders(result); + result.addResult(validateUrl()); + result.addResult(validateHttpHeaders()); + result.addResult(validateHttpCodeFilter()); - return validateHttpCodeFilter(result); + return result; } // @formatter:off /** * Validate the URL. * - * <p>Checks: - * http://www.blah.com/{par1/somethingelse (Missing end tag) use {[^\\{}]*$ - * http://www.blah.com/{par1/{some}thingelse (Nested tag) use {[^}]*{ - * http://www.blah.com/{par1}/some}thingelse (Missing start tag1) use }[^{}]*.} - * http://www.blah.com/par1}/somethingelse (Missing start tag2) use }[^{}]*} - * http://www.blah.com/{}/somethingelse (Empty tag) use {[\s]*} - * @param result the result of the validation + * <p/>Checks: + * <br/>http://www.blah.com/{par1/somethingelse (Missing end tag) use {[^\\{}]*$ + * <br/>http://www.blah.com/{par1/{some}thingelse (Nested tag) use {[^}]*{ + * <br/>http://www.blah.com/{par1}/some}thingelse (Missing start tag1) use }[^{}]*.} + * <br/>http://www.blah.com/par1}/somethingelse (Missing start tag2) use }[^{}]*} + * <br/>http://www.blah.com/{}/somethingelse (Empty tag) use {[\s]*} */ // @formatter:on - public GroupValidationResult validateUrl(final GroupValidationResult result) { + public ValidationResult validateUrl() { // The URL may be optional so existence must be checked in the plugin code - if (getUrl() == null) { - return result; + String url2 = getUrl(); + if (url2 == null) { + return null; } - Matcher matcher = patternErrorKey.matcher(getUrl()); + Matcher matcher = patternErrorKey.matcher(url2); if (matcher.find()) { - final String urlInvalidMessage = "invalid URL " + getUrl() + " has been set for event sending on " - + getLabel(); - result.setResult("url", ValidationStatus.INVALID, urlInvalidMessage); + final String urlInvalidMessage = "invalid URL has been set for event sending on " + getLabel(); + return new ObjectValidationResult("url", url2, ValidationStatus.INVALID, urlInvalidMessage); } - return result; + return null; } /** @@ -198,24 +203,35 @@ public class RestPluginCarrierTechnologyParameters extends CarrierTechnologyPara * * @param result the result of the validation */ - private GroupValidationResult validateHttpHeaders(final GroupValidationResult result) { + private ValidationResult validateHttpHeaders() { if (httpHeaders == null) { - return result; + return null; } + BeanValidationResult result = new BeanValidationResult(HTTP_HEADERS, httpHeaders); + + int item = 0; for (String[] httpHeader : httpHeaders) { + final String label = "entry " + (item++); + final List<String> value = (httpHeader == null ? null : Arrays.asList(httpHeader)); + BeanValidationResult result2 = new BeanValidationResult(label, value); + if (httpHeader == null) { - result.setResult(HTTP_HEADERS, ValidationStatus.INVALID, "HTTP header array entry is null"); + // note: add to result, not result2 + result.addResult(label, null, ValidationStatus.INVALID, Validated.IS_NULL); + } else if (httpHeader.length != 2) { - result.setResult(HTTP_HEADERS, ValidationStatus.INVALID, - "HTTP header array entries must have one key and one value: " + Arrays.deepToString(httpHeader)); + // note: add to result, not result2 + result.addResult(label, value, ValidationStatus.INVALID, "must have one key and one value"); + } else if (!ParameterValidationUtils.validateStringParameter(httpHeader[0])) { - result.setResult(HTTP_HEADERS, ValidationStatus.INVALID, - "HTTP header key is null or blank: " + Arrays.deepToString(httpHeader)); + result2.addResult("key", httpHeader[0], ValidationStatus.INVALID, Validated.IS_BLANK); + } else if (!ParameterValidationUtils.validateStringParameter(httpHeader[1])) { - result.setResult(HTTP_HEADERS, ValidationStatus.INVALID, - "HTTP header value is null or blank: " + Arrays.deepToString(httpHeader)); + result2.addResult("value", httpHeader[1], ValidationStatus.INVALID, Validated.IS_BLANK); } + + result.addResult(result2); } return result; @@ -223,28 +239,27 @@ public class RestPluginCarrierTechnologyParameters extends CarrierTechnologyPara /** * Validate the HTTP code filter. - * - * @param result the result of the validation */ - public GroupValidationResult validateHttpCodeFilter(final GroupValidationResult result) { + public ValidationResult validateHttpCodeFilter() { if (httpCodeFilter == null) { httpCodeFilter = DEFAULT_HTTP_CODE_FILTER; } else if (StringUtils.isBlank(httpCodeFilter)) { - result.setResult(HTTP_CODE_FILTER, ValidationStatus.INVALID, - "HTTP code filter must be specified as a three digit regular expression"); + return new ObjectValidationResult(HTTP_CODE_FILTER, httpCodeFilter, ValidationStatus.INVALID, + "must be a three digit regular expression"); } else { try { Pattern.compile(httpCodeFilter); } catch (PatternSyntaxException pse) { + LOGGER.debug("Invalid HTTP code filter", pse); String message = "Invalid HTTP code filter, the filter must be specified as a three digit " + "regular expression: " + pse.getMessage(); - result.setResult(HTTP_CODE_FILTER, ValidationStatus.INVALID, message); - LOGGER.debug(message, pse); + return new ObjectValidationResult(HTTP_CODE_FILTER, httpCodeFilter, ValidationStatus.INVALID, + message); } } - return result; + return null; } /** diff --git a/services/services-engine/src/main/java/org/onap/policy/apex/service/parameters/engineservice/EngineServiceParameters.java b/services/services-engine/src/main/java/org/onap/policy/apex/service/parameters/engineservice/EngineServiceParameters.java index afede627e..d33ae1697 100644 --- a/services/services-engine/src/main/java/org/onap/policy/apex/service/parameters/engineservice/EngineServiceParameters.java +++ b/services/services-engine/src/main/java/org/onap/policy/apex/service/parameters/engineservice/EngineServiceParameters.java @@ -2,6 +2,7 @@ * ============LICENSE_START======================================================= * Copyright (C) 2016-2018 Ericsson. All rights reserved. * Modifications Copyright (C) 2020 Bell Canada. 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. @@ -21,16 +22,21 @@ package org.onap.policy.apex.service.parameters.engineservice; +import javax.validation.Valid; import lombok.Getter; import lombok.Setter; -import org.apache.commons.lang3.StringUtils; import org.onap.policy.apex.core.engine.EngineParameters; import org.onap.policy.apex.model.basicmodel.concepts.AxArtifactKey; import org.onap.policy.apex.model.basicmodel.concepts.AxKey; import org.onap.policy.apex.service.parameters.ApexParameterConstants; -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.ValidationStatus; +import org.onap.policy.common.parameters.annotations.Max; +import org.onap.policy.common.parameters.annotations.Min; +import org.onap.policy.common.parameters.annotations.NotBlank; +import org.onap.policy.common.parameters.annotations.NotNull; +import org.onap.policy.common.parameters.annotations.Pattern; // @formatter:off /** @@ -58,6 +64,7 @@ import org.onap.policy.common.parameters.ValidationStatus; // @formatter:on @Getter @Setter +@NotNull public class EngineServiceParameters implements ParameterGroup { private static final int MAX_PORT = 65535; @@ -80,17 +87,25 @@ public class EngineServiceParameters implements ParameterGroup { // Constants for repeated strings // Apex engine service parameters + @Pattern(regexp = AxKey.NAME_REGEXP) private String name = DEFAULT_NAME; + @Pattern(regexp = AxKey.VERSION_REGEXP) private String version = DEFAULT_VERSION; + @Min(0) private int id = DEFAULT_ID; + @Min(1) private int instanceCount = DEFAULT_INSTANCE_COUNT; + @Min(1) + @Max(MAX_PORT) private int deploymentPort = DEFAULT_DEPLOYMENT_PORT; + @NotBlank private String policyModel = null; + @Min(0) private long periodicEventPeriod = 0; // @formatter:on // Apex engine internal parameters - private EngineParameters engineParameters = new EngineParameters(); + private @Valid EngineParameters engineParameters = new EngineParameters(); /** * Constructor to create an apex engine service parameters instance and register the instance with the parameter @@ -126,63 +141,8 @@ public class EngineServiceParameters implements ParameterGroup { * {@inheritDoc}. */ @Override - public GroupValidationResult validate() { - final GroupValidationResult result = new GroupValidationResult(this); - - validateStringParameters(result); - - validateNumericParameters(result); - - if (StringUtils.isBlank(policyModel)) { - result.setResult("policyModel", ValidationStatus.INVALID, "must be specified"); - } - result.setResult("engineParameters", engineParameters.validate()); - - return result; - } - - /** - * Validate string parameters. - * - * @param result the result of string parameter validation - */ - private void validateStringParameters(final GroupValidationResult result) { - if (name == null || !name.matches(AxKey.NAME_REGEXP)) { - result.setResult("name", ValidationStatus.INVALID, - "name is invalid, it must match regular expression" + AxKey.NAME_REGEXP); - } - - if (version == null || !version.matches(AxKey.VERSION_REGEXP)) { - result.setResult("version", ValidationStatus.INVALID, - "version is invalid, it must match regular expression" + AxKey.VERSION_REGEXP); - } - } - - /** - * Validate numeric parameters. - * - * @param result the result of numeric parameter validation - */ - private void validateNumericParameters(final GroupValidationResult result) { - if (id < 0) { - result.setResult("id", ValidationStatus.INVALID, - "id not specified or specified value [" + id + "] invalid, must be specified as id >= 0"); - } - - if (instanceCount < 1) { - result.setResult("instanceCount", ValidationStatus.INVALID, - "instanceCount [" + instanceCount + "] invalid, must be specified as instanceCount >= 1"); - } - - if (deploymentPort < 1 || deploymentPort > MAX_PORT) { - result.setResult("deploymentPort", ValidationStatus.INVALID, "deploymentPort [" + deploymentPort - + "] invalid, must be specified as 1024 <= port <= 65535"); - } - - if (periodicEventPeriod < 0) { - result.setResult("periodicEventPeriod", ValidationStatus.INVALID, "periodicEventPeriod [" - + periodicEventPeriod + "] invalid, must be specified in milliseconds as >=0"); - } + public BeanValidationResult validate() { + return new BeanValidator().validateTop(getClass().getSimpleName(), this); } } diff --git a/services/services-engine/src/main/java/org/onap/policy/apex/service/parameters/eventhandler/EventHandlerParameters.java b/services/services-engine/src/main/java/org/onap/policy/apex/service/parameters/eventhandler/EventHandlerParameters.java index 72eb58b0f..7fb4584fe 100644 --- a/services/services-engine/src/main/java/org/onap/policy/apex/service/parameters/eventhandler/EventHandlerParameters.java +++ b/services/services-engine/src/main/java/org/onap/policy/apex/service/parameters/eventhandler/EventHandlerParameters.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========================================================= */ @@ -25,18 +26,21 @@ import java.util.regex.PatternSyntaxException; import org.onap.policy.apex.service.parameters.ApexParameterConstants; import org.onap.policy.apex.service.parameters.carriertechnology.CarrierTechnologyParameters; import org.onap.policy.apex.service.parameters.eventprotocol.EventProtocolParameters; -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.ValidationStatus; +import org.onap.policy.common.parameters.annotations.NotNull; +import org.onap.policy.common.parameters.annotations.Valid; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * The parameters for a single event producer, event consumer or synchronous event handler. - * + * * <p>Event producers, consumers, and synchronous event handlers all use a carrier technology and an event protocol so * the actual parameters for each one are the same. Therefore, we use the same class for the parameters of each one. - * + * * <p>The following parameters are defined: <ol> <li>carrierTechnologyParameters: The carrier technology is the type of * messaging infrastructure used to carry events. Examples are File, Kafka or REST. <li>eventProtocolParameters: The * format that the events are in when being carried. Examples are JSON, XML, or Java Beans. carrier technology @@ -56,8 +60,8 @@ public class EventHandlerParameters implements ParameterGroup { private static final Logger LOGGER = LoggerFactory.getLogger(EventHandlerParameters.class); private String name = null; - private CarrierTechnologyParameters carrierTechnologyParameters = null; - private EventProtocolParameters eventProtocolParameters = null; + private @NotNull @Valid CarrierTechnologyParameters carrierTechnologyParameters = null; + private @NotNull @Valid EventProtocolParameters eventProtocolParameters = null; private boolean synchronousMode = false; private String synchronousPeer = null; private long synchronousTimeout = 0; @@ -97,7 +101,7 @@ public class EventHandlerParameters implements ParameterGroup { /** * Checks if the name of the event handler is set. - * + * * @return true if the name is set */ public boolean checkSetName() { @@ -214,7 +218,7 @@ public class EventHandlerParameters implements ParameterGroup { /** * Get the timeout value for the event handler in peered mode. - * + * * @param peeredMode the peered mode to get the timeout for * @return the timeout value */ @@ -231,7 +235,7 @@ public class EventHandlerParameters implements ParameterGroup { /** * Set the timeout value for the event handler in peered mode. - * + * * @param peeredMode the peered mode to set the timeout for * @param timeout the timeout value */ @@ -306,22 +310,8 @@ public class EventHandlerParameters implements ParameterGroup { * {@inheritDoc}. */ @Override - public GroupValidationResult validate() { - final GroupValidationResult result = new GroupValidationResult(this); - - if (eventProtocolParameters == null) { - result.setResult("eventProtocolParameters", ValidationStatus.INVALID, - "event handler eventProtocolParameters not specified or blank"); - } else { - result.setResult("eventProtocolParameters", eventProtocolParameters.validate()); - } - - if (carrierTechnologyParameters == null) { - result.setResult("carrierTechnologyParameters", ValidationStatus.INVALID, - "event handler carrierTechnologyParameters not specified or blank"); - } else { - result.setResult("carrierTechnologyParameters", carrierTechnologyParameters.validate()); - } + public BeanValidationResult validate() { + final BeanValidationResult result = new BeanValidator().validateTop(getClass().getSimpleName(), this); if (eventNameFilter != null) { try { @@ -329,7 +319,7 @@ public class EventHandlerParameters implements ParameterGroup { } catch (final PatternSyntaxException pse) { String message = "event handler eventNameFilter is not a valid regular expression: " + pse.getMessage(); LOGGER.trace(message, pse); - result.setResult("eventNameFilter", ValidationStatus.INVALID, message); + result.addResult("eventNameFilter", eventNameFilter, ValidationStatus.INVALID, message); } } @@ -338,7 +328,7 @@ public class EventHandlerParameters implements ParameterGroup { /** * Check if we're using synchronous mode. - * + * * @return true if if we're using synchronous mode */ public boolean isSynchronousMode() { @@ -347,7 +337,7 @@ public class EventHandlerParameters implements ParameterGroup { /** * The synchronous peer for this event handler. - * + * * @return the synchronous peer for this event handler */ public String getSynchronousPeer() { @@ -356,7 +346,7 @@ public class EventHandlerParameters implements ParameterGroup { /** * Get the timeout for synchronous operations. - * + * * @return the timeout for synchronous operations */ public long getSynchronousTimeout() { @@ -365,7 +355,7 @@ public class EventHandlerParameters implements ParameterGroup { /** * Check if this event handler will use requestor mode. - * + * * @return true if this event handler will use requestor mode */ public boolean isRequestorMode() { @@ -374,7 +364,7 @@ public class EventHandlerParameters implements ParameterGroup { /** * The requestor peer for this event handler. - * + * * @return the requestor peer for this event handler */ public String getRequestorPeer() { @@ -383,7 +373,7 @@ public class EventHandlerParameters implements ParameterGroup { /** * Get the requestor timeout. - * + * * @return the requestorTimeout. */ public long getRequestorTimeout() { diff --git a/services/services-engine/src/main/java/org/onap/policy/apex/service/parameters/eventprotocol/EventProtocolParameters.java b/services/services-engine/src/main/java/org/onap/policy/apex/service/parameters/eventprotocol/EventProtocolParameters.java index 68d5f8a56..1fd8e7489 100644 --- a/services/services-engine/src/main/java/org/onap/policy/apex/service/parameters/eventprotocol/EventProtocolParameters.java +++ b/services/services-engine/src/main/java/org/onap/policy/apex/service/parameters/eventprotocol/EventProtocolParameters.java @@ -21,10 +21,11 @@ package org.onap.policy.apex.service.parameters.eventprotocol; -import org.onap.policy.common.parameters.GroupValidationResult; -import org.onap.policy.common.parameters.ParameterGroup; +import org.onap.policy.common.parameters.ParameterGroupImpl; import org.onap.policy.common.parameters.ParameterRuntimeException; -import org.onap.policy.common.parameters.ValidationStatus; +import org.onap.policy.common.parameters.annotations.ClassName; +import org.onap.policy.common.parameters.annotations.NotBlank; +import org.onap.policy.common.parameters.annotations.NotNull; /** * A default event protocol parameter class that may be specialized by event protocol plugins that require plugin @@ -39,12 +40,14 @@ import org.onap.policy.common.parameters.ValidationStatus; * * @author Liam Fallon (liam.fallon@ericsson.com) */ -public abstract class EventProtocolParameters implements ParameterGroup { +@NotNull +@NotBlank +public abstract class EventProtocolParameters extends ParameterGroupImpl { // The event protocol label private String label = null; // Event protocol converter plugin class for this event protocol - private String eventProtocolPluginClass; + private @ClassName String eventProtocolPluginClass; /** * Constructor to create an event protocol parameters instance with the name of a sub class of this class and @@ -99,25 +102,6 @@ public abstract class EventProtocolParameters implements ParameterGroup { + "]"; } - /** - * {@inheritDoc}. - */ - @Override - public GroupValidationResult validate() { - final GroupValidationResult result = new GroupValidationResult(this); - - if (label == null || label.length() == 0) { - result.setResult("label", ValidationStatus.INVALID, "event protocol label not specified or is blank"); - } - - if (eventProtocolPluginClass == null || eventProtocolPluginClass.length() == 0) { - result.setResult("eventProtocolPluginClass", ValidationStatus.INVALID, - "event protocol eventProtocolPluginClass not specified or is blank"); - } - - return result; - } - @Override public String getName() { return this.getLabel(); diff --git a/services/services-engine/src/main/java/org/onap/policy/apex/service/parameters/eventprotocol/EventProtocolTextCharDelimitedParameters.java b/services/services-engine/src/main/java/org/onap/policy/apex/service/parameters/eventprotocol/EventProtocolTextCharDelimitedParameters.java index d15d7ed47..3875d4a14 100644 --- a/services/services-engine/src/main/java/org/onap/policy/apex/service/parameters/eventprotocol/EventProtocolTextCharDelimitedParameters.java +++ b/services/services-engine/src/main/java/org/onap/policy/apex/service/parameters/eventprotocol/EventProtocolTextCharDelimitedParameters.java @@ -21,7 +21,7 @@ package org.onap.policy.apex.service.parameters.eventprotocol; -import org.onap.policy.common.parameters.GroupValidationResult; +import org.onap.policy.common.parameters.BeanValidationResult; import org.onap.policy.common.parameters.ValidationStatus; /** @@ -97,16 +97,16 @@ public abstract class EventProtocolTextCharDelimitedParameters extends EventProt * {@inheritDoc}. */ @Override - public GroupValidationResult validate() { - final GroupValidationResult result = super.validate(); + public BeanValidationResult validate() { + final BeanValidationResult result = super.validate(); if (startChar == '\0') { - result.setResult("startChar", ValidationStatus.INVALID, + result.addResult("startChar", null, ValidationStatus.INVALID, "text character delimited start character has not been specified"); } if (endChar == '\0') { - result.setResult("endChar", ValidationStatus.INVALID, + result.addResult("endChar", null, ValidationStatus.INVALID, "text character delimited end character has not been specified\n"); } diff --git a/services/services-engine/src/main/java/org/onap/policy/apex/service/parameters/eventprotocol/EventProtocolTextTokenDelimitedParameters.java b/services/services-engine/src/main/java/org/onap/policy/apex/service/parameters/eventprotocol/EventProtocolTextTokenDelimitedParameters.java index ff363aff6..32883301e 100644 --- a/services/services-engine/src/main/java/org/onap/policy/apex/service/parameters/eventprotocol/EventProtocolTextTokenDelimitedParameters.java +++ b/services/services-engine/src/main/java/org/onap/policy/apex/service/parameters/eventprotocol/EventProtocolTextTokenDelimitedParameters.java @@ -21,8 +21,8 @@ package org.onap.policy.apex.service.parameters.eventprotocol; -import org.onap.policy.common.parameters.GroupValidationResult; -import org.onap.policy.common.parameters.ValidationStatus; +import org.onap.policy.common.parameters.annotations.NotBlank; +import org.onap.policy.common.parameters.annotations.NotNull; /** * An event protocol parameter class for token delimited textual event protocols that may be specialized by event @@ -42,7 +42,7 @@ import org.onap.policy.common.parameters.ValidationStatus; */ public abstract class EventProtocolTextTokenDelimitedParameters extends EventProtocolParameters { // The delimiter token for text blocks - private String startDelimiterToken = null; + private @NotNull @NotBlank String startDelimiterToken = null; private String endDelimiterToken = null; private boolean delimiterAtStart = true; @@ -115,19 +115,4 @@ public abstract class EventProtocolTextTokenDelimitedParameters extends EventPro return "EventProtocolTextTokenDelimitedParameters [startDelimiterToken=" + startDelimiterToken + ", endDelimiterToken=" + endDelimiterToken + ", delimiterAtStart=" + delimiterAtStart + "]"; } - - /** - * {@inheritDoc}. - */ - @Override - public GroupValidationResult validate() { - final GroupValidationResult result = super.validate(); - - if (startDelimiterToken == null || startDelimiterToken.length() == 0) { - result.setResult("startDelimiterToken", ValidationStatus.INVALID, - "text start delimiter token not specified or is blank\n"); - } - - return result; - } } diff --git a/services/services-engine/src/test/java/org/onap/policy/apex/service/engine/event/impl/eventrequestor/EventRequestorCarrierTechnologyParametersTest.java b/services/services-engine/src/test/java/org/onap/policy/apex/service/engine/event/impl/eventrequestor/EventRequestorCarrierTechnologyParametersTest.java index c0da81625..878756383 100644 --- a/services/services-engine/src/test/java/org/onap/policy/apex/service/engine/event/impl/eventrequestor/EventRequestorCarrierTechnologyParametersTest.java +++ b/services/services-engine/src/test/java/org/onap/policy/apex/service/engine/event/impl/eventrequestor/EventRequestorCarrierTechnologyParametersTest.java @@ -1,6 +1,7 @@ /* * ============LICENSE_START======================================================= * Copyright (C) 2021 Nordix Foundation + * 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. @@ -23,7 +24,7 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import org.junit.Test; -import org.onap.policy.common.parameters.GroupValidationResult; +import org.onap.policy.common.parameters.ValidationResult; public class EventRequestorCarrierTechnologyParametersTest { @@ -37,7 +38,7 @@ public class EventRequestorCarrierTechnologyParametersTest { @Test public void validate() { final EventRequestorCarrierTechnologyParameters parameters = new EventRequestorCarrierTechnologyParameters(); - final GroupValidationResult actual = parameters.validate(); + final ValidationResult actual = parameters.validate(); assertNotNull(actual); } -}
\ No newline at end of file +} diff --git a/services/services-engine/src/test/java/org/onap/policy/apex/service/engine/main/ApexMainTest.java b/services/services-engine/src/test/java/org/onap/policy/apex/service/engine/main/ApexMainTest.java index b7532aba2..29a3e0f00 100644 --- a/services/services-engine/src/test/java/org/onap/policy/apex/service/engine/main/ApexMainTest.java +++ b/services/services-engine/src/test/java/org/onap/policy/apex/service/engine/main/ApexMainTest.java @@ -3,6 +3,7 @@ * Copyright (C) 2018 Ericsson. All rights reserved. * Modifications Copyright (C) 2020-2021 Nordix Foundation. * Modifications Copyright (C) 2020-2021 Bell Canada. 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. @@ -109,7 +110,7 @@ public class ApexMainTest { apexMain1 = new ApexMain(args); await().atMost(200, TimeUnit.MILLISECONDS).until(() -> outContent.toString() - .contains("parameter group has status INVALID")); + .contains("item has status INVALID")); assertNotNull(apexMain1); } diff --git a/services/services-engine/src/test/java/org/onap/policy/apex/service/engine/parameters/ApexParametersTest.java b/services/services-engine/src/test/java/org/onap/policy/apex/service/engine/parameters/ApexParametersTest.java index 9557ca8f9..a0169d7e3 100644 --- a/services/services-engine/src/test/java/org/onap/policy/apex/service/engine/parameters/ApexParametersTest.java +++ b/services/services-engine/src/test/java/org/onap/policy/apex/service/engine/parameters/ApexParametersTest.java @@ -3,6 +3,7 @@ * Copyright (C) 2018 Ericsson. All rights reserved. * Modifications Copyright (C) 2020 Nordix Foundation. * Modifications Copyright (C) 2020 Bell Canada. 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. @@ -70,10 +71,11 @@ public class ApexParametersTest { final ApexCommandLineArguments arguments = new ApexCommandLineArguments(args); assertThatThrownBy(() -> new ApexParameterHandler().getParameters(arguments)) - .hasMessageContaining("java properties array entries must have one key and one value") - .hasMessageContaining("java properties key is null or blank") - .hasMessageContaining("java properties value is null or blank") - .hasMessageContaining("java properties array entry is null"); + .hasMessageContaining("\"javaProperties\"") + .hasMessageContaining("entry 0", "entry 1", "entry 2", "entry 3", "entry 4", "entry 5") + .hasMessageContaining("must have one key and one value") + .hasMessageContaining("\"key\" value \"null\" INVALID, is blank") + .hasMessageContaining("\"value\" value \"null\" INVALID, is blank"); } @Test diff --git a/services/services-engine/src/test/java/org/onap/policy/apex/service/engine/parameters/ParameterTests.java b/services/services-engine/src/test/java/org/onap/policy/apex/service/engine/parameters/ParameterTests.java index da4ceaa12..e37da3540 100644 --- a/services/services-engine/src/test/java/org/onap/policy/apex/service/engine/parameters/ParameterTests.java +++ b/services/services-engine/src/test/java/org/onap/policy/apex/service/engine/parameters/ParameterTests.java @@ -3,6 +3,7 @@ * Copyright (C) 2016-2018 Ericsson. All rights reserved. * Modifications Copyright (C) 2019-2020 Nordix Foundation. * Modifications Copyright (C) 2020 Bell Canada. 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. @@ -72,15 +73,11 @@ public class ParameterTests { final ApexCommandLineArguments arguments = new ApexCommandLineArguments(args); assertThatThrownBy(() -> new ApexParameterHandler().getParameters(arguments)) - .hasMessage("validation error(s) on parameters from \"src/test/resources/parameters/noParams.json\"\n" - + "parameter group \"APEX_PARAMETERS\" type " - + "\"org.onap.policy.apex.service.parameters.ApexParameters\" INVALID, " - + "parameter group has status INVALID\n" + " parameter group \"UNDEFINED\" INVALID, " - + "engine service parameters are not specified\n" - + " parameter group map \"eventOutputParameters\" INVALID, " - + "at least one event output must be specified\n" - + " parameter group map \"eventInputParameters\" INVALID, " - + "at least one event input must be specified\n"); + .hasMessageContaining("src/test/resources/parameters/noParams.json") + .hasMessageContaining("ApexParameters") + .hasMessageContaining("\"engineServiceParameters\" value \"null\" INVALID, is null") + .hasMessageContaining("\"eventOutputParameters\" value \"{}\" INVALID, minimum number of elements: 1") + .hasMessageContaining("\"eventInputParameters\" value \"{}\" INVALID, minimum number of elements: 1"); } @Test @@ -89,19 +86,13 @@ public class ParameterTests { final ApexCommandLineArguments arguments = new ApexCommandLineArguments(args); assertThatThrownBy(() -> new ApexParameterHandler().getParameters(arguments)) - .hasMessage("validation error(s) on parameters from \"src/test/resources/parameters/blankParams.json\"\n" - + "parameter group \"APEX_PARAMETERS\" type " - + "\"org.onap.policy.apex.service.parameters.ApexParameters\" INVALID, " - + "parameter group has status INVALID\n" + " parameter group \"ENGINE_SERVICE_PARAMETERS\" type " - + "\"org.onap.policy.apex.service.parameters.engineservice.EngineServiceParameters\" " - + "INVALID, parameter group has status INVALID\n" - + " field \"id\" type \"int\" value \"-1\" INVALID, " - + "id not specified or specified value [-1] invalid, must be specified as id >= 0\n" - + " field \"policyModel\" type \"java.lang.String\" value \"null\" INVALID, must be specified\n" - + " parameter group map \"eventOutputParameters\" INVALID, " - + "at least one event output must be specified\n" - + " parameter group map \"eventInputParameters\" INVALID, " - + "at least one event input must be specified\n"); + .hasMessageContaining("src/test/resources/parameters/blankParams.json") + .hasMessageContaining("ApexParameters") + .hasMessageContaining("EngineServiceParameters") + .hasMessageContaining("\"id\" value \"-1\" INVALID, is below the minimum") + .hasMessageContaining("\"policyModel\" value \"null\" INVALID, is null") + .hasMessageContaining("\"eventOutputParameters\" value \"{}\" INVALID, minimum number of elements") + .hasMessageContaining("\"eventInputParameters\" value \"{}\" INVALID, minimum number of elements"); } @Test @@ -110,38 +101,19 @@ public class ParameterTests { final ApexCommandLineArguments arguments = new ApexCommandLineArguments(args); assertThatThrownBy(() -> new ApexParameterHandler().getParameters(arguments)) - .hasMessage("validation error(s) on parameters from \"src/test/resources/parameters/badParams.json\"\n" - + "parameter group \"APEX_PARAMETERS\" type " - + "\"org.onap.policy.apex.service.parameters.ApexParameters\" INVALID, " - + "parameter group has status INVALID\n" + " parameter group \"hello there\" type " - + "\"org.onap.policy.apex.service.parameters.engineservice.EngineServiceParameters\" " - + "INVALID, parameter group has status INVALID\n" - + " field \"name\" type \"java.lang.String\" value \"hello there\" INVALID, " - + "name is invalid, it must match regular expression[A-Za-z0-9\\-_\\.]+\n" - + " field \"id\" type \"int\" value \"-45\" INVALID, id not specified or " - + "specified value [-45] invalid, must be specified as id >= 0\n" - + " field \"instanceCount\" type \"int\" value \"-345\" INVALID, " - + "instanceCount [-345] invalid, must be specified as instanceCount >= 1\n" - + " field \"deploymentPort\" type \"int\" value \"65536\" INVALID, " - + "deploymentPort [65536] invalid, must be specified as 1024 <= port <= 65535\n" - + " parameter group map \"eventOutputParameters\" INVALID, " - + "parameter group map has status INVALID\n" + " parameter group \"FirstProducer\" type " - + "\"org.onap.policy.apex.service.parameters.eventhandler.EventHandlerParameters\" INVALID" - + ", parameter group has status INVALID\n" + " parameter group \"FILE\" type " - + "\"org.onap.policy.apex.service.engine.event.impl." - + "filecarrierplugin.FileCarrierTechnologyParameters\" INVALID, " - + "parameter group has status INVALID\n" - + " field \"fileName\" type \"java.lang.String\" value \"null\" INVALID, " - + "\"null\" invalid, must be specified as a non-empty string\n" - + " parameter group map \"eventInputParameters\" INVALID, " - + "parameter group map has status INVALID\n" + " parameter group \"TheFileConsumer1\" type " - + "\"org.onap.policy.apex.service.parameters.eventhandler.EventHandlerParameters\" INVALID" - + ", parameter group has status INVALID\n" + " parameter group \"FILE\" type " - + "\"org.onap.policy.apex.service.engine.event.impl." - + "filecarrierplugin.FileCarrierTechnologyParameters\" INVALID, " - + "parameter group has status INVALID\n" - + " field \"fileName\" type \"java.lang.String\" value \"null\" INVALID, " - + "\"null\" invalid, must be specified as a non-empty string\n"); + .hasMessageContaining("src/test/resources/parameters/badParams.json") + .hasMessageContaining("ApexParameters") + .hasMessageContaining("EngineServiceParameters") + .hasMessageContaining("\"name\" value \"hello there\" INVALID, does not match") + .hasMessageContaining("\"id\" value \"-45\" INVALID, is below the minimum") + .hasMessageContaining("\"instanceCount\" value \"-345\" INVALID, is below the minimum") + .hasMessageContaining("\"deploymentPort\" value \"65536\" INVALID, exceeds the maximum") + .hasMessageContaining("eventOutputParameters", "FirstProducer", "EventHandlerParameters", + "FileCarrierTechnologyParameters") + .hasMessageContaining("\"fileName\" value \"null\" INVALID, is blank") + .hasMessageContaining("eventInputParameters", "TheFileConsumer1", "EventHandlerParameters", + "FileCarrierTechnologyParameters") + .hasMessageContaining("\"fileName\" value \"null\" INVALID, is blank"); } @Test diff --git a/services/services-engine/src/test/java/org/onap/policy/apex/service/engine/parameters/ProducerConsumerTests.java b/services/services-engine/src/test/java/org/onap/policy/apex/service/engine/parameters/ProducerConsumerTests.java index 0ef4fa252..0b05eac63 100644 --- a/services/services-engine/src/test/java/org/onap/policy/apex/service/engine/parameters/ProducerConsumerTests.java +++ b/services/services-engine/src/test/java/org/onap/policy/apex/service/engine/parameters/ProducerConsumerTests.java @@ -3,6 +3,7 @@ * Copyright (C) 2016-2018 Ericsson. All rights reserved. * Modifications Copyright (C) 2019-2020 Nordix Foundation. * Modifications Copyright (C) 2020 Bell Canada. 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. @@ -75,14 +76,11 @@ public class ProducerConsumerTests { final ApexCommandLineArguments arguments = new ApexCommandLineArguments(args); assertThatThrownBy(() -> new ApexParameterHandler().getParameters(arguments)) - .hasMessage("validation error(s) on parameters from \"src/test/resources/parameters/prodConsNoCT.json\"\n" - + "parameter group \"APEX_PARAMETERS\" type " - + "\"org.onap.policy.apex.service.parameters.ApexParameters\" INVALID, " - + "parameter group has status INVALID\n" + " parameter group map \"eventInputParameters\" INVALID, " - + "parameter group map has status INVALID\n" + " parameter group \"aConsumer\" type " - + "\"org.onap.policy.apex.service.parameters.eventhandler.EventHandlerParameters\" INVALID," - + " parameter group has status INVALID\n" + " parameter group \"UNDEFINED\" INVALID, " - + "event handler carrierTechnologyParameters not specified or blank\n"); + .hasMessageContaining("src/test/resources/parameters/prodConsNoCT.json") + .hasMessageContaining("ApexParameters") + .hasMessageContaining("eventInputParameters", "aConsumer", "EventHandlerParameters", + "carrierTechnologyParameters") + .hasMessageContaining("is null"); } @Test @@ -91,23 +89,14 @@ public class ProducerConsumerTests { final ApexCommandLineArguments arguments = new ApexCommandLineArguments(args); assertThatThrownBy(() -> new ApexParameterHandler().getParameters(arguments)) - .hasMessage("validation error(s) on parameters from \"src/test/resources/parameters/prodConsNoEP.json\"\n" - + "parameter group \"APEX_PARAMETERS\" type " - + "\"org.onap.policy.apex.service.parameters.ApexParameters\" INVALID, " - + "parameter group has status INVALID\n" + " parameter group map \"eventOutputParameters\" INVALID, " - + "parameter group map has status INVALID\n" + " parameter group \"aProducer\" type " - + "\"org.onap.policy.apex.service.parameters.eventhandler.EventHandlerParameters\" INVALID" - + ", parameter group has status INVALID\n" + " parameter group \"UNDEFINED\" INVALID, " - + "event handler eventProtocolParameters not specified or blank\n" - + " parameter group map \"eventInputParameters\" INVALID, " - + "parameter group map has status INVALID\n" + " parameter group \"aConsumer\" type " - + "\"org.onap.policy.apex.service.parameters.eventhandler.EventHandlerParameters\" INVALID" - + ", parameter group has status INVALID\n" + " parameter group \"FILE\" type " - + "\"org.onap.policy.apex.service.engine.event.impl." - + "filecarrierplugin.FileCarrierTechnologyParameters\" INVALID, " - + "parameter group has status INVALID\n" - + " field \"fileName\" type \"java.lang.String\" value \"null\" INVALID, " - + "\"null\" invalid, must be specified as a non-empty string\n"); + .hasMessageContaining("src/test/resources/parameters/prodConsNoEP.json") + .hasMessageContaining("ApexParameters") + .hasMessageContaining("eventOutputParameters", "aProducer", "EventHandlerParameters", + "eventProtocolParameters") + .hasMessageContaining("eventInputParameters", "aConsumer", "EventHandlerParameters", + "FileCarrierTechnologyParameters", "fileName") + .hasMessageContaining("is null") + .hasMessageContaining("is blank"); } @Test @@ -170,19 +159,12 @@ public class ProducerConsumerTests { final String[] args = {"-p", "src/test/resources/parameters/prodConsBadFileName.json"}; final ApexCommandLineArguments arguments = new ApexCommandLineArguments(args); - assertThatThrownBy(() -> new ApexParameterHandler().getParameters(arguments)).hasMessage( - "validation error(s) on parameters from " + "\"src/test/resources/parameters/prodConsBadFileName.json\"\n" - + "parameter group \"APEX_PARAMETERS\" type " - + "\"org.onap.policy.apex.service.parameters.ApexParameters\" INVALID, " - + "parameter group has status INVALID\n" + " parameter group map \"eventOutputParameters\" INVALID, " - + "parameter group map has status INVALID\n" + " parameter group \"aProducer\" type " - + "\"org.onap.policy.apex.service.parameters.eventhandler.EventHandlerParameters\" " - + "INVALID, parameter group has status INVALID\n" + " parameter group \"FILE\" type " - + "\"org.onap.policy.apex.service.engine.event.impl." - + "filecarrierplugin.FileCarrierTechnologyParameters\" INVALID, " - + "parameter group has status INVALID\n" + " field \"fileName\" type " - + "\"java.lang.String\" value \"null\" INVALID, " - + "\"null\" invalid, must be specified as a non-empty string\n"); + assertThatThrownBy(() -> new ApexParameterHandler().getParameters(arguments)) + .hasMessageContaining("src/test/resources/parameters/prodConsBadFileName.json") + .hasMessageContaining("ApexParameters") + .hasMessageContaining("eventOutputParameters", "aProducer", "EventHandlerParameters", + "FileCarrierTechnologyParameters", "fileName") + .hasMessageContaining("is blank"); } @Test diff --git a/services/services-engine/src/test/java/org/onap/policy/apex/service/engine/parameters/SyncParameterTests.java b/services/services-engine/src/test/java/org/onap/policy/apex/service/engine/parameters/SyncParameterTests.java index 71ff28877..aaa98fd47 100644 --- a/services/services-engine/src/test/java/org/onap/policy/apex/service/engine/parameters/SyncParameterTests.java +++ b/services/services-engine/src/test/java/org/onap/policy/apex/service/engine/parameters/SyncParameterTests.java @@ -51,16 +51,10 @@ public class SyncParameterTests { final ApexCommandLineArguments arguments = new ApexCommandLineArguments(args); assertThatThrownBy(() -> new ApexParameterHandler().getParameters(arguments)) - .hasMessage("validation error(s) on parameters from " - + "\"src/test/resources/parameters/syncBadParamsNoSyncWithPeer.json\"\n" - + "parameter group \"APEX_PARAMETERS\" type " - + "\"org.onap.policy.apex.service.parameters.ApexParameters\" INVALID, " - + "parameter group has status INVALID\n" - + " parameter group map \"eventOutputParameters\" INVALID, " - + "parameter group map has status INVALID\n" + " parameter group \"SyncProducer0\" type " - + "\"org.onap.policy.apex.service.parameters.eventhandler.EventHandlerParameters\" INVALID" - + ", specified peered mode \"SYNCHRONOUS\" " - + "peer is illegal on eventOutputParameters \"SyncProducer0\" \n"); + .hasMessageContaining("src/test/resources/parameters/syncBadParamsNoSyncWithPeer.json") + .hasMessageContaining("ApexParameters") + .hasMessageContaining("\"eventOutputParameters\" value \"SyncProducer0\" INVALID") + .hasMessageContaining("peer is illegal"); } @Test @@ -69,16 +63,10 @@ public class SyncParameterTests { final ApexCommandLineArguments arguments = new ApexCommandLineArguments(args); assertThatThrownBy(() -> new ApexParameterHandler().getParameters(arguments)) - .hasMessage("validation error(s) on parameters from " - + "\"src/test/resources/parameters/syncBadParamsNotSyncWithPeer.json\"\n" - + "parameter group \"APEX_PARAMETERS\" type " - + "\"org.onap.policy.apex.service.parameters.ApexParameters\" INVALID, " - + "parameter group has status INVALID\n" - + " parameter group map \"eventOutputParameters\" INVALID, " - + "parameter group map has status INVALID\n" + " parameter group \"SyncProducer0\" type " - + "\"org.onap.policy.apex.service.parameters.eventhandler.EventHandlerParameters\" INVALID" - + ", specified peered mode \"SYNCHRONOUS\" peer is illegal " - + "on eventOutputParameters \"SyncProducer0\" \n"); + .hasMessageContaining("src/test/resources/parameters/syncBadParamsNotSyncWithPeer.json") + .hasMessageContaining("ApexParameters") + .hasMessageContaining("\"eventOutputParameters\" value \"SyncProducer0\" INVALID") + .hasMessageContaining("peer is illegal"); } @Test @@ -87,27 +75,13 @@ public class SyncParameterTests { final ApexCommandLineArguments arguments = new ApexCommandLineArguments(args); assertThatThrownBy(() -> new ApexParameterHandler().getParameters(arguments)) - .hasMessage("validation error(s) on parameters from " - + "\"src/test/resources/parameters/syncBadParamsBadPeers.json\"\n" - + "parameter group \"APEX_PARAMETERS\" type " - + "\"org.onap.policy.apex.service.parameters.ApexParameters\" INVALID, " - + "parameter group has status INVALID\n" - + " parameter group map \"eventOutputParameters\" INVALID, " - + "parameter group map has status INVALID\n" + " parameter group \"SyncProducer0\" type " - + "\"org.onap.policy.apex.service.parameters.eventhandler.EventHandlerParameters\" INVALID" - + ", peer \"SyncProducer1 for peered mode SYNCHRONOUS does not exist " - + "or is not defined with the same peered mode\n" + " parameter group \"SyncProducer1\" type " - + "\"org.onap.policy.apex.service.parameters.eventhandler.EventHandlerParameters\" INVALID" - + ", peer \"SyncProducer0 for peered mode SYNCHRONOUS does not exist " - + "or is not defined with the same peered mode\n" - + " parameter group map \"eventInputParameters\" INVALID, " - + "parameter group map has status INVALID\n" + " parameter group \"SyncConsumer0\" type " - + "\"org.onap.policy.apex.service.parameters.eventhandler.EventHandlerParameters\" INVALID" - + ", peer \"SyncConsumer1 for peered mode SYNCHRONOUS does not exist " - + "or is not defined with the same peered mode\n" + " parameter group \"SyncConsumer1\" type " - + "\"org.onap.policy.apex.service.parameters.eventhandler.EventHandlerParameters\" INVALID" - + ", peer \"SyncConsumer0 for peered mode SYNCHRONOUS does not exist " - + "or is not defined with the same peered mode\n"); + .hasMessageContaining("src/test/resources/parameters/syncBadParamsBadPeers.json") + .hasMessageContaining("ApexParameters") + .hasMessageContaining("\"eventOutputParameters\" value \"SyncProducer0\" INVALID") + .hasMessageContaining("\"eventOutputParameters\" value \"SyncProducer1\" INVALID") + .hasMessageContaining("\"eventInputParameters\" value \"SyncConsumer0\" INVALID") + .hasMessageContaining("\"eventInputParameters\" value \"SyncConsumer1\" INVALID") + .hasMessageContaining("does not exist or is not defined"); } @Test @@ -116,29 +90,16 @@ public class SyncParameterTests { final ApexCommandLineArguments arguments = new ApexCommandLineArguments(args); assertThatThrownBy(() -> new ApexParameterHandler().getParameters(arguments)) - .hasMessage("validation error(s) on parameters from " - + "\"src/test/resources/parameters/syncBadParamsInvalidTimeout.json\"\n" - + "parameter group \"APEX_PARAMETERS\" type " - + "\"org.onap.policy.apex.service.parameters.ApexParameters\" INVALID, " - + "parameter group has status INVALID\n" - + " parameter group map \"eventOutputParameters\" INVALID, " - + "parameter group map has status INVALID\n" + " parameter group \"SyncProducer0\" type " - + "\"org.onap.policy.apex.service.parameters.eventhandler.EventHandlerParameters\" INVALID," - + " specified peered mode \"SYNCHRONOUS\" timeout value \"-10\" is illegal, " - + "specify a non-negative timeout value in milliseconds\n" - + " parameter group \"SyncProducer1\" type " - + "\"org.onap.policy.apex.service.parameters.eventhandler.EventHandlerParameters\" " - + "INVALID, specified peered mode \"SYNCHRONOUS\" timeout value \"-3\" is illegal, " - + "specify a non-negative timeout value in milliseconds\n" - + " parameter group map \"eventInputParameters\" INVALID, " - + "parameter group map has status INVALID\n" + " parameter group \"SyncConsumer0\" type " - + "\"org.onap.policy.apex.service.parameters.eventhandler.EventHandlerParameters\" " - + "INVALID, specified peered mode \"SYNCHRONOUS\" timeout value \"-1\" is illegal, " - + "specify a non-negative timeout value in milliseconds\n" - + " parameter group \"SyncConsumer1\" type " - + "\"org.onap.policy.apex.service.parameters.eventhandler.EventHandlerParameters\" INVALID," - + " specified peered mode \"SYNCHRONOUS\" timeout value \"-99999999\" is illegal, " - + "specify a non-negative timeout value in milliseconds\n"); + .hasMessageContaining("src/test/resources/parameters/syncBadParamsInvalidTimeout.json") + .hasMessageContaining("ApexParameters") + .hasMessageContaining("\"eventOutputParameters\" value \"SyncProducer0\" INVALID") + .hasMessageContaining("\"eventOutputParameters\" value \"SyncProducer1\" INVALID") + .hasMessageContaining("\"eventInputParameters\" value \"SyncConsumer0\" INVALID") + .hasMessageContaining("\"eventInputParameters\" value \"SyncConsumer1\" INVALID") + .hasMessageContaining("timeout value \"-10\" is illegal") + .hasMessageContaining("timeout value \"-3\" is illegal") + .hasMessageContaining("timeout value \"-1\" is illegal") + .hasMessageContaining("timeout value \"-99999999\" is illegal"); } @Test @@ -147,16 +108,10 @@ public class SyncParameterTests { final ApexCommandLineArguments arguments = new ApexCommandLineArguments(args); assertThatThrownBy(() -> new ApexParameterHandler().getParameters(arguments)) - .hasMessage("validation error(s) on parameters from " - + "\"src/test/resources/parameters/syncBadParamsBadTimeout.json\"\n" - + "parameter group \"APEX_PARAMETERS\" type " - + "\"org.onap.policy.apex.service.parameters.ApexParameters\" " - + "INVALID, parameter group has status INVALID\n" - + " parameter group map \"eventOutputParameters\" INVALID, " - + "parameter group map has status INVALID\n" + " parameter group \"MyOtherProducer\" type " - + "\"org.onap.policy.apex.service.parameters.eventhandler.EventHandlerParameters\" " - + "INVALID, specified peered mode \"SYNCHRONOUS\" " - + "timeout is illegal on eventOutputParameters \"MyOtherProducer\"\n"); + .hasMessageContaining("src/test/resources/parameters/syncBadParamsBadTimeout.json") + .hasMessageContaining("ApexParameters") + .hasMessageContaining("\"eventOutputParameters\" value \"MyOtherProducer\" INVALID, " + + "specified peered mode \"SYNCHRONOUS\" timeout is illegal"); } @Test @@ -165,29 +120,16 @@ public class SyncParameterTests { final ApexCommandLineArguments arguments = new ApexCommandLineArguments(args); assertThatThrownBy(() -> new ApexParameterHandler().getParameters(arguments)) - .hasMessage("validation error(s) on parameters from " - + "\"src/test/resources/parameters/syncBadParamsUnpairedTimeout.json\"\n" - + "parameter group \"APEX_PARAMETERS\" type " - + "\"org.onap.policy.apex.service.parameters.ApexParameters\" INVALID, " - + "parameter group has status INVALID\n" - + " parameter group map \"eventOutputParameters\" INVALID, " - + "parameter group map has status INVALID\n" + " parameter group \"SyncProducer0\" type " - + "\"org.onap.policy.apex.service.parameters.eventhandler.EventHandlerParameters\" INVALID" - + ", peer \"SyncConsumer0 for peered mode SYNCHRONOUS timeout 10 on event handler " - + "\"SyncProducer0\" does not equal timeout 1 on event handler \"SyncConsumer0\"\n" - + " parameter group \"SyncProducer1\" type " - + "\"org.onap.policy.apex.service.parameters.eventhandler.EventHandlerParameters\" INVALID" - + ", peer \"SyncConsumer1 for peered mode SYNCHRONOUS timeout 3 on event handler " - + "\"SyncProducer1\" does not equal timeout 99999999 on event handler \"SyncConsumer1\"\n" - + " parameter group map \"eventInputParameters\" INVALID, " - + "parameter group map has status INVALID\n" + " parameter group \"SyncConsumer0\" type " - + "\"org.onap.policy.apex.service.parameters.eventhandler.EventHandlerParameters\" INVALID" - + ", peer \"SyncProducer0 for peered mode SYNCHRONOUS timeout 1 on event handler " - + "\"SyncConsumer0\" does not equal timeout 10 on event handler \"SyncProducer0\"\n" - + " parameter group \"SyncConsumer1\" type " - + "\"org.onap.policy.apex.service.parameters.eventhandler.EventHandlerParameters\" INVALID" - + ", peer \"SyncProducer1 for peered mode SYNCHRONOUS timeout 99999999 on event handler " - + "\"SyncConsumer1\" does not equal timeout 3 on event handler \"SyncProducer1\"\n" + ""); + .hasMessageContaining("src/test/resources/parameters/syncBadParamsUnpairedTimeout.json") + .hasMessageContaining("ApexParameters") + .hasMessageContaining("\"eventOutputParameters\" value \"SyncProducer0\" INVALID, peer \"SyncConsumer0\"") + .hasMessageContaining("\"eventOutputParameters\" value \"SyncProducer1\" INVALID, peer \"SyncConsumer1\"") + .hasMessageContaining("\"eventInputParameters\" value \"SyncConsumer0\" INVALID, peer \"SyncProducer0\"") + .hasMessageContaining("\"eventInputParameters\" value \"SyncConsumer1\" INVALID, peer \"SyncProducer1\"") + .hasMessageContaining("timeout 10 does not equal peer timeout 1") + .hasMessageContaining("timeout 3 does not equal peer timeout 99999999") + .hasMessageContaining("timeout 1 does not equal peer timeout 10") + .hasMessageContaining("timeout 99999999 does not equal peer timeout 3"); } @Test @@ -226,23 +168,12 @@ public class SyncParameterTests { final ApexCommandLineArguments arguments = new ApexCommandLineArguments(args); assertThatThrownBy(() -> new ApexParameterHandler().getParameters(arguments)) - .hasMessage("validation error(s) on parameters from " - + "\"src/test/resources/parameters/syncUnusedConsumerPeers.json\"\n" - + "parameter group \"APEX_PARAMETERS\" type " - + "\"org.onap.policy.apex.service.parameters.ApexParameters\" INVALID, " - + "parameter group has status INVALID\n" - + " parameter group map \"eventOutputParameters\" INVALID, " - + "parameter group map has status INVALID\n" + " parameter group \"SyncProducer1\" type " - + "\"org.onap.policy.apex.service.parameters.eventhandler.EventHandlerParameters\" " - + "INVALID, peer \"SyncConsumer0 for peered mode SYNCHRONOUS, " - + "value \"SyncProducer0\" on peer \"SyncConsumer0\" " - + "does not equal event handler \"SyncProducer1\"\n" - + " parameter group map \"eventInputParameters\" INVALID, " - + "parameter group map has status INVALID\n" + " parameter group \"SyncConsumer1\" type " - + "\"org.onap.policy.apex.service.parameters.eventhandler.EventHandlerParameters\" " - + "INVALID, peer \"SyncProducer1 for peered mode SYNCHRONOUS, " - + "value \"SyncConsumer0\" on peer \"SyncProducer1\" " - + "does not equal event handler \"SyncConsumer1\"\n"); + .hasMessageContaining("src/test/resources/parameters/syncUnusedConsumerPeers.json") + .hasMessageContaining("ApexParameters") + .hasMessageContaining("\"eventOutputParameters\" value \"SyncProducer1\" INVALID, peer \"SyncConsumer0\"") + .hasMessageContaining("\"eventInputParameters\" value \"SyncConsumer1\" INVALID, peer \"SyncProducer1\"") + .hasMessageContaining("value \"SyncProducer0\" on peer does not equal event handler") + .hasMessageContaining("value \"SyncConsumer0\" on peer does not equal event handler"); } @Test @@ -251,29 +182,16 @@ public class SyncParameterTests { final ApexCommandLineArguments arguments = new ApexCommandLineArguments(args); assertThatThrownBy(() -> new ApexParameterHandler().getParameters(arguments)) - .hasMessage("validation error(s) on parameters from " - + "\"src/test/resources/parameters/syncMismatchedPeers.json\"\n" - + "parameter group \"APEX_PARAMETERS\" type " - + "\"org.onap.policy.apex.service.parameters.ApexParameters\" INVALID, " - + "parameter group has status INVALID\n" - + " parameter group map \"eventOutputParameters\" INVALID, " - + "parameter group map has status INVALID\n" + " parameter group \"SyncProducer0\" type " - + "\"org.onap.policy.apex.service.parameters.eventhandler.EventHandlerParameters\" INVALID" - + ", peer \"SyncConsumer1 for peered mode SYNCHRONOUS, value \"SyncProducer1\" " - + "on peer \"SyncConsumer1\" does not equal event handler \"SyncProducer0\"\n" - + " parameter group \"SyncProducer1\" type " - + "\"org.onap.policy.apex.service.parameters.eventhandler.EventHandlerParameters\" INVALID" - + ", peer \"SyncConsumer0 for peered mode SYNCHRONOUS, value \"SyncProducer0\" " - + "on peer \"SyncConsumer0\" does not equal event handler \"SyncProducer1\"\n" - + " parameter group map \"eventInputParameters\" INVALID, " - + "parameter group map has status INVALID\n" + " parameter group \"SyncConsumer0\" type " - + "\"org.onap.policy.apex.service.parameters.eventhandler.EventHandlerParameters\" INVALID" - + ", peer \"SyncProducer0 for peered mode SYNCHRONOUS, value \"SyncConsumer1\" " - + "on peer \"SyncProducer0\" does not equal event handler \"SyncConsumer0\"\n" - + " parameter group \"SyncConsumer1\" type " - + "\"org.onap.policy.apex.service.parameters.eventhandler.EventHandlerParameters\" INVALID" - + ", peer \"SyncProducer1 for peered mode SYNCHRONOUS, value \"SyncConsumer0\" " - + "on peer \"SyncProducer1\" does not equal event handler \"SyncConsumer1\"\n"); + .hasMessageContaining("src/test/resources/parameters/syncMismatchedPeers.json") + .hasMessageContaining("ApexParameters") + .hasMessageContaining("\"eventOutputParameters\" value \"SyncProducer0\" INVALID, peer \"SyncConsumer1\"") + .hasMessageContaining("\"eventOutputParameters\" value \"SyncProducer1\" INVALID, peer \"SyncConsumer0\"") + .hasMessageContaining("\"eventInputParameters\" value \"SyncConsumer0\" INVALID, peer \"SyncProducer0\"") + .hasMessageContaining("\"eventInputParameters\" value \"SyncConsumer1\" INVALID, peer \"SyncProducer1\"") + .hasMessageContaining("value \"SyncProducer1\" on peer does not equal event handler") + .hasMessageContaining("value \"SyncProducer0\" on peer does not equal event handler") + .hasMessageContaining("value \"SyncConsumer1\" on peer does not equal event handler") + .hasMessageContaining("value \"SyncConsumer0\" on peer does not equal event handler"); } @Test @@ -282,21 +200,12 @@ public class SyncParameterTests { final ApexCommandLineArguments arguments = new ApexCommandLineArguments(args); assertThatThrownBy(() -> new ApexParameterHandler().getParameters(arguments)) - .hasMessage("validation error(s) on parameters from " - + "\"src/test/resources/parameters/syncUnusedProducerPeers.json\"\n" - + "parameter group \"APEX_PARAMETERS\" type " - + "\"org.onap.policy.apex.service.parameters.ApexParameters\" INVALID, " - + "parameter group has status INVALID\n" - + " parameter group map \"eventOutputParameters\" INVALID, " - + "parameter group map has status INVALID\n" + " parameter group \"SyncProducer0\" type " - + "\"org.onap.policy.apex.service.parameters.eventhandler.EventHandlerParameters\" INVALID" - + ", peer \"SyncConsumer0 for peered mode SYNCHRONOUS, value \"SyncProducer1\" on peer " - + "\"SyncConsumer0\" does not equal event handler \"SyncProducer0\"\n" - + " parameter group map \"eventInputParameters\" INVALID, parameter group map has status " - + "INVALID\n parameter group \"SyncConsumer0\" type " - + "\"org.onap.policy.apex.service.parameters.eventhandler.EventHandlerParameters\" INVALID" - + ", peer \"SyncProducer1 for peered mode SYNCHRONOUS, value \"SyncConsumer1\" on peer " - + "\"SyncProducer1\" does not equal event handler \"SyncConsumer0\"\n"); + .hasMessageContaining("src/test/resources/parameters/syncUnusedProducerPeers.json") + .hasMessageContaining("ApexParameters") + .hasMessageContaining("\"eventOutputParameters\" value \"SyncProducer0\" INVALID, peer \"SyncConsumer0\"") + .hasMessageContaining("\"eventInputParameters\" value \"SyncConsumer0\" INVALID, peer \"SyncProducer1\"") + .hasMessageContaining("value \"SyncProducer1\" on peer does not equal event handler") + .hasMessageContaining("value \"SyncConsumer1\" on peer does not equal event handler"); } @Test @@ -305,23 +214,12 @@ public class SyncParameterTests { final ApexCommandLineArguments arguments = new ApexCommandLineArguments(args); assertThatThrownBy(() -> new ApexParameterHandler().getParameters(arguments)) - .hasMessage("validation error(s) on parameters from " - + "\"src/test/resources/parameters/syncMismatchedTimeout.json\"\n" - + "parameter group \"APEX_PARAMETERS\" type " - + "\"org.onap.policy.apex.service.parameters.ApexParameters\" INVALID, " - + "parameter group has status INVALID\n" + " parameter group map \"eventOutputParameters\" " - + "INVALID, parameter group map has status INVALID\n" - + " parameter group \"SyncProducer1\" type " - + "\"org.onap.policy.apex.service.parameters.eventhandler.EventHandlerParameters\" INVALID," - + " peer \"SyncConsumer1 for peered mode SYNCHRONOUS timeout 456 " - + "on event handler \"SyncProducer1\" does not equal timeout 123 " - + "on event handler \"SyncConsumer1\"\n" - + " parameter group map \"eventInputParameters\" INVALID, " - + "parameter group map has status INVALID\n" + " parameter group \"SyncConsumer1\" type " - + "\"org.onap.policy.apex.service.parameters.eventhandler.EventHandlerParameters\" INVALID," - + " peer \"SyncProducer1 for peered mode SYNCHRONOUS timeout 123 " - + "on event handler \"SyncConsumer1\" does not equal timeout 456 " - + "on event handler \"SyncProducer1\"\n"); + .hasMessageContaining("src/test/resources/parameters/syncMismatchedTimeout.json") + .hasMessageContaining("ApexParameters") + .hasMessageContaining("\"eventOutputParameters\" value \"SyncProducer1\" INVALID, peer \"SyncConsumer1\"") + .hasMessageContaining("\"eventInputParameters\" value \"SyncConsumer1\" INVALID, peer \"SyncProducer1\"") + .hasMessageContaining("timeout 123 does not equal peer timeout 456") + .hasMessageContaining("timeout 456 does not equal peer timeout 123"); } @Test diff --git a/services/services-engine/src/test/java/org/onap/policy/apex/service/engine/parameters/dummyclasses/SuperDooperCarrierTechnologyParameters.java b/services/services-engine/src/test/java/org/onap/policy/apex/service/engine/parameters/dummyclasses/SuperDooperCarrierTechnologyParameters.java index 6805a3d84..d7a502c7f 100644 --- a/services/services-engine/src/test/java/org/onap/policy/apex/service/engine/parameters/dummyclasses/SuperDooperCarrierTechnologyParameters.java +++ b/services/services-engine/src/test/java/org/onap/policy/apex/service/engine/parameters/dummyclasses/SuperDooperCarrierTechnologyParameters.java @@ -1,6 +1,7 @@ /*- * ============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. @@ -23,15 +24,22 @@ package org.onap.policy.apex.service.engine.parameters.dummyclasses; import java.util.Arrays; import java.util.Collection; import java.util.Properties; +import org.apache.commons.lang3.StringUtils; import org.onap.policy.apex.service.parameters.carriertechnology.CarrierTechnologyParameters; -import org.onap.policy.common.parameters.GroupValidationResult; +import org.onap.policy.common.parameters.BeanValidationResult; import org.onap.policy.common.parameters.ValidationStatus; +import org.onap.policy.common.parameters.annotations.Min; +import org.onap.policy.common.parameters.annotations.NotBlank; +import org.onap.policy.common.parameters.annotations.NotNull; +import org.onap.policy.models.base.Validated; /** * Apex parameters for SuperDooper as an event carrier technology. * * @author Liam Fallon (liam.fallon@ericsson.com) */ +@NotNull +@NotBlank public class SuperDooperCarrierTechnologyParameters extends CarrierTechnologyParameters { // Default parameter values private static final String DEFAULT_ACKS = "all"; @@ -71,16 +79,16 @@ public class SuperDooperCarrierTechnologyParameters extends CarrierTechnologyPar // superDooper carrier parameters private String bootstrapServers = DEFAULT_BOOTSTRAP_SERVERS; private String acks = DEFAULT_ACKS; - private int retries = DEFAULT_RETRIES; - private int batchSize = DEFAULT_BATCH_SIZE; - private int lingerTime = DEFAULT_LINGER_TIME; - private long bufferMemory = DEFAULT_BUFFER_MEMORY; + private @Min(0) int retries = DEFAULT_RETRIES; + private @Min(0) int batchSize = DEFAULT_BATCH_SIZE; + private @Min(0) int lingerTime = DEFAULT_LINGER_TIME; + private @Min(0) long bufferMemory = DEFAULT_BUFFER_MEMORY; private String groupId = DEFAULT_GROUP_ID; private boolean enableAutoCommit = DEFAULT_ENABLE_AUTO_COMMIT; - private int autoCommitTime = DEFAULT_AUTO_COMMIT_TIME; + private @Min(0) int autoCommitTime = DEFAULT_AUTO_COMMIT_TIME; private int sessionTimeout = DEFAULT_SESSION_TIMEOUT; private String producerTopic = DEFAULT_PRODUCER_TOPIC; - private int consumerPollTime = DEFAULT_CONSUMER_POLL_TIME; + private @Min(0) int consumerPollTime = DEFAULT_CONSUMER_POLL_TIME; private String[] consumerTopicList = DEFAULT_CONSUMER_TOPIC_LIST; private String keySerializer = DEFAULT_KEYSERZER; private String valueSerializer = DEFAULT_VALSERZER; @@ -459,98 +467,30 @@ public class SuperDooperCarrierTechnologyParameters extends CarrierTechnologyPar * {@inheritDoc}. */ @Override - public GroupValidationResult validate() { - final GroupValidationResult result = super.validate(); + public BeanValidationResult validate() { + final BeanValidationResult result = super.validate(); - if (bootstrapServers == null || bootstrapServers.trim().length() == 0) { - result.setResult("bootstrapServers", ValidationStatus.INVALID, - "bootstrapServers not specified, must be specified as a string of form host:port"); + if (consumerTopicList == null) { + return result; } - if (acks == null || acks.trim().length() == 0) { - result.setResult("acks", ValidationStatus.INVALID, - "acks not specified, must be specified as a string with values [0|1|all]"); - } - - if (retries < 0) { - result.setResult("retries", ValidationStatus.INVALID, - "[" + retries + "] invalid, must be specified as retries >= 0"); - } - - if (batchSize < 0) { - result.setResult("batchSize", ValidationStatus.INVALID, - "[" + batchSize + "] invalid, must be specified as batchSize >= 0"); - } - - if (lingerTime < 0) { - result.setResult("lingerTime", ValidationStatus.INVALID, - "[" + lingerTime + "] invalid, must be specified as lingerTime >= 0"); - } - - if (bufferMemory < 0) { - result.setResult("bufferMemory", ValidationStatus.INVALID, - "[" + bufferMemory + "] invalid, must be specified as bufferMemory >= 0"); - } - - if (groupId == null || groupId.trim().length() == 0) { - result.setResult("groupId", ValidationStatus.INVALID, "not specified, must be specified as a string"); - } - - if (autoCommitTime < 0) { - result.setResult("autoCommitTime", ValidationStatus.INVALID, - "[" + autoCommitTime + "] invalid, must be specified as autoCommitTime >= 0"); - } - - if (sessionTimeout < 0) { - result.setResult("sessionTimeout", ValidationStatus.INVALID, - "sessionTimeout [" + sessionTimeout + "] invalid, must be specified as sessionTimeout >= 0"); - } - - if (producerTopic == null || producerTopic.trim().length() == 0) { - result.setResult("producerTopic", ValidationStatus.INVALID, - "producerTopic not specified, must be specified as a string"); - } - - if (consumerPollTime < 0) { - result.setResult("consumerPollTime", ValidationStatus.INVALID, - "[" + consumerPollTime + "] invalid, must be specified as consumerPollTime >= 0"); - } - - if (consumerTopicList == null || consumerTopicList.length == 0) { - result.setResult("consumerTopicList", ValidationStatus.INVALID, + if (consumerTopicList.length == 0) { + result.addResult("consumerTopicList", consumerTopicList, ValidationStatus.INVALID, "not specified, must be specified as a list of strings"); + return result; } - StringBuilder consumerTopicMessageBuilder = new StringBuilder(); + BeanValidationResult result2 = new BeanValidationResult("consumerTopicList", consumerTopicList); + int item = 0; for (final String consumerTopic : consumerTopicList) { - if (consumerTopic == null || consumerTopic.trim().length() == 0) { - consumerTopicMessageBuilder.append(" invalid consumer topic \"" + consumerTopic - + "\" specified on consumerTopicList, consumer topics must be specified as strings"); + if (StringUtils.isBlank(consumerTopic)) { + result2.addResult("entry " + item, consumerTopic, ValidationStatus.INVALID, Validated.IS_BLANK); } - } - if (consumerTopicMessageBuilder.length() > 0) { - result.setResult("consumerTopicList", ValidationStatus.INVALID, consumerTopicMessageBuilder.toString()); + ++item; } - if (keySerializer == null || keySerializer.trim().length() == 0) { - result.setResult("keySerializer", ValidationStatus.INVALID, "not specified, must be specified as a string"); - } - - if (valueSerializer == null || valueSerializer.trim().length() == 0) { - result.setResult("valueSerializer", ValidationStatus.INVALID, - "not specified, must be specified as a string"); - } - - if (keyDeserializer == null || keyDeserializer.trim().length() == 0) { - result.setResult("keyDeserializer", ValidationStatus.INVALID, - "not specified, must be specified as a string"); - } - - if (valueDeserializer == null || valueDeserializer.trim().length() == 0) { - result.setResult("valueDeserializer", ValidationStatus.INVALID, - "not specified, must be specified as a string"); - } + result.addResult(result2); return result; } diff --git a/services/services-onappf/src/main/java/org/onap/policy/apex/services/onappf/parameters/ApexStarterParameterGroup.java b/services/services-onappf/src/main/java/org/onap/policy/apex/services/onappf/parameters/ApexStarterParameterGroup.java index 17550d003..f752348b4 100644 --- a/services/services-onappf/src/main/java/org/onap/policy/apex/services/onappf/parameters/ApexStarterParameterGroup.java +++ b/services/services-onappf/src/main/java/org/onap/policy/apex/services/onappf/parameters/ApexStarterParameterGroup.java @@ -1,6 +1,7 @@ /*- * ============LICENSE_START======================================================= * Copyright (C) 2019 Nordix Foundation. + * 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. @@ -26,6 +27,7 @@ import org.onap.policy.common.endpoints.parameters.TopicParameterGroup; import org.onap.policy.common.parameters.ParameterGroupImpl; import org.onap.policy.common.parameters.annotations.NotBlank; import org.onap.policy.common.parameters.annotations.NotNull; +import org.onap.policy.common.parameters.annotations.Valid; /** * Class to hold all parameters needed for apex starter component. @@ -36,9 +38,9 @@ import org.onap.policy.common.parameters.annotations.NotNull; @NotBlank @Getter public class ApexStarterParameterGroup extends ParameterGroupImpl { - private RestServerParameters restServerParameters; - private PdpStatusParameters pdpStatusParameters; - private TopicParameterGroup topicParameterGroup; + private @Valid RestServerParameters restServerParameters; + private @Valid PdpStatusParameters pdpStatusParameters; + private @Valid TopicParameterGroup topicParameterGroup; /** * Create the apex starter parameter group. diff --git a/services/services-onappf/src/main/java/org/onap/policy/apex/services/onappf/parameters/ApexStarterParameterHandler.java b/services/services-onappf/src/main/java/org/onap/policy/apex/services/onappf/parameters/ApexStarterParameterHandler.java index 05ae8fd57..691b30d2d 100644 --- a/services/services-onappf/src/main/java/org/onap/policy/apex/services/onappf/parameters/ApexStarterParameterHandler.java +++ b/services/services-onappf/src/main/java/org/onap/policy/apex/services/onappf/parameters/ApexStarterParameterHandler.java @@ -1,6 +1,7 @@ /*- * ============LICENSE_START======================================================= * Copyright (C) 2019-2020 Nordix Foundation. + * 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. @@ -23,7 +24,7 @@ package org.onap.policy.apex.services.onappf.parameters; import java.io.File; import org.onap.policy.apex.services.onappf.ApexStarterCommandLineArguments; import org.onap.policy.apex.services.onappf.exception.ApexStarterException; -import org.onap.policy.common.parameters.GroupValidationResult; +import org.onap.policy.common.parameters.ValidationResult; import org.onap.policy.common.utils.coder.Coder; import org.onap.policy.common.utils.coder.CoderException; import org.onap.policy.common.utils.coder.StandardCoder; @@ -70,7 +71,7 @@ public class ApexStarterParameterHandler { } // validate the parameters - final GroupValidationResult validationResult = apexStarterParameterGroup.validate(); + final ValidationResult validationResult = apexStarterParameterGroup.validate(); if (!validationResult.isValid()) { String returnMessage = "validation error(s) on parameters from \"" + arguments.getConfigurationFilePath() + "\"\n"; diff --git a/services/services-onappf/src/test/java/org/onap/policy/apex/services/onappf/parameters/TestApexStarterParameterGroup.java b/services/services-onappf/src/test/java/org/onap/policy/apex/services/onappf/parameters/TestApexStarterParameterGroup.java index 00b6cce74..c44964921 100644 --- a/services/services-onappf/src/test/java/org/onap/policy/apex/services/onappf/parameters/TestApexStarterParameterGroup.java +++ b/services/services-onappf/src/test/java/org/onap/policy/apex/services/onappf/parameters/TestApexStarterParameterGroup.java @@ -1,6 +1,7 @@ /*- * ============LICENSE_START======================================================= * Copyright (C) 2019 Nordix Foundation. + * 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. @@ -20,6 +21,7 @@ package org.onap.policy.apex.services.onappf.parameters; +import static org.assertj.core.api.Assertions.assertThat; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; @@ -28,7 +30,7 @@ import java.util.Map; import org.junit.Test; import org.onap.policy.common.endpoints.parameters.RestServerParameters; import org.onap.policy.common.endpoints.parameters.TopicParameterGroup; -import org.onap.policy.common.parameters.GroupValidationResult; +import org.onap.policy.common.parameters.ValidationResult; /** * Class to perform unit test of {@link ApexStarterParameterGroup}. @@ -52,7 +54,7 @@ public class TestApexStarterParameterGroup { final RestServerParameters restServerParameters = apexStarterParameters.getRestServerParameters(); final PdpStatusParameters pdpStatusParameters = apexStarterParameters.getPdpStatusParameters(); final TopicParameterGroup topicParameterGroup = apexStarterParameters.getTopicParameterGroup(); - final GroupValidationResult validationResult = apexStarterParameters.validate(); + final ValidationResult validationResult = apexStarterParameters.validate(); assertTrue(validationResult.isValid()); assertEquals(CommonTestData.APEX_STARTER_GROUP_NAME, apexStarterParameters.getName()); assertEquals(CommonTestData.TIME_INTERVAL, pdpStatusParameters.getTimeIntervalMs()); @@ -73,7 +75,7 @@ public class TestApexStarterParameterGroup { public void testApexStarterParameterGroup_NullName() { final ApexStarterParameterGroup apexStarterParameters = commonTestData .toObject(commonTestData.getApexStarterParameterGroupMap(null), ApexStarterParameterGroup.class); - final GroupValidationResult validationResult = apexStarterParameters.validate(); + final ValidationResult validationResult = apexStarterParameters.validate(); assertFalse(validationResult.isValid()); assertEquals(null, apexStarterParameters.getName()); assertTrue(validationResult.getResult().contains("is null")); @@ -83,11 +85,10 @@ public class TestApexStarterParameterGroup { public void testApexStarterParameterGroup_EmptyName() { final ApexStarterParameterGroup apexStarterParameters = commonTestData .toObject(commonTestData.getApexStarterParameterGroupMap(""), ApexStarterParameterGroup.class); - final GroupValidationResult validationResult = apexStarterParameters.validate(); + final ValidationResult validationResult = apexStarterParameters.validate(); + assertThat(validationResult.getResult()).contains("\"name\" value \"\" INVALID, is blank"); assertFalse(validationResult.isValid()); assertEquals("", apexStarterParameters.getName()); - assertTrue(validationResult.getResult().contains( - "field \"name\" type \"java.lang.String\" value \"\" INVALID, " + "must be a non-blank string")); } @Test @@ -96,7 +97,7 @@ public class TestApexStarterParameterGroup { commonTestData.getApexStarterParameterGroupMap(CommonTestData.APEX_STARTER_GROUP_NAME), ApexStarterParameterGroup.class); apexStarterParameters.setName("ApexStarterNewGroup"); - final GroupValidationResult validationResult = apexStarterParameters.validate(); + final ValidationResult validationResult = apexStarterParameters.validate(); assertTrue(validationResult.isValid()); assertEquals("ApexStarterNewGroup", apexStarterParameters.getName()); } @@ -108,11 +109,10 @@ public class TestApexStarterParameterGroup { map.put("pdpStatusParameters", commonTestData.getPdpStatusParametersMap(true)); final ApexStarterParameterGroup apexStarterParameters = commonTestData.toObject(map, ApexStarterParameterGroup.class); - final GroupValidationResult validationResult = apexStarterParameters.validate(); + final ValidationResult validationResult = apexStarterParameters.validate(); + assertThat(validationResult.getResult()) + .contains("\"ApexStarterParameterGroup\" INVALID, item has status INVALID"); assertFalse(validationResult.isValid()); - assertTrue(validationResult.getResult() - .contains("\"org.onap.policy.apex.services.onappf.parameters.ApexStarterParameterGroup\" INVALID, " - + "parameter group has status INVALID")); } @Test @@ -123,11 +123,9 @@ public class TestApexStarterParameterGroup { final ApexStarterParameterGroup apexStarterParameters = commonTestData.toObject(map, ApexStarterParameterGroup.class); - final GroupValidationResult validationResult = apexStarterParameters.validate(); + final ValidationResult validationResult = apexStarterParameters.validate(); + assertThat(validationResult.getResult()).contains("\"RestServerParameters\" INVALID, item has status INVALID"); assertFalse(validationResult.isValid()); - assertTrue(validationResult.getResult() - .contains("\"org.onap.policy.common.endpoints.parameters.RestServerParameters\" INVALID, " - + "parameter group has status INVALID")); } @@ -139,10 +137,8 @@ public class TestApexStarterParameterGroup { final ApexStarterParameterGroup apexStarterParameters = commonTestData.toObject(map, ApexStarterParameterGroup.class); - final GroupValidationResult validationResult = apexStarterParameters.validate(); + final ValidationResult validationResult = apexStarterParameters.validate(); + assertThat(validationResult.getResult()).contains("\"TopicParameterGroup\" INVALID, item has status INVALID"); assertFalse(validationResult.isValid()); - assertTrue(validationResult.getResult() - .contains("\"org.onap.policy.common.endpoints.parameters.TopicParameterGroup\" INVALID, " - + "parameter group has status INVALID")); } } diff --git a/services/services-onappf/src/test/java/org/onap/policy/apex/services/onappf/parameters/TestApexStarterParameterHandler.java b/services/services-onappf/src/test/java/org/onap/policy/apex/services/onappf/parameters/TestApexStarterParameterHandler.java index dd424c15b..90c2ef743 100644 --- a/services/services-onappf/src/test/java/org/onap/policy/apex/services/onappf/parameters/TestApexStarterParameterHandler.java +++ b/services/services-onappf/src/test/java/org/onap/policy/apex/services/onappf/parameters/TestApexStarterParameterHandler.java @@ -1,6 +1,7 @@ /*- * ============LICENSE_START======================================================= * Copyright (C) 2019-2021 Nordix Foundation. + * 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. @@ -105,8 +106,7 @@ public class TestApexStarterParameterHandler { arguments.parse(apexStarterConfigParameters); assertThatThrownBy(() -> new ApexStarterParameterHandler().getParameters(arguments)) - .hasMessageContaining("field \"name\" type \"java.lang.String\" value \" \" INVALID, must be a " - + "non-blank string"); + .hasMessageContaining("\"name\" value \" \" INVALID, is blank"); } @Test diff --git a/services/services-onappf/src/test/java/org/onap/policy/apex/services/onappf/parameters/TestPdpStatusParameters.java b/services/services-onappf/src/test/java/org/onap/policy/apex/services/onappf/parameters/TestPdpStatusParameters.java index 95cf35093..765bb70a9 100644 --- a/services/services-onappf/src/test/java/org/onap/policy/apex/services/onappf/parameters/TestPdpStatusParameters.java +++ b/services/services-onappf/src/test/java/org/onap/policy/apex/services/onappf/parameters/TestPdpStatusParameters.java @@ -1,6 +1,7 @@ /*- * ============LICENSE_START======================================================= * Copyright (C) 2019 Nordix Foundation. + * 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. @@ -20,6 +21,7 @@ package org.onap.policy.apex.services.onappf.parameters; +import static org.assertj.core.api.Assertions.assertThat; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNull; @@ -27,7 +29,7 @@ import static org.junit.Assert.assertTrue; import java.util.Map; import org.junit.Test; -import org.onap.policy.common.parameters.GroupValidationResult; +import org.onap.policy.common.parameters.ValidationResult; /** * Class to perform unit test of {@link PdpStatusParameters}. @@ -41,7 +43,7 @@ public class TestPdpStatusParameters { public void test() throws Exception { final PdpStatusParameters pdpStatusParameters = testData.toObject(testData.getPdpStatusParametersMap(false), PdpStatusParameters.class); - final GroupValidationResult validationResult = pdpStatusParameters.validate(); + final ValidationResult validationResult = pdpStatusParameters.validate(); assertTrue(validationResult.isValid()); assertEquals(CommonTestData.TIME_INTERVAL, pdpStatusParameters.getTimeIntervalMs()); assertEquals(CommonTestData.PDP_TYPE, pdpStatusParameters.getPdpType()); @@ -54,7 +56,7 @@ public class TestPdpStatusParameters { public void testValidate() throws Exception { final PdpStatusParameters pdpStatusParameters = testData.toObject(testData.getPdpStatusParametersMap(false), PdpStatusParameters.class); - final GroupValidationResult result = pdpStatusParameters.validate(); + final ValidationResult result = pdpStatusParameters.validate(); assertNull(result.getResult()); assertTrue(result.isValid()); } @@ -65,10 +67,9 @@ public class TestPdpStatusParameters { pdpStatusParametersMap.remove("pdpGroup"); final PdpStatusParameters pdpStatusParameters = testData.toObject(pdpStatusParametersMap, PdpStatusParameters.class); - final GroupValidationResult validationResult = pdpStatusParameters.validate(); + final ValidationResult validationResult = pdpStatusParameters.validate(); assertFalse(validationResult.isValid()); - assertTrue(validationResult.getResult() - .contains("field \"pdpGroup\" type \"java.lang.String\" value \"null\" INVALID")); + assertThat(validationResult.getResult()).contains("\"pdpGroup\" value \"null\" INVALID"); } @Test @@ -77,9 +78,8 @@ public class TestPdpStatusParameters { pdpStatusParametersMap.put("pdpGroup", ""); final PdpStatusParameters pdpStatusParameters = testData.toObject(pdpStatusParametersMap, PdpStatusParameters.class); - final GroupValidationResult validationResult = pdpStatusParameters.validate(); + final ValidationResult validationResult = pdpStatusParameters.validate(); assertFalse(validationResult.isValid()); - assertTrue(validationResult.getResult() - .contains("field \"pdpGroup\" type \"java.lang.String\" value \"\" INVALID, must be a non-blank string")); + assertThat(validationResult.getResult()).contains("\"pdpGroup\" value \"\" INVALID"); } } diff --git a/testsuites/integration/integration-uservice-test/src/test/java/org/onap/policy/apex/testsuites/integration/uservice/adapt/restclient/TestExecutionPropertyRest.java b/testsuites/integration/integration-uservice-test/src/test/java/org/onap/policy/apex/testsuites/integration/uservice/adapt/restclient/TestExecutionPropertyRest.java index b3f27c52e..8596ceec9 100644 --- a/testsuites/integration/integration-uservice-test/src/test/java/org/onap/policy/apex/testsuites/integration/uservice/adapt/restclient/TestExecutionPropertyRest.java +++ b/testsuites/integration/integration-uservice-test/src/test/java/org/onap/policy/apex/testsuites/integration/uservice/adapt/restclient/TestExecutionPropertyRest.java @@ -2,6 +2,7 @@ * ============LICENSE_START======================================================= * Copyright (C) 2019-2020 Nordix Foundation. * Modifications Copyright (C) 2020-2021 Bell Canada. 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. @@ -158,8 +159,9 @@ public class TestExecutionPropertyRest { final String outString = outContent.toString(); LOGGER.info("testReplaceUrlTag-OUTSTRING=\n" + outString + "\nEnd-TagUrl"); - assertThat(outString).contains("invalid URL http://localhost:32801/TestExecutionRest/apex/event/tagId}" - + " has been set for event sending on RESTCLIENT"); + assertThat(outString).contains("item \"url\" " + + "value \"http://localhost:32801/TestExecutionRest/apex/event/tagId}\" INVALID, " + + "invalid URL has been set for event sending on RESTCLIENT"); } /** diff --git a/testsuites/integration/integration-uservice-test/src/test/java/org/onap/policy/apex/testsuites/integration/uservice/adapt/restserver/TestRestServer.java b/testsuites/integration/integration-uservice-test/src/test/java/org/onap/policy/apex/testsuites/integration/uservice/adapt/restserver/TestRestServer.java index 0596a65e8..7f460bb15 100644 --- a/testsuites/integration/integration-uservice-test/src/test/java/org/onap/policy/apex/testsuites/integration/uservice/adapt/restserver/TestRestServer.java +++ b/testsuites/integration/integration-uservice-test/src/test/java/org/onap/policy/apex/testsuites/integration/uservice/adapt/restserver/TestRestServer.java @@ -3,6 +3,7 @@ * Copyright (C) 2016-2018 Ericsson. All rights reserved. * Modifications Copyright (C) 2019-2020 Nordix Foundation. * Modifications Copyright (C) 2020-2021 Bell Canada. 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. @@ -316,8 +317,7 @@ public class TestRestServer { final String outString = outContent.toString(); - assertThat(outString) - .contains("the parameters \"host\", \"port\", and \"standalone\" are illegal on REST Server producer"); + assertThat(outString).contains("\"host\" value \"null\" INVALID, is blank"); LOGGER.debug("testRestServerProducerStandalone end"); } @@ -341,7 +341,7 @@ public class TestRestServer { await().atMost(10L, TimeUnit.SECONDS).until(() -> !apexMain.isAlive()); final String outString = outContent.toString(); - assertThat(outString).contains(" host is specified only in standalone mode"); + assertThat(outString).contains("\"host\"", "should be specified only in standalone mode"); LOGGER.debug("testRestServerProducerHost end"); } @@ -365,7 +365,7 @@ public class TestRestServer { await().atMost(10L, TimeUnit.SECONDS).until(() -> !apexMain.isAlive()); final String outString = outContent.toString(); - assertThat(outString).contains(" port is specified only in standalone mode"); + assertThat(outString).contains("\"port\"", "should be specified only in standalone mode"); LOGGER.debug("testRestServerProducerPort end"); } @@ -387,8 +387,7 @@ public class TestRestServer { await().atMost(10L, TimeUnit.SECONDS).until(() -> !apexMain.isAlive()); final String outString = outContent.toString(); - assertThat(outString).contains("the parameters \"host\" and \"port\" must be defined for REST Server consumer " - + "(FirstConsumer) in standalone mode"); + assertThat(outString).contains("\"host\" value \"null\" INVALID, is blank"); LOGGER.debug("testRestServerConsumerStandaloneNoHost end"); } diff --git a/testsuites/integration/integration-uservice-test/src/test/java/org/onap/policy/apex/testsuites/integration/uservice/executionproperties/DummyCarrierTechnologyParameters.java b/testsuites/integration/integration-uservice-test/src/test/java/org/onap/policy/apex/testsuites/integration/uservice/executionproperties/DummyCarrierTechnologyParameters.java index fca676b9b..bf645a1ac 100644 --- a/testsuites/integration/integration-uservice-test/src/test/java/org/onap/policy/apex/testsuites/integration/uservice/executionproperties/DummyCarrierTechnologyParameters.java +++ b/testsuites/integration/integration-uservice-test/src/test/java/org/onap/policy/apex/testsuites/integration/uservice/executionproperties/DummyCarrierTechnologyParameters.java @@ -1,6 +1,7 @@ /*- * ============LICENSE_START======================================================= * Copyright (C) 2019 Nordix Foundation. + * 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. @@ -22,10 +23,9 @@ package org.onap.policy.apex.testsuites.integration.uservice.executionproperties import lombok.Data; import lombok.EqualsAndHashCode; -import org.apache.commons.lang3.StringUtils; import org.onap.policy.apex.service.parameters.carriertechnology.CarrierTechnologyParameters; -import org.onap.policy.common.parameters.GroupValidationResult; -import org.onap.policy.common.parameters.ValidationStatus; +import org.onap.policy.common.parameters.annotations.NotBlank; +import org.onap.policy.common.parameters.annotations.NotNull; /** * Dummy carrier technology parameters. @@ -48,8 +48,8 @@ public class DummyCarrierTechnologyParameters extends CarrierTechnologyParameter /** The consumer plugin class for the dummy carrier technology. */ public static final String DUMMY_EVENT_CONSUMER_PLUGIN_CLASS = DummyApexEventConsumer.class.getName(); - private String testToRun = null; - private String propertyFileName = null; + private @NotNull @NotBlank String testToRun = null; + private @NotNull @NotBlank String propertyFileName = null; /** * Constructor to create a dummy carrier technology parameters instance and register the instance with the parameter @@ -64,24 +64,4 @@ public class DummyCarrierTechnologyParameters extends CarrierTechnologyParameter this.setEventConsumerPluginClass(DUMMY_EVENT_CONSUMER_PLUGIN_CLASS); } - - /** - * {@inheritDoc}. - */ - @Override - public GroupValidationResult validate() { - final GroupValidationResult result = super.validate(); - - if (StringUtils.isEmpty(testToRun)) { - result.setResult("testToRun", ValidationStatus.INVALID, - "no test has been specified on the dummy carrier technology plugin"); - } - - if (StringUtils.isEmpty(propertyFileName)) { - result.setResult("propertyFileName", ValidationStatus.INVALID, - "no propertyFileName has been specified on the dummy carrier technology plugin"); - } - - return result; - } } diff --git a/testsuites/performance/performance-benchmark-test/src/main/java/org/onap/policy/apex/testsuites/performance/benchmark/eventgenerator/EventGeneratorParameters.java b/testsuites/performance/performance-benchmark-test/src/main/java/org/onap/policy/apex/testsuites/performance/benchmark/eventgenerator/EventGeneratorParameters.java index 619100176..9846c0463 100644 --- a/testsuites/performance/performance-benchmark-test/src/main/java/org/onap/policy/apex/testsuites/performance/benchmark/eventgenerator/EventGeneratorParameters.java +++ b/testsuites/performance/performance-benchmark-test/src/main/java/org/onap/policy/apex/testsuites/performance/benchmark/eventgenerator/EventGeneratorParameters.java @@ -1,6 +1,7 @@ /*- * ============LICENSE_START======================================================= * Copyright (C) 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. @@ -20,14 +21,20 @@ package org.onap.policy.apex.testsuites.performance.benchmark.eventgenerator; -import org.onap.policy.common.parameters.GroupValidationResult; -import org.onap.policy.common.parameters.ParameterGroup; -import org.onap.policy.common.parameters.ValidationStatus; +import lombok.Getter; +import lombok.Setter; +import org.onap.policy.common.parameters.ParameterGroupImpl; +import org.onap.policy.common.parameters.annotations.Max; +import org.onap.policy.common.parameters.annotations.Min; +import org.onap.policy.common.parameters.annotations.NotBlank; +import org.onap.policy.common.parameters.annotations.NotNull; /** * This class defines the parameters for event generation. */ -public class EventGeneratorParameters implements ParameterGroup { +@Getter +@Setter +public class EventGeneratorParameters extends ParameterGroupImpl { // @formatter:off private static final String DEFAULT_NAME = EventGeneratorParameters.class.getSimpleName(); private static final String DEFAULT_HOST = "localhost"; @@ -36,11 +43,16 @@ public class EventGeneratorParameters implements ParameterGroup { private static final int DEFAULT_BATCH_SIZE = 1; private static final long DEFAULT_DELAY_BETWEEN_BATCHES = 2000; - private String name = DEFAULT_NAME; + @NotNull @NotBlank private String host = DEFAULT_HOST; + @Min(1024) + @Max(65535) private int port = DEFAULT_PORT; + @Min(0) private int batchCount = DEFAULT_BATCH_COUNT; + @Min(1) private int batchSize = DEFAULT_BATCH_SIZE; + @Min(0) private long delayBetweenBatches = DEFAULT_DELAY_BETWEEN_BATCHES; private String outFile = null; // @formatter:on @@ -49,108 +61,6 @@ public class EventGeneratorParameters implements ParameterGroup { * Create default parameters. */ public EventGeneratorParameters() { - // Default parameters are generated + super(DEFAULT_NAME); } - - @Override - public String getName() { - return name; - } - - @Override - public void setName(String name) { - this.name = name; - } - - public String getHost() { - return host; - } - - public void setHost(String host) { - this.host = host; - } - - public int getPort() { - return port; - } - - public void setPort(int port) { - this.port = port; - } - - public int getBatchCount() { - return batchCount; - } - - public void setBatchCount(int batchCount) { - this.batchCount = batchCount; - } - - public int getBatchSize() { - return batchSize; - } - - public void setBatchSize(int batchSize) { - this.batchSize = batchSize; - } - - public long getDelayBetweenBatches() { - return delayBetweenBatches; - } - - public void setDelayBetweenBatches(long delayBetweenBatches) { - this.delayBetweenBatches = delayBetweenBatches; - } - - public String getOutFile() { - return outFile; - } - - public void setOutFile(String outFile) { - this.outFile = outFile; - } - - /** - * {@inheritDoc}. - */ - @Override - public GroupValidationResult validate() { - GroupValidationResult validationResult = new GroupValidationResult(this); - - if (isNullOrBlank(name)) { - validationResult.setResult("name", ValidationStatus.INVALID, "name must be a non-blank string"); - } - - if (isNullOrBlank(host)) { - validationResult.setResult("host", ValidationStatus.INVALID, "host must be a non-blank string"); - } - - if (port < 1024 || port > 65535) { - validationResult.setResult("port", ValidationStatus.INVALID, - "port must be an integer between 1024 and 65535 inclusive"); - } - - if (batchCount < 0) { - validationResult.setResult("batchCount", ValidationStatus.INVALID, - "batchCount must be an integer with a value of zero or more, " - + "zero means generate batches forever"); - } - - if (batchSize < 1) { - validationResult.setResult("batchSize", ValidationStatus.INVALID, - "batchSize must be an integer greater than zero"); - } - - if (delayBetweenBatches < 0) { - validationResult.setResult("batchSize", ValidationStatus.INVALID, - "batchSize must be an integer with a value of zero or more"); - } - - return validationResult; - } - - private boolean isNullOrBlank(final String stringValue) { - return stringValue == null || stringValue.trim().length() == 0; - } - } diff --git a/testsuites/performance/performance-benchmark-test/src/test/java/org/onap/policy/apex/testsuites/performance/benchmark/eventgenerator/EventGeneratorParametersHandlerTest.java b/testsuites/performance/performance-benchmark-test/src/test/java/org/onap/policy/apex/testsuites/performance/benchmark/eventgenerator/EventGeneratorParametersHandlerTest.java index 6b15ae454..fd41d81e6 100644 --- a/testsuites/performance/performance-benchmark-test/src/test/java/org/onap/policy/apex/testsuites/performance/benchmark/eventgenerator/EventGeneratorParametersHandlerTest.java +++ b/testsuites/performance/performance-benchmark-test/src/test/java/org/onap/policy/apex/testsuites/performance/benchmark/eventgenerator/EventGeneratorParametersHandlerTest.java @@ -2,6 +2,7 @@ * ============LICENSE_START======================================================= * Copyright (C) 2018 Ericsson. All rights reserved. * Modifications Copyright (C) 2020 Nordix Foundation + * 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. @@ -82,12 +83,8 @@ public class EventGeneratorParametersHandlerTest { assertThatThrownBy(() -> { String[] arguments = new String[] { "-c", "src/test/resources/parameters/unit/Default.json", "-bc", "-1" }; handler.parse(arguments); - }).hasMessage("specified parameters are not valid: parameter group \"EventGeneratorParameters\" " - + "type \"org.onap.policy.apex.testsuites.performance.benchmark.eventgenerator." - + "EventGeneratorParameters\" INVALID, parameter group has status INVALID\n" - + " field \"batchCount\" type \"int\" value \"-1\" INVALID, " - + "batchCount must be an integer with a value of zero or more, " - + "zero means generate batches forever\n"); + }).hasMessageContaining("specified parameters are not valid", "EventGeneratorParameters", + "\"batchCount\" value \"-1\" INVALID, is below the minimum"); args = new String[] { "-c", "src/test/resources/parameters/unit/Default.json", "-bs", "12345" }; parameters = handler.parse(args); assertEquals(12345, parameters.getBatchSize()); @@ -95,11 +92,8 @@ public class EventGeneratorParametersHandlerTest { assertThatThrownBy(() -> { String[] arguments = new String[] { "-c", "src/test/resources/parameters/unit/Default.json", "-bs", "0" }; handler.parse(arguments); - }).hasMessage("specified parameters are not valid: parameter group \"EventGeneratorParameters\" " - + "type \"org.onap.policy.apex.testsuites.performance.benchmark.eventgenerator." - + "EventGeneratorParameters\" INVALID, parameter group has status INVALID\n" - + " field \"batchSize\" type \"int\" value \"0\" INVALID, " - + "batchSize must be an integer greater than zero\n"); + }).hasMessageContaining("specified parameters are not valid", "EventGeneratorParameters", + "\"batchSize\" value \"0\" INVALID, is below the minimum"); args = new String[] { "-c", "src/test/resources/parameters/unit/Default.json", "-bd", "1000" }; parameters = handler.parse(args); assertEquals(1000, parameters.getDelayBetweenBatches()); @@ -107,11 +101,8 @@ public class EventGeneratorParametersHandlerTest { assertThatThrownBy(() -> { String[] arguments = new String[] { "-c", "src/test/resources/parameters/unit/Default.json", "-bd", "-1" }; handler.parse(arguments); - }).hasMessage("specified parameters are not valid: parameter group \"EventGeneratorParameters\" " - + "type \"org.onap.policy.apex.testsuites.performance.benchmark.eventgenerator." - + "EventGeneratorParameters\" INVALID, parameter group has status INVALID\n" - + " field \"batchSize\" type \"int\" value \"1\" INVALID, " - + "batchSize must be an integer with a value of zero or more\n"); + }).hasMessageContaining("specified parameters are not valid", "EventGeneratorParameters", + "\"batchSize\" value \"1\" INVALID, is below the minimum"); args = new String[] { "-c", "src/test/resources/parameters/unit/Default.json", "-o", "Zooby" }; parameters = handler.parse(args); @@ -181,19 +172,13 @@ public class EventGeneratorParametersHandlerTest { assertThatThrownBy(() -> { String[] arguments = new String[] { "-c", "src/test/resources/parameters/unit/NullHost.json" }; handler.parse(arguments); - }).hasMessage("specified parameters are not valid: parameter group \"ValidPars\" " - + "type \"org.onap.policy.apex.testsuites.performance." - + "benchmark.eventgenerator.EventGeneratorParameters\" INVALID, " - + "parameter group has status INVALID\n" + " field \"host\" type \"java.lang.String\" " - + "value \"null\" INVALID, host must be a non-blank string\n"); + }).hasMessageContaining("specified parameters are not valid", "EventGeneratorParameters", + "\"host\" value \"null\" INVALID, is null"); assertThatThrownBy(() -> { String[] arguments = new String[] { "-p", "1023" }; handler.parse(arguments); - }).hasMessage("specified parameters are not valid: parameter group \"" - + "EventGeneratorParameters\" type \"org.onap.policy.apex.testsuites.performance.benchmark." - + "eventgenerator.EventGeneratorParameters\" INVALID, parameter group has status INVALID\n" - + " field \"port\" type \"int\" value \"1023\" INVALID, " - + "port must be an integer between 1024 and 65535 inclusive\n" + ""); + }).hasMessageContaining("specified parameters are not valid", "EventGeneratorParameters", + "\"port\" value \"1023\" INVALID, is below the minimum"); } } |