mirror of https://github.com/apache/archiva.git
PR: MRM-34
Added Pom indexer and searcher. Also refactored some common code. git-svn-id: https://svn.apache.org/repos/asf/maven/repository-manager/trunk@366112 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
971aa0de8e
commit
cd29b31cc0
|
@ -18,6 +18,7 @@ package org.apache.maven.repository.indexing;
|
|||
|
||||
import org.apache.lucene.index.IndexReader;
|
||||
import org.apache.lucene.index.IndexWriter;
|
||||
import org.apache.maven.artifact.repository.ArtifactRepository;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
|
@ -39,6 +40,17 @@ public abstract class AbstractRepositoryIndex
|
|||
|
||||
private IndexWriter indexWriter;
|
||||
|
||||
private ArtifactRepository repository;
|
||||
|
||||
public AbstractRepositoryIndex( ArtifactRepository repository, String indexPath )
|
||||
throws RepositoryIndexException
|
||||
{
|
||||
this.repository = repository;
|
||||
this.indexPath = indexPath;
|
||||
|
||||
open( indexPath );
|
||||
}
|
||||
|
||||
/**
|
||||
* method to encapsulate the optimize() method for lucene
|
||||
*/
|
||||
|
@ -186,4 +198,9 @@ public abstract class AbstractRepositoryIndex
|
|||
|
||||
indexOpen = true;
|
||||
}
|
||||
|
||||
public ArtifactRepository getRepository()
|
||||
{
|
||||
return repository;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -39,7 +39,7 @@ import java.util.List;
|
|||
public abstract class AbstractRepositoryIndexSearcher
|
||||
implements RepositoryIndexSearcher
|
||||
{
|
||||
protected ArtifactRepositoryIndex index;
|
||||
protected RepositoryIndex index;
|
||||
|
||||
private BooleanQuery bQry;
|
||||
|
||||
|
@ -52,7 +52,7 @@ public abstract class AbstractRepositoryIndexSearcher
|
|||
*
|
||||
* @param index the index object
|
||||
*/
|
||||
public AbstractRepositoryIndexSearcher( ArtifactRepositoryIndex index )
|
||||
public AbstractRepositoryIndexSearcher( RepositoryIndex index )
|
||||
{
|
||||
this.index = index;
|
||||
}
|
||||
|
|
|
@ -41,39 +41,36 @@ import java.util.zip.ZipFile;
|
|||
public class ArtifactRepositoryIndex
|
||||
extends AbstractRepositoryIndex
|
||||
{
|
||||
private static final String NAME = "name";
|
||||
protected static final String FLD_NAME = "name";
|
||||
|
||||
private static final String GROUPID = "groupId";
|
||||
protected static final String FLD_GROUPID = "groupId";
|
||||
|
||||
private static final String ARTIFACTID = "artifactId";
|
||||
protected static final String FLD_ARTIFACTID = "artifactId";
|
||||
|
||||
private static final String VERSION = "version";
|
||||
protected static final String FLD_VERSION = "version";
|
||||
|
||||
private static final String SHA1 = "sha1";
|
||||
protected static final String FLD_SHA1 = "sha1";
|
||||
|
||||
private static final String MD5 = "md5";
|
||||
protected static final String FLD_MD5 = "md5";
|
||||
|
||||
private static final String CLASSES = "classes";
|
||||
protected static final String FLD_CLASSES = "classes";
|
||||
|
||||
private static final String PACKAGES = "packages";
|
||||
protected static final String FLD_PACKAGES = "packages";
|
||||
|
||||
private static final String FILES = "files";
|
||||
protected static final String FLD_FILES = "files";
|
||||
|
||||
private static final String[] FIELDS = {NAME, GROUPID, ARTIFACTID, VERSION, SHA1, MD5, CLASSES, PACKAGES, FILES};
|
||||
private static final String[] FIELDS =
|
||||
{FLD_NAME, FLD_GROUPID, FLD_ARTIFACTID, FLD_VERSION, FLD_SHA1, FLD_MD5, FLD_CLASSES, FLD_PACKAGES, FLD_FILES};
|
||||
|
||||
private Analyzer analyzer;
|
||||
|
||||
private Digester digester;
|
||||
|
||||
private ArtifactRepository repository;
|
||||
|
||||
public ArtifactRepositoryIndex( String indexPath, ArtifactRepository repository, Digester digester )
|
||||
throws RepositoryIndexException
|
||||
{
|
||||
this.repository = repository;
|
||||
super( repository, indexPath );
|
||||
this.digester = digester;
|
||||
|
||||
open( indexPath );
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -175,15 +172,15 @@ public class ArtifactRepositoryIndex
|
|||
|
||||
//@todo should some of these fields be Keyword instead of Text ?
|
||||
Document doc = new Document();
|
||||
doc.add( Field.Text( NAME, artifact.getFile().getName() ) );
|
||||
doc.add( Field.Text( GROUPID, artifact.getGroupId() ) );
|
||||
doc.add( Field.Text( ARTIFACTID, artifact.getArtifactId() ) );
|
||||
doc.add( Field.Text( VERSION, artifact.getVersion() ) );
|
||||
doc.add( Field.Text( SHA1, sha1sum ) );
|
||||
doc.add( Field.Text( MD5, md5sum ) );
|
||||
doc.add( Field.Text( CLASSES, classes.toString() ) );
|
||||
doc.add( Field.Text( PACKAGES, packages.toString() ) );
|
||||
doc.add( Field.Text( FILES, files.toString() ) );
|
||||
doc.add( Field.Text( FLD_NAME, artifact.getFile().getName() ) );
|
||||
doc.add( Field.Text( FLD_GROUPID, artifact.getGroupId() ) );
|
||||
doc.add( Field.Text( FLD_ARTIFACTID, artifact.getArtifactId() ) );
|
||||
doc.add( Field.Text( FLD_VERSION, artifact.getVersion() ) );
|
||||
doc.add( Field.Text( FLD_SHA1, sha1sum ) );
|
||||
doc.add( Field.Text( FLD_MD5, md5sum ) );
|
||||
doc.add( Field.Text( FLD_CLASSES, classes.toString() ) );
|
||||
doc.add( Field.Text( FLD_PACKAGES, packages.toString() ) );
|
||||
doc.add( Field.Text( FLD_FILES, files.toString() ) );
|
||||
|
||||
try
|
||||
{
|
||||
|
@ -256,9 +253,4 @@ public class ArtifactRepositoryIndex
|
|||
|
||||
return isAdded;
|
||||
}
|
||||
|
||||
public ArtifactRepository getRepository()
|
||||
{
|
||||
return repository;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -32,14 +32,6 @@ import java.io.File;
|
|||
public class ArtifactRepositoryIndexSearcher
|
||||
extends AbstractRepositoryIndexSearcher
|
||||
{
|
||||
private static final String NAME = "name";
|
||||
|
||||
private static final String GROUPID = "groupId";
|
||||
|
||||
private static final String ARTIFACTID = "artifactId";
|
||||
|
||||
private static final String VERSION = "version";
|
||||
|
||||
private ArtifactFactory factory;
|
||||
|
||||
private BooleanQuery bQry;
|
||||
|
@ -62,10 +54,10 @@ public class ArtifactRepositoryIndexSearcher
|
|||
|
||||
protected Object createSearchedObjectFromIndexDocument( Document doc )
|
||||
{
|
||||
String groupId = doc.get( GROUPID );
|
||||
String artifactId = doc.get( ARTIFACTID );
|
||||
String version = doc.get( VERSION );
|
||||
String name = doc.get( NAME );
|
||||
String groupId = doc.get( ArtifactRepositoryIndex.FLD_GROUPID );
|
||||
String artifactId = doc.get( ArtifactRepositoryIndex.FLD_ARTIFACTID );
|
||||
String version = doc.get( ArtifactRepositoryIndex.FLD_VERSION );
|
||||
String name = doc.get( ArtifactRepositoryIndex.FLD_NAME );
|
||||
String packaging = name.substring( name.lastIndexOf( '.' ) + 1 );
|
||||
Artifact artifact = factory.createBuildArtifact( groupId, artifactId, version, packaging );
|
||||
String groupIdTemp = groupId.replace( '.', '/' );
|
||||
|
|
|
@ -0,0 +1,166 @@
|
|||
package org.apache.maven.repository.indexing;
|
||||
|
||||
/*
|
||||
* Copyright 2001-2005 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.lucene.analysis.Analyzer;
|
||||
import org.apache.lucene.analysis.SimpleAnalyzer;
|
||||
import org.apache.lucene.document.Document;
|
||||
import org.apache.lucene.document.Field;
|
||||
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.artifact.repository.ArtifactRepository;
|
||||
import org.codehaus.plexus.util.StringUtils;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.Iterator;
|
||||
|
||||
/**
|
||||
* @author Edwin Punzalan
|
||||
*/
|
||||
public class PomRepositoryIndex
|
||||
extends AbstractRepositoryIndex
|
||||
{
|
||||
protected static final String FLD_GROUPID = "groupId";
|
||||
|
||||
protected static final String FLD_ARTIFACTID = "artifactId";
|
||||
|
||||
protected static final String FLD_VERSION = "version";
|
||||
|
||||
protected static final String FLD_PACKAGING = "packaging";
|
||||
|
||||
protected static final String FLD_LICENSE_URLS = "license_urls";
|
||||
|
||||
protected static final String FLD_DEPENDENCIES = "dependencies";
|
||||
|
||||
protected static final String FLD_PLUGINS_BUILD = "plugins_build";
|
||||
|
||||
protected static final String FLD_PLUGINS_REPORT = "plugins_report";
|
||||
|
||||
protected static final String FLD_PLUGINS_ALL = "plugins_all";
|
||||
|
||||
private static final String[] FIELDS = {FLD_GROUPID, FLD_ARTIFACTID, FLD_VERSION, FLD_PACKAGING, FLD_LICENSE_URLS, FLD_DEPENDENCIES,
|
||||
FLD_PLUGINS_BUILD, FLD_PLUGINS_REPORT, FLD_PLUGINS_ALL};
|
||||
|
||||
private Analyzer analyzer;
|
||||
|
||||
public PomRepositoryIndex( ArtifactRepository repository, String indexPath )
|
||||
throws RepositoryIndexException
|
||||
{
|
||||
super( repository, indexPath );
|
||||
}
|
||||
|
||||
public Analyzer getAnalyzer()
|
||||
{
|
||||
if ( analyzer == null )
|
||||
{
|
||||
analyzer = new SimpleAnalyzer();
|
||||
}
|
||||
|
||||
return analyzer;
|
||||
}
|
||||
|
||||
public void index( Object obj )
|
||||
throws RepositoryIndexException
|
||||
{
|
||||
if ( obj instanceof Model )
|
||||
{
|
||||
indexModel( (Model) obj );
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new RepositoryIndexException(
|
||||
"This instance of indexer cannot index instances of " + obj.getClass().getName() );
|
||||
}
|
||||
}
|
||||
|
||||
public String[] getIndexFields()
|
||||
{
|
||||
return FIELDS;
|
||||
}
|
||||
|
||||
public void indexModel( Model pom )
|
||||
throws RepositoryIndexException
|
||||
{
|
||||
if ( !isOpen() )
|
||||
{
|
||||
throw new RepositoryIndexException( "Unable to add pom index on a closed index" );
|
||||
}
|
||||
|
||||
Document doc = new Document();
|
||||
doc.add( Field.Text( FLD_GROUPID, pom.getGroupId() ) );
|
||||
doc.add( Field.Text( FLD_ARTIFACTID, pom.getArtifactId() ) );
|
||||
doc.add( Field.Text( FLD_VERSION, pom.getVersion() ) );
|
||||
doc.add( Field.Keyword( FLD_PACKAGING, pom.getPackaging() ) );
|
||||
|
||||
indexLicenseUrls( doc, pom.getLicenses().iterator() );
|
||||
indexDependencies( doc, pom.getDependencies().iterator() );
|
||||
indexPlugins( doc, FLD_PLUGINS_BUILD, pom.getBuild().getPlugins().iterator() );
|
||||
indexPlugins( doc, FLD_PLUGINS_REPORT, pom.getReporting().getPlugins().iterator() );
|
||||
indexPlugins( doc, FLD_PLUGINS_ALL, pom.getBuild().getPlugins().iterator() );
|
||||
indexPlugins( doc, FLD_PLUGINS_ALL, pom.getReporting().getPlugins().iterator() );
|
||||
|
||||
try
|
||||
{
|
||||
getIndexWriter().addDocument( doc );
|
||||
}
|
||||
catch ( IOException e )
|
||||
{
|
||||
throw new RepositoryIndexException( "Error opening index", e );
|
||||
}
|
||||
}
|
||||
|
||||
private void indexLicenseUrls( Document doc, Iterator licenses )
|
||||
{
|
||||
while ( licenses.hasNext() )
|
||||
{
|
||||
License license = (License) licenses.next();
|
||||
String url = license.getUrl();
|
||||
if ( StringUtils.isNotEmpty( url ) )
|
||||
{
|
||||
doc.add( Field.Keyword( FLD_LICENSE_URLS, url ) );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void indexDependencies( Document doc, Iterator dependencies )
|
||||
{
|
||||
while ( dependencies.hasNext() )
|
||||
{
|
||||
Dependency dep = (Dependency) dependencies.next();
|
||||
String id = getId( dep.getGroupId(), dep.getArtifactId(), dep.getVersion() );
|
||||
doc.add( Field.Keyword( FLD_DEPENDENCIES, id ) );
|
||||
}
|
||||
}
|
||||
|
||||
private void indexPlugins( Document doc, String field, Iterator plugins )
|
||||
{
|
||||
while ( plugins.hasNext() )
|
||||
{
|
||||
Plugin plugin = (Plugin) plugins.next();
|
||||
String id = getId( plugin.getGroupId(), plugin.getArtifactId(), plugin.getVersion() );
|
||||
doc.add( Field.Keyword( field, id ) );
|
||||
}
|
||||
}
|
||||
|
||||
private String getId( String groupId, String artifactId, String version )
|
||||
{
|
||||
return groupId + ":" + artifactId + ":" + version;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,52 @@
|
|||
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.lucene.document.Document;
|
||||
import org.apache.maven.artifact.factory.ArtifactFactory;
|
||||
|
||||
/**
|
||||
* @author Edwin Punzalan
|
||||
*/
|
||||
public class PomRepositoryIndexSearcher
|
||||
extends AbstractRepositoryIndexSearcher
|
||||
{
|
||||
private static final String GROUPID = "groupId";
|
||||
|
||||
private static final String ARTIFACTID = "artifactId";
|
||||
|
||||
private static final String VERSION = "version";
|
||||
|
||||
private static final String PACKAGING = "packaging";
|
||||
|
||||
private ArtifactFactory factory;
|
||||
|
||||
public PomRepositoryIndexSearcher( RepositoryIndex index, ArtifactFactory artifactFactory )
|
||||
{
|
||||
super( index );
|
||||
this.factory = artifactFactory;
|
||||
}
|
||||
|
||||
protected Object createSearchedObjectFromIndexDocument( Document doc )
|
||||
{
|
||||
String groupId = doc.get( PomRepositoryIndex.FLD_GROUPID ) ;
|
||||
String artifactId = doc.get( PomRepositoryIndex.FLD_ARTIFACTID );
|
||||
String version = doc.get( PomRepositoryIndex.FLD_VERSION );
|
||||
String packaging = doc.get( PomRepositoryIndex.FLD_PACKAGING );
|
||||
return factory.createBuildArtifact( groupId, artifactId, version, packaging );
|
||||
}
|
||||
}
|
|
@ -17,6 +17,7 @@ package org.apache.maven.repository.indexing;
|
|||
*/
|
||||
|
||||
import org.apache.lucene.analysis.Analyzer;
|
||||
import org.apache.maven.artifact.repository.ArtifactRepository;
|
||||
|
||||
/**
|
||||
* @author Edwin Punzalan
|
||||
|
@ -35,9 +36,7 @@ public interface RepositoryIndex
|
|||
void close()
|
||||
throws RepositoryIndexException;
|
||||
|
||||
/* void open( String indexPath )
|
||||
throws RepositoryIndexException;
|
||||
*/
|
||||
ArtifactRepository getRepository();
|
||||
|
||||
void optimize()
|
||||
throws RepositoryIndexException;
|
||||
|
|
Loading…
Reference in New Issue