use of org.geotools.temporal.object.DefaultPeriod 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.DefaultPeriod 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;
Expression expression = null;
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:
if (functionName != null) {
expression = factory.function(functionName, arguments.toArray(new Expression[0]));
} else {
expression = factory.property(attribute);
}
filter = factory.equals(expression, 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 = 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.DefaultPeriod in project ddf by codice.
the class MockQuery method addTemporalFilter.
public void addTemporalFilter(XMLGregorianCalendar start, XMLGregorianCalendar end, String timeProperty) {
Filter filter;
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);
}
}
use of org.geotools.temporal.object.DefaultPeriod in project ddf by codice.
the class CatalogFrameworkQueryTest method testDuringQuery.
@Test
public void testDuringQuery() {
List<Metacard> metacards = new ArrayList<Metacard>();
MetacardImpl newCard1 = new MetacardImpl();
newCard1.setId(null);
Calendar duringStart = Calendar.getInstance();
Calendar card1Exp = Calendar.getInstance();
card1Exp.add(Calendar.YEAR, 1);
Calendar duringEnd1 = Calendar.getInstance();
duringEnd1.add(Calendar.YEAR, 2);
Calendar card2Exp = Calendar.getInstance();
card2Exp.add(Calendar.YEAR, 3);
Calendar duringEnd2 = Calendar.getInstance();
duringEnd2.add(Calendar.YEAR, 4);
newCard1.setExpirationDate(card1Exp.getTime());
metacards.add(newCard1);
MetacardImpl newCard2 = new MetacardImpl();
newCard2.setId(null);
newCard2.setExpirationDate(card2Exp.getTime());
metacards.add(newCard2);
String mcId1 = null;
String mcId2 = null;
CreateResponse createResponse = null;
try {
createResponse = framework.create(new CreateRequestImpl(metacards, null));
} catch (IngestException e1) {
LOGGER.error("Failure", e1);
fail();
} catch (SourceUnavailableException e1) {
LOGGER.error("Failure", e1);
fail();
}
assertEquals(createResponse.getCreatedMetacards().size(), metacards.size());
for (Metacard curCard : createResponse.getCreatedMetacards()) {
if (curCard.getExpirationDate().equals(card1Exp.getTime())) {
mcId1 = curCard.getId();
} else {
mcId2 = curCard.getId();
}
assertNotNull(curCard.getId());
}
FilterFactory filterFactory = new FilterFactoryImpl();
Period duringPeriod = new DefaultPeriod(new DefaultInstant(new DefaultPosition(duringStart.getTime())), new DefaultInstant(new DefaultPosition(duringEnd1.getTime())));
QueryImpl query = new QueryImpl(filterFactory.during(filterFactory.property(Metacard.EXPIRATION), filterFactory.literal(duringPeriod)));
QueryRequest queryReq = new QueryRequestImpl(query, false);
try {
QueryResponse response = framework.query(queryReq);
assertEquals("Expecting return 1 result.", 1, response.getHits());
assertEquals("During filter should return metacard[" + mcId1 + "]", mcId1, response.getResults().get(0).getMetacard().getId());
} catch (UnsupportedQueryException | SourceUnavailableException | FederationException e) {
LOGGER.error("Failure", e);
fail();
}
duringPeriod = new DefaultPeriod(new DefaultInstant(new DefaultPosition(card1Exp.getTime())), new DefaultInstant(new DefaultPosition(duringEnd2.getTime())));
query = new QueryImpl(filterFactory.during(filterFactory.property(Metacard.EXPIRATION), filterFactory.literal(duringPeriod)));
queryReq = new QueryRequestImpl(query, false);
try {
QueryResponse response = framework.query(queryReq);
assertEquals("During filter should return 1 result", 1, response.getHits());
assertEquals("During filter should return metacard[" + mcId2 + "]", mcId2, response.getResults().get(0).getMetacard().getId());
} catch (UnsupportedQueryException | SourceUnavailableException | FederationException e) {
LOGGER.error("Failure", e);
fail();
}
duringPeriod = new DefaultPeriod(new DefaultInstant(new DefaultPosition(duringStart.getTime())), new DefaultInstant(new DefaultPosition(duringEnd2.getTime())));
query = new QueryImpl(filterFactory.during(filterFactory.property(Metacard.EXPIRATION), filterFactory.literal(duringPeriod)));
queryReq = new QueryRequestImpl(query, false);
try {
QueryResponse response = framework.query(queryReq);
assertEquals("During filter should return 2 result", 2, response.getHits());
} catch (UnsupportedQueryException | SourceUnavailableException | FederationException e) {
LOGGER.error("Failure", e);
fail();
}
}
use of org.geotools.temporal.object.DefaultPeriod in project ddf by codice.
the class TestSolrFilterBuilder method makePeriod.
private Period makePeriod(Date start, Date end) {
DefaultPosition defaultPosition = new DefaultPosition(start);
Instant startInstant = new DefaultInstant(defaultPosition);
Instant endInstant = new DefaultInstant(new DefaultPosition(end));
Period period = new DefaultPeriod(startInstant, endInstant);
return period;
}
Aggregations