001/* 002 * The contents of this file are subject to the license and copyright 003 * detailed in the LICENSE and NOTICE files at the root of the source 004 * tree. 005 */ 006package org.fcrepo.kernel.impl.services; 007 008import java.util.stream.Stream; 009 010import javax.inject.Inject; 011 012import org.fcrepo.kernel.api.Transaction; 013import org.fcrepo.kernel.api.identifiers.FedoraId; 014import org.fcrepo.kernel.api.models.FedoraResource; 015import org.fcrepo.kernel.api.operations.DeleteResourceOperationFactory; 016import org.fcrepo.kernel.api.operations.ResourceOperation; 017import org.fcrepo.kernel.api.services.PurgeResourceService; 018import org.fcrepo.persistence.api.PersistentStorageSession; 019import org.fcrepo.persistence.api.exceptions.PersistentStorageException; 020 021import org.slf4j.Logger; 022import org.slf4j.LoggerFactory; 023import org.springframework.stereotype.Component; 024 025/** 026 * Implementation of purge resource service. 027 * @author whikloj 028 * @since 6.0.0 029 */ 030@Component 031public class PurgeResourceServiceImpl extends AbstractDeleteResourceService implements PurgeResourceService { 032 033 private final static Logger log = LoggerFactory.getLogger(PurgeResourceServiceImpl.class); 034 035 @Inject 036 private DeleteResourceOperationFactory deleteResourceFactory; 037 038 @Override 039 protected Stream<String> getContained(final Transaction tx, final FedoraResource resource) { 040 return containmentIndex.getContainsDeleted(tx, resource.getFedoraId()); 041 } 042 043 @Override 044 protected void doAction(final Transaction tx, final PersistentStorageSession pSession, final FedoraId resourceId, 045 final String userPrincipal) throws PersistentStorageException { 046 log.debug("starting purge of {}", resourceId.getFullId()); 047 final ResourceOperation purgeOp = deleteResourceFactory.purgeBuilder(tx, resourceId) 048 .userPrincipal(userPrincipal) 049 .build(); 050 051 lockArchivalGroupResource(tx, pSession, resourceId); 052 tx.lockResource(resourceId); 053 054 pSession.persist(purgeOp); 055 containmentIndex.purgeResource(tx, resourceId); 056 recordEvent(tx, resourceId, purgeOp); 057 log.debug("purged {}", resourceId.getFullId()); 058 } 059 060}