Merge "Enhancement to use the common CryptoUtils"
authorJorge Hernandez <jorge.hernandez-herrero@att.com>
Wed, 3 Apr 2019 02:01:34 +0000 (02:01 +0000)
committerGerrit Code Review <gerrit@onap.org>
Wed, 3 Apr 2019 02:01:34 +0000 (02:01 +0000)
24 files changed:
ONAP-PAP-REST/src/main/java/org/onap/policy/pap/xacml/rest/handler/APIRequestHandler.java
ONAP-PAP-REST/src/main/java/org/onap/policy/pap/xacml/rest/handler/DeleteHandler.java
ONAP-PAP-REST/src/main/java/org/onap/policy/pap/xacml/rest/model/RemoveGroupPolicy.java
ONAP-PAP-REST/src/test/java/org/onap/policy/pap/xacml/rest/handler/DeleteHandlerTest.java
ONAP-PAP-REST/src/test/java/org/onap/policy/pap/xacml/rest/model/RemoveGroupPolicyTest.java
ONAP-PDP-REST/src/main/java/org/onap/policy/pdp/rest/api/services/DeletePolicyService.java
ONAP-PDP-REST/src/main/java/org/onap/policy/pdp/rest/api/services/PdpApiService.java [new file with mode: 0644]
ONAP-PDP-REST/src/main/java/org/onap/policy/pdp/rest/api/services/PushPolicyService.java
ONAP-PDP-REST/src/test/java/org/onap/policy/pdp/rest/api/test/PolicyEngineServicesTest.java
PolicyEngineAPI/pom.xml
PolicyEngineAPI/src/main/java/org/onap/policy/api/PolicyNameType.java [new file with mode: 0644]
docs/platform/PolicyEngineApiList.png
docs/platform/api-docs.json
docs/platform/ctrlog_config.png [new file with mode: 0755]
docs/platform/ctrlog_enablefeature.png [new file with mode: 0755]
docs/platform/ctrlog_logback.png [new file with mode: 0755]
docs/platform/ctrlog_view.png [new file with mode: 0755]
docs/platform/feature_controllerlogging.rst [new file with mode: 0644]
docs/platform/feature_mdcfilters.rst [new file with mode: 0644]
docs/platform/index.rst
docs/platform/mdc_enablefeature.png [new file with mode: 0755]
docs/platform/mdc_properties.png [new file with mode: 0755]
docs/platform/offeredapis.rst
docs/platform/swarch_pdp.rst

index 40cb8aa..5bea62d 100644 (file)
@@ -2,7 +2,7 @@
  * ============LICENSE_START=======================================================
  * ONAP-PAP-REST
  * ================================================================================
- * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017-2019 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.
  * limitations under the License.
  * ============LICENSE_END=========================================================
  */
+
 package org.onap.policy.pap.xacml.rest.handler;
 
 import java.io.IOException;
-import java.sql.SQLException;
-
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
-
 import org.onap.policy.common.logging.ONAPLoggingContext;
 import org.onap.policy.pap.xacml.rest.service.ImportService;
 import org.onap.policy.pap.xacml.rest.service.MetricService;
