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() );
}
}