You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by gn...@apache.org on 2010/03/02 16:00:09 UTC

svn commit: r918062 - in /felix/trunk/bundlerepository/src: main/java/org/apache/felix/bundlerepository/impl/ test/java/org/apache/felix/bundlerepository/impl/ test/resources/

Author: gnodet
Date: Tue Mar  2 15:00:08 2010
New Revision: 918062

URL: http://svn.apache.org/viewvc?rev=918062&view=rev
Log:
FELIX-1531: Mandatory directive is ignored on the Export-Package when it comes to resolve the bundles

Added:
    felix/trunk/bundlerepository/src/test/resources/repo_for_mandatory.xml
Modified:
    felix/trunk/bundlerepository/src/main/java/org/apache/felix/bundlerepository/impl/FilterImpl.java
    felix/trunk/bundlerepository/src/main/java/org/apache/felix/bundlerepository/impl/RequirementImpl.java
    felix/trunk/bundlerepository/src/test/java/org/apache/felix/bundlerepository/impl/FilterImplTest.java
    felix/trunk/bundlerepository/src/test/java/org/apache/felix/bundlerepository/impl/RepositoryAdminTest.java
    felix/trunk/bundlerepository/src/test/java/org/apache/felix/bundlerepository/impl/ResolverImplTest.java

