Author: davidb
Date: Fri Apr  1 14:15:05 2016
New Revision: 1737394

URL: http://svn.apache.org/viewvc?rev=1737394&view=rev
Log:
FELIX-5229 BundleNamespace on Req/Cap is not translated correctly

Patch applied on behalf of PK Søreide with many thanks.
This closes #61

Modified:
    
felix/trunk/bundlerepository/src/main/java/org/apache/felix/bundlerepository/impl/SpecXMLPullParser.java
    
felix/trunk/bundlerepository/src/test/java/org/apache/felix/bundlerepository/impl/ResolverImplTest.java
    felix/trunk/bundlerepository/src/test/resources/spec_repository.gz
    felix/trunk/bundlerepository/src/test/resources/spec_repository.xml

Modified: 
felix/trunk/bundlerepository/src/main/java/org/apache/felix/bundlerepository/impl/SpecXMLPullParser.java
URL: 
http://svn.apache.org/viewvc/felix/trunk/bundlerepository/src/main/java/org/apache/felix/bundlerepository/impl/SpecXMLPullParser.java?rev=1737394&r1=1737393&r2=1737394&view=diff
==============================================================================
--- 
felix/trunk/bundlerepository/src/main/java/org/apache/felix/bundlerepository/impl/SpecXMLPullParser.java
 (original)
+++ 
felix/trunk/bundlerepository/src/main/java/org/apache/felix/bundlerepository/impl/SpecXMLPullParser.java
 Fri Apr  1 14:15:05 2016
@@ -28,6 +28,7 @@ import org.apache.felix.bundlerepository
 import org.apache.felix.bundlerepository.Requirement;
 import org.apache.felix.bundlerepository.Resource;
 import org.osgi.framework.Version;
+import org.osgi.framework.namespace.BundleNamespace;
 import org.osgi.framework.namespace.IdentityNamespace;
 import org.osgi.resource.Namespace;
 import org.osgi.service.repository.ContentNamespace;
@@ -152,6 +153,16 @@ public class SpecXMLPullParser
 
         for (Map.Entry<String, Object> entry : attributes.entrySet())
         {
+            if (BundleNamespace.BUNDLE_NAMESPACE.equals(namespace) && 
BundleNamespace.BUNDLE_NAMESPACE.equals(entry.getKey()))
+            {
+                capability.addProperty(new 
FelixPropertyAdapter(Resource.SYMBOLIC_NAME, entry.getValue()));
+                continue;
+            }
+            if (BundleNamespace.BUNDLE_NAMESPACE.equals(namespace) && 
BundleNamespace.CAPABILITY_BUNDLE_VERSION_ATTRIBUTE.equals(entry.getKey()))
+            {
+               capability.addProperty(new 
FelixPropertyAdapter(Resource.VERSION, entry.getValue()));
+               continue;
+            }
             capability.addProperty(new 
FelixPropertyAdapter(NamespaceTranslator.getFelixNamespace(entry.getKey()), 
entry.getValue()));
         }
         for (Map.Entry<String, String> entry : directives.entrySet())
@@ -338,8 +349,14 @@ public class SpecXMLPullParser
         String filter = 
