Author: olamy
Date: Tue Sep 13 17:30:35 2011
New Revision: 1170258

URL: http://svn.apache.org/viewvc?rev=1170258&view=rev
Log:
[MRM-1490] Expose Archiva services trough REST : search service add a method to 
scan repo now useful for tests

Modified:
    
archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-api/src/main/java/org/apache/archiva/rest/api/services/RepositoriesService.java
    
archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/pom.xml
    
archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultRepositoriesService.java
    
archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/test/java/org/apache/archiva/rest/services/SearchServiceTest.java

Modified: 
archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-api/src/main/java/org/apache/archiva/rest/api/services/RepositoriesService.java
URL: 
http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-api/src/main/java/org/apache/archiva/rest/api/services/RepositoriesService.java?rev=1170258&r1=1170257&r2=1170258&view=diff
==============================================================================
--- 
archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-api/src/main/java/org/apache/archiva/rest/api/services/RepositoriesService.java
 (original)
+++ 
archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-api/src/main/java/org/apache/archiva/rest/api/services/RepositoriesService.java
 Tue Sep 13 17:30:35 2011
@@ -42,19 +42,30 @@ public interface RepositoriesService
     @Produces( { MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML, 
MediaType.TEXT_PLAIN } )
     @RedbackAuthorization( permission = 
ArchivaRoleConstants.OPERATION_RUN_INDEXER )
     Boolean scanRepository( @QueryParam( "repositoryId" ) String repositoryId,
-                            @QueryParam( "fullScan" ) boolean fullScan );
+                            @QueryParam( "fullScan" ) boolean fullScan )
+        throws ArchivaRestServiceException;
 
 
     @Path( "alreadyScanning/{repositoryId}" )
     @GET
     @Produces( { MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML, 
MediaType.TEXT_PLAIN } )
     @RedbackAuthorization( permission = 
ArchivaRoleConstants.OPERATION_RUN_INDEXER )
-    Boolean alreadyScanning( @PathParam( "repositoryId" ) String repositoryId 
);
+    Boolean alreadyScanning( @PathParam( "repositoryId" ) String repositoryId )
+        throws ArchivaRestServiceException;
 
     @Path( "removeScanningTaskFromQueue/{repositoryId}" )
     @GET
     @Produces( { MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML, 
MediaType.TEXT_PLAIN } )
     @RedbackAuthorization( permission = 
ArchivaRoleConstants.OPERATION_RUN_INDEXER )
-    Boolean removeScanningTaskFromQueue( @PathParam( "repositoryId" ) String 
repositoryId );
+    Boolean removeScanningTaskFromQueue( @PathParam( "repositoryId" ) String 
repositoryId )
+        throws ArchivaRestServiceException;
+
+    @Path( "scanRepositoryNow" )
+    @GET
+    @Produces( { MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML, 
MediaType.TEXT_PLAIN } )
+    @RedbackAuthorization( permission = 
ArchivaRoleConstants.OPERATION_RUN_INDEXER )
+    Boolean scanRepositoryNow( @QueryParam( "repositoryId" ) String 
repositoryId,
+                               @QueryParam( "fullScan" ) boolean fullScan )
+        throws ArchivaRestServiceException;
 
 }

Modified: 
archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/pom.xml
URL: 
http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/pom.xml?rev=1170258&r1=1170257&r2=1170258&view=diff
==============================================================================
--- 
archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/pom.xml
 (original)
+++ 
archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/pom.xml
 Tue Sep 13 17:30:35 2011
@@ -48,6 +48,10 @@
     </dependency>
     <dependency>
       <groupId>org.apache.archiva</groupId>
+      <artifactId>archiva-scheduler-indexing</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.archiva</groupId>
       <artifactId>audit</artifactId>
     </dependency>
     <dependency>

Modified: 
archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultRepositoriesService.java
URL: 
http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultRepositoriesService.java?rev=1170258&r1=1170257&r2=1170258&view=diff
==============================================================================
--- 
archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultRepositoriesService.java
 (original)
+++ 
archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultRepositoriesService.java
 Tue Sep 13 17:30:35 2011
@@ -19,10 +19,19 @@ package org.apache.archiva.rest.services
  * under the License.
  */
 
+import org.apache.archiva.admin.model.managed.ManagedRepository;
+import org.apache.archiva.admin.model.managed.ManagedRepositoryAdmin;
+import org.apache.archiva.common.plexusbridge.MavenIndexerUtils;
+import org.apache.archiva.common.plexusbridge.PlexusSisuBridge;
+import org.apache.archiva.rest.api.services.ArchivaRestServiceException;
 import org.apache.archiva.rest.api.services.RepositoriesService;
+import org.apache.archiva.scheduler.indexing.ArchivaIndexingTaskExecutor;
+import org.apache.archiva.scheduler.indexing.ArtifactIndexingTask;
 import org.apache.archiva.scheduler.repository.RepositoryArchivaTaskScheduler;
 import org.apache.archiva.scheduler.repository.RepositoryTask;
-import org.codehaus.plexus.redback.role.RoleManager;
+import org.apache.maven.index.NexusIndexer;
+import org.apache.maven.index.context.IndexCreator;
+import org.apache.maven.index.context.IndexingContext;
 import org.codehaus.plexus.taskqueue.TaskQueueException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -31,6 +40,7 @@ import org.springframework.stereotype.Se
 import javax.inject.Inject;
 import javax.inject.Named;
 import javax.ws.rs.PathParam;
