55import com .github .sidhant92 .boolparser .constant .ContainerDataType ;
66import com .github .sidhant92 .boolparser .constant .DataType ;
77import com .github .sidhant92 .boolparser .constant .Operator ;
8- import com .github .sidhant92 .boolparser .domain .BooleanToken ;
9- import com .github .sidhant92 .boolparser .domain .InToken ;
10- import com .github .sidhant92 .boolparser .domain .NumericRangeToken ;
11- import com .github .sidhant92 .boolparser .domain .NumericToken ;
12- import com .github .sidhant92 .boolparser .domain .StringToken ;
13- import com .github .sidhant92 .boolparser .domain .Token ;
14- import com .github .sidhant92 .boolparser .domain .UnaryToken ;
8+ import com .github .sidhant92 .boolparser .domain .BooleanNode ;
9+ import com .github .sidhant92 .boolparser .domain .InNode ;
10+ import com .github .sidhant92 .boolparser .domain .NumericRangeNode ;
11+ import com .github .sidhant92 .boolparser .domain .ComparisonNode ;
12+ import com .github .sidhant92 .boolparser .domain .Node ;
13+ import com .github .sidhant92 .boolparser .domain .UnaryNode ;
1514import com .github .sidhant92 .boolparser .exception .InvalidUnaryOperand ;
1615import com .github .sidhant92 .boolparser .operator .OperatorService ;
1716import com .github .sidhant92 .boolparser .parser .BoolExpressionParser ;
@@ -34,47 +33,37 @@ public BooleanExpressionEvaluator(final BoolExpressionParser boolExpressionParse
3433 }
3534
3635 public Try <Boolean > evaluate (final String expression , final Map <String , Object > data ) {
37- final Try <Token > tokenOptional = boolExpressionParser .parseExpression (expression );
36+ final Try <Node > tokenOptional = boolExpressionParser .parseExpression (expression );
3837 return tokenOptional .map (node -> evaluateToken (node , data ));
3938 }
4039
41- private boolean evaluateToken (final Token token , final Map <String , Object > data ) {
42- switch (token .getTokenType ()) {
43- case STRING :
44- return evaluateStringToken ((StringToken ) token , data );
45- case NUMERIC :
46- return evaluateNumericToken ((NumericToken ) token , data );
40+ private boolean evaluateToken (final Node node , final Map <String , Object > data ) {
41+ switch (node .getTokenType ()) {
42+ case COMPARISON :
43+ return evaluateComparisonToken ((ComparisonNode ) node , data );
4744 case NUMERIC_RANGE :
48- return evaluateNumericRangeToken ((NumericRangeToken ) token , data );
45+ return evaluateNumericRangeToken ((NumericRangeNode ) node , data );
4946 case IN :
50- return evaluateInToken ((InToken ) token , data );
47+ return evaluateInToken ((InNode ) node , data );
5148 case UNARY :
52- return evaluateUnaryToken ((UnaryToken ) token , data );
49+ return evaluateUnaryToken ((UnaryNode ) node , data );
5350 case BOOLEAN :
54- return evaluateBooleanNode ((BooleanToken ) token , data );
51+ return evaluateBooleanNode ((BooleanNode ) node , data );
5552 default :
5653 return false ;
5754 }
5855 }
5956
60- private boolean evaluateStringToken (final StringToken stringToken , final Map <String , Object > data ) {
61- if (checkFieldDataMissing (stringToken .getField (), data )) {
57+ private boolean evaluateComparisonToken (final ComparisonNode comparisonToken , final Map <String , Object > data ) {
58+ if (checkFieldDataMissing (comparisonToken .getField (), data )) {
6259 return false ;
6360 }
64- final Object fieldData = data .get (stringToken .getField ());
65- return operatorService .evaluate (Operator .EQUALS , ContainerDataType .primitive , DataType .STRING , fieldData , stringToken .getValue ());
61+ final Object fieldData = data .get (comparisonToken .getField ());
62+ return operatorService .evaluate (comparisonToken .getOperator (), ContainerDataType .primitive , comparisonToken .getDataType (), fieldData ,
63+ comparisonToken .getValue ());
6664 }
6765
68- private boolean evaluateNumericToken (final NumericToken numericToken , final Map <String , Object > data ) {
69- if (checkFieldDataMissing (numericToken .getField (), data )) {
70- return false ;
71- }
72- final Object fieldData = data .get (numericToken .getField ());
73- return operatorService .evaluate (numericToken .getOperator (), ContainerDataType .primitive , numericToken .getDataType (), fieldData ,
74- numericToken .getValue ());
75- }
76-
77- private boolean evaluateNumericRangeToken (final NumericRangeToken numericRangeToken , final Map <String , Object > data ) {
66+ private boolean evaluateNumericRangeToken (final NumericRangeNode numericRangeToken , final Map <String , Object > data ) {
7867 if (checkFieldDataMissing (numericRangeToken .getField (), data )) {
7968 return false ;
8069 }
@@ -86,7 +75,7 @@ private boolean evaluateNumericRangeToken(final NumericRangeToken numericRangeTo
8675 numericRangeToken .getToValue ());
8776 }
8877
89- private boolean evaluateInToken (final InToken inToken , final Map <String , Object > data ) {
78+ private boolean evaluateInToken (final InNode inToken , final Map <String , Object > data ) {
9079 if (checkFieldDataMissing (inToken .getField (), data )) {
9180 return false ;
9281 }
@@ -98,7 +87,7 @@ private boolean evaluateInToken(final InToken inToken, final Map<String, Object>
9887 return operatorService .evaluate (Operator .IN , ContainerDataType .primitive , dataType , fieldData , values );
9988 }
10089
101- private boolean evaluateUnaryToken (final UnaryToken unaryToken , final Map <String , Object > data ) {
90+ private boolean evaluateUnaryToken (final UnaryNode unaryToken , final Map <String , Object > data ) {
10291 if (unaryToken .getDataType ().equals (DataType .BOOLEAN )) {
10392 return (boolean ) unaryToken .getValue ();
10493 }
@@ -112,7 +101,7 @@ private boolean evaluateUnaryToken(final UnaryToken unaryToken, final Map<String
112101 return (boolean ) fieldValue ;
113102 }
114103
115- private boolean evaluateBooleanNode (final BooleanToken booleanToken , final Map <String , Object > data ) {
104+ private boolean evaluateBooleanNode (final BooleanNode booleanToken , final Map <String , Object > data ) {
116105 switch (booleanToken .getOperator ()) {
117106 case AND :
118107 return evaluateToken (booleanToken .getLeft (), data ) && evaluateToken (booleanToken .getRight (), data );
0 commit comments