@@ -34,6 +32,14 @@ public class APIRequestHandler {
 
     private OnapPDPGroup newGroup;
 
+    /**
+     * Do get.
+     *
+     * @param request the request
+     * @param response the response
+     * @param apiflag the apiflag
+     * @throws IOException Signals that an I/O exception has occurred.
+     */
     public void doGet(HttpServletRequest request, HttpServletResponse response, String apiflag) throws IOException {
         // Request from the API to get Dictionary Items
         if ("api".equalsIgnoreCase(apiflag)) {
@@ -58,9 +64,17 @@ public class APIRequestHandler {
         }
     }
 
+    /**
+     * Do put.
+     *
+     * @param request the request
+     * @param response the response
+     * @param service the service
+     * @throws IOException Signals that an I/O exception has occurred.
+     */
     public void doPut(HttpServletRequest request, HttpServletResponse response, String service) throws IOException {
-        if ("MICROSERVICE".equalsIgnoreCase(service) || "BRMSPARAM".equalsIgnoreCase(service) ||
-                "OPTIMIZATION".equalsIgnoreCase(service)) {
+        if ("MICROSERVICE".equalsIgnoreCase(service) || "BRMSPARAM".equalsIgnoreCase(service)
+                || "OPTIMIZATION".equalsIgnoreCase(service)) {
             ImportService importService = new ImportService();
             importService.doImportMicroServicePut(request, response);
             return;
@@ -74,13 +88,22 @@ public class APIRequestHandler {
         }
     }
 
+    /**
+     * Do delete.
+     *
+     * @param request the request
+     * @param response the response
+     * @param loggingContext the logging context
+     * @param apiflag the apiflag
+     * @throws IOException Signals that an I/O exception has occurred.
+     */
     public void doDelete(HttpServletRequest request, HttpServletResponse response, ONAPLoggingContext loggingContext,
-                         String apiflag) throws IOException, SQLException {
+            String apiflag) throws IOException {
         DeleteHandler deleteHandler = DeleteHandler.getInstance();
         if ("deletePapApi".equalsIgnoreCase(apiflag)) {
-            deleteHandler.doAPIDeleteFromPAP(request, response);
+            deleteHandler.doApiDeleteFromPap(request, response);
         } else if ("deletePdpApi".equalsIgnoreCase(apiflag)) {
-            deleteHandler.doAPIDeleteFromPDP(request, response, loggingContext);
+            deleteHandler.doApiDeleteFromPdp(request, response, loggingContext);
             setNewGroup(deleteHandler.getDeletedGroup());
         }
     }
index ca0bb77..4e78742 100644 (file)
@@ -17,6 +17,7 @@
  * limitations under the License.
  * ============LICENSE_END=========================================================
  */
+
 package org.onap.policy.pap.xacml.rest.handler;
 
 import com.att.research.xacml.api.pap.PAPException;
@@ -24,11 +25,12 @@ import com.att.research.xacml.api.pap.PDPPolicy;
 import com.att.research.xacml.util.XACMLProperties;
 import java.io.File;
 import java.io.IOException;
-import java.sql.SQLException;
+import java.util.Arrays;
 import java.util.List;
 import javax.script.SimpleBindings;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
+import org.apache.commons.lang3.StringUtils;
 import org.onap.policy.common.logging.ONAPLoggingContext;
 import org.onap.policy.common.logging.eelf.MessageCodes;
 import org.onap.policy.common.logging.eelf.PolicyLogger;
@@ -66,14 +68,26 @@ public class DeleteHandler {
     }
 
     private OnapPDPGroup newgroup;
-    private static Logger logger = FlexLogger.getLogger(DeleteHandler.class);
-    public static final String POLICY_IN_PDP = "PolicyInPDP";
-    public static final String ERROR = "error";
-    public static final String UNKNOWN = "unknown";
+    private static final Logger LOGGER = FlexLogger.getLogger(DeleteHandler.class);
+    private static final String POLICY_IN_PDP = "PolicyInPDP";
+    private static final String ERROR = "error";
+    private static final String MESSAGE = "message";
+    private static final String UNKNOWN = "unknown";
+    private static final String SUCCESS = "success";
+    private static final String OPERATION = "operation";
+    private static final String CONFIG = "Config_";
     private static final String REGEX = "[0-9a-zA-Z._]*";
+    private static final String DELETE = "delete";
+    private static final String ACTION = "Action_";
 
-    public void doAPIDeleteFromPAP(HttpServletRequest request, HttpServletResponse response)
-            throws IOException, SQLException {
+    /**
+     * Do API delete from PAP.
+     *
+     * @param request the request
+     * @param response the response
+     * @throws IOException Signals that an I/O exception has occurred.
+     */
+    public void doApiDeleteFromPap(HttpServletRequest request, HttpServletResponse response) throws IOException {
         // get the request content into a String
         String json = null;
         java.util.Scanner scanner = new java.util.Scanner(request.getInputStream());
@@ -85,7 +99,7 @@ public class DeleteHandler {
         StdPAPPolicy policy = PolicyUtils.jsonStringToObject(json, StdPAPPolicy.class);
         String policyName = policy.getPolicyName();
         boolean policyVersionDeleted = false;
-        String removeXMLExtension;
+        String removeXmlExtension;
         int currentVersion;
         String removeVersionExtension;
         String splitPolicyName = null;
@@ -97,16 +111,16 @@ public class DeleteHandler {
         try {
             jpaUtils = JPAUtils.getJPAUtilsInstance();
         } catch (Exception e) {
-            PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "XACMLPapServlet",
+            PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "doAPIDeleteFromPAP",
                     " Could not create JPAUtils instance on the PAP");
             response.addHeader(ERROR, "jpautils");
-            response.addHeader("operation", "delete");
+            response.addHeader(OPERATION, DELETE);
             response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
             return;
         }
         if (jpaUtils.dbLockdownIgnoreErrors()) {
             PolicyLogger.warn("Policies are locked down");
-            response.addHeader("operation", "delete");
+            response.addHeader(OPERATION, DELETE);
             response.addHeader("lockdown", "true");
             response.setStatus(HttpServletResponse.SC_ACCEPTED);
             return;
@@ -114,15 +128,15 @@ public class DeleteHandler {
         String policyEntityQuery = null;
         try {
             if (policyName.endsWith(".xml")) {
-                removeXMLExtension = policyName.replace(".xml", "");
+                removeXmlExtension = policyName.replace(".xml", "");
                 currentVersion =
-                        Integer.parseInt(removeXMLExtension.substring(removeXMLExtension.lastIndexOf('.') + 1));
-                removeVersionExtension = removeXMLExtension.substring(0, removeXMLExtension.lastIndexOf('.'));
+                        Integer.parseInt(removeXmlExtension.substring(removeXmlExtension.lastIndexOf('.') + 1));
+                removeVersionExtension = removeXmlExtension.substring(0, removeXmlExtension.lastIndexOf('.'));
                 boolean queryCheck = true;
-                if (policy.getDeleteCondition().equalsIgnoreCase("All Versions")) {
-                    if (policyName.contains("Config_")) {
+                if ("All Versions".equalsIgnoreCase(policy.getDeleteCondition())) {
+                    if (policyName.contains(CONFIG)) {
                         splitPolicyName = removeVersionExtension.replace(".Config_", ":Config_");
-                    } else if (policyName.contains("Action_")) {
+                    } else if (policyName.contains(ACTION)) {
                         splitPolicyName = removeVersionExtension.replace(".Action_", ":Action_");
                     } else if (policyName.contains("Decision_")) {
                         splitPolicyName = removeVersionExtension.replace(".Decision_", ":Decision_");
@@ -130,18 +144,18 @@ public class DeleteHandler {
                     if (splitPolicyName != null) {
                         split = splitPolicyName.split(":");
                     } else {
-                        PolicyLogger.error(MessageCodes.ERROR_UNKNOWN +
-                                "Failed to delete the policy. Please, provide the valid policyname.");
+                        PolicyLogger.error(MessageCodes.ERROR_UNKNOWN
+                                "Failed to delete the policy. Please, provide the valid policyname.");
                         response.addHeader(ERROR, UNKNOWN);
                         response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
                         return;
                     }
                     policyEntityQuery =
                             "SELECT p FROM PolicyEntity p WHERE p.policyName LIKE :pName and p.scope=:pScope";
-                } else if (policy.getDeleteCondition().equalsIgnoreCase("Current Version")) {
-                    if (policyName.contains("Config_")) {
+                } else if ("Current Version".equalsIgnoreCase(policy.getDeleteCondition())) {
+                    if (policyName.contains(CONFIG)) {
                         splitPolicyName = policyName.replace(".Config_", ":Config_");
-                    } else if (policyName.contains("Action_")) {
+                    } else if (policyName.contains(ACTION)) {
                         splitPolicyName = policyName.replace(".Action_", ":Action_");
                     } else if (policyName.contains("Decision_")) {
                         splitPolicyName = policyName.replace(".Decision_", ":Decision_");
@@ -164,9 +178,9 @@ public class DeleteHandler {
                     SimpleBindings pvParams = new SimpleBindings();
                     pvParams.put("pname", removeVersionExtension.replace(".", File.separator));
                     List<?> pvResult = commonClassDao.getDataByQuery(getPolicyVersion, pvParams);
-                    PolicyVersion pVersion = (PolicyVersion) pvResult.get(0);
+                    PolicyVersion polVersion = (PolicyVersion) pvResult.get(0);
                     int newVersion = 0;
-                    if (policy.getDeleteCondition().equalsIgnoreCase("All Versions")) {
+                    if ("All Versions".equalsIgnoreCase(policy.getDeleteCondition())) {
                         boolean groupCheck = checkPolicyGroupEntity(peResult);
                         if (!groupCheck) {
                             for (Object peData : peResult) {
@@ -178,28 +192,28 @@ public class DeleteHandler {
                         }
                         switch (status) {
                             case ERROR:
-                                PolicyLogger.error(MessageCodes.ERROR_DATA_ISSUE +
-                                        "Exception Occured while deleting the Entity from Database.");
+                                PolicyLogger.error(MessageCodes.ERROR_DATA_ISSUE
+                                        "Exception Occured while deleting the Entity from Database.");
                                 response.addHeader(ERROR, UNKNOWN);
                                 response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
                                 return;
                             case POLICY_IN_PDP:
-                                PolicyLogger.error(MessageCodes.GENERAL_WARNING +
-                                        "Policy can't be deleted, it is active in PDP Groups.");
+                                PolicyLogger.error(MessageCodes.GENERAL_WARNING
+                                        "Policy can't be deleted, it is active in PDP Groups.");
                                 response.addHeader(ERROR, POLICY_IN_PDP);
                                 response.setStatus(HttpServletResponse.SC_CONFLICT);
                                 return;
                             default:
                                 try {
                                     policyVersionDeleted = true;
-                                    commonClassDao.delete(pVersion);
+                                    commonClassDao.delete(polVersion);
                                 } catch (Exception e) {
-                                    logger.error(e.getMessage(), e);
+                                    LOGGER.error(e.getMessage(), e);
                                     policyVersionDeleted = false;
                                 }
                                 break;
                         }
-                    } else if (policy.getDeleteCondition().equalsIgnoreCase("Current Version")) {
+                    } else if ("Current Version".equalsIgnoreCase(policy.getDeleteCondition())) {
                         boolean groupCheck = checkPolicyGroupEntity(peResult);
                         if (!groupCheck) {
                             policyEntity = (PolicyEntity) peResult.get(0);
@@ -209,14 +223,14 @@ public class DeleteHandler {
                         }
 
                         if (ERROR.equals(status)) {
-                            PolicyLogger.error(MessageCodes.ERROR_DATA_ISSUE +
-                                    "Exception Occured while deleting the Entity from Database.");
+                            PolicyLogger.error(MessageCodes.ERROR_DATA_ISSUE
+                                    "Exception Occured while deleting the Entity from Database.");
                             response.addHeader(ERROR, UNKNOWN);
                             response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
                             return;
                         } else if (POLICY_IN_PDP.equals(status)) {
-                            PolicyLogger.error(MessageCodes.GENERAL_WARNING +
-                                    "Policy can't be deleted, it is active in PDP Groups.");
+                            PolicyLogger.error(MessageCodes.GENERAL_WARNING
+                                    "Policy can't be deleted, it is active in PDP Groups.");
                             response.addHeader(ERROR, POLICY_IN_PDP);
                             response.setStatus(HttpServletResponse.SC_CONFLICT);
                             return;
@@ -233,30 +247,30 @@ public class DeleteHandler {
                                         }
                                     }
                                 }
-                                pVersion.setActiveVersion(newVersion);
-                                pVersion.setHigherVersion(newVersion);
+                                polVersion.setActiveVersion(newVersion);
+                                polVersion.setHigherVersion(newVersion);
                                 try {
                                     policyVersionDeleted = true;
-                                    commonClassDao.save(pVersion);
+                                    commonClassDao.save(polVersion);
                                 } catch (Exception e) {
-                                    logger.error(e.getMessage(), e);
+                                    LOGGER.error(e.getMessage(), e);
                                     policyVersionDeleted = false;
                                 }
                             } else {
                                 try {
                                     policyVersionDeleted = true;
-                                    commonClassDao.delete(pVersion);
+                                    commonClassDao.delete(polVersion);
                                 } catch (Exception e) {
-                                    logger.error(e.getMessage(), e);
+                                    LOGGER.error(e.getMessage(), e);
                                     policyVersionDeleted = false;
                                 }
                             }
                         }
                     }
                 } else {
-                    PolicyLogger.error(MessageCodes.ERROR_UNKNOWN +
-                            "Failed to delete the policy for an unknown reason.  Check the file system and other logs" +
-                            " for further information.");
+                    PolicyLogger.error(MessageCodes.ERROR_UNKNOWN
+                            + "Failed to delete the policy for an unknown reason.  Check the file system and other logs"
+                            " for further information.");
                     response.addHeader(ERROR, UNKNOWN);
                     response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
                     return;
@@ -271,25 +285,31 @@ public class DeleteHandler {
 
         if (policyVersionDeleted) {
             response.setStatus(HttpServletResponse.SC_OK);
-            response.addHeader("successMapKey", "success");
-            response.addHeader("operation", "delete");
+            response.addHeader("successMapKey", SUCCESS);
+            response.addHeader(OPERATION, DELETE);
         } else {
-            PolicyLogger.error(MessageCodes.ERROR_UNKNOWN +
-                    "Failed to delete the policy for an unknown reason.  Check the file system and other logs for " +
-                    "further information.");
+            PolicyLogger.error(MessageCodes.ERROR_UNKNOWN
+                    + "Failed to delete the policy for an unknown reason.  Check the file system and other logs for "
+                    "further information.");
             response.addHeader(ERROR, UNKNOWN);
             response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
         }
     }
 
+    /**
+     * Delete policy entity data.
+     *
+     * @param policyEntity the policy entity
+     * @return the string
+     */
     public static String deletePolicyEntityData(PolicyEntity policyEntity) {
         PolicyElasticSearchController controller = new PolicyElasticSearchController();
         PolicyRestAdapter policyData = new PolicyRestAdapter();
         String policyName = policyEntity.getPolicyName();
         try {
-            if (policyName.contains("Config_") || policyName.contains("Decision_MS_")) {
+            if (policyName.contains("CONFIG") || policyName.contains("Decision_MS_")) {
                 commonClassDao.delete(policyEntity.getConfigurationData());
-            } else if (policyName.contains("Action_")) {
+            } else if (policyName.contains(ACTION)) {
                 commonClassDao.delete(policyEntity.getActionBodyEntity());
             }
             String searchPolicyName = policyEntity.getScope() + "." + policyEntity.getPolicyName();
@@ -297,12 +317,18 @@ public class DeleteHandler {
             controller.deleteElk(policyData);
             commonClassDao.delete(policyEntity);
         } catch (Exception e) {
-            logger.error(e.getMessage(), e);
+            LOGGER.error(e.getMessage(), e);
             return ERROR;
         }
-        return "success";
+        return SUCCESS;
     }
 
+    /**
+     * Check policy group entity.
+     *
+     * @param peResult the pe result
+     * @return true, if successful
+     */
     public static boolean checkPolicyGroupEntity(List<?> peResult) {
         String groupEntityquery = "from PolicyGroupEntity where policyid = :policyEntityId";
         for (Object peData : peResult) {
@@ -317,107 +343,112 @@ public class DeleteHandler {
         return false;
     }
 
-    public void doAPIDeleteFromPDP(HttpServletRequest request, HttpServletResponse response,
-                                   ONAPLoggingContext loggingContext) throws IOException {
-
-        String policyName = request.getParameter("policyName");
+    /**
+     * Do API delete from PDP.
+     *
+     * @param request the request
+     * @param response the response
+     * @param loggingContext the logging context
+     * @throws IOException Signals that an I/O exception has occurred.
+     */
+    public void doApiDeleteFromPdp(HttpServletRequest request, HttpServletResponse response,
+            ONAPLoggingContext loggingContext) throws IOException {
         String groupId = request.getParameter("groupId");
-        String responseString = null;
 
         if (groupId != null && !groupId.matches(REGEX)) {
             response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
-            response.addHeader("error", ERROR);
-            response.addHeader("message", "Group Id is not valid");
+            response.addHeader(ERROR, ERROR);
+            response.addHeader(MESSAGE, "Group Id is not valid");
             return;
         }
+        String requestId = request.getHeader("X-ECOMP-RequestID");
+        String polName = request.getParameter("policyName");
+        LOGGER.info("JSON request from API to Delete Policy from the PDP - " + polName + " -RequestId - " + requestId);
 
-        PolicyLogger.info("JSON request from API to Delete Policy from the PDP: " + policyName);
-
-        // for PUT operations the group may or may not need to exist before the operation can be done
+        // for PUT operations the group may or may not need to exist before the operation can be
+        // done
         OnapPDPGroup group = null;
         try {
             group = XACMLPapServlet.getPAPEngine().getGroup(groupId);
         } catch (PAPException e) {
-            PolicyLogger.error("Exception occured While PUT operation is performing for PDP Group" + e);
+            LOGGER.error("Exception occured While PUT operation is performing for PDP Group" + " -  RequestId - "
+                    + requestId + e);
         }
         if (group == null) {
             String message = "Unknown groupId '" + groupId + "'.";
-            PolicyLogger.error(MessageCodes.ERROR_DATA_ISSUE + " " + message);
+            LOGGER.error(MessageCodes.ERROR_DATA_ISSUE + " - RequestId -  " + requestId + " - " + message);
             loggingContext.transactionEnded();
             PolicyLogger.audit("Transaction Failed - See Error.log");
             response.addHeader(ERROR, "UnknownGroup");
-            response.addHeader("message", message);
+            response.addHeader(MESSAGE, message);
             response.setStatus(HttpServletResponse.SC_NOT_FOUND);
             return;
-        } else {
-            loggingContext.setServiceName("API:PAP.deletPolicyFromPDPGroup");
-            if (policyName.contains("xml")) {
-                PolicyLogger
-                        .debug("The full file name including the extension was provided for policyName.. continue.");
-            } else {
+        }
+        loggingContext.setServiceName("API:PAP.deletPolicyFromPDPGroup");
+        RemoveGroupPolicy removePolicy = new RemoveGroupPolicy((StdPDPGroup) group);
+        removePolicy.prepareToRemove();
+        List<String> policyIdList = Arrays.asList(polName.split(","));
+        for (String policyName : policyIdList) {
+            if (!policyName.endsWith("xml")) {
                 String message = XACMLErrorConstants.ERROR_DATA_ISSUE + "Invalid policyName... "
                         + "policyName must be the full name of the file to be deleted including version and extension";
-                PolicyLogger.error(MessageCodes.ERROR_DATA_ISSUE + " Invalid policyName... "
-                        + "policyName must be the full name of the file to be deleted including version and extension");
+                LOGGER.error(message + "   - RequestId - " + requestId);
                 response.addHeader(ERROR, message);
                 response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
                 return;
             }
-            RemoveGroupPolicy removePolicy = new RemoveGroupPolicy((StdPDPGroup) group);
             PDPPolicy policy = group.getPolicy(policyName);
-            if (policy != null) {
-
-                if ((policy.getId().contains("Config_MS_")) || (policy.getId().contains("BRMS_Param"))) {
-                    if (preSafetyCheck(policy)) {
-                        PolicyLogger.debug("Precheck Successful.");
-                    }
-                }
-                PolicyLogger.info("Preparing to remove policy from group: " + group.getId());
-                removePolicy.prepareToRemove(policy);
-                OnapPDPGroup updatedGroup = removePolicy.getUpdatedObject();
-                responseString = deletePolicyFromPDPGroup(updatedGroup, loggingContext);
-            } else {
-                String message = XACMLErrorConstants.ERROR_DATA_ISSUE + "Policy does not exist on the PDP.";
-                PolicyLogger.error(message);
-                PolicyLogger.error(MessageCodes.ERROR_DATA_ISSUE + " Policy does not exist on the PDP.");
+            if (policy == null) {
+                String message =
+                        XACMLErrorConstants.ERROR_DATA_ISSUE + "Policy does not exist on the PDP - " + policyName;
+                LOGGER.error(message + " - RequestId   - " + requestId);
                 response.addHeader(ERROR, message);
                 response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
                 return;
             }
+            if (StringUtils.indexOfAny(policy.getId(), "Config_MS_", "BRMS_Param") >= 0) {
+                preSafetyCheck(policy);
+            }
+            LOGGER.info("Preparing to remove policy from group: " + group.getId() + "- RequestId - " + requestId);
+            removePolicy.removePolicy(policy);
         }
+        OnapPDPGroup updatedGroup = removePolicy.getUpdatedObject();
+        String userId = request.getParameter("userId");
+        String responseString = deletePolicyFromPdpGroup(updatedGroup, loggingContext, userId);
+
         switch (responseString) {
-            case "success":
+            case SUCCESS:
                 loggingContext.transactionEnded();
-                PolicyLogger.info("Policy successfully deleted!");
+                LOGGER.info("Policy successfully removed from PDP - " + polName + " -   RequestId - " + requestId);
                 PolicyLogger.audit("Policy successfully deleted!");
                 response.setStatus(HttpServletResponse.SC_OK);
-                response.addHeader("successMapKey", "success");
-                response.addHeader("operation", "delete");
+                response.addHeader("successMapKey", SUCCESS);
+                response.addHeader(OPERATION, DELETE);
                 break;
             case "No Group":
                 String message = XACMLErrorConstants.ERROR_DATA_ISSUE + "Group update had bad input.";
-                PolicyLogger.error(MessageCodes.ERROR_DATA_ISSUE + " Group update had bad input.");
+                LOGGER.error(message + " - RequestId - " + requestId);
                 response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
                 response.addHeader(ERROR, "groupUpdate");
-                response.addHeader("message", message);
+                response.addHeader(MESSAGE, message);
                 break;
             case "DB Error":
-                PolicyLogger.error(MessageCodes.ERROR_PROCESS_FLOW + " Error while updating group in the database");
+                LOGGER.error(MessageCodes.ERROR_PROCESS_FLOW + " Error while updating group in the database"
+                        + " - RequestId - " + requestId);
                 response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
                 response.addHeader(ERROR, "deleteDB");
                 break;
             default:
-                PolicyLogger.error(MessageCodes.ERROR_UNKNOWN +
-                        " Failed to delete the policy for an unknown reason.  Check the file system and other logs " +
-                        "for " +
-                        "further information.");
+                LOGGER.error(MessageCodes.ERROR_UNKNOWN
+                        + " Failed to delete the policy for an unknown reason.  Check the file system and other logs "
+                        + "for " + "further information.");
                 response.addHeader(ERROR, UNKNOWN);
                 response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
                 break;
         }
     }
 
-    private String deletePolicyFromPDPGroup(OnapPDPGroup group, ONAPLoggingContext loggingContext) {
+    private String deletePolicyFromPdpGroup(OnapPDPGroup group, ONAPLoggingContext loggingContext, String userId) {
         PolicyDBDaoTransaction acPutTransaction = XACMLPapServlet.getDbDaoTransaction();
         String response = null;
         loggingContext.setServiceName("API:PAP.DeleteHandler");
@@ -427,14 +458,14 @@ public class DeleteHandler {
         } catch (PAPException e1) {
             PolicyLogger.error("Exception occured While Deleting Policy From PDP Group" + e1);
         }
-        if (!(group instanceof StdPDPGroup) || existingGroup == null ||
-                !(group.getId().equals(existingGroup.getId()))) {
-            String existingID = null;
+        if (!(group instanceof StdPDPGroup) || existingGroup == null
+                || !(group.getId().equals(existingGroup.getId()))) {
+            String existingId = null;
             if (existingGroup != null) {
-                existingID = existingGroup.getId();
+                existingId = existingGroup.getId();
             }
-            PolicyLogger.error(MessageCodes.ERROR_DATA_ISSUE + " Group update had bad input. id=" + existingID +
-                    " objectFromJSON=" + group);
+            PolicyLogger.error(MessageCodes.ERROR_DATA_ISSUE + " Group update had bad input. id=" + existingId
+                    " objectFromJSON=" + group);
             loggingContext.transactionEnded();
             PolicyLogger.audit("Transaction Failed - See Error.log");
             response = "No Group";
@@ -445,11 +476,10 @@ public class DeleteHandler {
         // so we need to fill that in before submitting the group for update
         ((StdPDPGroup) group).setDirectory(((StdPDPGroup) existingGroup).getDirectory());
         try {
-            acPutTransaction.updateGroup(group, "XACMLPapServlet.doDelete", null);
+            acPutTransaction.updateGroup(group, "XACMLPapServlet.doDelete", userId);
         } catch (Exception e) {
             PolicyLogger.error(MessageCodes.ERROR_PROCESS_FLOW, e, "XACMLPapServlet",
-                    " Error while updating group in the database: "
-                            + "group=" + existingGroup.getId());
+                    " Error while updating group in the database: " + "group=" + existingGroup.getId());
             response = "DB Error";
             return response;
         }
@@ -469,7 +499,7 @@ public class DeleteHandler {
             response = "error in groupChanged method";
         }
         if (response == null) {
-            response = "success";
+            response = SUCCESS;
             loggingContext.transactionEnded();
             PolicyLogger.audit("Policy successfully deleted!");
         }
@@ -486,13 +516,18 @@ public class DeleteHandler {
         return true;
     }
 
+    /**
+     * Gets the single instance of DeleteHandler.
+     *
+     * @return single instance of DeleteHandler
+     */
     public static DeleteHandler getInstance() {
         try {
-            Class<?> deleteHandler = Class.forName(
-                    XACMLProperties.getProperty("deletePolicy.impl.className", DeleteHandler.class.getName()));
+            Class<?> deleteHandler = Class
+                    .forName(XACMLProperties.getProperty("deletePolicy.impl.className", DeleteHandler.class.getName()));
             return (DeleteHandler) deleteHandler.newInstance();
         } catch (Exception e) {
-            logger.error(e.getMessage(), e);
+            LOGGER.error(e.getMessage(), e);
         }
         return null;
     }
index 2d98b82..42c815a 100644 (file)
@@ -2,14 +2,14 @@
  * ============LICENSE_START=======================================================
  * ONAP-PAP-REST
  * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017-2019 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.
 
 package org.onap.policy.pap.xacml.rest.model;
 
+import com.att.research.xacml.api.pap.PDPPolicy;
 import java.util.Collection;
 import java.util.HashSet;
 import java.util.Set;
-
 import org.onap.policy.rest.util.PDPPolicyContainer;
 import org.onap.policy.xacml.api.pap.OnapPDPGroup;
 import org.onap.policy.xacml.std.pap.StdPDPGroup;
 
-import com.att.research.xacml.api.pap.PDPPolicy;
-
 public class RemoveGroupPolicy {
 
-
-    //Container from where we are fetching the policies
+    // Container from where we are fetching the policies
     private static PDPPolicyContainer policyContainer;
 
-    private RemoveGroupPolicy self = this;
     private StdPDPGroup updatedObject;
     private final StdPDPGroup group;
     private boolean isSaved = false;
 
+    /**
+     * Instantiates a new removes the group policy.
+     *
+     * @param group the group
+     */
     public RemoveGroupPolicy(StdPDPGroup group) {
 
         this.group = group;
 
     }
 
-    public void prepareToRemove(PDPPolicy policy) {
-
+    /**
+     * Prepare to remove.
+     */
+    public void prepareToRemove() {
         if (this.group == null) {
             return;
         }
         setRemoveGroupPolicy(new PDPPolicyContainer(group));
+    }
 
+    /**
+     * Removes the policy.
+     *
+     * @param policy the policy
+     */
+    public void removePolicy(PDPPolicy policy) {
         RemoveGroupPolicy.policyContainer.removeItem(policy);
-
-        self.doSave();
-
-        self.isSaved = true;
-
+        this.doSave();
+        this.isSaved = true;
     }
 
     private static void setRemoveGroupPolicy(PDPPolicyContainer pdpPolicyContainer) {
@@ -72,14 +79,11 @@ public class RemoveGroupPolicy {
             return;
         }
 
-        StdPDPGroup updatedGroupObject = new StdPDPGroup(
-                group.getId(),
-                group.isDefaultGroup(),
-                group.getName(),
-                group.getDescription(),
-                null);
+        StdPDPGroup updatedGroupObject =
+                new StdPDPGroup(group.getId(), group.isDefaultGroup(), group.getName(), group.getDescription(), null);
 
-        // replace the original set of Policies with the set from the container (possibly modified by the user)
+        // replace the original set of Policies with the set from the container (possibly modified
+        // by the user)
         Set<PDPPolicy> changedPolicies = new HashSet<>();
         changedPolicies.addAll((Collection<PDPPolicy>) RemoveGroupPolicy.policyContainer.getItemIds());
         updatedGroupObject.setPolicies(changedPolicies);
@@ -102,4 +106,13 @@ public class RemoveGroupPolicy {
         return this.updatedObject;
     }
 
+    /**
+     * Gets the group.
+     *
+     * @return the group
+     */
+    public StdPDPGroup getGroup() {
+        return group;
+    }
+
 }
index e7ab36e..7354003 100644 (file)
@@ -96,7 +96,7 @@ public class DeleteHandlerTest {
                // Test deletion from PAP
                MockHttpServletResponse response = new MockHttpServletResponse();
                try {
-                       handler.doAPIDeleteFromPAP(request, response);
+                       handler.doApiDeleteFromPap(request, response);
                } catch (Exception ex) {
                        fail("Not expecting an exception: " + ex);
                }
@@ -104,7 +104,7 @@ public class DeleteHandlerTest {
         // Test deletion from PDP
         ONAPLoggingContext loggingContext = Mockito.mock(ONAPLoggingContext.class);
         try {
-            handler.doAPIDeleteFromPDP(request, response, loggingContext);
+            handler.doApiDeleteFromPdp(request, response, loggingContext);
         }
         catch (Exception ex) {
             fail("Not expecting an exception: " + ex);
index 162f4a9..cd6bf02 100644 (file)
@@ -2,14 +2,14 @@
  * ============LICENSE_START=======================================================
  * ONAP-PDP-REST
  * ================================================================================
- * Copyright (C) 2018 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2018-2019 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.
 package org.onap.policy.pap.xacml.rest.model;
 
 import static org.junit.Assert.assertEquals;
+import com.att.research.xacml.api.pap.PDPPolicy;
 import org.junit.Test;
 import org.onap.policy.xacml.std.pap.StdPDPGroup;
 import org.onap.policy.xacml.std.pap.StdPDPPolicy;
-import com.att.research.xacml.api.pap.PDPPolicy;
 
 public class RemoveGroupPolicyTest {
     @Test
@@ -37,8 +37,8 @@ public class RemoveGroupPolicyTest {
 
         // Test remove
         PDPPolicy policy = new StdPDPPolicy();
-        remove.prepareToRemove(policy);
-        remove.doSave();
+        remove.prepareToRemove();
+        remove.removePolicy(policy);
         assertEquals(remove.isRemoved(), true);
     }
 }
index 52e3bcc..ff0ac82 100644 (file)
@@ -2,15 +2,15 @@
  * ============LICENSE_START=======================================================
  * ONAP-PDP-REST
  * ================================================================================
- * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017-2019 AT&T Intellectual Property. All rights reserved.
  * Modifications Copyright (C) 2018 Samsung Electronics Co., Ltd.
  * ================================================================================
  * 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.
  * limitations under the License.
  * ============LICENSE_END=========================================================
  */
-package org.onap.policy.pdp.rest.api.services;
 
-import java.io.File;
-import java.util.UUID;
+package org.onap.policy.pdp.rest.api.services;
 
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.stream.Collectors;
+import org.apache.commons.lang3.StringUtils;
 import org.onap.policy.api.DeletePolicyParameters;
 import org.onap.policy.api.PolicyException;
+import org.onap.policy.api.PolicyNameType;
 import org.onap.policy.common.logging.flexlogger.FlexLogger;
 import org.onap.policy.common.logging.flexlogger.Logger;
 import org.onap.policy.xacml.api.XACMLErrorConstants;
@@ -32,68 +36,70 @@ import org.onap.policy.xacml.std.pap.StdPAPPolicy;
 import org.onap.policy.xacml.std.pap.StdPAPPolicyParams;
 import org.springframework.http.HttpStatus;
 
-public class DeletePolicyService {
-    private static final Logger LOGGER = FlexLogger.getLogger(DeletePolicyService.class.getName());
 
-    private String deleteResult = null;
-    private HttpStatus status = HttpStatus.BAD_REQUEST;
+/**
+ * The Class DeletePolicyService.
+ */
+public class DeletePolicyService extends PdpApiService {
+
+    private static final Logger LOGGER = FlexLogger.getLogger(DeletePolicyService.class.getName());
+    private static final String PRINT_REQUESTID = " - RequestId - ";
     private DeletePolicyParameters deletePolicyParameters = null;
-    private String message = null;
-    private String filePrefix = null;
-    private String clientScope = null;
-    private String policyType = null;
-    private String policyName = null;
-    private String policyScope = null;
+    private String result = null;
+    private List<PolicyNameType> policyList = new ArrayList<>();
 
-    public DeletePolicyService(final DeletePolicyParameters deletePolicyParameters, final String requestID) {
+
+    /**
+     * Instantiates a new delete policy service.
+     *
+     * @param deletePolicyParameters the delete policy parameters
+     * @param reqId the request id
+     */
+    public DeletePolicyService(final DeletePolicyParameters deletePolicyParameters, final String reqId) {
+        super();
         this.deletePolicyParameters = deletePolicyParameters;
-        if (deletePolicyParameters.getRequestID() == null) {
-            UUID requestUUID = null;
-            if (requestID != null && !requestID.isEmpty()) {
-                try {
-                    requestUUID = UUID.fromString(requestID);
-                } catch (final IllegalArgumentException e) {
-                    requestUUID = UUID.randomUUID();
-                    LOGGER.info("Generated Random UUID: " + requestUUID.toString(), e);
-                }
-            } else {
-                requestUUID = UUID.randomUUID();
-                LOGGER.info("Generated Random UUID: " + requestUUID.toString());
-            }
-            this.deletePolicyParameters.setRequestID(requestUUID);
-        }
+        deletePolicyParameters.setRequestID(populateRequestId(deletePolicyParameters.getRequestID(), reqId));
         try {
             run();
             specialCheck();
         } catch (final PolicyException e) {
-            LOGGER.error("Unable to process delete policy request for : " + this.deletePolicyParameters);
-            deleteResult = XACMLErrorConstants.ERROR_DATA_ISSUE + e;
+            LOGGER.error("Unable to process delete policy request for : " + this.deletePolicyParameters
+                    + PRINT_REQUESTID + this.requestId);
+            result = XACMLErrorConstants.ERROR_DATA_ISSUE + e;
             status = HttpStatus.BAD_REQUEST;
         }
     }
 
+    /**
+     * Special check.
+     */
     private void specialCheck() {
-        if (deleteResult == null) {
+        if (result == null) {
             return;
         }
-        if (deleteResult.contains("BAD REQUEST") || deleteResult.contains("PE300") || deleteResult.contains("PE200")
-                || deleteResult.contains("not exist") || deleteResult.contains("Invalid policyName")) {
-            if (deleteResult.contains("groupId")) {
+        if (result.contains("BAD REQUEST") || result.contains("PE300") || result.contains("PE200")
+                || result.contains("not exist") || result.contains("Invalid policyName")) {
+            if (result.contains("groupId")) {
                 status = HttpStatus.NOT_FOUND;
             } else {
                 status = HttpStatus.BAD_REQUEST;
             }
-        } else if (deleteResult.contains("locked down")) {
+        } else if (result.contains("locked down")) {
             status = HttpStatus.ACCEPTED;
-        } else if (deleteResult.contains("not Authorized")) {
+        } else if (result.contains("not Authorized")) {
             status = HttpStatus.FORBIDDEN;
-        } else if (deleteResult.contains("JPAUtils") || deleteResult.contains("database")
-                || deleteResult.contains("policy file") || deleteResult.contains("unknown")
-                || deleteResult.contains("configuration")) {
+        } else if (result.contains("JPAUtils") || result.contains("database")
+                || result.contains("policy file") || result.contains("unknown")
+                || result.contains("configuration")) {
             status = HttpStatus.INTERNAL_SERVER_ERROR;
         }
     }
 
+    /**
+     * Run.
+     *
+     * @throws PolicyException the policy exception
+     */
     private void run() throws PolicyException {
         // Check Validation.
         if (!getValidation()) {
@@ -102,9 +108,10 @@ public class DeletePolicyService {
         }
         // Get Result.
         try {
-            LOGGER.debug("Processing delete request:  " + deletePolicyParameters.toString());
+            LOGGER.debug("Processing delete request:  " + deletePolicyParameters.toString() + PRINT_REQUESTID
+                    + this.requestId);
             status = HttpStatus.OK;
-            deleteResult = processResult();
+            result = processResult();
         } catch (final Exception e) {
             LOGGER.error(XACMLErrorConstants.ERROR_DATA_ISSUE + e);
             status = HttpStatus.BAD_REQUEST;
@@ -112,175 +119,161 @@ public class DeletePolicyService {
         }
     }
 
+    /**
+     * Process result.
+     *
+     * @return the string
+     * @throws PolicyException the policy exception
+     */
     private String processResult() throws PolicyException {
         String response = null;
-        String fullPolicyName = null;
         String pdpGroup = deletePolicyParameters.getPdpGroup();
-        // PDP Group Check.
-        if (pdpGroup == null) {
-            pdpGroup = "NA";
-        }
-        final PAPServices papServices = new PAPServices();
-        if (!deletePolicyParameters.getPolicyName().contains("xml")) {
-
-            final String activeVersion = papServices.getActiveVersion(policyScope, filePrefix, policyName, clientScope,
-                    deletePolicyParameters.getRequestID());
-            LOGGER.debug("The active version of " + policyScope + File.separator + filePrefix + policyName + " is "
-                    + activeVersion);
-            String id = null;
-            if ("pe100".equalsIgnoreCase(activeVersion)) {
-                response = XACMLErrorConstants.ERROR_PERMISSIONS
-                        + "response code of the URL is 403. PEP is not Authorized for making this Request!! "
-                        + "Contact Administrator for this Scope. ";
-                LOGGER.error(response);
-                return response;
-            } else if ("pe300".equalsIgnoreCase(activeVersion)) {
-                response = XACMLErrorConstants.ERROR_DATA_ISSUE + "response code of the URL is 404.  "
-                        + "This indicates a problem with getting the version from the PAP or the policy does not exist.";
-                LOGGER.error(response);
-                return response;
-            }
-            if (!"0".equalsIgnoreCase(activeVersion)) {
-                id = policyScope + "." + filePrefix + policyName + "." + activeVersion + ".xml";
-                LOGGER.debug("The policyId is " + id);
-            } else {
-                response = XACMLErrorConstants.ERROR_DATA_ISSUE
-                        + "could not retrieve the activeVersion for this policy. could not retrieve the activeVersion for this policy.  "
-                        + "This indicates the policy does not exist, please verify the policy exists.";
-                LOGGER.error(response);
-                return response;
-            }
-
-            fullPolicyName = policyScope + "." + filePrefix + policyName + "." + activeVersion + ".xml";
 
-        } else {
-            fullPolicyName = policyName;
+        final PAPServices papServices = new PAPServices();
+        if (!populateFullPolicyName(papServices)) {
+            LOGGER.error(message);
+            return message;
         }
 
         if ("PAP".equalsIgnoreCase(deletePolicyParameters.getPolicyComponent())) {
-            if (deletePolicyParameters.getDeleteCondition() == null
-                    || deletePolicyParameters.getDeleteCondition().toString().trim().isEmpty()) {
-                message = XACMLErrorConstants.ERROR_DATA_ISSUE + "No Delete Condition given.";
-                LOGGER.error(message);
-                return message;
-            }
             // for deleting policies from the API
-            final StdPAPPolicy deletePapPolicy =
-                    new StdPAPPolicy(StdPAPPolicyParams.builder()
-                            .policyName(fullPolicyName)
-                            .deleteCondition(deletePolicyParameters.getDeleteCondition().toString())
-                            .build());
-            // send JSON object to PAP
-            response = (String) papServices.callPAP(deletePapPolicy,
-                    new String[] {"groupId=" + pdpGroup, "apiflag=deletePapApi", "operation=delete"},
-                    deletePolicyParameters.getRequestID(), clientScope);
-        } else if ("PDP".equalsIgnoreCase(deletePolicyParameters.getPolicyComponent())) {
-            if (deletePolicyParameters.getPdpGroup() == null || deletePolicyParameters.getPdpGroup().trim().isEmpty()) {
-                message = XACMLErrorConstants.ERROR_DATA_ISSUE + "No PDP Group given.";
-                LOGGER.error(message);
-                return message;
+            for (PolicyNameType policyData : policyList) {
+                // validation ensures there will be one delete policy at a time
+                final StdPAPPolicy deletePapPolicy =
+                        new StdPAPPolicy(StdPAPPolicyParams.builder().policyName(policyData.getFullPolicyName())
+                                .deleteCondition(deletePolicyParameters.getDeleteCondition().toString()).build());
+                // send JSON object to PAP
+                response = (String) papServices.callPAP(deletePapPolicy,
+                        new String[] {"groupId=" + pdpGroup, "apiflag=deletePapApi", "operation=delete"},
+                        deletePolicyParameters.getRequestID(), policyData.getClientScope());
             }
+        } else if ("PDP".equalsIgnoreCase(deletePolicyParameters.getPolicyComponent())) {
+            String policies =
+                    policyList.stream().map(PolicyNameType::getFullPolicyName).collect(Collectors.joining(","));
             // send JSON object to PAP
             response =
-                    (String) papServices.callPAP(
-                            null, new String[] {"policyName=" + fullPolicyName, "groupId=" + pdpGroup,
-                                "apiflag=deletePdpApi", "operation=delete"},
+                    (String) papServices.callPAP(null,
+                            new String[] {"policyName=" + policies, "groupId=" + pdpGroup, "apiflag=deletePdpApi",
+                                    "operation=delete", "userId=API"},
                             deletePolicyParameters.getRequestID(), clientScope);
         } else {
-            message = XACMLErrorConstants.ERROR_DATA_ISSUE
-                    + "Policy Component does not exist. Please enter either PAP or PDP to delete the policy from a specified Policy Component.";
-            LOGGER.error(message);
+            message = XACMLErrorConstants.ERROR_DATA_ISSUE + "Policy Component does not exist."
+                    + "Please enter either PAP or PDP to delete the policy from a specified Policy Component.";
+            LOGGER.warn(message + PRINT_REQUESTID + requestId);
             response = message;
         }
         return response;
     }
 
+    /**
+     * Populate full policy name.
+     *
+     * @param papServices the pap services
+     * @return true, if successful
+     */
+    private boolean populateFullPolicyName(final PAPServices papServices) {
+        for (PolicyNameType policyData : policyList) {
+            if (policyData.getPolicyName().contains("xml")) {
+                policyData.setFullPolicyName(policyData.getPolicyName());
+                continue;
+            }
+
+            final String activeVersion = papServices.getActiveVersion(policyData.getPolicyScope(),
+                    policyData.getFilePrefix(), policyData.getPolicyName(), policyData.getClientScope(),
+                    deletePolicyParameters.getRequestID());
+
+            if ("pe100".equalsIgnoreCase(activeVersion)) {
+                message = XACMLErrorConstants.ERROR_PERMISSIONS
+                        + "response code of the URL is 403. PEP is not Authorized for making this Request!! "
+                        + "Contact Administrator for this Scope. ";
+                LOGGER.warn(message + PRINT_REQUESTID + this.requestId);
+                return false;
+            } else if ("pe300".equalsIgnoreCase(activeVersion)) {
+                message = XACMLErrorConstants.ERROR_DATA_ISSUE + "response code of the URL is 404.  "
+                        + "This indicates a problem with getting the version"
+                        + "from the PAP or the policy does not exist.";
+                LOGGER.warn(message + PRINT_REQUESTID + this.requestId);
+                return false;
+            }
+            if ("0".equalsIgnoreCase(activeVersion)) {
+                message = XACMLErrorConstants.ERROR_DATA_ISSUE + "could not retrieve the activeVersion for this policy."
+                        + "This indicates the policy does not exist, please verify the policy exists.";
+                LOGGER.warn(message + PRINT_REQUESTID + this.requestId);
+                return false;
+            }
+
+            policyData.setFullPolicyName(policyData.getPolicyScope() + "." + policyData.getFilePrefix()
+                    + policyData.getPolicyName() + "." + activeVersion + ".xml");
+        }
+        return true;
+    }
+
+    /**
+     * Gets the validation.
+     *
+     * @return the validation
+     */
     private boolean getValidation() {
-        // While Validating, extract the required values.
-        if (deletePolicyParameters.getPolicyName() == null || deletePolicyParameters.getPolicyName().trim().isEmpty()) {
+        if (StringUtils.isBlank(deletePolicyParameters.getPolicyName())) {
             message = XACMLErrorConstants.ERROR_DATA_ISSUE + "No Policy Name given.";
             return false;
         }
-        if (!deletePolicyParameters.getPolicyName().contains("xml")) {
-            if (deletePolicyParameters.getPolicyName() != null
-                    && deletePolicyParameters.getPolicyName().contains(".")) {
-                policyName = deletePolicyParameters.getPolicyName().substring(
-                        deletePolicyParameters.getPolicyName().lastIndexOf('.') + 1,
-                        deletePolicyParameters.getPolicyName().length());
-                policyScope = deletePolicyParameters.getPolicyName().substring(0,
-                        deletePolicyParameters.getPolicyName().lastIndexOf('.'));
-                LOGGER.info("Name is " + policyName + "   scope is " + policyScope);
-            } else {
-                message = XACMLErrorConstants.ERROR_DATA_ISSUE + "No Policy Scope given.";
-                return false;
-            }
-        } else {
-            policyName = deletePolicyParameters.getPolicyName();
-        }
-        policyType = deletePolicyParameters.getPolicyType();
-        if (policyType == null || policyType.trim().isEmpty()) {
+
+        String policyType = deletePolicyParameters.getPolicyType();
+        if (StringUtils.isBlank(policyType)) {
             message = XACMLErrorConstants.ERROR_DATA_ISSUE + "No PolicyType given.";
             return false;
         }
-        setClientScope();
-        if (clientScope == null || clientScope.trim().isEmpty()) {
-            message = XACMLErrorConstants.ERROR_DATA_ISSUE + deletePolicyParameters.getPolicyType()
-                    + " is not a valid Policy Type.";
-            LOGGER.error(message);
+
+        if (StringUtils.isBlank(deletePolicyParameters.getPolicyComponent())) {
+            message = XACMLErrorConstants.ERROR_DATA_ISSUE + "No Policy Component given.";
             return false;
         }
-        LOGGER.debug("clientScope is " + clientScope);
-        LOGGER.debug("filePrefix is " + filePrefix);
-        if (deletePolicyParameters.getPolicyComponent() == null) {
-            message = XACMLErrorConstants.ERROR_DATA_ISSUE + "No Policy Component given.";
+
+        List<String> policyNames = Arrays.asList(deletePolicyParameters.getPolicyName().split(","));
+        List<String> policyTypes = Arrays.asList(deletePolicyParameters.getPolicyType().split(","));
+
+        if (policyTypes.size() > 1 && (policyNames.size() != policyTypes.size())) {
+            message = XACMLErrorConstants.ERROR_DATA_ISSUE + "Invalid number of PolicyTypes";
             return false;
         }
-        return true;
-    }
 
-    private void setClientScope() {
-        if ("Firewall".equalsIgnoreCase(policyType)) {
-            clientScope = "ConfigFirewall";
-            filePrefix = "Config_FW_";
-        } else if ("Action".equalsIgnoreCase(policyType)) {
-            clientScope = "Action";
-            filePrefix = "Action_";
-        } else if ("Decision".equalsIgnoreCase(policyType)) {
-            clientScope = "Decision";
-            filePrefix = "Decision_";
-        } else if ("Base".equalsIgnoreCase(policyType)) {
-            clientScope = "Config";
-            filePrefix = "Config_";
-        } else if ("ClosedLoop_Fault".equalsIgnoreCase(policyType)) {
-            clientScope = "ConfigClosedLoop";
-            filePrefix = "Config_Fault_";
-        } else if ("ClosedLoop_PM".equalsIgnoreCase(policyType)) {
-            clientScope = "ConfigClosedLoop";
-            filePrefix = "Config_PM_";
-        } else if ("MicroService".equalsIgnoreCase(policyType)) {
-            clientScope = "ConfigMS";
-            filePrefix = "Config_MS_";
-        } else if ("Optimization".equalsIgnoreCase(policyType)) {
-            clientScope = "ConfigOptimization";
-            filePrefix = "Config_OOF_";
-        } else if ("BRMS_RAW".equalsIgnoreCase(policyType)) {
-            clientScope = "ConfigBrmsRaw";
-            filePrefix = "Config_BRMS_Raw_";
-        } else if ("BRMS_PARAM".equalsIgnoreCase(policyType)) {
-            clientScope = "ConfigBrmsParam";
-            filePrefix = "Config_BRMS_Param_";
-        } else {
-            clientScope = null;
-            message = XACMLErrorConstants.ERROR_DATA_ISSUE + policyType + " is not a valid Policy Type.";
+        if ((policyNames.stream().anyMatch(StringUtils::isBlank))
+                || (policyTypes.stream().anyMatch(StringUtils::isBlank))) {
+            message = XACMLErrorConstants.ERROR_DATA_ISSUE + "Invalid PolicyName or PolicyType";
+            return false;
         }
-    }
 
-    public String getResult() {
-        return deleteResult;
-    }
+        if ("PAP".equalsIgnoreCase(deletePolicyParameters.getPolicyComponent()) && policyNames.size() > 1) {
+            message = XACMLErrorConstants.ERROR_DATA_ISSUE + "Only one policy can be deleted from PAP at a time";
+            return false;
+        }
+
+        if ("PAP".equalsIgnoreCase(deletePolicyParameters.getPolicyComponent())
+                && (deletePolicyParameters.getDeleteCondition() == null
+                        || deletePolicyParameters.getDeleteCondition().toString().trim().isEmpty())) {
+            message = XACMLErrorConstants.ERROR_DATA_ISSUE + "No Delete Condition given.";
+            LOGGER.warn(message + PRINT_REQUESTID + requestId);
+            return false;
+        }
+
+        if ("PDP".equalsIgnoreCase(deletePolicyParameters.getPolicyComponent())
+                && StringUtils.isBlank(deletePolicyParameters.getPdpGroup())) {
+            message = XACMLErrorConstants.ERROR_DATA_ISSUE + "No PDP Group given.";
+            LOGGER.warn(message + PRINT_REQUESTID + requestId);
+            return false;
+        }
+
+        if (!validatePolicyNameAndScope(policyNames, policyTypes, policyList)) {
+            LOGGER.warn(XACMLErrorConstants.ERROR_DATA_ISSUE + "Failed validation in validatePolicyNameAndScope - "
+                    + message + PRINT_REQUESTID + requestId);
+            return false;
+        }
 
-    public HttpStatus getResponseCode() {
-        return status;
+        return true;
     }
 
+    public String getResult() {
+        return result;
+    }
 }
diff --git a/ONAP-PDP-REST/src/main/java/org/onap/policy/pdp/rest/api/services/PdpApiService.java b/ONAP-PDP-REST/src/main/java/org/onap/policy/pdp/rest/api/services/PdpApiService.java
new file mode 100644 (file)
index 0000000..4d38753
--- /dev/null
@@ -0,0 +1,162 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP-PDP-REST
+ * ================================================================================
+ * Copyright (C) 2019 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.pdp.rest.api.services;
+
+import java.util.List;
+import java.util.UUID;
+import org.apache.commons.lang3.StringUtils;
+import org.onap.policy.api.PolicyNameType;
+import org.onap.policy.common.logging.flexlogger.FlexLogger;
+import org.onap.policy.common.logging.flexlogger.Logger;
+import org.onap.policy.xacml.api.XACMLErrorConstants;
+import org.springframework.http.HttpStatus;
+
+public abstract class PdpApiService {
+    private static final Logger LOGGER = FlexLogger.getLogger(PdpApiService.class.getName());
+    protected String requestId = null;
+    protected String filePrefix = null;
+    protected String clientScope = null;
+    protected String message = null;
+    protected HttpStatus status = HttpStatus.BAD_REQUEST;
+
+    protected UUID populateRequestId(UUID paramReqId, String reqId) {
+        UUID requestUuid = paramReqId;
+        if (paramReqId == null) {
+            if (!StringUtils.isBlank(reqId)) {
+                try {
+                    requestUuid = UUID.fromString(reqId);
+                } catch (IllegalArgumentException e) {
+                    requestUuid = UUID.randomUUID();
+                    LOGGER.info("Generated Random UUID: " + requestUuid.toString(), e);
+                }
+            } else {
+                requestUuid = UUID.randomUUID();
+                LOGGER.info("Generated Random UUID: " + requestUuid.toString());
+            }
+        }
+        this.requestId = requestUuid.toString();
+        return requestUuid;
+    }
+
+    /**
+     * Sets the client scope.
+     */
+    protected void setClientScope(String policyType) {
+        if ("Firewall".equalsIgnoreCase(policyType)) {
+            clientScope = "ConfigFirewall";
+            filePrefix = "Config_FW_";
+        } else if ("Action".equalsIgnoreCase(policyType)) {
+            clientScope = "Action";
+            filePrefix = "Action_";
+        } else if ("Decision".equalsIgnoreCase(policyType)) {
+            clientScope = "Decision";
+            filePrefix = "Decision_";
+        } else if ("Base".equalsIgnoreCase(policyType)) {
+            clientScope = "Config";
+            filePrefix = "Config_";
+        } else if ("ClosedLoop_Fault".equalsIgnoreCase(policyType)) {
+            clientScope = "ConfigClosedLoop";
+            filePrefix = "Config_Fault_";
+        } else if ("ClosedLoop_PM".equalsIgnoreCase(policyType)) {
+            clientScope = "ConfigClosedLoop";
+            filePrefix = "Config_PM_";
+        } else if ("MicroService".equalsIgnoreCase(policyType)) {
+            clientScope = "ConfigMS";
+            filePrefix = "Config_MS_";
+        } else if ("Optimization".equalsIgnoreCase(policyType)) {
+            clientScope = "ConfigOptimization";
+            filePrefix = "Config_OOF_";
+        } else if ("BRMS_RAW".equalsIgnoreCase(policyType)) {
+            clientScope = "ConfigBrmsRaw";
+            filePrefix = "Config_BRMS_Raw_";
+        } else if ("BRMS_PARAM".equalsIgnoreCase(policyType)) {
+            clientScope = "ConfigBrmsParam";
+            filePrefix = "Config_BRMS_Param_";
+        } else {
+            extendedClientScope(policyType);
+        }
+    }
+
+    protected void extendedClientScope(String policyType) {
+        clientScope = null;
+        message = XACMLErrorConstants.ERROR_DATA_ISSUE + policyType + " is not a valid Policy Type.";
+    }
+
+    protected boolean validatePolicyNameAndScope(List<String> policyNames, List<String> policyTypes,
+            List<PolicyNameType> policyList) {
+        String policyName = null;
+        String policyScope = null;
+        String polType = null;
+
+        if (policyTypes.size() == 1) {
+            polType = policyTypes.get(0).trim();
+        }
+
+        try {
+            for (int i = 0; i < policyNames.size(); i++) {
+                String polName = policyNames.get(i);
+                if (policyTypes.size() > 1) {
+                    polType = policyTypes.get(i).trim();
+                }
+                if (polName.contains(".")) {
+                    policyName = polName.substring(polName.lastIndexOf('.') + 1);
+                    policyScope = polName.substring(0, polName.lastIndexOf('.'));
+                } else {
+                    message = XACMLErrorConstants.ERROR_DATA_ISSUE + "No Policy Scope given.";
+                    return false;
+                }
+                if (StringUtils.isBlank(policyName) || StringUtils.isBlank(policyScope)) {
+                    message = XACMLErrorConstants.ERROR_DATA_ISSUE + "Invalid Policy Name.";
+                    return false;
+                }
+
+                clientScope = null;
+                filePrefix = null;
+                setClientScope(polType);
+                if (StringUtils.isBlank(clientScope) || StringUtils.isBlank(filePrefix)) {
+                    message = XACMLErrorConstants.ERROR_DATA_ISSUE + "Invalid Policy Name.";
+                    return false;
+                }
+                PolicyNameType policyData = new PolicyNameType(policyName.trim(), policyScope.trim(), polType,
+                        filePrefix, clientScope, null);
+                policyList.add(policyData);
+                LOGGER.info("RequestId - " + requestId + " , Policy - " + policyData);
+
+            }
+        } catch (Exception e) {
+            message = XACMLErrorConstants.ERROR_DATA_ISSUE
+                    + "validatePolicies - Failed Validation. Please check the input parameters.";
+            return false;
+        }
+        return true;
+    }
+
+
+    /**
+     * Gets the response code.
+     *
+     * @return the response code
+     */
+    public HttpStatus getResponseCode() {
+        return status;
+    }
+
+}
index 7ab17e0..8704961 100644 (file)
@@ -2,14 +2,14 @@
  * ============LICENSE_START=======================================================
  * ONAP-PDP-REST
  * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017-2019 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.
  * limitations under the License.
  * ============LICENSE_END=========================================================
  */
-package org.onap.policy.pdp.rest.api.services;
 
-import java.util.UUID;
+package org.onap.policy.pdp.rest.api.services;
 
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import org.apache.commons.lang3.StringUtils;
 import org.onap.policy.api.PolicyException;
+import org.onap.policy.api.PolicyNameType;
 import org.onap.policy.api.PushPolicyParameters;
 import org.onap.policy.common.logging.flexlogger.FlexLogger;
 import org.onap.policy.common.logging.flexlogger.Logger;
@@ -29,175 +33,142 @@ import org.onap.policy.xacml.api.XACMLErrorConstants;
 import org.onap.policy.xacml.std.pap.StdPDPPolicy;
 import org.springframework.http.HttpStatus;
 
-import com.att.research.xacml.api.pap.PAPException;
-
-public class PushPolicyService {
+public class PushPolicyService extends PdpApiService {
     private static final Logger LOGGER = FlexLogger.getLogger(PushPolicyService.class.getName());
-    
-    private String pushResult = null;
-    private HttpStatus status = HttpStatus.BAD_REQUEST;
+
     private PushPolicyParameters pushPolicyParameters = null;
-    private String message = null;
-    private String policyName = null;
-    private String policyScope = null;
+    private List<PolicyNameType> policyList = new ArrayList<>();
     private String pdpGroup = null;
-    private String policyType = null;
-    private String filePrefix = null;
-    private String clientScope = null; 
+    private String result = null;
 
-    public PushPolicyService(PushPolicyParameters pushPolicyParameters,
-            String requestID) {
+    /**
+     * Instantiates a new push policy service.
+     *
+     * @param pushPolicyParameters the push policy parameters
+     * @param reqId the request ID
+     */
+    public PushPolicyService(final PushPolicyParameters pushPolicyParameters, final String reqId) {
         this.pushPolicyParameters = pushPolicyParameters;
-        if(pushPolicyParameters.getRequestID()==null){
-            UUID requestUUID = null;
-            if (requestID != null && !requestID.isEmpty()) {
-                try {
-                    requestUUID = UUID.fromString(requestID);
-                } catch (IllegalArgumentException e) {
-                    requestUUID = UUID.randomUUID();
-                    LOGGER.info("Generated Random UUID: " + requestUUID.toString(), e);
-                }
-            }else{
-                requestUUID = UUID.randomUUID();
-                LOGGER.info("Generated Random UUID: " + requestUUID.toString());
-            }
-            this.pushPolicyParameters.setRequestID(requestUUID);
-        }
-        try{
+        pushPolicyParameters.setRequestID(populateRequestId(pushPolicyParameters.getRequestID(), reqId));
+        LOGGER.info("Operation: pushPolicy - Request - " + pushPolicyParameters + ", RequestId - " + requestId);
+        try {
             run();
             specialCheck();
-        }catch(PolicyException e){
-            pushResult = XACMLErrorConstants.ERROR_DATA_ISSUE + e;
+        } catch (PolicyException e) {
+            result = XACMLErrorConstants.ERROR_DATA_ISSUE + e;
             status = HttpStatus.BAD_REQUEST;
         }
+        LOGGER.info(
+                "PushPolicyService - RequestId - " + requestId + " , Response - " + result + ", Status - " + status);
     }
 
-    private void specialCheck() {
-        if(pushResult.contains("BAD REQUEST") || pushResult.contains("PE300")){
-            status = HttpStatus.BAD_REQUEST;
-        }
-    }
-
-    private void run() throws PolicyException{
-        // Check Validation. 
-        if(!getValidation()){
+    private void run() throws PolicyException {
+        // Check Validation.
+        if (!getValidation()) {
             LOGGER.error(message);
             throw new PolicyException(message);
         }
-        // Process Results. 
-        try{
+        // Process Results.
+        try {
             status = HttpStatus.OK;
-            pushResult = processResult();
-        }catch(Exception e){
+            result = processResult();
+        } catch (Exception e) {
             LOGGER.error(XACMLErrorConstants.ERROR_DATA_ISSUE + e);
             status = HttpStatus.BAD_REQUEST;
             throw new PolicyException(e);
         }
     }
 
-    private String processResult() throws PolicyException{
+    private String processResult() throws PolicyException {
         PAPServices papServices = new PAPServices();
         String response = null;
-        StdPDPPolicy selectedPolicy = papServices.pushPolicy(policyScope, filePrefix, policyName, clientScope, pdpGroup, pushPolicyParameters.getRequestID());
-        if(selectedPolicy==null){
-                response = XACMLErrorConstants.ERROR_DATA_ISSUE + "response code of the URL is 404.  "
-                     + "This indicates a problem with getting the version from the PAP or the policy does not exist.";
-             LOGGER.error(response);
-             return response;
-        }
+
         try {
-            LOGGER.debug("StdPDPPolicy object contains: " + selectedPolicy.getId() + ", " + selectedPolicy.getName() + ", " + selectedPolicy.getLocation().toString());
-            response = (String) papServices.callPAP(selectedPolicy, new String[]{"groupId=" + pdpGroup, "policyId="+selectedPolicy.getId(), "apiflag=api", "operation=POST"}, pushPolicyParameters.getRequestID(), clientScope);
-        } catch (PAPException e) {
-            LOGGER.error(XACMLErrorConstants.ERROR_PROCESS_FLOW+e.getMessage());
+            // for each policy to be pushed, we need to call pap to get the active version
+            // and construct the full policy name. Then the list of policy names are sent to pap
+            // to do the actual push.
+            String policyId = constructPolicyNames(papServices);
+            response =
+                    (String) papServices
+                            .callPAP(null,
+                                    new String[] {"groupId=" + pdpGroup, "policyId=" + policyId, "apiflag=api",
+                                            "operation=POST", "userId=API"},
+                                    pushPolicyParameters.getRequestID(), clientScope);
+        } catch (Exception e) {
+            LOGGER.error(XACMLErrorConstants.ERROR_PROCESS_FLOW + e.getMessage());
             throw new PolicyException(e);
         }
         LOGGER.debug("Final API response: " + response);
         return response;
     }
 
+    private void specialCheck() {
+        if (result.contains("BAD REQUEST") || result.contains("PE300")) {
+            status = HttpStatus.BAD_REQUEST;
+        }
+    }
+
+
+    private String constructPolicyNames(PAPServices papServices) throws PolicyException {
+        List<String> pushPolicyList = new ArrayList<>(policyList.size());
+        for (PolicyNameType policyData : policyList) {
+            LOGGER.info("PushPolicyService - constructPolicyNames - Policy Name is " + policyData.getPolicyName()
+                    + "   scope is " + policyData.getPolicyScope());
+            // for each policy we need to get the active version to construct policyId
+            StdPDPPolicy selectedPolicy = papServices.pushPolicy(policyData.getPolicyScope(),
+                    policyData.getFilePrefix(), policyData.getPolicyName(), policyData.getClientScope(),
+                    pdpGroup.trim(), pushPolicyParameters.getRequestID());
+            if (selectedPolicy != null) {
+                pushPolicyList.add(selectedPolicy.getId());
+            } else {
+                throw new PolicyException(XACMLErrorConstants.ERROR_DATA_ISSUE + "response code of the URL is 404.  "
+                        + "This indicates a problem with getting the version "
+                        + "from the PAP or the policy does not exist - " + policyData);
+            }
+        }
+        return String.join(",", pushPolicyList);
+    }
+
     private boolean getValidation() {
         // While Validating, extract the required values.
-        if (pushPolicyParameters.getPolicyName() != null
-                && pushPolicyParameters.getPolicyName().contains(".")) {
-            policyName = pushPolicyParameters.getPolicyName().substring(pushPolicyParameters.getPolicyName().lastIndexOf('.') + 1,
-                    pushPolicyParameters.getPolicyName().length());
-            policyScope = pushPolicyParameters.getPolicyName().substring(0,pushPolicyParameters.getPolicyName().lastIndexOf('.'));
-            LOGGER.info("Name is " + policyName + "   scope is " + policyScope);
-        } else {
-            message = XACMLErrorConstants.ERROR_DATA_ISSUE + "No Policy Scope given.";
-            return false;
-        }
-        if (policyName==null||policyName.trim().isEmpty()){
+        if (StringUtils.isBlank(pushPolicyParameters.getPolicyName())) {
             message = XACMLErrorConstants.ERROR_DATA_ISSUE + "No Policy Name given.";
             return false;
         }
-        policyType = pushPolicyParameters.getPolicyType();
-        if(policyType== null || policyType.trim().isEmpty()){
+
+        if (StringUtils.isBlank(pushPolicyParameters.getPolicyType())) {
             message = XACMLErrorConstants.ERROR_DATA_ISSUE + "No PolicyType given.";
             return false;
         }
 
-        setClientScope();
-        if(clientScope==null){
+        List<String> policyNames = Arrays.asList(pushPolicyParameters.getPolicyName().split(","));
+        List<String> policyTypes = Arrays.asList(pushPolicyParameters.getPolicyType().split(","));
+
+        if (policyTypes.size() != 1 && (policyNames.size() != policyTypes.size())) {
+            message = XACMLErrorConstants.ERROR_DATA_ISSUE + "Invalid number of PolicyTypes";
             return false;
         }
-        
-        pdpGroup = pushPolicyParameters.getPdpGroup();
-        if(pdpGroup==null || pdpGroup.trim().isEmpty()){
-               pdpGroup = "default";
+
+        if ((policyNames.stream().anyMatch(StringUtils::isBlank))
+                || (policyTypes.stream().anyMatch(StringUtils::isBlank))) {
+            message = XACMLErrorConstants.ERROR_DATA_ISSUE + "Invalid PolicyName or PolicyType";
+            return false;
         }
-        
-        LOGGER.debug("clientScope is " + clientScope);
-        LOGGER.debug("filePrefix is " + filePrefix);
 
-        return true;
-    }
+        if (!validatePolicyNameAndScope(policyNames, policyTypes, policyList)) {
+            LOGGER.warn("PushPolicyService - Failed validation in validatePolicyNameAndScope - " + message);
+            return false;
+        }
 
-    private void setClientScope() {
-        if ("Firewall".equalsIgnoreCase(policyType)) {
-            clientScope = "ConfigFirewall";
-            filePrefix = "Config_FW_";
-        } else if ("Action".equalsIgnoreCase(policyType)) {
-            clientScope = "Action";
-            filePrefix = "Action_";
-        } else if ("Decision".equalsIgnoreCase(policyType)) {
-            clientScope = "Decision";
-            filePrefix = "Decision_";
-        } else if ("Base".equalsIgnoreCase(policyType)) {
-            clientScope = "Config";
-            filePrefix = "Config_";
-        } else if ("ClosedLoop_Fault".equalsIgnoreCase(policyType)) {
-            clientScope = "ConfigClosedLoop";
-            filePrefix = "Config_Fault_";
-        } else if ("ClosedLoop_PM".equalsIgnoreCase(policyType)) {
-            clientScope = "ConfigClosedLoop";
-            filePrefix = "Config_PM_";
-        } else if ("MicroService".equalsIgnoreCase(policyType)) {
-            clientScope = "ConfigMS";
-            filePrefix = "Config_MS_";
-        } else if ("Optimization".equalsIgnoreCase(policyType)) {
-               clientScope = "ConfigOptimization";
-               filePrefix = "Config_OOF_";
-        } else if ("BRMS_RAW".equalsIgnoreCase(policyType)) {
-            clientScope = "ConfigBrmsRaw";
-            filePrefix = "Config_BRMS_Raw_";
-        } else if ("BRMS_PARAM".equalsIgnoreCase(policyType)) {
-            clientScope = "ConfigBrmsParam";
-            filePrefix = "Config_BRMS_Param_";
-        } else {
-            clientScope = null;
-            message = XACMLErrorConstants.ERROR_DATA_ISSUE + policyType
-                    + " is not a valid Policy Type.";
+        pdpGroup = pushPolicyParameters.getPdpGroup();
+        if (StringUtils.isBlank(pdpGroup)) {
+            pdpGroup = "default";
         }
-    }
 
-    public String getResult() {
-        return pushResult;
+        return true;
     }
 
-    public HttpStatus getResponseCode() {
-        return status;
+    public String getResult() {
+        return result;
     }
-
 }
index e7c01b1..f08ef03 100644 (file)
@@ -19,6 +19,7 @@
  * limitations under the License.
  * ============LICENSE_END=========================================================
  */
+
 package org.onap.policy.pdp.rest.api.test;
 
 import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.delete;
@@ -89,8 +90,7 @@ public class PolicyEngineServicesTest {
         headers = new HttpHeaders();
         headers.add(CLIENTAUTHHEADER, CLIENTAUTHVALUE);
         XACMLProperties.reloadProperties();
-        System.setProperty(XACMLProperties.XACML_PROPERTIES_NAME,
-                "src/test/resources/pass.xacml.pdp.properties");
+        System.setProperty(XACMLProperties.XACML_PROPERTIES_NAME, "src/test/resources/pass.xacml.pdp.properties");
         XACMLProperties.getProperties();
         this.mockMvc = webAppContextSetup(webApplicationContext).build();
     }
@@ -99,8 +99,9 @@ public class PolicyEngineServicesTest {
     public void getConfigAPIFailureTest() throws Exception {
         ConfigRequestParameters pep = new ConfigRequestParameters();
         pep.setPolicyName(".*");
-        mockMvc.perform(post("/getConfig").content(PolicyUtils.objectToJsonString(pep))
-                .contentType(MediaType.APPLICATION_JSON)).andExpect(status().is(400));
+        mockMvc.perform(
+                post("/getConfig").content(PolicyUtils.objectToJsonString(pep)).contentType(MediaType.APPLICATION_JSON))
+                .andExpect(status().is(400));
         // Authorization tests.
         mockMvc.perform(post("/getConfig").content(PolicyUtils.objectToJsonString(pep))
                 .contentType(MediaType.APPLICATION_JSON).header(CLIENTAUTHHEADER, ""))
@@ -114,48 +115,46 @@ public class PolicyEngineServicesTest {
         // Set wrong request.
         pep.setPolicyName(null);
         pep.setConfigName("test");
-        mockMvc.perform(post("/getConfig").content(PolicyUtils.objectToJsonString(pep))
-                .headers(headers).header(UUIDHEADER, "123").contentType(MediaType.APPLICATION_JSON))
-                .andExpect(status().isBadRequest());
+        mockMvc.perform(post("/getConfig").content(PolicyUtils.objectToJsonString(pep)).headers(headers)
+                .header(UUIDHEADER, "123").contentType(MediaType.APPLICATION_JSON)).andExpect(status().isBadRequest());
     }
 
     @Test
     public void getConfigServiceTest() throws Exception {
         ConfigRequestParameters pep = new ConfigRequestParameters();
         pep.setPolicyName(".*");
-        mockMvc.perform(post("/getConfig").content(PolicyUtils.objectToJsonString(pep))
-                .headers(headers).header(UUIDHEADER, UUID.randomUUID())
-                .contentType(MediaType.APPLICATION_JSON)).andExpect(status().isOk());
+        mockMvc.perform(post("/getConfig").content(PolicyUtils.objectToJsonString(pep)).headers(headers)
+                .header(UUIDHEADER, UUID.randomUUID()).contentType(MediaType.APPLICATION_JSON))
+                .andExpect(status().isOk());
         // Without policyName and using onapName and other fields.
         pep.setPolicyName(null);
         pep.setOnapName("test");
         pep.setConfigName("test");
-        mockMvc.perform(post("/getConfig").content(PolicyUtils.objectToJsonString(pep))
-                .headers(headers).contentType(MediaType.APPLICATION_JSON))
-                .andExpect(status().isOk());
+        mockMvc.perform(post("/getConfig").content(PolicyUtils.objectToJsonString(pep)).headers(headers)
+                .contentType(MediaType.APPLICATION_JSON)).andExpect(status().isOk());
         // with config attributes.
         Map<String, String> configAttributes = new HashMap<>();
         configAttributes.put("test", "test");
         pep.setConfigAttributes(configAttributes);
         pep.makeUnique(true);
-        mockMvc.perform(post("/getConfig").content(PolicyUtils.objectToJsonString(pep))
-                .headers(headers).contentType(MediaType.APPLICATION_JSON))
-                .andExpect(status().isOk());
+        mockMvc.perform(post("/getConfig").content(PolicyUtils.objectToJsonString(pep)).headers(headers)
+                .contentType(MediaType.APPLICATION_JSON)).andExpect(status().isOk());
     }
 
     @Test
     public void getConfigByPolicyNameTest() throws Exception {
         ConfigNameRequest pep = new ConfigNameRequest();
         pep.setPolicyName(".*");
-        mockMvc.perform(post("/getConfig").content(PolicyUtils.objectToJsonString(pep))
-                .contentType(MediaType.APPLICATION_JSON)).andExpect(status().is(400));
+        mockMvc.perform(
+                post("/getConfig").content(PolicyUtils.objectToJsonString(pep)).contentType(MediaType.APPLICATION_JSON))
+                .andExpect(status().is(400));
         // Authorization tests.
         mockMvc.perform(post("/getConfig").content(PolicyUtils.objectToJsonString(pep))
                 .contentType(MediaType.APPLICATION_JSON).header(CLIENTAUTHHEADER, ""))
                 .andExpect(status().isUnauthorized());
-        mockMvc.perform(post("/getConfigByPolicyName").content(PolicyUtils.objectToJsonString(pep))
-                .headers(headers).header(UUIDHEADER, UUID.randomUUID())
-                .contentType(MediaType.APPLICATION_JSON)).andExpect(status().isOk());
+        mockMvc.perform(post("/getConfigByPolicyName").content(PolicyUtils.objectToJsonString(pep)).headers(headers)
+                .header(UUIDHEADER, UUID.randomUUID()).contentType(MediaType.APPLICATION_JSON))
+                .andExpect(status().isOk());
     }
 
     @Test
@@ -168,30 +167,25 @@ public class PolicyEngineServicesTest {
         mockMvc.perform(post("/listConfig").content(PolicyUtils.objectToJsonString(pep))
                 .contentType(MediaType.APPLICATION_JSON).header(CLIENTAUTHHEADER, ""))
                 .andExpect(status().isUnauthorized());
-        mockMvc.perform(post("/listConfig").content(PolicyUtils.objectToJsonString(pep))
-                .headers(headers).header(UUIDHEADER, UUID.randomUUID())
-                .contentType(MediaType.APPLICATION_JSON)).andExpect(status().isOk());
+        mockMvc.perform(post("/listConfig").content(PolicyUtils.objectToJsonString(pep)).headers(headers)
+                .header(UUIDHEADER, UUID.randomUUID()).contentType(MediaType.APPLICATION_JSON))
+                .andExpect(status().isOk());
     }
 
     @Test
     public void listPolicyTest() throws Exception {
         ConfigNameRequest pep = new ConfigNameRequest();
         pep.setPolicyName(".*");
-        mockMvc.perform(post("/listPolicy").content(PolicyUtils.objectToJsonString(pep))
-                .headers(headers).header(UUIDHEADER, UUID.randomUUID())
-                .contentType(MediaType.APPLICATION_JSON)).andExpect(status().isOk());
-        pep.setPolicyName("*");
-        mockMvc.perform(post("/listPolicy").content(PolicyUtils.objectToJsonString(pep))
-                .headers(headers).header(UUIDHEADER, UUID.randomUUID())
-                .contentType(MediaType.APPLICATION_JSON)).andExpect(status().is4xxClientError());
+        mockMvc.perform(post("/listPolicy").content(PolicyUtils.objectToJsonString(pep)).headers(headers)
+                .header(UUIDHEADER, UUID.randomUUID()).contentType(MediaType.APPLICATION_JSON))
+                .andExpect(status().isOk());
     }
 
     @Test
     public void getMetricsTest() throws Exception {
         // Failure Tests.
         mockMvc.perform(get("/getMetrics")).andExpect(status().isBadRequest());
-        mockMvc.perform(get("/getMetrics").header(CLIENTAUTHHEADER, "Basic 123"))
-                .andExpect(status().isUnauthorized());
+        mockMvc.perform(get("/getMetrics").header(CLIENTAUTHHEADER, "Basic 123")).andExpect(status().isUnauthorized());
         // Service Tests.
         mockMvc.perform(get("/getMetrics").headers(headers).header(UUIDHEADER, "123"))
                 .andExpect(status().isBadRequest());
@@ -204,30 +198,24 @@ public class PolicyEngineServicesTest {
     public void getNotificationAuthFailureTest() throws Exception {
         mockMvc.perform(post("/getNotification").header(CLIENTAUTHHEADER, "").content("test"))
                 .andExpect(status().isUnauthorized());
-        mockMvc.perform(
-                post("/getNotification").header(CLIENTAUTHHEADER, "Basic test123").content("test"))
+        mockMvc.perform(post("/getNotification").header(CLIENTAUTHHEADER, "Basic test123").content("test"))
                 .andExpect(status().isUnauthorized());
-        mockMvc.perform(
-                post("/getNotification").header(CLIENTAUTHHEADER, ERRORCLIENTVALUE).content(" "))
+        mockMvc.perform(post("/getNotification").header(CLIENTAUTHHEADER, ERRORCLIENTVALUE).content(" "))
                 .andExpect(status().isUnauthorized());
     }
 
     @Test
     public void getNotificationTopicFailureTest() throws Exception {
         mockMvc.perform(post("/getNotification")).andExpect(status().isBadRequest());
-        mockMvc.perform(post("/getNotification").headers(headers).content(""))
-                .andExpect(status().isBadRequest());
+        mockMvc.perform(post("/getNotification").headers(headers).content("")).andExpect(status().isBadRequest());
     }
 
     @Test
     public void getNotificationTopicValidFailTest() throws Exception {
         // Check failures.
-        mockMvc.perform(post("/getNotification").headers(headers).content(" "))
-                .andExpect(status().isBadRequest());
-        mockMvc.perform(post("/stopNotification").headers(headers).content(" "))
-                .andExpect(status().isBadRequest());
-        mockMvc.perform(post("/sendHeartbeat").headers(headers).content(" "))
-                .andExpect(status().isBadRequest());
+        mockMvc.perform(post("/getNotification").headers(headers).content(" ")).andExpect(status().isBadRequest());
+        mockMvc.perform(post("/stopNotification").headers(headers).content(" ")).andExpect(status().isBadRequest());
+        mockMvc.perform(post("/sendHeartbeat").headers(headers).content(" ")).andExpect(status().isBadRequest());
     }
 
     @Test
@@ -239,22 +227,17 @@ public class PolicyEngineServicesTest {
         XACMLProperties.getProperties();
         NotificationService.reloadProps();
         // Add a Topic.
-        mockMvc.perform(
-                post("/getNotification").headers(headers).header(UUIDHEADER, "123").content("test"))
+        mockMvc.perform(post("/getNotification").headers(headers).header(UUIDHEADER, "123").content("test"))
                 .andExpect(status().isOk());
         // Try to add same topic should fail.
-        mockMvc.perform(post("/getNotification").headers(headers)
-                .header(UUIDHEADER, UUID.randomUUID()).content("test"))
+        mockMvc.perform(post("/getNotification").headers(headers).header(UUIDHEADER, UUID.randomUUID()).content("test"))
                 .andExpect(status().isBadRequest());
         // do a heart beat.
-        mockMvc.perform(post("/sendHeartbeat").headers(headers).content("test"))
-                .andExpect(status().isOk());
+        mockMvc.perform(post("/sendHeartbeat").headers(headers).content("test")).andExpect(status().isOk());
         // remove the added Topic.
-        mockMvc.perform(post("/stopNotification").headers(headers).content("test"))
-                .andExpect(status().isOk());
+        mockMvc.perform(post("/stopNotification").headers(headers).content("test")).andExpect(status().isOk());
         // try to remove again should fail.
-        mockMvc.perform(post("/sendHeartbeat").headers(headers).content("test"))
-                .andExpect(status().isBadRequest());
+        mockMvc.perform(post("/sendHeartbeat").headers(headers).content("test")).andExpect(status().isBadRequest());
     }
 
     @Test
@@ -274,17 +257,15 @@ public class PolicyEngineServicesTest {
                 .andExpect(status().isOk());
         pep.setEventAttributes(null);
         mockMvc.perform(post("/sendEvent").content(PolicyUtils.objectToJsonString(pep))
-                .contentType(MediaType.APPLICATION_JSON).headers(headers)
-                .header(UUIDHEADER, UUID.randomUUID())).andExpect(status().isBadRequest());
+                .contentType(MediaType.APPLICATION_JSON).headers(headers).header(UUIDHEADER, UUID.randomUUID()))
+                .andExpect(status().isBadRequest());
         pep.setEventAttributes(eventAttributes);
         mockMvc.perform(post("/sendEvent").content(PolicyUtils.objectToJsonString(pep))
-                .contentType(MediaType.APPLICATION_JSON).headers(headers))
-                .andExpect(status().isOk());
+                .contentType(MediaType.APPLICATION_JSON).headers(headers)).andExpect(status().isOk());
         pep.setEventAttributes(eventAttributes);
         pep.setRequestID(UUID.randomUUID());
         mockMvc.perform(post("/sendEvent").content(PolicyUtils.objectToJsonString(pep))
-                .contentType(MediaType.APPLICATION_JSON).headers(headers))
-                .andExpect(status().isOk());
+                .contentType(MediaType.APPLICATION_JSON).headers(headers)).andExpect(status().isOk());
     }
 
     @Test
@@ -306,17 +287,15 @@ public class PolicyEngineServicesTest {
         pep.setDecisionAttributes(null);
         pep.setOnapName(null);
         mockMvc.perform(post("/getDecision").content(PolicyUtils.objectToJsonString(pep))
-                .contentType(MediaType.APPLICATION_JSON).headers(headers)
-                .header(UUIDHEADER, UUID.randomUUID())).andExpect(status().isBadRequest());
+                .contentType(MediaType.APPLICATION_JSON).headers(headers).header(UUIDHEADER, UUID.randomUUID()))
+                .andExpect(status().isBadRequest());
         pep.setOnapName("testing");
         mockMvc.perform(post("/getDecision").content(PolicyUtils.objectToJsonString(pep))
-                .contentType(MediaType.APPLICATION_JSON).headers(headers))
-                .andExpect(status().isBadRequest());
+                .contentType(MediaType.APPLICATION_JSON).headers(headers)).andExpect(status().isBadRequest());
         pep.setDecisionAttributes(eventAttributes);
         pep.setRequestID(UUID.randomUUID());
         mockMvc.perform(post("/getDecision").content(PolicyUtils.objectToJsonString(pep))
-                .contentType(MediaType.APPLICATION_JSON).headers(headers))
-                .andExpect(status().isOk());
+                .contentType(MediaType.APPLICATION_JSON).headers(headers)).andExpect(status().isOk());
     }
 
     @Test
@@ -329,61 +308,67 @@ public class PolicyEngineServicesTest {
                 .andExpect(status().isUnauthorized());
         // Service Tests.
         mockMvc.perform(put("/pushPolicy").content(PolicyUtils.objectToJsonString(pep))
-                .contentType(MediaType.APPLICATION_JSON).headers(headers)
-                .header(UUIDHEADER, UUID.randomUUID())).andExpect(status().isBadRequest());
+                .contentType(MediaType.APPLICATION_JSON).headers(headers).header(UUIDHEADER, UUID.randomUUID()))
+                .andExpect(status().isBadRequest());
+        pep.setPolicyName("com.");
+        mockMvc.perform(put("/pushPolicy").content(PolicyUtils.objectToJsonString(pep))
+                .contentType(MediaType.APPLICATION_JSON).headers(headers)).andExpect(status().isBadRequest());
+        pep.setPolicyName("com.test");
+        pep.setPolicyType("");
+        mockMvc.perform(put("/pushPolicy").content(PolicyUtils.objectToJsonString(pep))
+                .contentType(MediaType.APPLICATION_JSON).headers(headers)).andExpect(status().isBadRequest());
         pep.setPolicyName("scopeless");
         mockMvc.perform(put("/pushPolicy").content(PolicyUtils.objectToJsonString(pep))
-                .contentType(MediaType.APPLICATION_JSON).headers(headers))
-                .andExpect(status().isBadRequest());
+                .contentType(MediaType.APPLICATION_JSON).headers(headers)).andExpect(status().isBadRequest());
         pep.setPolicyName("testing.test");
         pep.setPolicyType("wrong");
         mockMvc.perform(put("/pushPolicy").content(PolicyUtils.objectToJsonString(pep))
-                .contentType(MediaType.APPLICATION_JSON).headers(headers))
-                .andExpect(status().isBadRequest());
+                .contentType(MediaType.APPLICATION_JSON).headers(headers)).andExpect(status().isBadRequest());
         pep.setPolicyType("BRMS_PARAM");
         mockMvc.perform(put("/pushPolicy").content(PolicyUtils.objectToJsonString(pep))
-                .contentType(MediaType.APPLICATION_JSON).headers(headers))
-                .andExpect(status().isBadRequest());
+                .contentType(MediaType.APPLICATION_JSON).headers(headers)).andExpect(status().isBadRequest());
         pep.setPolicyType("BRMS_RAW");
         mockMvc.perform(put("/pushPolicy").content(PolicyUtils.objectToJsonString(pep))
-                .contentType(MediaType.APPLICATION_JSON).headers(headers))
-                .andExpect(status().isBadRequest());
+                .contentType(MediaType.APPLICATION_JSON).headers(headers)).andExpect(status().isBadRequest());
         pep.setPolicyType("MicroService");
         mockMvc.perform(put("/pushPolicy").content(PolicyUtils.objectToJsonString(pep))
-                .contentType(MediaType.APPLICATION_JSON).headers(headers))
-                .andExpect(status().isBadRequest());
+                .contentType(MediaType.APPLICATION_JSON).headers(headers)).andExpect(status().isBadRequest());
         pep.setPolicyType("ClosedLoop_PM");
         mockMvc.perform(put("/pushPolicy").content(PolicyUtils.objectToJsonString(pep))
-                .contentType(MediaType.APPLICATION_JSON).headers(headers))
-                .andExpect(status().isBadRequest());
+                .contentType(MediaType.APPLICATION_JSON).headers(headers)).andExpect(status().isBadRequest());
         pep.setPolicyType("ClosedLoop_Fault");
         mockMvc.perform(put("/pushPolicy").content(PolicyUtils.objectToJsonString(pep))
-                .contentType(MediaType.APPLICATION_JSON).headers(headers))
-                .andExpect(status().isBadRequest());
+                .contentType(MediaType.APPLICATION_JSON).headers(headers)).andExpect(status().isBadRequest());
         pep.setPolicyType("Base");
         mockMvc.perform(put("/pushPolicy").content(PolicyUtils.objectToJsonString(pep))
-                .contentType(MediaType.APPLICATION_JSON).headers(headers))
-                .andExpect(status().isBadRequest());
+                .contentType(MediaType.APPLICATION_JSON).headers(headers)).andExpect(status().isBadRequest());
         pep.setPolicyType("Decision");
         mockMvc.perform(put("/pushPolicy").content(PolicyUtils.objectToJsonString(pep))
-                .contentType(MediaType.APPLICATION_JSON).headers(headers))
-                .andExpect(status().isBadRequest());
+                .contentType(MediaType.APPLICATION_JSON).headers(headers)).andExpect(status().isBadRequest());
         pep.setPolicyType("Action");
         mockMvc.perform(put("/pushPolicy").content(PolicyUtils.objectToJsonString(pep))
-                .contentType(MediaType.APPLICATION_JSON).headers(headers))
-                .andExpect(status().isBadRequest());
+                .contentType(MediaType.APPLICATION_JSON).headers(headers)).andExpect(status().isBadRequest());
         pep.setPolicyType("Firewall");
         mockMvc.perform(put("/pushPolicy").content(PolicyUtils.objectToJsonString(pep))
-                .contentType(MediaType.APPLICATION_JSON).headers(headers))
-                .andExpect(status().isBadRequest());
+                .contentType(MediaType.APPLICATION_JSON).headers(headers)).andExpect(status().isBadRequest());
+        pep.setPolicyType("Optimization");
+        mockMvc.perform(put("/pushPolicy").content(PolicyUtils.objectToJsonString(pep))
+                .contentType(MediaType.APPLICATION_JSON).headers(headers)).andExpect(status().isBadRequest());
         pep.setPdpGroup("default");
         mockMvc.perform(put("/pushPolicy").content(PolicyUtils.objectToJsonString(pep))
                 .contentType(MediaType.APPLICATION_JSON).headers(headers).header(UUIDHEADER, "123"))
                 .andExpect(status().isBadRequest());
         pep.setRequestID(UUID.randomUUID());
         mockMvc.perform(put("/pushPolicy").content(PolicyUtils.objectToJsonString(pep))
-                .contentType(MediaType.APPLICATION_JSON).headers(headers))
-                .andExpect(status().isBadRequest());
+                .contentType(MediaType.APPLICATION_JSON).headers(headers)).andExpect(status().isBadRequest());
+        pep.setPolicyType("Base,Base");
+        pep.setPolicyName("com.test1,com.test2");
+        mockMvc.perform(put("/pushPolicy").content(PolicyUtils.objectToJsonString(pep))
+                .contentType(MediaType.APPLICATION_JSON).headers(headers)).andExpect(status().isBadRequest());
+        pep.setPolicyType("Base,Base,  ");
+        pep.setPolicyName("com.test1,com.test2,com.test3");
+        mockMvc.perform(put("/pushPolicy").content(PolicyUtils.objectToJsonString(pep))
+                .contentType(MediaType.APPLICATION_JSON).headers(headers)).andExpect(status().isBadRequest());
     }
 
     @Test
@@ -396,93 +381,135 @@ public class PolicyEngineServicesTest {
                 .andExpect(status().isUnauthorized());
         // Service Tests.
         mockMvc.perform(delete("/deletePolicy").content(PolicyUtils.objectToJsonString(pep))
-                .contentType(MediaType.APPLICATION_JSON).headers(headers)
-                .header(UUIDHEADER, UUID.randomUUID())).andExpect(status().isBadRequest());
+                .contentType(MediaType.APPLICATION_JSON).headers(headers).header(UUIDHEADER, UUID.randomUUID()))
+                .andExpect(status().isBadRequest());
+
         pep.setPolicyName("testing");
+        pep.setPolicyType("Base");
+        pep.setPolicyComponent("PDP");
         mockMvc.perform(delete("/deletePolicy").content(PolicyUtils.objectToJsonString(pep))
-                .contentType(MediaType.APPLICATION_JSON).headers(headers)
-                .header(UUIDHEADER, "test123")).andExpect(status().isBadRequest());
-        pep.setPolicyName("testscope.name");
+                .contentType(MediaType.APPLICATION_JSON).headers(headers).header(UUIDHEADER, "test123"))
+                .andExpect(status().isBadRequest());
+        pep.setPdpGroup("default");
         mockMvc.perform(delete("/deletePolicy").content(PolicyUtils.objectToJsonString(pep))
-                .contentType(MediaType.APPLICATION_JSON).headers(headers))
+                .contentType(MediaType.APPLICATION_JSON).headers(headers).header(UUIDHEADER, "test123"))
+                .andExpect(status().isBadRequest());
+        pep.setPolicyName("com.Config_test.1.xml");
+        mockMvc.perform(delete("/deletePolicy").content(PolicyUtils.objectToJsonString(pep))
+                .contentType(MediaType.APPLICATION_JSON).headers(headers).header(UUIDHEADER, "test123"))
+                .andExpect(status().isBadRequest());
+        pep.setPolicyName("testing. ");
+        mockMvc.perform(delete("/deletePolicy").content(PolicyUtils.objectToJsonString(pep))
+                .contentType(MediaType.APPLICATION_JSON).headers(headers).header(UUIDHEADER, "test123"))
                 .andExpect(status().isBadRequest());
         pep.setPolicyName("testscope.name");
+        mockMvc.perform(delete("/deletePolicy").content(PolicyUtils.objectToJsonString(pep))
+                .contentType(MediaType.APPLICATION_JSON).headers(headers)).andExpect(status().isBadRequest());
         pep.setPolicyType("wrong");
         pep.setRequestID(UUID.randomUUID());
         mockMvc.perform(delete("/deletePolicy").content(PolicyUtils.objectToJsonString(pep))
-                .contentType(MediaType.APPLICATION_JSON).headers(headers))
-                .andExpect(status().isBadRequest());
+                .contentType(MediaType.APPLICATION_JSON).headers(headers)).andExpect(status().isBadRequest());
         pep.setPolicyType("BRMS_PARAM");
         pep.setPolicyComponent("wrong");
         pep.setRequestID(null);
         mockMvc.perform(delete("/deletePolicy").content(PolicyUtils.objectToJsonString(pep))
-                .contentType(MediaType.APPLICATION_JSON).headers(headers))
-                .andExpect(status().isBadRequest());
+                .contentType(MediaType.APPLICATION_JSON).headers(headers)).andExpect(status().isBadRequest());
+        pep.setPolicyType("BRMS_PARAM");
+        pep.setPolicyComponent("PDP");
+        mockMvc.perform(delete("/deletePolicy").content(PolicyUtils.objectToJsonString(pep))
+                .contentType(MediaType.APPLICATION_JSON).headers(headers)).andExpect(status().isBadRequest());
         pep.setPolicyType("BRMS_RAW");
         pep.setPolicyComponent("PDP");
+        pep.setPolicyName("testscope.name");
         mockMvc.perform(delete("/deletePolicy").content(PolicyUtils.objectToJsonString(pep))
-                .contentType(MediaType.APPLICATION_JSON).headers(headers)
-                .header(UUIDHEADER, UUID.randomUUID())).andExpect(status().isBadRequest());
+                .contentType(MediaType.APPLICATION_JSON).headers(headers).header(UUIDHEADER, UUID.randomUUID()))
+                .andExpect(status().isBadRequest());
         pep.setPolicyType("MicroService");
-        pep.setPolicyComponent("PAP");
         mockMvc.perform(delete("/deletePolicy").content(PolicyUtils.objectToJsonString(pep))
-                .contentType(MediaType.APPLICATION_JSON).headers(headers)
-                .header(UUIDHEADER, UUID.randomUUID())).andExpect(status().isBadRequest());
+                .contentType(MediaType.APPLICATION_JSON).headers(headers).header(UUIDHEADER, UUID.randomUUID()))
+                .andExpect(status().isBadRequest());
+        pep.setPolicyType("Optimization");
+        mockMvc.perform(delete("/deletePolicy").content(PolicyUtils.objectToJsonString(pep))
+                .contentType(MediaType.APPLICATION_JSON).headers(headers).header(UUIDHEADER, UUID.randomUUID()))
+                .andExpect(status().isBadRequest());
         pep.setPolicyType("ClosedLoop_PM");
         pep.setPolicyComponent("PDP");
         pep.setDeleteCondition(DeletePolicyCondition.ALL);
         mockMvc.perform(delete("/deletePolicy").content(PolicyUtils.objectToJsonString(pep))
-                .contentType(MediaType.APPLICATION_JSON).headers(headers)
-                .header(UUIDHEADER, UUID.randomUUID())).andExpect(status().isBadRequest());
+                .contentType(MediaType.APPLICATION_JSON).headers(headers).header(UUIDHEADER, UUID.randomUUID()))
+                .andExpect(status().isBadRequest());
         pep.setPolicyType("ClosedLoop_Fault");
         pep.setDeleteCondition(DeletePolicyCondition.ONE);
+        pep.setPolicyName("test.test");
         mockMvc.perform(delete("/deletePolicy").content(PolicyUtils.objectToJsonString(pep))
-                .contentType(MediaType.APPLICATION_JSON).headers(headers)
-                .header(UUIDHEADER, UUID.randomUUID())).andExpect(status().isBadRequest());
+                .contentType(MediaType.APPLICATION_JSON).headers(headers).header(UUIDHEADER, UUID.randomUUID()))
+                .andExpect(status().isBadRequest());
         pep.setPolicyType("Base");
         pep.setPolicyComponent("PAP");
         mockMvc.perform(delete("/deletePolicy").content(PolicyUtils.objectToJsonString(pep))
-                .contentType(MediaType.APPLICATION_JSON).headers(headers)
-                .header(UUIDHEADER, UUID.randomUUID())).andExpect(status().isBadRequest());
+                .contentType(MediaType.APPLICATION_JSON).headers(headers).header(UUIDHEADER, UUID.randomUUID()))
+                .andExpect(status().isBadRequest());
         pep.setPolicyType("Decision");
         pep.setPolicyComponent("PDP");
-        pep.setPolicyName("test.xml");
+        pep.setPolicyName("test.test");
         mockMvc.perform(delete("/deletePolicy").content(PolicyUtils.objectToJsonString(pep))
-                .contentType(MediaType.APPLICATION_JSON).headers(headers)
-                .header(UUIDHEADER, UUID.randomUUID())).andExpect(status().isBadRequest());
+                .contentType(MediaType.APPLICATION_JSON).headers(headers).header(UUIDHEADER, UUID.randomUUID()))
+                .andExpect(status().isBadRequest());
         pep.setPolicyType("Action");
-        pep.setPolicyName("scope.Config_test.xml");
+        pep.setPolicyName("scope.test");
         mockMvc.perform(delete("/deletePolicy").content(PolicyUtils.objectToJsonString(pep))
-                .contentType(MediaType.APPLICATION_JSON).headers(headers)
-                .header(UUIDHEADER, UUID.randomUUID())).andExpect(status().isBadRequest());
+                .contentType(MediaType.APPLICATION_JSON).headers(headers).header(UUIDHEADER, UUID.randomUUID()))
+                .andExpect(status().isBadRequest());
         pep.setPdpGroup("default");
         mockMvc.perform(delete("/deletePolicy").content(PolicyUtils.objectToJsonString(pep))
-                .contentType(MediaType.APPLICATION_JSON).headers(headers)
-                .header(UUIDHEADER, UUID.randomUUID())).andExpect(status().isBadRequest());
+                .contentType(MediaType.APPLICATION_JSON).headers(headers).header(UUIDHEADER, UUID.randomUUID()))
+                .andExpect(status().isBadRequest());
         pep.setPolicyComponent("PAP");
         pep.setPolicyType("Firewall");
         pep.setDeleteCondition(null);
         mockMvc.perform(delete("/deletePolicy").content(PolicyUtils.objectToJsonString(pep))
-                .contentType(MediaType.APPLICATION_JSON).headers(headers)
-                .header(UUIDHEADER, UUID.randomUUID())).andExpect(status().isBadRequest());
+                .contentType(MediaType.APPLICATION_JSON).headers(headers).header(UUIDHEADER, UUID.randomUUID()))
+                .andExpect(status().isBadRequest());
         pep.setPolicyComponent("PAP");
         pep.setDeleteCondition(DeletePolicyCondition.ONE);
         mockMvc.perform(delete("/deletePolicy").content(PolicyUtils.objectToJsonString(pep))
-                .contentType(MediaType.APPLICATION_JSON).headers(headers)
-                .header(UUIDHEADER, UUID.randomUUID())).andExpect(status().isBadRequest());
+                .contentType(MediaType.APPLICATION_JSON).headers(headers).header(UUIDHEADER, UUID.randomUUID()))
+                .andExpect(status().isBadRequest());
         pep.setPolicyComponent("fail");
         mockMvc.perform(delete("/deletePolicy").content(PolicyUtils.objectToJsonString(pep))
-                .contentType(MediaType.APPLICATION_JSON).headers(headers)
-                .header(UUIDHEADER, UUID.randomUUID())).andExpect(status().isBadRequest());
+                .contentType(MediaType.APPLICATION_JSON).headers(headers).header(UUIDHEADER, UUID.randomUUID()))
+                .andExpect(status().isBadRequest());
         pep.setPolicyComponent("PDP");
         pep.setPolicyName("testscope.policyName");
         mockMvc.perform(delete("/deletePolicy").content(PolicyUtils.objectToJsonString(pep))
-                .contentType(MediaType.APPLICATION_JSON).headers(headers)
-                .header(UUIDHEADER, UUID.randomUUID())).andExpect(status().isBadRequest());
+                .contentType(MediaType.APPLICATION_JSON).headers(headers).header(UUIDHEADER, UUID.randomUUID()))
+                .andExpect(status().isBadRequest());
         pep.setPolicyComponent(null);
         mockMvc.perform(delete("/deletePolicy").content(PolicyUtils.objectToJsonString(pep))
-                .contentType(MediaType.APPLICATION_JSON).headers(headers)
-                .header(UUIDHEADER, UUID.randomUUID())).andExpect(status().isBadRequest());
+                .contentType(MediaType.APPLICATION_JSON).headers(headers).header(UUIDHEADER, UUID.randomUUID()))
+                .andExpect(status().isBadRequest());
+        pep.setPolicyComponent("PDP");
+        pep.setPolicyName("com.test1,com.test2");
+        pep.setPolicyType("Base,Base");
+        mockMvc.perform(delete("/deletePolicy").content(PolicyUtils.objectToJsonString(pep))
+                .contentType(MediaType.APPLICATION_JSON).headers(headers).header(UUIDHEADER, UUID.randomUUID()))
+                .andExpect(status().isBadRequest());
+        pep.setPolicyName("com.test1,com.test2");
+        pep.setPolicyType("Base,Base,  ");
+        mockMvc.perform(delete("/deletePolicy").content(PolicyUtils.objectToJsonString(pep))
+                .contentType(MediaType.APPLICATION_JSON).headers(headers).header(UUIDHEADER, UUID.randomUUID()))
+                .andExpect(status().isBadRequest());
+        pep.setPolicyName("com.test1,com.test2,  ");
+        pep.setPolicyType("Base,Base,  ");
+        mockMvc.perform(delete("/deletePolicy").content(PolicyUtils.objectToJsonString(pep))
+                .contentType(MediaType.APPLICATION_JSON).headers(headers).header(UUIDHEADER, UUID.randomUUID()))
+                .andExpect(status().isBadRequest());
+        pep.setPolicyComponent("PAP");
+        pep.setPolicyName("com.test1,com.test2");
+        pep.setPolicyType("Base,Base");
+        mockMvc.perform(delete("/deletePolicy").content(PolicyUtils.objectToJsonString(pep))
+                .contentType(MediaType.APPLICATION_JSON).headers(headers).header(UUIDHEADER, UUID.randomUUID()))
+                .andExpect(status().isBadRequest());
     }
 
     @Test
@@ -499,40 +526,38 @@ public class PolicyEngineServicesTest {
         // Service Tests.
         setCreateUpdateImpl();
         mockMvc.perform(put("/createPolicy").content(PolicyUtils.objectToJsonString(pep))
-                .contentType(MediaType.APPLICATION_JSON).headers(headers)
-                .header(UUIDHEADER, UUID.randomUUID())).andExpect(status().isBadRequest());
+                .contentType(MediaType.APPLICATION_JSON).headers(headers).header(UUIDHEADER, UUID.randomUUID()))
+                .andExpect(status().isBadRequest());
         pep.setPolicyName("failName");
         mockMvc.perform(put("/createPolicy").content(PolicyUtils.objectToJsonString(pep))
-                .contentType(MediaType.APPLICATION_JSON).headers(headers)
-                .header(UUIDHEADER, "test 123")).andExpect(status().isBadRequest());
+                .contentType(MediaType.APPLICATION_JSON).headers(headers).header(UUIDHEADER, "test 123"))
+                .andExpect(status().isBadRequest());
         pep.setPolicyName("test. name");
         mockMvc.perform(put("/createPolicy").content(PolicyUtils.objectToJsonString(pep))
-                .contentType(MediaType.APPLICATION_JSON).headers(headers))
-                .andExpect(status().isBadRequest());
+                .contentType(MediaType.APPLICATION_JSON).headers(headers)).andExpect(status().isBadRequest());
         pep.setPolicyName("   ");
         mockMvc.perform(put("/createPolicy").content(PolicyUtils.objectToJsonString(pep))
-                .contentType(MediaType.APPLICATION_JSON).headers(headers)
-                .header(UUIDHEADER, UUID.randomUUID())).andExpect(status().isBadRequest());
+                .contentType(MediaType.APPLICATION_JSON).headers(headers).header(UUIDHEADER, UUID.randomUUID()))
+                .andExpect(status().isBadRequest());
         pep.setPolicyName("test. ");
         mockMvc.perform(put("/createPolicy").content(PolicyUtils.objectToJsonString(pep))
-                .contentType(MediaType.APPLICATION_JSON).headers(headers)
-                .header(UUIDHEADER, UUID.randomUUID())).andExpect(status().isBadRequest());
+                .contentType(MediaType.APPLICATION_JSON).headers(headers).header(UUIDHEADER, UUID.randomUUID()))
+                .andExpect(status().isBadRequest());
         pep.setPolicyName("te st.name");
         mockMvc.perform(put("/createPolicy").content(PolicyUtils.objectToJsonString(pep))
-                .contentType(MediaType.APPLICATION_JSON).headers(headers)
-                .header(UUIDHEADER, UUID.randomUUID())).andExpect(status().isBadRequest());
+                .contentType(MediaType.APPLICATION_JSON).headers(headers).header(UUIDHEADER, UUID.randomUUID()))
+                .andExpect(status().isBadRequest());
         pep.setPolicyName("test.name");
         pep.setPolicyDescription("testá");
         mockMvc.perform(put("/createPolicy").content(PolicyUtils.objectToJsonString(pep))
-                .contentType(MediaType.APPLICATION_JSON).headers(headers)
-                .header(UUIDHEADER, UUID.randomUUID())).andExpect(status().isBadRequest());
+                .contentType(MediaType.APPLICATION_JSON).headers(headers).header(UUIDHEADER, UUID.randomUUID()))
+                .andExpect(status().isBadRequest());
         pep.setPolicyName("test.name");
         pep.setPolicyDescription("good");
         pep.setTtlDate(new Date());
         pep.setRequestID(UUID.randomUUID());
         mockMvc.perform(put("/createPolicy").content(PolicyUtils.objectToJsonString(pep))
-                .contentType(MediaType.APPLICATION_JSON).headers(headers))
-                .andExpect(status().isBadRequest());
+                .contentType(MediaType.APPLICATION_JSON).headers(headers)).andExpect(status().isBadRequest());
     }
 
     @Test
@@ -546,12 +571,10 @@ public class PolicyEngineServicesTest {
         // Checks for BRMS Param Policy.
         pep.setPolicyConfigType(PolicyConfigType.BRMS_PARAM);
         mockMvc.perform(put("/createPolicy").content(PolicyUtils.objectToJsonString(pep))
-                .contentType(MediaType.APPLICATION_JSON).headers(headers))
-                .andExpect(status().isBadRequest());
+                .contentType(MediaType.APPLICATION_JSON).headers(headers)).andExpect(status().isBadRequest());
         pep.setRiskLevel("test");
         mockMvc.perform(put("/createPolicy").content(PolicyUtils.objectToJsonString(pep))
-                .contentType(MediaType.APPLICATION_JSON).headers(headers))
-                .andExpect(status().isBadRequest());
+                .contentType(MediaType.APPLICATION_JSON).headers(headers)).andExpect(status().isBadRequest());
         Map<AttributeType, Map<String, String>> attributes = new HashMap<>();
         Map<String, String> matching = new HashMap<>();
         matching.put("key", "value");
@@ -559,38 +582,30 @@ public class PolicyEngineServicesTest {
         pep.setAttributes(attributes);
         pep.setRiskLevel("5");
         mockMvc.perform(put("/createPolicy").content(PolicyUtils.objectToJsonString(pep))
-                .contentType(MediaType.APPLICATION_JSON).headers(headers))
-                .andExpect(status().isBadRequest());
+                .contentType(MediaType.APPLICATION_JSON).headers(headers)).andExpect(status().isBadRequest());
         mockMvc.perform(put("/updatePolicy").content(PolicyUtils.objectToJsonString(pep))
-                .contentType(MediaType.APPLICATION_JSON).headers(headers))
-                .andExpect(status().isBadRequest());
+                .contentType(MediaType.APPLICATION_JSON).headers(headers)).andExpect(status().isBadRequest());
         // Checks for BRMS Raw Policy
         pep.setPolicyConfigType(PolicyConfigType.BRMS_RAW);
         mockMvc.perform(put("/createPolicy").content(PolicyUtils.objectToJsonString(pep))
-                .contentType(MediaType.APPLICATION_JSON).headers(headers))
-                .andExpect(status().isBadRequest());
+                .contentType(MediaType.APPLICATION_JSON).headers(headers)).andExpect(status().isBadRequest());
         pep.setConfigBody("test");
         mockMvc.perform(put("/createPolicy").content(PolicyUtils.objectToJsonString(pep))
-                .contentType(MediaType.APPLICATION_JSON).headers(headers))
-                .andExpect(status().isBadRequest());
+                .contentType(MediaType.APPLICATION_JSON).headers(headers)).andExpect(status().isBadRequest());
         pep.setRiskLevel(null);
-        pep.setConfigBody(
-                "package droolsexample\n\n import com.sample.ItemCity;\nimport java.math.BigDecimal;\n"
-                        + "rule \"Nagpur Medicine Item\"\n\n   when\n"
-                        + "      item : ItemCity(purchaseCity == ItemCity.City.NAGPUR,\n"
-                        + "         typeofItem == ItemCity.Type.MEDICINES)\n   then\n"
-                        + "      BigDecimal tax = new BigDecimal(0.0);\n"
-                        + "      item.setLocalTax(tax.multiply(item.getSellPrice()));\nend");
-        mockMvc.perform(put("/createPolicy").content(PolicyUtils.objectToJsonString(pep))
-                .contentType(MediaType.APPLICATION_JSON).headers(headers))
-                .andExpect(status().isBadRequest());
+        pep.setConfigBody("package droolsexample\n\n import com.sample.ItemCity;\nimport java.math.BigDecimal;\n"
+                + "rule \"Nagpur Medicine Item\"\n\n   when\n"
+                + "      item : ItemCity(purchaseCity == ItemCity.City.NAGPUR,\n"
+                + "         typeofItem == ItemCity.Type.MEDICINES)\n   then\n"
+                + "      BigDecimal tax = new BigDecimal(0.0);\n"
+                + "      item.setLocalTax(tax.multiply(item.getSellPrice()));\nend");
+        mockMvc.perform(put("/createPolicy").content(PolicyUtils.objectToJsonString(pep))
+                .contentType(MediaType.APPLICATION_JSON).headers(headers)).andExpect(status().isBadRequest());
         pep.setRiskLevel("5");
         mockMvc.perform(put("/createPolicy").content(PolicyUtils.objectToJsonString(pep))
-                .contentType(MediaType.APPLICATION_JSON).headers(headers))
-                .andExpect(status().isBadRequest());
+                .contentType(MediaType.APPLICATION_JSON).headers(headers)).andExpect(status().isBadRequest());
         mockMvc.perform(put("/updatePolicy").content(PolicyUtils.objectToJsonString(pep))
-                .contentType(MediaType.APPLICATION_JSON).headers(headers))
-                .andExpect(status().isBadRequest());
+                .contentType(MediaType.APPLICATION_JSON).headers(headers)).andExpect(status().isBadRequest());
     }
 
     @Test
@@ -604,39 +619,31 @@ public class PolicyEngineServicesTest {
         // Checks for Base config Policy.
         pep.setPolicyConfigType(PolicyConfigType.Base);
         mockMvc.perform(put("/createPolicy").content(PolicyUtils.objectToJsonString(pep))
-                .contentType(MediaType.APPLICATION_JSON).headers(headers))
-                .andExpect(status().isBadRequest());
+                .contentType(MediaType.APPLICATION_JSON).headers(headers)).andExpect(status().isBadRequest());
         pep.setConfigBody("testbody");
         mockMvc.perform(put("/createPolicy").content(PolicyUtils.objectToJsonString(pep))
-                .contentType(MediaType.APPLICATION_JSON).headers(headers))
-                .andExpect(status().isBadRequest());
+                .contentType(MediaType.APPLICATION_JSON).headers(headers)).andExpect(status().isBadRequest());
         pep.setConfigBodyType(PolicyType.OTHER);
         pep.setRiskLevel("test");
         mockMvc.perform(put("/createPolicy").content(PolicyUtils.objectToJsonString(pep))
-                .contentType(MediaType.APPLICATION_JSON).headers(headers))
-                .andExpect(status().isBadRequest());
+                .contentType(MediaType.APPLICATION_JSON).headers(headers)).andExpect(status().isBadRequest());
         pep.setRiskLevel("4");
         mockMvc.perform(put("/createPolicy").content(PolicyUtils.objectToJsonString(pep))
-                .contentType(MediaType.APPLICATION_JSON).headers(headers))
-                .andExpect(status().isBadRequest());
+                .contentType(MediaType.APPLICATION_JSON).headers(headers)).andExpect(status().isBadRequest());
         pep.setOnapName("ec nam-e");
         mockMvc.perform(put("/createPolicy").content(PolicyUtils.objectToJsonString(pep))
-                .contentType(MediaType.APPLICATION_JSON).headers(headers))
-                .andExpect(status().isBadRequest());
+                .contentType(MediaType.APPLICATION_JSON).headers(headers)).andExpect(status().isBadRequest());
         pep.setOnapName("onapName");
         pep.setConfigName("tes config");
         mockMvc.perform(put("/createPolicy").content(PolicyUtils.objectToJsonString(pep))
-                .contentType(MediaType.APPLICATION_JSON).headers(headers))
-                .andExpect(status().isBadRequest());
+                .contentType(MediaType.APPLICATION_JSON).headers(headers)).andExpect(status().isBadRequest());
         pep.setConfigName("configName");
         mockMvc.perform(put("/createPolicy").content(PolicyUtils.objectToJsonString(pep))
-                .contentType(MediaType.APPLICATION_JSON).headers(headers))
-                .andExpect(status().isBadRequest());
+                .contentType(MediaType.APPLICATION_JSON).headers(headers)).andExpect(status().isBadRequest());
         pep.setConfigBody("{'test':'test}");
         pep.setConfigBodyType(PolicyType.JSON);
         mockMvc.perform(put("/updatePolicy").content(PolicyUtils.objectToJsonString(pep))
-                .contentType(MediaType.APPLICATION_JSON).headers(headers))
-                .andExpect(status().isBadRequest());
+                .contentType(MediaType.APPLICATION_JSON).headers(headers)).andExpect(status().isBadRequest());
         Map<AttributeType, Map<String, String>> attributes = new HashMap<>();
         Map<String, String> matching = new HashMap<>();
         matching.put("key", "value");
@@ -644,8 +651,7 @@ public class PolicyEngineServicesTest {
         pep.setAttributes(attributes);
         pep.setConfigBody("testBody");
         mockMvc.perform(put("/createPolicy").content(PolicyUtils.objectToJsonString(pep))
-                .contentType(MediaType.APPLICATION_JSON).headers(headers))
-                .andExpect(status().isBadRequest());
+                .contentType(MediaType.APPLICATION_JSON).headers(headers)).andExpect(status().isBadRequest());
     }
 
     @Test
@@ -659,39 +665,30 @@ public class PolicyEngineServicesTest {
         // Checks for Closed loop Policy.
         pep.setPolicyConfigType(PolicyConfigType.ClosedLoop_Fault);
         mockMvc.perform(put("/createPolicy").content(PolicyUtils.objectToJsonString(pep))
-                .contentType(MediaType.APPLICATION_JSON).headers(headers))
-                .andExpect(status().isBadRequest());
+                .contentType(MediaType.APPLICATION_JSON).headers(headers)).andExpect(status().isBadRequest());
         pep.setConfigBody("te stá");
         mockMvc.perform(put("/createPolicy").content(PolicyUtils.objectToJsonString(pep))
-                .contentType(MediaType.APPLICATION_JSON).headers(headers))
-                .andExpect(status().isBadRequest());
+                .contentType(MediaType.APPLICATION_JSON).headers(headers)).andExpect(status().isBadRequest());
         pep.setConfigBody("testBody");
         mockMvc.perform(put("/createPolicy").content(PolicyUtils.objectToJsonString(pep))
-                .contentType(MediaType.APPLICATION_JSON).headers(headers))
-                .andExpect(status().isBadRequest());
+                .contentType(MediaType.APPLICATION_JSON).headers(headers)).andExpect(status().isBadRequest());
         pep.setConfigBody("{\"key\":\"value\"}");
         mockMvc.perform(put("/createPolicy").content(PolicyUtils.objectToJsonString(pep))
-                .contentType(MediaType.APPLICATION_JSON).headers(headers))
-                .andExpect(status().isBadRequest());
+                .contentType(MediaType.APPLICATION_JSON).headers(headers)).andExpect(status().isBadRequest());
         pep.setConfigBody("{\"onapname\":\"\"}");
         mockMvc.perform(put("/createPolicy").content(PolicyUtils.objectToJsonString(pep))
-                .contentType(MediaType.APPLICATION_JSON).headers(headers))
-                .andExpect(status().isBadRequest());
+                .contentType(MediaType.APPLICATION_JSON).headers(headers)).andExpect(status().isBadRequest());
         pep.setConfigBody("{\"onapname\":\"test\"}");
         mockMvc.perform(put("/createPolicy").content(PolicyUtils.objectToJsonString(pep))
-                .contentType(MediaType.APPLICATION_JSON).headers(headers))
-                .andExpect(status().isBadRequest());
+                .contentType(MediaType.APPLICATION_JSON).headers(headers)).andExpect(status().isBadRequest());
         pep.setRiskLevel("test");
         mockMvc.perform(put("/createPolicy").content(PolicyUtils.objectToJsonString(pep))
-                .contentType(MediaType.APPLICATION_JSON).headers(headers))
-                .andExpect(status().isBadRequest());
+                .contentType(MediaType.APPLICATION_JSON).headers(headers)).andExpect(status().isBadRequest());
         pep.setRiskLevel("4");
         mockMvc.perform(put("/createPolicy").content(PolicyUtils.objectToJsonString(pep))
-                .contentType(MediaType.APPLICATION_JSON).headers(headers))
-                .andExpect(status().isBadRequest());
+                .contentType(MediaType.APPLICATION_JSON).headers(headers)).andExpect(status().isBadRequest());
         mockMvc.perform(put("/updatePolicy").content(PolicyUtils.objectToJsonString(pep))
-                .contentType(MediaType.APPLICATION_JSON).headers(headers))
-                .andExpect(status().isBadRequest());
+                .contentType(MediaType.APPLICATION_JSON).headers(headers)).andExpect(status().isBadRequest());
     }
 
     @Test
