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());
}
}
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());
}
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());
}
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();
}
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);
}
Aggregations