Author: oching
Date: Wed Oct 22 23:31:39 2008
New Revision: 707291

URL: http://svn.apache.org/viewvc?rev=707291&view=rev
Log:
[MRM-981]
-fix query construction for advanced search

Added:
    
archiva/trunk/archiva-modules/archiva-base/archiva-indexer/src/test/artifact-dumps/a-common5-1.0.jar.txt
Modified:
    
archiva/trunk/archiva-modules/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/search/DefaultCrossRepositorySearch.java
    
archiva/trunk/archiva-modules/archiva-base/archiva-indexer/src/test/java/org/apache/maven/archiva/indexer/search/BytecodeIndexPopulator.java
    
archiva/trunk/archiva-modules/archiva-base/archiva-indexer/src/test/java/org/apache/maven/archiva/indexer/search/DefaultCrossRepositorySearchTest.java

Modified: 
archiva/trunk/archiva-modules/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/search/DefaultCrossRepositorySearch.java
URL: 
http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/search/DefaultCrossRepositorySearch.java?rev=707291&r1=707290&r2=707291&view=diff
==============================================================================
--- 
archiva/trunk/archiva-modules/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/search/DefaultCrossRepositorySearch.java
 (original)
+++ 
archiva/trunk/archiva-modules/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/search/DefaultCrossRepositorySearch.java
 Wed Oct 22 23:31:39 2008
@@ -83,49 +83,69 @@
     private ArchivaConfiguration configuration;
 
     private List<ManagedRepositoryConfiguration> localIndexedRepositories = 
new ArrayList<ManagedRepositoryConfiguration>();
-
+    
     public SearchResults executeFilteredSearch( String principal, List<String> 
selectedRepos, String groupId,
                                                 String artifactId, String 
version, String className,
                                                 SearchResultLimits limits )
     {
         List<RepositoryContentIndex> indexes = getBytecodeIndexes( principal, 
selectedRepos );
-        SearchResults results = new SearchResults();
-        BooleanQuery booleanQuery = new BooleanQuery();
-
-        if ( groupId != null && groupId.length() > 0 )
-        {
-            parseAndAdd( booleanQuery, ArtifactKeys.GROUPID, groupId, "\\.|-" 
);
-        }
-
-        if ( artifactId != null && artifactId.length() > 0 )
-        {
-            parseAndAdd( booleanQuery, ArtifactKeys.ARTIFACTID, artifactId, 
"\\.|-" );
-        }
-
-        if ( version != null && version.length() > 0 )
+        SearchResults results = new SearchResults();        
+        List<String> fieldsList = new ArrayList<String>();
+        List<String> termsList = new ArrayList<String>();
+        List<BooleanClause.Occur> flagsList = new 
ArrayList<BooleanClause.Occur>();
+        
+        if( groupId != null && !"".equals( groupId.trim() ) )
+        {
+            fieldsList.add( ArtifactKeys.GROUPID );
+            termsList.add( groupId );
+            flagsList.add( BooleanClause.Occur.MUST );            
+        }
+        
+        if( artifactId != null && !"".equals( artifactId.trim() ) )
+        {
+            fieldsList.add( ArtifactKeys.ARTIFACTID );
+            termsList.add( artifactId );
+            flagsList.add( BooleanClause.Occur.MUST );
+        }
+        
+        if( version != null && !"".equals( version.trim() ) )
+        {
+            fieldsList.add( ArtifactKeys.VERSION );
+            termsList.add( version );
+            flagsList.add( BooleanClause.Occur.MUST );
+        }
+        
+        if( className != null && !"".equals( className.trim() ) )
+        {   
+            fieldsList.add( BytecodeKeys.CLASSES );
+            fieldsList.add( BytecodeKeys.FILES );
+            fieldsList.add( BytecodeKeys.METHODS );
+            termsList.add( className.trim() );
+            termsList.add( className.trim() );
+            termsList.add( className.trim() );
+            flagsList.add( BooleanClause.Occur.SHOULD );
+            flagsList.add( BooleanClause.Occur.SHOULD );
+            flagsList.add( BooleanClause.Occur.SHOULD );
+        }        
+        
+        try
         {
-            parseAndAdd( booleanQuery, ArtifactKeys.VERSION, version, "\\.|-" 
);
+            String[] fieldsArr = new String[ fieldsList.size() ];
+            String[] queryArr = new String[ termsList.size() ];
+            BooleanClause.Occur[] flagsArr = new BooleanClause.Occur[ 
flagsList.size() ];
+            
+            Query fieldsQuery =
+                MultiFieldQueryParser.parse( termsList.toArray( queryArr ), 
fieldsList.toArray( fieldsArr ),
+                                             flagsList.toArray( flagsArr ), 
new BytecodeHandlers().getAnalyzer() );
+            
+            LuceneQuery query = new LuceneQuery( fieldsQuery );
+            results = searchAll( query, limits, indexes, null );
+            results.getRepositories().add( this.localIndexedRepositories );
         }
-
-        if ( className != null && className.length() > 0 )
+        catch ( ParseException e )
         {
-
-            try
-            {
-                QueryParser parser =
-                    new MultiFieldQueryParser( new String[] { 
BytecodeKeys.CLASSES, BytecodeKeys.FILES,
-                        BytecodeKeys.METHODS }, new 
BytecodeHandlers().getAnalyzer() );
-                booleanQuery.add( parser.parse( className ), 
BooleanClause.Occur.MUST );
-            }
-            catch ( ParseException e )
-            {
-
-            }
-        }
-
-        LuceneQuery query = new LuceneQuery( booleanQuery );
-        results = searchAll( query, limits, indexes, null );
-        results.getRepositories().add( this.localIndexedRepositories );
+            log.warn( "Unable to parse advanced search fields and query 
terms." );
+        }        
 
         return results;
     }