@@ -705,46 +702,35 @@ public class PolicyEngineServicesTest {
         // Checks for Closed loop Policy.
         pep.setPolicyConfigType(PolicyConfigType.ClosedLoop_PM);
         mockMvc.perform(put("/createPolicy").content(PolicyUtils.objectToJsonString(pep))
-                .contentType(MediaType.APPLICATION_JSON).headers(headers))
-                .andExpect(status().isBadRequest());
+                .contentType(MediaType.APPLICATION_JSON).headers(headers)).andExpect(status().isBadRequest());
         mockMvc.perform(put("/createPolicy").content(PolicyUtils.objectToJsonString(pep))
-                .contentType(MediaType.APPLICATION_JSON).headers(headers))
-                .andExpect(status().isBadRequest());
+                .contentType(MediaType.APPLICATION_JSON).headers(headers)).andExpect(status().isBadRequest());
         pep.setConfigBody("te stá");
         mockMvc.perform(put("/createPolicy").content(PolicyUtils.objectToJsonString(pep))
-                .contentType(MediaType.APPLICATION_JSON).headers(headers))
-                .andExpect(status().isBadRequest());
+                .contentType(MediaType.APPLICATION_JSON).headers(headers)).andExpect(status().isBadRequest());
         pep.setConfigBody("testBody");
         mockMvc.perform(put("/createPolicy").content(PolicyUtils.objectToJsonString(pep))
-                .contentType(MediaType.APPLICATION_JSON).headers(headers))
-                .andExpect(status().isBadRequest());
+                .contentType(MediaType.APPLICATION_JSON).headers(headers)).andExpect(status().isBadRequest());
         pep.setConfigBody("{\"key\":\"value\"}");
         mockMvc.perform(put("/createPolicy").content(PolicyUtils.objectToJsonString(pep))
-                .contentType(MediaType.APPLICATION_JSON).headers(headers))
-                .andExpect(status().isBadRequest());
+                .contentType(MediaType.APPLICATION_JSON).headers(headers)).andExpect(status().isBadRequest());
         pep.setConfigBody("{\"onapname\":\"\"}");
         mockMvc.perform(put("/createPolicy").content(PolicyUtils.objectToJsonString(pep))
-                .contentType(MediaType.APPLICATION_JSON).headers(headers))
-                .andExpect(status().isBadRequest());
+                .contentType(MediaType.APPLICATION_JSON).headers(headers)).andExpect(status().isBadRequest());
         pep.setConfigBody("{\"onapname\":\"test\"}");
         mockMvc.perform(put("/createPolicy").content(PolicyUtils.objectToJsonString(pep))
-                .contentType(MediaType.APPLICATION_JSON).headers(headers))
-                .andExpect(status().isBadRequest());
+                .contentType(MediaType.APPLICATION_JSON).headers(headers)).andExpect(status().isBadRequest());
         pep.setConfigBody("{\"onapname\":\"test\", \"serviceTypePolicyName\":\"value\"}");
         mockMvc.perform(put("/createPolicy").content(PolicyUtils.objectToJsonString(pep))
-                .contentType(MediaType.APPLICATION_JSON).headers(headers))
-                .andExpect(status().isBadRequest());
+                .contentType(MediaType.APPLICATION_JSON).headers(headers)).andExpect(status().isBadRequest());
         pep.setRiskLevel("test");
         mockMvc.perform(put("/createPolicy").content(PolicyUtils.objectToJsonString(pep))
-                .contentType(MediaType.APPLICATION_JSON).headers(headers))
-                .andExpect(status().isBadRequest());
+                .contentType(MediaType.APPLICATION_JSON).headers(headers)).andExpect(status().isBadRequest());
         pep.setRiskLevel("4");
         mockMvc.perform(put("/createPolicy").content(PolicyUtils.objectToJsonString(pep))
-                .contentType(MediaType.APPLICATION_JSON).headers(headers))
-                .andExpect(status().isBadRequest());
+                .contentType(MediaType.APPLICATION_JSON).headers(headers)).andExpect(status().isBadRequest());
         mockMvc.perform(put("/updatePolicy").content(PolicyUtils.objectToJsonString(pep))
-                .contentType(MediaType.APPLICATION_JSON).headers(headers))
-                .andExpect(status().isBadRequest());
+                .contentType(MediaType.APPLICATION_JSON).headers(headers)).andExpect(status().isBadRequest());
     }
 
     @Test
