You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@aries.apache.org by jw...@apache.org on 2012/07/31 17:30:43 UTC

svn commit: r1367617 - in /aries/trunk/subsystem: subsystem-core/src/main/java/org/apache/aries/subsystem/core/archive/ subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/ subsystem-itests/src/test/java/org/apache/aries/subsystem/ite...

Author: jwross
Date: Tue Jul 31 15:30:43 2012
New Revision: 1367617

URL: http://svn.apache.org/viewvc?rev=1367617&view=rev
Log:
ARIES-895: Missing filter directives are no longer translated into anything else. If the filter directive is null, RegionFilterBuilder.allowAll(<namespace>) is used when creating the Region Digraph sharing policy. Otherwise, RegionFilterBuilder.allow(<namespace>, <filter>) is used.

Modified:
    aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/archive/RequireCapabilityRequirement.java
    aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/DependencyCalculator.java
    aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/SubsystemResource.java
    aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/NoRequirementFilterTest.java

Modified: aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/archive/RequireCapabilityRequirement.java
URL: http://svn.apache.org/viewvc/aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/archive/RequireCapabilityRequirement.java?rev=1367617&r1=1367616&r2=1367617&view=diff
==============================================================================
--- aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/archive/RequireCapabilityRequirement.java (original)
+++ aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/archive/RequireCapabilityRequirement.java Tue Jul 31 15:30:43 2012
@@ -31,12 +31,8 @@ public class RequireCapabilityRequiremen
 	public RequireCapabilityRequirement(RequireCapabilityHeader.Clause clause, Resource resource) {
 		namespace = clause.getNamespace();
 		Directive filter = clause.getDirective(RequireCapabilityHeader.Clause.DIRECTIVE_FILTER);
-		// It is legal for requirements to have no filter directive, in which 
-		// case the requirement would match any capability from the same 
-		// namespace.
-		if (filter == null)
-			filter = new FilterDirective('(' + namespace + "=*)");
-		directives.put(DIRECTIVE_FILTER, filter.getValue());
+		if (filter != null)
+			directives.put(DIRECTIVE_FILTER, filter.getValue());
 		this.resource = resource;
 	}
 

Modified: aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/DependencyCalculator.java
URL: http://svn.apache.org/viewvc/aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/DependencyCalculator.java?rev=1367617&r1=1367616&r2=1367617&view=diff
==============================================================================
--- aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/DependencyCalculator.java (original)
+++ aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/DependencyCalculator.java Tue Jul 31 15:30:43 2012
@@ -132,8 +132,11 @@ public class DependencyCalculator {
 		}
 		
 		private void initializeAttributes() {
+			String filter = requirement.getDirectives().get(Constants.FILTER_DIRECTIVE);
+			if (filter == null)
+				return;
 			Pattern pattern = Pattern.compile("\\(([^(=]+)=([^)]+)\\)");
-			Matcher matcher = pattern.matcher(requirement.getDirectives().get(Constants.FILTER_DIRECTIVE));
+			Matcher matcher = pattern.matcher(filter);
 			while (matcher.find())
 				attributes.put(matcher.group(1), matcher.group(2));
 		}

Modified: aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/SubsystemResource.java
URL: http://svn.apache.org/viewvc/aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/SubsystemResource.java?rev=1367617&r1=1367616&r2=1367617&view=diff
==============================================================================
--- aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/SubsystemResource.java (original)
+++ aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/SubsystemResource.java Tue Jul 31 15:30:43 2012
@@ -702,7 +702,13 @@ public class SubsystemResource implement
 			RequireCapabilityRequirement requirement = new RequireCapabilityRequirement(clause, this);
 			String policy = requirement.getNamespace();
 			String filter = requirement.getDirectives().get(RequireCapabilityRequirement.DIRECTIVE_FILTER);
-			builder.allow(policy, filter);
+			if (filter == null)
+				// A null filter directive means the requirement matches any
+				// capability from the same namespace.
+				builder.allowAll(policy);
+			else
+				// Otherwise, the capabilities must be filtered accordingly.
+				builder.allow(policy, filter);
 		}
 	}
 	

Modified: aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/NoRequirementFilterTest.java
URL: http://svn.apache.org/viewvc/aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/NoRequirementFilterTest.java?rev=1367617&r1=1367616&r2=1367617&view=diff
==============================================================================
--- aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/NoRequirementFilterTest.java (original)
+++ aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/NoRequirementFilterTest.java Tue Jul 31 15:30:43 2012
@@ -26,6 +26,12 @@ import org.osgi.framework.Constants;
 import org.osgi.service.subsystem.Subsystem;
 import org.osgi.service.subsystem.SubsystemConstants;
 
+/*
+ * Generic requirements are not required to specify the filter directive, in
+ * which case it would match any capability from the same namespace.
+ * 
+ * Generic capabilities are not required to use the namespace as an attribute.
+ */
 @RunWith(JUnit4TestRunner.class)
 public class NoRequirementFilterTest extends SubsystemTest {
 	/*
@@ -40,7 +46,7 @@ public class NoRequirementFilterTest ext
 	private static final String BUNDLE_A = "bundle.a.jar";
 	/*
 	 * Bundle-SymbolicName: bundle.b.jar
-	 * Provide-Capability: y;y=foo
+	 * Provide-Capability: y
 	 */
 	private static final String BUNDLE_B = "bundle.b.jar";
 	
@@ -64,7 +70,7 @@ public class NoRequirementFilterTest ext
 	
 	private static void createBundleB() throws IOException {
 		Map<String, String> headers = new HashMap<String, String>();
-		headers.put(Constants.PROVIDE_CAPABILITY, "y;y=foo");
+		headers.put(Constants.PROVIDE_CAPABILITY, "y");
 		createBundle(BUNDLE_B, headers);
 	}
 	
@@ -85,7 +91,7 @@ public class NoRequirementFilterTest ext
 	}
 	
 	@Test
-	public void testRequireCapability() throws Exception {
+	public void testNoFilterDirectiveWithNoNamespaceAttribute() throws Exception {
 		Bundle bundleB = installBundleFromFile(BUNDLE_B);
 		try {
 			Subsystem subsystem = installSubsystemFromFile(APPLICATION_A);