Author: cziegeler
Date: Wed Jul 5 14:54:19 2017
New Revision: 1800887
URL: http://svn.apache.org/viewvc?rev=1800887&view=rev
Log:
Update scanner framework
Added:
sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/scanner/ArtifactDescriptor.java
- copied, changed from r1800886,
sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/scanner/ArtifactInfo.java
sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/scanner/ArtifactScanner.java
(with props)
sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/scanner/BundleDescriptor.java
- copied, changed from r1800886,
sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/scanner/BundleInfo.java
sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/scanner/Descriptor.java
(with props)
sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/scanner/ExtensionScanner.java
(with props)
sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/scanner/FeatureDescriptor.java
(with props)
Removed:
sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/scanner/ArtifactInfo.java
sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/scanner/BundleInfo.java
Modified:
sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/analyser/Analyser.java
sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/analyser/AnalyserTaskContext.java
sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/analyser/tasks/CheckBundleExportsImports.java
sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/analyser/tasks/CheckBundlesForInitialContent.java
sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/analyser/tasks/CheckBundlesForResources.java
sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/scanner/Scanner.java
Modified:
sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/analyser/Analyser.java
URL:
http://svn.apache.org/viewvc/sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/analyser/Analyser.java?rev=1800887&r1=1800886&r2=1800887&view=diff
==============================================================================
---
sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/analyser/Analyser.java
(original)
+++
sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/analyser/Analyser.java
Wed Jul 5 14:54:19 2017
@@ -27,8 +27,8 @@ import java.util.Set;
import org.apache.sling.feature.Application;
import org.apache.sling.feature.KeyValueMap;
-import org.apache.sling.feature.scanner.ArtifactInfo;
-import org.apache.sling.feature.scanner.BundleInfo;
+import org.apache.sling.feature.scanner.ArtifactDescriptor;
+import org.apache.sling.feature.scanner.BundleDescriptor;
import org.apache.sling.feature.scanner.PackageInfo;
import org.apache.sling.feature.scanner.Scanner;
import org.apache.sling.feature.support.ArtifactManager;
@@ -94,8 +94,8 @@ public class Analyser {
final List<PackageInfo> systemPackages =
scanner.calculateSystemPackages(app);
- final List<BundleInfo> bundleInfos = scanner.getBundleInfos(app);
- final List<ArtifactInfo> artifactInfos = scanner.getArtifactInfos(app);
+ final List<BundleDescriptor> bundleInfos = scanner.getBundleInfos(app);
+ final List<ArtifactDescriptor> artifactInfos =
scanner.getArtifactInfos(app);
final List<String> warnings = new ArrayList<>();
final List<String> errors = new ArrayList<>();
@@ -111,12 +111,12 @@ public class Analyser {
}
@Override
- public List<BundleInfo> getBundleInfos() {
+ public List<BundleDescriptor> getBundleInfos() {
return bundleInfos;
}
@Override
- public List<ArtifactInfo> getArtifactInfos() {
+ public List<ArtifactDescriptor> getArtifactInfos() {
return artifactInfos;
}
Modified:
sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/analyser/AnalyserTaskContext.java
URL:
http://svn.apache.org/viewvc/sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/analyser/AnalyserTaskContext.java?rev=1800887&r1=1800886&r2=1800887&view=diff
==============================================================================
---
sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/analyser/AnalyserTaskContext.java
(original)
+++
sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/analyser/AnalyserTaskContext.java
Wed Jul 5 14:54:19 2017
@@ -19,8 +19,8 @@ package org.apache.sling.feature.analyse
import java.util.List;
import org.apache.sling.feature.Application;
-import org.apache.sling.feature.scanner.ArtifactInfo;
-import org.apache.sling.feature.scanner.BundleInfo;
+import org.apache.sling.feature.scanner.ArtifactDescriptor;
+import org.apache.sling.feature.scanner.BundleDescriptor;
import org.apache.sling.feature.scanner.PackageInfo;
public interface AnalyserTaskContext {
@@ -41,13 +41,13 @@ public interface AnalyserTaskContext {
* Get the list of bundle infos.
* @return The unmodifiable list of bundle infos
*/
- List<BundleInfo> getBundleInfos();
+ List<BundleDescriptor> getBundleInfos();
/**
* Get the list artifact infos
* @return The unmodifiable list of artifact infos
*/
- List<ArtifactInfo> getArtifactInfos();
+ List<ArtifactDescriptor> getArtifactInfos();
/**
* This method is invoked by a {@link AnalyserTask} to report
Modified:
sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/analyser/tasks/CheckBundleExportsImports.java
URL:
http://svn.apache.org/viewvc/sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/analyser/tasks/CheckBundleExportsImports.java?rev=1800887&r1=1800886&r2=1800887&view=diff
==============================================================================
---
sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/analyser/tasks/CheckBundleExportsImports.java
(original)
+++
sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/analyser/tasks/CheckBundleExportsImports.java
Wed Jul 5 14:54:19 2017
@@ -29,7 +29,7 @@ import java.util.TreeMap;
import org.apache.sling.feature.Artifact;
import org.apache.sling.feature.analyser.AnalyserTask;
import org.apache.sling.feature.analyser.AnalyserTaskContext;
-import org.apache.sling.feature.scanner.BundleInfo;
+import org.apache.sling.feature.scanner.BundleDescriptor;
import org.apache.sling.feature.scanner.PackageInfo;
import org.osgi.framework.Version;
@@ -60,7 +60,7 @@ public class CheckBundleExportsImports i
public List<PackageInfo> missingExportsForOptional = new ArrayList<>();
}
- private Report getReport(final Map<BundleInfo, Report> reports, final
BundleInfo info) {
+ private Report getReport(final Map<BundleDescriptor, Report> reports,
final BundleDescriptor info) {
Report report = reports.get(info);
if ( report == null ) {
report = new Report();
@@ -69,8 +69,8 @@ public class CheckBundleExportsImports i
return report;
}
- private void checkForVersionOnExportedPackages(final AnalyserTaskContext
ctx, final Map<BundleInfo, Report> reports) {
- for(final BundleInfo info : ctx.getBundleInfos()) {
+ private void checkForVersionOnExportedPackages(final AnalyserTaskContext
ctx, final Map<BundleDescriptor, Report> reports) {
+ for(final BundleDescriptor info : ctx.getBundleInfos()) {
if ( info.getExportedPackages() != null ) {
for(final PackageInfo i : info.getExportedPackages()) {
if ( i.getPackageVersion().compareTo(Version.emptyVersion)
== 0 ) {
@@ -81,8 +81,8 @@ public class CheckBundleExportsImports i
}
}
- private void checkForVersionOnImportingPackages(final AnalyserTaskContext
ctx, final Map<BundleInfo, Report> reports) {
- for(final BundleInfo info : ctx.getBundleInfos()) {
+ private void checkForVersionOnImportingPackages(final AnalyserTaskContext
ctx, final Map<BundleDescriptor, Report> reports) {
+ for(final BundleDescriptor info : ctx.getBundleInfos()) {
if ( info.getImportedPackages() != null ) {
for(final PackageInfo i : info.getImportedPackages()) {
if ( i.getVersion() == null ) {
@@ -101,13 +101,13 @@ public class CheckBundleExportsImports i
@Override
public void execute(final AnalyserTaskContext ctx) throws IOException {
// basic checks
- final Map<BundleInfo, Report> reports = new HashMap<>();
+ final Map<BundleDescriptor, Report> reports = new HashMap<>();
checkForVersionOnExportedPackages(ctx, reports);
checkForVersionOnImportingPackages(ctx, reports);
- final SortedMap<Integer, List<BundleInfo>> bundlesMap = new
TreeMap<>();
- for(final BundleInfo bi : ctx.getBundleInfos()) {
- List<BundleInfo> list = bundlesMap.get(bi.getBundleStartLevel());
+ final SortedMap<Integer, List<BundleDescriptor>> bundlesMap = new
TreeMap<>();
+ for(final BundleDescriptor bi : ctx.getBundleInfos()) {
+ List<BundleDescriptor> list =
bundlesMap.get(bi.getBundleStartLevel());
if ( list == null ) {
list = new ArrayList<>();
bundlesMap.put(bi.getBundleStartLevel(), list);
@@ -116,24 +116,24 @@ public class CheckBundleExportsImports i
}
// create a synthetic bundle info for the system bundle
- final BundleInfo system = new BundleInfo(new
Artifact(ctx.getApplication().getFramework()), ctx.getSystemPackages());
+ final BundleDescriptor system = new BundleDescriptor(new
Artifact(ctx.getApplication().getFramework()), ctx.getSystemPackages());
// add all system packages
- final List<BundleInfo> exportingBundles = new ArrayList<>();
+ final List<BundleDescriptor> exportingBundles = new ArrayList<>();
exportingBundles.add(system);
- for(final Map.Entry<Integer, List<BundleInfo>> entry :
bundlesMap.entrySet()) {
+ for(final Map.Entry<Integer, List<BundleDescriptor>> entry :
bundlesMap.entrySet()) {
// first add all exporting bundles
- for(final BundleInfo info : entry.getValue()) {
+ for(final BundleDescriptor info : entry.getValue()) {
if ( info.getExportedPackages() != null ) {
exportingBundles.add(info);
}
}
// check importing bundles
- for(final BundleInfo info : entry.getValue()) {
+ for(final BundleDescriptor info : entry.getValue()) {
if ( info.getImportedPackages() != null ) {
for(final PackageInfo pck : info.getImportedPackages() ) {
- final List<BundleInfo> candidates =
getCandidates(exportingBundles, pck);
+ final List<BundleDescriptor> candidates =
getCandidates(exportingBundles, pck);
if ( candidates.isEmpty() ) {
if ( pck.isOptional() ) {
getReport(reports,
info).missingExportsForOptional.add(pck);
@@ -141,8 +141,8 @@ public class CheckBundleExportsImports i
getReport(reports,
info).missingExports.add(pck);
}
} else {
- final List<BundleInfo> matchingCandidates = new
ArrayList<>();
- for(final BundleInfo i : candidates) {
+ final List<BundleDescriptor> matchingCandidates =
new ArrayList<>();
+ for(final BundleDescriptor i : candidates) {
if ( i.isExportingPackage(pck) ) {
matchingCandidates.add(i);
}
@@ -162,7 +162,7 @@ public class CheckBundleExportsImports i
}
}
- for(final Map.Entry<BundleInfo, Report> entry : reports.entrySet()) {
+ for(final Map.Entry<BundleDescriptor, Report> entry :
reports.entrySet()) {
final String key = "Bundle " +
entry.getKey().getArtifact().getId().getArtifactId() + ":" +
entry.getKey().getArtifact().getId().getVersion();
if ( !entry.getValue().importWithoutVersion.isEmpty() ) {
@@ -210,9 +210,9 @@ public class CheckBundleExportsImports i
return sb.toString();
}
- private List<BundleInfo> getCandidates(final List<BundleInfo>
exportingBundles, final PackageInfo pck) {
- final List<BundleInfo> candidates = new ArrayList<>();
- for(final BundleInfo info : exportingBundles) {
+ private List<BundleDescriptor> getCandidates(final List<BundleDescriptor>
exportingBundles, final PackageInfo pck) {
+ final List<BundleDescriptor> candidates = new ArrayList<>();
+ for(final BundleDescriptor info : exportingBundles) {
if ( info.isExportingPackage(pck.getName()) ) {
candidates.add(info);
}
Modified:
sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/analyser/tasks/CheckBundlesForInitialContent.java
URL:
http://svn.apache.org/viewvc/sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/analyser/tasks/CheckBundlesForInitialContent.java?rev=1800887&r1=1800886&r2=1800887&view=diff
==============================================================================
---
sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/analyser/tasks/CheckBundlesForInitialContent.java
(original)
+++
sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/analyser/tasks/CheckBundlesForInitialContent.java
Wed Jul 5 14:54:19 2017
@@ -18,12 +18,26 @@
*/
package org.apache.sling.feature.analyser.tasks;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.jar.Manifest;
+
+import org.apache.sling.commons.osgi.ManifestHeader;
import org.apache.sling.feature.analyser.AnalyserTask;
import org.apache.sling.feature.analyser.AnalyserTaskContext;
-import org.apache.sling.feature.scanner.BundleInfo;
+import org.apache.sling.feature.scanner.BundleDescriptor;
public class CheckBundlesForInitialContent implements AnalyserTask {
+ /** The manifest header to specify initial content to be loaded. */
+ private static final String CONTENT_HEADER = "Sling-Initial-Content";
+
+ /**
+ * The path directive specifying the target node where initial content will
+ * be loaded.
+ */
+ private static final String PATH_DIRECTIVE = "path";
+
@Override
public String getName() {
return "Bundle Initial Content Check";
@@ -37,10 +51,34 @@ public class CheckBundlesForInitialConte
@Override
public void execute(final AnalyserTaskContext ctx) {
// check for initial content
- for(final BundleInfo info : ctx.getBundleInfos()) {
- if ( !info.getInitialContent().isEmpty() ) {
- ctx.reportWarning("Found initial content in " +
info.getArtifact() + " : " + info.getInitialContent());
+ for(final BundleDescriptor info : ctx.getBundleInfos()) {
+ final List<String> initialContent =
extractInitialContent(info.getManifest());
+
+ if ( !initialContent.isEmpty() ) {
+ ctx.reportWarning("Found initial content in " +
info.getArtifact() + " : " + initialContent);
+ }
+ }
+ }
+
+ private List<String> extractInitialContent(final Manifest m) {
+ final List<String> initialContent = new ArrayList<>();
+ if ( m != null ) {
+ final String root =
m.getMainAttributes().getValue(CONTENT_HEADER);
+ if (root != null) {
+ final ManifestHeader header = ManifestHeader.parse(root);
+ for (final ManifestHeader.Entry entry : header.getEntries()) {
+
+ String path = entry.getDirectiveValue(PATH_DIRECTIVE);
+ if (path == null) {
+ path = "/";
+ } else if (!path.startsWith("/")) {
+ // make relative path absolute
+ path = "/" + path;
+ }
+ initialContent.add(path);
+ }
}
}
+ return initialContent;
}
}
Modified:
sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/analyser/tasks/CheckBundlesForResources.java
URL:
http://svn.apache.org/viewvc/sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/analyser/tasks/CheckBundlesForResources.java?rev=1800887&r1=1800886&r2=1800887&view=diff
==============================================================================
---
sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/analyser/tasks/CheckBundlesForResources.java
(original)
+++
sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/analyser/tasks/CheckBundlesForResources.java
Wed Jul 5 14:54:19 2017
@@ -18,12 +18,26 @@
*/
package org.apache.sling.feature.analyser.tasks;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.jar.Manifest;
+
+import org.apache.sling.commons.osgi.ManifestHeader;
import org.apache.sling.feature.analyser.AnalyserTask;
import org.apache.sling.feature.analyser.AnalyserTaskContext;
-import org.apache.sling.feature.scanner.BundleInfo;
+import org.apache.sling.feature.scanner.BundleDescriptor;
public class CheckBundlesForResources implements AnalyserTask {
+ /** The manifest header to specify bundle resources. */
+ private static final String BUNDLE_RESOURCE_ROOTS =
"Sling-Bundle-Resources";
+
+ /**
+ * The path directive specifying the target node where initial content will
+ * be loaded.
+ */
+ private static final String PATH_DIRECTIVE = "path";
+
@Override
public String getName() {
return "Bundle Resources Check";
@@ -37,10 +51,31 @@ public class CheckBundlesForResources im
@Override
public void execute(final AnalyserTaskContext ctx) {
// check for initial content
- for(final BundleInfo info : ctx.getBundleInfos()) {
- if ( !info.getBundleResources().isEmpty() ) {
- ctx.reportWarning("Found bundle resources in " +
info.getArtifact() + " : " + info.getBundleResources());
+ for(final BundleDescriptor info : ctx.getBundleInfos()) {
+ final List<String> bundleResources =
extractBundleResources(info.getManifest());
+ if ( !bundleResources.isEmpty() ) {
+ ctx.reportWarning("Found bundle resources in " +
info.getArtifact() + " : " + bundleResources);
+ }
+ }
+ }
+
+ private List<String> extractBundleResources(final Manifest m) {
+ final List<String> bundleResources = new ArrayList<>();
+ if ( m != null ) {
+ final String root =
m.getMainAttributes().getValue(BUNDLE_RESOURCE_ROOTS);
+ if (root != null) {
+ final ManifestHeader header = ManifestHeader.parse(root);
+ for (final ManifestHeader.Entry entry : header.getEntries()) {
+ final String resourceRoot = entry.getValue();
+ final String pathDirective =
entry.getDirectiveValue(PATH_DIRECTIVE);
+ if (pathDirective != null) {
+ bundleResources.add(resourceRoot + "!" +
pathDirective);
+ } else {
+ bundleResources.add(resourceRoot);
+ }
+ }
}
}
+ return bundleResources;
}
}
Copied:
sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/scanner/ArtifactDescriptor.java
(from r1800886,
sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/scanner/ArtifactInfo.java)
URL:
http://svn.apache.org/viewvc/sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/scanner/ArtifactDescriptor.java?p2=sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/scanner/ArtifactDescriptor.java&p1=sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/scanner/ArtifactInfo.java&r1=1800886&r2=1800887&rev=1800887&view=diff
==============================================================================
---
sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/scanner/ArtifactInfo.java
(original)
+++
sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/scanner/ArtifactDescriptor.java
Wed Jul 5 14:54:19 2017
@@ -18,13 +18,14 @@ package org.apache.sling.feature.scanner
import java.io.File;
import java.io.IOException;
+import java.util.jar.Manifest;
import org.apache.sling.feature.Artifact;
/**
* Information about an artifact
*/
-public class ArtifactInfo {
+public class ArtifactDescriptor extends Descriptor {
/** The physical file for analysing. */
private final File artifactFile;
@@ -32,7 +33,7 @@ public class ArtifactInfo {
/** The corresponding artifact from the feature. */
private final Artifact artifact;
- public ArtifactInfo(final Artifact a,
+ public ArtifactDescriptor(final Artifact a,
final File file) throws IOException {
this.artifact = a;
this.artifactFile = file;
@@ -54,10 +55,19 @@ public class ArtifactInfo {
return artifact;
}
+ /**
+ * If the artifact has a manifest, return it
+ * @return The manifest or {@code null}
+ */
+ public Manifest getManifest() {
+ return null;
+ }
+
+
@Override
- public boolean equals(Object obj) {
- if ( obj instanceof ArtifactInfo ) {
- return
this.getArtifact().getId().toMvnId().equals(((ArtifactInfo)obj).getArtifact().getId().toMvnId());
+ public boolean equals(final Object obj) {
+ if ( obj instanceof ArtifactDescriptor ) {
+ return
this.getArtifact().getId().toMvnId().equals(((ArtifactDescriptor)obj).getArtifact().getId().toMvnId());
}
return false;
}
@@ -72,4 +82,5 @@ public class ArtifactInfo {
public String toString() {
return "ArtifactInfo [artifact=" +
this.getArtifact().getId().toMvnId() + "]";
}
+
}
\ No newline at end of file
Added:
sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/scanner/ArtifactScanner.java
URL:
http://svn.apache.org/viewvc/sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/scanner/ArtifactScanner.java?rev=1800887&view=auto
==============================================================================
---
sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/scanner/ArtifactScanner.java
(added)
+++
sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/scanner/ArtifactScanner.java
Wed Jul 5 14:54:19 2017
@@ -0,0 +1,41 @@
+/*
+ * 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.scanner;
+
+import java.io.IOException;
+
+import org.apache.sling.feature.Artifact;
+
+/**
+ * The artifact scanner scans an artifact.
+ */
+public interface ArtifactScanner {
+
+ /** A unique (short) id. */
+ String getId();
+
+ /** A human readable name to identify the scanner. */
+ String getName();
+
+ /**
+ * Try to scan the artifact
+ * @param artifact The artifact
+ * @return An artifact info or {@code null} if the scanner can't process
the artifact
+ * @throws IOException If an error occurs while scanning the artifact or
the artifact is invalid
+ */
+ ArtifactDescriptor scan(Artifact artifact) throws IOException;
+}
\ No newline at end of file
Propchange:
sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/scanner/ArtifactScanner.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/scanner/ArtifactScanner.java
------------------------------------------------------------------------------
svn:keywords = author date id revision rev url
Copied:
sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/scanner/BundleDescriptor.java
(from r1800886,
sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/scanner/BundleInfo.java)
URL:
http://svn.apache.org/viewvc/sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/scanner/BundleDescriptor.java?p2=sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/scanner/BundleDescriptor.java&p1=sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/scanner/BundleInfo.java&r1=1800886&r2=1800887&rev=1800887&view=diff
==============================================================================
---
sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/scanner/BundleInfo.java
(original)
+++
sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/scanner/BundleDescriptor.java
Wed Jul 5 14:54:19 2017
@@ -23,26 +23,13 @@ import java.util.Collections;
import java.util.List;
import java.util.jar.Manifest;
-import org.apache.sling.commons.osgi.ManifestHeader;
import org.apache.sling.feature.Artifact;
import org.osgi.framework.Constants;
/**
* Information about a bundle
*/
-public class BundleInfo extends ArtifactInfo implements Comparable<BundleInfo>
{
-
- /** The manifest header to specify initial content to be loaded. */
- private static final String CONTENT_HEADER = "Sling-Initial-Content";
-
- /** The manifest header to specify bundle resources. */
- private static final String BUNDLE_RESOURCE_ROOTS =
"Sling-Bundle-Resources";
-
- /**
- * The path directive specifying the target node where initial content will
- * be loaded.
- */
- private static final String PATH_DIRECTIVE = "path";
+public class BundleDescriptor extends ArtifactDescriptor implements
Comparable<BundleDescriptor> {
/** The bundle symbolic name. */
private String symbolicName;
@@ -62,16 +49,10 @@ public class BundleInfo extends Artifact
/** Information about dynamic imported packages. */
private final List<PackageInfo> dynamicImportedPackages = new
ArrayList<>();
- /** Initial content */
- private final List<String> initialContent = new ArrayList<>();
-
- /** Bundle resources */
- private final List<String> bundleResources = new ArrayList<>();
-
/** Manifest */
private final Manifest manifest;
- public BundleInfo(final Artifact a,
+ public BundleDescriptor(final Artifact a,
final File file,
final int startLevel) throws IOException {
super(a, file);
@@ -84,7 +65,7 @@ public class BundleInfo extends Artifact
this.analyze();
}
- public BundleInfo(final Artifact artifact,
+ public BundleDescriptor(final Artifact artifact,
final List<PackageInfo> pcks) throws IOException {
super(artifact, null);
this.startLevel = 0;
@@ -119,18 +100,11 @@ public class BundleInfo extends Artifact
return startLevel;
}
- public List<String> getInitialContent() {
- return Collections.unmodifiableList(this.initialContent);
- }
-
- public List<String> getBundleResources() {
- return Collections.unmodifiableList(this.bundleResources);
- }
-
public List<PackageInfo> getExportedPackages() {
return Collections.unmodifiableList(this.exportedPackages);
}
+ @Override
public Manifest getManifest() {
return this.manifest;
}
@@ -158,10 +132,12 @@ public class BundleInfo extends Artifact
return false;
}
+ @Override
public List<PackageInfo> getImportedPackages() {
return Collections.unmodifiableList(this.importedPackages);
}
+ @Override
public List<PackageInfo> getDynamicImportedPackages() {
return Collections.unmodifiableList(this.dynamicImportedPackages);
}
@@ -183,52 +159,16 @@ public class BundleInfo extends Artifact
this.exportedPackages.addAll(ManifestUtil.extractExportedPackages(this.manifest));
this.importedPackages.addAll(ManifestUtil.extractImportedPackages(this.manifest));
this.dynamicImportedPackages.addAll(ManifestUtil.extractDynamicImportedPackages(this.manifest));
- extractInitialContent(this.manifest);
- extractBundleResources(this.manifest);
} else {
throw new IOException("Unable to get bundle symbolic name from
artifact " + getArtifact().getId().toMvnId());
}
}
- private void extractBundleResources(final Manifest m) {
- final String root =
m.getMainAttributes().getValue(BUNDLE_RESOURCE_ROOTS);
- if (root != null) {
- final ManifestHeader header = ManifestHeader.parse(root);
- for (final ManifestHeader.Entry entry : header.getEntries()) {
- final String resourceRoot = entry.getValue();
- final String pathDirective =
entry.getDirectiveValue(PATH_DIRECTIVE);
- if (pathDirective != null) {
- this.bundleResources.add(resourceRoot + "!" +
pathDirective);
- } else {
- this.bundleResources.add(resourceRoot);
- }
- }
- }
- }
-
- private void extractInitialContent(final Manifest m) {
- final String root = m.getMainAttributes().getValue(CONTENT_HEADER);
- if (root != null) {
- final ManifestHeader header = ManifestHeader.parse(root);
- for (final ManifestHeader.Entry entry : header.getEntries()) {
-
- String path = entry.getDirectiveValue(PATH_DIRECTIVE);
- if (path == null) {
- path = "/";
- } else if (!path.startsWith("/")) {
- // make relative path absolute
- path = "/" + path;
- }
- this.initialContent.add(path);
- }
- }
- }
-
@Override
public boolean equals(Object obj) {
- if ( obj instanceof BundleInfo ) {
- return this.symbolicName.equals(((BundleInfo)obj).symbolicName) &&
this.bundleVersion.equals(((BundleInfo)obj).bundleVersion);
+ if ( obj instanceof BundleDescriptor ) {
+ return
this.symbolicName.equals(((BundleDescriptor)obj).symbolicName) &&
this.bundleVersion.equals(((BundleDescriptor)obj).bundleVersion);
}
return false;
}
@@ -245,7 +185,7 @@ public class BundleInfo extends Artifact
}
@Override
- public int compareTo(final BundleInfo o) {
+ public int compareTo(final BundleDescriptor o) {
return (this.symbolicName + ':' +
this.bundleVersion).compareTo((o.symbolicName + ':' + o.bundleVersion));
}
}
\ No newline at end of file
Added:
sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/scanner/Descriptor.java
URL:
http://svn.apache.org/viewvc/sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/scanner/Descriptor.java?rev=1800887&view=auto
==============================================================================
---
sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/scanner/Descriptor.java
(added)
+++
sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/scanner/Descriptor.java
Wed Jul 5 14:54:19 2017
@@ -0,0 +1,53 @@
+/*
+ * 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.scanner;
+
+import java.util.Collections;
+import java.util.List;
+
+import org.apache.sling.feature.Capability;
+import org.apache.sling.feature.Requirement;
+
+/**
+ * A descriptor holds information about requirements and capabilities
+ */
+public class Descriptor {
+
+ public List<PackageInfo> getImportedPackages() {
+ return Collections.emptyList();
+ }
+
+ public List<PackageInfo> getDynamicImportedPackages() {
+ return Collections.emptyList();
+ }
+
+ /**
+ * Return the list of requirements.
+ * @return The list of requirements. The list might be empty.
+ */
+ public List<Requirement> getRequirements() {
+ return Collections.emptyList();
+ }
+
+ /**
+ * Return the list of capabilities.
+ * @return The list of capabilities. The list might be empty.
+ */
+ public List<Capability> getCapabilities() {
+ return Collections.emptyList();
+ }
+}
\ No newline at end of file
Propchange:
sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/scanner/Descriptor.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/scanner/Descriptor.java
------------------------------------------------------------------------------
svn:keywords = author date id revision rev url
Added:
sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/scanner/ExtensionScanner.java
URL:
http://svn.apache.org/viewvc/sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/scanner/ExtensionScanner.java?rev=1800887&view=auto
==============================================================================
---
sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/scanner/ExtensionScanner.java
(added)
+++
sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/scanner/ExtensionScanner.java
Wed Jul 5 14:54:19 2017
@@ -0,0 +1,43 @@
+/*
+ * 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.scanner;
+
+import java.io.IOException;
+import java.util.List;
+
+import org.apache.sling.feature.Extension;
+
+/**
+ * The extension scanner scans an extension.
+ */
+public interface ExtensionScanner {
+
+ /** A unique (short) id. */
+ String getId();
+
+ /** A human readable name to identify the scanner. */
+ String getName();
+
+ /**
+ * Try to scan the extension and return a descriptor
+ * @param extension The extension
+ * @param descs A list of scanned artifact descriptors if the extension is
of type artifacts, {@code null} otherwise.
+ * @return The descriptor or {@code null} if the scanner does not know the
extension
+ * @throws IOException If an error occurs while scanning the extension or
the extension is invalid
+ */
+ Descriptor scan(Extension extension, List<ArtifactDescriptor> descs)
throws IOException;
+}
\ No newline at end of file
Propchange:
sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/scanner/ExtensionScanner.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/scanner/ExtensionScanner.java
------------------------------------------------------------------------------
svn:keywords = author date id revision rev url
Added:
sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/scanner/FeatureDescriptor.java
URL:
http://svn.apache.org/viewvc/sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/scanner/FeatureDescriptor.java?rev=1800887&view=auto
==============================================================================
---
sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/scanner/FeatureDescriptor.java
(added)
+++
sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/scanner/FeatureDescriptor.java
Wed Jul 5 14:54:19 2017
@@ -0,0 +1,26 @@
+/*
+ * 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.scanner;
+
+/**
+ * Information about a feature.
+ * This is the aggregated information.
+ */
+public class FeatureDescriptor extends Descriptor {
+
+
+}
\ No newline at end of file
Propchange:
sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/scanner/FeatureDescriptor.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/scanner/FeatureDescriptor.java
------------------------------------------------------------------------------
svn:keywords = author date id revision rev url
Modified:
sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/scanner/Scanner.java
URL:
http://svn.apache.org/viewvc/sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/scanner/Scanner.java?rev=1800887&r1=1800886&r2=1800887&view=diff
==============================================================================
---
sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/scanner/Scanner.java
(original)
+++
sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/scanner/Scanner.java
Wed Jul 5 14:54:19 2017
@@ -32,6 +32,7 @@ import org.apache.sling.feature.Applicat
import org.apache.sling.feature.Artifact;
import org.apache.sling.feature.Extension;
import org.apache.sling.feature.ExtensionType;
+import org.apache.sling.feature.Feature;
import org.apache.sling.feature.KeyValueMap;
import org.apache.sling.feature.support.ArtifactManager;
import org.apache.sling.feature.support.ArtifactManagerConfig;
@@ -46,30 +47,34 @@ public class Scanner {
this.artifactManager = ArtifactManager.getArtifactManager(amConfig);
}
- public ArtifactInfo scan(final Artifact artifact) throws IOException {
+ public ArtifactDescriptor scan(final Artifact artifact) throws IOException
{
final File file =
artifactManager.getArtifactHandler(artifact.getId().toMvnUrl()).getFile();
if ( file == null ) {
throw new IOException("Unable to find file for " +
artifact.getId());
}
- ArtifactInfo info = null;
+ ArtifactDescriptor info = null;
- info = new ArtifactInfo(artifact, file);
+ info = new ArtifactDescriptor(artifact, file);
return info;
}
- public BundleInfo scanBundle(final Artifact artifact, final int
startLevel) throws IOException {
+ public BundleDescriptor scanBundle(final Artifact artifact, final int
startLevel) throws IOException {
final File file =
artifactManager.getArtifactHandler(artifact.getId().toMvnUrl()).getFile();
if ( file == null ) {
throw new IOException("Unable to find file for " +
artifact.getId());
}
- return new BundleInfo(artifact, file, startLevel);
+ return new BundleDescriptor(artifact, file, startLevel);
}
- public List<BundleInfo> getBundleInfos(final Application app) throws
Exception {
- final List<BundleInfo> bundleInfos = new ArrayList<>();
+ public FeatureDescriptor scanFeature(final Feature feature) throws
IOException {
+ return null; // TBD
+ }
+
+ public List<BundleDescriptor> getBundleInfos(final Application app)
throws Exception {
+ final List<BundleDescriptor> bundleInfos = new ArrayList<>();
for(final Map.Entry<Integer, List<Artifact>> entry :
app.getBundles().getBundlesByStartLevel().entrySet()) {
for(final Artifact bundle : entry.getValue() ) {
@@ -80,8 +85,8 @@ public class Scanner {
return bundleInfos;
}
- public List<ArtifactInfo> getArtifactInfos(final Application app) throws
Exception {
- final List<ArtifactInfo> artifactInfos = new ArrayList<>();
+ public List<ArtifactDescriptor> getArtifactInfos(final Application app)
throws Exception {
+ final List<ArtifactDescriptor> artifactInfos = new ArrayList<>();
for(final Extension ext : app.getExtensions()) {
if ( ext.getType() == ExtensionType.ARTIFACTS ) {