use of org.geotools.temporal.object.DefaultInstant in project ddf by codice.
the class GeotoolsBuilder method build.
//
// /**
// * @param expression the expression to set
// */
// void setExpression(Expression expression) {
// this.expression = expression;
// }
protected Filter build() {
LOGGER.debug("BUILDING attribute = {}, operator = {}, value = {}, secondaryValue = {}", attribute, operator, value, secondaryValue);
Filter filter = null;
String wkt = null;
Date date = null;
double distance = 0;
switch(operator) {
case AFTER:
date = getValue(Date.class);
if (date != null) {
filter = factory.after(factory.property(attribute), factory.literal(new DefaultInstant(new DefaultPosition(date))));
}
break;
case BEFORE:
date = getValue(Date.class);
if (date != null) {
filter = factory.before(factory.property(attribute), factory.literal(new DefaultInstant(new DefaultPosition(date))));
}
break;
case BETWEEN:
filter = factory.between(factory.property(attribute), factory.literal(value), factory.literal(secondaryValue));
break;
case DURING:
Date start = getValue(Date.class);
Date end = getSecondaryValue(Date.class);
if (start != null && end != null) {
DefaultPosition defaultPosition = new DefaultPosition(start);
Instant startInstant = new DefaultInstant(defaultPosition);
Instant endInstant = new DefaultInstant(new DefaultPosition(end));
Period period = new DefaultPeriod(startInstant, endInstant);
filter = factory.during(factory.property(attribute), factory.literal(period));
}
break;
case DURING_RELATIVE:
Long longValue = getValue(Long.class);
if (null != value) {
filter = factory.during(factory.property(attribute), factory.literal(new DefaultPeriodDuration(longValue)));
}
break;
case EQ:
filter = factory.equals(factory.property(attribute), factory.literal(value));
break;
case GT:
filter = factory.greater(factory.property(attribute), factory.literal(value));
break;
case GTE:
filter = factory.greaterOrEqual(factory.property(attribute), factory.literal(value));
break;
case LT:
filter = factory.less(factory.property(attribute), factory.literal(value));
break;
case LTE:
filter = factory.lessOrEqual(factory.property(attribute), factory.literal(value));
break;
case NEQ:
filter = factory.notEqual(factory.property(attribute), factory.literal(value));
break;
case NULL:
filter = factory.isNull(factory.property(attribute));
break;
case TOVERLAPS:
filter = factory.toverlaps(factory.property(attribute), factory.literal(value));
break;
case BEYOND:
wkt = getValue(String.class);
distance = getSecondaryValue(Double.class);
if (wkt != null && wkt.length() > 0) {
filter = factory.beyond(attribute, toGeometry(wkt), distance, METERS);
}
break;
case CONTAINS:
wkt = getValue(String.class);
if (wkt != null && wkt.length() > 0) {
filter = factory.contains(attribute, toGeometry(wkt));
}
break;
case DWITHIN:
wkt = getValue(String.class);
distance = getSecondaryValue(Double.class);
if (wkt != null && wkt.length() > 0) {
filter = factory.dwithin(attribute, toGeometry(wkt), distance, METERS);
}
break;
case INTERSECTS:
wkt = getValue(String.class);
if (wkt != null && wkt.length() > 0) {
filter = factory.intersects(attribute, toGeometry(wkt));
}
break;
case WITHIN:
wkt = getValue(String.class);
if (wkt != null && wkt.length() > 0) {
filter = factory.within(attribute, toGeometry(wkt));
}
break;
case LIKE:
filter = factory.like(factory.property(attribute), getValue(String.class), "*", "%", "'", getSecondaryValue(Boolean.class));
break;
case FUZZY:
Expression expression = factory.property(attribute);
filter = factory.like(new FuzzyFunction(Arrays.asList(expression), factory.literal(Metacard.ANY_TEXT)), getValue(String.class), "*", "%", "'", getSecondaryValue(Boolean.class));
break;
default:
}
if (filter == null) {
throw new IllegalArgumentException("Illegal argument for operation [" + operator.name() + "]");
}
return filter;
}
use of org.geotools.temporal.object.DefaultInstant in project ddf by codice.
the class CommonQueryBuilder method during.
// public QueryImpl fuzzy(String searchPhrase, boolean isCaseSensitive) {
//
// QueryImpl query = new QueryImpl(
// filterFactory.like(
// new FuzzyFunction(
// Arrays.asList((Expression)(filterFactory.property(Metacard.ANY_TEXT))),
// filterFactory.literal("")),
// searchPhrase,
// "*", "?", "\\",
// isCaseSensitive) ) ;
//
// query.setStartIndex(1) ;
//
// query.setRequestsTotalResultsCount(true);
//
// return query;
// }
public QueryImpl during(String property, Date start, Date end) {
Instant startInstant = new DefaultInstant(new DefaultPosition(start));
Instant endInstant = new DefaultInstant(new DefaultPosition(end));
Period period = new DefaultPeriod(startInstant, endInstant);
Filter filter = filterFactory.during(filterFactory.property(property), filterFactory.literal(period));
QueryImpl query = new QueryImpl(filter);
query.setStartIndex(1);
query.setRequestsTotalResultsCount(true);
return query;
}
use of org.geotools.temporal.object.DefaultInstant in project ddf by codice.
the class MockQuery method addTemporalFilter.
public void addTemporalFilter(TemporalFilter temporalFilter) {
if (temporalFilter != null) {
// t1.start < timeType instance < t1.end
Instant startInstant = new DefaultInstant(new DefaultPosition(temporalFilter.getStartDate()));
Instant endInstant = new DefaultInstant(new DefaultPosition(temporalFilter.getEndDate()));
Period period = new DefaultPeriod(startInstant, endInstant);
Filter filter = FILTER_FACTORY.during(FILTER_FACTORY.property(MODIFIED_DATE), FILTER_FACTORY.literal(period));
filters.add(filter);
this.filter = getFilter();
}
}
use of org.geotools.temporal.object.DefaultInstant in project ddf by codice.
the class OpenSearchQuery method addTemporalFilter.
public void addTemporalFilter(TemporalFilter temporalFilter) {
String methodName = "addTemporalFilter";
if (temporalFilter != null) {
// t1.start < timeType instance < t1.end
Instant startInstant = new DefaultInstant(new DefaultPosition(temporalFilter.getStartDate()));
Instant endInstant = new DefaultInstant(new DefaultPosition(temporalFilter.getEndDate()));
Period period = new DefaultPeriod(startInstant, endInstant);
Filter filter = FILTER_FACTORY.during(FILTER_FACTORY.property(Metacard.MODIFIED), FILTER_FACTORY.literal(period));
LOGGER.debug("Adding temporal filter");
filters.add(filter);
}
}
use of org.geotools.temporal.object.DefaultInstant in project ddf by codice.
the class MockQuery method addTemporalFilter.
public void addTemporalFilter(XMLGregorianCalendar start, XMLGregorianCalendar end, String timeType) {
Filter filter = null;
String timeProperty = Metacard.MODIFIED;
if (timeType != null && timeType.toLowerCase().equals(Metacard.EFFECTIVE)) {
timeProperty = Metacard.EFFECTIVE;
}
if (start != null && end != null) {
int compareTo = start.toGregorianCalendar().compareTo(end.toGregorianCalendar());
if (compareTo > 0) {
throw new IllegalArgumentException("start date [" + start + "] should not be later than" + " end date [" + end + "]");
} else if (compareTo == 0) {
filter = FILTER_FACTORY.equals(FILTER_FACTORY.property(timeProperty), FILTER_FACTORY.literal(start.toGregorianCalendar().getTime()));
} else {
// t1.start < timeType instance < t1.end
DefaultPosition defaultPosition = new DefaultPosition(start.toGregorianCalendar().getTime());
Instant startInstant = new DefaultInstant(defaultPosition);
Instant endInstant = new DefaultInstant(new DefaultPosition(end.toGregorianCalendar().getTime()));
Period period = new DefaultPeriod(startInstant, endInstant);
filter = FILTER_FACTORY.during(FILTER_FACTORY.property(timeProperty), FILTER_FACTORY.literal(period));
}
filters.add(filter);
}
}
Aggregations