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