+import java.util.ArrayList;
 
 /**
  * @author Olivier Lamy
@@ -44,12 +54,21 @@ public class DefaultRepositoriesService
     private Logger log = LoggerFactory.getLogger( getClass() );
 
     @Inject
-    protected RoleManager roleManager;
-
-    @Inject
     @Named( value = "archivaTaskScheduler#repository" )
     private RepositoryArchivaTaskScheduler repositoryTaskScheduler;
 
+    @Inject
+    @Named( value = "taskExecutor#indexing" )
+    private ArchivaIndexingTaskExecutor archivaIndexingTaskExecutor;
+
+    @Inject
+    private ManagedRepositoryAdmin managedRepositoryAdmin;
+
+    @Inject
+    private PlexusSisuBridge plexusSisuBridge;
+
+    @Inject
+    private MavenIndexerUtils mavenIndexerUtils;
 
     // FIXME olamy move this to repository admin component !
     public Boolean scanRepository( String repositoryId, boolean fullScan )
@@ -92,6 +111,32 @@ public class DefaultRepositoriesService
             return false;
         }
     }
+
+    public Boolean scanRepositoryNow( String repositoryId, boolean fullScan )
+        throws ArchivaRestServiceException
+    {
+
+        try
+        {
+            ManagedRepository repository = 
managedRepositoryAdmin.getManagedRepository( repositoryId );
+
+            IndexingContext context =
+                ArtifactIndexingTask.createContext( repository, 
plexusSisuBridge.lookup( NexusIndexer.class ),
+                                                    new 
ArrayList<IndexCreator>(
+                                                        
mavenIndexerUtils.getAllIndexCreators() ) );
+            ArtifactIndexingTask task =
+                new ArtifactIndexingTask( repository, null, 
ArtifactIndexingTask.Action.FINISH, context );
+            task.setExecuteOnEntireRepo( true );
+            task.setOnlyUpdate( false );
+
+            archivaIndexingTaskExecutor.executeTask( task );
+            return Boolean.TRUE;
+        }
+        catch ( Exception e )
+        {
+            throw new ArchivaRestServiceException( e.getMessage() );
+        }
+    }
 }
 
 

Modified: 
archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/test/java/org/apache/archiva/rest/services/SearchServiceTest.java
URL: 
http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/test/java/org/apache/archiva/rest/services/SearchServiceTest.java?rev=1170258&r1=1170257&r2=1170258&view=diff
==============================================================================
--- 
archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/test/java/org/apache/archiva/rest/services/SearchServiceTest.java
 (original)
+++ 
archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/test/java/org/apache/archiva/rest/services/SearchServiceTest.java
 Tue Sep 13 17:30:35 2011
@@ -39,12 +39,6 @@ public class SearchServiceTest
         throws Exception
     {
 
-        // olamy temporary disabled due to huge refactoring
-        if (true)
-        {
-            return;
-        }
-
         String testRepoId = "test-repo";
         // force guest user creation if not exists
         if ( getUserService( authorizationHeader ).getGuestUser() == null )
@@ -52,6 +46,22 @@ public class SearchServiceTest
             assertNotNull( getUserService( authorizationHeader 
).createGuestUser() );
         }
 
+        createAndIndexRepo( testRepoId );
+
+        SearchService searchService = getSearchService( authorizationHeader );
+
+        List<Artifact> artifacts = searchService.quickSearch( 
"commons-logging" );
+
+        assertNotNull( artifacts );
+        assertTrue( " empty results for commons-logging search", 
artifacts.size() > 0 );
+        log.info( "artifacts for commons-logginf search {}", artifacts );
+
+        deleteTestRepo( testRepoId );
+    }
+
+    private void createAndIndexRepo( String testRepoId )
+        throws Exception
+    {
         File targetRepo = new File( System.getProperty( "targetDir", 
"./target" ), "test-repo" );
 
         if ( targetRepo.exists() )
@@ -67,28 +77,14 @@ public class SearchServiceTest
         managedRepository.setId( testRepoId );
         managedRepository.setName( "test repo" );
         managedRepository.setCronExpression( "* * * * * ?" );
+        managedRepository.setScanned( false );
 
         managedRepository.setLocation( targetRepo.getPath() );
 
         ManagedRepositoriesService service = getManagedRepositoriesService( 
authorizationHeader );
         service.addManagedRepository( managedRepository );
 
-        getRepositoriesService( authorizationHeader ).scanRepository( 
testRepoId, true );
-
-        while ( getRepositoriesService( authorizationHeader ).alreadyScanning( 
testRepoId ) )
-        {
-            Thread.sleep( 1000 );
-        }
-
-        SearchService searchService = getSearchService( authorizationHeader );
-
-        List<Artifact> artifacts = searchService.quickSearch( 
"commons-logging" );
-
-        assertNotNull( artifacts );
-        assertTrue( " empty results for commons-logging search", 
artifacts.size() > 0 );
-        log.info( "artifacts for commons-logginf search {}", artifacts );
-
-        deleteTestRepo( testRepoId );
+        getRepositoriesService( authorizationHeader ).scanRepositoryNow( 
testRepoId, true );
     }
 
     private void deleteTestRepo( String id )


Reply via email to