Author: cziegeler
Date: Fri Aug 4 16:34:33 2017
New Revision: 1804141
URL: http://svn.apache.org/viewvc?rev=1804141&view=rev
Log:
Update descriptor classes to make them more usable
Removed:
sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/analyser/impl/ContainerDescriptorImpl.java
Modified:
sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/analyser/ApplicationDescriptor.java
sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/analyser/ArtifactDescriptor.java
sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/analyser/BundleDescriptor.java
sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/analyser/ContainerDescriptor.java
sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/analyser/Descriptor.java
sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/analyser/FeatureDescriptor.java
sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/analyser/Scanner.java
sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/analyser/impl/ApplicationDescriptorImpl.java
sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/analyser/impl/BundleDescriptorImpl.java
sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/analyser/impl/CheckBundleExportsImports.java
sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/analyser/impl/CheckRequirementsCapabilities.java
sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/analyser/impl/FeatureDescriptorImpl.java
sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/scanner/FrameworkScanner.java
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/analyser/ApplicationDescriptor.java
URL:
http://svn.apache.org/viewvc/sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/analyser/ApplicationDescriptor.java?rev=1804141&r1=1804140&r2=1804141&view=diff
==============================================================================
---
sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/analyser/ApplicationDescriptor.java
(original)
+++
sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/analyser/ApplicationDescriptor.java
Fri Aug 4 16:34:33 2017
@@ -22,9 +22,9 @@ import org.apache.sling.feature.Applicat
* Information about an application.
* This is the aggregated information.
*/
-public interface ApplicationDescriptor extends ContainerDescriptor {
+public abstract class ApplicationDescriptor extends ContainerDescriptor {
- Application getApplication();
+ public abstract Application getApplication();
- Descriptor getFrameworkDescriptor();
+ public abstract BundleDescriptor getFrameworkDescriptor();
}
\ No newline at end of file
Modified:
sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/analyser/ArtifactDescriptor.java
URL:
http://svn.apache.org/viewvc/sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/analyser/ArtifactDescriptor.java?rev=1804141&r1=1804140&r2=1804141&view=diff
==============================================================================
---
sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/analyser/ArtifactDescriptor.java
(original)
+++
sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/analyser/ArtifactDescriptor.java
Fri Aug 4 16:34:33 2017
@@ -16,31 +16,31 @@
*/
package org.apache.sling.feature.analyser;
-import org.apache.sling.feature.Artifact;
-
import java.io.File;
import java.util.jar.Manifest;
+import org.apache.sling.feature.Artifact;
+
/**
* Information about an artifact
*/
-public interface ArtifactDescriptor extends Descriptor {
+public abstract class ArtifactDescriptor extends Descriptor {
/**
* Get the artifact file
* @return The artifact file
*/
- File getArtifactFile();
+ public abstract File getArtifactFile();
/**
* Get the artifact
* @return The artifact
*/
- Artifact getArtifact();
+ public abstract Artifact getArtifact();
/**
* If the artifact has a manifest, return it
* @return The manifest or {@code null}
*/
- Manifest getManifest();
+ public abstract Manifest getManifest();
}
\ No newline at end of file
Modified:
sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/analyser/BundleDescriptor.java
URL:
http://svn.apache.org/viewvc/sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/analyser/BundleDescriptor.java?rev=1804141&r1=1804140&r2=1804141&view=diff
==============================================================================
---
sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/analyser/BundleDescriptor.java
(original)
+++
sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/analyser/BundleDescriptor.java
Fri Aug 4 16:34:33 2017
@@ -16,32 +16,76 @@
*/
package org.apache.sling.feature.analyser;
+import org.apache.sling.feature.analyser.impl.BundleDescriptorImpl;
import org.apache.sling.feature.support.util.PackageInfo;
/**
* Information about a bundle
*/
-public interface BundleDescriptor extends ArtifactDescriptor,
Comparable<BundleDescriptor> {
+public abstract class BundleDescriptor extends ArtifactDescriptor implements
Comparable<BundleDescriptor> {
/**
* Get the bundle symbolic name.
* @return The bundle symbolic name
*/
- String getBundleSymbolicName();
+ public abstract String getBundleSymbolicName();
/**
* Get the bundle version
* @return The bundle version
*/
- String getBundleVersion();
+ public abstract String getBundleVersion();
/**
* Get the start level
* @return The start level.
*/
- int getBundleStartLevel();
+ public abstract int getBundleStartLevel();
- boolean isExportingPackage(String packageName);
-
- boolean isExportingPackage(PackageInfo info);
+ public boolean isExportingPackage(final String packageName) {
+ if ( getExportedPackages() != null ) {
+ for(final PackageInfo i : getExportedPackages()) {
+ if ( i.getName().equals(packageName) ) {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
+ public boolean isExportingPackage(final PackageInfo info) {
+ if ( getExportedPackages() != null ) {
+ for(final PackageInfo i : getExportedPackages()) {
+ if ( i.getName().equals(info.getName())
+ && (info.getVersion() == null ||
info.getPackageVersionRange().includes(i.getPackageVersion()))) {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if ( obj instanceof BundleDescriptorImpl ) {
+ return
this.getBundleSymbolicName().equals(((BundleDescriptorImpl)obj).getBundleSymbolicName())
&&
this.getBundleVersion().equals(((BundleDescriptorImpl)obj).getBundleVersion());
+ }
+ return false;
+ }
+
+ @Override
+ public int hashCode() {
+ return (this.getBundleSymbolicName() + ':' +
this.getBundleVersion()).hashCode();
+
+ }
+
+ @Override
+ public String toString() {
+ return "BundleInfo [symbolicName=" + getBundleSymbolicName() + ",
version=" + this.getBundleVersion() + "]";
+ }
+
+ @Override
+ public int compareTo(final BundleDescriptor o) {
+ return (this.getBundleSymbolicName() + ':' +
this.getBundleVersion()).compareTo((o.getBundleSymbolicName() + ':' +
o.getBundleVersion()));
+ }
}
\ No newline at end of file
Modified:
sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/analyser/ContainerDescriptor.java
URL:
http://svn.apache.org/viewvc/sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/analyser/ContainerDescriptor.java?rev=1804141&r1=1804140&r2=1804141&view=diff
==============================================================================
---
sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/analyser/ContainerDescriptor.java
(original)
+++
sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/analyser/ContainerDescriptor.java
Fri Aug 4 16:34:33 2017
@@ -16,13 +16,19 @@
*/
package org.apache.sling.feature.analyser;
+import java.util.Collections;
+import java.util.HashSet;
import java.util.Set;
/**
* Information about a container (feature/application).
* This is the aggregated information.
*/
-public interface ContainerDescriptor extends Descriptor {
+public abstract class ContainerDescriptor extends Descriptor {
+
+ private final Set<BundleDescriptor> bundles = new HashSet<>();
+
+ private final Set<ArtifactDescriptor> artifacts = new HashSet<>();
/**
* Return a set of bundle descriptors.
@@ -33,7 +39,9 @@ public interface ContainerDescriptor ext
* {@link Descriptor#getExportedPackages()} and {@link
Descriptor#getImportedPackages()}
* @return The set of bundle descriptors (might be empty)
*/
- Set<BundleDescriptor> getBundleDescriptors();
+ public final Set<BundleDescriptor> getBundleDescriptors() {
+ return this.isLocked() ? Collections.unmodifiableSet(bundles) :
bundles;
+ }
/**
* Return a set of artifact descriptors
@@ -42,5 +50,18 @@ public interface ContainerDescriptor ext
* {@link Descriptor#getRequirements()}.
* @return The set of artifact descriptors (might be empty)
*/
- Set<ArtifactDescriptor> getArtifactDescriptors();
+ public final Set<ArtifactDescriptor> getArtifactDescriptors() {
+ return this.isLocked() ? Collections.unmodifiableSet(artifacts) :
artifacts;
+ }
+
+ @Override
+ public void lock() {
+ for(final BundleDescriptor bd : this.bundles) {
+ this.aggregate(bd);
+ }
+ for(final ArtifactDescriptor d : this.artifacts) {
+ this.aggregate(d);
+ }
+ super.lock();
+ }
}
\ No newline at end of file
Modified:
sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/analyser/Descriptor.java
URL:
http://svn.apache.org/viewvc/sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/analyser/Descriptor.java?rev=1804141&r1=1804140&r2=1804141&view=diff
==============================================================================
---
sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/analyser/Descriptor.java
(original)
+++
sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/analyser/Descriptor.java
Fri Aug 4 16:34:33 2017
@@ -16,43 +16,78 @@
*/
package org.apache.sling.feature.analyser;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.Set;
+
import org.apache.sling.feature.Capability;
import org.apache.sling.feature.Requirement;
import org.apache.sling.feature.support.util.PackageInfo;
-import java.util.Collections;
-import java.util.Set;
-
/**
* A descriptor holds information about requirements and capabilities
*/
-public interface Descriptor {
+public abstract class Descriptor {
+
+ private boolean locked;
+
+ private final Set<PackageInfo> exports = new HashSet<>();
+
+ private final Set<PackageInfo> imports = new HashSet<>();
+
+ private final Set<PackageInfo> dynImports = new HashSet<>();
+
+ private final Set<Requirement> reqs = new HashSet<>();
+
+ private final Set<Capability> caps = new HashSet<>();
+
+ public void lock() {
+ this.locked = true;
+ }
+
+ public final boolean isLocked() {
+ return this.locked;
+ }
+
+ protected void checkLocked() {
+ if (this.locked) {
+ throw new IllegalStateException("Descriptor is locked.");
+ }
+ }
+
+ protected void aggregate(final Descriptor d) {
+ reqs.addAll(d.getRequirements());
+ caps.addAll(d.getCapabilities());
+ dynImports.addAll(d.getDynamicImportedPackages());
+ imports.addAll(d.getImportedPackages());
+ exports.addAll(d.getExportedPackages());
+ }
- default Set<PackageInfo> getExportedPackages() {
- return Collections.emptySet();
+ public final Set<PackageInfo> getExportedPackages() {
+ return locked ? Collections.unmodifiableSet(exports) : exports;
}
- default Set<PackageInfo> getImportedPackages() {
- return Collections.emptySet();
+ public final Set<PackageInfo> getImportedPackages() {
+ return locked ? Collections.unmodifiableSet(imports) : imports;
}
- default Set<PackageInfo> getDynamicImportedPackages() {
- return Collections.emptySet();
+ public final Set<PackageInfo> getDynamicImportedPackages() {
+ return locked ? Collections.unmodifiableSet(dynImports) : dynImports;
}
/**
* Return the list of requirements.
* @return The list of requirements. The list might be empty.
*/
- default Set<Requirement> getRequirements() {
- return Collections.emptySet();
+ public final Set<Requirement> getRequirements() {
+ return locked ? Collections.unmodifiableSet(reqs) : reqs;
}
/**
* Return the list of capabilities.
* @return The list of capabilities. The list might be empty.
*/
- default Set<Capability> getCapabilities() {
- return Collections.emptySet();
+ public final Set<Capability> getCapabilities() {
+ return locked ? Collections.unmodifiableSet(caps) : caps;
}
}
\ No newline at end of file
Modified:
sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/analyser/FeatureDescriptor.java
URL:
http://svn.apache.org/viewvc/sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/analyser/FeatureDescriptor.java?rev=1804141&r1=1804140&r2=1804141&view=diff
==============================================================================
---
sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/analyser/FeatureDescriptor.java
(original)
+++
sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/analyser/FeatureDescriptor.java
Fri Aug 4 16:34:33 2017
@@ -22,7 +22,7 @@ import org.apache.sling.feature.Feature;
* Information about a feature.
* This is the aggregated information.
*/
-public interface FeatureDescriptor extends ContainerDescriptor {
+public abstract class FeatureDescriptor extends ContainerDescriptor {
- Feature getFeature();
+ public abstract Feature getFeature();
}
\ No newline at end of file
Modified:
sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/analyser/Scanner.java
URL:
http://svn.apache.org/viewvc/sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/analyser/Scanner.java?rev=1804141&r1=1804140&r2=1804141&view=diff
==============================================================================
---
sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/analyser/Scanner.java
(original)
+++
sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/analyser/Scanner.java
Fri Aug 4 16:34:33 2017
@@ -31,7 +31,6 @@ import org.apache.sling.feature.Extensio
import org.apache.sling.feature.Feature;
import org.apache.sling.feature.analyser.impl.ApplicationDescriptorImpl;
import org.apache.sling.feature.analyser.impl.BundleDescriptorImpl;
-import org.apache.sling.feature.analyser.impl.ContainerDescriptorImpl;
import org.apache.sling.feature.analyser.impl.FeatureDescriptorImpl;
import org.apache.sling.feature.scanner.ArtifactScanner;
import org.apache.sling.feature.scanner.ExtensionScanner;
@@ -132,6 +131,8 @@ public class Scanner {
if ( info == null ) {
throw new IOException("No artifact scanner found for " +
artifact.getId().toMvnId());
}
+ info.lock();
+
return info;
}
@@ -158,7 +159,7 @@ public class Scanner {
* @param desc The descriptor
* @throws IOException If something goes wrong or no suitable scanner is
found.
*/
- private void getBundleInfos(final Bundles bundles, final
ContainerDescriptorImpl desc)
+ private void getBundleInfos(final Bundles bundles, final
ContainerDescriptor desc)
throws IOException {
for(final Map.Entry<Integer, List<Artifact>> entry :
bundles.getBundlesByStartLevel().entrySet()) {
for(final Artifact bundle : entry.getValue() ) {
@@ -174,7 +175,7 @@ public class Scanner {
}
}
- private void scan(final Extensions extensions, final
ContainerDescriptorImpl desc)
+ private void scan(final Extensions extensions, final ContainerDescriptor
desc)
throws IOException {
for(final Extension ext : extensions) {
ContainerDescriptor extDesc = null;
@@ -198,7 +199,7 @@ public class Scanner {
}
}
- private void compact(final ContainerDescriptorImpl desc) {
+ private void compact(final ContainerDescriptor desc) {
// TBD remove all import packages / dynamic import packages which are
resolved by this bundle set
// same with requirements
@@ -219,6 +220,8 @@ public class Scanner {
compact(desc);
+ desc.lock();
+
return desc;
}
@@ -243,7 +246,7 @@ public class Scanner {
throw new IOException("Unable to find file for " +
app.getFramework());
}
- Descriptor fwk = null;
+ BundleDescriptor fwk = null;
for(final FrameworkScanner scanner : this.frameworkScanners) {
fwk = scanner.scan(app.getFramework(), file,
app.getFrameworkProperties());
if ( fwk != null ) {
@@ -263,6 +266,7 @@ public class Scanner {
desc.setFrameworkDescriptor(fwk);
+ desc.lock();
return desc;
}
}
Modified:
sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/analyser/impl/ApplicationDescriptorImpl.java
URL:
http://svn.apache.org/viewvc/sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/analyser/impl/ApplicationDescriptorImpl.java?rev=1804141&r1=1804140&r2=1804141&view=diff
==============================================================================
---
sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/analyser/impl/ApplicationDescriptorImpl.java
(original)
+++
sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/analyser/impl/ApplicationDescriptorImpl.java
Fri Aug 4 16:34:33 2017
@@ -18,17 +18,16 @@ package org.apache.sling.feature.analyse
import org.apache.sling.feature.Application;
import org.apache.sling.feature.analyser.ApplicationDescriptor;
-import org.apache.sling.feature.analyser.Descriptor;
+import org.apache.sling.feature.analyser.BundleDescriptor;
/**
* Information about an application.
* This is the aggregated information.
*/
public class ApplicationDescriptorImpl
- extends ContainerDescriptorImpl
- implements ApplicationDescriptor {
+ extends ApplicationDescriptor {
- private Descriptor frameworkDescriptor = new Descriptor() {};
+ private BundleDescriptor frameworkDescriptor;
private final Application app;
@@ -42,11 +41,12 @@ public class ApplicationDescriptorImpl
}
@Override
- public Descriptor getFrameworkDescriptor() {
+ public BundleDescriptor getFrameworkDescriptor() {
return frameworkDescriptor;
}
- public void setFrameworkDescriptor(final Descriptor frameworkDescriptor) {
+ public void setFrameworkDescriptor(final BundleDescriptor
frameworkDescriptor) {
+ checkLocked();
this.frameworkDescriptor = frameworkDescriptor;
}
}
\ No newline at end of file
Modified:
sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/analyser/impl/BundleDescriptorImpl.java
URL:
http://svn.apache.org/viewvc/sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/analyser/impl/BundleDescriptorImpl.java?rev=1804141&r1=1804140&r2=1804141&view=diff
==============================================================================
---
sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/analyser/impl/BundleDescriptorImpl.java
(original)
+++
sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/analyser/impl/BundleDescriptorImpl.java
Fri Aug 4 16:34:33 2017
@@ -16,6 +16,11 @@
*/
package org.apache.sling.feature.analyser.impl;
+import java.io.File;
+import java.io.IOException;
+import java.util.Set;
+import java.util.jar.Manifest;
+
import org.apache.sling.feature.Artifact;
import org.apache.sling.feature.Capability;
import org.apache.sling.feature.Requirement;
@@ -25,18 +30,11 @@ import org.apache.sling.feature.support.
import org.apache.sling.feature.support.util.PackageInfo;
import org.osgi.framework.Constants;
-import java.io.File;
-import java.io.IOException;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.Set;
-import java.util.jar.Manifest;
-
/**
* Information about a bundle
*/
public class BundleDescriptorImpl
- implements BundleDescriptor {
+ extends BundleDescriptor {
/** The bundle symbolic name. */
private String symbolicName;
@@ -47,15 +45,6 @@ public class BundleDescriptorImpl
/** The start level of this artifact. */
private final int startLevel;
- /** Information about exported packages. */
- private final Set<PackageInfo> exportedPackages = new HashSet<>();
-
- /** Information about imported packages. */
- private final Set<PackageInfo> importedPackages = new HashSet<>();
-
- /** Information about dynamic imported packages. */
- private final Set<PackageInfo> dynamicImportedPackages = new HashSet<>();
-
/** Manifest */
private final Manifest manifest;
@@ -65,10 +54,6 @@ public class BundleDescriptorImpl
/** The corresponding artifact from the feature. */
private final Artifact artifact;
- private final Set<Capability> capabilities = new HashSet<>();
-
- private final Set<Requirement> requirements = new HashSet<>();
-
public BundleDescriptorImpl(final Artifact a,
final File file,
final int startLevel) throws IOException {
@@ -81,18 +66,24 @@ public class BundleDescriptorImpl
throw new IOException("File has no manifest");
}
this.analyze();
+ this.lock();
}
public BundleDescriptorImpl(final Artifact artifact,
- final Set<PackageInfo> pcks) throws IOException {
+ final Set<PackageInfo> pcks,
+ final Set<Requirement> reqs,
+ final Set<Capability> caps) throws IOException {
this.artifact = artifact;
this.artifactFile = null;
this.startLevel = 0;
this.symbolicName = Constants.SYSTEM_BUNDLE_SYMBOLICNAME;
this.bundleVersion = artifact.getId().getOSGiVersion().toString();
- this.exportedPackages.addAll(pcks);
+ this.getExportedPackages().addAll(pcks);
+ this.getRequirements().addAll(reqs);
+ this.getCapabilities().addAll(caps);
this.manifest = null;
+ this.lock();
}
/**
@@ -123,11 +114,6 @@ public class BundleDescriptorImpl
}
@Override
- public Set<PackageInfo> getExportedPackages() {
- return Collections.unmodifiableSet(this.exportedPackages);
- }
-
- @Override
public File getArtifactFile() {
return artifactFile;
}
@@ -142,51 +128,6 @@ public class BundleDescriptorImpl
return this.manifest;
}
- @Override
- public boolean isExportingPackage(final String packageName) {
- if ( getExportedPackages() != null ) {
- for(final PackageInfo i : getExportedPackages()) {
- if ( i.getName().equals(packageName) ) {
- return true;
- }
- }
- }
- return false;
- }
-
- @Override
- public boolean isExportingPackage(final PackageInfo info) {
- if ( getExportedPackages() != null ) {
- for(final PackageInfo i : getExportedPackages()) {
- if ( i.getName().equals(info.getName())
- && (info.getVersion() == null ||
info.getPackageVersionRange().includes(i.getPackageVersion()))) {
- return true;
- }
- }
- }
- return false;
- }
-
- @Override
- public Set<PackageInfo> getImportedPackages() {
- return Collections.unmodifiableSet(this.importedPackages);
- }
-
- @Override
- public Set<PackageInfo> getDynamicImportedPackages() {
- return Collections.unmodifiableSet(this.dynamicImportedPackages);
- }
-
- @Override
- public Set<Capability> getCapabilities() {
- return Collections.unmodifiableSet(capabilities);
- }
-
- @Override
- public Set<Requirement> getRequirements() {
- return Collections.unmodifiableSet(requirements);
- }
-
protected void analyze() throws IOException {
final String name =
this.manifest.getMainAttributes().getValue(Constants.BUNDLE_SYMBOLICNAME);
if ( name != null ) {
@@ -201,13 +142,13 @@ public class BundleDescriptorImpl
this.symbolicName = newBundleName;
}
-
this.exportedPackages.addAll(ManifestUtil.extractExportedPackages(this.manifest));
-
this.importedPackages.addAll(ManifestUtil.extractImportedPackages(this.manifest));
-
this.dynamicImportedPackages.addAll(ManifestUtil.extractDynamicImportedPackages(this.manifest));
+
this.getExportedPackages().addAll(ManifestUtil.extractExportedPackages(this.manifest));
+
this.getImportedPackages().addAll(ManifestUtil.extractImportedPackages(this.manifest));
+
this.getDynamicImportedPackages().addAll(ManifestUtil.extractDynamicImportedPackages(this.manifest));
try {
ManifestParser parser = new ManifestParser(this.manifest);
-
this.capabilities.addAll(ManifestUtil.extractCapabilities(parser));
-
this.requirements.addAll(ManifestUtil.extractRequirements(parser));
+
this.getCapabilities().addAll(ManifestUtil.extractCapabilities(parser));
+
this.getRequirements().addAll(ManifestUtil.extractRequirements(parser));
} catch (Exception ex) {
throw new IOException(ex);
}
@@ -215,28 +156,4 @@ public class BundleDescriptorImpl
throw new IOException("Unable to get bundle symbolic name from
artifact " + getArtifact().getId().toMvnId());
}
}
-
- @Override
- public boolean equals(Object obj) {
- if ( obj instanceof BundleDescriptorImpl ) {
- return
this.symbolicName.equals(((BundleDescriptorImpl)obj).symbolicName) &&
this.bundleVersion.equals(((BundleDescriptorImpl)obj).bundleVersion);
- }
- return false;
- }
-
- @Override
- public int hashCode() {
- return (this.symbolicName + ':' + this.bundleVersion).hashCode();
-
- }
-
- @Override
- public String toString() {
- return "BundleInfo [symbolicName=" + symbolicName + ", version=" +
this.bundleVersion + "]";
- }
-
- @Override
- public int compareTo(final BundleDescriptor o) {
- return (this.symbolicName + ':' +
this.bundleVersion).compareTo((o.getBundleSymbolicName() + ':' +
o.getBundleVersion()));
- }
}
\ No newline at end of file
Modified:
sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/analyser/impl/CheckBundleExportsImports.java
URL:
http://svn.apache.org/viewvc/sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/analyser/impl/CheckBundleExportsImports.java?rev=1804141&r1=1804140&r2=1804141&view=diff
==============================================================================
---
sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/analyser/impl/CheckBundleExportsImports.java
(original)
+++
sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/analyser/impl/CheckBundleExportsImports.java
Fri Aug 4 16:34:33 2017
@@ -18,13 +18,6 @@
*/
package org.apache.sling.feature.analyser.impl;
-import org.apache.sling.feature.Artifact;
-import org.apache.sling.feature.analyser.BundleDescriptor;
-import org.apache.sling.feature.analyser.task.AnalyserTask;
-import org.apache.sling.feature.analyser.task.AnalyserTaskContext;
-import org.apache.sling.feature.support.util.PackageInfo;
-import org.osgi.framework.Version;
-
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
@@ -33,6 +26,12 @@ import java.util.Map;
import java.util.SortedMap;
import java.util.TreeMap;
+import org.apache.sling.feature.analyser.BundleDescriptor;
+import org.apache.sling.feature.analyser.task.AnalyserTask;
+import org.apache.sling.feature.analyser.task.AnalyserTaskContext;
+import org.apache.sling.feature.support.util.PackageInfo;
+import org.osgi.framework.Version;
+
public class CheckBundleExportsImports implements AnalyserTask {
@Override
@@ -115,12 +114,9 @@ public class CheckBundleExportsImports i
list.add(bi);
}
- // create a synthetic bundle info for the system bundle
- final BundleDescriptor system = new BundleDescriptorImpl(new
Artifact(ctx.getApplication().getFramework()),
ctx.getDescriptor().getFrameworkDescriptor().getExportedPackages());
-
// add all system packages
final List<BundleDescriptor> exportingBundles = new ArrayList<>();
- exportingBundles.add(system);
+ exportingBundles.add(ctx.getDescriptor().getFrameworkDescriptor());
for(final Map.Entry<Integer, List<BundleDescriptor>> entry :
bundlesMap.entrySet()) {
// first add all exporting bundles
Modified:
sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/analyser/impl/CheckRequirementsCapabilities.java
URL:
http://svn.apache.org/viewvc/sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/analyser/impl/CheckRequirementsCapabilities.java?rev=1804141&r1=1804140&r2=1804141&view=diff
==============================================================================
---
sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/analyser/impl/CheckRequirementsCapabilities.java
(original)
+++
sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/analyser/impl/CheckRequirementsCapabilities.java
Fri Aug 4 16:34:33 2017
@@ -16,23 +16,20 @@
*/
package org.apache.sling.feature.analyser.impl;
-import org.apache.sling.feature.Artifact;
-import org.apache.sling.feature.Capability;
-import org.apache.sling.feature.Requirement;
-import org.apache.sling.feature.analyser.ArtifactDescriptor;
-import org.apache.sling.feature.analyser.BundleDescriptor;
-import org.apache.sling.feature.analyser.task.AnalyserTask;
-import org.apache.sling.feature.analyser.task.AnalyserTaskContext;
-import org.apache.sling.feature.support.util.CapabilityMatcher;
-
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
-import java.util.Set;
import java.util.SortedMap;
import java.util.TreeMap;
import java.util.stream.Collectors;
+import org.apache.sling.feature.Requirement;
+import org.apache.sling.feature.analyser.ArtifactDescriptor;
+import org.apache.sling.feature.analyser.BundleDescriptor;
+import org.apache.sling.feature.analyser.task.AnalyserTask;
+import org.apache.sling.feature.analyser.task.AnalyserTaskContext;
+import org.apache.sling.feature.support.util.CapabilityMatcher;
+
public class CheckRequirementsCapabilities implements AnalyserTask {
private final String format = "Artifact %s:%s requires %s in start level
%d but %s";
@@ -55,22 +52,9 @@ public class CheckRequirementsCapabiliti
);
}
- // create a synthetic bundle info for the system bundle
- final ArtifactDescriptor system = new BundleDescriptorImpl(new
Artifact(ctx.getApplication().getFramework()),
ctx.getDescriptor().getFrameworkDescriptor().getExportedPackages()) {
- @Override
- public Set<Requirement> getRequirements() {
- return
ctx.getDescriptor().getFrameworkDescriptor().getRequirements();
- }
-
- @Override
- public Set<Capability> getCapabilities() {
- return
ctx.getDescriptor().getFrameworkDescriptor().getCapabilities();
- }
- };
-
// add system artifact
final List<ArtifactDescriptor> artifacts = new ArrayList<>();
- artifacts.add(system);
+ artifacts.add(ctx.getDescriptor().getFrameworkDescriptor());
for(final Map.Entry<Integer, List<ArtifactDescriptor>> entry :
artifactsMap.entrySet()) {
// first add all providing artifacts
Modified:
sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/analyser/impl/FeatureDescriptorImpl.java
URL:
http://svn.apache.org/viewvc/sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/analyser/impl/FeatureDescriptorImpl.java?rev=1804141&r1=1804140&r2=1804141&view=diff
==============================================================================
---
sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/analyser/impl/FeatureDescriptorImpl.java
(original)
+++
sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/analyser/impl/FeatureDescriptorImpl.java
Fri Aug 4 16:34:33 2017
@@ -24,8 +24,7 @@ import org.apache.sling.feature.analyser
* This is the aggregated information.
*/
public class FeatureDescriptorImpl
- extends ContainerDescriptorImpl
- implements FeatureDescriptor {
+ extends FeatureDescriptor {
private final Feature feature;
Modified:
sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/scanner/FrameworkScanner.java
URL:
http://svn.apache.org/viewvc/sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/scanner/FrameworkScanner.java?rev=1804141&r1=1804140&r2=1804141&view=diff
==============================================================================
---
sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/scanner/FrameworkScanner.java
(original)
+++
sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/scanner/FrameworkScanner.java
Fri Aug 4 16:34:33 2017
@@ -16,13 +16,13 @@
*/
package org.apache.sling.feature.scanner;
-import org.apache.sling.feature.ArtifactId;
-import org.apache.sling.feature.KeyValueMap;
-import org.apache.sling.feature.analyser.Descriptor;
-
import java.io.File;
import java.io.IOException;
+import org.apache.sling.feature.ArtifactId;
+import org.apache.sling.feature.KeyValueMap;
+import org.apache.sling.feature.analyser.BundleDescriptor;
+
/**
* The framework scanner scans the framework
*/
@@ -36,7 +36,7 @@ public interface FrameworkScanner {
* @return A descriptor or {@code null}
* @throws IOException If an error occurs while scanning the platform or
the artifact is invalid
*/
- Descriptor scan(ArtifactId framework,
+ BundleDescriptor scan(ArtifactId framework,
File platformFile,
KeyValueMap frameworkProps) throws IOException;
}
\ No newline at end of file
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=1804141&r1=1804140&r2=1804141&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
Fri Aug 4 16:34:33 2017
@@ -16,43 +16,41 @@
*/
package org.apache.sling.feature.scanner.impl;
-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 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;
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.jar.Manifest;
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;
+import org.apache.sling.commons.osgi.ManifestHeader;
+import org.apache.sling.feature.Artifact;
+import org.apache.sling.feature.ArtifactId;
+import org.apache.sling.feature.Capability;
+import org.apache.sling.feature.KeyValueMap;
+import org.apache.sling.feature.analyser.BundleDescriptor;
+import org.apache.sling.feature.scanner.FrameworkScanner;
+import org.apache.sling.feature.support.util.PackageInfo;
+import org.osgi.framework.Constants;
public class FelixFrameworkScanner implements FrameworkScanner {
@Override
- public Descriptor scan(final ArtifactId framework,
+ public BundleDescriptor scan(final ArtifactId framework,
final File platformFile,
final KeyValueMap frameworkProps)
throws IOException {
@@ -63,18 +61,42 @@ public class FelixFrameworkScanner imple
final Set<PackageInfo> pcks = calculateSystemPackages(fwkProps);
final Set<Capability> capabilities =
calculateSystemCapabilities(fwkProps);
- return new Descriptor() {
+ final BundleDescriptor d = new BundleDescriptor() {
+
+ @Override
+ public String getBundleSymbolicName() {
+ return Constants.SYSTEM_BUNDLE_SYMBOLICNAME;
+ }
+
+ @Override
+ public String getBundleVersion() {
+ return framework.getOSGiVersion().toString();
+ }
+
+ @Override
+ public int getBundleStartLevel() {
+ return 0;
+ }
+
+ @Override
+ public File getArtifactFile() {
+ return platformFile;
+ }
@Override
- public Set<PackageInfo> getExportedPackages() {
- return pcks;
+ public Artifact getArtifact() {
+ return new Artifact(framework);
}
@Override
- public Set<Capability> getCapabilities() {
- return capabilities;
+ public Manifest getManifest() {
+ return null;
}
};
+ d.getCapabilities().addAll(capabilities);
+ d.getExportedPackages().addAll(pcks);
+ d.lock();
+ return d;
}
private Set<Capability> calculateSystemCapabilities(final KeyValueMap
fwkProps) {