use of ddf.catalog.operation.DeleteRequest in project ddf by codice.
the class ContentProducerDataAccessObject method createContentItem.
public void createContentItem(FileSystemPersistenceProvider fileIdMap, ContentEndpoint endpoint, File ingestedFile, WatchEvent.Kind<Path> eventType, String mimeType, Map<String, Object> headers) throws SourceUnavailableException, IngestException {
LOGGER.debug("Creating content item.");
String key = String.valueOf(ingestedFile.getAbsolutePath().hashCode());
String id = fileIdMap.loadAllKeys().contains(key) ? String.valueOf(fileIdMap.loadFromPersistence(key)) : null;
if (StandardWatchEventKinds.ENTRY_CREATE.equals(eventType)) {
CreateStorageRequest createRequest = new CreateStorageRequestImpl(Collections.singletonList(new ContentItemImpl(uuidGenerator.generateUuid(), Files.asByteSource(ingestedFile), mimeType, ingestedFile.getName(), 0L, null)), null);
processHeaders(headers, createRequest, ingestedFile);
CreateResponse createResponse = endpoint.getComponent().getCatalogFramework().create(createRequest);
if (createResponse != null) {
List<Metacard> createdMetacards = createResponse.getCreatedMetacards();
for (Metacard metacard : createdMetacards) {
fileIdMap.store(key, metacard.getId());
LOGGER.debug("content item created with id = {}", metacard.getId());
}
}
} else if (StandardWatchEventKinds.ENTRY_MODIFY.equals(eventType)) {
UpdateStorageRequest updateRequest = new UpdateStorageRequestImpl(Collections.singletonList(new ContentItemImpl(id, Files.asByteSource(ingestedFile), mimeType, ingestedFile.getName(), 0, null)), null);
processHeaders(headers, updateRequest, ingestedFile);
UpdateResponse updateResponse = endpoint.getComponent().getCatalogFramework().update(updateRequest);
if (updateResponse != null) {
List<Update> updatedMetacards = updateResponse.getUpdatedMetacards();
for (Update update : updatedMetacards) {
LOGGER.debug("content item updated with id = {}", update.getNewMetacard().getId());
}
}
} else if (StandardWatchEventKinds.ENTRY_DELETE.equals(eventType)) {
DeleteRequest deleteRequest = new DeleteRequestImpl(id);
DeleteResponse deleteResponse = endpoint.getComponent().getCatalogFramework().delete(deleteRequest);
if (deleteResponse != null) {
List<Metacard> deletedMetacards = deleteResponse.getDeletedMetacards();
for (Metacard delete : deletedMetacards) {
fileIdMap.delete(ingestedFile.getAbsolutePath());
LOGGER.debug("content item deleted with id = {}", delete.getId());
}
}
}
}
use of ddf.catalog.operation.DeleteRequest in project ddf by codice.
the class CatalogComponentFrameworkTest method testDeleteWithIngestException.
@Test
public /**
* Operation: DELETE
* Body contains: 12345678900987654321abcdeffedcba
*/
void testDeleteWithIngestException() 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 String[] metacardIds = new String[metacards.size()];
for (int i = 0; i < metacards.size(); i++) {
metacardIds[i] = metacards.get(i).getId();
}
DeleteRequest deleteRequest = new DeleteRequestImpl(metacardIds);
DeleteResponse deleteResponse = new DeleteResponseImpl(deleteRequest, new HashMap(), metacards);
when(catalogFramework.delete(any(DeleteRequest.class))).thenThrow(new IngestException());
// Exercise the route with a DELETE operation
template.sendBodyAndHeader("direct:sampleInput", metacardIds, "Operation", "DELETE");
// 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> cardsDeleted = (List<Update>) exchange.getIn().getBody();
assertListSize(cardsDeleted, 0);
mockVerifierEndpoint.assertIsSatisfied();
}
use of ddf.catalog.operation.DeleteRequest in project ddf by codice.
the class CatalogComponentFrameworkTest method testDeleteWithListOfIds.
@Test
public /**
* Operation: DELETE
* Body contains: List<String>
*/
void testDeleteWithListOfIds() 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);
metacards.add(metacard2);
// setup mock catalog framework
final String[] metacardIds = new String[metacards.size()];
for (int i = 0; i < metacards.size(); i++) {
metacardIds[i] = metacards.get(i).getId();
}
final List<String> metacardIdList = Arrays.asList(metacardIds);
DeleteRequest deleteRequest = new DeleteRequestImpl(metacardIds);
DeleteResponse deleteResponse = new DeleteResponseImpl(deleteRequest, new HashMap(), metacards);
when(catalogFramework.delete(any(DeleteRequest.class))).thenReturn(deleteResponse);
// Exercise the route with a DELETE operation
template.sendBodyAndHeader("direct:sampleInput", metacardIdList, "Operation", "DELETE");
// 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> cardsDeleted = (List<Update>) exchange.getIn().getBody();
assertListSize(cardsDeleted, 2);
mockVerifierEndpoint.assertIsSatisfied();
}
use of ddf.catalog.operation.DeleteRequest in project ddf by codice.
the class FrameworkProducer method delete.
/**
* Deletes 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
* {@link String} or a single {@link String}. Each String represents the ID of a
* Metacard to be deleted.
* @throws ddf.catalog.source.SourceUnavailableException
* @throws ddf.catalog.source.IngestException
* @throws ddf.camel.component.catalog.framework.FrameworkProducerException
*/
private void delete(final Exchange exchange) throws SourceUnavailableException, IngestException, FrameworkProducerException {
DeleteResponse deleteResponse = null;
// read in data
final List<String> metacardIdsToBeDeleted = readBodyDataAsMetacardIds(exchange);
// process if data is valid
if (!validateList(metacardIdsToBeDeleted, String.class)) {
LOGGER.debug("Validation of Metacard id list failed");
processCatalogResponse(deleteResponse, exchange);
throw new FrameworkProducerException("Validation of Metacard id list failed");
}
LOGGER.debug("Validation of Metacard id list passed...");
final String[] metacardIdsToBeDeletedArray = new String[metacardIdsToBeDeleted.size()];
final DeleteRequest deleteRequest = new DeleteRequestImpl(metacardIdsToBeDeleted.toArray(metacardIdsToBeDeletedArray));
final int expectedNumberOfDeletedMetacards = metacardIdsToBeDeleted.size();
if (expectedNumberOfDeletedMetacards < 1) {
LOGGER.debug("Empty list of Metacard id...nothing to process");
processCatalogResponse(deleteResponse, exchange);
return;
}
LOGGER.debug("Making DELETE call to Catalog Framework...");
deleteResponse = catalogFramework.delete(deleteRequest);
if (deleteResponse == null) {
LOGGER.debug("DeleteResponse is null from catalog framework");
processCatalogResponse(deleteResponse, exchange);
return;
}
final List<Metacard> deletedMetacards = deleteResponse.getDeletedMetacards();
if (deletedMetacards == null) {
LOGGER.debug("DeleteResponse returned null metacards list");
processCatalogResponse(deleteResponse, exchange);
return;
}
final int numberOfDeletedMetacards = deletedMetacards.size();
if (numberOfDeletedMetacards != expectedNumberOfDeletedMetacards) {
LOGGER.debug("Expected {} metacards deleted but only {} were successfully deleted", expectedNumberOfDeletedMetacards, numberOfDeletedMetacards);
processCatalogResponse(deleteResponse, exchange);
return;
}
LOGGER.debug("Deleted {} metacards", numberOfDeletedMetacards);
processCatalogResponse(deleteResponse, exchange);
}
use of ddf.catalog.operation.DeleteRequest in project ddf by codice.
the class CachingFederationStrategyTest method testProcessDeleteResponseNotLocal.
@Test
public void testProcessDeleteResponseNotLocal() throws Exception {
Map<String, Serializable> testMap = new HashMap<>();
testMap.put(Constants.SERVICE_TITLE, MOCK_RESPONSE_TITLE);
testMap.put(Constants.LOCAL_DESTINATION_KEY, false);
DeleteResponse response = mock(DeleteResponse.class);
DeleteRequest request = mock(DeleteRequest.class);
when(request.hasProperties()).thenReturn(true);
when(request.getProperties()).thenReturn(testMap);
when(response.getRequest()).thenReturn(request);
assertThat(response, is(strategy.process(response)));
}
Aggregations