@@ -758,32 +744,25 @@ public class PolicyEngineServicesTest {
         // Checks for Closed loop Policy.
         pep.setPolicyConfigType(PolicyConfigType.Firewall);
         mockMvc.perform(put("/createPolicy").content(PolicyUtils.objectToJsonString(pep))
-                .contentType(MediaType.APPLICATION_JSON).headers(headers))
-                .andExpect(status().isBadRequest());
+                .contentType(MediaType.APPLICATION_JSON).headers(headers)).andExpect(status().isBadRequest());
         pep.setConfigBody("te st");
         mockMvc.perform(put("/createPolicy").content(PolicyUtils.objectToJsonString(pep))
-                .contentType(MediaType.APPLICATION_JSON).headers(headers))
-                .andExpect(status().isBadRequest());
+                .contentType(MediaType.APPLICATION_JSON).headers(headers)).andExpect(status().isBadRequest());
         pep.setConfigBody("{}");
         mockMvc.perform(put("/createPolicy").content(PolicyUtils.objectToJsonString(pep))
-                .contentType(MediaType.APPLICATION_JSON).headers(headers))
-                .andExpect(status().isBadRequest());
+                .contentType(MediaType.APPLICATION_JSON).headers(headers)).andExpect(status().isBadRequest());
         pep.setConfigBody("{\"test\":\"test\"}");
         pep.setRiskLevel("test");
         mockMvc.perform(put("/createPolicy").content(PolicyUtils.objectToJsonString(pep))
-                .contentType(MediaType.APPLICATION_JSON).headers(headers))
-                .andExpect(status().isBadRequest());
+                .contentType(MediaType.APPLICATION_JSON).headers(headers)).andExpect(status().isBadRequest());
         pep.setRiskLevel("4");
         mockMvc.perform(put("/createPolicy").content(PolicyUtils.objectToJsonString(pep))
-                .contentType(MediaType.APPLICATION_JSON).headers(headers))
-                .andExpect(status().isBadRequest());
+                .contentType(MediaType.APPLICATION_JSON).headers(headers)).andExpect(status().isBadRequest());
         pep.setConfigBody("{\"configName\":\"test\"}");
         mockMvc.perform(put("/createPolicy").content(PolicyUtils.objectToJsonString(pep))
-                .contentType(MediaType.APPLICATION_JSON).headers(headers))
-                .andExpect(status().isBadRequest());
+                .contentType(MediaType.APPLICATION_JSON).headers(headers)).andExpect(status().isBadRequest());
         mockMvc.perform(put("/updatePolicy").content(PolicyUtils.objectToJsonString(pep))
-                .contentType(MediaType.APPLICATION_JSON).headers(headers))
-                .andExpect(status().isBadRequest());
+                .contentType(MediaType.APPLICATION_JSON).headers(headers)).andExpect(status().isBadRequest());
     }
 
     @Test
