]> source.dussan.org Git - archiva.git/commitdiff
add unit tests for paginate method
authorOlivier Lamy <olamy@apache.org>
Fri, 7 Oct 2011 10:40:25 +0000 (10:40 +0000)
committerOlivier Lamy <olamy@apache.org>
Fri, 7 Oct 2011 10:40:25 +0000 (10:40 +0000)
git-svn-id: https://svn.apache.org/repos/asf/archiva/trunk@1179991 13f79535-47bb-0310-9956-ffa450edef68

archiva-modules/archiva-base/archiva-indexer/src/main/java/org/apache/archiva/indexer/search/NexusRepositorySearch.java
archiva-modules/archiva-base/archiva-indexer/src/test/java/org/apache/archiva/indexer/search/NexusRepositorySearchPaginateTest.java [new file with mode: 0644]
archiva-modules/archiva-scheduler/archiva-scheduler-indexing/src/main/java/org/apache/archiva/scheduler/indexing/ArchivaIndexingTaskExecutor.java

index 965aa49f48879d38925236f5df9b5b56ac989e07..d2268546b1aa70ee7e90bf28f3a329d1933840df 100644 (file)
@@ -34,9 +34,6 @@ import org.apache.lucene.search.BooleanQuery;
 import org.apache.maven.index.ArtifactInfo;
 import org.apache.maven.index.FlatSearchRequest;
 import org.apache.maven.index.FlatSearchResponse;
-import org.apache.maven.index.GroupedSearchRequest;
-import org.apache.maven.index.Grouping;
-import org.apache.maven.index.IteratorSearchRequest;
 import org.apache.maven.index.MAVEN;
 import org.apache.maven.index.NexusIndexer;
 import org.apache.maven.index.OSGI;
