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

com.redhat.lightblue.eval.QueryEvaluator Maven / Gradle / Ivy

There is a newer version: 2.18.0
Show newest version
/*
 Copyright 2013 Red Hat, Inc. and/or its affiliates.

 This file is part of lightblue.

 This program is free software: you can redistribute it and/or modify
 it under the terms of the GNU General Public License as published by
 the Free Software Foundation, either version 3 of the License, or
 (at your option) any later version.

 This program is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU General Public License for more details.

 You should have received a copy of the GNU General Public License
 along with this program.  If not, see .
 */
package com.redhat.lightblue.eval;

import com.redhat.lightblue.util.JsonDoc;

import com.redhat.lightblue.metadata.FieldTreeNode;
import com.redhat.lightblue.metadata.EntityMetadata;

import com.redhat.lightblue.query.QueryExpression;
import com.redhat.lightblue.query.ValueComparisonExpression;
import com.redhat.lightblue.query.FieldComparisonExpression;
import com.redhat.lightblue.query.RegexMatchExpression;
import com.redhat.lightblue.query.UnaryLogicalExpression;
import com.redhat.lightblue.query.NaryLogicalExpression;
import com.redhat.lightblue.query.ArrayContainsExpression;
import com.redhat.lightblue.query.ArrayMatchExpression;
import com.redhat.lightblue.query.NaryFieldRelationalExpression;
import com.redhat.lightblue.query.NaryValueRelationalExpression;

public abstract class QueryEvaluator {

    public static final QueryEvaluator MATCH_ALL_EVALUATOR = new QueryEvaluator() {
        public boolean evaluate(QueryEvaluationContext ctx) {
            ctx.setResult(true);
            return true;
        }
    };

    public abstract boolean evaluate(QueryEvaluationContext ctx);

    public QueryEvaluationContext evaluate(JsonDoc doc) {
        QueryEvaluationContext ctx = new QueryEvaluationContext(doc.getRoot());
        evaluate(ctx);
        return ctx;
    }

    public static QueryEvaluator getInstance(QueryExpression expr,
                                             EntityMetadata md) {
        return getInstance(expr, md.getFieldTreeRoot());
    }

    public static QueryEvaluator getInstance(QueryExpression expr,
                                             FieldTreeNode context) {
        QueryEvaluator ret = null;
        if (expr instanceof ValueComparisonExpression) {
            return new ValueComparisonEvaluator((ValueComparisonExpression) expr, context);
        } else if (expr instanceof FieldComparisonExpression) {
            return new FieldComparisonEvaluator((FieldComparisonExpression) expr, context);
        } else if (expr instanceof RegexMatchExpression) {
            return new RegexEvaluator((RegexMatchExpression) expr, context);
        } else if (expr instanceof NaryValueRelationalExpression) {
            return new NaryValueRelationalExpressionEvaluator((NaryValueRelationalExpression) expr, context);
        } else if (expr instanceof NaryFieldRelationalExpression) {
            return new NaryFieldRelationalExpressionEvaluator((NaryFieldRelationalExpression) expr, context);
        } else if (expr instanceof UnaryLogicalExpression) {
            return new UnaryLogicalExpressionEvaluator((UnaryLogicalExpression) expr, context);
        } else if (expr instanceof NaryLogicalExpression) {
            return new NaryLogicalExpressionEvaluator((NaryLogicalExpression) expr, context);
        } else if (expr instanceof ArrayContainsExpression) {
            return new ArrayContainsEvaluator((ArrayContainsExpression) expr, context);
        } else if (expr instanceof ArrayMatchExpression) {
            return new ArrayMatchEvaluator((ArrayMatchExpression) expr, context);
        }
        return ret;
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy