Search in sources :

Example 1 with DeletedMetacardImpl

use of ddf.catalog.core.versioning.impl.DeletedMetacardImpl 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);
    if (LOGGER.isTraceEnabled()) {
        LOGGER.trace("Versioning Deleted Metacards {}", deleteResponse);
    }
    List<Metacard> originalMetacards = deleteResponse.getDeletedMetacards().stream().filter(isNotVersionNorDeleted).collect(Collectors.toList());
    if (originalMetacards.isEmpty()) {
        LOGGER.trace("No deleted metacards applicable to versioning");
        securityLogger.audit("Skipping versioning deleted metacards with ids: {}", deleteResponse.getDeletedMetacards().stream().map(Metacard::getId).collect(TO_A_STRING));
        return deleteResponse;
    }
    if (LOGGER.isTraceEnabled()) {
        LOGGER.trace("Versioning following deleted metacards: {}", originalMetacards.stream().map(Metacard::getId).collect(TO_A_STRING));
    }
    // [OriginalMetacardId: Original Metacard]
    Map<String, Metacard> originalMetacardsMap = originalMetacards.stream().collect(Collectors.toMap(Metacard::getId, Function.identity(), Historian::firstInWinsMerge));
    // [ContentItem.getId: content items]
    Map<String, List<ContentItem>> contentItems = getContent(getReadStorageRequests(originalMetacards));
    if (LOGGER.isTraceEnabled()) {
        LOGGER.trace("Got content under the following ID's: {}", contentItems.keySet().stream().collect(TO_A_STRING));
    }
    Function<String, Action> getAction = id -> contentItems.containsKey(id) ? Action.DELETED_CONTENT : Action.DELETED;
    // VERSION_OF_ID is equivalent to the Original Metacard ID
    // [MetacardVersion.VERSION_OF_ID: versioned metacard]
    Map<String, Metacard> versionedMap = getVersionMetacards(originalMetacards, getAction, (Subject) deleteResponse.getRequest().getProperties().get(SecurityConstants.SECURITY_SUBJECT));
    if (LOGGER.isDebugEnabled() && !versionedMap.keySet().equals(originalMetacardsMap.keySet())) {
        LOGGER.debug("There is not a one to one mapping between original metacards and their versions!" + " (Some metacards may not have been versioned or too many versions may have been created). " + "More information regarding the IDs is available by setting log level to trace " + "(log:set trace ddf.catalog.history)");
        if (LOGGER.isTraceEnabled()) {
            LOGGER.trace("Original Metacards: {}", originalMetacards.stream().map(Metacard::getId).collect(TO_A_STRING));
            LOGGER.trace("Version Metacards: {}", versionedMap.keySet().stream().collect(TO_A_STRING));
        }
    }
    CreateStorageResponse createStorageResponse = versionContentItems(contentItems, versionedMap);
    if (createStorageResponse != null) {
        setResourceUriForContent(/*Mutable*/
        versionedMap, createStorageResponse);
        if (LOGGER.isTraceEnabled()) {
            LOGGER.trace("Successfully stored content under ids: {}", createStorageResponse.getCreatedContentItems());
        }
    }
    executeAsSystem(() -> catalogProvider().create(new CreateRequestImpl(new ArrayList<>(versionedMap.values()))));
    if (LOGGER.isTraceEnabled()) {
        LOGGER.trace("Successfully created versioned metacards under ids: {}", versionedMap.values().stream().map(Metacard::getId).collect(TO_A_STRING));
    }
    String userid = subjectIdentity.getUniqueIdentifier((Subject) deleteResponse.getProperties().get(SecurityConstants.SECURITY_SUBJECT));
    List<Metacard> deletionMetacards = versionedMap.entrySet().stream().map(s -> new DeletedMetacardImpl(uuidGenerator.generateUuid(), s.getKey(), userid, s.getValue().getId(), originalMetacardsMap.get(s.getKey()))).collect(Collectors.toList());
    CreateResponse deletionMetacardsCreateResponse = executeAsSystem(() -> catalogProvider().create(new CreateRequestImpl(deletionMetacards, new HashMap<>())));
    if (LOGGER.isTraceEnabled()) {
        LOGGER.trace("Successfully created deletion metacards under ids: {}", deletionMetacardsCreateResponse.getCreatedMetacards().stream().map(Metacard::getId).collect(TO_A_STRING));
    }
    return deleteResponse;
}
Also used : UnsupportedQueryException(ddf.catalog.source.UnsupportedQueryException) LoggerFactory(org.slf4j.LoggerFactory) ReadStorageRequest(ddf.catalog.content.operation.ReadStorageRequest) StringUtils(org.apache.commons.lang3.StringUtils) SubjectOperations(ddf.security.SubjectOperations) UpdateStorageRequest(ddf.catalog.content.operation.UpdateStorageRequest) DeletedMetacardImpl(ddf.catalog.core.versioning.impl.DeletedMetacardImpl) LogSanitizer(org.codice.ddf.log.sanitizer.LogSanitizer) Map(java.util.Map) Action(ddf.catalog.core.versioning.MetacardVersion.Action) Collector(java.util.stream.Collector) UpdateStorageResponse(ddf.catalog.content.operation.UpdateStorageResponse) Bundle(org.osgi.framework.Bundle) MetacardVersionImpl(ddf.catalog.core.versioning.impl.MetacardVersionImpl) AttributeDescriptor(ddf.catalog.data.AttributeDescriptor) Predicate(java.util.function.Predicate) Collection(java.util.Collection) PrivilegedAction(java.security.PrivilegedAction) Collectors(java.util.stream.Collectors) MetacardType(ddf.catalog.data.MetacardType) BundleContext(org.osgi.framework.BundleContext) Objects(java.util.Objects) StorageException(ddf.catalog.content.StorageException) Operation(ddf.catalog.operation.Operation) List(java.util.List) CreateStorageResponse(ddf.catalog.content.operation.CreateStorageResponse) Optional(java.util.Optional) UpdateResponse(ddf.catalog.operation.UpdateResponse) AccessController(java.security.AccessController) QueryRequestImpl(ddf.catalog.operation.impl.QueryRequestImpl) ContentItemImpl(ddf.catalog.content.data.impl.ContentItemImpl) Security(org.codice.ddf.security.Security) SourceUnavailableException(ddf.catalog.source.SourceUnavailableException) AttributeImpl(ddf.catalog.data.impl.AttributeImpl) DeleteResponse(ddf.catalog.operation.DeleteResponse) HashMap(java.util.HashMap) Callable(java.util.concurrent.Callable) Update(ddf.catalog.operation.Update) Function(java.util.function.Function) ArrayList(java.util.ArrayList) Lists(com.google.common.collect.Lists) SKIP_VERSIONING(ddf.catalog.core.versioning.MetacardVersion.SKIP_VERSIONING) ContentItem(ddf.catalog.content.data.ContentItem) CreateResponse(ddf.catalog.operation.CreateResponse) Metacard(ddf.catalog.data.Metacard) SecurityConstants(ddf.security.SecurityConstants) StorageProvider(ddf.catalog.content.StorageProvider) ByteSource(com.google.common.io.ByteSource) Result(ddf.catalog.data.Result) Hashtable(java.util.Hashtable) Nullable(javax.annotation.Nullable) CreateRequestImpl(ddf.catalog.operation.impl.CreateRequestImpl) CreateStorageRequestImpl(ddf.catalog.content.operation.impl.CreateStorageRequestImpl) QueryImpl(ddf.catalog.operation.impl.QueryImpl) SubjectIdentity(ddf.security.SubjectIdentity) Logger(org.slf4j.Logger) SecurityLogger(ddf.security.audit.SecurityLogger) IngestException(ddf.catalog.source.IngestException) Subject(ddf.security.Subject) IOException(java.io.IOException) ReadStorageRequestImpl(ddf.catalog.content.operation.impl.ReadStorageRequestImpl) TimeUnit(java.util.concurrent.TimeUnit) SourceResponse(ddf.catalog.operation.SourceResponse) CatalogProvider(ddf.catalog.source.CatalogProvider) Filter(org.opengis.filter.Filter) Collections(java.util.Collections) FrameworkUtil(org.osgi.framework.FrameworkUtil) ReadStorageResponse(ddf.catalog.content.operation.ReadStorageResponse) InputStream(java.io.InputStream) UuidGenerator(org.codice.ddf.platform.util.uuidgenerator.UuidGenerator) Action(ddf.catalog.core.versioning.MetacardVersion.Action) PrivilegedAction(java.security.PrivilegedAction) CreateResponse(ddf.catalog.operation.CreateResponse) CreateStorageResponse(ddf.catalog.content.operation.CreateStorageResponse) Metacard(ddf.catalog.data.Metacard) DeletedMetacardImpl(ddf.catalog.core.versioning.impl.DeletedMetacardImpl) CreateRequestImpl(ddf.catalog.operation.impl.CreateRequestImpl) List(java.util.List) ArrayList(java.util.ArrayList)

Aggregations

Lists (com.google.common.collect.Lists)1 ByteSource (com.google.common.io.ByteSource)1 StorageException (ddf.catalog.content.StorageException)1 StorageProvider (ddf.catalog.content.StorageProvider)1 ContentItem (ddf.catalog.content.data.ContentItem)1 ContentItemImpl (ddf.catalog.content.data.impl.ContentItemImpl)1 CreateStorageResponse (ddf.catalog.content.operation.CreateStorageResponse)1 ReadStorageRequest (ddf.catalog.content.operation.ReadStorageRequest)1 ReadStorageResponse (ddf.catalog.content.operation.ReadStorageResponse)1 UpdateStorageRequest (ddf.catalog.content.operation.UpdateStorageRequest)1 UpdateStorageResponse (ddf.catalog.content.operation.UpdateStorageResponse)1 CreateStorageRequestImpl (ddf.catalog.content.operation.impl.CreateStorageRequestImpl)1 ReadStorageRequestImpl (ddf.catalog.content.operation.impl.ReadStorageRequestImpl)1 Action (ddf.catalog.core.versioning.MetacardVersion.Action)1 SKIP_VERSIONING (ddf.catalog.core.versioning.MetacardVersion.SKIP_VERSIONING)1 DeletedMetacardImpl (ddf.catalog.core.versioning.impl.DeletedMetacardImpl)1 MetacardVersionImpl (ddf.catalog.core.versioning.impl.MetacardVersionImpl)1 AttributeDescriptor (ddf.catalog.data.AttributeDescriptor)1 Metacard (ddf.catalog.data.Metacard)1 MetacardType (ddf.catalog.data.MetacardType)1