directives.remove(Namespace.REQUIREMENT_FILTER_DIRECTIVE);
         for (String ns : NamespaceTranslator.getTranslatedOSGiNamespaces())
         {
-            filter = filter.replaceAll("[(][ ]*" + ns + "[ ]*=",
-                    "(" + NamespaceTranslator.getFelixNamespace(ns) + "=");
+               if (BundleNamespace.BUNDLE_NAMESPACE.equals(namespace) && 
BundleNamespace.BUNDLE_NAMESPACE.equals(ns)) 
+               {
+                       filter = filter.replaceAll("[(][ ]*" + ns + "[ ]*=",
+                    "(" + Resource.SYMBOLIC_NAME + "=");
+               }
+               else
+               filter = filter.replaceAll("[(][ ]*" + ns + "[ ]*=",
+                        "(" + NamespaceTranslator.getFelixNamespace(ns) + "=");
         }
         requirement.setFilter(filter);
         requirement.setMultiple(Namespace.CARDINALITY_MULTIPLE.equals(

Modified: 
felix/trunk/bundlerepository/src/test/java/org/apache/felix/bundlerepository/impl/ResolverImplTest.java
URL: 
http://svn.apache.org/viewvc/felix/trunk/bundlerepository/src/test/java/org/apache/felix/bundlerepository/impl/ResolverImplTest.java?rev=1737394&r1=1737393&r2=1737394&view=diff
==============================================================================
--- 
felix/trunk/bundlerepository/src/test/java/org/apache/felix/bundlerepository/impl/ResolverImplTest.java
 (original)
+++ 
felix/trunk/bundlerepository/src/test/java/org/apache/felix/bundlerepository/impl/ResolverImplTest.java
 Fri Apr  1 14:15:05 2016
@@ -117,6 +117,23 @@ public class ResolverImplTest extends Te
         assertTrue("Resolver could not resolve", resolver.resolve());
     }
 
+    public void testSpecBundleNamespace() throws Exception
+    {
+        URL url = getClass().getResource("/spec_repository.xml");
+        RepositoryAdminImpl repoAdmin = createRepositoryAdmin();
+        RepositoryImpl repo = (RepositoryImpl) repoAdmin.addRepository(url);
+
+        Resolver resolver = repoAdmin.resolver();
+
+        Resource[] discoverResources = 
repoAdmin.discoverResources("(symbolicname=org.apache.felix.bundlerepository.test_file_6*)");
+        assertNotNull(discoverResources);
+        assertEquals(1, discoverResources.length);
+
+        resolver.add(discoverResources[0]);
+        assertTrue(resolver.resolve());
+        
+    }
+
     public void testMatchingReq() throws Exception
     {
         RepositoryAdminImpl repoAdmin = createRepositoryAdmin();

Modified: felix/trunk/bundlerepository/src/test/resources/spec_repository.gz
URL: 
http://svn.apache.org/viewvc/felix/trunk/bundlerepository/src/test/resources/spec_repository.gz?rev=1737394&r1=1737393&r2=1737394&view=diff
==============================================================================
Binary files - no diff available.

Modified: felix/trunk/bundlerepository/src/test/resources/spec_repository.xml
URL: 
http://svn.apache.org/viewvc/felix/trunk/bundlerepository/src/test/resources/spec_repository.xml?rev=1737394&r1=1737393&r2=1737394&view=diff
==============================================================================
--- felix/trunk/bundlerepository/src/test/resources/spec_repository.xml 
(original)
+++ felix/trunk/bundlerepository/src/test/resources/spec_repository.xml Fri Apr 
 1 14:15:05 2016
@@ -65,6 +65,45 @@
             <directive name="effective" value="active"/>
         </requirement>
     </resource>
+    <resource>
+        <capability namespace='osgi.identity'>
+            <attribute name='osgi.identity' 
value='org.apache.felix.bundlerepository.test_file_6'/>
+            <attribute name='type' value='osgi.bundle'/>
+            <attribute name='version' type='Version' value='2.2.3.something'/>
+            <attribute name='license' 
value='http://www.opensource.org/licenses/mytestlicense2' />
+        </capability>
+        <capability namespace='osgi.content'>
+            <attribute name='osgi.content' 
value='a1c64578808c38a63cd6563e9936f025638aeaf9de70f36765367db81c0afc38'/>
+            <attribute name='url' value='repo_files/test_file_6.jar'/>
+            <attribute name='size' type='Long' value='3'/>
+            <attribute name='mime' value='application/vnd.osgi.bundle'/>
+        </capability>
+        <capability namespace='osgi.wiring.bundle'>
+            <attribute name='osgi.wiring.bundle' 
value='org.apache.felix.bundlerepository.test_file_6'/>
+            <attribute name='bundle-version' type='Version' 
value='2.2.3.something'/>
+        </capability>
+        <requirement namespace="osgi.wiring.bundle">
+            <directive name="filter" 
value="(&amp;(osgi.wiring.bundle=org.apache.felix.bundlerepository.test_file_7)(version&gt;=3.3.0)(!(version&gt;=4.0.0)))"/>
+        </requirement>
+    </resource>
+    <resource>
+        <capability namespace='osgi.identity'>
+            <attribute name='osgi.identity' 
value='org.apache.felix.bundlerepository.test_file_7'/>
+            <attribute name='type' value='osgi.bundle'/>
+            <attribute name='version' type='Version' value='3.3.4.something'/>
+            <attribute name='license' 
value='http://www.opensource.org/licenses/mytestlicense2' />
+        </capability>
+        <capability namespace='osgi.content'>
+            <attribute name='osgi.content' 
value='a1c64578808c38a63cd6563e9936f025638aeaf9de70f36765367db81c0afc38'/>
+            <attribute name='url' value='repo_files/test_file_7.jar'/>
+            <attribute name='size' type='Long' value='3'/>
+            <attribute name='mime' value='application/vnd.osgi.bundle'/>
+        </capability>
+        <capability namespace='osgi.wiring.bundle'>
+            <attribute name='osgi.wiring.bundle' 
value='org.apache.felix.bundlerepository.test_file_7'/>
+            <attribute name='bundle-version' type='Version' 
value='3.3.4.something'/>
+        </capability>
+    </resource>
   <resource>
     <capability namespace='osgi.identity'>
       <attribute name='osgi.identity' value='org.apache.sshd.core'/>


Reply via email to