]> source.dussan.org Git - archiva.git/commitdiff
add REST method to really scan repositories
authorOlivier Lamy <olamy@apache.org>
Fri, 9 Mar 2012 23:44:11 +0000 (23:44 +0000)
committerOlivier Lamy <olamy@apache.org>
Fri, 9 Mar 2012 23:44:11 +0000 (23:44 +0000)
git-svn-id: https://svn.apache.org/repos/asf/archiva/trunk@1299102 13f79535-47bb-0310-9956-ffa450edef68

archiva-modules/archiva-base/archiva-repository-scanner/src/main/java/org/apache/archiva/repository/scanner/RepositoryScanStatistics.java
archiva-modules/archiva-base/archiva-repository-scanner/src/main/java/org/apache/archiva/repository/scanner/RepositoryScanner.java
archiva-modules/archiva-web/archiva-rest/archiva-rest-api/pom.xml
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/pom.xml
archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultRepositoriesService.java

index 5a836214f8844a0fc4f6ef9c59f50ba84a3e4679..e627f0f55edf94c4b4d6782ec62286f51dd1947f 100644 (file)
@@ -19,18 +19,21 @@ package org.apache.archiva.repository.scanner;
  * under the License.
  */
 
+import org.apache.archiva.admin.model.beans.ManagedRepository;
+import org.apache.commons.collections.CollectionUtils;
+
+import javax.xml.bind.annotation.XmlRootElement;
 import java.text.SimpleDateFormat;
+import java.util.Date;
 import java.util.List;
 import java.util.Map;
 
-import org.apache.archiva.admin.model.beans.ManagedRepository;
-import org.apache.commons.collections.CollectionUtils;
-
 /**
  * RepositoryScanStatistics - extension to the RepositoryContentStatistics model.
  *
  * @version $Id$
  */
