diff options
author | 2017-04-13 11:25:54 -0700 | |
---|---|---|
committer | 2017-04-13 12:13:52 -0700 | |
commit | 0ca979112add1fe6c2771676cfb36e90e6410174 (patch) | |
tree | f8cbb1fb248176990be131e2c0f30e5500cfadd3 | |
parent | b6ed3bfa8f64a4850392f47daf46846fec51e36d (diff) |
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 <gary.i.wu@huawei.com>
3 files changed, 44 insertions, 27 deletions
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() - { - - List<SvcLogicExpression>operands = 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<SvcLogicExpression> 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 |