Merge "Add common coder classes"
diff --git a/utils/src/main/java/org/onap/policy/common/utils/validation/Assertions.java b/utils/src/main/java/org/onap/policy/common/utils/validation/Assertions.java
new file mode 100644
index 0000000..19a2529
--- /dev/null
+++ b/utils/src/main/java/org/onap/policy/common/utils/validation/Assertions.java
@@ -0,0 +1,190 @@
+/*
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2016-2018 Ericsson. All rights reserved.
+ * Modifications Copyright (C) 2019 Nordix Foundation.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.common.utils.validation;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * The Class Assertions is a static class that is used as a shorthand for assertions in the source code.
+ * It throws runtime exceptions on assertion fails.
+ */
+public final class Assertions {
+ // Logger for this class
+ private static final Logger LOGGER = LoggerFactory.getLogger(Assertions.class);
+
+ /**
+ * Private constructor used to prevent sub class instantiation.
+ */
+ private Assertions() {
+ }
+
+ /**
+ * Gets the validation message for a string parameter.
+ *
+ * @param parameterName the string parameter name
+ * @param parameterValue the string parameter value
+ * @param pattern The regular expression
+ * @return null if the parameter is valid, the validation message otherwise
+ */
+ public static String getStringParameterValidationMessage(final String parameterName, final String parameterValue,
+ final String pattern) {
+ try {
+ validateStringParameter(parameterName, parameterValue, pattern);
+ } catch (IllegalArgumentException e) {
+ String message = "parameter " + parameterName + " with value " + parameterValue
+ + " does not match regular expression " + pattern;
+ if (LOGGER.isTraceEnabled()) {
+ LOGGER.trace(message, e);
+ }
+
+ return message;
+ }
+
+ return null;
+ }
+
+ /**
+ * Checks if a string parameter matches a regular expression.
+ *
+ * @param parameterName the string parameter name
+ * @param parameterValue the string parameter value
+ * @param pattern The regular expression
+ * @return the trimmed string
+ */
+ public static String validateStringParameter(final String parameterName, final String parameterValue,
+ final String pattern) {
+ argumentNotNull(parameterName, "parameter name is null");
+ argumentNotNull(parameterValue, "parameter \"" + parameterName + "\" is null");
+ argumentNotNull(pattern, "parameter pattern is null");
+
+ final String trimmedValue = parameterValue.trim();
+ if (trimmedValue.matches(pattern)) {
+ return trimmedValue;
+ } else {
+ throw new IllegalArgumentException("parameter \"" + parameterName + "\": value \"" + parameterValue
+ + "\", does not match regular expression \"" + pattern + "\"");
+ }
+ }
+
+ /**
+ * Used as a shorthand to check that method arguments are not null, throws IllegalArgumentException on error.
+ *
+ * @param <T> the generic type of the argument to check
+ * @param value the value of the type
+ * @param message the error message to issue
+ */
+ public static <T> void argumentNotNull(final T value, final String message) {
+ if (value == null) {
+ throw new IllegalArgumentException(message);
+ }
+ }
+
+ /**
+ * Used as a shorthand to check that method arguments are not false, throws IllegalArgumentException on error.
+ *
+ * @param value the value to check if false
+ * @param message the error message to issue
+ */
+ public static void argumentNotFalse(final boolean value, final String message) {
+ if (!value) {
+ throw new IllegalArgumentException(message);
+ }
+ }
+
+ /**
+ * Used as a shorthand to check that method arguments are not null, throws an exception of the specified type on
+ * error.
+ *
+ * @param <T> the generic type of the argument to check
+ * @param <E> the exception to throw if incoming value is null
+ * @param value the value of the type
+ * @param exceptionClass the class of exception to return an instance of
+ * @param message the error message to issue
+ * @throws E an instance of the passed Exception Class
+ */
+ public static <T, E extends Exception> void argumentOfClassNotNull(final T value, final Class<E> exceptionClass,
+ final String message) throws E {
+ if (value == null) {
+ // Instantiate the exception and throw it
+ try {
+ throw exceptionClass.getConstructor(String.class).newInstance(message);
+ } catch (final Exception errorException) {
+ throw new IllegalArgumentException(message, errorException);
+ }
+ }
+ }
+
+ /**
+ * Used as a shorthand to check that method argument is not false, throws an exception of the specified type on
+ * error.
+ *
+ * @param <E> the exception to throw if incoming value is false
+ * @param value the value to check if false
+ * @param exceptionClass the class of exception to return an instance of
+ * @param message the error message to issue
+ * @throws E an instance of the passed Exception Class
+ */
+ public static <E extends Exception> void argumentOfClassNotFalse(final boolean value, final Class<E> exceptionClass,
+ final String message) throws E {
+ if (!value) {
+ // Instantiate the exception and throw it
+ try {
+ throw exceptionClass.getConstructor(String.class).newInstance(message);
+ } catch (final Exception errorException) {
+ throw new IllegalArgumentException(message, errorException);
+ }
+ }
+ }
+
+ /**
+ * Used as a shorthand to check that an object is an instance of a given class, throws IllegalArgumentException on
+ * error.
+ *
+ * @param <T> the generic type of the argument to check
+ * @param objectInstance the object instance for which to check the class
+ * @param requiredClass the class that the object should be an instance of
+ * @throws IllegalArgumentException if the incoming object is not an instance of requiredClass
+ */
+ public static <T> void instanceOf(final Object objectInstance, final Class<T> requiredClass) {
+ if (!requiredClass.isAssignableFrom(objectInstance.getClass())) {
+ throw new IllegalArgumentException(objectInstance.getClass().getCanonicalName() + " is not an instance of "
+ + requiredClass.getCanonicalName());
+ }
+ }
+
+ /**
+ * Used as a shorthand to check that an instance of a class can be an instance of a given class, throws
+ * IllegalArgumentException on error.
+ *
+ * @param <T> the generic type of the argument to check
+ * @param checkClass the class to check
+ * @param requiredClass the class that the object should be an instance of
+ * @throws IllegalArgumentException if the incoming object is not an instance of requiredClass
+ */
+ public static <T> void assignableFrom(final Class<?> checkClass, final Class<T> requiredClass) {
+ if (!requiredClass.isAssignableFrom(checkClass)) {
+ throw new IllegalArgumentException(checkClass.getCanonicalName() + " is not an instance of "
+ + requiredClass.getCanonicalName());
+ }
+ }
+}
diff --git a/utils/src/test/java/org/onap/policy/common/utils/validation/AssertionsTest.java b/utils/src/test/java/org/onap/policy/common/utils/validation/AssertionsTest.java
new file mode 100644
index 0000000..e39058b
--- /dev/null
+++ b/utils/src/test/java/org/onap/policy/common/utils/validation/AssertionsTest.java
@@ -0,0 +1,98 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2016-2018 Ericsson. All rights reserved.
+ * Modifications Copyright (C) 2019 Nordix Foundation.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.common.utils.validation;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNull;
+
+import org.junit.Test;
+
+/**
+ * The Class ResourceUtilsTest.
+ *
+ * @author Liam Fallon (liam.fallon@ericsson.com)
+ */
+public class AssertionsTest {
+ @Test
+ public void testAssertions() {
+ Assertions.argumentNotFalse(true, "it is true");
+
+ try {
+ Assertions.argumentNotFalse(false, "it is false");
+ } catch (IllegalArgumentException e) {
+ assertEquals("it is false", e.getMessage());
+ }
+
+ Assertions.argumentOfClassNotFalse(true, ArithmeticException.class, "it is true");
+
+ try {
+ Assertions.argumentOfClassNotFalse(false, ArithmeticException.class, "it is false");
+ } catch (Exception e) {
+ assertEquals("it is false", e.getMessage());
+ }
+
+ Assertions.argumentNotNull("Hello", "it is OK");
+
+ try {
+ Assertions.argumentNotNull(null, "it is null");
+ } catch (IllegalArgumentException e) {
+ assertEquals("it is null", e.getMessage());
+ }
+
+ Assertions.argumentOfClassNotNull(true, ArithmeticException.class, "it is OK");
+
+ try {
+ Assertions.argumentOfClassNotNull(null, ArithmeticException.class, "it is null");
+ } catch (Exception e) {
+ assertEquals("it is null", e.getMessage());
+ }
+
+ Assertions.assignableFrom(java.util.TreeMap.class, java.util.Map.class);
+
+ try {
+ Assertions.assignableFrom(java.util.Map.class, java.util.TreeMap.class);
+ } catch (IllegalArgumentException e) {
+ assertEquals("java.util.Map is not an instance of java.util.TreeMap", e.getMessage());
+ }
+
+ Assertions.instanceOf("Hello", String.class);
+
+ try {
+ Assertions.instanceOf(100, String.class);
+ } catch (IllegalArgumentException e) {
+ assertEquals("java.lang.Integer is not an instance of java.lang.String", e.getMessage());
+ }
+
+ Assertions.validateStringParameter("name", "MyName", "^M.*e$");
+
+ try {
+ Assertions.validateStringParameter("name", "MyName", "^M.*f$");
+ } catch (IllegalArgumentException e) {
+ assertEquals("parameter \"name\": value \"MyName\", does not match regular expression \"^M.*f$\"",
+ e.getMessage());
+ }
+
+ assertNull(Assertions.getStringParameterValidationMessage("Greeting", "Hello", "^H.*o$"));
+ assertEquals("parameter Greeting with value Hello does not match regular expression Goodbye",
+ Assertions.getStringParameterValidationMessage("Greeting", "Hello", "Goodbye"));
+ }
+}