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 2b9083e SLING-9013 : Provide analyser that checks for bundles and
configurations in content packages
2b9083e is described below
commit 2b9083e8fbe3320701e7c76566f275a81200f1df
Author: Carsten Ziegeler <[email protected]>
AuthorDate: Mon Jan 20 12:47:57 2020 +0100
SLING-9013 : Provide analyser that checks for bundles and configurations in
content packages
---
.../impl/CheckContentPackageForInstallables.java | 66 ++++++++++++++++++++++
.../scanner/impl/ContentPackageDescriptor.java | 10 ++++
.../scanner/impl/ContentPackageScanner.java | 36 ++++++------
...apache.sling.feature.analyser.task.AnalyserTask | 1 +
4 files changed, 96 insertions(+), 17 deletions(-)
diff --git
a/src/main/java/org/apache/sling/feature/analyser/task/impl/CheckContentPackageForInstallables.java
b/src/main/java/org/apache/sling/feature/analyser/task/impl/CheckContentPackageForInstallables.java
new file mode 100644
index 0000000..12d041a
--- /dev/null
+++
b/src/main/java/org/apache/sling/feature/analyser/task/impl/CheckContentPackageForInstallables.java
@@ -0,0 +1,66 @@
+/*
+ * 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.
+ */
+package org.apache.sling.feature.analyser.task.impl;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.sling.feature.analyser.task.AnalyserTask;
+import org.apache.sling.feature.analyser.task.AnalyserTaskContext;
+import org.apache.sling.feature.scanner.ArtifactDescriptor;
+import org.apache.sling.feature.scanner.impl.ContentPackageDescriptor;
+
+/**
+ * This analyser checks for bundles and configurations in packages
+ */
+public class CheckContentPackageForInstallables implements AnalyserTask {
+
+ @Override
+ public String getName() {
+ return "Content Packages Installable Check";
+ }
+
+ @Override
+ public String getId() {
+ return "content-packages-installables";
+ }
+
+ @Override
+ public void execute(final AnalyserTaskContext ctx)
+ throws Exception {
+ final List<ContentPackageDescriptor> contentPackages = new
ArrayList<>();
+ for (final ArtifactDescriptor d :
ctx.getFeatureDescriptor().getArtifactDescriptors()) {
+ if (d instanceof ContentPackageDescriptor) {
+ contentPackages.add((ContentPackageDescriptor) d);
+ }
+ }
+ if (contentPackages.isEmpty()) {
+ return;
+ }
+
+ for (final ContentPackageDescriptor cp : contentPackages) {
+ if (!cp.hasEmbeddedArtifacts() || cp.isEmbeddedInContentPackage())
{
+ continue;
+ }
+
+ ctx.reportError("Content package " + cp.getName() + " (" +
cp.getArtifact().getId().toMvnId()
+ + " ) contains " + String.valueOf(cp.bundles.size()) + "
bundles and "
+ + String.valueOf(cp.configs.size()) + " configurations.");
+
+ }
+ }
+}
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 a2565a5..8b2c663 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
@@ -30,6 +30,16 @@ import org.apache.sling.feature.scanner.BundleDescriptor;
*/
public class ContentPackageDescriptor extends ArtifactDescriptor {
+ /**
+ * The metadata added to bundles and configurations for the package they
are in.
+ */
+ public static final String METADATA_PACKAGE = "content-package";
+
+ /**
+ * The metadata added to bundles and configurations for the path in the
package
+ */
+ public static final String METADATA_PATH = "content-path";
+
/** The content package name. */
private String name;
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 09f7781..1835ba7 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
@@ -16,14 +16,6 @@
*/
package org.apache.sling.feature.scanner.impl;
-import org.apache.sling.feature.Artifact;
-import org.apache.sling.feature.ArtifactId;
-import org.apache.sling.feature.Configuration;
-import org.apache.sling.feature.io.IOUtils;
-import org.apache.sling.feature.scanner.BundleDescriptor;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileReader;
@@ -41,6 +33,14 @@ import java.util.Set;
import java.util.jar.JarFile;
import java.util.zip.ZipEntry;
+import org.apache.sling.feature.Artifact;
+import org.apache.sling.feature.ArtifactId;
+import org.apache.sling.feature.Configuration;
+import org.apache.sling.feature.io.IOUtils;
+import org.apache.sling.feature.scanner.BundleDescriptor;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
public class ContentPackageScanner {
private final Logger logger = LoggerFactory.getLogger(this.getClass());
@@ -89,7 +89,7 @@ public class ContentPackageScanner {
final ZipEntry entry = entries.nextElement();
final String entryName = entry.getName();
logger.debug("Content package entry {}", entryName);
-
+
if ( !entryName.endsWith("/") &&
entryName.startsWith("jcr_root/") ) {
final String contentPath = entryName.substring(8);
@@ -156,7 +156,7 @@ public class ContentPackageScanner {
while ((len = zis.read(buffer)) > -1) {
fos.write(buffer, 0, len);
}
- }
+ }
if (fileType == FileType.BUNDLE) {
int startLevel = 20;
@@ -172,8 +172,9 @@ public class ContentPackageScanner {
final Artifact bundle = new
Artifact(extractArtifactId(tempDir, newFile));
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);
+
bundle.getMetadata().put(ContentPackageDescriptor.METADATA_PACKAGE,
+ cp.getArtifact().getId().toMvnId());
+
bundle.getMetadata().put(ContentPackageDescriptor.METADATA_PATH, contentPath);
cp.bundles.add(info);
@@ -233,10 +234,10 @@ public class ContentPackageScanner {
try (final JarFile zipFile = new JarFile(bundleFile)) {
Enumeration<? extends ZipEntry> entries = zipFile.entries();
-
+
while ( entries.hasMoreElements() ) {
final ZipEntry entry = entries.nextElement();
-
+
final String entryName = entry.getName();
if ( !entryName.endsWith("/") &&
entryName.startsWith("META-INF/maven/") &&
entryName.endsWith("/pom.properties")) {
logger.debug("- extracting : {}", entryName);
@@ -244,7 +245,7 @@ public class ContentPackageScanner {
newFile.getParentFile().mkdirs();
try (
- final FileOutputStream fos = new
FileOutputStream(newFile);
+ final FileOutputStream fos = new
FileOutputStream(newFile);
final InputStream zis =
zipFile.getInputStream(entry)
) {
int len;
@@ -348,8 +349,9 @@ public class ContentPackageScanner {
}
final Configuration cfg = new Configuration(pid);
- cfg.getProperties().put(Configuration.PROP_PREFIX +
"content-path", contentPath);
- cfg.getProperties().put(Configuration.PROP_PREFIX +
"content-package", packageArtifact.getId().toMvnId());
+ cfg.getProperties().put(Configuration.PROP_PREFIX +
ContentPackageDescriptor.METADATA_PATH, contentPath);
+ cfg.getProperties().put(Configuration.PROP_PREFIX +
ContentPackageDescriptor.METADATA_PACKAGE,
+ packageArtifact.getId().toMvnId());
return cfg;
}
diff --git
a/src/main/resources/META-INF/services/org.apache.sling.feature.analyser.task.AnalyserTask
b/src/main/resources/META-INF/services/org.apache.sling.feature.analyser.task.AnalyserTask
index 00d16ab..180fcc8 100644
---
a/src/main/resources/META-INF/services/org.apache.sling.feature.analyser.task.AnalyserTask
+++
b/src/main/resources/META-INF/services/org.apache.sling.feature.analyser.task.AnalyserTask
@@ -3,5 +3,6 @@
org.apache.sling.feature.analyser.task.impl.CheckBundlesForConnect
org.apache.sling.feature.analyser.task.impl.CheckBundlesForInitialContent
org.apache.sling.feature.analyser.task.impl.CheckBundlesForResources
org.apache.sling.feature.analyser.task.impl.CheckRequirementsCapabilities
+org.apache.sling.feature.analyser.task.impl.CheckContentPackageForInstallables
org.apache.sling.feature.analyser.task.impl.CheckContentPackagesDependencies
org.apache.sling.feature.analyser.task.impl.CheckApisJarsProperties
\ No newline at end of file