You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by rg...@apache.org on 2014/04/24 15:59:03 UTC

svn commit: r1589730 - /qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/AttributeValueConverter.java

Author: rgodfrey
Date: Thu Apr 24 13:59:02 2014
New Revision: 1589730

URL: http://svn.apache.org/r1589730
Log:
QPID-5721 : [Java Broker] allow interpolation and parsing of string values as maps/list/collections if the String is of the correct JSON form

Modified:
    qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/AttributeValueConverter.java

Modified: qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/AttributeValueConverter.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/AttributeValueConverter.java?rev=1589730&r1=1589729&r2=1589730&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/AttributeValueConverter.java (original)
+++ qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/AttributeValueConverter.java Thu Apr 24 13:59:02 2014
@@ -20,6 +20,7 @@
  */
 package org.apache.qpid.server.model;
 
+import java.io.IOException;
 import java.lang.reflect.ParameterizedType;
 import java.lang.reflect.Type;
 import java.lang.reflect.TypeVariable;
@@ -34,6 +35,8 @@ import java.util.Map;
 import java.util.Set;
 import java.util.UUID;
 
+import org.codehaus.jackson.map.ObjectMapper;
+
 import org.apache.qpid.server.util.ServerScopedRuntimeException;
 
 abstract class AttributeValueConverter<T>
@@ -191,6 +194,19 @@ abstract class AttributeValueConverter<T
             {
                 return convert(Arrays.asList((Object[]) value),object);
             }
+            else if(value instanceof String)
+            {
+                String interpolated = AbstractConfiguredObject.interpolate(object, (String) value);
+                ObjectMapper objectMapper = new ObjectMapper();
+                try
+                {
+                    return objectMapper.readValue(interpolated, List.class);
+                }
+                catch (IOException e)
+                {
+                    throw new IllegalArgumentException("Cannot convert String " + value + " to a List");
+                }
+            }
             else if(value == null)
             {
                 return null;
@@ -215,6 +231,19 @@ abstract class AttributeValueConverter<T
             {
                 return convert(new HashSet(Arrays.asList((Object[])value)),object);
             }
+            else if(value instanceof String)
+            {
+                String interpolated = AbstractConfiguredObject.interpolate(object, (String) value);
+                ObjectMapper objectMapper = new ObjectMapper();
+                try
+                {
+                    return objectMapper.readValue(interpolated, Set.class);
+                }
+                catch (IOException e)
+                {
+                    throw new IllegalArgumentException("Cannot convert String " + value + " to a List");
+                }
+            }
             else if(value == null)
             {
                 return null;
@@ -239,6 +268,19 @@ abstract class AttributeValueConverter<T
             {
                 return convert(Arrays.asList((Object[]) value), object);
             }
+            else if(value instanceof String)
+            {
+                String interpolated = AbstractConfiguredObject.interpolate(object, (String) value);
+                ObjectMapper objectMapper = new ObjectMapper();
+                try
+                {
+                    return objectMapper.readValue(interpolated, List.class);
+                }
+                catch (IOException e)
+                {
+                    throw new IllegalArgumentException("Cannot convert String " + value + " to a Collection");
+                }
+            }
             else if(value == null)
             {
                 return null;
@@ -249,6 +291,7 @@ abstract class AttributeValueConverter<T
             }
         }
     };
+
     static final AttributeValueConverter<Map> MAP_CONVERTER = new AttributeValueConverter<Map>()
     {
         @Override
@@ -271,6 +314,19 @@ abstract class AttributeValueConverter<T
             {
                 return null;
             }
+            else if(value instanceof String)
+            {
+                String interpolated = AbstractConfiguredObject.interpolate(object, (String) value);
+                ObjectMapper objectMapper = new ObjectMapper();
+                try
+                {
+                    return objectMapper.readValue(interpolated, Map.class);
+                }
+                catch (IOException e)
+                {
+                    throw new IllegalArgumentException("Cannot convert String " + value + " to a Map");
+                }
+            }
             else
             {
                 throw new IllegalArgumentException("Cannot convert type " + value.getClass() + " to a Map");
@@ -411,6 +467,19 @@ abstract class AttributeValueConverter<T
             }
             else
             {
+                if(value instanceof String)
+                {
+                    String interpolated = AbstractConfiguredObject.interpolate(object, (String) value);
+                    ObjectMapper objectMapper = new ObjectMapper();
+                    try
+                    {
+                        return convert(objectMapper.readValue(interpolated, List.class), object);
+                    }
+                    catch (IOException e)
+                    {
+                        // fall through to the non-JSON single object case
+                    }
+                }
                 return Collections.unmodifiableList(Collections.singletonList(_memberConverter.convert(value, object)));
             }
         }
@@ -470,6 +539,19 @@ abstract class AttributeValueConverter<T
             }
             else
             {
+                if(value instanceof String)
+                {
+                    String interpolated = AbstractConfiguredObject.interpolate(object, (String) value);
+                    ObjectMapper objectMapper = new ObjectMapper();
+                    try
+                    {
+                        return convert(objectMapper.readValue(interpolated, Set.class), object);
+                    }
+                    catch (IOException e)
+                    {
+                        // fall through to the non-JSON single object case
+                    }
+                }
                 return Collections.unmodifiableSet(Collections.singleton(_memberConverter.convert(value, object)));
             }
         }
@@ -529,6 +611,19 @@ abstract class AttributeValueConverter<T
             }
             else
             {
+                if(value instanceof String)
+                {
+                    String interpolated = AbstractConfiguredObject.interpolate(object, (String) value);
+                    ObjectMapper objectMapper = new ObjectMapper();
+                    try
+                    {
+                        return convert(objectMapper.readValue(interpolated, List.class), object);
+                    }
+                    catch (IOException e)
+                    {
+                        // fall through to the non-JSON single object case
+                    }
+                }
                 return Collections.unmodifiableCollection(Collections.singletonList(_memberConverter.convert(value, object)));
             }
         }
@@ -623,6 +718,5 @@ abstract class AttributeValueConverter<T
                 throw new IllegalArgumentException("Cannot convert type " + value.getClass() + " to a " + _klazz.getName());
             }
         }
-
     }
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org