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

com.talanlabs.mybatis.rsql.engine.where.ComponentRsqlVisitor Maven / Gradle / Ivy

The newest version!
package com.talanlabs.mybatis.rsql.engine.where;

import com.talanlabs.component.IComponent;
import com.talanlabs.component.factory.ComponentDescriptor;
import com.talanlabs.component.factory.ComponentFactory;
import com.talanlabs.mybatis.rsql.engine.EngineContext;
import com.talanlabs.mybatis.rsql.engine.IllegalPropertyException;
import com.talanlabs.mybatis.rsql.engine.SqlResult;
import com.talanlabs.mybatis.rsql.engine.where.registry.IComparisonOperatorManagerRegistry;
import cz.jirutka.rsql.parser.ast.AndNode;
import cz.jirutka.rsql.parser.ast.ComparisonNode;
import cz.jirutka.rsql.parser.ast.OrNode;
import cz.jirutka.rsql.parser.ast.RSQLVisitor;

public class ComponentRsqlVisitor implements RSQLVisitor {

    private final ComponentDescriptor componentDescriptor;
    private final IComparisonOperatorManagerRegistry comparisonOperatorManagerRegistry;

    public ComponentRsqlVisitor(Class componentClass, IComparisonOperatorManagerRegistry comparisonOperatorManagerRegistry) {
        super();

        this.componentDescriptor = ComponentFactory.getInstance().getDescriptor(componentClass);
        this.comparisonOperatorManagerRegistry = comparisonOperatorManagerRegistry;
    }

    @Override
    public SqlResult visit(AndNode node, EngineContext context) {
        return node.getChildren().stream().map(n -> n.accept(this, context)).collect(SqlResult.SqlResultJoiner.joining(" AND ", "(", ")"));
    }

    @Override
    public SqlResult visit(OrNode node, EngineContext context) {
        return node.getChildren().stream().map(n -> n.accept(this, context)).collect(SqlResult.SqlResultJoiner.joining(" OR ", "(", ")"));
    }

    @Override
    public SqlResult visit(ComparisonNode node, EngineContext context) {
        IComparisonOperatorManager comparisonOperatorManager = comparisonOperatorManagerRegistry.getComparisonOperatorManager(node.getOperator());
        if (comparisonOperatorManager != null) {
            return comparisonOperatorManager.visit(componentDescriptor, node, context);
        }
        throw new IllegalPropertyException(String.format("Property %s with operator %s not accepted", node.getSelector(), node.getOperator()));
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy