This is an automated email from the ASF dual-hosted git repository.

cziegeler pushed a commit to branch master
in repository 
https://gitbox.apache.org/repos/asf/sling-org-apache-sling-feature-analyser.git


The following commit(s) were added to refs/heads/master by this push:
     new dbb9187  SLING.7965 : Scanner should not require ArtifactManager
dbb9187 is described below

commit dbb9187fd5738c79f82cd8bfbebf9ce72ac605c0
Author: Carsten Ziegeler <[email protected]>
AuthorDate: Mon Oct 1 14:42:13 2018 +0200

    SLING.7965 : Scanner should not require ArtifactManager
---
 .../apache/sling/feature/analyser/main/Main.java   | 16 +++++++++++++-
 .../org/apache/sling/feature/scanner/Scanner.java  | 23 ++++++++------------
 .../scanner/impl/ApiRegionsExtensionScanner.java   |  6 +++---
 .../impl/ContentPackagesExtensionScanner.java      |  6 +++---
 .../scanner/impl/FelixFrameworkScanner.java        |  9 ++++++--
 .../feature/scanner/impl/RepoInitScanner.java      |  4 ++--
 ...FrameworkScanner.java => ArtifactProvider.java} | 25 ++++++----------------
 .../feature/scanner/spi/ExtensionScanner.java      |  5 ++---
 .../feature/scanner/spi/FrameworkScanner.java      |  7 +++---
 .../scanner/impl/FelixFrameworkScannerTest.java    |  9 +++++++-
 10 files changed, 58 insertions(+), 52 deletions(-)

diff --git a/src/main/java/org/apache/sling/feature/analyser/main/Main.java 
b/src/main/java/org/apache/sling/feature/analyser/main/Main.java
index 31e0f78..16a2902 100644
--- a/src/main/java/org/apache/sling/feature/analyser/main/Main.java
+++ b/src/main/java/org/apache/sling/feature/analyser/main/Main.java
@@ -16,6 +16,7 @@
  */
 package org.apache.sling.feature.analyser.main;
 
+import java.io.File;
 import java.io.FileReader;
 import java.io.IOException;
 
@@ -26,12 +27,14 @@ import org.apache.commons.cli.HelpFormatter;
 import org.apache.commons.cli.Option;
 import org.apache.commons.cli.Options;
 import org.apache.commons.cli.ParseException;
+import org.apache.sling.feature.ArtifactId;
 import org.apache.sling.feature.Feature;
 import org.apache.sling.feature.analyser.Analyser;
 import org.apache.sling.feature.io.file.ArtifactManager;
 import org.apache.sling.feature.io.file.ArtifactManagerConfig;
 import org.apache.sling.feature.io.json.FeatureJSONReader;
 import org.apache.sling.feature.scanner.Scanner;
