11package com .github .sidhant92 .boolparser .parser .antlr ;
22
33import java .util .List ;
4+ import java .util .Objects ;
45import java .util .Stack ;
56import java .util .stream .Collectors ;
7+ import org .apache .commons .lang3 .StringUtils ;
68import org .apache .commons .lang3 .tuple .Pair ;
79import com .github .sidhant92 .boolparser .constant .DataType ;
810import com .github .sidhant92 .boolparser .constant .LogicalOperationType ;
@@ -25,7 +27,10 @@ public class BooleanFilterListener extends BooleanExpressionBaseListener {
2527
2628 private org .antlr .v4 .runtime .Token lastToken ;
2729
28- public BooleanFilterListener () {
30+ private String defaultField ;
31+
32+ public BooleanFilterListener (final String defaultField ) {
33+ this .defaultField = defaultField ;
2934 this .node = null ;
3035 this .lastToken = null ;
3136 this .currentNodes = new Stack <>();
@@ -37,7 +42,7 @@ public Node getNode() {
3742
3843 @ Override
3944 public void exitComparatorExpression (BooleanExpressionParser .ComparatorExpressionContext ctx ) {
40- final String variableName = ctx .left .getText ();
45+ final String variableName = getField ( ctx .left .getText () );
4146 final DataType dataType = getDataType (ctx .right .getStart ());
4247 final Operator operator = Operator .getOperatorFromSymbol (ctx .op .getText ()).orElse (Operator .EQUALS );
4348 currentNodes .add (new ComparisonNode (variableName , ValueUtils .convertValue (ctx .right .getText (), dataType ), operator , dataType ));
@@ -46,7 +51,7 @@ public void exitComparatorExpression(BooleanExpressionParser.ComparatorExpressio
4651
4752 @ Override
4853 public void exitToExpression (BooleanExpressionParser .ToExpressionContext ctx ) {
49- final String field = ctx .field .getText ();
54+ final String field = getField ( ctx .field .getText () );
5055 final DataType lowerDataType = getDataType (ctx .lower .start );
5156 final Object lowerValue = ValueUtils .convertValue (ctx .lower .start .getText (), lowerDataType );
5257 final DataType upperDataType = getDataType (ctx .upper .start );
@@ -57,7 +62,7 @@ public void exitToExpression(BooleanExpressionParser.ToExpressionContext ctx) {
5762
5863 @ Override
5964 public void exitInExpression (BooleanExpressionParser .InExpressionContext ctx ) {
60- final String field = ctx .field .getText ();
65+ final String field = getField ( ctx .field .getText () );
6166 final List <Pair <DataType , Object >> items = ctx .data .children
6267 .stream ()
6368 .filter (child -> child instanceof BooleanExpressionParser .TypesContext )
@@ -71,6 +76,13 @@ public void exitInExpression(BooleanExpressionParser.InExpressionContext ctx) {
7176 super .exitInExpression (ctx );
7277 }
7378
79+ private String getField (final String field ) {
80+ if (Objects .isNull (defaultField )) {
81+ return field ;
82+ }
83+ return StringUtils .isBlank (field ) ? defaultField : field ;
84+ }
85+
7486 private DataType getDataType (final org .antlr .v4 .runtime .Token token ) {
7587 switch (token .getType ()) {
7688 case BooleanExpressionLexer .DECIMAL :
0 commit comments