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

svn commit: r926490 - in /felix/trunk/framework/src/main/java/org/apache/felix/framework/capabilityset: CapabilitySet.java SimpleFilter.java

Author: rickhall
Date: Tue Mar 23 08:04:44 2010
New Revision: 926490

URL: http://svn.apache.org/viewvc?rev=926490&view=rev
Log:
Add PRESENT operator to new filter impl. (FELIX-2039)

Modified:
    felix/trunk/framework/src/main/java/org/apache/felix/framework/capabilityset/CapabilitySet.java
    felix/trunk/framework/src/main/java/org/apache/felix/framework/capabilityset/SimpleFilter.java

Modified: felix/trunk/framework/src/main/java/org/apache/felix/framework/capabilityset/CapabilitySet.java
URL: http://svn.apache.org/viewvc/felix/trunk/framework/src/main/java/org/apache/felix/framework/capabilityset/CapabilitySet.java?rev=926490&r1=926489&r2=926490&view=diff
==============================================================================
--- felix/trunk/framework/src/main/java/org/apache/felix/framework/capabilityset/CapabilitySet.java (original)
+++ felix/trunk/framework/src/main/java/org/apache/felix/framework/capabilityset/CapabilitySet.java Tue Mar 23 08:04:44 2010
@@ -331,6 +331,13 @@ public class CapabilitySet
 
     private static boolean compare(Object lhs, Object rhsUnknown, int op)
     {
+        // If this is a PRESENT operation, then just return true immediately
+        // since we wouldn't be here if the attribute wasn't present.
+        if (op == SimpleFilter.PRESENT)
+        {
+            return true;
+        }
+
         // If the type is comparable, then we can just return the
         // result immediately.
         if (lhs instanceof Comparable)

Modified: felix/trunk/framework/src/main/java/org/apache/felix/framework/capabilityset/SimpleFilter.java
URL: http://svn.apache.org/viewvc/felix/trunk/framework/src/main/java/org/apache/felix/framework/capabilityset/SimpleFilter.java?rev=926490&r1=926489&r2=926490&view=diff
==============================================================================
--- felix/trunk/framework/src/main/java/org/apache/felix/framework/capabilityset/SimpleFilter.java (original)
+++ felix/trunk/framework/src/main/java/org/apache/felix/framework/capabilityset/SimpleFilter.java Tue Mar 23 08:04:44 2010
@@ -32,6 +32,7 @@ public class SimpleFilter
 // TODO: FELIX3 - Should we handle substring as a separate operator or as a
 //       special case of string equality comparison?
     public static final int SUBSTRING = 7;
+    public static final int PRESENT = 8;
 
     private final String m_name;
     private final Object m_value;
@@ -85,6 +86,9 @@ public class SimpleFilter
             case SUBSTRING:
                 s = "(" + m_name + "=" + unparseSubstring((List<String>) m_value) + ")";
                 break;
+            case PRESENT:
+                s = "(" + m_name + "=*)";
+                break;
         }
         return s;
     }
@@ -329,11 +333,17 @@ public class SimpleFilter
         Object value = sb.toString();
 
         // Check if the equality comparison is actually a substring
-        // comparison.
+        // or present operation.
         if (op == EQ)
         {
             List<String> values = parseSubstring((String) value);
-            if (values.size() > 1)
+            if ((values.size() == 2)
+                && (values.get(0).length() == 0)
+                && (values.get(1).length() == 0))
+            {
+                op = PRESENT;
+            }
+            else if (values.size() > 1)
             {
                 op = SUBSTRING;
                 value = values;