From eba7bf274a9560283fe56d5f7e53e244ae6e655b Mon Sep 17 00:00:00 2001 From: Brett Porter Date: Thu, 8 Jun 2006 03:54:06 +0000 Subject: [PATCH] [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 --- .../manager/cli/IndexSearcherCli.java | 6 +- .../indexing/AbstractRepositoryIndex.java | 8 +- .../DefaultRepositoryIndexSearchLayer.java | 412 +++++++++++++++ .../DefaultRepositoryIndexSearcher.java | 90 +--- .../DefaultRepositoryIndexingFactory.java | 17 - .../indexing/RepositoryIndexSearchLayer.java | 497 +++--------------- .../indexing/RepositoryIndexSearcher.java | 8 +- .../indexing/RepositoryIndexingFactory.java | 15 - .../ArtifactRepositoryIndexingTest.java | 51 +- .../MetadataRepositoryIndexingTest.java | 18 +- .../indexing/PomRepositoryIndexingTest.java | 48 +- .../RepositoryIndexSearchLayerTest.java | 25 +- .../web/action/GeneralSearchAction.java | 9 +- .../web/action/PackageSearchAction.java | 9 +- 14 files changed, 600 insertions(+), 613 deletions(-) create mode 100644 maven-repository-indexer/src/main/java/org/apache/maven/repository/indexing/DefaultRepositoryIndexSearchLayer.java diff --git a/maven-repository-application/src/main/java/org/apache/maven/repository/manager/cli/IndexSearcherCli.java b/maven-repository-application/src/main/java/org/apache/maven/repository/manager/cli/IndexSearcherCli.java index 97470feff..b7e410bb3 100644 --- a/maven-repository-application/src/main/java/org/apache/maven/repository/manager/cli/IndexSearcherCli.java +++ b/maven-repository-application/src/main/java/org/apache/maven/repository/manager/cli/IndexSearcherCli.java @@ -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 { diff --git a/maven-repository-indexer/src/main/java/org/apache/maven/repository/indexing/AbstractRepositoryIndex.java b/maven-repository-indexer/src/main/java/org/apache/maven/repository/indexing/AbstractRepositoryIndex.java index 32f514a05..5617dc85d 100644 --- a/maven-repository-indexer/src/main/java/org/apache/maven/repository/indexing/AbstractRepositoryIndex.java +++ b/maven-repository-indexer/src/main/java/org/apache/maven/repository/indexing/AbstractRepositoryIndex.java @@ -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 { diff --git a/maven-repository-indexer/src/main/java/org/apache/maven/repository/indexing/DefaultRepositoryIndexSearchLayer.java b/maven-repository-indexer/src/main/java/org/apache/maven/repository/indexing/DefaultRepositoryIndexSearchLayer.java new file mode 100644 index 000000000..da6bd6bb1 --- /dev/null +++ b/maven-repository-indexer/src/main/java/org/apache/maven/repository/indexing/DefaultRepositoryIndexSearchLayer.java @@ -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; + } + +} diff --git a/maven-repository-indexer/src/main/java/org/apache/maven/repository/indexing/DefaultRepositoryIndexSearcher.java b/maven-repository-indexer/src/main/java/org/apache/maven/repository/indexing/DefaultRepositoryIndexSearcher.java index 61045e2ac..f83c0d5de 100644 --- a/maven-repository-indexer/src/main/java/org/apache/maven/repository/indexing/DefaultRepositoryIndexSearcher.java +++ b/maven-repository-indexer/src/main/java/org/apache/maven/repository/indexing/DefaultRepositoryIndexSearcher.java @@ -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(); diff --git a/maven-repository-indexer/src/main/java/org/apache/maven/repository/indexing/DefaultRepositoryIndexingFactory.java b/maven-repository-indexer/src/main/java/org/apache/maven/repository/indexing/DefaultRepositoryIndexingFactory.java index 7c2af3ec0..62276d717 100644 --- a/maven-repository-indexer/src/main/java/org/apache/maven/repository/indexing/DefaultRepositoryIndexingFactory.java +++ b/maven-repository-indexer/src/main/java/org/apache/maven/repository/indexing/DefaultRepositoryIndexingFactory.java @@ -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 ); - } - } diff --git a/maven-repository-indexer/src/main/java/org/apache/maven/repository/indexing/RepositoryIndexSearchLayer.java b/maven-repository-indexer/src/main/java/org/apache/maven/repository/indexing/RepositoryIndexSearchLayer.java index eccd574b0..94ef76d53 100644 --- a/maven-repository-indexer/src/main/java/org/apache/maven/repository/indexing/RepositoryIndexSearchLayer.java +++ b/maven-repository-indexer/src/main/java/org/apache/maven/repository/indexing/RepositoryIndexSearchLayer.java @@ -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; - -/** - *

- * 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 Brett Porter + */ +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; +} diff --git a/maven-repository-indexer/src/main/java/org/apache/maven/repository/indexing/RepositoryIndexSearcher.java b/maven-repository-indexer/src/main/java/org/apache/maven/repository/indexing/RepositoryIndexSearcher.java index dfc155ae3..464e54728 100644 --- a/maven-repository-indexer/src/main/java/org/apache/maven/repository/indexing/RepositoryIndexSearcher.java +++ b/maven-repository-indexer/src/main/java/org/apache/maven/repository/indexing/RepositoryIndexSearcher.java @@ -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; } diff --git a/maven-repository-indexer/src/main/java/org/apache/maven/repository/indexing/RepositoryIndexingFactory.java b/maven-repository-indexer/src/main/java/org/apache/maven/repository/indexing/RepositoryIndexingFactory.java index f1e16b074..8a8891d15 100644 --- a/maven-repository-indexer/src/main/java/org/apache/maven/repository/indexing/RepositoryIndexingFactory.java +++ b/maven-repository-indexer/src/main/java/org/apache/maven/repository/indexing/RepositoryIndexingFactory.java @@ -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 ); } diff --git a/maven-repository-indexer/src/test/java/org/apache/maven/repository/indexing/ArtifactRepositoryIndexingTest.java b/maven-repository-indexer/src/test/java/org/apache/maven/repository/indexing/ArtifactRepositoryIndexingTest.java index 403232be8..fce15eefe 100644 --- a/maven-repository-indexer/src/test/java/org/apache/maven/repository/indexing/ArtifactRepositoryIndexingTest.java +++ b/maven-repository-indexer/src/test/java/org/apache/maven/repository/indexing/ArtifactRepositoryIndexingTest.java @@ -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() ); } diff --git a/maven-repository-indexer/src/test/java/org/apache/maven/repository/indexing/MetadataRepositoryIndexingTest.java b/maven-repository-indexer/src/test/java/org/apache/maven/repository/indexing/MetadataRepositoryIndexingTest.java index cdf0d2d3e..34e80e2a0 100644 --- a/maven-repository-indexer/src/test/java/org/apache/maven/repository/indexing/MetadataRepositoryIndexingTest.java +++ b/maven-repository-indexer/src/test/java/org/apache/maven/repository/indexing/MetadataRepositoryIndexingTest.java @@ -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() ); } diff --git a/maven-repository-indexer/src/test/java/org/apache/maven/repository/indexing/PomRepositoryIndexingTest.java b/maven-repository-indexer/src/test/java/org/apache/maven/repository/indexing/PomRepositoryIndexingTest.java index 4300be481..a7087736f 100644 --- a/maven-repository-indexer/src/test/java/org/apache/maven/repository/indexing/PomRepositoryIndexingTest.java +++ b/maven-repository-indexer/src/test/java/org/apache/maven/repository/indexing/PomRepositoryIndexingTest.java @@ -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() ); } diff --git a/maven-repository-indexer/src/test/java/org/apache/maven/repository/indexing/RepositoryIndexSearchLayerTest.java b/maven-repository-indexer/src/test/java/org/apache/maven/repository/indexing/RepositoryIndexSearchLayerTest.java index 12d0a2f7e..9c48ddc23 100644 --- a/maven-repository-indexer/src/test/java/org/apache/maven/repository/indexing/RepositoryIndexSearchLayerTest.java +++ b/maven-repository-indexer/src/test/java/org/apache/maven/repository/indexing/RepositoryIndexSearchLayerTest.java @@ -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(); diff --git a/maven-repository-webapp/src/main/java/org/apache/maven/repository/manager/web/action/GeneralSearchAction.java b/maven-repository-webapp/src/main/java/org/apache/maven/repository/manager/web/action/GeneralSearchAction.java index 459a8d408..b80ab6013 100644 --- a/maven-repository-webapp/src/main/java/org/apache/maven/repository/manager/web/action/GeneralSearchAction.java +++ b/maven-repository-webapp/src/main/java/org/apache/maven/repository/manager/web/action/GeneralSearchAction.java @@ -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; } diff --git a/maven-repository-webapp/src/main/java/org/apache/maven/repository/manager/web/action/PackageSearchAction.java b/maven-repository-webapp/src/main/java/org/apache/maven/repository/manager/web/action/PackageSearchAction.java index b13a48416..543b45143 100644 --- a/maven-repository-webapp/src/main/java/org/apache/maven/repository/manager/web/action/PackageSearchAction.java +++ b/maven-repository-webapp/src/main/java/org/apache/maven/repository/manager/web/action/PackageSearchAction.java @@ -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; }