Author: oching
Date: Mon Jul 28 06:35:38 2008
New Revision: 680352

URL: http://svn.apache.org/viewvc?rev=680352&view=rev
Log:
[MRM-892]
-changed the implementation of search by class, package or method to use 
specific keywords 'class:', 'package:' or 'method:' when searching 
for them (ex. class:MyClass)

Modified:
    
archiva/trunk/archiva-modules/archiva-base/archiva-consumers/archiva-lucene-consumers/src/main/java/org/apache/maven/archiva/consumers/lucene/IndexContentConsumer.java
    
archiva/trunk/archiva-modules/archiva-base/archiva-consumers/archiva-lucene-consumers/src/main/java/org/apache/maven/archiva/consumers/lucene/IndexJavaPublicMethodsConsumer.java
    
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/main/java/org/apache/maven/archiva/indexer/search/SearchResults.java
    
archiva/trunk/archiva-modules/archiva-base/archiva-indexer/src/test/java/org/apache/maven/archiva/indexer/search/DefaultCrossRepositorySearchTest.java
    
archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/SearchAction.java
    
archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/include/quickSearchForm.jspf

Modified: 
archiva/trunk/archiva-modules/archiva-base/archiva-consumers/archiva-lucene-consumers/src/main/java/org/apache/maven/archiva/consumers/lucene/IndexContentConsumer.java
URL: 
http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-base/archiva-consumers/archiva-lucene-consumers/src/main/java/org/apache/maven/archiva/consumers/lucene/IndexContentConsumer.java?rev=680352&r1=680351&r2=680352&view=diff
==============================================================================
--- 
archiva/trunk/archiva-modules/archiva-base/archiva-consumers/archiva-lucene-consumers/src/main/java/org/apache/maven/archiva/consumers/lucene/IndexContentConsumer.java
 (original)
+++ 
archiva/trunk/archiva-modules/archiva-base/archiva-consumers/archiva-lucene-consumers/src/main/java/org/apache/maven/archiva/consumers/lucene/IndexContentConsumer.java
 Mon Jul 28 06:35:38 2008
@@ -171,7 +171,8 @@
             {
                 ArtifactReference ref = repository.toArtifactReference( path );
                 ArchivaArtifact artifact = new ArchivaArtifact( ref );
-                record.setArtifact( artifact );
+                artifact.getModel().setRepositoryId( repository.getId() );
+                record.setArtifact( artifact );                
             }
             catch ( LayoutException e )
             {

Modified: 
archiva/trunk/archiva-modules/archiva-base/archiva-consumers/archiva-lucene-consumers/src/main/java/org/apache/maven/archiva/consumers/lucene/IndexJavaPublicMethodsConsumer.java
URL: 
http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-base/archiva-consumers/archiva-lucene-consumers/src/main/java/org/apache/maven/archiva/consumers/lucene/IndexJavaPublicMethodsConsumer.java?rev=680352&r1=680351&r2=680352&view=diff
==============================================================================
--- 
archiva/trunk/archiva-modules/archiva-base/archiva-consumers/archiva-lucene-consumers/src/main/java/org/apache/maven/archiva/consumers/lucene/IndexJavaPublicMethodsConsumer.java
 (original)
+++ 
archiva/trunk/archiva-modules/archiva-base/archiva-consumers/archiva-lucene-consumers/src/main/java/org/apache/maven/archiva/consumers/lucene/IndexJavaPublicMethodsConsumer.java
 Mon Jul 28 06:35:38 2008
@@ -130,8 +130,7 @@
                     file.getAbsolutePath().endsWith( ".tar.gz" ) || 
file.getAbsolutePath().endsWith( ".tar.bz2" ) ||
                     file.getAbsolutePath().endsWith( ".car" ) || 
file.getAbsolutePath().endsWith( ".sar" ) ||
                     file.getAbsolutePath().endsWith( ".mar" ) || 
file.getAbsolutePath().endsWith( ".rar" ) )
-            {
-            
+            {            
                 if( file.exists() )
                 {
                     List<String> files = readFilesInArchive( file );
@@ -141,6 +140,8 @@
                     // NOTE: what about public variables? should these be 
indexed too?
                     RepositoryContentIndex bytecodeIndex = 
repoIndexFactory.createBytecodeIndex( repoContent.getRepository() );
                     
+                    artifact.getModel().setRepositoryId( repoContent.getId() );
+                    
                     BytecodeRecord bytecodeRecord = new BytecodeRecord();
                     bytecodeRecord.setFilename( file.getName() );
                     bytecodeRecord.setClasses( mapOfClassesAndMethods.get( 
CLASSES ) );

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=680352&r1=680351&r2=680352&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
 Mon Jul 28 06:35:38 2008
@@ -134,9 +134,7 @@
                                         SearchResultLimits limits, 
List<String> previousSearchTerms )
     {
         List<RepositoryContentIndex> indexes = getFileContentIndexes( 
principal, selectedRepos );
-        List<RepositoryContentIndex> bytecodeIndices = getBytecodeIndexes( 
principal, selectedRepos );        
-        indexes.addAll( bytecodeIndices );
-
+        
         try
         {
             QueryParser parser = new FileContentHandlers().getQueryParser();

Modified: 
archiva/trunk/archiva-modules/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/search/SearchResults.java
URL: 
http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/search/SearchResults.java?rev=680352&r1=680351&r2=680352&view=diff
==============================================================================
--- 
archiva/trunk/archiva-modules/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/search/SearchResults.java
 (original)
+++ 
archiva/trunk/archiva-modules/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/search/SearchResults.java
 Mon Jul 28 06:35:38 2008
@@ -92,6 +92,7 @@
     {
         StringBuffer key = new StringBuffer();
 
+        key.append( StringUtils.defaultString( 
artifact.getModel().getRepositoryId() ) ).append( ":" );
         key.append( StringUtils.defaultString( artifact.getGroupId() ) 
).append( ":" );
         key.append( StringUtils.defaultString( artifact.getArtifactId() ) );
 

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=680352&r1=680351&r2=680352&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
 Mon Jul 28 06:35:38 2008
@@ -129,7 +129,7 @@
 
     public void testSearchTerm_Org()
         throws Exception
-    {
+    {        
         CrossRepositorySearch search = lookupCrossRepositorySearch();
 
         String expectedRepos[] = new String[] {
@@ -140,12 +140,12 @@
             "org","org2","org3","org4","org5","org6","org7"
         };
         
-        assertSearchResults( expectedRepos, expectedResults, search, "org", 
null );
+        assertSearchResults( expectedRepos, expectedResults, search, "org", 
null, false );
     }
 
     public void testSearchTerm_Junit()
         throws Exception
-    {
+    {        
         CrossRepositorySearch search = lookupCrossRepositorySearch();
         
         String expectedRepos[] = new String[] {
@@ -156,12 +156,12 @@
             "junit","junit2","junit3"
         };
         
-        assertSearchResults( expectedRepos, expectedResults, search, "junit", 
null );
+        assertSearchResults( expectedRepos, expectedResults, search, "junit", 
null, false );
     }
 
     public void testSearchInvalidTerm()
         throws Exception
-    {
+    {        
         CrossRepositorySearch search = lookupCrossRepositorySearch();
 
         String expectedRepos[] = new String[] {
@@ -172,12 +172,12 @@
             // Nothing.
         };
         
-        assertSearchResults( expectedRepos, expectedResults, search, 
"monosodium", null );
+        assertSearchResults( expectedRepos, expectedResults, search, 
"monosodium", null, false );
     }
     
     public void testSearchWithinSearchResults()
         throws Exception
-    {
+    {        
         CrossRepositorySearch search = lookupCrossRepositorySearch();
 
         String expectedRepos[] = new String[] {
@@ -189,7 +189,7 @@
         };
         
         // first search
-        assertSearchResults( expectedRepos, expectedResults, search, "org", 
null );
+        assertSearchResults( expectedRepos, expectedResults, search, "org", 
null, false );
         
         List<String> previousSearchTerms = new ArrayList<String>();
         previousSearchTerms.add( "org" );        
@@ -197,12 +197,12 @@
             "org.apache.maven.archiva.record", 
"org.apache.maven.archiva.record2",
                 "org.apache.maven.archiva.record3", 
"org.apache.maven.archiva.record4",
                 "org.apache.maven.archiva.record5", 
"org.apache.maven.archiva.record6",
-                "org.apache.maven.archiva.record7"
+                "org.apache.maven.archiva.record7" 
         };
         
         //second search
         assertSearchResults( expectedRepos, secondSearchExpectedResults, 
search, "org.apache.maven.archiva.record",
-                             previousSearchTerms );
+                             previousSearchTerms, false );
         
         previousSearchTerms.add( "org.apache.maven.archiva.record" );
         String thirdSearchExpectedResults[] = new String[] { 
@@ -210,11 +210,40 @@
         };
         
         //third search
-        assertSearchResults( expectedRepos, thirdSearchExpectedResults, 
search, "junit", previousSearchTerms );        
+        assertSearchResults( expectedRepos, thirdSearchExpectedResults, 
search, "junit", previousSearchTerms, false );        
+    }
+    
+    public void testSearchForClassesAndPackages()
+        throws Exception
+    {                
+        CrossRepositorySearch search = lookupCrossRepositorySearch();
+
+        String expectedRepos[] = new String[] {
+            TEST_DEFAULT_REPO_ID
+        };
+                
+        String expectedResults[] = new String[] { 
+            "archiva-common-1.0.jar"
+        };
+        
+        // class with packagename search
+        assertSearchResults( expectedRepos, expectedResults, search, 
+                             "org.apache.maven.archiva.common.utils.BaseFile", 
null, true );
+        // class name search
+        assertSearchResults( expectedRepos, expectedResults, search, 
+                             "BaseFile", null, true );
+                
+        String expectedMethodSearchResults[] = new String[] { 
+            "continuum-webapp-1.0.3-SNAPSHOT.war"
+        };
+        
+        // method search
+        assertSearchResults( expectedRepos, expectedMethodSearchResults, 
search,
+                             
"org.apache.maven.continuum.web.action.BuildDefinitionAction.isBuildFresh", 
null, true );        
     }
     
     private void assertSearchResults( String expectedRepos[], String 
expectedResults[], CrossRepositorySearch search,
-                                      String term, List<String> 
previousSearchTerms )
+                                      String term, List<String> 
previousSearchTerms, boolean bytecode )
         throws Exception
     {
         SearchResultLimits limits = new SearchResultLimits( 0 );
@@ -226,7 +255,14 @@
         SearchResults results = null;
         if( previousSearchTerms == null )
         {
-            results = search.searchForTerm( "guest", selectedRepos, term, 
limits );
+            if( bytecode )
+            {
+                results = search.searchForBytecode( "guest", selectedRepos, 
term, limits );
+            }
+            else
+            {
+                results = search.searchForTerm( "guest", selectedRepos, term, 
limits );
+            }
         }
         else
         {

Modified: 
archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/SearchAction.java
URL: 
http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/SearchAction.java?rev=680352&r1=680351&r2=680352&view=diff
==============================================================================
--- 
archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/SearchAction.java
 (original)
+++ 
archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/SearchAction.java
 Mon Jul 28 06:35:38 2008
@@ -90,6 +90,8 @@
     private String completeQueryString;
     
     private static final String COMPLETE_QUERY_STRING_SEPARATOR = ";";
+    
+    private static final String[] BYTECODE_KEYWORDS = new String[] { "class:", 
"package:", "method:" };
 
     public String quickSearch()
         throws MalformedURLException, RepositoryIndexException, 
RepositoryIndexSearchException
@@ -110,14 +112,21 @@
             return GlobalResults.ACCESS_TO_NO_REPOS;
         }
 
-        if( searchResultsOnly && !completeQueryString.equals( "" ) )
-        { 
-            results = crossRepoSearch.searchForTerm( getPrincipal(), 
selectedRepos, q, limits, parseCompleteQueryString() );
+        if( isBytecodeSearch( q ) )
+        {   
+            results = crossRepoSearch.searchForBytecode( getPrincipal(), 
selectedRepos, removeKeywords( q ), limits );
         }
         else
         {
-            completeQueryString = "";
-            results = crossRepoSearch.searchForTerm( getPrincipal(), 
selectedRepos, q, limits );
+            if( searchResultsOnly && !completeQueryString.equals( "" ) )
+            { 
+                results = crossRepoSearch.searchForTerm( getPrincipal(), 
selectedRepos, q, limits, parseCompleteQueryString() );
+            }
+            else
+            {
+                completeQueryString = "";
+                results = crossRepoSearch.searchForTerm( getPrincipal(), 
selectedRepos, q, limits );
+            }
         }
         
         if ( results.isEmpty() )
@@ -310,4 +319,25 @@
     {
         this.completeQueryString = completeQueryString;
     }    
+    
+    private boolean isBytecodeSearch( String queryString )
+    {
+        if( queryString.startsWith( BYTECODE_KEYWORDS[0] ) || 
queryString.startsWith( BYTECODE_KEYWORDS[1] ) || 
+                        queryString.startsWith( BYTECODE_KEYWORDS[2] ) )
+        {
+            return true;
+        }
+        
+        return false;
+    }
+    
+    private String removeKeywords( String queryString )
+    {  
+        String qString = StringUtils.uncapitalize( queryString );
+        qString = StringUtils.removeStart( queryString, BYTECODE_KEYWORDS[0] );
+        qString = StringUtils.removeStart( qString, BYTECODE_KEYWORDS[1] );
+        qString = StringUtils.removeStart( qString, BYTECODE_KEYWORDS[2] );
+        
+        return qString;
+    }
 }

Modified: 
archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/include/quickSearchForm.jspf
URL: 
http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/include/quickSearchForm.jspf?rev=680352&r1=680351&r2=680352&view=diff
==============================================================================
--- 
archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/include/quickSearchForm.jspf
 (original)
+++ 
archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/include/quickSearchForm.jspf
 Mon Jul 28 06:35:38 2008
@@ -32,7 +32,9 @@
   </script>
 
   <p>
-    Enter your search terms. A variety of data will be searched for your 
keywords.
+    Enter your search terms. A variety of data will be searched for your 
keywords.<br/>
+    To search for java classes, packages or methods, append the keywords 
"<i>class:</i>",
+    "<i>package:</i>" or "<i>method:</i>" before your query. Example, 
class:MyClass 
     <ww:actionerror/>
   </p>
 </div>
\ No newline at end of file


Reply via email to