From: Gary Wu Date: Thu, 13 Apr 2017 18:25:54 +0000 (-0700) Subject: Fix operator associativity in SLI debug log X-Git-Url: https://gerrit.onap.org/r/gitweb?a=commitdiff_plain;h=0ca979112add1fe6c2771676cfb36e90e6410174;p=sdnc%2Fcore.git Fix operator associativity in SLI debug log SvcLogicBinaryExpression.asParsedExpr() for debug logging was rendering expressions as if the operators were right associative, which is incorrect. This change fixes the method to render the operators as being left associative. Change-Id: Ief22c4ee24d48ed333b1bff54b84ed7dd7940779 Signed-off-by: Gary Wu --- diff --git a/sli/common/src/main/java/org/openecomp/sdnc/sli/SvcLogicAtom.java b/sli/common/src/main/java/org/openecomp/sdnc/sli/SvcLogicAtom.java index e7a8715..9ac6489 100644 --- a/sli/common/src/main/java/org/openecomp/sdnc/sli/SvcLogicAtom.java +++ b/sli/common/src/main/java/org/openecomp/sdnc/sli/SvcLogicAtom.java @@ -137,6 +137,11 @@ public class SvcLogicAtom extends SvcLogicExpression { public String asParsedExpr() { + // simplify debugging output for NUMBER type + if (atomType == AtomType.NUMBER) { + return atom; + } + StringBuffer sbuff = new StringBuffer(); sbuff.append("(atom"); diff --git a/sli/common/src/main/java/org/openecomp/sdnc/sli/SvcLogicBinaryExpression.java b/sli/common/src/main/java/org/openecomp/sdnc/sli/SvcLogicBinaryExpression.java index 9b35006..1d780d7 100644 --- a/sli/common/src/main/java/org/openecomp/sdnc/sli/SvcLogicBinaryExpression.java +++ b/sli/common/src/main/java/org/openecomp/sdnc/sli/SvcLogicBinaryExpression.java @@ -102,40 +102,48 @@ public class SvcLogicBinaryExpression extends SvcLogicExpression { sbuff.append(" "); sbuff.append(operators.get(i)); sbuff.append(" "); - sbuff.append(operands.get(i+1).toString()); + if (i + 1 < operands.size()) { + sbuff.append(operands.get(i + 1).toString()); + } else { + // expression incomplete; operand not bound yet + sbuff.append("?"); + } } return(sbuff.toString()); } - public String asParsedExpr() - { - - Listoperands = getOperands(); - StringBuffer sbuff = new StringBuffer(); - StringBuffer closeParens = new StringBuffer(); - int i = 0; - for (OperatorType operator : operators) - { - sbuff.append("("); - sbuff.append(operator.getText()); - sbuff.append(" "); - sbuff.append(operands.get(i++).asParsedExpr()); - closeParens.append(")"); - } - sbuff.append(" "); - if (i < operands.size()) - { - sbuff.append(operands.get(i).asParsedExpr()); - } - else - { - sbuff.append("__MISSING_OPERAND__"); + public String asParsedExpr() { + + List operands = getOperands(); + + if (operators.isEmpty()) { + return operands.get(0).asParsedExpr(); + } else { + StringBuffer sbuff = new StringBuffer(); + // operators in reverse order for left associativity + for (int i = operators.size() - 1; i >= 0; --i) { + sbuff.append("("); + sbuff.append(operators.get(i).getText()); + sbuff.append(" "); + } + for (int i = 0; i < operators.size() + 1; ++i) { + if (i < operands.size()) { + sbuff.append(operands.get(i).asParsedExpr()); + } else { + // expression incomplete; operand not bound yet + sbuff.append("?"); + } + if (i != 0) { + sbuff.append(")"); + } + if (i < operators.size()) { + sbuff.append(" "); + } + } + return sbuff.toString(); } - sbuff.append(closeParens.toString()); - return(sbuff.toString()); - } } diff --git a/sli/common/src/test/resources/expression.tests b/sli/common/src/test/resources/expression.tests index bc92495..c352e9b 100755 --- a/sli/common/src/test/resources/expression.tests +++ b/sli/common/src/test/resources/expression.tests @@ -13,3 +13,7 @@ length($network_segment[0].provider-physical-network) >= 5 substr($network_segment[0].provider-physical-network,0,5) == 'dvspg' length($network_segment[0].provider-physical-network) >= 5 and substr($network_segment[0].provider-physical-network,0,5) == 'dvspg' (length($network_segment[0].provider-physical-network) >= 5) and (substr($network_segment[0].provider-physical-network,0,5) == 'dvspg') +4-2-2 +1+1 +1 +1+2*3-4