Search in sources :

Example 6 with UpdateRequest

use of ddf.catalog.operation.UpdateRequest 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 7 with UpdateRequest

use of ddf.catalog.operation.UpdateRequest 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 8 with UpdateRequest

use of ddf.catalog.operation.UpdateRequest in project ddf by codice.

the class SolrProviderTest method testUpdateUnknownAttribute.

/**
     * Testing update operation of unknown attribute. Should return no results.
     *
     * @throws IngestException
     * @throws UnsupportedQueryException
     */
public void testUpdateUnknownAttribute() throws IngestException, UnsupportedQueryException {
    deleteAllIn(provider);
    UpdateResponse response = 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 "dataAccess";
        }
    });
    assertEquals(0, response.getUpdatedMetacards().size());
}
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) UpdateResponse(ddf.catalog.operation.UpdateResponse) 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)

Example 9 with UpdateRequest

use of ddf.catalog.operation.UpdateRequest in project ddf by codice.

the class RestReplicatorPlugin method process.

@Override
public UpdateResponse process(UpdateResponse input) throws PluginExecutionException {
    if (Requests.isLocal(input.getRequest()) && client != null && transformer != null) {
        WebClient updateClient = WebClient.fromClient(client);
        updateClient.type(MediaType.APPLICATION_JSON);
        List<Update> updates = input.getUpdatedMetacards();
        if (updates == null) {
            return input;
        }
        UpdateRequest request = input.getRequest();
        if (request != null && !Metacard.ID.equals(request.getAttributeName())) {
            throw new PluginExecutionException(new UnsupportedOperationException("Cannot replicate records that are not updated by " + Metacard.ID));
        }
        for (int i = 0; i < updates.size(); i++) {
            Update update = updates.get(i);
            if (request != null && request.getUpdates() != null && request.getUpdates().get(i) != null && request.getUpdates().get(i).getKey() != null) {
                updateClient.path(request.getUpdates().get(i).getKey());
                Metacard newMetacard = update.getNewMetacard();
                String newData = transform(newMetacard, updateClient);
                Response r = updateClient.put(newData);
                LOGGER.debug("RESPONSE: [{}]", ToStringBuilder.reflectionToString(r));
            }
        }
    }
    return input;
}
Also used : DeleteResponse(ddf.catalog.operation.DeleteResponse) Response(javax.ws.rs.core.Response) CreateResponse(ddf.catalog.operation.CreateResponse) UpdateResponse(ddf.catalog.operation.UpdateResponse) Metacard(ddf.catalog.data.Metacard) UpdateRequest(ddf.catalog.operation.UpdateRequest) Update(ddf.catalog.operation.Update) WebClient(org.apache.cxf.jaxrs.client.WebClient) PluginExecutionException(ddf.catalog.plugin.PluginExecutionException)

Example 10 with UpdateRequest

use of ddf.catalog.operation.UpdateRequest in project ddf by codice.

the class MetacardValidityMarkerPluginTest method testMetacardFailsEnforcedValidator.

@Test
public void testMetacardFailsEnforcedValidator() throws ValidationException, StopProcessingException, PluginExecutionException {
    metacardValidators.add(getMockEnforcedFailingValidatorWithId(ID));
    enforcedMetacardValidators.add(ID);
    CreateRequest createRequest = getMockCreateRequest();
    List<Metacard> createdMetacards = createRequest.getMetacards();
    verifyEnforcedCreate(createRequest, createdMetacards.subList(1, createdMetacards.size()));
    UpdateRequest updateRequest = getMockUpdateRequest();
    List<Metacard> updatedMetacards = getUpdatedMetacards(updateRequest);
    verifyEnforcedUpdate(updateRequest, updatedMetacards.subList(1, updatedMetacards.size()));
}
Also used : Metacard(ddf.catalog.data.Metacard) UpdateRequest(ddf.catalog.operation.UpdateRequest) CreateRequest(ddf.catalog.operation.CreateRequest) Test(org.junit.Test)

Aggregations

UpdateRequest (ddf.catalog.operation.UpdateRequest)61 Test (org.junit.Test)44 Metacard (ddf.catalog.data.Metacard)41 ArrayList (java.util.ArrayList)32 Serializable (java.io.Serializable)25 UpdateResponse (ddf.catalog.operation.UpdateResponse)23 UpdateRequestImpl (ddf.catalog.operation.impl.UpdateRequestImpl)23 HashMap (java.util.HashMap)21 Update (ddf.catalog.operation.Update)17 List (java.util.List)16 Entry (java.util.Map.Entry)16 MetacardImpl (ddf.catalog.data.impl.MetacardImpl)15 Map (java.util.Map)12 SimpleEntry (java.util.AbstractMap.SimpleEntry)11 IngestException (ddf.catalog.source.IngestException)10 URI (java.net.URI)10 Result (ddf.catalog.data.Result)9 CreateRequest (ddf.catalog.operation.CreateRequest)9 CatalogFramework (ddf.catalog.CatalogFramework)8 CreateResponse (ddf.catalog.operation.CreateResponse)8