Consolidate PolicyRestAdapter setup
[policy/engine.git] / ONAP-PAP-REST / src / main / java / org / onap / policy / pap / xacml / rest / controller / PushPolicyController.java
index 227be1b..b7b63a9 100644 (file)
@@ -2,14 +2,14 @@
  * ============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.
  * 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.pap.xacml.rest.controller;
 
+import com.att.research.xacml.api.pap.PAPException;
+import com.fasterxml.jackson.databind.DeserializationFeature;
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+
 import java.io.BufferedWriter;
 import java.io.File;
 import java.io.FileWriter;
@@ -28,8 +34,7 @@ import java.net.URI;
 import java.util.List;
 import java.util.UUID;
 
-import javax.persistence.EntityManager;
-import javax.persistence.Query;
+import javax.script.SimpleBindings;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
@@ -48,38 +53,35 @@ import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMethod;
 
-import com.att.research.xacml.api.pap.PAPException;
-import com.fasterxml.jackson.databind.DeserializationFeature;
-import com.fasterxml.jackson.databind.JsonNode;
-import com.fasterxml.jackson.databind.ObjectMapper;
-
 @Controller
 public class PushPolicyController {
-    private static final Logger LOGGER  = FlexLogger.getLogger(PushPolicyController.class);
+    private static final Logger LOGGER = FlexLogger.getLogger(PushPolicyController.class);
 
     private static CommonClassDao commonClassDao;
     private static String policyNames = "policyName";
-    private static String errorMsg     = "error";
+    private static String errorMsg = "error";
     private static String operation = "operation";
     private static String messageContent = "message";
 
     private static final String REGEX = "[0-9a-zA-Z._ ]*";
 
     @Autowired
-    public PushPolicyController(CommonClassDao commonClassDao){
+    public PushPolicyController(CommonClassDao commonClassDao) {
         PushPolicyController.commonClassDao = commonClassDao;
     }
 
-    public void setCommonClassDao(CommonClassDao commonClassDao){
+    public void setCommonClassDao(CommonClassDao commonClassDao) {
         PushPolicyController.commonClassDao = commonClassDao;
     }
+
     /*
      * This is an empty constructor
      */
-    public PushPolicyController(){}
+    public PushPolicyController() {
+    }
 
-    @RequestMapping(value="/pushPolicy", method=RequestMethod.POST)
-    public void pushPolicy(HttpServletRequest request, HttpServletResponse response){
+    @RequestMapping(value = "/pushPolicy", method = RequestMethod.POST)
+    public void pushPolicy(HttpServletRequest request, HttpServletResponse response) {
         ObjectMapper mapper = new ObjectMapper();
         mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
         try {
@@ -89,49 +91,50 @@ public class PushPolicyController {
             String policyName = root.get(policyNames).asText();
             String pdpGroup = root.get("pdpGroup").asText();
             String requestID = request.getHeader("X-ECOMP-RequestID");
-            if(requestID==null){
+            if (requestID == null) {
                 requestID = UUID.randomUUID().toString();
                 LOGGER.info("No request ID provided, sending generated ID: " + requestID);
             }
             LOGGER.info("Push policy Request to get the selectedPolicy : " + root.asText());
-            String policyVersionName = policyScope.replace(".", File.separator) + File.separator
-                    + filePrefix + policyName;
-            List<?> policyVersionObject = commonClassDao.getDataById(PolicyVersion.class, policyNames, policyVersionName);
-            if(policyVersionObject!=null){
+            String policyVersionName =
+                    policyScope.replace(".", File.separator) + File.separator + filePrefix + policyName;
+            List<?> policyVersionObject =
+                    commonClassDao.getDataById(PolicyVersion.class, policyNames, policyVersionName);
+            if (policyVersionObject != null) {
                 PolicyVersion policyVersion = (PolicyVersion) policyVersionObject.get(0);
                 String policyID = policyVersionName.replace(File.separator, "."); // This is before adding version.
                 policyVersionName += "." + policyVersion.getActiveVersion() + ".xml";
-                addPolicyToGroup(policyScope, policyID, policyVersionName.replace(File.separator, "."), pdpGroup, response);
-            }else{
+                addPolicyToGroup(policyScope, policyID, policyVersionName.replace(File.separator, "."), pdpGroup,
+                        response);
+            } else {
                 String message = "Unknown Policy '" + policyName + "'";
                 PolicyLogger.error(MessageCodes.ERROR_DATA_ISSUE + " " + message);
                 response.addHeader(errorMsg, "unknownPolicy");
                 response.addHeader(operation, "push");
                 response.addHeader(messageContent, message);
                 response.setStatus(HttpServletResponse.SC_NOT_FOUND);
-                return;
             }
         } catch (NullPointerException | IOException e) {
             LOGGER.error(e);
             response.setStatus(HttpServletResponse.SC_NOT_FOUND);
             response.addHeader(errorMsg, "unknown");
             response.addHeader(operation, "push");
-            return;
         }
     }
 
-    private void addPolicyToGroup(String policyScope, String policyID, String policyName, String pdpGroup, HttpServletResponse response) {
+    private void addPolicyToGroup(String policyScope, String policyID, String policyName, String pdpGroup,
+            HttpServletResponse response) {
         StdPDPGroup selectedPDPGroup = null;
         StdPDPPolicy selectedPolicy = null;
-        //Get the selected PDP Group to push the policy
+        // Get the selected PDP Group to push the policy
         try {
             selectedPDPGroup = (StdPDPGroup) XACMLPapServlet.getPAPEngine().getGroup(pdpGroup);
         } catch (PAPException e1) {
             PolicyLogger.error(e1);
         }
-        if(selectedPDPGroup==null){
+        if (selectedPDPGroup == null) {
             String message = "Unknown groupId '" + selectedPDPGroup + "'";
-            if(!message.matches(REGEX) ){
+            if (!message.matches(REGEX)) {
                 message = "Unknown groupId";
             }
             PolicyLogger.error(MessageCodes.ERROR_DATA_ISSUE + " " + message);
@@ -141,17 +144,21 @@ public class PushPolicyController {
             response.setStatus(HttpServletResponse.SC_NOT_FOUND);
             return;
         }
-        //Get PolicyEntity from DB;
-        EntityManager em = XACMLPapServlet.getEmf().createEntityManager();
-        Query createPolicyQuery = em.createQuery("SELECT p FROM PolicyEntity p WHERE p.scope=:scope AND p.policyName=:policyName");
-        createPolicyQuery.setParameter("scope", policyScope);
-        createPolicyQuery.setParameter(policyNames, policyName.substring(policyScope.length()+1));
-        List<?> createPolicyQueryList = createPolicyQuery.getResultList();
+        // Get PolicyEntity from DB;
+        String createPolicyQuery = "SELECT p FROM PolicyEntity p WHERE p.scope=:scope AND p.policyName=:policyName";
+        SimpleBindings params = new SimpleBindings();
+        params.put("scope", policyScope);
+        params.put(policyNames, policyName.substring(policyScope.length() + 1));
+        List<?> createPolicyQueryList = commonClassDao.getDataByQuery(createPolicyQuery, params);
+        LOGGER.info("addPolicyToGroup:Total execution time to retrieve " + policyNames + " from PolicyEntity");
+
         PolicyEntity policyEntity = null;
-        if(!createPolicyQueryList.isEmpty()){
-            policyEntity = (PolicyEntity)createPolicyQueryList.get(0);
-        }else{
-            PolicyLogger.error("Somehow, more than one policy with the same scope, name, and deleted status were found in the database");
+        if (!createPolicyQueryList.isEmpty()) {
+            policyEntity = (PolicyEntity) createPolicyQueryList.get(0);
+        } else {
+            PolicyLogger
+                    .error("Somehow, more than one policy with the same scope, name, and deleted status were found in"
+                            + " the database");
             String message = "Unknown Policy '" + policyName + "'";
             PolicyLogger.error(MessageCodes.ERROR_DATA_ISSUE + " " + message);
             response.addHeader(errorMsg, "unknownPolicy");
@@ -161,13 +168,13 @@ public class PushPolicyController {
             return;
         }
         File temp = new File(policyName);
-        try (BufferedWriter bw = new BufferedWriter(new FileWriter(temp))){
+        try (BufferedWriter bw = new BufferedWriter(new FileWriter(temp))) {
             bw.write(policyEntity.getPolicyData());
             URI selectedURI = temp.toURI();
             // Create the policy Object
             selectedPolicy = new StdPDPPolicy(policyName, true, policyID, selectedURI);
         } catch (IOException e) {
-            LOGGER.error("Unable to get policy '" + policyName + "': "+ e.getMessage(),e);
+            LOGGER.error("Unable to get policy '" + policyName + "': " + e.getMessage(), e);
         }
         try {
             new ObjectOutputStream(response.getOutputStream()).writeObject(selectedPolicy);
@@ -178,11 +185,10 @@ public class PushPolicyController {
             response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
             return;
         }
-        response.addHeader("Content-Type","application/json");
+        response.addHeader("Content-Type", "application/json");
         response.setStatus(HttpServletResponse.SC_ACCEPTED);
         response.addHeader(operation, "push");
         response.addHeader("policyId", policyName);
-        return;
         // TODO : Check point to push policies within PAP.
     }
 }