implement service to delete groupId

git-svn-id: https://svn.apache.org/repos/asf/archiva/trunk@1346651 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Olivier Lamy 2012-06-05 23:17:23 +00:00
parent f31f365535
commit 710489fc72
6 changed files with 108 additions and 27 deletions

View File

@ -49,12 +49,21 @@ public interface ManagedRepositoryContent
/** /**
* delete a specified artifact from the repository * delete a specified artifact from the repository
*
* @param artifactReference * @param artifactReference
* @throws ContentNotFoundException * @throws ContentNotFoundException
*/ */
void deleteArtifact( ArtifactReference artifactReference ) void deleteArtifact( ArtifactReference artifactReference )
throws ContentNotFoundException; throws ContentNotFoundException;
/**
* @since 1.4-M3
* @param groupId
* @throws ContentNotFoundException
*/
void deleteGroupId( String groupId )
throws ContentNotFoundException;
/** /**
* <p> * <p>
* Convenience method to get the repository id. * Convenience method to get the repository id.

View File

@ -31,6 +31,7 @@ import org.apache.archiva.repository.ContentNotFoundException;
import org.apache.archiva.repository.ManagedRepositoryContent; import org.apache.archiva.repository.ManagedRepositoryContent;
import org.apache.archiva.repository.layout.LayoutException; import org.apache.archiva.repository.layout.LayoutException;
import org.apache.commons.io.FileUtils; import org.apache.commons.io.FileUtils;
import org.apache.commons.lang.StringUtils;
import org.springframework.context.annotation.Scope; import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -102,6 +103,27 @@ public class ManagedDefaultRepositoryContent
} }
} }
public void deleteGroupId( String groupId )
throws ContentNotFoundException
{
String path = StringUtils.replaceChars( groupId, '.', '/' );
File directory = new File( getRepoRoot(), path );
if ( directory.exists() )
{
try
{
FileUtils.deleteDirectory( directory );
}
catch ( IOException e )
{
log.warn( "skip error deleting directory {}:", directory.getPath(), e );
}
}
}
public String getId() public String getId()
{ {
return repository.getId(); return repository.getId();

View File

@ -20,8 +20,6 @@ package org.apache.archiva.repository.content;
*/ */
import org.apache.archiva.admin.model.beans.ManagedRepository; import org.apache.archiva.admin.model.beans.ManagedRepository;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.archiva.common.utils.PathUtil; import org.apache.archiva.common.utils.PathUtil;
import org.apache.archiva.configuration.FileTypes; import org.apache.archiva.configuration.FileTypes;
import org.apache.archiva.model.ArchivaArtifact; import org.apache.archiva.model.ArchivaArtifact;
@ -31,6 +29,8 @@ import org.apache.archiva.model.VersionedReference;
import org.apache.archiva.repository.ContentNotFoundException; import org.apache.archiva.repository.ContentNotFoundException;
import org.apache.archiva.repository.ManagedRepositoryContent; import org.apache.archiva.repository.ManagedRepositoryContent;
import org.apache.archiva.repository.layout.LayoutException; import org.apache.archiva.repository.layout.LayoutException;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang.StringUtils;
import org.springframework.context.annotation.Scope; import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -43,11 +43,10 @@ import java.util.Set;
* ManagedLegacyRepositoryContent * ManagedLegacyRepositoryContent
* *
* @version $Id$ * @version $Id$
*
* @todo no need to be a component when filetypes, legacy path parser is not * @todo no need to be a component when filetypes, legacy path parser is not
*/ */
@Service("managedRepositoryContent#legacy") @Service( "managedRepositoryContent#legacy" )
@Scope("prototype") @Scope( "prototype" )
public class ManagedLegacyRepositoryContent public class ManagedLegacyRepositoryContent
extends AbstractLegacyRepositoryContent extends AbstractLegacyRepositoryContent
implements ManagedRepositoryContent implements ManagedRepositoryContent
@ -67,14 +66,14 @@ public class ManagedLegacyRepositoryContent
if ( !groupDir.exists() ) if ( !groupDir.exists() )
{ {
throw new ContentNotFoundException( "Unable to get versions using a non-existant groupId directory: " throw new ContentNotFoundException(
+ groupDir.getAbsolutePath() ); "Unable to get versions using a non-existant groupId directory: " + groupDir.getAbsolutePath() );
} }
if ( !groupDir.isDirectory() ) if ( !groupDir.isDirectory() )
{ {
throw new ContentNotFoundException( "Unable to get versions using a non-directory: " throw new ContentNotFoundException(
+ groupDir.getAbsolutePath() ); "Unable to get versions using a non-directory: " + groupDir.getAbsolutePath() );
} }
// First gather up the versions found as artifacts in the managed repository. // First gather up the versions found as artifacts in the managed repository.
@ -159,14 +158,14 @@ public class ManagedLegacyRepositoryContent
if ( !repoDir.exists() ) if ( !repoDir.exists() )
{ {
throw new ContentNotFoundException( "Unable to get related artifacts using a non-existant directory: " throw new ContentNotFoundException(
+ repoDir.getAbsolutePath() ); "Unable to get related artifacts using a non-existant directory: " + repoDir.getAbsolutePath() );
} }
if ( !repoDir.isDirectory() ) if ( !repoDir.isDirectory() )
{ {
throw new ContentNotFoundException( "Unable to get related artifacts using a non-directory: " throw new ContentNotFoundException(
+ repoDir.getAbsolutePath() ); "Unable to get related artifacts using a non-directory: " + repoDir.getAbsolutePath() );
} }
Set<ArtifactReference> foundArtifacts = new HashSet<ArtifactReference>(); Set<ArtifactReference> foundArtifacts = new HashSet<ArtifactReference>();
@ -210,14 +209,14 @@ public class ManagedLegacyRepositoryContent
if ( !groupDir.exists() ) if ( !groupDir.exists() )
{ {
throw new ContentNotFoundException( "Unable to get versions using a non-existant groupId directory: " throw new ContentNotFoundException(
+ groupDir.getAbsolutePath() ); "Unable to get versions using a non-existant groupId directory: " + groupDir.getAbsolutePath() );
} }
if ( !groupDir.isDirectory() ) if ( !groupDir.isDirectory() )
{ {
throw new ContentNotFoundException( "Unable to get versions using a non-directory: " throw new ContentNotFoundException(
+ groupDir.getAbsolutePath() ); "Unable to get versions using a non-directory: " + groupDir.getAbsolutePath() );
} }
Set<String> foundVersions = new HashSet<String>(); Set<String> foundVersions = new HashSet<String>();
@ -250,14 +249,14 @@ public class ManagedLegacyRepositoryContent
if ( !groupDir.exists() ) if ( !groupDir.exists() )
{ {
throw new ContentNotFoundException( "Unable to get versions using a non-existant groupId directory: " throw new ContentNotFoundException(
+ groupDir.getAbsolutePath() ); "Unable to get versions using a non-existant groupId directory: " + groupDir.getAbsolutePath() );
} }
if ( !groupDir.isDirectory() ) if ( !groupDir.isDirectory() )
{ {
throw new ContentNotFoundException( "Unable to get versions using a non-directory: " throw new ContentNotFoundException(
+ groupDir.getAbsolutePath() ); "Unable to get versions using a non-directory: " + groupDir.getAbsolutePath() );
} }
Set<String> foundVersions = new HashSet<String>(); Set<String> foundVersions = new HashSet<String>();
@ -465,4 +464,10 @@ public class ManagedLegacyRepositoryContent
{ {
// TODO implements for legacy ?? // TODO implements for legacy ??
} }
public void deleteGroupId( String groupId )
throws ContentNotFoundException
{
// TODO implements for legacy ??
}
} }

