Author: davidb
Date: Fri May  2 11:58:20 2014
New Revision: 1591880

URL: http://svn.apache.org/r1591880
Log:
[FELIX-4371] Last Repository 1.0 failure fixed.

These code changes make the Felix Repository pass all the CT tests.


Modified:
    
felix/trunk/bundlerepository/src/main/java/org/apache/felix/bundlerepository/impl/FelixResourceAdapter.java
    
felix/trunk/bundlerepository/src/main/java/org/apache/felix/bundlerepository/impl/OSGiRepositoryImpl.java
    
felix/trunk/bundlerepository/src/main/java/org/apache/felix/bundlerepository/impl/SpecXMLPullParser.java

Modified: 
felix/trunk/bundlerepository/src/main/java/org/apache/felix/bundlerepository/impl/FelixResourceAdapter.java
URL: 
http://svn.apache.org/viewvc/felix/trunk/bundlerepository/src/main/java/org/apache/felix/bundlerepository/impl/FelixResourceAdapter.java?rev=1591880&r1=1591879&r2=1591880&view=diff
==============================================================================
--- 
felix/trunk/bundlerepository/src/main/java/org/apache/felix/bundlerepository/impl/FelixResourceAdapter.java
 (original)
+++ 
felix/trunk/bundlerepository/src/main/java/org/apache/felix/bundlerepository/impl/FelixResourceAdapter.java
 Fri May  2 11:58:20 2014
@@ -47,7 +47,7 @@ public class FelixResourceAdapter implem
         }
         if (namespace == null || 
namespace.equals(ContentNamespace.CONTENT_NAMESPACE))
         {
-            OSGiCapabilityImpl c = 
OSGiRepositoryImpl.newOSGiContentCapability(resource.getURI(), 
resource.getSize());
+            OSGiCapabilityImpl c = 
OSGiRepositoryImpl.newOSGiContentCapability(resource);
             c.setResource(this);
             result.add(c);
         }

Modified: 
felix/trunk/bundlerepository/src/main/java/org/apache/felix/bundlerepository/impl/OSGiRepositoryImpl.java
URL: 
http://svn.apache.org/viewvc/felix/trunk/bundlerepository/src/main/java/org/apache/felix/bundlerepository/impl/OSGiRepositoryImpl.java?rev=1591880&r1=1591879&r2=1591880&view=diff
==============================================================================
--- 
felix/trunk/bundlerepository/src/main/java/org/apache/felix/bundlerepository/impl/OSGiRepositoryImpl.java
 (original)
+++ 
felix/trunk/bundlerepository/src/main/java/org/apache/felix/bundlerepository/impl/OSGiRepositoryImpl.java
 Fri May  2 11:58:20 2014
@@ -33,6 +33,7 @@ import java.util.Map;
 import java.util.concurrent.Callable;
 
 import org.apache.felix.bundlerepository.RepositoryAdmin;
+import org.apache.felix.bundlerepository.Resource;
 import org.apache.felix.bundlerepository.impl.LazyHashMap.LazyValue;
 import org.osgi.framework.Filter;
 import org.osgi.framework.FrameworkUtil;
@@ -132,8 +133,9 @@ class OSGiRepositoryImpl implements Repo
         return new OSGiCapabilityImpl(IdentityNamespace.IDENTITY_NAMESPACE, 
idAttrs, Collections.<String, String> emptyMap());
     }
 
-    static OSGiCapabilityImpl newOSGiContentCapability(final String uri, long 
size)
+    static OSGiCapabilityImpl newOSGiContentCapability(Resource resource)
     {
+        final String uri = resource.getURI();
         LazyValue<String, Object> lazyValue =
             new LazyValue<String, Object>(ContentNamespace.CONTENT_NAMESPACE, 
new Callable<Object>()
             {
@@ -143,9 +145,14 @@ class OSGiRepositoryImpl implements Repo
                     return OSGiRepositoryImpl.getSHA256(uri);
                 }
             });
+
+        Object mime = resource.getProperties().get("mime");
+        if (mime == null)
+            mime = "application/vnd.osgi.bundle";
+
         Map<String, Object> contentAttrs = new LazyHashMap<String, 
Object>(Collections.singleton(lazyValue));
-        contentAttrs.put(ContentNamespace.CAPABILITY_MIME_ATTRIBUTE, 
"application/vnd.osgi.bundle"); // TODO support other types
-        contentAttrs.put(ContentNamespace.CAPABILITY_SIZE_ATTRIBUTE, size);
+        contentAttrs.put(ContentNamespace.CAPABILITY_MIME_ATTRIBUTE, mime);
+        contentAttrs.put(ContentNamespace.CAPABILITY_SIZE_ATTRIBUTE, 
resource.getSize());
         contentAttrs.put(ContentNamespace.CAPABILITY_URL_ATTRIBUTE, uri);
         return new OSGiCapabilityImpl(ContentNamespace.CONTENT_NAMESPACE, 
contentAttrs, Collections.<String, String> emptyMap());
     }

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=1591880&r1=1591879&r2=1591880&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 May  2 11:58:20 2014
@@ -129,8 +129,14 @@ public class SpecXMLPullParser
         }
         if (ContentNamespace.CONTENT_NAMESPACE.equals(namespace))
         {
-            parseContentNamespace(reader, resource);
-            return null;
+            if (resource.getURI() == null)
+            {
+                parseContentNamespace(reader, resource);
+                return null;
+            }
+            // if the URI is already set, this is a second osgi.content 
capability.
+            // The first content capability, which is the main one, is stored 
in the Resource.
+            // Subsequent content capabilities are stored are ordinary 
capabilities.
         }
 
         CapabilityImpl capability = new CapabilityImpl();


Reply via email to