Merge "Refactor getInnerDecisionApply function"
authorPamela Dragosh <pdragosh@research.att.com>
Tue, 9 Apr 2019 22:40:10 +0000 (22:40 +0000)
committerGerrit Code Review <gerrit@onap.org>
Tue, 9 Apr 2019 22:40:10 +0000 (22:40 +0000)
1  2 
ONAP-PAP-REST/src/main/java/org/onap/policy/pap/xacml/rest/components/DecisionPolicy.java

@@@ -26,7 -26,6 +26,6 @@@ import com.att.research.xacml.std.Ident
  import java.io.ByteArrayInputStream;
  import java.io.File;
  import java.io.IOException;
- import java.io.PrintWriter;
  import java.net.URI;
  import java.net.URISyntaxException;
  import java.nio.charset.StandardCharsets;
@@@ -40,9 -39,8 +39,8 @@@ import java.util.LinkedList
  import java.util.List;
  import java.util.Map;
  import java.util.UUID;
- import javax.script.SimpleBindings;
  import org.apache.commons.lang3.StringEscapeUtils;
- import org.apache.commons.lang3.StringUtils;
  import org.onap.policy.common.logging.eelf.MessageCodes;
  import org.onap.policy.common.logging.eelf.PolicyLogger;
  import org.onap.policy.common.logging.flexlogger.FlexLogger;
