MINDEXER-67: Removing scan method from Indexer.
And putting it back to deprecated NexusIndexer, as it's
value is questionable, especially after MINDEXER-65 is
implemented.
I'd like to keep Indexer as small and simple as possible.
git-svn-id: https://svn.apache.org/repos/asf/maven/indexer/trunk@1410355 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/indexer-core/src/main/java/org/apache/maven/index/DefaultIndexer.java b/indexer-core/src/main/java/org/apache/maven/index/DefaultIndexer.java
index 599d4eb..ac7ec24 100644
--- a/indexer-core/src/main/java/org/apache/maven/index/DefaultIndexer.java
+++ b/indexer-core/src/main/java/org/apache/maven/index/DefaultIndexer.java
@@ -31,12 +31,10 @@
import org.apache.lucene.queryParser.ParseException;
import org.apache.lucene.search.Query;
-import org.apache.lucene.store.FSDirectory;
import org.apache.maven.index.context.ContextMemberProvider;
import org.apache.maven.index.context.DefaultIndexingContext;
import org.apache.maven.index.context.ExistingLuceneIndexMismatchException;
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.context.MergedIndexingContext;
import org.apache.maven.index.expr.SearchExpression;
@@ -45,7 +43,6 @@
import org.codehaus.plexus.component.annotations.Component;
import org.codehaus.plexus.component.annotations.Requirement;
import org.codehaus.plexus.logging.AbstractLogEnabled;
-import org.codehaus.plexus.util.FileUtils;
import org.codehaus.plexus.util.IOUtil;
/**
@@ -59,9 +56,6 @@
implements Indexer
{
@Requirement
- private Scanner scanner;
-
- @Requirement
private SearchEngine searcher;
@Requirement
@@ -103,78 +97,6 @@
}
// ----------------------------------------------------------------------------
- // Scanning
- // ----------------------------------------------------------------------------
-
- public void scan( final IndexerScanRequest indexerScanRequest )
- throws IOException
- {
- final IndexingContext context = indexerScanRequest.getIndexingContext();
- final File repositoryDirectory = context.getRepository();
- if ( repositoryDirectory == null )
- {
- // nothing to scan
- return;
- }
-
- if ( !repositoryDirectory.exists() )
- {
- throw new IOException( "Repository directory " + repositoryDirectory + " does not exist" );
- }
-
- // always use temporary context when reindexing
- final File tmpFile = File.createTempFile( context.getId() + "-tmp", "" );
- final File tmpDir = new File( tmpFile.getParentFile(), tmpFile.getName() + ".dir" );
- if ( !tmpDir.mkdirs() )
- {
- throw new IOException( "Cannot create temporary directory: " + tmpDir );
- }
-
- IndexingContext tmpContext = null;
- try
- {
- final FSDirectory directory = FSDirectory.open( tmpDir );
- if ( indexerScanRequest.isUpdate() )
- {
- IndexUtils.copyDirectory( context.getIndexDirectory(), directory );
- }
- tmpContext = new DefaultIndexingContext( context.getId() + "-tmp", //
- context.getRepositoryId(), //
- context.getRepository(), //
- directory, //
- context.getRepositoryUrl(), //
- context.getIndexUpdateUrl(), //
- context.getIndexCreators(), //
- true );
-
- scanner.scan( new ScanningRequest( tmpContext, //
- new DefaultScannerListener( tmpContext, indexerEngine, indexerScanRequest.isUpdate(),
- indexerScanRequest.getArtifactScanningListener() ), indexerScanRequest.getStartingPath() ) );
-
- tmpContext.updateTimestamp( true );
- context.replace( tmpContext.getIndexDirectory() );
- }
- catch ( Exception ex )
- {
- throw (IOException) new IOException( "Error scanning context " + context.getId() + ": " + ex ).initCause( ex );
- }
- finally
- {
- if ( tmpContext != null )
- {
- tmpContext.close( true );
- }
-
- if ( tmpFile.exists() )
- {
- tmpFile.delete();
- }
-
- FileUtils.deleteDirectory( tmpDir );
- }
- }
-
- // ----------------------------------------------------------------------------
// Modifying
// ----------------------------------------------------------------------------
diff --git a/indexer-core/src/main/java/org/apache/maven/index/DefaultNexusIndexer.java b/indexer-core/src/main/java/org/apache/maven/index/DefaultNexusIndexer.java
index d26831c..e9603c5 100644
--- a/indexer-core/src/main/java/org/apache/maven/index/DefaultNexusIndexer.java
+++ b/indexer-core/src/main/java/org/apache/maven/index/DefaultNexusIndexer.java
@@ -30,10 +30,12 @@
import org.apache.lucene.queryParser.ParseException;
import org.apache.lucene.search.Query;
import org.apache.lucene.store.Directory;
+import org.apache.lucene.store.FSDirectory;
import org.apache.maven.index.context.ContextMemberProvider;
import org.apache.maven.index.context.DefaultIndexingContext;
import org.apache.maven.index.context.ExistingLuceneIndexMismatchException;
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.context.MergedIndexingContext;
import org.apache.maven.index.context.StaticContextMemberProvider;
@@ -43,10 +45,11 @@
import org.codehaus.plexus.component.annotations.Component;
import org.codehaus.plexus.component.annotations.Requirement;
import org.codehaus.plexus.logging.AbstractLogEnabled;
+import org.codehaus.plexus.util.FileUtils;
/**
* A default {@link NexusIndexer} implementation.
- *
+ *
* @author Tamas Cservenak
* @author Eugene Kuleshov
* @deprecated Use {@link Indexer} instead. Discouraged from further use, as it suffers from multiple synchronization
@@ -60,10 +63,14 @@
extends AbstractLogEnabled
implements NexusIndexer
{
+
@Requirement
private Indexer indexer;
@Requirement
+ private Scanner scanner;
+
+ @Requirement
private IndexerEngine indexerEngine;
@Requirement
@@ -81,15 +88,15 @@
}
public IndexingContext addIndexingContext( String id, String repositoryId, File repository, File indexDirectory,
- String repositoryUrl, String indexUpdateUrl,
- List<? extends IndexCreator> indexers )
+ String repositoryUrl, String indexUpdateUrl,
+ List<? extends IndexCreator> indexers )
throws IOException, UnsupportedExistingLuceneIndexException
{
try
{
IndexingContext context =
indexer.createIndexingContext( id, repositoryId, repository, indexDirectory, repositoryUrl,
- indexUpdateUrl, true, false, indexers );
+ indexUpdateUrl, true, false, indexers );
indexingContexts.put( context.getId(), context );
return context;
}
@@ -100,27 +107,27 @@
}
public IndexingContext addIndexingContextForced( String id, String repositoryId, File repository,
- File indexDirectory, String repositoryUrl, String indexUpdateUrl,
- List<? extends IndexCreator> indexers )
+ File indexDirectory, String repositoryUrl, String indexUpdateUrl,
+ List<? extends IndexCreator> indexers )
throws IOException
{
IndexingContext context =
indexer.createIndexingContext( id, repositoryId, repository, indexDirectory, repositoryUrl, indexUpdateUrl,
- true, true, indexers );
+ true, true, indexers );
indexingContexts.put( context.getId(), context );
return context;
}
public IndexingContext addIndexingContext( String id, String repositoryId, File repository, Directory directory,
- String repositoryUrl, String indexUpdateUrl,
- List<? extends IndexCreator> indexers )
+ String repositoryUrl, String indexUpdateUrl,
+ List<? extends IndexCreator> indexers )
throws IOException, UnsupportedExistingLuceneIndexException
{
try
{
IndexingContext context =
new DefaultIndexingContext( id, repositoryId, repository, directory, repositoryUrl, indexUpdateUrl,
- IndexCreatorSorter.sort( indexers ), false );
+ IndexCreatorSorter.sort( indexers ), false );
indexingContexts.put( context.getId(), context );
return context;
}
@@ -131,53 +138,53 @@
}
public IndexingContext addIndexingContextForced( String id, String repositoryId, File repository,
- Directory directory, String repositoryUrl, String indexUpdateUrl,
- List<? extends IndexCreator> indexers )
+ Directory directory, String repositoryUrl, String indexUpdateUrl,
+ List<? extends IndexCreator> indexers )
throws IOException
{
IndexingContext context =
new DefaultIndexingContext( id, repositoryId, repository, directory, repositoryUrl, indexUpdateUrl,
- IndexCreatorSorter.sort( indexers ), true );
+ IndexCreatorSorter.sort( indexers ), true );
indexingContexts.put( context.getId(), context );
return context;
}
public IndexingContext addMergedIndexingContext( String id, String repositoryId, File repository,
- File indexDirectory, boolean searchable,
- Collection<IndexingContext> contexts )
+ File indexDirectory, boolean searchable,
+ Collection<IndexingContext> contexts )
throws IOException
{
return addMergedIndexingContext( id, repositoryId, repository, indexDirectory, searchable,
- new StaticContextMemberProvider( contexts ) );
+ new StaticContextMemberProvider( contexts ) );
}
public IndexingContext addMergedIndexingContext( String id, String repositoryId, File repository,
- File indexDirectory, boolean searchable,
- ContextMemberProvider membersProvider )
+ File indexDirectory, boolean searchable,
+ ContextMemberProvider membersProvider )
throws IOException
{
IndexingContext context =
indexer.createMergedIndexingContext( id, repositoryId, repository, indexDirectory, searchable,
- membersProvider );
+ membersProvider );
indexingContexts.put( context.getId(), context );
return context;
}
public IndexingContext addMergedIndexingContext( String id, String repositoryId, File repository,
- Directory indexDirectory, boolean searchable,
- Collection<IndexingContext> contexts )
+ Directory indexDirectory, boolean searchable,
+ Collection<IndexingContext> contexts )
throws IOException
{
IndexingContext context =
new MergedIndexingContext( id, repositoryId, repository, indexDirectory, searchable,
- new StaticContextMemberProvider( contexts ) );
+ new StaticContextMemberProvider( contexts ) );
indexingContexts.put( context.getId(), context );
return context;
}
public IndexingContext addMergedIndexingContext( String id, String repositoryId, File repository,
- Directory indexDirectory, boolean searchable,
- ContextMemberProvider membersProvider )
+ Directory indexDirectory, boolean searchable,
+ ContextMemberProvider membersProvider )
throws IOException
{
IndexingContext context =
@@ -233,16 +240,77 @@
* Uses {@link Scanner} to scan repository content. A {@link ArtifactScanningListener} is used to process found
* artifacts and to add them to the index using
* {@link NexusIndexer#artifactDiscovered(ArtifactContext, IndexingContext)}.
- *
+ *
* @see DefaultScannerListener
* @see #artifactDiscovered(ArtifactContext, IndexingContext)
*/
public void scan( final IndexingContext context, final String fromPath, final ArtifactScanningListener listener,
- final boolean update )
+ final boolean update )
throws IOException
{
- final IndexerScanRequest indexerScanRequest = new IndexerScanRequest( context, listener, fromPath, update );
- indexer.scan( indexerScanRequest );
+ final File repositoryDirectory = context.getRepository();
+ if ( repositoryDirectory == null )
+ {
+ // nothing to scan
+ return;
+ }
+
+ if ( !repositoryDirectory.exists() )
+ {
+ throw new IOException( "Repository directory " + repositoryDirectory + " does not exist" );
+ }
+
+ // always use temporary context when reindexing
+ final File tmpFile = File.createTempFile( context.getId() + "-tmp", "" );
+ final File tmpDir = new File( tmpFile.getParentFile(), tmpFile.getName() + ".dir" );
+ if ( !tmpDir.mkdirs() )
+ {
+ throw new IOException( "Cannot create temporary directory: " + tmpDir );
+ }
+
+ IndexingContext tmpContext = null;
+ try
+ {
+ final FSDirectory directory = FSDirectory.open( tmpDir );
+ if ( update )
+ {
+ IndexUtils.copyDirectory( context.getIndexDirectory(), directory );
+ }
+ tmpContext = new DefaultIndexingContext( context.getId() + "-tmp", //
+ context.getRepositoryId(), //
+ context.getRepository(), //
+ directory, //
+ context.getRepositoryUrl(), //
+ context.getIndexUpdateUrl(), //
+ context.getIndexCreators(), //
+ true );
+
+ scanner.scan( new ScanningRequest( tmpContext, //
+ new DefaultScannerListener( tmpContext, indexerEngine,
+ update, listener ), fromPath ) );
+
+ tmpContext.updateTimestamp( true );
+ context.replace( tmpContext.getIndexDirectory() );
+ }
+ catch ( Exception ex )
+ {
+ throw (IOException) new IOException( "Error scanning context " + context.getId() + ": " + ex ).initCause(
+ ex );
+ }
+ finally
+ {
+ if ( tmpContext != null )
+ {
+ tmpContext.close( true );
+ }
+
+ if ( tmpFile.exists() )
+ {
+ tmpFile.delete();
+ }
+
+ FileUtils.deleteDirectory( tmpDir );
+ }
}
/**
diff --git a/indexer-core/src/main/java/org/apache/maven/index/Indexer.java b/indexer-core/src/main/java/org/apache/maven/index/Indexer.java
index 3275373..6cd9f67 100644
--- a/indexer-core/src/main/java/org/apache/maven/index/Indexer.java
+++ b/indexer-core/src/main/java/org/apache/maven/index/Indexer.java
@@ -105,19 +105,6 @@
throws IOException;
// ----------------------------------------------------------------------------
- // Scanning
- // ----------------------------------------------------------------------------
-
- /**
- * Performs a scan (re-index).
- *
- * @param indexerScanRequest
- * @throws IOException
- */
- void scan( IndexerScanRequest indexerScanRequest )
- throws IOException;
-
- // ----------------------------------------------------------------------------
// Modifying
// ----------------------------------------------------------------------------
diff --git a/indexer-core/src/main/java/org/apache/maven/index/IndexerScanRequest.java b/indexer-core/src/main/java/org/apache/maven/index/IndexerScanRequest.java
deleted file mode 100644
index 7527fda..0000000
--- a/indexer-core/src/main/java/org/apache/maven/index/IndexerScanRequest.java
+++ /dev/null
@@ -1,91 +0,0 @@
-package org.apache.maven.index;
-
-import java.io.File;
-
-import org.apache.maven.index.context.IndexingContext;
-import org.codehaus.plexus.util.StringUtils;
-
-/*
- * 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.
- */
-
-/**
- * Scanning request for initiating a {@link Indexer#scan(IndexerScanRequest)} operation of an {@link IndexingContext}.
- *
- * @author cstamas
- * @since 5.1.0
- */
-public class IndexerScanRequest
-{
- private final IndexingContext context;
-
- private final ArtifactScanningListener artifactScanningListener;
-
- private final String startingPath;
-
- private final boolean update;
-
- /**
- * Constructor.
- *
- * @param context
- * @param artifactScanningListener
- * @param startingPath
- * @param update
- */
- public IndexerScanRequest( final IndexingContext context, final ArtifactScanningListener artifactScanningListener,
- final String startingPath, final boolean update )
- {
- this.context = context;
- this.artifactScanningListener = artifactScanningListener;
- this.startingPath = startingPath;
- this.update = update;
- }
-
- public IndexingContext getIndexingContext()
- {
- return context;
- }
-
- public ArtifactScanningListener getArtifactScanningListener()
- {
- return artifactScanningListener;
- }
-
- public String getStartingPath()
- {
- return startingPath;
- }
-
- public boolean isUpdate()
- {
- return update;
- }
-
- public File getStartingDirectory()
- {
- if ( StringUtils.isBlank( startingPath ) )
- {
- return getIndexingContext().getRepository();
- }
- else
- {
- return new File( getIndexingContext().getRepository(), startingPath );
- }
- }
-}