Modified: felix/trunk/bundlerepository/src/main/java/org/apache/felix/bundlerepository/impl/FilterImpl.java
URL: http://svn.apache.org/viewvc/felix/trunk/bundlerepository/src/main/java/org/apache/felix/bundlerepository/impl/FilterImpl.java?rev=918062&r1=918061&r2=918062&view=diff
==============================================================================
--- felix/trunk/bundlerepository/src/main/java/org/apache/felix/bundlerepository/impl/FilterImpl.java (original)
+++ felix/trunk/bundlerepository/src/main/java/org/apache/felix/bundlerepository/impl/FilterImpl.java Tue Mar  2 15:00:08 2010
@@ -301,14 +301,14 @@
             }
             case SUBSET : {
                 sb.append(attr);
-                sb.append(":<*");
+                sb.append("<*");
                 sb.append(encodeValue(approxString((String) value)));
 
                 break;
             }
             case SUPERSET : {
                 sb.append(attr);
-                sb.append(":*>");
+                sb.append("*>");
                 sb.append(encodeValue(approxString((String) value)));
 
                 break;
@@ -1294,17 +1294,13 @@
             skipWhiteSpace();
 
             switch (filterChars[pos]) {
-                case ':': {
-                    if (filterChars[pos + 1] == '<' && filterChars[pos + 2] == '*') {
-                        pos += 3;
-                        return new FilterImpl(FilterImpl.SUBSET, attr,
-                                parse_value());
-                    }
-                    if (filterChars[pos + 1] == '*' && filterChars[pos + 2] == '>') {
-                        pos += 3;
+                case '*': {
+                    if (filterChars[pos + 1] == '>') {
+                        pos += 2;
                         return new FilterImpl(FilterImpl.SUPERSET, attr,
                                 parse_value());
                     }
+                    break;
                 }
                 case '~' : {
                     if (filterChars[pos + 1] == '=') {
@@ -1328,6 +1324,11 @@
                         return new FilterImpl(FilterImpl.LESS, attr,
                                 parse_value());
                     }
+                    if (filterChars[pos + 1] == '*') {
+                        pos += 2;
+                        return new FilterImpl(FilterImpl.SUBSET, attr,
+                                parse_value());
+                    }
                     break;
                 }
                 case '=' : {
@@ -1369,10 +1370,10 @@
             while (c != '~' && c != '<' && c != '>' && c != '=' && c != '('
                     && c != ')') {
 
-                if (c == ':' && filterChars[pos+1] == '<' && filterChars[pos+2] == '*') {
+                if (c == '<' && filterChars[pos+1] == '*') {
                     break;
                 }
-                if (c == ':' && filterChars[pos+1] == '*' && filterChars[pos+2] == '>') {
+                if (c == '*' && filterChars[pos+1] == '>') {
                     break;
                 }
                 pos++;

Modified: felix/trunk/bundlerepository/src/main/java/org/apache/felix/bundlerepository/impl/RequirementImpl.java
URL: http://svn.apache.org/viewvc/felix/trunk/bundlerepository/src/main/java/org/apache/felix/bundlerepository/impl/RequirementImpl.java?rev=918062&r1=918061&r2=918062&view=diff
==============================================================================
--- felix/trunk/bundlerepository/src/main/java/org/apache/felix/bundlerepository/impl/RequirementImpl.java (original)
+++ felix/trunk/bundlerepository/src/main/java/org/apache/felix/bundlerepository/impl/RequirementImpl.java Tue Mar  2 15:00:08 2010
@@ -59,7 +59,8 @@
 
     public synchronized boolean isSatisfied(Capability capability)
     {
-        return m_name.equals(capability.getName()) && m_filter.matchCase(capability.getProperties());
+        return m_name.equals(capability.getName()) && m_filter.matchCase(capability.getProperties())
+                && (m_filter.toString().indexOf("(mandatory:<*") >= 0 || capability.getProperties().get("mandatory:") == null);
     }
 
     public synchronized boolean isExtend()

Modified: felix/trunk/bundlerepository/src/test/java/org/apache/felix/bundlerepository/impl/FilterImplTest.java
URL: http://svn.apache.org/viewvc/felix/trunk/bundlerepository/src/test/java/org/apache/felix/bundlerepository/impl/FilterImplTest.java?rev=918062&r1=918061&r2=918062&view=diff
==============================================================================
--- felix/trunk/bundlerepository/src/test/java/org/apache/felix/bundlerepository/impl/FilterImplTest.java (original)
+++ felix/trunk/bundlerepository/src/test/java/org/apache/felix/bundlerepository/impl/FilterImplTest.java Tue Mar  2 15:00:08 2010
@@ -56,14 +56,14 @@
         assertFalse(filterImpl.match(dict));
 
         dict = new Hashtable();
-        dict.put("mandatory", "common");
+        dict.put("mandatory:", "common");
         dict.put("package", "org.eclipse.core.runtime");
         dict.put("version", new Version("0.0.0"));
         dict.put("common", "split");
         assertTrue(filterImpl.match(dict));
 
         dict = new Hashtable();
-        dict.put("mandatory", "common,test");
+        dict.put("mandatory:", "common,test");
         dict.put("package", "org.eclipse.core.runtime");
         dict.put("version", new Version("0.0.0"));
         dict.put("common", "split");
@@ -78,14 +78,14 @@
         filterImpl = FilterImpl.newInstance(
             "(&(package=org.eclipse.core.runtime)(version>=0.0.0)(common=split)(mandatory:*>common))");
         dict = new Hashtable();
-        dict.put("mandatory", "common");
+        dict.put("mandatory:", "common");
         dict.put("package", "org.eclipse.core.runtime");
         dict.put("version", new Version("0.0.0"));
         dict.put("common", "split");
         assertTrue(filterImpl.match(dict));
 
         dict = new Hashtable();
-        dict.put("mandatory", "common,test");
+        dict.put("mandatory:", "common,test");
         dict.put("package", "org.eclipse.core.runtime");
         dict.put("version", new Version("0.0.0"));
         dict.put("common", "split");
@@ -94,14 +94,14 @@
         filterImpl = FilterImpl.newInstance(
             "(&(package=org.eclipse.core.runtime)(version>=0.0.0)(common=split)(mandatory:*>common,test))");
         dict = new Hashtable();
-        dict.put("mandatory", "common");
+        dict.put("mandatory:", "common");
         dict.put("package", "org.eclipse.core.runtime");
         dict.put("version", new Version("0.0.0"));
         dict.put("common", "split");
         assertFalse(filterImpl.match(dict));
 
         dict = new Hashtable();
-        dict.put("mandatory", "common,test");
+        dict.put("mandatory:", "common,test");
         dict.put("package", "org.eclipse.core.runtime");
         dict.put("version", new Version("0.0.0"));
         dict.put("common", "split");

Modified: felix/trunk/bundlerepository/src/test/java/org/apache/felix/bundlerepository/impl/RepositoryAdminTest.java
URL: http://svn.apache.org/viewvc/felix/trunk/bundlerepository/src/test/java/org/apache/felix/bundlerepository/impl/RepositoryAdminTest.java?rev=918062&r1=918061&r2=918062&view=diff
==============================================================================
--- felix/trunk/bundlerepository/src/test/java/org/apache/felix/bundlerepository/impl/RepositoryAdminTest.java (original)
+++ felix/trunk/bundlerepository/src/test/java/org/apache/felix/bundlerepository/impl/RepositoryAdminTest.java Tue Mar  2 15:00:08 2010
@@ -41,11 +41,11 @@
         RepositoryAdminImpl repoAdmin = createRepositoryAdmin();
         RepositoryImpl repo = (RepositoryImpl) repoAdmin.addRepository(url);
 
-        Resource[] resources = repoAdmin.discoverResources("(category:<*dummy)");
+        Resource[] resources = repoAdmin.discoverResources("(category<*dummy)");
         assertNotNull(resources);
         assertEquals(1, resources.length);
 
-        resources = repoAdmin.discoverResources("(category:*>dummy)");
+        resources = repoAdmin.discoverResources("(category*>dummy)");
         assertNotNull(resources);
         assertEquals(1, resources.length);
     }

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=918062&r1=918061&r2=918062&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 Tue Mar  2 15:00:08 2010
@@ -110,6 +110,25 @@
         assertEquals(2, resolver.getOptionalResources().length);
     }
 
+    public void testMandatoryPackages() throws Exception
+    {
+        RepositoryAdminImpl repoAdmin = createRepositoryAdmin();
+        repoAdmin.addRepository(getClass().getResource("/repo_for_mandatory.xml"));
+
+        Resolver resolver = repoAdmin.resolver();
+        resolver.add(repoAdmin.requirement("bundle", "(symbolicname=res2)"));
+        assertFalse(resolver.resolve());
+
+        resolver = repoAdmin.resolver();
+        resolver.add(repoAdmin.requirement("bundle", "(symbolicname=res3)"));
+        assertTrue(resolver.resolve());
+
+        resolver = repoAdmin.resolver();
+        resolver.add(repoAdmin.requirement("bundle", "(symbolicname=res4)"));
+        assertFalse(resolver.resolve());
+
+    }
+
     public static void main(String[] args) throws Exception
     {
         new ResolverImplTest().testReferral1();

Added: felix/trunk/bundlerepository/src/test/resources/repo_for_mandatory.xml
URL: http://svn.apache.org/viewvc/felix/trunk/bundlerepository/src/test/resources/repo_for_mandatory.xml?rev=918062&view=auto
==============================================================================
--- felix/trunk/bundlerepository/src/test/resources/repo_for_mandatory.xml (added)
+++ felix/trunk/bundlerepository/src/test/resources/repo_for_mandatory.xml Tue Mar  2 15:00:08 2010
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<repository lastmodified="2010" name="repo_for_optional_resources">
+
+    <resource id="res1">
+        <capability name="bundle">
+            <p n="symbolicname" v="res1" />
+        </capability>
+        <capability name="package">
+            <p n="package" v="javax.transaction" />
+            <p n="partial" v="true" />
+            <p n="mandatory:" v="partial" />
+        </capability>
+    </resource>
+
+    <resource id="res2">
+        <capability name="bundle">
+            <p n="symbolicname" v="res2" />
+        </capability>
+        <require filter="(package=javax.transaction)" name="package" optional="false" />
+    </resource>
+
+    <resource id="res3">
+        <capability name="bundle">
+            <p n="symbolicname" v="res3" />
+        </capability>
+        <require filter="(&amp;(package=javax.transaction)(partial=true)(mandatory:&lt;*partial))" name="package" optional="false" />
+    </resource>
+
+    <resource id="res4">
+        <capability name="bundle">
+            <p n="symbolicname" v="res4" />
+        </capability>
+        <require filter="(&amp;(package=a.b.c)(company=foo)(mandatory:&lt;*company))" name="package" optional="false" />
+    </resource>
+
+    <resource id="res5">
+        <capability name="bundle">
+            <p n="symbolicname" v="res5" />
+        </capability>
+        <capability name='package'>
+            <p n='company' v='foo'/>
+            <p n='mandatory:' t='set' v='company,security'/>
+            <p n='package' v='a.b.c'/>
+            <p n='security' v='true'/>
+            <p n='version' t='version' v='3.0.0'/>
+        </capability> 
+    </resource>
+
+</repository>