]> source.dussan.org Git - archiva.git/commitdiff
implement service to delete groupId
authorOlivier Lamy <olamy@apache.org>
Tue, 5 Jun 2012 23:17:23 +0000 (23:17 +0000)
committerOlivier Lamy <olamy@apache.org>
Tue, 5 Jun 2012 23:17:23 +0000 (23:17 +0000)
git-svn-id: https://svn.apache.org/repos/asf/archiva/trunk@1346651 13f79535-47bb-0310-9956-ffa450edef68

archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/ManagedRepositoryContent.java
archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/content/ManagedDefaultRepositoryContent.java
archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/content/ManagedLegacyRepositoryContent.java
archiva-modules/archiva-web/archiva-rest/archiva-rest-api/src/main/java/org/apache/archiva/rest/api/services/RepositoriesService.java
archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultRepositoriesService.java
archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/test/java/org/apache/archiva/rest/services/RepositoriesServiceTest.java

index a23415ed9118db1b8883acfd674f12a3b6cc26b0..01c5fc06f22869b0a5494164996a92f70c320de9 100644 (file)
@@ -49,12 +49,21 @@ public interface ManagedRepositoryContent
 
     /**
      * delete a specified artifact from the repository
+     *
      * @param artifactReference
      * @throws ContentNotFoundException
      */
     void deleteArtifact( ArtifactReference artifactReference )
         throws ContentNotFoundException;
 
+    /**
+     * @since 1.4-M3
+     * @param groupId
+     * @throws ContentNotFoundException
+     */
+    void deleteGroupId( String groupId )
+        throws ContentNotFoundException;
+
     /**
      * <p>
      * Convenience method to get the repository id.
index 0c626436fe14b0ddac9165a2d0c227c555813ba2..36b32df06fe9aeb2075e8b699de8d4f8e26379a0 100644 (file)
@@ -31,6 +31,7 @@ import org.apache.archiva.repository.ContentNotFoundException;
 import org.apache.archiva.repository.ManagedRepositoryContent;
 import org.apache.archiva.repository.layout.LayoutException;
 import org.apache.commons.io.FileUtils;
+import org.apache.commons.lang.StringUtils;
 import org.springframework.context.annotation.Scope;
 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()
     {
         return repository.getId();
index 56690c7b693738b3e2449be466818ef87bd6be19..a03626a90d0b6e19eae61f13e774cae4d81ce2d9 100644 (file)
@@ -20,8 +20,6 @@ package org.apache.archiva.repository.content;
  */
 
 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.configuration.FileTypes;
 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.ManagedRepositoryContent;
 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.stereotype.Service;
 
@@ -40,14 +40,13 @@ import java.util.HashSet;
 import java.util.Set;
 
 /**
- * ManagedLegacyRepositoryContent 
+ * ManagedLegacyRepositoryContent
  *
  * @version $Id$
- * 
  * @todo no need to be a component when filetypes, legacy path parser is not
  */
-@Service("managedRepositoryContent#legacy")
-@Scope("prototype")
+@Service( "managedRepositoryContent#legacy" )
+@Scope( "prototype" )
 public class ManagedLegacyRepositoryContent
     extends AbstractLegacyRepositoryContent
     implements ManagedRepositoryContent
@@ -67,14 +66,14 @@ public class ManagedLegacyRepositoryContent
 
         if ( !groupDir.exists() )
         {
-            throw new ContentNotFoundException( "Unable to get versions using a non-existant groupId directory: "
-                + groupDir.getAbsolutePath() );
+            throw new ContentNotFoundException(
+                "Unable to get versions using a non-existant groupId directory: " + groupDir.getAbsolutePath() );
         }
 
         if ( !groupDir.isDirectory() )
         {
-            throw new ContentNotFoundException( "Unable to get versions using a non-directory: "
-                + groupDir.getAbsolutePath() );
+            throw new ContentNotFoundException(
+                "Unable to get versions using a non-directory: " + groupDir.getAbsolutePath() );
         }
 
         // First gather up the versions found as artifacts in the managed repository.
@@ -159,14 +158,14 @@ public class ManagedLegacyRepositoryContent
 
         if ( !repoDir.exists() )
         {
-            throw new ContentNotFoundException( "Unable to get related artifacts using a non-existant directory: "
-                + repoDir.getAbsolutePath() );
+            throw new ContentNotFoundException(
+                "Unable to get related artifacts using a non-existant directory: " + repoDir.getAbsolutePath() );
         }
 
         if ( !repoDir.isDirectory() )
         {
-            throw new ContentNotFoundException( "Unable to get related artifacts using a non-directory: "
-                + repoDir.getAbsolutePath() );
+            throw new ContentNotFoundException(
+                "Unable to get related artifacts using a non-directory: " + repoDir.getAbsolutePath() );
         }
 
         Set<ArtifactReference> foundArtifacts = new HashSet<ArtifactReference>();
