mirror of https://github.com/apache/archiva.git
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:
parent
f31f365535
commit
710489fc72
|
@ -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.
|
||||||
|
|
|
@ -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();
|
||||||
|
|
|
@ -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 ??
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in New Issue