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