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