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