Fix operator associativity in SLI debug log 19/3419/2
authorGary Wu <gary.i.wu@huawei.com>
Thu, 13 Apr 2017 18:25:54 +0000 (11:25 -0700)
committerGary Wu <gary.i.wu@huawei.com>
Thu, 13 Apr 2017 19:13:52 +0000 (12:13 -0700)
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>
sli/common/src/main/java/org/openecomp/sdnc/sli/SvcLogicAtom.java
sli/common/src/main/java/org/openecomp/sdnc/sli/SvcLogicBinaryExpression.java
sli/common/src/test/resources/expression.tests

index e7a8715..9ac6489 100644 (file)
@@ -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");
index 9b35006..1d780d7 100644 (file)
@@ -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());
-               
        }
 
 }
index bc92495..c352e9b 100755 (executable)
@@ -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