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

com.avaje.ebeaninternal.server.el.ElMatchBuilder Maven / Gradle / Ivy

There is a newer version: 2.8.1
Show newest version
/**
 * Copyright (C) 2006  Robin Bygrave
 * 
 * This file is part of Ebean.
 * 
 * Ebean is free software; you can redistribute it and/or modify it 
 * under the terms of the GNU Lesser General Public License as published by
 * the Free Software Foundation; either version 2.1 of the License, or
 * (at your option) any later version.
 *  
 * Ebean 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 Lesser General Public License for more details.
 * 
 * You should have received a copy of the GNU Lesser General Public License
 * along with Ebean; if not, write to the Free Software Foundation, Inc.,
 * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA  
 */
package com.avaje.ebeaninternal.server.el;

import java.util.HashSet;
import java.util.Set;
import java.util.regex.Pattern;


/**
 * Contains the various ElMatcher implementations.
 */
class ElMatchBuilder {

	/**
	 * Case insensitive equals.
	 */
	static class RegularExpr implements ElMatcher {
		
		final ElPropertyValue elGetValue;
		final String value;
		final Pattern pattern;
		
		RegularExpr(ElPropertyValue elGetValue, String value, int options){
			this.elGetValue = elGetValue;
			this.value = value;
			this.pattern = Pattern.compile(value, options);
		}
		
		public boolean isMatch(T bean) {
			String v = (String)elGetValue.elGetValue(bean);
			return pattern.matcher(v).matches();
		}
	}
	
	/**
	 * Case insensitive equals.
	 */
	static abstract class BaseString implements ElMatcher {
		
		final ElPropertyValue elGetValue;
		final String value;
		
		public BaseString(ElPropertyValue elGetValue, String value){
			this.elGetValue = elGetValue;
			this.value = value;
		}
		
		public abstract boolean isMatch(T bean);
	}
	
	static class Ieq extends BaseString {
		Ieq(ElPropertyValue elGetValue, String value) {
			super(elGetValue, value);
		}

		public boolean isMatch(T bean) {
			String v = (String)elGetValue.elGetValue(bean);
			return value.equalsIgnoreCase(v);
		}
	}

	/**
	 * Case insensitive starts with matcher.
	 */
	static class IStartsWith implements ElMatcher {

		final ElPropertyValue elGetValue;
		final CharMatch charMatch;
		
		IStartsWith(ElPropertyValue elGetValue, String value) {
			this.elGetValue = elGetValue;
			this.charMatch = new CharMatch(value);
		}
		
		public boolean isMatch(T bean) {
			
			String v = (String)elGetValue.elGetValue(bean);
			return charMatch.startsWith(v);
		}
	}

	/**
	 * Case insensitive ends with matcher.
	 */
	static class IEndsWith implements ElMatcher {

		final ElPropertyValue elGetValue;
		final CharMatch charMatch;
		
		IEndsWith(ElPropertyValue elGetValue, String value) {
			this.elGetValue = elGetValue;
			this.charMatch = new CharMatch(value);
		}
		
		public boolean isMatch(T bean) {
			
			String v = (String)elGetValue.elGetValue(bean);
			return charMatch.endsWith(v);
		}
	}

	static class StartsWith extends BaseString {
		StartsWith(ElPropertyValue elGetValue, String value) {
			super(elGetValue, value);
		}

		public boolean isMatch(T bean) {
			String v = (String)elGetValue.elGetValue(bean);
			return value.startsWith(v);
		}
	}
	
	static class EndsWith extends BaseString {
		EndsWith(ElPropertyValue elGetValue, String value) {
			super(elGetValue, value);
		}

		public boolean isMatch(T bean) {
			String v = (String)elGetValue.elGetValue(bean);
			return value.endsWith(v);
		}
	}	
	
	static class IsNull implements ElMatcher {
		
		final ElPropertyValue elGetValue;
		
		public IsNull(ElPropertyValue elGetValue){
			this.elGetValue = elGetValue;
		}
		
		public boolean isMatch(T bean) {
			return (null == elGetValue.elGetValue(bean));
		}
	}

	static class IsNotNull implements ElMatcher {
		
		final ElPropertyValue elGetValue;
		
		public IsNotNull(ElPropertyValue elGetValue){
			this.elGetValue = elGetValue;
		}
		
		public boolean isMatch(T bean) {
			return (null != elGetValue.elGetValue(bean));
		}
	}

	static abstract class Base implements ElMatcher {
		
		final Object filterValue;
		
		final ElComparator comparator;
		
		public Base(Object filterValue, ElComparator comparator){
			this.filterValue = filterValue;
			this.comparator = comparator;
		}
		
		public abstract boolean isMatch(T value);
	}

	static class InSet implements ElMatcher {

		final Set set;
		final ElPropertyValue elGetValue;
		
		@SuppressWarnings({ "unchecked", "rawtypes" })
		public InSet(Set set, ElPropertyValue elGetValue){
			this.set = new HashSet(set);
			this.elGetValue = elGetValue;
		}

		public boolean isMatch(T bean) {

			Object value = elGetValue.elGetValue(bean);
			if (value == null){
				return false;
			}
			
			return set.contains(value);
		}

	}
	/**
	 * Equal To.
	 */
	static class Eq extends Base {
		
		public Eq(Object filterValue, ElComparator comparator){
			super(filterValue, comparator);
		}
		
		public boolean isMatch(T value) {
			return comparator.compareValue(filterValue, value) == 0;
		}
	}
	
	/**
	 * Not Equal To.
	 */
	static class Ne extends Base {
		
		public Ne(Object filterValue, ElComparator comparator){
			super(filterValue, comparator);
		}
		
		public boolean isMatch(T value) {
			return comparator.compareValue(filterValue, value) != 0;
		}
	}
	
	/**
	 * Between.
	 */
	static class Between implements ElMatcher {
		
		final Object min; 
		final Object max;
		final ElComparator comparator;
		
		Between(Object min, Object max, ElComparator comparator){
			this.min = min;
			this.max = max;
			this.comparator = comparator;
		}
		
		public boolean isMatch(T value) {

			return (comparator.compareValue(min, value) <= 0 
					&& comparator.compareValue(max, value) >= 0);
		}
	}
	
	/**
	 * Greater Than.
	 */
	static class Gt extends Base {
		Gt(Object filterValue, ElComparator comparator){
			super(filterValue, comparator);
		}
		
		public boolean isMatch(T value) {
			return comparator.compareValue(filterValue, value) == -1;
		}
	}
	
	/**
	 * Greater Than or Equal To.
	 */
	static class Ge extends Base {
		Ge(Object filterValue, ElComparator comparator){
			super(filterValue, comparator);
		}
		
		public boolean isMatch(T value) {
			return comparator.compareValue(filterValue, value) >= 0;
		}
	}
	
	/**
	 * Less Than or Equal To.
	 */
	static class Le extends Base {
		Le(Object filterValue, ElComparator comparator){
			super(filterValue, comparator);
		}
		
		public boolean isMatch(T value) {
			return comparator.compareValue(filterValue, value) <= 0;
		}
	}
	
	/**
	 * Less Than.
	 */
	static class Lt extends Base {
		Lt(Object filterValue, ElComparator comparator){
			super(filterValue, comparator);
		}
		
		public boolean isMatch(T value) {
			return comparator.compareValue(filterValue, value) == 1;
		}
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy