Consolidate PolicyRestAdapter setup
[policy/engine.git] / ONAP-PAP-REST / src / main / java / org / onap / policy / pap / xacml / rest / components / DecisionPolicy.java
index 5e2bb58..ed1d551 100644 (file)
@@ -7,9 +7,9 @@
  * 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.
@@ -23,6 +23,7 @@ package org.onap.policy.pap.xacml.rest.components;
 import com.att.research.xacml.api.XACML3;
 import com.att.research.xacml.api.pap.PAPException;
 import com.att.research.xacml.std.IdentifierImpl;
+
 import java.io.ByteArrayInputStream;
 import java.io.File;
 import java.io.IOException;
@@ -40,6 +41,25 @@ import java.util.List;
 import java.util.Map;
 import java.util.UUID;
 
+import oasis.names.tc.xacml._3_0.core.schema.wd_17.AdviceExpressionType;
+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;
+import oasis.names.tc.xacml._3_0.core.schema.wd_17.ApplyType;
+import oasis.names.tc.xacml._3_0.core.schema.wd_17.AttributeAssignmentExpressionType;
+import oasis.names.tc.xacml._3_0.core.schema.wd_17.AttributeDesignatorType;
+import oasis.names.tc.xacml._3_0.core.schema.wd_17.AttributeValueType;
+import oasis.names.tc.xacml._3_0.core.schema.wd_17.ConditionType;
+import oasis.names.tc.xacml._3_0.core.schema.wd_17.EffectType;
+import oasis.names.tc.xacml._3_0.core.schema.wd_17.MatchType;
+import oasis.names.tc.xacml._3_0.core.schema.wd_17.ObjectFactory;
+import oasis.names.tc.xacml._3_0.core.schema.wd_17.PolicySetType;
+import oasis.names.tc.xacml._3_0.core.schema.wd_17.PolicyType;
+import oasis.names.tc.xacml._3_0.core.schema.wd_17.RuleType;
+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.lang3.StringEscapeUtils;
 import org.onap.policy.common.logging.eelf.MessageCodes;
 import org.onap.policy.common.logging.eelf.PolicyLogger;
@@ -63,25 +83,6 @@ import org.onap.policy.xacml.std.pip.engines.aaf.AAFEngine;
 import org.onap.policy.xacml.util.XACMLPolicyScanner;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
-import oasis.names.tc.xacml._3_0.core.schema.wd_17.AdviceExpressionType;
-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;
-import oasis.names.tc.xacml._3_0.core.schema.wd_17.ApplyType;
-import oasis.names.tc.xacml._3_0.core.schema.wd_17.AttributeAssignmentExpressionType;
-import oasis.names.tc.xacml._3_0.core.schema.wd_17.AttributeDesignatorType;
-import oasis.names.tc.xacml._3_0.core.schema.wd_17.AttributeValueType;
-import oasis.names.tc.xacml._3_0.core.schema.wd_17.ConditionType;
-import oasis.names.tc.xacml._3_0.core.schema.wd_17.EffectType;
-import oasis.names.tc.xacml._3_0.core.schema.wd_17.MatchType;
-import oasis.names.tc.xacml._3_0.core.schema.wd_17.ObjectFactory;
-import oasis.names.tc.xacml._3_0.core.schema.wd_17.PolicySetType;
-import oasis.names.tc.xacml._3_0.core.schema.wd_17.PolicyType;
-import oasis.names.tc.xacml._3_0.core.schema.wd_17.RuleType;
-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;
-
 
 @Component
 public class DecisionPolicy extends Policy {
@@ -103,7 +104,6 @@ public class DecisionPolicy extends Policy {
     private static final String POLICY_NAME = "PolicyName";
     private static final String DESCRIPTION = "description";
 
-
     List<String> dynamicLabelRuleAlgorithms = new LinkedList<>();
     List<String> dynamicFieldComboRuleAlgorithms = new LinkedList<>();
     List<String> dynamicFieldOneRuleAlgorithms = new LinkedList<>();
@@ -147,23 +147,22 @@ public class DecisionPolicy extends Policy {
         successMap = createPolicy(newPolicyPath, getCorrectPolicyDataObject());
         return successMap;
     }
-    
+
     /**
      * Scan the Raw Policy data and set to PolicyAdapter.
      */
     private void readRawPolicyData() {
         Object policy;
         if ("API".equalsIgnoreCase(policyAdapter.getApiflag())) {
-            policy = XACMLPolicyScanner.readPolicy(new ByteArrayInputStream(StringEscapeUtils
-                    .unescapeXml(policyAdapter.getRawXacmlPolicy()).getBytes(StandardCharsets.UTF_8)));
+            policy = XACMLPolicyScanner.readPolicy(new ByteArrayInputStream(
+                    StringEscapeUtils.unescapeXml(policyAdapter.getRawXacmlPolicy()).getBytes(StandardCharsets.UTF_8)));
         } else {
             policy = XACMLPolicyScanner.readPolicy(
                     new ByteArrayInputStream(policyAdapter.getRawXacmlPolicy().getBytes(StandardCharsets.UTF_8)));
         }
         String policyRawDesc;
         if (policy instanceof PolicySetType) {
-            policyRawDesc =
-                    ((PolicySetType) policy).getDescription() + "@#RuleProvider@#Decision_Raw@#RuleProvider@#";
+            policyRawDesc = ((PolicySetType) policy).getDescription() + "@#RuleProvider@#Decision_Raw@#RuleProvider@#";
             ((PolicySetType) policy).setDescription(policyRawDesc);
         } else {
             policyRawDesc = ((PolicyType) policy).getDescription() + "@#RuleProvider@#Decision_Raw@#RuleProvider@#";
@@ -172,7 +171,7 @@ public class DecisionPolicy extends Policy {
         policyAdapter.setPolicyData(policy);
         policyAdapter.setData(policy);
         setPreparedToSave(true);
-         
+
     }
 
     // This is the method for preparing the policy for saving. We have broken it out
@@ -204,13 +203,13 @@ public class DecisionPolicy extends Policy {
         }
         policyName = policyAdapter.getNewFileName();
 
-        if(policyAdapter.getRuleProvider().equals(GUARD_YAML) || 
-                policyAdapter.getRuleProvider().equals(GUARD_BL_YAML) || 
-                policyAdapter.getRuleProvider().equals(GUARD_MIN_MAX)){
-            
+        if (policyAdapter.getRuleProvider().equals(GUARD_YAML) || policyAdapter.getRuleProvider().equals(GUARD_BL_YAML)
+                || policyAdapter.getRuleProvider().equals(GUARD_MIN_MAX)) {
+
             Map<String, String> yamlParams = new HashMap<>();
-            String blackListEntryType = policyAdapter.getBlackListEntryType() != null
-                    ? policyAdapter.getBlackListEntryType() : "Use Manual Entry";
+            String blackListEntryType =
+                    policyAdapter.getBlackListEntryType() != null ? policyAdapter.getBlackListEntryType()
+                            : "Use Manual Entry";
             String description = policyAdapter.getPolicyDescription() != null ? policyAdapter.getPolicyDescription()
                     : "YAML Guard Policy";
             yamlParams.put(DESCRIPTION, description + "@blEntry@" + blackListEntryType + "@blEntry@");
@@ -368,7 +367,7 @@ public class DecisionPolicy extends Policy {
                 case GUARD_MIN_MAX:
                     templateFile = new File(classLoader.getResource(XACML_GUARD_MIN_MAX_TEMPLATE).getFile());
                     xacmlTemplatePath = templateFile.toPath();
-                    cons = new Constraint(Integer.parseInt(yamlParams.get("min")), 
+                    cons = new Constraint(Integer.parseInt(yamlParams.get("min")),
                             Integer.parseInt(yamlParams.get("max")), activeTimeRange);
                     break;
                 default:
@@ -390,7 +389,7 @@ public class DecisionPolicy extends Policy {
                     cons = new Constraint(Integer.parseInt(yamlParams.get("limit")), timeWindow, activeTimeRange);
                     break;
             }
-            
+
             builder = builder.addLimitConstraint(policy1.getId(), cons);
             // Build the specification
             Results results = builder.buildSpecification();
@@ -403,45 +402,37 @@ public class DecisionPolicy extends Policy {
                 yamlSpecs.put(POLICY_NAME, yamlParams.get(POLICY_NAME));
                 yamlSpecs.put(DESCRIPTION, yamlParams.get(DESCRIPTION));
                 yamlSpecs.put(ONAPNAME, yamlParams.get(ONAPNAME));
-                yamlSpecs.put("actor", yamlGuardObject.getGuards().getFirst().getMatch_parameters().getActor());
-                yamlSpecs.put("recipe", yamlGuardObject.getGuards().getFirst().getMatch_parameters().getRecipe());
-                yamlSpecs.put("clname",
-                        yamlGuardObject.getGuards().getFirst().getMatch_parameters().getControlLoopName());
-                if (yamlGuardObject.getGuards().getFirst().getLimit_constraints().getFirst()
-                        .getFreq_limit_per_target() != null) {
-                    yamlSpecs.put("limit", yamlGuardObject.getGuards().getFirst().getLimit_constraints().getFirst()
-                            .getFreq_limit_per_target().toString());
+                GuardPolicy guard = yamlGuardObject.getGuards().get(0);
+
+                yamlSpecs.put("actor", guard.getMatch_parameters().getActor());
+                yamlSpecs.put("recipe", guard.getMatch_parameters().getRecipe());
+                yamlSpecs.put("clname", guard.getMatch_parameters().getControlLoopName());
+
+                Constraint constraints = guard.getLimit_constraints().get(0);
+                if (constraints.getFreq_limit_per_target() != null) {
+                    yamlSpecs.put("limit", constraints.getFreq_limit_per_target().toString());
                 }
-                if (yamlGuardObject.getGuards().getFirst().getLimit_constraints().getFirst().getTime_window() != null) {
-                    yamlSpecs.put("twValue", yamlGuardObject.getGuards().getFirst().getLimit_constraints().getFirst()
-                            .getTime_window().get("value"));
-                    yamlSpecs.put("twUnits", yamlGuardObject.getGuards().getFirst().getLimit_constraints().getFirst()
-                            .getTime_window().get("units"));
+                if (constraints.getTime_window() != null) {
+                    yamlSpecs.put("twValue", constraints.getTime_window().get("value"));
+                    yamlSpecs.put("twUnits", constraints.getTime_window().get("units"));
                 }
-                
-                if (yamlGuardObject.getGuards().getFirst().getLimit_constraints().
-                        getFirst().getMaxVnfCount() != null) {
-                    yamlSpecs.put("max", yamlGuardObject.getGuards().getFirst().getLimit_constraints().getFirst()
-                            .getMaxVnfCount().toString());
+
+                if (constraints.getMaxVnfCount() != null) {
+                    yamlSpecs.put("max", constraints.getMaxVnfCount().toString());
                 }
-                if (yamlGuardObject.getGuards().getFirst().getLimit_constraints().
-                        getFirst().getMinVnfCount() != null) {
-                    yamlSpecs.put("min", yamlGuardObject.getGuards().getFirst().getLimit_constraints().getFirst()
-                            .getMinVnfCount().toString());
+                if (constraints.getMinVnfCount() != null) {
+                    yamlSpecs.put("min", constraints.getMinVnfCount().toString());
                 }
 
-                yamlSpecs.put("guardActiveStart", yamlGuardObject.getGuards().getFirst().getLimit_constraints()
-                        .getFirst().getActive_time_range().get("start"));
-                yamlSpecs.put("guardActiveEnd", yamlGuardObject.getGuards().getFirst().getLimit_constraints().getFirst()
-                        .getActive_time_range().get("end"));
+                yamlSpecs.put("guardActiveStart", constraints.getActive_time_range().get("start"));
+                yamlSpecs.put("guardActiveEnd", constraints.getActive_time_range().get("end"));
                 String xacmlPolicyContent = SafePolicyBuilder.generateXacmlGuard(xacmlTemplateContent, yamlSpecs,
-                        yamlGuardObject.getGuards().getFirst().getLimit_constraints().getFirst().getBlacklist(),
-                        yamlGuardObject.getGuards().getFirst().getMatch_parameters().getTargets());
-                
+                        constraints.getBlacklist(), guard.getMatch_parameters().getTargets());
+
                 // Convert the Policy into Stream input to Policy Adapter.
                 Object policy = XACMLPolicyScanner
                         .readPolicy(new ByteArrayInputStream(xacmlPolicyContent.getBytes(StandardCharsets.UTF_8)));
-                
+
                 return (PolicyType) policy;
             } catch (IOException e) {
                 LOGGER.error(XACMLErrorConstants.ERROR_DATA_ISSUE + "Error while creating the policy " + e.getMessage(),
@@ -720,7 +711,8 @@ public class DecisionPolicy extends Policy {
                     if (!attributeId.startsWith("S_")) {
                         ApplyType innerDecisionApply = generateApplyTypeDataType(functionKey);
                         AttributeDesignatorType attributeDesignator = generateAttributeDesignatorDataType(functionKey);
-                        AttributeValueType decisionConditionAttributeValue = generateAttributeValueTypeDataType(functionKey);
+                        AttributeValueType decisionConditionAttributeValue =
+                                generateAttributeValueTypeDataType(functionKey);
 
                         if (attributeId != null) {
                             attributeDesignator.setCategory(CATEGORY_RESOURCE);
@@ -800,7 +792,6 @@ public class DecisionPolicy extends Policy {
         dataTypeList.add(dataType);
     }
 
-
     private String getDataType(String key) {
 
         DecisionSettings decisionSettings = findDecisionSettingsBySettingId(key);
@@ -833,8 +824,7 @@ public class DecisionPolicy extends Policy {
 
     private AttributeDesignatorType generateAttributeDesignatorDataType(String functionKey) {
         AttributeDesignatorType attributeDesignator = new AttributeDesignatorType();
-        switch(functionKey.toLowerCase())
-        {
+        switch (functionKey.toLowerCase()) {
             case "integer":
                 attributeDesignator.setDataType(INTEGER_DATATYPE);
                 break;
@@ -846,8 +836,7 @@ public class DecisionPolicy extends Policy {
 
     private ApplyType generateApplyTypeDataType(String functionKey) {
         ApplyType applyType = new ApplyType();
-        switch(functionKey.toLowerCase())
-        {
+        switch (functionKey.toLowerCase()) {
             case "integer":
                 applyType.setFunctionId(FUNTION_INTEGER_ONE_AND_ONLY);
                 break;
@@ -859,8 +848,7 @@ public class DecisionPolicy extends Policy {
 
     private AttributeValueType generateAttributeValueTypeDataType(String functionKey) {
         AttributeValueType applyType = new AttributeValueType();
-        switch(functionKey.toLowerCase())
-        {
+        switch (functionKey.toLowerCase()) {
             case "integer":
                 applyType.setDataType(INTEGER_DATATYPE);
                 break;
@@ -871,8 +859,10 @@ public class DecisionPolicy extends Policy {
     }
 
     private void applyTwoTextFieldRuleAttribute(ApplyType decisionApply, String value1, String functionKey) {
-        decisionApply.getExpression().add(new ObjectFactory().createApply(generateApplyTypeDataType(value1, functionKey)));
-        decisionApply.getExpression().add(new ObjectFactory().createApply(generateApplyTypeDataType(value1, functionKey)));
+        decisionApply.getExpression()
+                .add(new ObjectFactory().createApply(generateApplyTypeDataType(value1, functionKey)));
+        decisionApply.getExpression()
+                .add(new ObjectFactory().createApply(generateApplyTypeDataType(value1, functionKey)));
     }
 
     private ApplyType generateApplyTypeDataType(String value1, String functionKey) {
@@ -881,10 +871,8 @@ public class DecisionPolicy extends Policy {
 
         attributeDesignator.setCategory(CATEGORY_RESOURCE);
         // Here set actual field values
-        attributeDesignator
-                .setAttributeId(value1.contains("resource:") ? value1.substring(9) : value1.substring(8));
-        innerApply.getExpression()
-                .add(new ObjectFactory().createAttributeDesignator(attributeDesignator));
+        attributeDesignator.setAttributeId(value1.contains("resource:") ? value1.substring(9) : value1.substring(8));
+        innerApply.getExpression().add(new ObjectFactory().createAttributeDesignator(attributeDesignator));
         return innerApply;
     }