X-Git-Url: https://gerrit.onap.org/r/gitweb?a=blobdiff_plain;f=ONAP-PDP-REST%2Fsrc%2Fmain%2Fjava%2Forg%2Fonap%2Fpolicy%2Fpdp%2Frest%2Fapi%2Fservices%2FPushPolicyService.java;h=87049612935913972a683c3da143a671cb07e307;hb=c72526cde70d6b2899d9e4bbc40e096e0ecf1b7d;hp=a3d18b3e6a82dfddaf0f1835f2ba22c39cc14053;hpb=fb3cc27605623672fb8971bd9030872f117c7af8;p=policy%2Fengine.git diff --git a/ONAP-PDP-REST/src/main/java/org/onap/policy/pdp/rest/api/services/PushPolicyService.java b/ONAP-PDP-REST/src/main/java/org/onap/policy/pdp/rest/api/services/PushPolicyService.java index a3d18b3e6..870496129 100644 --- a/ONAP-PDP-REST/src/main/java/org/onap/policy/pdp/rest/api/services/PushPolicyService.java +++ b/ONAP-PDP-REST/src/main/java/org/onap/policy/pdp/rest/api/services/PushPolicyService.java @@ -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. @@ -17,11 +17,15 @@ * 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,172 +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 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 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 policyNames = Arrays.asList(pushPolicyParameters.getPolicyName().split(",")); + List 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 ("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; } - }