@@ -210,14 +209,14 @@ public class ManagedLegacyRepositoryContent
 
         if ( !groupDir.exists() )
         {
-            throw new ContentNotFoundException( "Unable to get versions using a non-existant groupId directory: "
-                + groupDir.getAbsolutePath() );
+            throw new ContentNotFoundException(
+                "Unable to get versions using a non-existant groupId directory: " + groupDir.getAbsolutePath() );
         }
 
         if ( !groupDir.isDirectory() )
         {
-            throw new ContentNotFoundException( "Unable to get versions using a non-directory: "
-                + groupDir.getAbsolutePath() );
+            throw new ContentNotFoundException(
+                "Unable to get versions using a non-directory: " + groupDir.getAbsolutePath() );
         }
 
         Set<String> foundVersions = new HashSet<String>();
@@ -250,14 +249,14 @@ public class ManagedLegacyRepositoryContent
 
         if ( !groupDir.exists() )
         {
-            throw new ContentNotFoundException( "Unable to get versions using a non-existant groupId directory: "
-                + groupDir.getAbsolutePath() );
+            throw new ContentNotFoundException(
+                "Unable to get versions using a non-existant groupId directory: " + groupDir.getAbsolutePath() );
         }
 
         if ( !groupDir.isDirectory() )
         {
-            throw new ContentNotFoundException( "Unable to get versions using a non-directory: "
-                + groupDir.getAbsolutePath() );
+            throw new ContentNotFoundException(
+                "Unable to get versions using a non-directory: " + groupDir.getAbsolutePath() );
         }
 
         Set<String> foundVersions = new HashSet<String>();
@@ -322,7 +321,7 @@ public class ManagedLegacyRepositoryContent
 
     /**
      * Convert a path to an artifact reference.
-     * 
+     *
      * @param path the path to convert. (relative or full location path)
      * @throws LayoutException if the path cannot be converted to an artifact reference.
      */
@@ -337,7 +336,7 @@ public class ManagedLegacyRepositoryContent
 
         return super.toArtifactReference( path );
     }
-    
+
     public File toFile( ArchivaArtifact reference )
     {
         return new File( repository.getLocation(), toPath( reference ) );
@@ -454,7 +453,7 @@ public class ManagedLegacyRepositoryContent
             }
         }
     }
-    
+
     public void setFileTypes( FileTypes fileTypes )
     {
         this.filetypes = fileTypes;
@@ -465,4 +464,10 @@ public class ManagedLegacyRepositoryContent
     {
         // TODO implements for legacy ??
     }
+
+    public void deleteGroupId( String groupId )
+        throws ContentNotFoundException
+    {
+        // TODO implements for legacy ??
+    }
 }
index 06509af11c97dbb44c21871f211a2c78d0cbcb75..406322e3ac8df6816ec19ce6e49d279a21f6f336 100644 (file)
@@ -137,7 +137,7 @@ public interface RepositoriesService
      * <b>permissions are checked in impl</b>
      * @since 1.4-M3
      */
-    Boolean deleteGroupId( @QueryParam( "groupId" ) String groupId )
+    Boolean deleteGroupId( @QueryParam( "groupId" ) String groupId, @QueryParam( "repositoryId" ) String repositoryId )
         throws ArchivaRestServiceException;
 
 }
index d49f6efcaec6b172632bb878ba3df3208b423a8f..09b74a3cdf546aaad38403e44c6616e391fb3f3d 100644 (file)
@@ -804,9 +804,36 @@ public class DefaultRepositoriesService
         return Boolean.TRUE;
     }
 
-    public Boolean deleteGroupId( String groupId )
+    public Boolean deleteGroupId( String groupId, String repositoryId )
         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;
     }
 
index ad492a6c7c19f2d9dbae237cb3419a076460b636..fdcd8e1edbdce0bd0ea09e78c49f8d277885429b 100644 (file)
@@ -274,10 +274,28 @@ public class RepositoriesServiceTest
 
             assertNotNull( browseResult );
 
+            log.info( "browseResult: {}", browseResult );
+
             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.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 );
         }
         finally