Merge "Add m2 model, including the LCM application"
diff --git a/controlloop/common/controller-usecases/src/main/resources/usecases.drl b/controlloop/common/controller-usecases/src/main/resources/usecases.drl
index 692c743..be009c5 100644
--- a/controlloop/common/controller-usecases/src/main/resources/usecases.drl
+++ b/controlloop/common/controller-usecases/src/main/resources/usecases.drl
@@ -2,7 +2,7 @@
  * ============LICENSE_START=======================================================
  * ONAP
  * ================================================================================
- * Copyright (C) 2018-2019 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2018-2020 AT&T Intellectual Property. All rights reserved.
  * Modifications Copyright (C) 2019 Bell Canada.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -22,7 +22,7 @@
 package org.onap.policy.controlloop;
 
 import org.onap.ccsdk.cds.controllerblueprints.processing.api.ExecutionServiceInput;
-import org.onap.policy.controlloop.params.ControlLoopParams;
+import org.onap.policy.controlloop.drl.legacy.ControlLoopParams;
 import org.onap.policy.controlloop.VirtualControlLoopEvent;
 import org.onap.policy.controlloop.VirtualControlLoopNotification;
 import org.onap.policy.controlloop.ControlLoopEventStatus;
diff --git a/controlloop/common/controller-usecases/src/test/java/org/onap/policy/controlloop/UsecasesBase.java b/controlloop/common/controller-usecases/src/test/java/org/onap/policy/controlloop/UsecasesBase.java
index 4fe354d..1fe6ace 100644
--- a/controlloop/common/controller-usecases/src/test/java/org/onap/policy/controlloop/UsecasesBase.java
+++ b/controlloop/common/controller-usecases/src/test/java/org/onap/policy/controlloop/UsecasesBase.java
@@ -2,7 +2,7 @@
  * ============LICENSE_START=======================================================
  * ONAP
  * ================================================================================
- * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2019-2020 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.
@@ -54,7 +54,7 @@
 import org.onap.policy.common.endpoints.http.server.HttpServletServerFactoryInstance;
 import org.onap.policy.common.utils.coder.CoderException;
 import org.onap.policy.common.utils.coder.StandardCoder;
-import org.onap.policy.controlloop.params.ControlLoopParams;
+import org.onap.policy.controlloop.drl.legacy.ControlLoopParams;
 import org.onap.policy.drools.persistence.SystemPersistence;
 import org.onap.policy.drools.persistence.SystemPersistenceConstants;
 import org.onap.policy.drools.protocol.coders.EventProtocolCoderConstants;
