Author: rajith
Date: Mon Mar  5 18:47:17 2012
New Revision: 1297160

URL: http://svn.apache.org/viewvc?rev=1297160&view=rev
Log:
QPID-3401 To help with the extracting information from addressing,
Added a getMap() and getList()method to the Accessor interface.
Added a NestedMapAccessor which will traverse nested map in order to
find a property.

Modified:
    
qpid/branches/address-refactor2/qpid/java/common/src/main/java/org/apache/qpid/configuration/Accessor.java

Modified: 
qpid/branches/address-refactor2/qpid/java/common/src/main/java/org/apache/qpid/configuration/Accessor.java
URL: 
http://svn.apache.org/viewvc/qpid/branches/address-refactor2/qpid/java/common/src/main/java/org/apache/qpid/configuration/Accessor.java?rev=1297160&r1=1297159&r2=1297160&view=diff
==============================================================================
--- 
qpid/branches/address-refactor2/qpid/java/common/src/main/java/org/apache/qpid/configuration/Accessor.java
 (original)
+++ 
qpid/branches/address-refactor2/qpid/java/common/src/main/java/org/apache/qpid/configuration/Accessor.java
 Mon Mar  5 18:47:17 2012
@@ -24,6 +24,7 @@ import java.io.FileInputStream;
 import java.io.FileNotFoundException;
 import java.io.IOException;
 import java.util.Arrays;
+import java.util.Collections;
 import java.util.List;
 import java.util.Map;
 import java.util.Properties;
@@ -34,6 +35,8 @@ public interface Accessor
     public Integer getInt(String name);
     public Long getLong(String name);
     public String getString(String name);
+    public Map<String,Object> getMap(String name);
+    public List<Object> getList(String name);
     
     static class SystemPropertyAccessor implements Accessor
     {
@@ -56,6 +59,10 @@ public interface Accessor
         {
             return System.getProperty(name);
         }
+
+        public Map<String,Object> getMap(String name){ throw new 
UnsupportedOperationException("Not supported by system properties"); }
+
+        public List<Object> getList(String name){ throw new 
UnsupportedOperationException("Not supported by system properties"); }
     }
     
     static class MapAccessor implements Accessor
@@ -147,6 +154,30 @@ public interface Accessor
                 return null;
             }
         }
+
+        public Map<String,Object> getMap(String name)
+        {
+            if (source != null && source.containsKey(name) && source.get(name) 
instanceof Map)
+            {
+                return (Map<String,Object>)source.get(name);
+            }
+            else
+            {
+                return null;
+            }
+        }
+
+        public List<Object> getList(String name)
+        {
+            if (source != null && source.containsKey(name) && source.get(name) 
instanceof List)
+            {
+                return (List<Object>)source.get(name);
+            }
+            else
+            {
+                return null;
+            }
+        }
     }  
     
     static class PropertyFileAccessor extends MapAccessor
@@ -167,7 +198,11 @@ public interface Accessor
             setSource(props);
         }
 
+        @Override
+        public Map getMap(String name){ throw new 
UnsupportedOperationException("Not supported by property file"); }
 
+        @Override
+        public List getList(String name){ throw new 
UnsupportedOperationException("Not supported by property file"); }
     }
     
     static class CombinedAccessor implements Accessor
@@ -226,6 +261,30 @@ public interface Accessor
             }
             return null;
         }
+
+        public Map<String,Object> getMap(String name)
+        {
+            for (Accessor accessor: accessors)
+            {
+                if (accessor.getMap(name) != null && accessor.getMap(name) 
instanceof Map)
+                {
+                    return accessor.getMap(name);
+                }
+            }
+            return null;
+        }
+
+        public List<Object> getList(String name)
+        {
+            for (Accessor accessor: accessors)
+            {
+                if (accessor.getMap(name) != null && accessor.getList(name) 
instanceof List)
+                {
+                    return accessor.getList(name);
+                }
+            }
+            return null;
+        }
     }
     
     static class ValidationAccessor implements Accessor
@@ -274,5 +333,96 @@ public interface Accessor
             }
             return v;
         }
+
+        public Map<String,Object> getMap(String name){ throw new 
UnsupportedOperationException("Validator interface does not support maps"); }
+
+        public List<Object> getList(String name){ throw new 
UnsupportedOperationException("Validator interface does not support lists"); }
     }
+
+    /* Property names as passed in the form
+    * level_1_prop/level_2_prop/.../level_n_prop
+    * All property name upto level_n-1_prop should return
+    * a map or null
+    */
+   static class NestedMapAccessor implements Accessor
+   {
+       protected Map<Object,Object> baseMap;
+
+       public NestedMapAccessor(Map<Object,Object> map)
+       {
+           baseMap = map;
+       }
+
+       private String getKey(String name)
+       {
+           if (name.lastIndexOf("/") > -1)
+           {
+               return name.substring(name.lastIndexOf("/")+1);
+           }
+           else
+           {
+               return name;
+           }
+       }
+
+       private MapAccessor mapIterator(String name)
+       {
+           if (name.lastIndexOf("/") == -1)
+           {
+               return new MapAccessor(baseMap);
+           }
+
+           String[] paths = name.substring(0,name.lastIndexOf("/")).split("/");
+           Map map = baseMap == null ? Collections.EMPTY_MAP : baseMap;
+
+           for (String path:paths)
+           {
+
+               Object obj = map.get(path);
+               if (obj == null)
+               {
+                   return new MapAccessor(null);
+               }
+               else if (obj instanceof Map)
+               {
+                   map = (Map)obj;
+               }
+               else
+               {
+                   throw new IllegalArgumentException(path + " doesn't 
retrieve another map");
+               }
+           }
+           return new MapAccessor(map);
+       }
+
+       public Boolean getBoolean(String name)
+       {
+           return mapIterator(name).getBoolean(getKey(name));
+       }
+
+       public Integer getInt(String name)
+       {
+           return mapIterator(name).getInt(getKey(name));
+       }
+
+       public Long getLong(String name)
+       {
+           return mapIterator(name).getLong(getKey(name));
+       }
+
+       public String getString(String name)
+       {
+           return mapIterator(name).getString(getKey(name));
+       }
+
+       public Map<String,Object> getMap(String name)
+       {
+           return mapIterator(name).getMap(getKey(name));
+       }
+
+       public List<Object> getList(String name)
+       {
+           return mapIterator(name).getList(getKey(name));
+       }
+   }
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to