@@ -797,36 +776,28 @@ public class PolicyEngineServicesTest {
         // Checks for Closed loop Policy.
         pep.setPolicyConfigType(PolicyConfigType.MicroService);
         mockMvc.perform(put("/createPolicy").content(PolicyUtils.objectToJsonString(pep))
-                .contentType(MediaType.APPLICATION_JSON).headers(headers))
-                .andExpect(status().isBadRequest());
+                .contentType(MediaType.APPLICATION_JSON).headers(headers)).andExpect(status().isBadRequest());
         pep.setConfigBody("te st");
         mockMvc.perform(put("/createPolicy").content(PolicyUtils.objectToJsonString(pep))
-                .contentType(MediaType.APPLICATION_JSON).headers(headers))
-                .andExpect(status().isBadRequest());
+                .contentType(MediaType.APPLICATION_JSON).headers(headers)).andExpect(status().isBadRequest());
         pep.setConfigBody("{}");
         mockMvc.perform(put("/createPolicy").content(PolicyUtils.objectToJsonString(pep))
-                .contentType(MediaType.APPLICATION_JSON).headers(headers))
-                .andExpect(status().isBadRequest());
+                .contentType(MediaType.APPLICATION_JSON).headers(headers)).andExpect(status().isBadRequest());
         pep.setConfigBody("{\"test\":\"test\"}");
         pep.setOnapName("   ");
         mockMvc.perform(put("/createPolicy").content(PolicyUtils.objectToJsonString(pep))
-                .contentType(MediaType.APPLICATION_JSON).headers(headers))
-                .andExpect(status().isBadRequest());
+                .contentType(MediaType.APPLICATION_JSON).headers(headers)).andExpect(status().isBadRequest());
         pep.setOnapName("testonap");
         pep.setRiskLevel("fail");
         mockMvc.perform(put("/createPolicy").content(PolicyUtils.objectToJsonString(pep))
-                .contentType(MediaType.APPLICATION_JSON).headers(headers))
-                .andExpect(status().isBadRequest());
+                .contentType(MediaType.APPLICATION_JSON).headers(headers)).andExpect(status().isBadRequest());
         pep.setRiskLevel("4");
         mockMvc.perform(put("/createPolicy").content(PolicyUtils.objectToJsonString(pep))
-                .contentType(MediaType.APPLICATION_JSON).headers(headers))
-                .andExpect(status().isBadRequest());
-        pep.setConfigBody(
-                "{\"service\":\"test\",\"uuid\":\"test\",\"location\":\"test\",\"configName\":\"test\","
-                        + "\"description\":\"test\",\"priority\":\"test\",\"version\":\"test\"}");
+                .contentType(MediaType.APPLICATION_JSON).headers(headers)).andExpect(status().isBadRequest());
+        pep.setConfigBody("{\"service\":\"test\",\"uuid\":\"test\",\"location\":\"test\",\"configName\":\"test\","
+                + "\"description\":\"test\",\"priority\":\"test\",\"version\":\"test\"}");
         mockMvc.perform(put("/updatePolicy").content(PolicyUtils.objectToJsonString(pep))
-                .contentType(MediaType.APPLICATION_JSON).headers(headers))
-                .andExpect(status().isBadRequest());
+                .contentType(MediaType.APPLICATION_JSON).headers(headers)).andExpect(status().isBadRequest());
     }
 
     @Test
