X-Git-Url: https://gerrit.onap.org/r/gitweb?a=blobdiff_plain;f=ONAP-PAP-REST%2Fsrc%2Fmain%2Fjava%2Forg%2Fonap%2Fpolicy%2Fpap%2Fxacml%2Frest%2Fcontroller%2FPushPolicyController.java;fp=ONAP-PAP-REST%2Fsrc%2Fmain%2Fjava%2Forg%2Fonap%2Fpolicy%2Fpap%2Fxacml%2Frest%2Fcontroller%2FPushPolicyController.java;h=227be1bdfeaa144a693a621046b3b37cc78df997;hb=f0fec2a861ea0a92b27b40882ea38f9422cde0c6;hp=397904f30defde9f04350970b83c5714b9fbbff2;hpb=7a6c4f9214a71101db3354ed06ccd3cfd3cea65b;p=policy%2Fengine.git diff --git a/ONAP-PAP-REST/src/main/java/org/onap/policy/pap/xacml/rest/controller/PushPolicyController.java b/ONAP-PAP-REST/src/main/java/org/onap/policy/pap/xacml/rest/controller/PushPolicyController.java index 397904f30..227be1bdf 100644 --- a/ONAP-PAP-REST/src/main/java/org/onap/policy/pap/xacml/rest/controller/PushPolicyController.java +++ b/ONAP-PAP-REST/src/main/java/org/onap/policy/pap/xacml/rest/controller/PushPolicyController.java @@ -55,134 +55,134 @@ import com.fasterxml.jackson.databind.ObjectMapper; @Controller public class PushPolicyController { - 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 operation = "operation"; - private static String messageContent = "message"; - - private static final String REGEX = "[0-9a-zA-Z._ ]*"; - - @Autowired - public PushPolicyController(CommonClassDao commonClassDao){ - PushPolicyController.commonClassDao = commonClassDao; - } - - public void setCommonClassDao(CommonClassDao commonClassDao){ - PushPolicyController.commonClassDao = commonClassDao; - } - /* - * This is an empty constructor - */ - public PushPolicyController(){} - - @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 { - JsonNode root = mapper.readTree(request.getInputStream()); - String policyScope = root.get("policyScope").asText(); - String filePrefix = root.get("filePrefix").asText(); - String policyName = root.get(policyNames).asText(); - String pdpGroup = root.get("pdpGroup").asText(); - String requestID = request.getHeader("X-ECOMP-RequestID"); - if(requestID==null){ - requestID = UUID.randomUUID().toString(); + 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 operation = "operation"; + private static String messageContent = "message"; + + private static final String REGEX = "[0-9a-zA-Z._ ]*"; + + @Autowired + public PushPolicyController(CommonClassDao commonClassDao){ + PushPolicyController.commonClassDao = commonClassDao; + } + + public void setCommonClassDao(CommonClassDao commonClassDao){ + PushPolicyController.commonClassDao = commonClassDao; + } + /* + * This is an empty constructor + */ + public PushPolicyController(){} + + @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 { + JsonNode root = mapper.readTree(request.getInputStream()); + String policyScope = root.get("policyScope").asText(); + String filePrefix = root.get("filePrefix").asText(); + String policyName = root.get(policyNames).asText(); + String pdpGroup = root.get("pdpGroup").asText(); + String requestID = request.getHeader("X-ECOMP-RequestID"); + 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){ - 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{ - 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; - } - } + } + 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){ + 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{ + 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) { - StdPDPGroup selectedPDPGroup = null; - StdPDPPolicy selectedPolicy = null; - //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){ - String message = "Unknown groupId '" + selectedPDPGroup + "'"; - if(!message.matches(REGEX) ){ - message = "Unknown groupId"; - } - PolicyLogger.error(MessageCodes.ERROR_DATA_ISSUE + " " + message); - response.addHeader(errorMsg, "unknownGroupId"); - response.addHeader(operation, "push"); - response.addHeader(messageContent, message); - 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(); - 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"); - 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; - } - File temp = new File(policyName); - 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); - } - try { - new ObjectOutputStream(response.getOutputStream()).writeObject(selectedPolicy); - } catch (IOException e) { - LOGGER.error(e); - response.addHeader(errorMsg, "policyCopyError"); - response.addHeader(messageContent, e.getMessage()); - response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); - return; - } - 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. - } + 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 + try { + selectedPDPGroup = (StdPDPGroup) XACMLPapServlet.getPAPEngine().getGroup(pdpGroup); + } catch (PAPException e1) { + PolicyLogger.error(e1); + } + if(selectedPDPGroup==null){ + String message = "Unknown groupId '" + selectedPDPGroup + "'"; + if(!message.matches(REGEX) ){ + message = "Unknown groupId"; + } + PolicyLogger.error(MessageCodes.ERROR_DATA_ISSUE + " " + message); + response.addHeader(errorMsg, "unknownGroupId"); + response.addHeader(operation, "push"); + response.addHeader(messageContent, message); + 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(); + 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"); + 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; + } + File temp = new File(policyName); + 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); + } + try { + new ObjectOutputStream(response.getOutputStream()).writeObject(selectedPolicy); + } catch (IOException e) { + LOGGER.error(e); + response.addHeader(errorMsg, "policyCopyError"); + response.addHeader(messageContent, e.getMessage()); + response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); + return; + } + 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. + } }