All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.unlaxer.tinyexpression.evaluator.javacode.BooleanBuilder Maven / Gradle / Ivy

package org.unlaxer.tinyexpression.evaluator.javacode;

import org.unlaxer.Token;
import org.unlaxer.parser.Parser;
import org.unlaxer.parser.elementary.ParenthesesParser;
import org.unlaxer.tinyexpression.evaluator.javacode.JavaCodeCalculator.CodeBuilder;
import org.unlaxer.tinyexpression.evaluator.javacode.validator.ParserValuesValidator;
import org.unlaxer.tinyexpression.parser.BooleanVariableParser;
import org.unlaxer.tinyexpression.parser.EqualEqualExpressionParser;
import org.unlaxer.tinyexpression.parser.FalseTokenParser;
import org.unlaxer.tinyexpression.parser.GreaterExpressionParser;
import org.unlaxer.tinyexpression.parser.GreaterOrEqualExpressionParser;
import org.unlaxer.tinyexpression.parser.InTimeRangeParser;
import org.unlaxer.tinyexpression.parser.IsPresentParser;
import org.unlaxer.tinyexpression.parser.LessExpressionParser;
import org.unlaxer.tinyexpression.parser.LessOrEqualExpressionParser;
import org.unlaxer.tinyexpression.parser.NakedVariableParser;
import org.unlaxer.tinyexpression.parser.NotBooleanExpressionParser;
import org.unlaxer.tinyexpression.parser.NotEqualExpressionParser;
import org.unlaxer.tinyexpression.parser.SideEffectBooleanExpressionParser;
import org.unlaxer.tinyexpression.parser.SideEffectStringToBooleanExpressionParser;
import org.unlaxer.tinyexpression.parser.StringContainsParser;
import org.unlaxer.tinyexpression.parser.StringEndsWithParser;
import org.unlaxer.tinyexpression.parser.StringEqualsExpressionParser;
import org.unlaxer.tinyexpression.parser.StringInParser;
import org.unlaxer.tinyexpression.parser.StringNotEqualsExpressionParser;
import org.unlaxer.tinyexpression.parser.StringStartsWithParser;
import org.unlaxer.tinyexpression.parser.TrueTokenParser;

public class BooleanBuilder implements CodeBuilder {
	
	public static final BooleanBuilder SINGLETON = new BooleanBuilder();
	private ParserValuesValidator parserValuesValidator = new ParserValuesValidator();


	@Override
	public void build(SimpleJavaCodeBuilder builder, Token token) {
		Parser parser = token.parser;
		
		if(parser instanceof NotBooleanExpressionParser) {
			
			builder.append("(false ==(");
			build(builder , token.filteredChildren.get(0));
			builder.append("))");
				
		}else if(parser instanceof ParenthesesParser){
		
			Token parenthesesed = ParenthesesParser.getParenthesesed(token);
			builder.append("(");
			build(builder , parenthesesed);
			builder.append(")");
			
		
		}else if(parser instanceof IsPresentParser){
			
			String variableName = token.tokenString.get().substring(1);

			builder.append("calculateContext.isExists(").w(variableName).append(")");

		} else if (parser instanceof InTimeRangeParser) {
			String fromHour = token.filteredChildren.get(0).tokenString.get();
			String toHour= token.filteredChildren.get(1).tokenString.get();

			parserValuesValidator.validateTimeRangeValues(fromHour, toHour);
			builder.append("org.unlaxer.tinyexpression.function.EmbeddedFunction.inTimeRange(calculateContext,").append(fromHour).append("f,")
					.append(toHour).append("f)");
					
		}else if(parser instanceof BooleanVariableParser) {
		  
			String variableName = BooleanVariableParser.getVariableName(token);
			builder.append("calculateContext.getBoolean(").w(variableName).append(").orElse(false)");
			
    }else if(parser instanceof NakedVariableParser) {
      
      String variableName = NakedVariableParser.getVariableName(token);
      builder.append("calculateContext.getBoolean(").w(variableName).append(").orElse(false)");
      
		}else if(parser instanceof TrueTokenParser){
			
			builder.append("true");
			
		}else if(parser instanceof FalseTokenParser){
			
			builder.append("false");
			
		}else if(
			parser instanceof EqualEqualExpressionParser ||
			parser instanceof NotEqualExpressionParser ||
			parser instanceof GreaterOrEqualExpressionParser ||
			parser instanceof LessOrEqualExpressionParser ||
			parser instanceof GreaterExpressionParser ||
			parser instanceof LessExpressionParser
		){
			BinaryConditionBuilder.SINGLETON.build(builder, token);
			
		}else if (parser instanceof StringEqualsExpressionParser) {

			StringBooleanEqualClauseBuilder.SINGLETON.build(builder, token);

		} else if (token.parser instanceof StringNotEqualsExpressionParser) {

			StringBooleanNotEqualClauseBuilder.SINGLETON.build(builder, token);

		}else if(
			parser instanceof StringStartsWithParser||
			parser instanceof StringEndsWithParser||
			parser instanceof StringContainsParser
		){
			
			StringMethodClauseBuilder.SINGLETON.build(builder, token);
			
		} else if (token.parser instanceof StringInParser) {

			StringInBooleanClauseBuilder.SINGLETON.build(builder, token);

		} else if (token.parser instanceof SideEffectBooleanExpressionParser) {
			
			SideEffectBooleanExpressionBuilder.SINGLETON.build(builder , token.filteredChildren.get(0));
			
		} else if (token.parser instanceof SideEffectStringToBooleanExpressionParser) {
			
			SideEffectStringToBooleanExpressionBuilder.SINGLETON.build(builder , token.filteredChildren.get(0));
			
		}else {
			throw new IllegalArgumentException();
		}
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy