use of ddf.catalog.operation.impl.QueryRequestImpl in project ddf by codice.
the class SolrProviderTest method testStartIndexWithSorting.
@Test
public void testStartIndexWithSorting() throws Exception {
deleteAllIn(provider);
List<Metacard> metacards = new ArrayList<Metacard>();
DateTime dt = new DateTime(1985, 1, 1, 1, 1, 1, 1, DateTimeZone.UTC);
TreeSet<Date> calculatedDates = new TreeSet<Date>();
for (int j = 0; j < 10; j++) {
for (int i = 0; i < 100; i = i + 10) {
MetacardImpl metacard = new MockMetacard(Library.getFlagstaffRecord());
// ingest sporadically the effective dates so the default return
// order won't be ordered
Date calculatedDate = dt.plusDays(100 - i + 10 - j).toDate();
calculatedDates.add(calculatedDate);
metacard.setEffectiveDate(calculatedDate);
metacards.add(metacard);
}
}
// The TreeSet will sort them, the array will give me access to everyone
// without an iterator
Date[] dates = new Date[calculatedDates.size()];
calculatedDates.toArray(dates);
/** CREATE **/
CreateResponse response = create(metacards);
LOGGER.info("CREATED {} records.", response.getCreatedMetacards().size());
CommonQueryBuilder queryBuilder = new CommonQueryBuilder();
QueryImpl query = queryBuilder.queryByProperty(Metacard.CONTENT_TYPE, MockMetacard.DEFAULT_TYPE);
int maxSize = 20;
int startIndex = 2;
// STARTINDEX=2, MAXSIZE=20
query.setPageSize(maxSize);
query.setStartIndex(startIndex);
SortByImpl sortBy = new SortByImpl(queryBuilder.filterFactory.property(Metacard.EFFECTIVE), org.opengis.filter.sort.SortOrder.ASCENDING);
query.setSortBy(sortBy);
SourceResponse sourceResponse = provider.query(new QueryRequestImpl(query));
assertEquals(maxSize, sourceResponse.getResults().size());
for (int i = 0; i < sourceResponse.getResults().size(); i++) {
Result r = sourceResponse.getResults().get(i);
Date effectiveDate = r.getMetacard().getEffectiveDate();
DateTime currentDate = new DateTime(effectiveDate.getTime());
LOGGER.debug("Testing current index: {}", startIndex + i);
assertEquals(new DateTime(dates[startIndex - 1 + i].getTime()).getDayOfYear(), currentDate.getDayOfYear());
}
// STARTINDEX=20, MAXSIZE=5
// a match-all queryByProperty
query = queryBuilder.queryByProperty(Metacard.CONTENT_TYPE, MockMetacard.DEFAULT_TYPE);
maxSize = 5;
startIndex = 20;
query.setPageSize(maxSize);
query.setStartIndex(startIndex);
sortBy = new SortByImpl(queryBuilder.filterFactory.property(Metacard.EFFECTIVE), org.opengis.filter.sort.SortOrder.ASCENDING);
query.setSortBy(sortBy);
sourceResponse = provider.query(new QueryRequestImpl(query));
assertEquals(maxSize, sourceResponse.getResults().size());
for (int i = 0; i < sourceResponse.getResults().size(); i++) {
Result r = sourceResponse.getResults().get(i);
Date effectiveDate = r.getMetacard().getEffectiveDate();
DateTime currentDate = new DateTime(effectiveDate.getTime());
LOGGER.debug("Testing current index: {}", startIndex + i);
assertEquals(new DateTime(dates[startIndex - 1 + i].getTime()).getDayOfYear(), currentDate.getDayOfYear());
}
// STARTINDEX=80, MAXSIZE=20
// a match-all queryByProperty
query = queryBuilder.queryByProperty(Metacard.CONTENT_TYPE, MockMetacard.DEFAULT_TYPE);
maxSize = 20;
startIndex = 80;
query.setPageSize(maxSize);
query.setStartIndex(startIndex);
sortBy = new SortByImpl(queryBuilder.filterFactory.property(Metacard.EFFECTIVE), org.opengis.filter.sort.SortOrder.ASCENDING);
query.setSortBy(sortBy);
sourceResponse = provider.query(new QueryRequestImpl(query));
assertEquals(maxSize, sourceResponse.getResults().size());
for (int i = 0; i < sourceResponse.getResults().size(); i++) {
Result r = sourceResponse.getResults().get(i);
Date effectiveDate = r.getMetacard().getEffectiveDate();
DateTime currentDate = new DateTime(effectiveDate.getTime());
LOGGER.debug("Testing current index: {}", startIndex + i);
assertEquals(new DateTime(dates[startIndex - 1 + i].getTime()).getDayOfYear(), currentDate.getDayOfYear());
}
// STARTINDEX=1, MAXSIZE=100
// a match-all queryByProperty
query = queryBuilder.queryByProperty(Metacard.CONTENT_TYPE, MockMetacard.DEFAULT_TYPE);
maxSize = 100;
startIndex = 1;
query.setPageSize(maxSize);
query.setStartIndex(startIndex);
sortBy = new SortByImpl(queryBuilder.filterFactory.property(Metacard.EFFECTIVE), org.opengis.filter.sort.SortOrder.ASCENDING);
query.setSortBy(sortBy);
sourceResponse = provider.query(new QueryRequestImpl(query));
assertEquals(maxSize, sourceResponse.getResults().size());
for (int i = 0; i < sourceResponse.getResults().size(); i++) {
Result r = sourceResponse.getResults().get(i);
Date effectiveDate = r.getMetacard().getEffectiveDate();
DateTime currentDate = new DateTime(effectiveDate.getTime());
LOGGER.debug("Testing current index: {}", startIndex + i);
assertEquals(new DateTime(dates[startIndex - 1 + i].getTime()).getDayOfYear(), currentDate.getDayOfYear());
}
}
use of ddf.catalog.operation.impl.QueryRequestImpl in project ddf by codice.
the class SolrProviderTest method testSpatialNearestNeighbor.
@Test
public void testSpatialNearestNeighbor() throws Exception {
deleteAllIn(provider);
MetacardImpl metacard1 = new MockMetacard(Library.getFlagstaffRecord());
MetacardImpl metacard2 = new MockMetacard(Library.getTampaRecord());
MetacardImpl metacard3 = new MockMetacard(Library.getShowLowRecord());
// Add in the geometry
metacard1.setLocation(FLAGSTAFF_AIRPORT_POINT_WKT);
metacard2.setLocation(TAMPA_AIRPORT_POINT_WKT);
metacard3.setLocation(SHOW_LOW_AIRPORT_POINT_WKT);
List<Metacard> list = Arrays.asList((Metacard) metacard1, metacard2, metacard3);
create(list);
// Ascending
Filter positiveFilter = filterBuilder.attribute(Metacard.GEOGRAPHY).beyond().wkt(PHOENIX_POINT_WKT, 0);
QueryImpl query = new QueryImpl(positiveFilter);
SourceResponse sourceResponse = provider.query(new QueryRequestImpl(query));
assertEquals("Failed to find two records within 1000 nautical miles.", 2, sourceResponse.getResults().size());
assertTrue("Flagstaff record was not first in ascending order.", sourceResponse.getResults().get(0).getMetacard().getMetadata().indexOf(FLAGSTAFF_QUERY_PHRASE) > 0);
// Descending
SortBy sortby = new ddf.catalog.filter.impl.SortByImpl(Result.DISTANCE, org.opengis.filter.sort.SortOrder.DESCENDING);
query.setSortBy(sortby);
sourceResponse = provider.query(new QueryRequestImpl(query));
assertEquals("Failed to find two records within 1000 nautical miles.", 2, sourceResponse.getResults().size());
assertTrue("Flagstaff record was not last in descending order.", sourceResponse.getResults().get(1).getMetacard().getMetadata().indexOf(FLAGSTAFF_QUERY_PHRASE) > 0);
// Using WKT polygon
positiveFilter = filterBuilder.attribute(Metacard.GEOGRAPHY).beyond().wkt(ARIZONA_POLYGON_WKT, 0);
query = new QueryImpl(positiveFilter);
sourceResponse = provider.query(new QueryRequestImpl(query));
assertEquals("Failed to find two records based on polygon centroid.", 2, sourceResponse.getResults().size());
}
use of ddf.catalog.operation.impl.QueryRequestImpl in project ddf by codice.
the class SolrProviderTest method testContextualWildcard.
@Test
public void testContextualWildcard() throws Exception {
deleteAllIn(provider);
List<Metacard> list = Arrays.asList((Metacard) new MockMetacard(Library.getFlagstaffRecord()), (Metacard) new MockMetacard(Library.getTampaRecord()));
create(list);
/** CONTEXTUAL QUERY - SIMPLE TERMS **/
CommonQueryBuilder queryBuilder = new CommonQueryBuilder();
boolean isCaseSensitive = false;
boolean isFuzzy = false;
QueryImpl query = null;
SourceResponse sourceResponse = null;
query = queryBuilder.like(Metacard.METADATA, "Flag*ff Chamber", isCaseSensitive, isFuzzy);
query.setStartIndex(1);
sourceResponse = provider.query(new QueryRequestImpl(query));
assertEquals(1, sourceResponse.getResults().size());
// FIX FOR THIS IS IN https://issues.apache.org/jira/browse/SOLR-1604
// Either roll this in yourself or wait for it to come in with Solr
query = queryBuilder.like(Metacard.METADATA, "Flag*ff Pulliam", isCaseSensitive, isFuzzy);
query.setStartIndex(1);
sourceResponse = provider.query(new QueryRequestImpl(query));
// assertEquals(0, sourceResponse.getResults().size());
query = queryBuilder.like(Metacard.METADATA, "*rport", isCaseSensitive, isFuzzy);
query.setStartIndex(1);
sourceResponse = provider.query(new QueryRequestImpl(query));
assertEquals(2, sourceResponse.getResults().size());
query = queryBuilder.like(Metacard.METADATA, "*rpor*", isCaseSensitive, isFuzzy);
query.setStartIndex(1);
sourceResponse = provider.query(new QueryRequestImpl(query));
assertEquals(2, sourceResponse.getResults().size());
query = queryBuilder.like(Metacard.METADATA, "*", isCaseSensitive, isFuzzy);
query.setStartIndex(1);
sourceResponse = provider.query(new QueryRequestImpl(query));
assertEquals(2, sourceResponse.getResults().size());
query = queryBuilder.like(Metacard.METADATA, "airpo*t", isCaseSensitive, isFuzzy);
query.setStartIndex(1);
sourceResponse = provider.query(new QueryRequestImpl(query));
assertEquals(2, sourceResponse.getResults().size());
query = queryBuilder.like(Metacard.METADATA, "Airpo*t", isCaseSensitive, isFuzzy);
query.setStartIndex(1);
sourceResponse = provider.query(new QueryRequestImpl(query));
assertEquals(2, sourceResponse.getResults().size());
}
use of ddf.catalog.operation.impl.QueryRequestImpl in project ddf by codice.
the class SolrProviderTest method testUpdateByMetacardId.
@Test
public void testUpdateByMetacardId() throws Exception {
deleteAllIn(provider);
MockMetacard metacard1 = new MockMetacard(Library.getFlagstaffRecord());
MockMetacard metacard2 = new MockMetacard(Library.getShowLowRecord());
String uri1 = "http://youwillfindme.com/here";
String uri2 = "http://youwillfindme.com/there";
metacard1.setResourceURI(new URI(uri1));
metacard1.setContentTypeName("oldNitf");
metacard2.setResourceURI(new URI(uri2));
metacard2.setContentTypeName("oldNitf2");
metacard2.setResourceSize("25L");
List<Metacard> list = Arrays.asList((Metacard) metacard1, metacard2);
CreateResponse createResponse = create(list);
List<String> responseStrings = MockMetacard.toStringList(createResponse.getCreatedMetacards());
assertEquals(2, responseStrings.size());
/** UPDATE **/
MockMetacard updatedMetacard1 = new MockMetacard(Library.getTampaRecord());
MockMetacard updatedMetacard2 = new MockMetacard(Library.getFlagstaffRecord());
updatedMetacard1.setId(metacard1.getId());
updatedMetacard1.setContentTypeName("nitf");
updatedMetacard2.setId(metacard2.getId());
updatedMetacard2.setResourceURI(new URI(uri2));
updatedMetacard2.setContentTypeName("nitf2");
updatedMetacard2.setResourceSize("50L");
list = Arrays.asList((Metacard) updatedMetacard1, updatedMetacard2);
String[] ids = { metacard1.getId(), metacard2.getId() };
UpdateResponse updateResponse = update(ids, list);
assertEquals("Testing Update operation: ", 2, updateResponse.getUpdatedMetacards().size());
List<Update> updatedMetacards = updateResponse.getUpdatedMetacards();
for (Update up : updatedMetacards) {
Metacard newCard = up.getNewMetacard();
Metacard oldCard = up.getOldMetacard();
assertNotNull(oldCard.getResourceURI());
assertEquals(provider.getId(), oldCard.getSourceId());
assertEquals(provider.getId(), newCard.getSourceId());
if (oldCard.getContentTypeName().equals("oldNitf")) {
assertEquals("nitf", newCard.getContentTypeName());
// TPA is unique to the document
assertTrue(newCard.getMetadata().indexOf("TPA") != ALL_RESULTS);
assertThat(newCard.getResourceURI(), is(nullValue()));
assertThat(oldCard.getResourceURI().toString(), equalTo(uri1));
assertEquals(oldCard.getId(), newCard.getId());
// Title
assertEquals(MockMetacard.DEFAULT_TITLE, oldCard.getTitle());
assertEquals(MockMetacard.DEFAULT_TITLE, newCard.getTitle());
// Location (decimal points make them not exact Strings POINT(1
// 0) as opposed to POINT( 1.0 0.0) )
assertEquals(MockMetacard.DEFAULT_LOCATION.substring(0, 8), oldCard.getLocation().substring(0, 8));
assertEquals(MockMetacard.DEFAULT_LOCATION.substring(0, 8), newCard.getLocation().substring(0, 8));
// Metadata
assertNotNull(oldCard.getMetadata());
assertNotNull(newCard.getMetadata());
assertTrue(!oldCard.getMetadata().isEmpty());
assertTrue(!newCard.getMetadata().isEmpty());
// Created Date
assertFalse(oldCard.getCreatedDate().after(new Date()));
assertFalse(newCard.getCreatedDate().after(new Date()));
assertTrue(newCard.getCreatedDate().after(oldCard.getCreatedDate()));
// Modified Date
assertTrue(newCard.getModifiedDate().after(oldCard.getModifiedDate()));
// Effective Date
assertTrue(newCard.getEffectiveDate().after(oldCard.getEffectiveDate()));
// Expiration Date
assertTrue(newCard.getExpirationDate().after(oldCard.getExpirationDate()));
// Thumbnail
assertTrue(Arrays.equals(newCard.getThumbnail(), oldCard.getThumbnail()));
} else if (oldCard.getContentTypeName().equals("oldNitf2")) {
assertEquals("nitf2", newCard.getContentTypeName());
// Cardinals is unique to the document
assertTrue(newCard.getMetadata().indexOf("Cardinals") != ALL_RESULTS);
assertTrue("50L".equals(newCard.getResourceSize()));
assertEquals(uri2, newCard.getResourceURI().toString());
assertEquals(oldCard.getId(), newCard.getId());
// Title
assertEquals(MockMetacard.DEFAULT_TITLE, oldCard.getTitle());
assertEquals(MockMetacard.DEFAULT_TITLE, newCard.getTitle());
// Location (decimal points make them not exact in Strings
assertEquals(MockMetacard.DEFAULT_LOCATION.substring(0, 8), oldCard.getLocation().substring(0, 8));
assertEquals(MockMetacard.DEFAULT_LOCATION.substring(0, 8), newCard.getLocation().substring(0, 8));
// Metadata
assertNotNull(oldCard.getMetadata());
assertNotNull(newCard.getMetadata());
assertTrue(!oldCard.getMetadata().isEmpty());
assertTrue(!newCard.getMetadata().isEmpty());
// Created Date
assertFalse(oldCard.getCreatedDate().after(new Date()));
assertFalse(newCard.getCreatedDate().after(new Date()));
assertTrue(newCard.getCreatedDate().after(oldCard.getCreatedDate()));
// Modified Date
assertTrue(newCard.getModifiedDate().after(oldCard.getModifiedDate()));
// Effective Date
assertTrue(newCard.getEffectiveDate().after(oldCard.getEffectiveDate()));
// Expiration Date
assertTrue(newCard.getExpirationDate().after(oldCard.getExpirationDate()));
// Thumbnail
assertTrue(Arrays.equals(newCard.getThumbnail(), oldCard.getThumbnail()));
} else {
Assert.fail("Expecting one or the other of the updated records.");
}
}
/** READ **/
CommonQueryBuilder builder = new CommonQueryBuilder();
QueryImpl query = builder.queryByProperty(Metacard.RESOURCE_URI, uri2);
QueryRequestImpl queryRequest = new QueryRequestImpl(query);
SourceResponse sourceResponse = provider.query(queryRequest);
assertEquals(1, sourceResponse.getResults().size());
for (Result r : sourceResponse.getResults()) {
assertTrue(r.getMetacard().getMetadata().indexOf("Cardinals") != ALL_RESULTS);
assertEquals(uri2, r.getMetacard().getResourceURI().toString());
}
/** UPDATE with null thumbnail **/
updatedMetacard1.setThumbnail(null);
updateResponse = update(updatedMetacard1.getId(), updatedMetacard1);
assertEquals("Testing Update operation: ", 1, updateResponse.getUpdatedMetacards().size());
Metacard newCard = updateResponse.getUpdatedMetacards().get(0).getNewMetacard();
Metacard oldCard = updateResponse.getUpdatedMetacards().get(0).getOldMetacard();
assertNotNull(oldCard.getThumbnail());
assertEquals(null, newCard.getThumbnail());
/** UPDATE with null WKT **/
// updatedMetacard1.setLocation(null);
// updateResponse = provider.update(new
// UpdateRequestImpl(updatedMetacard1.getId(), updatedMetacard1));
//
//
//
// assertEquals("Testing Update operation: ", 1,
// updateResponse.getUpdatedMetacards().size());
//
// newCard =
// updateResponse.getUpdatedMetacards().get(0).getNewMetacard();
// oldCard =
// updateResponse.getUpdatedMetacards().get(0).getOldMetacard();
//
// assertNotNull(oldCard.getResourceURI());
// assertNotNull(newCard.getResourceURI());
// assertEquals(oldCard.getResourceURI().toString(),
// newCard.getResourceURI().toString());
// assertEquals(provider.getId(), oldCard.getSourceId());
// assertEquals(provider.getId(), newCard.getSourceId());
// LOGGER.info("New Metacard location: {}", newCard.getLocation());
// LOGGER.info("Old Metacard location: {}", oldCard.getLocation());
// assertTrue(oldCard.getLocation().contains("POINT"));
// assertEquals(null, newCard.getLocation());
/** UPDATE with null expiration date **/
updatedMetacard1.setExpirationDate(null);
updateResponse = update(updatedMetacard1.getId(), updatedMetacard1);
assertEquals("Testing Update operation: ", ONE_HIT, updateResponse.getUpdatedMetacards().size());
newCard = updateResponse.getUpdatedMetacards().get(0).getNewMetacard();
oldCard = updateResponse.getUpdatedMetacards().get(0).getOldMetacard();
assertNotNull(oldCard.getExpirationDate());
assertEquals(null, newCard.getExpirationDate());
/** UPDATE with null content type **/
updatedMetacard1.setContentTypeName(null);
updateResponse = update(updatedMetacard1.getId(), updatedMetacard1);
assertEquals("Testing Update operation: ", ONE_HIT, updateResponse.getUpdatedMetacards().size());
newCard = updateResponse.getUpdatedMetacards().get(0).getNewMetacard();
oldCard = updateResponse.getUpdatedMetacards().get(0).getOldMetacard();
assertNotNull(oldCard.getContentTypeName());
assertThat(newCard.getContentTypeName(), nullValue());
/** UPDATE with empty content type **/
updatedMetacard1.setContentTypeName("");
updateResponse = update(updatedMetacard1.getId(), updatedMetacard1);
assertEquals("Testing Update operation: ", ONE_HIT, updateResponse.getUpdatedMetacards().size());
newCard = updateResponse.getUpdatedMetacards().get(0).getNewMetacard();
oldCard = updateResponse.getUpdatedMetacards().get(0).getOldMetacard();
assertThat(oldCard.getContentTypeName(), nullValue());
assertThat(newCard.getContentTypeName(), is(""));
/** UPDATE with null content type version **/
updatedMetacard1.setContentTypeVersion(null);
updateResponse = update(updatedMetacard1.getId(), updatedMetacard1);
assertEquals("Testing Update operation: ", ONE_HIT, updateResponse.getUpdatedMetacards().size());
newCard = updateResponse.getUpdatedMetacards().get(0).getNewMetacard();
oldCard = updateResponse.getUpdatedMetacards().get(0).getOldMetacard();
assertNotNull(oldCard.getContentTypeVersion());
assertThat(newCard.getContentTypeVersion(), nullValue());
/** UPDATE with empty content type version **/
updatedMetacard1.setContentTypeVersion("");
updateResponse = update(updatedMetacard1.getId(), updatedMetacard1);
assertEquals("Testing Update operation: ", ONE_HIT, updateResponse.getUpdatedMetacards().size());
newCard = updateResponse.getUpdatedMetacards().get(0).getNewMetacard();
oldCard = updateResponse.getUpdatedMetacards().get(0).getOldMetacard();
assertThat(oldCard.getContentTypeVersion(), nullValue());
assertThat(newCard.getContentTypeVersion(), is(""));
/** UPDATE with new resource uri **/
updatedMetacard1.setResourceURI(new URI(uri1 + "Now"));
updateResponse = update(updatedMetacard1.getId(), updatedMetacard1);
assertEquals("Testing Update operation: ", ONE_HIT, updateResponse.getUpdatedMetacards().size());
newCard = updateResponse.getUpdatedMetacards().get(0).getNewMetacard();
oldCard = updateResponse.getUpdatedMetacards().get(0).getOldMetacard();
assertThat(oldCard.getResourceURI(), is(nullValue()));
assertEquals(uri1 + "Now", newCard.getResourceURI().toString());
/** TEST NULL UPDATE **/
updateResponse = provider.update(new UpdateRequest() {
@Override
public boolean hasProperties() {
return false;
}
@Override
public Serializable getPropertyValue(String name) {
return null;
}
@Override
public Set<String> getPropertyNames() {
return null;
}
@Override
public Map<String, Serializable> getProperties() {
return null;
}
@Override
public boolean containsPropertyName(String name) {
return false;
}
@Override
public List<Entry<Serializable, Metacard>> getUpdates() {
return null;
}
@Override
public String getAttributeName() {
return UpdateRequest.UPDATE_BY_ID;
}
});
assertTrue(updateResponse.getUpdatedMetacards().isEmpty());
}
use of ddf.catalog.operation.impl.QueryRequestImpl in project ddf by codice.
the class SolrProviderTest method greaterThanOrEqualToQueryAssertion.
private void greaterThanOrEqualToQueryAssertion(String fieldName, Serializable fieldValue, int count) throws UnsupportedQueryException {
Filter filter = null;
if (fieldValue instanceof Double) {
filter = filterBuilder.attribute(fieldName).greaterThanOrEqualTo().number((Double) fieldValue);
} else if (fieldValue instanceof Integer) {
filter = filterBuilder.attribute(fieldName).greaterThanOrEqualTo().number((Integer) fieldValue);
} else if (fieldValue instanceof Short) {
filter = filterBuilder.attribute(fieldName).greaterThanOrEqualTo().number((Short) fieldValue);
} else if (fieldValue instanceof Long) {
filter = filterBuilder.attribute(fieldName).greaterThanOrEqualTo().number((Long) fieldValue);
} else if (fieldValue instanceof Float) {
filter = filterBuilder.attribute(fieldName).greaterThanOrEqualTo().number((Float) fieldValue);
}
SourceResponse response = provider.query(new QueryRequestImpl(new QueryImpl(filter)));
assertThat(response.getResults().size(), is(equalTo(count)));
}
Aggregations