Search in sources :

Example 76 with Metacard

use of ddf.catalog.data.Metacard 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());
}
Also used : Metacard(ddf.catalog.data.Metacard) QueryImpl(ddf.catalog.operation.impl.QueryImpl) SourceResponse(ddf.catalog.operation.SourceResponse) Filter(org.opengis.filter.Filter) SortByImpl(org.geotools.filter.SortByImpl) SortBy(org.opengis.filter.sort.SortBy) QueryRequestImpl(ddf.catalog.operation.impl.QueryRequestImpl) MetacardImpl(ddf.catalog.data.impl.MetacardImpl) Test(org.junit.Test)

Example 77 with Metacard

use of ddf.catalog.data.Metacard in project ddf by codice.

the class SolrProviderTest method testUpdateNonUniqueAttributeValue.

/**
     * Tests if we catch properly the case that the attribute value matches multiple Metacards.
     *
     * @throws IngestException
     * @throws UnsupportedQueryException
     */
@Test(expected = IngestException.class)
public void testUpdateNonUniqueAttributeValue() throws IngestException, UnsupportedQueryException {
    deleteAllIn(provider);
    MockMetacard m1 = new MockMetacard(Library.getFlagstaffRecord());
    MockMetacard m2 = new MockMetacard(Library.getFlagstaffRecord());
    MockMetacard m3 = new MockMetacard(Library.getFlagstaffRecord());
    List<Metacard> list = Arrays.asList((Metacard) m1, m2, m3);
    create(list);
    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() {
            MockMetacard newMetacard = new MockMetacard(Library.getShowLowRecord());
            List<Entry<Serializable, Metacard>> updateList = new ArrayList<Entry<Serializable, Metacard>>();
            updateList.add(new SimpleEntry<Serializable, Metacard>(MockMetacard.DEFAULT_TITLE, newMetacard));
            return updateList;
        }

        @Override
        public String getAttributeName() {
            return Metacard.TITLE;
        }
    });
}
Also used : Serializable(java.io.Serializable) Set(java.util.Set) TreeSet(java.util.TreeSet) HashSet(java.util.HashSet) UpdateRequest(ddf.catalog.operation.UpdateRequest) SimpleEntry(java.util.AbstractMap.SimpleEntry) Matchers.containsString(org.hamcrest.Matchers.containsString) Metacard(ddf.catalog.data.Metacard) Entry(java.util.Map.Entry) SimpleEntry(java.util.AbstractMap.SimpleEntry) List(java.util.List) ArrayList(java.util.ArrayList) LinkedList(java.util.LinkedList) Map(java.util.Map) Test(org.junit.Test)

Example 78 with Metacard

use of ddf.catalog.data.Metacard 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());
}
Also used : Metacard(ddf.catalog.data.Metacard) QueryImpl(ddf.catalog.operation.impl.QueryImpl) SourceResponse(ddf.catalog.operation.SourceResponse) QueryRequestImpl(ddf.catalog.operation.impl.QueryRequestImpl) Test(org.junit.Test)

Example 79 with Metacard

use of ddf.catalog.data.Metacard 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());
}
Also used : Serializable(java.io.Serializable) SourceResponse(ddf.catalog.operation.SourceResponse) UpdateRequest(ddf.catalog.operation.UpdateRequest) CreateResponse(ddf.catalog.operation.CreateResponse) Matchers.containsString(org.hamcrest.Matchers.containsString) Update(ddf.catalog.operation.Update) URI(java.net.URI) Date(java.util.Date) Result(ddf.catalog.data.Result) UpdateResponse(ddf.catalog.operation.UpdateResponse) Metacard(ddf.catalog.data.Metacard) QueryImpl(ddf.catalog.operation.impl.QueryImpl) Entry(java.util.Map.Entry) SimpleEntry(java.util.AbstractMap.SimpleEntry) QueryRequestImpl(ddf.catalog.operation.impl.QueryRequestImpl) Test(org.junit.Test)

Example 80 with Metacard

use of ddf.catalog.data.Metacard in project ddf by codice.

the class SolrProviderTest method testContextualAnyText.

/**
     * Testing {@link Metacard#ANY_TEXT}
     *
     * @throws Exception
     */
@Test
public void testContextualAnyText() throws Exception {
    deleteAllIn(provider);
    List<Metacard> list = new ArrayList<Metacard>();
    MockMetacard metacard1 = new MockMetacard(Library.getFlagstaffRecord());
    String soughtWord = "nitf";
    metacard1.setContentTypeName(soughtWord);
    list.add(metacard1);
    MockMetacard metacard2 = new MockMetacard(Library.getTampaRecord());
    list.add(metacard2);
    MockMetacard metacard3 = new MockMetacard(Library.getShowLowRecord());
    list.add(metacard3);
    create(list);
    queryAndVerifyCount(1, filterBuilder.attribute(Metacard.ANY_TEXT).is().like().text(soughtWord));
}
Also used : Metacard(ddf.catalog.data.Metacard) ArrayList(java.util.ArrayList) Matchers.containsString(org.hamcrest.Matchers.containsString) Test(org.junit.Test)

Aggregations

Metacard (ddf.catalog.data.Metacard)746 Test (org.junit.Test)470 ArrayList (java.util.ArrayList)206 MetacardImpl (ddf.catalog.data.impl.MetacardImpl)149 InputStream (java.io.InputStream)136 HashMap (java.util.HashMap)129 AttributeImpl (ddf.catalog.data.impl.AttributeImpl)115 Result (ddf.catalog.data.Result)109 Serializable (java.io.Serializable)100 QueryRequestImpl (ddf.catalog.operation.impl.QueryRequestImpl)90 QueryRequest (ddf.catalog.operation.QueryRequest)84 QueryImpl (ddf.catalog.operation.impl.QueryImpl)80 QueryResponse (ddf.catalog.operation.QueryResponse)78 SourceResponse (ddf.catalog.operation.SourceResponse)76 IOException (java.io.IOException)75 List (java.util.List)74 Map (java.util.Map)67 Filter (org.opengis.filter.Filter)67 CreateResponse (ddf.catalog.operation.CreateResponse)66 HashSet (java.util.HashSet)65