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

com.bq.oss.lib.queries.matcher.DefaultQueryMatcher Maven / Gradle / Ivy

package com.bq.oss.lib.queries.matcher;

import java.lang.reflect.InvocationTargetException;

import com.bq.oss.lib.queries.request.QueryNode;
import org.apache.commons.beanutils.PropertyUtils;

import com.bq.oss.lib.queries.exception.QueryMatchingException;
import com.bq.oss.lib.queries.request.QueryOperator;
import com.bq.oss.lib.queries.request.ResourceQuery;

public class DefaultQueryMatcher implements QueryMatcher {

	@Override
	public boolean matchObject(ResourceQuery resourceQuery, Object object) throws QueryMatchingException {
		for (QueryNode queryNode : resourceQuery) {
			if (queryNode.getOperator() == QueryOperator.$EXISTS) {
				try {
					Object objectProperty = getObjectProperty(object, queryNode.getField());
					if (objectProperty == null) {
						return false;
					}
				} catch (QueryMatchingException e) {
					return false;
				}
			} else {
				Object objectProperty = getObjectProperty(object, queryNode.getField());
				if (objectProperty == null) {
					return false;
				}

				if (!queryNode.getValue().operate(queryNode.getOperator(), objectProperty, this)) {
					return false;
				}
			}
		}
		return true;
	}

	private Object getObjectProperty(Object object, String field) throws QueryMatchingException {
		try {
			return PropertyUtils.getProperty(object, field);
		} catch (IllegalAccessException | InvocationTargetException | NoSuchMethodException e) {
			throw new QueryMatchingException("Trying to access an invalid property.", e);
		}
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy