You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by pa...@apache.org on 2019/06/07 16:36:45 UTC
[sling-org-apache-sling-feature-analyser] branch issues/SLING-8421
updated: SLING-8421: Allow artifact providers that work with URLs instead
of Files
This is an automated email from the ASF dual-hosted git repository.
pauls pushed a commit to branch issues/SLING-8421
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-feature-analyser.git
The following commit(s) were added to refs/heads/issues/SLING-8421 by this push:
new 4dd9349 SLING-8421: Allow artifact providers that work with URLs instead of Files
4dd9349 is described below
commit 4dd9349d89f9eff23eaa363b35413e8aaefd9d39
Author: Karl Pauls <ka...@gmail.com>
AuthorDate: Fri Jun 7 18:36:35 2019 +0200
SLING-8421: Allow artifact providers that work with URLs instead of Files
---
pom.xml | 2 +-
.../analyser/task/impl/CheckBundlesForConnect.java | 2 +-
.../sling/feature/scanner/ArtifactDescriptor.java | 4 ++--
.../org/apache/sling/feature/scanner/Scanner.java | 3 ++-
.../scanner/impl/ApiRegionsExtensionScanner.java | 4 ++--
.../feature/scanner/impl/BundleDescriptorImpl.java | 10 +++++----
.../scanner/impl/ContentPackageDescriptor.java | 7 +++---
.../scanner/impl/ContentPackageScanner.java | 26 ++++++++++------------
.../impl/ContentPackagesExtensionScanner.java | 3 ++-
.../scanner/impl/FelixFrameworkScanner.java | 9 ++++----
.../apache/sling/feature/scanner/package-info.java | 2 +-
.../impl/AbstractApiRegionsAnalyserTaskTest.java | 3 ++-
.../task/impl/CheckBundleExportsImportsTest.java | 2 +-
.../impl/CheckRequirementsCapabilitiesTest.java | 4 ++--
.../scanner/impl/BundleDescriptorImplTest.java | 3 ++-
.../scanner/impl/FelixFrameworkScannerTest.java | 7 +++---
16 files changed, 48 insertions(+), 43 deletions(-)
diff --git a/pom.xml b/pom.xml
index 095cf51..c91d51a 100644
--- a/pom.xml
+++ b/pom.xml
@@ -134,7 +134,7 @@
<dependency>
<groupId>org.apache.sling</groupId>
<artifactId>org.apache.sling.feature</artifactId>
- <version>1.0.2</version>
+ <version>1.0.3-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
<dependency>
diff --git a/src/main/java/org/apache/sling/feature/analyser/task/impl/CheckBundlesForConnect.java b/src/main/java/org/apache/sling/feature/analyser/task/impl/CheckBundlesForConnect.java
index 8480dee..b8443c8 100644
--- a/src/main/java/org/apache/sling/feature/analyser/task/impl/CheckBundlesForConnect.java
+++ b/src/main/java/org/apache/sling/feature/analyser/task/impl/CheckBundlesForConnect.java
@@ -60,7 +60,7 @@ public class CheckBundlesForConnect implements AnalyserTask {
}
final Set<String> packages = new HashSet<>();
- try (final JarInputStream jis = new JarInputStream(new FileInputStream(bd.getArtifactFile()))) {
+ try (final JarInputStream jis = new JarInputStream(bd.getArtifactFile().openStream())) {
JarEntry entry;
while ((entry = jis.getNextJarEntry()) != null) {
if (entry.getName().endsWith(".class")) {
diff --git a/src/main/java/org/apache/sling/feature/scanner/ArtifactDescriptor.java b/src/main/java/org/apache/sling/feature/scanner/ArtifactDescriptor.java
index a9a75d6..92fe7e2 100644
--- a/src/main/java/org/apache/sling/feature/scanner/ArtifactDescriptor.java
+++ b/src/main/java/org/apache/sling/feature/scanner/ArtifactDescriptor.java
@@ -16,7 +16,7 @@
*/
package org.apache.sling.feature.scanner;
-import java.io.File;
+import java.net.URL;
import org.apache.sling.feature.Artifact;
@@ -37,7 +37,7 @@ public abstract class ArtifactDescriptor extends Descriptor {
* Get the artifact file
* @return The artifact file
*/
- public abstract File getArtifactFile();
+ public abstract URL getArtifactFile();
/**
* Get the artifact
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 a2d7920..850e4a1 100644
--- a/src/main/java/org/apache/sling/feature/scanner/Scanner.java
+++ b/src/main/java/org/apache/sling/feature/scanner/Scanner.java
@@ -18,6 +18,7 @@ package org.apache.sling.feature.scanner;
import java.io.File;
import java.io.IOException;
+import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@@ -117,7 +118,7 @@ public class Scanner {
final String key = bundle.getId().toMvnId().concat(":").concat(String.valueOf(startLevel));
BundleDescriptor desc = (BundleDescriptor) this.cache.get(key);
if (desc == null) {
- final File file = artifactProvider.provide(bundle.getId());
+ final URL file = artifactProvider.provide(bundle.getId());
if (file == null) {
throw new IOException("Unable to find file for " + bundle.getId());
}
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 eb914c0..0483854 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
@@ -16,8 +16,8 @@
*/
package org.apache.sling.feature.scanner.impl;
-import java.io.File;
import java.io.IOException;
+import java.net.URL;
import org.apache.sling.feature.Artifact;
import org.apache.sling.feature.Extension;
@@ -45,7 +45,7 @@ public class ApiRegionsExtensionScanner implements ExtensionScanner {
FeatureDescriptor featureDescriptor = new FeatureDescriptorImpl(feature);
for (Artifact artifact : feature.getBundles()) {
- File file = provider.provide(artifact.getId());
+ URL 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/BundleDescriptorImpl.java b/src/main/java/org/apache/sling/feature/scanner/impl/BundleDescriptorImpl.java
index e318427..4abd7ff 100644
--- a/src/main/java/org/apache/sling/feature/scanner/impl/BundleDescriptorImpl.java
+++ b/src/main/java/org/apache/sling/feature/scanner/impl/BundleDescriptorImpl.java
@@ -24,9 +24,11 @@ import org.apache.sling.feature.Artifact;
import org.apache.sling.feature.scanner.BundleDescriptor;
import org.apache.sling.feature.scanner.PackageInfo;
import org.osgi.framework.Constants;
+import sun.net.www.protocol.jar.JarURLConnection;
import java.io.File;
import java.io.IOException;
+import java.net.URL;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
@@ -56,19 +58,19 @@ public class BundleDescriptorImpl
private final Manifest manifest;
/** The physical file for analyzing. */
- private final File artifactFile;
+ private final URL artifactFile;
/** The corresponding artifact from the feature. */
private final Artifact artifact;
public BundleDescriptorImpl(final Artifact a,
- final File file,
+ final URL file,
final int startLevel) throws IOException {
super(a.getId().toMvnId());
this.artifact = a;
this.artifactFile = file;
this.startLevel = startLevel;
- try (final JarFile jarFile = new JarFile(this.artifactFile) ) {
+ try (final JarFile jarFile = ((JarURLConnection) ("jar".equals(this.artifactFile.getProtocol()) ? this.artifactFile : new URL("jar:" + this.artifactFile + "!/")).openConnection()).getJarFile()) {
this.manifest = jarFile.getManifest();
}
if ( this.manifest == null ) {
@@ -106,7 +108,7 @@ public class BundleDescriptorImpl
}
@Override
- public File getArtifactFile() {
+ public URL getArtifactFile() {
return artifactFile;
}
diff --git a/src/main/java/org/apache/sling/feature/scanner/impl/ContentPackageDescriptor.java b/src/main/java/org/apache/sling/feature/scanner/impl/ContentPackageDescriptor.java
index 7897fcd..5f56c75 100644
--- a/src/main/java/org/apache/sling/feature/scanner/impl/ContentPackageDescriptor.java
+++ b/src/main/java/org/apache/sling/feature/scanner/impl/ContentPackageDescriptor.java
@@ -22,6 +22,7 @@ import org.apache.sling.feature.scanner.ArtifactDescriptor;
import org.apache.sling.feature.scanner.BundleDescriptor;
import java.io.File;
+import java.net.URL;
import java.util.ArrayList;
import java.util.List;
@@ -39,7 +40,7 @@ public class ContentPackageDescriptor extends ArtifactDescriptor {
/** Configurations in the content package. */
public final List<Configuration> configs = new ArrayList<>();
- private File artifactFile;
+ private URL artifactFile;
private Artifact artifact;
@@ -52,7 +53,7 @@ public class ContentPackageDescriptor extends ArtifactDescriptor {
* @return The artifact file
*/
@Override
- public File getArtifactFile() {
+ public URL getArtifactFile() {
return artifactFile;
}
@@ -78,7 +79,7 @@ public class ContentPackageDescriptor extends ArtifactDescriptor {
* Set the artifact file
* @param artifactFile The artifact file
*/
- public void setArtifactFile(File artifactFile) {
+ public void setArtifactFile(URL artifactFile) {
checkLocked();
this.artifactFile = artifactFile;
}
diff --git a/src/main/java/org/apache/sling/feature/scanner/impl/ContentPackageScanner.java b/src/main/java/org/apache/sling/feature/scanner/impl/ContentPackageScanner.java
index e5d2878..b57b199 100644
--- a/src/main/java/org/apache/sling/feature/scanner/impl/ContentPackageScanner.java
+++ b/src/main/java/org/apache/sling/feature/scanner/impl/ContentPackageScanner.java
@@ -29,6 +29,7 @@ import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;
+import java.net.URL;
import java.nio.file.Files;
import java.util.ArrayList;
import java.util.HashSet;
@@ -50,15 +51,12 @@ public class ContentPackageScanner {
PACKAGE
}
- public Set<ContentPackageDescriptor> scan(final Artifact desc, final File file) throws IOException {
- if (!file.getName().endsWith(".zip") ) {
- throw new IOException("Artifact seems to be no content package (not a zip file): " + desc.getId().toMvnId());
- }
+ public Set<ContentPackageDescriptor> scan(final Artifact desc, final URL file) throws IOException {
final Set<ContentPackageDescriptor> contentPackages = new HashSet<>();
- final ContentPackageDescriptor cp = new ContentPackageDescriptor(file.getName());
- final int lastDot = file.getName().lastIndexOf(".");
- cp.setName(file.getName().substring(0, lastDot));
+ final ContentPackageDescriptor cp = new ContentPackageDescriptor(file.getPath());
+ final int lastDot = file.getPath().lastIndexOf(".");
+ cp.setName(file.getPath().substring(file.getPath().lastIndexOf("/") + 1, lastDot));
cp.setArtifact(desc);
cp.setArtifactFile(file);
@@ -72,18 +70,18 @@ public class ContentPackageScanner {
private void extractContentPackage(final ContentPackageDescriptor cp,
final Set<ContentPackageDescriptor> infos,
- final File archive)
+ final URL archive)
throws IOException {
- logger.debug("Analyzing Content Package {}", archive.getName());
+ logger.debug("Analyzing Content Package {}", archive);
final File tempDir = Files.createTempDirectory(null).toFile();
try {
- final File toDir = new File(tempDir, archive.getName());
+ final File toDir = new File(tempDir, archive.getPath().substring(archive.getPath().lastIndexOf("/") + 1));
toDir.mkdirs();
final List<File> toProcess = new ArrayList<>();
- try (final ZipInputStream zis = new ZipInputStream(new FileInputStream(archive)) ) {
+ try (final ZipInputStream zis = new ZipInputStream(archive.openStream()) ) {
boolean done = false;
while ( !done ) {
final ZipEntry entry = zis.getNextEntry();
@@ -168,7 +166,7 @@ public class ContentPackageScanner {
}
final Artifact bundle = new Artifact(extractArtifactId(tempDir, newFile));
- final BundleDescriptor info = new BundleDescriptorImpl(bundle, newFile, startLevel);
+ final BundleDescriptor info = new BundleDescriptorImpl(bundle, newFile.toURI().toURL(), startLevel);
bundle.getMetadata().put("content-package", cp.getArtifact().getId().toMvnId());
bundle.getMetadata().put("content-path", contentPath);
@@ -196,11 +194,11 @@ public class ContentPackageScanner {
}
for(final File f : toProcess) {
- extractContentPackage(cp, infos, f);
+ extractContentPackage(cp, infos, f.toURI().toURL());
final ContentPackageDescriptor i = new ContentPackageDescriptor(f.getName());
final int lastDot = f.getName().lastIndexOf(".");
i.setName(f.getName().substring(0, lastDot));
- i.setArtifactFile(f);
+ i.setArtifactFile(f.toURI().toURL());
i.setContentPackageInfo(cp.getArtifact(), f.getName());
infos.add(i);
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 bde04ee..af4e502 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
@@ -26,6 +26,7 @@ import org.apache.sling.feature.scanner.spi.ExtensionScanner;
import java.io.File;
import java.io.IOException;
+import java.net.URL;
import java.util.Set;
public class ContentPackagesExtensionScanner implements ExtensionScanner {
@@ -56,7 +57,7 @@ public class ContentPackagesExtensionScanner implements ExtensionScanner {
final ContainerDescriptor cd = new ContainerDescriptor(feature.getId().toMvnId() + "(" + getId() + ")") {};
for(final Artifact a : extension.getArtifacts()) {
- final File file = provider.provide(a.getId());
+ final URL 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 7cf2906..956a90c 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
@@ -33,6 +33,7 @@ import org.osgi.resource.Capability;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
+import java.net.URL;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -53,7 +54,7 @@ public class FelixFrameworkScanner implements FrameworkScanner {
final Map<String,String> frameworkProps,
final ArtifactProvider provider)
throws IOException {
- final File platformFile = provider.provide(framework);
+ final URL platformFile = provider.provide(framework);
if ( platformFile == null ) {
throw new IOException("Unable to find file for " + framework.toMvnId());
}
@@ -82,7 +83,7 @@ public class FelixFrameworkScanner implements FrameworkScanner {
}
@Override
- public File getArtifactFile() {
+ public URL getArtifactFile() {
return platformFile;
}
@@ -140,10 +141,10 @@ public class FelixFrameworkScanner implements FrameworkScanner {
private static final String DEFAULT_PROPERTIES = "default.properties";
- Map<String,String> getFrameworkProperties(final Map<String,String> appProps, final File framework)
+ Map<String,String> getFrameworkProperties(final Map<String,String> appProps, final URL framework)
throws IOException {
final Map<String, Properties> propsMap = new HashMap<>();
- try (final ZipInputStream zis = new ZipInputStream(new FileInputStream(framework)) ) {
+ try (final ZipInputStream zis = new ZipInputStream(framework.openStream()) ) {
boolean done = false;
while ( !done ) {
final ZipEntry entry = zis.getNextEntry();
diff --git a/src/main/java/org/apache/sling/feature/scanner/package-info.java b/src/main/java/org/apache/sling/feature/scanner/package-info.java
index 4c65dc3..d3a2684 100644
--- a/src/main/java/org/apache/sling/feature/scanner/package-info.java
+++ b/src/main/java/org/apache/sling/feature/scanner/package-info.java
@@ -17,7 +17,7 @@
* under the License.
*/
-@org.osgi.annotation.versioning.Version("1.0.0")
+@org.osgi.annotation.versioning.Version("2.0.0")
package org.apache.sling.feature.scanner;
diff --git a/src/test/java/org/apache/sling/feature/analyser/task/impl/AbstractApiRegionsAnalyserTaskTest.java b/src/test/java/org/apache/sling/feature/analyser/task/impl/AbstractApiRegionsAnalyserTaskTest.java
index c9753b4..cad154f 100644
--- a/src/test/java/org/apache/sling/feature/analyser/task/impl/AbstractApiRegionsAnalyserTaskTest.java
+++ b/src/test/java/org/apache/sling/feature/analyser/task/impl/AbstractApiRegionsAnalyserTaskTest.java
@@ -35,6 +35,7 @@ import org.mockito.invocation.InvocationOnMock;
import org.mockito.stubbing.Answer;
import java.io.File;
+import java.net.URL;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
@@ -152,7 +153,7 @@ public abstract class AbstractApiRegionsAnalyserTaskTest<T extends AbstractApiRe
}
@Override
- public File getArtifactFile() {
+ public URL getArtifactFile() {
// do nothing
return null;
}
diff --git a/src/test/java/org/apache/sling/feature/analyser/task/impl/CheckBundleExportsImportsTest.java b/src/test/java/org/apache/sling/feature/analyser/task/impl/CheckBundleExportsImportsTest.java
index 8bb5620..8a89863 100644
--- a/src/test/java/org/apache/sling/feature/analyser/task/impl/CheckBundleExportsImportsTest.java
+++ b/src/test/java/org/apache/sling/feature/analyser/task/impl/CheckBundleExportsImportsTest.java
@@ -329,7 +329,7 @@ public class CheckBundleExportsImportsTest {
private void fdAddBundle(FeatureDescriptor fd, String id, String file) throws IOException {
BundleDescriptor bd1 = new BundleDescriptorImpl(
- new Artifact(ArtifactId.fromMvnId(id)), new File(resourceRoot, file), 0);
+ new Artifact(ArtifactId.fromMvnId(id)), new File(resourceRoot, file).toURI().toURL(), 0);
fd.getBundleDescriptors().add(bd1);
}
}
diff --git a/src/test/java/org/apache/sling/feature/analyser/task/impl/CheckRequirementsCapabilitiesTest.java b/src/test/java/org/apache/sling/feature/analyser/task/impl/CheckRequirementsCapabilitiesTest.java
index c23ffa2..9555295 100644
--- a/src/test/java/org/apache/sling/feature/analyser/task/impl/CheckRequirementsCapabilitiesTest.java
+++ b/src/test/java/org/apache/sling/feature/analyser/task/impl/CheckRequirementsCapabilitiesTest.java
@@ -43,7 +43,7 @@ public class CheckRequirementsCapabilitiesTest {
BundleDescriptor bd1 = new BundleDescriptorImpl(
new Artifact(ArtifactId.fromMvnId("g:b1:1.2.0")),
- f, 7);
+ f.toURI().toURL(), 7);
Feature feature = new Feature(ArtifactId.fromMvnId("a:b:1"));
@@ -78,7 +78,7 @@ public class CheckRequirementsCapabilitiesTest {
BundleDescriptor bd1 = new BundleDescriptorImpl(
new Artifact(ArtifactId.fromMvnId("g:b1:1.2.0")),
- f, 7);
+ f.toURI().toURL(), 7);
Feature feature = new Feature(ArtifactId.fromMvnId("a:b:1"));
FeatureDescriptor fd = new FeatureDescriptorImpl(feature);
diff --git a/src/test/java/org/apache/sling/feature/scanner/impl/BundleDescriptorImplTest.java b/src/test/java/org/apache/sling/feature/scanner/impl/BundleDescriptorImplTest.java
index a8d289c..1bdc342 100644
--- a/src/test/java/org/apache/sling/feature/scanner/impl/BundleDescriptorImplTest.java
+++ b/src/test/java/org/apache/sling/feature/scanner/impl/BundleDescriptorImplTest.java
@@ -23,6 +23,7 @@ import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
+import java.net.URL;
import java.util.Set;
import java.util.jar.JarOutputStream;
import java.util.jar.Manifest;
@@ -52,7 +53,7 @@ public class BundleDescriptorImplTest
+ "Bundle-Version: 1\n"
+ "Bundle-ManifestVersion: 2\n"
+ "Export-Package: org.apache.sling;version=1.0,org.apache.felix;version=2.0\n";
- File f = createBundle(bmf);
+ URL f = new URL("jar:" + createBundle(bmf).toURI().toURL() + "!/");
BundleDescriptorImpl bdf = new BundleDescriptorImpl(new Artifact(new ArtifactId("foo", "bar", "1.0", "bla", "bundle")), f, 1);
final Set<PackageInfo> infos = bdf.getExportedPackages();
assertEquals(2, infos.size());
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 b75b134..617a986 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
@@ -38,7 +38,7 @@ public class FelixFrameworkScannerTest {
FelixFrameworkScanner ffs = new FelixFrameworkScanner();
Map<String,String> kvmap = new HashMap<>();
- Map<String,String> props = ffs.getFrameworkProperties(kvmap, fwFile);
+ Map<String,String> props = ffs.getFrameworkProperties(kvmap, fwFile.toURI().toURL());
assertEquals("osgi.service; objectClass:List<String>=org.osgi.service.resolver.Resolver; "
+ "uses:=org.osgi.service.resolver, "
+ "osgi.service; objectClass:List<String>=org.osgi.service.startlevel.StartLevel; "
@@ -54,8 +54,7 @@ public class FelixFrameworkScannerTest {
@Test
public void testGetFrameworkExports() throws Exception {
- URL url = getClass().getResource("/test-framework.jar");
- File fwFile = new File(url.toURI());
+ URL fwFile = getClass().getResource("/test-framework.jar");
FelixFrameworkScanner ffs = new FelixFrameworkScanner();
@@ -66,7 +65,7 @@ public class FelixFrameworkScannerTest {
"6.0.1", null, null), kvmap, new ArtifactProvider() {
@Override
- public File provide(ArtifactId id) {
+ public URL provide(ArtifactId id) {
return fwFile;
}
});