+import org.apache.sling.feature.scanner.spi.ArtifactProvider;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -90,7 +93,18 @@ public class Main {
         }
 
         try {
-            final Scanner scanner = new 
Scanner(ArtifactManager.getArtifactManager(new ArtifactManagerConfig()));
+            final ArtifactManager am = ArtifactManager.getArtifactManager(new 
ArtifactManagerConfig());
+            final Scanner scanner = new Scanner(new ArtifactProvider() {
+
+                @Override
+                public File provide(ArtifactId id) {
+                    try {
+                        return am.getArtifactHandler(id.toMvnUrl()).getFile();
+                    } catch (final IOException e) {
+                        return null;
+                    }
+                }
+            });
             final Analyser analyser;
             if (pluginClass != null) {
                 analyser = new Analyser(scanner, pluginClass);
diff --git a/src/main/java/org/apache/sling/feature/scanner/Scanner.java 
b/src/main/java/org/apache/sling/feature/scanner/Scanner.java
index 989d505..0cf49cb 100644
--- a/src/main/java/org/apache/sling/feature/scanner/Scanner.java
+++ b/src/main/java/org/apache/sling/feature/scanner/Scanner.java
@@ -30,9 +30,9 @@ import org.apache.sling.feature.Extension;
 import org.apache.sling.feature.Extensions;
 import org.apache.sling.feature.Feature;
 import org.apache.sling.feature.KeyValueMap;
-import org.apache.sling.feature.io.file.ArtifactManager;
 import org.apache.sling.feature.scanner.impl.BundleDescriptorImpl;
 import org.apache.sling.feature.scanner.impl.FeatureDescriptorImpl;
+import org.apache.sling.feature.scanner.spi.ArtifactProvider;
 import org.apache.sling.feature.scanner.spi.ExtensionScanner;
 import org.apache.sling.feature.scanner.spi.FrameworkScanner;
 
@@ -48,7 +48,7 @@ import org.apache.sling.feature.scanner.spi.FrameworkScanner;
  */
 public class Scanner {
 
-    private final ArtifactManager artifactManager;
+    private final ArtifactProvider artifactProvider;
 
     private final List<ExtensionScanner> extensionScanners;
 
@@ -61,11 +61,11 @@ public class Scanner {
      * @param extensionScanners A list of extension scanners
      * @throws IOException If something goes wrong
      */
-    public Scanner(final ArtifactManager am,
+    public Scanner(final ArtifactProvider artifactProvider,
             final List<ExtensionScanner> extensionScanners,
             final List<FrameworkScanner> frameworkScanners)
     throws IOException {
-        this.artifactManager = am;
+        this.artifactProvider = artifactProvider;
         this.extensionScanners = extensionScanners == null ? 
getServices(ExtensionScanner.class) : extensionScanners;
         this.frameworkScanners = frameworkScanners == null ? 
getServices(FrameworkScanner.class) : frameworkScanners;
     }
@@ -76,9 +76,9 @@ public class Scanner {
      * @param am The artifact manager
      * @throws IOException If something goes wrong
      */
-    public Scanner(final ArtifactManager am)
+    public Scanner(final ArtifactProvider artifactProvider)
     throws IOException {
-        this(am, null, null);
+        this(artifactProvider, null, null);
     }
 
     /**
@@ -105,7 +105,7 @@ public class Scanner {
      * @throws IOException If something goes wrong or the provided artifact is 
not a bundle.
      */
     public BundleDescriptor scan(final Artifact bundle, final int startLevel) 
throws IOException {
-        final File file = 
artifactManager.getArtifactHandler(bundle.getId().toMvnUrl()).getFile();
+        final File file = artifactProvider.provide(bundle.getId());
         if ( file == null ) {
             throw new IOException("Unable to find file for " + bundle.getId());
         }
@@ -134,7 +134,7 @@ public class Scanner {
         for(final Extension ext : extensions) {
             ContainerDescriptor extDesc = null;
             for(final ExtensionScanner scanner : this.extensionScanners) {
-                extDesc = scanner.scan(f, ext, this.artifactManager);
+                extDesc = scanner.scan(f, ext, this.artifactProvider);
                 if ( extDesc != null ) {
                     break;
                 }
@@ -187,14 +187,9 @@ public class Scanner {
      * @throws IOException If something goes wrong or a scanner is missing
      */
     public BundleDescriptor scan(final ArtifactId framework, final KeyValueMap 
props) throws IOException {
-        final File file = 
artifactManager.getArtifactHandler(framework.toMvnUrl()).getFile();
-        if ( file == null ) {
-            throw new IOException("Unable to find file for " + framework);
-        }
-
         BundleDescriptor fwk = null;
         for(final FrameworkScanner scanner : this.frameworkScanners) {
-            fwk = scanner.scan(framework, file, props);
+            fwk = scanner.scan(framework, props, artifactProvider);
             if ( fwk != null ) {
                 break;
             }
diff --git 
a/src/main/java/org/apache/sling/feature/scanner/impl/ApiRegionsExtensionScanner.java
 
b/src/main/java/org/apache/sling/feature/scanner/impl/ApiRegionsExtensionScanner.java
index 92d1fac..d4bd5a5 100644
--- 
a/src/main/java/org/apache/sling/feature/scanner/impl/ApiRegionsExtensionScanner.java
+++ 
b/src/main/java/org/apache/sling/feature/scanner/impl/ApiRegionsExtensionScanner.java
@@ -22,10 +22,10 @@ import java.io.IOException;
 import org.apache.sling.feature.Artifact;
 import org.apache.sling.feature.Extension;
 import org.apache.sling.feature.Feature;
-import org.apache.sling.feature.io.file.ArtifactManager;
 import org.apache.sling.feature.scanner.BundleDescriptor;
 import org.apache.sling.feature.scanner.ContainerDescriptor;
 import org.apache.sling.feature.scanner.FeatureDescriptor;
+import org.apache.sling.feature.scanner.spi.ArtifactProvider;
 import org.apache.sling.feature.scanner.spi.ExtensionScanner;
 
 public class ApiRegionsExtensionScanner implements ExtensionScanner {
@@ -41,11 +41,11 @@ public class ApiRegionsExtensionScanner implements 
ExtensionScanner {
     }
 
     @Override
-    public ContainerDescriptor scan(Feature feature, Extension extension, 
ArtifactManager manager) throws IOException {
+    public ContainerDescriptor scan(Feature feature, Extension extension, 
ArtifactProvider provider) throws IOException {
         FeatureDescriptor featureDescriptor = new 
FeatureDescriptorImpl(feature);
 
         for (Artifact artifact : feature.getBundles()) {
-            File file = 
manager.getArtifactHandler(artifact.getId().toMvnUrl()).getFile();
+            File file = provider.provide(artifact.getId());
             BundleDescriptor bundleDescriptor = new 
BundleDescriptorImpl(artifact, file, artifact.getStartOrder());
             featureDescriptor.getBundleDescriptors().add(bundleDescriptor);
         }
diff --git 
a/src/main/java/org/apache/sling/feature/scanner/impl/ContentPackagesExtensionScanner.java
 
b/src/main/java/org/apache/sling/feature/scanner/impl/ContentPackagesExtensionScanner.java
index de7dcfe..1f8bd5a 100644
--- 
a/src/main/java/org/apache/sling/feature/scanner/impl/ContentPackagesExtensionScanner.java
+++ 
b/src/main/java/org/apache/sling/feature/scanner/impl/ContentPackagesExtensionScanner.java
@@ -25,8 +25,8 @@ import org.apache.sling.feature.Extension;
 import org.apache.sling.feature.ExtensionType;
 import org.apache.sling.feature.Feature;
 import org.apache.sling.feature.FeatureConstants;
-import org.apache.sling.feature.io.file.ArtifactManager;
 import org.apache.sling.feature.scanner.ContainerDescriptor;
+import org.apache.sling.feature.scanner.spi.ArtifactProvider;
 import org.apache.sling.feature.scanner.spi.ExtensionScanner;
 
 public class ContentPackagesExtensionScanner implements ExtensionScanner {
@@ -44,7 +44,7 @@ public class ContentPackagesExtensionScanner implements 
ExtensionScanner {
     @Override
     public ContainerDescriptor scan(final Feature feature,
             final Extension extension,
-            final ArtifactManager artifactManager)
+            final ArtifactProvider provider)
     throws IOException {
         if 
(!FeatureConstants.EXTENSION_NAME_CONTENT_PACKAGES.equals(extension.getName()) 
) {
             return null;
@@ -57,7 +57,7 @@ public class ContentPackagesExtensionScanner implements 
ExtensionScanner {
         final ContainerDescriptor cd = new ContainerDescriptor() {};
 
         for(final Artifact a : extension.getArtifacts()) {
-            final File file = 
artifactManager.getArtifactHandler(a.getId().toMvnUrl()).getFile();
+            final File file = provider.provide(a.getId());
             if ( file == null ) {
                 throw new IOException("Unable to find file for " + a.getId());
             }
diff --git 
a/src/main/java/org/apache/sling/feature/scanner/impl/FelixFrameworkScanner.java
 
b/src/main/java/org/apache/sling/feature/scanner/impl/FelixFrameworkScanner.java
index f533e93..b22cddb 100644
--- 
a/src/main/java/org/apache/sling/feature/scanner/impl/FelixFrameworkScanner.java
+++ 
b/src/main/java/org/apache/sling/feature/scanner/impl/FelixFrameworkScanner.java
@@ -41,6 +41,7 @@ import org.apache.sling.feature.ArtifactId;
 import org.apache.sling.feature.KeyValueMap;
 import org.apache.sling.feature.scanner.BundleDescriptor;
 import org.apache.sling.feature.scanner.PackageInfo;
+import org.apache.sling.feature.scanner.spi.ArtifactProvider;
 import org.apache.sling.feature.scanner.spi.FrameworkScanner;
 import org.osgi.framework.Constants;
 import org.osgi.resource.Capability;
@@ -50,9 +51,13 @@ public class FelixFrameworkScanner implements 
FrameworkScanner {
 
     @Override
     public BundleDescriptor scan(final ArtifactId framework,
-            final File platformFile,
-            final KeyValueMap frameworkProps)
+            final KeyValueMap frameworkProps,
+            final ArtifactProvider provider)
     throws IOException {
+        final File platformFile = provider.provide(framework);
+        if ( platformFile == null ) {
+            throw new IOException("Unable to find file for " + 
framework.toMvnId());
+        }
         final KeyValueMap fwkProps = getFrameworkProperties(frameworkProps, 
platformFile);
         if ( fwkProps == null ) {
             return null;
diff --git 
a/src/main/java/org/apache/sling/feature/scanner/impl/RepoInitScanner.java 
b/src/main/java/org/apache/sling/feature/scanner/impl/RepoInitScanner.java
index e8304a4..524e411 100644
--- a/src/main/java/org/apache/sling/feature/scanner/impl/RepoInitScanner.java
+++ b/src/main/java/org/apache/sling/feature/scanner/impl/RepoInitScanner.java
@@ -24,8 +24,8 @@ import org.apache.sling.feature.Extension;
 import org.apache.sling.feature.ExtensionType;
 import org.apache.sling.feature.Feature;
 import org.apache.sling.feature.FeatureConstants;
-import org.apache.sling.feature.io.file.ArtifactManager;
 import org.apache.sling.feature.scanner.ContainerDescriptor;
+import org.apache.sling.feature.scanner.spi.ArtifactProvider;
 import org.apache.sling.feature.scanner.spi.ExtensionScanner;
 import org.osgi.resource.Requirement;
 
@@ -47,7 +47,7 @@ public class RepoInitScanner implements ExtensionScanner {
     @Override
     public ContainerDescriptor scan(final Feature feature,
             final Extension extension,
-            final ArtifactManager artifactManager)
+            final ArtifactProvider provider)
     throws IOException {
         if 
(!FeatureConstants.EXTENSION_NAME_REPOINIT.equals(extension.getName()) ) {
             return null;
diff --git 
a/src/main/java/org/apache/sling/feature/scanner/spi/FrameworkScanner.java 
b/src/main/java/org/apache/sling/feature/scanner/spi/ArtifactProvider.java
similarity index 54%
copy from 
src/main/java/org/apache/sling/feature/scanner/spi/FrameworkScanner.java
copy to src/main/java/org/apache/sling/feature/scanner/spi/ArtifactProvider.java
index 84b115e..cf68394 100644
--- a/src/main/java/org/apache/sling/feature/scanner/spi/FrameworkScanner.java
+++ b/src/main/java/org/apache/sling/feature/scanner/spi/ArtifactProvider.java
@@ -17,28 +17,15 @@
 package org.apache.sling.feature.scanner.spi;
 
 import java.io.File;
-import java.io.IOException;
 
 import org.apache.sling.feature.ArtifactId;
-import org.apache.sling.feature.KeyValueMap;
-import org.apache.sling.feature.scanner.BundleDescriptor;
-import org.osgi.annotation.versioning.ConsumerType;
 
-/**
- * The framework scanner scans the framework
- */
-@ConsumerType
-public interface FrameworkScanner  {
+public interface ArtifactProvider {
 
     /**
-     * Try to scan the artifact
-     * @param framework The framework artifact id
-     * @param frameworkFile The framework artifact
-     * @param frameworkProps framework properties to launch the framework
-     * @return A descriptor or {@code null}
-     * @throws IOException If an error occurs while scanning the platform or 
the artifact is invalid
+     * Provide the artifact with the given id.
+     * @param id The artifact id
+     * @return The file or {@code null}
      */
-    BundleDescriptor scan(ArtifactId framework,
-            File frameworkFile,
-            KeyValueMap frameworkProps) throws IOException;
-}
\ No newline at end of file
+    File provide(ArtifactId id);
+}
diff --git 
a/src/main/java/org/apache/sling/feature/scanner/spi/ExtensionScanner.java 
b/src/main/java/org/apache/sling/feature/scanner/spi/ExtensionScanner.java
index 8881237..cc7f625 100644
--- a/src/main/java/org/apache/sling/feature/scanner/spi/ExtensionScanner.java
+++ b/src/main/java/org/apache/sling/feature/scanner/spi/ExtensionScanner.java
@@ -20,7 +20,6 @@ import java.io.IOException;
 
 import org.apache.sling.feature.Extension;
 import org.apache.sling.feature.Feature;
-import org.apache.sling.feature.io.file.ArtifactManager;
 import org.apache.sling.feature.scanner.ContainerDescriptor;
 import org.osgi.annotation.versioning.ConsumerType;
 
@@ -45,12 +44,12 @@ public interface ExtensionScanner  {
      *
      * @param feature The feature the extension belongs to
      * @param extension The extension
-     * @param manager Artifact manager
+     * @param provider Artifact provider
      * @return The descriptor or {@code null} if the scanner does not know the 
extension
      * @throws IOException If an error occurs while scanning the extension or 
the extension is invalid
      */
     ContainerDescriptor scan(
             Feature feature,
             Extension extension,
-            ArtifactManager manager) throws IOException;
+            ArtifactProvider provider) throws IOException;
 }
\ No newline at end of file
diff --git 
a/src/main/java/org/apache/sling/feature/scanner/spi/FrameworkScanner.java 
b/src/main/java/org/apache/sling/feature/scanner/spi/FrameworkScanner.java
index 84b115e..7349849 100644
--- a/src/main/java/org/apache/sling/feature/scanner/spi/FrameworkScanner.java
+++ b/src/main/java/org/apache/sling/feature/scanner/spi/FrameworkScanner.java
@@ -16,7 +16,6 @@
  */
 package org.apache.sling.feature.scanner.spi;
 
-import java.io.File;
 import java.io.IOException;
 
 import org.apache.sling.feature.ArtifactId;
@@ -33,12 +32,12 @@ public interface FrameworkScanner  {
     /**
      * Try to scan the artifact
      * @param framework The framework artifact id
-     * @param frameworkFile The framework artifact
      * @param frameworkProps framework properties to launch the framework
+     * @param provider Artifact provider
      * @return A descriptor or {@code null}
      * @throws IOException If an error occurs while scanning the platform or 
the artifact is invalid
      */
     BundleDescriptor scan(ArtifactId framework,
-            File frameworkFile,
-            KeyValueMap frameworkProps) throws IOException;
+            KeyValueMap frameworkProps,
+            ArtifactProvider provider) throws IOException;
 }
\ No newline at end of file
diff --git 
a/src/test/java/org/apache/sling/feature/scanner/impl/FelixFrameworkScannerTest.java
 
b/src/test/java/org/apache/sling/feature/scanner/impl/FelixFrameworkScannerTest.java
index 05fcb89..7911bc3 100644
--- 
a/src/test/java/org/apache/sling/feature/scanner/impl/FelixFrameworkScannerTest.java
+++ 
b/src/test/java/org/apache/sling/feature/scanner/impl/FelixFrameworkScannerTest.java
@@ -25,6 +25,7 @@ import java.net.URL;
 import org.apache.sling.feature.ArtifactId;
 import org.apache.sling.feature.KeyValueMap;
 import org.apache.sling.feature.scanner.BundleDescriptor;
+import org.apache.sling.feature.scanner.spi.ArtifactProvider;
 import org.junit.Test;
 
 public class FelixFrameworkScannerTest {
@@ -61,7 +62,13 @@ public class FelixFrameworkScannerTest {
 
         BundleDescriptor bundleDescriptor = ffs.scan(new 
ArtifactId("org.apache.felix",
                 "org.apache.felix.framework",
-                "5.6.10", null, null), fwFile, kvmap);
+                "5.6.10", null, null), kvmap, new ArtifactProvider() {
+
+                    @Override
+                    public File provide(ArtifactId id) {
+                        return fwFile;
+                    }
+                });
 
         assertFalse(bundleDescriptor.getExportedPackages().isEmpty());
         assertFalse(bundleDescriptor.getCapabilities().isEmpty());

Reply via email to