@@ -840,63 +811,50 @@ public class PolicyEngineServicesTest {
         // Checks for action Policy.
         pep.setPolicyClass(PolicyClass.Action);
         mockMvc.perform(put("/createPolicy").content(PolicyUtils.objectToJsonString(pep))
-                .contentType(MediaType.APPLICATION_JSON).headers(headers))
-                .andExpect(status().isBadRequest());
+                .contentType(MediaType.APPLICATION_JSON).headers(headers)).andExpect(status().isBadRequest());
         Map<AttributeType, Map<String, String>> attributes = new HashMap<>();
         pep.setAttributes(attributes);
         mockMvc.perform(put("/createPolicy").content(PolicyUtils.objectToJsonString(pep))
-                .contentType(MediaType.APPLICATION_JSON).headers(headers))
-                .andExpect(status().isBadRequest());
+                .contentType(MediaType.APPLICATION_JSON).headers(headers)).andExpect(status().isBadRequest());
         attributes.put(AttributeType.MATCHING, new HashMap<>());
         pep.setAttributes(attributes);
         mockMvc.perform(put("/createPolicy").content(PolicyUtils.objectToJsonString(pep))
-                .contentType(MediaType.APPLICATION_JSON).headers(headers))
-                .andExpect(status().isBadRequest());
+                .contentType(MediaType.APPLICATION_JSON).headers(headers)).andExpect(status().isBadRequest());
         Map<String, String> matching = new HashMap<>();
         matching.put("key", "value");
         attributes.put(AttributeType.MATCHING, matching);
         pep.setAttributes(attributes);
         mockMvc.perform(put("/createPolicy").content(PolicyUtils.objectToJsonString(pep))
-                .contentType(MediaType.APPLICATION_JSON).headers(headers))
-                .andExpect(status().isBadRequest());
+                .contentType(MediaType.APPLICATION_JSON).headers(headers)).andExpect(status().isBadRequest());
         pep.setActionAttribute("A1");
         mockMvc.perform(put("/createPolicy").content(PolicyUtils.objectToJsonString(pep))
-                .contentType(MediaType.APPLICATION_JSON).headers(headers))
-                .andExpect(status().isBadRequest());
+                .contentType(MediaType.APPLICATION_JSON).headers(headers)).andExpect(status().isBadRequest());
         pep.setActionPerformer("PEX");
         mockMvc.perform(put("/createPolicy").content(PolicyUtils.objectToJsonString(pep))
-                .contentType(MediaType.APPLICATION_JSON).headers(headers))
-                .andExpect(status().isBadRequest());
+                .contentType(MediaType.APPLICATION_JSON).headers(headers)).andExpect(status().isBadRequest());
         pep.setActionPerformer("PEP");
         mockMvc.perform(put("/createPolicy").content(PolicyUtils.objectToJsonString(pep))
-                .contentType(MediaType.APPLICATION_JSON).headers(headers))
-                .andExpect(status().isBadRequest());
+                .contentType(MediaType.APPLICATION_JSON).headers(headers)).andExpect(status().isBadRequest());
         mockMvc.perform(put("/updatePolicy").content(PolicyUtils.objectToJsonString(pep))
-                .contentType(MediaType.APPLICATION_JSON).headers(headers))
-                .andExpect(status().isBadRequest());
+                .contentType(MediaType.APPLICATION_JSON).headers(headers)).andExpect(status().isBadRequest());
         // Checks for Decision Policy.
         pep.setPolicyClass(PolicyClass.Decision);
         mockMvc.perform(put("/createPolicy").content(PolicyUtils.objectToJsonString(pep))
-                .contentType(MediaType.APPLICATION_JSON).headers(headers))
-                .andExpect(status().isBadRequest());
+                .contentType(MediaType.APPLICATION_JSON).headers(headers)).andExpect(status().isBadRequest());
         pep.setOnapName("xyz");
         mockMvc.perform(put("/createPolicy").content(PolicyUtils.objectToJsonString(pep))
-                .contentType(MediaType.APPLICATION_JSON).headers(headers))
-                .andExpect(status().isBadRequest());
+                .contentType(MediaType.APPLICATION_JSON).headers(headers)).andExpect(status().isBadRequest());
         attributes.remove(AttributeType.MATCHING);
         attributes.put(AttributeType.SETTINGS, matching);
         pep.setAttributes(attributes);
         mockMvc.perform(put("/createPolicy").content(PolicyUtils.objectToJsonString(pep))
-                .contentType(MediaType.APPLICATION_JSON).headers(headers))
-                .andExpect(status().isBadRequest());
+                .contentType(MediaType.APPLICATION_JSON).headers(headers)).andExpect(status().isBadRequest());
         attributes.put(AttributeType.MATCHING, matching);
         pep.setAttributes(attributes);
         mockMvc.perform(put("/createPolicy").content(PolicyUtils.objectToJsonString(pep))
-                .contentType(MediaType.APPLICATION_JSON).headers(headers))
-                .andExpect(status().isBadRequest());
+                .contentType(MediaType.APPLICATION_JSON).headers(headers)).andExpect(status().isBadRequest());
         mockMvc.perform(put("/updatePolicy").content(PolicyUtils.objectToJsonString(pep))
-                .contentType(MediaType.APPLICATION_JSON).headers(headers))
-                .andExpect(status().isBadRequest());
+                .contentType(MediaType.APPLICATION_JSON).headers(headers)).andExpect(status().isBadRequest());
     }
 
     @Test
@@ -912,32 +870,29 @@ public class PolicyEngineServicesTest {
                 .andExpect(status().isUnauthorized());
         // Service Tests.
         mockMvc.perform(put("/createDictionaryItem").content(PolicyUtils.objectToJsonString(pep))
-                .contentType(MediaType.APPLICATION_JSON).headers(headers)
-                .header(UUIDHEADER, "tes123")).andExpect(status().isBadRequest());
+                .contentType(MediaType.APPLICATION_JSON).headers(headers).header(UUIDHEADER, "tes123"))
+                .andExpect(status().isBadRequest());
         pep.setDictionaryType(DictionaryType.MicroService);
         mockMvc.perform(put("/createDictionaryItem").content(PolicyUtils.objectToJsonString(pep))
-                .contentType(MediaType.APPLICATION_JSON).headers(headers))
-                .andExpect(status().isBadRequest());
+                .contentType(MediaType.APPLICATION_JSON).headers(headers)).andExpect(status().isBadRequest());
         mockMvc.perform(put("/createDictionaryItem").content(PolicyUtils.objectToJsonString(pep))
-                .contentType(MediaType.APPLICATION_JSON).headers(headers)
-                .header(UUIDHEADER, UUID.randomUUID())).andExpect(status().isBadRequest());
+                .contentType(MediaType.APPLICATION_JSON).headers(headers).header(UUIDHEADER, UUID.randomUUID()))
+                .andExpect(status().isBadRequest());
         pep.setDictionary("test dict");
         pep.setRequestID(UUID.randomUUID());
         mockMvc.perform(put("/createDictionaryItem").content(PolicyUtils.objectToJsonString(pep))
-                .contentType(MediaType.APPLICATION_JSON).headers(headers))
-                .andExpect(status().isBadRequest());
+                .contentType(MediaType.APPLICATION_JSON).headers(headers)).andExpect(status().isBadRequest());
         pep.setDictionaryJson("{\"test\":\"value\"}");
         mockMvc.perform(put("/createDictionaryItem").content(PolicyUtils.objectToJsonString(pep))
-                .contentType(MediaType.APPLICATION_JSON).headers(headers)
-                .header(UUIDHEADER, UUID.randomUUID())).andExpect(status().isBadRequest());
+                .contentType(MediaType.APPLICATION_JSON).headers(headers).header(UUIDHEADER, UUID.randomUUID()))
+                .andExpect(status().isBadRequest());
         pep.setDictionaryJson("test123");
         mockMvc.perform(put("/updateDictionaryItem").content(PolicyUtils.objectToJsonString(pep))
                 .contentType(MediaType.APPLICATION_JSON).headers(headers).header(UUIDHEADER, "123"))
                 .andExpect(status().isBadRequest());
         pep.setDictionary("MicroServiceDictionary");
         mockMvc.perform(put("/createDictionaryItem").content(PolicyUtils.objectToJsonString(pep))
-                .contentType(MediaType.APPLICATION_JSON).headers(headers))
-                .andExpect(status().isBadRequest());
+                .contentType(MediaType.APPLICATION_JSON).headers(headers)).andExpect(status().isBadRequest());
     }
 
     @Test
@@ -950,21 +905,18 @@ public class PolicyEngineServicesTest {
                 .andExpect(status().isUnauthorized());
         // Service Tests.
         mockMvc.perform(post("/getDictionaryItems").content(PolicyUtils.objectToJsonString(pep))
-                .contentType(MediaType.APPLICATION_JSON).headers(headers)
-                .header(UUIDHEADER, "tes123")).andExpect(status().isBadRequest());
+                .contentType(MediaType.APPLICATION_JSON).headers(headers).header(UUIDHEADER, "tes123"))
+                .andExpect(status().isBadRequest());
         pep.setDictionaryType(DictionaryType.Common);
         mockMvc.perform(post("/getDictionaryItems").content(PolicyUtils.objectToJsonString(pep))
                 .contentType(MediaType.APPLICATION_JSON).headers(headers)
-                .header(UUIDHEADER, UUID.randomUUID().toString()))
-                .andExpect(status().isBadRequest());
+                .header(UUIDHEADER, UUID.randomUUID().toString())).andExpect(status().isBadRequest());
         pep.setDictionary("OnapName");
         mockMvc.perform(post("/getDictionaryItems").content(PolicyUtils.objectToJsonString(pep))
-                .contentType(MediaType.APPLICATION_JSON).headers(headers))
-                .andExpect(status().isBadRequest());
+                .contentType(MediaType.APPLICATION_JSON).headers(headers)).andExpect(status().isBadRequest());
         pep.setRequestID(UUID.randomUUID());
         mockMvc.perform(post("/getDictionaryItems").content(PolicyUtils.objectToJsonString(pep))
-                .contentType(MediaType.APPLICATION_JSON).headers(headers))
-                .andExpect(status().isBadRequest());
+                .contentType(MediaType.APPLICATION_JSON).headers(headers)).andExpect(status().isBadRequest());
     }
 
     @Test
@@ -986,24 +938,24 @@ public class PolicyEngineServicesTest {
                 .andExpect(status().isUnauthorized());
         // Service Tests.
         mockMvc.perform(put("/createConfig").content(PolicyUtils.objectToJsonString(pep))
-                .contentType(MediaType.APPLICATION_JSON).headers(headers)
-                .header(UUIDHEADER, "tes123")).andExpect(status().isBadRequest());
+                .contentType(MediaType.APPLICATION_JSON).headers(headers).header(UUIDHEADER, "tes123"))
+                .andExpect(status().isBadRequest());
         pep.setPolicyScope("test");
         mockMvc.perform(put("/createConfig").content(PolicyUtils.objectToJsonString(pep))
-                .contentType(MediaType.APPLICATION_JSON).headers(headers)
-                .header(UUIDHEADER, "tes123")).andExpect(status().isBadRequest());
+                .contentType(MediaType.APPLICATION_JSON).headers(headers).header(UUIDHEADER, "tes123"))
+                .andExpect(status().isBadRequest());
         pep.setPolicyName("name");
         mockMvc.perform(put("/createConfig").content(PolicyUtils.objectToJsonString(pep))
-                .contentType(MediaType.APPLICATION_JSON).headers(headers)
-                .header(UUIDHEADER, "tes123")).andExpect(status().isBadRequest());
+                .contentType(MediaType.APPLICATION_JSON).headers(headers).header(UUIDHEADER, "tes123"))
+                .andExpect(status().isBadRequest());
         pep.setConfigType("OTHER");
         mockMvc.perform(put("/createConfig").content(PolicyUtils.objectToJsonString(pep))
-                .contentType(MediaType.APPLICATION_JSON).headers(headers)
-                .header(UUIDHEADER, "tes123")).andExpect(status().isBadRequest());
+                .contentType(MediaType.APPLICATION_JSON).headers(headers).header(UUIDHEADER, "tes123"))
+                .andExpect(status().isBadRequest());
         pep.setTtlDate(new Date().toString());
         mockMvc.perform(put("/updateConfig").content(PolicyUtils.objectToJsonString(pep))
-                .contentType(MediaType.APPLICATION_JSON).headers(headers)
-                .header(UUIDHEADER, "tes123")).andExpect(status().isBadRequest());
+                .contentType(MediaType.APPLICATION_JSON).headers(headers).header(UUIDHEADER, "tes123"))
+                .andExpect(status().isBadRequest());
     }
 
     @Test
@@ -1019,26 +971,25 @@ public class PolicyEngineServicesTest {
                 .andExpect(status().isUnauthorized());
         // Service Tests.
         mockMvc.perform(put("/createFirewallConfig").content(PolicyUtils.objectToJsonString(pep))
-                .contentType(MediaType.APPLICATION_JSON).headers(headers)
-                .header(UUIDHEADER, "tes123")).andExpect(status().isBadRequest());
+                .contentType(MediaType.APPLICATION_JSON).headers(headers).header(UUIDHEADER, "tes123"))
+                .andExpect(status().isBadRequest());
         pep.setPolicyScope("test");
         mockMvc.perform(put("/createFirewallConfig").content(PolicyUtils.objectToJsonString(pep))
-                .contentType(MediaType.APPLICATION_JSON).headers(headers)
-                .header(UUIDHEADER, "tes123")).andExpect(status().isBadRequest());
+                .contentType(MediaType.APPLICATION_JSON).headers(headers).header(UUIDHEADER, "tes123"))
+                .andExpect(status().isBadRequest());
         pep.setPolicyName("name");
         mockMvc.perform(put("/createFirewallConfig").content(PolicyUtils.objectToJsonString(pep))
-                .contentType(MediaType.APPLICATION_JSON).headers(headers)
-                .header(UUIDHEADER, "tes123")).andExpect(status().isBadRequest());
+                .contentType(MediaType.APPLICATION_JSON).headers(headers).header(UUIDHEADER, "tes123"))
+                .andExpect(status().isBadRequest());
         pep.setTtlDate(new Date().toString());
         mockMvc.perform(put("/updateFirewallConfig").content(PolicyUtils.objectToJsonString(pep))
-                .contentType(MediaType.APPLICATION_JSON).headers(headers)
-                .header(UUIDHEADER, "tes123")).andExpect(status().isBadRequest());
+                .contentType(MediaType.APPLICATION_JSON).headers(headers).header(UUIDHEADER, "tes123"))
+                .andExpect(status().isBadRequest());
     }
 
