You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@aries.apache.org by sb...@apache.org on 2017/03/16 21:05:55 UTC
svn commit: r1787244 - in /aries/branches/java6support/subsystem: ./
subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/BasicSubsystem.java
subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/defect/Aries1443Test.java
Author: sbratton
Date: Thu Mar 16 21:05:55 2017
New Revision: 1787244
URL: http://svn.apache.org/viewvc?rev=1787244&view=rev
Log:
Merge trunk r1779540 through r1787233 into java6support/subsystem
Removed:
aries/branches/java6support/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/defect/Aries1443Test.java
Modified:
aries/branches/java6support/subsystem/ (props changed)
aries/branches/java6support/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/BasicSubsystem.java
Propchange: aries/branches/java6support/subsystem/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Thu Mar 16 21:05:55 2017
@@ -1,2 +1,2 @@
/aries/branches/1.0-prototype/subsystem:1306564-1337594
-/aries/trunk/subsystem:1728111-1779539
+/aries/trunk/subsystem:1728111-1787233
Modified: aries/branches/java6support/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/BasicSubsystem.java
URL: http://svn.apache.org/viewvc/aries/branches/java6support/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/BasicSubsystem.java?rev=1787244&r1=1787243&r2=1787244&view=diff
==============================================================================
--- aries/branches/java6support/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/BasicSubsystem.java (original)
+++ aries/branches/java6support/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/BasicSubsystem.java Thu Mar 16 21:05:55 2017
@@ -54,6 +54,7 @@ import org.osgi.framework.BundleContext;
import org.osgi.framework.BundleException;
import org.osgi.framework.InvalidSyntaxException;
import org.osgi.framework.Version;
+import org.osgi.framework.namespace.HostNamespace;
import org.osgi.framework.namespace.IdentityNamespace;
import org.osgi.resource.Capability;
import org.osgi.resource.Requirement;
@@ -160,60 +161,28 @@ public class BasicSubsystem implements R
// First, add the capabilities from the manifest.
SubsystemManifest manifest = getSubsystemManifest();
List<Capability> result = manifest.toCapabilities(this);
- if (namespace != null) {
- for (Iterator<Capability> i = result.iterator(); i.hasNext();) {
- if (!i.next().getNamespace().equals(namespace)) {
+ if (namespace != null)
+ for (Iterator<Capability> i = result.iterator(); i.hasNext();)
+ if (!i.next().getNamespace().equals(namespace))
i.remove();
- }
- }
- }
- if (isScoped() || IdentityNamespace.IDENTITY_NAMESPACE.equals(namespace)) {
- // Scoped subsystems have all capabilities explicitly declared in
- // their manifests. Also, we do not want to include the osgi.identity
- // capabilities of content since a resource must have zero or one
- // osgi.identity capabilities.
+ // TODO Somehow, exposing the capabilities of content resources of a
+ // feature is causing an infinite regression of feature2 installations
+ // in FeatureTest.testSharedContent() under certain conditions.
+ if (isScoped() || IdentityNamespace.IDENTITY_NAMESPACE.equals(namespace))
return result;
- }
- // This is an unscoped subsystem that implicitly exports everything.
- // Its capabilities must be derived from its content.
- if (resource == null) {
- // This is a persisted subsystem. We no longer have access to the
- // original content. We must look at constituents that are also
- // content.
- SubsystemContentHeader header = manifest.getSubsystemContentHeader();
- for (Resource constituent : getConstituents()) {
- if (header.contains(constituent)) {
- for (Capability capability : constituent.getCapabilities(namespace)) {
- if (namespace == null && IdentityNamespace.IDENTITY_NAMESPACE.equals(capability.getNamespace())) {
- // Don't want to include the osgi.identity capabilities of
- // content. Need a second check here in case the namespace
- // is null.
- continue;
- }
- result.add(new BasicCapability(capability, this));
+ SubsystemContentHeader header = manifest.getSubsystemContentHeader();
+ for (Resource constituent : getConstituents()) {
+ if (header.contains(constituent)) {
+ for (Capability capability : constituent.getCapabilities(namespace)) {
+ if (namespace == null && (IdentityNamespace.IDENTITY_NAMESPACE.equals(capability.getNamespace()) || HostNamespace.HOST_NAMESPACE.equals(capability.getNamespace()))) {
+ // Don't want to include the osgi.identity and/or osgi.wiring.host capabilities of
+ // content. Need a second check here in case the namespace
+ // is null.
+ continue;
}
+ result.add(new BasicCapability(capability, this));
}
}
- return result;
- }
- // This is a newly installing subsystem. We therefore have access to the
- // original content via the SubsystemResource and can derive the
- // capabilities from there.
- Collection<Resource> installableContent = resource.getInstallableContent();
- Collection<Resource> sharedContent = resource.getSharedContent();
- Collection<Resource> contents = new ArrayList<Resource>(installableContent.size() + sharedContent.size());
- contents.addAll(installableContent);
- contents.addAll(sharedContent);
- for (Resource content : contents) {
- for (Capability capability : content.getCapabilities(namespace)) {
- if (namespace == null && IdentityNamespace.IDENTITY_NAMESPACE.equals(capability.getNamespace())) {
- // Don't want to include the osgi.identity capabilities of
- // content. Need a second check here in case the namespace
- // is null.
- continue;
- }
- result.add(new BasicCapability(capability, this));
- }
}
return result;
}
@@ -223,47 +192,17 @@ public class BasicSubsystem implements R
// First, add the requirements from the manifest.
SubsystemManifest manifest = getSubsystemManifest();
List<Requirement> result = manifest.toRequirements(this);
- if (namespace != null) {
- for (Iterator<Requirement> i = result.iterator(); i.hasNext();) {
- if (!i.next().getNamespace().equals(namespace)) {
+ if (namespace != null)
+ for (Iterator<Requirement> i = result.iterator(); i.hasNext();)
+ if (!i.next().getNamespace().equals(namespace))
i.remove();
- }
- }
- }
- if (isScoped()) {
- // Scoped subsystems have all requirements explicitly declared in
- // their manifests.
+ if (isScoped())
return result;
- }
- // This is an unscoped subsystem that implicitly imports everything.
- // Its requirements must be derived from its content.
- if (resource == null) {
- // This is a persisted subsystem. We no longer have access to the
- // original content. We must look at constituents that are also
- // content.
- SubsystemContentHeader header = manifest.getSubsystemContentHeader();
- for (Resource constituent : getConstituents()) {
- if (header.contains(constituent)) {
- for (Requirement requirement : constituent.getRequirements(namespace)) {
- result.add(new BasicRequirement(requirement, this));
- }
- }
- }
- return result;
- }
- // This is a newly installing subsystem. We therefore have access to the
- // original content via the SubsystemResource and can derive the
- // requirements from there.
- Collection<Resource> installableContent = resource.getInstallableContent();
- Collection<Resource> sharedContent = resource.getSharedContent();
- Collection<Resource> contents = new ArrayList<Resource>(installableContent.size() + sharedContent.size());
- contents.addAll(installableContent);
- contents.addAll(sharedContent);
- for (Resource content : contents) {
- for (Requirement requirement : content.getRequirements(namespace)) {
- result.add(new BasicRequirement(requirement, this));
- }
- }
+ SubsystemContentHeader header = manifest.getSubsystemContentHeader();
+ for (Resource constituent : getConstituents())
+ if (header.contains(constituent))
+ for (Requirement requirement : constituent.getRequirements(namespace))
+ result.add(new BasicRequirement(requirement, this));
return result;
}