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 2011/07/20 20:43:50 UTC

svn commit: r1148886 - in /felix/trunk/framework/src/main/java/org/apache/felix/framework: capabilityset/SimpleFilter.java util/manifestparser/ManifestParser.java wiring/BundleRequirementImpl.java

Author: rickhall
Date: Wed Jul 20 18:43:49 2011
New Revision: 1148886

URL: http://svn.apache.org/viewvc?rev=1148886&view=rev
Log:
Move utility method for creating SimpleFilters from BundleRequirementImpl
to SimpleFilter. (FELIX-2950)

Modified:
    felix/trunk/framework/src/main/java/org/apache/felix/framework/capabilityset/SimpleFilter.java
    felix/trunk/framework/src/main/java/org/apache/felix/framework/util/manifestparser/ManifestParser.java
    felix/trunk/framework/src/main/java/org/apache/felix/framework/wiring/BundleRequirementImpl.java

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=1148886&r1=1148885&r2=1148886&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 Wed Jul 20 18:43:49 2011
@@ -20,6 +20,9 @@ package org.apache.felix.framework.capab
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import org.apache.felix.framework.util.VersionRange;
 
 public class SimpleFilter
 {
@@ -545,4 +548,109 @@ loop:   for (int i = 0; i < len; i++)
         }
         return startIdx;
     }
+
+    /**
+     * Converts a attribute map to a filter. The filter is created by iterating
+     * over the map's entry set. If ordering of attributes is important (e.g.,
+     * for hitting attribute indices), then the map's entry set should iterate
+     * in the desired order. Equality testing is assumed for all attribute types
+     * other than version ranges, which are handled appropriated. If the attribute
+     * map is empty, then a filter that matches anything is returned.
+     * @param attrs Map of attributes to convert to a filter.
+     * @return A filter corresponding to the attributes.
+     */
+    public static SimpleFilter convert(Map<String, Object> attrs)
+    {
+        // Rather than building a filter string to be parsed into a SimpleFilter,
+        // we will just create the parsed SimpleFilter directly.
+
+        List<SimpleFilter> filters = new ArrayList<SimpleFilter>();
+
+        for (Entry<String, Object> entry : attrs.entrySet())
+        {
+            if (entry.getValue() instanceof VersionRange)
+            {
+                VersionRange vr = (VersionRange) entry.getValue();
+                if (vr.isFloorInclusive())
+                {
+                    filters.add(
+                        new SimpleFilter(
+                            entry.getKey(),
+                            vr.getFloor().toString(),
+                            SimpleFilter.GTE));
+                }
+                else
+                {
+                    SimpleFilter not =
+                        new SimpleFilter(null, new ArrayList(), SimpleFilter.NOT);
+                    ((List) not.getValue()).add(
+                        new SimpleFilter(
+                            entry.getKey(),
+                            vr.getFloor().toString(),
+                            SimpleFilter.LTE));
+                    filters.add(not);
+                }
+
+                if (vr.getCeiling() != null)
+                {
+                    if (vr.isCeilingInclusive())
+                    {
+                        filters.add(
+                            new SimpleFilter(
+                                entry.getKey(),
+                                vr.getCeiling().toString(),
+                                SimpleFilter.LTE));
+                    }
+                    else
+                    {
+                        SimpleFilter not =
+                            new SimpleFilter(null, new ArrayList(), SimpleFilter.NOT);
+                        ((List) not.getValue()).add(
+                            new SimpleFilter(
+                                entry.getKey(),
+                                vr.getCeiling().toString(),
+                                SimpleFilter.GTE));
+                        filters.add(not);
+                    }
+                }
+            }
+            else
+            {
+                List<String> values = SimpleFilter.parseSubstring(entry.getValue().toString());
+                if (values.size() > 1)
+                {
+                    filters.add(
+                        new SimpleFilter(
+                            entry.getKey(),
+                            values,
+                            SimpleFilter.SUBSTRING));
+                }
+                else
+                {
+                    filters.add(
+                        new SimpleFilter(
+                            entry.getKey(),
+                            values.get(0),
+                            SimpleFilter.EQ));
+                }
+            }
+        }
+
+        SimpleFilter sf = null;
+
+        if (filters.size() == 1)
+        {
+            sf = filters.get(0);
+        }
+        else if (attrs.size() > 1)
+        {
+            sf = new SimpleFilter(null, filters, SimpleFilter.AND);
+        }
+        else if (filters.isEmpty())
+        {
+            sf = new SimpleFilter(null, null, SimpleFilter.MATCH_ALL);
+        }
+
+        return sf;
+    }
 }
\ No newline at end of file

Modified: felix/trunk/framework/src/main/java/org/apache/felix/framework/util/manifestparser/ManifestParser.java
URL: http://svn.apache.org/viewvc/felix/trunk/framework/src/main/java/org/apache/felix/framework/util/manifestparser/ManifestParser.java?rev=1148886&r1=1148885&r2=1148886&view=diff
==============================================================================
--- felix/trunk/framework/src/main/java/org/apache/felix/framework/util/manifestparser/ManifestParser.java (original)
+++ felix/trunk/framework/src/main/java/org/apache/felix/framework/util/manifestparser/ManifestParser.java Wed Jul 20 18:43:49 2011
@@ -441,7 +441,7 @@ public class ManifestParser
                 newAttrs.putAll(attrs);
 
                 // Create filter now so we can inject filter directive.