View File

@ -137,7 +137,7 @@ public interface RepositoriesService
* <b>permissions are checked in impl</b> * <b>permissions are checked in impl</b>
* @since 1.4-M3 * @since 1.4-M3
*/ */
Boolean deleteGroupId( @QueryParam( "groupId" ) String groupId ) Boolean deleteGroupId( @QueryParam( "groupId" ) String groupId, @QueryParam( "repositoryId" ) String repositoryId )
throws ArchivaRestServiceException; throws ArchivaRestServiceException;
} }

View File

@ -804,9 +804,36 @@ public class DefaultRepositoriesService
return Boolean.TRUE; return Boolean.TRUE;
} }
public Boolean deleteGroupId( String groupId ) public Boolean deleteGroupId( String groupId, String repositoryId )
throws ArchivaRestServiceException throws ArchivaRestServiceException
{ {
if ( StringUtils.isEmpty( repositoryId ) )
{
throw new ArchivaRestServiceException( "repositoryId cannot be null", 400, null );
}
if ( !isAuthorizedToDeleteArtifacts( repositoryId ) )
{
throw new ArchivaRestServiceException( "not authorized to delete artifacts", 403, null );
}
if ( StringUtils.isEmpty( groupId ) )
{
throw new ArchivaRestServiceException( "artifact.groupId cannot be null", 400, null );
}
try
{
ManagedRepositoryContent repository = repositoryFactory.getManagedRepositoryContent( repositoryId );
repository.deleteGroupId( groupId );
}
catch ( RepositoryException e )
{
log.error( e.getMessage(), e );
throw new ArchivaRestServiceException( "Repository exception: " + e.getMessage(), 500, e );
}
return true; return true;
} }

View File

@ -274,10 +274,28 @@ public class RepositoriesServiceTest
assertNotNull( browseResult ); assertNotNull( browseResult );
log.info( "browseResult: {}", browseResult );
Assertions.assertThat( browseResult.getBrowseResultEntries() ).isNotNull().isNotEmpty().contains( Assertions.assertThat( browseResult.getBrowseResultEntries() ).isNotNull().isNotEmpty().contains(
new BrowseResultEntry( "org.apache.karaf.features.org.apache.karaf.features.command", true ), new BrowseResultEntry( "org.apache.karaf.features.org.apache.karaf.features.command", true ),
new BrowseResultEntry( "org.apache.karaf.features.org.apache.karaf.features.core", true ) ); new BrowseResultEntry( "org.apache.karaf.features.org.apache.karaf.features.core", true ) );
File directory =
new File( "target/test-origin-repo/org/apache/karaf/features/org.apache.karaf.features.command" );
assertTrue( "directory not exists", directory.exists() );
RepositoriesService repositoriesService = getRepositoriesService( authorizationHeader );
repositoriesService.deleteGroupId( "org.apache.karaf.features", SOURCE_REPO_ID );
assertFalse( "directory not exists", directory.exists() );
browseResult = browseService.browseGroupId( "org.apache.karaf.features", SOURCE_REPO_ID );
assertNotNull( browseResult );
Assertions.assertThat( browseResult.getBrowseResultEntries() ).isNotNull().isEmpty();
log.info( "browseResult: {}", browseResult ); log.info( "browseResult: {}", browseResult );
} }
finally finally