+@XmlRootElement( name = "repositoryScanStatistics" )
 public class RepositoryScanStatistics
 {
     private transient List<String> knownConsumers;
@@ -38,7 +41,7 @@ public class RepositoryScanStatistics
     private transient List<String> invalidConsumers;
 
     private transient long startTimestamp;
-    
+
     private SimpleDateFormat df = new SimpleDateFormat();
 
     /**
@@ -49,7 +52,7 @@ public class RepositoryScanStatistics
     /**
      * Field whenGathered
      */
-    private java.util.Date whenGathered;
+    private Date whenGathered;
 
     /**
      * Field duration
index 135f96e17eb4014e9cf2b730b7b856f664c4621a..cf633ca424e29fbe742190235e95dd7888f78e3d 100644 (file)
@@ -22,6 +22,7 @@ package org.apache.archiva.repository.scanner;
 import org.apache.archiva.admin.model.beans.ManagedRepository;
 import org.apache.archiva.consumers.InvalidRepositoryContentConsumer;
 import org.apache.archiva.consumers.KnownRepositoryContentConsumer;
+import org.springframework.scheduling.annotation.Async;
 
 import java.util.List;
 import java.util.Set;
index b0478d5a8c0574a1bd21be0de3a08b1ce6752f3e..c2d6afd46ce98a8f5d71cdee44bed2900c721378 100644 (file)
       <artifactId>metadata-model</artifactId>
     </dependency>
 
+    <dependency>
+      <groupId>org.apache.archiva</groupId>
+      <artifactId>archiva-repository-scanner</artifactId>
+    </dependency>
+
     <dependency>
       <groupId>org.codehaus.redback</groupId>
       <artifactId>redback-authorization-api</artifactId>
index 6f3a3a7d6e688d60e03631d21fcdd63081c96135..c747d73f61da35b36d5c559db1dae6edddb63f7e 100644 (file)
@@ -19,6 +19,7 @@ package org.apache.archiva.rest.api.services;
  * under the License.
  */
 
+import org.apache.archiva.repository.scanner.RepositoryScanStatistics;
 import org.apache.archiva.rest.api.model.Artifact;
 import org.apache.archiva.rest.api.model.ArtifactTransferRequest;
 import org.apache.archiva.security.common.ArchivaRoleConstants;
@@ -45,11 +46,26 @@ public interface RepositoriesService
     @GET
     @Produces( { MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML, MediaType.TEXT_PLAIN } )
     @RedbackAuthorization( permissions = ArchivaRoleConstants.OPERATION_RUN_INDEXER )
+    /**
+     * index repository
+     */
     Boolean scanRepository( @QueryParam( "repositoryId" ) String repositoryId,
                             @QueryParam( "fullScan" ) boolean fullScan )
         throws ArchivaRestServiceException;
 
 
+    @Path( "scanRepositoryDirectories/{repositoryId}" )
+    @GET
+    @Produces( { MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML, MediaType.TEXT_PLAIN } )
+    @RedbackAuthorization( permissions = ArchivaRoleConstants.OPERATION_RUN_INDEXER )
+    /**
+     * scan directories
+     * @since 1.4-M3
+     */
+    RepositoryScanStatistics scanRepositoryDirectories( @PathParam( "repositoryId" ) String repositoryId )
+        throws ArchivaRestServiceException;
+
+
     @Path( "alreadyScanning/{repositoryId}" )
     @GET
     @Produces( { MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML, MediaType.TEXT_PLAIN } )
index 8ec24f8e8c84eb09119470a9d07b0178a4603fd2..3311f8c94a74f7eaaee7accb18888ad87c869731 100644 (file)
       <groupId>org.apache.archiva</groupId>
       <artifactId>archiva-repository-layer</artifactId>
     </dependency>
+    <dependency>
+      <groupId>org.apache.archiva</groupId>
+      <artifactId>archiva-repository-scanner</artifactId>
+    </dependency>
     <dependency>
       <groupId>org.codehaus.redback</groupId>
       <artifactId>redback-authorization-api</artifactId>
index 7c85aa08c23094f8f4d12e9d0d91a98f2a3ade73..936f57e695cde17d97e2d1e171a0cc6858b11153 100644 (file)
@@ -51,6 +51,9 @@ import org.apache.archiva.repository.metadata.MetadataTools;
 import org.apache.archiva.repository.metadata.RepositoryMetadataException;
 import org.apache.archiva.repository.metadata.RepositoryMetadataReader;
 import org.apache.archiva.repository.metadata.RepositoryMetadataWriter;
+import org.apache.archiva.repository.scanner.RepositoryScanStatistics;
+import org.apache.archiva.repository.scanner.RepositoryScanner;
+import org.apache.archiva.repository.scanner.RepositoryScannerException;
 import org.apache.archiva.rest.api.model.Artifact;
 import org.apache.archiva.rest.api.model.ArtifactTransferRequest;
 import org.apache.archiva.rest.api.services.ArchivaRestServiceException;
@@ -146,6 +149,9 @@ public class DefaultRepositoriesService
     @Inject
     protected List<RepositoryListener> listeners = new ArrayList<RepositoryListener>();
 
+    @Inject
+    private RepositoryScanner repoScanner;
+
     private ChecksumAlgorithm[] algorithms = new ChecksumAlgorithm[]{ ChecksumAlgorithm.SHA1, ChecksumAlgorithm.MD5 };
 
     public Boolean scanRepository( String repositoryId, boolean fullScan )
@@ -735,19 +741,19 @@ public class DefaultRepositoriesService
         }
         catch ( RepositoryException e )
         {
-            throw new ArchivaRestServiceException( "Repository exception: " + e.getMessage(), 400 );
+            throw new ArchivaRestServiceException( "Repository exception: " + e.getMessage(), 500 );
         }
         catch ( MetadataResolutionException e )
         {
-            throw new ArchivaRestServiceException( "Repository exception: " + e.getMessage(), 400 );
+            throw new ArchivaRestServiceException( "Repository exception: " + e.getMessage(), 500 );
         }
         catch ( MetadataRepositoryException e )
         {
-            throw new ArchivaRestServiceException( "Repository exception: " + e.getMessage(), 400 );
+            throw new ArchivaRestServiceException( "Repository exception: " + e.getMessage(), 500 );
         }
         catch ( RepositoryAdminException e )
         {
-            throw new ArchivaRestServiceException( "RepositoryAdmin exception: " + e.getMessage(), 400 );
+            throw new ArchivaRestServiceException( "RepositoryAdmin exception: " + e.getMessage(), 500 );
         }
         finally
 
@@ -757,6 +763,25 @@ public class DefaultRepositoriesService
         return Boolean.TRUE;
     }
 
+    public RepositoryScanStatistics scanRepositoryDirectories( String repositoryId )
+        throws ArchivaRestServiceException
+    {
+        long sinceWhen = RepositoryScanner.FRESH_SCAN;
+        try
+        {
+            return repoScanner.scan( getManagedRepositoryAdmin().getManagedRepository( repositoryId ), sinceWhen );
+        }
+        catch ( RepositoryScannerException e )
+        {
+            log.error( e.getMessage(), e );
+            throw new ArchivaRestServiceException( "RepositoryScannerException exception: " + e.getMessage(), 500 );
+        }
+        catch ( RepositoryAdminException e )
+        {
+            log.error( e.getMessage(), e );
+            throw new ArchivaRestServiceException( "RepositoryScannerException exception: " + e.getMessage(), 500 );
+        }
+    }
 
     /**
      * Update artifact level metadata. Creates one if metadata does not exist after artifact deletion.