mirror of https://github.com/apache/archiva.git
[MRM-118] refactor the searchers into components any make them thread safe
git-svn-id: https://svn.apache.org/repos/asf/maven/repository-manager/trunk@412642 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
2ace38a72f
commit
eba7bf274a
|
@ -20,9 +20,9 @@ import org.apache.maven.artifact.repository.ArtifactRepository;
|
|||
import org.apache.maven.artifact.repository.ArtifactRepositoryFactory;
|
||||
import org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout;
|
||||
import org.apache.maven.repository.indexing.ArtifactRepositoryIndex;
|
||||
import org.apache.maven.repository.indexing.DefaultRepositoryIndexSearcher;
|
||||
import org.apache.maven.repository.indexing.RepositoryIndexException;
|
||||
import org.apache.maven.repository.indexing.RepositoryIndexSearchException;
|
||||
import org.apache.maven.repository.indexing.RepositoryIndexSearcher;
|
||||
import org.apache.maven.repository.indexing.RepositoryIndexingFactory;
|
||||
import org.apache.maven.repository.indexing.query.SinglePhraseQuery;
|
||||
import org.codehaus.classworlds.ClassWorld;
|
||||
|
@ -67,11 +67,11 @@ public class IndexSearcherCli
|
|||
ArtifactRepositoryIndex index =
|
||||
indexFactory.createArtifactRepositoryIndex( new File( args[0], ".index" ).getAbsolutePath(), repository );
|
||||
|
||||
DefaultRepositoryIndexSearcher searcher = indexFactory.createDefaultRepositoryIndexSearcher( index );
|
||||
RepositoryIndexSearcher searcher = (RepositoryIndexSearcher) embedder.lookup( RepositoryIndexSearcher.ROLE );
|
||||
|
||||
try
|
||||
{
|
||||
System.out.println( searcher.search( new SinglePhraseQuery( args[1], args[2] ) ) );
|
||||
System.out.println( searcher.search( new SinglePhraseQuery( args[1], args[2] ), index ) );
|
||||
}
|
||||
finally
|
||||
{
|
||||
|
|
|
@ -32,21 +32,24 @@ import java.util.Collection;
|
|||
import java.util.zip.ZipEntry;
|
||||
|
||||
/**
|
||||
* Abstract class for RepositoryIndexers
|
||||
* Abstract class for RepositoryIndexers.
|
||||
*
|
||||
* @author Edwin Punzalan
|
||||
*/
|
||||
public abstract class AbstractRepositoryIndex
|
||||
implements RepositoryIndex
|
||||
{
|
||||
// TODO [!] can this be derived from the repository?
|
||||
private String indexPath;
|
||||
|
||||
private boolean indexOpen;
|
||||
|
||||
// TODO [!] why is the writer open for the life, but not the reader? why keep them open that length of time anyway? investigate best practices in Lucene
|
||||
private IndexWriter indexWriter;
|
||||
|
||||
protected ArtifactRepository repository;
|
||||
|
||||
// TODO [!] is this really needed externally?
|
||||
private Analyzer analyzer;
|
||||
|
||||
/**
|
||||
|
@ -155,6 +158,7 @@ public abstract class AbstractRepositoryIndex
|
|||
protected IndexWriter getIndexWriter()
|
||||
throws IOException
|
||||
{
|
||||
// TODO [!] why is this allowed to be called before open()?
|
||||
if ( indexWriter == null )
|
||||
{
|
||||
indexWriter = new IndexWriter( indexPath, getAnalyzer(), false );
|
||||
|
@ -220,7 +224,7 @@ public abstract class AbstractRepositoryIndex
|
|||
}
|
||||
catch ( IOException ie )
|
||||
{
|
||||
throw new RepositoryIndexException( indexPath + "is not a valid directory." );
|
||||
throw new RepositoryIndexException( indexPath + " is not a valid directory." );
|
||||
}
|
||||
finally
|
||||
{
|
||||
|
|
|
@ -0,0 +1,412 @@
|
|||
package org.apache.maven.repository.indexing;
|
||||
|
||||
/*
|
||||
* Copyright 2005-2006 The Apache Software Foundation.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import org.apache.maven.artifact.Artifact;
|
||||
import org.apache.maven.artifact.factory.ArtifactFactory;
|
||||
import org.apache.maven.model.Dependency;
|
||||
import org.apache.maven.model.License;
|
||||
import org.apache.maven.model.Model;
|
||||
import org.apache.maven.model.Plugin;
|
||||
import org.apache.maven.model.ReportPlugin;
|
||||
import org.apache.maven.repository.indexing.query.Query;
|
||||
import org.apache.maven.repository.indexing.query.SinglePhraseQuery;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.StringTokenizer;
|
||||
|
||||
/**
|
||||
* This class is to be invoked or called by the action class for
|
||||
* general and advanced searching. It uses the DefaultRepositoryIndexSearcher
|
||||
* to perform the search and constructs the search result objects to be
|
||||
* returned to tha webapp action class.
|
||||
*
|
||||
* @plexus.component role="org.apache.maven.repository.indexing.RepositoryIndexSearchLayer"
|
||||
*/
|
||||
public class DefaultRepositoryIndexSearchLayer
|
||||
implements RepositoryIndexSearchLayer
|
||||
{
|
||||
/**
|
||||
* @plexus.requirement
|
||||
*/
|
||||
private ArtifactFactory factory;
|
||||
|
||||
/**
|
||||
* @plexus.requirement
|
||||
*/
|
||||
private RepositoryIndexSearcher searcher;
|
||||
|
||||
public List searchGeneral( String keyword, RepositoryIndex index )
|
||||
throws RepositoryIndexSearchException
|
||||
{
|
||||
List generalSearchResults = new ArrayList();
|
||||
for ( int i = 0; i < RepositoryIndex.FIELDS.length; i++ )
|
||||
{
|
||||
Query qry = new SinglePhraseQuery( RepositoryIndex.FIELDS[i], keyword );
|
||||
List results = searchAdvanced( qry, index );
|
||||
for ( Iterator iter = results.iterator(); iter.hasNext(); )
|
||||
{
|
||||
SearchResult result = (SearchResult) iter.next();
|
||||
Map map = result.getFieldMatches();
|
||||
Set entrySet = map.entrySet();
|
||||
for ( Iterator it = entrySet.iterator(); it.hasNext(); )
|
||||
{
|
||||
Map.Entry entry = (Map.Entry) it.next();
|
||||
SearchResult result2 = createSearchResult( result.getArtifact(), map, keyword,
|
||||
(String) entry.getKey(), generalSearchResults );
|
||||
generalSearchResults.add( result2 );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return generalSearchResults;
|
||||
}
|
||||
|
||||
public List searchAdvanced( Query qry, RepositoryIndex index )
|
||||
throws RepositoryIndexSearchException
|
||||
{
|
||||
List searchResults = new ArrayList();
|
||||
|
||||
List hits = searcher.search( qry, index );
|
||||
for ( Iterator it = hits.iterator(); it.hasNext(); )
|
||||
{
|
||||
RepositoryIndexSearchHit hit = (RepositoryIndexSearchHit) it.next();
|
||||
SearchResult result = new SearchResult();
|
||||
if ( hit.isHashMap() )
|
||||
{
|
||||
Map map = (Map) hit.getObject();
|
||||
result.setArtifact( (Artifact) map.get( RepositoryIndex.ARTIFACT ) );
|
||||
|
||||
Map fields = new HashMap();
|
||||
fields.put( RepositoryIndex.FLD_CLASSES, map.get( RepositoryIndex.FLD_CLASSES ) );
|
||||
fields.put( RepositoryIndex.FLD_PACKAGES, map.get( RepositoryIndex.FLD_PACKAGES ) );
|
||||
fields.put( RepositoryIndex.FLD_FILES, map.get( RepositoryIndex.FLD_FILES ) );
|
||||
fields.put( RepositoryIndex.FLD_PACKAGING, map.get( RepositoryIndex.FLD_PACKAGING ) );
|
||||
fields.put( RepositoryIndex.FLD_SHA1, map.get( RepositoryIndex.FLD_SHA1 ) );
|
||||
fields.put( RepositoryIndex.FLD_MD5, map.get( RepositoryIndex.FLD_MD5 ) );
|
||||
|
||||
result.setFieldMatches( fields );
|
||||
searchResults.add( result );
|
||||
}
|
||||
else if ( hit.isModel() )
|
||||
{
|
||||
Model model = (Model) hit.getObject();
|
||||
for ( int i = 0; i < RepositoryIndex.MODEL_FIELDS.length; i++ )
|
||||
{
|
||||
result = createSearchResult( model, RepositoryIndex.MODEL_FIELDS[i], searchResults );
|
||||
searchResults.add( result );
|
||||
}
|
||||
}
|
||||
else if ( hit.isMetadata() )
|
||||
{
|
||||
//@todo what about metadata objects?
|
||||
// RepositoryMetadata metadata = (RepositoryMetadata) hit.getObject();
|
||||
}
|
||||
}
|
||||
|
||||
return searchResults;
|
||||
}
|
||||
|
||||
/**
|
||||
* Method for checking if the artifact already exists in the search result list.
|
||||
*
|
||||
* @param groupId the group id of the artifact
|
||||
* @param artifactId the artifact id of the artifact
|
||||
* @param version the version of the artifact
|
||||
* @return the int index number of the artifact in the search result
|
||||
*/
|
||||
private int getListIndex( String groupId, String artifactId, String version, List list )
|
||||
{
|
||||
int index = 0;
|
||||
for ( Iterator iter = list.iterator(); iter.hasNext(); )
|
||||
{
|
||||
SearchResult result = (SearchResult) iter.next();
|
||||
Artifact artifact = result.getArtifact();
|
||||
if ( artifact.getGroupId().equals( groupId ) && artifact.getArtifactId().equals( artifactId ) &&
|
||||
artifact.getVersion().equals( version ) )
|
||||
{
|
||||
return index;
|
||||
}
|
||||
index++;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
/**
|
||||
* Method to create the unique artifact id to represent the artifact in the repository
|
||||
*
|
||||
* @param groupId the artifact groupId
|
||||
* @param artifactId the artifact artifactId
|
||||
* @param version the artifact version
|
||||
* @return the String id to uniquely represent the artifact
|
||||
*/
|
||||
private String getId( String groupId, String artifactId, String version )
|
||||
{
|
||||
return groupId + ":" + artifactId + ":" + version;
|
||||
}
|
||||
|
||||
/**
|
||||
* Method to get the matching values (packages, classes and files) in the
|
||||
* given string to be tokenized.
|
||||
*
|
||||
* @param tokenizeStr the string to be tokenized
|
||||
* @param key the map key
|
||||
* @param resultMap the map to be populated
|
||||
* @param keyword the value to be matched
|
||||
* @return the map that contains the matched values
|
||||
*/
|
||||
private Map getArtifactHits( String tokenizeStr, String key, Map resultMap, String keyword )
|
||||
{
|
||||
List values = new ArrayList();
|
||||
StringTokenizer st = new StringTokenizer( tokenizeStr, "\n" );
|
||||
while ( st.hasMoreTokens() )
|
||||
{
|
||||
String str = st.nextToken();
|
||||
if ( str.toLowerCase().indexOf( keyword.toLowerCase() ) != -1 )
|
||||
{
|
||||
values.add( str );
|
||||
}
|
||||
}
|
||||
|
||||
if ( !values.isEmpty() )
|
||||
{
|
||||
resultMap.put( key, values );
|
||||
}
|
||||
|
||||
return resultMap;
|
||||
}
|
||||
|
||||
/**
|
||||
* Method to create SearchResult object from a given HashMap. Used for general search results
|
||||
*
|
||||
* @param artifact the retrieved artifact from the index
|
||||
* @param map the HashMap object that contains the values for the search result
|
||||
* @param keyword the query term
|
||||
* @return the SearchResult object
|
||||
*/
|
||||
private SearchResult createSearchResult( Artifact artifact, Map map, String keyword, String field,
|
||||
List generalSearchResults )
|
||||
{
|
||||
int index = getListIndex( artifact.getGroupId(), artifact.getArtifactId(), artifact.getVersion(),
|
||||
generalSearchResults );
|
||||
SearchResult result;
|
||||
Map resultMap;
|
||||
|
||||
if ( index > -1 )
|
||||
{
|
||||
result = (SearchResult) generalSearchResults.remove( index );
|
||||
resultMap = result.getFieldMatches();
|
||||
}
|
||||
else
|
||||
{
|
||||
result = new SearchResult();
|
||||
result.setArtifact( artifact );
|
||||
resultMap = new HashMap();
|
||||
}
|
||||
|
||||
// the searched field is either the class, package or file field
|
||||
if ( field.equals( RepositoryIndex.FLD_CLASSES ) || field.equals( RepositoryIndex.FLD_PACKAGES ) ||
|
||||
field.equals( RepositoryIndex.FLD_FILES ) )
|
||||
{
|
||||
resultMap = getArtifactHits( (String) map.get( field ), field, resultMap, keyword );
|
||||
}
|
||||
else if ( field.equals( RepositoryIndex.FLD_SHA1 ) ||
|
||||
( field.equals( RepositoryIndex.FLD_MD5 ) || field.equals( RepositoryIndex.FLD_PACKAGING ) ) )
|
||||
{
|
||||
if ( map.get( field ) != null )
|
||||
{
|
||||
// the searched field is either the md5, sha1 or packaging field
|
||||
if ( ( (String) map.get( field ) ).toLowerCase().equals( keyword.toLowerCase() ) ||
|
||||
( (String) map.get( field ) ).toLowerCase().indexOf( keyword.toLowerCase() ) != -1 )
|
||||
{
|
||||
resultMap.put( field, map.get( field ) );
|
||||
}
|
||||
}
|
||||
}
|
||||
else if ( field.equals( RepositoryIndex.FLD_DEPENDENCIES ) ||
|
||||
field.equals( RepositoryIndex.FLD_PLUGINS_BUILD ) || field.equals( RepositoryIndex.FLD_PLUGINS_REPORT ) ||
|
||||
field.equals( RepositoryIndex.FLD_LICENSE_URLS ) )
|
||||
{
|
||||
List contents = (List) map.get( field );
|
||||
List values = new ArrayList();
|
||||
for ( Iterator it = contents.iterator(); it.hasNext(); )
|
||||
{
|
||||
String str = (String) it.next();
|
||||
if ( str.toLowerCase().equals( keyword.toLowerCase() ) )
|
||||
{
|
||||
values.add( str );
|
||||
}
|
||||
}
|
||||
if ( values.size() > 0 )
|
||||
{
|
||||
resultMap.put( field, values );
|
||||
}
|
||||
}
|
||||
result.setFieldMatches( resultMap );
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Method to create a SearchResult object from the given model. Used for advanced search results
|
||||
*
|
||||
* @param model the Model object that contains the values for the search result
|
||||
* @param field the field whose value is to be retrieved
|
||||
* @return a SearchResult object
|
||||
*/
|
||||
private SearchResult createSearchResult( Model model, String field, List searchResults )
|
||||
{
|
||||
int index = getListIndex( model.getGroupId(), model.getArtifactId(), model.getVersion(), searchResults );
|
||||
SearchResult result;
|
||||
Map map;
|
||||
|
||||
// the object already exists in the search result list
|
||||
if ( index > -1 )
|
||||
{
|
||||
result = (SearchResult) searchResults.remove( index );
|
||||
map = result.getFieldMatches();
|
||||
}
|
||||
else
|
||||
{
|
||||
result = new SearchResult();
|
||||
result.setArtifact( factory.createBuildArtifact( model.getGroupId(), model.getArtifactId(),
|
||||
model.getVersion(), model.getPackaging() ) );
|
||||
map = new HashMap();
|
||||
}
|
||||
|
||||
// get the matched value with the query term
|
||||
List values = new ArrayList();
|
||||
if ( field.equals( RepositoryIndex.FLD_LICENSE_URLS ) )
|
||||
{
|
||||
values = getLicenseUrls( model );
|
||||
}
|
||||
else if ( field.equals( RepositoryIndex.FLD_DEPENDENCIES ) )
|
||||
{
|
||||
values = getDependencies( model );
|
||||
}
|
||||
else if ( field.equals( RepositoryIndex.FLD_PLUGINS_BUILD ) )
|
||||
{
|
||||
if ( model.getBuild() != null && model.getBuild().getPlugins() != null )
|
||||
{
|
||||
values = getBuildPlugins( model );
|
||||
}
|
||||
}
|
||||
else if ( field.equals( RepositoryIndex.FLD_PLUGINS_REPORT ) )
|
||||
{
|
||||
if ( model.getReporting() != null && model.getReporting().getPlugins() != null )
|
||||
{
|
||||
values = getReportPlugins( model );
|
||||
}
|
||||
}
|
||||
else if ( field.equals( RepositoryIndex.FLD_PACKAGING ) )
|
||||
{
|
||||
if ( model.getPackaging() != null )
|
||||
{
|
||||
map.put( RepositoryIndex.FLD_PACKAGING, model.getPackaging() );
|
||||
}
|
||||
}
|
||||
|
||||
if ( !values.isEmpty() )
|
||||
{
|
||||
map.put( field, values );
|
||||
}
|
||||
result.setFieldMatches( map );
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Method for getting the query term hits or matches in the pom's license urls.
|
||||
*
|
||||
* @param model the Model object that contains the pom values
|
||||
* @return a List of matched license urls
|
||||
*/
|
||||
private List getLicenseUrls( Model model )
|
||||
{
|
||||
List licenseUrls = new ArrayList();
|
||||
List licenseList = model.getLicenses();
|
||||
for ( Iterator it = licenseList.iterator(); it.hasNext(); )
|
||||
{
|
||||
License license = (License) it.next();
|
||||
licenseUrls.add( license.getUrl() );
|
||||
}
|
||||
return licenseUrls;
|
||||
}
|
||||
|
||||
/**
|
||||
* Method for getting the hits or matches in the dependencies specified in the pom
|
||||
*
|
||||
* @param model the Model object that contains the pom values
|
||||
* @return a List of matched dependencies
|
||||
*/
|
||||
private List getDependencies( Model model )
|
||||
{
|
||||
List dependencies = new ArrayList();
|
||||
List dependencyList = model.getDependencies();
|
||||
for ( Iterator it = dependencyList.iterator(); it.hasNext(); )
|
||||
{
|
||||
Dependency dep = (Dependency) it.next();
|
||||
dependencies.add( getId( dep.getGroupId(), dep.getArtifactId(), dep.getVersion() ) );
|
||||
}
|
||||
|
||||
return dependencies;
|
||||
}
|
||||
|
||||
/**
|
||||
* Method for getting the hits or matches in the build plugins specified in the pom
|
||||
*
|
||||
* @param model the Model object that contains the pom values
|
||||
* @return a List of matched build plugins
|
||||
*/
|
||||
private List getBuildPlugins( Model model )
|
||||
{
|
||||
List values = new ArrayList();
|
||||
List plugins = model.getBuild().getPlugins();
|
||||
for ( Iterator it = plugins.iterator(); it.hasNext(); )
|
||||
{
|
||||
Plugin plugin = (Plugin) it.next();
|
||||
values.add( getId( plugin.getGroupId(), plugin.getArtifactId(), plugin.getVersion() ) );
|
||||
}
|
||||
|
||||
return values;
|
||||
}
|
||||
|
||||
/**
|
||||
* Method for getting the hits or matches in the reporting plugins specified in the pom
|
||||
*
|
||||
* @param model the Model object that contains the pom values
|
||||
* @return a List of matched reporting plugins
|
||||
*/
|
||||
private List getReportPlugins( Model model )
|
||||
{
|
||||
List values = new ArrayList();
|
||||
List plugins = model.getReporting().getPlugins();
|
||||
for ( Iterator it = plugins.iterator(); it.hasNext(); )
|
||||
{
|
||||
ReportPlugin plugin = (ReportPlugin) it.next();
|
||||
values.add( getId( plugin.getGroupId(), plugin.getArtifactId(), plugin.getVersion() ) );
|
||||
}
|
||||
|
||||
return values;
|
||||
}
|
||||
|
||||
}
|
|
@ -22,6 +22,7 @@ import org.apache.lucene.search.Hits;
|
|||
import org.apache.lucene.search.IndexSearcher;
|
||||
import org.apache.maven.artifact.Artifact;
|
||||
import org.apache.maven.artifact.factory.ArtifactFactory;
|
||||
import org.apache.maven.artifact.repository.ArtifactRepository;
|
||||
import org.apache.maven.artifact.repository.metadata.ArtifactRepositoryMetadata;
|
||||
import org.apache.maven.artifact.repository.metadata.GroupRepositoryMetadata;
|
||||
import org.apache.maven.artifact.repository.metadata.Metadata;
|
||||
|
@ -50,40 +51,24 @@ import java.util.StringTokenizer;
|
|||
/**
|
||||
* Implementation Class for searching through the index.
|
||||
*
|
||||
* @todo this is not a component, but extends ALE, meaning logging will throw an exception! -- should be a component
|
||||
* @plexus.component role="org.apache.maven.repository.indexing.RepositoryIndexSearcher"
|
||||
*/
|
||||
public class DefaultRepositoryIndexSearcher
|
||||
extends AbstractLogEnabled
|
||||
implements RepositoryIndexSearcher
|
||||
{
|
||||
protected RepositoryIndex index;
|
||||
|
||||
/**
|
||||
* @plexus.requirement
|
||||
*/
|
||||
private ArtifactFactory factory;
|
||||
|
||||
private List artifactList;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @param index the index object
|
||||
*/
|
||||
protected DefaultRepositoryIndexSearcher( RepositoryIndex index, ArtifactFactory factory )
|
||||
{
|
||||
this.index = index;
|
||||
this.factory = factory;
|
||||
}
|
||||
|
||||
/**
|
||||
* @see RepositoryIndexSearcher#search(org.apache.maven.repository.indexing.query.Query)
|
||||
*/
|
||||
public List search( Query query )
|
||||
public List search( Query query, RepositoryIndex index )
|
||||
throws RepositoryIndexSearchException
|
||||
{
|
||||
artifactList = new ArrayList();
|
||||
org.apache.lucene.search.Query luceneQuery;
|
||||
try
|
||||
{
|
||||
luceneQuery = createLuceneQuery( query );
|
||||
luceneQuery = query.createLuceneQuery( index );
|
||||
}
|
||||
catch ( ParseException e )
|
||||
{
|
||||
|
@ -100,11 +85,15 @@ public class DefaultRepositoryIndexSearcher
|
|||
throw new RepositoryIndexSearchException( "Unable to open index: " + e.getMessage(), e );
|
||||
}
|
||||
|
||||
List docs;
|
||||
List docs = new ArrayList();
|
||||
try
|
||||
{
|
||||
Hits hits = searcher.search( luceneQuery );
|
||||
docs = buildList( hits );
|
||||
for ( int i = 0; i < hits.length(); i++ )
|
||||
{
|
||||
Document doc = hits.doc( i );
|
||||
docs.add( createSearchedObjectFromIndexDocument( doc, index.getRepository() ) );
|
||||
}
|
||||
}
|
||||
catch ( MalformedURLException e )
|
||||
{
|
||||
|
@ -129,44 +118,15 @@ public class DefaultRepositoryIndexSearcher
|
|||
return docs;
|
||||
}
|
||||
|
||||
/**
|
||||
* Method to create a lucene Query object by converting a prepared Query object
|
||||
*
|
||||
* @param query the prepared Query object to be converted into a lucene Query object
|
||||
* @return a lucene Query object to represent the passed Query object
|
||||
* @throws ParseException
|
||||
*/
|
||||
private org.apache.lucene.search.Query createLuceneQuery( Query query )
|
||||
throws ParseException
|
||||
{
|
||||
return query.createLuceneQuery( index );
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a list of artifact objects from the result set.
|
||||
*
|
||||
* @param hits the search result set
|
||||
* @return List
|
||||
*/
|
||||
private List buildList( Hits hits )
|
||||
throws RepositoryIndexSearchException, IOException
|
||||
{
|
||||
for ( int i = 0; i < hits.length(); i++ )
|
||||
{
|
||||
Document doc = hits.doc( i );
|
||||
artifactList.add( createSearchedObjectFromIndexDocument( doc ) );
|
||||
}
|
||||
|
||||
return artifactList;
|
||||
}
|
||||
|
||||
/**
|
||||
* Method for creating the object to be returned for the search
|
||||
*
|
||||
* @param doc the index document where the object field values will be retrieved from
|
||||
* @param doc the index document where the object field values will be retrieved from
|
||||
* @param repository
|
||||
* @return Object
|
||||
*/
|
||||
protected RepositoryIndexSearchHit createSearchedObjectFromIndexDocument( Document doc )
|
||||
protected RepositoryIndexSearchHit createSearchedObjectFromIndexDocument( Document doc,
|
||||
ArtifactRepository repository )
|
||||
throws RepositoryIndexSearchException
|
||||
{
|
||||
RepositoryIndexSearchHit searchHit = null;
|
||||
|
@ -180,8 +140,7 @@ public class DefaultRepositoryIndexSearcher
|
|||
String packaging = doc.get( RepositoryIndex.FLD_PACKAGING );
|
||||
Artifact artifact = factory.createBuildArtifact( groupId, artifactId, version, packaging );
|
||||
|
||||
artifact.setFile(
|
||||
new File( index.getRepository().getBasedir(), index.getRepository().pathOf( artifact ) ) );
|
||||
artifact.setFile( new File( repository.getBasedir(), repository.pathOf( artifact ) ) );
|
||||
|
||||
Map map = new HashMap();
|
||||
map.put( RepositoryIndex.ARTIFACT, artifact );
|
||||
|
@ -201,7 +160,7 @@ public class DefaultRepositoryIndexSearcher
|
|||
Artifact pomArtifact = factory.createProjectArtifact( groupId, artifactId, version );
|
||||
|
||||
searchHit = new RepositoryIndexSearchHit( false, false, true );
|
||||
searchHit.setObject( readPom( pomArtifact ) );
|
||||
searchHit.setObject( readPom( pomArtifact, repository ) );
|
||||
}
|
||||
// the document is of type metadata
|
||||
else if ( doc.get( RepositoryIndex.FLD_DOCTYPE ).equals( RepositoryIndex.METADATA ) )
|
||||
|
@ -233,7 +192,7 @@ public class DefaultRepositoryIndexSearcher
|
|||
repoMetadata = new GroupRepositoryMetadata( groupId );
|
||||
}
|
||||
|
||||
repoMetadata.setMetadata( readMetadata( repoMetadata ) );
|
||||
repoMetadata.setMetadata( readMetadata( repoMetadata, repository ) );
|
||||
|
||||
searchHit = new RepositoryIndexSearchHit( false, true, false );
|
||||
searchHit.setObject( repoMetadata );
|
||||
|
@ -247,11 +206,10 @@ public class DefaultRepositoryIndexSearcher
|
|||
*
|
||||
* @return RepositoryMetadata
|
||||
*/
|
||||
private Metadata readMetadata( RepositoryMetadata repoMetadata )
|
||||
private Metadata readMetadata( RepositoryMetadata repoMetadata, ArtifactRepository repository )
|
||||
throws RepositoryIndexSearchException
|
||||
{
|
||||
File file = new File( index.getRepository().getBasedir(),
|
||||
index.getRepository().pathOfRemoteRepositoryMetadata( repoMetadata ) );
|
||||
File file = new File( repository.getBasedir(), repository.pathOfRemoteRepositoryMetadata( repoMetadata ) );
|
||||
|
||||
MetadataXpp3Reader metadataReader = new MetadataXpp3Reader();
|
||||
|
||||
|
@ -284,10 +242,10 @@ public class DefaultRepositoryIndexSearcher
|
|||
*
|
||||
* @return RepositoryMetadata
|
||||
*/
|
||||
private Model readPom( Artifact pomArtifact )
|
||||
private Model readPom( Artifact pomArtifact, ArtifactRepository repository )
|
||||
throws RepositoryIndexSearchException
|
||||
{
|
||||
File file = new File( index.getRepository().getBasedir(), index.getRepository().pathOf( pomArtifact ) );
|
||||
File file = new File( repository.getBasedir(), repository.pathOf( pomArtifact ) );
|
||||
|
||||
MavenXpp3Reader r = new MavenXpp3Reader();
|
||||
|
||||
|
|
|
@ -23,7 +23,6 @@ import org.apache.maven.repository.digest.Digester;
|
|||
/**
|
||||
* @author Edwin Punzalan
|
||||
* @plexus.component role="org.apache.maven.repository.indexing.RepositoryIndexingFactory"
|
||||
* @todo these methods should be replaced by plexus lookups of some kind!
|
||||
*/
|
||||
public class DefaultRepositoryIndexingFactory
|
||||
implements RepositoryIndexingFactory
|
||||
|
@ -65,20 +64,4 @@ public class DefaultRepositoryIndexingFactory
|
|||
return new MetadataRepositoryIndex( indexPath, repository );
|
||||
}
|
||||
|
||||
/*
|
||||
* @see RepositoryIndexingFactory#createRepositoryIndexSearchLayer(RepositoryIndex)
|
||||
*/
|
||||
public RepositoryIndexSearchLayer createRepositoryIndexSearchLayer( RepositoryIndex index )
|
||||
{
|
||||
return new RepositoryIndexSearchLayer( index, artifactFactory );
|
||||
}
|
||||
|
||||
/**
|
||||
* @see RepositoryIndexingFactory#createDefaultRepositoryIndexSearcher(RepositoryIndex)
|
||||
*/
|
||||
public DefaultRepositoryIndexSearcher createDefaultRepositoryIndexSearcher( RepositoryIndex index )
|
||||
{
|
||||
return new DefaultRepositoryIndexSearcher( index, artifactFactory );
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -1,437 +1,60 @@
|
|||
package org.apache.maven.repository.indexing;
|
||||
|
||||
/*
|
||||
* Copyright 2005-2006 The Apache Software Foundation.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import org.apache.maven.artifact.Artifact;
|
||||
import org.apache.maven.artifact.factory.ArtifactFactory;
|
||||
import org.apache.maven.model.Dependency;
|
||||
import org.apache.maven.model.License;
|
||||
import org.apache.maven.model.Model;
|
||||
import org.apache.maven.model.Plugin;
|
||||
import org.apache.maven.model.ReportPlugin;
|
||||
import org.apache.maven.repository.indexing.query.Query;
|
||||
import org.apache.maven.repository.indexing.query.SinglePhraseQuery;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.StringTokenizer;
|
||||
|
||||
/**
|
||||
* <p/>
|
||||
* This class is to be invoked or called by the action class for
|
||||
* general and advanced searching. It uses the DefaultRepositoryIndexSearcher
|
||||
* to perform the search and constructs the search result objects to be
|
||||
* returned to tha webapp action class.
|
||||
*/
|
||||
public class RepositoryIndexSearchLayer
|
||||
{
|
||||
private RepositoryIndex index;
|
||||
|
||||
private ArtifactFactory factory;
|
||||
|
||||
private List searchResults;
|
||||
|
||||
private List generalSearchResults;
|
||||
|
||||
/**
|
||||
* Class constructor
|
||||
*
|
||||
* @param index
|
||||
*/
|
||||
public RepositoryIndexSearchLayer( RepositoryIndex index, ArtifactFactory factory )
|
||||
{
|
||||
this.index = index;
|
||||
this.factory = factory;
|
||||
}
|
||||
|
||||
/**
|
||||
* Method for searching the keyword in all the fields in the index. "Query everything" search.
|
||||
* The index fields will be retrieved and query objects will be constructed using the
|
||||
* optional (OR) CompoundQuery.
|
||||
*
|
||||
* @param keyword
|
||||
* @return
|
||||
* @throws RepositoryIndexSearchException
|
||||
*/
|
||||
public List searchGeneral( String keyword )
|
||||
throws RepositoryIndexSearchException
|
||||
{
|
||||
generalSearchResults = new ArrayList();
|
||||
for ( int i = 0; i < RepositoryIndex.FIELDS.length; i++ )
|
||||
{
|
||||
Query qry = new SinglePhraseQuery( RepositoryIndex.FIELDS[i], keyword );
|
||||
List results = searchAdvanced( qry );
|
||||
for ( Iterator iter = results.iterator(); iter.hasNext(); )
|
||||
{
|
||||
SearchResult result = (SearchResult) iter.next();
|
||||
Map map = result.getFieldMatches();
|
||||
Set entrySet = map.entrySet();
|
||||
for ( Iterator it = entrySet.iterator(); it.hasNext(); )
|
||||
{
|
||||
Map.Entry entry = (Map.Entry) it.next();
|
||||
SearchResult result2 =
|
||||
createSearchResult( result.getArtifact(), map, keyword, (String) entry.getKey() );
|
||||
generalSearchResults.add( result2 );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return generalSearchResults;
|
||||
}
|
||||
|
||||
/**
|
||||
* Method for "advanced search" of the index
|
||||
*
|
||||
* @param qry the query object that will be used for searching the index
|
||||
* @return
|
||||
* @throws RepositoryIndexSearchException
|
||||
*/
|
||||
public List searchAdvanced( Query qry )
|
||||
throws RepositoryIndexSearchException
|
||||
{
|
||||
RepositoryIndexSearcher searcher = new DefaultRepositoryIndexSearcher( index, factory );
|
||||
searchResults = new ArrayList();
|
||||
|
||||
List hits = searcher.search( qry );
|
||||
for ( Iterator it = hits.iterator(); it.hasNext(); )
|
||||
{
|
||||
RepositoryIndexSearchHit hit = (RepositoryIndexSearchHit) it.next();
|
||||
SearchResult result = new SearchResult();
|
||||
if ( hit.isHashMap() )
|
||||
{
|
||||
Map map = (Map) hit.getObject();
|
||||
result.setArtifact( (Artifact) map.get( RepositoryIndex.ARTIFACT ) );
|
||||
|
||||
Map fields = new HashMap();
|
||||
fields.put( RepositoryIndex.FLD_CLASSES, map.get( RepositoryIndex.FLD_CLASSES ) );
|
||||
fields.put( RepositoryIndex.FLD_PACKAGES, map.get( RepositoryIndex.FLD_PACKAGES ) );
|
||||
fields.put( RepositoryIndex.FLD_FILES, map.get( RepositoryIndex.FLD_FILES ) );
|
||||
fields.put( RepositoryIndex.FLD_PACKAGING, map.get( RepositoryIndex.FLD_PACKAGING ) );
|
||||
fields.put( RepositoryIndex.FLD_SHA1, map.get( RepositoryIndex.FLD_SHA1 ) );
|
||||
fields.put( RepositoryIndex.FLD_MD5, map.get( RepositoryIndex.FLD_MD5 ) );
|
||||
|
||||
result.setFieldMatches( fields );
|
||||
searchResults.add( result );
|
||||
}
|
||||
else if ( hit.isModel() )
|
||||
{
|
||||
Model model = (Model) hit.getObject();
|
||||
for ( int i = 0; i < RepositoryIndex.MODEL_FIELDS.length; i++ )
|
||||
{
|
||||
result = createSearchResult( model, RepositoryIndex.MODEL_FIELDS[i] );
|
||||
searchResults.add( result );
|
||||
}
|
||||
}
|
||||
else if ( hit.isMetadata() )
|
||||
{
|
||||
//@todo what about metadata objects?
|
||||
// RepositoryMetadata metadata = (RepositoryMetadata) hit.getObject();
|
||||
}
|
||||
}
|
||||
|
||||
return searchResults;
|
||||
}
|
||||
|
||||
/**
|
||||
* Method for checking if the artifact already exists in the search result list.
|
||||
*
|
||||
* @param groupId the group id of the artifact
|
||||
* @param artifactId the artifact id of the artifact
|
||||
* @param version the version of the artifact
|
||||
* @return the int index number of the artifact in the search result
|
||||
*/
|
||||
private int getListIndex( String groupId, String artifactId, String version, List list )
|
||||
{
|
||||
int index = 0;
|
||||
for ( Iterator iter = list.iterator(); iter.hasNext(); )
|
||||
{
|
||||
SearchResult result = (SearchResult) iter.next();
|
||||
Artifact artifact = result.getArtifact();
|
||||
if ( artifact.getGroupId().equals( groupId ) && artifact.getArtifactId().equals( artifactId ) &&
|
||||
artifact.getVersion().equals( version ) )
|
||||
{
|
||||
return index;
|
||||
}
|
||||
index++;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
/**
|
||||
* Method to create the unique artifact id to represent the artifact in the repository
|
||||
*
|
||||
* @param groupId the artifact groupId
|
||||
* @param artifactId the artifact artifactId
|
||||
* @param version the artifact version
|
||||
* @return the String id to uniquely represent the artifact
|
||||
*/
|
||||
private String getId( String groupId, String artifactId, String version )
|
||||
{
|
||||
return groupId + ":" + artifactId + ":" + version;
|
||||
}
|
||||
|
||||
/**
|
||||
* Method to get the matching values (packages, classes and files) in the
|
||||
* given string to be tokenized.
|
||||
*
|
||||
* @param tokenizeStr the string to be tokenized
|
||||
* @param key the map key
|
||||
* @param resultMap the map to be populated
|
||||
* @param keyword the value to be matched
|
||||
* @return the map that contains the matched values
|
||||
*/
|
||||
private Map getArtifactHits( String tokenizeStr, String key, Map resultMap, String keyword )
|
||||
{
|
||||
List values = new ArrayList();
|
||||
StringTokenizer st = new StringTokenizer( tokenizeStr, "\n" );
|
||||
while ( st.hasMoreTokens() )
|
||||
{
|
||||
String str = st.nextToken();
|
||||
if ( str.toLowerCase().indexOf( keyword.toLowerCase() ) != -1 )
|
||||
{
|
||||
values.add( str );
|
||||
}
|
||||
}
|
||||
|
||||
if ( !values.isEmpty() )
|
||||
{
|
||||
resultMap.put( key, values );
|
||||
}
|
||||
|
||||
return resultMap;
|
||||
}
|
||||
|
||||
/**
|
||||
* Method to create SearchResult object from a given HashMap. Used for general search results
|
||||
*
|
||||
* @param artifact the retrieved artifact from the index
|
||||
* @param map the HashMap object that contains the values for the search result
|
||||
* @param keyword the query term
|
||||
* @return the SearchResult object
|
||||
*/
|
||||
private SearchResult createSearchResult( Artifact artifact, Map map, String keyword, String field )
|
||||
{
|
||||
int index = getListIndex( artifact.getGroupId(), artifact.getArtifactId(), artifact.getVersion(),
|
||||
generalSearchResults );
|
||||
SearchResult result;
|
||||
Map resultMap;
|
||||
|
||||
if ( index > -1 )
|
||||
{
|
||||
result = (SearchResult) generalSearchResults.get( index );
|
||||
generalSearchResults.remove( index );
|
||||
resultMap = result.getFieldMatches();
|
||||
}
|
||||
else
|
||||
{
|
||||
result = new SearchResult();
|
||||
result.setArtifact( artifact );
|
||||
resultMap = new HashMap();
|
||||
}
|
||||
|
||||
// the searched field is either the class, package or file field
|
||||
if ( field.equals( RepositoryIndex.FLD_CLASSES ) || field.equals( RepositoryIndex.FLD_PACKAGES ) ||
|
||||
field.equals( RepositoryIndex.FLD_FILES ) )
|
||||
{
|
||||
resultMap = getArtifactHits( (String) map.get( field ), field, resultMap, keyword );
|
||||
}
|
||||
else if ( field.equals( RepositoryIndex.FLD_SHA1 ) ||
|
||||
( field.equals( RepositoryIndex.FLD_MD5 ) || field.equals( RepositoryIndex.FLD_PACKAGING ) ) )
|
||||
{
|
||||
if ( map.get( field ) != null )
|
||||
{
|
||||
// the searched field is either the md5, sha1 or packaging field
|
||||
if ( ( (String) map.get( field ) ).toLowerCase().equals( keyword.toLowerCase() ) ||
|
||||
( (String) map.get( field ) ).toLowerCase().indexOf( keyword.toLowerCase() ) != -1 )
|
||||
{
|
||||
resultMap.put( field, map.get( field ) );
|
||||
}
|
||||
}
|
||||
}
|
||||
else if ( field.equals( RepositoryIndex.FLD_DEPENDENCIES ) ||
|
||||
field.equals( RepositoryIndex.FLD_PLUGINS_BUILD ) || field.equals( RepositoryIndex.FLD_PLUGINS_REPORT ) ||
|
||||
field.equals( RepositoryIndex.FLD_LICENSE_URLS ) )
|
||||
{
|
||||
List contents = (List) map.get( field );
|
||||
List values = new ArrayList();
|
||||
for ( Iterator it = contents.iterator(); it.hasNext(); )
|
||||
{
|
||||
String str = (String) it.next();
|
||||
if ( str.toLowerCase().equals( keyword.toLowerCase() ) )
|
||||
{
|
||||
values.add( str );
|
||||
}
|
||||
}
|
||||
if ( values.size() > 0 )
|
||||
{
|
||||
resultMap.put( field, values );
|
||||
}
|
||||
}
|
||||
result.setFieldMatches( resultMap );
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Method to create a SearchResult object from the given model. Used for advanced search results
|
||||
*
|
||||
* @param model the Model object that contains the values for the search result
|
||||
* @param field the field whose value is to be retrieved
|
||||
* @return a SearchResult object
|
||||
*/
|
||||
private SearchResult createSearchResult( Model model, String field )
|
||||
{
|
||||
int index = getListIndex( model.getGroupId(), model.getArtifactId(), model.getVersion(), searchResults );
|
||||
SearchResult result;
|
||||
Map map;
|
||||
|
||||
// the object already exists in the search result list
|
||||
if ( index > -1 )
|
||||
{
|
||||
result = (SearchResult) searchResults.get( index );
|
||||
searchResults.remove( index );
|
||||
map = result.getFieldMatches();
|
||||
}
|
||||
else
|
||||
{
|
||||
result = new SearchResult();
|
||||
result.setArtifact( factory.createBuildArtifact( model.getGroupId(), model.getArtifactId(),
|
||||
model.getVersion(), model.getPackaging() ) );
|
||||
map = new HashMap();
|
||||
}
|
||||
|
||||
// get the matched value with the query term
|
||||
List values = new ArrayList();
|
||||
if ( field.equals( RepositoryIndex.FLD_LICENSE_URLS ) )
|
||||
{
|
||||
values = getLicenseUrls( model );
|
||||
}
|
||||
else if ( field.equals( RepositoryIndex.FLD_DEPENDENCIES ) )
|
||||
{
|
||||
values = getDependencies( model );
|
||||
}
|
||||
else if ( field.equals( RepositoryIndex.FLD_PLUGINS_BUILD ) )
|
||||
{
|
||||
if ( model.getBuild() != null && model.getBuild().getPlugins() != null )
|
||||
{
|
||||
values = getBuildPlugins( model );
|
||||
}
|
||||
}
|
||||
else if ( field.equals( RepositoryIndex.FLD_PLUGINS_REPORT ) )
|
||||
{
|
||||
if ( model.getReporting() != null && model.getReporting().getPlugins() != null )
|
||||
{
|
||||
values = getReportPlugins( model );
|
||||
}
|
||||
}
|
||||
else if ( field.equals( RepositoryIndex.FLD_PACKAGING ) )
|
||||
{
|
||||
if ( model.getPackaging() != null )
|
||||
{
|
||||
map.put( RepositoryIndex.FLD_PACKAGING, model.getPackaging() );
|
||||
}
|
||||
}
|
||||
|
||||
if ( !values.isEmpty() )
|
||||
{
|
||||
map.put( field, values );
|
||||
}
|
||||
result.setFieldMatches( map );
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Method for getting the query term hits or matches in the pom's license urls.
|
||||
*
|
||||
* @param model the Model object that contains the pom values
|
||||
* @return a List of matched license urls
|
||||
*/
|
||||
private List getLicenseUrls( Model model )
|
||||
{
|
||||
List licenseUrls = new ArrayList();
|
||||
List licenseList = model.getLicenses();
|
||||
for ( Iterator it = licenseList.iterator(); it.hasNext(); )
|
||||
{
|
||||
License license = (License) it.next();
|
||||
licenseUrls.add( license.getUrl() );
|
||||
}
|
||||
return licenseUrls;
|
||||
}
|
||||
|
||||
/**
|
||||
* Method for getting the hits or matches in the dependencies specified in the pom
|
||||
*
|
||||
* @param model the Model object that contains the pom values
|
||||
* @return a List of matched dependencies
|
||||
*/
|
||||
private List getDependencies( Model model )
|
||||
{
|
||||
List dependencies = new ArrayList();
|
||||
List dependencyList = model.getDependencies();
|
||||
for ( Iterator it = dependencyList.iterator(); it.hasNext(); )
|
||||
{
|
||||
Dependency dep = (Dependency) it.next();
|
||||
dependencies.add( getId( dep.getGroupId(), dep.getArtifactId(), dep.getVersion() ) );
|
||||
}
|
||||
|
||||
return dependencies;
|
||||
}
|
||||
|
||||
/**
|
||||
* Method for getting the hits or matches in the build plugins specified in the pom
|
||||
*
|
||||
* @param model the Model object that contains the pom values
|
||||
* @return a List of matched build plugins
|
||||
*/
|
||||
private List getBuildPlugins( Model model )
|
||||
{
|
||||
List values = new ArrayList();
|
||||
List plugins = model.getBuild().getPlugins();
|
||||
for ( Iterator it = plugins.iterator(); it.hasNext(); )
|
||||
{
|
||||
Plugin plugin = (Plugin) it.next();
|
||||
values.add( getId( plugin.getGroupId(), plugin.getArtifactId(), plugin.getVersion() ) );
|
||||
}
|
||||
|
||||
return values;
|
||||
}
|
||||
|
||||
/**
|
||||
* Method for getting the hits or matches in the reporting plugins specified in the pom
|
||||
*
|
||||
* @param model the Model object that contains the pom values
|
||||
* @return a List of matched reporting plugins
|
||||
*/
|
||||
private List getReportPlugins( Model model )
|
||||
{
|
||||
List values = new ArrayList();
|
||||
List plugins = model.getReporting().getPlugins();
|
||||
for ( Iterator it = plugins.iterator(); it.hasNext(); )
|
||||
{
|
||||
ReportPlugin plugin = (ReportPlugin) it.next();
|
||||
values.add( getId( plugin.getGroupId(), plugin.getArtifactId(), plugin.getVersion() ) );
|
||||
}
|
||||
|
||||
return values;
|
||||
}
|
||||
|
||||
}
|
||||
package org.apache.maven.repository.indexing;
|
||||
|
||||
/*
|
||||
* Copyright 2005-2006 The Apache Software Foundation.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import org.apache.maven.repository.indexing.query.Query;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Repository search layer.
|
||||
*
|
||||
* @author <a href="mailto:brett@apache.org">Brett Porter</a>
|
||||
*/
|
||||
public interface RepositoryIndexSearchLayer
|
||||
{
|
||||
/**
|
||||
* The Plexus component role name.
|
||||
*/
|
||||
String ROLE = RepositoryIndexSearchLayer.class.getName();
|
||||
|
||||
/**
|
||||
* Method for searching the keyword in all the fields in the index. "Query everything" search.
|
||||
* The index fields will be retrieved and query objects will be constructed using the
|
||||
* optional (OR) CompoundQuery.
|
||||
*
|
||||
* @param keyword
|
||||
* @param index
|
||||
* @return
|
||||
* @throws RepositoryIndexSearchException
|
||||
*
|
||||
*/
|
||||
List searchGeneral( String keyword, RepositoryIndex index )
|
||||
throws RepositoryIndexSearchException;
|
||||
|
||||
/**
|
||||
* Method for "advanced search" of the index
|
||||
*
|
||||
* @param qry the query object that will be used for searching the index
|
||||
* @param index
|
||||
* @return
|
||||
* @throws RepositoryIndexSearchException
|
||||
*
|
||||
*/
|
||||
List searchAdvanced( Query qry, RepositoryIndex index )
|
||||
throws RepositoryIndexSearchException;
|
||||
}
|
||||
|
|
|
@ -25,14 +25,20 @@ import java.util.List;
|
|||
*/
|
||||
public interface RepositoryIndexSearcher
|
||||
{
|
||||
/**
|
||||
* Plexus component role name.
|
||||
*/
|
||||
String ROLE = RepositoryIndexSearcher.class.getName();
|
||||
|
||||
/**
|
||||
* Search the artifact based on the search criteria specified in the query object. Returns a list of
|
||||
* artifact objects.
|
||||
*
|
||||
* @param query The query object that contains the search criteria.
|
||||
* @param index
|
||||
* @return List
|
||||
* @throws RepositoryIndexSearchException
|
||||
*/
|
||||
List search( Query query )
|
||||
List search( Query query, RepositoryIndex index )
|
||||
throws RepositoryIndexSearchException;
|
||||
}
|
||||
|
|
|
@ -59,19 +59,4 @@ public interface RepositoryIndexingFactory
|
|||
MetadataRepositoryIndex createMetadataRepositoryIndex( String indexPath, ArtifactRepository repository )
|
||||
throws RepositoryIndexException;
|
||||
|
||||
/**
|
||||
* Method to create an instance of RepositoryIndexSearchLayer
|
||||
*
|
||||
* @param index the RepositoryIndex object where the query string will be searched
|
||||
* @return the RepositoryIndexSearchLayer instance
|
||||
*/
|
||||
RepositoryIndexSearchLayer createRepositoryIndexSearchLayer( RepositoryIndex index );
|
||||
|
||||
/**
|
||||
* Method to create an instance of DefaultRepositoryIndexSearcher
|
||||
*
|
||||
* @param index the RepositoryIndex object where the query string will be searched
|
||||
* @return the DefaultRepositoryIndexSearcher instance
|
||||
*/
|
||||
DefaultRepositoryIndexSearcher createDefaultRepositoryIndexSearcher( RepositoryIndex index );
|
||||
}
|
||||
|
|
|
@ -161,12 +161,14 @@ public class ArtifactRepositoryIndexingTest
|
|||
createTestIndex();
|
||||
|
||||
RepositoryIndexingFactory factory = (RepositoryIndexingFactory) lookup( RepositoryIndexingFactory.ROLE );
|
||||
RepositoryIndexSearchLayer repoSearchLayer =
|
||||
(RepositoryIndexSearchLayer) lookup( RepositoryIndexSearchLayer.ROLE );
|
||||
|
||||
ArtifactRepositoryIndex indexer = factory.createArtifactRepositoryIndex( indexPath, repository );
|
||||
RepositoryIndexSearchLayer repoSearchLayer = factory.createRepositoryIndexSearchLayer( indexer );
|
||||
|
||||
// search version
|
||||
Query qry = new SinglePhraseQuery( RepositoryIndex.FLD_VERSION, "1.0" );
|
||||
List artifacts = repoSearchLayer.searchAdvanced( qry );
|
||||
List artifacts = repoSearchLayer.searchAdvanced( qry, indexer );
|
||||
assertEquals( 1, artifacts.size() );
|
||||
for ( Iterator iter = artifacts.iterator(); iter.hasNext(); )
|
||||
{
|
||||
|
@ -177,7 +179,7 @@ public class ArtifactRepositoryIndexingTest
|
|||
|
||||
// search classes
|
||||
qry = new SinglePhraseQuery( RepositoryIndex.FLD_CLASSES, "App" );
|
||||
artifacts = repoSearchLayer.searchAdvanced( qry );
|
||||
artifacts = repoSearchLayer.searchAdvanced( qry, indexer );
|
||||
assertEquals( 1, artifacts.size() );
|
||||
for ( Iterator iter = artifacts.iterator(); iter.hasNext(); )
|
||||
{
|
||||
|
@ -188,7 +190,7 @@ public class ArtifactRepositoryIndexingTest
|
|||
|
||||
// search packages
|
||||
qry = new SinglePhraseQuery( RepositoryIndex.FLD_PACKAGES, "groupId" );
|
||||
artifacts = repoSearchLayer.searchAdvanced( qry );
|
||||
artifacts = repoSearchLayer.searchAdvanced( qry, indexer );
|
||||
assertEquals( 1, artifacts.size() );
|
||||
for ( Iterator iter = artifacts.iterator(); iter.hasNext(); )
|
||||
{
|
||||
|
@ -199,7 +201,7 @@ public class ArtifactRepositoryIndexingTest
|
|||
|
||||
// search files
|
||||
qry = new SinglePhraseQuery( RepositoryIndex.FLD_FILES, "pom.xml" );
|
||||
artifacts = repoSearchLayer.searchAdvanced( qry );
|
||||
artifacts = repoSearchLayer.searchAdvanced( qry, indexer );
|
||||
assertEquals( 3, artifacts.size() );
|
||||
Iterator iter = artifacts.iterator();
|
||||
if ( iter.hasNext() )
|
||||
|
@ -211,7 +213,7 @@ public class ArtifactRepositoryIndexingTest
|
|||
|
||||
// search group id
|
||||
qry = new SinglePhraseQuery( RepositoryIndex.FLD_GROUPID, "org.apache.maven" );
|
||||
artifacts = repoSearchLayer.searchAdvanced( qry );
|
||||
artifacts = repoSearchLayer.searchAdvanced( qry, indexer );
|
||||
assertEquals( 2, artifacts.size() );
|
||||
iter = artifacts.iterator();
|
||||
if ( iter.hasNext() )
|
||||
|
@ -223,7 +225,7 @@ public class ArtifactRepositoryIndexingTest
|
|||
|
||||
// search artifact id
|
||||
qry = new SinglePhraseQuery( RepositoryIndex.FLD_ARTIFACTID, "maven-artifact" );
|
||||
artifacts = repoSearchLayer.searchAdvanced( qry );
|
||||
artifacts = repoSearchLayer.searchAdvanced( qry, indexer );
|
||||
assertEquals( 1, artifacts.size() );
|
||||
for ( iter = artifacts.iterator(); iter.hasNext(); )
|
||||
{
|
||||
|
@ -234,7 +236,7 @@ public class ArtifactRepositoryIndexingTest
|
|||
|
||||
// search version
|
||||
qry = new SinglePhraseQuery( RepositoryIndex.FLD_VERSION, "2" );
|
||||
artifacts = repoSearchLayer.searchAdvanced( qry );
|
||||
artifacts = repoSearchLayer.searchAdvanced( qry, indexer );
|
||||
assertEquals( 2, artifacts.size() );
|
||||
for ( iter = artifacts.iterator(); iter.hasNext(); )
|
||||
{
|
||||
|
@ -250,7 +252,7 @@ public class ArtifactRepositoryIndexingTest
|
|||
String sha1 = digester.createChecksum( artifact.getFile(), Digester.SHA1 );
|
||||
|
||||
qry = new SinglePhraseQuery( RepositoryIndex.FLD_SHA1, sha1.trim() );
|
||||
artifacts = repoSearchLayer.searchAdvanced( qry );
|
||||
artifacts = repoSearchLayer.searchAdvanced( qry, indexer );
|
||||
assertEquals( 1, artifacts.size() );
|
||||
for ( iter = artifacts.iterator(); iter.hasNext(); )
|
||||
{
|
||||
|
@ -263,7 +265,7 @@ public class ArtifactRepositoryIndexingTest
|
|||
// search md5 checksum
|
||||
String md5 = digester.createChecksum( artifact.getFile(), Digester.MD5 );
|
||||
qry = new SinglePhraseQuery( RepositoryIndex.FLD_MD5, md5.trim() );
|
||||
artifacts = repoSearchLayer.searchAdvanced( qry );
|
||||
artifacts = repoSearchLayer.searchAdvanced( qry, indexer );
|
||||
assertEquals( 1, artifacts.size() );
|
||||
for ( iter = artifacts.iterator(); iter.hasNext(); )
|
||||
{
|
||||
|
@ -287,9 +289,9 @@ public class ArtifactRepositoryIndexingTest
|
|||
createTestIndex();
|
||||
|
||||
RepositoryIndexingFactory factory = (RepositoryIndexingFactory) lookup( RepositoryIndexingFactory.ROLE );
|
||||
RepositoryIndexSearchLayer repoSearchLayer =
|
||||
(RepositoryIndexSearchLayer) lookup( RepositoryIndexSearchLayer.ROLE );
|
||||
ArtifactRepositoryIndex indexer = factory.createArtifactRepositoryIndex( indexPath, repository );
|
||||
//RepositoryIndexSearcher repoSearchLayer = factory.createDefaultRepositoryIndexSearcher( indexer );
|
||||
RepositoryIndexSearchLayer repoSearchLayer = factory.createRepositoryIndexSearchLayer( indexer );
|
||||
|
||||
// Criteria 1: required query
|
||||
// ex. artifactId=maven-artifact AND groupId=org.apache.maven
|
||||
|
@ -299,7 +301,7 @@ public class ArtifactRepositoryIndexingTest
|
|||
rQry.and( qry1 );
|
||||
rQry.and( qry2 );
|
||||
|
||||
List artifacts = repoSearchLayer.searchAdvanced( rQry );
|
||||
List artifacts = repoSearchLayer.searchAdvanced( rQry, indexer );
|
||||
for ( Iterator iter = artifacts.iterator(); iter.hasNext(); )
|
||||
{
|
||||
SearchResult result = (SearchResult) iter.next();
|
||||
|
@ -316,7 +318,7 @@ public class ArtifactRepositoryIndexingTest
|
|||
oQry.or( rQry );
|
||||
oQry.or( qry3 );
|
||||
|
||||
artifacts = repoSearchLayer.searchAdvanced( oQry );
|
||||
artifacts = repoSearchLayer.searchAdvanced( oQry, indexer );
|
||||
for ( Iterator iter = artifacts.iterator(); iter.hasNext(); )
|
||||
{
|
||||
SearchResult result = (SearchResult) iter.next();
|
||||
|
@ -345,7 +347,7 @@ public class ArtifactRepositoryIndexingTest
|
|||
rQry2.and( rQry );
|
||||
rQry2.or( oQry5 );
|
||||
|
||||
artifacts = repoSearchLayer.searchAdvanced( rQry2 );
|
||||
artifacts = repoSearchLayer.searchAdvanced( rQry2, indexer );
|
||||
for ( Iterator iter = artifacts.iterator(); iter.hasNext(); )
|
||||
{
|
||||
SearchResult result = (SearchResult) iter.next();
|
||||
|
@ -369,7 +371,7 @@ public class ArtifactRepositoryIndexingTest
|
|||
oQry2.and( rQry2 );
|
||||
oQry2.and( rQry3 );
|
||||
|
||||
artifacts = repoSearchLayer.searchAdvanced( oQry2 );
|
||||
artifacts = repoSearchLayer.searchAdvanced( oQry2, indexer );
|
||||
for ( Iterator iter = artifacts.iterator(); iter.hasNext(); )
|
||||
{
|
||||
SearchResult result = (SearchResult) iter.next();
|
||||
|
@ -392,7 +394,7 @@ public class ArtifactRepositoryIndexingTest
|
|||
rQry4.and( qry8 );
|
||||
oQry2.and( rQry4 );
|
||||
|
||||
artifacts = repoSearchLayer.searchAdvanced( oQry2 );
|
||||
artifacts = repoSearchLayer.searchAdvanced( oQry2, indexer );
|
||||
for ( Iterator iter = artifacts.iterator(); iter.hasNext(); )
|
||||
{
|
||||
SearchResult result = (SearchResult) iter.next();
|
||||
|
@ -415,14 +417,15 @@ public class ArtifactRepositoryIndexingTest
|
|||
createTestIndex();
|
||||
|
||||
RepositoryIndexingFactory factory = (RepositoryIndexingFactory) lookup( RepositoryIndexingFactory.ROLE );
|
||||
RepositoryIndexSearchLayer repoSearchLayer =
|
||||
(RepositoryIndexSearchLayer) lookup( RepositoryIndexSearchLayer.ROLE );
|
||||
|
||||
ArtifactRepositoryIndex indexer = factory.createArtifactRepositoryIndex( indexPath, repository );
|
||||
// RepositoryIndexSearcher repoSearchLayer = factory.createDefaultRepositoryIndexSearcher( indexer );
|
||||
RepositoryIndexSearchLayer repoSearchLayer = factory.createRepositoryIndexSearchLayer( indexer );
|
||||
|
||||
try
|
||||
{
|
||||
Query qry = new SinglePhraseQuery( RepositoryIndex.FLD_VERSION, "~~~~~" );
|
||||
repoSearchLayer.searchAdvanced( qry );
|
||||
repoSearchLayer.searchAdvanced( qry, indexer );
|
||||
fail( "Must throw an exception on unparseable query." );
|
||||
}
|
||||
catch ( RepositoryIndexSearchException re )
|
||||
|
@ -431,12 +434,11 @@ public class ArtifactRepositoryIndexingTest
|
|||
}
|
||||
|
||||
indexer = factory.createArtifactRepositoryIndex( "target/index/sample", repository );
|
||||
repoSearchLayer = factory.createRepositoryIndexSearchLayer( indexer );
|
||||
|
||||
try
|
||||
{
|
||||
Query qry = new SinglePhraseQuery( RepositoryIndex.FLD_VERSION, "1.0" );
|
||||
repoSearchLayer.searchAdvanced( qry );
|
||||
repoSearchLayer.searchAdvanced( qry, indexer );
|
||||
fail( "Must throw an exception on invalid index location." );
|
||||
}
|
||||
catch ( RepositoryIndexSearchException re )
|
||||
|
@ -457,15 +459,16 @@ public class ArtifactRepositoryIndexingTest
|
|||
createTestIndex();
|
||||
|
||||
RepositoryIndexingFactory factory = (RepositoryIndexingFactory) lookup( RepositoryIndexingFactory.ROLE );
|
||||
RepositoryIndexSearcher repoSearcher = (RepositoryIndexSearcher) lookup( RepositoryIndexSearcher.ROLE );
|
||||
|
||||
ArtifactRepositoryIndex indexer = factory.createArtifactRepositoryIndex( indexPath, repository );
|
||||
|
||||
Artifact artifact = getArtifact( "org.apache.maven", "maven-artifact", "2.0.1" );
|
||||
artifact.setFile( new File( repository.getBasedir(), repository.pathOf( artifact ) ) );
|
||||
indexer.deleteDocument( RepositoryIndex.FLD_ID, RepositoryIndex.ARTIFACT + artifact.getId() );
|
||||
|
||||
RepositoryIndexSearcher repoSearcher = factory.createDefaultRepositoryIndexSearcher( indexer );
|
||||
Query qry = new SinglePhraseQuery( RepositoryIndex.FLD_ID, RepositoryIndex.ARTIFACT + artifact.getId() );
|
||||
List artifacts = repoSearcher.search( qry );
|
||||
List artifacts = repoSearcher.search( qry, indexer );
|
||||
assertEquals( 0, artifacts.size() );
|
||||
}
|
||||
|
||||
|
|
|
@ -137,13 +137,14 @@ public class MetadataRepositoryIndexingTest
|
|||
createTestIndex();
|
||||
|
||||
RepositoryIndexingFactory factory = (RepositoryIndexingFactory) lookup( RepositoryIndexingFactory.ROLE );
|
||||
RepositoryIndexSearchLayer repoSearchLayer =
|
||||
(RepositoryIndexSearchLayer) lookup( RepositoryIndexSearchLayer.ROLE );
|
||||
|
||||
MetadataRepositoryIndex indexer = factory.createMetadataRepositoryIndex( indexPath, repository );
|
||||
//RepositoryIndexSearcher repoSearchLayer = factory.createDefaultRepositoryIndexSearcher( indexer );
|
||||
RepositoryIndexSearchLayer repoSearchLayer = factory.createRepositoryIndexSearchLayer( indexer );
|
||||
|
||||
// search last update
|
||||
Query qry = new SinglePhraseQuery( RepositoryIndex.FLD_LASTUPDATE, "20051212044643" );
|
||||
List metadataList = repoSearchLayer.searchAdvanced( qry );
|
||||
List metadataList = repoSearchLayer.searchAdvanced( qry, indexer );
|
||||
//assertEquals( 1, metadataList.size() );
|
||||
for ( Iterator iter = metadataList.iterator(); iter.hasNext(); )
|
||||
{
|
||||
|
@ -159,7 +160,7 @@ public class MetadataRepositoryIndexingTest
|
|||
|
||||
// search plugin prefix
|
||||
qry = new SinglePhraseQuery( RepositoryIndex.FLD_PLUGINPREFIX, "org.apache.maven" );
|
||||
metadataList = repoSearchLayer.searchAdvanced( qry );
|
||||
metadataList = repoSearchLayer.searchAdvanced( qry, indexer );
|
||||
//assertEquals( 1, metadataList.size() );
|
||||
for ( Iterator iter = metadataList.iterator(); iter.hasNext(); )
|
||||
{
|
||||
|
@ -184,7 +185,7 @@ public class MetadataRepositoryIndexingTest
|
|||
rQry.addQuery( qry1 );
|
||||
rQry.addQuery( qry2 );
|
||||
|
||||
metadataList = repoSearchLayer.searchAdvanced( rQry );
|
||||
metadataList = repoSearchLayer.searchAdvanced( rQry, indexer );
|
||||
for ( Iterator iter = metadataList.iterator(); iter.hasNext(); )
|
||||
{
|
||||
RepositoryIndexSearchHit hit = (RepositoryIndexSearchHit) iter.next();
|
||||
|
@ -204,7 +205,7 @@ public class MetadataRepositoryIndexingTest
|
|||
rQry.addQuery( qry1 );
|
||||
rQry.addQuery( qry2 );
|
||||
|
||||
metadataList = repoSearchLayer.searchAdvanced( rQry );
|
||||
metadataList = repoSearchLayer.searchAdvanced( rQry, indexer );
|
||||
assertEquals( 0, metadataList.size() );
|
||||
|
||||
indexer.close();
|
||||
|
@ -256,15 +257,16 @@ public class MetadataRepositoryIndexingTest
|
|||
createTestIndex();
|
||||
|
||||
RepositoryIndexingFactory factory = (RepositoryIndexingFactory) lookup( RepositoryIndexingFactory.ROLE );
|
||||
RepositoryIndexSearcher repoSearcher = (RepositoryIndexSearcher) lookup( RepositoryIndexSearcher.ROLE );
|
||||
|
||||
MetadataRepositoryIndex indexer = factory.createMetadataRepositoryIndex( indexPath, repository );
|
||||
|
||||
RepositoryMetadata repoMetadata = new GroupRepositoryMetadata( "org.apache.maven" );
|
||||
repoMetadata.setMetadata( readMetadata( repoMetadata ) );
|
||||
indexer.deleteDocument( RepositoryIndex.FLD_ID, (String) repoMetadata.getKey() );
|
||||
|
||||
RepositoryIndexSearcher repoSearcher = factory.createDefaultRepositoryIndexSearcher( indexer );
|
||||
Query qry = new SinglePhraseQuery( RepositoryIndex.FLD_ID, (String) repoMetadata.getKey() );
|
||||
List metadataList = repoSearcher.search( qry );
|
||||
List metadataList = repoSearcher.search( qry, indexer );
|
||||
assertEquals( 0, metadataList.size() );
|
||||
}
|
||||
|
||||
|
|
|
@ -122,13 +122,14 @@ public class PomRepositoryIndexingTest
|
|||
createTestIndex();
|
||||
|
||||
RepositoryIndexingFactory factory = (RepositoryIndexingFactory) lookup( RepositoryIndexingFactory.ROLE );
|
||||
RepositoryIndexSearchLayer repoSearchLayer =
|
||||
(RepositoryIndexSearchLayer) lookup( RepositoryIndexSearchLayer.ROLE );
|
||||
|
||||
PomRepositoryIndex indexer = factory.createPomRepositoryIndex( indexPath, repository );
|
||||
//RepositoryIndexSearcher repoSearchLayer = factory.createDefaultRepositoryIndexSearcher( indexer );
|
||||
RepositoryIndexSearchLayer repoSearchLayer = factory.createRepositoryIndexSearchLayer( indexer );
|
||||
|
||||
// search version
|
||||
Query qry = new SinglePhraseQuery( RepositoryIndex.FLD_VERSION, "1.0" );
|
||||
List artifactList = repoSearchLayer.searchAdvanced( qry );
|
||||
List artifactList = repoSearchLayer.searchAdvanced( qry, indexer );
|
||||
assertEquals( 1, artifactList.size() );
|
||||
for ( Iterator iter = artifactList.iterator(); iter.hasNext(); )
|
||||
{
|
||||
|
@ -139,7 +140,7 @@ public class PomRepositoryIndexingTest
|
|||
|
||||
// search group id
|
||||
qry = new SinglePhraseQuery( RepositoryIndex.FLD_GROUPID, "org.apache.maven" );
|
||||
artifactList = repoSearchLayer.searchAdvanced( qry );
|
||||
artifactList = repoSearchLayer.searchAdvanced( qry, indexer );
|
||||
assertEquals( 2, artifactList.size() );
|
||||
Iterator artifacts = artifactList.iterator();
|
||||
if ( artifacts.hasNext() )
|
||||
|
@ -151,7 +152,7 @@ public class PomRepositoryIndexingTest
|
|||
|
||||
// search artifact id
|
||||
qry = new SinglePhraseQuery( RepositoryIndex.FLD_ARTIFACTID, "maven-artifact" );
|
||||
artifactList = repoSearchLayer.searchAdvanced( qry );
|
||||
artifactList = repoSearchLayer.searchAdvanced( qry, indexer );
|
||||
assertEquals( 1, artifactList.size() );
|
||||
for ( artifacts = artifactList.iterator(); artifacts.hasNext(); )
|
||||
{
|
||||
|
@ -162,7 +163,7 @@ public class PomRepositoryIndexingTest
|
|||
|
||||
// search version
|
||||
qry = new SinglePhraseQuery( RepositoryIndex.FLD_VERSION, "2" );
|
||||
artifactList = repoSearchLayer.searchAdvanced( qry );
|
||||
artifactList = repoSearchLayer.searchAdvanced( qry, indexer );
|
||||
assertEquals( 2, artifactList.size() );
|
||||
for ( artifacts = artifactList.iterator(); artifacts.hasNext(); )
|
||||
{
|
||||
|
@ -173,7 +174,7 @@ public class PomRepositoryIndexingTest
|
|||
|
||||
// search packaging
|
||||
qry = new SinglePhraseQuery( RepositoryIndex.FLD_PACKAGING, "jar" );
|
||||
artifactList = repoSearchLayer.searchAdvanced( qry );
|
||||
artifactList = repoSearchLayer.searchAdvanced( qry, indexer );
|
||||
assertEquals( 3, artifactList.size() );
|
||||
for ( artifacts = artifactList.iterator(); artifacts.hasNext(); )
|
||||
{
|
||||
|
@ -186,7 +187,7 @@ public class PomRepositoryIndexingTest
|
|||
//search license url
|
||||
qry =
|
||||
new SinglePhraseQuery( RepositoryIndex.FLD_LICENSE_URLS, "http://www.apache.org/licenses/LICENSE-2.0.txt" );
|
||||
artifactList = repoSearchLayer.searchAdvanced( qry );
|
||||
artifactList = repoSearchLayer.searchAdvanced( qry, indexer );
|
||||
assertEquals( 2, artifactList.size() );
|
||||
for ( artifacts = artifactList.iterator(); artifacts.hasNext(); )
|
||||
{
|
||||
|
@ -201,7 +202,7 @@ public class PomRepositoryIndexingTest
|
|||
|
||||
//search dependencies
|
||||
qry = new SinglePhraseQuery( RepositoryIndex.FLD_DEPENDENCIES, "org.codehaus.plexus:plexus-utils:1.0.5" );
|
||||
artifactList = repoSearchLayer.searchAdvanced( qry );
|
||||
artifactList = repoSearchLayer.searchAdvanced( qry, indexer );
|
||||
assertEquals( 2, artifactList.size() );
|
||||
for ( artifacts = artifactList.iterator(); artifacts.hasNext(); )
|
||||
{
|
||||
|
@ -225,7 +226,7 @@ public class PomRepositoryIndexingTest
|
|||
//search build plugin
|
||||
qry =
|
||||
new SinglePhraseQuery( RepositoryIndex.FLD_PLUGINS_BUILD, "org.codehaus.modello:modello-maven-plugin:2.0" );
|
||||
artifactList = repoSearchLayer.searchAdvanced( qry );
|
||||
artifactList = repoSearchLayer.searchAdvanced( qry, indexer );
|
||||
assertEquals( 1, artifactList.size() );
|
||||
for ( artifacts = artifactList.iterator(); artifacts.hasNext(); )
|
||||
{
|
||||
|
@ -249,7 +250,7 @@ public class PomRepositoryIndexingTest
|
|||
//search reporting plugin
|
||||
qry = new SinglePhraseQuery( RepositoryIndex.FLD_PLUGINS_REPORT,
|
||||
"org.apache.maven.plugins:maven-checkstyle-plugin:2.0" );
|
||||
artifactList = repoSearchLayer.searchAdvanced( qry );
|
||||
artifactList = repoSearchLayer.searchAdvanced( qry, indexer );
|
||||
assertEquals( 1, artifactList.size() );
|
||||
for ( artifacts = artifactList.iterator(); artifacts.hasNext(); )
|
||||
{
|
||||
|
@ -276,7 +277,7 @@ public class PomRepositoryIndexingTest
|
|||
String sha1 = digester.createChecksum( artifact.getFile(), Digester.SHA1 );
|
||||
|
||||
qry = new SinglePhraseQuery( RepositoryIndex.FLD_SHA1, sha1.trim() );
|
||||
artifactList = repoSearchLayer.searchAdvanced( qry );
|
||||
artifactList = repoSearchLayer.searchAdvanced( qry, indexer );
|
||||
assertEquals( 1, artifactList.size() );
|
||||
for ( artifacts = artifactList.iterator(); artifacts.hasNext(); )
|
||||
{
|
||||
|
@ -289,7 +290,7 @@ public class PomRepositoryIndexingTest
|
|||
// search md5 checksum
|
||||
String md5 = digester.createChecksum( getPomFile( artifact ), Digester.MD5 );
|
||||
qry = new SinglePhraseQuery( RepositoryIndex.FLD_MD5, md5.trim() );
|
||||
artifactList = repoSearchLayer.searchAdvanced( qry );
|
||||
artifactList = repoSearchLayer.searchAdvanced( qry, indexer );
|
||||
assertEquals( 1, artifactList.size() );
|
||||
for ( artifacts = artifactList.iterator(); artifacts.hasNext(); )
|
||||
{
|
||||
|
@ -313,9 +314,10 @@ public class PomRepositoryIndexingTest
|
|||
createTestIndex();
|
||||
|
||||
RepositoryIndexingFactory factory = (RepositoryIndexingFactory) lookup( RepositoryIndexingFactory.ROLE );
|
||||
RepositoryIndexSearchLayer repoSearchLayer =
|
||||
(RepositoryIndexSearchLayer) lookup( RepositoryIndexSearchLayer.ROLE );
|
||||
|
||||
PomRepositoryIndex indexer = factory.createPomRepositoryIndex( indexPath, repository );
|
||||
//RepositoryIndexSearcher repoSearchLayer = factory.createDefaultRepositoryIndexSearcher( indexer );
|
||||
RepositoryIndexSearchLayer repoSearchLayer = factory.createRepositoryIndexSearchLayer( indexer );
|
||||
|
||||
// Criteria 1: required query
|
||||
// ex. artifactId=maven-artifact AND groupId=org.apache.maven
|
||||
|
@ -325,7 +327,7 @@ public class PomRepositoryIndexingTest
|
|||
rQry.and( qry1 );
|
||||
rQry.and( qry2 );
|
||||
|
||||
List artifacts = repoSearchLayer.searchAdvanced( rQry );
|
||||
List artifacts = repoSearchLayer.searchAdvanced( rQry, indexer );
|
||||
for ( Iterator iter = artifacts.iterator(); iter.hasNext(); )
|
||||
{
|
||||
SearchResult result = (SearchResult) iter.next();
|
||||
|
@ -342,7 +344,7 @@ public class PomRepositoryIndexingTest
|
|||
oQry.and( rQry );
|
||||
oQry.or( qry3 );
|
||||
|
||||
artifacts = repoSearchLayer.searchAdvanced( oQry );
|
||||
artifacts = repoSearchLayer.searchAdvanced( oQry, indexer );
|
||||
for ( Iterator iter = artifacts.iterator(); iter.hasNext(); )
|
||||
{
|
||||
SearchResult result = (SearchResult) iter.next();
|
||||
|
@ -373,7 +375,7 @@ public class PomRepositoryIndexingTest
|
|||
rQry2.and( rQry );
|
||||
rQry2.and( oQry5 );
|
||||
|
||||
artifacts = repoSearchLayer.searchAdvanced( rQry2 );
|
||||
artifacts = repoSearchLayer.searchAdvanced( rQry2, indexer );
|
||||
for ( Iterator iter = artifacts.iterator(); iter.hasNext(); )
|
||||
{
|
||||
SearchResult result = (SearchResult) iter.next();
|
||||
|
@ -397,7 +399,7 @@ public class PomRepositoryIndexingTest
|
|||
oQry2.and( rQry2 );
|
||||
oQry2.and( rQry3 );
|
||||
|
||||
artifacts = repoSearchLayer.searchAdvanced( oQry2 );
|
||||
artifacts = repoSearchLayer.searchAdvanced( oQry2, indexer );
|
||||
for ( Iterator iter = artifacts.iterator(); iter.hasNext(); )
|
||||
{
|
||||
SearchResult result = (SearchResult) iter.next();
|
||||
|
@ -420,7 +422,7 @@ public class PomRepositoryIndexingTest
|
|||
rQry4.and( qry8 );
|
||||
oQry2.and( rQry4 );
|
||||
|
||||
artifacts = repoSearchLayer.searchAdvanced( oQry2 );
|
||||
artifacts = repoSearchLayer.searchAdvanced( oQry2, indexer );
|
||||
for ( Iterator iter = artifacts.iterator(); iter.hasNext(); )
|
||||
{
|
||||
SearchResult result = (SearchResult) iter.next();
|
||||
|
@ -477,13 +479,15 @@ public class PomRepositoryIndexingTest
|
|||
createTestIndex();
|
||||
|
||||
RepositoryIndexingFactory factory = (RepositoryIndexingFactory) lookup( RepositoryIndexingFactory.ROLE );
|
||||
RepositoryIndexSearcher repoSearcher = (RepositoryIndexSearcher) lookup( RepositoryIndexSearcher.ROLE );
|
||||
|
||||
PomRepositoryIndex indexer = factory.createPomRepositoryIndex( indexPath, repository );
|
||||
|
||||
Model pom = getPom( "org.apache.maven", "maven-artifact", "2.0.1" );
|
||||
indexer.deleteDocument( RepositoryIndex.FLD_ID, RepositoryIndex.POM + pom.getId() );
|
||||
|
||||
RepositoryIndexSearcher repoSearcher = factory.createDefaultRepositoryIndexSearcher( indexer );
|
||||
Query qry = new SinglePhraseQuery( RepositoryIndex.FLD_ID, RepositoryIndex.POM + pom.getId() );
|
||||
List artifactList = repoSearcher.search( qry );
|
||||
List artifactList = repoSearcher.search( qry, indexer );
|
||||
assertEquals( 0, artifactList.size() );
|
||||
}
|
||||
|
||||
|
|
|
@ -169,10 +169,11 @@ public class RepositoryIndexSearchLayerTest
|
|||
{
|
||||
createTestIndex();
|
||||
RepositoryIndexingFactory factory = (RepositoryIndexingFactory) lookup( RepositoryIndexingFactory.ROLE );
|
||||
ArtifactRepositoryIndex indexer = factory.createArtifactRepositoryIndex( indexPath, repository );
|
||||
RepositoryIndexSearchLayer searchLayer = factory.createRepositoryIndexSearchLayer( indexer );
|
||||
RepositoryIndexSearchLayer searchLayer = (RepositoryIndexSearchLayer) lookup( RepositoryIndexSearchLayer.ROLE );
|
||||
|
||||
List returnList = searchLayer.searchGeneral( "org.apache.maven" );
|
||||
ArtifactRepositoryIndex indexer = factory.createArtifactRepositoryIndex( indexPath, repository );
|
||||
|
||||
List returnList = searchLayer.searchGeneral( "org.apache.maven", indexer );
|
||||
for ( Iterator iter = returnList.iterator(); iter.hasNext(); )
|
||||
{
|
||||
SearchResult result = (SearchResult) iter.next();
|
||||
|
@ -193,7 +194,7 @@ public class RepositoryIndexSearchLayerTest
|
|||
}
|
||||
|
||||
//POM license urls
|
||||
returnList = searchLayer.searchGeneral( "http://www.apache.org/licenses/LICENSE-2.0.txt" );
|
||||
returnList = searchLayer.searchGeneral( "http://www.apache.org/licenses/LICENSE-2.0.txt", indexer );
|
||||
for ( Iterator iter = returnList.iterator(); iter.hasNext(); )
|
||||
{
|
||||
SearchResult result = (SearchResult) iter.next();
|
||||
|
@ -214,7 +215,7 @@ public class RepositoryIndexSearchLayerTest
|
|||
}
|
||||
|
||||
//POM dependency
|
||||
returnList = searchLayer.searchGeneral( "org.codehaus.plexus:plexus-utils:1.0.5" );
|
||||
returnList = searchLayer.searchGeneral( "org.codehaus.plexus:plexus-utils:1.0.5", indexer );
|
||||
for ( Iterator iter = returnList.iterator(); iter.hasNext(); )
|
||||
{
|
||||
SearchResult result = (SearchResult) iter.next();
|
||||
|
@ -235,7 +236,7 @@ public class RepositoryIndexSearchLayerTest
|
|||
}
|
||||
|
||||
// POM reporting plugin
|
||||
returnList = searchLayer.searchGeneral( "org.apache.maven.plugins:maven-checkstyle-plugin:2.0" );
|
||||
returnList = searchLayer.searchGeneral( "org.apache.maven.plugins:maven-checkstyle-plugin:2.0", indexer );
|
||||
for ( Iterator iter = returnList.iterator(); iter.hasNext(); )
|
||||
{
|
||||
SearchResult result = (SearchResult) iter.next();
|
||||
|
@ -257,7 +258,7 @@ public class RepositoryIndexSearchLayerTest
|
|||
}
|
||||
|
||||
// POM build plugin
|
||||
returnList = searchLayer.searchGeneral( "org.codehaus.modello:modello-maven-plugin:2.0" );
|
||||
returnList = searchLayer.searchGeneral( "org.codehaus.modello:modello-maven-plugin:2.0", indexer );
|
||||
for ( Iterator iter = returnList.iterator(); iter.hasNext(); )
|
||||
{
|
||||
SearchResult result = (SearchResult) iter.next();
|
||||
|
@ -278,7 +279,7 @@ public class RepositoryIndexSearchLayerTest
|
|||
}
|
||||
|
||||
//maven-artifact-2.0.1.jar MD5 checksum
|
||||
returnList = searchLayer.searchGeneral( "F5A934ABBBC70A33136D89A996B9D5C09F652766" );
|
||||
returnList = searchLayer.searchGeneral( "F5A934ABBBC70A33136D89A996B9D5C09F652766", indexer );
|
||||
for ( Iterator iter = returnList.iterator(); iter.hasNext(); )
|
||||
{
|
||||
SearchResult result = (SearchResult) iter.next();
|
||||
|
@ -296,7 +297,7 @@ public class RepositoryIndexSearchLayerTest
|
|||
}
|
||||
|
||||
//maven-artifact-2.0.1.jar SHA1 checksum
|
||||
returnList = searchLayer.searchGeneral( "AE55D9B5720E11B6CF19FE1E31A42E51" );
|
||||
returnList = searchLayer.searchGeneral( "AE55D9B5720E11B6CF19FE1E31A42E51", indexer );
|
||||
for ( Iterator iter = returnList.iterator(); iter.hasNext(); )
|
||||
{
|
||||
SearchResult result = (SearchResult) iter.next();
|
||||
|
@ -313,7 +314,7 @@ public class RepositoryIndexSearchLayerTest
|
|||
}
|
||||
|
||||
//packaging jar
|
||||
returnList = searchLayer.searchGeneral( "jar" );
|
||||
returnList = searchLayer.searchGeneral( "jar", indexer );
|
||||
for ( Iterator iter = returnList.iterator(); iter.hasNext(); )
|
||||
{
|
||||
SearchResult result = (SearchResult) iter.next();
|
||||
|
@ -329,14 +330,14 @@ public class RepositoryIndexSearchLayerTest
|
|||
}
|
||||
}
|
||||
|
||||
returnList = searchLayer.searchGeneral( "test" );
|
||||
returnList = searchLayer.searchGeneral( "test", indexer );
|
||||
for ( Iterator iter = returnList.iterator(); iter.hasNext(); )
|
||||
{
|
||||
SearchResult result = (SearchResult) iter.next();
|
||||
assertEquals( "test", result.getArtifact().getGroupId() );
|
||||
}
|
||||
|
||||
returnList = searchLayer.searchGeneral( "test-artifactId" );
|
||||
returnList = searchLayer.searchGeneral( "test-artifactId", indexer );
|
||||
for ( Iterator iter = returnList.iterator(); iter.hasNext(); )
|
||||
{
|
||||
SearchResult result = (SearchResult) iter.next();
|
||||
|
|
|
@ -47,6 +47,11 @@ public class GeneralSearchAction
|
|||
*/
|
||||
private RepositoryIndexingFactory factory;
|
||||
|
||||
/**
|
||||
* @plexus.requirement
|
||||
*/
|
||||
private RepositoryIndexSearchLayer searchLayer;
|
||||
|
||||
/**
|
||||
* @plexus.requirement
|
||||
*/
|
||||
|
@ -74,9 +79,7 @@ public class GeneralSearchAction
|
|||
|
||||
ArtifactRepositoryIndex index = factory.createArtifactRepositoryIndex( indexPath, repository );
|
||||
|
||||
RepositoryIndexSearchLayer searchLayer = factory.createRepositoryIndexSearchLayer( index );
|
||||
|
||||
searchResult = searchLayer.searchGeneral( searchString );
|
||||
searchResult = searchLayer.searchGeneral( searchString, index );
|
||||
|
||||
return SUCCESS;
|
||||
}
|
||||
|
|
|
@ -57,6 +57,11 @@ public class PackageSearchAction
|
|||
*/
|
||||
private ArtifactRepositoryFactory repositoryFactory;
|
||||
|
||||
/**
|
||||
* @plexus.requirement
|
||||
*/
|
||||
private RepositoryIndexSearchLayer searchLayer;
|
||||
|
||||
/**
|
||||
* @plexus.requirement
|
||||
*/
|
||||
|
@ -94,9 +99,7 @@ public class PackageSearchAction
|
|||
|
||||
ArtifactRepositoryIndex index = factory.createArtifactRepositoryIndex( indexPath, repository );
|
||||
|
||||
RepositoryIndexSearchLayer searchLayer = factory.createRepositoryIndexSearchLayer( index );
|
||||
|
||||
searchResult = searchLayer.searchAdvanced( new SinglePhraseQuery( key, searchTerm ) );
|
||||
searchResult = searchLayer.searchAdvanced( new SinglePhraseQuery( key, searchTerm ), index );
|
||||
|
||||
return SUCCESS;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue