Search in sources :

Example 41 with UpdateRequestImpl

use of ddf.catalog.operation.impl.UpdateRequestImpl in project ddf by codice.

the class CatalogFeatureIndexer method createOrUpdateMetacardForFeature.

private void createOrUpdateMetacardForFeature(SimpleFeature feature, boolean create) throws FeatureIndexingException {
    try {
        security.runWithSubjectOrElevate(() -> {
            Metacard metacard = null;
            if (!create) {
                metacard = findMetacardForFeature(feature);
            }
            if (metacard == null) {
                metacard = createMetacardForFeature(feature);
                catalogFramework.create(new CreateRequestImpl(metacard));
            } else {
                catalogFramework.update(new UpdateRequestImpl(metacard.getId(), metacard));
            }
            return null;
        });
    } catch (SecurityServiceException | InvocationTargetException e) {
        throw new FeatureIndexingException(e.getMessage());
    }
}
Also used : Metacard(ddf.catalog.data.Metacard) SecurityServiceException(ddf.security.service.SecurityServiceException) FeatureIndexingException(org.codice.ddf.spatial.geocoding.FeatureIndexingException) CreateRequestImpl(ddf.catalog.operation.impl.CreateRequestImpl) UpdateRequestImpl(ddf.catalog.operation.impl.UpdateRequestImpl) InvocationTargetException(java.lang.reflect.InvocationTargetException)

Example 42 with UpdateRequestImpl

use of ddf.catalog.operation.impl.UpdateRequestImpl in project ddf by codice.

the class SolrProviderUpdate method testUpdateNullList.

/**
 * Tests null list in UpdateRequest
 */
@Test
public void testUpdateNullList() throws IngestException, UnsupportedQueryException {
    deleteAll(provider);
    UpdateResponse response = provider.update(new UpdateRequestImpl(null, Metacard.ID, null));
    assertEquals(0, response.getUpdatedMetacards().size());
}
Also used : UpdateResponse(ddf.catalog.operation.UpdateResponse) UpdateRequestImpl(ddf.catalog.operation.impl.UpdateRequestImpl) SolrProviderTest(ddf.catalog.source.solr.SolrProviderTest) Test(org.junit.Test)

Example 43 with UpdateRequestImpl

use of ddf.catalog.operation.impl.UpdateRequestImpl in project ddf by codice.

the class SolrProviderUpdate method testUpdateEmptyList.

/**
 * Tests empty list in UpdateRequest
 */
@Test
public void testUpdateEmptyList() throws IngestException, UnsupportedQueryException {
    deleteAll(provider);
    UpdateResponse response = provider.update(new UpdateRequestImpl(new ArrayList<>(), Metacard.ID, null));
    assertEquals(0, response.getUpdatedMetacards().size());
}
Also used : UpdateResponse(ddf.catalog.operation.UpdateResponse) ArrayList(java.util.ArrayList) UpdateRequestImpl(ddf.catalog.operation.impl.UpdateRequestImpl) SolrProviderTest(ddf.catalog.source.solr.SolrProviderTest) Test(org.junit.Test)

Example 44 with UpdateRequestImpl

use of ddf.catalog.operation.impl.UpdateRequestImpl in project ddf by codice.

the class CatalogComponentFrameworkTest method testUpdateWithSingleMetacard.

@Test
public /**
 * Operation: UPDATE Body contains: Metacard
 */
void testUpdateWithSingleMetacard() throws Exception {
    resetMocks();
    // Setup expectations to verify
    final MockEndpoint mockVerifierEndpoint = getMockEndpoint("mock:result");
    mockVerifierEndpoint.expectedMessageCount(1);
    final List<Metacard> metacards = new ArrayList<Metacard>();
    metacards.add(metacard1);
    // setup mock catalog framework
    final Update update = new UpdateImpl(metacard1, metacard2);
    List<Update> updates = new ArrayList<Update>();
    updates.add(update);
    final String[] metacardIds = new String[metacards.size()];
    for (int i = 0; i < metacards.size(); i++) {
        metacardIds[i] = metacards.get(i).getId();
    }
    UpdateRequest updateRequest = new UpdateRequestImpl(metacardIds, metacards);
    UpdateResponse updateResponse = new UpdateResponseImpl(updateRequest, new HashMap(), updates);
    when(catalogFramework.update(any(UpdateRequest.class))).thenReturn(updateResponse);
    // Exercise the route with a UPDATE operation
    template.sendBodyAndHeader("direct:sampleInput", metacard1, "Operation", "UPDATE");
    // Verify that the number of metacards in the exchange after the records
    // is identical to the input
    assertListSize(mockVerifierEndpoint.getExchanges(), 1);
    final Exchange exchange = mockVerifierEndpoint.getExchanges().get(0);
    final List<Update> cardsUpdated = (List<Update>) exchange.getIn().getBody();
    assertListSize(cardsUpdated, 1);
    mockVerifierEndpoint.assertIsSatisfied();
}
Also used : UpdateImpl(ddf.catalog.operation.impl.UpdateImpl) MockEndpoint(org.apache.camel.component.mock.MockEndpoint) UpdateRequest(ddf.catalog.operation.UpdateRequest) HashMap(java.util.HashMap) ArrayList(java.util.ArrayList) Update(ddf.catalog.operation.Update) MockEndpoint(org.apache.camel.component.mock.MockEndpoint) Exchange(org.apache.camel.Exchange) UpdateResponse(ddf.catalog.operation.UpdateResponse) Metacard(ddf.catalog.data.Metacard) UpdateResponseImpl(ddf.catalog.operation.impl.UpdateResponseImpl) ArrayList(java.util.ArrayList) List(java.util.List) UpdateRequestImpl(ddf.catalog.operation.impl.UpdateRequestImpl) Test(org.junit.Test)