@@ -65,7 +62,7 @@ import java.util.Set;
 public class NexusRepositorySearch
     implements RepositorySearch
 {
-    private Logger log = LoggerFactory.getLogger( getClass() );
+    private Logger log = LoggerFactory.getLogger(getClass());
 
     private NexusIndexer indexer;
 
@@ -75,12 +72,17 @@ public class NexusRepositorySearch
 
     private MavenIndexerUtils mavenIndexerUtils;
 
+    protected NexusRepositorySearch()
+    {
+        // for test purpose
+    }
+
     @Inject
-    public NexusRepositorySearch( PlexusSisuBridge plexusSisuBridge, ManagedRepositoryAdmin managedRepositoryAdmin,
-                                  MavenIndexerUtils mavenIndexerUtils, ProxyConnectorAdmin proxyConnectorAdmin )
+    public NexusRepositorySearch(PlexusSisuBridge plexusSisuBridge, ManagedRepositoryAdmin managedRepositoryAdmin,
+                                 MavenIndexerUtils mavenIndexerUtils, ProxyConnectorAdmin proxyConnectorAdmin)
         throws PlexusSisuBridgeException
     {
-        this.indexer = plexusSisuBridge.lookup( NexusIndexer.class );
+        this.indexer = plexusSisuBridge.lookup(NexusIndexer.class);
         this.managedRepositoryAdmin = managedRepositoryAdmin;
         this.mavenIndexerUtils = mavenIndexerUtils;
         this.proxyConnectorAdmin = proxyConnectorAdmin;
@@ -89,206 +91,200 @@ public class NexusRepositorySearch
     /**
      * @see RepositorySearch#search(String, List, String, SearchResultLimits, List)
      */
-    public SearchResults search( String principal, List<String> selectedRepos, String term, SearchResultLimits limits,
-                                 List<String> previousSearchTerms )
+    public SearchResults search(String principal, List<String> selectedRepos, String term, SearchResultLimits limits,
+                                List<String> previousSearchTerms)
         throws RepositorySearchException
     {
-        List<String> indexingContextIds = addIndexingContexts( selectedRepos );
+        List<String> indexingContextIds = addIndexingContexts(selectedRepos);
 
         // since upgrade to nexus 2.0.0, query has changed from g:[QUERIED TERM]* to g:*[QUERIED TERM]*
         //      resulting to more wildcard searches so we need to increase max clause count
-        BooleanQuery.setMaxClauseCount( Integer.MAX_VALUE );
+        BooleanQuery.setMaxClauseCount(Integer.MAX_VALUE);
         BooleanQuery q = new BooleanQuery();
 
         if ( previousSearchTerms == null || previousSearchTerms.isEmpty() )
         {
-            constructQuery( term, q );
+            constructQuery(term, q);
         }
         else
         {
             for ( String previousTerm : previousSearchTerms )
             {
                 BooleanQuery iQuery = new BooleanQuery();
-                constructQuery( previousTerm, iQuery );
+                constructQuery(previousTerm, iQuery);
 
-                q.add( iQuery, Occur.MUST );
+                q.add(iQuery, Occur.MUST);
             }
 
             BooleanQuery iQuery = new BooleanQuery();
-            constructQuery( term, iQuery );
-            q.add( iQuery, Occur.MUST );
+            constructQuery(term, iQuery);
+            q.add(iQuery, Occur.MUST);
         }
 
         // we retun only artifacts without classifier in quick search, olamy cannot find a way to say with this field empty
         // FIXME  cannot find a way currently to setup this in constructQuery !!!
-        return search( limits, q, indexingContextIds, NoClassifierArtifactInfoFiler.LIST, principal, selectedRepos );
+        return search(limits, q, indexingContextIds, NoClassifierArtifactInfoFiler.LIST, principal, selectedRepos);
 
     }
 
     /**
      * @see RepositorySearch#search(String, SearchFields, SearchResultLimits)
      */
-    public SearchResults search( String principal, SearchFields searchFields, SearchResultLimits limits )
+    public SearchResults search(String principal, SearchFields searchFields, SearchResultLimits limits)
         throws RepositorySearchException
     {
         if ( searchFields.getRepositories() == null )
         {
-            throw new RepositorySearchException( "Repositories cannot be null." );
+            throw new RepositorySearchException("Repositories cannot be null.");
         }
 
-        List<String> indexingContextIds = addIndexingContexts( searchFields.getRepositories() );
+        List<String> indexingContextIds = addIndexingContexts(searchFields.getRepositories());
 
         BooleanQuery q = new BooleanQuery();
-        if ( StringUtils.isNotBlank( searchFields.getGroupId() ) )
+        if ( StringUtils.isNotBlank(searchFields.getGroupId()) )
         {
-            q.add( indexer.constructQuery( MAVEN.GROUP_ID, new StringSearchExpression( searchFields.getGroupId() ) ),
-                   Occur.MUST );
+            q.add(indexer.constructQuery(MAVEN.GROUP_ID, new StringSearchExpression(searchFields.getGroupId())),
+                  Occur.MUST);
         }
 
-        if ( StringUtils.isNotBlank( searchFields.getArtifactId() ) )
+        if ( StringUtils.isNotBlank(searchFields.getArtifactId()) )
         {
-            q.add(
-                indexer.constructQuery( MAVEN.ARTIFACT_ID, new StringSearchExpression( searchFields.getArtifactId() ) ),
-                Occur.MUST );
+            q.add(indexer.constructQuery(MAVEN.ARTIFACT_ID, new StringSearchExpression(searchFields.getArtifactId())),
+                  Occur.MUST);
         }
 
-        if ( StringUtils.isNotBlank( searchFields.getVersion() ) )
+        if ( StringUtils.isNotBlank(searchFields.getVersion()) )
         {
-            q.add( indexer.constructQuery( MAVEN.VERSION, new StringSearchExpression( searchFields.getVersion() ) ),
-                   Occur.MUST );
+            q.add(indexer.constructQuery(MAVEN.VERSION, new StringSearchExpression(searchFields.getVersion())),
+                  Occur.MUST);
         }
 
-        if ( StringUtils.isNotBlank( searchFields.getPackaging() ) )
+        if ( StringUtils.isNotBlank(searchFields.getPackaging()) )
         {
-            q.add( indexer.constructQuery( MAVEN.PACKAGING, new StringSearchExpression( searchFields.getPackaging() ) ),
-                   Occur.MUST );
+            q.add(indexer.constructQuery(MAVEN.PACKAGING, new StringSearchExpression(searchFields.getPackaging())),
+                  Occur.MUST);
         }
 
-        if ( StringUtils.isNotBlank( searchFields.getClassName() ) )
+        if ( StringUtils.isNotBlank(searchFields.getClassName()) )
         {
-            q.add(
-                indexer.constructQuery( MAVEN.CLASSNAMES, new StringSearchExpression( searchFields.getClassName() ) ),
-                Occur.MUST );
+            q.add(indexer.constructQuery(MAVEN.CLASSNAMES, new StringSearchExpression(searchFields.getClassName())),
+                  Occur.MUST);
         }
 
-        if ( StringUtils.isNotBlank( searchFields.getBundleSymbolicName() ) )
+        if ( StringUtils.isNotBlank(searchFields.getBundleSymbolicName()) )
         {
-            q.add( indexer.constructQuery( OSGI.SYMBOLIC_NAME,
-                                           new StringSearchExpression( searchFields.getBundleSymbolicName() ) ),
-                   Occur.MUST );
+            q.add(indexer.constructQuery(OSGI.SYMBOLIC_NAME,
+                                         new StringSearchExpression(searchFields.getBundleSymbolicName())), Occur.MUST);
         }
 
-        if ( StringUtils.isNotBlank( searchFields.getBundleVersion() ) )
+        if ( StringUtils.isNotBlank(searchFields.getBundleVersion()) )
         {
-            q.add(
-                indexer.constructQuery( OSGI.VERSION, new StringSearchExpression( searchFields.getBundleVersion() ) ),
-                Occur.MUST );
+            q.add(indexer.constructQuery(OSGI.VERSION, new StringSearchExpression(searchFields.getBundleVersion())),
+                  Occur.MUST);
         }
 
-        if ( StringUtils.isNotBlank( searchFields.getBundleExportPackage() ) )
+        if ( StringUtils.isNotBlank(searchFields.getBundleExportPackage()) )
         {
-            q.add( indexer.constructQuery( OSGI.EXPORT_PACKAGE,
-                                           new StringSearchExpression( searchFields.getBundleExportPackage() ) ),
-                   Occur.MUST );
+            q.add(indexer.constructQuery(OSGI.EXPORT_PACKAGE,
+                                         new StringSearchExpression(searchFields.getBundleExportPackage())),
+                  Occur.MUST);
         }
 
-        if ( StringUtils.isNotBlank( searchFields.getBundleExportService() ) )
+        if ( StringUtils.isNotBlank(searchFields.getBundleExportService()) )
         {
-            q.add( indexer.constructQuery( OSGI.EXPORT_SERVICE,
-                                           new StringSearchExpression( searchFields.getBundleExportService() ) ),
-                   Occur.MUST );
+            q.add(indexer.constructQuery(OSGI.EXPORT_SERVICE,
+                                         new StringSearchExpression(searchFields.getBundleExportService())),
+                  Occur.MUST);
         }
 
-        if ( StringUtils.isNotBlank( searchFields.getBundleImportPackage() ) )
+        if ( StringUtils.isNotBlank(searchFields.getBundleImportPackage()) )
         {
-            q.add( indexer.constructQuery( OSGI.IMPORT_PACKAGE,
-                                           new StringSearchExpression( searchFields.getBundleImportPackage() ) ),
-                   Occur.MUST );
+            q.add(indexer.constructQuery(OSGI.IMPORT_PACKAGE,
+                                         new StringSearchExpression(searchFields.getBundleImportPackage())),
+                  Occur.MUST);
         }
 
-        if ( StringUtils.isNotBlank( searchFields.getBundleName() ) )
+        if ( StringUtils.isNotBlank(searchFields.getBundleName()) )
         {
-            q.add( indexer.constructQuery( OSGI.NAME, new StringSearchExpression( searchFields.getBundleName() ) ),
-                   Occur.MUST );
+            q.add(indexer.constructQuery(OSGI.NAME, new StringSearchExpression(searchFields.getBundleName())),
+                  Occur.MUST);
         }
 
-        if ( StringUtils.isNotBlank( searchFields.getClassifier() ) )
+        if ( StringUtils.isNotBlank(searchFields.getClassifier()) )
         {
-            q.add(
-                indexer.constructQuery( MAVEN.CLASSIFIER, new StringSearchExpression( searchFields.getClassifier() ) ),
-                Occur.MUST );
+            q.add(indexer.constructQuery(MAVEN.CLASSIFIER, new StringSearchExpression(searchFields.getClassifier())),
+                  Occur.MUST);
         }
 
         if ( q.getClauses() == null || q.getClauses().length <= 0 )
         {
-            throw new RepositorySearchException( "No search fields set." );
+            throw new RepositorySearchException("No search fields set.");
         }
 
-        return search( limits, q, indexingContextIds, Collections.<ArtifactInfoFiler>emptyList(), principal,
-                       searchFields.getRepositories() );
+        return search(limits, q, indexingContextIds, Collections.<ArtifactInfoFiler>emptyList(), principal,
+                      searchFields.getRepositories());
     }
 
-    private SearchResults search( SearchResultLimits limits, BooleanQuery q, List<String> indexingContextIds,
-                                  List<? extends ArtifactInfoFiler> filters, String principal,
-                                  List<String> selectedRepos )
+    private SearchResults search(SearchResultLimits limits, BooleanQuery q, List<String> indexingContextIds,
+                                 List<? extends ArtifactInfoFiler> filters, String principal,
+                                 List<String> selectedRepos)
         throws RepositorySearchException
     {
 
         try
         {
-            FlatSearchRequest request = new FlatSearchRequest( q );
-            request.setContexts( getIndexingContexts( indexingContextIds ) );
-
-            FlatSearchResponse response = indexer.searchFlat( request );
+            FlatSearchRequest request = new FlatSearchRequest(q);
+            request.setContexts(getIndexingContexts(indexingContextIds));
 
+            FlatSearchResponse response = indexer.searchFlat(request);
 
             if ( response == null || response.getTotalHits() == 0 )
             {
                 SearchResults results = new SearchResults();
-                results.setLimits( limits );
+                results.setLimits(limits);
                 return results;
             }
 
-            return convertToSearchResults( response, limits, filters, principal, selectedRepos );
+            return convertToSearchResults(response, limits, filters, principal, selectedRepos);
         }
         catch ( IOException e )
         {
-            throw new RepositorySearchException( e.getMessage(), e );
+            throw new RepositorySearchException(e.getMessage(), e);
         }
         catch ( RepositoryAdminException e )
         {
-            throw new RepositorySearchException( e.getMessage(), e );
+            throw new RepositorySearchException(e.getMessage(), e);
         }
 
     }
 
-    private List<IndexingContext> getIndexingContexts( List<String> ids )
+    private List<IndexingContext> getIndexingContexts(List<String> ids)
     {
-        List<IndexingContext> contexts = new ArrayList<IndexingContext>( ids.size() );
+        List<IndexingContext> contexts = new ArrayList<IndexingContext>(ids.size());
 
         for ( String id : ids )
         {
-            IndexingContext context = indexer.getIndexingContexts().get( id );
+            IndexingContext context = indexer.getIndexingContexts().get(id);
             if ( context != null )
             {
-                contexts.add( context );
+                contexts.add(context);
             }
             else
             {
-                log.warn( "context with id {} not exists", id );
+                log.warn("context with id {} not exists", id);
             }
         }
 
         return contexts;
     }
 
-    private void constructQuery( String term, BooleanQuery q )
+    private void constructQuery(String term, BooleanQuery q)
     {
-        q.add( indexer.constructQuery( MAVEN.GROUP_ID, new StringSearchExpression( term ) ), Occur.SHOULD );
-        q.add( indexer.constructQuery( MAVEN.ARTIFACT_ID, new StringSearchExpression( term ) ), Occur.SHOULD );
-        q.add( indexer.constructQuery( MAVEN.VERSION, new StringSearchExpression( term ) ), Occur.SHOULD );
-        q.add( indexer.constructQuery( MAVEN.PACKAGING, new StringSearchExpression( term ) ), Occur.SHOULD );
-        q.add( indexer.constructQuery( MAVEN.CLASSNAMES, new StringSearchExpression( term ) ), Occur.SHOULD );
+        q.add(indexer.constructQuery(MAVEN.GROUP_ID, new StringSearchExpression(term)), Occur.SHOULD);
+        q.add(indexer.constructQuery(MAVEN.ARTIFACT_ID, new StringSearchExpression(term)), Occur.SHOULD);
+        q.add(indexer.constructQuery(MAVEN.VERSION, new StringSearchExpression(term)), Occur.SHOULD);
+        q.add(indexer.constructQuery(MAVEN.PACKAGING, new StringSearchExpression(term)), Occur.SHOULD);
+        q.add(indexer.constructQuery(MAVEN.CLASSNAMES, new StringSearchExpression(term)), Occur.SHOULD);
 
         //Query query =
         //    new WildcardQuery( new Term( MAVEN.CLASSNAMES.getFieldName(), "*" ) );
@@ -302,88 +298,88 @@ public class NexusRepositorySearch
      * @param selectedRepos
      * @return indexing contextId used
      */
-    private List<String> addIndexingContexts( List<String> selectedRepos )
+    private List<String> addIndexingContexts(List<String> selectedRepos)
     {
         Set<String> indexingContextIds = new HashSet<String>();
         for ( String repo : selectedRepos )
         {
             try
             {
-                ManagedRepository repoConfig = managedRepositoryAdmin.getManagedRepository( repo );
+                ManagedRepository repoConfig = managedRepositoryAdmin.getManagedRepository(repo);
 
                 if ( repoConfig != null )
                 {
                     String indexDir = repoConfig.getIndexDirectory();
                     File indexDirectory = null;
-                    if ( indexDir != null && !"".equals( indexDir ) )
+                    if ( indexDir != null && !"".equals(indexDir) )
                     {
-                        indexDirectory = new File( repoConfig.getIndexDirectory() );
+                        indexDirectory = new File(repoConfig.getIndexDirectory());
                     }
                     else
                     {
-                        indexDirectory = new File( repoConfig.getLocation(), ".indexer" );
+                        indexDirectory = new File(repoConfig.getLocation(), ".indexer");
                     }
 
-                    IndexingContext context = indexer.getIndexingContexts().get( repoConfig.getId() );
+                    IndexingContext context = indexer.getIndexingContexts().get(repoConfig.getId());
                     if ( context != null )
                     {
                         // alreday here so no need to record it again
-                        log.debug( "index with id {} already exists skip adding it", repoConfig.getId() );
+                        log.debug("index with id {} already exists skip adding it", repoConfig.getId());
                         // set searchable flag
-                        context.setSearchable( repoConfig.isScanned() );
-                        indexingContextIds.add( context.getId() );
-                        indexingContextIds.addAll( getRemoteIndexingContextIds( repo ) );
+                        context.setSearchable(repoConfig.isScanned());
+                        indexingContextIds.add(context.getId());
+                        indexingContextIds.addAll(getRemoteIndexingContextIds(repo));
                         continue;
                     }
 
-                    context = indexer.addIndexingContext( repoConfig.getId(), repoConfig.getId(),
-                                                          new File( repoConfig.getLocation() ), indexDirectory, null,
-                                                          null, getAllIndexCreators() );
-                    context.setSearchable( repoConfig.isScanned() );
+                    context = indexer.addIndexingContext(repoConfig.getId(), repoConfig.getId(),
+                                                         new File(repoConfig.getLocation()), indexDirectory, null, null,
+                                                         getAllIndexCreators());
+                    context.setSearchable(repoConfig.isScanned());
                     if ( context.isSearchable() )
                     {
-                        indexingContextIds.addAll( getRemoteIndexingContextIds( repo ) );
-                        indexingContextIds.add( context.getId() );
+                        indexingContextIds.addAll(getRemoteIndexingContextIds(repo));
+                        indexingContextIds.add(context.getId());
                     }
                     else
                     {
-                        log.warn( "indexingContext with id {} not searchable", repoConfig.getId() );
+                        log.warn("indexingContext with id {} not searchable", repoConfig.getId());
                     }
 
                 }
                 else
                 {
-                    log.warn( "Repository '" + repo + "' not found in configuration." );
+                    log.warn("Repository '" + repo + "' not found in configuration.");
                 }
             }
             catch ( UnsupportedExistingLuceneIndexException e )
             {
-                log.warn( "Error accessing index of repository '" + repo + "' : " + e.getMessage() );
+                log.warn("Error accessing index of repository '" + repo + "' : " + e.getMessage());
                 continue;
             }
             catch ( IOException e )
             {
-                log.warn( "IO error occured while accessing index of repository '" + repo + "' : " + e.getMessage() );
+                log.warn("IO error occured while accessing index of repository '" + repo + "' : " + e.getMessage());
                 continue;
             }
             catch ( RepositoryAdminException e )
             {
-                log.warn( "RepositoryAdminException occured while accessing index of repository '" + repo + "' : "
-                              + e.getMessage() );
+                log.warn("RepositoryAdminException occured while accessing index of repository '" + repo + "' : "
+                             + e.getMessage());
                 continue;
             }
         }
 
-        return new ArrayList<String>( indexingContextIds );
+        return new ArrayList<String>(indexingContextIds);
     }
 
 
-    private Set<String> getRemoteIndexingContextIds( String managedRepoId )
+    private Set<String> getRemoteIndexingContextIds(String managedRepoId)
         throws RepositoryAdminException
     {
         Set<String> ids = new HashSet<String>();
 
-        List<ProxyConnector> proxyConnectors = proxyConnectorAdmin.getProxyConnectorAsMap().get( managedRepoId );
+        List<ProxyConnector> proxyConnectors = proxyConnectorAdmin.getProxyConnectorAsMap().get(managedRepoId);
 
         if ( proxyConnectors == null || proxyConnectors.isEmpty() )
         {
@@ -393,10 +389,10 @@ public class NexusRepositorySearch
         for ( ProxyConnector proxyConnector : proxyConnectors )
         {
             String remoteId = "remote-" + proxyConnector.getTargetRepoId();
-            IndexingContext context = indexer.getIndexingContexts().get( remoteId );
+            IndexingContext context = indexer.getIndexingContexts().get(remoteId);
             if ( context != null && context.isSearchable() )
             {
-                ids.add( remoteId );
+                ids.add(remoteId);
             }
         }
 
@@ -410,9 +406,9 @@ public class NexusRepositorySearch
     }
 
 
-    private SearchResults convertToSearchResults( FlatSearchResponse response, SearchResultLimits limits,
-                                                  List<? extends ArtifactInfoFiler> artifactInfoFilers,
-                                                  String principal, List<String> selectedRepos )
+    private SearchResults convertToSearchResults(FlatSearchResponse response, SearchResultLimits limits,
+                                                 List<? extends ArtifactInfoFiler> artifactInfoFilers, String principal,
+                                                 List<String> selectedRepos)
         throws RepositoryAdminException
     {
         SearchResults results = new SearchResults();
@@ -420,54 +416,54 @@ public class NexusRepositorySearch
 
         for ( ArtifactInfo artifactInfo : artifactInfos )
         {
-            String id = SearchUtil.getHitId( artifactInfo.groupId, artifactInfo.artifactId, artifactInfo.classifier,
-                                             artifactInfo.packaging );
+            String id = SearchUtil.getHitId(artifactInfo.groupId, artifactInfo.artifactId, artifactInfo.classifier,
+                                            artifactInfo.packaging);
             Map<String, SearchResultHit> hitsMap = results.getHitsMap();
 
-            if ( !applyArtifactInfoFilters( artifactInfo, artifactInfoFilers, hitsMap ) )
+            if ( !applyArtifactInfoFilters(artifactInfo, artifactInfoFilers, hitsMap) )
             {
                 continue;
             }
 
-            SearchResultHit hit = hitsMap.get( id );
+            SearchResultHit hit = hitsMap.get(id);
             if ( hit != null )
             {
-                if ( !hit.getVersions().contains( artifactInfo.version ) )
+                if ( !hit.getVersions().contains(artifactInfo.version) )
                 {
-                    hit.addVersion( artifactInfo.version );
+                    hit.addVersion(artifactInfo.version);
                 }
             }
             else
             {
                 hit = new SearchResultHit();
-                hit.setArtifactId( artifactInfo.artifactId );
-                hit.setGroupId( artifactInfo.groupId );
-                hit.setRepositoryId( artifactInfo.repository );
-                hit.addVersion( artifactInfo.version );
-                hit.setBundleExportPackage( artifactInfo.bundleExportPackage );
-                hit.setBundleExportService( artifactInfo.bundleExportService );
-                hit.setBundleSymbolicName( artifactInfo.bundleSymbolicName );
-                hit.setBundleVersion( artifactInfo.bundleVersion );
-                hit.setBundleDescription( artifactInfo.bundleDescription );
-                hit.setBundleDocUrl( artifactInfo.bundleDocUrl );
-                hit.setBundleRequireBundle( artifactInfo.bundleRequireBundle );
-                hit.setBundleImportPackage( artifactInfo.bundleImportPackage );
-                hit.setBundleLicense( artifactInfo.bundleLicense );
-                hit.setBundleName( artifactInfo.bundleName );
-                hit.setContext( artifactInfo.context );
-                hit.setGoals( artifactInfo.goals );
-                hit.setPrefix( artifactInfo.prefix );
-                hit.setPackaging( artifactInfo.packaging );
-                hit.setClassifier( artifactInfo.classifier );
-                hit.setUrl( getBaseUrl( artifactInfo, selectedRepos ) );
+                hit.setArtifactId(artifactInfo.artifactId);
+                hit.setGroupId(artifactInfo.groupId);
+                hit.setRepositoryId(artifactInfo.repository);
+                hit.addVersion(artifactInfo.version);
+                hit.setBundleExportPackage(artifactInfo.bundleExportPackage);
+                hit.setBundleExportService(artifactInfo.bundleExportService);
+                hit.setBundleSymbolicName(artifactInfo.bundleSymbolicName);
+                hit.setBundleVersion(artifactInfo.bundleVersion);
+                hit.setBundleDescription(artifactInfo.bundleDescription);
+                hit.setBundleDocUrl(artifactInfo.bundleDocUrl);
+                hit.setBundleRequireBundle(artifactInfo.bundleRequireBundle);
+                hit.setBundleImportPackage(artifactInfo.bundleImportPackage);
+                hit.setBundleLicense(artifactInfo.bundleLicense);
+                hit.setBundleName(artifactInfo.bundleName);
+                hit.setContext(artifactInfo.context);
+                hit.setGoals(artifactInfo.goals);
+                hit.setPrefix(artifactInfo.prefix);
+                hit.setPackaging(artifactInfo.packaging);
+                hit.setClassifier(artifactInfo.classifier);
+                hit.setUrl(getBaseUrl(artifactInfo, selectedRepos));
             }
 
-            results.addHit( id, hit );
+            results.addHit(id, hit);
         }
 
-        results.setTotalHits( response.getTotalHitsCount() );
-        results.setReturnedHitsCount( response.getReturnedHitsCount() );
-        results.setLimits( limits );
+        results.setTotalHits(response.getTotalHitsCount());
+        results.setReturnedHitsCount(response.getReturnedHitsCount());
+        results.setLimits(limits);
 
         if ( limits == null || limits.getSelectedPage() == SearchResultLimits.ALL_PAGES )
         {
@@ -475,7 +471,7 @@ public class NexusRepositorySearch
         }
         else
         {
-            return paginate( results );
+            return paginate(results);
         }
     }
 
@@ -485,43 +481,43 @@ public class NexusRepositorySearch
      * @param artifactInfo
      * @return
      */
-    protected String getBaseUrl( ArtifactInfo artifactInfo, List<String> selectedRepos )
+    protected String getBaseUrl(ArtifactInfo artifactInfo, List<String> selectedRepos)
         throws RepositoryAdminException
     {
         StringBuilder sb = new StringBuilder();
-        if ( StringUtils.startsWith( artifactInfo.context, "remote-" ) )
+        if ( StringUtils.startsWith(artifactInfo.context, "remote-") )
         {
             // it's a remote index result we search a managed which proxying this remote and on which
             // current user has read karma
             String managedRepoId =
-                getManagedRepoId( StringUtils.substringAfter( artifactInfo.context, "remote-" ), selectedRepos );
+                getManagedRepoId(StringUtils.substringAfter(artifactInfo.context, "remote-"), selectedRepos);
             if ( managedRepoId != null )
             {
-                sb.append( '/' ).append( managedRepoId );
+                sb.append('/').append(managedRepoId);
             }
         }
         else
         {
-            sb.append( '/' ).append( artifactInfo.context );
+            sb.append('/').append(artifactInfo.context);
         }
 
-        sb.append( '/' ).append( StringUtils.replaceChars( artifactInfo.groupId, '.', '/' ) );
-        sb.append( '/' ).append( artifactInfo.artifactId );
-        sb.append( '/' ).append( artifactInfo.version );
-        sb.append( '/' ).append( artifactInfo.artifactId );
-        sb.append( '-' ).append( artifactInfo.version );
-        if ( StringUtils.isNotBlank( artifactInfo.classifier ) )
+        sb.append('/').append(StringUtils.replaceChars(artifactInfo.groupId, '.', '/'));
+        sb.append('/').append(artifactInfo.artifactId);
+        sb.append('/').append(artifactInfo.version);
+        sb.append('/').append(artifactInfo.artifactId);
+        sb.append('-').append(artifactInfo.version);
+        if ( StringUtils.isNotBlank(artifactInfo.classifier) )
         {
-            sb.append( '-' ).append( artifactInfo.classifier );
+            sb.append('-').append(artifactInfo.classifier);
         }
         // maven-plugin packaging is a jar
-        if ( StringUtils.equals( "maven-plugin", artifactInfo.packaging ) )
+        if ( StringUtils.equals("maven-plugin", artifactInfo.packaging) )
         {
-            sb.append( "jar" );
+            sb.append("jar");
         }
         else
         {
-            sb.append( '.' ).append( artifactInfo.packaging );
+            sb.append('.').append(artifactInfo.packaging);
         }
 
         return sb.toString();
@@ -535,7 +531,7 @@ public class NexusRepositorySearch
      * @return
      * @throws RepositoryAdminException
      */
-    private String getManagedRepoId( String remoteRepo, List<String> selectedRepos )
+    private String getManagedRepoId(String remoteRepo, List<String> selectedRepos)
         throws RepositoryAdminException
     {
         Map<String, List<ProxyConnector>> proxyConnectorMap = proxyConnectorAdmin.getProxyConnectorAsMap();
@@ -547,11 +543,11 @@ public class NexusRepositorySearch
         {
             for ( Map.Entry<String, List<ProxyConnector>> entry : proxyConnectorMap.entrySet() )
             {
-                if ( selectedRepos.contains( entry.getKey() ) )
+                if ( selectedRepos.contains(entry.getKey()) )
                 {
                     for ( ProxyConnector proxyConnector : entry.getValue() )
                     {
-                        if ( StringUtils.equals( remoteRepo, proxyConnector.getTargetRepoId() ) )
+                        if ( StringUtils.equals(remoteRepo, proxyConnector.getTargetRepoId()) )
                         {
                             return proxyConnector.getSourceRepoId();
                         }
@@ -566,7 +562,7 @@ public class NexusRepositorySearch
 
             for ( ProxyConnector proxyConnector : entry.getValue() )
             {
-                if ( StringUtils.equals( remoteRepo, proxyConnector.getTargetRepoId() ) )
+                if ( StringUtils.equals(remoteRepo, proxyConnector.getTargetRepoId()) )
                 {
                     return proxyConnector.getSourceRepoId();
                 }
@@ -576,9 +572,9 @@ public class NexusRepositorySearch
         return null;
     }
 
-    private boolean applyArtifactInfoFilters( ArtifactInfo artifactInfo,
-                                              List<? extends ArtifactInfoFiler> artifactInfoFilers,
-                                              Map<String, SearchResultHit> currentResult )
+    private boolean applyArtifactInfoFilters(ArtifactInfo artifactInfo,
+                                             List<? extends ArtifactInfoFiler> artifactInfoFilers,
+                                             Map<String, SearchResultHit> currentResult)
     {
         if ( artifactInfoFilers == null || artifactInfoFilers.isEmpty() )
         {
@@ -587,7 +583,7 @@ public class NexusRepositorySearch
 
         for ( ArtifactInfoFiler filter : artifactInfoFilers )
         {
-            if ( !filter.addArtifactInResult( artifactInfo, currentResult ) )
+            if ( !filter.addArtifactInResult(artifactInfo, currentResult) )
             {
                 return false;
             }
@@ -595,7 +591,7 @@ public class NexusRepositorySearch
         return true;
     }
 
-    protected SearchResults paginate( SearchResults results )
+    protected SearchResults paginate(SearchResults results)
     {
         SearchResultLimits limits = results.getLimits();
         SearchResults paginated = new SearchResults();
@@ -620,12 +616,12 @@ public class NexusRepositorySearch
                     break;
                 }
 
-                SearchResultHit hit = results.getHits().get( ( offset + i ) );
+                SearchResultHit hit = results.getHits().get(( offset + i ));
                 if ( hit != null )
                 {
-                    String id = SearchUtil.getHitId( hit.getGroupId(), hit.getArtifactId(), hit.getClassifier(),
-                                                     hit.getPackaging() );
-                    paginated.addHit( id, hit );
+                    String id = SearchUtil.getHitId(hit.getGroupId(), hit.getArtifactId(), hit.getClassifier(),
+                                                    hit.getPackaging());
+                    paginated.addHit(id, hit);
                 }
                 else
                 {
@@ -633,9 +629,9 @@ public class NexusRepositorySearch
                 }
             }
         }
-        paginated.setTotalHits( results.getTotalHits() );
-        paginated.setReturnedHitsCount( paginated.getHits().size() );
-        paginated.setLimits( limits );
+        paginated.setTotalHits(results.getTotalHits());
+        paginated.setReturnedHitsCount(paginated.getHits().size());
+        paginated.setLimits(limits);
 
         return paginated;
     }
diff --git a/archiva-modules/archiva-base/archiva-indexer/src/test/java/org/apache/archiva/indexer/search/NexusRepositorySearchPaginateTest.java b/archiva-modules/archiva-base/archiva-indexer/src/test/java/org/apache/archiva/indexer/search/NexusRepositorySearchPaginateTest.java
new file mode 100644 (file)
index 0000000..b9fd071
--- /dev/null
@@ -0,0 +1,105 @@
+package org.apache.archiva.indexer.search;
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import junit.framework.TestCase;
+import org.apache.archiva.indexer.util.SearchUtil;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.JUnit4;
+
+import java.util.Arrays;
+
+/**
+ * @author Olivier Lamy
+ */
+@RunWith( JUnit4.class )
+public class NexusRepositorySearchPaginateTest
+    extends TestCase
+{
+    @Test
+    public void nonPaginatedResult()
+        throws Exception
+    {
+        NexusRepositorySearch search = new NexusRepositorySearch();
+
+        SearchResults searchResults = build(10, new SearchResultLimits(0));
+
+        searchResults = search.paginate(searchResults);
+
+        assertEquals(10, searchResults.getReturnedHitsCount());
+
+    }
+
+    @Test
+    public void nonPaginatedHugeResult()
+        throws Exception
+    {
+        NexusRepositorySearch search = new NexusRepositorySearch();
+
+        SearchResults origSearchResults = build(63, new SearchResultLimits(0));
+
+        SearchResults searchResults = search.paginate(origSearchResults);
+
+        assertEquals(30, searchResults.getReturnedHitsCount());
+
+        origSearchResults = build(63, new SearchResultLimits(1));
+
+        searchResults = search.paginate(origSearchResults);
+
+        assertEquals(30, searchResults.getReturnedHitsCount());
+
+    }
+
+    @Test
+    public void paginatedResult()
+        throws Exception
+    {
+        NexusRepositorySearch search = new NexusRepositorySearch();
+
+        SearchResults searchResults = build(32, new SearchResultLimits(1));
+
+        searchResults = search.paginate(searchResults);
+
+        assertEquals(2, searchResults.getReturnedHitsCount());
+
+    }
+
+
+    SearchResults build(int number, SearchResultLimits limits)
+    {
+        SearchResults searchResults = new SearchResults();
+        searchResults.setLimits(limits);
+        for ( int i = 0; i < number; i++ )
+        {
+            SearchResultHit hit = new SearchResultHit();
+            hit.setGroupId("commons-foo");
+            hit.setArtifactId("commons-bar-" + i);
+            hit.setPackaging("jar");
+            hit.setVersions(Arrays.asList("1.0"));
+            String id =
+                SearchUtil.getHitId(hit.getGroupId(), hit.getArtifactId(), hit.getClassifier(), hit.getPackaging());
+            searchResults.addHit(id, hit);
+        }
+
+        searchResults.setTotalHits(number);
+        return searchResults;
+
+    }
+}
index 02302d7d00190c65020baa283cbb2283c9cdda09..15fc25951338e298fbf51c46e1208806c8bf0cd7 100644 (file)
@@ -88,7 +88,7 @@ public class ArchivaIndexingTaskExecutor
     {
         log.info( "Initialized {}", this.getClass().getName() );
 
-        artifactContextProducer = new DefaultArtifactContextProducer();
+        artifactContextProducer = plexusSisuBridge.lookup( ArtifactContextProducer.class );
 
         indexPacker = plexusSisuBridge.lookup( IndexPacker.class, "default" );