Package jsonij.json.jpath

Source Code of jsonij.json.jpath.ExpressionPredicate$ExpressionPredicateCondition

/*
*  Copyright 2011 jmarsden.
*
*  Licensed under the Apache License, Version 2.0 (the "License");
*  you may not use this file except in compliance with the License.
*  You may obtain a copy of the License at
*
*       http://www.apache.org/licenses/LICENSE-2.0
*
*  Unless required by applicable law or agreed to in writing, software
*  distributed under the License is distributed on an "AS IS" BASIS,
*  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
*  See the License for the specific language governing permissions and
*  limitations under the License.
*  under the License.
*/
package jsonij.json.jpath;

import java.util.ArrayList;
import java.util.List;
import jsonij.json.Value;

/**
* Complex Predicate Implementation.
*
* @author J.W.Marsden
*/
public class ExpressionPredicate extends PredicateComponent {

    String expression;
    ArrayList<ExpressionPredicateCondition> conditions;

    static {
    }

    public ExpressionPredicate() {
        this.expression = null;
        this.conditions = new ArrayList<ExpressionPredicateCondition>();
    }

    public ArrayList<ExpressionPredicateCondition> getConditions() {
        return conditions;
    }

    public void setConditions(ArrayList<ExpressionPredicateCondition> conditions) {
        this.conditions = conditions;
    }

    public String getExpression() {
        return expression;
    }

    public void setExpression(String expression) {
        this.expression = expression;
    }

    public ArrayList<ExpressionPredicateCondition> conditions() {
        return conditions;
    }

    @Override
    public String toString() {
        StringBuilder conditionString = new StringBuilder();
        for (ExpressionPredicateCondition epc : conditions()) {
            conditionString.append(epc);
            conditionString.append(" ");
        }
        String output = String.format("ExpressionPredicate (\"%s\" -> %s)", getExpression(), conditionString);
        return output;
    }

    @Override
    public List<Value> evaluate(List<Value> values, List<Value> results) {

        for (Value value : values) {
            if (value.getValueType() == Value.TYPE.ARRAY) {
                for (int j = 0; j < value.size(); j++) {
                    Value checkElement = value.get(j);
                    if (checkElement.getValueType() == Value.TYPE.OBJECT) {
                        boolean expressionValid = true;
                        for (ExpressionPredicateCondition condition : conditions) {
                            Value checkValue = checkElement.get(condition.getAttribute());
                            if (checkValue == null) {
                                expressionValid = false;
                                break;
                            }
                            ExpressionPredicateOperator expressionConditionOperator = condition.getOperator();
                            if (expressionConditionOperator.equals(ExpressionPredicateOperator.NOT_NULL)) {
                                if (checkValue.isNull()) {
                                    expressionValid = false;
                                    break;
                                }
                            } else if (expressionConditionOperator.equals(ExpressionPredicateOperator.EQUAL)) {
                                if (!checkValue.equals(condition.value)) {
                                    expressionValid = false;
                                    break;
                                }
                            } else if (expressionConditionOperator.equals(ExpressionPredicateOperator.LESS)) {
                            } else if (expressionConditionOperator.equals(ExpressionPredicateOperator.GREATER)) {
                            } else if (expressionConditionOperator.equals(ExpressionPredicateOperator.LESS_EQUAL)) {
                            } else if (expressionConditionOperator.equals(ExpressionPredicateOperator.GREATER_EQUAL)) {
                            }

                        }

                        if (expressionValid) {
                            results.add(checkElement);
                        }
                    }
                }
            }
        }

        return results;
    }

    public enum ExpressionPredicateOperator {

        NOT_NULL,
        EQUAL,
        LESS,
        GREATER,
        LESS_EQUAL,
        GREATER_EQUAL
    }

    public enum ExpressionPredicateCombineOperator {

        AND,
        OR,
    }

    /**
     * Complex Predicate Implementation.
     *
     * @author openecho
     */
    public static class ExpressionPredicateCondition {

        ExpressionPredicateCombineOperator combine;
        String attribute;
        ExpressionPredicateOperator operator;
        Value value;

        public ExpressionPredicateCondition() {
            combine = null;
            attribute = null;
            operator = null;
            value = null;
        }

        public ExpressionPredicateCondition(String attribute, ExpressionPredicateOperator operator) {
            this.attribute = attribute;
            this.operator = operator;
            value = null;
        }

        public ExpressionPredicateCondition(String attribute, ExpressionPredicateOperator operator, Value value) {
            this.attribute = attribute;
            this.operator = operator;
            this.value = value;
        }

        public ExpressionPredicateCondition(ExpressionPredicateCombineOperator combine, String attribute, ExpressionPredicateOperator operator, Value value) {
            this.combine = combine;
            this.attribute = attribute;
            this.operator = operator;
            this.value = value;
        }

        public ExpressionPredicateCombineOperator getCombine() {
            return combine;
        }

        public void setCombine(ExpressionPredicateCombineOperator combine) {
            this.combine = combine;
        }

        public String getAttribute() {
            return attribute;
        }

        public void setAttribute(String attribute) {
            this.attribute = attribute;
        }

        public ExpressionPredicateOperator getOperator() {
            return operator;
        }

        public void setOperator(ExpressionPredicateOperator operator) {
            this.operator = operator;
        }

        public Value getValue() {
            return value;
        }

        public void setValue(Value value) {
            this.value = value;
        }

        @Override
        public String toString() {
            return String.format("ExpressionPredicateCondition (%s%s %s %s)", ( ( combine != null ) ? String.format("%s ", combine) : "" ), attribute, operator, value.toJSON());
        }
    }
}
TOP

Related Classes of jsonij.json.jpath.ExpressionPredicate$ExpressionPredicateCondition

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.