소스 검색

[MRM-749]

o implement advanced search for nexus search impl
o added test cases


git-svn-id: https://svn.apache.org/repos/asf/archiva/branches/archiva-nexus-indexer@740206 13f79535-47bb-0310-9956-ffa450edef68
archiva-nexus-indexer
Maria Odea B. Ching 15 년 전
부모
커밋
a86557330f

+ 55
- 17
archiva-modules/archiva-base/archiva-indexer/src/main/java/org/apache/archiva/indexer/search/NexusRepositorySearch.java 파일 보기

@@ -70,13 +70,7 @@ public class NexusRepositorySearch
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 @@ public class NexusRepositorySearch
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 @@ public class NexusRepositorySearch
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 )

+ 28
- 19
archiva-modules/archiva-base/archiva-indexer/src/main/java/org/apache/archiva/indexer/search/SearchFields.java 파일 보기

@@ -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 @@ package org.apache.archiva.indexer.search;

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 @@ public class SearchFields
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;
}
}

+ 90
- 0
archiva-modules/archiva-base/archiva-indexer/src/test/java/org/apache/archiva/indexer/search/NexusRepositorySearchTest.java 파일 보기

@@ -330,7 +330,97 @@ public class NexusRepositorySearchTest
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() );
}

}

Loading…
취소
저장