You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by ep...@apache.org on 2006/01/16 09:54:23 UTC
svn commit: r369402 - in
/maven/repository-manager/trunk/maven-repository-indexer: ./
src/main/java/org/apache/maven/repository/indexing/
src/main/java/org/apache/maven/repository/indexing/query/
src/test/java/org/apache/maven/repository/indexing/ src/...
Author: epunzalan
Date: Mon Jan 16 00:53:09 2006
New Revision: 369402
URL: http://svn.apache.org/viewcvs?rev=369402&view=rev
Log:
PR: MEV-35
Submitted by: Maria Odea Ching
Applied patch for indexing metadata and for searching the metadata index
Added:
maven/repository-manager/trunk/maven-repository-indexer/src/main/java/org/apache/maven/repository/indexing/MetadataRepositoryIndex.java
maven/repository-manager/trunk/maven-repository-indexer/src/main/java/org/apache/maven/repository/indexing/MetadataRepositoryIndexSearcher.java
maven/repository-manager/trunk/maven-repository-indexer/src/main/java/org/apache/maven/repository/indexing/query/RangeQuery.java
maven/repository-manager/trunk/maven-repository-indexer/src/test/java/org/apache/maven/repository/indexing/MetadataRepositoryIndexingTest.java
maven/repository-manager/trunk/maven-repository-indexer/src/test/repository/org/apache/maven/maven-artifact/2.0.1/maven-metadata.xml
maven/repository-manager/trunk/maven-repository-indexer/src/test/repository/org/apache/maven/maven-artifact/maven-metadata.xml
maven/repository-manager/trunk/maven-repository-indexer/src/test/repository/org/apache/maven/maven-metadata.xml
Modified:
maven/repository-manager/trunk/maven-repository-indexer/pom.xml
maven/repository-manager/trunk/maven-repository-indexer/src/main/java/org/apache/maven/repository/indexing/AbstractRepositoryIndexSearcher.java
maven/repository-manager/trunk/maven-repository-indexer/src/main/java/org/apache/maven/repository/indexing/DefaultRepositoryIndexingFactory.java
maven/repository-manager/trunk/maven-repository-indexer/src/main/java/org/apache/maven/repository/indexing/RepositoryIndexingFactory.java
Modified: maven/repository-manager/trunk/maven-repository-indexer/pom.xml
URL: http://svn.apache.org/viewcvs/maven/repository-manager/trunk/maven-repository-indexer/pom.xml?rev=369402&r1=369401&r2=369402&view=diff
==============================================================================
--- maven/repository-manager/trunk/maven-repository-indexer/pom.xml (original)
+++ maven/repository-manager/trunk/maven-repository-indexer/pom.xml Mon Jan 16 00:53:09 2006
@@ -32,7 +32,6 @@
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-artifact-manager</artifactId>
- <scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.maven</groupId>
@@ -54,6 +53,10 @@
<dependency>
<groupId>org.apache.maven.repository</groupId>
<artifactId>maven-repository-utils</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-repository-metadata</artifactId>
</dependency>
</dependencies>
</project>
Modified: maven/repository-manager/trunk/maven-repository-indexer/src/main/java/org/apache/maven/repository/indexing/AbstractRepositoryIndexSearcher.java
URL: http://svn.apache.org/viewcvs/maven/repository-manager/trunk/maven-repository-indexer/src/main/java/org/apache/maven/repository/indexing/AbstractRepositoryIndexSearcher.java?rev=369402&r1=369401&r2=369402&view=diff
==============================================================================
--- maven/repository-manager/trunk/maven-repository-indexer/src/main/java/org/apache/maven/repository/indexing/AbstractRepositoryIndexSearcher.java (original)
+++ maven/repository-manager/trunk/maven-repository-indexer/src/main/java/org/apache/maven/repository/indexing/AbstractRepositoryIndexSearcher.java Mon Jan 16 00:53:09 2006
@@ -28,6 +28,7 @@
import org.apache.maven.repository.indexing.query.CompoundQueryTerm;
import org.apache.maven.repository.indexing.query.Query;
import org.apache.maven.repository.indexing.query.SinglePhraseQuery;
+import org.apache.maven.repository.indexing.query.RangeQuery;
import org.codehaus.plexus.logging.AbstractLogEnabled;
import java.io.IOException;
@@ -157,6 +158,21 @@
booleanQuery.add( luceneQuery, subquery.isRequired(), subquery.isProhibited() );
}
retVal = booleanQuery;
+ }
+ else if( query instanceof RangeQuery )
+ {
+ RangeQuery rq = (RangeQuery) query;
+ List queries = rq.getQueries();
+ Iterator iter = queries.iterator();
+ Term begin = null, end = null;
+ if(queries.size() == 2)
+ {
+ SinglePhraseQuery qry = (SinglePhraseQuery) iter.next();
+ begin = new Term( qry.getField(), qry.getValue() );
+ qry = ( SinglePhraseQuery ) iter.next();
+ end = new Term( qry.getField(), qry.getValue() );
+ }
+ retVal = new org.apache.lucene.search.RangeQuery( begin, end, rq.isInclusive() );
}
else
{
Modified: maven/repository-manager/trunk/maven-repository-indexer/src/main/java/org/apache/maven/repository/indexing/DefaultRepositoryIndexingFactory.java
URL: http://svn.apache.org/viewcvs/maven/repository-manager/trunk/maven-repository-indexer/src/main/java/org/apache/maven/repository/indexing/DefaultRepositoryIndexingFactory.java?rev=369402&r1=369401&r2=369402&view=diff
==============================================================================
--- maven/repository-manager/trunk/maven-repository-indexer/src/main/java/org/apache/maven/repository/indexing/DefaultRepositoryIndexingFactory.java (original)
+++ maven/repository-manager/trunk/maven-repository-indexer/src/main/java/org/apache/maven/repository/indexing/DefaultRepositoryIndexingFactory.java Mon Jan 16 00:53:09 2006
@@ -71,4 +71,14 @@
{
return new PomRepositoryIndexSearcher( index, artifactFactory );
}
+
+ public MetadataRepositoryIndex createMetadataRepositoryIndex( String indexPath, ArtifactRepository repository)
+ throws RepositoryIndexException{
+ return new MetadataRepositoryIndex(indexPath, repository);
+ }
+
+ public MetadataRepositoryIndexSearcher createMetadataRepositoryIndexSearcher( MetadataRepositoryIndex index )
+ {
+ return new MetadataRepositoryIndexSearcher( index, artifactFactory );
+ }
}
Added: maven/repository-manager/trunk/maven-repository-indexer/src/main/java/org/apache/maven/repository/indexing/MetadataRepositoryIndex.java
URL: http://svn.apache.org/viewcvs/maven/repository-manager/trunk/maven-repository-indexer/src/main/java/org/apache/maven/repository/indexing/MetadataRepositoryIndex.java?rev=369402&view=auto
==============================================================================
--- maven/repository-manager/trunk/maven-repository-indexer/src/main/java/org/apache/maven/repository/indexing/MetadataRepositoryIndex.java (added)
+++ maven/repository-manager/trunk/maven-repository-indexer/src/main/java/org/apache/maven/repository/indexing/MetadataRepositoryIndex.java Mon Jan 16 00:53:09 2006
@@ -0,0 +1,180 @@
+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.analysis.Analyzer;
+import org.apache.lucene.analysis.standard.StandardAnalyzer;
+import org.apache.lucene.document.Document;
+import org.apache.lucene.document.Field;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.repository.metadata.RepositoryMetadata;
+import org.apache.maven.artifact.repository.metadata.Metadata;
+import org.apache.maven.artifact.repository.metadata.Versioning;
+import org.apache.maven.artifact.repository.metadata.Plugin;
+
+import java.util.List;
+import java.util.Iterator;
+import java.io.IOException;
+
+/**
+ * This class indexes the metadata in the repository.
+ */
+public class MetadataRepositoryIndex
+ extends AbstractRepositoryIndex
+{
+ private static final String FLD_LASTUPDATE = "lastUpdate";
+
+ private static final String FLD_PLUGINPREFIX = "pluginPrefix";
+
+ private static final String FLD_METADATAPATH = "path";
+
+ private static final String FLD_GROUPID = "groupId";
+
+ private static final String FLD_ARTIFACTID = "artifactId";
+
+ private static final String FLD_VERSION = "version";
+
+ private static final String[] FIELDS = {FLD_METADATAPATH, FLD_PLUGINPREFIX, FLD_LASTUPDATE,
+ FLD_GROUPID, FLD_ARTIFACTID, FLD_VERSION};
+
+ /**
+ * Constructor
+ * @param indexPath the path to the index
+ * @param repository the repository where the metadata to be indexed is located
+ * @throws RepositoryIndexException
+ */
+ public MetadataRepositoryIndex( String indexPath, ArtifactRepository repository )
+ throws RepositoryIndexException
+ {
+ super( indexPath, repository, FIELDS );
+ }
+
+ /**
+ * Get the field names to be used in the index
+ * @return array of strings
+ */
+ public String[] getIndexFields()
+ {
+ return FIELDS;
+ }
+
+ /**
+ * Returns the analyzer used for indexing
+ * @return Analyzer object
+ */
+ public Analyzer getAnalyzer()
+ {
+ return new StandardAnalyzer();
+ }
+
+ /**
+ * Index the paramater object
+ * @param obj
+ * @throws RepositoryIndexException
+ */
+ public void index( Object obj ) throws RepositoryIndexException
+ {
+ if ( obj instanceof RepositoryMetadata )
+ {
+ indexMetadata( (RepositoryMetadata) obj );
+ }
+ else
+ {
+ throw new RepositoryIndexException(
+ "This instance of indexer cannot index instances of " + obj.getClass().getName() );
+ }
+ }
+
+ /**
+ * Index the contents of the specified RepositoryMetadata paramter object
+ * @param repoMetadata the metadata object to be indexed
+ * @throws RepositoryIndexException
+ */
+ private void indexMetadata( RepositoryMetadata repoMetadata ) throws RepositoryIndexException
+ {
+ if ( !isOpen() )
+ {
+ throw new RepositoryIndexException( "Unable to add artifact index on a closed index" );
+ }
+
+ //get lastUpdated from Versioning (specified in Metadata object)
+ //get pluginPrefixes from Plugin (spcified in Metadata object) -----> concatenate/append???
+ //get the metadatapath: check where metadata is located, then concatenate the groupId,
+ // artifactId, version based on its location
+ Document doc = new Document();
+ String path = "";
+
+ if( repoMetadata.storedInGroupDirectory() && !repoMetadata.storedInArtifactVersionDirectory())
+ {
+ path = repoMetadata.getGroupId() + "/";
+ }
+ else if(!repoMetadata.storedInGroupDirectory() && !repoMetadata.storedInArtifactVersionDirectory())
+ {
+ path = repoMetadata.getGroupId() + "/" + repoMetadata.getArtifactId() + "/";
+ }
+ else if(!repoMetadata.storedInGroupDirectory() && repoMetadata.storedInArtifactVersionDirectory())
+ {
+ path = repoMetadata.getGroupId() + "/" + repoMetadata.getArtifactId() + "/" + repoMetadata.getBaseVersion() + "/";
+ }
+
+ //@todo use localfilename or remotefilename to get the path???
+ path = path + repoMetadata.getRemoteFilename();
+ doc.add( Field.Text( FLD_METADATAPATH, path) );
+
+ Metadata metadata = repoMetadata.getMetadata();
+ Versioning versioning = metadata.getVersioning();
+ if( versioning != null )
+ {
+ doc.add( Field.Text( FLD_LASTUPDATE, versioning.getLastUpdated() ) );
+ }
+
+ List plugins = metadata.getPlugins();
+ String pluginAppended = "";
+ for( Iterator iter = plugins.iterator(); iter.hasNext(); )
+ {
+ Plugin plugin = (Plugin) iter.next();
+ if( plugin.getPrefix() != null && !plugin.getPrefix().equals("") )
+ {
+ pluginAppended = plugin.getPrefix() + " ";
+ }
+ }
+ doc.add( Field.Text( FLD_PLUGINPREFIX, pluginAppended ) );
+ doc.add( Field.UnIndexed( FLD_GROUPID, metadata.getGroupId() ) );
+
+ if( metadata.getArtifactId() != null && !metadata.getArtifactId().equals("") )
+ {
+ doc.add( Field.UnIndexed( FLD_ARTIFACTID, metadata.getArtifactId() ) );
+ }
+ if( metadata.getVersion() != null && !metadata.getVersion().equals("") )
+ {
+ doc.add( Field.UnIndexed( FLD_VERSION, metadata.getVersion() ) );
+ }
+
+ try
+ {
+ getIndexWriter().addDocument( doc );
+ }
+ catch ( IOException e )
+ {
+ throw new RepositoryIndexException( "Error opening index", e );
+ }
+ }
+
+ public boolean isKeywordField( String field ){
+ return false;
+ }
+}
Added: maven/repository-manager/trunk/maven-repository-indexer/src/main/java/org/apache/maven/repository/indexing/MetadataRepositoryIndexSearcher.java
URL: http://svn.apache.org/viewcvs/maven/repository-manager/trunk/maven-repository-indexer/src/main/java/org/apache/maven/repository/indexing/MetadataRepositoryIndexSearcher.java?rev=369402&view=auto
==============================================================================
--- maven/repository-manager/trunk/maven-repository-indexer/src/main/java/org/apache/maven/repository/indexing/MetadataRepositoryIndexSearcher.java (added)
+++ maven/repository-manager/trunk/maven-repository-indexer/src/main/java/org/apache/maven/repository/indexing/MetadataRepositoryIndexSearcher.java Mon Jan 16 00:53:09 2006
@@ -0,0 +1,174 @@
+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;
+import org.apache.maven.artifact.repository.metadata.RepositoryMetadata;
+import org.apache.maven.artifact.repository.metadata.GroupRepositoryMetadata;
+import org.apache.maven.artifact.repository.metadata.ArtifactRepositoryMetadata;
+import org.apache.maven.artifact.repository.metadata.SnapshotArtifactRepositoryMetadata;
+import org.apache.maven.artifact.repository.metadata.io.xpp3.MetadataXpp3Reader;
+import org.apache.maven.artifact.Artifact;
+
+import java.net.URL;
+import java.io.InputStream;
+import java.io.File;
+import java.io.InputStreamReader;
+import java.util.*;
+
+/**
+ * This class searches the specified index given the search/query criteria.
+ *
+ */
+public class MetadataRepositoryIndexSearcher
+ extends AbstractRepositoryIndexSearcher
+{
+ private ArtifactFactory artifactFactory;
+
+ private static final String FLD_METADATAPATH = "path";
+
+ private static final String FLD_GROUPID = "groupId";
+
+ private static final String FLD_ARTIFACTID = "artifactId";
+
+ private static final String FLD_VERSION = "version";
+
+ private static final String GROUP_TYPE = "GROUP";
+
+ private static final String ARTIFACT_TYPE = "ARTIFACT";
+
+ private static final String SNAPSHOT_TYPE = "SNAPSHOT";
+
+ /**
+ * Constructor
+ * @param index the index object to be set
+ * @param factory
+ */
+ public MetadataRepositoryIndexSearcher( MetadataRepositoryIndex index, ArtifactFactory factory)
+ {
+ super(index);
+ artifactFactory = factory;
+ }
+
+ /**
+ * Create object to be returned by the search based on the document
+ * @param doc
+ * @return Object
+ */
+ protected Object createSearchedObjectFromIndexDocument( Document doc )
+ {
+ List pathParts = new ArrayList();
+ StringTokenizer st = new StringTokenizer( doc.get( FLD_METADATAPATH ), "/\\" );
+ while ( st.hasMoreTokens() )
+ {
+ pathParts.add( st.nextToken() );
+ }
+
+ Collections.reverse( pathParts );
+ Iterator it = pathParts.iterator();
+ String metadataFile = (String) it.next();
+ String tmpDir = (String) it.next();
+
+ String metadataType = "";
+ if( tmpDir.equals( doc.get( FLD_GROUPID ) ) )
+ {
+ metadataType = GROUP_TYPE;
+ }
+ else if( tmpDir.equals( doc.get( FLD_ARTIFACTID ) ) )
+ {
+ metadataType = ARTIFACT_TYPE;
+ }
+ else
+ {
+ metadataType = SNAPSHOT_TYPE;
+ }
+
+ RepositoryMetadata repoMetadata = null;
+
+ try{
+ repoMetadata = getMetadata(doc.get( FLD_GROUPID ), doc.get( FLD_ARTIFACTID ), doc.get( FLD_VERSION ), metadataFile, metadataType );
+ }
+ catch(Exception e)
+ {
+ //@todo
+ }
+
+ return repoMetadata;
+ }
+
+ /**
+ * Create RepositoryMetadata object.
+ *
+ * @param groupId the groupId to be set
+ * @param artifactId the artifactId to be set
+ * @param version the version to be set
+ * @param filename the name of the metadata file
+ * @param metadataType the type of RepositoryMetadata object to be created (GROUP, ARTIFACT or SNAPSHOT)
+ * @return RepositoryMetadata
+ * @throws Exception
+ */
+ private RepositoryMetadata getMetadata( String groupId, String artifactId, String version, String filename, String metadataType)
+ throws Exception
+ {
+ RepositoryMetadata repoMetadata = null;
+ URL url;
+ InputStream is = null;
+ MetadataXpp3Reader metadataReader = new MetadataXpp3Reader();
+
+ //group metadata
+ if( metadataType.equals( GROUP_TYPE ) )
+ {
+ url = new File( index.getRepository().getBasedir() + groupId.replace('.', '/') + "/" + filename ).toURL();
+ is = url.openStream();
+ repoMetadata = new GroupRepositoryMetadata(groupId);
+ repoMetadata.setMetadata( metadataReader.read( new InputStreamReader( is ) ) );
+ }
+ //artifact metadata
+ else if( metadataType.equals( ARTIFACT_TYPE ) )
+ {
+ url = new File( index.getRepository().getBasedir() + groupId.replace('.', '/') + "/" + artifactId + "/" + filename ).toURL();
+ is = url.openStream();
+ repoMetadata = new ArtifactRepositoryMetadata( getArtifact( groupId, artifactId, version ) );
+ repoMetadata.setMetadata( metadataReader.read( new InputStreamReader( is ) ) );
+ }
+ //snapshot/version metadata
+ else if( metadataType.equals( SNAPSHOT_TYPE ) )
+ {
+ url = new File( index.getRepository().getBasedir() + groupId.replace('.', '/') + "/" + artifactId + "/" + version + "/" + filename ).toURL();
+ is = url.openStream();
+ repoMetadata = new SnapshotArtifactRepositoryMetadata( getArtifact( groupId, artifactId, version ) );
+ repoMetadata.setMetadata( metadataReader.read( new InputStreamReader( is ) ) );
+ }
+
+ return repoMetadata;
+ }
+
+ /**
+ * Create artifact object.
+ * @param groupId the groupId of the artifact
+ * @param artifactId the artifactId of the artifact
+ * @param version the version of the artifact
+ * @return Artifact
+ * @throws Exception
+ */
+ private Artifact getArtifact( String groupId, String artifactId, String version )
+ throws Exception
+ {
+ return artifactFactory.createBuildArtifact( groupId, artifactId, version, "jar" );
+ }
+}
Modified: maven/repository-manager/trunk/maven-repository-indexer/src/main/java/org/apache/maven/repository/indexing/RepositoryIndexingFactory.java
URL: http://svn.apache.org/viewcvs/maven/repository-manager/trunk/maven-repository-indexer/src/main/java/org/apache/maven/repository/indexing/RepositoryIndexingFactory.java?rev=369402&r1=369401&r2=369402&view=diff
==============================================================================
--- maven/repository-manager/trunk/maven-repository-indexer/src/main/java/org/apache/maven/repository/indexing/RepositoryIndexingFactory.java (original)
+++ maven/repository-manager/trunk/maven-repository-indexer/src/main/java/org/apache/maven/repository/indexing/RepositoryIndexingFactory.java Mon Jan 16 00:53:09 2006
@@ -64,4 +64,10 @@
* @return the PomRepositoryIndexSearcher instance
*/
PomRepositoryIndexSearcher createPomRepositoryIndexSearcher( PomRepositoryIndex index );
+
+ MetadataRepositoryIndex createMetadataRepositoryIndex( String indexPath, ArtifactRepository repository)
+ throws RepositoryIndexException;
+
+ MetadataRepositoryIndexSearcher createMetadataRepositoryIndexSearcher( MetadataRepositoryIndex index );
+
}
Added: maven/repository-manager/trunk/maven-repository-indexer/src/main/java/org/apache/maven/repository/indexing/query/RangeQuery.java
URL: http://svn.apache.org/viewcvs/maven/repository-manager/trunk/maven-repository-indexer/src/main/java/org/apache/maven/repository/indexing/query/RangeQuery.java?rev=369402&view=auto
==============================================================================
--- maven/repository-manager/trunk/maven-repository-indexer/src/main/java/org/apache/maven/repository/indexing/query/RangeQuery.java (added)
+++ maven/repository-manager/trunk/maven-repository-indexer/src/main/java/org/apache/maven/repository/indexing/query/RangeQuery.java Mon Jan 16 00:53:09 2006
@@ -0,0 +1,52 @@
+package org.apache.maven.repository.indexing.query;
+
+/*
+ * 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 java.util.List;
+import java.util.ArrayList;
+
+/**
+ * Query object that handles range queries for dates.
+ * @author Maria Odea Ching
+ */
+public class RangeQuery
+ implements Query
+{
+ List queries = new ArrayList();
+
+ private boolean inclusive;
+
+ public RangeQuery( boolean inclusive)
+ {
+ this.inclusive = inclusive;
+ }
+
+ public void addQuery( Query qry )
+ {
+ queries.add( qry );
+ }
+
+ public List getQueries()
+ {
+ return queries;
+ }
+
+ public boolean isInclusive()
+ {
+ return inclusive;
+ }
+}
Added: maven/repository-manager/trunk/maven-repository-indexer/src/test/java/org/apache/maven/repository/indexing/MetadataRepositoryIndexingTest.java
URL: http://svn.apache.org/viewcvs/maven/repository-manager/trunk/maven-repository-indexer/src/test/java/org/apache/maven/repository/indexing/MetadataRepositoryIndexingTest.java?rev=369402&view=auto
==============================================================================
--- maven/repository-manager/trunk/maven-repository-indexer/src/test/java/org/apache/maven/repository/indexing/MetadataRepositoryIndexingTest.java (added)
+++ maven/repository-manager/trunk/maven-repository-indexer/src/test/java/org/apache/maven/repository/indexing/MetadataRepositoryIndexingTest.java Mon Jan 16 00:53:09 2006
@@ -0,0 +1,249 @@
+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.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.repository.ArtifactRepositoryFactory;
+import org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout;
+import org.apache.maven.artifact.repository.metadata.*;
+import org.apache.maven.artifact.repository.metadata.io.xpp3.MetadataXpp3Reader;
+import org.apache.maven.repository.indexing.query.Query;
+import org.apache.maven.repository.indexing.query.RangeQuery;
+import org.apache.maven.repository.indexing.query.SinglePhraseQuery;
+import org.codehaus.plexus.PlexusTestCase;
+import org.codehaus.plexus.util.FileUtils;
+
+import java.io.File;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.net.URL;
+import java.util.Iterator;
+import java.util.List;
+
+/**
+ * This class tests the MetadataRepositoryIndex.
+ */
+public class MetadataRepositoryIndexingTest
+ extends PlexusTestCase
+{
+ private ArtifactRepository repository;
+
+ private String indexPath;
+
+ private static final String FLD_LASTUPDATE = "lastUpdate";
+
+ private static final String FLD_PLUGINPREFIX = "pluginPrefix";
+
+ private static final String GROUP_TYPE = "GROUP";
+
+ private static final String ARTIFACT_TYPE = "ARTIFACT";
+
+ private static final String SNAPSHOT_TYPE = "SNAPSHOT";
+
+ private MetadataRepositoryIndex indexer;
+
+ private ArtifactFactory artifactFactory;
+
+ /**
+ * Set up.
+ * @throws Exception
+ */
+ public void setUp() throws Exception
+ {
+ super.setUp();
+ File repositoryDirectory = getTestFile( "src/test/repository" );
+ String repoDir = repositoryDirectory.toURL().toString();
+ ArtifactRepositoryLayout layout = ( ArtifactRepositoryLayout ) lookup( ArtifactRepositoryLayout.ROLE, "default" );
+ ArtifactRepositoryFactory repoFactory = ( ArtifactRepositoryFactory ) lookup( ArtifactRepositoryFactory.ROLE );
+ repository = repoFactory.createArtifactRepository( "test", repoDir, layout, null, null );
+
+ indexPath = "target/index/metadata";
+ FileUtils.deleteDirectory( indexPath );
+ }
+
+ /**
+ * Tear down.
+ * @throws Exception
+ */
+ public void tearDown() throws Exception
+ {
+ repository = null;
+ super.tearDown();
+ }
+
+ /**
+ * Create the test index.
+ * @throws Exception
+ */
+ private void createTestIndex() throws Exception
+ {
+ RepositoryIndexingFactory factory = ( RepositoryIndexingFactory ) lookup( RepositoryIndexingFactory.ROLE );
+ indexer = factory.createMetadataRepositoryIndex( indexPath, repository );
+
+ RepositoryMetadata repoMetadata = getMetadata( "org.apache.maven", null, null, "maven-metadata.xml", GROUP_TYPE );
+ indexer.index( repoMetadata );
+
+ repoMetadata = getMetadata( "org.apache.maven", "maven-artifact", "2.0.1", "maven-metadata.xml", ARTIFACT_TYPE );
+ indexer.index( repoMetadata );
+
+ repoMetadata = getMetadata( "org.apache.maven", "maven-artifact", "2.0.1", "maven-metadata.xml", SNAPSHOT_TYPE );
+ indexer.index( repoMetadata );
+
+ indexer.optimize();
+ indexer.close();
+ }
+
+ /**
+ * Test the ArtifactRepositoryIndexSearcher using a single-phrase search.
+ *
+ * @throws Exception
+ */
+ public void testSearchSingle()
+ throws Exception
+ {
+ createTestIndex();
+
+ RepositoryIndexingFactory factory = (RepositoryIndexingFactory) lookup( RepositoryIndexingFactory.ROLE );
+ MetadataRepositoryIndex indexer = factory.createMetadataRepositoryIndex( indexPath, repository );
+ RepositoryIndexSearcher repoSearcher = factory.createMetadataRepositoryIndexSearcher( indexer );
+
+ // search last update
+ org.apache.maven.repository.indexing.query.Query qry = new SinglePhraseQuery( FLD_LASTUPDATE, "20051212044643" );
+ List metadataList = repoSearcher.search( qry );
+ assertEquals( 1, metadataList.size() );
+ for ( Iterator iter = metadataList.iterator(); iter.hasNext(); )
+ {
+ RepositoryMetadata repoMetadata = (RepositoryMetadata) iter.next();
+
+ Metadata metadata = repoMetadata.getMetadata();
+ Versioning versioning = metadata.getVersioning();
+ assertEquals( "20051212044643", versioning.getLastUpdated() );
+ }
+
+ // search plugin prefix
+ qry = new SinglePhraseQuery( FLD_PLUGINPREFIX, "org.apache.maven" );
+ metadataList = repoSearcher.search( qry );
+ assertEquals( 1, metadataList.size() );
+ for ( Iterator iter = metadataList.iterator(); iter.hasNext(); )
+ {
+ RepositoryMetadata repoMetadata = (RepositoryMetadata) iter.next();
+ Metadata metadata = repoMetadata.getMetadata();
+ List plugins = metadata.getPlugins();
+ for( Iterator it = plugins.iterator(); it.hasNext(); )
+ {
+ Plugin plugin = (Plugin) it.next();
+ assertEquals( "org.apache.maven", plugin.getPrefix() );
+ }
+ }
+
+ // search last update using INCLUSIVE Range Query
+ Query qry1 = new SinglePhraseQuery( FLD_LASTUPDATE, "20051212000000" );
+ Query qry2 = new SinglePhraseQuery( FLD_LASTUPDATE, "20051212235959");
+ RangeQuery rQry = new RangeQuery( true );
+ rQry.addQuery( qry1 );
+ rQry.addQuery( qry2 );
+
+ metadataList = repoSearcher.search( rQry );
+ for ( Iterator iter = metadataList.iterator(); iter.hasNext(); )
+ {
+ RepositoryMetadata repoMetadata = (RepositoryMetadata) iter.next();
+ Metadata metadata = repoMetadata.getMetadata();
+ Versioning versioning = metadata.getVersioning();
+ assertEquals( "20051212044643", versioning.getLastUpdated() );
+ }
+
+ // search last update using EXCLUSIVE Range Query
+ qry1 = new SinglePhraseQuery( FLD_LASTUPDATE, "20051212000000" );
+ qry2 = new SinglePhraseQuery( FLD_LASTUPDATE, "20051212044643");
+ rQry = new RangeQuery( false );
+ rQry.addQuery( qry1 );
+ rQry.addQuery( qry2 );
+
+ metadataList = repoSearcher.search( rQry );
+ assertEquals( metadataList.size(), 0 );
+
+ indexer.close();
+ }
+
+ /**
+ * Create RepositoryMetadata object.
+ *
+ * @param groupId the groupId to be set
+ * @param artifactId the artifactId to be set
+ * @param version the version to be set
+ * @param filename the name of the metadata file
+ * @param metadataType the type of RepositoryMetadata object to be created (GROUP, ARTIFACT or SNAPSHOT)
+ * @return RepositoryMetadata
+ * @throws Exception
+ */
+ private RepositoryMetadata getMetadata( String groupId, String artifactId, String version, String filename, String metadataType)
+ throws Exception
+ {
+ RepositoryMetadata repoMetadata = null;
+ URL url;
+ InputStream is = null;
+ MetadataXpp3Reader metadataReader = new MetadataXpp3Reader();
+
+ //group metadata
+ if( metadataType.equals( GROUP_TYPE ) )
+ {
+ url = new File( repository.getBasedir() + groupId.replace('.', '/') + "/" + filename ).toURL();
+ is = url.openStream();
+ repoMetadata = new GroupRepositoryMetadata(groupId);
+ repoMetadata.setMetadata( metadataReader.read( new InputStreamReader( is ) ) );
+ }
+ //artifact metadata
+ else if( metadataType.equals( ARTIFACT_TYPE ) )
+ {
+ url = new File( repository.getBasedir() + groupId.replace('.', '/') + "/" + artifactId + "/" + filename ).toURL();
+ is = url.openStream();
+ repoMetadata = new ArtifactRepositoryMetadata( getArtifact( groupId, artifactId, version ) );
+ repoMetadata.setMetadata( metadataReader.read( new InputStreamReader( is ) ) );
+ }
+ //snapshot/version metadata
+ else if( metadataType.equals( SNAPSHOT_TYPE ) )
+ {
+ url = new File( repository.getBasedir() + groupId.replace('.', '/') + "/" + artifactId + "/" + version + "/" + filename ).toURL();
+ is = url.openStream();
+ repoMetadata = new SnapshotArtifactRepositoryMetadata( getArtifact( groupId, artifactId, version ) );
+ repoMetadata.setMetadata( metadataReader.read( new InputStreamReader( is ) ) );
+ }
+
+ return repoMetadata;
+ }
+
+
+ /**
+ * Create artifact object.
+ * @param groupId the groupId of the artifact
+ * @param artifactId the artifactId of the artifact
+ * @param version the version of the artifact
+ * @return Artifact
+ * @throws Exception
+ */
+ private Artifact getArtifact( String groupId, String artifactId, String version )
+ throws Exception
+ {
+ if ( artifactFactory == null )
+ {
+ artifactFactory = (ArtifactFactory) lookup( ArtifactFactory.ROLE );
+ }
+ return artifactFactory.createBuildArtifact( groupId, artifactId, version, "jar" );
+ }
+}
Added: maven/repository-manager/trunk/maven-repository-indexer/src/test/repository/org/apache/maven/maven-artifact/2.0.1/maven-metadata.xml
URL: http://svn.apache.org/viewcvs/maven/repository-manager/trunk/maven-repository-indexer/src/test/repository/org/apache/maven/maven-artifact/2.0.1/maven-metadata.xml?rev=369402&view=auto
==============================================================================
--- maven/repository-manager/trunk/maven-repository-indexer/src/test/repository/org/apache/maven/maven-artifact/2.0.1/maven-metadata.xml (added)
+++ maven/repository-manager/trunk/maven-repository-indexer/src/test/repository/org/apache/maven/maven-artifact/2.0.1/maven-metadata.xml Mon Jan 16 00:53:09 2006
@@ -0,0 +1,5 @@
+<metadata>
+<groupId>org.apache.maven</groupId>
+<artifactId>maven-artifact</artifactId>
+<version>2.0.1</version>
+</metadata>
Added: maven/repository-manager/trunk/maven-repository-indexer/src/test/repository/org/apache/maven/maven-artifact/maven-metadata.xml
URL: http://svn.apache.org/viewcvs/maven/repository-manager/trunk/maven-repository-indexer/src/test/repository/org/apache/maven/maven-artifact/maven-metadata.xml?rev=369402&view=auto
==============================================================================
--- maven/repository-manager/trunk/maven-repository-indexer/src/test/repository/org/apache/maven/maven-artifact/maven-metadata.xml (added)
+++ maven/repository-manager/trunk/maven-repository-indexer/src/test/repository/org/apache/maven/maven-artifact/maven-metadata.xml Mon Jan 16 00:53:09 2006
@@ -0,0 +1,12 @@
+<metadata>
+<groupId>org.apache.maven</groupId>
+<artifactId>maven-artifact</artifactId>
+<version>2.0.1</version>
+<versioning>
+<release>2.0.1</release>
+<versions>
+<version>2.0.1</version>
+</versions>
+<lastUpdated>20051212044643</lastUpdated>
+</versioning>
+</metadata>
Added: maven/repository-manager/trunk/maven-repository-indexer/src/test/repository/org/apache/maven/maven-metadata.xml
URL: http://svn.apache.org/viewcvs/maven/repository-manager/trunk/maven-repository-indexer/src/test/repository/org/apache/maven/maven-metadata.xml?rev=369402&view=auto
==============================================================================
--- maven/repository-manager/trunk/maven-repository-indexer/src/test/repository/org/apache/maven/maven-metadata.xml (added)
+++ maven/repository-manager/trunk/maven-repository-indexer/src/test/repository/org/apache/maven/maven-metadata.xml Mon Jan 16 00:53:09 2006
@@ -0,0 +1,9 @@
+<metadata>
+<groupId>org.apache.maven</groupId>
+<plugins>
+ <plugin>
+ <prefix>org.apache.maven</prefix>
+ <artifactId>org.apache.maven-maven-plugin</artifactId>
+ </plugin>
+</plugins>
+</metadata>