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 2017/08/03 22:10:19 UTC

svn commit: r1804055 - /sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/scanner/impl/FelixFrameworkScanner.java

Author: pauls
Date: Thu Aug  3 22:10:19 2017
New Revision: 1804055

URL: http://svn.apache.org/viewvc?rev=1804055&view=rev
Log:
Calculate the Capabilites provided by the framework.

Modified:
    sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/scanner/impl/FelixFrameworkScanner.java

Modified: sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/scanner/impl/FelixFrameworkScanner.java
URL: http://svn.apache.org/viewvc/sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/scanner/impl/FelixFrameworkScanner.java?rev=1804055&r1=1804054&r2=1804055&view=diff
==============================================================================
--- sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/scanner/impl/FelixFrameworkScanner.java (original)
+++ sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/scanner/impl/FelixFrameworkScanner.java Thu Aug  3 22:10:19 2017
@@ -18,23 +18,36 @@ package org.apache.sling.feature.scanner
 
 import org.apache.sling.commons.osgi.ManifestHeader;
 import org.apache.sling.feature.ArtifactId;
+import org.apache.sling.feature.Capability;
 import org.apache.sling.feature.KeyValueMap;
 import org.apache.sling.feature.analyser.Descriptor;
 import org.apache.sling.feature.scanner.FrameworkScanner;
+import org.apache.sling.feature.support.util.LambdaUtil;
+import org.apache.sling.feature.support.util.ManifestParser;
+import org.apache.sling.feature.support.util.ManifestUtil;
 import org.apache.sling.feature.support.util.PackageInfo;
 import org.osgi.framework.Constants;
 
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.IOException;
+import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Map;
+import java.util.Objects;
 import java.util.Properties;
 import java.util.Set;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
 import java.util.zip.ZipEntry;
 import java.util.zip.ZipInputStream;
 
+import static org.apache.sling.feature.support.util.LambdaUtil.rethrowFunction;
+import static org.apache.sling.feature.support.util.ManifestParser.convertProvideCapabilities;
+import static org.apache.sling.feature.support.util.ManifestParser.normalizeCapabilityClauses;
+import static org.apache.sling.feature.support.util.ManifestParser.parseStandardHeader;
+
 public class FelixFrameworkScanner implements FrameworkScanner {
 
 
@@ -48,15 +61,34 @@ public class FelixFrameworkScanner imple
             return null;
         }
         final Set<PackageInfo> pcks = calculateSystemPackages(fwkProps);
+        final Set<Capability> capabilities = calculateSystemCapabilities(fwkProps);
+
         return new Descriptor() {
 
             @Override
             public Set<PackageInfo> getExportedPackages() {
                 return pcks;
             }
+
+            @Override
+            public Set<Capability> getCapabilities() {
+                return capabilities;
+            }
         };
     }
 
+    private Set<Capability> calculateSystemCapabilities(final KeyValueMap fwkProps) {
+        return Stream.of(
+                    fwkProps.get(Constants.FRAMEWORK_SYSTEMCAPABILITIES),
+                    fwkProps.get(Constants.FRAMEWORK_SYSTEMCAPABILITIES_EXTRA)
+                )
+                .filter(Objects::nonNull)
+                .flatMap(
+                        rethrowFunction(header ->
+                            convertProvideCapabilities(normalizeCapabilityClauses(parseStandardHeader(header), "2")).stream()
+                )).collect(Collectors.toSet());
+    }
+
     private Set<PackageInfo> calculateSystemPackages(final KeyValueMap fwkProps) {
         final String system = fwkProps.get(Constants.FRAMEWORK_SYSTEMPACKAGES);
         final String extra = fwkProps.get(Constants.FRAMEWORK_SYSTEMPACKAGES_EXTRA);