-    private void setCreateUpdateImpl() throws NoSuchMethodException, SecurityException,
-            IllegalAccessException, IllegalArgumentException, InvocationTargetException {
-        Method setter = XACMLPdpServlet.class.getDeclaredMethod("setCreateUpdatePolicyConstructor",
-                String.class);
+    private void setCreateUpdateImpl() throws NoSuchMethodException, SecurityException, IllegalAccessException,
+            IllegalArgumentException, InvocationTargetException {
+        Method setter = XACMLPdpServlet.class.getDeclaredMethod("setCreateUpdatePolicyConstructor", String.class);
         setter.setAccessible(true);
         setter.invoke(new XACMLPdpServlet(), CreateUpdatePolicyServiceImpl.class.getName());
     }
index da13a9a..159d831 100644 (file)
                 </exclusion>
             </exclusions>
         </dependency>
+        <dependency>
+             <groupId>org.projectlombok</groupId>
+             <artifactId>lombok</artifactId>
+             <version>1.18.6</version>
+             <scope>provided</scope>
+        </dependency>
         <dependency>
             <groupId>org.onap.policy.engine</groupId>
             <artifactId>ONAP-XACML</artifactId>
diff --git a/PolicyEngineAPI/src/main/java/org/onap/policy/api/PolicyNameType.java b/PolicyEngineAPI/src/main/java/org/onap/policy/api/PolicyNameType.java
new file mode 100644 (file)
index 0000000..d1056c8
--- /dev/null
@@ -0,0 +1,44 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * PolicyEngineAPI
+ * ================================================================================
+ * Copyright (C) 2019 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.api;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+import lombok.ToString;
+
+/**
+ * The Class PolicyNameType.
+ */
+@Getter
+@Setter
+@ToString
+@NoArgsConstructor
+@AllArgsConstructor
+public class PolicyNameType {
+    private String policyName;
+    private String policyScope;
+    private String policyType;
+    private String filePrefix;
+    private String clientScope;
+    private String fullPolicyName;
+}
index a00c363..8d8b51e 100755 (executable)
Binary files a/docs/platform/PolicyEngineApiList.png and b/docs/platform/PolicyEngineApiList.png differ
index f9296d2..42f8d18 100755 (executable)
@@ -1 +1 @@
-{"swagger":"2.0","info":{"description":"This API helps to make queries against Policy Engine","version":"3.0","title":"Policy Engine REST API"},"host":"104.239.197.207:8081","basePath":"/pdp/api","tags":[{"name":"policy-engine-services","description":"Policy Engine Services"}],"paths":{"/createConfig":{"put":{"tags":["policy-engine-services"],"summary":"Creates a Config Policy based on given Policy Parameters.","operationId":"createConfigUsingPUT","consumes":["application/json"],"produces":["*/*"],"parameters":[{"in":"body","name":"configPolicyAPIRequest","description":"configPolicyAPIRequest","required":true,"schema":{"$ref":"#/definitions/ConfigPolicyAPIRequest"}},{"name":"ClientAuth","in":"header","description":"ClientAuth","required":true,"type":"string"},{"name":"X-ECOMP-RequestID","in":"header","description":"X-ECOMP-RequestID","required":false,"type":"string"},{"name":"Authorization","in":"header","required":true,"type":"string"},{"name":"Environment","in":"header","required":true,"type":"string"}],"responses":{"200":{"description":"OK","schema":{"type":"string"}},"201":{"description":"Created"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}},"deprecated":true}},"/createDictionaryItem":{"put":{"tags":["policy-engine-services"],"summary":"Creates a Dictionary Item for a specific dictionary based on given Parameters.","operationId":"createDictionaryItemUsingPUT","consumes":["application/json"],"produces":["*/*"],"parameters":[{"in":"body","name":"dictionaryParameters","description":"dictionaryParameters","required":true,"schema":{"$ref":"#/definitions/DictionaryParameters"}},{"name":"ClientAuth","in":"header","description":"ClientAuth","required":true,"type":"string"},{"name":"X-ECOMP-RequestID","in":"header","description":"X-ECOMP-RequestID","required":false,"type":"string"},{"name":"Authorization","in":"header","required":true,"type":"string"},{"name":"Environment","in":"header","required":true,"type":"string"}],"responses":{"200":{"description":"OK","schema":{"type":"string"}},"201":{"description":"Created"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}}}},"/createFirewallConfig":{"put":{"tags":["policy-engine-services"],"summary":"Creates a Config Firewall Policy","operationId":"createFirewallConfigUsingPUT","consumes":["application/json"],"produces":["*/*"],"parameters":[{"in":"body","name":"configFirewallPolicyAPIRequest","description":"configFirewallPolicyAPIRequest","required":true,"schema":{"$ref":"#/definitions/ConfigFirewallPolicyAPIRequest"}},{"name":"ClientAuth","in":"header","description":"ClientAuth","required":true,"type":"string"},{"name":"X-ECOMP-RequestID","in":"header","description":"X-ECOMP-RequestID","required":false,"type":"string"},{"name":"Authorization","in":"header","required":true,"type":"string"},{"name":"Environment","in":"header","required":true,"type":"string"}],"responses":{"200":{"description":"OK","schema":{"type":"string"}},"201":{"description":"Created"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}},"deprecated":true}},"/createPolicy":{"put":{"tags":["policy-engine-services"],"summary":"Creates a Policy based on given Policy Parameters.","operationId":"createPolicyUsingPUT","consumes":["application/json"],"produces":["*/*"],"parameters":[{"in":"body","name":"policyParameters","description":"policyParameters","required":true,"schema":{"$ref":"#/definitions/PolicyParameters"}},{"name":"ClientAuth","in":"header","description":"ClientAuth","required":true,"type":"string"},{"name":"X-ECOMP-RequestID","in":"header","description":"X-ECOMP-RequestID","required":false,"type":"string"},{"name":"Authorization","in":"header","required":true,"type":"string"},{"name":"Environment","in":"header","required":true,"type":"string"}],"responses":{"200":{"description":"OK","schema":{"type":"string"}},"201":{"description":"Created"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}}}},"/deletePolicy":{"delete":{"tags":["policy-engine-services"],"summary":"Deletes the specified policy from the PDP Group or PAP.","operationId":"deletePolicyUsingDELETE","consumes":["application/json"],"produces":["*/*"],"parameters":[{"in":"body","name":"deletePolicyParameters","description":"deletePolicyParameters","required":true,"schema":{"$ref":"#/definitions/DeletePolicyParameters"}},{"name":"ClientAuth","in":"header","description":"ClientAuth","required":true,"type":"string"},{"name":"X-ECOMP-RequestID","in":"header","description":"X-ECOMP-RequestID","required":false,"type":"string"},{"name":"Authorization","in":"header","required":true,"type":"string"},{"name":"Environment","in":"header","required":true,"type":"string"}],"responses":{"200":{"description":"OK","schema":{"type":"string"}},"204":{"description":"No Content"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"}}}},"/getConfig":{"post":{"tags":["policy-engine-services"],"summary":"Gets the configuration from the PolicyDecisionPoint(PDP)","operationId":"getConfigUsingPOST","consumes":["application/json"],"produces":["*/*"],"parameters":[{"in":"body","name":"configRequestParameters","description":"configRequestParameters","required":true,"schema":{"$ref":"#/definitions/ConfigRequestParameters"}},{"name":"ClientAuth","in":"header","description":"ClientAuth","required":true,"type":"string"},{"name":"X-ECOMP-RequestID","in":"header","description":"X-ECOMP-RequestID","required":false,"type":"string"},{"name":"Authorization","in":"header","required":true,"type":"string"},{"name":"Environment","in":"header","required":true,"type":"string"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/Collection«PolicyConfig»"}},"201":{"description":"Created"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}}}},"/getConfigByPolicyName":{"post":{"tags":["policy-engine-services"],"summary":"Gets the configuration from the PolicyDecisionPoint(PDP) using PolicyName","operationId":"getConfigByPolicyNameUsingPOST","consumes":["application/json"],"produces":["*/*"],"parameters":[{"in":"body","name":"configNameRequest","description":"configNameRequest","required":true,"schema":{"$ref":"#/definitions/ConfigNameRequest"}},{"name":"ClientAuth","in":"header","description":"ClientAuth","required":true,"type":"string"},{"name":"X-ECOMP-RequestID","in":"header","description":"X-ECOMP-RequestID","required":false,"type":"string"},{"name":"Authorization","in":"header","required":true,"type":"string"},{"name":"Environment","in":"header","required":true,"type":"string"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/Collection«PolicyConfig»"}},"201":{"description":"Created"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}},"deprecated":true}},"/getDecision":{"post":{"tags":["policy-engine-services"],"summary":"Gets the Decision using specified decision parameters","operationId":"getDecisionUsingPOST","consumes":["application/json"],"produces":["*/*"],"parameters":[{"in":"body","name":"decisionRequestParameters","description":"decisionRequestParameters","required":true,"schema":{"$ref":"#/definitions/DecisionRequestParameters"}},{"name":"ClientAuth","in":"header","description":"ClientAuth","required":true,"type":"string"},{"name":"X-ECOMP-RequestID","in":"header","description":"X-ECOMP-RequestID","required":false,"type":"string"},{"name":"Authorization","in":"header","required":true,"type":"string"},{"name":"Environment","in":"header","required":true,"type":"string"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/DecisionResponse"}},"201":{"description":"Created"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}}}},"/getDictionaryItems":{"post":{"tags":["policy-engine-services"],"summary":"Gets the dictionary items from the PAP","operationId":"getDictionaryItemsUsingPOST","consumes":["application/json"],"produces":["*/*"],"parameters":[{"in":"body","name":"dictionaryParameters","description":"dictionaryParameters","required":true,"schema":{"$ref":"#/definitions/DictionaryParameters"}},{"name":"ClientAuth","in":"header","description":"ClientAuth","required":true,"type":"string"},{"name":"X-ECOMP-RequestID","in":"header","description":"X-ECOMP-RequestID","required":false,"type":"string"},{"name":"Authorization","in":"header","required":true,"type":"string"},{"name":"Environment","in":"header","required":true,"type":"string"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/DictionaryResponse"}},"201":{"description":"Created"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}}}},"/getMetrics":{"get":{"tags":["policy-engine-services"],"summary":"Gets the policy metrics from the PolicyAccessPoint(PAP)","operationId":"getMetricsUsingGET","consumes":["application/json"],"produces":["*/*"],"parameters":[{"name":"ClientAuth","in":"header","description":"ClientAuth","required":true,"type":"string"},{"name":"X-ECOMP-RequestID","in":"header","description":"X-ECOMP-RequestID","required":false,"type":"string"},{"name":"Authorization","in":"header","required":true,"type":"string"},{"name":"Environment","in":"header","required":true,"type":"string"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/MetricsResponse"}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}}}},"/getNotification":{"post":{"tags":["policy-engine-services"],"summary":"Registers DMaaP Topic to recieve notification from Policy Engine","operationId":"getNotificationUsingPOST","consumes":["application/json"],"produces":["*/*"],"parameters":[{"in":"body","name":"notificationTopic","description":"notificationTopic","required":true,"schema":{"type":"string"}},{"name":"ClientAuth","in":"header","description":"ClientAuth","required":true,"type":"string"},{"name":"X-ECOMP-RequestID","in":"header","description":"X-ECOMP-RequestID","required":false,"type":"string"},{"name":"Authorization","in":"header","required":true,"type":"string"},{"name":"Environment","in":"header","required":true,"type":"string"}],"responses":{"200":{"description":"OK","schema":{"type":"string"}},"201":{"description":"Created"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}}}},"/listConfig":{"post":{"tags":["policy-engine-services"],"summary":"Gets the list of configuration policies from the PDP","operationId":"listConfigUsingPOST","consumes":["application/json"],"produces":["*/*"],"parameters":[{"in":"body","name":"configRequestParameters","description":"configRequestParameters","required":true,"schema":{"$ref":"#/definitions/ConfigRequestParameters"}},{"name":"ClientAuth","in":"header","description":"ClientAuth","required":true,"type":"string"},{"name":"X-ECOMP-RequestID","in":"header","description":"X-ECOMP-RequestID","required":false,"type":"string"},{"name":"Authorization","in":"header","required":true,"type":"string"},{"name":"Environment","in":"header","required":true,"type":"string"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/Collection«string»"}},"201":{"description":"Created"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}}}},"/listPolicy":{"post":{"tags":["policy-engine-services"],"summary":"Gets the list of policies from the PAP","operationId":"listPolicyUsingPOST","consumes":["application/json"],"produces":["*/*"],"parameters":[{"in":"body","name":"configNameRequest","description":"configNameRequest","required":true,"schema":{"$ref":"#/definitions/ConfigNameRequest"}},{"name":"ClientAuth","in":"header","description":"ClientAuth","required":true,"type":"string"},{"name":"X-ECOMP-RequestID","in":"header","description":"X-ECOMP-RequestID","required":false,"type":"string"},{"name":"Authorization","in":"header","required":true,"type":"string"},{"name":"Environment","in":"header","required":true,"type":"string"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/Collection«string»"}},"201":{"description":"Created"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}}}},"/policyEngineImport":{"post":{"tags":["policy-engine-services"],"summary":"Imports Policy based on the parameters which represent the service used to create a policy Service.","operationId":"policyEngineImportUsingPOST","consumes":["multipart/form-data"],"produces":["*/*"],"parameters":[{"name":"importParametersJson","in":"query","description":"importParametersJson","required":true,"type":"string"},{"name":"file","in":"formData","description":"file","required":true,"type":"file"},{"name":"ClientAuth","in":"header","description":"ClientAuth","required":true,"type":"string"},{"name":"X-ECOMP-RequestID","in":"header","description":"X-ECOMP-RequestID","required":false,"type":"string"},{"name":"Authorization","in":"header","required":true,"type":"string"},{"name":"Environment","in":"header","required":true,"type":"string"}],"responses":{"200":{"description":"OK","schema":{"type":"string"}},"201":{"description":"Created"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}}}},"/pushPolicy":{"put":{"tags":["policy-engine-services"],"summary":"Pushes the specified policy to the PDP Group.","operationId":"pushPolicyUsingPUT","consumes":["application/json"],"produces":["*/*"],"parameters":[{"in":"body","name":"pushPolicyParameters","description":"pushPolicyParameters","required":true,"schema":{"$ref":"#/definitions/PushPolicyParameters"}},{"name":"ClientAuth","in":"header","description":"ClientAuth","required":true,"type":"string"},{"name":"X-ECOMP-RequestID","in":"header","description":"X-ECOMP-RequestID","required":false,"type":"string"},{"name":"Authorization","in":"header","required":true,"type":"string"},{"name":"Environment","in":"header","required":true,"type":"string"}],"responses":{"200":{"description":"OK","schema":{"type":"string"}},"201":{"description":"Created"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}}}},"/sendEvent":{"post":{"tags":["policy-engine-services"],"summary":"Sends the Events specified to the Policy Engine","operationId":"sendEventUsingPOST","consumes":["application/json"],"produces":["*/*"],"parameters":[{"in":"body","name":"eventRequestParameters","description":"eventRequestParameters","required":true,"schema":{"$ref":"#/definitions/EventRequestParameters"}},{"name":"ClientAuth","in":"header","description":"ClientAuth","required":true,"type":"string"},{"name":"X-ECOMP-RequestID","in":"header","description":"X-ECOMP-RequestID","required":false,"type":"string"},{"name":"Authorization","in":"header","required":true,"type":"string"},{"name":"Environment","in":"header","required":true,"type":"string"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/Collection«PolicyResponse»"}},"201":{"description":"Created"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}}}},"/sendHeartbeat":{"post":{"tags":["policy-engine-services"],"summary":"Sends Heartbeat to DMaaP Topic Registry to continue recieving notifications from Policy Engine","operationId":"sendHeartbeatUsingPOST","consumes":["application/json"],"produces":["*/*"],"parameters":[{"in":"body","name":"notificationTopic","description":"notificationTopic","required":true,"schema":{"type":"string"}},{"name":"ClientAuth","in":"header","description":"ClientAuth","required":true,"type":"string"},{"name":"X-ECOMP-RequestID","in":"header","description":"X-ECOMP-RequestID","required":false,"type":"string"},{"name":"Authorization","in":"header","required":true,"type":"string"},{"name":"Environment","in":"header","required":true,"type":"string"}],"responses":{"200":{"description":"OK","schema":{"type":"string"}},"201":{"description":"Created"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}}}},"/stopNotification":{"post":{"tags":["policy-engine-services"],"summary":"De-Registers DMaaP Topic to stop recieving notifications from Policy Engine","operationId":"stopNotificationUsingPOST","consumes":["application/json"],"produces":["*/*"],"parameters":[{"in":"body","name":"notificationTopic","description":"notificationTopic","required":true,"schema":{"type":"string"}},{"name":"ClientAuth","in":"header","description":"ClientAuth","required":true,"type":"string"},{"name":"X-ECOMP-RequestID","in":"header","description":"X-ECOMP-RequestID","required":false,"type":"string"},{"name":"Authorization","in":"header","required":true,"type":"string"},{"name":"Environment","in":"header","required":true,"type":"string"}],"responses":{"200":{"description":"OK","schema":{"type":"string"}},"201":{"description":"Created"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}}}},"/updateConfig":{"put":{"tags":["policy-engine-services"],"summary":"Updates a Config Policy based on given Policy Parameters.","operationId":"updateConfigUsingPUT","consumes":["application/json"],"produces":["*/*"],"parameters":[{"in":"body","name":"configPolicyAPIRequest","description":"configPolicyAPIRequest","required":true,"schema":{"$ref":"#/definitions/ConfigPolicyAPIRequest"}},{"name":"ClientAuth","in":"header","description":"ClientAuth","required":true,"type":"string"},{"name":"X-ECOMP-RequestID","in":"header","description":"X-ECOMP-RequestID","required":false,"type":"string"},{"name":"Authorization","in":"header","required":true,"type":"string"},{"name":"Environment","in":"header","required":true,"type":"string"}],"responses":{"200":{"description":"OK","schema":{"type":"string"}},"201":{"description":"Created"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}},"deprecated":true}},"/updateDictionaryItem":{"put":{"tags":["policy-engine-services"],"summary":"Updates a Dictionary Item for a specific dictionary based on given Parameters.","operationId":"updateDictionaryItemUsingPUT","consumes":["application/json"],"produces":["*/*"],"parameters":[{"in":"body","name":"dictionaryParameters","description":"dictionaryParameters","required":true,"schema":{"$ref":"#/definitions/DictionaryParameters"}},{"name":"ClientAuth","in":"header","description":"ClientAuth","required":true,"type":"string"},{"name":"X-ECOMP-RequestID","in":"header","description":"X-ECOMP-RequestID","required":false,"type":"string"},{"name":"Authorization","in":"header","required":true,"type":"string"},{"name":"Environment","in":"header","required":true,"type":"string"}],"responses":{"200":{"description":"OK","schema":{"type":"string"}},"201":{"description":"Created"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}}}},"/updateFirewallConfig":{"put":{"tags":["policy-engine-services"],"summary":"Updates a Config Firewall Policy","operationId":"updateFirewallConfigUsingPUT","consumes":["application/json"],"produces":["*/*"],"parameters":[{"in":"body","name":"configFirewallPolicyAPIRequest","description":"configFirewallPolicyAPIRequest","required":true,"schema":{"$ref":"#/definitions/ConfigFirewallPolicyAPIRequest"}},{"name":"ClientAuth","in":"header","description":"ClientAuth","required":true,"type":"string"},{"name":"X-ECOMP-RequestID","in":"header","description":"X-ECOMP-RequestID","required":false,"type":"string"},{"name":"Authorization","in":"header","required":true,"type":"string"},{"name":"Environment","in":"header","required":true,"type":"string"}],"responses":{"200":{"description":"OK","schema":{"type":"string"}},"201":{"description":"Created"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}},"deprecated":true}},"/updatePolicy":{"put":{"tags":["policy-engine-services"],"summary":"Updates a Policy based on given Policy Parameters.","operationId":"updatePolicyUsingPUT","consumes":["application/json"],"produces":["*/*"],"parameters":[{"in":"body","name":"policyParameters","description":"policyParameters","required":true,"schema":{"$ref":"#/definitions/PolicyParameters"}},{"name":"ClientAuth","in":"header","description":"ClientAuth","required":true,"type":"string"},{"name":"X-ECOMP-RequestID","in":"header","description":"X-ECOMP-RequestID","required":false,"type":"string"},{"name":"Authorization","in":"header","required":true,"type":"string"},{"name":"Environment","in":"header","required":true,"type":"string"}],"responses":{"200":{"description":"OK","schema":{"type":"string"}},"201":{"description":"Created"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}}}}},"definitions":{"PolicyParameters":{"type":"object","properties":{"actionAttribute":{"type":"string"},"actionPerformer":{"type":"string"},"attributes":{"type":"object","additionalProperties":{"$ref":"#/definitions/Map«string,string»"}},"configBody":{"type":"string"},"configBodyType":{"type":"string","enum":["Properties","json","xml","other"]},"configName":{"type":"string"},"controllerName":{"type":"string"},"dependencyNames":{"type":"array","items":{"type":"string"}},"dynamicRuleAlgorithmField1":{"type":"array","items":{"type":"string"}},"dynamicRuleAlgorithmField2":{"type":"array","items":{"type":"string"}},"dynamicRuleAlgorithmFunctions":{"type":"array","items":{"type":"string"}},"dynamicRuleAlgorithmLabels":{"type":"array","items":{"type":"string"}},"ecompName":{"type":"string"},"extendedOption":{"type":"string"},"guard":{"type":"boolean"},"onapName":{"type":"string"},"policyClass":{"type":"string","enum":["Config","Action","Decision"]},"policyConfigType":{"type":"string","enum":["Base","Fault","PM","FW","BRMS_Raw","BRMS_Param","MS","EXTENDED"]},"policyDescription":{"type":"string"},"policyName":{"type":"string"},"priority":{"type":"string"},"requestID":{"type":"string"},"riskLevel":{"type":"string"},"riskType":{"type":"string"},"ruleProvider":{"type":"string","enum":["Custom","AAF","GUARD_YAML","GUARD_BL_YAML","GUARD_MIN_MAX"]},"ttlDate":{"type":"string","format":"date-time"}}},"ConfigRequestParameters":{"type":"object","properties":{"configAttributes":{"type":"object","additionalProperties":{"type":"string"}},"configName":{"type":"string"},"ecompName":{"type":"string"},"onapName":{"type":"string"},"policyName":{"type":"string"},"requestID":{"type":"string"},"unique":{"type":"boolean"}}},"Collection«PolicyResponse»":{"type":"object"},"DecisionResponse":{"type":"object","properties":{"decision":{"type":"string","enum":["permit","deny","error"]},"details":{"type":"string"}}},"DictionaryParameters":{"type":"object","properties":{"dictionary":{"type":"string"},"dictionaryJson":{"type":"string"},"dictionaryType":{"type":"string","enum":["Common","Action","ClosedLoop","Firewall","Decision","BRMS","MicroService","DescriptiveScope","PolicyScope","Enforcer","SafePolicy","Extended"]},"requestID":{"type":"string"}}},"JsonValue":{"type":"object","properties":{"valueType":{"type":"string","enum":["ARRAY","OBJECT","STRING","NUMBER","TRUE","FALSE","NULL"]}}},"DecisionRequestParameters":{"type":"object","properties":{"decisionAttributes":{"type":"object","additionalProperties":{"type":"string"}},"ecompcomponentName":{"type":"string"},"onapName":{"type":"string"},"requestID":{"type":"string"}}},"ConfigPolicyAPIRequest":{"type":"object","properties":{"body":{"type":"string"},"configAttributes":{"type":"object","additionalProperties":{"type":"string"}},"configName":{"type":"string"},"configType":{"type":"string"},"ecompName":{"type":"string"},"guard":{"type":"string"},"onapName":{"type":"string"},"policyDescription":{"type":"string"},"policyName":{"type":"string"},"policyScope":{"type":"string"},"riskLevel":{"type":"string"},"riskType":{"type":"string"},"ttlDate":{"type":"string"}}},"PushPolicyParameters":{"type":"object","properties":{"pdpGroup":{"type":"string"},"policyName":{"type":"string"},"policyType":{"type":"string"},"requestID":{"type":"string"}}},"ConfigFirewallPolicyAPIRequest":{"type":"object","properties":{"firewallJson":{"type":"string"},"guard":{"type":"string"},"policyName":{"type":"string"},"policyScope":{"type":"string"},"riskLevel":{"type":"string"},"riskType":{"type":"string"},"ttlDate":{"type":"string"}}},"PolicyConfig":{"type":"object","properties":{"config":{"type":"string"},"matchingConditions":{"type":"object","additionalProperties":{"type":"string"}},"policyConfigMessage":{"type":"string"},"policyConfigStatus":{"type":"string","enum":["retrieved","not_found"]},"policyName":{"type":"string"},"policyVersion":{"type":"string"},"property":{"type":"object","additionalProperties":{"type":"string"}},"responseAttributes":{"type":"object","additionalProperties":{"type":"string"}},"type":{"type":"string","enum":["Properties","json","xml","other"]}}},"EventRequestParameters":{"type":"object","properties":{"eventAttributes":{"type":"object","additionalProperties":{"type":"string"}},"requestID":{"type":"string"}}},"Map«string,string»":{"type":"object","additionalProperties":{"type":"string"}},"Collection«PolicyConfig»":{"type":"object"},"DictionaryResponse":{"type":"object","properties":{"dictionaryData":{"type":"object","additionalProperties":{"type":"string"}},"dictionaryJson":{"type":"object","additionalProperties":{"$ref":"#/definitions/JsonValue"}},"responseCode":{"type":"integer","format":"int32"},"responseMessage":{"type":"string"}}},"ConfigNameRequest":{"type":"object","properties":{"policyName":{"type":"string"}}},"MetricsResponse":{"type":"object","properties":{"metricsTotal":{"type":"integer","format":"int32"},"papMetrics":{"type":"integer","format":"int32"},"pdpMetrics":{"type":"integer","format":"int32"},"responseCode":{"type":"integer","format":"int32"},"responseMessage":{"type":"string"}}},"Collection«string»":{"type":"object"},"PolicyResponse":{"type":"object","properties":{"actionAdvised":{"type":"object","additionalProperties":{"type":"string"}},"actionTaken":{"type":"object","additionalProperties":{"type":"string"}},"policyResponseMessage":{"type":"string"},"policyResponseStatus":{"type":"string","enum":["no_action","action_advised","action_taken"]},"requestAttributes":{"type":"object","additionalProperties":{"type":"string"}}}},"DeletePolicyParameters":{"type":"object","properties":{"deleteCondition":{"type":"string","enum":["Current Version","All Versions"]},"pdpGroup":{"type":"string"},"policyComponent":{"type":"string"},"policyName":{"type":"string"},"policyType":{"type":"string"},"requestID":{"type":"string"}}}}}
\ No newline at end of file
+{"swagger":"2.0","info":{"description":"This API helps to make queries against Policy Engine","version":"3.0","title":"Policy Engine REST API"},"host":"localhost:8082","basePath":"/pdp/api","tags":[{"name":"policy-engine-services","description":"Policy Engine Services"}],"paths":{"/createConfig":{"put":{"tags":["policy-engine-services"],"summary":"Creates a Config Policy based on given Policy Parameters.","operationId":"createConfigUsingPUT","consumes":["application/json"],"produces":["*/*"],"parameters":[{"in":"body","name":"configPolicyAPIRequest","description":"configPolicyAPIRequest","required":true,"schema":{"$ref":"#/definitions/ConfigPolicyAPIRequest"}},{"name":"ClientAuth","in":"header","description":"ClientAuth","required":true,"type":"string"},{"name":"X-ECOMP-RequestID","in":"header","description":"X-ECOMP-RequestID","required":false,"type":"string"},{"name":"Authorization","in":"header","required":true,"type":"string"},{"name":"Environment","in":"header","required":true,"type":"string"}],"responses":{"200":{"description":"OK","schema":{"type":"string"}},"201":{"description":"Created"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}},"deprecated":true}},"/createDictionaryItem":{"put":{"tags":["policy-engine-services"],"summary":"Creates a Dictionary Item for a specific dictionary based on given Parameters.","operationId":"createDictionaryItemUsingPUT","consumes":["application/json"],"produces":["*/*"],"parameters":[{"in":"body","name":"dictionaryParameters","description":"dictionaryParameters","required":true,"schema":{"$ref":"#/definitions/DictionaryParameters"}},{"name":"ClientAuth","in":"header","description":"ClientAuth","required":true,"type":"string"},{"name":"X-ECOMP-RequestID","in":"header","description":"X-ECOMP-RequestID","required":false,"type":"string"},{"name":"Authorization","in":"header","required":true,"type":"string"},{"name":"Environment","in":"header","required":true,"type":"string"}],"responses":{"200":{"description":"OK","schema":{"type":"string"}},"201":{"description":"Created"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}}}},"/createFirewallConfig":{"put":{"tags":["policy-engine-services"],"summary":"Creates a Config Firewall Policy","operationId":"createFirewallConfigUsingPUT","consumes":["application/json"],"produces":["*/*"],"parameters":[{"in":"body","name":"configFirewallPolicyAPIRequest","description":"configFirewallPolicyAPIRequest","required":true,"schema":{"$ref":"#/definitions/ConfigFirewallPolicyAPIRequest"}},{"name":"ClientAuth","in":"header","description":"ClientAuth","required":true,"type":"string"},{"name":"X-ECOMP-RequestID","in":"header","description":"X-ECOMP-RequestID","required":false,"type":"string"},{"name":"Authorization","in":"header","required":true,"type":"string"},{"name":"Environment","in":"header","required":true,"type":"string"}],"responses":{"200":{"description":"OK","schema":{"type":"string"}},"201":{"description":"Created"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}},"deprecated":true}},"/createPolicy":{"put":{"tags":["policy-engine-services"],"summary":"Creates a Policy based on given Policy Parameters.","operationId":"createPolicyUsingPUT","consumes":["application/json"],"produces":["*/*"],"parameters":[{"in":"body","name":"policyParameters","description":"policyParameters","required":true,"schema":{"$ref":"#/definitions/PolicyParameters"}},{"name":"ClientAuth","in":"header","description":"ClientAuth","required":true,"type":"string"},{"name":"X-ECOMP-RequestID","in":"header","description":"X-ECOMP-RequestID","required":false,"type":"string"},{"name":"Authorization","in":"header","required":true,"type":"string"},{"name":"Environment","in":"header","required":true,"type":"string"}],"responses":{"200":{"description":"OK","schema":{"type":"string"}},"201":{"description":"Created"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}}}},"/deletePolicy":{"delete":{"tags":["policy-engine-services"],"summary":"Deletes the specified policy from the PDP Group or PAP.","operationId":"deletePolicyUsingDELETE","consumes":["application/json"],"produces":["*/*"],"parameters":[{"in":"body","name":"deletePolicyParameters","description":"deletePolicyParameters","required":true,"schema":{"$ref":"#/definitions/DeletePolicyParameters"}},{"name":"ClientAuth","in":"header","description":"ClientAuth","required":true,"type":"string"},{"name":"X-ECOMP-RequestID","in":"header","description":"X-ECOMP-RequestID","required":false,"type":"string"},{"name":"Authorization","in":"header","required":true,"type":"string"},{"name":"Environment","in":"header","required":true,"type":"string"}],"responses":{"200":{"description":"OK","schema":{"type":"string"}},"401":{"description":"Unauthorized"},"204":{"description":"No Content"},"403":{"description":"Forbidden"}}}},"/getConfig":{"post":{"tags":["policy-engine-services"],"summary":"Gets the configuration from the PolicyDecisionPoint(PDP)","operationId":"getConfigUsingPOST","consumes":["application/json"],"produces":["*/*"],"parameters":[{"in":"body","name":"configRequestParameters","description":"configRequestParameters","required":true,"schema":{"$ref":"#/definitions/ConfigRequestParameters"}},{"name":"ClientAuth","in":"header","description":"ClientAuth","required":true,"type":"string"},{"name":"X-ECOMP-RequestID","in":"header","description":"X-ECOMP-RequestID","required":false,"type":"string"},{"name":"Authorization","in":"header","required":true,"type":"string"},{"name":"Environment","in":"header","required":true,"type":"string"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/Collection«PolicyConfig»"}},"201":{"description":"Created"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}}}},"/getConfigByPolicyName":{"post":{"tags":["policy-engine-services"],"summary":"Gets the configuration from the PolicyDecisionPoint(PDP) using PolicyName","operationId":"getConfigByPolicyNameUsingPOST","consumes":["application/json"],"produces":["*/*"],"parameters":[{"in":"body","name":"configNameRequest","description":"configNameRequest","required":true,"schema":{"$ref":"#/definitions/ConfigNameRequest"}},{"name":"ClientAuth","in":"header","description":"ClientAuth","required":true,"type":"string"},{"name":"X-ECOMP-RequestID","in":"header","description":"X-ECOMP-RequestID","required":false,"type":"string"},{"name":"Authorization","in":"header","required":true,"type":"string"},{"name":"Environment","in":"header","required":true,"type":"string"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/Collection«PolicyConfig»"}},"201":{"description":"Created"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}},"deprecated":true}},"/getDecision":{"post":{"tags":["policy-engine-services"],"summary":"Gets the Decision using specified decision parameters","operationId":"getDecisionUsingPOST","consumes":["application/json"],"produces":["*/*"],"parameters":[{"in":"body","name":"decisionRequestParameters","description":"decisionRequestParameters","required":true,"schema":{"$ref":"#/definitions/DecisionRequestParameters"}},{"name":"ClientAuth","in":"header","description":"ClientAuth","required":true,"type":"string"},{"name":"X-ECOMP-RequestID","in":"header","description":"X-ECOMP-RequestID","required":false,"type":"string"},{"name":"Authorization","in":"header","required":true,"type":"string"},{"name":"Environment","in":"header","required":true,"type":"string"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/DecisionResponse"}},"201":{"description":"Created"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}}}},"/getDictionaryItems":{"post":{"tags":["policy-engine-services"],"summary":"Gets the dictionary items from the PAP","operationId":"getDictionaryItemsUsingPOST","consumes":["application/json"],"produces":["*/*"],"parameters":[{"in":"body","name":"dictionaryParameters","description":"dictionaryParameters","required":true,"schema":{"$ref":"#/definitions/DictionaryParameters"}},{"name":"ClientAuth","in":"header","description":"ClientAuth","required":true,"type":"string"},{"name":"X-ECOMP-RequestID","in":"header","description":"X-ECOMP-RequestID","required":false,"type":"string"},{"name":"Authorization","in":"header","required":true,"type":"string"},{"name":"Environment","in":"header","required":true,"type":"string"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/DictionaryResponse"}},"201":{"description":"Created"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}}}},"/getMetrics":{"get":{"tags":["policy-engine-services"],"summary":"Gets the policy metrics from the PolicyAccessPoint(PAP)","operationId":"getMetricsUsingGET","consumes":["application/json"],"produces":["*/*"],"parameters":[{"name":"ClientAuth","in":"header","description":"ClientAuth","required":true,"type":"string"},{"name":"X-ECOMP-RequestID","in":"header","description":"X-ECOMP-RequestID","required":false,"type":"string"},{"name":"Authorization","in":"header","required":true,"type":"string"},{"name":"Environment","in":"header","required":true,"type":"string"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/MetricsResponse"}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}}}},"/getNotification":{"post":{"tags":["policy-engine-services"],"summary":"Registers DMaaP Topic to recieve notification from Policy Engine","operationId":"getNotificationUsingPOST","consumes":["application/json"],"produces":["*/*"],"parameters":[{"in":"body","name":"notificationTopic","description":"notificationTopic","required":true,"schema":{"type":"string"}},{"name":"ClientAuth","in":"header","description":"ClientAuth","required":true,"type":"string"},{"name":"X-ECOMP-RequestID","in":"header","description":"X-ECOMP-RequestID","required":false,"type":"string"},{"name":"Authorization","in":"header","required":true,"type":"string"},{"name":"Environment","in":"header","required":true,"type":"string"}],"responses":{"200":{"description":"OK","schema":{"type":"string"}},"201":{"description":"Created"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}}}},"/listConfig":{"post":{"tags":["policy-engine-services"],"summary":"Gets the list of configuration policies from the PDP","operationId":"listConfigUsingPOST","consumes":["application/json"],"produces":["*/*"],"parameters":[{"in":"body","name":"configRequestParameters","description":"configRequestParameters","required":true,"schema":{"$ref":"#/definitions/ConfigRequestParameters"}},{"name":"ClientAuth","in":"header","description":"ClientAuth","required":true,"type":"string"},{"name":"X-ECOMP-RequestID","in":"header","description":"X-ECOMP-RequestID","required":false,"type":"string"},{"name":"Authorization","in":"header","required":true,"type":"string"},{"name":"Environment","in":"header","required":true,"type":"string"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/Collection«string»"}},"201":{"description":"Created"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}}}},"/listPolicy":{"post":{"tags":["policy-engine-services"],"summary":"Gets the list of policies from the PDP","operationId":"listPolicyUsingPOST","consumes":["application/json"],"produces":["*/*"],"parameters":[{"in":"body","name":"configNameRequest","description":"configNameRequest","required":true,"schema":{"$ref":"#/definitions/ConfigNameRequest"}},{"name":"ClientAuth","in":"header","description":"ClientAuth","required":true,"type":"string"},{"name":"X-ECOMP-RequestID","in":"header","description":"X-ECOMP-RequestID","required":false,"type":"string"},{"name":"Authorization","in":"header","required":true,"type":"string"},{"name":"Environment","in":"header","required":true,"type":"string"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/Collection«string»"}},"201":{"description":"Created"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}}}},"/policyEngineImport":{"post":{"tags":["policy-engine-services"],"summary":"Imports Policy based on the parameters which represent the service used to create a policy Service.","operationId":"policyEngineImportUsingPOST","consumes":["multipart/form-data"],"produces":["*/*"],"parameters":[{"name":"importParametersJson","in":"query","description":"importParametersJson","required":true,"type":"string"},{"name":"file","in":"formData","description":"file","required":true,"type":"file"},{"name":"ClientAuth","in":"header","description":"ClientAuth","required":true,"type":"string"},{"name":"X-ECOMP-RequestID","in":"header","description":"X-ECOMP-RequestID","required":false,"type":"string"},{"name":"Authorization","in":"header","required":true,"type":"string"},{"name":"Environment","in":"header","required":true,"type":"string"}],"responses":{"200":{"description":"OK","schema":{"type":"string"}},"201":{"description":"Created"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}}}},"/pushPolicy":{"put":{"tags":["policy-engine-services"],"summary":"Pushes the specified policy to the PDP Group.","operationId":"pushPolicyUsingPUT","consumes":["application/json"],"produces":["*/*"],"parameters":[{"in":"body","name":"pushPolicyParameters","description":"pushPolicyParameters","required":true,"schema":{"$ref":"#/definitions/PushPolicyParameters"}},{"name":"ClientAuth","in":"header","description":"ClientAuth","required":true,"type":"string"},{"name":"X-ECOMP-RequestID","in":"header","description":"X-ECOMP-RequestID","required":false,"type":"string"},{"name":"Authorization","in":"header","required":true,"type":"string"},{"name":"Environment","in":"header","required":true,"type":"string"}],"responses":{"200":{"description":"OK","schema":{"type":"string"}},"201":{"description":"Created"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}}}},"/sendEvent":{"post":{"tags":["policy-engine-services"],"summary":"Sends the Events specified to the Policy Engine","operationId":"sendEventUsingPOST","consumes":["application/json"],"produces":["*/*"],"parameters":[{"in":"body","name":"eventRequestParameters","description":"eventRequestParameters","required":true,"schema":{"$ref":"#/definitions/EventRequestParameters"}},{"name":"ClientAuth","in":"header","description":"ClientAuth","required":true,"type":"string"},{"name":"X-ECOMP-RequestID","in":"header","description":"X-ECOMP-RequestID","required":false,"type":"string"},{"name":"Authorization","in":"header","required":true,"type":"string"},{"name":"Environment","in":"header","required":true,"type":"string"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/Collection«PolicyResponse»"}},"201":{"description":"Created"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}}}},"/sendHeartbeat":{"post":{"tags":["policy-engine-services"],"summary":"Sends Heartbeat to DMaaP Topic Registry to continue recieving notifications from Policy Engine","operationId":"sendHeartbeatUsingPOST","consumes":["application/json"],"produces":["*/*"],"parameters":[{"in":"body","name":"notificationTopic","description":"notificationTopic","required":true,"schema":{"type":"string"}},{"name":"ClientAuth","in":"header","description":"ClientAuth","required":true,"type":"string"},{"name":"X-ECOMP-RequestID","in":"header","description":"X-ECOMP-RequestID","required":false,"type":"string"},{"name":"Authorization","in":"header","required":true,"type":"string"},{"name":"Environment","in":"header","required":true,"type":"string"}],"responses":{"200":{"description":"OK","schema":{"type":"string"}},"201":{"description":"Created"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}}}},"/stopNotification":{"post":{"tags":["policy-engine-services"],"summary":"De-Registers DMaaP Topic to stop recieving notifications from Policy Engine","operationId":"stopNotificationUsingPOST","consumes":["application/json"],"produces":["*/*"],"parameters":[{"in":"body","name":"notificationTopic","description":"notificationTopic","required":true,"schema":{"type":"string"}},{"name":"ClientAuth","in":"header","description":"ClientAuth","required":true,"type":"string"},{"name":"X-ECOMP-RequestID","in":"header","description":"X-ECOMP-RequestID","required":false,"type":"string"},{"name":"Authorization","in":"header","required":true,"type":"string"},{"name":"Environment","in":"header","required":true,"type":"string"}],"responses":{"200":{"description":"OK","schema":{"type":"string"}},"201":{"description":"Created"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}}}},"/updateConfig":{"put":{"tags":["policy-engine-services"],"summary":"Updates a Config Policy based on given Policy Parameters.","operationId":"updateConfigUsingPUT","consumes":["application/json"],"produces":["*/*"],"parameters":[{"in":"body","name":"configPolicyAPIRequest","description":"configPolicyAPIRequest","required":true,"schema":{"$ref":"#/definitions/ConfigPolicyAPIRequest"}},{"name":"ClientAuth","in":"header","description":"ClientAuth","required":true,"type":"string"},{"name":"X-ECOMP-RequestID","in":"header","description":"X-ECOMP-RequestID","required":false,"type":"string"},{"name":"Authorization","in":"header","required":true,"type":"string"},{"name":"Environment","in":"header","required":true,"type":"string"}],"responses":{"200":{"description":"OK","schema":{"type":"string"}},"201":{"description":"Created"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}},"deprecated":true}},"/updateDictionaryItem":{"put":{"tags":["policy-engine-services"],"summary":"Updates a Dictionary Item for a specific dictionary based on given Parameters.","operationId":"updateDictionaryItemUsingPUT","consumes":["application/json"],"produces":["*/*"],"parameters":[{"in":"body","name":"dictionaryParameters","description":"dictionaryParameters","required":true,"schema":{"$ref":"#/definitions/DictionaryParameters"}},{"name":"ClientAuth","in":"header","description":"ClientAuth","required":true,"type":"string"},{"name":"X-ECOMP-RequestID","in":"header","description":"X-ECOMP-RequestID","required":false,"type":"string"},{"name":"Authorization","in":"header","required":true,"type":"string"},{"name":"Environment","in":"header","required":true,"type":"string"}],"responses":{"200":{"description":"OK","schema":{"type":"string"}},"201":{"description":"Created"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}}}},"/updateFirewallConfig":{"put":{"tags":["policy-engine-services"],"summary":"Updates a Config Firewall Policy","operationId":"updateFirewallConfigUsingPUT","consumes":["application/json"],"produces":["*/*"],"parameters":[{"in":"body","name":"configFirewallPolicyAPIRequest","description":"configFirewallPolicyAPIRequest","required":true,"schema":{"$ref":"#/definitions/ConfigFirewallPolicyAPIRequest"}},{"name":"ClientAuth","in":"header","description":"ClientAuth","required":true,"type":"string"},{"name":"X-ECOMP-RequestID","in":"header","description":"X-ECOMP-RequestID","required":false,"type":"string"},{"name":"Authorization","in":"header","required":true,"type":"string"},{"name":"Environment","in":"header","required":true,"type":"string"}],"responses":{"200":{"description":"OK","schema":{"type":"string"}},"201":{"description":"Created"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}},"deprecated":true}},"/updatePolicy":{"put":{"tags":["policy-engine-services"],"summary":"Updates a Policy based on given Policy Parameters.","operationId":"updatePolicyUsingPUT","consumes":["application/json"],"produces":["*/*"],"parameters":[{"in":"body","name":"policyParameters","description":"policyParameters","required":true,"schema":{"$ref":"#/definitions/PolicyParameters"}},{"name":"ClientAuth","in":"header","description":"ClientAuth","required":true,"type":"string"},{"name":"X-ECOMP-RequestID","in":"header","description":"X-ECOMP-RequestID","required":false,"type":"string"},{"name":"Authorization","in":"header","required":true,"type":"string"},{"name":"Environment","in":"header","required":true,"type":"string"}],"responses":{"200":{"description":"OK","schema":{"type":"string"}},"201":{"description":"Created"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}}}}},"definitions":{"PolicyParameters":{"type":"object","properties":{"actionAttribute":{"type":"string"},"actionPerformer":{"type":"string"},"attributes":{"type":"object","additionalProperties":{"$ref":"#/definitions/Map«string,string»"}},"configBody":{"type":"string"},"configBodyType":{"type":"string","enum":["Properties","json","xml","other"]},"configName":{"type":"string"},"configPolicyParameters":{"$ref":"#/definitions/PolicyConfigParams"},"controllerName":{"type":"string"},"dependencyNames":{"type":"array","items":{"type":"string"}},"dynamicRuleAlgorithmField1":{"type":"array","items":{"type":"string"}},"dynamicRuleAlgorithmField2":{"type":"array","items":{"type":"string"}},"dynamicRuleAlgorithmFunctions":{"type":"array","items":{"type":"string"}},"dynamicRuleAlgorithmLabels":{"type":"array","items":{"type":"string"}},"ecompName":{"type":"string"},"extendedOption":{"type":"string"},"guard":{"type":"boolean"},"onapName":{"type":"string"},"policyClass":{"type":"string","enum":["Config","Action","Decision"]},"policyConfigType":{"type":"string","enum":["Base","Fault","PM","FW","BRMS_Raw","BRMS_Param","MS","Optimization","EXTENDED"]},"policyDescription":{"type":"string"},"policyName":{"type":"string"},"priority":{"type":"string"},"rawXacmlPolicy":{"type":"string"},"requestID":{"type":"string"},"riskLevel":{"type":"string"},"riskType":{"type":"string"},"ruleProvider":{"type":"string","enum":["Custom","AAF","GUARD_YAML","GUARD_MIN_MAX","GUARD_BL_YAML","Rainy_Day","Raw"]},"treatments":{"type":"object","additionalProperties":{"type":"string"}},"ttlDate":{"type":"string","format":"date-time"}}},"ConfigRequestParameters":{"type":"object","properties":{"configAttributes":{"type":"object","additionalProperties":{"type":"string"}},"configName":{"type":"string"},"ecompName":{"type":"string"},"onapName":{"type":"string"},"policyName":{"type":"string"},"requestID":{"type":"string"},"unique":{"type":"boolean"}}},"Collection«PolicyResponse»":{"type":"object"},"DecisionResponse":{"type":"object","properties":{"decision":{"type":"string","enum":["permit","deny","error"]},"details":{"type":"string"}}},"DictionaryParameters":{"type":"object","properties":{"dictionary":{"type":"string"},"dictionaryJson":{"type":"string"},"dictionaryType":{"type":"string","enum":["Common","Action","ClosedLoop","Firewall","Decision","BRMS","MicroService","Optimization","DescriptiveScope","PolicyScope","Enforcer","SafePolicy","Extended"]},"requestID":{"type":"string"}}},"JsonValue":{"type":"object","properties":{"valueType":{"type":"string","enum":["ARRAY","OBJECT","STRING","NUMBER","TRUE","FALSE","NULL"]}}},"DecisionRequestParameters":{"type":"object","properties":{"decisionAttributes":{"type":"object","additionalProperties":{"type":"string"}},"ecompcomponentName":{"type":"string"},"onapName":{"type":"string"},"requestID":{"type":"string"}}},"ConfigPolicyAPIRequest":{"type":"object","properties":{"body":{"type":"string"},"configAttributes":{"type":"object","additionalProperties":{"type":"string"}},"configName":{"type":"string"},"configType":{"type":"string"},"ecompName":{"type":"string"},"guard":{"type":"string"},"onapName":{"type":"string"},"policyDescription":{"type":"string"},"policyName":{"type":"string"},"policyScope":{"type":"string"},"riskLevel":{"type":"string"},"riskType":{"type":"string"},"ttlDate":{"type":"string"}}},"PushPolicyParameters":{"type":"object","properties":{"pdpGroup":{"type":"string"},"policyName":{"type":"string"},"policyType":{"type":"string"},"requestID":{"type":"string"}}},"ConfigFirewallPolicyAPIRequest":{"type":"object","properties":{"firewallJson":{"type":"string"},"guard":{"type":"string"},"policyName":{"type":"string"},"policyScope":{"type":"string"},"riskLevel":{"type":"string"},"riskType":{"type":"string"},"ttlDate":{"type":"string"}}},"PolicyConfig":{"type":"object","properties":{"config":{"type":"string"},"matchingConditions":{"type":"object","additionalProperties":{"type":"string"}},"policyConfigMessage":{"type":"string"},"policyConfigStatus":{"type":"string","enum":["retrieved","not_found"]},"policyName":{"type":"string"},"policyType":{"type":"string","enum":["Base","Fault","PM","FW","BRMS_Raw","BRMS_Param","MS","Optimization","EXTENDED"]},"policyVersion":{"type":"string"},"property":{"type":"object","additionalProperties":{"type":"string"}},"responseAttributes":{"type":"object","additionalProperties":{"type":"string"}},"type":{"type":"string","enum":["Properties","json","xml","other"]}}},"EventRequestParameters":{"type":"object","properties":{"eventAttributes":{"type":"object","additionalProperties":{"type":"string"}},"requestID":{"type":"string"}}},"Map«string,string»":{"type":"object","additionalProperties":{"type":"string"}},"Collection«PolicyConfig»":{"type":"object"},"DictionaryResponse":{"type":"object","properties":{"dictionaryData":{"type":"object","additionalProperties":{"type":"string"}},"dictionaryJson":{"type":"object","additionalProperties":{"$ref":"#/definitions/JsonValue"}},"responseCode":{"type":"integer","format":"int32"},"responseMessage":{"type":"string"}}},"ConfigNameRequest":{"type":"object","properties":{"policyName":{"type":"string"}}},"MetricsResponse":{"type":"object","properties":{"metricsTotal":{"type":"integer","format":"int32"},"papMetrics":{"type":"integer","format":"int32"},"pdpMetrics":{"type":"integer","format":"int32"},"responseCode":{"type":"integer","format":"int32"},"responseMessage":{"type":"string"}}},"PolicyConfigParams":{"type":"object","properties":{"attributes":{"type":"object","additionalProperties":{"$ref":"#/definitions/Map«string,string»"}},"configBody":{"type":"string"},"configName":{"type":"string"},"onapName":{"type":"string"},"policyDescription":{"type":"string"},"policyName":{"type":"string"},"requestID":{"type":"string"}}},"Collection«string»":{"type":"object"},"PolicyResponse":{"type":"object","properties":{"actionAdvised":{"type":"object","additionalProperties":{"type":"string"}},"actionTaken":{"type":"object","additionalProperties":{"type":"string"}},"policyResponseMessage":{"type":"string"},"policyResponseStatus":{"type":"string","enum":["no_action","action_advised","action_taken"]},"requestAttributes":{"type":"object","additionalProperties":{"type":"string"}}}},"DeletePolicyParameters":{"type":"object","properties":{"deleteCondition":{"type":"string","enum":["Current Version","All Versions"]},"pdpGroup":{"type":"string"},"policyComponent":{"type":"string"},"policyName":{"type":"string"},"policyType":{"type":"string"},"requestID":{"type":"string"}}}}}
\ No newline at end of file
diff --git a/docs/platform/ctrlog_config.png b/docs/platform/ctrlog_config.png
new file mode 100755 (executable)
index 0000000..8d5aeb6
Binary files /dev/null and b/docs/platform/ctrlog_config.png differ
diff --git a/docs/platform/ctrlog_enablefeature.png b/docs/platform/ctrlog_enablefeature.png
new file mode 100755 (executable)
index 0000000..dc1abf3
Binary files /dev/null and b/docs/platform/ctrlog_enablefeature.png differ
diff --git a/docs/platform/ctrlog_logback.png b/docs/platform/ctrlog_logback.png
new file mode 100755 (executable)
index 0000000..252f3fe
Binary files /dev/null and b/docs/platform/ctrlog_logback.png differ
diff --git a/docs/platform/ctrlog_view.png b/docs/platform/ctrlog_view.png
new file mode 100755 (executable)
index 0000000..118bd64
Binary files /dev/null and b/docs/platform/ctrlog_view.png differ
diff --git a/docs/platform/feature_controllerlogging.rst b/docs/platform/feature_controllerlogging.rst
new file mode 100644 (file)
index 0000000..0677030
--- /dev/null
@@ -0,0 +1,50 @@
+
+.. This work is licensed under a Creative Commons Attribution 4.0 International License.
+.. http://creativecommons.org/licenses/by/4.0
+
+***************************
+Feature: Controller Logging
+***************************
+
+.. contents::
+    :depth: 3
+
+Summary
+^^^^^^^
+The controller logging feature provides a way to log network topic messages to a separate controller log file for each controller. This allows a clear separation of network traffic between all of the controllers.
+
+Enabling Controller Logging
+^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+Type "features enable controller-logging". The feature will now display as "enabled".
+
+    .. image:: ctrlog_enablefeature.png
+
+When the feature's enable script is executed, it will search the $POLICY_HOME/config directory for any logback files containing the prefix "logback-include-". These logger configuration files are typically provided with a feature that installs a controlloop (ex: controlloop-amsterdam and controlloop-casablanca features). Once these configuration files are found by the enable script, the logback.xml config file will be updated to include the configurations.
+
+    .. image:: ctrlog_logback.png
+
+
+Controller Logger Configuration
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+The contents of a logback-include-``*``.xml file follows the same configuration syntax as the logback.xml file. It will contain the configurations for the logger associated with the given controller. 
+
+    .. note:: A controller logger MUST be configured with the same name as the controller (ex: a controller named "casablanca" will have a logger named "casablanca").
+
+    .. image:: ctrlog_config.png
+
+
+Viewing the Controller Logs
+^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+Once a logger for the controller is configured, start the drools-pdp and navigate to the $POLICY_LOGS directory. A new controller specific network log will be added that contains all the network topic traffic of the controller.
+
+    .. image:: ctrlog_view.png
+
+The original network log remains and will append traffic information from all topics regardless of which controller it is for. To abbreviate and customize messages for the network log, refer to the `Feature MDC Filters <feature_mdcfilters.html>`_ documentation.
+
+
+End of Document
+
+
diff --git a/docs/platform/feature_mdcfilters.rst b/docs/platform/feature_mdcfilters.rst
new file mode 100644 (file)
index 0000000..b0f5543
--- /dev/null
@@ -0,0 +1,121 @@
+
+.. This work is licensed under a Creative Commons Attribution 4.0 International License.
+.. http://creativecommons.org/licenses/by/4.0
+
+********************
+Feature: MDC Filters
+********************
+
+.. contents::
+    :depth: 3
+
+Summary
+^^^^^^^
+The MDC Filter Feature provides configurable properties for network topics to extract fields from JSON strings and place them in a mapped diagnostic context (MDC).
+
+Network Log Structure Before Feature Enabled
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+Before enabling the feature, the network log contains the entire content of each message received on a topic. Below is a sample message from the network log. Note that the topic used for this tutorial is DCAE-CL.
+
+    .. code-block:: bash
+
+        [2019-03-22T16:36:42.942+00:00|DMAAP-source-DCAE-CL][IN|DMAAP|DCAE-CL]
+        {"closedLoopControlName":"ControlLoop-vCPE-48f0c2c3-a172-4192-9ae3-052274181b6e","closedLoopAlarmStart":1463679805324,"closedLoopEventClient":"DCAE_INSTANCE_ID.dcae-tca","closedLoopEventStatus":"ONSET","requestID":"664be3d2-6c12-4f4b-a3e7-c349acced200","target_type":"VNF","target":"generic-vnf.vnf-id","AAI":{"vserver.is-closed-loop-disabled":"false","vserver.prov-status":"ACTIVE","generic-vnf.vnf-id":"vCPE_Infrastructure_vGMUX_demo_app"},"from":"DCAE","version":"1.0.2"}
+
+The network log can become voluminous if messages received from various topics carry large messages for various controllers. With the MDC Filter Feature, users can define keywords in JSON messages to extract and structure according to a desired format. This is done through configuring the feature's properties.
+
+Configuring the MDC Filter Feature
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+To configure the feature, the feature must be enabled using the following command:
+
+    .. code-block:: bash
+
+        features enable mdc-filters
+
+
+    .. image:: mdc_enablefeature.png
+
+Once the feature is enabled, there will be a new properties file in *$POLICY_HOME/config* called **feature-mdc-filters.properties**.
+
+    .. image:: mdc_properties.png
+
+The properties file contains filters to extract key data from messages on the network topics that are saved in an MDC, which can be referenced in logback.xml.  The configuration format is as follows:
+
+    .. code-block:: bash
+
+       <protocol>.<type>.topics.<topic-name>.mdcFilters=<filters>
+
+       Where:
+          <protocol> = ueb, dmaap, noop
+          <type> = source, sink
+          <topic-name> = Name of DMaaP or UEB topic
+          <filters> = Comma separated list of key/json-path(s)
+
+The filters consist of an MDC key used by **logback.xml** (see below) and the JSON path(s) to the desired data. The path always begins with '$', which signifies the root of the JSON document. The underlying library, JsonPath, uses a query syntax for searching through a JSON file. The query syntax and some examples can be found at https://github.com/json-path/JsonPath.  An example filter for the *DCAE-CL* is provided below:
+
+    .. code-block:: bash
+
+       dmaap.source.topics.DCAE-CL.mdcFilters=requestID=$.requestID
+
+This filter is specifying that the dmaap source topic *DCAE-CL* will search each message received for requestID by following the path starting at the root ($) and searching for the field *requestID*. If the field is found, it is placed in the MDC with the key "requestID" as signified by the left hand side of the filter before the "=".
+
+
+Configuring Multiple Filters and Paths
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+Multiple fields can be found for a given JSON document by a comma separated list of <mdcKey,jsonPath> pairs. For the previous example, another filter is added by adding a comma and specifying the filter as follows:
+
+    .. code-block:: bash
+
+       dmaap.source.topics.DCAE-CL.mdcFilters=requestID=$.requestID,closedLoopName=$.closedLoopControlName
+
+The feature will now search for both requestID and closedLoopControlName in a JSON message using the specified "$." path notations and put them in the MDC using the keys "requestID" and "closedLoopName" respectively. To further refine the filter, if a topic receives different message structures (ex: a response message structure vs an error message structure) the "|" notation allows multiple paths to a key to be defined. The feature will search through each specified path until a match is found. An example can be found below:
+
+    .. code-block:: bash
+
+       dmaap.source.topics.DCAE-CL.mdcFilters=requestID=$.requestID,closedLoopName=$.closedLoopControlName|$.AAI.closedLoopControlName
+
+Now when the filter is searching for closedLoopControlName it will check the first path "$.closedLoopControlName", if it is not present then it will try the second path "$.AAI.closedLoopControlName". If the user is unsure of the path to a field, JsonPath supports a deep scan by using the ".." notation. This will search the entire JSON document for the field without specifying the path.
+
+
+Accessing the MDC Values in logback.xml
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+Once the feature properties have been defined, logback.xml contains a "abstractNetworkPattern" property that will hold the desired message structure defined by the user. The user has the flexibility to define the message structure however they choose but for this tutorial the following pattern is used:
+
+    .. code-block:: bash
+
+       <property name="abstractNetworkPattern" value="[%d{yyyy-MM-dd'T'HH:mm:ss.SSS+00:00, UTC}] [%X{networkEventType:-NULL}|%X{networkProtocol:-NULL}|%X{networkTopic:-NULL}|%X{requestID:-NULL}|%X{closedLoopName:-NULL}]%n" />
+
+The "value" portion consists of two headers in bracket notation, the first header defines the timestamp while the second header references the keys from the MDC filters defined in the feature properties. The standard logback syntax is used and more information on the syntax can be found here. Note that some of the fields here were not defined in the feature properties file. The feature automatically puts the network infrastructure information in the keys that are prepended with "network". The current supported network infrastructure information is listed below.
+
+   +-------------------+-------------------------------------------------+
+   |     Field         |    Values                                       |
+   +===================+=================================================+
+   | networkEventType  | IN, OUT                                         |
+   +-------------------+-------------------------------------------------+
+   | networkProtocol   | DMAAP, UEB, NOOP                                |
+   +-------------------+-------------------------------------------------+
+   | networkTopic      | The name of the topic that received the message |
+   +-------------------+-------------------------------------------------+
+
+
+To reference the keys from the feature properties the syntax "%X{KEY_DEFINED_IN_PROPERTIES}" provides access to the value. An optional addition is to append ":-", which specifies a default value to display in the log if the field was not found in the message received. For this tutorial, a default of "NULL" is displayed for any of the fields that were not found while filtering. The "|" has no special meaning and is just used as a field separator for readability; the user can decorate the log format to their desired visual appeal.
+
+Network Log Structure After Feature Enabled
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+Once the feature and logback.xml is configured to the user's desired settings, start the PDP-D by running "policy start". Based on the configurations from the previous sections of this tutorial, the following log message is written to network log when a message is received on the DCAE-CL topic:
+
+    .. code-block:: bash
+
+       [2019-03-22T16:38:23.884+00:00] [IN|DMAAP|DCAE-CL|664be3d2-6c12-4f4b-a3e7-c349acced200|ControlLoop-vCPE-48f0c2c3-a172-4192-9ae3-052274181b6e]
+
+The message has now been filtered to display the network infrastructure information and the extracted data from the JSON message based on the feature properties. In order to view the entire message received from a topic, a complementary feature was developed to display the entire message on a per controller basis while preserving the compact network log.  Refer to the `Feature Controller Logging <feature_controllerlogging.html>`_ documentation for details.
+
+
+
+End of Document
+
index 0d09771..6257e56 100644 (file)
@@ -48,6 +48,8 @@ PDP-D Features
    feature_activestdbymgmt.rst
    feature_locking.rst
    feature_pooling.rst
+   feature_controllerlogging.rst
+   feature_mdcfilters.rst
 
 
 Policy Platform Tutorials
diff --git a/docs/platform/mdc_enablefeature.png b/docs/platform/mdc_enablefeature.png
new file mode 100755 (executable)
index 0000000..26ae55a
Binary files /dev/null and b/docs/platform/mdc_enablefeature.png differ
diff --git a/docs/platform/mdc_properties.png b/docs/platform/mdc_properties.png
new file mode 100755 (executable)
index 0000000..63cea92
Binary files /dev/null and b/docs/platform/mdc_properties.png differ
index 1977351..5162609 100644 (file)
@@ -663,16 +663,5 @@ Examples
         }
 
 
-Additional Information
-^^^^^^^^^^^^^^^^^^^^^^
-
-Additional information, including examples, can be found at `PolicyApi link`_.
-
-.. _PolicyApi link: https://wiki.onap.org/display/DW/Policy+API
-
-
-
-
-
 End of Document
 
index ca9dee2..a0b058d 100644 (file)
@@ -59,6 +59,8 @@ The current extensions supported are:
 - `Feature Active/Standby Management <feature_activestdbymgmt.html>`_ (disabled by default)
 - `Feature Distributed Locking <feature_locking.html>`_ (enabled in OOM installation by default)
 - `Feature Pooling <feature_pooling.html>`_ (enabled in OOM installation by default)
+- `Feature Controller Logging <feature_controllerlogging.html>`_ (disabled by default)
+- `Feature MDC Filters <feature_mdcfilters.html>`_ (disabled by default)
 
 .. seealso:: Click on the individual feature links for more information