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/25 06:20:58 UTC

svn commit: r927273 - /felix/trunk/framework/src/main/java/org/apache/felix/framework/FilterImpl.java

Author: rickhall
Date: Thu Mar 25 05:20:58 2010
New Revision: 927273

URL: http://svn.apache.org/viewvc?rev=927273&view=rev
Log:
Cannot make a copy of case sensitive dictionaries. (FELIX-2039)

Modified:
    felix/trunk/framework/src/main/java/org/apache/felix/framework/FilterImpl.java

Modified: felix/trunk/framework/src/main/java/org/apache/felix/framework/FilterImpl.java
URL: http://svn.apache.org/viewvc/felix/trunk/framework/src/main/java/org/apache/felix/framework/FilterImpl.java?rev=927273&r1=927272&r2=927273&view=diff
==============================================================================
--- felix/trunk/framework/src/main/java/org/apache/felix/framework/FilterImpl.java (original)
+++ felix/trunk/framework/src/main/java/org/apache/felix/framework/FilterImpl.java Thu Mar 25 05:20:58 2010
@@ -83,27 +83,37 @@ public class FilterImpl implements Filte
     static class DictionaryCapability implements Capability
     {
         private final StringMap m_map;
+        private final Dictionary m_dict;
 
         public DictionaryCapability(Dictionary dict, boolean caseSensitive)
         {
-            m_map = new StringMap(caseSensitive);
-            if (dict != null)
+            if (!caseSensitive)
             {
-                Enumeration keys = dict.keys();
-                while (keys.hasMoreElements())
+                m_dict = null;
+                m_map = new StringMap(caseSensitive);
+                if (dict != null)
                 {
-                    Object key = keys.nextElement();
-                    if (m_map.get(key) == null)
+                    Enumeration keys = dict.keys();
+                    while (keys.hasMoreElements())
                     {
-                        m_map.put(key, new Attribute((String) key, dict.get(key), false));
-                    }
-                    else
-                    {
-                        throw new IllegalArgumentException(
-                            "Duplicate attribute: " + key.toString());
+                        Object key = keys.nextElement();
+                        if (m_map.get(key) == null)
+                        {
+                            m_map.put(key, new Attribute((String) key, dict.get(key), false));
+                        }
+                        else
+                        {
+                            throw new IllegalArgumentException(
+                                "Duplicate attribute: " + key.toString());
+                        }
                     }
                 }
             }
+            else
+            {
+                m_map = null;
+                m_dict = dict;
+            }
         }
 
         public Module getModule()
@@ -128,12 +138,18 @@ public class FilterImpl implements Filte
 
         public Attribute getAttribute(String name)
         {
-            return (Attribute) m_map.get(name);
+            if (m_map != null)
+            {
+                return (Attribute) m_map.get(name);
+            }
+
+            Object value = m_dict.get(name);
+            return (value == null) ? null : new Attribute(name, value, false);
         }
 
         public List<Attribute> getAttributes()
         {
-            return new ArrayList(m_map.values());
+            return new ArrayList();
         }
 
         public List<String> getUses()
@@ -144,25 +160,11 @@ public class FilterImpl implements Filte
 
     static class ServiceReferenceCapability implements Capability
     {
-        private final StringMap m_map;
+        private final ServiceReference m_sr;
 
         public ServiceReferenceCapability(ServiceReference sr)
         {
-            m_map = new StringMap(false);
-
-            String[] keys = sr.getPropertyKeys();
-            for (int i = 0; i < keys.length; i++)
-            {
-                if (m_map.get(keys[i]) == null)
-                {
-                    m_map.put(keys[i], new Attribute(keys[i], sr.getProperty(keys[i]), false));
-                }
-                else
-                {
-                    throw new IllegalArgumentException(
-                        "Duplicate attribute: " + keys[i].toString());
-                }
-            }
+            m_sr = sr;
         }
 
         public Module getModule()
@@ -187,12 +189,13 @@ public class FilterImpl implements Filte
 
         public Attribute getAttribute(String name)
         {
-            return (Attribute) m_map.get(name);
+            Object value = m_sr.getProperty(name);
+            return (value == null) ? null : new Attribute(name, value, false);
         }
 
         public List<Attribute> getAttributes()
         {
-            return new ArrayList(m_map.values());
+            return new ArrayList();
         }
 
         public List<String> getUses()