Add common parameter handling 05/57305/5
authorliamfallon <liam.fallon@ericsson.com>
Tue, 24 Jul 2018 11:38:24 +0000 (12:38 +0100)
committerliamfallon <liam.fallon@ericsson.com>
Wed, 25 Jul 2018 14:58:53 +0000 (15:58 +0100)
This common module is proposed to handle all parameters and properties
for the ONAP Policy Framework in a common way.

Parameters and Properties:
- are validated once when they are loaded and need not be checked again
  in classes that use them
- are available for lookup in a parameter service, they need not be passed
  in constructors and method arguments
- are input using a single implementiation of input method only
  (JSON/YAML/Java properties/REST)
- are defined in a schema and the schema is used for validation as much
  as possible

Issue-ID: POLICY-922
Change-Id: I1fac88b9e952b6b5fcbea04319cb4294a9653327
Signed-off-by: liamfallon <liam.fallon@ericsson.com>
13 files changed:
.gitignore
common-parameters/pom.xml [new file with mode: 0644]
common-parameters/src/main/java/org/onap/policy/common/parameters/AbstractParameters.java [new file with mode: 0644]
common-parameters/src/main/java/org/onap/policy/common/parameters/ParameterException.java [new file with mode: 0644]
common-parameters/src/main/java/org/onap/policy/common/parameters/ParameterRuntimeException.java [new file with mode: 0644]
common-parameters/src/main/java/org/onap/policy/common/parameters/ParameterService.java [new file with mode: 0644]
common-parameters/src/main/java/org/onap/policy/common/parameters/ParameterValidator.java [new file with mode: 0644]
common-parameters/src/main/java/org/onap/policy/common/parameters/package-info.java [new file with mode: 0644]
common-parameters/src/test/java/org/onap/policy/common/parameters/ExceptionTest.java [new file with mode: 0644]
common-parameters/src/test/java/org/onap/policy/common/parameters/LegalParameters.java [new file with mode: 0644]
common-parameters/src/test/java/org/onap/policy/common/parameters/TestAbstractParameters.java [new file with mode: 0644]
common-parameters/src/test/java/org/onap/policy/common/parameters/TestParameterService.java [new file with mode: 0644]
pom.xml

index 6089f3a..ae515bd 100644 (file)
@@ -4,6 +4,7 @@
 .classpath
 .jupiter
 .pydevproject
+.checkstyle
 target
 bin
 .metadata/
