Java 17 Upgrade
[policy/models.git] / models-sim / policy-models-sim-pdp / src / main / java / org / onap / policy / models / sim / pdp / handler / PdpUpdateMessageHandler.java
index 4f33d07..60f7c14 100644 (file)
@@ -1,7 +1,7 @@
 /*-
  * ============LICENSE_START=======================================================
- *  Copyright (C) 2019 Nordix Foundation.
- *  Modifications Copyright (C) 2019 AT&T Intellectual Property. All rights reserved.
+ *  Copyright (C) 2019-2021 Nordix Foundation.
+ *  Modifications Copyright (C) 2019, 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,7 +21,9 @@
 
 package org.onap.policy.models.sim.pdp.handler;
 
+import java.util.ArrayList;
 import java.util.List;
+import java.util.stream.Collectors;
 import org.onap.policy.common.endpoints.event.comm.TopicSink;
 import org.onap.policy.common.utils.services.Registry;
 import org.onap.policy.models.pdp.concepts.PdpResponseDetails;
@@ -31,6 +33,7 @@ import org.onap.policy.models.pdp.enums.PdpResponseStatus;
 import org.onap.policy.models.pdp.enums.PdpState;
 import org.onap.policy.models.sim.pdp.PdpSimulatorConstants;
 import org.onap.policy.models.sim.pdp.comm.PdpStatusPublisher;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicy;
 
 /**
  * This class supports the handling of pdp update messages.
@@ -45,14 +48,15 @@ public class PdpUpdateMessageHandler {
      * @param pdpUpdateMsg pdp update message
      */
     public void handlePdpUpdateEvent(final PdpUpdate pdpUpdateMsg) {
-        final PdpMessageHandler pdpMessageHandler = new PdpMessageHandler();
-        final PdpStatus pdpStatusContext = Registry.get(PdpSimulatorConstants.REG_PDP_STATUS_OBJECT, PdpStatus.class);
+        final var pdpMessageHandler = new PdpMessageHandler();
+        final var pdpStatusContext = Registry.get(PdpSimulatorConstants.REG_PDP_STATUS_OBJECT, PdpStatus.class);
         PdpResponseDetails pdpResponseDetails = null;
         if (pdpUpdateMsg.appliesTo(pdpStatusContext.getName(), pdpStatusContext.getPdpGroup(),
-                pdpStatusContext.getPdpSubgroup())) {
-            final PdpStatusPublisher pdpStatusPublisher = Registry.get(PdpSimulatorConstants.REG_PDP_STATUS_PUBLISHER);
+                        pdpStatusContext.getPdpSubgroup())) {
+            final var pdpStatusPublisher =
+                            Registry.get(PdpSimulatorConstants.REG_PDP_STATUS_PUBLISHER, PdpStatusPublisher.class);
             if (checkIfAlreadyHandled(pdpUpdateMsg, pdpStatusContext)) {
-                pdpResponseDetails = pdpMessageHandler.createPdpResonseDetails(pdpUpdateMsg.getRequestId(),
+                pdpResponseDetails = pdpMessageHandler.createPdpResponseDetails(pdpUpdateMsg.getRequestId(),
                         PdpResponseStatus.SUCCESS, "Pdp already updated");
             } else {
                 if (null != pdpUpdateMsg.getPdpHeartbeatIntervalMs() && pdpUpdateMsg.getPdpHeartbeatIntervalMs() > 0
@@ -61,21 +65,27 @@ public class PdpUpdateMessageHandler {
                 }
                 pdpStatusContext.setPdpGroup(pdpUpdateMsg.getPdpGroup());
                 pdpStatusContext.setPdpSubgroup(pdpUpdateMsg.getPdpSubgroup());
-                pdpStatusContext
-                        .setPolicies(new PdpMessageHandler().getToscaPolicyIdentifiers(pdpUpdateMsg.getPolicies()));
-                if (pdpStatusContext.getState().equals(PdpState.ACTIVE) && !pdpUpdateMsg.getPolicies().isEmpty()) {
-                    pdpResponseDetails = pdpMessageHandler.createPdpResonseDetails(pdpUpdateMsg.getRequestId(),
+                @SuppressWarnings("unchecked")
+                List<ToscaPolicy> policies = Registry.getOrDefault(PdpSimulatorConstants.REG_PDP_TOSCA_POLICY_LIST,
+                        List.class, new ArrayList<>());
+                policies.addAll(pdpUpdateMsg.getPoliciesToBeDeployed());
+                policies.removeIf(policy -> pdpUpdateMsg.getPoliciesToBeUndeployed().contains(policy.getIdentifier()));
+                pdpStatusContext.setPolicies(policies.stream().map(ToscaPolicy::getIdentifier)
+                        .collect(Collectors.toList()));
+                if (pdpStatusContext.getState().equals(PdpState.ACTIVE)
+                        && !pdpUpdateMsg.getPoliciesToBeDeployed().isEmpty()) {
+                    pdpResponseDetails = pdpMessageHandler.createPdpResponseDetails(pdpUpdateMsg.getRequestId(),
                             PdpResponseStatus.SUCCESS, "Pdp engine started and policies are running.");
                 }
-                Registry.registerOrReplace(PdpSimulatorConstants.REG_PDP_TOSCA_POLICY_LIST, pdpUpdateMsg.getPolicies());
+                Registry.registerOrReplace(PdpSimulatorConstants.REG_PDP_TOSCA_POLICY_LIST, policies);
                 if (null == pdpResponseDetails) {
-                    pdpResponseDetails = pdpMessageHandler.createPdpResonseDetails(pdpUpdateMsg.getRequestId(),
+                    pdpResponseDetails = pdpMessageHandler.createPdpResponseDetails(pdpUpdateMsg.getRequestId(),
                             PdpResponseStatus.SUCCESS, "Pdp update successful.");
                 }
             }
-            final PdpStatusPublisher pdpStatusPublisherTemp =
-                    Registry.get(PdpSimulatorConstants.REG_PDP_STATUS_PUBLISHER);
-            final PdpStatus pdpStatus = pdpMessageHandler.createPdpStatusFromContext();
+            final var pdpStatusPublisherTemp =
+                    Registry.get(PdpSimulatorConstants.REG_PDP_STATUS_PUBLISHER, PdpStatusPublisher.class);
+            final var pdpStatus = pdpMessageHandler.createPdpStatusFromContext();
             pdpStatus.setResponse(pdpResponseDetails);
             pdpStatus.setDescription("Pdp status response message for PdpUpdate");
             pdpStatusPublisherTemp.send(pdpStatus);
@@ -91,12 +101,20 @@ public class PdpUpdateMessageHandler {
      * @return boolean flag which tells if the information is same or not
      */
     private boolean checkIfAlreadyHandled(final PdpUpdate pdpUpdateMsg, final PdpStatus pdpStatusContext) {
-        return null != pdpStatusContext.getPdpGroup()
-                && pdpStatusContext.getPdpGroup().equals(pdpUpdateMsg.getPdpGroup())
-                && null != pdpStatusContext.getPdpSubgroup()
-                && pdpStatusContext.getPdpSubgroup().equals(pdpUpdateMsg.getPdpSubgroup())
-                && null != pdpStatusContext.getPolicies() && new PdpMessageHandler()
-                        .getToscaPolicyIdentifiers(pdpUpdateMsg.getPolicies()).equals(pdpStatusContext.getPolicies());
+        if (pdpStatusContext.getPdpGroup() == null
+                || !pdpStatusContext.getPdpGroup().equals(pdpUpdateMsg.getPdpGroup())) {
+            return false;
+        }
+
+        if (pdpStatusContext.getPdpSubgroup() == null
+                || !pdpStatusContext.getPdpSubgroup().equals(pdpUpdateMsg.getPdpSubgroup())) {
+            return false;
+        }
+
+        return null != pdpStatusContext.getPolicies() && (pdpStatusContext.getPolicies()
+                .containsAll(new PdpMessageHandler().getToscaPolicyIdentifiers(
+                        pdpUpdateMsg.getPoliciesToBeDeployed()))) && pdpStatusContext.getPolicies()
+                .stream().noneMatch(pdpUpdateMsg.getPoliciesToBeUndeployed()::contains);
     }
 
     /**
@@ -105,7 +123,8 @@ public class PdpUpdateMessageHandler {
      * @param interval time interval received in the pdp update message from pap
      */
     public void updateInterval(final long interval) {
-        final PdpStatusPublisher pdpStatusPublisher = Registry.get(PdpSimulatorConstants.REG_PDP_STATUS_PUBLISHER);
+        final var pdpStatusPublisher =
+                        Registry.get(PdpSimulatorConstants.REG_PDP_STATUS_PUBLISHER, PdpStatusPublisher.class);
         pdpStatusPublisher.terminate();
         final List<TopicSink> topicSinks = Registry.get(PdpSimulatorConstants.REG_PDP_TOPIC_SINKS);
         Registry.registerOrReplace(PdpSimulatorConstants.REG_PDP_STATUS_PUBLISHER,