/**
* Copyright (c) Codice Foundation
* <p/>
* This 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 3 of the
* License, or any later version.
* <p/>
* 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
* Lesser General Public License for more details. A copy of the GNU Lesser General Public License
* is distributed along with this program and can be found at
* <http://www.gnu.org/licenses/lgpl.html>.
*/
package ddf.catalog.filter.delegate;
import java.util.Date;
import java.util.List;
import org.opengis.filter.Filter;
import ddf.catalog.filter.FilterBuilder;
import ddf.catalog.filter.FilterDelegate;
public class CopyFilterDelegate extends FilterDelegate<Filter> {
protected FilterBuilder filterBuilder;
// Prevent usage of default constructor
private CopyFilterDelegate() {
}
public CopyFilterDelegate(FilterBuilder filterBuilder) {
this.filterBuilder = filterBuilder;
}
// Logical operators
@Override
public Filter include() {
return Filter.INCLUDE;
}
@Override
public Filter exclude() {
return Filter.EXCLUDE;
}
@Override
public Filter not(Filter filter) {
return filterBuilder.not(filter);
}
@Override
public Filter and(List<Filter> filters) {
return filterBuilder.allOf(filters);
}
@Override
public Filter or(List<Filter> filters) {
return filterBuilder.anyOf(filters);
}
// PropertyIsNull
@Override
public Filter propertyIsNull(String propertyName) {
return filterBuilder.attribute(propertyName).is().empty();
}
// PropertyIsLike
@Override
public Filter propertyIsLike(String propertyName, String pattern, boolean isCaseSensitive) {
if (isCaseSensitive) {
return filterBuilder.attribute(propertyName).is().like().caseSensitiveText(pattern);
}
return filterBuilder.attribute(propertyName).is().like().text(pattern);
}
// PropertyIsFuzzy
@Override
public Filter propertyIsFuzzy(String propertyName, String literal) {
return filterBuilder.attribute(propertyName).is().like().fuzzyText(literal);
}
// PropertyIsEqualTo
@Override
public Filter propertyIsEqualTo(String propertyName, String literal, boolean isCaseSensitive) {
return filterBuilder.attribute(propertyName).equalTo().text(literal);
}
@Override
public Filter propertyIsEqualTo(String propertyName, Date literal) {
return filterBuilder.attribute(propertyName).equalTo().date(literal);
}
@Override
public Filter propertyIsEqualTo(String propertyName, Date startDate, Date endDate) {
throw new UnsupportedOperationException(
"propertyIsEqualTo(String,Date,Date) not supported by CopyFilterDelegate.");
}
@Override
public Filter propertyIsEqualTo(String propertyName, int literal) {
return filterBuilder.attribute(propertyName).equalTo().number(literal);
}
@Override
public Filter propertyIsEqualTo(String propertyName, short literal) {
return filterBuilder.attribute(propertyName).equalTo().number(literal);
}
@Override
public Filter propertyIsEqualTo(String propertyName, long literal) {
return filterBuilder.attribute(propertyName).equalTo().number(literal);
}
@Override
public Filter propertyIsEqualTo(String propertyName, double literal) {
return filterBuilder.attribute(propertyName).equalTo().number(literal);
}
@Override
public Filter propertyIsEqualTo(String propertyName, float literal) {
return filterBuilder.attribute(propertyName).equalTo().number(literal);
}
@Override
public Filter propertyIsEqualTo(String propertyName, byte[] literal) {
return filterBuilder.attribute(propertyName).equalTo().bytes(literal);
}
@Override
public Filter propertyIsEqualTo(String propertyName, boolean literal) {
return filterBuilder.attribute(propertyName).equalTo().bool(literal);
}
@Override
public Filter propertyIsEqualTo(String propertyName, Object literal) {
throw new UnsupportedOperationException(
"propertyIsEqualTo(String,Object) not supported by CopyFilterDelegate.");
}
// PropertyIsNotEqualTo
@Override
public Filter propertyIsNotEqualTo(String propertyName, String literal,
boolean isCaseSensitive) {
return filterBuilder.attribute(propertyName).notEqualTo().text(literal);
}
@Override
public Filter propertyIsNotEqualTo(String propertyName, Date literal) {
return filterBuilder.attribute(propertyName).notEqualTo().date(literal);
}
@Override
public Filter propertyIsNotEqualTo(String propertyName, Date startDate, Date endDate) {
throw new UnsupportedOperationException(
"propertyIsNotEqualTo(String,Date,Date) not supported by CopyFilterDelegate.");
}
@Override
public Filter propertyIsNotEqualTo(String propertyName, int literal) {
return filterBuilder.attribute(propertyName).notEqualTo().number(literal);
}
@Override
public Filter propertyIsNotEqualTo(String propertyName, short literal) {
return filterBuilder.attribute(propertyName).notEqualTo().number(literal);
}
@Override
public Filter propertyIsNotEqualTo(String propertyName, long literal) {
// TODO: is it ok to convert long to int here? alternatives?
return filterBuilder.attribute(propertyName).notEqualTo().number(literal);
}
@Override
public Filter propertyIsNotEqualTo(String propertyName, double literal) {
return filterBuilder.attribute(propertyName).notEqualTo().number(literal);
}
@Override
public Filter propertyIsNotEqualTo(String propertyName, float literal) {
return filterBuilder.attribute(propertyName).notEqualTo().number(literal);
}
@Override
public Filter propertyIsNotEqualTo(String propertyName, byte[] literal) {
return filterBuilder.attribute(propertyName).notEqualTo().bytes(literal);
}
@Override
public Filter propertyIsNotEqualTo(String propertyName, boolean literal) {
return filterBuilder.attribute(propertyName).notEqualTo().bool(literal);
}
@Override
public Filter propertyIsNotEqualTo(String propertyName, Object literal) {
// TODO
throw new UnsupportedOperationException(
"propertyIsNotEqualTo(String,Object) not supported by CopyFilterDelegate.");
}
// PropertyIsGreaterThan
@Override
public Filter propertyIsGreaterThan(String propertyName, String literal) {
throw new UnsupportedOperationException(
"propertyIsGreaterThan(String,String) not supported by CopyFilterDelegate.");
}
@Override
public Filter propertyIsGreaterThan(String propertyName, Date literal) {
// Because after() is inclusive of the date; use GreaterThanOrEqualTo
throw new UnsupportedOperationException(
"propertyIsGreaterThan(String,Date) not supported by CopyFilterDelegate.");
}
@Override
public Filter propertyIsGreaterThan(String propertyName, int literal) {
return filterBuilder.attribute(propertyName).greaterThan().number(literal);
}
@Override
public Filter propertyIsGreaterThan(String propertyName, short literal) {
return filterBuilder.attribute(propertyName).greaterThan().number(literal);
}
@Override
public Filter propertyIsGreaterThan(String propertyName, long literal) {
return filterBuilder.attribute(propertyName).greaterThan().number(literal);
}
@Override
public Filter propertyIsGreaterThan(String propertyName, double literal) {
return filterBuilder.attribute(propertyName).greaterThan().number(literal);
}
@Override
public Filter propertyIsGreaterThan(String propertyName, float literal) {
return filterBuilder.attribute(propertyName).greaterThan().number(literal);
}
@Override
public Filter propertyIsGreaterThan(String propertyName, Object literal) {
throw new UnsupportedOperationException(
"propertyIsGreaterThan(String,Object) not supported by CopyFilterDelegate.");
}
// PropertyIsGreaterThanOrEqualTo
@Override
public Filter propertyIsGreaterThanOrEqualTo(String propertyName, String literal) {
throw new UnsupportedOperationException(
"propertyIsGreaterThanOrEqualTo(String,String) not supported by CopyFilterDelegate.");
}
@Override
public Filter propertyIsGreaterThanOrEqualTo(String propertyName, Date literal) {
throw new UnsupportedOperationException(
"propertyIsGreaterThanOrEqualTo(String,Date) not supported by CopyFilterDelegate. Should use after() for Date comparisons.");
}
@Override
public Filter propertyIsGreaterThanOrEqualTo(String propertyName, int literal) {
return filterBuilder.attribute(propertyName).greaterThanOrEqualTo().number(literal);
}
@Override
public Filter propertyIsGreaterThanOrEqualTo(String propertyName, short literal) {
return filterBuilder.attribute(propertyName).greaterThanOrEqualTo().number(literal);
}
@Override
public Filter propertyIsGreaterThanOrEqualTo(String propertyName, long literal) {
return filterBuilder.attribute(propertyName).greaterThanOrEqualTo().number(literal);
}
@Override
public Filter propertyIsGreaterThanOrEqualTo(String propertyName, double literal) {
return filterBuilder.attribute(propertyName).greaterThanOrEqualTo().number(literal);
}
@Override
public Filter propertyIsGreaterThanOrEqualTo(String propertyName, float literal) {
return filterBuilder.attribute(propertyName).greaterThanOrEqualTo().number(literal);
}
@Override
public Filter propertyIsGreaterThanOrEqualTo(String propertyName, Object literal) {
throw new UnsupportedOperationException(
"propertyIsGreaterThanOrEqualTo(String,Object) not supported by CopyFilterDelegate.");
}
// PropertyIsLessThan
@Override
public Filter propertyIsLessThan(String propertyName, String literal) {
throw new UnsupportedOperationException(
"propertyIsLessThan(String,String) not supported by CopyFilterDelegate.");
}
@Override
public Filter propertyIsLessThan(String propertyName, Date literal) {
// Because before() is inclusive of the date
throw new UnsupportedOperationException(
"propertyIsLessThan(String,Date) not supported by CopyFilterDelegate.");
}
@Override
public Filter propertyIsLessThan(String propertyName, int literal) {
return filterBuilder.attribute(propertyName).lessThan().number(literal);
}
@Override
public Filter propertyIsLessThan(String propertyName, short literal) {
return filterBuilder.attribute(propertyName).lessThan().number(literal);
}
@Override
public Filter propertyIsLessThan(String propertyName, long literal) {
return filterBuilder.attribute(propertyName).lessThan().number(literal);
}
@Override
public Filter propertyIsLessThan(String propertyName, double literal) {
return filterBuilder.attribute(propertyName).lessThan().number(literal);
}
@Override
public Filter propertyIsLessThan(String propertyName, float literal) {
return filterBuilder.attribute(propertyName).lessThan().number(literal);
}
@Override
public Filter propertyIsLessThan(String propertyName, Object literal) {
throw new UnsupportedOperationException(
"propertyIsLessThan(String,Object) not supported by CopyFilterDelegate.");
}
// PropertyIsLessThanOrEqualTo
@Override
public Filter propertyIsLessThanOrEqualTo(String propertyName, String literal) {
throw new UnsupportedOperationException(
"propertyIsLessThanOrEqualTo(String,String) not supported by CopyFilterDelegate.");
}
@Override
public Filter propertyIsLessThanOrEqualTo(String propertyName, Date literal) {
throw new UnsupportedOperationException(
"propertyIsLessThanOrEqualTo(String,Date) not supported by CopyFilterDelegate. Should use before() for Date comparisons.");
}
@Override
public Filter propertyIsLessThanOrEqualTo(String propertyName, int literal) {
return filterBuilder.attribute(propertyName).lessThanOrEqualTo().number(literal);
}
@Override
public Filter propertyIsLessThanOrEqualTo(String propertyName, short literal) {
return filterBuilder.attribute(propertyName).lessThanOrEqualTo().number(literal);
}
@Override
public Filter propertyIsLessThanOrEqualTo(String propertyName, long literal) {
return filterBuilder.attribute(propertyName).lessThanOrEqualTo().number(literal);
}
@Override
public Filter propertyIsLessThanOrEqualTo(String propertyName, double literal) {
return filterBuilder.attribute(propertyName).lessThanOrEqualTo().number(literal);
}
@Override
public Filter propertyIsLessThanOrEqualTo(String propertyName, float literal) {
return filterBuilder.attribute(propertyName).lessThanOrEqualTo().number(literal);
}
@Override
public Filter propertyIsLessThanOrEqualTo(String propertyName, Object literal) {
throw new UnsupportedOperationException(
"propertyIsLessThanOrEqualTo(String,Object) not supported by CopyFilterDelegate.");
}
// PropertyIsBetween
@Override
public Filter propertyIsBetween(String propertyName, String lowerBoundary,
String upperBoundary) {
throw new UnsupportedOperationException(
"propertyIsBetween(String,String lowerBoundary,String upperBoundary) not supported by CopyFilterDelegate.");
}
@Override
public Filter propertyIsBetween(String propertyName, Date lowerBoundary, Date upperBoundary) {
throw new UnsupportedOperationException(
"propertyIsBetween(String,Date,Date) not supported by CopyFilterDelegate. Should use during() for Date comparisons.");
}
@Override
public Filter propertyIsBetween(String propertyName, int lowerBoundary, int upperBoundary) {
return filterBuilder.attribute(propertyName).between()
.numbers(lowerBoundary, upperBoundary);
}
@Override
public Filter propertyIsBetween(String propertyName, short lowerBoundary, short upperBoundary) {
return filterBuilder.attribute(propertyName).between()
.numbers(lowerBoundary, upperBoundary);
}
@Override
public Filter propertyIsBetween(String propertyName, long lowerBoundary, long upperBoundary) {
return filterBuilder.attribute(propertyName).between()
.numbers(lowerBoundary, upperBoundary);
}
@Override
public Filter propertyIsBetween(String propertyName, float lowerBoundary, float upperBoundary) {
return filterBuilder.attribute(propertyName).between()
.numbers(lowerBoundary, upperBoundary);
}
@Override
public Filter propertyIsBetween(String propertyName, double lowerBoundary,
double upperBoundary) {
return filterBuilder.attribute(propertyName).between()
.numbers(lowerBoundary, upperBoundary);
}
@Override
public Filter propertyIsBetween(String propertyName, Object lowerBoundary,
Object upperBoundary) {
throw new UnsupportedOperationException(
"propertyIsBetween(String,Object) not supported by CopyFilterDelegate.");
}
// XpathExists
@Override
public Filter xpathExists(String xpathExpression) {
return filterBuilder.xpath(xpathExpression).exists();
}
// XpathIsLike
@Override
public Filter xpathIsLike(String xpathExpression, String pattern, boolean isCaseSensitive) {
if (isCaseSensitive) {
return filterBuilder.xpath(xpathExpression).is().like().caseSensitiveText(pattern);
}
return filterBuilder.xpath(xpathExpression).is().like().text(pattern);
}
// XpathIsFuzzy
@Override
public Filter xpathIsFuzzy(String xpathExpression, String literal) {
return filterBuilder.xpath(xpathExpression).is().like().fuzzyText(literal);
}
// Spatial filters
@Override
public Filter beyond(String propertyName, String wkt, double distance) {
return filterBuilder.attribute(propertyName).is().beyond().wkt(wkt, distance);
}
@Override
public Filter contains(String propertyName, String wkt) {
return filterBuilder.attribute(propertyName).is().containing().wkt(wkt);
}
@Override
public Filter dwithin(String propertyName, String wkt, double distance) {
return filterBuilder.attribute(propertyName).is().withinBuffer().wkt(wkt, distance);
}
@Override
public Filter intersects(String propertyName, String wkt) {
return filterBuilder.attribute(propertyName).is().intersecting().wkt(wkt);
}
@Override
public Filter within(String propertyName, String wkt) {
return filterBuilder.attribute(propertyName).is().within().wkt(wkt);
}
@Override
public Filter crosses(String propertyName, String wkt) {
throw new UnsupportedOperationException(
"crosses(String,String) not supported by CopyFilterDelegate.");
}
@Override
public Filter disjoint(String propertyName, String wkt) {
throw new UnsupportedOperationException(
"disjoint(String,String) not supported by CopyFilterDelegate.");
}
@Override
public Filter overlaps(String propertyName, String wkt) {
// TODO: need to add support for this
throw new UnsupportedOperationException(
"overlaps(String,String) not supported by CopyFilterDelegate.");
}
@Override
public Filter touches(String propertyName, String wkt) {
throw new UnsupportedOperationException(
"touches(String,String) not supported by CopyFilterDelegate.");
}
// Temporal filters
@Override
public Filter after(String propertyName, Date date) {
return filterBuilder.attribute(propertyName).is().after().date(date);
}
@Override
public Filter before(String propertyName, Date date) {
return filterBuilder.attribute(propertyName).is().before().date(date);
}
@Override
public Filter during(String propertyName, Date startDate, Date endDate) {
return filterBuilder.attribute(propertyName).is().during().dates(startDate, endDate);
}
@Override
public Filter relative(String propertyName, long duration) {
return filterBuilder.attribute(propertyName).is().during().last(duration);
}
}