-                SimpleFilter sf = BundleRequirementImpl.convertToFilter(newAttrs);
+                SimpleFilter sf = SimpleFilter.convert(newAttrs);
 
                 // Inject filter directive.
 // TODO: OSGi R4.3 - Can we insert this on demand somehow?
@@ -1352,7 +1352,7 @@ public class ManifestParser
                     clauses.get(0).m_paths.get(0));
 
                 // Create filter now so we can inject filter directive.
-                SimpleFilter sf = BundleRequirementImpl.convertToFilter(newAttrs);
+                SimpleFilter sf = SimpleFilter.convert(newAttrs);
 
                 // Inject filter directive.
 // TODO: OSGi R4.3 - Can we insert this on demand somehow?
@@ -1450,7 +1450,7 @@ public class ManifestParser
                 newAttrs.putAll(attrs);
 
                 // Create filter now so we can inject filter directive.
-                SimpleFilter sf = BundleRequirementImpl.convertToFilter(newAttrs);
+                SimpleFilter sf = SimpleFilter.convert(newAttrs);
 
                 // Inject filter directive.
 // TODO: OSGi R4.3 - Can we insert this on demand somehow?

Modified: felix/trunk/framework/src/main/java/org/apache/felix/framework/wiring/BundleRequirementImpl.java
URL: http://svn.apache.org/viewvc/felix/trunk/framework/src/main/java/org/apache/felix/framework/wiring/BundleRequirementImpl.java?rev=1148886&r1=1148885&r2=1148886&view=diff
==============================================================================
--- felix/trunk/framework/src/main/java/org/apache/felix/framework/wiring/BundleRequirementImpl.java (original)
+++ felix/trunk/framework/src/main/java/org/apache/felix/framework/wiring/BundleRequirementImpl.java Wed Jul 20 18:43:49 2011
@@ -64,7 +64,7 @@ public class BundleRequirementImpl imple
         BundleRevision revision, String namespace,
         Map<String, String> dirs, Map<String, Object> attrs)
     {
-        this(revision, namespace, dirs, Collections.EMPTY_MAP, convertToFilter(attrs));
+        this(revision, namespace, dirs, Collections.EMPTY_MAP, SimpleFilter.convert(attrs));
     }
 
     public String getNamespace()
@@ -106,99 +106,4 @@ public class BundleRequirementImpl imple
     {
         return "[" + m_revision + "] " + m_namespace + "; " + getFilter().toString();
     }
-
-    private static SimpleFilter convertToFilter(Map<String, Object> attrs)
-    {
-        // Rather than building a filter string to be parsed into a SimpleFilter,
-        // we will just create the parsed SimpleFilter directly.
-
-        List<SimpleFilter> filters = new ArrayList<SimpleFilter>();
-
-        for (Entry<String, Object> entry : attrs.entrySet())
-        {
-            if (entry.getValue() instanceof VersionRange)
-            {
-                VersionRange vr = (VersionRange) entry.getValue();
-                if (vr.isFloorInclusive())
-                {
-                    filters.add(
-                        new SimpleFilter(
-                            entry.getKey(),
-                            vr.getFloor().toString(),
-                            SimpleFilter.GTE));
-                }
-                else
-                {
-                    SimpleFilter not =
-                        new SimpleFilter(null, new ArrayList(), SimpleFilter.NOT);
-                    ((List) not.getValue()).add(
-                        new SimpleFilter(
-                            entry.getKey(),
-                            vr.getFloor().toString(),
-                            SimpleFilter.LTE));
-                    filters.add(not);
-                }
-
-                if (vr.getCeiling() != null)
-                {
-                    if (vr.isCeilingInclusive())
-                    {
-                        filters.add(
-                            new SimpleFilter(
-                                entry.getKey(),
-                                vr.getCeiling().toString(),
-                                SimpleFilter.LTE));
-                    }
-                    else
-                    {
-                        SimpleFilter not =
-                            new SimpleFilter(null, new ArrayList(), SimpleFilter.NOT);
-                        ((List) not.getValue()).add(
-                            new SimpleFilter(
-                                entry.getKey(),
-                                vr.getCeiling().toString(),
-                                SimpleFilter.GTE));
-                        filters.add(not);
-                    }
-                }
-            }
-            else
-            {
-                List<String> values = SimpleFilter.parseSubstring(entry.getValue().toString());
-                if (values.size() > 1)
-                {
-                    filters.add(
-                        new SimpleFilter(
-                            entry.getKey(),
-                            values,
-                            SimpleFilter.SUBSTRING));
-                }
-                else
-                {
-                    filters.add(
-                        new SimpleFilter(
-                            entry.getKey(),
-                            values.get(0),
-                            SimpleFilter.EQ));
-                }
-            }
-        }
-
-        SimpleFilter sf = null;
-
-        if (filters.size() == 1)
-        {
-            sf = filters.get(0);
-        }
-        else if (attrs.size() > 1)
-        {
-            sf = new SimpleFilter(null, filters, SimpleFilter.AND);
-        }
-        else if (filters.isEmpty())
-        {
-            sf = new SimpleFilter(null, null, SimpleFilter.MATCH_ALL);
-        }
-
-        return sf;
-    }
 }
\ No newline at end of file