66import java .util .Map ;
77import java .util .Optional ;
88import java .util .stream .Collectors ;
9- import org .apache .commons .lang3 .tuple .Pair ;
109import com .github .sidhant92 .boolparser .constant .ContainerDataType ;
1110import com .github .sidhant92 .boolparser .constant .DataType ;
1211import com .github .sidhant92 .boolparser .constant .Operator ;
12+ import com .github .sidhant92 .boolparser .domain .EvaluatedNode ;
1313import com .github .sidhant92 .boolparser .domain .UnaryNode ;
1414import com .github .sidhant92 .boolparser .domain .arithmetic .ArithmeticLeafNode ;
1515import com .github .sidhant92 .boolparser .domain .arithmetic .ArithmeticNode ;
@@ -62,46 +62,46 @@ private Object evaluateToken(final Node node, final Map<String, Object> data) {
6262 case ARITHMETIC_FUNCTION :
6363 return evaluateArithmeticFunctionToken ((ArithmeticFunctionNode ) node , data );
6464 case UNARY :
65- return evaluateStringToken ((UnaryNode ) node , data );
65+ return evaluateUnaryToken ((UnaryNode ) node , data );
6666 default :
6767 log .error ("unsupported token {}" , node .getTokenType ());
6868 throw new UnsupportedToken ();
6969 }
7070 }
7171
72- private Object evaluateStringToken (final UnaryNode unaryNode , final Map <String , Object > data ) {
72+ private Object evaluateUnaryToken (final UnaryNode unaryNode , final Map <String , Object > data ) {
7373 return unaryNode .getDataType () == DataType .STRING ? ValueUtils .getValueFromMap (unaryNode .getValue ().toString (), data )
7474 .orElse (unaryNode .getValue ()) : unaryNode .getValue ();
7575 }
7676
77- private Pair < Object , DataType > evaluateArithmeticLeafToken (final ArithmeticLeafNode arithmeticLeafNode , final Map <String , Object > data ) {
77+ private EvaluatedNode evaluateArithmeticLeafToken (final ArithmeticLeafNode arithmeticLeafNode , final Map <String , Object > data ) {
7878 final Optional <Object > fetchedValue = arithmeticLeafNode .getDataType () != DataType .STRING ? Optional .of (
7979 arithmeticLeafNode .getOperand ()) : ValueUtils .getValueFromMap (arithmeticLeafNode .getOperand ().toString (), data );
8080 return fetchedValue
81- .map (o -> Pair . of ( o , ValueUtils .getDataType (o )))
82- .orElseGet (() -> Pair . of ( arithmeticLeafNode .getOperand (), arithmeticLeafNode .getDataType ()));
81+ .map (o -> EvaluatedNode . builder (). value ( o ). dataType ( ValueUtils .getDataType (o )). build ( ))
82+ .orElseGet (() -> EvaluatedNode . builder (). value ( arithmeticLeafNode .getOperand ()). dataType ( arithmeticLeafNode .getDataType ()). build ( ));
8383 }
8484
8585 private Object evaluateUnaryArithmeticToken (final ArithmeticUnaryNode arithmeticUnaryNode , final Map <String , Object > data ) {
8686 final Object resolvedValue = evaluateToken (arithmeticUnaryNode .getOperand (), data );
87- if (resolvedValue instanceof Pair ) {
88- final Pair < Object , DataType > pair = (Pair < Object , DataType > ) resolvedValue ;
89- return operatorService .evaluateArithmeticOperator (pair . getLeft (), pair . getRight (), null , null , Operator .UNARY ,
87+ if (resolvedValue instanceof EvaluatedNode ) {
88+ final EvaluatedNode evaluatedNode = (EvaluatedNode ) resolvedValue ;
89+ return operatorService .evaluateArithmeticOperator (evaluatedNode . getValue (), evaluatedNode . getDataType (), null , null , Operator .UNARY ,
9090 ContainerDataType .PRIMITIVE );
9191 }
9292 final DataType dataType = ValueUtils .getDataType (resolvedValue );
9393 return operatorService .evaluateArithmeticOperator (resolvedValue , dataType , null , null , Operator .UNARY , ContainerDataType .PRIMITIVE );
9494 }
9595
9696 private Object evaluateArithmeticFunctionToken (final ArithmeticFunctionNode arithmeticFunctionNode , final Map <String , Object > data ) {
97- final List <Pair < Object , DataType > > resolvedValues = arithmeticFunctionNode .getItems ()
97+ final List <EvaluatedNode > resolvedValues = arithmeticFunctionNode .getItems ()
9898 .stream ()
9999 .map (item -> evaluateArithmeticLeafToken (item , data ))
100100 .collect (Collectors .toList ());
101- final List <Pair < Object , DataType > > flattenedValues = new ArrayList <>();
101+ final List <EvaluatedNode > flattenedValues = new ArrayList <>();
102102 resolvedValues .forEach (value -> {
103- if (value .getKey () instanceof Collection ) {
104- ((Collection <?>) value .getKey ()).forEach (v -> flattenedValues .add (Pair . of ( v , ValueUtils .getDataType (v ))));
103+ if (value .getValue () instanceof Collection ) {
104+ ((Collection <?>) value .getValue ()).forEach (v -> flattenedValues .add (EvaluatedNode . builder (). value ( v ). dataType ( ValueUtils .getDataType (v )). build ( )));
105105 } else {
106106 flattenedValues .add (value );
107107 }
@@ -112,20 +112,20 @@ private Object evaluateArithmeticFunctionToken(final ArithmeticFunctionNode arit
112112 private Object evaluateArithmeticToken (final ArithmeticNode arithmeticNode , final Map <String , Object > data ) {
113113 final Object leftValue = evaluateToken (arithmeticNode .getLeft (), data );
114114 final Object rightValue = evaluateToken (arithmeticNode .getRight (), data );
115- if (leftValue instanceof Pair && rightValue instanceof Pair ) {
116- final Pair < Object , DataType > leftPair = (Pair < Object , DataType > ) leftValue ;
117- final Pair < Object , DataType > rightPair = (Pair < Object , DataType > ) rightValue ;
118- return operatorService .evaluateArithmeticOperator (leftPair .getLeft (), leftPair .getRight (), rightPair .getLeft (), rightPair .getRight (),
115+ if (leftValue instanceof EvaluatedNode && rightValue instanceof EvaluatedNode ) {
116+ final EvaluatedNode leftPair = (EvaluatedNode ) leftValue ;
117+ final EvaluatedNode rightPair = (EvaluatedNode ) rightValue ;
118+ return operatorService .evaluateArithmeticOperator (leftPair .getValue (), leftPair .getDataType (), rightPair .getValue (), rightPair .getDataType (),
119119 arithmeticNode .getOperator (), ContainerDataType .PRIMITIVE );
120- } else if (leftValue instanceof Pair ) {
121- final Pair < Object , DataType > leftPair = (Pair < Object , DataType > ) leftValue ;
120+ } else if (leftValue instanceof EvaluatedNode ) {
121+ final EvaluatedNode leftPair = (EvaluatedNode ) leftValue ;
122122 final DataType rightDataType = ValueUtils .getDataType (rightValue );
123- return operatorService .evaluateArithmeticOperator (leftPair .getLeft (), leftPair .getRight (), rightValue , rightDataType ,
123+ return operatorService .evaluateArithmeticOperator (leftPair .getValue (), leftPair .getDataType (), rightValue , rightDataType ,
124124 arithmeticNode .getOperator (), ContainerDataType .PRIMITIVE );
125- } else if (rightValue instanceof Pair ) {
126- final Pair < Object , DataType > rightPair = (Pair < Object , DataType > ) rightValue ;
125+ } else if (rightValue instanceof EvaluatedNode ) {
126+ final EvaluatedNode rightPair = (EvaluatedNode ) rightValue ;
127127 final DataType leftDataType = ValueUtils .getDataType (leftValue );
128- return operatorService .evaluateArithmeticOperator (leftValue , leftDataType , rightPair .getLeft (), rightPair .getRight (),
128+ return operatorService .evaluateArithmeticOperator (leftValue , leftDataType , rightPair .getValue (), rightPair .getDataType (),
129129 arithmeticNode .getOperator (), ContainerDataType .PRIMITIVE );
130130 } else {
131131 final DataType leftDataType = ValueUtils .getDataType (leftValue );
0 commit comments