You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by da...@apache.org on 2014/05/02 13:58:20 UTC

svn commit: r1591880 - in /felix/trunk/bundlerepository/src/main/java/org/apache/felix/bundlerepository/impl: FelixResourceAdapter.java OSGiRepositoryImpl.java SpecXMLPullParser.java

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