You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@archiva.apache.org by oc...@apache.org on 2009/02/03 04:39:07 UTC

svn commit: r740206 - in /archiva/branches/archiva-nexus-indexer/archiva-modules/archiva-base/archiva-indexer/src: main/java/org/apache/archiva/indexer/search/ test/java/org/apache/archiva/indexer/search/

Author: oching
Date: Tue Feb  3 03:39:06 2009
New Revision: 740206

URL: http://svn.apache.org/viewvc?rev=740206&view=rev
Log:
[MRM-749]
o implement advanced search for nexus search impl
o added test cases

Modified:
    archiva/branches/archiva-nexus-indexer/archiva-modules/archiva-base/archiva-indexer/src/main/java/org/apache/archiva/indexer/search/NexusRepositorySearch.java
    archiva/branches/archiva-nexus-indexer/archiva-modules/archiva-base/archiva-indexer/src/main/java/org/apache/archiva/indexer/search/SearchFields.java
    archiva/branches/archiva-nexus-indexer/archiva-modules/archiva-base/archiva-indexer/src/test/java/org/apache/archiva/indexer/search/NexusRepositorySearchTest.java

Modified: archiva/branches/archiva-nexus-indexer/archiva-modules/archiva-base/archiva-indexer/src/main/java/org/apache/archiva/indexer/search/NexusRepositorySearch.java
URL: http://svn.apache.org/viewvc/archiva/branches/archiva-nexus-indexer/archiva-modules/archiva-base/archiva-indexer/src/main/java/org/apache/archiva/indexer/search/NexusRepositorySearch.java?rev=740206&r1=740205&r2=740206&view=diff
==============================================================================
--- archiva/branches/archiva-nexus-indexer/archiva-modules/archiva-base/archiva-indexer/src/main/java/org/apache/archiva/indexer/search/NexusRepositorySearch.java (original)
+++ archiva/branches/archiva-nexus-indexer/archiva-modules/archiva-base/archiva-indexer/src/main/java/org/apache/archiva/indexer/search/NexusRepositorySearch.java Tue Feb  3 03:39:06 2009
@@ -70,13 +70,7 @@
         throws RepositorySearchException
     {   
         addIndexingContexts( selectedRepos );
-        
-        // TODO: 
-        // 1. construct query for:
-        //    - regular search
-        //    - searching within search results
-        // 3. multiple repositories
-        
+                
         BooleanQuery q = new BooleanQuery();
         if( previousSearchTerms == null || previousSearchTerms.isEmpty() )
         {            
@@ -97,6 +91,59 @@
             q.add( iQuery, Occur.MUST );
         }        
                     
+        return search( limits, q );
+    }
+    
+    /**
+     * @see RepositorySearch#search(String, SearchFields, SearchResultLimits)
+     */
+    public SearchResults search( String principal, SearchFields searchFields, SearchResultLimits limits )
+        throws RepositorySearchException
+    {
+        if( searchFields.getRepositories() == null )
+        {
+            throw new RepositorySearchException( "Repositories cannot be null." );
+        }
+        
+        addIndexingContexts( searchFields.getRepositories() );
+        
+        BooleanQuery q = new BooleanQuery();
+        if( searchFields.getGroupId() != null && !"".equals( searchFields.getGroupId() ) )
+        {   
+            q.add( indexer.constructQuery( ArtifactInfo.GROUP_ID, searchFields.getGroupId() ), Occur.MUST );
+        }
+        
+        if( searchFields.getArtifactId() != null && !"".equals( searchFields.getArtifactId() ) )
+        {
+            q.add( indexer.constructQuery( ArtifactInfo.ARTIFACT_ID, searchFields.getArtifactId() ), Occur.MUST );
+        }
+        
+        if( searchFields.getVersion() != null && !"".equals( searchFields.getVersion() ) )
+        {
+            q.add( indexer.constructQuery( ArtifactInfo.VERSION, searchFields.getVersion() ), Occur.MUST );
+        }
+        
+        if( searchFields.getPackaging() != null && !"".equals( searchFields.getPackaging() ) )
+        {
+            q.add( indexer.constructQuery( ArtifactInfo.PACKAGING, searchFields.getPackaging() ), Occur.MUST );
+        }
+        
+        if( searchFields.getClassName() != null && !"".equals( searchFields.getClassName() ) )
+        {
+            q.add( indexer.constructQuery( ArtifactInfo.NAMES, searchFields.getClassName() ), Occur.MUST );
+        }
+        
+        if( q.getClauses() == null || q.getClauses().length <= 0 )
+        {
+            throw new RepositorySearchException( "No search fields set." );
+        }
+        
+        return search( limits, q );        
+    }
+
+    private SearchResults search( SearchResultLimits limits, BooleanQuery q )
+        throws RepositorySearchException
+    {
         try
         {
             FlatSearchRequest request = new FlatSearchRequest( q );
@@ -146,16 +193,7 @@
         q.add( indexer.constructQuery( ArtifactInfo.NAMES, term ), Occur.SHOULD );        
     }
        
-    /**
-     * @see RepositorySearch#search(String, SearchFields, SearchResultLimits)
-     */
-    public SearchResults search( String principal, SearchFields searchFields, SearchResultLimits limits )
-        throws RepositorySearchException
-    {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
+    
     private void addIndexingContexts( List<String> selectedRepos )
     {
         for( String repo : selectedRepos )

Modified: archiva/branches/archiva-nexus-indexer/archiva-modules/archiva-base/archiva-indexer/src/main/java/org/apache/archiva/indexer/search/SearchFields.java
URL: http://svn.apache.org/viewvc/archiva/branches/archiva-nexus-indexer/archiva-modules/archiva-base/archiva-indexer/src/main/java/org/apache/archiva/indexer/search/SearchFields.java?rev=740206&r1=740205&r2=740206&view=diff
==============================================================================
--- archiva/branches/archiva-nexus-indexer/archiva-modules/archiva-base/archiva-indexer/src/main/java/org/apache/archiva/indexer/search/SearchFields.java (original)
+++ archiva/branches/archiva-nexus-indexer/archiva-modules/archiva-base/archiva-indexer/src/main/java/org/apache/archiva/indexer/search/SearchFields.java Tue Feb  3 03:39:06 2009
@@ -1,5 +1,8 @@
 package org.apache.archiva.indexer.search;
 
+import java.util.ArrayList;
+import java.util.List;
+
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
@@ -21,20 +24,36 @@
 
 public class SearchFields
 {
+    /**
+     * groupId
+     */
     private String groupId;
 
+    /**
+     * artifactId
+     */
     private String artifactId;
 
+    /**
+     * version
+     */
     private String version;
 
+    /**
+     * packaging (jar, war, pom, etc.)
+     */
     private String packaging;
 
+    /**
+     * class name or package name
+     */
     private String className;
-
-    private String packageName;
-
-    private String repositoryId;
-
+    
+    /**
+     * repositories
+     */
+    private List<String> repositories = new ArrayList<String>();
+    
     public String getGroupId()
     {
         return groupId;
@@ -85,23 +104,13 @@
         this.className = className;
     }
 
-    public String getPackageName()
-    {
-        return packageName;
-    }
-
-    public void setPackageName( String packageName )
-    {
-        this.packageName = packageName;
-    }
-
-    public String getRepositoryId()
+    public List<String> getRepositories()
     {
-        return repositoryId;
+        return repositories;
     }
 
-    public void setRepositoryId( String repositoryId )
+    public void setRepositories( List<String> repositories )
     {
-        this.repositoryId = repositoryId;
+        this.repositories = repositories;
     }
 }

Modified: archiva/branches/archiva-nexus-indexer/archiva-modules/archiva-base/archiva-indexer/src/test/java/org/apache/archiva/indexer/search/NexusRepositorySearchTest.java
URL: http://svn.apache.org/viewvc/archiva/branches/archiva-nexus-indexer/archiva-modules/archiva-base/archiva-indexer/src/test/java/org/apache/archiva/indexer/search/NexusRepositorySearchTest.java?rev=740206&r1=740205&r2=740206&view=diff
==============================================================================
--- archiva/branches/archiva-nexus-indexer/archiva-modules/archiva-base/archiva-indexer/src/test/java/org/apache/archiva/indexer/search/NexusRepositorySearchTest.java (original)
+++ archiva/branches/archiva-nexus-indexer/archiva-modules/archiva-base/archiva-indexer/src/test/java/org/apache/archiva/indexer/search/NexusRepositorySearchTest.java Tue Feb  3 03:39:06 2009
@@ -330,7 +330,97 @@
     public void testAdvancedSearch()
         throws Exception
     {
+        List<File> files = new ArrayList<File>();
+        files.add( new File( getBasedir(), "/target/test-classes/" + TEST_REPO_2 +
+            "/org/apache/archiva/archiva-search/1.0/archiva-search-1.0.jar" ) );
+        files.add( new File( getBasedir(), "/target/test-classes/" + TEST_REPO_2 +
+            "/org/apache/archiva/archiva-search/1.1/archiva-search-1.1.jar" ) );
+        createIndex( TEST_REPO_2, files );
+
+        List<String> selectedRepos = new ArrayList<String>();
+        selectedRepos.add( TEST_REPO_1 );
+        selectedRepos.add( TEST_REPO_2 );
+
+        config.addManagedRepository( createRepositoryConfig( TEST_REPO_2 ) );
+        
+        SearchFields searchFields = new SearchFields();
+        searchFields.setGroupId( "org.apache.archiva" );
+        searchFields.setVersion( "1.0" );
+        searchFields.setRepositories( selectedRepos );        
+        
+        archivaConfigControl.expectAndReturn( archivaConfig.getConfiguration(), config, 2 );
+
+        archivaConfigControl.replay();
+
+        SearchResults results = search.search( "user", searchFields, null );
+
+        archivaConfigControl.verify();
+
+        assertNotNull( results );
+        assertEquals( 2, results.getTotalHits() );
+        
+        FileUtils.deleteDirectory( new File( getBasedir(), "/target/test-classes/" + TEST_REPO_2 + "/.indexer" ) );
+        assertFalse( new File( getBasedir(), "/target/test-classes/" + TEST_REPO_2 + "/.indexer" ).exists() );
+    }
+    
+    public void testAdvancedSearchWithPagination()
+        throws Exception
+    {
+        List<File> files = new ArrayList<File>();
+        files.add( new File( getBasedir(), "/target/test-classes/" + TEST_REPO_2 +
+            "/org/apache/archiva/archiva-search/1.0/archiva-search-1.0.jar" ) );
+        files.add( new File( getBasedir(), "/target/test-classes/" + TEST_REPO_2 +
+            "/org/apache/archiva/archiva-search/1.1/archiva-search-1.1.jar" ) );
+        createIndex( TEST_REPO_2, files );
+
+        List<String> selectedRepos = new ArrayList<String>();
+        selectedRepos.add( TEST_REPO_1 );
+        selectedRepos.add( TEST_REPO_2 );
+
+        config.addManagedRepository( createRepositoryConfig( TEST_REPO_2 ) );
+        
+        SearchFields searchFields = new SearchFields();
+        searchFields.setGroupId( "org.apache.archiva" );
+        searchFields.setVersion( "1.0" );
+        searchFields.setRepositories( selectedRepos );        
+        
+        // page 1
+        
+        SearchResultLimits limits = new SearchResultLimits( 0 );
+        limits.setPageSize( 1 );
+        
+        archivaConfigControl.expectAndReturn( archivaConfig.getConfiguration(), config, 2 );
+
+        archivaConfigControl.replay();
+
+        SearchResults results = search.search( "user", searchFields, limits );
+
+        archivaConfigControl.verify();
+
+        assertNotNull( results );
+        assertEquals( 2, results.getTotalHits() );
+        assertEquals( 1, results.getHits().size() );
+        
+        // page 2
+        archivaConfigControl.reset();
+        
+        limits = new SearchResultLimits( 1 );
+        limits.setPageSize( 1 );
+        
+        archivaConfigControl.expectAndReturn( archivaConfig.getConfiguration(), config, 2 );
+
+        archivaConfigControl.replay();
+
+        results = search.search( "user", searchFields, limits );
+
+        archivaConfigControl.verify();
+
+        assertNotNull( results );
+        assertEquals( 2, results.getTotalHits() );
+        assertEquals( 1, results.getHits().size() );
         
+        FileUtils.deleteDirectory( new File( getBasedir(), "/target/test-classes/" + TEST_REPO_2 + "/.indexer" ) );
+        assertFalse( new File( getBasedir(), "/target/test-classes/" + TEST_REPO_2 + "/.indexer" ).exists() );
     }
 
 }