Fix sonars in xacml-pdp
[policy/xacml-pdp.git] / main / src / main / java / org / onap / policy / pdpx / main / comm / XacmlPdpUpdatePublisher.java
index 686a8ed..7806fea 100644 (file)
@@ -1,6 +1,6 @@
 /*-
  * ============LICENSE_START=======================================================
- * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved.
+ * 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.
@@ -20,6 +20,7 @@
 
 package org.onap.policy.pdpx.main.comm;
 
+import java.util.ArrayList;
 import java.util.Collections;
 import java.util.HashSet;
 import java.util.Set;
@@ -27,6 +28,8 @@ 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;
 import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicy;
+import org.onap.policy.pdp.xacml.application.common.XacmlApplicationException;
+import org.onap.policy.pdp.xacml.application.common.XacmlPolicyUtils;
 import org.onap.policy.pdpx.main.XacmlState;
 import org.onap.policy.pdpx.main.rest.XacmlPdpApplicationManager;
 import org.onap.policy.pdpx.main.rest.XacmlPdpStatisticsManager;
@@ -73,21 +76,32 @@ public class XacmlPdpUpdatePublisher {
             }
         }
 
+        var errorMessage = new StringBuilder();
         // Deploy a policy
         // if deployed policies do not contain the incoming policy load it
         for (ToscaPolicy policy : incomingPolicies) {
             if (!deployedPolicies.contains(policy)) {
-                appManager.loadDeployedPolicy(policy);
+                try {
+                    appManager.loadDeployedPolicy(policy);
+                } catch (XacmlApplicationException e) {
+                    // Failed to load policy, return error(s) to PAP
+                    LOGGER.error("Failed to load policy: {}", policy, e);
+                    errorMessage.append("Failed to load policy: " + policy + ": "
+                            + e.getMessage() + XacmlPolicyUtils.LINE_SEPARATOR);
+                }
             }
         }
+        // Return current deployed policies
+        message.setPolicies(new ArrayList<>(appManager.getToscaPolicies().keySet()));
+        LOGGER.debug("Returning current deployed policies: {} ", message.getPolicies());
 
         // update the policy count statistic
-        XacmlPdpStatisticsManager stats = XacmlPdpStatisticsManager.getCurrent();
+        var stats = XacmlPdpStatisticsManager.getCurrent();
         if (stats != null) {
             stats.setTotalPolicyCount(appManager.getPolicyCount());
         }
 
-        sendPdpUpdate(state.updateInternalState(message));
+        sendPdpUpdate(state.updateInternalState(message, errorMessage.toString()));
     }
 
     private void sendPdpUpdate(PdpStatus status) {