Example 45 with UpdateRequestImpl

use of ddf.catalog.operation.impl.UpdateRequestImpl in project ddf by codice.

the class FrameworkProducer method update.

/**
 * Updates metacard(s) in the catalog using the Catalog Framework.
 *
 * @param exchange The {@link org.apache.camel.Exchange} can contain a {@link
 *     org.apache.camel.Message} with a body of type {@link java.util.List} of Metacard or a
 *     single Metacard.
 * @throws ddf.catalog.source.SourceUnavailableException
 * @throws ddf.catalog.source.IngestException
 * @throws ddf.camel.component.catalog.framework.FrameworkProducerException
 */
private void update(final Exchange exchange) throws SourceUnavailableException, IngestException, FrameworkProducerException {
    UpdateResponse updateResponse = null;
    // read in data from exchange
    final List<Metacard> metacardsToBeUpdated = readBodyDataAsMetacards(exchange);
    // process data if valid
    if (!validateList(metacardsToBeUpdated, Metacard.class)) {
        processCatalogResponse(updateResponse, exchange);
        throw new FrameworkProducerException("Validation of Metacard list failed");
    }
    LOGGER.debug("Validation of Metacard list passed...");
    final String[] metacardIds = new String[metacardsToBeUpdated.size()];
    for (int i = 0; i < metacardsToBeUpdated.size(); i++) {
        metacardIds[i] = metacardsToBeUpdated.get(i).getId();
    }
    final UpdateRequest updateRequest = new UpdateRequestImpl(metacardIds, metacardsToBeUpdated);
    final int expectedNumberOfUpdatedMetacards = metacardsToBeUpdated.size();
    if (expectedNumberOfUpdatedMetacards < 1) {
        LOGGER.debug("Empty list of Metacards...nothing to process");
        processCatalogResponse(updateResponse, exchange);
        return;
    }
    LOGGER.debug("Making UPDATE call to Catalog Framework...");
    updateResponse = catalogFramework.update(updateRequest);
    if (updateResponse == null) {
        LOGGER.debug("UpdateResponse is null from catalog framework");
        processCatalogResponse(updateResponse, exchange);
        return;
    }
    final List<Update> updatedMetacards = updateResponse.getUpdatedMetacards();
    if (updatedMetacards == null) {
        LOGGER.debug("UpdateResponse returned null metacards list");
        processCatalogResponse(updateResponse, exchange);
        return;
    }
    final int numberOfUpdatedMetacards = updatedMetacards.size();
    if (numberOfUpdatedMetacards != expectedNumberOfUpdatedMetacards) {
        LOGGER.debug("Expected {} metacards updated but only {} were successfully updated", expectedNumberOfUpdatedMetacards, numberOfUpdatedMetacards);
        processCatalogResponse(updateResponse, exchange);
        return;
    }
    LOGGER.debug("Updated {} metacards", numberOfUpdatedMetacards);
    processCatalogResponse(updateResponse, exchange);
}
Also used : UpdateResponse(ddf.catalog.operation.UpdateResponse) Metacard(ddf.catalog.data.Metacard) UpdateRequest(ddf.catalog.operation.UpdateRequest) UpdateRequestImpl(ddf.catalog.operation.impl.UpdateRequestImpl) Update(ddf.catalog.operation.Update) Endpoint(org.apache.camel.Endpoint)

Aggregations

UpdateRequestImpl (ddf.catalog.operation.impl.UpdateRequestImpl)57 Metacard (ddf.catalog.data.Metacard)42 ArrayList (java.util.ArrayList)35 Test (org.junit.Test)34 UpdateRequest (ddf.catalog.operation.UpdateRequest)28 HashMap (java.util.HashMap)28 Serializable (java.io.Serializable)26 MetacardImpl (ddf.catalog.data.impl.MetacardImpl)21 UpdateResponse (ddf.catalog.operation.UpdateResponse)19 IngestException (ddf.catalog.source.IngestException)13 AbstractMap (java.util.AbstractMap)13 SourceUnavailableException (ddf.catalog.source.SourceUnavailableException)12 ArgumentMatchers.anyString (org.mockito.ArgumentMatchers.anyString)12 CatalogFramework (ddf.catalog.CatalogFramework)11 AttributeImpl (ddf.catalog.data.impl.AttributeImpl)10 CreateRequestImpl (ddf.catalog.operation.impl.CreateRequestImpl)10 List (java.util.List)10 Result (ddf.catalog.data.Result)9 URI (java.net.URI)9 Entry (java.util.Map.Entry)9