@@ -263,8 +283,8 @@
                 hits = searcher.search( specificQuery );
             }
 
-            int hitCount = hits.length();
-
+            int hitCount = hits.length();     
+            
             // Now process the limits.
             results.setLimits( limits );
             results.setTotalHits( hitCount );
@@ -453,26 +473,6 @@
         }
     }
 
-    private void parseAndAdd( BooleanQuery query, String key, String value, 
String delimiter )
-    {
-        if ( value != null && value.length() > 0 )
-        {
-            String[] terms = value.split( delimiter );
-            for ( int i = 0; i < terms.length; i++ )
-            {
-                Term valueTerm = new Term( key, terms[i] );
-                Query valueQuery = new TermQuery( valueTerm );
-                query.add( valueQuery, BooleanClause.Occur.MUST );
-            }
-        }
-        else
-        {
-            Term valueTerm = new Term( key, value );
-            Query valueQuery = new TermQuery( valueTerm );
-            query.add( valueQuery, BooleanClause.Occur.MUST );
-        }
-    }
-
     public void initialize()
         throws InitializationException
     {

Added: 
archiva/trunk/archiva-modules/archiva-base/archiva-indexer/src/test/artifact-dumps/a-common5-1.0.jar.txt
URL: 
http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-base/archiva-indexer/src/test/artifact-dumps/a-common5-1.0.jar.txt?rev=707291&view=auto
==============================================================================
--- 
archiva/trunk/archiva-modules/archiva-base/archiva-indexer/src/test/artifact-dumps/a-common5-1.0.jar.txt
 (added)
+++ 
archiva/trunk/archiva-modules/archiva-base/archiva-indexer/src/test/artifact-dumps/a-common5-1.0.jar.txt
 Wed Oct 22 23:31:39 2008
@@ -0,0 +1,7 @@
+FILENAME|a-common5-1.0.jar
+SIZE|8516
+HASH_MD5|a5d0d280ce83133432d8fed8f2ce3474
+HASH_SHA1|c2635a1b38bd4520a6604664c04b2b3c32330864
+HASH_BYTECODE|2868f6661c55afda5a3b62859fbc8b1beb021b6e
+JDK|1.4
+CLASS|a.common5.package.ACommonTestFile

Modified: 
archiva/trunk/archiva-modules/archiva-base/archiva-indexer/src/test/java/org/apache/maven/archiva/indexer/search/BytecodeIndexPopulator.java
URL: 
http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-base/archiva-indexer/src/test/java/org/apache/maven/archiva/indexer/search/BytecodeIndexPopulator.java?rev=707291&r1=707290&r2=707291&view=diff
==============================================================================
--- 
archiva/trunk/archiva-modules/archiva-base/archiva-indexer/src/test/java/org/apache/maven/archiva/indexer/search/BytecodeIndexPopulator.java
 (original)
+++ 
archiva/trunk/archiva-modules/archiva-base/archiva-indexer/src/test/java/org/apache/maven/archiva/indexer/search/BytecodeIndexPopulator.java
 Wed Oct 22 23:31:39 2008
@@ -75,6 +75,9 @@
         // wagon-provider-api-1.0-beta-3-20070209.213958-2.jar.txt
         dumps.put( "wagon-provider-api", createArchivaArtifact( 
"org.apache.maven.wagon", "wagon-provider-api",
                                                                 
"1.0-beta-3-20070209.213958-2", "", "jar" ) );
+        
+        // a-common5
+        dumps.put( "a-common5", createArchivaArtifact( "a", "a-common5", 
"1.0", "", "jar" ) );
 
         return dumps;
 

Modified: 
archiva/trunk/archiva-modules/archiva-base/archiva-indexer/src/test/java/org/apache/maven/archiva/indexer/search/DefaultCrossRepositorySearchTest.java
URL: 
http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-base/archiva-indexer/src/test/java/org/apache/maven/archiva/indexer/search/DefaultCrossRepositorySearchTest.java?rev=707291&r1=707290&r2=707291&view=diff
==============================================================================
--- 
archiva/trunk/archiva-modules/archiva-base/archiva-indexer/src/test/java/org/apache/maven/archiva/indexer/search/DefaultCrossRepositorySearchTest.java
 (original)
+++ 
archiva/trunk/archiva-modules/archiva-base/archiva-indexer/src/test/java/org/apache/maven/archiva/indexer/search/DefaultCrossRepositorySearchTest.java
 Wed Oct 22 23:31:39 2008
@@ -267,6 +267,32 @@
                                      "archiva-common", "1.0", null, 30 );
     }
     
