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 );
-        }
-    }
-}