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

Reply via email to