Fix xacml pdp registration issue
[policy/xacml-pdp.git] / main / src / main / java / org / onap / policy / pdpx / main / comm / XacmlPdpUpdatePublisher.java
index 716421c..54d9cf6 100644 (file)
@@ -20,6 +20,8 @@
 
 package org.onap.policy.pdpx.main.comm;
 
+import java.util.HashSet;
+import java.util.Set;
 import org.onap.policy.common.endpoints.event.comm.client.TopicSinkClient;
 import org.onap.policy.models.pdp.concepts.PdpStatus;
 import org.onap.policy.models.pdp.concepts.PdpUpdate;
@@ -42,17 +44,35 @@ public class XacmlPdpUpdatePublisher {
      * @param message Incoming message
      * @param client TopicSinkClient
      */
-    public static void handlePdpUpdate(PdpUpdate message, TopicSinkClient client) {
+    public static void handlePdpUpdate(PdpUpdate message, TopicSinkClient client,
+            XacmlPdpMessage updatePdpMessage) {
 
         if (!message.getPolicies().isEmpty() || message.getPolicies() != null) {
-            // Load the policies on PDP applications
-            for (ToscaPolicy toscaPolicy : message.getPolicies()) {
-                XacmlPdpApplicationManager.loadDeployedPolicy(toscaPolicy);
+
+            Set<ToscaPolicy> incomingPolicies =
+                    new HashSet<>(message.getPolicies());
+            Set<ToscaPolicy> deployedPolicies =
+                    new HashSet<>(XacmlPdpApplicationManager.getToscaPolicies().keySet());
+
+            // Undeploy a policy
+            // if incoming policies do not contain the deployed policy then remove it from PDP
+            for (ToscaPolicy policy : deployedPolicies) {
+                if (!incomingPolicies.contains(policy)) {
+                    XacmlPdpApplicationManager.removeUndeployedPolicy(policy);
+                }
+            }
+
+            // Deploy a policy
+            // if deployed policies do not contain the incoming policy load it
+            for (ToscaPolicy policy : incomingPolicies) {
+                if (!deployedPolicies.contains(policy)) {
+                    XacmlPdpApplicationManager.loadDeployedPolicy(policy);
+                }
             }
         }
 
-        XacmlPdpMessage updatePdpMessage = new XacmlPdpMessage();
-        PdpStatus statusMessage = updatePdpMessage.formatPdpUpdateMessage(message, XacmlPdpHearbeatPublisher.pdpState);
+        updatePdpMessage.updateInternalStatus(message);
+        PdpStatus statusMessage = updatePdpMessage.formatPdpStatusMessage();
         sendPdpUpdate(statusMessage, client);
     }