@@@ -457,7 -455,7 +455,7 @@@ public class DecisionPolicy extends Pol
      }
  
      private DecisionSettings findDecisionSettingsBySettingId(String settingId) {
 -        return (DecisionSettings) commonClassDao.getEntityItem(DecisionSettings.class, "xacmlId", settingId);
 +        return (DecisionSettings) commonClassDao.getEntityItem(DecisionSettings.class, "xacml_id", settingId);
      }
  
      private void createRule(PolicyType decisionPolicy, boolean permitRule) {
          // check the index for the label.
          for (String labelAttr : dynamicLabelRuleAlgorithms) {
              if (labelAttr.equals(value1Label)) {
-                 String value1 = dynamicFieldOneRuleAlgorithms.get(index);
-                 populateDataTypeList(value1);
+                 String attributeId = dynamicFieldOneRuleAlgorithms.get(index);
+                 populateDataTypeList(attributeId);
  
                  // check if the row contains label again
                  for (String labelValue : dynamicLabelRuleAlgorithms) {
-                     if (labelValue.equals(value1)) {
+                     if (labelValue.equals(attributeId)) {
                          return getCompoundDecisionApply(index);
                      }
                  }
  
                  // Getting the values from the form.
                  String functionKey = dynamicFieldComboRuleAlgorithms.get(index);
-                 String value2 = dynamicFieldTwoRuleAlgorithms.get(index);
+                 String attributeValue = dynamicFieldTwoRuleAlgorithms.get(index);
                  decisionApply.setFunctionId(getFunctionDefinitionId(functionKey));
                  // if two text field are rule attributes.
-                 if ((value1.contains(RULE_VARIABLE)) && (value2.contains(RULE_VARIABLE))) {
-                     ApplyType innerDecisionApply1 = new ApplyType();
-                     ApplyType innerDecisionApply2 = new ApplyType();
-                     AttributeDesignatorType attributeDesignator1 = new AttributeDesignatorType();
-                     AttributeDesignatorType attributeDesignator2 = new AttributeDesignatorType();
-                     // If selected function is Integer function set integer functionID
-                     if (functionKey.toLowerCase().contains("integer")) {
-                         innerDecisionApply1.setFunctionId(FUNTION_INTEGER_ONE_AND_ONLY);
-                         innerDecisionApply2.setFunctionId(FUNTION_INTEGER_ONE_AND_ONLY);
-                         attributeDesignator1.setDataType(INTEGER_DATATYPE);
-                         attributeDesignator2.setDataType(INTEGER_DATATYPE);
-                     } else {
-                         // If selected function is not a Integer function set String functionID
-                         innerDecisionApply1.setFunctionId(FUNCTION_STRING_ONE_AND_ONLY);
-                         innerDecisionApply2.setFunctionId(FUNCTION_STRING_ONE_AND_ONLY);
-                         attributeDesignator1.setDataType(STRING_DATATYPE);
-                         attributeDesignator2.setDataType(STRING_DATATYPE);
-                     }
-                     attributeDesignator1.setCategory(CATEGORY_RESOURCE);
-                     attributeDesignator2.setCategory(CATEGORY_RESOURCE);
-                     // Here set actual field values
-                     attributeDesignator1
-                             .setAttributeId(value1.contains("resource:") ? value1.substring(9) : value1.substring(8));
-                     attributeDesignator2
-                             .setAttributeId(value1.contains("resource:") ? value1.substring(9) : value1.substring(8));
-                     innerDecisionApply1.getExpression()
-                             .add(new ObjectFactory().createAttributeDesignator(attributeDesignator1));
-                     innerDecisionApply2.getExpression()
-                             .add(new ObjectFactory().createAttributeDesignator(attributeDesignator2));
-                     decisionApply.getExpression().add(new ObjectFactory().createApply(innerDecisionApply1));
-                     decisionApply.getExpression().add(new ObjectFactory().createApply(innerDecisionApply2));
+                 if ((attributeId.contains(RULE_VARIABLE)) && (attributeValue.contains(RULE_VARIABLE))) {
+                     applyTwoTextFieldRuleAttribute(decisionApply, attributeId, functionKey);
                  } else {
                      // if either of one text field is rule attribute.
-                     if (!value1.startsWith("S_")) {
-                         ApplyType innerDecisionApply = new ApplyType();
-                         AttributeDesignatorType attributeDesignator = new AttributeDesignatorType();
-                         AttributeValueType decisionConditionAttributeValue = new AttributeValueType();
-                         if (functionKey.toLowerCase().contains("integer")) {
-                             innerDecisionApply.setFunctionId(FUNTION_INTEGER_ONE_AND_ONLY);
-                             decisionConditionAttributeValue.setDataType(INTEGER_DATATYPE);
-                             attributeDesignator.setDataType(INTEGER_DATATYPE);
-                         } else {
-                             innerDecisionApply.setFunctionId(FUNCTION_STRING_ONE_AND_ONLY);
-                             decisionConditionAttributeValue.setDataType(STRING_DATATYPE);
-                             attributeDesignator.setDataType(STRING_DATATYPE);
-                         }
-                         String attributeId = null;
-                         String attributeValue = null;
-                         // Find which textField has rule attribute and set it as
-                         // attributeId and the other as attributeValue.
-                         attributeId = value1;
-                         attributeValue = value2;
+                     if (!attributeId.startsWith("S_")) {
+                         ApplyType innerDecisionApply = generateApplyTypeDataType(functionKey);
+                         AttributeDesignatorType attributeDesignator = generateAttributeDesignatorDataType(functionKey);
+                         AttributeValueType decisionConditionAttributeValue = generateAttributeValueTypeDataType(functionKey);
  
                          if (attributeId != null) {
                              attributeDesignator.setCategory(CATEGORY_RESOURCE);
                                  .add(new ObjectFactory().createAttributeValue(decisionConditionAttributeValue));
                          decisionApply.getExpression().add(new ObjectFactory().createApply(innerDecisionApply));
                      } else {
-                         value1 = value1.substring(2, value1.length());
+                         attributeId = attributeId.substring(2, attributeId.length());
                          VariableReferenceType variableReferenceType = new VariableReferenceType();
-                         variableReferenceType.setVariableId(value1);
+                         variableReferenceType.setVariableId(attributeId);
  
                          String dataType = dataTypeList.get(index);
  
                          AttributeValueType decisionConditionAttributeValue = new AttributeValueType();
                          decisionConditionAttributeValue.setDataType(dataType);
-                         decisionConditionAttributeValue.getContent().add(value2);
+                         decisionConditionAttributeValue.getContent().add(attributeValue);
                          decisionApply.getExpression()
                                  .add(new ObjectFactory().createVariableReference(variableReferenceType));
                          decisionApply.getExpression()
  
      public String getFunctionDefinitionId(String key) {
          FunctionDefinition object =
 -                (FunctionDefinition) commonClassDao.getEntityItem(FunctionDefinition.class, "shortname", key);
 +                (FunctionDefinition) commonClassDao.getEntityItem(FunctionDefinition.class, "short_name", key);
          if (object != null) {
              return object.getXacmlid();
          }
          return null;
      }
  
+     private AttributeDesignatorType generateAttributeDesignatorDataType(String functionKey) {
+         AttributeDesignatorType attributeDesignator = new AttributeDesignatorType();
+         switch(functionKey.toLowerCase())
+         {
+             case "integer":
+                 attributeDesignator.setDataType(INTEGER_DATATYPE);
+                 break;
+             default:
+                 attributeDesignator.setDataType(STRING_DATATYPE);
+         }
+         return attributeDesignator;
+     }
+     private ApplyType generateApplyTypeDataType(String functionKey) {
+         ApplyType applyType = new ApplyType();
+         switch(functionKey.toLowerCase())
+         {
+             case "integer":
+                 applyType.setFunctionId(FUNTION_INTEGER_ONE_AND_ONLY);
+                 break;
+             default:
+                 applyType.setFunctionId(FUNCTION_STRING_ONE_AND_ONLY);
+         }
+         return applyType;
+     }
+     private AttributeValueType generateAttributeValueTypeDataType(String functionKey) {
+         AttributeValueType applyType = new AttributeValueType();
+         switch(functionKey.toLowerCase())
+         {
+             case "integer":
+                 applyType.setDataType(INTEGER_DATATYPE);
+                 break;
+             default:
+                 applyType.setDataType(STRING_DATATYPE);
+         }
+         return applyType;
+     }
+     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)));
+     }
+     private ApplyType generateApplyTypeDataType(String value1, String functionKey) {
+         ApplyType innerApply = generateApplyTypeDataType(functionKey);
+         AttributeDesignatorType attributeDesignator = generateAttributeDesignatorDataType(functionKey);
+         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));
+         return innerApply;
+     }
  }