/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you 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. */ package org.apache.metamodel.query.builder; import java.util.Collection; import java.util.Date; import org.apache.metamodel.query.FilterItem; import org.apache.metamodel.query.OperatorType; import org.apache.metamodel.query.SelectItem; import org.apache.metamodel.schema.Column; /** * Abstract implementation of {@link FilterBuilder} interface. All built filters * are channeled to the {@link #applyFilter(FilterItem)} method which needs to * be implemented by concrete implementations. */ public abstract class AbstractFilterBuilder<B> implements FilterBuilder<B> { private final SelectItem _selectItem; public AbstractFilterBuilder(SelectItem selectItem) { this._selectItem = selectItem; } protected abstract B applyFilter(FilterItem filter); /** * Provides a way to */ public B applyFilter(OperatorType operator, Object operand) { return applyFilter(new FilterItem(_selectItem, operator, operand)); } @Override public B in(Collection<?> values) { return applyFilter(new FilterItem(_selectItem, OperatorType.IN, values)); } @Override public B in(Number... numbers) { return applyFilter(new FilterItem(_selectItem, OperatorType.IN, numbers)); } @Override public B in(String... strings) { return applyFilter(new FilterItem(_selectItem, OperatorType.IN, strings)); } @Override public B notIn(Collection<?> values) { return applyFilter(new FilterItem(_selectItem, OperatorType.NOT_IN, values)); } @Override public B notIn(Number... numbers) { return applyFilter(new FilterItem(_selectItem, OperatorType.NOT_IN, numbers)); } @Override public B notIn(String... strings) { return applyFilter(new FilterItem(_selectItem, OperatorType.NOT_IN, strings)); } @Override public B isNull() { return applyFilter(new FilterItem(_selectItem, OperatorType.EQUALS_TO, null)); } @Override public B isNotNull() { return applyFilter(new FilterItem(_selectItem, OperatorType.DIFFERENT_FROM, null)); } @Override public B isEquals(Column column) { if (column == null) { throw new IllegalArgumentException("column cannot be null"); } return applyFilter(new FilterItem(_selectItem, OperatorType.EQUALS_TO, new SelectItem(column))); } @Override public B isEquals(Date date) { if (date == null) { throw new IllegalArgumentException("date cannot be null"); } return applyFilter(new FilterItem(_selectItem, OperatorType.EQUALS_TO, date)); } @Override public B isEquals(Number number) { if (number == null) { throw new IllegalArgumentException("number cannot be null"); } return applyFilter(new FilterItem(_selectItem, OperatorType.EQUALS_TO, number)); } @Override public B isEquals(String string) { if (string == null) { throw new IllegalArgumentException("string cannot be null"); } return applyFilter(new FilterItem(_selectItem, OperatorType.EQUALS_TO, string)); } @Override public B isEquals(Boolean bool) { if (bool == null) { throw new IllegalArgumentException("bool cannot be null"); } return applyFilter(new FilterItem(_selectItem, OperatorType.EQUALS_TO, bool)); } @Override public B isEquals(Object obj) { if (obj == null) { return isNull(); } if (obj instanceof Boolean) { return isEquals((Boolean) obj); } if (obj instanceof Number) { return isEquals((Number) obj); } if (obj instanceof Date) { return isEquals((Date) obj); } if (obj instanceof String) { return isEquals((String) obj); } throw new UnsupportedOperationException("Argument must be a Boolean, Number, Date or String. Found: " + obj); } @Override public B differentFrom(Column column) { if (column == null) { throw new IllegalArgumentException("column cannot be null"); } return applyFilter(new FilterItem(_selectItem, OperatorType.DIFFERENT_FROM, new SelectItem(column))); } @Override public B differentFrom(Date date) { if (date == null) { throw new IllegalArgumentException("date cannot be null"); } return applyFilter(new FilterItem(_selectItem, OperatorType.DIFFERENT_FROM, date)); } @Override public B differentFrom(Number number) { if (number == null) { throw new IllegalArgumentException("number cannot be null"); } return applyFilter(new FilterItem(_selectItem, OperatorType.DIFFERENT_FROM, number)); } @Override public B differentFrom(String string) { if (string == null) { throw new IllegalArgumentException("string cannot be null"); } return applyFilter(new FilterItem(_selectItem, OperatorType.DIFFERENT_FROM, string)); } @Override public B differentFrom(Boolean bool) { if (bool == null) { throw new IllegalArgumentException("bool cannot be null"); } return applyFilter(new FilterItem(_selectItem, OperatorType.DIFFERENT_FROM, bool)); } @Override public B differentFrom(Object obj) { if (obj == null) { return isNotNull(); } if (obj instanceof Boolean) { return differentFrom((Boolean) obj); } if (obj instanceof Number) { return differentFrom((Number) obj); } if (obj instanceof Date) { return differentFrom((Date) obj); } if (obj instanceof String) { return differentFrom((String) obj); } throw new UnsupportedOperationException("Argument must be a Boolean, Number, Date or String. Found: " + obj); } @Deprecated @Override public B higherThan(Column arg) { return greaterThan(arg); } @Override public B greaterThan(Column column) { if (column == null) { throw new IllegalArgumentException("column cannot be null"); } return applyFilter(new FilterItem(_selectItem, OperatorType.GREATER_THAN, new SelectItem(column))); } @Deprecated @Override public B higherThan(Date arg) { return greaterThan(arg); } @Override public B greaterThan(Date date) { if (date == null) { throw new IllegalArgumentException("date cannot be null"); } return applyFilter(new FilterItem(_selectItem, OperatorType.GREATER_THAN, date)); } @Deprecated @Override public B higherThan(Number arg) { return greaterThan(arg); } @Override public B greaterThan(Number number) { if (number == null) { throw new IllegalArgumentException("number cannot be null"); } return applyFilter(new FilterItem(_selectItem, OperatorType.GREATER_THAN, number)); } @Deprecated @Override public B higherThan(String arg) { return greaterThan(arg); } @Override public B greaterThan(String string) { if (string == null) { throw new IllegalArgumentException("string cannot be null"); } return applyFilter(new FilterItem(_selectItem, OperatorType.GREATER_THAN, string)); } @Override public B lessThan(Column column) { if (column == null) { throw new IllegalArgumentException("column cannot be null"); } return applyFilter(new FilterItem(_selectItem, OperatorType.LESS_THAN, new SelectItem(column))); } @Override public B lessThan(Date date) { if (date == null) { throw new IllegalArgumentException("date cannot be null"); } return applyFilter(new FilterItem(_selectItem, OperatorType.LESS_THAN, date)); } @Override public B lessThan(Number number) { if (number == null) { throw new IllegalArgumentException("number cannot be null"); } return applyFilter(new FilterItem(_selectItem, OperatorType.LESS_THAN, number)); } @Override public B lessThan(String string) { if (string == null) { throw new IllegalArgumentException("string cannot be null"); } return applyFilter(new FilterItem(_selectItem, OperatorType.LESS_THAN, string)); } @Override public B lessThan(Object obj) { if (obj instanceof Number) { return lessThan((Number) obj); } if (obj instanceof Date) { return lessThan((Date) obj); } if (obj instanceof String) { return lessThan((String) obj); } throw new UnsupportedOperationException("Argument must be a Number, Date or String. Found: " + obj); } @Override public B greaterThan(Object obj) { if (obj instanceof Number) { return greaterThan((Number) obj); } if (obj instanceof Date) { return greaterThan((Date) obj); } if (obj instanceof String) { return greaterThan((String) obj); } throw new UnsupportedOperationException("Argument must be a Number, Date or String. Found: " + obj); } // Greater than or equals @Override public B greaterThanOrEquals(Column column) { if (column == null) { throw new IllegalArgumentException("column cannot be null"); } return applyFilter(new FilterItem(_selectItem, OperatorType.GREATER_THAN_OR_EQUAL, new SelectItem(column))); } @Override public B gte(Column column) { return greaterThanOrEquals(column); } @Override public B greaterThanOrEquals(Date date) { if (date == null) { throw new IllegalArgumentException("date cannot be null"); } return applyFilter(new FilterItem(_selectItem, OperatorType.GREATER_THAN_OR_EQUAL, date)); } @Override public B gte(Date date) { return greaterThanOrEquals(date); } @Override public B greaterThanOrEquals(Number number) { if (number == null) { throw new IllegalArgumentException("number cannot be null"); } return applyFilter(new FilterItem(_selectItem, OperatorType.GREATER_THAN_OR_EQUAL, number)); } @Override public B gte(Number number) { return greaterThanOrEquals(number); } @Override public B greaterThanOrEquals(String string) { if (string == null) { throw new IllegalArgumentException("string cannot be null"); } return applyFilter(new FilterItem(_selectItem, OperatorType.GREATER_THAN_OR_EQUAL, string)); } public B gte(String string) { return greaterThanOrEquals(string); } @Override public B greaterThanOrEquals(Object obj) { if (obj instanceof Number) { return greaterThanOrEquals((Number) obj); } if (obj instanceof Date) { return greaterThanOrEquals((Date) obj); } if (obj instanceof String) { return greaterThanOrEquals((String) obj); } throw new UnsupportedOperationException("Argument must be a Number, Date or String. Found: " + obj); } public B gte(Object obj) { return greaterThanOrEquals(obj); } // Less than or equals @Override public B lessThanOrEquals(Column column) { if (column == null) { throw new IllegalArgumentException("column cannot be null"); } return applyFilter(new FilterItem(_selectItem, OperatorType.LESS_THAN_OR_EQUAL, new SelectItem(column))); } @Override public B lte(Column column) { return lessThanOrEquals(column); } @Override public B lessThanOrEquals(Date date) { if (date == null) { throw new IllegalArgumentException("date cannot be null"); } return applyFilter(new FilterItem(_selectItem, OperatorType.LESS_THAN_OR_EQUAL, date)); } @Override public B lte(Date date) { return lessThanOrEquals(date); } @Override public B lessThanOrEquals(Number number) { if (number == null) { throw new IllegalArgumentException("number cannot be null"); } return applyFilter(new FilterItem(_selectItem, OperatorType.LESS_THAN_OR_EQUAL, number)); } @Override public B lte(Number number) { return lessThanOrEquals(number); } @Override public B lessThanOrEquals(String string) { if (string == null) { throw new IllegalArgumentException("string cannot be null"); } return applyFilter(new FilterItem(_selectItem, OperatorType.LESS_THAN_OR_EQUAL, string)); } public B lte(String string) { return lessThanOrEquals(string); } @Override public B lessThanOrEquals(Object obj) { if (obj instanceof Number) { return lessThanOrEquals((Number) obj); } if (obj instanceof Date) { return lessThanOrEquals((Date) obj); } if (obj instanceof String) { return lessThanOrEquals((String) obj); } throw new UnsupportedOperationException("Argument must be a Number, Date or String. Found: " + obj); } public B lte(Object obj) { return lessThanOrEquals(obj); } @Override public B like(String string) { if (string == null) { throw new IllegalArgumentException("string cannot be null"); } return applyFilter(new FilterItem(_selectItem, OperatorType.LIKE, string)); } @Override public B notLike(String string) { if (string == null) { throw new IllegalArgumentException("string cannot be null"); } return applyFilter(new FilterItem(_selectItem, OperatorType.NOT_LIKE, string)); } @Override public B gt(Column column) { return greaterThan(column); } @Override public B gt(Date date) { return greaterThan(date); } @Override public B gt(Number number) { return greaterThan(number); } @Override public B gt(String string) { return greaterThan(string); } @Override public B lt(Column column) { return lessThan(column); } public B lt(Date date) { return lessThan(date); } public B lt(Number number) { return lessThan(number); } public B lt(String string) { return lessThan(string); } @Override public B eq(Boolean bool) { return isEquals(bool); } @Override public B eq(Column column) { return isEquals(column); } @Override public B eq(Date date) { return isEquals(date); } @Override public B eq(Number number) { return isEquals(number); } @Override public B eq(String string) { return isEquals(string); } @Override public B eq(Object obj) { return isEquals(obj); } @Override public B ne(Boolean bool) { return differentFrom(bool); } @Override public B ne(Column column) { return differentFrom(column); } @Override public B ne(Date date) { return differentFrom(date); } @Override public B ne(Number number) { return differentFrom(number); } @Override public B ne(String string) { return differentFrom(string); } @Override public B ne(Object obj) { return differentFrom(obj); } @Override @Deprecated public B equals(Boolean bool) { return isEquals(bool); } @Override @Deprecated public B equals(Column column) { return isEquals(column); } @Override @Deprecated public B equals(Date date) { return isEquals(date); } @Override @Deprecated public B equals(Number number) { return isEquals(number); } @Override @Deprecated public B equals(String string) { return isEquals(string); } @Override public B lt(Object obj) { return lessThan(obj); } @Override public B gt(Object obj) { return greaterThan(obj); } }