use of ddf.catalog.content.data.ContentItem in project ddf by codice.
the class Checksum method runChecksum.
private void runChecksum(List<ContentItem> contentItems) throws PluginExecutionException {
for (ContentItem contentItem : contentItems) {
try (InputStream inputStream = contentItem.getInputStream()) {
//calculate checksum so that it can be added as an attribute on metacard
String checksumAlgorithm = checksumProvider.getChecksumAlgorithm();
String checksumValue;
try {
checksumValue = checksumProvider.calculateChecksum(inputStream);
} catch (IOException e) {
throw new PluginExecutionException("Error calculating checksum", e);
} catch (NoSuchAlgorithmException e) {
throw new PluginExecutionException("Unsupported algorithm", e);
}
addChecksumAttributes(contentItem.getMetacard(), checksumAlgorithm, checksumValue);
} catch (IOException e) {
throw new PluginExecutionException("Unable to retrieve input stream for content item", e);
}
}
}
use of ddf.catalog.content.data.ContentItem in project ddf by codice.
the class Historian method setResourceUriForContent.
private void setResourceUriForContent(/*mutable*/
Map<String, Metacard> versionMetacards, CreateStorageResponse createStorageResponse) {
for (ContentItem contentItem : createStorageResponse.getCreatedContentItems()) {
Metacard metacard = versionMetacards.values().stream().filter(m -> contentItem.getId().equals(m.getId())).findFirst().orElse(null);
if (metacard == null) {
LOGGER.info("Could not find version metacard to set resource URI for (contentItem id: {})", contentItem.getId());
continue;
}
metacard.setAttribute(new AttributeImpl(Metacard.RESOURCE_URI, contentItem.getUri()));
}
}
use of ddf.catalog.content.data.ContentItem in project ddf by codice.
the class Historian method version.
/**
* Versions updated {@link Metacard}s and {@link ContentItem}s.
*
* @param streamUpdateRequest Needed to pass {@link ddf.catalog.core.versioning.MetacardVersion#SKIP_VERSIONING}
* flag into downstream update
* @param updateStorageResponse Versions this response's updated items
* @return the update response originally passed in
* @throws UnsupportedQueryException
* @throws SourceUnavailableException
* @throws IngestException
*/
public UpdateStorageResponse version(UpdateStorageRequest streamUpdateRequest, UpdateStorageResponse updateStorageResponse, UpdateResponse updateResponse) throws UnsupportedQueryException, SourceUnavailableException, IngestException {
if (doSkip(updateStorageResponse)) {
return updateStorageResponse;
}
setSkipFlag(streamUpdateRequest);
setSkipFlag(updateStorageResponse);
List<Metacard> updatedMetacards = updateStorageResponse.getUpdatedContentItems().stream().filter(ci -> StringUtils.isBlank(ci.getQualifier())).map(ContentItem::getMetacard).filter(Objects::nonNull).filter(isNotVersionNorDeleted).collect(Collectors.toList());
Map<String, Metacard> originalMetacards = query(forIds(updatedMetacards.stream().map(Metacard::getId).collect(Collectors.toList())));
Collection<ReadStorageRequest> ids = getReadStorageRequests(updatedMetacards);
Map<String, List<ContentItem>> content = getContent(ids);
Function<String, Action> getAction = (id) -> content.containsKey(id) ? Action.VERSIONED_CONTENT : Action.VERSIONED;
Map<String, Metacard> versionMetacards = getVersionMetacards(originalMetacards.values(), getAction, (Subject) updateResponse.getProperties().get(SecurityConstants.SECURITY_SUBJECT));
CreateStorageResponse createStorageResponse = versionContentItems(content, versionMetacards);
if (createStorageResponse == null) {
LOGGER.debug("Could not version content items.");
return updateStorageResponse;
}
setResourceUriForContent(/*mutable*/
versionMetacards, createStorageResponse);
storeVersionMetacards(versionMetacards);
return updateStorageResponse;
}
use of ddf.catalog.content.data.ContentItem in project ddf by codice.
the class Historian method version.
/**
* Versions deleted {@link Metacard}s.
*
* @param deleteResponse Versions this responses deleted metacards
*/
public DeleteResponse version(DeleteResponse deleteResponse) throws SourceUnavailableException, IngestException {
if (doSkip(deleteResponse)) {
return deleteResponse;
}
setSkipFlag(deleteResponse);
List<Metacard> deletedMetacards = deleteResponse.getDeletedMetacards().stream().filter(isNotVersionNorDeleted).collect(Collectors.toList());
// [ContentItem.getId: content items]
Map<String, List<ContentItem>> contentItems = getContent(getReadStorageRequests(deletedMetacards));
Function<String, Action> getAction = (id) -> contentItems.containsKey(id) ? Action.DELETED_CONTENT : Action.DELETED;
// [MetacardVersion.VERSION_OF_ID: versioned metacard]
Map<String, Metacard> versionedMap = getVersionMetacards(deletedMetacards, getAction, (Subject) deleteResponse.getRequest().getProperties().get(SecurityConstants.SECURITY_SUBJECT));
CreateStorageResponse createStorageResponse = versionContentItems(contentItems, versionedMap);
if (createStorageResponse != null) {
setResourceUriForContent(/*Mutable*/
versionedMap, createStorageResponse);
}
executeAsSystem(() -> catalogProvider().create(new CreateRequestImpl(new ArrayList<>(versionedMap.values()))));
String emailAddress = SubjectUtils.getEmailAddress((Subject) deleteResponse.getProperties().get(SecurityConstants.SECURITY_SUBJECT));
List<Metacard> deletionMetacards = versionedMap.entrySet().stream().map(s -> new DeletedMetacardImpl(uuidGenerator.generateUuid(), s.getKey(), emailAddress, s.getValue().getId(), MetacardVersionImpl.toMetacard(s.getValue(), metacardTypes))).collect(Collectors.toList());
executeAsSystem(() -> catalogProvider().create(new CreateRequestImpl(deletionMetacards, new HashMap<>())));
return deleteResponse;
}
use of ddf.catalog.content.data.ContentItem in project ddf by codice.
the class Historian method versionContentItems.
private CreateStorageResponse versionContentItems(Map<String, List<ContentItem>> items, Map<String, Metacard> versionedMetacards) throws SourceUnavailableException, IngestException {
List<ContentItem> contentItems = items.entrySet().stream().map(e -> getVersionedContentItems(e.getValue(), versionedMetacards)).flatMap(Collection::stream).collect(Collectors.toList());
if (contentItems.isEmpty()) {
LOGGER.debug("No content items to version");
return null;
}
CreateStorageResponse createStorageResponse = executeAsSystem(() -> storageProvider().create(new CreateStorageRequestImpl(contentItems, new HashMap<>())));
tryCommitStorage(createStorageResponse);
return createStorageResponse;
}
Aggregations