+    // MRM-981 - artifactIds with numeric characters aren't found in advanced 
search
+    public void testFilteredSearchArtifactIdHasNumericChar()
+        throws Exception
+    {
+        CrossRepositorySearch search = lookupCrossRepositorySearch();
+
+        String expectedRepos[] = new String[] { TEST_DEFAULT_REPO_ID };
+
+        String expectedResults[] = new String[] { "a-common5" };
+        
+        assertFilteredSearchResults( expectedRepos, expectedResults, search, 
null, "a-common5", null, null, 30 );
+        
+        assertFilteredSearchResults( expectedRepos, expectedResults, search, 
"a", "a-common5", null, null, 30 );
+        
+        assertFilteredSearchResults( expectedRepos, expectedResults, search, 
"a", "a-common5", "1.0", null, 30 );
+        
+        assertFilteredSearchResults( expectedRepos, expectedResults, search, 
"a", "a-common5", "1.0", "ACommonTestFile", 30 );
+                
+        assertFilteredSearchResults( expectedRepos, expectedResults, search, 
"a", "a-common5", "1.0", "a.common5.package.", 30 );
+        
+        String noHitsExpectedResults[] = new String[] {};
+        
+        assertFilteredSearchResults( expectedRepos, noHitsExpectedResults, 
search, "org.apache.maven.archiva",
+                                     "a-common5", null, null, 30 );
+    }
+    
     private void assertFilteredSearchResults ( String expectedRepos[], String 
expectedResults[], CrossRepositorySearch search, 
                                                String groupId, String 
artifactId, String version, String className , int rowCount )
     {


Reply via email to