X-Git-Url: https://gerrit.onap.org/r/gitweb?a=blobdiff_plain;f=POLICY-SDK-APP%2Fsrc%2Fmain%2Fjava%2Forg%2Fonap%2Fpolicy%2Fcontroller%2FDecisionPolicyController.java;h=d12cbb2d4b577275cd4a0fb99e6cd5f6850e344d;hb=f36e53a3637e1204a42491ec0eeed7b3c763f681;hp=4e8c8c14155f16a6a6cef8e7013bb3658ee40282;hpb=79cd00fc32b9894672590418a5af9a64929db49d;p=policy%2Fengine.git diff --git a/POLICY-SDK-APP/src/main/java/org/onap/policy/controller/DecisionPolicyController.java b/POLICY-SDK-APP/src/main/java/org/onap/policy/controller/DecisionPolicyController.java index 4e8c8c141..d12cbb2d4 100644 --- a/POLICY-SDK-APP/src/main/java/org/onap/policy/controller/DecisionPolicyController.java +++ b/POLICY-SDK-APP/src/main/java/org/onap/policy/controller/DecisionPolicyController.java @@ -2,14 +2,14 @@ * ============LICENSE_START======================================================= * ONAP Policy Engine * ================================================================================ - * 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. @@ -30,19 +30,9 @@ import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.Map.Entry; + import javax.xml.bind.JAXBElement; -import org.apache.commons.io.IOUtils; -import org.apache.commons.lang3.StringUtils; -import org.onap.policy.common.logging.flexlogger.FlexLogger; -import org.onap.policy.common.logging.flexlogger.Logger; -import org.onap.policy.rest.adapter.PolicyRestAdapter; -import org.onap.policy.rest.adapter.RainyDayParams; -import org.onap.policy.rest.adapter.YAMLParams; -import org.onap.policy.rest.jpa.PolicyEntity; -import org.onap.policy.xacml.util.XACMLPolicyWriter; -import org.onap.portalsdk.core.controller.RestrictedBaseController; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.RequestMapping; + import oasis.names.tc.xacml._3_0.core.schema.wd_17.AdviceExpressionsType; import oasis.names.tc.xacml._3_0.core.schema.wd_17.AllOfType; import oasis.names.tc.xacml._3_0.core.schema.wd_17.AnyOfType; @@ -59,28 +49,47 @@ import oasis.names.tc.xacml._3_0.core.schema.wd_17.TargetType; import oasis.names.tc.xacml._3_0.core.schema.wd_17.VariableDefinitionType; import oasis.names.tc.xacml._3_0.core.schema.wd_17.VariableReferenceType; +import org.apache.commons.io.IOUtils; +import org.apache.commons.lang3.StringUtils; +import org.onap.policy.common.logging.flexlogger.FlexLogger; +import org.onap.policy.common.logging.flexlogger.Logger; +import org.onap.policy.rest.adapter.PolicyRestAdapter; +import org.onap.policy.rest.adapter.RainyDayParams; +import org.onap.policy.rest.adapter.YAMLParams; +import org.onap.policy.rest.jpa.PolicyEntity; +import org.onap.policy.xacml.util.XACMLPolicyWriter; +import org.onap.portalsdk.core.controller.RestrictedBaseController; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; + @Controller @RequestMapping("/") public class DecisionPolicyController extends RestrictedBaseController { private static final Logger policyLogger = FlexLogger.getLogger(DecisionPolicyController.class); - + public static final String FUNCTION_NOT = "urn:oasis:names:tc:xacml:1.0:function:not"; private static final String BLENTRY = "@blEntry@"; private static final String DECISIONRAWTYPE = "@#RuleProvider@#Decision_Raw@#RuleProvider@#"; - private static final String GUARD_YAML= "GUARD_YAML"; - private static final String GUARD_BL_YAML= "GUARD_BL_YAML"; - private static final String GUARD_MIN_MAX= "GUARD_MIN_MAX"; - + private static final String GUARD_YAML = "GUARD_YAML"; + private static final String GUARD_BL_YAML = "GUARD_BL_YAML"; + private static final String GUARD_MIN_MAX = "GUARD_MIN_MAX"; + protected PolicyRestAdapter policyAdapter = null; private ArrayList ruleAlgorithmList; private ArrayList treatmentList = null; protected LinkedList ruleAlgoirthmTracker; - + public DecisionPolicyController() { // This constructor is empty } - - public void rawXACMLPolicy(PolicyRestAdapter policyAdapter, PolicyEntity entity) { + + /** + * rawXacmlPolicy. Should this method be private? + * + * @param policyAdapter PolicyRestAdapter + * @param entity PolicyEntity + */ + public void rawXacmlPolicy(PolicyRestAdapter policyAdapter, PolicyEntity entity) { try (InputStream policyXmlStream = XACMLPolicyWriter.getXmlAsInputStream(policyAdapter.getPolicyData())) { String name = StringUtils.substringAfter(entity.getPolicyName(), "Decision_"); policyAdapter.setPolicyName(name.substring(0, name.indexOf('.'))); @@ -91,6 +100,12 @@ public class DecisionPolicyController extends RestrictedBaseController { } } + /** + * prePopulateDecisionPolicyData. + * + * @param policyAdapter PolicyRestAdapter + * @param entity PolicyEntity + */ @SuppressWarnings("unchecked") public void prePopulateDecisionPolicyData(PolicyRestAdapter policyAdapter, PolicyEntity entity) { List attributeList = new ArrayList<>(); @@ -106,7 +121,7 @@ public class DecisionPolicyController extends RestrictedBaseController { } if (rawPolicyCheck) { - rawXACMLPolicy(policyAdapter, entity); + rawXacmlPolicy(policyAdapter, entity); } else { RainyDayParams rainydayParams = new RainyDayParams(); Object policyData = policyAdapter.getPolicyData(); @@ -140,45 +155,46 @@ public class DecisionPolicyController extends RestrictedBaseController { AnyOfType anyOf = iterAnyOf.next(); // Under AntOfType we have AllOfType List allOfList = anyOf.getAllOf(); - if (allOfList != null) { - Iterator iterAllOf = allOfList.iterator(); - while (iterAllOf.hasNext()) { - AllOfType allOf = iterAllOf.next(); - // Under AllOfType we have Mathch. - List matchList = allOf.getMatch(); - int index = 0; - if (matchList != null) { - Iterator iterMatch = matchList.iterator(); - while (iterMatch.hasNext()) { - MatchType match = iterMatch.next(); - // - // Under the match we have attributevalue and - // attributeDesignator. So,finally down to the actual attribute. - // - AttributeValueType attributeValue = match.getAttributeValue(); - String value = (String) attributeValue.getContent().get(0); - if (value != null) { - value = value.replaceAll("\\(\\?i\\)", ""); - } - AttributeDesignatorType designator = match.getAttributeDesignator(); - String attributeId = designator.getAttributeId(); - // First match in the target is OnapName, so set that value. - if ("ONAPName".equals(attributeId)) { - policyAdapter.setOnapName(value); - } - // Component attributes are saved under Target here we are fetching them back. - // One row is default so we are not adding dynamic component at index 0. - if (index >= 1) { - Map attribute = new HashMap<>(); - attribute.put("key", attributeId); - attribute.put("value", value); - attributeList.add(attribute); - } - index++; + if (allOfList == null) { + continue; + } + Iterator iterAllOf = allOfList.iterator(); + while (iterAllOf.hasNext()) { + AllOfType allOf = iterAllOf.next(); + // Under AllOfType we have Mathch. + List matchList = allOf.getMatch(); + int index = 0; + if (matchList != null) { + Iterator iterMatch = matchList.iterator(); + while (iterMatch.hasNext()) { + MatchType match = iterMatch.next(); + // + // Under the match we have attributevalue and + // attributeDesignator. So,finally down to the actual attribute. + // + AttributeValueType attributeValue = match.getAttributeValue(); + String value = (String) attributeValue.getContent().get(0); + if (value != null) { + value = value.replaceAll("\\(\\?i\\)", ""); + } + AttributeDesignatorType designator = match.getAttributeDesignator(); + String attributeId = designator.getAttributeId(); + // First match in the target is OnapName, so set that value. + if ("ONAPName".equals(attributeId)) { + policyAdapter.setOnapName(value); } + // Component attributes are saved under Target here we are fetching them back. + // One row is default so we are not adding dynamic component at index 0. + if (index >= 1) { + Map attribute = new HashMap<>(); + attribute.put("key", attributeId); + attribute.put("value", value); + attributeList.add(attribute); + } + index++; } - policyAdapter.setAttributes(attributeList); } + policyAdapter.setAttributes(attributeList); } } // Setting rainy day attributes to the parameters object if they exist @@ -249,7 +265,7 @@ public class DecisionPolicyController extends RestrictedBaseController { if (policyAdapter.getRuleProvider() != null && (GUARD_YAML.equals(policyAdapter.getRuleProvider()) || (GUARD_BL_YAML.equals(policyAdapter.getRuleProvider())) - || (GUARD_MIN_MAX.equals(policyAdapter.getRuleProvider())))){ + || (GUARD_MIN_MAX.equals(policyAdapter.getRuleProvider())))) { YAMLParams yamlParams = new YAMLParams(); for (int i = 0; i < attributeList.size(); i++) { Map map = (Map) attributeList.get(i); @@ -377,7 +393,6 @@ public class DecisionPolicyController extends RestrictedBaseController { VariableReferenceType variableReference = (VariableReferenceType) jaxbDecisionTypes.get(0).getValue(); ruleMap.put("dynamicRuleAlgorithmField1", "S_" + variableReference.getVariableId()); - // Get from Attribute Value AttributeValueType actionConditionAttributeValue = (AttributeValueType) jaxbDecisionTypes.get(1).getValue(); String attributeValue = (String) actionConditionAttributeValue.getContent().get(0);