You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by cs...@apache.org on 2014/07/08 10:40:25 UTC
[4/5] git commit: Renamed the example package to examples.
Renamed the example package to examples.
Project: http://git-wip-us.apache.org/repos/asf/maven-indexer/repo
Commit: http://git-wip-us.apache.org/repos/asf/maven-indexer/commit/afcd5ccd
Tree: http://git-wip-us.apache.org/repos/asf/maven-indexer/tree/afcd5ccd
Diff: http://git-wip-us.apache.org/repos/asf/maven-indexer/diff/afcd5ccd
Branch: refs/heads/master
Commit: afcd5ccd20c6d14bd6fc60a059985ff33461eeb6
Parents: 3a0278b
Author: Martin Todorov <ca...@gmail.com>
Authored: Sun Jun 29 19:50:17 2014 +0100
Committer: Martin Todorov <ca...@gmail.com>
Committed: Sun Jun 29 19:50:17 2014 +0100
----------------------------------------------------------------------
.../indexer/example/BasicUsageExample.java | 352 -------------------
.../indexer/examples/BasicUsageExample.java | 352 +++++++++++++++++++
.../indexer/example/BasicUsageExampleTest.java | 32 --
.../indexer/examples/BasicUsageExampleTest.java | 32 ++
4 files changed, 384 insertions(+), 384 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/maven-indexer/blob/afcd5ccd/indexer-examples/src/main/java/org/apache/maven/indexer/example/BasicUsageExample.java
----------------------------------------------------------------------
diff --git a/indexer-examples/src/main/java/org/apache/maven/indexer/example/BasicUsageExample.java b/indexer-examples/src/main/java/org/apache/maven/indexer/example/BasicUsageExample.java
deleted file mode 100644
index 5a0f51d..0000000
--- a/indexer-examples/src/main/java/org/apache/maven/indexer/example/BasicUsageExample.java
+++ /dev/null
@@ -1,352 +0,0 @@
-package org.apache.maven.indexer.example;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you 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.io.File;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.lucene.document.Document;
-import org.apache.lucene.index.IndexReader;
-import org.apache.lucene.index.MultiFields;
-import org.apache.lucene.search.BooleanClause.Occur;
-import org.apache.lucene.search.BooleanQuery;
-import org.apache.lucene.search.IndexSearcher;
-import org.apache.lucene.search.Query;
-import org.apache.lucene.util.Bits;
-import org.apache.maven.index.ArtifactInfo;
-import org.apache.maven.index.ArtifactInfoFilter;
-import org.apache.maven.index.ArtifactInfoGroup;
-import org.apache.maven.index.Field;
-import org.apache.maven.index.FlatSearchRequest;
-import org.apache.maven.index.FlatSearchResponse;
-import org.apache.maven.index.GroupedSearchRequest;
-import org.apache.maven.index.GroupedSearchResponse;
-import org.apache.maven.index.Grouping;
-import org.apache.maven.index.Indexer;
-import org.apache.maven.index.IteratorSearchRequest;
-import org.apache.maven.index.IteratorSearchResponse;
-import org.apache.maven.index.MAVEN;
-import org.apache.maven.index.context.IndexCreator;
-import org.apache.maven.index.context.IndexUtils;
-import org.apache.maven.index.context.IndexingContext;
-import org.apache.maven.index.expr.SourcedSearchExpression;
-import org.apache.maven.index.expr.UserInputSearchExpression;
-import org.apache.maven.index.search.grouping.GAGrouping;
-import org.apache.maven.index.updater.IndexUpdateRequest;
-import org.apache.maven.index.updater.IndexUpdateResult;
-import org.apache.maven.index.updater.IndexUpdater;
-import org.apache.maven.index.updater.ResourceFetcher;
-import org.apache.maven.index.updater.WagonHelper;
-import org.apache.maven.wagon.Wagon;
-import org.apache.maven.wagon.events.TransferEvent;
-import org.apache.maven.wagon.events.TransferListener;
-import org.apache.maven.wagon.observers.AbstractTransferListener;
-import org.codehaus.plexus.DefaultPlexusContainer;
-import org.codehaus.plexus.PlexusContainer;
-import org.codehaus.plexus.PlexusContainerException;
-import org.codehaus.plexus.component.repository.exception.ComponentLookupException;
-import org.codehaus.plexus.util.StringUtils;
-import org.eclipse.aether.util.version.GenericVersionScheme;
-import org.eclipse.aether.version.InvalidVersionSpecificationException;
-import org.eclipse.aether.version.Version;
-
-public class BasicUsageExample
-{
- public static void main( String[] args )
- throws Exception
- {
- final BasicUsageExample basicUsageExample = new BasicUsageExample();
- basicUsageExample.perform();
- }
-
- // ==
-
- private final PlexusContainer plexusContainer;
-
- private final Indexer indexer;
-
- private final IndexUpdater indexUpdater;
-
- private final Wagon httpWagon;
-
- private IndexingContext centralContext;
-
- public BasicUsageExample()
- throws PlexusContainerException, ComponentLookupException
- {
- // here we create Plexus container, the Maven default IoC container
- // Plexus falls outside of MI scope, just accept the fact that
- // MI is a Plexus component ;)
- // If needed more info, ask on Maven Users list or Plexus Users list
- // google is your friend!
- this.plexusContainer = new DefaultPlexusContainer();
-
- // lookup the indexer components from plexus
- this.indexer = plexusContainer.lookup( Indexer.class );
- this.indexUpdater = plexusContainer.lookup( IndexUpdater.class );
- // lookup wagon used to remotely fetch index
- this.httpWagon = plexusContainer.lookup( Wagon.class, "http" );
-
- }
-
- public void perform()
- throws IOException, ComponentLookupException, InvalidVersionSpecificationException
- {
- // Files where local cache is (if any) and Lucene Index should be located
- File centralLocalCache = new File( "target/central-cache" );
- File centralIndexDir = new File( "target/central-index" );
-
- // Creators we want to use (search for fields it defines)
- List<IndexCreator> indexers = new ArrayList<IndexCreator>();
- indexers.add( plexusContainer.lookup( IndexCreator.class, "min" ) );
- indexers.add( plexusContainer.lookup( IndexCreator.class, "jarContent" ) );
- indexers.add( plexusContainer.lookup( IndexCreator.class, "maven-plugin" ) );
-
- // Create context for central repository index
- centralContext =
- indexer.createIndexingContext( "central-context", "central", centralLocalCache, centralIndexDir,
- "http://repo1.maven.org/maven2", null, true, true, indexers );
-
- // Update the index (incremental update will happen if this is not 1st run and files are not deleted)
- // This whole block below should not be executed on every app start, but rather controlled by some configuration
- // since this block will always emit at least one HTTP GET. Central indexes are updated once a week, but
- // other index sources might have different index publishing frequency.
- // Preferred frequency is once a week.
- if ( true )
- {
- System.out.println( "Updating Index..." );
- System.out.println( "This might take a while on first run, so please be patient!" );
- // Create ResourceFetcher implementation to be used with IndexUpdateRequest
- // Here, we use Wagon based one as shorthand, but all we need is a ResourceFetcher implementation
- TransferListener listener = new AbstractTransferListener()
- {
- public void transferStarted( TransferEvent transferEvent )
- {
- System.out.print( " Downloading " + transferEvent.getResource().getName() );
- }
-
- public void transferProgress( TransferEvent transferEvent, byte[] buffer, int length )
- {
- }
-
- public void transferCompleted( TransferEvent transferEvent )
- {
- System.out.println( " - Done" );
- }
- };
- ResourceFetcher resourceFetcher = new WagonHelper.WagonFetcher( httpWagon, listener, null, null );
-
- Date centralContextCurrentTimestamp = centralContext.getTimestamp();
- IndexUpdateRequest updateRequest = new IndexUpdateRequest( centralContext, resourceFetcher );
- IndexUpdateResult updateResult = indexUpdater.fetchAndUpdateIndex( updateRequest );
- if ( updateResult.isFullUpdate() )
- {
- System.out.println( "Full update happened!" );
- }
- else if ( updateResult.getTimestamp().equals( centralContextCurrentTimestamp ) )
- {
- System.out.println( "No update needed, index is up to date!" );
- }
- else
- {
- System.out.println( "Incremental update happened, change covered " + centralContextCurrentTimestamp
- + " - " + updateResult.getTimestamp() + " period." );
- }
-
- System.out.println();
- }
-
- System.out.println();
- System.out.println( "Using index" );
- System.out.println( "===========" );
- System.out.println();
-
- // ====
- // Case:
- // dump all the GAVs
- // NOTE: will not actually execute do this below, is too long to do (Central is HUGE), but is here as code
- // example
- if ( false )
- {
- final IndexSearcher searcher = centralContext.acquireIndexSearcher();
- try
- {
- final IndexReader ir = searcher.getIndexReader();
- Bits liveDocs = MultiFields.getLiveDocs(ir);
- for ( int i = 0; i < ir.maxDoc(); i++ )
- {
- if ( liveDocs == null || liveDocs.get( i ) )
- {
- final Document doc = ir.document( i );
- final ArtifactInfo ai = IndexUtils.constructArtifactInfo( doc, centralContext );
- System.out.println( ai.getGroupId() + ":" + ai.getArtifactId() + ":" + ai.getVersion() + ":" + ai.getClassifier()
- + " (sha1=" + ai.getSha1() + ")" );
- }
- }
- }
- finally
- {
- centralContext.releaseIndexSearcher( searcher );
- }
- }
-
- // ====
- // Case:
- // Search for all GAVs with known G and A and having version greater than V
-
- final GenericVersionScheme versionScheme = new GenericVersionScheme();
- final String versionString = "1.5.0";
- final Version version = versionScheme.parseVersion( versionString );
-
- // construct the query for known GA
- final Query groupIdQ =
- indexer.constructQuery( MAVEN.GROUP_ID, new SourcedSearchExpression( "org.sonatype.nexus" ) );
- final Query artifactIdQ =
- indexer.constructQuery( MAVEN.ARTIFACT_ID, new SourcedSearchExpression( "nexus-api" ) );
- final BooleanQuery query = new BooleanQuery();
- query.add( groupIdQ, Occur.MUST );
- query.add( artifactIdQ, Occur.MUST );
-
- // we want "jar" artifacts only
- query.add( indexer.constructQuery( MAVEN.PACKAGING, new SourcedSearchExpression( "jar" ) ), Occur.MUST );
- // we want main artifacts only (no classifier)
- // Note: this below is unfinished API, needs fixing
- query.add( indexer.constructQuery( MAVEN.CLASSIFIER, new SourcedSearchExpression( Field.NOT_PRESENT ) ),
- Occur.MUST_NOT );
-
- // construct the filter to express "V greater than"
- final ArtifactInfoFilter versionFilter = new ArtifactInfoFilter()
- {
- public boolean accepts( final IndexingContext ctx, final ArtifactInfo ai )
- {
- try
- {
- final Version aiV = versionScheme.parseVersion( ai.getVersion() );
- // Use ">=" if you are INCLUSIVE
- return aiV.compareTo( version ) > 0;
- }
- catch ( InvalidVersionSpecificationException e )
- {
- // do something here? be safe and include?
- return true;
- }
- }
- };
-
- System.out.println( "Searching for all GAVs with G=org.sonatype.nexus and nexus-api and having V greater than 1.5.0" );
- final IteratorSearchRequest request =
- new IteratorSearchRequest( query, Collections.singletonList( centralContext ), versionFilter );
- final IteratorSearchResponse response = indexer.searchIterator( request );
- for ( ArtifactInfo ai : response )
- {
- System.out.println( ai.toString() );
- }
-
- // Case:
- // Use index
- // Searching for some artifact
- Query gidQ = indexer.constructQuery( MAVEN.GROUP_ID, new SourcedSearchExpression( "org.apache.maven.indexer" ) );
- Query aidQ = indexer.constructQuery( MAVEN.ARTIFACT_ID, new SourcedSearchExpression( "indexer-artifact" ) );
-
- BooleanQuery bq = new BooleanQuery();
- bq.add( gidQ, Occur.MUST );
- bq.add( aidQ, Occur.MUST );
-
- searchAndDump( indexer, "all artifacts under GA org.apache.maven.indexer:indexer-artifact", bq );
-
- // Searching for some main artifact
- bq = new BooleanQuery();
- bq.add( gidQ, Occur.MUST );
- bq.add( aidQ, Occur.MUST );
- // bq.add( nexusIndexer.constructQuery( MAVEN.CLASSIFIER, new SourcedSearchExpression( "*" ) ), Occur.MUST_NOT
- // );
-
- searchAndDump( indexer, "main artifacts under GA org.apache.maven.indexer:indexer-artifact", bq );
-
- // doing sha1 search
- searchAndDump( indexer, "SHA1 7ab67e6b20e5332a7fb4fdf2f019aec4275846c2", indexer.constructQuery( MAVEN.SHA1,
- new SourcedSearchExpression( "7ab67e6b20e5332a7fb4fdf2f019aec4275846c2" ) ) );
-
- searchAndDump( indexer, "SHA1 7ab67e6b20 (partial hash)",
- indexer.constructQuery( MAVEN.SHA1, new UserInputSearchExpression( "7ab67e6b20" ) ) );
-
- // doing classname search (incomplete classname)
- searchAndDump( indexer, "classname DefaultNexusIndexer (note: Central does not publish classes in the index)",
- indexer.constructQuery( MAVEN.CLASSNAMES, new UserInputSearchExpression( "DefaultNexusIndexer" ) ) );
-
- // doing search for all "canonical" maven plugins latest versions
- bq = new BooleanQuery();
- bq.add( indexer.constructQuery( MAVEN.PACKAGING, new SourcedSearchExpression( "maven-plugin" ) ), Occur.MUST );
- bq.add( indexer.constructQuery( MAVEN.GROUP_ID, new SourcedSearchExpression( "org.apache.maven.plugins" ) ),
- Occur.MUST );
- searchGroupedAndDump( indexer, "all \"canonical\" maven plugins", bq, new GAGrouping() );
-
- // doing search for all archetypes latest versions
- searchGroupedAndDump( indexer, "all maven archetypes (latest versions)",
- indexer.constructQuery( MAVEN.PACKAGING, new SourcedSearchExpression( "maven-archetype" ) ), new GAGrouping() );
-
- // close cleanly
- indexer.closeIndexingContext( centralContext, false );
- }
-
- public void searchAndDump( Indexer nexusIndexer, String descr, Query q )
- throws IOException
- {
- System.out.println( "Searching for " + descr );
-
- FlatSearchResponse response = nexusIndexer.searchFlat( new FlatSearchRequest( q, centralContext ) );
-
- for ( ArtifactInfo ai : response.getResults() )
- {
- System.out.println( ai.toString() );
- }
-
- System.out.println( "------" );
- System.out.println( "Total: " + response.getTotalHitsCount() );
- System.out.println();
- }
-
- public void searchGroupedAndDump( Indexer nexusIndexer, String descr, Query q, Grouping g )
- throws IOException
- {
- System.out.println( "Searching for " + descr );
-
- GroupedSearchResponse response = nexusIndexer.searchGrouped( new GroupedSearchRequest( q, g, centralContext ) );
-
- for ( Map.Entry<String, ArtifactInfoGroup> entry : response.getResults().entrySet() )
- {
- ArtifactInfo ai = entry.getValue().getArtifactInfos().iterator().next();
- System.out.println( "* Entry " + ai );
- System.out.println( " Latest version: " + ai.getVersion() );
- System.out.println( StringUtils.isBlank( ai.getDescription() ) ? "No description in plugin's POM."
- : StringUtils.abbreviate( ai.getDescription(), 60 ) );
- System.out.println();
- }
-
- System.out.println( "------" );
- System.out.println( "Total record hits: " + response.getTotalHitsCount() );
- System.out.println();
- }
-}
http://git-wip-us.apache.org/repos/asf/maven-indexer/blob/afcd5ccd/indexer-examples/src/main/java/org/apache/maven/indexer/examples/BasicUsageExample.java
----------------------------------------------------------------------
diff --git a/indexer-examples/src/main/java/org/apache/maven/indexer/examples/BasicUsageExample.java b/indexer-examples/src/main/java/org/apache/maven/indexer/examples/BasicUsageExample.java
new file mode 100644
index 0000000..ff262d1
--- /dev/null
+++ b/indexer-examples/src/main/java/org/apache/maven/indexer/examples/BasicUsageExample.java
@@ -0,0 +1,352 @@
+package org.apache.maven.indexer.examples;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.lucene.document.Document;
+import org.apache.lucene.index.IndexReader;
+import org.apache.lucene.index.MultiFields;
+import org.apache.lucene.search.BooleanClause.Occur;
+import org.apache.lucene.search.BooleanQuery;
+import org.apache.lucene.search.IndexSearcher;
+import org.apache.lucene.search.Query;
+import org.apache.lucene.util.Bits;
+import org.apache.maven.index.ArtifactInfo;
+import org.apache.maven.index.ArtifactInfoFilter;
+import org.apache.maven.index.ArtifactInfoGroup;
+import org.apache.maven.index.Field;
+import org.apache.maven.index.FlatSearchRequest;
+import org.apache.maven.index.FlatSearchResponse;
+import org.apache.maven.index.GroupedSearchRequest;
+import org.apache.maven.index.GroupedSearchResponse;
+import org.apache.maven.index.Grouping;
+import org.apache.maven.index.Indexer;
+import org.apache.maven.index.IteratorSearchRequest;
+import org.apache.maven.index.IteratorSearchResponse;
+import org.apache.maven.index.MAVEN;
+import org.apache.maven.index.context.IndexCreator;
+import org.apache.maven.index.context.IndexUtils;
+import org.apache.maven.index.context.IndexingContext;
+import org.apache.maven.index.expr.SourcedSearchExpression;
+import org.apache.maven.index.expr.UserInputSearchExpression;
+import org.apache.maven.index.search.grouping.GAGrouping;
+import org.apache.maven.index.updater.IndexUpdateRequest;
+import org.apache.maven.index.updater.IndexUpdateResult;
+import org.apache.maven.index.updater.IndexUpdater;
+import org.apache.maven.index.updater.ResourceFetcher;
+import org.apache.maven.index.updater.WagonHelper;
+import org.apache.maven.wagon.Wagon;
+import org.apache.maven.wagon.events.TransferEvent;
+import org.apache.maven.wagon.events.TransferListener;
+import org.apache.maven.wagon.observers.AbstractTransferListener;
+import org.codehaus.plexus.DefaultPlexusContainer;
+import org.codehaus.plexus.PlexusContainer;
+import org.codehaus.plexus.PlexusContainerException;
+import org.codehaus.plexus.component.repository.exception.ComponentLookupException;
+import org.codehaus.plexus.util.StringUtils;
+import org.eclipse.aether.util.version.GenericVersionScheme;
+import org.eclipse.aether.version.InvalidVersionSpecificationException;
+import org.eclipse.aether.version.Version;
+
+public class BasicUsageExample
+{
+ public static void main( String[] args )
+ throws Exception
+ {
+ final BasicUsageExample basicUsageExample = new BasicUsageExample();
+ basicUsageExample.perform();
+ }
+
+ // ==
+
+ private final PlexusContainer plexusContainer;
+
+ private final Indexer indexer;
+
+ private final IndexUpdater indexUpdater;
+
+ private final Wagon httpWagon;
+
+ private IndexingContext centralContext;
+
+ public BasicUsageExample()
+ throws PlexusContainerException, ComponentLookupException
+ {
+ // here we create Plexus container, the Maven default IoC container
+ // Plexus falls outside of MI scope, just accept the fact that
+ // MI is a Plexus component ;)
+ // If needed more info, ask on Maven Users list or Plexus Users list
+ // google is your friend!
+ this.plexusContainer = new DefaultPlexusContainer();
+
+ // lookup the indexer components from plexus
+ this.indexer = plexusContainer.lookup( Indexer.class );
+ this.indexUpdater = plexusContainer.lookup( IndexUpdater.class );
+ // lookup wagon used to remotely fetch index
+ this.httpWagon = plexusContainer.lookup( Wagon.class, "http" );
+
+ }
+
+ public void perform()
+ throws IOException, ComponentLookupException, InvalidVersionSpecificationException
+ {
+ // Files where local cache is (if any) and Lucene Index should be located
+ File centralLocalCache = new File( "target/central-cache" );
+ File centralIndexDir = new File( "target/central-index" );
+
+ // Creators we want to use (search for fields it defines)
+ List<IndexCreator> indexers = new ArrayList<IndexCreator>();
+ indexers.add( plexusContainer.lookup( IndexCreator.class, "min" ) );
+ indexers.add( plexusContainer.lookup( IndexCreator.class, "jarContent" ) );
+ indexers.add( plexusContainer.lookup( IndexCreator.class, "maven-plugin" ) );
+
+ // Create context for central repository index
+ centralContext =
+ indexer.createIndexingContext( "central-context", "central", centralLocalCache, centralIndexDir,
+ "http://repo1.maven.org/maven2", null, true, true, indexers );
+
+ // Update the index (incremental update will happen if this is not 1st run and files are not deleted)
+ // This whole block below should not be executed on every app start, but rather controlled by some configuration
+ // since this block will always emit at least one HTTP GET. Central indexes are updated once a week, but
+ // other index sources might have different index publishing frequency.
+ // Preferred frequency is once a week.
+ if ( true )
+ {
+ System.out.println( "Updating Index..." );
+ System.out.println( "This might take a while on first run, so please be patient!" );
+ // Create ResourceFetcher implementation to be used with IndexUpdateRequest
+ // Here, we use Wagon based one as shorthand, but all we need is a ResourceFetcher implementation
+ TransferListener listener = new AbstractTransferListener()
+ {
+ public void transferStarted( TransferEvent transferEvent )
+ {
+ System.out.print( " Downloading " + transferEvent.getResource().getName() );
+ }
+
+ public void transferProgress( TransferEvent transferEvent, byte[] buffer, int length )
+ {
+ }
+
+ public void transferCompleted( TransferEvent transferEvent )
+ {
+ System.out.println( " - Done" );
+ }
+ };
+ ResourceFetcher resourceFetcher = new WagonHelper.WagonFetcher( httpWagon, listener, null, null );
+
+ Date centralContextCurrentTimestamp = centralContext.getTimestamp();
+ IndexUpdateRequest updateRequest = new IndexUpdateRequest( centralContext, resourceFetcher );
+ IndexUpdateResult updateResult = indexUpdater.fetchAndUpdateIndex( updateRequest );
+ if ( updateResult.isFullUpdate() )
+ {
+ System.out.println( "Full update happened!" );
+ }
+ else if ( updateResult.getTimestamp().equals( centralContextCurrentTimestamp ) )
+ {
+ System.out.println( "No update needed, index is up to date!" );
+ }
+ else
+ {
+ System.out.println( "Incremental update happened, change covered " + centralContextCurrentTimestamp
+ + " - " + updateResult.getTimestamp() + " period." );
+ }
+
+ System.out.println();
+ }
+
+ System.out.println();
+ System.out.println( "Using index" );
+ System.out.println( "===========" );
+ System.out.println();
+
+ // ====
+ // Case:
+ // dump all the GAVs
+ // NOTE: will not actually execute do this below, is too long to do (Central is HUGE), but is here as code
+ // example
+ if ( false )
+ {
+ final IndexSearcher searcher = centralContext.acquireIndexSearcher();
+ try
+ {
+ final IndexReader ir = searcher.getIndexReader();
+ Bits liveDocs = MultiFields.getLiveDocs(ir);
+ for ( int i = 0; i < ir.maxDoc(); i++ )
+ {
+ if ( liveDocs == null || liveDocs.get( i ) )
+ {
+ final Document doc = ir.document( i );
+ final ArtifactInfo ai = IndexUtils.constructArtifactInfo( doc, centralContext );
+ System.out.println( ai.getGroupId() + ":" + ai.getArtifactId() + ":" + ai.getVersion() + ":" + ai.getClassifier()
+ + " (sha1=" + ai.getSha1() + ")" );
+ }
+ }
+ }
+ finally
+ {
+ centralContext.releaseIndexSearcher( searcher );
+ }
+ }
+
+ // ====
+ // Case:
+ // Search for all GAVs with known G and A and having version greater than V
+
+ final GenericVersionScheme versionScheme = new GenericVersionScheme();
+ final String versionString = "1.5.0";
+ final Version version = versionScheme.parseVersion( versionString );
+
+ // construct the query for known GA
+ final Query groupIdQ =
+ indexer.constructQuery( MAVEN.GROUP_ID, new SourcedSearchExpression( "org.sonatype.nexus" ) );
+ final Query artifactIdQ =
+ indexer.constructQuery( MAVEN.ARTIFACT_ID, new SourcedSearchExpression( "nexus-api" ) );
+ final BooleanQuery query = new BooleanQuery();
+ query.add( groupIdQ, Occur.MUST );
+ query.add( artifactIdQ, Occur.MUST );
+
+ // we want "jar" artifacts only
+ query.add( indexer.constructQuery( MAVEN.PACKAGING, new SourcedSearchExpression( "jar" ) ), Occur.MUST );
+ // we want main artifacts only (no classifier)
+ // Note: this below is unfinished API, needs fixing
+ query.add( indexer.constructQuery( MAVEN.CLASSIFIER, new SourcedSearchExpression( Field.NOT_PRESENT ) ),
+ Occur.MUST_NOT );
+
+ // construct the filter to express "V greater than"
+ final ArtifactInfoFilter versionFilter = new ArtifactInfoFilter()
+ {
+ public boolean accepts( final IndexingContext ctx, final ArtifactInfo ai )
+ {
+ try
+ {
+ final Version aiV = versionScheme.parseVersion( ai.getVersion() );
+ // Use ">=" if you are INCLUSIVE
+ return aiV.compareTo( version ) > 0;
+ }
+ catch ( InvalidVersionSpecificationException e )
+ {
+ // do something here? be safe and include?
+ return true;
+ }
+ }
+ };
+
+ System.out.println( "Searching for all GAVs with G=org.sonatype.nexus and nexus-api and having V greater than 1.5.0" );
+ final IteratorSearchRequest request =
+ new IteratorSearchRequest( query, Collections.singletonList( centralContext ), versionFilter );
+ final IteratorSearchResponse response = indexer.searchIterator( request );
+ for ( ArtifactInfo ai : response )
+ {
+ System.out.println( ai.toString() );
+ }
+
+ // Case:
+ // Use index
+ // Searching for some artifact
+ Query gidQ = indexer.constructQuery( MAVEN.GROUP_ID, new SourcedSearchExpression( "org.apache.maven.indexer" ) );
+ Query aidQ = indexer.constructQuery( MAVEN.ARTIFACT_ID, new SourcedSearchExpression( "indexer-artifact" ) );
+
+ BooleanQuery bq = new BooleanQuery();
+ bq.add( gidQ, Occur.MUST );
+ bq.add( aidQ, Occur.MUST );
+
+ searchAndDump( indexer, "all artifacts under GA org.apache.maven.indexer:indexer-artifact", bq );
+
+ // Searching for some main artifact
+ bq = new BooleanQuery();
+ bq.add( gidQ, Occur.MUST );
+ bq.add( aidQ, Occur.MUST );
+ // bq.add( nexusIndexer.constructQuery( MAVEN.CLASSIFIER, new SourcedSearchExpression( "*" ) ), Occur.MUST_NOT
+ // );
+
+ searchAndDump( indexer, "main artifacts under GA org.apache.maven.indexer:indexer-artifact", bq );
+
+ // doing sha1 search
+ searchAndDump( indexer, "SHA1 7ab67e6b20e5332a7fb4fdf2f019aec4275846c2", indexer.constructQuery( MAVEN.SHA1,
+ new SourcedSearchExpression( "7ab67e6b20e5332a7fb4fdf2f019aec4275846c2" ) ) );
+
+ searchAndDump( indexer, "SHA1 7ab67e6b20 (partial hash)",
+ indexer.constructQuery( MAVEN.SHA1, new UserInputSearchExpression( "7ab67e6b20" ) ) );
+
+ // doing classname search (incomplete classname)
+ searchAndDump( indexer, "classname DefaultNexusIndexer (note: Central does not publish classes in the index)",
+ indexer.constructQuery( MAVEN.CLASSNAMES, new UserInputSearchExpression( "DefaultNexusIndexer" ) ) );
+
+ // doing search for all "canonical" maven plugins latest versions
+ bq = new BooleanQuery();
+ bq.add( indexer.constructQuery( MAVEN.PACKAGING, new SourcedSearchExpression( "maven-plugin" ) ), Occur.MUST );
+ bq.add( indexer.constructQuery( MAVEN.GROUP_ID, new SourcedSearchExpression( "org.apache.maven.plugins" ) ),
+ Occur.MUST );
+ searchGroupedAndDump( indexer, "all \"canonical\" maven plugins", bq, new GAGrouping() );
+
+ // doing search for all archetypes latest versions
+ searchGroupedAndDump( indexer, "all maven archetypes (latest versions)",
+ indexer.constructQuery( MAVEN.PACKAGING, new SourcedSearchExpression( "maven-archetype" ) ), new GAGrouping() );
+
+ // close cleanly
+ indexer.closeIndexingContext( centralContext, false );
+ }
+
+ public void searchAndDump( Indexer nexusIndexer, String descr, Query q )
+ throws IOException
+ {
+ System.out.println( "Searching for " + descr );
+
+ FlatSearchResponse response = nexusIndexer.searchFlat( new FlatSearchRequest( q, centralContext ) );
+
+ for ( ArtifactInfo ai : response.getResults() )
+ {
+ System.out.println( ai.toString() );
+ }
+
+ System.out.println( "------" );
+ System.out.println( "Total: " + response.getTotalHitsCount() );
+ System.out.println();
+ }
+
+ public void searchGroupedAndDump( Indexer nexusIndexer, String descr, Query q, Grouping g )
+ throws IOException
+ {
+ System.out.println( "Searching for " + descr );
+
+ GroupedSearchResponse response = nexusIndexer.searchGrouped( new GroupedSearchRequest( q, g, centralContext ) );
+
+ for ( Map.Entry<String, ArtifactInfoGroup> entry : response.getResults().entrySet() )
+ {
+ ArtifactInfo ai = entry.getValue().getArtifactInfos().iterator().next();
+ System.out.println( "* Entry " + ai );
+ System.out.println( " Latest version: " + ai.getVersion() );
+ System.out.println( StringUtils.isBlank( ai.getDescription() ) ? "No description in plugin's POM."
+ : StringUtils.abbreviate( ai.getDescription(), 60 ) );
+ System.out.println();
+ }
+
+ System.out.println( "------" );
+ System.out.println( "Total record hits: " + response.getTotalHitsCount() );
+ System.out.println();
+ }
+}
http://git-wip-us.apache.org/repos/asf/maven-indexer/blob/afcd5ccd/indexer-examples/src/test/java/org/apache/maven/indexer/example/BasicUsageExampleTest.java
----------------------------------------------------------------------
diff --git a/indexer-examples/src/test/java/org/apache/maven/indexer/example/BasicUsageExampleTest.java b/indexer-examples/src/test/java/org/apache/maven/indexer/example/BasicUsageExampleTest.java
deleted file mode 100644
index 9a85971..0000000
--- a/indexer-examples/src/test/java/org/apache/maven/indexer/example/BasicUsageExampleTest.java
+++ /dev/null
@@ -1,32 +0,0 @@
-package org.apache.maven.indexer.example;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you 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 junit.framework.TestCase;
-
-public class BasicUsageExampleTest
- extends TestCase
-{
- public void testApp()
- throws Exception
- {
- BasicUsageExample.main( null );
- }
-}
http://git-wip-us.apache.org/repos/asf/maven-indexer/blob/afcd5ccd/indexer-examples/src/test/java/org/apache/maven/indexer/examples/BasicUsageExampleTest.java
----------------------------------------------------------------------
diff --git a/indexer-examples/src/test/java/org/apache/maven/indexer/examples/BasicUsageExampleTest.java b/indexer-examples/src/test/java/org/apache/maven/indexer/examples/BasicUsageExampleTest.java
new file mode 100644
index 0000000..30b6d88
--- /dev/null
+++ b/indexer-examples/src/test/java/org/apache/maven/indexer/examples/BasicUsageExampleTest.java
@@ -0,0 +1,32 @@
+package org.apache.maven.indexer.examples;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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 junit.framework.TestCase;
+
+public class BasicUsageExampleTest
+ extends TestCase
+{
+ public void testApp()
+ throws Exception
+ {
+ BasicUsageExample.main( null );
+ }
+}