Author: jwross
Date: Wed Sep 26 18:43:11 2012
New Revision: 1390654

URL: http://svn.apache.org/viewvc?rev=1390654&view=rev
Log:
Fixed issue where optional Require-Bundle and Require-Capability requirements 
were being treated as mandatory.

Modified:
    
aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/archive/RequireBundleRequirement.java
    
aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/archive/RequireCapabilityRequirement.java
    
aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/OptionalDependenciesTest.java

Modified: 
aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/archive/RequireBundleRequirement.java
URL: 
http://svn.apache.org/viewvc/aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/archive/RequireBundleRequirement.java?rev=1390654&r1=1390653&r2=1390654&view=diff
==============================================================================
--- 
aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/archive/RequireBundleRequirement.java
 (original)
+++ 
aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/archive/RequireBundleRequirement.java
 Wed Sep 26 18:43:11 2012
@@ -25,11 +25,14 @@ public class RequireBundleRequirement ex
        public static final String DIRECTIVE_FILTER = 
BundleNamespace.REQUIREMENT_FILTER_DIRECTIVE;
        public static final String NAMESPACE = BundleNamespace.BUNDLE_NAMESPACE;
        
-       private final Map<String, String> directives = new HashMap<String, 
String>(1);
+       private final Map<String, String> directives;
        private final Resource resource;
        
        public RequireBundleRequirement(
                        RequireBundleHeader.Clause clause, Resource resource) {
+               directives = new HashMap<String, 
String>(clause.getDirectives().size() + 1);
+               for (Directive directive : clause.getDirectives())
+                       directives.put(directive.getName(), 
directive.getValue());
                StringBuilder builder = new StringBuilder("(&(")
                                .append(NAMESPACE).append('=')
                                .append(clause.getSymbolicName()).append(')');

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=1390654&r1=1390653&r2=1390654&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
 Wed Sep 26 18:43:11 2012
@@ -24,15 +24,15 @@ import org.osgi.resource.Resource;
 public class RequireCapabilityRequirement extends AbstractRequirement {
        public static final String DIRECTIVE_FILTER = 
Namespace.REQUIREMENT_FILTER_DIRECTIVE;
        
-       private final Map<String, String> directives = new HashMap<String, 
String>(1);
+       private final Map<String, String> directives;
        private final String namespace;
        private final Resource resource;
        
        public RequireCapabilityRequirement(RequireCapabilityHeader.Clause 
clause, Resource resource) {
                namespace = clause.getNamespace();
-               Directive filter = 
clause.getDirective(RequireCapabilityHeader.Clause.DIRECTIVE_FILTER);
-               if (filter != null)
-                       directives.put(DIRECTIVE_FILTER, filter.getValue());
+               directives = new HashMap<String, 
String>(clause.getDirectives().size());
+               for (Directive directive : clause.getDirectives())
+                       directives.put(directive.getName(), 
directive.getValue());
                this.resource = resource;
        }
 

Modified: 
aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/OptionalDependenciesTest.java
URL: 
http://svn.apache.org/viewvc/aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/OptionalDependenciesTest.java?rev=1390654&r1=1390653&r2=1390654&view=diff
==============================================================================
--- 
aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/OptionalDependenciesTest.java
 (original)
+++ 
aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/OptionalDependenciesTest.java
 Wed Sep 26 18:43:11 2012
@@ -13,6 +13,8 @@
  */
 package org.apache.aries.subsystem.itests;
 
+import static org.junit.Assert.fail;
+
 import java.io.IOException;
 import java.util.HashMap;
 import java.util.Map;
@@ -35,6 +37,8 @@ public class OptionalDependenciesTest ex
        /*
         * Bundle-SymbolicName: bundle.a.jar
         * Import-Package: x;resolution:=optional
+        * Require-Bundle: x;resolution:=optional
+        * Require-Capability: x;resolution:=optional
         */
        private static final String BUNDLE_A = "bundle.a.jar";
        
@@ -53,6 +57,8 @@ public class OptionalDependenciesTest ex
        private static void createBundleA() throws IOException {
                Map<String, String> headers = new HashMap<String, String>();
                headers.put(Constants.IMPORT_PACKAGE, "x;resolution:=optional");
+               headers.put(Constants.REQUIRE_BUNDLE, "x;resolution:=optional");
+               headers.put(Constants.REQUIRE_CAPABILITY, 
"x;resolution:=optional");
                createBundle(BUNDLE_A, headers);
        }
        
@@ -66,20 +72,26 @@ public class OptionalDependenciesTest ex
                createdTestFiles = true;
        }
        
-       public void setUp() throws Exception {
-               super.setUp();
-               registerRepositoryService(BUNDLE_A);
-       }
-       
        @Test
        public void testOptionalImportPackage() throws Exception {
-               Subsystem subsystem = installSubsystemFromFile(APPLICATION_A);
                try {
-                       startSubsystem(subsystem);
-                       stopSubsystem(subsystem);
+                       Subsystem subsystem = 
installSubsystemFromFile(APPLICATION_A);
+                       try {
+                               try {
+                                       startSubsystem(subsystem);
+                               }
+                               catch (Exception e) {
+                                       e.printStackTrace();
+                                       fail("Missing optional requirements 
must not cause subsystem start failure");
+                               }
+                       }
+                       finally {
+                               stopAndUninstallSubsystemSilently(subsystem);
+                       }
                }
-               finally {
-                       uninstallSubsystemSilently(subsystem);
+               catch (Exception e) {
+                       e.printStackTrace();
+                       fail("Missing optional requirements must not cause 
subsystem installation failure");
                }
        }
 }


Reply via email to