aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGary Wu <gary.i.wu@huawei.com>2017-04-13 11:25:54 -0700
committerGary Wu <gary.i.wu@huawei.com>2017-04-13 12:13:52 -0700
commit0ca979112add1fe6c2771676cfb36e90e6410174 (patch)
treef8cbb1fb248176990be131e2c0f30e5500cfadd3
parentb6ed3bfa8f64a4850392f47daf46846fec51e36d (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>
-rw-r--r--sli/common/src/main/java/org/openecomp/sdnc/sli/SvcLogicAtom.java5
-rw-r--r--sli/common/src/main/java/org/openecomp/sdnc/sli/SvcLogicBinaryExpression.java62
-rwxr-xr-xsli/common/src/test/resources/expression.tests4
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