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


Reply via email to