mirror of
https://github.com/apache/archiva.git
synced 2025-02-21 01:15:08 +00:00
[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) git-svn-id: https://svn.apache.org/repos/asf/archiva/trunk@680352 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
6a85861b8a
commit
23392d13f3
@ -171,7 +171,8 @@ public void processFile( String path )
|
||||
{
|
||||
ArtifactReference ref = repository.toArtifactReference( path );
|
||||
ArchivaArtifact artifact = new ArchivaArtifact( ref );
|
||||
record.setArtifact( artifact );
|
||||
artifact.getModel().setRepositoryId( repository.getId() );
|
||||
record.setArtifact( artifact );
|
||||
}
|
||||
catch ( LayoutException e )
|
||||
{
|
||||
|
@ -130,8 +130,7 @@ public void processArchivaArtifact( ArchivaArtifact artifact )
|
||||
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 @@ public void processArchivaArtifact( ArchivaArtifact artifact )
|
||||
// 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 ) );
|
||||
|
@ -134,9 +134,7 @@ public SearchResults searchForTerm( String principal, List<String> selectedRepos
|
||||
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();
|
||||
|
@ -92,6 +92,7 @@ private String toKey( ArchivaArtifact artifact )
|
||||
{
|
||||
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() ) );
|
||||
|
||||
|
@ -129,7 +129,7 @@ private CrossRepositorySearch lookupCrossRepositorySearch()
|
||||
|
||||
public void testSearchTerm_Org()
|
||||
throws Exception
|
||||
{
|
||||
{
|
||||
CrossRepositorySearch search = lookupCrossRepositorySearch();
|
||||
|
||||
String expectedRepos[] = new String[] {
|
||||
@ -140,12 +140,12 @@ public void testSearchTerm_Org()
|
||||
"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 @@ public void testSearchTerm_Junit()
|
||||
"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 @@ public void testSearchInvalidTerm()
|
||||
// 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 @@ public void testSearchWithinSearchResults()
|
||||
};
|
||||
|
||||
// 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 @@ public void testSearchWithinSearchResults()
|
||||
"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 @@ public void testSearchWithinSearchResults()
|
||||
};
|
||||
|
||||
//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 @@ private void assertSearchResults( String expectedRepos[], String expectedResults
|
||||
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
|
||||
{
|
||||
|
@ -90,6 +90,8 @@ public class SearchAction
|
||||
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 @@ public String quickSearch()
|
||||
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 @@ public void setCompleteQueryString( String completeQueryString )
|
||||
{
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
@ -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>
|
Loading…
x
Reference in New Issue
Block a user