diff --git a/common-parameters/pom.xml b/common-parameters/pom.xml
new file mode 100644 (file)
index 0000000..828a084
--- /dev/null
@@ -0,0 +1,40 @@
+<!--
+  ============LICENSE_START=======================================================
+   Copyright (C) 2018 Ericsson. All rights reserved.
+  ================================================================================
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+
+  SPDX-License-Identifier: Apache-2.0
+  ============LICENSE_END=========================================================
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>org.onap.policy.common</groupId>
+        <artifactId>common-modules</artifactId>
+        <version>1.3.0-SNAPSHOT</version>
+    </parent>
+
+    <artifactId>common-parameters</artifactId>
+    <name>${project.artifactId}</name>
+    <description>[${project.parent.artifactId}] module provides common property and parameter handling the ONAP Policy Framework</description>
+
+    <dependencies>
+        <dependency>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
+            <scope>test</scope>
+        </dependency>
+    </dependencies>
+</project>
diff --git a/common-parameters/src/main/java/org/onap/policy/common/parameters/AbstractParameters.java b/common-parameters/src/main/java/org/onap/policy/common/parameters/AbstractParameters.java
new file mode 100644 (file)
index 0000000..5430dfe
--- /dev/null
@@ -0,0 +1,47 @@
+package org.onap.policy.common.parameters;
+/*
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2018 Ericsson. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * 
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+/**
+ * This class defines an abstract parameter interface that acts as a base interface for all parameters in the ONAP
+ * Policy Framework. All parameter POJOs are subclass of the abstract parameter class and can be used with the
+ * {@link ParameterService}.
+ *
+ * @author Liam Fallon (liam.fallon@ericsson.com)
+ */
+public interface AbstractParameters {
+    /**
+     * Gets the parameter class.
+     *
+     * @return the parameter class
+     */
+    default Class<? extends AbstractParameters> getParameterClass() {
+        return this.getClass();
+    }
+
+    /**
+     * Gets the parameter class name.
+     *
+     * @return the parameter class name
+     */
+    default String getParameterClassName() {
+        return this.getClass().getCanonicalName();
+    }
+}
diff --git a/common-parameters/src/main/java/org/onap/policy/common/parameters/ParameterException.java b/common-parameters/src/main/java/org/onap/policy/common/parameters/ParameterException.java
new file mode 100644 (file)
index 0000000..129d539
--- /dev/null
@@ -0,0 +1,112 @@
+/*-
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2018 Ericsson. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.common.parameters;
+
+/**
+ * Exception thrown oon parameter reading, validation, and check errors.
+ *
+ * @author Liam Fallon (liam.fallon@ericsson.com)
+ */
+public class ParameterException extends Exception {
+    private static final long serialVersionUID = -8507246953751956974L;
+
+    // The object on which the exception was thrown
+    private final transient Object object;
+
+    /**
+     * Instantiates a new parameter exception.
+     *
+     * @param message the message on the exception
+     */
+    public ParameterException(final String message) {
+        this(message, null);
+    }
+
+    /**
+     * Instantiates a new parameter exception.
+     *
+     * @param message the message on the exception
+     * @param object the object that the exception was thrown on
+     */
+    public ParameterException(final String message, final Object object) {
+        super(message);
+        this.object = object;
+    }
+
+    /**
+     * Instantiates a new parameter exception.
+     *
+     * @param message the message on the exception
+     * @param e the exception that caused this parameter exception
+     */
+    public ParameterException(final String message, final Exception e) {
+        this(message, e, null);
+    }
+
+    /**
+     * Instantiates a new parameter exception.
+     *
+     * @param message the message on the exception
+     * @param e the exception that caused this parameter exception
+     * @param object the object that the exception was thrown on
+     */
+    public ParameterException(final String message, final Exception e, final Object object) {
+        super(message, e);
+        this.object = object;
+    }
+
+    /**
+     * Get the message from this exception and its causes.
+     *
+     * @return the cascaded messages from this exception and the exceptions that caused it
+     */
+    public String getCascadedMessage() {
+        return buildCascadedMessage(this);
+    }
+
+    /**
+     * Build a cascaded message from an exception and all its nested exceptions
+     * 
+     * @param throwable the top level exception
+     * @return cascaded message string
+     */
+    public static String buildCascadedMessage(Throwable throwable) {
+        final StringBuilder builder = new StringBuilder();
+        builder.append(throwable.getMessage());
+
+        for (Throwable t = throwable; t != null; t = t.getCause()) {
+            builder.append("\ncaused by: ");
+            builder.append(t.getMessage());
+        }
+
+        return builder.toString();
+    }
+
+    /**
+     *
+     * Get the object on which the exception was thrown.
+     *
+     * @return The object on which the exception was thrown
+     */
+    public Object getObject() {
+        return object;
+    }
+}
diff --git a/common-parameters/src/main/java/org/onap/policy/common/parameters/ParameterRuntimeException.java b/common-parameters/src/main/java/org/onap/policy/common/parameters/ParameterRuntimeException.java
new file mode 100644 (file)
index 0000000..4b7d587
--- /dev/null
@@ -0,0 +1,93 @@
+/*-
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2018 Ericsson. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * 
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.common.parameters;
+
+/**
+ * A run time exception thrown on parameter validations.
+ *
+ * @author Liam Fallon (liam.fallon@ericsson.com)
+ */
+public class ParameterRuntimeException extends RuntimeException {
+    private static final long serialVersionUID = -8507246953751956974L;
+
+    // The object on which the exception was thrown
+    private final transient Object object;
+
+    /**
+     * Instantiates a new parameter runtime exception.
+     *
+     * @param message the message on the exception
+     */
+    public ParameterRuntimeException(final String message) {
+        this(message, null);
+    }
+
+    /**
+     * Instantiates a new parameter runtime exception.
+     *
+     * @param message the message on the exception
+     * @param object the object that the exception was thrown on
+     */
+    public ParameterRuntimeException(final String message, final Object object) {
+        super(message);
+        this.object = object;
+    }
+
+    /**
+     * Instantiates a new parameter runtime exception.
+     *
+     * @param message the message on the exception
+     * @param e the exception that caused this parameter exception
+     */
+    public ParameterRuntimeException(final String message, final Exception e) {
+        this(message, e, null);
+    }
+
+    /**
+     * Instantiates a new parameter runtime exception.
+     *
+     * @param message the message on the exception
+     * @param e the exception that caused this parameter exception
+     * @param object the object that the exception was thrown on
+     */
+    public ParameterRuntimeException(final String message, final Exception e, final Object object) {
+        super(message, e);
+        this.object = object;
+    }
+
+    /**
+     * Get the message from this exception and its causes.
+     *
+     * @return the message of this exception and all the exceptions that caused this exception
+     */
+    public String getCascadedMessage() {
+        return ParameterException.buildCascadedMessage(this);
+    }
+
+    /**
+     * Get the object on which the exception was thrown.
+     *
+     * @return The object
+     */
+    public Object getObject() {
+        return object;
+    }
+}
diff --git a/common-parameters/src/main/java/org/onap/policy/common/parameters/ParameterService.java b/common-parameters/src/main/java/org/onap/policy/common/parameters/ParameterService.java
new file mode 100644 (file)
index 0000000..f411937
--- /dev/null
@@ -0,0 +1,114 @@
+package org.onap.policy.common.parameters;
+/*
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2018 Ericsson. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * 
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
+
+/**
+ * The parameter service makes ONAP PF parameters available to all classes in a JVM.
+ *
+ * The reason for having a parameter service is to avoid having to pass parameters down long call chains in modules such
+ * as PDPs and editors. The parameter service makes correct and verified parameters available statically.
+ *
+ * The parameter service must be used with care because changing a parameter set anywhere in a JVM will affect all users
+ * of those parameters anywhere in the JVM.
+ *
+ * @author Liam Fallon (liam.fallon@ericsson.com)
+ */
+public abstract class ParameterService {
+    // The map holding the parameters
+    private static Map<Class<? extends AbstractParameters>, AbstractParameters> parameterMap = new ConcurrentHashMap<>();
+
+    /**
+     * This class is an abstract static class that cannot be extended.
+     */
+    private ParameterService() {
+    }
+
+    /**
+     * Register parameters with the parameter service.
+     *
+     * @param <P> the generic type
+     * @param parametersClass the class of the parameter, used to index the parameter
+     * @param parameters the parameters
+     */
+    public static <P extends AbstractParameters> void registerParameters(final P parameters) {
+        parameterMap.put(parameters.getClass(), parameters);
+    }
+
+    /**
+     * Remove parameters from the parameter service.
+     *
+     * @param <P> the generic type
+     * @param parametersClass the class of the parameter, used to index the parameter
+     */
+    public static <P extends AbstractParameters> void deregisterParameters(final Class<P> parametersClass) {
+        parameterMap.remove(parametersClass);
+    }
+
+    /**
+     * Get parameters from the parameter service.
+     *
+     * @param <P> the generic type
+     * @param parametersClass the class of the parameter, used to index the parameter
+     * @return The parameter
+     */
+    @SuppressWarnings("unchecked")
+    public static <P extends AbstractParameters> P getParameters(final Class<P> parametersClass) {
+        final P parameter = (P) parameterMap.get(parametersClass);
+
+        if (parameter == null) {
+            throw new ParameterRuntimeException(
+                            "Parameters for " + parametersClass.getCanonicalName() + " not found in parameter service");
+        }
+
+        return parameter;
+    }
+
+    /**
+     * Check if parameters is defined on the parameter service.
+     *
+     * @param <P> the generic type
+     * @param parametersClass the class of the parameter, used to index the parameter
+     * @return true if the parameter is defined
+     */
+    public static <P extends AbstractParameters> boolean existsParameters(final Class<P> parametersClass) {
+        return parameterMap.get(parametersClass) != null;
+    }
+
+    /**
+     * Get all the entries in the parameters map.
+     *
+     * @return The entries
+     */
+    public static Set<Entry<Class<? extends AbstractParameters>, AbstractParameters>> getAll() {
+        return parameterMap.entrySet();
+    }
+
+    /**
+     * Clear all parameters in the parameter service.
+     */
+    public static void clear() {
+        parameterMap.clear();
+    }
+}
diff --git a/common-parameters/src/main/java/org/onap/policy/common/parameters/ParameterValidator.java b/common-parameters/src/main/java/org/onap/policy/common/parameters/ParameterValidator.java
new file mode 100644 (file)
index 0000000..0d71826
--- /dev/null
@@ -0,0 +1,36 @@
+/*-
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2018 Ericsson. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * 
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.common.parameters;
+
+/**
+ * This interface is implemented by ONAP PF parameter classes so that they can be validated.
+ *
+ * @author Liam Fallon (liam.fallon@ericsson.com)
+ */
+public interface ParameterValidator {
+    /**
+     * Validate a parameter java bean, if the parameter bean is valid, an empty string is returned,
+     * otherwise the string gives details of the invalid parameters.
+     *
+     * @return the string with validation errors
+     */
+    String validate();
+}
diff --git a/common-parameters/src/main/java/org/onap/policy/common/parameters/package-info.java b/common-parameters/src/main/java/org/onap/policy/common/parameters/package-info.java
new file mode 100644 (file)
index 0000000..7ee1f83
--- /dev/null
@@ -0,0 +1,26 @@
+/*-
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2018 Ericsson. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * 
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+/**
+ * Provides a common parameter service for the ONAP Policy Framework.
+ *
+ * @author Liam Fallon (liam.fallon@ericsson.com)
+ */
+package org.onap.policy.common.parameters;
diff --git a/common-parameters/src/test/java/org/onap/policy/common/parameters/ExceptionTest.java b/common-parameters/src/test/java/org/onap/policy/common/parameters/ExceptionTest.java
new file mode 100644 (file)
index 0000000..510b6e3
--- /dev/null
@@ -0,0 +1,57 @@
+/*
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2018 Ericsson. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * 
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+package org.onap.policy.common.parameters;
+
+import static org.junit.Assert.assertEquals;
+
+import java.io.IOException;
+
+import org.junit.Test;
+
+public class ExceptionTest {
+
+    @Test
+    public void testParameterException() {
+        assertEquals("Parameter Exception", new ParameterException("Parameter Exception").getMessage());
+
+        String exceptionObject = "Exception Object";
+        assertEquals("Exception Object",
+                        new ParameterException("Parameter Exception", exceptionObject).getObject().toString());
+
+        Exception testException = new IOException("IO Exception");
+        assertEquals("Parameter Exception\ncaused by: Parameter Exception\ncaused by: IO Exception",
+                        new ParameterException("Parameter Exception", testException, exceptionObject)
+                                        .getCascadedMessage());
+    }
+
+    @Test
+    public void testParameterRuntimeException() {
+        assertEquals("Parameter Exception", new ParameterRuntimeException("Parameter Exception").getMessage());
+
+        String exceptionObject = "Exception Object";
+        assertEquals("Exception Object",
+                        new ParameterRuntimeException("Parameter Exception", exceptionObject).getObject().toString());
+
+        Exception testException = new IOException("IO Exception");
+        assertEquals("Parameter Exception\ncaused by: Parameter Exception\ncaused by: IO Exception",
+                        new ParameterRuntimeException("Parameter Exception", testException, exceptionObject)
+                                        .getCascadedMessage());
+    }
+}
diff --git a/common-parameters/src/test/java/org/onap/policy/common/parameters/LegalParameters.java b/common-parameters/src/test/java/org/onap/policy/common/parameters/LegalParameters.java
new file mode 100644 (file)
index 0000000..fb1bd47
--- /dev/null
@@ -0,0 +1,31 @@
+/*
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2018 Ericsson. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * 
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.common.parameters;
+
+import org.onap.policy.common.parameters.AbstractParameters;
+
+/**
+ * @author Liam Fallon (liam.fallon@ericsson.com)
+ */
+public class LegalParameters implements AbstractParameters {
+    public LegalParameters() {
+    }
+}
diff --git a/common-parameters/src/test/java/org/onap/policy/common/parameters/TestAbstractParameters.java b/common-parameters/src/test/java/org/onap/policy/common/parameters/TestAbstractParameters.java
new file mode 100644 (file)
index 0000000..f8003cf
--- /dev/null
@@ -0,0 +1,35 @@
+/*-
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2018 Ericsson. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.common.parameters;
+
+import static org.junit.Assert.assertEquals;
+
+import org.junit.Test;
+
+public class TestAbstractParameters {
+
+    @Test
+    public void testAbstractParameters() {
+        final LegalParameters parameters = new LegalParameters();
+        assertEquals(LegalParameters.class, parameters.getParameterClass());
+        assertEquals("org.onap.policy.common.parameters.LegalParameters", parameters.getParameterClassName());
+    }
+}
diff --git a/common-parameters/src/test/java/org/onap/policy/common/parameters/TestParameterService.java b/common-parameters/src/test/java/org/onap/policy/common/parameters/TestParameterService.java
new file mode 100644 (file)
index 0000000..efd3e30
--- /dev/null
@@ -0,0 +1,80 @@
+/*-
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2018 Ericsson. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.common.parameters;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+import org.junit.Test;
+
+public class TestParameterService {
+
+    @Test
+    public void testParameterService() {
+        ParameterService.clear();
+
+        assertFalse(ParameterService.existsParameters(LegalParameters.class));
+        try {
+            ParameterService.getParameters(LegalParameters.class);
+            fail("Test should throw an exception here");
+        } catch (final Exception e) {
+            assertEquals(
+                    "Parameters for org.onap.policy.common.parameters.LegalParameters not found in parameter service",
+                    e.getMessage());
+        }
+
+        ParameterService.registerParameters(new LegalParameters());
+        assertTrue(ParameterService.existsParameters(LegalParameters.class));
+        assertNotNull(ParameterService.getParameters(LegalParameters.class));
+
+        ParameterService.deregisterParameters(LegalParameters.class);
+
+        assertFalse(ParameterService.existsParameters(LegalParameters.class));
+        try {
+            ParameterService.getParameters(LegalParameters.class);
+            fail("Test should throw an exception here");
+        } catch (final Exception e) {
+            assertEquals(
+                    "Parameters for org.onap.policy.common.parameters.LegalParameters not found in parameter service",
+                    e.getMessage());
+        }
+
+        ParameterService.registerParameters(new LegalParameters());
+        assertTrue(ParameterService.existsParameters(LegalParameters.class));
+        assertNotNull(ParameterService.getParameters(LegalParameters.class));
+
+        assertEquals(1, ParameterService.getAll().size());
+        ParameterService.clear();
+        assertEquals(0, ParameterService.getAll().size());
+        assertFalse(ParameterService.existsParameters(LegalParameters.class));
+        try {
+            ParameterService.getParameters(LegalParameters.class);
+            fail("Test should throw an exception here");
+        } catch (final Exception e) {
+            assertEquals(
+                    "Parameters for org.onap.policy.common.parameters.LegalParameters not found in parameter service",
+                    e.getMessage());
+        }
+    }
+}
diff --git a/pom.xml b/pom.xml
index 2fbc957..a4b5c72 100644 (file)
--- a/pom.xml
+++ b/pom.xml
         <!-- Project common dependency versions -->
         <javax.persistence.api.version>1.0.2</javax.persistence.api.version>
         <h2.version>1.4.186</h2.version>
-
     </properties>
 
-
     <modules>
         <module>capabilities</module>
         <module>utils-test</module>
         <module>utils</module>
         <module>common-logging</module>
+        <module>common-parameters</module>
         <module>integrity-audit</module>
         <module>integrity-monitor</module>
         <module>policy-endpoints</module>