diff --git a/controlloop/common/eventmanager/src/main/java/org/onap/policy/controlloop/drl/legacy/ControlLoopParams.java b/controlloop/common/eventmanager/src/main/java/org/onap/policy/controlloop/drl/legacy/ControlLoopParams.java
new file mode 100644
index 0000000..6e24e26
--- /dev/null
+++ b/controlloop/common/eventmanager/src/main/java/org/onap/policy/controlloop/drl/legacy/ControlLoopParams.java
@@ -0,0 +1,38 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP
+ * ================================================================================
+ * Copyright (C) 2020 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.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.controlloop.drl.legacy;
+
+import java.io.Serializable;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@NoArgsConstructor
+public class ControlLoopParams implements Serializable {
+
+    private static final long serialVersionUID = 970755684770982776L;
+
+    private String closedLoopControlName;
+    private String controlLoopYaml;
+    private String policyName;
+    private String policyScope;
+    private String policyVersion;
+}
diff --git a/controlloop/common/eventmanager/src/main/java/org/onap/policy/controlloop/utils/ControlLoopUtils.java b/controlloop/common/eventmanager/src/main/java/org/onap/policy/controlloop/utils/ControlLoopUtils.java
index 8684a91..cfa4b3d 100644
--- a/controlloop/common/eventmanager/src/main/java/org/onap/policy/controlloop/utils/ControlLoopUtils.java
+++ b/controlloop/common/eventmanager/src/main/java/org/onap/policy/controlloop/utils/ControlLoopUtils.java
@@ -1,6 +1,6 @@
 /*-
  * ============LICENSE_START=======================================================
- * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2019-2020 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,7 +22,7 @@
 import java.net.URLDecoder;
 import org.apache.commons.lang3.StringUtils;
 import org.onap.policy.controlloop.ControlLoopException;
-import org.onap.policy.controlloop.params.ControlLoopParams;
+import org.onap.policy.controlloop.drl.legacy.ControlLoopParams;
 import org.onap.policy.controlloop.processor.ControlLoopProcessor;
 import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicy;
 import org.slf4j.Logger;
diff --git a/controlloop/common/eventmanager/src/test/java/org/onap/policy/controlloop/drl/legacy/ControlLoopParamsTest.java b/controlloop/common/eventmanager/src/test/java/org/onap/policy/controlloop/drl/legacy/ControlLoopParamsTest.java
new file mode 100644
index 0000000..7bb2c5c
--- /dev/null
+++ b/controlloop/common/eventmanager/src/test/java/org/onap/policy/controlloop/drl/legacy/ControlLoopParamsTest.java
@@ -0,0 +1,117 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP
+ * ================================================================================
+ * Copyright (C) 2020 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.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.controlloop.drl.legacy;
+
+import static org.junit.Assert.assertEquals;
+
+import org.junit.Before;
+import org.junit.Test;
+
+public class ControlLoopParamsTest {
+    private static final String CONTROL_LOOP_NAME = "c";
+    private static final String POLICY_NAME = "m";
+    private static final String POLICY_SCOPE = "s";
+    private static final String POLICY_VERSION = "v";
+    private static final String CONTROL_LOOP_YAML = "y";
+
+    private ControlLoopParams  clp = new ControlLoopParams();
+
+    /**
+     * Prepare tests.
+     */
+    @Before
+    public void setUp() {
+        clp.setClosedLoopControlName(CONTROL_LOOP_NAME);
+        clp.setPolicyName(POLICY_NAME);
+        clp.setPolicyScope(POLICY_SCOPE);
+        clp.setPolicyVersion(POLICY_VERSION);
+        clp.setControlLoopYaml(CONTROL_LOOP_YAML);
+    }
+
+    @Test
+    public void getClosedLoopControlName() {
+        assertEquals(CONTROL_LOOP_NAME, clp.getClosedLoopControlName());
+    }
+
+    @Test
+    public void getControlLoopYaml() {
+        assertEquals(CONTROL_LOOP_YAML, clp.getControlLoopYaml());
+    }
+
+    @Test
+    public void getPolicyName() {
+        assertEquals(POLICY_NAME, clp.getPolicyName());
+    }
+
+    @Test
+    public void getPolicyScope() {
+        assertEquals(POLICY_SCOPE, clp.getPolicyScope());
+    }
+
+    @Test
+    public void getPolicyVersion() {
+        assertEquals(POLICY_VERSION, clp.getPolicyVersion());
+    }
+
+    @Test
+    public void setClosedLoopControlName() {
+        clp.setClosedLoopControlName(CONTROL_LOOP_NAME.toUpperCase());
+        assertEquals(CONTROL_LOOP_NAME.toUpperCase(), clp.getClosedLoopControlName());
+    }
+
+    @Test
+    public void setControlLoopYaml() {
+        clp.setControlLoopYaml(CONTROL_LOOP_YAML.toUpperCase());
+        assertEquals(CONTROL_LOOP_YAML.toUpperCase(), clp.getControlLoopYaml());
+    }
+
+    @Test
+    public void setPolicyName() {
+        clp.setPolicyName(POLICY_NAME.toUpperCase());
+        assertEquals(POLICY_NAME.toUpperCase(), clp.getPolicyName());
+    }
+
+    @Test
+    public void setPolicyScope() {
+        clp.setPolicyScope(POLICY_SCOPE.toUpperCase());
+        assertEquals(POLICY_SCOPE.toUpperCase(), clp.getPolicyScope());
+    }
+
+    @Test
+    public void setPolicyVersion() {
+        clp.setPolicyVersion(POLICY_VERSION.toUpperCase());
+        assertEquals(POLICY_VERSION.toUpperCase(), clp.getPolicyVersion());
+    }
+
+    @Test
+    public void testTwo() {
+        ControlLoopParams other = new ControlLoopParams();
+        other.setClosedLoopControlName(CONTROL_LOOP_NAME);
+        other.setPolicyName(POLICY_NAME);
+        other.setPolicyScope(POLICY_SCOPE);
+        other.setPolicyVersion(POLICY_VERSION);
+        other.setControlLoopYaml(CONTROL_LOOP_YAML);
+
+        assertEquals(clp, other);
+        assertEquals(clp.hashCode(), other.hashCode());
+        assertEquals(clp.toString(), other.toString());
+    }
+}
\ No newline at end of file
diff --git a/controlloop/common/eventmanager/src/test/java/org/onap/policy/controlloop/utils/ControlLoopUtilsTest.java b/controlloop/common/eventmanager/src/test/java/org/onap/policy/controlloop/utils/ControlLoopUtilsTest.java
index 47907d9..ad83b77 100644
--- a/controlloop/common/eventmanager/src/test/java/org/onap/policy/controlloop/utils/ControlLoopUtilsTest.java
+++ b/controlloop/common/eventmanager/src/test/java/org/onap/policy/controlloop/utils/ControlLoopUtilsTest.java
@@ -1,6 +1,6 @@
 /*-
  * ============LICENSE_START=======================================================
- * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2019-2020 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.
@@ -27,7 +27,7 @@
 import java.util.Map;
 import org.junit.Test;
 import org.onap.policy.common.utils.coder.StandardCoder;
-import org.onap.policy.controlloop.params.ControlLoopParams;
+import org.onap.policy.controlloop.drl.legacy.ControlLoopParams;
 import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicy;
 
 public class ControlLoopUtilsTest {
diff --git a/controlloop/common/feature-controlloop-management/src/main/java/org/onap/policy/drools/apps/controlloop/feature/management/ControlLoopManagementFeature.java b/controlloop/common/feature-controlloop-management/src/main/java/org/onap/policy/drools/apps/controlloop/feature/management/ControlLoopManagementFeature.java
index ae19b91..b814c6f 100644
--- a/controlloop/common/feature-controlloop-management/src/main/java/org/onap/policy/drools/apps/controlloop/feature/management/ControlLoopManagementFeature.java
+++ b/controlloop/common/feature-controlloop-management/src/main/java/org/onap/policy/drools/apps/controlloop/feature/management/ControlLoopManagementFeature.java
@@ -2,7 +2,7 @@
  * ============LICENSE_START=======================================================
  * ONAP
  * ================================================================================
- * Copyright (C) 2018-2019 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2018-2020 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,7 +21,7 @@
 package org.onap.policy.drools.apps.controlloop.feature.management;
 
 import java.util.stream.Stream;
-import org.onap.policy.controlloop.params.ControlLoopParams;
+import org.onap.policy.controlloop.drl.legacy.ControlLoopParams;
 import org.onap.policy.drools.features.PolicyEngineFeatureApi;
 import org.onap.policy.drools.system.PolicyController;
 import org.onap.policy.drools.system.PolicyControllerConstants;
diff --git a/controlloop/common/feature-controlloop-management/src/main/java/org/onap/policy/drools/server/restful/RestControlLoopManager.java b/controlloop/common/feature-controlloop-management/src/main/java/org/onap/policy/drools/server/restful/RestControlLoopManager.java
index 563cac0..ff53d52 100644
--- a/controlloop/common/feature-controlloop-management/src/main/java/org/onap/policy/drools/server/restful/RestControlLoopManager.java
+++ b/controlloop/common/feature-controlloop-management/src/main/java/org/onap/policy/drools/server/restful/RestControlLoopManager.java
@@ -2,7 +2,7 @@
  * ============LICENSE_START=======================================================
  * ONAP
  * ================================================================================
- * Copyright (C) 2018-2019 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2018-2020 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.
@@ -42,8 +42,8 @@
 import javax.ws.rs.core.Response.Status;
 import org.onap.policy.aai.AaiManager;
 import org.onap.policy.controlloop.ControlLoopException;
+import org.onap.policy.controlloop.drl.legacy.ControlLoopParams;
 import org.onap.policy.controlloop.eventmanager.ControlLoopEventManager;
-import org.onap.policy.controlloop.params.ControlLoopParams;
 import org.onap.policy.controlloop.processor.ControlLoopProcessor;
 import org.onap.policy.drools.apps.controlloop.feature.management.ControlLoopManagementFeature;
 import org.onap.policy.drools.controller.DroolsController;
diff --git a/controlloop/common/feature-controlloop-management/src/test/resources/op.drl b/controlloop/common/feature-controlloop-management/src/test/resources/op.drl
index 48ed099..ca0b751 100644
--- a/controlloop/common/feature-controlloop-management/src/test/resources/op.drl
+++ b/controlloop/common/feature-controlloop-management/src/test/resources/op.drl
@@ -2,7 +2,7 @@
  * ============LICENSE_START=======================================================
  * ONAP
  * ================================================================================
- * Copyright (C) 2018 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2018-2020 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,7 +20,7 @@
 
 package org.onap.policy.drools.apps.controlloop.feature.management;
 
-import org.onap.policy.controlloop.params.ControlLoopParams;
+import org.onap.policy.controlloop.drl.legacy.ControlLoopParams;
 
 rule "PARAMS"
 when
diff --git a/controlloop/packages/docker-controlloop/pom.xml b/controlloop/packages/docker-controlloop/pom.xml
index f709585..a4c893a 100644
--- a/controlloop/packages/docker-controlloop/pom.xml
+++ b/controlloop/packages/docker-controlloop/pom.xml
@@ -3,7 +3,7 @@
   ONAP
   ================================================================================
   Copyright (C) 2019 AT&T Intellectual Property. All rights reserved.
-  Modifications Copyright (C) 2019 Bell Canada.
+  Modifications Copyright (C) 2019-2020 Bell Canada.
   ================================================================================
   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
@@ -80,6 +80,32 @@
                     </execution>
                 </executions>
             </plugin>
+            <!--fabric8.io docker-maven-plugin does not support ARG usage in the FROM statement of Dockerfile
+             even though docker supports it: https://github.com/fabric8io/docker-maven-plugin/issues/859.
+             As a workaround we shall use maven-antrun-plugin to copy the Dockerfile and apply filters to
+             replace the parameterized base-image version. The fabric8.io docker-maven-plugin shall use this filtered file
+             to build the image. After the image is built we perform a cleanup to remove the filtered file.-->
+            <plugin>
+                <artifactId>maven-antrun-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <id>update-parameterized-dockerfile</id>
+                        <phase>initialize</phase>
+                        <goals>
+                            <goal>run</goal>
+                        </goals>
+                        <configuration>
+                            <tasks>
+                                <copy file="src/main/docker/Dockerfile" toFile="${project.build.directory}/docker-tmp/Dockerfile">
+                                    <filterset>
+                                        <filter token="version.policy.drools-pdp" value="${version.policy.drools-pdp}"/>
+                                    </filterset>
+                                </copy>
+                            </tasks>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
             <plugin>
                 <groupId>io.fabric8</groupId>
                 <artifactId>docker-maven-plugin</artifactId>
@@ -93,6 +119,7 @@
                             <name>onap/policy-pdpd-cl</name>
                             <build>
                                 <cleanup>try</cleanup>
+                                <contextDir>${project.build.directory}/docker-tmp</contextDir>
                                 <dockerFile>Dockerfile</dockerFile>
                                 <tags>
                                     <tag>${project.version}</tag>
diff --git a/controlloop/packages/docker-controlloop/src/main/docker/Dockerfile b/controlloop/packages/docker-controlloop/src/main/docker/Dockerfile
index 14e8c74..98bf35a 100644
--- a/controlloop/packages/docker-controlloop/src/main/docker/Dockerfile
+++ b/controlloop/packages/docker-controlloop/src/main/docker/Dockerfile
@@ -1,4 +1,4 @@
-FROM onap/policy-drools:1.6-SNAPSHOT-latest
+FROM onap/policy-drools:@version.policy.drools-pdp@
 
 ARG BUILD_VERSION_APP_CL=${BUILD_VERSION_APP_CL}
 ENV BUILD_VERSION_APP_CL=${BUILD_VERSION_APP_CL}
diff --git a/controlloop/packages/docker-controlloop/src/main/resources/docker-entrypoint.sh b/controlloop/packages/docker-controlloop/src/main/resources/docker-entrypoint.sh
index c48cf64..a1d689a 100644
--- a/controlloop/packages/docker-controlloop/src/main/resources/docker-entrypoint.sh
+++ b/controlloop/packages/docker-controlloop/src/main/resources/docker-entrypoint.sh
@@ -1,7 +1,7 @@
 #!/bin/bash
 
 # ########################################################################
-# Copyright 2019 AT&T Intellectual Property. All rights reserved
+# Copyright 2019-2020 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,7 +38,7 @@
     fi
 }
 
-function configurations {
+function systemConfs {
     if [[ ${DEBUG} == y ]]; then
         echo "-- ${FUNCNAME[0]} --"
         set -x
@@ -51,7 +51,7 @@
     fi
 
     for c in $(ls "${POLICY_INSTALL_INIT}"/*.conf 2> /dev/null); do
-        echo "adding configuration file: ${c}"
+        echo "adding system conf file: ${c}"
         cp -f "${c}" "${POLICY_HOME}"/etc/profile.d/
         confName="$(basename "${c}")"
         sed -i -e "s/ *= */=/" -e "s/=\([^\"\']*$\)/='\1'/" "${POLICY_HOME}/etc/profile.d/${confName}"
@@ -126,18 +126,20 @@
     fi
 }
 
-function properties {
+function serverConfig {
     if [[ ${DEBUG} == y ]]; then
         echo "-- ${FUNCNAME[0]} --"
         set -x
     fi
 
-    if ! ls "${POLICY_INSTALL_INIT}"/*.properties > /dev/null 2>&1; then
+    local configExtSuffix=${1:-"properties"}
+
+    if ! ls "${POLICY_INSTALL_INIT}"/*."${configExtSuffix}" > /dev/null 2>&1; then
         return 0
     fi
 
-    for p in $(ls "${POLICY_INSTALL_INIT}"/*.properties 2> /dev/null); do
-        echo "configuration properties: ${p}"
+    for p in $(ls "${POLICY_INSTALL_INIT}"/*."${configExtSuffix}" 2> /dev/null); do
+        echo "configuration ${configExtSuffix}: ${p}"
         cp -f "${p}" "${POLICY_HOME}"/config
     done
 }
@@ -225,11 +227,13 @@
         set -x
     fi
 
-    configurations
+    systemConfs
     maven
     features
     security
-    properties
+    serverConfig "properties"
+    serverConfig "xml"
+    serverConfig "json"
     scripts "pre.sh"
 }
 
diff --git a/controlloop/templates/template.demo/src/test/java/org/onap/policy/template/demo/ControlLoopParamsCleanupTest.java b/controlloop/templates/template.demo/src/test/java/org/onap/policy/template/demo/ControlLoopParamsCleanupTest.java
index 947e50c..ae12d04 100644
--- a/controlloop/templates/template.demo/src/test/java/org/onap/policy/template/demo/ControlLoopParamsCleanupTest.java
+++ b/controlloop/templates/template.demo/src/test/java/org/onap/policy/template/demo/ControlLoopParamsCleanupTest.java
@@ -1,8 +1,8 @@
 /*-
  * ============LICENSE_START=======================================================
- * demo
+ * ONAP
  * ================================================================================
- * Copyright (C) 2018 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2018-2020 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.
diff --git a/pom.xml b/pom.xml
index a70c244..b669efb 100644
--- a/pom.xml
+++ b/pom.xml
@@ -2,7 +2,7 @@
   ============LICENSE_START=======================================================
   drools-pdp-apps
   ================================================================================
-  Copyright (C) 2017-2019 AT&T Intellectual Property. All rights reserved.
+  Copyright (C) 2017-2020 AT&T Intellectual Property. All rights reserved.
   Modifications Copyright (C) 2019 Nordix Foundation.
   ================================================================================
   Licensed under the Apache License, Version 2.0 (the "License");
@@ -60,7 +60,7 @@
 
         <!-- Project common dependency versions -->
         <version.policy.common>1.6.1</version.policy.common>
-        <policy.models.version>2.2.0-SNAPSHOT</policy.models.version>
+        <policy.models.version>2.2.0</policy.models.version>
         <version.policy.drools-pdp>1.6.0-SNAPSHOT</version.policy.drools-pdp>
     </properties>